Merge branch 'tb/reverse-midx'

The code that gives an error message in "git multi-pack-index" when
no subcommand is given tried to print a NULL pointer as a strong,
which has been corrected.

* tb/reverse-midx:
  multi-pack-index: fix potential segfault without sub-command
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 5f2f884..47876a4 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -81,44 +81,21 @@
     if: needs.ci-config.outputs.enabled == 'yes'
     runs-on: windows-latest
     steps:
-    - uses: actions/checkout@v1
-    - name: download git-sdk-64-minimal
-      shell: bash
-      run: |
-        ## Get artifact
-        urlbase=https://dev.azure.com/git-for-windows/git/_apis/build/builds
-        id=$(curl "$urlbase?definitions=22&statusFilter=completed&resultFilter=succeeded&\$top=1" |
-          jq -r ".value[] | .id")
-        download_url="$(curl "$urlbase/$id/artifacts" |
-          jq -r '.value[] | select(.name == "git-sdk-64-minimal").resource.downloadUrl')"
-        curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 240 \
-          -o artifacts.zip "$download_url"
-
-        ## Unzip and remove the artifact
-        unzip artifacts.zip
-        rm artifacts.zip
+    - uses: actions/checkout@v2
+    - uses: git-for-windows/setup-git-for-windows-sdk@v1
     - name: build
-      shell: powershell
+      shell: bash
       env:
         HOME: ${{runner.workspace}}
-        MSYSTEM: MINGW64
         NO_PERL: 1
-      run: |
-        & .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
-        printf '%s\n' /git-sdk-64-minimal/ >>.git/info/exclude
-
-          ci/make-test-artifacts.sh artifacts
-        "@
-    - name: upload build artifacts
-      uses: actions/upload-artifact@v1
+      run: 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
+      uses: actions/upload-artifact@v2
       with:
         name: windows-artifacts
         path: artifacts
-    - name: upload git-sdk-64-minimal
-      uses: actions/upload-artifact@v1
-      with:
-        name: git-sdk-64-minimal
-        path: git-sdk-64-minimal
   windows-test:
     runs-on: windows-latest
     needs: [windows-build]
@@ -127,37 +104,25 @@
       matrix:
         nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
     steps:
-    - uses: actions/checkout@v1
-    - name: download build artifacts
-      uses: actions/download-artifact@v1
+    - name: download tracked files and build artifacts
+      uses: actions/download-artifact@v2
       with:
         name: windows-artifacts
         path: ${{github.workspace}}
-    - name: extract build artifacts
+    - name: extract tracked files and build artifacts
       shell: bash
-      run: tar xf artifacts.tar.gz
-    - name: download git-sdk-64-minimal
-      uses: actions/download-artifact@v1
-      with:
-        name: git-sdk-64-minimal
-        path: ${{github.workspace}}/git-sdk-64-minimal/
+      run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz
+    - uses: git-for-windows/setup-git-for-windows-sdk@v1
     - name: test
-      shell: powershell
-      run: |
-        & .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
-          # Let Git ignore the SDK
-          printf '%s\n' /git-sdk-64-minimal/ >>.git/info/exclude
-
-          ci/run-test-slice.sh ${{matrix.nr}} 10
-        "@
+      shell: bash
+      run: ci/run-test-slice.sh ${{matrix.nr}} 10
     - name: ci/print-test-failures.sh
       if: failure()
-      shell: powershell
-      run: |
-        & .\git-sdk-64-minimal\usr\bin\bash.exe -lc ci/print-test-failures.sh
+      shell: bash
+      run: ci/print-test-failures.sh
     - name: Upload failed tests' directories
       if: failure() && env.FAILED_TEST_ARTIFACTS != ''
-      uses: actions/upload-artifact@v1
+      uses: actions/upload-artifact@v2
       with:
         name: failed-tests-windows
         path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -165,27 +130,17 @@
     needs: ci-config
     if: needs.ci-config.outputs.enabled == 'yes'
     env:
-      MSYSTEM: MINGW64
       NO_PERL: 1
       GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
     runs-on: windows-latest
     steps:
-    - uses: actions/checkout@v1
-    - name: download git-sdk-64-minimal
-      shell: bash
-      run: |
-        ## Get artifact
-        urlbase=https://dev.azure.com/git-for-windows/git/_apis/build/builds
-        id=$(curl "$urlbase?definitions=22&statusFilter=completed&resultFilter=succeeded&\$top=1" |
-          jq -r ".value[] | .id")
-        download_url="$(curl "$urlbase/$id/artifacts" |
-          jq -r '.value[] | select(.name == "git-sdk-64-minimal").resource.downloadUrl')"
-        curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 240 \
-          -o artifacts.zip "$download_url"
-
-        ## Unzip and remove the artifact
-        unzip artifacts.zip
-        rm artifacts.zip
+    - uses: actions/checkout@v2
+    - uses: git-for-windows/setup-git-for-windows-sdk@v1
+    - name: initialize vcpkg
+      uses: actions/checkout@v2
+      with:
+        repository: 'microsoft/vcpkg'
+        path: 'compat/vcbuild/vcpkg'
     - name: download vcpkg artifacts
       shell: powershell
       run: |
@@ -198,75 +153,60 @@
     - name: add msbuild to PATH
       uses: microsoft/setup-msbuild@v1
     - name: copy dlls to root
-      shell: powershell
-      run: |
-        & compat\vcbuild\vcpkg_copy_dlls.bat release
-        if (!$?) { exit(1) }
+      shell: cmd
+      run: compat\vcbuild\vcpkg_copy_dlls.bat release
     - name: generate Visual Studio solution
       shell: bash
       run: |
         cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows \
-        -DMSGFMT_EXE=`pwd`/git-sdk-64-minimal/mingw64/bin/msgfmt.exe -DPERL_TESTS=OFF -DPYTHON_TESTS=OFF -DCURL_NO_CURL_CMAKE=ON
+        -DNO_GETTEXT=YesPlease -DPERL_TESTS=OFF -DPYTHON_TESTS=OFF -DCURL_NO_CURL_CMAKE=ON
     - name: MSBuild
       run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142
     - name: bundle artifact tar
-      shell: powershell
+      shell: bash
       env:
         MSVC: 1
         VCPKG_ROOT: ${{github.workspace}}\compat\vcbuild\vcpkg
       run: |
-        & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
-          mkdir -p artifacts &&
-          eval \"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts 2>&1 | grep ^tar)\"
-        "@
-    - name: upload build artifacts
-      uses: actions/upload-artifact@v1
+        mkdir -p artifacts &&
+        eval "$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts NO_GETTEXT=YesPlease 2>&1 | grep ^tar)"
+    - name: zip up tracked files
+      run: git archive -o artifacts/tracked.tar.gz HEAD
+    - name: upload tracked files and build artifacts
+      uses: actions/upload-artifact@v2
       with:
         name: vs-artifacts
         path: artifacts
   vs-test:
     runs-on: windows-latest
-    needs: [vs-build, windows-build]
+    needs: vs-build
     strategy:
       fail-fast: false
       matrix:
         nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
     steps:
-    - uses: actions/checkout@v1
-    - name: download git-sdk-64-minimal
-      uses: actions/download-artifact@v1
-      with:
-        name: git-sdk-64-minimal
-        path: ${{github.workspace}}/git-sdk-64-minimal/
-    - name: download build artifacts
-      uses: actions/download-artifact@v1
+    - uses: git-for-windows/setup-git-for-windows-sdk@v1
+    - name: download tracked files and build artifacts
+      uses: actions/download-artifact@v2
       with:
         name: vs-artifacts
         path: ${{github.workspace}}
-    - name: extract build artifacts
+    - name: extract tracked files and build artifacts
       shell: bash
-      run: tar xf artifacts.tar.gz
+      run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz
     - name: test
-      shell: powershell
+      shell: bash
       env:
-        MSYSTEM: MINGW64
         NO_SVN_TESTS: 1
         GIT_TEST_SKIP_REBASE_P: 1
-      run: |
-        & .\git-sdk-64-minimal\usr\bin\bash.exe -lc @"
-          # Let Git ignore the SDK and the test-cache
-          printf '%s\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude
-
-          ci/run-test-slice.sh ${{matrix.nr}} 10
-        "@
+      run: ci/run-test-slice.sh ${{matrix.nr}} 10
     - name: ci/print-test-failures.sh
       if: failure()
-      shell: powershell
-      run: |
-        & .\git-sdk-64-minimal\usr\bin\bash.exe -lc ci/print-test-failures.sh
+      shell: bash
+      run: ci/print-test-failures.sh
     - name: Upload failed tests' directories
       if: failure() && env.FAILED_TEST_ARTIFACTS != ''
-      uses: actions/upload-artifact@v1
+      uses: actions/upload-artifact@v2
       with:
         name: failed-tests-windows
         path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -297,14 +237,14 @@
       jobname: ${{matrix.vector.jobname}}
     runs-on: ${{matrix.vector.pool}}
     steps:
-    - uses: actions/checkout@v1
+    - uses: actions/checkout@v2
     - run: ci/install-dependencies.sh
     - run: ci/run-build-and-tests.sh
     - run: ci/print-test-failures.sh
       if: failure()
     - name: Upload failed tests' directories
       if: failure() && env.FAILED_TEST_ARTIFACTS != ''
-      uses: actions/upload-artifact@v1
+      uses: actions/upload-artifact@v2
       with:
         name: failed-tests-${{matrix.vector.jobname}}
         path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -331,7 +271,7 @@
       if: failure()
     - name: Upload failed tests' directories
       if: failure() && env.FAILED_TEST_ARTIFACTS != ''
-      uses: actions/upload-artifact@v1
+      uses: actions/upload-artifact@v2
       with:
         name: failed-tests-${{matrix.vector.jobname}}
         path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -342,9 +282,29 @@
       jobname: StaticAnalysis
     runs-on: ubuntu-18.04
     steps:
-    - uses: actions/checkout@v1
+    - uses: actions/checkout@v2
     - run: ci/install-dependencies.sh
     - run: ci/run-static-analysis.sh
+  sparse:
+    needs: ci-config
+    if: needs.ci-config.outputs.enabled == 'yes'
+    env:
+      jobname: sparse
+    runs-on: ubuntu-20.04
+    steps:
+    - name: Download a current `sparse` package
+      # Ubuntu's `sparse` version is too old for us
+      uses: git-for-windows/get-azure-pipelines-artifact@v0
+      with:
+        repository: git/git
+        definitionId: 10
+        artifact: sparse-20.04
+    - name: Install the current `sparse` package
+      run: sudo dpkg -i sparse-20.04/sparse_*.deb
+    - uses: actions/checkout@v2
+    - name: Install other dependencies
+      run: ci/install-dependencies.sh
+    - run: make sparse
   documentation:
     needs: ci-config
     if: needs.ci-config.outputs.enabled == 'yes'
@@ -352,6 +312,6 @@
       jobname: Documentation
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v1
+    - uses: actions/checkout@v2
     - run: ci/install-dependencies.sh
     - run: ci/test-documentation.sh
diff --git a/.gitignore b/.gitignore
index 3dcdb6b..311841f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,7 @@
 /git-check-mailmap
 /git-check-ref-format
 /git-checkout
+/git-checkout--worker
 /git-checkout-index
 /git-cherry
 /git-cherry-pick
@@ -162,6 +163,7 @@
 /git-stripspace
 /git-submodule
 /git-submodule--helper
+/git-subtree
 /git-svn
 /git-switch
 /git-symbolic-ref
diff --git a/.mailmap b/.mailmap
index bde7aba..9c6a446 100644
--- a/.mailmap
+++ b/.mailmap
@@ -220,6 +220,7 @@
 Philippe Bruhat <book@cpan.org>
 Ralf Thielow <ralf.thielow@gmail.com> <ralf.thielow@googlemail.com>
 Ramsay Jones <ramsay@ramsayjones.plus.com> <ramsay@ramsay1.demon.co.uk>
+Ramkumar Ramachandra <r@artagnon.com> <artagnon@gmail.com>
 Randall S. Becker <randall.becker@nexbridge.ca> <rsbecker@nexbridge.com>
 René Scharfe <l.s.r@web.de> <rene.scharfe@lsrfire.ath.cx>
 René Scharfe <l.s.r@web.de> Rene Scharfe
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index 45465bc..711cb91 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -175,6 +175,11 @@
 
    does not have such a problem.
 
+ - Even though "local" is not part of POSIX, we make heavy use of it
+   in our test suite.  We do not use it in scripted Porcelains, and
+   hopefully nobody starts using "local" before they are reimplemented
+   in C ;-)
+
 
 For C programs:
 
@@ -498,7 +503,12 @@
 
  - Do not end error messages with a full stop.
 
- - Do not capitalize ("unable to open %s", not "Unable to open %s")
+ - Do not capitalize the first word, only because it is the first word
+   in the message ("unable to open %s", not "Unable to open %s").  But
+   "SHA-3 not supported" is fine, because the reason the first word is
+   capitalized is not because it is at the beginning of the sentence,
+   but because the word would be spelled in capital letters even when
+   it appeared in the middle of the sentence.
 
  - Say what the error is first ("cannot open %s", not "%s: cannot open")
 
@@ -541,6 +551,51 @@
  documentation, please see the documentation-related advice in the
  Documentation/SubmittingPatches file).
 
+ In order to ensure the documentation is inclusive, avoid assuming
+ that an unspecified example person is male or female, and think
+ twice before using "he", "him", "she", or "her".  Here are some
+ tips to avoid use of gendered pronouns:
+
+  - Prefer succinctness and matter-of-factly describing functionality
+    in the abstract.  E.g.
+
+     --short:: Emit output in the short-format.
+
+    and avoid something like these overly verbose alternatives:
+
+     --short:: Use this to emit output in the short-format.
+     --short:: You can use this to get output in the short-format.
+     --short:: A user who prefers shorter output could....
+     --short:: Should a person and/or program want shorter output, he
+               she/they/it can...
+
+    This practice often eliminates the need to involve human actors in
+    your description, but it is a good practice regardless of the
+    avoidance of gendered pronouns.
+
+  - When it becomes awkward to stick to this style, prefer "you" when
+    addressing the the hypothetical user, and possibly "we" when
+    discussing how the program might react to the user.  E.g.
+
+      You can use this option instead of --xyz, but we might remove
+      support for it in future versions.
+
+    while keeping in mind that you can probably be less verbose, e.g.
+
+      Use this instead of --xyz. This option might be removed in future
+      versions.
+
+  - If you still need to refer to an example person that is
+    third-person singular, you may resort to "singular they" to avoid
+    "he/she/him/her", e.g.
+
+      A contributor asks their upstream to pull from them.
+
+    Note that this sounds ungrammatical and unnatural to those who
+    learned that "they" is only used for third-person plural, e.g.
+    those who learn English as a second language in some parts of the
+    world.
+
  Every user-visible change should be reflected in the documentation.
  The same general rule as for code applies -- imitate the existing
  conventions.
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 81d1bf7..f5605b7 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -2,6 +2,8 @@
 MAN1_TXT =
 MAN5_TXT =
 MAN7_TXT =
+HOWTO_TXT =
+DOC_DEP_TXT =
 TECH_DOCS =
 ARTICLES =
 SP_ARTICLES =
@@ -42,6 +44,11 @@
 MAN7_TXT += gittutorial.txt
 MAN7_TXT += gitworkflows.txt
 
+HOWTO_TXT += $(wildcard howto/*.txt)
+
+DOC_DEP_TXT += $(wildcard *.txt)
+DOC_DEP_TXT += $(wildcard config/*.txt)
+
 ifdef MAN_FILTER
 MAN_TXT = $(filter $(MAN_FILTER),$(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT))
 else
@@ -76,6 +83,7 @@
 SP_ARTICLES += howto/rebase-from-internal-branch
 SP_ARTICLES += howto/keep-canonical-history-correct
 SP_ARTICLES += howto/maintain-git
+SP_ARTICLES += howto/coordinate-embargoed-releases
 API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt)))
 SP_ARTICLES += $(API_DOCS)
 
@@ -90,6 +98,7 @@
 TECH_DOCS += technical/pack-format
 TECH_DOCS += technical/pack-heuristics
 TECH_DOCS += technical/pack-protocol
+TECH_DOCS += technical/parallel-checkout
 TECH_DOCS += technical/partial-clone
 TECH_DOCS += technical/protocol-capabilities
 TECH_DOCS += technical/protocol-common
@@ -130,6 +139,7 @@
 ASCIIDOC_COMMON = $(ASCIIDOC) $(ASCIIDOC_EXTRA) $(ASCIIDOC_CONF) \
 		-amanversion=$(GIT_VERSION) \
 		-amanmanual='Git Manual' -amansource='Git'
+ASCIIDOC_DEPS = asciidoc.conf GIT-ASCIIDOCFLAGS
 TXT_TO_HTML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_HTML)
 TXT_TO_XML = $(ASCIIDOC_COMMON) -b $(ASCIIDOC_DOCBOOK)
 MANPAGE_XSL = manpage-normal.xsl
@@ -184,6 +194,7 @@
 ASCIIDOC_EXTRA += -acompat-mode -atabsize=8
 ASCIIDOC_EXTRA += -I. -rasciidoctor-extensions
 ASCIIDOC_EXTRA += -alitdd='&\#x2d;&\#x2d;'
+ASCIIDOC_DEPS = asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
 DBLATEX_COMMON =
 XMLTO_EXTRA += --skip-validation
 XMLTO_EXTRA += -x manpage.xsl
@@ -284,10 +295,8 @@
 	mergetools-list.made $(mergetools_txt) \
 	cmd-list.made $(cmds_txt)
 
-doc.dep : $(docdep_prereqs) $(wildcard *.txt) $(wildcard config/*.txt) build-docdep.perl
-	$(QUIET_GEN)$(RM) $@+ $@ && \
-	$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
-	mv $@+ $@
+doc.dep : $(docdep_prereqs) $(DOC_DEP_TXT) build-docdep.perl
+	$(QUIET_GEN)$(PERL_PATH) ./build-docdep.perl >$@ $(QUIET_STDERR)
 
 ifneq ($(MAKECMDGOALS),clean)
 -include doc.dep
@@ -307,8 +316,7 @@
 $(cmds_txt): cmd-list.made
 
 cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
-	$(QUIET_GEN)$(RM) $@ && \
-	$(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \
+	$(QUIET_GEN)$(PERL_PATH) ./cmd-list.perl ../command-list.txt $(cmds_txt) $(QUIET_STDERR) && \
 	date >$@
 
 mergetools_txt = mergetools-diff.txt mergetools-merge.txt
@@ -316,7 +324,7 @@
 $(mergetools_txt): mergetools-list.made
 
 mergetools-list.made: ../git-mergetool--lib.sh $(wildcard ../mergetools/*)
-	$(QUIET_GEN)$(RM) $@ && \
+	$(QUIET_GEN) \
 	$(SHELL_PATH) -c 'MERGE_TOOLS_DIR=../mergetools && \
 		. ../git-mergetool--lib.sh && \
 		show_tool_names can_diff "* " || :' >mergetools-diff.txt && \
@@ -345,32 +353,23 @@
 	$(RM) manpage-base-url.xsl
 	$(RM) GIT-ASCIIDOCFLAGS
 
-$(MAN_HTML): %.html : %.txt asciidoc.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
-	$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
-	$(TXT_TO_HTML) -d manpage -o $@+ $< && \
-	mv $@+ $@
+$(MAN_HTML): %.html : %.txt $(ASCIIDOC_DEPS)
+	$(QUIET_ASCIIDOC)$(TXT_TO_HTML) -d manpage -o $@ $<
 
-$(OBSOLETE_HTML): %.html : %.txto asciidoc.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
-	$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
-	$(TXT_TO_HTML) -o $@+ $< && \
-	mv $@+ $@
+$(OBSOLETE_HTML): %.html : %.txto $(ASCIIDOC_DEPS)
+	$(QUIET_ASCIIDOC)$(TXT_TO_HTML) -o $@ $<
 
 manpage-base-url.xsl: manpage-base-url.xsl.in
 	$(QUIET_GEN)sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@
 
 %.1 %.5 %.7 : %.xml manpage-base-url.xsl $(wildcard manpage*.xsl)
-	$(QUIET_XMLTO)$(RM) $@ && \
-	$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
+	$(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
 
-%.xml : %.txt asciidoc.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
-	$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
-	$(TXT_TO_XML) -d manpage -o $@+ $< && \
-	mv $@+ $@
+%.xml : %.txt $(ASCIIDOC_DEPS)
+	$(QUIET_ASCIIDOC)$(TXT_TO_XML) -d manpage -o $@ $<
 
 user-manual.xml: user-manual.txt user-manual.conf asciidoctor-extensions.rb GIT-ASCIIDOCFLAGS
-	$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
-	$(TXT_TO_XML) -d book -o $@+ $< && \
-	mv $@+ $@
+	$(QUIET_ASCIIDOC)$(TXT_TO_XML) -d book -o $@ $<
 
 technical/api-index.txt: technical/api-index-skel.txt \
 	technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
@@ -391,46 +390,35 @@
 XSLTOPTS += --param generate.consistent.ids 1
 
 user-manual.html: user-manual.xml $(XSLT)
-	$(QUIET_XSLTPROC)$(RM) $@+ $@ && \
-	xsltproc $(XSLTOPTS) -o $@+ $(XSLT) $< && \
-	mv $@+ $@
+	$(QUIET_XSLTPROC)xsltproc $(XSLTOPTS) -o $@ $(XSLT) $<
 
 git.info: user-manual.texi
 	$(QUIET_MAKEINFO)$(MAKEINFO) --no-split -o $@ user-manual.texi
 
 user-manual.texi: user-manual.xml
-	$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
-	$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@++ && \
-	$(PERL_PATH) fix-texi.perl <$@++ >$@+ && \
-	rm $@++ && \
-	mv $@+ $@
+	$(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@+ && \
+	$(PERL_PATH) fix-texi.perl <$@+ >$@ && \
+	$(RM) $@+
 
 user-manual.pdf: user-manual.xml
-	$(QUIET_DBLATEX)$(RM) $@+ $@ && \
-	$(DBLATEX) -o $@+ $(DBLATEX_COMMON) $< && \
-	mv $@+ $@
+	$(QUIET_DBLATEX)$(DBLATEX) -o $@ $(DBLATEX_COMMON) $<
 
 gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
-	$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
+	$(QUIET_DB2TEXI) \
 	($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \
 		$(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \
-		rm $(xml)+ &&) true) > $@++ && \
-	$(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \
-	rm $@++ && \
-	mv $@+ $@
+		$(RM) $(xml)+ &&) true) > $@+ && \
+	$(PERL_PATH) cat-texi.perl $@ <$@+ >$@ && \
+	$(RM) $@+
 
 gitman.info: gitman.texi
 	$(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $*.texi
 
 $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
-	$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
-	$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ && \
-	mv $@+ $@
+	$(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@
 
-howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
-	$(QUIET_GEN)$(RM) $@+ $@ && \
-	'$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard howto/*.txt)) >$@+ && \
-	mv $@+ $@
+howto-index.txt: howto-index.sh $(HOWTO_TXT)
+	$(QUIET_GEN)'$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(HOWTO_TXT)) >$@
 
 $(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt
 	$(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt
@@ -438,11 +426,10 @@
 WEBDOC_DEST = /pub/software/scm/git/docs
 
 howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
-$(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt GIT-ASCIIDOCFLAGS
-	$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
+$(patsubst %.txt,%.html,$(HOWTO_TXT)): %.html : %.txt GIT-ASCIIDOCFLAGS
+	$(QUIET_ASCIIDOC) \
 	sed -e '1,/^$$/d' $< | \
-	$(TXT_TO_HTML) - >$@+ && \
-	mv $@+ $@
+	$(TXT_TO_HTML) - >$@
 
 install-webdoc : html
 	'$(SHELL_PATH_SQ)' ./install-webdoc.sh $(WEBDOC_DEST)
@@ -470,11 +457,20 @@
 	@for i in $(MAN1_TXT); do echo $$i; done
 
 lint-docs::
-	$(QUIET_LINT)$(PERL_PATH) lint-gitlink.perl
+	$(QUIET_LINT)$(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);
 
 ifeq ($(wildcard po/Makefile),po/Makefile)
 doc-l10n install-l10n::
 	$(MAKE) -C po $@
 endif
 
+# Delete the target file on error
+.DELETE_ON_ERROR:
+
 .PHONY: FORCE
diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.txt
index af0a9da..015cf24 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.txt
@@ -47,7 +47,7 @@
 are present on the list. In order to avoid search indexers, group membership is
 required to view messages; anyone can join and no approval is required.
 
-==== https://webchat.freenode.net/#git-devel[#git-devel] on Freenode
+==== https://web.libera.chat/#git-devel[#git-devel] on Libera Chat
 
 This IRC channel is for conversations between Git contributors. If someone is
 currently online and knows the answer to your question, you can receive help
@@ -827,7 +827,7 @@
 (https://github.com/gitgitgadget/git/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+%22%2Fallow%22[Search:
 is:pr is:open "/allow"]), in which case both the author and the person who
 granted the `/allow` can now `/allow` you, or by inquiring on the
-https://webchat.freenode.net/#git-devel[#git-devel] IRC channel on Freenode
+https://web.libera.chat/#git-devel[#git-devel] IRC channel on Libera Chat
 linking your pull request and asking for someone to `/allow` you.
 
 If the CI fails, you can update your changes with `git rebase -i` and push your
diff --git a/Documentation/RelNotes/1.6.0.3.txt b/Documentation/RelNotes/1.6.0.3.txt
index ae05778..ad36c0f 100644
--- a/Documentation/RelNotes/1.6.0.3.txt
+++ b/Documentation/RelNotes/1.6.0.3.txt
@@ -50,7 +50,7 @@
   if the working tree is currently dirty.
 
 * "git for-each-ref --format=%(subject)" fixed for commits with no
-  no newline in the message body.
+  newline in the message body.
 
 * "git remote" fixed to protect printf from user input.
 
diff --git a/Documentation/RelNotes/1.8.4.txt b/Documentation/RelNotes/1.8.4.txt
index 255e185..2e75299 100644
--- a/Documentation/RelNotes/1.8.4.txt
+++ b/Documentation/RelNotes/1.8.4.txt
@@ -365,7 +365,7 @@
    (merge 2fbd4f9 mh/maint-lockfile-overflow later to maint).
 
  * Invocations of "git checkout" used internally by "git rebase" were
-   counted as "checkout", and affected later "git checkout -" to the
+   counted as "checkout", and affected later "git checkout -", which took
    the user to an unexpected place.
    (merge 3bed291 rr/rebase-checkout-reflog later to maint).
 
diff --git a/Documentation/RelNotes/2.17.6.txt b/Documentation/RelNotes/2.17.6.txt
new file mode 100644
index 0000000..2f181e8
--- /dev/null
+++ b/Documentation/RelNotes/2.17.6.txt
@@ -0,0 +1,16 @@
+Git v2.17.6 Release Notes
+=========================
+
+This release addresses the security issues CVE-2021-21300.
+
+Fixes since v2.17.5
+-------------------
+
+ * CVE-2021-21300:
+   On case-insensitive file systems with support for symbolic links,
+   if Git is configured globally to apply delay-capable clean/smudge
+   filters (such as Git LFS), Git could be fooled into running
+   remote code during a clone.
+
+Credit for finding and fixing this vulnerability goes to Matheus
+Tavares, helped by Johannes Schindelin.
diff --git a/Documentation/RelNotes/2.18.5.txt b/Documentation/RelNotes/2.18.5.txt
new file mode 100644
index 0000000..dfb1de4
--- /dev/null
+++ b/Documentation/RelNotes/2.18.5.txt
@@ -0,0 +1,6 @@
+Git v2.18.5 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6 to address
+the security issue CVE-2021-21300; see the release notes for that
+version for details.
diff --git a/Documentation/RelNotes/2.19.6.txt b/Documentation/RelNotes/2.19.6.txt
new file mode 100644
index 0000000..bcca6cd
--- /dev/null
+++ b/Documentation/RelNotes/2.19.6.txt
@@ -0,0 +1,6 @@
+Git v2.19.6 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6 and
+v2.18.5 to address the security issue CVE-2021-21300; see the
+release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.20.5.txt b/Documentation/RelNotes/2.20.5.txt
new file mode 100644
index 0000000..1dfb784
--- /dev/null
+++ b/Documentation/RelNotes/2.20.5.txt
@@ -0,0 +1,6 @@
+Git v2.20.5 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5
+and v2.19.6 to address the security issue CVE-2021-21300; see
+the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.21.4.txt b/Documentation/RelNotes/2.21.4.txt
new file mode 100644
index 0000000..0089dd6
--- /dev/null
+++ b/Documentation/RelNotes/2.21.4.txt
@@ -0,0 +1,6 @@
+Git v2.21.4 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6 and v2.20.5 to address the security issue CVE-2021-21300;
+see the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.22.5.txt b/Documentation/RelNotes/2.22.5.txt
new file mode 100644
index 0000000..6b280d9
--- /dev/null
+++ b/Documentation/RelNotes/2.22.5.txt
@@ -0,0 +1,7 @@
+Git v2.22.5 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6,
+v2.18.5, v2.19.6, v2.20.5 and v2.21.4 to address the security
+issue CVE-2021-21300; see the release notes for these versions
+for details.
diff --git a/Documentation/RelNotes/2.23.4.txt b/Documentation/RelNotes/2.23.4.txt
new file mode 100644
index 0000000..6e5424d
--- /dev/null
+++ b/Documentation/RelNotes/2.23.4.txt
@@ -0,0 +1,7 @@
+Git v2.23.4 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4 and v2.22.5 to address the security
+issue CVE-2021-21300; see the release notes for these versions
+for details.
diff --git a/Documentation/RelNotes/2.24.4.txt b/Documentation/RelNotes/2.24.4.txt
new file mode 100644
index 0000000..4e216ee
--- /dev/null
+++ b/Documentation/RelNotes/2.24.4.txt
@@ -0,0 +1,7 @@
+Git v2.24.4 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4, v2.22.5 and v2.23.4 to address the
+security issue CVE-2021-21300; see the release notes for these
+versions for details.
diff --git a/Documentation/RelNotes/2.25.5.txt b/Documentation/RelNotes/2.25.5.txt
new file mode 100644
index 0000000..fcb9566
--- /dev/null
+++ b/Documentation/RelNotes/2.25.5.txt
@@ -0,0 +1,7 @@
+Git v2.25.5 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4, v2.22.5, v2.23.4 and v2.24.4 to address
+the security issue CVE-2021-21300; see the release notes for
+these versions for details.
diff --git a/Documentation/RelNotes/2.26.3.txt b/Documentation/RelNotes/2.26.3.txt
new file mode 100644
index 0000000..4111c38
--- /dev/null
+++ b/Documentation/RelNotes/2.26.3.txt
@@ -0,0 +1,7 @@
+Git v2.26.3 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4, v2.22.5, v2.23.4, v2.24.4 and v2.25.5
+to address the security issue CVE-2021-21300; see the release
+notes for these versions for details.
diff --git a/Documentation/RelNotes/2.27.1.txt b/Documentation/RelNotes/2.27.1.txt
new file mode 100644
index 0000000..a1e08a9
--- /dev/null
+++ b/Documentation/RelNotes/2.27.1.txt
@@ -0,0 +1,7 @@
+Git v2.27.1 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4, v2.22.5, v2.23.4, v2.24.4, v2.25.5
+and v2.26.3 to address the security issue CVE-2021-21300; see
+the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.28.1.txt b/Documentation/RelNotes/2.28.1.txt
new file mode 100644
index 0000000..8484c82
--- /dev/null
+++ b/Documentation/RelNotes/2.28.1.txt
@@ -0,0 +1,7 @@
+Git v2.28.1 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4, v2.22.5, v2.23.4, v2.24.4, v2.25.5,
+v2.26.3 and v2.27.1 to address the security issue CVE-2021-21300;
+see the release notes for these versions for details.
diff --git a/Documentation/RelNotes/2.29.0.txt b/Documentation/RelNotes/2.29.0.txt
index 06ba2f8..1f41302 100644
--- a/Documentation/RelNotes/2.29.0.txt
+++ b/Documentation/RelNotes/2.29.0.txt
@@ -184,8 +184,8 @@
    the ref backend in use, as its format is much richer than the
    normal refs, and written directly by "git fetch" as a plain file..
 
- * An unused binary has been discarded, and and a bunch of commands
-   have been turned into into built-in.
+ * An unused binary has been discarded, and a bunch of commands
+   have been turned into built-in.
 
  * A handful of places in in-tree code still relied on being able to
    execute the git subcommands, especially built-ins, in "git-foo"
diff --git a/Documentation/RelNotes/2.29.3.txt b/Documentation/RelNotes/2.29.3.txt
new file mode 100644
index 0000000..e10eedb
--- /dev/null
+++ b/Documentation/RelNotes/2.29.3.txt
@@ -0,0 +1,8 @@
+Git v2.29.3 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6,
+v2.18.5, v2.19.6, v2.20.5, v2.21.4, v2.22.5, v2.23.4, v2.24.4,
+v2.25.5, v2.26.3, v2.27.1 and v2.28.1 to address the security
+issue CVE-2021-21300; see the release notes for these versions
+for details.
diff --git a/Documentation/RelNotes/2.30.2.txt b/Documentation/RelNotes/2.30.2.txt
new file mode 100644
index 0000000..bada398
--- /dev/null
+++ b/Documentation/RelNotes/2.30.2.txt
@@ -0,0 +1,8 @@
+Git v2.30.2 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.17.6, v2.18.5,
+v2.19.6, v2.20.5, v2.21.4, v2.22.5, v2.23.4, v2.24.4, v2.25.5,
+v2.26.3, v2.27.1, v2.28.1 and v2.29.3 to address the security
+issue CVE-2021-21300; see the release notes for these versions
+for details.
diff --git a/Documentation/RelNotes/2.31.0.txt b/Documentation/RelNotes/2.31.0.txt
index 1d2dba2..cf0c7d8 100644
--- a/Documentation/RelNotes/2.31.0.txt
+++ b/Documentation/RelNotes/2.31.0.txt
@@ -16,6 +16,8 @@
 
  * The support for deprecated PCRE1 library has been dropped.
 
+ * Fixes for CVE-2021-21300 in Git 2.30.2 (and earlier) is included.
+
 
 UI, Workflows & Features
 
@@ -89,6 +91,22 @@
    two object names (one in SHA-1, the other in SHA-256) are both
    signed.
 
+ * "git rev-list" command learned "--disk-usage" option.
+
+ * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
+   discard diff output for early paths or move them to the end of the
+   output.
+
+ * "git difftool" learned "--skip-to=<path>" option to restart an
+   interrupted session from an arbitrary path.
+
+ * "git grep" has been tweaked to be limited to the sparse checkout
+   paths.
+
+ * "git rebase --[no-]fork-point" gained a configuration variable
+   rebase.forkPoint so that users do not have to keep specifying a
+   non-default setting.
+
 
 Performance, Internal Implementation, Development Support etc.
 
@@ -176,6 +194,41 @@
  * When a pager spawned by us exited, the trace log did not record its
    exit status correctly, which has been corrected.
 
+ * Removal of GIT_TEST_GETTEXT_POISON continues.
+
+ * The code to implement "git merge-base --independent" was poorly
+   done and was kept from the very beginning of the feature.
+
+ * Preliminary changes to fsmonitor integration.
+
+ * Performance improvements for rename detection.
+
+ * The common code to deal with "chunked file format" that is shared
+   by the multi-pack-index and commit-graph files have been factored
+   out, to help codepaths for both filetypes to become more robust.
+
+ * The approach to "fsck" the incoming objects in "index-pack" is
+   attractive for performance reasons (we have them already in core,
+   inflated and ready to be inspected), but fundamentally cannot be
+   applied fully when we receive more than one pack stream, as a tree
+   object in one pack may refer to a blob object in another pack as
+   ".gitmodules", when we want to inspect blobs that are used as
+   ".gitmodules" file, for example.  Teach "index-pack" to emit
+   objects that must be inspected later and check them in the calling
+   "fetch-pack" process.
+
+ * The logic to handle "trailer" related placeholders in the
+   "--format=" mechanisms in the "log" family and "for-each-ref"
+   family is getting unified.
+
+ * Raise the buffer size used when writing the index file out from
+   (obviously too small) 8kB to (clearly sufficiently large) 128kB.
+
+ * It is reported that open() on some platforms (e.g. macOS Big Sur)
+   can return EINTR even though our timers are set up with SA_RESTART.
+   A workaround has been implemented and enabled for macOS to rerun
+   open() transparently from the caller when this happens.
+
 
 Fixes since v2.30
 -----------------
@@ -274,5 +327,39 @@
    turned commit-graph off; we now tell the user what we are doing.
    (merge c85eec7fc3 js/commit-graph-warning later to maint).
 
+ * Objects that lost references can be pruned away, even when they
+   have notes attached to it (and these notes will become dangling,
+   which in turn can be pruned with "git notes prune").  This has been
+   clarified in the documentation.
+   (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).
+
+ * The error codepath around the "--temp/--prefix" feature of "git
+   checkout-index" has been improved.
+   (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).
+
+ * The "git maintenance register" command had trouble registering bare
+   repositories, which had been corrected.
+
+ * A handful of multi-word configuration variable names in
+   documentation that are spelled in all lowercase have been corrected
+   to use the more canonical camelCase.
+   (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).
+
+ * "git push $there --delete ''" should have been diagnosed as an
+   error, but instead turned into a matching push, which has been
+   corrected.
+   (merge 20e416409f jc/push-delete-nothing later to maint).
+
+ * Test script modernization.
+   (merge 488acf15df sv/t7001-modernize later to maint).
+
+ * An under-allocation for the untracked cache data has been corrected.
+   (merge 6347d649bc jh/untracked-cache-fix later to maint).
+
  * Other code cleanup, docfix, build fix, etc.
    (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
+   (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
+   (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
+   (merge 3a837b58e3 cw/pack-config-doc later to maint).
+   (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
+   (merge b865734760 js/params-vs-args later to maint).
diff --git a/Documentation/RelNotes/2.31.1.txt b/Documentation/RelNotes/2.31.1.txt
new file mode 100644
index 0000000..f9b06b8
--- /dev/null
+++ b/Documentation/RelNotes/2.31.1.txt
@@ -0,0 +1,27 @@
+Git 2.31.1 Release Notes
+========================
+
+Fixes since v2.31
+-----------------
+
+ * The fsmonitor interface read from its input without making sure
+   there is something to read from.  This bug is new in 2.31
+   timeframe.
+
+ * The data structure used by fsmonitor interface was not properly
+   duplicated during an in-core merge, leading to use-after-free etc.
+
+ * "git bisect" reimplemented more in C during 2.30 timeframe did not
+   take an annotated tag as a good/bad endpoint well.  This regression
+   has been corrected.
+
+ * Fix macros that can silently inject unintended null-statements.
+
+ * CALLOC_ARRAY() macro replaces many uses of xcalloc().
+
+ * Update insn in Makefile comments to run fuzz-all target.
+
+ * Fix a corner case bug in "git mv" on case insensitive systems,
+   which was introduced in 2.29 timeframe.
+
+Also contains various documentation updates and code clean-ups.
diff --git a/Documentation/RelNotes/2.32.0.txt b/Documentation/RelNotes/2.32.0.txt
new file mode 100644
index 0000000..87d56fa
--- /dev/null
+++ b/Documentation/RelNotes/2.32.0.txt
@@ -0,0 +1,416 @@
+Git 2.32 Release Notes
+======================
+
+Backward compatibility notes
+----------------------------
+
+ * ".gitattributes", ".gitignore", and ".mailmap" files that are
+   symbolic links are ignored.
+
+ * "git apply --3way" used to first attempt a straight application,
+   and only fell back to the 3-way merge algorithm when the stright
+   application failed.  Starting with this version, the command will
+   first try the 3-way merge algorithm and only when it fails (either
+   resulting with conflict or the base versions of blobs are missing),
+   falls back to the usual patch application.
+
+
+Updates since v2.31
+-------------------
+
+UI, Workflows & Features
+
+ * It does not make sense to make ".gitattributes", ".gitignore" and
+   ".mailmap" symlinks, as they are supposed to be usable from the
+   object store (think: bare repositories where HEAD:.mailmap etc. are
+   used).  When these files are symbolic links, we used to read the
+   contents of the files pointed by them by mistake, which has been
+   corrected.
+
+ * "git stash show" learned to optionally show untracked part of the
+   stash.
+
+ * "git log --format='...'" learned "%(describe)" placeholder.
+
+ * "git repack" so far has been only capable of repacking everything
+   under the sun into a single pack (or split by size).  A cleverer
+   strategy to reduce the cost of repacking a repository has been
+   introduced.
+
+ * The http codepath learned to let the credential layer to cache the
+   password used to unlock a certificate that has successfully been
+   used.
+
+ * "git commit --fixup=<commit>", which was to tweak the changes made
+   to the contents while keeping the original log message intact,
+   learned "--fixup=(amend|reword):<commit>", that can be used to
+   tweak both the message and the contents, and only the message,
+   respectively.
+
+ * "git send-email" learned to honor the core.hooksPath configuration.
+
+ * "git format-patch -v<n>" learned to allow a reroll count that is
+   not an integer.
+
+ * "git commit" learned "--trailer <key>[=<value>]" option; together
+   with the interpret-trailers command, this will make it easier to
+   support custom trailers.
+
+ * "git clone --reject-shallow" option fails the clone as soon as we
+   notice that we are cloning from a shallow repository.
+
+ * A configuration variable has been added to force tips of certain
+   refs to be given a reachability bitmap.
+
+ * "gitweb" learned "e-mail privacy" feature to redact strings that
+   look like e-mail addresses on various pages.
+
+ * "git apply --3way" has always been "to fall back to 3-way merge
+   only when straight application fails". Swap the order of falling
+   back so that 3-way is always attempted first (only when the option
+   is given, of course) and then straight patch application is used as
+   a fallback when it fails.
+
+ * "git apply" now takes "--3way" and "--cached" at the same time, and
+   work and record results only in the index.
+
+ * The command line completion (in contrib/) has learned that
+   CHERRY_PICK_HEAD is a possible pseudo-ref.
+
+ * Userdiff patterns for "Scheme" has been added.
+
+ * "git log" learned "--diff-merges=<style>" option, with an
+   associated configuration variable log.diffMerges.
+
+ * "git log --format=..." placeholders learned %ah/%ch placeholders to
+   request the --date=human output.
+
+ * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
+   system-wide configuration file with GIT_CONFIG_SYSTEM that lets
+   users specify from which file to read the system-wide configuration
+   (setting it to an empty file would essentially be the same as
+   setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
+   per-user configuration in $HOME/.gitconfig.
+
+ * "git add" and "git rm" learned not to touch those paths that are
+   outside of sparse checkout.
+
+ * "git rev-list" learns the "--filter=object:type=<type>" option,
+   which can be used to exclude objects of the given kind from the
+   packfile generated by pack-objects.
+
+ * The command line completion (in contrib/) for "git stash" has been
+   updated.
+
+ * "git subtree" updates.
+
+ * It is now documented that "format-patch" skips merges.
+
+ * Options to "git pack-objects" that take numeric values like
+   --window and --depth should not accept negative values; the input
+   validation has been tightened.
+
+ * The way the command line specified by the trailer.<token>.command
+   configuration variable receives the end-user supplied value was
+   both error prone and misleading.  An alternative to achieve the
+   same goal in a safer and more intuitive way has been added, as
+   the trailer.<token>.cmd configuration variable, to replace it.
+
+ * "git add -i --dry-run" does not dry-run, which was surprising.  The
+   combination of options has taught to error out.
+
+ * "git push" learns to discover common ancestor with the receiving
+   end over protocol v2.  This will hopefully make "git push" as
+   efficient as "git fetch" in avoiding objects from getting
+   transferred unnecessarily.
+
+ * "git mailinfo" (hence "git am") learned the "--quoted-cr" option to
+   control how lines ending with CRLF wrapped in base64 or qp are
+   handled.
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * Rename detection rework continues.
+
+ * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
+   prerequisites to catch broken tests that depend on the side effects
+   of optional pieces, but did not work at all when negative
+   prerequisites were involved.
+   (merge 27d578d904 jk/fail-prereq-testfix later to maint).
+
+ * "git diff-index" codepath has been taught to trust fsmonitor status
+   to reduce number of lstat() calls.
+   (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).
+
+ * Reorganize Makefile to allow building git.o and other essential
+   objects without extra stuff needed only for testing.
+
+ * Preparatory API changes for parallel checkout.
+
+ * A simple IPC interface gets introduced to build services like
+   fsmonitor on top.
+
+ * Fsck API clean-up.
+
+ * SECURITY.md that is facing individual contributors and end users
+   has been introduced.  Also a procedure to follow when preparing
+   embargoed releases has been spelled out.
+   (merge 09420b7648 js/security-md later to maint).
+
+ * Optimize "rev-list --use-bitmap-index --objects" corner case that
+   uses negative tags as the stopping points.
+
+ * CMake update for vsbuild.
+
+ * An on-disk reverse-index to map the in-pack location of an object
+   back to its object name across multiple packfiles is introduced.
+
+ * Generate [ec]tags under $(QUIET_GEN).
+
+ * Clean-up codepaths that implements "git send-email --validate"
+   option and improves the message from it.
+
+ * The last remnant of gettext-poison has been removed.
+
+ * The test framework has been taught to optionally turn the default
+   merge strategy to "ort" throughout the system where we use
+   three-way merges internally, like cherry-pick, rebase etc.,
+   primarily to enhance its test coverage (the strategy has been
+   available as an explicit "-s ort" choice).
+
+ * A bit of code clean-up and a lot of test clean-up around userdiff
+   area.
+
+ * Handling of "promisor packs" that allows certain objects to be
+   missing and lazily retrievable has been optimized (a bit).
+
+ * When packet_write() fails, we gave an extra error message
+   unnecessarily, which has been corrected.
+
+ * The checkout machinery has been taught to perform the actual
+   write-out of the files in parallel when able.
+
+ * Show errno in the trace output in the error codepath that calls
+   read_raw_ref method.
+
+ * Effort to make the command line completion (in contrib/) safe with
+   "set -u" continues.
+
+ * Tweak a few tests for "log --format=..." that show timestamps in
+   various formats.
+
+ * The reflog expiry machinery has been taught to emit trace events.
+
+ * Over-the-wire protocol learns a new request type to ask for object
+   sizes given a list of object names.
+
+
+Fixes since v2.31
+-----------------
+
+ * The fsmonitor interface read from its input without making sure
+   there is something to read from.  This bug is new in 2.31
+   timeframe.
+
+ * The data structure used by fsmonitor interface was not properly
+   duplicated during an in-core merge, leading to use-after-free etc.
+
+ * "git bisect" reimplemented more in C during 2.30 timeframe did not
+   take an annotated tag as a good/bad endpoint well.  This regression
+   has been corrected.
+
+ * Fix macros that can silently inject unintended null-statements.
+
+ * CALLOC_ARRAY() macro replaces many uses of xcalloc().
+
+ * Update insn in Makefile comments to run fuzz-all target.
+
+ * Fix a corner case bug in "git mv" on case insensitive systems,
+   which was introduced in 2.29 timeframe.
+
+ * We had a code to diagnose and die cleanly when a required
+   clean/smudge filter is missing, but an assert before that
+   unnecessarily fired, hiding the end-user facing die() message.
+   (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).
+
+ * Update C code that sets a few configuration variables when a remote
+   is configured so that it spells configuration variable names in the
+   canonical camelCase.
+   (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).
+
+ * A new configuration variable has been introduced to allow choosing
+   which version of the generation number gets used in the
+   commit-graph file.
+   (merge 702110aac6 ds/commit-graph-generation-config later to maint).
+
+ * Perf test update to work better in secondary worktrees.
+   (merge 36e834abc1 jk/perf-in-worktrees later to maint).
+
+ * Updates to memory allocation code around the use of pcre2 library.
+   (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).
+
+ * "git -c core.bare=false clone --bare ..." would have segfaulted,
+   which has been corrected.
+   (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).
+
+ * When "git checkout" removes a path that does not exist in the
+   commit it is checking out, it wasn't careful enough not to follow
+   symbolic links, which has been corrected.
+   (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).
+
+ * A few option description strings started with capital letters,
+   which were corrected.
+   (merge 5ee90326dc cc/downcase-opt-help later to maint).
+
+ * Plug or annotate remaining leaks that trigger while running the
+   very basic set of tests.
+   (merge 68ffe095a2 ah/plugleaks later to maint).
+
+ * The hashwrite() API uses a buffering mechanism to avoid calling
+   write(2) too frequently. This logic has been refactored to be
+   easier to understand.
+   (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).
+
+ * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
+   the editor as expected (e.g. "revert --no-edit" after a conflict
+   still asked to edit the message), which has been corrected.
+   (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).
+
+ * "git daemon" has been tightened against systems that take backslash
+   as directory separator.
+   (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).
+
+ * A NULL-dereference bug has been corrected in an error codepath in
+   "git for-each-ref", "git branch --list" etc.
+   (merge c685450880 jk/ref-filter-segfault-fix later to maint).
+
+ * Streamline the codepath to fix the UTF-8 encoding issues in the
+   argv[] and the prefix on macOS.
+   (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).
+
+ * The command-line completion script (in contrib/) had a couple of
+   references that would have given a warning under the "-u" (nounset)
+   option.
+   (merge c5c0548d79 vs/completion-with-set-u later to maint).
+
+ * When "git pack-objects" makes a literal copy of a part of existing
+   packfile using the reachability bitmaps, its update to the progress
+   meter was broken.
+   (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).
+
+ * The dependencies for config-list.h and command-list.h were broken
+   when the former was split out of the latter, which has been
+   corrected.
+   (merge 56550ea718 sg/bugreport-fixes later to maint).
+
+ * "git push --quiet --set-upstream" was not quiet when setting the
+   upstream branch configuration, which has been corrected.
+   (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).
+
+ * The prefetch task in "git maintenance" assumed that "git fetch"
+   from any remote would fetch all its local branches, which would
+   fetch too much if the user is interested in only a subset of
+   branches there.
+   (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).
+
+ * Clarify that pathnames recorded in Git trees are most often (but
+   not necessarily) encoded in UTF-8.
+   (merge 9364bf465d ab/pathname-encoding-doc later to maint).
+
+ * "git --config-env var=val cmd" weren't accepted (only
+   --config-env=var=val was).
+   (merge c331551ccf ps/config-env-option-with-separate-value later to maint).
+
+ * When the reachability bitmap is in effect, the "do not lose
+   recently created objects and those that are reachable from them"
+   safety to protect us from races were disabled by mistake, which has
+   been corrected.
+   (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).
+
+ * Cygwin pathname handling fix.
+   (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).
+
+ * "git rebase --[no-]reschedule-failed-exec" did not work well with
+   its configuration variable, which has been corrected.
+   (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).
+
+ * Portability fix for command line completion script (in contrib/).
+   (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).
+
+ * "git repack -A -d" in a partial clone unnecessarily loosened
+   objects in promisor pack.
+
+ * "git bisect skip" when custom words are used for new/old did not
+   work, which has been corrected.
+
+ * A few variants of informational message "Already up-to-date" has
+   been rephrased.
+   (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).
+
+ * "git submodule update --quiet" did not propagate the quiet option
+   down to underlying "git fetch", which has been corrected.
+   (merge 62af4bdd42 nc/submodule-update-quiet later to maint).
+
+ * Document that our test can use "local" keyword.
+   (merge a84fd3bcc6 jc/test-allows-local later to maint).
+
+ * The word-diff mode has been taught to work better with a word
+   regexp that can match an empty string.
+   (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).
+
+ * "git p4" learned to find branch points more efficiently.
+   (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).
+
+ * When "git update-ref -d" removes a ref that is packed, it left
+   empty directories under $GIT_DIR/refs/ for
+   (merge 5f03e5126d wc/packed-ref-removal-cleanup later to maint).
+
+ * "git clean" and "git ls-files -i" had confusion around working on
+   or showing ignored paths inside an ignored directory, which has
+   been corrected.
+   (merge b548f0f156 en/dir-traversal later to maint).
+
+ * The handling of "%(push)" formatting element of "for-each-ref" and
+   friends was broken when the same codepath started handling
+   "%(push:<what>)", which has been corrected.
+   (merge 1e1c4c5eac zh/ref-filter-push-remote-fix later to maint).
+
+ * The bash prompt script (in contrib/) did not work under "set -u".
+   (merge 5c0cbdb107 en/prompt-under-set-u later to maint).
+
+ * The "chainlint" feature in the test framework is a handy way to
+   catch common mistakes in writing new tests, but tends to get
+   expensive.  An knob to selectively disable it has been introduced
+   to help running tests that the developer has not modified.
+   (merge 2d86a96220 jk/test-chainlint-softer later to maint).
+
+ * The "rev-parse" command did not diagnose the lack of argument to
+   "--path-format" option, which was introduced in v2.31 era, which
+   has been corrected.
+   (merge 99fc555188 wm/rev-parse-path-format-wo-arg later to maint).
+
+ * Other code cleanup, docfix, build fix, etc.
+   (merge f451960708 dl/cat-file-doc-cleanup later to maint).
+   (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
+   (merge ea7e63921c jr/doc-ignore-typofix later to maint).
+   (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
+   (merge 42efa1231a jk/filter-branch-sha256 later to maint).
+   (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
+   (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
+   (merge 47957485b3 ab/read-tree later to maint).
+   (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
+   (merge 76593c09bb ab/detox-gettext-tests later to maint).
+   (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
+   (merge fc12b6fdde fm/user-manual-use-preface later to maint).
+   (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
+   (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
+   (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
+   (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
+   (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
+   (merge 7a14acdbe6 po/diff-patch-doc later to maint).
+   (merge f91371b948 pw/patience-diff-clean-up later to maint).
+   (merge 3a7f0908b6 mt/clean-clean later to maint).
+   (merge d4e2d15a8b ab/streaming-simplify later to maint).
+   (merge 0e59f7ad67 ah/merge-ort-i18n later to maint).
+   (merge e6f68f62e0 ls/typofix later to maint).
diff --git a/Documentation/RelNotes/2.33.0.txt b/Documentation/RelNotes/2.33.0.txt
new file mode 100644
index 0000000..a69531c
--- /dev/null
+++ b/Documentation/RelNotes/2.33.0.txt
@@ -0,0 +1,220 @@
+Git 2.33 Release Notes
+======================
+
+Backward compatibility notes
+----------------------------
+
+ * The "-m" option in "git log -m" that does not specify which format,
+   if any, of diff is desired did not have any visible effect; it now
+   implies some form of diff (by default "--patch") is produced.
+
+   You can disable the diff output with "git log -m --no-patch", but
+   then there probably isn't much point in passing "-m" in the first
+   place ;-).
+
+
+Updates since Git 2.32
+----------------------
+
+UI, Workflows & Features
+
+ * "git send-email" learned the "--sendmail-cmd" command line option
+   and the "sendemail.sendmailCmd" configuration variable, which is a
+   more sensible approach than the current way of repurposing the
+   "smtp-server" that is meant to name the server to instead name the
+   command to talk to the server.
+
+ * The "-m" option in "git log -m" that does not specify which format,
+   if any, of diff is desired did not have any visible effect; it now
+   implies some form of diff (by default "--patch") is produced.
+
+ * The userdiff pattern for C# learned the token "record".
+
+ * "git rev-list" learns to omit the "commit <object-name>" header
+   lines from the output with the `--no-commit-header` option.
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * The code to handle the "--format" option in "for-each-ref" and
+   friends made too many string comparisons on %(atom)s used in the
+   format string, which has been corrected by converting them into
+   enum when the format string is parsed.
+
+ * Use the hashfile API in the codepath that writes the index file to
+   reduce code duplication.
+
+ * Repeated rename detections in a sequence of mergy operations have
+   been optimize out.
+
+ * Preliminary clean-up of tests before the main reftable changes
+   hits the codebase.
+
+ * The backend for "diff -G/-S" has been updated to use pcre2 engine
+   when available.
+
+ * Use ".DELETE_ON_ERROR" pseudo target to simplify our Makefile.
+
+ * Code cleanup around struct_type_init() functions.
+
+ * "git send-email" optimization.
+
+ * GitHub Actions / CI update.
+   (merge 0dc787a9f2 js/ci-windows-update later to maint).
+
+
+Fixes since v2.32
+-----------------
+
+ * We historically rejected a very short string as an author name
+   while accepting a patch e-mail, which has been loosened.
+   (merge 72ee47ceeb ef/mailinfo-short-name later to maint).
+
+ * The parallel checkout codepath did not initialize object ID field
+   used to talk to the worker processes in a futureproof way.
+
+ * Rewrite code that triggers undefined behaviour warning.
+   (merge aafa5df0df jn/size-t-casted-to-off-t-fix later to maint).
+
+ * The description of "fast-forward" in the glossary has been updated.
+   (merge e22f2daed0 ry/clarify-fast-forward-in-glossary later to maint).
+
+ * Recent "git clone" left a temporary directory behind when the
+   transport layer returned an failure.
+   (merge 6aacb7d861 jk/clone-clean-upon-transport-error later to maint).
+
+ * "git fetch" over protocol v2 left its side of the socket open after
+   it finished speaking, which unnecessarily wasted the resource on
+   the other side.
+   (merge ae1a7eefff jk/fetch-pack-v2-half-close-early later to maint).
+
+ * The command line completion (in contrib/) learned that "git diff"
+   takes the "--anchored" option.
+   (merge d1e7c2cac9 tb/complete-diff-anchored later to maint).
+
+ * "git-svn" tests assumed that "locale -a", which is used to pick an
+   available UTF-8 locale, is available everywhere.  A knob has been
+   introduced to allow testers to specify a suitable locale to use.
+   (merge 482c962de4 dd/svn-test-wo-locale-a later to maint).
+
+ * Update "git subtree" to work better on Windows.
+   (merge 77f37de39f js/subtree-on-windows-fix later to maint).
+
+ * Remove multimail from contrib/
+   (merge f74d11471f js/no-more-multimail later to maint).
+
+ * Make the codebase MSAN clean.
+   (merge 4dbc55e87d ah/uninitialized-reads-fix later to maint).
+
+ * Work around inefficient glob substitution in older versions of bash
+   by rewriting parts of a test.
+   (merge eb87c6f559 jx/t6020-with-older-bash later to maint).
+
+ * Avoid duplicated work while building reachability bitmaps.
+   (merge aa9ad6fee5 jk/bitmap-tree-optim later to maint).
+
+ * We broke "GIT_SKIP_TESTS=t?000" to skip certain tests in recent
+   update, which got fixed.
+
+ * The side-band demultiplexer that is used to display progress output
+   from the remote end did not clear the line properly when the end of
+   line hits at a packet boundary, which has been corrected.
+
+ * Some test scripts assumed that readlink(1) was universally
+   installed and available, which is not the case.
+   (merge 7c0afdf23c jk/test-without-readlink-1 later to maint).
+
+ * Recent update to completion script (in contrib/) broke those who
+   use the __git_complete helper to define completion to their custom
+   command.
+   (merge cea232194d fw/complete-cmd-idx-fix later to maint).
+
+ * Output from some of our tests were affected by the width of the
+   terminal that they were run in, which has been corrected by
+   exporting a fixed value in the COLUMNS environment.
+   (merge c49a177bec ab/fix-columns-to-80-during-tests later to maint).
+
+ * On Windows, mergetool has been taught to find kdiff3.exe just like
+   it finds winmerge.exe.
+   (merge 47eb4c6890 ms/mergetools-kdiff3-on-windows later to maint).
+
+ * When we cannot figure out how wide the terminal is, we use a
+   fallback value of 80 ourselves (which cannot be avoided), but when
+   we run the pager, we export it in COLUMNS, which forces the pager
+   to use the hardcoded value, even when the pager is perfectly
+   capable to figure it out itself.  Stop exporting COLUMNS when we
+   fall back on the hardcoded default value for our own use.
+   (merge 9b6e2c8b98 js/stop-exporting-bogus-columns later to maint).
+
+ * "git cat-file --batch-all-objects"" misbehaved when "--batch" is in
+   use and did not ask for certain object traits.
+   (merge ee02ac6164 zh/cat-file-batch-fix later to maint).
+
+ * Some code and doc clarification around "git push".
+
+ * The "union" conflict resultion variant misbehaved when used with
+   binary merge driver.
+   (merge 382b601acd jk/union-merge-binary later to maint).
+
+ * Prevent "git p4" from failing to submit changes to binary file.
+   (merge 54662d5958 dc/p4-binary-submit-fix later to maint).
+
+ * "git grep --and -e foo" ought to have been diagnosed as an error
+   but instead segfaulted, which has been corrected.
+   (merge fe7fe62d8d rs/grep-parser-fix later to maint).
+
+ * The merge code had funny interactions between content based rename
+   detection and directory rename detection.
+   (merge 3585d0ea23 en/merge-dir-rename-corner-case-fix later to maint).
+
+ * When rebuilding the multi-pack index file reusing an existing one,
+   we used to blindly trust the existing file and ended up carrying
+   corrupted data into the updated file, which has been corrected.
+   (merge f89ecf7988 tb/midx-use-checksum later to maint).
+
+ * Update the location of system-side configuration file on Windows.
+   (merge e355307692 js/gfw-system-config-loc-fix later to maint).
+
+ * Code recently added to support common ancestry negotiation during
+   "git push" did not sanity check its arguments carefully enough.
+   (merge eff40457a4 ab/fetch-negotiate-segv-fix later to maint).
+
+ * Update the documentation not to assume users are of certain gender
+   and adds to guidelines to do so.
+   (merge 46a237f42f ds/gender-neutral-doc later to maint).
+
+ * Other code cleanup, docfix, build fix, etc.
+   (merge bfe35a6165 ah/doc-describe later to maint).
+   (merge f302c1e4aa jc/clarify-revision-range later to maint).
+   (merge 3127ff90ea tl/fix-packfile-uri-doc later to maint).
+   (merge a84216c684 jk/doc-color-pager later to maint).
+   (merge 4e0a64a713 ab/trace2-squelch-gcc-warning later to maint).
+   (merge 225f7fa847 ps/rev-list-object-type-filter later to maint).
+   (merge 5317dfeaed dd/honor-users-tar-in-tests later to maint).
+   (merge ace6d8e3d6 tk/partial-clone-repack-doc later to maint).
+   (merge 7ba68e0cf1 js/trace2-discard-event-docfix later to maint).
+   (merge 8603c419d3 fc/doc-default-to-upstream-config later to maint).
+   (merge 1d72b604ef jk/revision-squelch-gcc-warning later to maint).
+   (merge abcb66c614 ar/typofix later to maint).
+   (merge 9853830787 ah/graph-typofix later to maint).
+   (merge aac578492d ab/config-hooks-path-testfix later to maint).
+   (merge 98c7656a18 ar/more-typofix later to maint).
+   (merge 6fb9195f6c jk/doc-max-pack-size later to maint).
+   (merge 4184cbd635 ar/mailinfo-memcmp-to-skip-prefix later to maint).
+   (merge 91d2347033 ar/doc-libera-chat-in-my-first-contrib later to maint).
+   (merge 338abb0f04 ab/cmd-foo-should-return later to maint).
+   (merge 546096a5cb ab/xdiff-bug-cleanup later to maint).
+   (merge b7b793d1e7 ab/progress-cleanup later to maint).
+   (merge d94f9b8e90 ba/object-info later to maint).
+   (merge 52ff891c03 ar/test-code-cleanup later to maint).
+   (merge a0538e5c8b dd/document-log-decorate-default later to maint).
+   (merge ce24797d38 mr/cmake later to maint).
+   (merge 9eb542f2ee ab/pre-auto-gc-hook-test later to maint).
+   (merge 9fffc38583 bk/doc-commit-typofix later to maint).
+   (merge 1cf823d8f0 ks/submodule-cleanup later to maint).
+   (merge ebbf5d2b70 js/config-mak-windows-pcre-fix later to maint).
+   (merge 617480d75b hn/refs-iterator-peel-returns-boolean later to maint).
+   (merge 6a24cc71ed ar/submodule-helper-include-cleanup later to maint).
+   (merge 5632e838f8 rs/khash-alloc-cleanup later to maint).
+   (merge b1d87fbaf1 jk/typofix later to maint).
+   (merge e04170697a ab/gitignore-discovery-doc later to maint).
diff --git a/Documentation/RelNotes/2.8.0.txt b/Documentation/RelNotes/2.8.0.txt
index 27320b6..3845328 100644
--- a/Documentation/RelNotes/2.8.0.txt
+++ b/Documentation/RelNotes/2.8.0.txt
@@ -377,7 +377,7 @@
    on that order.
 
  * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
-   rev, i.e. the object named by the the pathname with wildcard
+   rev, i.e. the object named by the pathname with wildcard
    characters in a tree object.
    (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).
 
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 0452db2..3e215f4 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -117,10 +117,13 @@
 files you are modifying to see the current conventions.
 
 [[summary-section]]
-It's customary to start the remainder of the first line after "area: "
-with a lower-case letter. E.g. "doc: clarify...", not "doc:
-Clarify...", or "githooks.txt: improve...", not "githooks.txt:
-Improve...".
+The title sentence after the "area:" prefix omits the full stop at the
+end, and its first word is not capitalized unless there is a reason to
+capitalize it other than because it is the first word in the sentence.
+E.g. "doc: clarify...", not "doc: Clarify...", or "githooks.txt:
+improve...", not "githooks.txt: Improve...".  But "refs: HEAD is also
+treated as a ref" is correct, as we spell `HEAD` in all caps even when
+it appears in the middle of a sentence.
 
 [[meaningful-message]]
 The body should provide a meaningful commit message, which:
@@ -370,9 +373,8 @@
 . `Acked-by:` says that the person who is more familiar with the area
   the patch attempts to modify liked the patch.
 . `Reviewed-by:`, unlike the other tags, can only be offered by the
-  reviewer and means that she is completely satisfied that the patch
-  is ready for application.  It is usually offered only after a
-  detailed review.
+  reviewers themselves when they are completely satisfied with the
+  patch after a detailed analysis.
 . `Tested-by:` is used to indicate that the person applied the patch
   and found it to have the desired effect.
 
diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt
index dc3bceb..117f4cf 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.txt
@@ -1,6 +1,6 @@
 -b::
 	Show blank SHA-1 for boundary commits.  This can also
-	be controlled via the `blame.blankboundary` config option.
+	be controlled via the `blame.blankBoundary` config option.
 
 --root::
 	Do not treat root commits as boundaries.  This can also be
diff --git a/Documentation/config.txt b/Documentation/config.txt
index d08e83a..bf82766 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -46,7 +46,7 @@
 newline and the null byte. Doublequote `"` and backslash can be included
 by escaping them as `\"` and `\\`, respectively. Backslashes preceding
 other characters are dropped when reading; for example, `\t` is read as
-`t` and `\0` is read as `0` Section headers cannot span multiple lines.
+`t` and `\0` is read as `0`. Section headers cannot span multiple lines.
 Variables may belong directly to a section or to a given subsection. You
 can have `[section]` if you have `[section "subsection"]`, but you don't
 need to.
diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt
index acbd0c0..8b2849f 100644
--- a/Documentation/config/advice.txt
+++ b/Documentation/config/advice.txt
@@ -119,4 +119,8 @@
 	addEmptyPathspec::
 		Advice shown if a user runs the add command without providing
 		the pathspec parameter.
+	updateSparsePath::
+		Advice shown when either linkgit:git-add[1] or linkgit:git-rm[1]
+		is asked to update index entries outside the current sparse
+		checkout.
 --
diff --git a/Documentation/config/blame.txt b/Documentation/config/blame.txt
index 9468e85..4d047c1 100644
--- a/Documentation/config/blame.txt
+++ b/Documentation/config/blame.txt
@@ -27,7 +27,7 @@
 	file names will reset the list of ignored revisions.  This option will
 	be handled before the command line option `--ignore-revs-file`.
 
-blame.markUnblamables::
+blame.markUnblamableLines::
 	Mark lines that were changed by an ignored revision that we could not
 	attribute to another commit with a '*' in the output of
 	linkgit:git-blame[1].
diff --git a/Documentation/config/checkout.txt b/Documentation/config/checkout.txt
index 2cddf7b..bfbca90 100644
--- a/Documentation/config/checkout.txt
+++ b/Documentation/config/checkout.txt
@@ -21,3 +21,24 @@
 	Provides the default value for the `--guess` or `--no-guess`
 	option in `git checkout` and `git switch`. See
 	linkgit:git-switch[1] and linkgit:git-checkout[1].
+
+checkout.workers::
+	The number of parallel workers to use when updating the working tree.
+	The default is one, i.e. sequential execution. If set to a value less
+	than one, Git will use as many workers as the number of logical cores
+	available. This setting and `checkout.thresholdForParallelism` affect
+	all commands that perform checkout. E.g. checkout, clone, reset,
+	sparse-checkout, etc.
++
+Note: parallel checkout usually delivers better performance for repositories
+located on SSDs or over NFS. For repositories on spinning disks and/or machines
+with a small number of cores, the default sequential checkout often performs
+better. The size and compression level of a repository might also influence how
+well the parallel version performs.
+
+checkout.thresholdForParallelism::
+	When running parallel checkout with a small number of files, the cost
+	of subprocess spawning and inter-process communication might outweigh
+	the parallelization gains. This setting allows to define the minimum
+	number of files for which parallel checkout should be attempted. The
+	default is 100.
diff --git a/Documentation/config/clone.txt b/Documentation/config/clone.txt
index 47de36a..7bcfbd1 100644
--- a/Documentation/config/clone.txt
+++ b/Documentation/config/clone.txt
@@ -2,3 +2,7 @@
 	The name of the remote to create when cloning a repository.  Defaults to
 	`origin`, and can be overridden by passing the `--origin` command-line
 	option to linkgit:git-clone[1].
+
+clone.rejectShallow::
+	Reject to clone a repository if it is a shallow one, can be overridden by
+	passing option `--reject-shallow` in command line. See linkgit:git-clone[1]
diff --git a/Documentation/config/color.txt b/Documentation/config/color.txt
index d5daacb..e05d520 100644
--- a/Documentation/config/color.txt
+++ b/Documentation/config/color.txt
@@ -127,8 +127,9 @@
 	interactive commands.
 
 color.pager::
-	A boolean to enable/disable colored output when the pager is in
-	use (default is true).
+	A boolean to specify whether `auto` color modes should colorize
+	output going to the pager. Defaults to true; set this to false
+	if your pager does not understand ANSI color codes.
 
 color.push::
 	A boolean to enable/disable color in push errors. May be set to
diff --git a/Documentation/config/commitgraph.txt b/Documentation/config/commitgraph.txt
index 4582c39..30604e4 100644
--- a/Documentation/config/commitgraph.txt
+++ b/Documentation/config/commitgraph.txt
@@ -1,3 +1,9 @@
+commitGraph.generationVersion::
+	Specifies the type of generation number version to use when writing
+	or reading the commit-graph file. If version 1 is specified, then
+	the corrected commit dates will not be written or read. Defaults to
+	2.
+
 commitGraph.maxNewFilters::
 	Specifies the default value for the `--max-new-filters` option of `git
 	commit-graph write` (c.f., linkgit:git-commit-graph[1]).
diff --git a/Documentation/config/diff.txt b/Documentation/config/diff.txt
index 2d3331f..32f8483 100644
--- a/Documentation/config/diff.txt
+++ b/Documentation/config/diff.txt
@@ -118,9 +118,10 @@
 	relative to the top of the working tree.
 
 diff.renameLimit::
-	The number of files to consider when performing the copy/rename
-	detection; equivalent to the 'git diff' option `-l`. This setting
-	has no effect if rename detection is turned off.
+	The number of files to consider in the exhaustive portion of
+	copy/rename detection; equivalent to the 'git diff' option
+	`-l`.  If not set, the default value is currently 1000.  This
+	setting has no effect if rename detection is turned off.
 
 diff.renames::
 	Whether and how Git detects renames.  If set to "false",
diff --git a/Documentation/config/fetch.txt b/Documentation/config/fetch.txt
index 6af6f5e..63748c0 100644
--- a/Documentation/config/fetch.txt
+++ b/Documentation/config/fetch.txt
@@ -69,7 +69,8 @@
 	setting defaults to "skipping".
 	Unknown values will cause 'git fetch' to error out.
 +
-See also the `--negotiation-tip` option for linkgit:git-fetch[1].
+See also the `--negotiate-only` and `--negotiation-tip` options to
+linkgit:git-fetch[1].
 
 fetch.showForcedUpdates::
 	Set to false to enable `--no-show-forced-updates` in
diff --git a/Documentation/config/index.txt b/Documentation/config/index.txt
index 7cb50b3..75f3a2d 100644
--- a/Documentation/config/index.txt
+++ b/Documentation/config/index.txt
@@ -14,6 +14,11 @@
 	Defaults to 'true' if index.threads has been explicitly enabled,
 	'false' otherwise.
 
+index.sparse::
+	When enabled, write the index using sparse-directory entries. This
+	has no effect unless `core.sparseCheckout` and
+	`core.sparseCheckoutCone` are both enabled. Defaults to 'false'.
+
 index.threads::
 	Specifies the number of threads to spawn when loading the index.
 	This is meant to reduce index load time on multiprocessor machines.
diff --git a/Documentation/config/log.txt b/Documentation/config/log.txt
index 208d5fd..456eb07 100644
--- a/Documentation/config/log.txt
+++ b/Documentation/config/log.txt
@@ -24,6 +24,11 @@
 	the config option can be overridden by the `--decorate-refs`
 	option.
 
+log.diffMerges::
+	Set default diff format to be used for merge commits. See
+	`--diff-merges` in linkgit:git-log[1] for details.
+	Defaults to `separate`.
+
 log.follow::
 	If `true`, `git log` will act as if the `--follow` option was used when
 	a single <path> is given.  This has the same limitations as `--follow`,
diff --git a/Documentation/config/merge.txt b/Documentation/config/merge.txt
index cb2ed58..e27cc63 100644
--- a/Documentation/config/merge.txt
+++ b/Documentation/config/merge.txt
@@ -14,7 +14,7 @@
 	branches at the remote named by `branch.<current branch>.remote`
 	are consulted, and then they are mapped via `remote.<remote>.fetch`
 	to their corresponding remote-tracking branches, and the tips of
-	these tracking branches are merged.
+	these tracking branches are merged. Defaults to true.
 
 merge.ff::
 	By default, Git does not create an extra merge commit when merging
@@ -33,10 +33,12 @@
 include::fmt-merge-msg.txt[]
 
 merge.renameLimit::
-	The number of files to consider when performing rename detection
-	during a merge; if not specified, defaults to the value of
-	diff.renameLimit. This setting has no effect if rename detection
-	is turned off.
+	The number of files to consider in the exhaustive portion of
+	rename detection during a merge.  If not specified, defaults
+	to the value of diff.renameLimit.  If neither
+	merge.renameLimit nor diff.renameLimit are specified,
+	currently defaults to 7000.  This setting has no effect if
+	rename detection is turned off.
 
 merge.renames::
 	Whether Git detects renames.  If set to "false", rename detection
diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.txt
index 90f76f5..cafbbef 100644
--- a/Documentation/config/mergetool.txt
+++ b/Documentation/config/mergetool.txt
@@ -53,7 +53,7 @@
 	resolution. This flag causes 'LOCAL' and 'REMOTE' to be overwriten so
 	that only the unresolved conflicts are presented to the merge tool. Can
 	be configured per-tool via the `mergetool.<tool>.hideResolved`
-	configuration variable. Defaults to `true`.
+	configuration variable. Defaults to `false`.
 
 mergetool.keepBackup::
 	After performing a merge, the original file with conflict markers
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt
index 3da4ea9..763f7af 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.txt
@@ -99,12 +99,23 @@
 	packing to a file when repacking, i.e. the git:// protocol
 	is unaffected.  It can be overridden by the `--max-pack-size`
 	option of linkgit:git-repack[1].  Reaching this limit results
-	in the creation of multiple packfiles; which in turn prevents
-	bitmaps from being created.
-	The minimum size allowed is limited to 1 MiB.
-	The default is unlimited.
-	Common unit suffixes of 'k', 'm', or 'g' are
-	supported.
+	in the creation of multiple packfiles.
++
+Note that this option is rarely useful, and may result in a larger total
+on-disk size (because Git will not store deltas between packs), as well
+as worse runtime performance (object lookup within multiple packs is
+slower than a single pack, and optimizations like reachability bitmaps
+cannot cope with multiple packs).
++
+If you need to actively run Git using smaller packfiles (e.g., because your
+filesystem does not support large files), this option may help. But if
+your goal is to transmit a packfile over a medium that supports limited
+sizes (e.g., removable media that cannot store the whole repository),
+you are likely better off creating a single large packfile and splitting
+it using a generic multi-volume archive tool (e.g., Unix `split`).
++
+The minimum size allowed is limited to 1 MiB. The default is unlimited.
+Common unit suffixes of 'k', 'm', or 'g' are supported.
 
 pack.useBitmaps::
 	When true, git will use pack bitmaps (if available) when packing
@@ -122,6 +133,21 @@
 	commits contain certain types of direct renames. Default is
 	`true`.
 
+pack.preferBitmapTips::
+	When selecting which commits will receive bitmaps, prefer a
+	commit at the tip of any reference that is a suffix of any value
+	of this configuration over any other commits in the "selection
+	window".
++
+Note that setting this configuration to `refs/foo` does not mean that
+the commits at the tips of `refs/foo/bar` and `refs/foo/baz` will
+necessarily be selected. This is because commits are selected for
+bitmaps from within a series of windows of variable length.
++
+If a commit at the tip of any reference which is a suffix of any value
+of this configuration is seen in a window, it is immediately given
+preference over any other commit in that window.
+
 pack.writeBitmaps (deprecated)::
 	This is a deprecated synonym for `repack.writeBitmaps`.
 
diff --git a/Documentation/config/push.txt b/Documentation/config/push.txt
index 21b256e..6320336 100644
--- a/Documentation/config/push.txt
+++ b/Documentation/config/push.txt
@@ -24,15 +24,14 @@
 
 * `tracking` - This is a deprecated synonym for `upstream`.
 
-* `simple` - in centralized workflow, work like `upstream` with an
-  added safety to refuse to push if the upstream branch's name is
-  different from the local one.
+* `simple` - pushes the current branch with the same name on the remote.
 +
-When pushing to a remote that is different from the remote you normally
-pull from, work as `current`.  This is the safest option and is suited
-for beginners.
+If you are working on a centralized workflow (pushing to the same repository you
+pull from, which is typically `origin`), then you need to configure an upstream
+branch with the same name.
 +
-This mode has become the default in Git 2.0.
+This mode is the default since Git 2.0, and is the safest option suited for
+beginners.
 
 * `matching` - push all branches having the same name on both ends.
   This makes the repository you are pushing to remember the set of
@@ -120,3 +119,10 @@
 	`--force-if-includes` as an option to linkgit:git-push[1]
 	in the command line. Adding `--no-force-if-includes` at the
 	time of push overrides this configuration setting.
+
+push.negotiate::
+	If set to "true", attempt to reduce the size of the packfile
+	sent by rounds of negotiation in which the client and the
+	server attempt to find commits in common. If "false", Git will
+	rely solely on the server's ref advertisement to find commits
+	in common.
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.txt
index 7f7a07d..8c979cb 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.txt
@@ -1,10 +1,3 @@
-rebase.useBuiltin::
-	Unused configuration variable. Used in Git versions 2.20 and
-	2.21 as an escape hatch to enable the legacy shellscript
-	implementation of rebase. Now the built-in rewrite of it in C
-	is always used. Setting this will emit a warning, to alert any
-	remaining users that setting this now does nothing.
-
 rebase.backend::
 	Default backend to use for rebasing.  Possible choices are
 	'apply' or 'merge'.  In the future, if the merge backend gains
@@ -68,3 +61,6 @@
 	Automatically reschedule `exec` commands that failed. This only makes
 	sense in interactive mode (or when an `--exec` option was provided).
 	This is the same as specifying the `--reschedule-failed-exec` option.
+
+rebase.forkPoint::
+	If set to false set `--no-fork-point` option by default.
diff --git a/Documentation/config/sendemail.txt b/Documentation/config/sendemail.txt
index cbc5af4..50baa5d 100644
--- a/Documentation/config/sendemail.txt
+++ b/Documentation/config/sendemail.txt
@@ -8,9 +8,6 @@
 	See linkgit:git-send-email[1] for description.  Note that this
 	setting is not subject to the 'identity' mechanism.
 
-sendemail.smtpssl (deprecated)::
-	Deprecated alias for 'sendemail.smtpEncryption = ssl'.
-
 sendemail.smtpsslcertpath::
 	Path to ca-certificates (either a directory or a single file).
 	Set it to an empty string to disable certificate verification.
diff --git a/Documentation/config/stash.txt b/Documentation/config/stash.txt
index 00eb354..9ed7752 100644
--- a/Documentation/config/stash.txt
+++ b/Documentation/config/stash.txt
@@ -5,6 +5,11 @@
 	is always used. Setting this will emit a warning, to alert any
 	remaining users that setting this now does nothing.
 
+stash.showIncludeUntracked::
+	If this is set to true, the `git stash show` command will show
+	the untracked files of a stash entry.  Defaults to false. See
+	description of 'show' command in linkgit:git-stash[1].
+
 stash.showPatch::
 	If this is set to true, the `git stash show` command without an
 	option will show the stash entry in patch form.  Defaults to false.
diff --git a/Documentation/config/uploadpack.txt b/Documentation/config/uploadpack.txt
index b0d7612..32fad5b 100644
--- a/Documentation/config/uploadpack.txt
+++ b/Documentation/config/uploadpack.txt
@@ -59,15 +59,16 @@
 
 uploadpackfilter.allow::
 	Provides a default value for unspecified object filters (see: the
-	below configuration variable).
+	below configuration variable). If set to `true`, this will also
+	enable all filters which get added in the future.
 	Defaults to `true`.
 
 uploadpackfilter.<filter>.allow::
 	Explicitly allow or ban the object filter corresponding to
 	`<filter>`, where `<filter>` may be one of: `blob:none`,
-	`blob:limit`, `tree`, `sparse:oid`, or `combine`. If using
-	combined filters, both `combine` and all of the nested filter
-	kinds must be allowed. Defaults to `uploadpackfilter.allow`.
+	`blob:limit`, `object:type`, `tree`, `sparse:oid`, or `combine`.
+	If using combined filters, both `combine` and all of the nested
+	filter kinds must be allowed. Defaults to `uploadpackfilter.allow`.
 
 uploadpackfilter.tree.maxDepth::
 	Only allow `--filter=tree:<n>` when `<n>` is no more than the value of
diff --git a/Documentation/date-formats.txt b/Documentation/date-formats.txt
index f1097fa..99c455f 100644
--- a/Documentation/date-formats.txt
+++ b/Documentation/date-formats.txt
@@ -1,10 +1,7 @@
 DATE FORMATS
 ------------
 
-The `GIT_AUTHOR_DATE`, `GIT_COMMITTER_DATE` environment variables
-ifdef::git-commit[]
-and the `--date` option
-endif::git-commit[]
+The `GIT_AUTHOR_DATE` and `GIT_COMMITTER_DATE` environment variables
 support the following date formats:
 
 Git internal format::
@@ -26,3 +23,9 @@
 +
 NOTE: In addition, the date part is accepted in the following formats:
 `YYYY.MM.DD`, `MM/DD/YYYY` and `DD.MM.YYYY`.
+
+ifdef::git-commit[]
+In addition to recognizing all date formats above, the `--date` option
+will also try to make sense of other, more human-centric date formats,
+such as relative dates like "yesterday" or "last Friday at noon".
+endif::git-commit[]
diff --git a/Documentation/diff-generate-patch.txt b/Documentation/diff-generate-patch.txt
index 2db8eac..c78063d 100644
--- a/Documentation/diff-generate-patch.txt
+++ b/Documentation/diff-generate-patch.txt
@@ -11,7 +11,7 @@
 with the `-p` option produces patch text.
 You can customize the creation of patch text via the
 `GIT_EXTERNAL_DIFF` and the `GIT_DIFF_OPTS` environment variables
-(see linkgit:git[1]).
+(see linkgit:git[1]), and the `diff` attribute (see linkgit:gitattributes[5]).
 
 What the -p option produces is slightly different from the traditional
 diff format:
@@ -74,6 +74,11 @@
       rename from b
       rename to a
 
+5.  Hunk headers mention the name of the function to which the hunk
+    applies.  See "Defining a custom hunk-header" in
+    linkgit:gitattributes[5] for details of how to tailor to this to
+    specific languages.
+
 
 Combined diff format
 --------------------
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index e5733cc..0aebe83 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -34,7 +34,7 @@
 endif::git-format-patch[]
 
 ifdef::git-log[]
---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)::
+--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc)::
 --no-diff-merges::
 	Specify diff format to be used for merge commits. Default is
 	{diff-merges-default} unless `--first-parent` is in use, in which case
@@ -45,17 +45,24 @@
 	Disable output of diffs for merge commits. Useful to override
 	implied value.
 +
+--diff-merges=on:::
+--diff-merges=m:::
+-m:::
+	This option makes diff output for merge commits to be shown in
+	the default format. The default format could be changed using
+	`log.diffMerges` configuration parameter, which default value
+	is `separate`. `-m` implies `-p`.
++
 --diff-merges=first-parent:::
 --diff-merges=1:::
 	This option makes merge commits show the full diff with
 	respect to the first parent only.
 +
 --diff-merges=separate:::
---diff-merges=m:::
--m:::
 	This makes merge commits show the full diff with respect to
 	each of the parents. Separate log entry and diff is generated
-	for each parent. `-m` doesn't produce any output without `-p`.
+	for each parent. This is the format that `-m` produced
+	historically.
 +
 --diff-merges=combined:::
 --diff-merges=c:::
@@ -293,11 +300,14 @@
 linkgit:git-config[1]).
 
 --name-only::
-	Show only names of changed files.
+	Show only names of changed files. The file names are often encoded in UTF-8.
+	For more information see the discussion about encoding in the linkgit:git-log[1]
+	manual page.
 
 --name-status::
 	Show only names and status of changed files. See the description
 	of the `--diff-filter` option on what the status letters mean.
+	Just like `--name-only` the file names are often encoded in UTF-8.
 
 --submodule[=<format>]::
 	Specify how differences in submodules are shown.  When specifying
@@ -578,11 +588,17 @@
 of a delete/create pair.
 
 -l<num>::
-	The `-M` and `-C` options require O(n^2) processing time where n
-	is the number of potential rename/copy targets.  This
-	option prevents rename/copy detection from running if
-	the number of rename/copy targets exceeds the specified
-	number.
+	The `-M` and `-C` options involve some preliminary steps that
+	can detect subsets of renames/copies cheaply, followed by an
+	exhaustive fallback portion that compares all remaining
+	unpaired destinations to all relevant sources.  (For renames,
+	only remaining unpaired sources are relevant; for copies, all
+	original sources are relevant.)  For N sources and
+	destinations, this exhaustive check is O(N^2).  This option
+	prevents the exhaustive portion of rename/copy detection from
+	running if the number of source/destination files involved
+	exceeds the specified number.  Defaults to diff.renameLimit.
+	Note that a value of 0 is treated as unlimited.
 
 ifndef::git-format-patch[]
 --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]::
@@ -700,6 +716,14 @@
 components matches the pattern.  For example, the pattern "`foo*bar`"
 matches "`fooasdfbar`" and "`foo/bar/baz/asdf`" but not "`foobarx`".
 
+--skip-to=<file>::
+--rotate-to=<file>::
+	Discard the files before the named <file> from the output
+	(i.e. 'skip to'), or move them to the end of the output
+	(i.e. 'rotate to').  These were invented primarily for use
+	of the `git difftool` command, and may not be very useful
+	otherwise.
+
 ifndef::git-format-patch[]
 -R::
 	Swap two inputs; that is, show differences from index or
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 07783de..e967ff1 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -62,8 +62,17 @@
 abbreviated) SHA-1 of a commit. Specifying a glob is equivalent to specifying
 this option multiple times, one for each matching ref name.
 +
-See also the `fetch.negotiationAlgorithm` configuration variable
-documented in linkgit:git-config[1].
+See also the `fetch.negotiationAlgorithm` and `push.negotiate`
+configuration variables documented in linkgit:git-config[1], and the
+`--negotiate-only` option below.
+
+--negotiate-only::
+	Do not fetch anything from the server, and instead print the
+	ancestors of the provided `--negotiation-tip=*` arguments,
+	which we have in common with the server.
++
+Internally this is used to implement the `push.negotiate` option, see
+linkgit:git-config[1].
 
 --dry-run::
 	Show what would be done, without making any changes.
@@ -110,6 +119,11 @@
 	setting `fetch.writeCommitGraph`.
 endif::git-pull[]
 
+--prefetch::
+	Modify the configured refspec to place all refs into the
+	`refs/prefetch/` namespace. See the `prefetch` task in
+	linkgit:git-maintenance[1].
+
 -p::
 --prune::
 	Before fetching, remove any remote-tracking references that no
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 06bc063..8714dfc 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -15,6 +15,7 @@
 	 [--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>]
 	 [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
 	 [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
+	 [--quoted-cr=<action>]
 	 [(<mbox> | <Maildir>)...]
 'git am' (--continue | --skip | --abort | --quit | --show-current-patch[=(diff|raw)])
 
@@ -59,6 +60,9 @@
 --no-scissors::
 	Ignore scissors lines (see linkgit:git-mailinfo[1]).
 
+--quoted-cr=<action>::
+	This flag will be passed down to 'git mailinfo' (see linkgit:git-mailinfo[1]).
+
 -m::
 --message-id::
 	Pass the `-m` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]),
@@ -79,7 +83,7 @@
 	Pass `-u` flag to 'git mailinfo' (see linkgit:git-mailinfo[1]).
 	The proposed commit log message taken from the e-mail
 	is re-coded into UTF-8 encoding (configuration variable
-	`i18n.commitencoding` can be used to specify project's
+	`i18n.commitEncoding` can be used to specify project's
 	preferred encoding if it is not UTF-8).
 +
 This was optional in prior versions of git, but now it is the
diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt
index 91d9a86..aa1ae56 100644
--- a/Documentation/git-apply.txt
+++ b/Documentation/git-apply.txt
@@ -84,12 +84,13 @@
 
 -3::
 --3way::
-	When the patch does not apply cleanly, fall back on 3-way merge if
-	the patch records the identity of blobs it is supposed to apply to,
-	and we have those blobs available locally, possibly leaving the
+	Attempt 3-way merge if the patch records the identity of blobs it is supposed
+	to apply to and we have those blobs available locally, possibly leaving the
 	conflict markers in the files in the working tree for the user to
-	resolve.  This option implies the `--index` option, and is incompatible
-	with the `--reject` and the `--cached` options.
+	resolve.  This option implies the `--index` option unless the
+	`--cached` option is used, and is incompatible with the `--reject` option.
+	When used with the `--cached` option, any conflicts are left at higher stages
+	in the cache.
 
 --build-fake-ancestor=<file>::
 	Newer 'git diff' output has embedded 'index information'
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index eb815c2..94dc9a5 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -153,7 +153,7 @@
 --column[=<options>]::
 --no-column::
 	Display branch listing in columns. See configuration variable
-	column.branch for option syntax.`--column` and `--no-column`
+	`column.branch` for option syntax. `--column` and `--no-column`
 	without options are equivalent to 'always' and 'never' respectively.
 +
 This option is only applicable in non-verbose mode.
diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt
index 8e192d8..4eb0421 100644
--- a/Documentation/git-cat-file.txt
+++ b/Documentation/git-cat-file.txt
@@ -35,42 +35,42 @@
 
 -t::
 	Instead of the content, show the object type identified by
-	<object>.
+	`<object>`.
 
 -s::
 	Instead of the content, show the object size identified by
-	<object>.
+	`<object>`.
 
 -e::
-	Exit with zero status if <object> exists and is a valid
-	object. If <object> is of an invalid format exit with non-zero and
+	Exit with zero status if `<object>` exists and is a valid
+	object. If `<object>` is of an invalid format exit with non-zero and
 	emits an error on stderr.
 
 -p::
-	Pretty-print the contents of <object> based on its type.
+	Pretty-print the contents of `<object>` based on its type.
 
 <type>::
-	Typically this matches the real type of <object> but asking
+	Typically this matches the real type of `<object>` but asking
 	for a type that can trivially be dereferenced from the given
-	<object> is also permitted.  An example is to ask for a
-	"tree" with <object> being a commit object that contains it,
-	or to ask for a "blob" with <object> being a tag object that
+	`<object>` is also permitted.  An example is to ask for a
+	"tree" with `<object>` being a commit object that contains it,
+	or to ask for a "blob" with `<object>` being a tag object that
 	points at it.
 
 --textconv::
 	Show the content as transformed by a textconv filter. In this case,
-	<object> has to be of the form <tree-ish>:<path>, or :<path> in
+	`<object>` has to be of the form `<tree-ish>:<path>`, or `:<path>` in
 	order to apply the filter to the content recorded in the index at
-	<path>.
+	`<path>`.
 
 --filters::
 	Show the content as converted by the filters configured in
-	the current working tree for the given <path> (i.e. smudge filters,
-	end-of-line conversion, etc). In this case, <object> has to be of
-	the form <tree-ish>:<path>, or :<path>.
+	the current working tree for the given `<path>` (i.e. smudge filters,
+	end-of-line conversion, etc). In this case, `<object>` has to be of
+	the form `<tree-ish>:<path>`, or `:<path>`.
 
 --path=<path>::
-	For use with --textconv or --filters, to allow specifying an object
+	For use with `--textconv` or `--filters`, to allow specifying an object
 	name and a path separately, e.g. when it is difficult to figure out
 	the revision from which the blob came.
 
@@ -115,15 +115,15 @@
 	repository.
 
 --allow-unknown-type::
-	Allow -s or -t to query broken/corrupt objects of unknown type.
+	Allow `-s` or `-t` to query broken/corrupt objects of unknown type.
 
 --follow-symlinks::
-	With --batch or --batch-check, follow symlinks inside the
+	With `--batch` or `--batch-check`, follow symlinks inside the
 	repository when requesting objects with extended SHA-1
 	expressions of the form tree-ish:path-in-tree.  Instead of
 	providing output about the link itself, provide output about
 	the linked-to object.  If a symlink points outside the
-	tree-ish (e.g. a link to /foo or a root-level link to ../foo),
+	tree-ish (e.g. a link to `/foo` or a root-level link to `../foo`),
 	the portion of the link which is outside the tree will be
 	printed.
 +
@@ -175,15 +175,15 @@
 
 OUTPUT
 ------
-If `-t` is specified, one of the <type>.
+If `-t` is specified, one of the `<type>`.
 
-If `-s` is specified, the size of the <object> in bytes.
+If `-s` is specified, the size of the `<object>` in bytes.
 
-If `-e` is specified, no output, unless the <object> is malformed.
+If `-e` is specified, no output, unless the `<object>` is malformed.
 
-If `-p` is specified, the contents of <object> are pretty-printed.
+If `-p` is specified, the contents of `<object>` are pretty-printed.
 
-If <type> is specified, the raw (though uncompressed) contents of the <object>
+If `<type>` is specified, the raw (though uncompressed) contents of the `<object>`
 will be returned.
 
 BATCH OUTPUT
@@ -200,7 +200,7 @@
 newline. The available atoms are:
 
 `objectname`::
-	The 40-hex object name of the object.
+	The full hex representation of the object name.
 
 `objecttype`::
 	The type of the object (the same as `cat-file -t` reports).
@@ -215,8 +215,9 @@
 
 `deltabase`::
 	If the object is stored as a delta on-disk, this expands to the
-	40-hex sha1 of the delta base object. Otherwise, expands to the
-	null sha1 (40 zeroes). See `CAVEATS` below.
+	full hex representation of the delta base object name.
+	Otherwise, expands to the null OID (all zeroes). See `CAVEATS`
+	below.
 
 `rest`::
 	If this atom is used in the output string, input lines are split
@@ -235,14 +236,14 @@
 For example, `--batch` without a custom format would produce:
 
 ------------
-<sha1> SP <type> SP <size> LF
+<oid> SP <type> SP <size> LF
 <contents> LF
 ------------
 
 Whereas `--batch-check='%(objectname) %(objecttype)'` would produce:
 
 ------------
-<sha1> SP <type> LF
+<oid> SP <type> LF
 ------------
 
 If a name is specified on stdin that cannot be resolved to an object in
@@ -258,7 +259,7 @@
 <object> SP ambiguous LF
 ------------
 
-If --follow-symlinks is used, and a symlink in the repository points
+If `--follow-symlinks` is used, and a symlink in the repository points
 outside the repository, then `cat-file` will ignore any custom format
 and print:
 
@@ -267,11 +268,11 @@
 <symlink> LF
 ------------
 
-The symlink will either be absolute (beginning with a /), or relative
-to the tree root.  For instance, if dir/link points to ../../foo, then
-<symlink> will be ../foo.  <size> is the size of the symlink in bytes.
+The symlink will either be absolute (beginning with a `/`), or relative
+to the tree root.  For instance, if dir/link points to `../../foo`, then
+`<symlink>` will be `../foo`.  `<size>` is the size of the symlink in bytes.
 
-If --follow-symlinks is used, the following error messages will be
+If `--follow-symlinks` is used, the following error messages will be
 displayed:
 
 ------------
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 02d9c19..3fe3810 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -15,7 +15,7 @@
 	  [--dissociate] [--separate-git-dir <git dir>]
 	  [--depth <depth>] [--[no-]single-branch] [--no-tags]
 	  [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
-	  [--[no-]remote-submodules] [--jobs <n>] [--sparse]
+	  [--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
 	  [--filter=<filter>] [--] <repository>
 	  [<directory>]
 
@@ -149,6 +149,11 @@
 --no-checkout::
 	No checkout of HEAD is performed after the clone is complete.
 
+--[no-]reject-shallow::
+	Fail if the source repository is a shallow repository.
+	The 'clone.rejectShallow' configuration variable can be used to
+	specify the default.
+
 --bare::
 	Make a 'bare' Git repository.  That is, instead of
 	creating `<directory>` and placing the administrative
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 17150fa..95fec5f 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.txt
@@ -9,12 +9,13 @@
 --------
 [verse]
 'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
-	   [--dry-run] [(-c | -C | --fixup | --squash) <commit>]
+	   [--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>)]
 	   [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
 	   [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
 	   [--date=<date>] [--cleanup=<mode>] [--[no-]status]
 	   [-i | -o] [--pathspec-from-file=<file> [--pathspec-file-nul]]
-	   [-S[<keyid>]] [--] [<pathspec>...]
+	   [(--trailer <token>[(=|:)<value>])...] [-S[<keyid>]]
+	   [--] [<pathspec>...]
 
 DESCRIPTION
 -----------
@@ -71,7 +72,7 @@
 
 -p::
 --patch::
-	Use the interactive patch selection interface to chose
+	Use the interactive patch selection interface to choose
 	which changes to commit. See linkgit:git-add[1] for
 	details.
 
@@ -86,11 +87,44 @@
 	Like '-C', but with `-c` the editor is invoked, so that
 	the user can further edit the commit message.
 
---fixup=<commit>::
-	Construct a commit message for use with `rebase --autosquash`.
-	The commit message will be the subject line from the specified
-	commit with a prefix of "fixup! ".  See linkgit:git-rebase[1]
-	for details.
+--fixup=[(amend|reword):]<commit>::
+	Create a new commit which "fixes up" `<commit>` when applied with
+	`git rebase --autosquash`. Plain `--fixup=<commit>` creates a
+	"fixup!" commit which changes the content of `<commit>` but leaves
+	its log message untouched. `--fixup=amend:<commit>` is similar but
+	creates an "amend!" commit which also replaces the log message of
+	`<commit>` with the log message of the "amend!" commit.
+	`--fixup=reword:<commit>` creates an "amend!" commit which
+	replaces the log message of `<commit>` with its own log message
+	but makes no changes to the content of `<commit>`.
++
+The commit created by plain `--fixup=<commit>` has a subject
+composed of "fixup!" followed by the subject line from <commit>,
+and is recognized specially by `git rebase --autosquash`. The `-m`
+option may be used to supplement the log message of the created
+commit, but the additional commentary will be thrown away once the
+"fixup!" commit is squashed into `<commit>` by
+`git rebase --autosquash`.
++
+The commit created by `--fixup=amend:<commit>` is similar but its
+subject is instead prefixed with "amend!". The log message of
+<commit> is copied into the log message of the "amend!" commit and
+opened in an editor so it can be refined. When `git rebase
+--autosquash` squashes the "amend!" commit into `<commit>`, the
+log message of `<commit>` is replaced by the refined log message
+from the "amend!" commit. It is an error for the "amend!" commit's
+log message to be empty unless `--allow-empty-message` is
+specified.
++
+`--fixup=reword:<commit>` is shorthand for `--fixup=amend:<commit>
+--only`. It creates an "amend!" commit with only a log message
+(ignoring any changes staged in the index). When squashed by `git
+rebase --autosquash`, it replaces the log message of `<commit>`
+without making any other changes.
++
+Neither "fixup!" nor "amend!" commits change authorship of
+`<commit>` when applied by `git rebase --autosquash`.
+See linkgit:git-rebase[1] for details.
 
 --squash=<commit>::
 	Construct a commit message for use with `rebase --autosquash`.
@@ -166,6 +200,17 @@
 
 include::signoff-option.txt[]
 
+--trailer <token>[(=|:)<value>]::
+	Specify a (<token>, <value>) pair that should be applied as a
+	trailer. (e.g. `git commit --trailer "Signed-off-by:C O Mitter \
+	<committer@example.com>" --trailer "Helped-by:C O Mitter \
+	<committer@example.com>"` will add the "Signed-off-by" trailer
+	and the "Helped-by" trailer to the commit message.)
+	The `trailer.*` configuration variables
+	(linkgit:git-interpret-trailers[1]) can be used to define if
+	a duplicated trailer is omitted, where in the run of trailers
+	each trailer would appear, and other details.
+
 -n::
 --no-verify::
 	This option bypasses the pre-commit and commit-msg hooks.
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index 4b4cc5c..5cddada 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -340,6 +340,11 @@
 	Using the "--global" option forces this to ~/.gitconfig. Using the
 	"--system" option forces this to $(prefix)/etc/gitconfig.
 
+GIT_CONFIG_GLOBAL::
+GIT_CONFIG_SYSTEM::
+	Take the configuration from the given files instead from global or
+	system-level configuration. See linkgit:git[1] for details.
+
 GIT_CONFIG_NOSYSTEM::
 	Whether to skip reading settings from the system-wide
 	$(prefix)/etc/gitconfig file. See linkgit:git[1] for details.
diff --git a/Documentation/git-credential.txt b/Documentation/git-credential.txt
index 31c81c4..206e3c5 100644
--- a/Documentation/git-credential.txt
+++ b/Documentation/git-credential.txt
@@ -159,3 +159,7 @@
 +
 Components which are missing from the URL (e.g., there is no
 username in the example above) will be left unset.
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt
index 1b1c71a..f2e4a47 100644
--- a/Documentation/git-cvsserver.txt
+++ b/Documentation/git-cvsserver.txt
@@ -24,6 +24,18 @@
 [verse]
 'git-cvsserver' [<options>] [pserver|server] [<directory> ...]
 
+DESCRIPTION
+-----------
+
+This application is a CVS emulation layer for Git.
+
+It is highly functional. However, not all methods are implemented,
+and for those methods that are implemented,
+not all switches are implemented.
+
+Testing has been done using both the CLI CVS client, and the Eclipse CVS
+plugin. Most functionality works fine with both of these clients.
+
 OPTIONS
 -------
 
@@ -57,18 +69,6 @@
 unless `--export-all` was given, too.
 
 
-DESCRIPTION
------------
-
-This application is a CVS emulation layer for Git.
-
-It is highly functional. However, not all methods are implemented,
-and for those methods that are implemented,
-not all switches are implemented.
-
-Testing has been done using both the CLI CVS client, and the Eclipse CVS
-plugin. Most functionality works fine with both of these clients.
-
 LIMITATIONS
 -----------
 
diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt
index a88f6ae..c6a79c2 100644
--- a/Documentation/git-describe.txt
+++ b/Documentation/git-describe.txt
@@ -63,9 +63,10 @@
 	Automatically implies --tags.
 
 --abbrev=<n>::
-	Instead of using the default 7 hexadecimal digits as the
-	abbreviated object name, use <n> digits, or as many digits
-	as needed to form a unique object name.  An <n> of 0
+	Instead of using the default number of hexadecimal digits (which
+	will vary according to the number of objects in the repository with
+	a default of 7) of the abbreviated object name, use <n> digits, or
+	as many digits as needed to form a unique object name. An <n> of 0
 	will suppress long format, only showing the closest tag.
 
 --candidates=<n>::
@@ -139,8 +140,11 @@
 
 The number of additional commits is the number
 of commits which would be displayed by "git log v1.0.4..parent".
-The hash suffix is "-g" + unambiguous abbreviation for the tip commit
-of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`).
+The hash suffix is "-g" + an unambigous abbreviation for the tip commit
+of parent (which was `2414721b194453f058079d897d13c4e377f92dc6`). The
+length of the abbreviation scales as the repository grows, using the
+approximate number of objects in the repository and a bit of math
+around the birthday paradox, and defaults to a minimum of 7.
 The "g" prefix stands for "git" and is used to allow describing the version of
 a software depending on the SCM the software is managed with. This is useful
 in an environment where people may use different SCMs.
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index 7f4c8a8..6236c75 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt
@@ -51,16 +51,20 @@
 	--staged is a synonym of --cached.
 +
 If --merge-base is given, instead of using <commit>, use the merge base
-of <commit> and HEAD.  `git diff --merge-base A` is equivalent to
-`git diff $(git merge-base A HEAD)`.
+of <commit> and HEAD.  `git diff --cached --merge-base A` is equivalent to
+`git diff --cached $(git merge-base A HEAD)`.
 
-'git diff' [<options>] <commit> [--] [<path>...]::
+'git diff' [<options>] [--merge-base] <commit> [--] [<path>...]::
 
 	This form is to view the changes you have in your
 	working tree relative to the named <commit>.  You can
 	use HEAD to compare it with the latest commit, or a
 	branch name to compare with the tip of a different
 	branch.
++
+If --merge-base is given, instead of using <commit>, use the merge base
+of <commit> and HEAD.  `git diff --merge-base A` is equivalent to
+`git diff $(git merge-base A HEAD)`.
 
 'git diff' [<options>] [--merge-base] <commit> <commit> [--] [<path>...]::
 
diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt
index 484c485..143b0c4 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.txt
@@ -34,6 +34,14 @@
 	This is the default behaviour; the option is provided to
 	override any configuration settings.
 
+--rotate-to=<file>::
+	Start showing the diff for the given path,
+	the paths before it will move to end and output.
+
+--skip-to=<file>::
+	Start showing the diff for the given path, skipping all
+	the paths before it.
+
 -t <tool>::
 --tool=<tool>::
 	Use the diff tool specified by <tool>.  Valid values include
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 2962f85..2ae2478 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -260,11 +260,9 @@
 	The first `N` lines of the message.
 
 Additionally, the trailers as interpreted by linkgit:git-interpret-trailers[1]
-are obtained as `trailers` (or by using the historical alias
-`contents:trailers`).  Non-trailer lines from the trailer block can be omitted
-with `trailers:only`. Whitespace-continuations can be removed from trailers so
-that each trailer appears on a line by itself with its full content with
-`trailers:unfold`. Both can be used together as `trailers:unfold,only`.
+are obtained as `trailers[:options]` (or by using the historical alias
+`contents:trailers[:options]`). For valid [:option] values see `trailers`
+section of linkgit:git-log[1].
 
 For sorting purposes, fields with numeric values sort in numeric order
 (`objectsize`, `authordate`, `committerdate`, `creatordate`, `taggerdate`).
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index 3e49bf2..fe2f69d 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -36,11 +36,28 @@
 DESCRIPTION
 -----------
 
-Prepare each commit with its patch in
-one file per commit, formatted to resemble UNIX mailbox format.
+Prepare each non-merge commit with its "patch" in
+one "message" per commit, formatted to resemble a UNIX mailbox.
 The output of this command is convenient for e-mail submission or
 for use with 'git am'.
 
+A "message" generated by the command consists of three parts:
+
+* A brief metadata header that begins with `From <commit>`
+  with a fixed `Mon Sep 17 00:00:00 2001` datestamp to help programs
+  like "file(1)" to recognize that the file is an output from this
+  command, fields that record the author identity, the author date,
+  and the title of the change (taken from the first paragraph of the
+  commit log message).
+
+* The second and subsequent paragraphs of the commit log message.
+
+* The "patch", which is the "diff -p --stat" output (see
+  linkgit:git-diff[1]) between the commit and its parent.
+
+The log message and the patch is separated by a line with a
+three-dash line.
+
 There are two ways to specify which commits to operate on.
 
 1. A single commit, <since>, specifies that the commits leading
@@ -221,6 +238,11 @@
 	`--subject-prefix` option) has ` v<n>` appended to it.  E.g.
 	`--reroll-count=4` may produce `v4-0001-add-makefile.patch`
 	file that has "Subject: [PATCH v4 1/20] Add makefile" in it.
+	`<n>` does not have to be an integer (e.g. "--reroll-count=4.4",
+	or "--reroll-count=4rev2" are allowed), but the downside of
+	using such a reroll-count is that the range-diff/interdiff
+	with the previous version does not state exactly which
+	version the new interation is compared against.
 
 --to=<email>::
 	Add a `To:` header to the email headers. This is in addition
@@ -718,6 +740,14 @@
 $ git format-patch -3
 ------------
 
+CAVEATS
+-------
+
+Note that `format-patch` will omit merge commits from the output, even
+if they are part of the requested range. A simple "patch" does not
+include enough information for the receiving end to reproduce the same
+merge commit.
+
 SEE ALSO
 --------
 linkgit:git-am[1], linkgit:git-send-email[1]
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt
index 0c114ad..853967d 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.txt
@@ -117,12 +117,14 @@
 'git gc' tries very hard not to delete objects that are referenced
 anywhere in your repository. In particular, it will keep not only
 objects referenced by your current set of branches and tags, but also
-objects referenced by the index, remote-tracking branches, notes saved
-by 'git notes' under refs/notes/, reflogs (which may reference commits
-in branches that were later amended or rewound), and anything else in
-the refs/* namespace.  If you are expecting some objects to be deleted
-and they aren't, check all of those locations and decide whether it
-makes sense in your case to remove those references.
+objects referenced by the index, remote-tracking branches, reflogs
+(which may reference commits in branches that were later amended or
+rewound), and anything else in the refs/* namespace. Note that a note
+(of the kind created by 'git notes') attached to an object does not
+contribute in keeping the object alive. If you are expecting some
+objects to be deleted and they aren't, check all of those locations
+and decide whether it makes sense in your case to remove those
+references.
 
 On the other hand, when 'git gc' runs concurrently with another process,
 there is a risk of it deleting an object that the other process is using
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt
index 4e0ba82..3d393fb 100644
--- a/Documentation/git-grep.txt
+++ b/Documentation/git-grep.txt
@@ -38,38 +38,6 @@
 characters.  An empty string as search expression matches all lines.
 
 
-CONFIGURATION
--------------
-
-grep.lineNumber::
-	If set to true, enable `-n` option by default.
-
-grep.column::
-	If set to true, enable the `--column` option by default.
-
-grep.patternType::
-	Set the default matching behavior. Using a value of 'basic', 'extended',
-	'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`,
-	`--fixed-strings`, or `--perl-regexp` option accordingly, while the
-	value 'default' will return to the default matching behavior.
-
-grep.extendedRegexp::
-	If set to true, enable `--extended-regexp` option by default. This
-	option is ignored when the `grep.patternType` option is set to a value
-	other than 'default'.
-
-grep.threads::
-	Number of grep worker threads to use. If unset (or set to 0), Git will
-	use as many threads as the number of logical cores available.
-
-grep.fullName::
-	If set to true, enable `--full-name` option by default.
-
-grep.fallbackToNoIndex::
-	If set to true, fall back to git grep --no-index if git grep
-	is executed outside of a git repository.  Defaults to false.
-
-
 OPTIONS
 -------
 --cached::
@@ -363,6 +331,38 @@
 is given and there're too many text conversions. So if you experience low
 performance in this case, it might be desirable to use `--threads=1`.
 
+CONFIGURATION
+-------------
+
+grep.lineNumber::
+	If set to true, enable `-n` option by default.
+
+grep.column::
+	If set to true, enable the `--column` option by default.
+
+grep.patternType::
+	Set the default matching behavior. Using a value of 'basic', 'extended',
+	'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`,
+	`--fixed-strings`, or `--perl-regexp` option accordingly, while the
+	value 'default' will return to the default matching behavior.
+
+grep.extendedRegexp::
+	If set to true, enable `--extended-regexp` option by default. This
+	option is ignored when the `grep.patternType` option is set to a value
+	other than 'default'.
+
+grep.threads::
+	Number of grep worker threads to use. If unset (or set to 0), Git will
+	use as many threads as the number of logical cores available.
+
+grep.fullName::
+	If set to true, enable `--full-name` option by default.
+
+grep.fallbackToNoIndex::
+	If set to true, fall back to git grep --no-index if git grep
+	is executed outside of a git repository.  Defaults to false.
+
+
 GIT
 ---
 Part of the linkgit:git[1] suite
diff --git a/Documentation/git-http-fetch.txt b/Documentation/git-http-fetch.txt
index 4deb489..9fa17b6 100644
--- a/Documentation/git-http-fetch.txt
+++ b/Documentation/git-http-fetch.txt
@@ -41,11 +41,17 @@
 		<commit-id>['\t'<filename-as-in--w>]
 
 --packfile=<hash>::
-	Instead of a commit id on the command line (which is not expected in
+	For internal use only. Instead of a commit id on the command
+	line (which is not expected in
 	this case), 'git http-fetch' fetches the packfile directly at the given
 	URL and uses index-pack to generate corresponding .idx and .keep files.
 	The hash is used to determine the name of the temporary file and is
-	arbitrary. The output of index-pack is printed to stdout.
+	arbitrary. The output of index-pack is printed to stdout. Requires
+	--index-pack-args.
+
+--index-pack-args=<args>::
+	For internal use only. The command to run on the contents of the
+	downloaded pack. Arguments are URL-encoded separated by spaces.
 
 --recover::
 	Verify that everything reachable from target is fetched.  Used after
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.txt
index 69ba904..7fa74b9 100644
--- a/Documentation/git-index-pack.txt
+++ b/Documentation/git-index-pack.txt
@@ -86,7 +86,12 @@
 	Die if the pack contains broken links. For internal use only.
 
 --fsck-objects::
-	Die if the pack contains broken objects. For internal use only.
+	For internal use only.
++
+Die if the pack contains broken objects. If the pack contains a tree
+pointing to a .gitmodules blob that does not exist, prints the hash of
+that blob (for the caller to check) after the hash that goes into the
+name of the pack/idx file (see "Notes").
 
 --threads=<n>::
 	Specifies the number of threads to spawn when resolving
diff --git a/Documentation/git-interpret-trailers.txt b/Documentation/git-interpret-trailers.txt
index 96ec649..956a01d 100644
--- a/Documentation/git-interpret-trailers.txt
+++ b/Documentation/git-interpret-trailers.txt
@@ -232,25 +232,38 @@
 	that option for trailers with the specified <token>.
 
 trailer.<token>.command::
-	This option can be used to specify a shell command that will
-	be called to automatically add or modify a trailer with the
-	specified <token>.
+	This option behaves in the same way as 'trailer.<token>.cmd', except
+	that it doesn't pass anything as argument to the specified command.
+	Instead the first occurrence of substring $ARG is replaced by the
+	value that would be passed as argument.
 +
-When this option is specified, the behavior is as if a special
-'<token>=<value>' argument were added at the beginning of the command
-line, where <value> is taken to be the standard output of the
-specified command with any leading and trailing whitespace trimmed
-off.
+The 'trailer.<token>.command' option has been deprecated in favor of
+'trailer.<token>.cmd' due to the fact that $ARG in the user's command is
+only replaced once and that the original way of replacing $ARG is not safe.
 +
-If the command contains the `$ARG` string, this string will be
-replaced with the <value> part of an existing trailer with the same
-<token>, if any, before the command is launched.
+When both 'trailer.<token>.cmd' and 'trailer.<token>.command' are given
+for the same <token>, 'trailer.<token>.cmd' is used and
+'trailer.<token>.command' is ignored.
+
+trailer.<token>.cmd::
+	This option can be used to specify a shell command that will be called:
+	once to automatically add a trailer with the specified <token>, and then
+	each time a '--trailer <token>=<value>' argument to modify the <value> of
+	the trailer that this option would produce.
 +
-If some '<token>=<value>' arguments are also passed on the command
-line, when a 'trailer.<token>.command' is configured, the command will
-also be executed for each of these arguments. And the <value> part of
-these arguments, if any, will be used to replace the `$ARG` string in
-the command.
+When the specified command is first called to add a trailer
+with the specified <token>, the behavior is as if a special
+'--trailer <token>=<value>' argument was added at the beginning
+of the "git interpret-trailers" command, where <value>
+is taken to be the standard output of the command with any
+leading and trailing whitespace trimmed off.
++
+If some '--trailer <token>=<value>' arguments are also passed
+on the command line, the command is called again once for each
+of these arguments with the same <token>. And the <value> part
+of these arguments, if any, will be passed to the command as its
+first argument. This way the command can produce a <value> computed
+from the <value> passed in the '--trailer <token>=<value>' argument.
 
 EXAMPLES
 --------
@@ -333,6 +346,55 @@
 Fix #42
 ------------
 
+* Configure a 'help' trailer with a cmd use a script `glog-find-author`
+  which search specified author identity from git log in git repository
+  and show how it works:
++
+------------
+$ cat ~/bin/glog-find-author
+#!/bin/sh
+test -n "$1" && git log --author="$1" --pretty="%an <%ae>" -1 || true
+$ git config trailer.help.key "Helped-by: "
+$ git config trailer.help.ifExists "addIfDifferentNeighbor"
+$ git config trailer.help.cmd "~/bin/glog-find-author"
+$ git interpret-trailers --trailer="help:Junio" --trailer="help:Couder" <<EOF
+> subject
+>
+> message
+>
+> EOF
+subject
+
+message
+
+Helped-by: Junio C Hamano <gitster@pobox.com>
+Helped-by: Christian Couder <christian.couder@gmail.com>
+------------
+
+* Configure a 'ref' trailer with a cmd use a script `glog-grep`
+  to grep last relevant commit from git log in the git repository
+  and show how it works:
++
+------------
+$ cat ~/bin/glog-grep
+#!/bin/sh
+test -n "$1" && git log --grep "$1" --pretty=reference -1 || true
+$ git config trailer.ref.key "Reference-to: "
+$ git config trailer.ref.ifExists "replace"
+$ git config trailer.ref.cmd "~/bin/glog-grep"
+$ git interpret-trailers --trailer="ref:Add copyright notices." <<EOF
+> subject
+>
+> message
+>
+> EOF
+subject
+
+message
+
+Reference-to: 8bc9a0c769 (Add copyright notices., 2005-04-07)
+------------
+
 * Configure a 'see' trailer with a command to show the subject of a
   commit that is related, and show how it works:
 +
diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index 1bbf865..0498e7b 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -39,7 +39,9 @@
 	full ref name (including prefix) will be printed. If 'auto' is
 	specified, then if the output is going to a terminal, the ref names
 	are shown as if 'short' were given, otherwise no ref names are
-	shown. The default option is 'short'.
+	shown. The option `--decorate` is short-hand for `--decorate=short`.
+	Default to configuration value of `log.decorate` if configured,
+	otherwise, `auto`.
 
 --decorate-refs=<pattern>::
 --decorate-refs-exclude=<pattern>::
diff --git a/Documentation/git-mailinfo.txt b/Documentation/git-mailinfo.txt
index 7a6aed0..3fcfd96 100644
--- a/Documentation/git-mailinfo.txt
+++ b/Documentation/git-mailinfo.txt
@@ -9,7 +9,9 @@
 SYNOPSIS
 --------
 [verse]
-'git mailinfo' [-k|-b] [-u | --encoding=<encoding> | -n] [--[no-]scissors] <msg> <patch>
+'git mailinfo' [-k|-b] [-u | --encoding=<encoding> | -n]
+	       [--[no-]scissors] [--quoted-cr=<action>]
+	       <msg> <patch>
 
 
 DESCRIPTION
@@ -53,7 +55,7 @@
 	The commit log message, author name and author email are
 	taken from the e-mail, and after minimally decoding MIME
 	transfer encoding, re-coded in the charset specified by
-	i18n.commitencoding (defaulting to UTF-8) by transliterating
+	`i18n.commitEncoding` (defaulting to UTF-8) by transliterating
 	them.  This used to be optional but now it is the default.
 +
 Note that the patch is always used as-is without charset
@@ -61,7 +63,7 @@
 
 --encoding=<encoding>::
 	Similar to -u.  But when re-coding, the charset specified here is
-	used instead of the one specified by i18n.commitencoding or UTF-8.
+	used instead of the one specified by `i18n.commitEncoding` or UTF-8.
 
 -n::
 	Disable all charset re-coding of the metadata.
@@ -89,6 +91,23 @@
 --no-scissors::
 	Ignore scissors lines. Useful for overriding mailinfo.scissors settings.
 
+--quoted-cr=<action>::
+	Action when processes email messages sent with base64 or
+	quoted-printable encoding, and the decoded lines end with a CRLF
+	instead of a simple LF.
++
+The valid actions are:
++
+--
+*	`nowarn`: Git will do nothing when such a CRLF is found.
+*	`warn`: Git will issue a warning for each message if such a CRLF is
+	found.
+*	`strip`: Git will convert those CRLF to LF.
+--
++
+The default action could be set by configuration option `mailinfo.quotedCR`.
+If no such configuration option has been set, `warn` will be used.
+
 <msg>::
 	The commit log message extracted from e-mail, usually
 	except the title line which comes from e-mail Subject.
diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.txt
index 80ddd33..1e738ad 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.txt
@@ -92,10 +92,8 @@
 prefetch::
 	The `prefetch` task updates the object directory with the latest
 	objects from all registered remotes. For each remote, a `git fetch`
-	command is run. The refmap is custom to avoid updating local or remote
-	branches (those in `refs/heads` or `refs/remotes`). Instead, the
-	remote refs are stored in `refs/prefetch/<remote>/`. Also, tags are
-	not updated.
+	command is run. The configured refspec is modified to place all
+	requested refs within `refs/prefetch/`. Also, tags are not updated.
 +
 This is done to avoid disrupting the remote-tracking branches. The end users
 expect these refs to stay unmoved unless they initiate a fetch.  With prefetch
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 6b14702..e587c77 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -99,6 +99,10 @@
 	(see linkgit:git-config[1]).  To cancel `diff.orderFile`,
 	use `-O/dev/null`.
 
+CONFIGURATION
+-------------
+include::config/mergetool.txt[]
+
 TEMPORARY FILES
 ---------------
 `git mergetool` creates `*.orig` backup files while resolving merges.
diff --git a/Documentation/git-mktag.txt b/Documentation/git-mktag.txt
index 17a2603..466a697 100644
--- a/Documentation/git-mktag.txt
+++ b/Documentation/git-mktag.txt
@@ -11,14 +11,6 @@
 [verse]
 'git mktag'
 
-OPTIONS
--------
-
---strict::
-	By default mktag turns on the equivalent of
-	linkgit:git-fsck[1] `--strict` mode. Use `--no-strict` to
-	disable it.
-
 DESCRIPTION
 -----------
 
@@ -45,6 +37,14 @@
 
     git -c fsck.extraHeaderEntry=ignore mktag <my-tag-with-headers
 
+OPTIONS
+-------
+
+--strict::
+	By default mktag turns on the equivalent of
+	linkgit:git-fsck[1] `--strict` mode. Use `--no-strict` to
+	disable it.
+
 Tag Format
 ----------
 A tag signature file, to be fed to this command's standard input,
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
index f89e68b..38e5257 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.txt
@@ -762,3 +762,7 @@
   message indicating the p4 depot location and change number.  This
   line is used by later 'git p4 sync' operations to know which p4
   changes are new.
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt
index 54d715e..dbfd1f9 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.txt
@@ -85,6 +85,16 @@
 	reference was included in the resulting packfile.  This
 	can be useful to send new tags to native Git clients.
 
+--stdin-packs::
+	Read the basenames of packfiles (e.g., `pack-1234abcd.pack`)
+	from the standard input, instead of object names or revision
+	arguments. The resulting pack contains all objects listed in the
+	included packs (those not beginning with `^`), excluding any
+	objects listed in the excluded packs (beginning with `^`).
++
+Incompatible with `--revs`, or options that imply `--revs` (such as
+`--all`), with the exception of `--unpacked`, which is compatible.
+
 --window=<n>::
 --depth=<n>::
 	These two options affect how the objects contained in
@@ -118,10 +128,10 @@
 	into multiple independent packfiles, each not larger than the
 	given size. The size can be suffixed with
 	"k", "m", or "g". The minimum size allowed is limited to 1 MiB.
-	This option
-	prevents the creation of a bitmap index.
 	The default is unlimited, unless the config variable
-	`pack.packSizeLimit` is set.
+	`pack.packSizeLimit` is set. Note that this option may result in
+	a larger and slower repository; see the discussion in
+	`pack.packSizeLimit`.
 
 --honor-pack-keep::
 	This flag causes an object already in a local pack that
@@ -400,6 +410,17 @@
 one wins" ordering (which allows repo-specific config to take precedence
 over user-wide config, and so forth).
 
+
+CONFIGURATION
+-------------
+
+Various configuration variables affect packing, see
+linkgit:git-config[1] (search for "pack" and "delta").
+
+Notably, delta compression is not used on objects larger than the
+`core.bigFileThreshold` configuration variable and on files with the
+attribute `delta` set to false.
+
 SEE ALSO
 --------
 linkgit:git-rev-list[1]
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index ab103c8..2f25aa3 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -244,8 +244,8 @@
 You will have to bypass the "must fast-forward" rule in order to
 replace the history you originally published with the rebased history.
 If somebody else built on top of your original history while you are
-rebasing, the tip of the branch at the remote may advance with her
-commit, and blindly pushing with `--force` will lose her work.
+rebasing, the tip of the branch at the remote may advance with their
+commit, and blindly pushing with `--force` will lose their work.
 +
 This option allows you to say that you expect the history you are
 updating is what you rebased and want to replace. If the remote ref
@@ -600,7 +600,7 @@
 
 `git push origin`::
 	Without additional configuration, pushes the current branch to
-	the configured upstream (`remote.origin.merge` configuration
+	the configured upstream (`branch.<name>.merge` configuration
 	variable) if it has the same name as the current branch, and
 	errors out without pushing otherwise.
 +
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index a0487b5..55af6fd 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -200,12 +200,6 @@
 
     git rebase --abort
 
-CONFIGURATION
--------------
-
-include::config/rebase.txt[]
-include::config/sequencer.txt[]
-
 OPTIONS
 -------
 --onto <newbase>::
@@ -593,16 +587,17 @@
 
 --autosquash::
 --no-autosquash::
-	When the commit log message begins with "squash! ..." (or
-	"fixup! ..."), and there is already a commit in the todo list that
-	matches the same `...`, automatically modify the todo list of rebase
-	-i so that the commit marked for squashing comes right after the
-	commit to be modified, and change the action of the moved commit
-	from `pick` to `squash` (or `fixup`).  A commit matches the `...` if
-	the commit subject matches, or if the `...` refers to the commit's
-	hash. As a fall-back, partial matches of the commit subject work,
-	too.  The recommended way to create fixup/squash commits is by using
-	the `--fixup`/`--squash` options of linkgit:git-commit[1].
+	When the commit log message begins with "squash! ..." or "fixup! ..."
+	or "amend! ...", and there is already a commit in the todo list that
+	matches the same `...`, automatically modify the todo list of
+	`rebase -i`, so that the commit marked for squashing comes right after
+	the commit to be modified, and change the action of the moved commit
+	from `pick` to `squash` or `fixup` or `fixup -C` respectively. A commit
+	matches the `...` if the commit subject matches, or if the `...` refers
+	to the commit's hash. As a fall-back, partial matches of the commit
+	subject work, too. The recommended way to create fixup/amend/squash
+	commits is by using the `--fixup`, `--fixup=amend:` or `--fixup=reword:`
+	and `--squash` options respectively of linkgit:git-commit[1].
 +
 If the `--autosquash` option is enabled by default using the
 configuration variable `rebase.autoSquash`, this option can be
@@ -622,6 +617,14 @@
 --no-reschedule-failed-exec::
 	Automatically reschedule `exec` commands that failed. This only makes
 	sense in interactive mode (or when an `--exec` option was provided).
++
+Even though this option applies once a rebase is started, it's set for
+the whole rebase at the start based on either the
+`rebase.rescheduleFailedExec` configuration (see linkgit:git-config[1]
+or "CONFIGURATION" below) or whether this option is
+provided. Otherwise an explicit `--no-reschedule-failed-exec` at the
+start would be overridden by the presence of
+`rebase.rescheduleFailedExec=true` configuration.
 
 INCOMPATIBLE OPTIONS
 --------------------
@@ -887,9 +890,17 @@
 "pick" for the second and subsequent commits with "squash" or "fixup".
 If the commits had different authors, the folded commit will be
 attributed to the author of the first commit.  The suggested commit
-message for the folded commit is the concatenation of the commit
-messages of the first commit and of those with the "squash" command,
-but omits the commit messages of commits with the "fixup" command.
+message for the folded commit is the concatenation of the first
+commit's message with those identified by "squash" commands, omitting the
+messages of commits identified by "fixup" commands, unless "fixup -c"
+is used.  In that case the suggested commit message is only the message
+of the "fixup -c" commit, and an editor is opened allowing you to edit
+the message.  The contents (patch) of the "fixup -c" commit are still
+incorporated into the folded commit. If there is more than one "fixup -c"
+commit, the message from the final one is used.  You can also use
+"fixup -C" to get the same behavior as "fixup -c" except without opening
+an editor.
+
 
 'git rebase' will stop when "pick" has been replaced with "edit" or
 when a command fails due to merge errors. When you are done editing
@@ -1257,6 +1268,12 @@
 merge cmake
 ------------
 
+CONFIGURATION
+-------------
+
+include::config/rebase.txt[]
+include::config/sequencer.txt[]
+
 BUGS
 ----
 The todo list presented by the deprecated `--preserve-merges --interactive`
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index 92f146d..24c00c9 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -121,7 +121,9 @@
 	If specified, multiple packfiles may be created, which also
 	prevents the creation of a bitmap index.
 	The default is unlimited, unless the config variable
-	`pack.packSizeLimit` is set.
+	`pack.packSizeLimit` is set. Note that this option may result in
+	a larger and slower repository; see the discussion in
+	`pack.packSizeLimit`.
 
 -b::
 --write-bitmap-index::
@@ -165,9 +167,35 @@
 	Pass the `--delta-islands` option to `git-pack-objects`, see
 	linkgit:git-pack-objects[1].
 
-Configuration
+-g=<factor>::
+--geometric=<factor>::
+	Arrange resulting pack structure so that each successive pack
+	contains at least `<factor>` times the number of objects as the
+	next-largest pack.
++
+`git repack` ensures this by determining a "cut" of packfiles that need
+to be repacked into one in order to ensure a geometric progression. It
+picks the smallest set of packfiles such that as many of the larger
+packfiles (by count of objects contained in that pack) may be left
+intact.
++
+Unlike other repack modes, the set of objects to pack is determined
+uniquely by the set of packs being "rolled-up"; in other words, the
+packs determined to need to be combined in order to restore a geometric
+progression.
++
+When `--unpacked` is specified, loose objects are implicitly included in
+this "roll-up", without respect to their reachability. This is subject
+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`.
+
+CONFIGURATION
 -------------
 
+Various configuration variables affect packing, see
+linkgit:git-config[1] (search for "pack" and "delta").
+
 By default, the command passes `--delta-base-offset` option to
 'git pack-objects'; this typically results in slightly smaller packs,
 but the generated packs are incompatible with versions of Git older than
@@ -178,6 +206,10 @@
 is unaffected by this option as the conversion is performed on the fly
 as needed in that case.
 
+Delta compression is not used on objects larger than the
+`core.bigFileThreshold` configuration variable and on files with the
+attribute `delta` set to false.
+
 SEE ALSO
 --------
 linkgit:git-pack-objects[1]
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index 5da6623..20bb8e8 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -31,6 +31,99 @@
 
 include::pretty-formats.txt[]
 
+EXAMPLES
+--------
+
+* Print the list of commits reachable from the current branch.
++
+----------
+git rev-list HEAD
+----------
+
+* Print the list of commits on this branch, but not present in the
+  upstream branch.
++
+----------
+git rev-list @{upstream}..HEAD
+----------
+
+* Format commits with their author and commit message (see also the
+  porcelain linkgit:git-log[1]).
++
+----------
+git rev-list --format=medium HEAD
+----------
+
+* Format commits along with their diffs (see also the porcelain
+  linkgit:git-log[1], which can do this in a single process).
++
+----------
+git rev-list HEAD |
+git diff-tree --stdin --format=medium -p
+----------
+
+* Print the list of commits on the current branch that touched any
+  file in the `Documentation` directory.
++
+----------
+git rev-list HEAD -- Documentation/
+----------
+
+* Print the list of commits authored by you in the past year, on
+  any branch, tag, or other ref.
++
+----------
+git rev-list --author=you@example.com --since=1.year.ago --all
+----------
+
+* Print the list of objects reachable from the current branch (i.e., all
+  commits and the blobs and trees they contain).
++
+----------
+git rev-list --objects HEAD
+----------
+
+* Compare the disk size of all reachable objects, versus those
+  reachable from reflogs, versus the total packed size. This can tell
+  you whether running `git repack -ad` might reduce the repository size
+  (by dropping unreachable objects), and whether expiring reflogs might
+  help.
++
+----------
+# reachable objects
+git rev-list --disk-usage --objects --all
+# plus reflogs
+git rev-list --disk-usage --objects --all --reflog
+# total disk size used
+du -c .git/objects/pack/*.pack .git/objects/??/*
+# alternative to du: add up "size" and "size-pack" fields
+git count-objects -v
+----------
+
+* Report the disk size of each branch, not including objects used by the
+  current branch. This can find outliers that are contributing to a
+  bloated repository size (e.g., because somebody accidentally committed
+  large build artifacts).
++
+----------
+git for-each-ref --format='%(refname)' |
+while read branch
+do
+	size=$(git rev-list --disk-usage --objects HEAD..$branch)
+	echo "$size $branch"
+done |
+sort -n
+----------
+
+* Compare the on-disk size of branches in one group of refs, excluding
+  another. If you co-mingle objects from multiple remotes in a single
+  repository, this can show which remotes are contributing to the
+  repository size (taking the size of `origin` as a baseline).
++
+----------
+git rev-list --disk-usage --objects --remotes=$suspect --not --remotes=origin
+----------
+
 GIT
 ---
 Part of the linkgit:git[1] suite
diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.txt
index ab75036..26e9b28 100644
--- a/Documentation/git-rm.txt
+++ b/Documentation/git-rm.txt
@@ -23,7 +23,9 @@
 though that default behavior can be overridden with the `-f` option.
 When `--cached` is given, the staged content has to
 match either the tip of the branch or the file on disk,
-allowing the file to be removed from just the index.
+allowing the file to be removed from just the index. When
+sparse-checkouts are in use (see linkgit:git-sparse-checkout[1]),
+`git rm` will only remove paths within the sparse-checkout patterns.
 
 
 OPTIONS
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 93708ae..3db4eab 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -167,6 +167,14 @@
 	`sendemail.envelopeSender` configuration variable; if that is
 	unspecified, choosing the envelope sender is left to your MTA.
 
+--sendmail-cmd=<command>::
+	Specify a command to run to send the email. The command should
+	be sendmail-like; specifically, it must support the `-i` option.
+	The command will be executed in the shell if necessary.  Default
+	is the value of `sendemail.sendmailcmd`.  If unspecified, and if
+	--smtp-server is also unspecified, git-send-email will search
+	for `sendmail` in `/usr/sbin`, `/usr/lib` and $PATH.
+
 --smtp-encryption=<encryption>::
 	Specify the encryption to use, either 'ssl' or 'tls'.  Any other
 	value reverts to plain SMTP.  Default is the value of
@@ -211,13 +219,16 @@
 
 --smtp-server=<host>::
 	If set, specifies the outgoing SMTP server to use (e.g.
-	`smtp.example.com` or a raw IP address).  Alternatively it can
-	specify a full pathname of a sendmail-like program instead;
-	the program must support the `-i` option.  Default value can
-	be specified by the `sendemail.smtpServer` configuration
-	option; the built-in default is to search for `sendmail` in
-	`/usr/sbin`, `/usr/lib` and $PATH if such program is
-	available, falling back to `localhost` otherwise.
+	`smtp.example.com` or a raw IP address).  If unspecified, and if
+	`--sendmail-cmd` is also unspecified, the default is to search
+	for `sendmail` in `/usr/sbin`, `/usr/lib` and $PATH if such a
+	program is available, falling back to `localhost` otherwise.
++
+For backward compatibility, this option can also specify a full pathname
+of a sendmail-like program instead; the program must support the `-i`
+option.  This method does not support passing arguments or using plain
+command names.  For those use cases, consider using `--sendmail-cmd`
+instead.
 
 --smtp-server-port=<port>::
 	Specifies a port different from the default port (SMTP
diff --git a/Documentation/git-sparse-checkout.txt b/Documentation/git-sparse-checkout.txt
index a0eeaeb..fdcf43f 100644
--- a/Documentation/git-sparse-checkout.txt
+++ b/Documentation/git-sparse-checkout.txt
@@ -45,6 +45,20 @@
 When `--cone` is provided, the `core.sparseCheckoutCone` setting is
 also set, allowing for better performance with a limited set of
 patterns (see 'CONE PATTERN SET' below).
++
+Use the `--[no-]sparse-index` option to toggle the use of the sparse
+index format. This reduces the size of the index to be more closely
+aligned with your sparse-checkout definition. This can have significant
+performance advantages for commands such as `git status` or `git add`.
+This feature is still experimental. Some commands might be slower with
+a sparse index until they are properly integrated with the feature.
++
+**WARNING:** Using a sparse index requires modifying the index in a way
+that is not completely understood by external tools. If you have trouble
+with this compatibility, then run `git sparse-checkout init --no-sparse-index`
+to rewrite your index to not be sparse. Older versions of Git will not
+understand the sparse directory entries index extension and may fail to
+interact with your repository until it is disabled.
 
 'set'::
 	Write a set of patterns to the sparse-checkout file, as given as
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index f1197d6..be6084c 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -9,7 +9,7 @@
 --------
 [verse]
 'git stash' list [<log-options>]
-'git stash' show [<diff-options>] [<stash>]
+'git stash' show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]
 'git stash' drop [-q|--quiet] [<stash>]
 'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>]
 'git stash' branch <branchname> [<stash>]
@@ -83,7 +83,7 @@
 The command takes options applicable to the 'git log'
 command to control what is shown and how. See linkgit:git-log[1].
 
-show [<diff-options>] [<stash>]::
+show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]::
 
 	Show the changes recorded in the stash entry as a diff between the
 	stashed contents and the commit back when the stash entry was first
@@ -91,8 +91,10 @@
 	By default, the command shows the diffstat, but it will accept any
 	format known to 'git diff' (e.g., `git stash show -p stash@{1}`
 	to view the second most recent entry in patch form).
-	You can use stash.showStat and/or stash.showPatch config variables
-	to change the default behavior.
+	If no `<diff-option>` is provided, the default behavior will be given
+	by the `stash.showStat`, and `stash.showPatch` config variables. You
+	can also use `stash.showIncludeUntracked` to set whether
+	`--include-untracked` is enabled by default.
 
 pop [--index] [-q|--quiet] [<stash>]::
 
@@ -160,10 +162,18 @@
 
 -u::
 --include-untracked::
-	This option is only valid for `push` and `save` commands.
+--no-include-untracked::
+	When used with the `push` and `save` commands,
+	all untracked files are also stashed and then cleaned up with
+	`git clean`.
 +
-All untracked files are also stashed and then cleaned up with
-`git clean`.
+When used with the `show` command, show the untracked files in the stash
+entry as part of the diff.
+
+--only-untracked::
+	This option is only valid for the `show` command.
++
+Show only the untracked files in the stash entry as part of the diff.
 
 --index::
 	This option is only valid for `pop` and `apply` commands.
diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt
index c0764e8..83f38e3 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.txt
@@ -130,7 +130,7 @@
 --column[=<options>]::
 --no-column::
 	Display untracked files in columns. See configuration variable
-	column.status for option syntax.`--column` and `--no-column`
+	`column.status` for option syntax. `--column` and `--no-column`
 	without options are equivalent to 'always' and 'never'
 	respectively.
 
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 67b143c..d5776ff 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -1061,25 +1061,6 @@
 	branches = stable/*:refs/remotes/svn/stable/*
 	branches = debug/*:refs/remotes/svn/debug/*
 
-BUGS
-----
-
-We ignore all SVN properties except svn:executable.  Any unhandled
-properties are logged to $GIT_DIR/svn/<refname>/unhandled.log
-
-Renamed and copied directories are not detected by Git and hence not
-tracked when committing to SVN.  I do not plan on adding support for
-this as it's quite difficult and time-consuming to get working for all
-the possible corner cases (Git doesn't do it, either).  Committing
-renamed and copied files is fully supported if they're similar enough
-for Git to detect them.
-
-In SVN, it is possible (though discouraged) to commit changes to a tag
-(because a tag is just a directory copy, thus technically the same as a
-branch). When cloning an SVN repository, 'git svn' cannot know if such a
-commit to a tag will happen in the future. Thus it acts conservatively
-and imports all SVN tags as branches, prefixing the tag name with 'tags/'.
-
 CONFIGURATION
 -------------
 
@@ -1166,6 +1147,25 @@
 if it is missing or not up to date.  'git svn reset' automatically
 rewinds it.
 
+BUGS
+----
+
+We ignore all SVN properties except svn:executable.  Any unhandled
+properties are logged to $GIT_DIR/svn/<refname>/unhandled.log
+
+Renamed and copied directories are not detected by Git and hence not
+tracked when committing to SVN.  I do not plan on adding support for
+this as it's quite difficult and time-consuming to get working for all
+the possible corner cases (Git doesn't do it, either).  Committing
+renamed and copied files is fully supported if they're similar enough
+for Git to detect them.
+
+In SVN, it is possible (though discouraged) to commit changes to a tag
+(because a tag is just a directory copy, thus technically the same as a
+branch). When cloning an SVN repository, 'git svn' cannot know if such a
+commit to a tag will happen in the future. Thus it acts conservatively
+and imports all SVN tags as branches, prefixing the tag name with 'tags/'.
+
 SEE ALSO
 --------
 linkgit:git-rebase[1]
diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt
index 56656d1..31a97a1 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.txt
@@ -134,7 +134,7 @@
 --column[=<options>]::
 --no-column::
 	Display tag listing in columns. See configuration variable
-	column.tag for option syntax.`--column` and `--no-column`
+	`column.tag` for option syntax. `--column` and `--no-column`
 	without options are equivalent to 'always' and 'never' respectively.
 +
 This option is only applicable when listing tags without annotation lines.
diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt
index f1bb1fa..8a7cbdd 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.txt
@@ -9,7 +9,7 @@
 SYNOPSIS
 --------
 [verse]
-'git worktree add' [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>]
+'git worktree add' [-f] [--detach] [--checkout] [--lock [--reason <string>]] [-b <new-branch>] <path> [<commit-ish>]
 'git worktree list' [--porcelain]
 'git worktree lock' [--reason <string>] <worktree>
 'git worktree move' <worktree> <new-path>
@@ -242,7 +242,7 @@
 older than `<time>`.
 
 --reason <string>::
-	With `lock`, an explanation why the working tree is locked.
+	With `lock` or with `add --lock`, an explanation why the working tree is locked.
 
 <worktree>::
 	Working trees can be identified by path, either relative or
@@ -387,7 +387,7 @@
 ------------
 $ git worktree list
 /path/to/linked-worktree    abcd1234 [master]
-/path/to/locked-worktreee   acbd5678 (brancha) locked
+/path/to/locked-worktree    acbd5678 (brancha) locked
 /path/to/prunable-worktree  5678abc  (detached HEAD) prunable
 ------------
 
diff --git a/Documentation/git.txt b/Documentation/git.txt
index d36e6fd..6dd241e 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -13,7 +13,7 @@
     [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
     [-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
     [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
-    [--super-prefix=<path>] [--config-env <name>=<envvar>]
+    [--super-prefix=<path>] [--config-env=<name>=<envvar>]
     <command> [<args>]
 
 DESCRIPTION
@@ -88,7 +88,7 @@
 	empty string, instead the environment variable itself must be
 	set to the empty string.  It is an error if the `<envvar>` does not exist
 	in the environment. `<envvar>` may not contain an equals sign
-	to avoid ambiguity with `<name>`s which contain one.
+	to avoid ambiguity with `<name>` containing one.
 +
 This is useful for cases where you want to pass transitory
 configuration options to git, but are doing so on OS's where
@@ -670,6 +670,16 @@
 	If this environment variable is set to `0`, git will not prompt
 	on the terminal (e.g., when asking for HTTP authentication).
 
+`GIT_CONFIG_GLOBAL`::
+`GIT_CONFIG_SYSTEM`::
+	Take the configuration from the given files instead from global or
+	system-level configuration files. If `GIT_CONFIG_SYSTEM` is set, the
+	system config file defined at build time (usually `/etc/gitconfig`)
+	will not be read. Likewise, if `GIT_CONFIG_GLOBAL` is set, neither
+	`$HOME/.gitconfig` nor `$XDG_CONFIG_HOME/git/config` will be read. Can
+	be set to `/dev/null` to skip reading configuration files of the
+	respective level.
+
 `GIT_CONFIG_NOSYSTEM`::
 	Whether to skip reading settings from the system-wide
 	`$(prefix)/etc/gitconfig` file.  This environment variable can
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index e84e104..83fd4e1 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -845,6 +845,8 @@
 
 - `rust` suitable for source code in the Rust language.
 
+- `scheme` suitable for source code in the Scheme language.
+
 - `tex` suitable for source code for LaTeX documents.
 
 
@@ -1174,7 +1176,8 @@
 as those for the option `--pretty=format:` of linkgit:git-log[1],
 except that they need to be wrapped like this: `$Format:PLACEHOLDERS$`
 in the file.  E.g. the string `$Format:%H$` will be replaced by the
-commit hash.
+commit hash.  However, only one `%(describe)` placeholder is expanded
+per archive to avoid denial-of-service attacks.
 
 
 Packing objects
@@ -1244,6 +1247,12 @@
 [attr]binary -diff -merge -text
 ------------
 
+NOTES
+-----
+
+Git does not follow symbolic links when accessing a `.gitattributes`
+file in the working tree. This keeps behavior consistent when the file
+is accessed from the index or a tree versus from the filesystem.
 
 EXAMPLES
 --------
diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt
index c970d9f..0d57f86 100644
--- a/Documentation/gitdiffcore.txt
+++ b/Documentation/gitdiffcore.txt
@@ -74,6 +74,7 @@
 - diffcore-merge-broken
 - diffcore-pickaxe
 - diffcore-order
+- diffcore-rotate
 
 These are applied in sequence.  The set of filepairs 'git diff-{asterisk}'
 commands find are used as the input to diffcore-break, and
@@ -168,6 +169,26 @@
 number after the "-M" or "-C" option (e.g. "-M8" to tell it to use
 8/10 = 80%).
 
+Note that when rename detection is on but both copy and break
+detection are off, rename detection adds a preliminary step that first
+checks if files are moved across directories while keeping their
+filename the same.  If there is a file added to a directory whose
+contents is sufficiently similar to a file with the same name that got
+deleted from a different directory, it will mark them as renames and
+exclude them from the later quadratic step (the one that pairwise
+compares all unmatched files to find the "best" matches, determined by
+the highest content similarity).  So, for example, if a deleted
+docs/ext.txt and an added docs/config/ext.txt are similar enough, they
+will be marked as a rename and prevent an added docs/ext.md that may
+be even more similar to the deleted docs/ext.txt from being considered
+as the rename destination in the later step.  For this reason, the
+preliminary "match same filename" step uses a bit higher threshold to
+mark a file pair as a rename and stop considering other candidates for
+better matches.  At most, one comparison is done per file in this
+preliminary pass; so if there are several remaining ext.txt files
+throughout the directory hierarchy after exact rename detection, this
+preliminary step may be skipped for those files.
+
 Note.  When the "-C" option is used with `--find-copies-harder`
 option, 'git diff-{asterisk}' commands feed unmodified filepairs to
 diffcore mechanism as well as modified ones.  This lets the copy
@@ -276,6 +297,26 @@
 t
 ------------------------------------------------
 
+diffcore-rotate: For Changing At Which Path Output Starts
+---------------------------------------------------------
+
+This transformation takes one pathname, and rotates the set of
+filepairs so that the filepair for the given pathname comes first,
+optionally discarding the paths that come before it.  This is used
+to implement the `--skip-to` and the `--rotate-to` options.  It is
+an error when the specified pathname is not in the set of filepairs,
+but it is not useful to error out when used with "git log" family of
+commands, because it is unreasonable to expect that a given path
+would be modified by each and every commit shown by the "git log"
+command.  For this reason, when used with "git log", the filepair
+that sorts the same as, or the first one that sorts after, the given
+pathname is where the output starts.
+
+Use of this transformation combined with diffcore-order will produce
+unexpected results, as the input to this transformation is likely
+not sorted when diffcore-order is in effect.
+
+
 SEE ALSO
 --------
 linkgit:git-diff[1],
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index 1f3b57d..b51959f 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -138,7 +138,7 @@
 configuration option `commit.template` is set); `merge` (if the
 commit is a merge or a `.git/MERGE_MSG` file exists); `squash`
 (if a `.git/SQUASH_MSG` file exists); or `commit`, followed by
-a commit SHA-1 (if a `-c`, `-C` or `--amend` option was given).
+a commit object name (if a `-c`, `-C` or `--amend` option was given).
 
 If the exit status is non-zero, `git commit` will abort.
 
@@ -231,19 +231,19 @@
 Information about what is to be pushed is provided on the hook's standard
 input with lines of the form:
 
-  <local ref> SP <local sha1> SP <remote ref> SP <remote sha1> LF
+  <local ref> SP <local object name> SP <remote ref> SP <remote object name> LF
 
 For instance, if the command +git push origin master:foreign+ were run the
 hook would receive a line like the following:
 
   refs/heads/master 67890 refs/heads/foreign 12345
 
-although the full, 40-character SHA-1s would be supplied.  If the foreign ref
-does not yet exist the `<remote SHA-1>` will be 40 `0`.  If a ref is to be
-deleted, the `<local ref>` will be supplied as `(delete)` and the `<local
-SHA-1>` will be 40 `0`.  If the local commit was specified by something other
-than a name which could be expanded (such as `HEAD~`, or a SHA-1) it will be
-supplied as it was originally given.
+although the full object name would be supplied.  If the foreign ref does not
+yet exist the `<remote object name>` will be the all-zeroes object name.  If a
+ref is to be deleted, the `<local ref>` will be supplied as `(delete)` and the
+`<local object name>` will be the all-zeroes object name.  If the local commit
+was specified by something other than a name which could be expanded (such as
+`HEAD~`, or an object name) it will be supplied as it was originally given.
 
 If this hook exits with a non-zero status, `git push` will abort without
 pushing anything.  Information about why the push is rejected may be sent
@@ -268,7 +268,7 @@
 where `<old-value>` is the old object name stored in the ref,
 `<new-value>` is the new object name to be stored in the ref and
 `<ref-name>` is the full name of the ref.
-When creating a new ref, `<old-value>` is 40 `0`.
+When creating a new ref, `<old-value>` is the all-zeroes object name.
 
 If the hook exits with non-zero status, none of the refs will be
 updated. If the hook exits with zero, updating of individual refs can
@@ -473,7 +473,8 @@
 
 This hook is invoked by any Git command that performs reference
 updates. It executes whenever a reference transaction is prepared,
-committed or aborted and may thus get called multiple times.
+committed or aborted and may thus get called multiple times. The hook
+does not cover symbolic references (but that may change in the future).
 
 The hook takes exactly one argument, which is the current state the
 given reference transaction is in:
@@ -492,6 +493,14 @@
 
   <old-value> SP <new-value> SP <ref-name> LF
 
+where `<old-value>` is the old object name passed into the reference
+transaction, `<new-value>` is the new object name to be stored in the
+ref and `<ref-name>` is the full name of the ref. When force updating
+the reference regardless of its current value or when the reference is
+to be created anew, `<old-value>` is the all-zeroes object name. To
+distinguish these cases, you can inspect the current value of
+`<ref-name>` via `git rev-parse`.
+
 The exit status of the hook is ignored for any state except for the
 "prepared" state. In the "prepared" state, a non-zero exit status will
 cause the transaction to be aborted. The hook will not be called with
@@ -550,7 +559,7 @@
 The hook receives a list of the rewritten commits on stdin, in the
 format
 
-  <old-sha1> SP <new-sha1> [ SP <extra-info> ] LF
+  <old-object-name> SP <new-object-name> [ SP <extra-info> ] LF
 
 The 'extra-info' is again command-dependent.  If it is empty, the
 preceding SP is also omitted.  Currently, no commands pass any
@@ -566,7 +575,7 @@
 	For the 'squash' and 'fixup' operation, all commits that were
 	squashed are listed as being rewritten to the squashed commit.
 	This means that there will be several lines sharing the same
-	'new-sha1'.
+	'new-object-name'.
 +
 The commits are guaranteed to be listed in the order that they were
 processed by rebase.
diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt
index d47b1ae..f8a1fc2 100644
--- a/Documentation/gitignore.txt
+++ b/Documentation/gitignore.txt
@@ -27,12 +27,11 @@
    them.
 
  * Patterns read from a `.gitignore` file in the same directory
-   as the path, or in any parent directory, with patterns in the
-   higher level files (up to the toplevel of the work tree) being overridden
-   by those in lower level files down to the directory containing the file.
-   These patterns match relative to the location of the
-   `.gitignore` file.  A project normally includes such
-   `.gitignore` files in its repository, containing patterns for
+   as the path, or in any parent directory (up to the top-level of the working
+   tree), with patterns in the higher level files being overridden by those in
+   lower level files down to the directory containing the file. These patterns
+   match relative to the location of the `.gitignore` file.  A project normally
+   includes such `.gitignore` files in its repository, containing patterns for
    files generated as part of the project build.
 
  * Patterns read from `$GIT_DIR/info/exclude`.
@@ -149,11 +148,15 @@
 To stop tracking a file that is currently tracked, use
 'git rm --cached'.
 
+Git does not follow symbolic links when accessing a `.gitignore` file in
+the working tree. This keeps behavior consistent when the file is
+accessed from the index or a tree versus from the filesystem.
+
 EXAMPLES
 --------
 
  - The pattern `hello.*` matches any file or folder
-   whose name begins with `hello`. If one wants to restrict
+   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.*`;
    the pattern now matches `hello.txt`, `hello.c` but not
diff --git a/Documentation/gitmailmap.txt b/Documentation/gitmailmap.txt
index 052209b..06f4af9 100644
--- a/Documentation/gitmailmap.txt
+++ b/Documentation/gitmailmap.txt
@@ -50,11 +50,18 @@
 commit matching both the specified commit name and email address.
 
 Both E-Mails and names are matched case-insensitively. For example
-this would also match the 'Commit Name <commit@email.xx>' above:
+this would also match the 'Commit Name <commit&#64;email.xx>' above:
 --
-Proper Name <proper@email.xx> CoMmIt NaMe <CoMmIt@EmAiL.xX>
+	Proper Name <proper@email.xx> CoMmIt NaMe <CoMmIt@EmAiL.xX>
 --
 
+NOTES
+-----
+
+Git does not follow symbolic links when accessing a `.mailmap` file in
+the working tree. This keeps behavior consistent when the file is
+accessed from the index or a tree versus from the filesystem.
+
 EXAMPLES
 --------
 
@@ -79,9 +86,9 @@
 Jane Doe <jane@desktop.(none)>
 ------------
 
-Note that there's no need to map the name for 'jane@laptop.(none)' to
+Note that there's no need to map the name for '<jane&#64;laptop.(none)>' to
 only correct the names. However, leaving the obviously broken
-`<jane@laptop.(none)>' and '<jane@desktop.(none)>' E-Mails as-is is
+'<jane&#64;laptop.(none)>' and '<jane&#64;desktop.(none)>' E-Mails as-is is
 usually not what you want. A `.mailmap` file which also corrects those
 is:
 
diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt
index 8e333dd..dcee09b 100644
--- a/Documentation/gitmodules.txt
+++ b/Documentation/gitmodules.txt
@@ -98,6 +98,14 @@
 	shallow clone (with a history depth of 1) unless the user explicitly
 	asks for a non-shallow clone.
 
+NOTES
+-----
+
+Git does not allow the `.gitmodules` file within a working tree to be a
+symbolic link, and will refuse to check out such a tree entry. This
+keeps behavior consistent when the file is accessed from the index or a
+tree versus from the filesystem, and helps Git reliably enforce security
+checks of the file contents.
 
 EXAMPLES
 --------
diff --git a/Documentation/gitnamespaces.txt b/Documentation/gitnamespaces.txt
index b614969..1c8d2ec 100644
--- a/Documentation/gitnamespaces.txt
+++ b/Documentation/gitnamespaces.txt
@@ -62,3 +62,7 @@
 ----------
 
 include::transfer-data-leaks.txt[]
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt
index 7963a79..34b1d6e 100644
--- a/Documentation/gitweb.conf.txt
+++ b/Documentation/gitweb.conf.txt
@@ -751,6 +751,17 @@
 CSS stylesheet in `@stylesheets`), it may be appropriate to change
 these values.
 
+email-privacy::
+	Redact e-mail addresses from the generated HTML, etc. content.
+	This obscures e-mail addresses retrieved from the author/committer
+	and comment sections of the Git log.
+	It is meant to hinder web crawlers that harvest and abuse addresses.
+	Such crawlers may not respect robots.txt.
+	Note that users and user tools also see the addresses as redacted.
+	If Gitweb is not the final step in a workflow then subsequent steps
+	may misbehave because of the redacted information they receive.
+	Disabled by default.
+
 highlight::
 	Server-side syntax highlight support in "blob" view.  It requires
 	`$highlight_bin` program to be available (see the description of
diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.txt
index 67c7a50..c077971 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -146,8 +146,8 @@
 	<<def_revision,revision>> and you are "merging" another
 	<<def_branch,branch>>'s changes that happen to be a descendant of what
 	you have. In such a case, you do not make a new <<def_merge,merge>>
-	<<def_commit,commit>> but instead just update to his
-	revision. This will happen frequently on a
+	<<def_commit,commit>> but instead just update your branch to point at the same
+	revision as the branch you are merging. This will happen frequently on a
 	<<def_remote_tracking_branch,remote-tracking branch>> of a remote
 	<<def_repository,repository>>.
 
diff --git a/Documentation/howto/coordinate-embargoed-releases.txt b/Documentation/howto/coordinate-embargoed-releases.txt
new file mode 100644
index 0000000..601aae8
--- /dev/null
+++ b/Documentation/howto/coordinate-embargoed-releases.txt
@@ -0,0 +1,131 @@
+Content-type: text/asciidoc
+Abstract: When a critical vulnerability is discovered and fixed, we follow this
+ script to coordinate a public release.
+
+How we coordinate embargoed releases
+====================================
+
+To protect Git users from critical vulnerabilities, we do not just release
+fixed versions like regular maintenance releases. Instead, we coordinate
+releases with packagers, keeping the fixes under an embargo until the release
+date. That way, users will have a chance to upgrade on that date, no matter
+what Operating System or distribution they run.
+
+Open a Security Advisory draft
+------------------------------
+
+The first step is to https://github.com/git/git/security/advisories/new[open an
+advisory]. Technically, it is not necessary, but it is convenient and saves a
+bit of hassle. This advisory can also be used to obtain the CVE number and it
+will give us a private fork associated with it that can be used to collaborate
+on a fix.
+
+Release date of the embargoed version
+-------------------------------------
+
+If the vulnerability affects Windows users, we want to have our friends over at
+Visual Studio on board. This means we need to target a "Patch Tuesday" (i.e. a
+second Tuesday of the month), at the minimum three weeks from heads-up to
+coordinated release.
+
+If the vulnerability affects the server side, or can benefit from scans on the
+server side (i.e. if `git fsck` can detect an attack), it is important to give
+all involved Git repository hosting sites enough time to scan all of those
+repositories.
+
+Notifying the Linux distributions
+---------------------------------
+
+At most two weeks before release date, we need to send a notification to
+distros@vs.openwall.org, preferably less than 7 days before the release date.
+This will reach most (all?) Linux distributions. See an example below, and the
+guidelines for this mailing list at
+https://oss-security.openwall.org/wiki/mailing-lists/distros#how-to-use-the-lists[here].
+
+Once the version has been published, we send a note about that to oss-security.
+As an example, see https://www.openwall.com/lists/oss-security/2019/12/13/1[the
+v2.24.1 mail];
+https://oss-security.openwall.org/wiki/mailing-lists/oss-security[Here] are
+their guidelines.
+
+The mail to oss-security should also describe the exploit, and give credit to
+the reporter(s): security researchers still receive too little respect for the
+invaluable service they provide, and public credit goes a long way to keep them
+paid by their respective organizations.
+
+Technically, describing any exploit can be delayed up to 7 days, but we usually
+refrain from doing that, including it right away.
+
+As a courtesy we typically attach a Git bundle (as `.tar.xz` because the list
+will drop `.bundle` attachments) in the mail to distros@ so that the involved
+parties can take care of integrating/backporting them. This bundle is typically
+created using a command like this:
+
+	git bundle create cve-xxx.bundle ^origin/master vA.B.C vD.E.F
+	tar cJvf cve-xxx.bundle.tar.xz cve-xxx.bundle
+
+Example mail to distros@vs.openwall.org
+---------------------------------------
+
+....
+To: distros@vs.openwall.org
+Cc: git-security@googlegroups.com, <other people involved in the report/fix>
+Subject: [vs] Upcoming Git security fix release
+
+Team,
+
+The Git project will release new versions on <date> at 10am Pacific Time or
+soon thereafter. I have attached a Git bundle (embedded in a `.tar.xz` to avoid
+it being dropped) which you can fetch into a clone of
+https://github.com/git/git via `git fetch --tags /path/to/cve-xxx.bundle`,
+containing the tags for versions <versions>.
+
+You can verify with `git tag -v <tag>` that the versions were signed by
+the Git maintainer, using the same GPG key as e.g. v2.24.0.
+
+Please use these tags to prepare `git` packages for your various
+distributions, using the appropriate tagged versions. The added test cases
+help verify the correctness.
+
+The addressed issues are:
+
+<list of CVEs with a short description, typically copy/pasted from Git's
+release notes, usually demo exploit(s), too>
+
+Credit for finding the vulnerability goes to <reporter>, credit for fixing
+it goes to <developer>.
+
+Thanks,
+<name>
+
+....
+
+Example mail to oss-security@lists.openwall.com
+-----------------------------------------------
+
+....
+To: oss-security@lists.openwall.com
+Cc: git-security@googlegroups.com, <other people involved in the report/fix>
+Subject: git: <copy from security advisory>
+
+Team,
+
+The Git project released new versions on <date>, addressing <CVE>.
+
+All supported platforms are affected in one way or another, and all Git
+versions all the way back to <version> are affected. The fixed versions are:
+<versions>.
+
+Link to the announcement: <link to lore.kernel.org/git>
+
+We highly recommend to upgrade.
+
+The addressed issues are:
+* <list of CVEs and their explanations, along with demo exploits>
+
+Credit for finding the vulnerability goes to <reporter>, credit for fixing
+it goes to <developer>.
+
+Thanks,
+<name>
+....
diff --git a/Documentation/i18n.txt b/Documentation/i18n.txt
index 7e36e5b..6c6baee 100644
--- a/Documentation/i18n.txt
+++ b/Documentation/i18n.txt
@@ -38,7 +38,7 @@
   a warning if the commit log message given to it does not look
   like a valid UTF-8 string, unless you explicitly say your
   project uses a legacy encoding.  The way to say this is to
-  have i18n.commitencoding in `.git/config` file, like this:
+  have `i18n.commitEncoding` in `.git/config` file, like this:
 +
 ------------
 [i18n]
diff --git a/Documentation/lint-gitlink.perl b/Documentation/lint-gitlink.perl
index 476cc30..b22a367 100755
--- a/Documentation/lint-gitlink.perl
+++ b/Documentation/lint-gitlink.perl
@@ -1,71 +1,67 @@
 #!/usr/bin/perl
 
-use File::Find;
-use Getopt::Long;
+use strict;
+use warnings;
 
-my $basedir = ".";
-GetOptions("basedir=s" => \$basedir)
-	or die("Cannot parse command line arguments\n");
+# 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 [...]
+my %TXT;
+my %SECTION;
+my $section;
+my $lint_these = 0;
+for my $arg (@ARGV) {
+	if (my ($sec) = $arg =~ /^--section=(\d+)$/s) {
+		$section = $sec;
+		next;
+	}
 
-my $found_errors = 0;
+	my ($name) = $arg =~ /^(.*?)\.txt$/s;
+	unless (defined $section) {
+		$TXT{$name} = $arg;
+		next;
+	}
 
+	$SECTION{$name} = $section;
+}
+
+my $exit_code = 0;
 sub report {
-	my ($where, $what, $error) = @_;
-	print "$where: $error: $what\n";
-	$found_errors = 1;
+	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";
+	$exit_code = 1;
 }
 
-sub grab_section {
-	my ($page) = @_;
-	open my $fh, "<", "$basedir/$page.txt";
-	my $firstline = <$fh>;
-	chomp $firstline;
-	close $fh;
-	my ($section) = ($firstline =~ /.*\((\d)\)$/);
-	return $section;
-}
+@ARGV = sort values %TXT;
+die "BUG: Nothing to process!" unless @ARGV;
+while (<>) {
+	my $line = $_;
+	while ($line =~ m/linkgit:((.*?)\[(\d)\])/g) {
+		my $pos = pos $line;
+		my ($target, $page, $section) = ($1, $2, $3);
 
-sub lint {
-	my ($file) = @_;
-	open my $fh, "<", $file
-		or return;
-	while (<$fh>) {
-		my $where = "$file:$.";
-		while (s/linkgit:((.*?)\[(\d)\])//) {
-			my ($target, $page, $section) = ($1, $2, $3);
+		# De-AsciiDoc
+		$page =~ s/{litdd}/--/g;
 
-			# De-AsciiDoc
-			$page =~ s/{litdd}/--/g;
-
-			if ($page !~ /^git/) {
-				report($where, $target, "nongit link");
-				next;
-			}
-			if (! -f "$basedir/$page.txt") {
-				report($where, $target, "no such source");
-				next;
-			}
-			$real_section = grab_section($page);
-			if ($real_section != $section) {
-				report($where, $target,
-					"wrong section (should be $real_section)");
-				next;
-			}
+		if (!exists $TXT{$page}) {
+			report($pos, $line, $target, "link outside of our own docs");
+			next;
+		}
+		if (!exists $SECTION{$page}) {
+			report($pos, $line, $target, "link outside of our sectioned docs");
+			next;
+		}
+		my $real_section = $SECTION{$page};
+		if ($section != $SECTION{$page}) {
+			report($pos, $line, $target, "wrong section (should be $real_section)");
+			next;
 		}
 	}
-	close $fh;
+	# this resets our $. for each file
+	close ARGV if eof;
 }
 
-sub lint_it {
-	lint($File::Find::name) if -f && /\.txt$/;
-}
-
-if (!@ARGV) {
-	find({ wanted => \&lint_it, no_chdir => 1 }, $basedir);
-} else {
-	for (@ARGV) {
-		lint($_);
-	}
-}
-
-exit $found_errors;
+exit $exit_code;
diff --git a/Documentation/lint-man-end-blurb.perl b/Documentation/lint-man-end-blurb.perl
new file mode 100755
index 0000000..d69312e
--- /dev/null
+++ b/Documentation/lint-man-end-blurb.perl
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $exit_code = 0;
+sub report {
+	my ($target, $msg) = @_;
+	print "error: $target: $msg\n";
+	$exit_code = 1;
+}
+
+local $/;
+while (my $slurp = <>) {
+	report($ARGV, "has no 'Part of the linkgit:git[1] suite' end blurb")
+		unless $slurp =~ m[
+		^GIT\n
+		 ---\n
+		\QPart of the linkgit:git[1] suite\E \n
+		\z
+	]mx;
+}
+
+exit $exit_code;
diff --git a/Documentation/lint-man-section-order.perl b/Documentation/lint-man-section-order.perl
new file mode 100755
index 0000000..b05f915
--- /dev/null
+++ b/Documentation/lint-man-section-order.perl
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my %SECTIONS;
+{
+	my $order = 0;
+	%SECTIONS = (
+		'NAME' => {
+			required => 1,
+			order => $order++,
+		},
+		'SYNOPSIS' => {
+			required => 1,
+			order => $order++,
+		},
+		'DESCRIPTION' => {
+			required => 1,
+			order => $order++,
+		},
+		'OPTIONS' => {
+			order => $order++,
+			required => 0,
+		},
+		'CONFIGURATION' => {
+			order => $order++,
+		},
+		'BUGS' => {
+			order => $order++,
+		},
+		'SEE ALSO' => {
+			order => $order++,
+		},
+		'GIT' => {
+			required => 1,
+			order => $order++,
+		},
+	);
+}
+my $SECTION_RX = do {
+	my ($names) = join "|", keys %SECTIONS;
+	qr/^($names)$/s;
+};
+
+my $exit_code = 0;
+sub report {
+	my ($msg) = @_;
+	print "$ARGV:$.: $msg\n";
+	$exit_code = 1;
+}
+
+my $last_was_section;
+my @actual_order;
+while (my $line = <>) {
+	chomp $line;
+	if ($line =~ $SECTION_RX) {
+		push @actual_order => $line;
+		$last_was_section = 1;
+		# Have no "last" section yet, processing NAME
+		next if @actual_order == 1;
+
+		my @expected_order = sort {
+			$SECTIONS{$a}->{order} <=> $SECTIONS{$b}->{order}
+		} @actual_order;
+
+		my $expected_last = $expected_order[-2];
+		my $actual_last = $actual_order[-2];
+		if ($actual_last ne $expected_last) {
+			report("section '$line' incorrectly ordered, comes after '$actual_last'");
+		}
+		next;
+	}
+	if ($last_was_section) {
+		my $last_section = $actual_order[-1];
+		if (length $last_section ne length $line) {
+			report("dashes under '$last_section' should match its length!");
+		}
+		if ($line !~ /^-+$/) {
+			report("dashes under '$last_section' should be '-' dashes!");
+		}
+		$last_was_section = 0;
+	}
+
+	if (eof) {
+		# We have both a hash and an array to consider, for
+		# convenience
+		my %actual_sections;
+		@actual_sections{@actual_order} = ();
+
+		for my $section (sort keys %SECTIONS) {
+			next if !$SECTIONS{$section}->{required} or exists $actual_sections{$section};
+			report("has no required '$section' section!");
+		}
+
+		# Reset per-file state
+		{
+			@actual_order = ();
+			# this resets our $. for each file
+			close ARGV;
+		}
+	}
+}
+
+exit $exit_code;
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 6b59e28..ef6bd42 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -190,6 +190,8 @@
 '%ai':: author date, ISO 8601-like format
 '%aI':: author date, strict ISO 8601 format
 '%as':: author date, short format (`YYYY-MM-DD`)
+'%ah':: author date, human style (like the `--date=human` option of
+	linkgit:git-rev-list[1])
 '%cn':: committer name
 '%cN':: committer name (respecting .mailmap, see
 	linkgit:git-shortlog[1] or linkgit:git-blame[1])
@@ -206,8 +208,23 @@
 '%ci':: committer date, ISO 8601-like format
 '%cI':: committer date, strict ISO 8601 format
 '%cs':: committer date, short format (`YYYY-MM-DD`)
+'%ch':: committer date, human style (like the `--date=human` option of
+	linkgit:git-rev-list[1])
 '%d':: ref names, like the --decorate option of linkgit:git-log[1]
 '%D':: ref names without the " (", ")" wrapping.
+'%(describe[:options])':: human-readable name, like
+			  linkgit:git-describe[1]; empty string for
+			  undescribable commits.  The `describe` string
+			  may be followed by a colon and zero or more
+			  comma-separated options.  Descriptions can be
+			  inconsistent when tags are added or removed at
+			  the same time.
++
+** 'match=<pattern>': Only consider tags matching the given
+   `glob(7)` pattern, excluding the "refs/tags/" prefix.
+** 'exclude=<pattern>': Do not consider tags matching the given
+   `glob(7)` pattern, excluding the "refs/tags/" prefix.
+
 '%S':: ref name given on the command line by which the commit was reached
        (like `git log --source`), only works with `git log`
 '%e':: encoding
@@ -254,7 +271,7 @@
 			  `trailers` string may be followed by a colon
 			  and zero or more comma-separated options.
 			  If any option is provided multiple times the
-			  last occurance wins.
+			  last occurrence wins.
 +
 The boolean options accept an optional value `[=<BOOL>]`. The values
 `true`, `false`, `on`, `off` etc. are all accepted. See the "boolean"
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 96cc89d..24569b0 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -129,10 +129,10 @@
 	adjusting to updated upstream from time to time, and
 	this option allows you to ignore the individual commits
 	brought in to your history by such a merge.
-
 ifdef::git-log[]
-	This option also changes default diff format for merge commits
-	to `first-parent`, see `--diff-merges=first-parent` for details.
++
+This option also changes default diff format for merge commits
+to `first-parent`, see `--diff-merges=first-parent` for details.
 endif::git-log[]
 
 --not::
@@ -227,6 +227,15 @@
 	test the exit status to see if a range of objects is fully
 	connected (or not).  It is faster than redirecting stdout
 	to `/dev/null` as the output does not have to be formatted.
+
+--disk-usage::
+	Suppress normal output; instead, print the sum of the bytes used
+	for on-disk storage by the selected commits or objects. This is
+	equivalent to piping the output into `git cat-file
+	--batch-check='%(objectsize:disk)'`, except that it runs much
+	faster (especially with `--use-bitmap-index`). See the `CAVEATS`
+	section in linkgit:git-cat-file[1] for the limitations of what
+	"on-disk storage" means.
 endif::git-rev-list[]
 
 --cherry-mark::
@@ -883,9 +892,12 @@
 units in KiB, MiB, or GiB.  For example, 'blob:limit=1k' is the same
 as 'blob:limit=1024'.
 +
+The form '--filter=object:type=(tag|commit|tree|blob)' omits all objects
+which are not of the requested type.
++
 The form '--filter=sparse:oid=<blob-ish>' uses a sparse-checkout
 specification contained in the blob (or blob-expression) '<blob-ish>'
-to omit blobs that would not be not required for a sparse checkout on
+to omit blobs that would not be required for a sparse checkout on
 the requested refs.
 +
 The form '--filter=tree:<depth>' omits all blobs and trees whose depth
@@ -921,6 +933,11 @@
 --no-filter::
 	Turn off any previous `--filter=` argument.
 
+--filter-provided-objects::
+	Filter the list of explicitly provided objects, which would otherwise
+	always be printed even if they did not match any of the filters. Only
+	useful with `--filter=`.
+
 --filter-print-omitted::
 	Only useful with `--filter=`; prints a list of the objects omitted
 	by the filter.  Object IDs are prefixed with a ``~'' character.
@@ -1047,6 +1064,14 @@
 --header::
 	Print the contents of the commit in raw-format; each record is
 	separated with a NUL character.
+
+--no-commit-header::
+	Suppress the header line containing "commit" and the object ID printed before
+	the specified format.  This has no effect on the built-in formats; only custom
+	formats are affected.
+
+--commit-header::
+	Overrides a previous `--no-commit-header`.
 endif::git-rev-list[]
 
 --parents::
diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt
index d9169c0..f5f17b6 100644
--- a/Documentation/revisions.txt
+++ b/Documentation/revisions.txt
@@ -260,6 +260,9 @@
 A commit's reachable set is the commit itself and the commits in
 its ancestry chain.
 
+There are several notations to specify a set of connected commits
+(called a "revision range"), illustrated below.
+
 
 Commit Exclusions
 ~~~~~~~~~~~~~~~~~
@@ -294,6 +297,26 @@
 I forked from them?"  Note that '..' would mean 'HEAD..HEAD' which is an
 empty range that is both reachable and unreachable from HEAD.
 
+Commands that are specifically designed to take two distinct ranges
+(e.g. "git range-diff R1 R2" to compare two ranges) do exist, but
+they are exceptions.  Unless otherwise noted, all "git" commands
+that operate on a set of commits work on a single revision range.
+In other words, writing two "two-dot range notation" next to each
+other, e.g.
+
+    $ git log A..B C..D
+
+does *not* specify two revision ranges for most commands.  Instead
+it will name a single connected set of commits, i.e. those that are
+reachable from either B or D but are reachable from neither A or C.
+In a linear history like this:
+
+    ---A---B---o---o---C---D
+
+because A and B are reachable from C, the revision range specified
+by these two dotted ranges is a single commit D.
+
+
 Other <rev>{caret} Parent Shorthand Notations
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Three other shorthands exist, particularly useful for merge commits,
diff --git a/Documentation/technical/api-error-handling.txt b/Documentation/technical/api-error-handling.txt
index ceeedd4..8be4f4d 100644
--- a/Documentation/technical/api-error-handling.txt
+++ b/Documentation/technical/api-error-handling.txt
@@ -1,8 +1,11 @@
 Error reporting in git
 ======================
 
-`die`, `usage`, `error`, and `warning` report errors of various
-kinds.
+`BUG`, `die`, `usage`, `error`, and `warning` report errors of
+various kinds.
+
+- `BUG` is for failed internal assertions that should never happen,
+  i.e. a bug in git itself.
 
 - `die` is for fatal application errors.  It prints a message to
   the user and exits with status 128.
@@ -20,6 +23,9 @@
   without running into too many problems.  Like `error`, it
   returns -1 after reporting the situation to the caller.
 
+These reports will be logged via the trace2 facility. See the "error"
+event in link:api-trace2.txt[trace2 API].
+
 Customizable error handlers
 ---------------------------
 
diff --git a/Documentation/technical/api-simple-ipc.txt b/Documentation/technical/api-simple-ipc.txt
new file mode 100644
index 0000000..d79ad32
--- /dev/null
+++ b/Documentation/technical/api-simple-ipc.txt
@@ -0,0 +1,105 @@
+Simple-IPC API
+==============
+
+The Simple-IPC API is a collection of `ipc_` prefixed library routines
+and a basic communication protocol that allow an IPC-client process to
+send an application-specific IPC-request message to an IPC-server
+process and receive an application-specific IPC-response message.
+
+Communication occurs over a named pipe on Windows and a Unix domain
+socket on other platforms.  IPC-clients and IPC-servers rendezvous at
+a previously agreed-to application-specific pathname (which is outside
+the scope of this design) that is local to the computer system.
+
+The IPC-server routines within the server application process create a
+thread pool to listen for connections and receive request messages
+from multiple concurrent IPC-clients.  When received, these messages
+are dispatched up to the server application callbacks for handling.
+IPC-server routines then incrementally relay responses back to the
+IPC-client.
+
+The IPC-client routines within a client application process connect
+to the IPC-server and send a request message and wait for a response.
+When received, the response is returned back the caller.
+
+For example, the `fsmonitor--daemon` feature will be built as a server
+application on top of the IPC-server library routines.  It will have
+threads watching for file system events and a thread pool waiting for
+client connections.  Clients, such as `git status` will request a list
+of file system events since a point in time and the server will
+respond with a list of changed files and directories.  The formats of
+the request and response are application-specific; the IPC-client and
+IPC-server routines treat them as opaque byte streams.
+
+
+Comparison with sub-process model
+---------------------------------
+
+The Simple-IPC mechanism differs from the existing `sub-process.c`
+model (Documentation/technical/long-running-process-protocol.txt) and
+used by applications like Git-LFS.  In the LFS-style sub-process model
+the helper is started by the foreground process, communication happens
+via a pair of file descriptors bound to the stdin/stdout of the
+sub-process, the sub-process only serves the current foreground
+process, and the sub-process exits when the foreground process
+terminates.
+
+In the Simple-IPC model the server is a very long-running service.  It
+can service many clients at the same time and has a private socket or
+named pipe connection to each active client.  It might be started
+(on-demand) by the current client process or it might have been
+started by a previous client or by the OS at boot time.  The server
+process is not associated with a terminal and it persists after
+clients terminate.  Clients do not have access to the stdin/stdout of
+the server process and therefore must communicate over sockets or
+named pipes.
+
+
+Server startup and shutdown
+---------------------------
+
+How an application server based upon IPC-server is started is also
+outside the scope of the Simple-IPC design and is a property of the
+application using it.  For example, the server might be started or
+restarted during routine maintenance operations, or it might be
+started as a system service during the system boot-up sequence, or it
+might be started on-demand by a foreground Git command when needed.
+
+Similarly, server shutdown is a property of the application using
+the simple-ipc routines.  For example, the server might decide to
+shutdown when idle or only upon explicit request.
+
+
+Simple-IPC protocol
+-------------------
+
+The Simple-IPC protocol consists of a single request message from the
+client and an optional response message from the server.  Both the
+client and server messages are unlimited in length and are terminated
+with a flush packet.
+
+The pkt-line routines (Documentation/technical/protocol-common.txt)
+are used to simplify buffer management during message generation,
+transmission, and reception.  A flush packet is used to mark the end
+of the message.  This allows the sender to incrementally generate and
+transmit the message.  It allows the receiver to incrementally receive
+the message in chunks and to know when they have received the entire
+message.
+
+The actual byte format of the client request and server response
+messages are application specific.  The IPC layer transmits and
+receives them as opaque byte buffers without any concern for the
+content within.  It is the job of the calling application layer to
+understand the contents of the request and response messages.
+
+
+Summary
+-------
+
+Conceptually, the Simple-IPC protocol is similar to an HTTP REST
+request.  Clients connect, make an application-specific and
+stateless request, receive an application-specific
+response, and disconnect.  It is a one round trip facility for
+querying the server.  The Simple-IPC routines hide the socket,
+named pipe, and thread pool details and allow the application
+layer to focus on the application at hand.
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.txt
index c65ffaf..037a91c 100644
--- a/Documentation/technical/api-trace2.txt
+++ b/Documentation/technical/api-trace2.txt
@@ -396,14 +396,14 @@
 }
 ------------
 
-`"discard"`::
+`"too_many_files"`::
 	This event is written to the git-trace2-discard sentinel file if there
 	are too many files in the target trace directory (see the
 	trace2.maxFiles config option).
 +
 ------------
 {
-	"event":"discard",
+	"event":"too_many_files",
 	...
 }
 ------------
@@ -465,7 +465,7 @@
 ------------
 
 `"error"`::
-	This event is emitted when one of the `error()`, `die()`,
+	This event is emitted when one of the `BUG()`, `error()`, `die()`,
 	`warning()`, or `usage()` functions are called.
 +
 ------------
diff --git a/Documentation/technical/hash-function-transition.txt b/Documentation/technical/hash-function-transition.txt
index 7c1630b..260224b 100644
--- a/Documentation/technical/hash-function-transition.txt
+++ b/Documentation/technical/hash-function-transition.txt
@@ -599,7 +599,7 @@
     convert any object names written to output to SHA-1, but store
     objects using SHA-256.  This allows users to test the code with no
     visible behavior change except for performance.  This allows
-    allows running even tests that assume the SHA-1 hash function, to
+    running even tests that assume the SHA-1 hash function, to
     sanity-check the behavior of the new mode.
 
  2. ("early transition") Allow both SHA-1 and SHA-256 object names in
diff --git a/Documentation/technical/index-format.txt b/Documentation/technical/index-format.txt
index b633482..65da0da 100644
--- a/Documentation/technical/index-format.txt
+++ b/Documentation/technical/index-format.txt
@@ -44,6 +44,13 @@
   localization, no special casing of directory separator '/'). Entries
   with the same name are sorted by their stage field.
 
+  An index entry typically represents a file. However, if sparse-checkout
+  is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the
+  `extensions.sparseIndex` extension is enabled, then the index may
+  contain entries for directories outside of the sparse-checkout definition.
+  These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and
+  the path ends in a directory separator.
+
   32-bit ctime seconds, the last time a file's metadata changed
     this is stat(2) data
 
@@ -273,14 +280,14 @@
   - Stat data of $GIT_DIR/info/exclude. See "Index entry" section from
     ctime field until "file size".
 
-  - Stat data of core.excludesfile
+  - Stat data of core.excludesFile
 
   - 32-bit dir_flags (see struct dir_struct)
 
   - Hash of $GIT_DIR/info/exclude. A null hash means the file
     does not exist.
 
-  - Hash of core.excludesfile. A null hash means the file does
+  - Hash of core.excludesFile. A null hash means the file does
     not exist.
 
   - NUL-terminated string of per-dir exclude file name. This usually
@@ -385,3 +392,15 @@
 	in this block of entries.
 
     - 32-bit count of cache entries in this block
+
+== Sparse Directory Entries
+
+  When using sparse-checkout in cone mode, some entire directories within
+  the index can be summarized by pointing to a tree object instead of the
+  entire expanded list of paths within that tree. An index containing such
+  entries is a "sparse index". Index format versions 4 and less were not
+  implemented with such entries in mind. Thus, for these versions, an
+  index containing sparse directory entries will include this extension
+  with signature { 's', 'd', 'i', 'r' }. Like the split-index extension,
+  tools should avoid interacting with a sparse index unless they understand
+  this extension.
diff --git a/Documentation/technical/packfile-uri.txt b/Documentation/technical/packfile-uri.txt
index f7eabc6..1eb525f 100644
--- a/Documentation/technical/packfile-uri.txt
+++ b/Documentation/technical/packfile-uri.txt
@@ -35,13 +35,14 @@
 at least so that we can test the client.
 
 This is the implementation: a feature, marked experimental, that allows the
-server to be configured by one or more `uploadpack.blobPackfileUri=<sha1>
-<uri>` entries. Whenever the list of objects to be sent is assembled, all such
-blobs are excluded, replaced with URIs. As noted in "Future work" below, the
-server can evolve in the future to support excluding other objects (or other
-implementations of servers could be made that support excluding other objects)
-without needing a protocol change, so clients should not expect that packfiles
-downloaded in this way only contain single blobs.
+server to be configured by one or more `uploadpack.blobPackfileUri=
+<object-hash> <pack-hash> <uri>` entries. Whenever the list of objects to be
+sent is assembled, all such blobs are excluded, replaced with URIs. As noted
+in "Future work" below, the server can evolve in the future to support
+excluding other objects (or other implementations of servers could be made
+that support excluding other objects) without needing a protocol change, so
+clients should not expect that packfiles downloaded in this way only contain
+single blobs.
 
 Client design
 -------------
diff --git a/Documentation/technical/parallel-checkout.txt b/Documentation/technical/parallel-checkout.txt
new file mode 100644
index 0000000..e790258
--- /dev/null
+++ b/Documentation/technical/parallel-checkout.txt
@@ -0,0 +1,270 @@
+Parallel Checkout Design Notes
+==============================
+
+The "Parallel Checkout" feature attempts to use multiple processes to
+parallelize the work of uncompressing the blobs, applying in-core
+filters, and writing the resulting contents to the working tree during a
+checkout operation. It can be used by all checkout-related commands,
+such as `clone`, `checkout`, `reset`, `sparse-checkout`, and others.
+
+These commands share the following basic structure:
+
+* Step 1: Read the current index file into memory.
+
+* Step 2: Modify the in-memory index based upon the command, and
+  temporarily mark all cache entries that need to be updated.
+
+* Step 3: Populate the working tree to match the new candidate index.
+  This includes iterating over all of the to-be-updated cache entries
+  and delete, create, or overwrite the associated files in the working
+  tree.
+
+* Step 4: Write the new index to disk.
+
+Step 3 is the focus of the "parallel checkout" effort described here.
+
+Sequential Implementation
+-------------------------
+
+For the purposes of discussion here, the current sequential
+implementation of Step 3 is divided in 3 parts, each one implemented in
+its own function:
+
+* Step 3a: `unpack-trees.c:check_updates()` contains a series of
+  sequential loops iterating over the `cache_entry`'s array. The main
+  loop in this function calls the Step 3b function for each of the
+  to-be-updated entries.
+
+* Step 3b: `entry.c:checkout_entry()` examines the existing working tree
+  for file conflicts, collisions, and unsaved changes. It removes files
+  and creates leading directories as necessary. It calls the Step 3c
+  function for each entry to be written.
+
+* Step 3c: `entry.c:write_entry()` loads the blob into memory, smudges
+  it if necessary, creates the file in the working tree, writes the
+  smudged contents, calls `fstat()` or `lstat()`, and updates the
+  associated `cache_entry` struct with the stat information gathered.
+
+It wouldn't be safe to perform Step 3b in parallel, as there could be
+race conditions between file creations and removals. Instead, the
+parallel checkout framework lets the sequential code handle Step 3b,
+and uses parallel workers to replace the sequential
+`entry.c:write_entry()` calls from Step 3c.
+
+Rejected Multi-Threaded Solution
+--------------------------------
+
+The most "straightforward" implementation would be to spread the set of
+to-be-updated cache entries across multiple threads. But due to the
+thread-unsafe functions in the ODB code, we would have to use locks to
+coordinate the parallel operation. An early prototype of this solution
+showed that the multi-threaded checkout would bring performance
+improvements over the sequential code, but there was still too much lock
+contention. A `perf` profiling indicated that around 20% of the runtime
+during a local Linux clone (on an SSD) was spent in locking functions.
+For this reason this approach was rejected in favor of using multiple
+child processes, which led to a better performance.
+
+Multi-Process Solution
+----------------------
+
+Parallel checkout alters the aforementioned Step 3 to use multiple
+`checkout--worker` background processes to distribute the work. The
+long-running worker processes are controlled by the foreground Git
+command using the existing run-command API.
+
+Overview
+~~~~~~~~
+
+Step 3b is only slightly altered; for each entry to be checked out, the
+main process performs the following steps:
+
+* M1: Check whether there is any untracked or unclean file in the
+  working tree which would be overwritten by this entry, and decide
+  whether to proceed (removing the file(s)) or not.
+
+* M2: Create the leading directories.
+
+* M3: Load the conversion attributes for the entry's path.
+
+* M4: Check, based on the entry's type and conversion attributes,
+  whether the entry is eligible for parallel checkout (more on this
+  later). If it is eligible, enqueue the entry and the loaded
+  attributes to later write the entry in parallel. If not, write the
+  entry right away, using the default sequential code.
+
+Note: we save the conversion attributes associated with each entry
+because the workers don't have access to the main process' index state,
+so they can't load the attributes by themselves (and the attributes are
+needed to properly smudge the entry). Additionally, this has a positive
+impact on performance as (1) we don't need to load the attributes twice
+and (2) the attributes machinery is optimized to handle paths in
+sequential order.
+
+After all entries have passed through the above steps, the main process
+checks if the number of enqueued entries is sufficient to spread among
+the workers. If not, it just writes them sequentially. Otherwise, it
+spawns the workers and distributes the queued entries uniformly in
+continuous chunks. This aims to minimize the chances of two workers
+writing to the same directory simultaneously, which could increase lock
+contention in the kernel.
+
+Then, for each assigned item, each worker:
+
+* W1: Checks if there is any non-directory file in the leading part of
+  the entry's path or if there already exists a file at the entry' path.
+  If so, mark the entry with `PC_ITEM_COLLIDED` and skip it (more on
+  this later).
+
+* W2: Creates the file (with O_CREAT and O_EXCL).
+
+* W3: Loads the blob into memory (inflating and delta reconstructing
+  it).
+
+* W4: Applies any required in-process filter, like end-of-line
+  conversion and re-encoding.
+
+* W5: Writes the result to the file descriptor opened at W2.
+
+* W6: Calls `fstat()` or lstat()` on the just-written path, and sends
+  the result back to the main process, together with the end status of
+  the operation and the item's identification number.
+
+Note that, when possible, steps W3 to W5 are delegated to the streaming
+machinery, removing the need to keep the entire blob in memory.
+
+If the worker fails to read the blob or to write it to the working tree,
+it removes the created file to avoid leaving empty files behind. This is
+the *only* time a worker is allowed to remove a file.
+
+As mentioned earlier, it is the responsibility of the main process to
+remove any file that blocks the checkout operation (or abort if the
+removal(s) would cause data loss and the user didn't ask to `--force`).
+This is crucial to avoid race conditions and also to properly detect
+path collisions at Step W1.
+
+After the workers finish writing the items and sending back the required
+information, the main process handles the results in two steps:
+
+- First, it updates the in-memory index with the `lstat()` information
+  sent by the workers. (This must be done first as this information
+  might me required in the following step.)
+
+- Then it writes the items which collided on disk (i.e. items marked
+  with `PC_ITEM_COLLIDED`). More on this below.
+
+Path Collisions
+---------------
+
+Path collisions happen when two different paths correspond to the same
+entry in the file system. E.g. the paths 'a' and 'A' would collide in a
+case-insensitive file system.
+
+The sequential checkout deals with collisions in the same way that it
+deals with files that were already present in the working tree before
+checkout. Basically, it checks if the path that it wants to write
+already exists on disk, makes sure the existing file doesn't have
+unsaved data, and then overwrites it. (To be more pedantic: it deletes
+the existing file and creates the new one.) So, if there are multiple
+colliding files to be checked out, the sequential code will write each
+one of them but only the last will actually survive on disk.
+
+Parallel checkout aims to reproduce the same behavior. However, we
+cannot let the workers racily write to the same file on disk. Instead,
+the workers detect when the entry that they want to check out would
+collide with an existing file, and mark it with `PC_ITEM_COLLIDED`.
+Later, the main process can sequentially feed these entries back to
+`checkout_entry()` without the risk of race conditions. On clone, this
+also has the effect of marking the colliding entries to later emit a
+warning for the user, like the classic sequential checkout does.
+
+The workers are able to detect both collisions among the entries being
+concurrently written and collisions between a parallel-eligible entry
+and an ineligible entry. The general idea for collision detection is
+quite straightforward: for each parallel-eligible entry, the main
+process must remove all files that prevent this entry from being written
+(before enqueueing it). This includes any non-directory file in the
+leading path of the entry. Later, when a worker gets assigned the entry,
+it looks again for the non-directories files and for an already existing
+file at the entry's path. If any of these checks finds something, the
+worker knows that there was a path collision.
+
+Because parallel checkout can distinguish path collisions from the case
+where the file was already present in the working tree before checkout,
+we could alternatively choose to skip the checkout of colliding entries.
+However, each entry that doesn't get written would have NULL `lstat()`
+fields on the index. This could cause performance penalties for
+subsequent commands that need to refresh the index, as they would have
+to go to the file system to see if the entry is dirty. Thus, if we have
+N entries in a colliding group and we decide to write and `lstat()` only
+one of them, every subsequent `git-status` will have to read, convert,
+and hash the written file N - 1 times. By checking out all colliding
+entries (like the sequential code does), we only pay the overhead once,
+during checkout.
+
+Eligible Entries for Parallel Checkout
+--------------------------------------
+
+As previously mentioned, not all entries passed to `checkout_entry()`
+will be considered eligible for parallel checkout. More specifically, we
+exclude:
+
+- Symbolic links; to avoid race conditions that, in combination with
+  path collisions, could cause workers to write files at the wrong
+  place. For example, if we were to concurrently check out a symlink
+  'a' -> 'b' and a regular file 'A/f' in a case-insensitive file system,
+  we could potentially end up writing the file 'A/f' at 'a/f', due to a
+  race condition.
+
+- Regular files that require external filters (either "one shot" filters
+  or long-running process filters). These filters are black-boxes to Git
+  and may have their own internal locking or non-concurrent assumptions.
+  So it might not be safe to run multiple instances in parallel.
++
+Besides, long-running filters may use the delayed checkout feature to
+postpone the return of some filtered blobs. The delayed checkout queue
+and the parallel checkout queue are not compatible and should remain
+separate.
++
+Note: regular files that only require internal filters, like end-of-line
+conversion and re-encoding, are eligible for parallel checkout.
+
+Ineligible entries are checked out by the classic sequential codepath
+*before* spawning workers.
+
+Note: submodules's files are also eligible for parallel checkout (as
+long as they don't fall into any of the excluding categories mentioned
+above). But since each submodule is checked out in its own child
+process, we don't mix the superproject's and the submodules' files in
+the same parallel checkout process or queue.
+
+The API
+-------
+
+The parallel checkout API was designed with the goal of minimizing
+changes to the current users of the checkout machinery. This means that
+they don't have to call a different function for sequential or parallel
+checkout. As already mentioned, `checkout_entry()` will automatically
+insert the given entry in the parallel checkout queue when this feature
+is enabled and the entry is eligible; otherwise, it will just write the
+entry right away, using the sequential code. In general, callers of the
+parallel checkout API should look similar to this:
+
+----------------------------------------------
+int pc_workers, pc_threshold, err = 0;
+struct checkout state;
+
+get_parallel_checkout_configs(&pc_workers, &pc_threshold);
+
+/*
+ * This check is not strictly required, but it
+ * should save some time in sequential mode.
+ */
+if (pc_workers > 1)
+	init_parallel_checkout();
+
+for (each cache_entry ce to-be-updated)
+	err |= checkout_entry(ce, &state, NULL, NULL);
+
+err |= run_parallel_checkout(&state, pc_workers, pc_threshold, NULL, NULL);
+----------------------------------------------
diff --git a/Documentation/technical/partial-clone.txt b/Documentation/technical/partial-clone.txt
index 0780d30..a0dd7c6 100644
--- a/Documentation/technical/partial-clone.txt
+++ b/Documentation/technical/partial-clone.txt
@@ -242,8 +242,7 @@
   repository and can satisfy all such requests.
 
 - Repack essentially treats promisor and non-promisor packfiles as 2
-  distinct partitions and does not mix them.  Repack currently only works
-  on non-promisor packfiles and loose objects.
+  distinct partitions and does not mix them.
 
 - Dynamic object fetching invokes fetch-pack once *for each item*
   because most algorithms stumble upon a missing object and need to have
@@ -273,9 +272,6 @@
 The user might want to work in a triangular work flow with multiple
 promisor remotes that each have an incomplete view of the repository.
 
-- Allow repack to work on promisor packfiles (while keeping them distinct
-  from non-promisor packfiles).
-
 - Allow non-pathname-based filters to make use of packfile bitmaps (when
   present).  This was just an omission during the initial implementation.
 
diff --git a/Documentation/technical/protocol-v2.txt b/Documentation/technical/protocol-v2.txt
index f772d90..1040d85 100644
--- a/Documentation/technical/protocol-v2.txt
+++ b/Documentation/technical/protocol-v2.txt
@@ -33,8 +33,8 @@
 
   * '0000' Flush Packet (flush-pkt) - indicates the end of a message
   * '0001' Delimiter Packet (delim-pkt) - separates sections of a message
-  * '0002' Message Packet (response-end-pkt) - indicates the end of a response
-    for stateless connections
+  * '0002' Response End Packet (response-end-pkt) - indicates the end of a
+    response for stateless connections
 
 Initial Client Request
 ----------------------
@@ -346,6 +346,14 @@
 	client should download from all given URIs. Currently, the
 	protocols supported are "http" and "https".
 
+If the 'wait-for-done' feature is advertised, the following argument
+can be included in the client's request.
+
+    wait-for-done
+	Indicates to the server that it should never send "ready", but
+	should wait for the client to say "done" before sending the
+	packfile.
+
 The response of `fetch` is broken into a number of sections separated by
 delimiter packets (0001), with each section beginning with its section
 header. Most sections are sent only when the packfile is sent.
@@ -514,3 +522,34 @@
 current implementation uses trace2 session IDs (see
 link:api-trace2.html[api-trace2] for details), but this may change and users of
 the session ID should not rely on this fact.
+
+object-info
+~~~~~~~~~~~
+
+`object-info` is the command to retrieve information about one or more objects.
+Its main purpose is to allow a client to make decisions based on this
+information without having to fully fetch objects. Object size is the only
+information that is currently supported.
+
+An `object-info` request takes the following arguments:
+
+	size
+	Requests size information to be returned for each listed object id.
+
+	oid <oid>
+	Indicates to the server an object which the client wants to obtain
+	information for.
+
+The response of `object-info` is a list of the requested object ids
+and associated requested information, each separated by a single space.
+
+	output = info flush-pkt
+
+	info = PKT-LINE(attrs) LF)
+		*PKT-LINE(obj-info LF)
+
+	attrs = attr | attrs SP attrs
+
+	attr = "size"
+
+	obj-info = obj-id SP obj-size
diff --git a/Documentation/technical/reftable.txt b/Documentation/technical/reftable.txt
index 8095ab2..d7c3b64 100644
--- a/Documentation/technical/reftable.txt
+++ b/Documentation/technical/reftable.txt
@@ -872,17 +872,11 @@
 Layout
 ^^^^^^
 
-A collection of reftable files are stored in the `$GIT_DIR/reftable/`
-directory:
-
-....
-00000001-00000001.log
-00000002-00000002.ref
-00000003-00000003.ref
-....
-
-where reftable files are named by a unique name such as produced by the
-function `${min_update_index}-${max_update_index}.ref`.
+A collection of reftable files are stored in the `$GIT_DIR/reftable/` directory.
+Their names should have a random element, such that each filename is globally
+unique; this helps avoid spurious failures on Windows, where open files cannot
+be removed or overwritten. It suggested to use
+`${min_update_index}-${max_update_index}-${random}.ref` as a naming convention.
 
 Log-only files use the `.log` extension, while ref-only and mixed ref
 and log files use `.ref`. extension.
@@ -893,9 +887,9 @@
 
 ....
 $ cat .git/reftable/tables.list
-00000001-00000001.log
-00000002-00000002.ref
-00000003-00000003.ref
+00000001-00000001-RANDOM1.log
+00000002-00000002-RANDOM2.ref
+00000003-00000003-RANDOM3.ref
 ....
 
 Readers must read `$GIT_DIR/reftable/tables.list` to determine which
@@ -940,7 +934,7 @@
 3.  Select `update_index` to be most recent file's
 `max_update_index + 1`.
 4.  Prepare temp reftable `tmp_XXXXXX`, including log entries.
-5.  Rename `tmp_XXXXXX` to `${update_index}-${update_index}.ref`.
+5.  Rename `tmp_XXXXXX` to `${update_index}-${update_index}-${random}.ref`.
 6.  Copy `tables.list` to `tables.list.lock`, appending file from (5).
 7.  Rename `tables.list.lock` to `tables.list`.
 
@@ -993,7 +987,7 @@
 should always be the case, assuming that other processes are adhering to
 the locking protocol.
 7.  Rename `${min_update_index}-${max_update_index}_XXXXXX` to
-`${min_update_index}-${max_update_index}.ref`.
+`${min_update_index}-${max_update_index}-${random}.ref`.
 8.  Write the new stack to `tables.list.lock`, replacing `B` and `C`
 with the file from (4).
 9.  Rename `tables.list.lock` to `tables.list`.
@@ -1005,6 +999,27 @@
 Each reftable (compacted or not) is uniquely identified by its name, so
 open reftables can be cached by their name.
 
+Windows
+^^^^^^^
+
+On windows, and other systems that do not allow deleting or renaming to open
+files, compaction may succeed, but other readers may prevent obsolete tables
+from being deleted.
+
+On these platforms, the following strategy can be followed: on closing a
+reftable stack, reload `tables.list`, and delete any tables no longer mentioned
+in `tables.list`.
+
+Irregular program exit may still leave about unused files. In this case, a
+cleanup operation should proceed as follows:
+
+* take a lock `tables.list.lock` to prevent concurrent modifications
+* refresh the reftable stack, by reading `tables.list`
+* for each `*.ref` file, remove it if
+** it is not mentioned in `tables.list`, and
+** its max update_index is not beyond the max update_index of the stack
+
+
 Alternatives considered
 ~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/Documentation/technical/remembering-renames.txt b/Documentation/technical/remembering-renames.txt
new file mode 100644
index 0000000..2fd5cc8
--- /dev/null
+++ b/Documentation/technical/remembering-renames.txt
@@ -0,0 +1,671 @@
+Rebases and cherry-picks involve a sequence of merges whose results are
+recorded as new single-parent commits.  The first parent side of those
+merges represent the "upstream" side, and often include a far larger set of
+changes than the second parent side.  Traditionally, the renames on the
+first-parent side of that sequence of merges were repeatedly re-detected
+for every merge.  This file explains why it is safe and effective during
+rebases and cherry-picks to remember renames on the upstream side of
+history as an optimization, assuming all merges are automatic and clean
+(i.e. no conflicts and not interrupted for user input or editing).
+
+Outline:
+
+  0. Assumptions
+
+  1. How rebasing and cherry-picking work
+
+  2. Why the renames on MERGE_SIDE1 in any given pick are *always* a
+     superset of the renames on MERGE_SIDE1 for the next pick.
+
+  3. Why any rename on MERGE_SIDE1 in any given pick is _almost_ always also
+     a rename on MERGE_SIDE1 for the next pick
+
+  4. A detailed description of the the counter-examples to #3.
+
+  5. Why the special cases in #4 are still fully reasonable to use to pair
+     up files for three-way content merging in the merge machinery, and why
+     they do not affect the correctness of the merge.
+
+  6. Interaction with skipping of "irrelevant" renames
+
+  7. Additional items that need to be cached
+
+  8. How directory rename detection interacts with the above and why this
+     optimization is still safe even if merge.directoryRenames is set to
+     "true".
+
+
+=== 0. Assumptions ===
+
+There are two assumptions that will hold throughout this document:
+
+  * The upstream side where commits are transplanted to is treated as the
+    first parent side when rebase/cherry-pick call the merge machinery
+
+  * All merges are fully automatic
+
+and a third that will hold in sections 2-5 for simplicity, that I'll later
+address in section 8:
+
+  * No directory renames occur
+
+
+Let me explain more about each assumption and why I include it:
+
+
+The first assumption is merely for the purposes of making this document
+clearer; the optimization implementation does not actually depend upon it.
+However, the assumption does hold in all cases because it reflects the way
+that both rebase and cherry-pick were implemented; and the implementation
+of cherry-pick and rebase are not readily changeable for backwards
+compatibility reasons (see for example the discussion of the --ours and
+--theirs flag in the documentation of `git checkout`, particularly the
+comments about how they behave with rebase).  The optimization avoids
+checking first-parent-ness, though.  It checks the conditions that make the
+optimization valid instead, so it would still continue working if someone
+changed the parent ordering that cherry-pick and rebase use.  But making
+this assumption does make this document much clearer and prevents me from
+having to repeat every example twice.
+
+If the second assumption is violated, then the optimization simply is
+turned off and thus isn't relevant to consider.  The second assumption can
+also be stated as "there is no interruption for a user to resolve conflicts
+or to just further edit or tweak files".  While real rebases and
+cherry-picks are often interrupted (either because it's an interactive
+rebase where the user requested to stop and edit, or because there were
+conflicts that the user needs to resolve), the cache of renames is not
+stored on disk, and thus is thrown away as soon as the rebase or cherry
+pick stops for the user to resolve the operation.
+
+The third assumption makes sections 2-5 simpler, and allows people to
+understand the basics of why this optimization is safe and effective, and
+then I can go back and address the specifics in section 8.  It is probably
+also worth noting that if directory renames do occur, then the default of
+merge.directoryRenames being set to "conflict" means that the operation
+will stop for users to resolve the conflicts and the cache will be thrown
+away, and thus that there won't be an optimization to apply.  So, the only
+reason we need to address directory renames specifically, is that some
+users will have set merge.directoryRenames to "true" to allow the merges to
+continue to proceed automatically.  The optimization is still safe with
+this config setting, but we have to discuss a few more cases to show why;
+this discussion is deferred until section 8.
+
+
+=== 1. How rebasing and cherry-picking work ===
+
+Consider the following setup (from the git-rebase manpage):
+
+		     A---B---C topic
+		    /
+	       D---E---F---G main
+
+After rebasing or cherry-picking topic onto main, this will appear as:
+
+			     A'--B'--C' topic
+			    /
+	       D---E---F---G main
+
+The way the commits A', B', and C' are created is through a series of
+merges, where rebase or cherry-pick sequentially uses each of the three
+A-B-C commits in a special merge operation.  Let's label the three commits
+in the merge operation as MERGE_BASE, MERGE_SIDE1, and MERGE_SIDE2.  For
+this picture, the three commits for each of the three merges would be:
+
+To create A':
+   MERGE_BASE:   E
+   MERGE_SIDE1:  G
+   MERGE_SIDE2:  A
+
+To create B':
+   MERGE_BASE:   A
+   MERGE_SIDE1:  A'
+   MERGE_SIDE2:  B
+
+To create C':
+   MERGE_BASE:   B
+   MERGE_SIDE1:  B'
+   MERGE_SIDE2:  C
+
+Sometimes, folks are surprised that these three-way merges are done.  It
+can be useful in understanding these three-way merges to view them in a
+slightly different light.  For example, in creating C', you can view it as
+either:
+
+  * Apply the changes between B & C to B'
+  * Apply the changes between B & B' to C
+
+Conceptually the two statements above are the same as a three-way merge of
+B, B', and C, at least the parts before you decide to record a commit.
+
+
+=== 2. Why the renames on MERGE_SIDE1 in any given pick are always a ===
+===    superset of the renames on MERGE_SIDE1 for the next pick.     ===
+
+The merge machinery uses the filenames it is fed from MERGE_BASE,
+MERGE_SIDE1, and MERGE_SIDE2.  It will only move content to a different
+filename under one of three conditions:
+
+  * To make both pieces of a conflict available to a user during conflict
+    resolution (examples: directory/file conflict, add/add type conflict
+    such as symlink vs. regular file)
+
+  * When MERGE_SIDE1 renames the file.
+
+  * When MERGE_SIDE2 renames the file.
+
+First, let's remember what commits are involved in the first and second
+picks of the cherry-pick or rebase sequence:
+
+To create A':
+   MERGE_BASE:   E
+   MERGE_SIDE1:  G
+   MERGE_SIDE2:  A
+
+To create B':
+   MERGE_BASE:   A
+   MERGE_SIDE1:  A'
+   MERGE_SIDE2:  B
+
+So, in particular, we need to show that the renames between E and G are a
+superset of those between A and A'.
+
+A' is created by the first merge.  A' will only have renames for one of the
+three reasons listed above.  The first case, a conflict, results in a
+situation where the cache is dropped and thus this optimization doesn't
+take effect, so we need not consider that case.  The third case, a rename
+on MERGE_SIDE2 (i.e. from G to A), will show up in A' but it also shows up
+in A -- therefore when diffing A and A' that path does not show up as a
+rename.  The only remaining way for renames to show up in A' is for the
+rename to come from MERGE_SIDE1.  Therefore, all renames between A and A'
+are a subset of those between E and G.  Equivalently, all renames between E
+and G are a superset of those between A and A'.
+
+
+=== 3. Why any rename on MERGE_SIDE1 in any given pick is _almost_   ===
+===    always also a rename on MERGE_SIDE1 for the next pick.        ===
+
+Let's again look at the first two picks:
+
+To create A':
+   MERGE_BASE:   E
+   MERGE_SIDE1:  G
+   MERGE_SIDE2:  A
+
+To create B':
+   MERGE_BASE:   A
+   MERGE_SIDE1:  A'
+   MERGE_SIDE2:  B
+
+Now let's look at any given rename from MERGE_SIDE1 of the first pick, i.e.
+any given rename from E to G.  Let's use the filenames 'oldfile' and
+'newfile' for demonstration purposes.  That first pick will function as
+follows; when the rename is detected, the merge machinery will do a
+three-way content merge of the following:
+    E:oldfile
+    G:newfile
+    A:oldfile
+and produce a new result:
+    A':newfile
+
+Note above that I've assumed that E->A did not rename oldfile.  If that
+side did rename, then we most likely have a rename/rename(1to2) conflict
+that will cause the rebase or cherry-pick operation to halt and drop the
+in-memory cache of renames and thus doesn't need to be considered further.
+In the special case that E->A does rename the file but also renames it to
+newfile, then there is no conflict from the renaming and the merge can
+succeed.  In this special case, the rename is not valid to cache because
+the second merge will find A:newfile in the MERGE_BASE (see also the new
+testcases in t6429 with "rename same file identically" in their
+description).  So a rename/rename(1to1) needs to be specially handled by
+pruning renames from the cache and decrementing the dir_rename_counts in
+the current and leading directories associated with those renames.  Or,
+since these are really rare, one could just take the easy way out and
+disable the remembering renames optimization when a rename/rename(1to1)
+happens.
+
+The previous paragraph handled the cases for E->A renaming oldfile, let's
+continue assuming that oldfile is not renamed in A.
+
+As per the diagram for creating B', MERGE_SIDE1 involves the changes from A
+to A'.  So, we are curious whether A:oldfile and A':newfile will be viewed
+as renames.  Note that:
+
+  * There will be no A':oldfile (because there could not have been a
+    G:oldfile as we do not do break detection in the merge machinery and
+    G:newfile was detected as a rename, and by the construction of the
+    rename above that merged cleanly, the merge machinery will ensure there
+    is no 'oldfile' in the result).
+
+  * There will be no A:newfile (if there had been, we would have had a
+    rename/add conflict).
+
+  * Clearly A:oldfile and A':newfile are "related" (A':newfile came from a
+    clean three-way content merge involving A:oldfile).
+
+We can also expound on the third point above, by noting that three-way
+content merges can also be viewed as applying the differences between the
+base and one side to the other side.  Thus we can view A':newfile as
+having been created by taking the changes between E:oldfile and G:newfile
+(which were detected as being related, i.e. <50% changed) to A:oldfile.
+
+Thus A:oldfile and A':newfile are just as related as E:oldfile and
+G:newfile are -- they have exactly identical differences.  Since the latter
+were detected as renames, A:oldfile and A':newfile should also be
+detectable as renames almost always.
+
+
+=== 4. A detailed description of the counter-examples to #3.         ===
+
+We already noted in section 3 that rename/rename(1to1) (i.e. both sides
+renaming a file the same way) was one counter-example.  The more
+interesting bit, though, is why did we need to use the "almost" qualifier
+when stating that A:oldfile and A':newfile are "almost" always detectable
+as renames?
+
+Let's repeat an earlier point that section 3 made:
+
+  A':newfile was created by applying the changes between E:oldfile and
+  G:newfile to A:oldfile.  The changes between E:oldfile and G:newfile were
+  <50% of the size of E:oldfile.
+
+If those changes that were <50% of the size of E:oldfile are also <50% of
+the size of A:oldfile, then A:oldfile and A':newfile will be detectable as
+renames.  However, if there is a dramatic size reduction between E:oldfile
+and A:oldfile (but the changes between E:oldfile, G:newfile, and A:oldfile
+still somehow merge cleanly), then traditional rename detection would not
+detect A:oldfile and A':newfile as renames.
+
+Here's an example where that can happen:
+  * E:oldfile had 20 lines
+  * G:newfile added 10 new lines at the beginning of the file
+  * A:oldfile kept the first 3 lines of the file, and deleted all the rest
+then
+  => A':newfile would have 13 lines, 3 of which matches those in A:oldfile.
+E:oldfile -> G:newfile would be detected as a rename, but A:oldfile and
+A':newfile would not be.
+
+
+=== 5. Why the special cases in #4 are still fully reasonable to use to    ===
+===    pair up files for three-way content merging in the merge machinery, ===
+===    and why they do not affect the correctness of the merge.            ===
+
+In the rename/rename(1to1) case, A:newfile and A':newfile are not renames
+since they use the *same* filename.  However, files with the same filename
+are obviously fine to pair up for three-way content merging (the merge
+machinery has never employed break detection).  The interesting
+counter-example case is thus not the rename/rename(1to1) case, but the case
+where A did not rename oldfile.  That was the case that we spent most of
+the time discussing in sections 3 and 4.  The remainder of this section
+will be devoted to that case as well.
+
+So, even if A:oldfile and A':newfile aren't detectable as renames, why is
+it still reasonable to pair them up for three-way content merging in the
+merge machinery?  There are multiple reasons:
+
+  * As noted in sections 3 and 4, the diff between A:oldfile and A':newfile
+    is *exactly* the same as the diff between E:oldfile and G:newfile.  The
+    latter pair were detected as renames, so it seems unlikely to surprise
+    users for us to treat A:oldfile and A':newfile as renames.
+
+  * In fact, "oldfile" and "newfile" were at one point detected as renames
+    due to how they were constructed in the E..G chain.  And we used that
+    information once already in this rebase/cherry-pick.  I think users
+    would be unlikely to be surprised at us continuing to treat the files
+    as renames and would quickly understand why we had done so.
+
+  * Marking or declaring files as renames is *not* the end goal for merges.
+    Merges use renames to determine which files make sense to be paired up
+    for three-way content merges.
+
+  * A:oldfile and A':newfile were _already_ paired up in a three-way
+    content merge; that is how A':newfile was created.  In fact, that
+    three-way content merge was clean.  So using them again in a later
+    three-way content merge seems very reasonable.
+
+However, the above is focusing on the common scenarios.  Let's try to look
+at all possible unusual scenarios and compare without the optimization to
+with the optimization.  Consider the following theoretical cases; we will
+then dive into each to determine which of them are possible,
+and if so, what they mean:
+
+  1. Without the optimization, the second merge results in a conflict.
+     With the optimization, the second merge also results in a conflict.
+     Questions: Are the conflicts confusingly different?  Better in one case?
+
+  2. Without the optimization, the second merge results in NO conflict.
+     With the optimization, the second merge also results in NO conflict.
+     Questions: Are the merges the same?
+
+  3. Without the optimization, the second merge results in a conflict.
+     With the optimization, the second merge results in NO conflict.
+     Questions: Possible?  Bug, bugfix, or something else?
+
+  4. Without the optimization, the second merge results in NO conflict.
+     With the optimization, the second merge results in a conflict.
+     Questions: Possible?  Bug, bugfix, or something else?
+
+I'll consider all four cases, but out of order.
+
+The fourth case is impossible.  For the code without the remembering
+renames optimization to not get a conflict, B:oldfile would need to exactly
+match A:oldfile -- if it doesn't, there would be a modify/delete conflict.
+If A:oldfile matches B:oldfile exactly, then a three-way content merge
+between A:oldfile, A':newfile, and B:oldfile would have no conflict and
+just give us the version of newfile from A' as the result.
+
+From the same logic as the above paragraph, the second case would indeed
+result in identical merges.  When A:oldfile exactly matches B:oldfile, an
+undetected rename would say, "Oh, I see one side didn't modify 'oldfile'
+and the other side deleted it.  I'll delete it.  And I see you have this
+brand new file named 'newfile' in A', so I'll keep it."  That gives the
+same results as three-way content merging A:oldfile, A':newfile, and
+B:oldfile -- a removal of oldfile with the version of newfile from A'
+showing up in the result.
+
+The third case is interesting.  It means that A:oldfile and A':newfile were
+not just similar enough, but that the changes between them did not conflict
+with the changes between A:oldfile and B:oldfile.  This would validate our
+hunch that the files were similar enough to be used in a three-way content
+merge, and thus seems entirely correct for us to have used them that way.
+(Sidenote: One particular example here may be enlightening.  Let's say that
+B was an immediate revert of A.  B clearly would have been a clean revert
+of A, since A was B's immediate parent.  One would assume that if you can
+pick a commit, you should also be able to cherry-pick its immediate revert.
+However, this is one of those funny corner cases; without this
+optimization, we just successfully picked a commit cleanly, but we are
+unable to cherry-pick its immediate revert due to the size differences
+between E:oldfile and A:oldfile.)
+
+That leaves only the first case to consider -- when we get conflicts both
+with or without the optimization.  Without the optimization, we'll have a
+modify/delete conflict, where both A':newfile and B:oldfile are left in the
+tree for the user to deal with and no hints about the potential similarity
+between the two.  With the optimization, we'll have a three-way content
+merged A:oldfile, A':newfile, and B:oldfile with conflict markers
+suggesting we thought the files were related but giving the user the chance
+to resolve.  As noted above, I don't think users will find us treating
+'oldfile' and 'newfile' as related as a surprise since they were between E
+and G.  In any event, though, this case shouldn't be concerning since we
+hit a conflict in both cases, told the user what we know, and asked them to
+resolve it.
+
+So, in summary, case 4 is impossible, case 2 yields the same behavior, and
+cases 1 and 3 seem to provide as good or better behavior with the
+optimization than without.
+
+
+=== 6. Interaction with skipping of "irrelevant" renames ===
+
+Previous optimizations involved skipping rename detection for paths
+considered to be "irrelevant".  See for example the following commits:
+
+  * 32a56dfb99 ("merge-ort: precompute subset of sources for which we
+		need rename detection", 2021-03-11)
+  * 2fd9eda462 ("merge-ort: precompute whether directory rename
+		detection is needed", 2021-03-11)
+  * 9bd342137e ("diffcore-rename: determine which relevant_sources are
+		no longer relevant", 2021-03-13)
+
+Relevance is always determined by what the _other_ side of history has
+done, in terms of modifing a file that our side renamed, or adding a
+file to a directory which our side renamed.  This means that a path
+that is "irrelevant" when picking the first commit of a series in a
+rebase or cherry-pick, may suddenly become "relevant" when picking the
+next commit.
+
+The upshot of this is that we can only cache rename detection results
+for relevant paths, and need to re-check relevance in subsequent
+commits.  If those subsequent commits have additional paths that are
+relevant for rename detection, then we will need to redo rename
+detection -- though we can limit it to the paths for which we have not
+already detected renames.
+
+
+=== 7. Additional items that need to be cached ===
+
+It turns out we have to cache more than just renames; we also cache:
+
+  A) non-renames (i.e. unpaired deletes)
+  B) counts of renames within directories
+  C) sources that were marked as RELEVANT_LOCATION, but which were
+     downgraded to RELEVANT_NO_MORE
+  D) the toplevel trees involved in the merge
+
+These are all stored in struct rename_info, and respectively appear in
+  * cached_pairs (along side actual renames, just with a value of NULL)
+  * dir_rename_counts
+  * cached_irrelevant
+  * merge_trees
+
+The reason for (A) comes from the irrelevant renames skipping
+optimization discussed in section 6.  The fact that irrelevant renames
+are skipped means we only get a subset of the potential renames
+detected and subsequent commits may need to run rename detection on
+the upstream side on a subset of the remaining renames (to get the
+renames that are relevant for that later commit).  Since unpaired
+deletes are involved in rename detection too, we don't want to
+repeatedly check that those paths remain unpaired on the upstream side
+with every commit we are transplanting.
+
+The reason for (B) is that diffcore_rename_extended() is what
+generates the counts of renames by directory which is needed in
+directory rename detection, and if we don't run
+diffcore_rename_extended() again then we need to have the output from
+it, including dir_rename_counts, from the previous run.
+
+The reason for (C) is that merge-ort's tree traversal will again think
+those paths are relevant (marking them as RELEVANT_LOCATION), but the
+fact that they were downgraded to RELEVANT_NO_MORE means that
+dir_rename_counts already has the information we need for directory
+rename detection.  (A path which becomes RELEVANT_CONTENT in a
+subsequent commit will be removed from cached_irrelevant.)
+
+The reason for (D) is that is how we determine whether the remember
+renames optimization can be used.  In particular, remembering that our
+sequence of merges looks like:
+
+   Merge 1:
+   MERGE_BASE:   E
+   MERGE_SIDE1:  G
+   MERGE_SIDE2:  A
+   => Creates    A'
+
+   Merge 2:
+   MERGE_BASE:   A
+   MERGE_SIDE1:  A'
+   MERGE_SIDE2:  B
+   => Creates    B'
+
+It is the fact that the trees A and A' appear both in Merge 1 and in
+Merge 2, with A as a parent of A' that allows this optimization.  So
+we store the trees to compare with what we are asked to merge next
+time.
+
+
+=== 8. How directory rename detection interacts with the above and   ===
+===    why this optimization is still safe even if                   ===
+===    merge.directoryRenames is set to "true".                      ===
+
+As noted in the assumptions section:
+
+    """
+    ...if directory renames do occur, then the default of
+    merge.directoryRenames being set to "conflict" means that the operation
+    will stop for users to resolve the conflicts and the cache will be
+    thrown away, and thus that there won't be an optimization to apply.
+    So, the only reason we need to address directory renames specifically,
+    is that some users will have set merge.directoryRenames to "true" to
+    allow the merges to continue to proceed automatically.
+    """
+
+Let's remember that we need to look at how any given pick affects the next
+one.  So let's again use the first two picks from the diagram in section
+one:
+
+  First pick does this three-way merge:
+    MERGE_BASE:   E
+    MERGE_SIDE1:  G
+    MERGE_SIDE2:  A
+    => creates A'
+
+  Second pick does this three-way merge:
+    MERGE_BASE:   A
+    MERGE_SIDE1:  A'
+    MERGE_SIDE2:  B
+    => creates B'
+
+Now, directory rename detection exists so that if one side of history
+renames a directory, and the other side adds a new file to the old
+directory, then the merge (with merge.directoryRenames=true) can move the
+file into the new directory.  There are two qualitatively different ways to
+add a new file to an old directory: create a new file, or rename a file
+into that directory.  Also, directory renames can be done on either side of
+history, so there are four cases to consider:
+
+  * MERGE_SIDE1 renames old dir, MERGE_SIDE2 adds new file to   old dir
+  * MERGE_SIDE1 renames old dir, MERGE_SIDE2 renames  file into old dir
+  * MERGE_SIDE1 adds new file to   old dir, MERGE_SIDE2 renames old dir
+  * MERGE_SIDE1 renames  file into old dir, MERGE_SIDE2 renames old dir
+
+One last note before we consider these four cases: There are some
+important properties about how we implement this optimization with
+respect to directory rename detection that we need to bear in mind
+while considering all of these cases:
+
+  * rename caching occurs *after* applying directory renames
+
+  * a rename created by directory rename detection is recorded for the side
+    of history that did the directory rename.
+
+  * dir_rename_counts, the nested map of
+	{oldname => {newname => count}},
+    is cached between runs as well.  This basically means that directory
+    rename detection is also cached, though only on the side of history
+    that we cache renames for (MERGE_SIDE1 as far as this document is
+    concerned; see the assumptions section).  Two interesting sub-notes
+    about these counts:
+
+    * If we need to perform rename-detection again on the given side (e.g.
+      some paths are relevant for rename detection that weren't before),
+      then we clear dir_rename_counts and recompute it, making use of
+      cached_pairs.  The reason it is important to do this is optimizations
+      around RELEVANT_LOCATION exist to prevent us from computing
+      unnecessary renames for directory rename detection and from computing
+      dir_rename_counts for irrelevant directories; but those same renames
+      or directories may become necessary for subsequent merges.  The
+      easiest way to "fix up" dir_rename_counts in such cases is to just
+      recompute it.
+
+    * If we prune rename/rename(1to1) entries from the cache, then we also
+      need to update dir_rename_counts to decrement the counts for the
+      involved directory and any relevant parent directories (to undo what
+      update_dir_rename_counts() in diffcore-rename.c incremented when the
+      rename was initially found).  If we instead just disable the
+      remembering renames optimization when the exceedingly rare
+      rename/rename(1to1) cases occur, then dir_rename_counts will get
+      re-computed the next time rename detection occurs, as noted above.
+
+  * the side with multiple commits to pick, is the side of history that we
+    do NOT cache renames for.  Thus, there are no additional commits to
+    change the number of renames in a directory, except for those done by
+    directory rename detection (which always pad the majority).
+
+  * the "renames" we cache are modified slightly by any directory rename,
+    as noted below.
+
+Now, with those notes out of the way, let's go through the four cases
+in order:
+
+Case 1: MERGE_SIDE1 renames old dir, MERGE_SIDE2 adds new file to old dir
+
+  This case looks like this:
+
+    MERGE_BASE:   E,   Has olddir/
+    MERGE_SIDE1:  G,   Renames olddir/ -> newdir/
+    MERGE_SIDE2:  A,   Adds olddir/newfile
+    => creates    A',  With newdir/newfile
+
+    MERGE_BASE:   A,   Has olddir/newfile
+    MERGE_SIDE1:  A',  Has newdir/newfile
+    MERGE_SIDE2:  B,   Modifies olddir/newfile
+    => expected   B',  with threeway-merged newdir/newfile from above
+
+  In this case, with the optimization, note that after the first commit:
+    * MERGE_SIDE1 remembers olddir/ -> newdir/
+    * MERGE_SIDE1 has cached olddir/newfile -> newdir/newfile
+  Given the cached rename noted above, the second merge can proceed as
+  expected without needing to perform rename detection from A -> A'.
+
+Case 2: MERGE_SIDE1 renames old dir, MERGE_SIDE2 renames  file into old dir
+
+  This case looks like this:
+    MERGE_BASE:   E    oldfile, olddir/
+    MERGE_SIDE1:  G    oldfile, olddir/ -> newdir/
+    MERGE_SIDE2:  A    oldfile -> olddir/newfile
+    => creates    A',  With newdir/newfile representing original oldfile
+
+    MERGE_BASE:   A    olddir/newfile
+    MERGE_SIDE1:  A'   newdir/newfile
+    MERGE_SIDE2:  B    modify olddir/newfile
+    => expected   B',  with threeway-merged newdir/newfile from above
+
+  In this case, with the optimization, note that after the first commit:
+    * MERGE_SIDE1 remembers olddir/ -> newdir/
+    * MERGE_SIDE1 has cached olddir/newfile -> newdir/newfile
+		  (NOT oldfile -> newdir/newfile; compare to case with
+		   (p->status == 'R' && new_path) in possibly_cache_new_pair())
+
+  Given the cached rename noted above, the second merge can proceed as
+  expected without needing to perform rename detection from A -> A'.
+
+Case 3: MERGE_SIDE1 adds new file to   old dir, MERGE_SIDE2 renames old dir
+
+  This case looks like this:
+
+    MERGE_BASE:   E,   Has olddir/
+    MERGE_SIDE1:  G,   Adds olddir/newfile
+    MERGE_SIDE2:  A,   Renames olddir/ -> newdir/
+    => creates    A',  With newdir/newfile
+
+    MERGE_BASE:   A,   Has newdir/, but no notion of newdir/newfile
+    MERGE_SIDE1:  A',  Has newdir/newfile
+    MERGE_SIDE2:  B,   Has newdir/, but no notion of newdir/newfile
+    => expected   B',  with newdir/newfile from A'
+
+  In this case, with the optimization, note that after the first commit there
+  were no renames on MERGE_SIDE1, and any renames on MERGE_SIDE2 are tossed.
+  But the second merge didn't need any renames so this is fine.
+
+Case 4: MERGE_SIDE1 renames  file into old dir, MERGE_SIDE2 renames old dir
+
+  This case looks like this:
+
+    MERGE_BASE:   E,   Has olddir/
+    MERGE_SIDE1:  G,   Renames oldfile -> olddir/newfile
+    MERGE_SIDE2:  A,   Renames olddir/ -> newdir/
+    => creates    A',  With newdir/newfile representing original oldfile
+
+    MERGE_BASE:   A,   Has oldfile
+    MERGE_SIDE1:  A',  Has newdir/newfile
+    MERGE_SIDE2:  B,   Modifies oldfile
+    => expected   B',  with threeway-merged newdir/newfile from above
+
+  In this case, with the optimization, note that after the first commit:
+    * MERGE_SIDE1 remembers oldfile -> newdir/newfile
+		  (NOT oldfile -> olddir/newfile; compare to case of second
+		   block under p->status == 'R' in possibly_cache_new_pair())
+    * MERGE_SIDE2 renames are tossed because only MERGE_SIDE1 is remembered
+
+  Given the cached rename noted above, the second merge can proceed as
+  expected without needing to perform rename detection from A -> A'.
+
+Finally, I'll just note here that interactions with the
+skip-irrelevant-renames optimization means we sometimes don't detect
+renames for any files within a directory that was renamed, in which
+case we will not have been able to detect any rename for the directory
+itself.  In such a case, we do not know whether the directory was
+renamed; we want to be careful to avoid cacheing some kind of "this
+directory was not renamed" statement.  If we did, then a subsequent
+commit being rebased could add a file to the old directory, and the
+user would expect it to end up in the correct directory -- something
+our erroneous "this directory was not renamed" cache would preclude.
diff --git a/Documentation/technical/sparse-index.txt b/Documentation/technical/sparse-index.txt
new file mode 100644
index 0000000..3b24c1a
--- /dev/null
+++ b/Documentation/technical/sparse-index.txt
@@ -0,0 +1,208 @@
+Git Sparse-Index Design Document
+================================
+
+The sparse-checkout feature allows users to focus a working directory on
+a subset of the files at HEAD. The cone mode patterns, enabled by
+`core.sparseCheckoutCone`, allow for very fast pattern matching to
+discover which files at HEAD belong in the sparse-checkout cone.
+
+Three important scale dimensions for a Git working directory are:
+
+* `HEAD`: How many files are present at `HEAD`?
+
+* Populated: How many files are within the sparse-checkout cone.
+
+* Modified: How many files has the user modified in the working directory?
+
+We will use big-O notation -- O(X) -- to denote how expensive certain
+operations are in terms of these dimensions.
+
+These dimensions are ordered by their magnitude: users (typically) modify
+fewer files than are populated, and we can only populate files at `HEAD`.
+
+Problems occur if there is an extreme imbalance in these dimensions. For
+example, if `HEAD` contains millions of paths but the populated set has
+only tens of thousands, then commands like `git status` and `git add` can
+be dominated by operations that require O(`HEAD`) operations instead of
+O(Populated). Primarily, the cost is in parsing and rewriting the index,
+which is filled primarily with files at `HEAD` that are marked with the
+`SKIP_WORKTREE` bit.
+
+The sparse-index intends to take these commands that read and modify the
+index from O(`HEAD`) to O(Populated). To do this, we need to modify the
+index format in a significant way: add "sparse directory" entries.
+
+With cone mode patterns, it is possible to detect when an entire
+directory will have its contents outside of the sparse-checkout definition.
+Instead of listing all of the files it contains as individual entries, a
+sparse-index contains an entry with the directory name, referencing the
+object ID of the tree at `HEAD` and marked with the `SKIP_WORKTREE` bit.
+If we need to discover the details for paths within that directory, we
+can parse trees to find that list.
+
+At time of writing, sparse-directory entries violate expectations about the
+index format and its in-memory data structure. There are many consumers in
+the codebase that expect to iterate through all of the index entries and
+see only files. In fact, these loops expect to see a reference to every
+staged file. One way to handle this is to parse trees to replace a
+sparse-directory entry with all of the files within that tree as the index
+is loaded. However, parsing trees is slower than parsing the index format,
+so that is a slower operation than if we left the index alone. The plan is
+to make all of these integrations "sparse aware" so this expansion through
+tree parsing is unnecessary and they use fewer resources than when using a
+full index.
+
+The implementation plan below follows four phases to slowly integrate with
+the sparse-index. The intention is to incrementally update Git commands to
+interact safely with the sparse-index without significant slowdowns. This
+may not always be possible, but the hope is that the primary commands that
+users need in their daily work are dramatically improved.
+
+Phase I: Format and initial speedups
+------------------------------------
+
+During this phase, Git learns to enable the sparse-index and safely parse
+one. Protections are put in place so that every consumer of the in-memory
+data structure can operate with its current assumption of every file at
+`HEAD`.
+
+At first, every index parse will call a helper method,
+`ensure_full_index()`, which scans the index for sparse-directory entries
+(pointing to trees) and replaces them with the full list of paths (with
+blob contents) by parsing tree objects. This will be slower in all cases.
+The only noticeable change in behavior will be that the serialized index
+file contains sparse-directory entries.
+
+To start, we use a new required index extension, `sdir`, to allow
+inserting sparse-directory entries into indexes with file format
+versions 2, 3, and 4. This prevents Git versions that do not understand
+the sparse-index from operating on one, while allowing tools that do not
+understand the sparse-index to operate on repositories as long as they do
+not interact with the index. A new format, index v5, will be introduced
+that includes sparse-directory entries by default. It might also
+introduce other features that have been considered for improving the
+index, as well.
+
+Next, consumers of the index will be guarded against operating on a
+sparse-index by inserting calls to `ensure_full_index()` or
+`expand_index_to_path()`. If a specific path is requested, then those will
+be protected from within the `index_file_exists()` and `index_name_pos()`
+API calls: they will call `ensure_full_index()` if necessary. The
+intention here is to preserve existing behavior when interacting with a
+sparse-checkout. We don't want a change to happen by accident, without
+tests. Many of these locations may not need any change before removing the
+guards, but we should not do so without tests to ensure the expected
+behavior happens.
+
+It may be desirable to _change_ the behavior of some commands in the
+presence of a sparse index or more generally in any sparse-checkout
+scenario. In such cases, these should be carefully communicated and
+tested. No such behavior changes are intended during this phase.
+
+During a scan of the codebase, not every iteration of the cache entries
+needs an `ensure_full_index()` check. The basic reasons include:
+
+1. The loop is scanning for entries with non-zero stage. These entries
+   are not collapsed into a sparse-directory entry.
+
+2. The loop is scanning for submodules. These entries are not collapsed
+   into a sparse-directory entry.
+
+3. The loop is part of the index API, especially around reading or
+   writing the format.
+
+4. The loop is checking for correct order of cache entries and that is
+   correct if and only if the sparse-directory entries are in the correct
+   location.
+
+5. The loop ignores entries with the `SKIP_WORKTREE` bit set, or is
+   otherwise already aware of sparse directory entries.
+
+6. The sparse-index is disabled at this point when using the split-index
+   feature, so no effort is made to protect the split-index API.
+
+Even after inserting these guards, we will keep expanding sparse-indexes
+for most Git commands using the `command_requires_full_index` repository
+setting. This setting will be on by default and disabled one builtin at a
+time until we have sufficient confidence that all of the index operations
+are properly guarded.
+
+To complete this phase, the commands `git status` and `git add` will be
+integrated with the sparse-index so that they operate with O(Populated)
+performance. They will be carefully tested for operations within and
+outside the sparse-checkout definition.
+
+Phase II: Careful integrations
+------------------------------
+
+This phase focuses on ensuring that all index extensions and APIs work
+well with a sparse-index. This requires significant increases to our test
+coverage, especially for operations that interact with the working
+directory outside of the sparse-checkout definition. Some of these
+behaviors may not be the desirable ones, such as some tests already
+marked for failure in `t1092-sparse-checkout-compatibility.sh`.
+
+The index extensions that may require special integrations are:
+
+* FS Monitor
+* Untracked cache
+
+While integrating with these features, we should look for patterns that
+might lead to better APIs for interacting with the index. Coalescing
+common usage patterns into an API call can reduce the number of places
+where sparse-directories need to be handled carefully.
+
+Phase III: Important command speedups
+-------------------------------------
+
+At this point, the patterns for testing and implementing sparse-directory
+logic should be relatively stable. This phase focuses on updating some of
+the most common builtins that use the index to operate as O(Populated).
+Here is a potential list of commands that could be valuable to integrate
+at this point:
+
+* `git commit`
+* `git checkout`
+* `git merge`
+* `git rebase`
+
+Hopefully, commands such as `git merge` and `git rebase` can benefit
+instead from merge algorithms that do not use the index as a data
+structure, such as the merge-ORT strategy. As these topics mature, we
+may enable the ORT strategy by default for repositories using the
+sparse-index feature.
+
+Along with `git status` and `git add`, these commands cover the majority
+of users' interactions with the working directory. In addition, we can
+integrate with these commands:
+
+* `git grep`
+* `git rm`
+
+These have been proposed as some whose behavior could change when in a
+repo with a sparse-checkout definition. It would be good to include this
+behavior automatically when using a sparse-index. Some clarity is needed
+to make the behavior switch clear to the user.
+
+This phase is the first where parallel work might be possible without too
+much conflicts between topics.
+
+Phase IV: The long tail
+-----------------------
+
+This last phase is less a "phase" and more "the new normal" after all of
+the previous work.
+
+To start, the `command_requires_full_index` option could be removed in
+favor of expanding only when hitting an API guard.
+
+There are many Git commands that could use special attention to operate as
+O(Populated), while some might be so rare that it is acceptable to leave
+them with additional overhead when a sparse-index is present.
+
+Here are some commands that might be useful to update:
+
+* `git sparse-checkout set`
+* `git am`
+* `git clean`
+* `git stash`
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index fd480b8..9624059 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -1,5 +1,8 @@
 = Git User Manual
 
+[preface]
+== Introduction
+
 Git is a fast distributed revision control system.
 
 This manual is designed to be readable by someone with basic UNIX
@@ -2789,7 +2792,7 @@
 
 In some cases it is possible that the new head will *not* actually be
 a descendant of the old head.  For example, the developer may have
-realized she made a serious mistake, and decided to backtrack,
+realized a serious mistake was made and decided to backtrack,
 resulting in a situation like:
 
 ................................................
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 0327733..9c125f2 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.30.GIT
+DEF_VER=v2.32.0
 
 LF='
 '
diff --git a/INSTALL b/INSTALL
index 8474ad0..66389ce 100644
--- a/INSTALL
+++ b/INSTALL
@@ -197,7 +197,9 @@
    Building and installing the pdf file additionally requires
    dblatex.  Version >= 0.2.7 is known to work.
 
-   All formats require at least asciidoc 8.4.1.
+   All formats require at least asciidoc 8.4.1. Alternatively, you can
+   use Asciidoctor (requires Ruby) by passing USE_ASCIIDOCTOR=YesPlease
+   to make. You need at least Asciidoctor version 1.5.
 
    There are also "make quick-install-doc", "make quick-install-man"
    and "make quick-install-html" which install preformatted man pages
diff --git a/Makefile b/Makefile
index b9c9673..c6f6246 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,9 @@
 # when attempting to read from an fopen'ed directory (or even to fopen
 # it at all).
 #
+# Define OPEN_RETURNS_EINTR if your open() system call may return EINTR
+# when a signal is received (as opposed to restarting).
+#
 # Define NO_OPENSSL environment variable if you do not have OpenSSL.
 #
 # Define USE_LIBPCRE if you have and want to use libpcre. Various
@@ -395,6 +398,10 @@
 # with a different indexfile format version.  If it isn't set the index
 # file format used is index-v[23].
 #
+# Define GIT_TEST_UTF8_LOCALE to preferred utf-8 locale for testing.
+# If it isn't set, fallback to $LC_ALL, $LANG or use the first utf-8
+# locale returned by "locale -a".
+#
 # Define HAVE_CLOCK_GETTIME if your platform has clock_gettime.
 #
 # Define HAVE_CLOCK_MONOTONIC if your platform has CLOCK_MONOTONIC.
@@ -575,7 +582,9 @@
 EXTRA_CPPFLAGS =
 FUZZ_OBJS =
 FUZZ_PROGRAMS =
+GIT_OBJS =
 LIB_OBJS =
+OBJECTS =
 PROGRAM_OBJS =
 PROGRAMS =
 EXCLUDED_PROGRAMS =
@@ -584,6 +593,7 @@
 SCRIPT_SH =
 SCRIPT_LIB =
 TEST_BUILTINS_OBJS =
+TEST_OBJS =
 TEST_PROGRAMS_NEED_X =
 THIRD_PARTY_SOURCES =
 
@@ -659,6 +669,8 @@
 FUZZ_OBJS += fuzz-commit-graph.o
 FUZZ_OBJS += fuzz-pack-headers.o
 FUZZ_OBJS += fuzz-pack-idx.o
+.PHONY: fuzz-objs
+fuzz-objs: $(FUZZ_OBJS)
 
 # Always build fuzz objects even if not testing, to prevent bit-rot.
 all:: $(FUZZ_OBJS)
@@ -676,6 +688,8 @@
 PROGRAM_OBJS += imap-send.o
 PROGRAM_OBJS += sh-i18n--envsubst.o
 PROGRAM_OBJS += shell.o
+.PHONY: program-objs
+program-objs: $(PROGRAM_OBJS)
 
 # Binary suffix, set to .exe for Windows builds
 X =
@@ -683,6 +697,7 @@
 PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
 
 TEST_BUILTINS_OBJS += test-advise.o
+TEST_BUILTINS_OBJS += test-bitmap.o
 TEST_BUILTINS_OBJS += test-bloom.o
 TEST_BUILTINS_OBJS += test-chmtime.o
 TEST_BUILTINS_OBJS += test-config.o
@@ -711,9 +726,11 @@
 TEST_BUILTINS_OBJS += test-mktemp.o
 TEST_BUILTINS_OBJS += test-oid-array.o
 TEST_BUILTINS_OBJS += test-oidmap.o
+TEST_BUILTINS_OBJS += test-oidtree.o
 TEST_BUILTINS_OBJS += test-online-cpus.o
 TEST_BUILTINS_OBJS += test-parse-options.o
 TEST_BUILTINS_OBJS += test-parse-pathspec-file.o
+TEST_BUILTINS_OBJS += test-partial-clone.o
 TEST_BUILTINS_OBJS += test-path-utils.o
 TEST_BUILTINS_OBJS += test-pcre2-config.o
 TEST_BUILTINS_OBJS += test-pkt-line.o
@@ -734,6 +751,7 @@
 TEST_BUILTINS_OBJS += test-sha1.o
 TEST_BUILTINS_OBJS += test-sha256.o
 TEST_BUILTINS_OBJS += test-sigchain.o
+TEST_BUILTINS_OBJS += test-simple-ipc.o
 TEST_BUILTINS_OBJS += test-strcmp-offset.o
 TEST_BUILTINS_OBJS += test-string-list.o
 TEST_BUILTINS_OBJS += test-submodule-config.o
@@ -741,6 +759,7 @@
 TEST_BUILTINS_OBJS += test-subprocess.o
 TEST_BUILTINS_OBJS += test-trace2.o
 TEST_BUILTINS_OBJS += test-urlmatch-normalization.o
+TEST_BUILTINS_OBJS += test-userdiff.o
 TEST_BUILTINS_OBJS += test-wildmatch.o
 TEST_BUILTINS_OBJS += test-windows-named-pipe.o
 TEST_BUILTINS_OBJS += test-write-cache.o
@@ -832,6 +851,7 @@
 LIB_OBJS += bulk-checkin.o
 LIB_OBJS += bundle.o
 LIB_OBJS += cache-tree.o
+LIB_OBJS += cbtree.o
 LIB_OBJS += chdir-notify.o
 LIB_OBJS += checkout.o
 LIB_OBJS += chunk-format.o
@@ -864,6 +884,7 @@
 LIB_OBJS += diffcore-order.o
 LIB_OBJS += diffcore-pickaxe.o
 LIB_OBJS += diffcore-rename.o
+LIB_OBJS += diffcore-rotate.o
 LIB_OBJS += dir-iterator.o
 LIB_OBJS += dir.o
 LIB_OBJS += editor.o
@@ -926,6 +947,7 @@
 LIB_OBJS += oid-array.o
 LIB_OBJS += oidmap.o
 LIB_OBJS += oidset.o
+LIB_OBJS += oidtree.o
 LIB_OBJS += pack-bitmap-write.o
 LIB_OBJS += pack-bitmap.o
 LIB_OBJS += pack-check.o
@@ -934,6 +956,7 @@
 LIB_OBJS += pack-write.o
 LIB_OBJS += packfile.o
 LIB_OBJS += pager.o
+LIB_OBJS += parallel-checkout.o
 LIB_OBJS += parse-options-cb.o
 LIB_OBJS += parse-options.o
 LIB_OBJS += patch-delta.o
@@ -948,6 +971,7 @@
 LIB_OBJS += promisor-remote.o
 LIB_OBJS += prompt.o
 LIB_OBJS += protocol.o
+LIB_OBJS += protocol-caps.o
 LIB_OBJS += prune-packed.o
 LIB_OBJS += quote.o
 LIB_OBJS += range-diff.o
@@ -981,6 +1005,7 @@
 LIB_OBJS += shallow.o
 LIB_OBJS += sideband.o
 LIB_OBJS += sigchain.o
+LIB_OBJS += sparse-index.o
 LIB_OBJS += split-index.o
 LIB_OBJS += stable-qsort.o
 LIB_OBJS += strbuf.o
@@ -1049,6 +1074,7 @@
 BUILTIN_OBJS += builtin/check-ignore.o
 BUILTIN_OBJS += builtin/check-mailmap.o
 BUILTIN_OBJS += builtin/check-ref-format.o
+BUILTIN_OBJS += builtin/checkout--worker.o
 BUILTIN_OBJS += builtin/checkout-index.o
 BUILTIN_OBJS += builtin/checkout.o
 BUILTIN_OBJS += builtin/clean.o
@@ -1538,6 +1564,10 @@
 	COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES
 	COMPAT_OBJS += compat/fopen.o
 endif
+ifdef OPEN_RETURNS_EINTR
+	COMPAT_CFLAGS += -DOPEN_RETURNS_EINTR
+	COMPAT_OBJS += compat/open.o
+endif
 ifdef NO_SYMLINK_HEAD
 	BASIC_CFLAGS += -DNO_SYMLINK_HEAD
 endif
@@ -1664,6 +1694,32 @@
 	BASIC_CFLAGS += -DNO_UNIX_SOCKETS
 else
 	LIB_OBJS += unix-socket.o
+	LIB_OBJS += unix-stream-server.o
+endif
+
+# Simple IPC requires threads and platform-specific IPC support.
+# Only platforms that have both should include these source files
+# in the build.
+#
+# On Windows-based systems, Simple IPC requires threads and Windows
+# Named Pipes.  These are always available, so Simple IPC support
+# is optional.
+#
+# On Unix-based systems, Simple IPC requires pthreads and Unix
+# domain sockets.  So support is only enabled when both are present.
+#
+ifdef USE_WIN32_IPC
+	BASIC_CFLAGS += -DSUPPORTS_SIMPLE_IPC
+	LIB_OBJS += compat/simple-ipc/ipc-shared.o
+	LIB_OBJS += compat/simple-ipc/ipc-win32.o
+else
+ifndef NO_PTHREADS
+ifndef NO_UNIX_SOCKETS
+	BASIC_CFLAGS += -DSUPPORTS_SIMPLE_IPC
+	LIB_OBJS += compat/simple-ipc/ipc-shared.o
+	LIB_OBJS += compat/simple-ipc/ipc-unix-socket.o
+endif
+endif
 endif
 
 ifdef NO_ICONV
@@ -1957,6 +2013,7 @@
 ETC_GITATTRIBUTES_SQ = $(subst ','\'',$(ETC_GITATTRIBUTES))
 
 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
+NO_GETTEXT_SQ = $(subst ','\'',$(NO_GETTEXT))
 bindir_SQ = $(subst ','\'',$(bindir))
 bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
 mandir_SQ = $(subst ','\'',$(mandir))
@@ -2111,6 +2168,16 @@
 strip: $(PROGRAMS) git$X
 	$(STRIP) $(STRIP_OPTS) $^
 
+### Flags affecting all rules
+
+# A GNU make extension since gmake 3.72 (released in late 1994) to
+# remove the target of rules if commands in those rules fail. The
+# default is to only do that if make itself receives a signal. Affects
+# all targets, see:
+#
+#    info make --index-search=.DELETE_ON_ERROR
+.DELETE_ON_ERROR:
+
 ### Target-specific flags and dependencies
 
 # The generic compilation pattern rule and automatically
@@ -2178,13 +2245,13 @@
 
 config-list.h: generate-configlist.sh
 
-config-list.h:
+config-list.h: Documentation/*config.txt Documentation/config/*.txt
 	$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh \
 		>$@+ && mv $@+ $@
 
 command-list.h: generate-cmdlist.sh command-list.txt
 
-command-list.h: $(wildcard Documentation/git*.txt) Documentation/*config.txt Documentation/config/*.txt
+command-list.h: $(wildcard Documentation/git*.txt)
 	$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
 		$(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
 		command-list.txt >$@+ && mv $@+ $@
@@ -2194,7 +2261,6 @@
 	$(gitwebdir_SQ):$(PERL_PATH_SQ):$(SANE_TEXT_GREP):$(PAGER_ENV):\
 	$(perllibdir_SQ)
 define cmd_munge_script
-$(RM) $@ $@+ && \
 sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
     -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
     -e 's|@@DIFF@@|$(DIFF_SQ)|' \
@@ -2241,10 +2307,13 @@
 
 ifndef NO_PERL
 PERL_HEADER_TEMPLATE = perl/header_templates/fixed_prefix.template.pl
-PERL_DEFINES = $(PERL_PATH_SQ):$(PERLLIB_EXTRA_SQ):$(perllibdir_SQ)
-
-PERL_DEFINES := $(PERL_PATH_SQ) $(PERLLIB_EXTRA_SQ) $(perllibdir_SQ)
+PERL_DEFINES =
+PERL_DEFINES += $(PERL_PATH_SQ)
+PERL_DEFINES += $(PERLLIB_EXTRA_SQ)
+PERL_DEFINES += $(perllibdir_SQ)
 PERL_DEFINES += $(RUNTIME_PREFIX)
+PERL_DEFINES += $(NO_PERL_CPAN_FALLBACKS)
+PERL_DEFINES += $(NO_GETTEXT)
 
 # Support Perl runtime prefix. In this mode, a different header is installed
 # into Perl scripts.
@@ -2261,7 +2330,7 @@
 PERL_DEFINES += $(gitexecdir) $(perllibdir) $(localedir)
 
 $(SCRIPT_PERL_GEN): % : %.perl GIT-PERL-DEFINES GIT-PERL-HEADER GIT-VERSION-FILE
-	$(QUIET_GEN)$(RM) $@ $@+ && \
+	$(QUIET_GEN) \
 	sed -e '1{' \
 	    -e '	s|#!.*perl|#!$(PERL_PATH_SQ)|' \
 	    -e '	r GIT-PERL-HEADER' \
@@ -2281,7 +2350,7 @@
 	    fi
 
 GIT-PERL-HEADER: $(PERL_HEADER_TEMPLATE) GIT-PERL-DEFINES Makefile
-	$(QUIET_GEN)$(RM) $@ && \
+	$(QUIET_GEN) \
 	INSTLIBDIR='$(perllibdir_SQ)' && \
 	INSTLIBDIR_EXTRA='$(PERLLIB_EXTRA_SQ)' && \
 	INSTLIBDIR="$$INSTLIBDIR$${INSTLIBDIR_EXTRA:+:$$INSTLIBDIR_EXTRA}" && \
@@ -2307,7 +2376,7 @@
 	mv $@+ $@
 else # NO_PERL
 $(SCRIPT_PERL_GEN) git-instaweb: % : unimplemented.sh
-	$(QUIET_GEN)$(RM) $@ $@+ && \
+	$(QUIET_GEN) \
 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
 	    -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
 	    unimplemented.sh >$@+ && \
@@ -2321,14 +2390,14 @@
 ifndef NO_PYTHON
 $(SCRIPT_PYTHON_GEN): GIT-CFLAGS GIT-PREFIX GIT-PYTHON-VARS
 $(SCRIPT_PYTHON_GEN): % : %.py
-	$(QUIET_GEN)$(RM) $@ $@+ && \
+	$(QUIET_GEN) \
 	sed -e '1s|#!.*python|#!$(PYTHON_PATH_SQ)|' \
 	    $< >$@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
 else # NO_PYTHON
 $(SCRIPT_PYTHON_GEN): % : unimplemented.sh
-	$(QUIET_GEN)$(RM) $@ $@+ && \
+	$(QUIET_GEN) \
 	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
 	    -e 's|@@REASON@@|NO_PYTHON=$(NO_PYTHON)|g' \
 	    unimplemented.sh >$@+ && \
@@ -2336,8 +2405,7 @@
 	mv $@+ $@
 endif # NO_PYTHON
 
-CONFIGURE_RECIPE = $(RM) configure configure.ac+ && \
-		   sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
+CONFIGURE_RECIPE = sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
 			configure.ac >configure.ac+ && \
 		   autoconf -o configure configure.ac+ && \
 		   $(RM) configure.ac+
@@ -2370,16 +2438,30 @@
 XDIFF_OBJS += xdiff/xpatience.o
 XDIFF_OBJS += xdiff/xprepare.o
 XDIFF_OBJS += xdiff/xutils.o
+.PHONY: xdiff-objs
+xdiff-objs: $(XDIFF_OBJS)
 
 TEST_OBJS := $(patsubst %$X,%.o,$(TEST_PROGRAMS)) $(patsubst %,t/helper/%,$(TEST_BUILTINS_OBJS))
-OBJECTS := $(LIB_OBJS) $(BUILTIN_OBJS) $(PROGRAM_OBJS) $(TEST_OBJS) \
-	$(XDIFF_OBJS) \
-	$(FUZZ_OBJS) \
-	common-main.o \
-	git.o
+.PHONY: test-objs
+test-objs: $(TEST_OBJS)
+
+GIT_OBJS += $(LIB_OBJS)
+GIT_OBJS += $(BUILTIN_OBJS)
+GIT_OBJS += common-main.o
+GIT_OBJS += git.o
+.PHONY: git-objs
+git-objs: $(GIT_OBJS)
+
+OBJECTS += $(GIT_OBJS)
+OBJECTS += $(PROGRAM_OBJS)
+OBJECTS += $(TEST_OBJS)
+OBJECTS += $(XDIFF_OBJS)
+OBJECTS += $(FUZZ_OBJS)
 ifndef NO_CURL
 	OBJECTS += http.o http-walker.o remote-curl.o
 endif
+.PHONY: objects
+objects: $(OBJECTS)
 
 dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
 dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))
@@ -2448,7 +2530,6 @@
 ifeq ($(GENERATE_COMPILATION_DATABASE),yes)
 all:: compile_commands.json
 compile_commands.json:
-	@$(RM) $@
 	$(QUIET_GEN)sed -e '1s/^/[/' -e '$$s/,$$/]/' $(compdb_dir)/*.o.json > $@+
 	@if test -s $@+; then mv $@+ $@; else $(RM) $@+; fi
 endif
@@ -2521,10 +2602,10 @@
 		$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
 
 $(LIB_FILE): $(LIB_OBJS)
-	$(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
+	$(QUIET_AR)$(AR) $(ARFLAGS) $@ $^
 
 $(XDIFF_LIB): $(XDIFF_OBJS)
-	$(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
+	$(QUIET_AR)$(AR) $(ARFLAGS) $@ $^
 
 export DEFAULT_EDITOR DEFAULT_PAGER
 
@@ -2609,10 +2690,13 @@
 .PHONY: pot
 pot: po/git.pot
 
+ifdef NO_GETTEXT
+POFILES :=
+MOFILES :=
+else
 POFILES := $(wildcard po/*.po)
 MOFILES := $(patsubst po/%.po,po/build/locale/%/LC_MESSAGES/git.mo,$(POFILES))
 
-ifndef NO_GETTEXT
 all:: $(MOFILES)
 endif
 
@@ -2632,9 +2716,10 @@
 NO_PERL_CPAN_FALLBACKS_SQ = $(subst ','\'',$(NO_PERL_CPAN_FALLBACKS))
 endif
 
-perl/build/lib/%.pm: perl/%.pm
+perl/build/lib/%.pm: perl/%.pm GIT-PERL-DEFINES
 	$(QUIET_GEN)mkdir -p $(dir $@) && \
 	sed -e 's|@@LOCALEDIR@@|$(perl_localedir_SQ)|g' \
+	    -e 's|@@NO_GETTEXT@@|$(NO_GETTEXT_SQ)|g' \
 	    -e 's|@@NO_PERL_CPAN_FALLBACKS@@|$(NO_PERL_CPAN_FALLBACKS_SQ)|g' \
 	< $< > $@
 
@@ -2661,12 +2746,14 @@
 	)
 
 $(ETAGS_TARGET): FORCE
-	$(RM) $(ETAGS_TARGET)
-	$(FIND_SOURCE_FILES) | xargs etags -a -o $(ETAGS_TARGET)
+	$(QUIET_GEN)$(RM) "$(ETAGS_TARGET)+" && \
+	$(FIND_SOURCE_FILES) | xargs etags -a -o "$(ETAGS_TARGET)+" && \
+	mv "$(ETAGS_TARGET)+" "$(ETAGS_TARGET)"
 
 tags: FORCE
-	$(RM) tags
-	$(FIND_SOURCE_FILES) | xargs ctags -a
+	$(QUIET_GEN)$(RM) tags+ && \
+	$(FIND_SOURCE_FILES) | xargs ctags -a -o tags+ && \
+	mv tags+ tags
 
 cscope:
 	$(RM) cscope*
@@ -2733,6 +2820,9 @@
 ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
 	@echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@+
 endif
+ifdef GIT_TEST_UTF8_LOCALE
+	@echo GIT_TEST_UTF8_LOCALE=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_UTF8_LOCALE)))'\' >>$@+
+endif
 	@echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@+
 ifdef GIT_PERF_REPEAT_COUNT
 	@echo GIT_PERF_REPEAT_COUNT=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPEAT_COUNT)))'\' >>$@+
@@ -3291,11 +3381,11 @@
 # are not necessarily appropriate for general builds, and that vary greatly
 # depending on the compiler version used.
 #
-# An example command to build against libFuzzer from LLVM 4.0.0:
+# An example command to build against libFuzzer from LLVM 11.0.0:
 #
 # make CC=clang CXX=clang++ \
-#      CFLAGS="-fsanitize-coverage=trace-pc-guard -fsanitize=address" \
-#      LIB_FUZZING_ENGINE=/usr/lib/llvm-4.0/lib/libFuzzer.a \
+#      CFLAGS="-fsanitize=fuzzer-no-link,address" \
+#      LIB_FUZZING_ENGINE="-fsanitize=fuzzer" \
 #      fuzz-all
 #
 FUZZ_CXXFLAGS ?= $(CFLAGS)
diff --git a/RelNotes b/RelNotes
index 3324fc0..f071367 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.31.0.txt
\ No newline at end of file
+Documentation/RelNotes/2.33.0.txt
\ No newline at end of file
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..c720c2a
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,51 @@
+# Security Policy
+
+## Reporting a vulnerability
+
+Please send a detailed mail to git-security@googlegroups.com to
+report vulnerabilities in Git.
+
+Even when unsure whether the bug in question is an exploitable
+vulnerability, it is recommended to send the report to
+git-security@googlegroups.com (and obviously not to discuss the
+issue anywhere else).
+
+Vulnerabilities are expected to be discussed _only_ on that
+list, and not in public, until the official announcement on the
+Git mailing list on the release date.
+
+Examples for details to include:
+
+- Ideally a short description (or a script) to demonstrate an
+  exploit.
+- The affected platforms and scenarios (the vulnerability might
+  only affect setups with case-sensitive file systems, for
+  example).
+- The name and affiliation of the security researchers who are
+  involved in the discovery, if any.
+- Whether the vulnerability has already been disclosed.
+- How long an embargo would be required to be safe.
+
+## Supported Versions
+
+There are no official "Long Term Support" versions in Git.
+Instead, the maintenance track (i.e. the versions based on the
+most recently published feature release, also known as ".0"
+version) sees occasional updates with bug fixes.
+
+Fixes to vulnerabilities are made for the maintenance track for
+the latest feature release and merged up to the in-development
+branches. The Git project makes no formal guarantee for any
+older maintenance tracks to receive updates. In practice,
+though, critical vulnerability fixes are applied not only to the
+most recent track, but to at least a couple more maintenance
+tracks.
+
+This is typically done by making the fix on the oldest and still
+relevant maintenance track, and merging it upwards to newer and
+newer maintenance tracks.
+
+For example, v2.24.1 was released to address a couple of
+[CVEs](https://cve.mitre.org/), and at the same time v2.14.6,
+v2.15.4, v2.16.6, v2.17.3, v2.18.2, v2.19.3, v2.20.2, v2.21.1,
+v2.22.2 and v2.23.1 were released.
diff --git a/add-interactive.c b/add-interactive.c
index 9b8cdb4..36ebdbd 100644
--- a/add-interactive.c
+++ b/add-interactive.c
@@ -413,7 +413,7 @@
 
 static void add_file_item(struct string_list *files, const char *name)
 {
-	struct file_item *item = xcalloc(sizeof(*item), 1);
+	struct file_item *item = xcalloc(1, sizeof(*item));
 
 	string_list_append(files, name)->util = item;
 }
@@ -476,7 +476,7 @@
 
 			add_file_item(s->files, name);
 
-			entry = xcalloc(sizeof(*entry), 1);
+			CALLOC_ARRAY(entry, 1);
 			hashmap_entry_init(&entry->ent, hash);
 			entry->name = s->files->items[s->files->nr - 1].string;
 			entry->item = s->files->items[s->files->nr - 1].util;
@@ -1120,7 +1120,7 @@
 	int res = 0;
 
 	for (i = 0; i < ARRAY_SIZE(command_list); i++) {
-		struct command_item *util = xcalloc(sizeof(*util), 1);
+		struct command_item *util = xcalloc(1, sizeof(*util));
 		util->command = command_list[i].command;
 		string_list_append(&commands.items, command_list[i].string)
 			->util = util;
diff --git a/add-patch.c b/add-patch.c
index 2fad92c..8c41cdf 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -280,6 +280,7 @@
 	clear_add_i_state(&s->s);
 }
 
+__attribute__((format (printf, 2, 3)))
 static void err(struct add_p_state *s, const char *fmt, ...)
 {
 	va_list args;
diff --git a/advice.c b/advice.c
index 1647423..0b9c89c 100644
--- a/advice.c
+++ b/advice.c
@@ -2,6 +2,7 @@
 #include "config.h"
 #include "color.h"
 #include "help.h"
+#include "string-list.h"
 
 int advice_fetch_show_forced_updates = 1;
 int advice_push_update_rejected = 1;
@@ -136,6 +137,7 @@
 	[ADVICE_STATUS_HINTS]				= { "statusHints", 1 },
 	[ADVICE_STATUS_U_OPTION]			= { "statusUoption", 1 },
 	[ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie", 1 },
+	[ADVICE_UPDATE_SPARSE_PATH]			= { "updateSparsePath", 1 },
 	[ADVICE_WAITING_FOR_EDITOR]			= { "waitingForEditor", 1 },
 };
 
@@ -284,6 +286,24 @@
 	die(_("Exiting because of unfinished merge."));
 }
 
+void advise_on_updating_sparse_paths(struct string_list *pathspec_list)
+{
+	struct string_list_item *item;
+
+	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"));
+	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."));
+}
+
 void detach_advice(const char *new_name)
 {
 	const char *fmt =
diff --git a/advice.h b/advice.h
index bc24329..9f8ffc7 100644
--- a/advice.h
+++ b/advice.h
@@ -3,6 +3,8 @@
 
 #include "git-compat-util.h"
 
+struct string_list;
+
 extern int advice_fetch_show_forced_updates;
 extern int advice_push_update_rejected;
 extern int advice_push_non_ff_current;
@@ -71,6 +73,7 @@
 	ADVICE_STATUS_HINTS,
 	ADVICE_STATUS_U_OPTION,
 	ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
+	ADVICE_UPDATE_SPARSE_PATH,
 	ADVICE_WAITING_FOR_EDITOR,
 };
 
@@ -87,11 +90,13 @@
 /**
  * Checks the visibility of the advice before printing.
  */
+__attribute__((format (printf, 2, 3)))
 void advise_if_enabled(enum advice_type type, const char *advice, ...);
 
 int error_resolve_conflict(const char *me);
 void NORETURN die_resolve_conflict(const char *me);
 void NORETURN die_conclude_merge(void);
+void advise_on_updating_sparse_paths(struct string_list *pathspec_list);
 void detach_advice(const char *new_name);
 
 #endif /* ADVICE_H */
diff --git a/apply.c b/apply.c
index 668b16e..44bc31d 100644
--- a/apply.c
+++ b/apply.c
@@ -21,6 +21,7 @@
 #include "quote.h"
 #include "rerere.h"
 #include "apply.h"
+#include "entry.h"
 
 struct gitdiff_data {
 	struct strbuf *root;
@@ -100,9 +101,9 @@
 	state->ws_error_action = warn_on_ws_error;
 	state->ws_ignore_action = ignore_ws_none;
 	state->linenr = 1;
-	string_list_init(&state->fn_table, 0);
-	string_list_init(&state->limit_by_name, 0);
-	string_list_init(&state->symlink_changes, 0);
+	string_list_init_nodup(&state->fn_table);
+	string_list_init_nodup(&state->limit_by_name);
+	string_list_init_nodup(&state->symlink_changes);
 	strbuf_init(&state->root, 0);
 
 	git_apply_config();
@@ -133,8 +134,6 @@
 
 	if (state->apply_with_reject && state->threeway)
 		return error(_("--reject and --3way cannot be used together."));
-	if (state->cached && state->threeway)
-		return error(_("--cached and --3way cannot be used together."));
 	if (state->threeway) {
 		if (is_not_gitdir)
 			return error(_("--3way outside a repository"));
@@ -1781,7 +1780,7 @@
 		struct fragment *fragment;
 		int len;
 
-		fragment = xcalloc(1, sizeof(*fragment));
+		CALLOC_ARRAY(fragment, 1);
 		fragment->linenr = state->linenr;
 		len = parse_fragment(state, line, size, patch, fragment);
 		if (len <= 0) {
@@ -1959,7 +1958,7 @@
 		size -= llen;
 	}
 
-	frag = xcalloc(1, sizeof(*frag));
+	CALLOC_ARRAY(frag, 1);
 	frag->patch = inflate_it(data, hunk_size, origlen);
 	frag->free_patch = 1;
 	if (!frag->patch)
@@ -3569,10 +3568,10 @@
 		write_object_file("", 0, blob_type, &pre_oid);
 	else if (get_oid(patch->old_oid_prefix, &pre_oid) ||
 		 read_blob_object(&buf, &pre_oid, patch->old_mode))
-		return error(_("repository lacks the necessary blob to fall back on 3-way merge."));
+		return error(_("repository lacks the necessary blob to perform 3-way merge."));
 
-	if (state->apply_verbosity > verbosity_silent)
-		fprintf(stderr, _("Falling back to three-way merge...\n"));
+	if (state->apply_verbosity > verbosity_silent && patch->direct_to_threeway)
+		fprintf(stderr, _("Performing three-way merge...\n"));
 
 	img = strbuf_detach(&buf, &len);
 	prepare_image(&tmp_image, img, len, 1);
@@ -3604,7 +3603,7 @@
 	if (status < 0) {
 		if (state->apply_verbosity > verbosity_silent)
 			fprintf(stderr,
-				_("Failed to fall back on three-way merge...\n"));
+				_("Failed to perform three-way merge...\n"));
 		return status;
 	}
 
@@ -3637,10 +3636,13 @@
 	if (load_preimage(state, &image, patch, st, ce) < 0)
 		return -1;
 
-	if (patch->direct_to_threeway ||
-	    apply_fragments(state, &image, patch) < 0) {
+	if (!state->threeway || try_threeway(state, &image, patch, st, ce) < 0) {
+		if (state->apply_verbosity > verbosity_silent &&
+		    state->threeway && !patch->direct_to_threeway)
+			fprintf(stderr, _("Falling back to direct application...\n"));
+
 		/* Note: with --reject, apply_fragments() returns 0 */
-		if (!state->threeway || try_threeway(state, &image, patch, st, ce) < 0)
+		if (patch->direct_to_threeway || apply_fragments(state, &image, patch) < 0)
 			return -1;
 	}
 	patch->result = image.buf;
@@ -4646,7 +4648,12 @@
 		}
 		string_list_clear(&cpath, 0);
 
-		repo_rerere(state->repo, 0);
+		/*
+		 * rerere relies on the partially merged result being in the working
+		 * tree with conflict markers, but that isn't written with --cached.
+		 */
+		if (!state->cached)
+			repo_rerere(state->repo, 0);
 	}
 
 	return errs;
@@ -4681,7 +4688,7 @@
 		struct patch *patch;
 		int nr;
 
-		patch = xcalloc(1, sizeof(*patch));
+		CALLOC_ARRAY(patch, 1);
 		patch->inaccurate_eof = !!(options & APPLY_OPT_INACCURATE_EOF);
 		patch->recount =  !!(options & APPLY_OPT_RECOUNT);
 		nr = parse_chunk(state, buf.buf + offset, buf.len - offset, patch);
@@ -5017,7 +5024,7 @@
 		OPT_BOOL(0, "apply", force_apply,
 			N_("also apply the patch (use with --stat/--summary/--check)")),
 		OPT_BOOL('3', "3way", &state->threeway,
-			 N_( "attempt three-way merge if a patch does not apply")),
+			 N_( "attempt three-way merge, fall back on normal patch if that fails")),
 		OPT_FILENAME(0, "build-fake-ancestor", &state->fake_ancestor,
 			N_("build a temporary index based on embedded index information")),
 		/* Think twice before adding "--nul" synonym to this */
diff --git a/archive-tar.c b/archive-tar.c
index a971fdc..05d2455 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -371,7 +371,7 @@
 
 	ar = find_tar_filter(name, namelen);
 	if (!ar) {
-		ar = xcalloc(1, sizeof(*ar));
+		CALLOC_ARRAY(ar, 1);
 		ar->name = xmemdupz(name, namelen);
 		ar->write_archive = write_tar_filter_archive;
 		ar->flags = ARCHIVER_WANT_COMPRESSION_LEVELS |
diff --git a/archive.c b/archive.c
index 5919d9e..3c266d1 100644
--- a/archive.c
+++ b/archive.c
@@ -37,13 +37,10 @@
 
 static void format_subst(const struct commit *commit,
 			 const char *src, size_t len,
-			 struct strbuf *buf)
+			 struct strbuf *buf, struct pretty_print_context *ctx)
 {
 	char *to_free = NULL;
 	struct strbuf fmt = STRBUF_INIT;
-	struct pretty_print_context ctx = {0};
-	ctx.date_mode.type = DATE_NORMAL;
-	ctx.abbrev = DEFAULT_ABBREV;
 
 	if (src == buf->buf)
 		to_free = strbuf_detach(buf, NULL);
@@ -61,7 +58,7 @@
 		strbuf_add(&fmt, b + 8, c - b - 8);
 
 		strbuf_add(buf, src, b - src);
-		format_commit_message(commit, fmt.buf, buf, &ctx);
+		format_commit_message(commit, fmt.buf, buf, ctx);
 		len -= c + 1 - src;
 		src  = c + 1;
 	}
@@ -94,7 +91,7 @@
 		strbuf_attach(&buf, buffer, *sizep, *sizep + 1);
 		convert_to_working_tree(args->repo->index, path, buf.buf, buf.len, &buf, &meta);
 		if (commit)
-			format_subst(commit, buf.buf, buf.len, &buf);
+			format_subst(commit, buf.buf, buf.len, &buf, args->pretty_ctx);
 		buffer = strbuf_detach(&buf, &size);
 		*sizep = size;
 	}
@@ -107,7 +104,6 @@
 	struct object_id oid;
 	int baselen, len;
 	unsigned mode;
-	int stage;
 	char path[FLEX_ARRAY];
 };
 
@@ -138,7 +134,7 @@
 }
 
 static int write_archive_entry(const struct object_id *oid, const char *base,
-		int baselen, const char *filename, unsigned mode, int stage,
+		int baselen, const char *filename, unsigned mode,
 		void *context)
 {
 	static struct strbuf path = STRBUF_INIT;
@@ -197,7 +193,7 @@
 
 static void queue_directory(const unsigned char *sha1,
 		struct strbuf *base, const char *filename,
-		unsigned mode, int stage, struct archiver_context *c)
+		unsigned mode, struct archiver_context *c)
 {
 	struct directory *d;
 	size_t len = st_add4(base->len, 1, strlen(filename), 1);
@@ -205,10 +201,9 @@
 	d->up	   = c->bottom;
 	d->baselen = base->len;
 	d->mode	   = mode;
-	d->stage   = stage;
 	c->bottom  = d;
 	d->len = xsnprintf(d->path, len, "%.*s%s/", (int)base->len, base->buf, filename);
-	hashcpy(d->oid.hash, sha1);
+	oidread(&d->oid, sha1);
 }
 
 static int write_directory(struct archiver_context *c)
@@ -224,14 +219,14 @@
 		write_directory(c) ||
 		write_archive_entry(&d->oid, d->path, d->baselen,
 				    d->path + d->baselen, d->mode,
-				    d->stage, c) != READ_TREE_RECURSIVE;
+				    c) != READ_TREE_RECURSIVE;
 	free(d);
 	return ret ? -1 : 0;
 }
 
 static int queue_or_write_archive_entry(const struct object_id *oid,
 		struct strbuf *base, const char *filename,
-		unsigned mode, int stage, void *context)
+		unsigned mode, void *context)
 {
 	struct archiver_context *c = context;
 
@@ -256,14 +251,14 @@
 		if (check_attr_export_ignore(check))
 			return 0;
 		queue_directory(oid->hash, base, filename,
-				mode, stage, c);
+				mode, c);
 		return READ_TREE_RECURSIVE;
 	}
 
 	if (write_directory(c))
 		return -1;
 	return write_archive_entry(oid, base->buf, base->len, filename, mode,
-				   stage, context);
+				   context);
 }
 
 struct extra_file_info {
@@ -280,9 +275,11 @@
 	int err;
 	struct strbuf path_in_archive = STRBUF_INIT;
 	struct strbuf content = STRBUF_INIT;
-	struct object_id fake_oid = null_oid;
+	struct object_id fake_oid;
 	int i;
 
+	oidcpy(&fake_oid, null_oid());
+
 	if (args->baselen > 0 && args->base[args->baselen - 1] == '/') {
 		size_t len = args->baselen;
 
@@ -316,10 +313,10 @@
 		git_attr_set_direction(GIT_ATTR_INDEX);
 	}
 
-	err = read_tree_recursive(args->repo, args->tree, "",
-				  0, 0, &args->pathspec,
-				  queue_or_write_archive_entry,
-				  &context);
+	err = read_tree(args->repo, args->tree,
+			&args->pathspec,
+			queue_or_write_archive_entry,
+			&context);
 	if (err == READ_TREE_RECURSIVE)
 		err = 0;
 	while (context.bottom) {
@@ -378,7 +375,7 @@
 
 static int reject_entry(const struct object_id *oid, struct strbuf *base,
 			const char *filename, unsigned mode,
-			int stage, void *context)
+			void *context)
 {
 	int ret = -1;
 	struct path_exists_context *ctx = context;
@@ -405,9 +402,9 @@
 	ctx.args = args;
 	parse_pathspec(&ctx.pathspec, 0, 0, "", paths);
 	ctx.pathspec.recursive = 1;
-	ret = read_tree_recursive(args->repo, args->tree, "",
-				  0, 0, &ctx.pathspec,
-				  reject_entry, &ctx);
+	ret = read_tree(args->repo, args->tree,
+			&ctx.pathspec,
+			reject_entry, &ctx);
 	clear_pathspec(&ctx.pathspec);
 	return ret != 0;
 }
@@ -633,15 +630,22 @@
 		  const char *name_hint, int remote)
 {
 	const struct archiver *ar = NULL;
+	struct pretty_print_describe_status describe_status = {0};
+	struct pretty_print_context ctx = {0};
 	struct archiver_args args;
 	int rc;
 
 	git_config_get_bool("uploadarchive.allowunreachable", &remote_allow_unreachable);
 	git_config(git_default_config, NULL);
 
+	describe_status.max_invocations = 1;
+	ctx.date_mode.type = DATE_NORMAL;
+	ctx.abbrev = DEFAULT_ABBREV;
+	ctx.describe_status = &describe_status;
+	args.pretty_ctx = &ctx;
 	args.repo = repo;
 	args.prefix = prefix;
-	string_list_init(&args.extra_files, 1);
+	string_list_init_dup(&args.extra_files);
 	argc = parse_archive_args(argc, argv, &ar, &args, name_hint, remote);
 	if (!startup_info->have_repository) {
 		/*
diff --git a/archive.h b/archive.h
index 33551b7..49fab71 100644
--- a/archive.h
+++ b/archive.h
@@ -5,6 +5,7 @@
 #include "pathspec.h"
 
 struct repository;
+struct pretty_print_context;
 
 struct archiver_args {
 	struct repository *repo;
@@ -22,6 +23,7 @@
 	unsigned int convert : 1;
 	int compression_level;
 	struct string_list extra_files;
+	struct pretty_print_context *pretty_ctx;
 };
 
 /* main api */
diff --git a/attr.c b/attr.c
index 4ef85d6..d029e68 100644
--- a/attr.c
+++ b/attr.c
@@ -278,6 +278,10 @@
 
 static const char blank[] = " \t\r\n";
 
+/* Flags usable in read_attr() and parse_attr_line() family of functions. */
+#define READ_ATTR_MACRO_OK (1<<0)
+#define READ_ATTR_NOFOLLOW (1<<1)
+
 /*
  * Parse a whitespace-delimited attribute state (i.e., "attr",
  * "-attr", "!attr", or "attr=value") from the string starting at src.
@@ -331,7 +335,7 @@
 }
 
 static struct match_attr *parse_attr_line(const char *line, const char *src,
-					  int lineno, int macro_ok)
+					  int lineno, unsigned flags)
 {
 	int namelen;
 	int num_attr, i;
@@ -355,7 +359,7 @@
 
 	if (strlen(ATTRIBUTE_MACRO_PREFIX) < namelen &&
 	    starts_with(name, ATTRIBUTE_MACRO_PREFIX)) {
-		if (!macro_ok) {
+		if (!(flags & READ_ATTR_MACRO_OK)) {
 			fprintf_ln(stderr, _("%s not allowed: %s:%d"),
 				   name, src, lineno);
 			goto fail_return;
@@ -569,7 +573,7 @@
 	check = attr_check_alloc();
 	check->nr = cnt;
 	check->alloc = cnt;
-	check->items = xcalloc(cnt, sizeof(struct attr_check_item));
+	CALLOC_ARRAY(check->items, cnt);
 
 	check->items[0].attr = git_attr(one);
 	va_start(params, one);
@@ -653,11 +657,11 @@
 			     const char *line,
 			     const char *src,
 			     int lineno,
-			     int macro_ok)
+			     unsigned flags)
 {
 	struct match_attr *a;
 
-	a = parse_attr_line(line, src, lineno, macro_ok);
+	a = parse_attr_line(line, src, lineno, flags);
 	if (!a)
 		return;
 	ALLOC_GROW(res->attrs, res->num_matches + 1, res->alloc);
@@ -670,9 +674,10 @@
 	const char *line;
 	int lineno = 0;
 
-	res = xcalloc(1, sizeof(*res));
+	CALLOC_ARRAY(res, 1);
 	while ((line = *(list++)) != NULL)
-		handle_attr_line(res, line, "[builtin]", ++lineno, 1);
+		handle_attr_line(res, line, "[builtin]", ++lineno,
+				 READ_ATTR_MACRO_OK);
 	return res;
 }
 
@@ -680,7 +685,7 @@
  * Callers into the attribute system assume there is a single, system-wide
  * global state where attributes are read from and when the state is flipped by
  * calling git_attr_set_direction(), the stack frames that have been
- * constructed need to be discarded so so that subsequent calls into the
+ * constructed need to be discarded so that subsequent calls into the
  * attribute system will lazily read from the right place.  Since changing
  * direction causes a global paradigm shift, it should not ever be called while
  * another thread could potentially be calling into the attribute system.
@@ -698,29 +703,39 @@
 	direction = new_direction;
 }
 
-static struct attr_stack *read_attr_from_file(const char *path, int macro_ok)
+static struct attr_stack *read_attr_from_file(const char *path, unsigned flags)
 {
-	FILE *fp = fopen_or_warn(path, "r");
+	int fd;
+	FILE *fp;
 	struct attr_stack *res;
 	char buf[2048];
 	int lineno = 0;
 
-	if (!fp)
+	if (flags & READ_ATTR_NOFOLLOW)
+		fd = open_nofollow(path, O_RDONLY);
+	else
+		fd = open(path, O_RDONLY);
+
+	if (fd < 0) {
+		warn_on_fopen_errors(path);
 		return NULL;
-	res = xcalloc(1, sizeof(*res));
+	}
+	fp = xfdopen(fd, "r");
+
+	CALLOC_ARRAY(res, 1);
 	while (fgets(buf, sizeof(buf), fp)) {
 		char *bufp = buf;
 		if (!lineno)
 			skip_utf8_bom(&bufp, strlen(bufp));
-		handle_attr_line(res, bufp, path, ++lineno, macro_ok);
+		handle_attr_line(res, bufp, path, ++lineno, flags);
 	}
 	fclose(fp);
 	return res;
 }
 
-static struct attr_stack *read_attr_from_index(const struct index_state *istate,
+static struct attr_stack *read_attr_from_index(struct index_state *istate,
 					       const char *path,
-					       int macro_ok)
+					       unsigned flags)
 {
 	struct attr_stack *res;
 	char *buf, *sp;
@@ -733,7 +748,7 @@
 	if (!buf)
 		return NULL;
 
-	res = xcalloc(1, sizeof(*res));
+	CALLOC_ARRAY(res, 1);
 	for (sp = buf; *sp; ) {
 		char *ep;
 		int more;
@@ -741,27 +756,27 @@
 		ep = strchrnul(sp, '\n');
 		more = (*ep == '\n');
 		*ep = '\0';
-		handle_attr_line(res, sp, path, ++lineno, macro_ok);
+		handle_attr_line(res, sp, path, ++lineno, flags);
 		sp = ep + more;
 	}
 	free(buf);
 	return res;
 }
 
-static struct attr_stack *read_attr(const struct index_state *istate,
-				    const char *path, int macro_ok)
+static struct attr_stack *read_attr(struct index_state *istate,
+				    const char *path, unsigned flags)
 {
 	struct attr_stack *res = NULL;
 
 	if (direction == GIT_ATTR_INDEX) {
-		res = read_attr_from_index(istate, path, macro_ok);
+		res = read_attr_from_index(istate, path, flags);
 	} else if (!is_bare_repository()) {
 		if (direction == GIT_ATTR_CHECKOUT) {
-			res = read_attr_from_index(istate, path, macro_ok);
+			res = read_attr_from_index(istate, path, flags);
 			if (!res)
-				res = read_attr_from_file(path, macro_ok);
+				res = read_attr_from_file(path, flags);
 		} else if (direction == GIT_ATTR_CHECKIN) {
-			res = read_attr_from_file(path, macro_ok);
+			res = read_attr_from_file(path, flags);
 			if (!res)
 				/*
 				 * There is no checked out .gitattributes file
@@ -769,12 +784,12 @@
 				 * We allow operation in a sparsely checked out
 				 * work tree, so read from it.
 				 */
-				res = read_attr_from_index(istate, path, macro_ok);
+				res = read_attr_from_index(istate, path, flags);
 		}
 	}
 
 	if (!res)
-		res = xcalloc(1, sizeof(*res));
+		CALLOC_ARRAY(res, 1);
 	return res;
 }
 
@@ -840,10 +855,11 @@
 	}
 }
 
-static void bootstrap_attr_stack(const struct index_state *istate,
+static void bootstrap_attr_stack(struct index_state *istate,
 				 struct attr_stack **stack)
 {
 	struct attr_stack *e;
+	unsigned flags = READ_ATTR_MACRO_OK;
 
 	if (*stack)
 		return;
@@ -854,31 +870,31 @@
 
 	/* system-wide frame */
 	if (git_attr_system()) {
-		e = read_attr_from_file(git_etc_gitattributes(), 1);
+		e = read_attr_from_file(git_etc_gitattributes(), flags);
 		push_stack(stack, e, NULL, 0);
 	}
 
 	/* home directory */
 	if (get_home_gitattributes()) {
-		e = read_attr_from_file(get_home_gitattributes(), 1);
+		e = read_attr_from_file(get_home_gitattributes(), flags);
 		push_stack(stack, e, NULL, 0);
 	}
 
 	/* root directory */
-	e = read_attr(istate, GITATTRIBUTES_FILE, 1);
+	e = read_attr(istate, GITATTRIBUTES_FILE, flags | READ_ATTR_NOFOLLOW);
 	push_stack(stack, e, xstrdup(""), 0);
 
 	/* info frame */
 	if (startup_info->have_repository)
-		e = read_attr_from_file(git_path_info_attributes(), 1);
+		e = read_attr_from_file(git_path_info_attributes(), flags);
 	else
 		e = NULL;
 	if (!e)
-		e = xcalloc(1, sizeof(struct attr_stack));
+		CALLOC_ARRAY(e, 1);
 	push_stack(stack, e, NULL, 0);
 }
 
-static void prepare_attr_stack(const struct index_state *istate,
+static void prepare_attr_stack(struct index_state *istate,
 			       const char *path, int dirlen,
 			       struct attr_stack **stack)
 {
@@ -956,7 +972,7 @@
 		strbuf_add(&pathbuf, path + pathbuf.len, (len - pathbuf.len));
 		strbuf_addf(&pathbuf, "/%s", GITATTRIBUTES_FILE);
 
-		next = read_attr(istate, pathbuf.buf, 0);
+		next = read_attr(istate, pathbuf.buf, READ_ATTR_NOFOLLOW);
 
 		/* reset the pathbuf to not include "/.gitattributes" */
 		strbuf_setlen(&pathbuf, len);
@@ -1078,7 +1094,7 @@
  * If check->check_nr is non-zero, only attributes in check[] are collected.
  * Otherwise all attributes are collected.
  */
-static void collect_some_attrs(const struct index_state *istate,
+static void collect_some_attrs(struct index_state *istate,
 			       const char *path,
 			       struct attr_check *check)
 {
@@ -1107,7 +1123,7 @@
 	fill(path, pathlen, basename_offset, check->stack, check->all_attrs, rem);
 }
 
-void git_check_attr(const struct index_state *istate,
+void git_check_attr(struct index_state *istate,
 		    const char *path,
 		    struct attr_check *check)
 {
@@ -1124,7 +1140,7 @@
 	}
 }
 
-void git_all_attrs(const struct index_state *istate,
+void git_all_attrs(struct index_state *istate,
 		   const char *path, struct attr_check *check)
 {
 	int i;
diff --git a/attr.h b/attr.h
index 404548f..3732505 100644
--- a/attr.h
+++ b/attr.h
@@ -190,14 +190,14 @@
  */
 const char *git_attr_name(const struct git_attr *);
 
-void git_check_attr(const struct index_state *istate,
+void git_check_attr(struct index_state *istate,
 		    const char *path, struct attr_check *check);
 
 /*
  * Retrieve all attributes that apply to the specified path.
  * check holds the attributes and their values.
  */
-void git_all_attrs(const struct index_state *istate,
+void git_all_attrs(struct index_state *istate,
 		   const char *path, struct attr_check *check);
 
 enum git_attr_direction {
diff --git a/bisect.c b/bisect.c
index 75ea0eb..af2863d 100644
--- a/bisect.c
+++ b/bisect.c
@@ -423,7 +423,7 @@
 	show_list("bisection 2 sorted", 0, nr, list);
 
 	*all = nr;
-	weights = xcalloc(on_list, sizeof(*weights));
+	CALLOC_ARRAY(weights, on_list);
 
 	/* Do the real work of finding bisection commit. */
 	best = do_find_bisection(list, nr, weights, bisect_flags);
@@ -1064,7 +1064,7 @@
 
 	if (!all) {
 		fprintf(stderr, _("No testable commit found.\n"
-			"Maybe you started with bad path parameters?\n"));
+			"Maybe you started with bad path arguments?\n"));
 
 		return BISECT_NO_TESTABLE_COMMIT;
 	}
diff --git a/blame.c b/blame.c
index a5044fc..206c295 100644
--- a/blame.c
+++ b/blame.c
@@ -242,7 +242,7 @@
 		switch (st.st_mode & S_IFMT) {
 		case S_IFREG:
 			if (opt->flags.allow_textconv &&
-			    textconv_object(r, read_from, mode, &null_oid, 0, &buf_ptr, &buf_len))
+			    textconv_object(r, read_from, mode, null_oid(), 0, &buf_ptr, &buf_len))
 				strbuf_attach(&buf, buf_ptr, buf_len, buf_len + 1);
 			else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
 				die_errno("cannot open or read '%s'", read_from);
@@ -951,13 +951,13 @@
 	max_search_distance_b = ((2 * max_search_distance_a + 1) * length_b
 				 - 1) / length_a;
 
-	result = xcalloc(sizeof(int), length_b);
-	second_best_result = xcalloc(sizeof(int), length_b);
-	certainties = xcalloc(sizeof(int), length_b);
+	CALLOC_ARRAY(result, length_b);
+	CALLOC_ARRAY(second_best_result, length_b);
+	CALLOC_ARRAY(certainties, length_b);
 
 	/* See get_similarity() for details of similarities. */
 	similarity_count = length_b * (max_search_distance_a * 2 + 1);
-	similarities = xcalloc(sizeof(int), similarity_count);
+	CALLOC_ARRAY(similarities, similarity_count);
 
 	for (i = 0; i < length_b; ++i) {
 		result[i] = -1;
@@ -995,7 +995,7 @@
 		return;
 	o->num_lines = find_line_starts(&line_starts, o->file.ptr,
 					o->file.size);
-	o->fingerprints = xcalloc(sizeof(struct fingerprint), o->num_lines);
+	CALLOC_ARRAY(o->fingerprints, o->num_lines);
 	get_line_fingerprints(o->fingerprints, o->file.ptr, line_starts,
 			      0, o->num_lines);
 	free(line_starts);
@@ -1853,8 +1853,7 @@
 	diffp = NULL;
 
 	if (ignore_diffs && same - tlno > 0) {
-		line_blames = xcalloc(sizeof(struct blame_line_tracker),
-				      same - tlno);
+		CALLOC_ARRAY(line_blames, same - tlno);
 		guess_line_blames(parent, target, tlno, offset, same,
 				  parent_len, line_blames);
 	}
@@ -2216,7 +2215,7 @@
 	for (e = unblamed, num_ents = 0; e; e = e->next)
 		num_ents++;
 	if (num_ents) {
-		blame_list = xcalloc(num_ents, sizeof(struct blame_list));
+		CALLOC_ARRAY(blame_list, num_ents);
 		for (e = unblamed, i = 0; e; e = e->next)
 			blame_list[i++].ent = e;
 	}
@@ -2428,7 +2427,7 @@
 	else if (num_sg < ARRAY_SIZE(sg_buf))
 		memset(sg_buf, 0, sizeof(sg_buf));
 	else
-		sg_origin = xcalloc(num_sg, sizeof(*sg_origin));
+		CALLOC_ARRAY(sg_origin, num_sg);
 
 	/*
 	 * The first pass looks for unrenamed path to optimize for
diff --git a/block-sha1/sha1.c b/block-sha1/sha1.c
index 8681031..1bb6e7c 100644
--- a/block-sha1/sha1.c
+++ b/block-sha1/sha1.c
@@ -70,7 +70,7 @@
  * the input data, the next mix it from the 512-bit array.
  */
 #define SHA_SRC(t) get_be32((unsigned char *) block + (t)*4)
-#define SHA_MIX(t) SHA_ROL(W((t)+13) ^ W((t)+8) ^ W((t)+2) ^ W(t), 1);
+#define SHA_MIX(t) SHA_ROL(W((t)+13) ^ W((t)+8) ^ W((t)+2) ^ W(t), 1)
 
 #define SHA_ROUND(t, input, fn, constant, A, B, C, D, E) do { \
 	unsigned int TEMP = input(t); setW(t, TEMP); \
diff --git a/bloom.c b/bloom.c
index b176f28..5e29703 100644
--- a/bloom.c
+++ b/bloom.c
@@ -277,12 +277,13 @@
 				*computed |= BLOOM_TRUNC_EMPTY;
 			filter->len = 1;
 		}
-		filter->data = xcalloc(filter->len, sizeof(unsigned char));
+		CALLOC_ARRAY(filter->data, filter->len);
 
 		hashmap_for_each_entry(&pathmap, &iter, e, entry) {
 			struct bloom_key key;
 			fill_bloom_key(e->path, strlen(e->path), &key, settings);
 			add_key_to_filter(&key, filter, settings);
+			clear_bloom_key(&key);
 		}
 
 	cleanup:
diff --git a/branch.c b/branch.c
index 9c9dae1..7a88a48 100644
--- a/branch.c
+++ b/branch.c
@@ -294,7 +294,7 @@
 			if (explicit_tracking)
 				die(_(upstream_not_branch), start_name);
 			else
-				real_ref = NULL;
+				FREE_AND_NULL(real_ref);
 		}
 		break;
 	default:
@@ -322,7 +322,7 @@
 		transaction = ref_transaction_begin(&err);
 		if (!transaction ||
 		    ref_transaction_update(transaction, ref.buf,
-					   &oid, forcing ? NULL : &null_oid,
+					   &oid, forcing ? NULL : null_oid(),
 					   0, msg, &err) ||
 		    ref_transaction_commit(transaction, &err))
 			die("%s", err.buf);
@@ -344,6 +344,7 @@
 	unlink(git_path_merge_rr(r));
 	unlink(git_path_merge_msg(r));
 	unlink(git_path_merge_mode(r));
+	unlink(git_path_auto_merge(r));
 	save_autostash(git_path_merge_autostash(r));
 }
 
diff --git a/builtin.h b/builtin.h
index b6ce981..16ecd55 100644
--- a/builtin.h
+++ b/builtin.h
@@ -123,6 +123,7 @@
 int cmd_bundle(int argc, const char **argv, const char *prefix);
 int cmd_cat_file(int argc, const char **argv, const char *prefix);
 int cmd_checkout(int argc, const char **argv, const char *prefix);
+int cmd_checkout__worker(int argc, const char **argv, const char *prefix);
 int cmd_checkout_index(int argc, const char **argv, const char *prefix);
 int cmd_check_attr(int argc, const char **argv, const char *prefix);
 int cmd_check_ignore(int argc, const char **argv, const char *prefix);
diff --git a/builtin/add.c b/builtin/add.c
index a825887..09e6845 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -38,19 +38,30 @@
 	int add_errors;
 };
 
-static void chmod_pathspec(struct pathspec *pathspec, char flip)
+static int chmod_pathspec(struct pathspec *pathspec, char flip, int show_only)
 {
-	int i;
+	int i, ret = 0;
 
 	for (i = 0; i < active_nr; i++) {
 		struct cache_entry *ce = active_cache[i];
+		int err;
+
+		if (ce_skip_worktree(ce))
+			continue;
 
 		if (pathspec && !ce_path_match(&the_index, ce, pathspec, NULL))
 			continue;
 
-		if (chmod_cache_entry(ce, flip) < 0)
-			fprintf(stderr, "cannot chmod %cx '%s'\n", flip, ce->name);
+		if (!show_only)
+			err = chmod_cache_entry(ce, flip);
+		else
+			err = S_ISREG(ce->ce_mode) ? 0 : -1;
+
+		if (err < 0)
+			ret = error(_("cannot chmod %cx '%s'"), flip, ce->name);
 	}
+
+	return ret;
 }
 
 static int fix_unmerged_status(struct diff_filepair *p,
@@ -133,9 +144,13 @@
 {
 	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))
+			continue;
 		if (ce_stage(ce))
 			continue; /* do not touch unmerged paths */
 		if (!S_ISREG(ce->ce_mode) && !S_ISLNK(ce->ce_mode))
@@ -164,24 +179,44 @@
 			*dst++ = entry;
 	}
 	dir->nr = dst - dir->entries;
-	add_pathspec_matches_against_index(pathspec, &the_index, seen);
+	add_pathspec_matches_against_index(pathspec, &the_index, seen,
+					   PS_IGNORE_SKIP_WORKTREE);
 	return seen;
 }
 
-static void refresh(int verbose, const struct pathspec *pathspec)
+static int refresh(int verbose, const struct pathspec *pathspec)
 {
 	char *seen;
-	int i;
+	int i, ret = 0;
+	char *skip_worktree_seen = NULL;
+	struct string_list only_match_skip_worktree = STRING_LIST_INIT_NODUP;
+	int flags = REFRESH_IGNORE_SKIP_WORKTREE |
+		    (verbose ? REFRESH_IN_PORCELAIN : REFRESH_QUIET);
 
 	seen = xcalloc(pathspec->nr, 1);
-	refresh_index(&the_index, verbose ? REFRESH_IN_PORCELAIN : REFRESH_QUIET,
-		      pathspec, seen, _("Unstaged changes after refreshing the index:"));
+	refresh_index(&the_index, flags, pathspec, seen,
+		      _("Unstaged changes after refreshing the index:"));
 	for (i = 0; i < pathspec->nr; i++) {
-		if (!seen[i])
-			die(_("pathspec '%s' did not match any files"),
-			    pathspec->items[i].match);
+		if (!seen[i]) {
+			if (matches_skip_worktree(pathspec, i, &skip_worktree_seen)) {
+				string_list_append(&only_match_skip_worktree,
+						   pathspec->items[i].original);
+			} else {
+				die(_("pathspec '%s' did not match any files"),
+				    pathspec->items[i].original);
+			}
+		}
 	}
+
+	if (only_match_skip_worktree.nr) {
+		advise_on_updating_sparse_paths(&only_match_skip_worktree);
+		ret = 1;
+	}
+
 	free(seen);
+	free(skip_worktree_seen);
+	string_list_clear(&only_match_skip_worktree, 0);
+	return ret;
 }
 
 int run_add_interactive(const char *revision, const char *patch_mode,
@@ -435,7 +470,7 @@
 {
 	int exit_status = 0;
 	struct pathspec pathspec;
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 	int flags;
 	int add_new_files;
 	int require_pathspec;
@@ -449,6 +484,8 @@
 	if (patch_interactive)
 		add_interactive = 1;
 	if (add_interactive) {
+		if (show_only)
+			die(_("--dry-run is incompatible with --interactive/--patch"));
 		if (pathspec_from_file)
 			die(_("--pathspec-from-file is incompatible with --interactive/--patch"));
 		exit(interactive_add(argv + 1, prefix, patch_interactive));
@@ -540,7 +577,6 @@
 	die_in_unpopulated_submodule(&the_index, prefix);
 	die_path_inside_submodule(&the_index, &pathspec);
 
-	dir_init(&dir);
 	if (add_new_files) {
 		int baselen;
 
@@ -557,15 +593,18 @@
 	}
 
 	if (refresh_only) {
-		refresh(verbose, &pathspec);
+		exit_status |= refresh(verbose, &pathspec);
 		goto finish;
 	}
 
 	if (pathspec.nr) {
 		int i;
+		char *skip_worktree_seen = NULL;
+		struct string_list only_match_skip_worktree = STRING_LIST_INIT_NODUP;
 
 		if (!seen)
-			seen = find_pathspecs_matching_against_index(&pathspec, &the_index);
+			seen = find_pathspecs_matching_against_index(&pathspec,
+					&the_index, PS_IGNORE_SKIP_WORKTREE);
 
 		/*
 		 * file_exists() assumes exact match
@@ -579,12 +618,24 @@
 
 		for (i = 0; i < pathspec.nr; i++) {
 			const char *path = pathspec.items[i].match;
+
 			if (pathspec.items[i].magic & PATHSPEC_EXCLUDE)
 				continue;
-			if (!seen[i] && path[0] &&
-			    ((pathspec.items[i].magic &
-			      (PATHSPEC_GLOB | PATHSPEC_ICASE)) ||
-			     !file_exists(path))) {
+			if (seen[i])
+				continue;
+
+			if (matches_skip_worktree(&pathspec, i, &skip_worktree_seen)) {
+				string_list_append(&only_match_skip_worktree,
+						   pathspec.items[i].original);
+				continue;
+			}
+
+			/* Don't complain at 'git add .' on empty repo */
+			if (!path[0])
+				continue;
+
+			if ((pathspec.items[i].magic & (PATHSPEC_GLOB | PATHSPEC_ICASE)) ||
+			    !file_exists(path)) {
 				if (ignore_missing) {
 					int dtype = DT_UNKNOWN;
 					if (is_excluded(&dir, &the_index, path, &dtype))
@@ -595,7 +646,16 @@
 					    pathspec.items[i].original);
 			}
 		}
+
+
+		if (only_match_skip_worktree.nr) {
+			advise_on_updating_sparse_paths(&only_match_skip_worktree);
+			exit_status = 1;
+		}
+
 		free(seen);
+		free(skip_worktree_seen);
+		string_list_clear(&only_match_skip_worktree, 0);
 	}
 
 	plug_bulk_checkin();
@@ -609,7 +669,7 @@
 		exit_status |= add_files(&dir, flags);
 
 	if (chmod_arg && pathspec.nr)
-		chmod_pathspec(&pathspec, chmod_arg[0]);
+		exit_status |= chmod_pathspec(&pathspec, chmod_arg[0], show_only);
 	unplug_bulk_checkin();
 
 finish:
diff --git a/builtin/am.c b/builtin/am.c
index 8355e35..0c2ad96 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -116,6 +116,7 @@
 	int keep; /* enum keep_type */
 	int message_id;
 	int scissors; /* enum scissors_type */
+	int quoted_cr; /* enum quoted_cr_action */
 	struct strvec git_apply_opts;
 	const char *resolvemsg;
 	int committer_date_is_author_date;
@@ -145,6 +146,7 @@
 	git_config_get_bool("am.messageid", &state->message_id);
 
 	state->scissors = SCISSORS_UNSET;
+	state->quoted_cr = quoted_cr_unset;
 
 	strvec_init(&state->git_apply_opts);
 
@@ -165,6 +167,16 @@
 	strvec_clear(&state->git_apply_opts);
 }
 
+static int am_option_parse_quoted_cr(const struct option *opt,
+				     const char *arg, int unset)
+{
+	BUG_ON_OPT_NEG(unset);
+
+	if (mailinfo_parse_quoted_cr_action(arg, opt->value) != 0)
+		return error(_("bad action '%s' for '%s'"), arg, "--quoted-cr");
+	return 0;
+}
+
 /**
  * Returns path relative to the am_state directory.
  */
@@ -198,6 +210,7 @@
  * If state->quiet is false, calls fprintf(fp, fmt, ...), and appends a newline
  * at the end.
  */
+__attribute__((format (printf, 3, 4)))
 static void say(const struct am_state *state, FILE *fp, const char *fmt, ...)
 {
 	va_list ap;
@@ -397,6 +410,12 @@
 	else
 		state->scissors = SCISSORS_UNSET;
 
+	read_state_file(&sb, state, "quoted-cr", 1);
+	if (!*sb.buf)
+		state->quoted_cr = quoted_cr_unset;
+	else if (mailinfo_parse_quoted_cr_action(sb.buf, &state->quoted_cr) != 0)
+		die(_("could not parse %s"), am_path(state, "quoted-cr"));
+
 	read_state_file(&sb, state, "apply-opt", 1);
 	strvec_clear(&state->git_apply_opts);
 	if (sq_dequote_to_strvec(sb.buf, &state->git_apply_opts) < 0)
@@ -1002,6 +1021,24 @@
 	}
 	write_state_text(state, "scissors", str);
 
+	switch (state->quoted_cr) {
+	case quoted_cr_unset:
+		str = "";
+		break;
+	case quoted_cr_nowarn:
+		str = "nowarn";
+		break;
+	case quoted_cr_warn:
+		str = "warn";
+		break;
+	case quoted_cr_strip:
+		str = "strip";
+		break;
+	default:
+		BUG("invalid value for state->quoted_cr");
+	}
+	write_state_text(state, "quoted-cr", str);
+
 	sq_quote_argv(&sb, state->git_apply_opts.v);
 	write_state_text(state, "apply-opt", sb.buf);
 
@@ -1162,6 +1199,18 @@
 		BUG("invalid value for state->scissors");
 	}
 
+	switch (state->quoted_cr) {
+	case quoted_cr_unset:
+		break;
+	case quoted_cr_nowarn:
+	case quoted_cr_warn:
+	case quoted_cr_strip:
+		mi.quoted_cr = state->quoted_cr;
+		break;
+	default:
+		BUG("invalid value for state->quoted_cr");
+	}
+
 	mi.input = xfopen(mail, "r");
 	mi.output = xfopen(am_path(state, "info"), "w");
 	if (mailinfo(&mi, am_path(state, "msg"), am_path(state, "patch")))
@@ -2242,6 +2291,9 @@
 			0, PARSE_OPT_NONEG),
 		OPT_BOOL('c', "scissors", &state.scissors,
 			N_("strip everything before a scissors line")),
+		OPT_CALLBACK_F(0, "quoted-cr", &state.quoted_cr, N_("action"),
+			       N_("pass it through git-mailinfo"),
+			       PARSE_OPT_NONEG, am_option_parse_quoted_cr),
 		OPT_PASSTHRU_ARGV(0, "whitespace", &state.git_apply_opts, N_("action"),
 			N_("pass it through git-apply"),
 			0),
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index d69e133..f184eae 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -117,6 +117,7 @@
 	return fclose(fp);
 }
 
+__attribute__((format (printf, 2, 3)))
 static int write_to_file(const char *path, const char *format, ...)
 {
 	int res;
@@ -129,6 +130,7 @@
 	return res;
 }
 
+__attribute__((format (printf, 2, 3)))
 static int append_to_file(const char *path, const char *format, ...)
 {
 	int res;
@@ -874,12 +876,19 @@
 	 */
 
 	for (; argc; argc--, argv++) {
+		struct commit *commit;
+
 		if (get_oid(*argv, &oid)){
 			error(_("Bad rev input: %s"), *argv);
 			oid_array_clear(&revs);
 			return BISECT_FAILED;
 		}
-		oid_array_append(&revs, &oid);
+
+		commit = lookup_commit_reference(the_repository, &oid);
+		if (!commit)
+			die(_("Bad rev input (not a commit): %s"), *argv);
+
+		oid_array_append(&revs, &commit->object.oid);
 	}
 
 	if (strbuf_read_file(&buf, git_path_bisect_expected_rev(), 0) < the_hash_algo->hexsz ||
@@ -1119,6 +1128,7 @@
 		break;
 	case BISECT_SKIP:
 		set_terms(&terms, "bad", "good");
+		get_terms(&terms);
 		res = bisect_skip(&terms, argv, argc);
 		break;
 	default:
diff --git a/builtin/blame.c b/builtin/blame.c
index b66e938..641523f 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -425,13 +425,11 @@
 	parse_color_fields("blue,12 month ago,white,1 month ago,red");
 }
 
-static void determine_line_heat(struct blame_entry *ent, const char **dest_color)
+static void determine_line_heat(struct commit_info *ci, const char **dest_color)
 {
 	int i = 0;
-	struct commit_info ci;
-	get_commit_info(ent->suspect->commit, &ci, 1);
 
-	while (i < colorfield_nr && ci.author_time > colorfield[i].hop)
+	while (i < colorfield_nr && ci->author_time > colorfield[i].hop)
 		i++;
 
 	*dest_color = colorfield[i].col;
@@ -453,7 +451,7 @@
 	cp = blame_nth_line(sb, ent->lno);
 
 	if (opt & OUTPUT_SHOW_AGE_WITH_COLOR) {
-		determine_line_heat(ent, &default_color);
+		determine_line_heat(&ci, &default_color);
 		color = default_color;
 		reset = GIT_COLOR_RESET;
 	}
diff --git a/builtin/branch.c b/builtin/branch.c
index bcc00bc..b23b1d1 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -411,6 +411,8 @@
 {
 	int i;
 	struct ref_array array;
+	struct strbuf out = STRBUF_INIT;
+	struct strbuf err = STRBUF_INIT;
 	int maxwidth = 0;
 	const char *remote_prefix = "";
 	char *to_free = NULL;
@@ -440,8 +442,8 @@
 	ref_array_sort(sorting, &array);
 
 	for (i = 0; i < array.nr; i++) {
-		struct strbuf out = STRBUF_INIT;
-		struct strbuf err = STRBUF_INIT;
+		strbuf_reset(&err);
+		strbuf_reset(&out);
 		if (format_ref_array_item(array.items[i], format, &out, &err))
 			die("%s", err.buf);
 		if (column_active(colopts)) {
@@ -452,10 +454,10 @@
 			fwrite(out.buf, 1, out.len, stdout);
 			putchar('\n');
 		}
-		strbuf_release(&err);
-		strbuf_release(&out);
 	}
 
+	strbuf_release(&err);
+	strbuf_release(&out);
 	ref_array_clear(&array);
 	free(to_free);
 }
diff --git a/builtin/bugreport.c b/builtin/bugreport.c
index ad3cc9c..9915a58 100644
--- a/builtin/bugreport.c
+++ b/builtin/bugreport.c
@@ -129,6 +129,7 @@
 	char *option_output = NULL;
 	char *option_suffix = "%Y-%m-%d-%H%M";
 	const char *user_relative_path = NULL;
+	char *prefixed_filename;
 
 	const struct option bugreport_options[] = {
 		OPT_STRING('o', "output-directory", &option_output, N_("path"),
@@ -142,9 +143,9 @@
 			     bugreport_usage, 0);
 
 	/* Prepare the path to put the result */
-	strbuf_addstr(&report_path,
-		      prefix_filename(prefix,
-				      option_output ? option_output : ""));
+	prefixed_filename = prefix_filename(prefix,
+					    option_output ? option_output : "");
+	strbuf_addstr(&report_path, prefixed_filename);
 	strbuf_complete(&report_path, '/');
 
 	strbuf_addstr(&report_path, "git-bugreport-");
@@ -189,6 +190,7 @@
 	fprintf(stderr, _("Created new report at '%s'.\n"),
 		user_relative_path);
 
+	free(prefixed_filename);
 	UNLEAK(buffer);
 	UNLEAK(report_path);
 	return !!launch_editor(report_path.buf, NULL, NULL);
diff --git a/builtin/bundle.c b/builtin/bundle.c
index ea69481..053a51b 100644
--- a/builtin/bundle.c
+++ b/builtin/bundle.c
@@ -46,7 +46,7 @@
 		const char* prefix,
 		const char * const usagestr[],
 		const struct option options[],
-		const char **bundle_file) {
+		char **bundle_file) {
 	int newargc;
 	newargc = parse_options(argc, argv, NULL, options, usagestr,
 			     PARSE_OPT_STOP_AT_NON_OPTION);
@@ -61,7 +61,7 @@
 	int progress = isatty(STDERR_FILENO);
 	struct strvec pack_opts;
 	int version = -1;
-
+	int ret;
 	struct option options[] = {
 		OPT_SET_INT('q', "quiet", &progress,
 			    N_("do not show progress meter"), 0),
@@ -76,7 +76,7 @@
 			    N_("specify bundle format version")),
 		OPT_END()
 	};
-	const char* bundle_file;
+	char *bundle_file;
 
 	argc = parse_options_cmd_bundle(argc, argv, prefix,
 			builtin_bundle_create_usage, options, &bundle_file);
@@ -94,75 +94,95 @@
 
 	if (!startup_info->have_repository)
 		die(_("Need a repository to create a bundle."));
-	return !!create_bundle(the_repository, bundle_file, argc, argv, &pack_opts, version);
+	ret = !!create_bundle(the_repository, bundle_file, argc, argv, &pack_opts, version);
+	free(bundle_file);
+	return ret;
 }
 
 static int cmd_bundle_verify(int argc, const char **argv, const char *prefix) {
-	struct bundle_header header;
+	struct bundle_header header = BUNDLE_HEADER_INIT;
 	int bundle_fd = -1;
 	int quiet = 0;
-
+	int ret;
 	struct option options[] = {
 		OPT_BOOL('q', "quiet", &quiet,
 			    N_("do not show bundle details")),
 		OPT_END()
 	};
-	const char* bundle_file;
+	char *bundle_file;
 
 	argc = parse_options_cmd_bundle(argc, argv, prefix,
 			builtin_bundle_verify_usage, options, &bundle_file);
 	/* bundle internals use argv[1] as further parameters */
 
-	memset(&header, 0, sizeof(header));
-	if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-		return 1;
+	if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0) {
+		ret = 1;
+		goto cleanup;
+	}
 	close(bundle_fd);
-	if (verify_bundle(the_repository, &header, !quiet))
-		return 1;
+	if (verify_bundle(the_repository, &header, !quiet)) {
+		ret = 1;
+		goto cleanup;
+	}
+
 	fprintf(stderr, _("%s is okay\n"), bundle_file);
-	return 0;
+	ret = 0;
+cleanup:
+	free(bundle_file);
+	bundle_header_release(&header);
+	return ret;
 }
 
 static int cmd_bundle_list_heads(int argc, const char **argv, const char *prefix) {
-	struct bundle_header header;
+	struct bundle_header header = BUNDLE_HEADER_INIT;
 	int bundle_fd = -1;
-
+	int ret;
 	struct option options[] = {
 		OPT_END()
 	};
-	const char* bundle_file;
+	char *bundle_file;
 
 	argc = parse_options_cmd_bundle(argc, argv, prefix,
 			builtin_bundle_list_heads_usage, options, &bundle_file);
 	/* bundle internals use argv[1] as further parameters */
 
-	memset(&header, 0, sizeof(header));
-	if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-		return 1;
+	if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0) {
+		ret = 1;
+		goto cleanup;
+	}
 	close(bundle_fd);
-	return !!list_bundle_refs(&header, argc, argv);
+	ret = !!list_bundle_refs(&header, argc, argv);
+cleanup:
+	free(bundle_file);
+	bundle_header_release(&header);
+	return ret;
 }
 
 static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix) {
-	struct bundle_header header;
+	struct bundle_header header = BUNDLE_HEADER_INIT;
 	int bundle_fd = -1;
-
+	int ret;
 	struct option options[] = {
 		OPT_END()
 	};
-	const char* bundle_file;
+	char *bundle_file;
 
 	argc = parse_options_cmd_bundle(argc, argv, prefix,
 			builtin_bundle_unbundle_usage, options, &bundle_file);
 	/* bundle internals use argv[1] as further parameters */
 
-	memset(&header, 0, sizeof(header));
-	if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-		return 1;
+	if ((bundle_fd = read_bundle_header(bundle_file, &header)) < 0) {
+		ret = 1;
+		goto cleanup;
+	}
 	if (!startup_info->have_repository)
 		die(_("Need a repository to unbundle."));
-	return !!unbundle(the_repository, &header, bundle_fd, 0) ||
+	ret = !!unbundle(the_repository, &header, bundle_fd, 0) ||
 		list_bundle_refs(&header, argc, argv);
+	bundle_header_release(&header);
+cleanup:
+	free(bundle_file);
+	return ret;
 }
 
 int cmd_bundle(int argc, const char **argv, const char *prefix)
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 5ebf133..243fe68 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -512,12 +512,6 @@
 	if (opt->cmdmode)
 		data.split_on_whitespace = 1;
 
-	if (opt->all_objects) {
-		struct object_info empty = OBJECT_INFO_INIT;
-		if (!memcmp(&data.info, &empty, sizeof(empty)))
-			data.skip_object_info = 1;
-	}
-
 	/*
 	 * If we are printing out the object, then always fill in the type,
 	 * since we will want to decide whether or not to stream.
@@ -527,6 +521,10 @@
 
 	if (opt->all_objects) {
 		struct object_cb_data cb;
+		struct object_info empty = OBJECT_INFO_INIT;
+
+		if (!memcmp(&data.info, &empty, sizeof(empty)))
+			data.skip_object_info = 1;
 
 		if (has_promisor_remote())
 			warning("This repository uses promisor remotes. Some objects may not be loaded.");
diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c
index 3c65274..2191256 100644
--- a/builtin/check-ignore.c
+++ b/builtin/check-ignore.c
@@ -100,7 +100,8 @@
 	 * should not be ignored, in order to be consistent with
 	 * 'git status', 'git add' etc.
 	 */
-	seen = find_pathspecs_matching_against_index(&pathspec, &the_index);
+	seen = find_pathspecs_matching_against_index(&pathspec, &the_index,
+						     PS_HEED_SKIP_WORKTREE);
 	for (i = 0; i < pathspec.nr; i++) {
 		full_path = pathspec.items[i].match;
 		pattern = NULL;
@@ -118,6 +119,7 @@
 			num_ignored++;
 	}
 	free(seen);
+	clear_pathspec(&pathspec);
 
 	return num_ignored;
 }
@@ -151,7 +153,7 @@
 int cmd_check_ignore(int argc, const char **argv, const char *prefix)
 {
 	int num_ignored;
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 
 	git_config(git_default_config, NULL);
 
@@ -180,7 +182,6 @@
 	if (!no_index && read_cache() < 0)
 		die(_("index file corrupt"));
 
-	dir_init(&dir);
 	setup_standard_excludes(&dir);
 
 	if (stdin_paths) {
diff --git a/builtin/checkout--worker.c b/builtin/checkout--worker.c
new file mode 100644
index 0000000..fb9fd13
--- /dev/null
+++ b/builtin/checkout--worker.c
@@ -0,0 +1,145 @@
+#include "builtin.h"
+#include "config.h"
+#include "entry.h"
+#include "parallel-checkout.h"
+#include "parse-options.h"
+#include "pkt-line.h"
+
+static void packet_to_pc_item(const char *buffer, int len,
+			      struct parallel_checkout_item *pc_item)
+{
+	const struct pc_item_fixed_portion *fixed_portion;
+	const char *variant;
+	char *encoding;
+
+	if (len < sizeof(struct pc_item_fixed_portion))
+		BUG("checkout worker received too short item (got %dB, exp %dB)",
+		    len, (int)sizeof(struct pc_item_fixed_portion));
+
+	fixed_portion = (struct pc_item_fixed_portion *)buffer;
+
+	if (len - sizeof(struct pc_item_fixed_portion) !=
+		fixed_portion->name_len + fixed_portion->working_tree_encoding_len)
+		BUG("checkout worker received corrupted item");
+
+	variant = buffer + sizeof(struct pc_item_fixed_portion);
+
+	/*
+	 * Note: the main process uses zero length to communicate that the
+	 * encoding is NULL. There is no use case that requires sending an
+	 * actual empty string, since convert_attrs() never sets
+	 * ca.working_tree_enconding to "".
+	 */
+	if (fixed_portion->working_tree_encoding_len) {
+		encoding = xmemdupz(variant,
+				    fixed_portion->working_tree_encoding_len);
+		variant += fixed_portion->working_tree_encoding_len;
+	} else {
+		encoding = NULL;
+	}
+
+	memset(pc_item, 0, sizeof(*pc_item));
+	pc_item->ce = make_empty_transient_cache_entry(fixed_portion->name_len, NULL);
+	pc_item->ce->ce_namelen = fixed_portion->name_len;
+	pc_item->ce->ce_mode = fixed_portion->ce_mode;
+	memcpy(pc_item->ce->name, variant, pc_item->ce->ce_namelen);
+	oidcpy(&pc_item->ce->oid, &fixed_portion->oid);
+
+	pc_item->id = fixed_portion->id;
+	pc_item->ca.crlf_action = fixed_portion->crlf_action;
+	pc_item->ca.ident = fixed_portion->ident;
+	pc_item->ca.working_tree_encoding = encoding;
+}
+
+static void report_result(struct parallel_checkout_item *pc_item)
+{
+	struct pc_item_result res = { 0 };
+	size_t size;
+
+	res.id = pc_item->id;
+	res.status = pc_item->status;
+
+	if (pc_item->status == PC_ITEM_WRITTEN) {
+		res.st = pc_item->st;
+		size = sizeof(res);
+	} else {
+		size = PC_ITEM_RESULT_BASE_SIZE;
+	}
+
+	packet_write(1, (const char *)&res, size);
+}
+
+/* Free the worker-side malloced data, but not pc_item itself. */
+static void release_pc_item_data(struct parallel_checkout_item *pc_item)
+{
+	free((char *)pc_item->ca.working_tree_encoding);
+	discard_cache_entry(pc_item->ce);
+}
+
+static void worker_loop(struct checkout *state)
+{
+	struct parallel_checkout_item *items = NULL;
+	size_t i, nr = 0, alloc = 0;
+
+	while (1) {
+		int len = packet_read(0, NULL, NULL, packet_buffer,
+				      sizeof(packet_buffer), 0);
+
+		if (len < 0)
+			BUG("packet_read() returned negative value");
+		else if (!len)
+			break;
+
+		ALLOC_GROW(items, nr + 1, alloc);
+		packet_to_pc_item(packet_buffer, len, &items[nr++]);
+	}
+
+	for (i = 0; i < nr; i++) {
+		struct parallel_checkout_item *pc_item = &items[i];
+		write_pc_item(pc_item, state);
+		report_result(pc_item);
+		release_pc_item_data(pc_item);
+	}
+
+	packet_flush(1);
+
+	free(items);
+}
+
+static const char * const checkout_worker_usage[] = {
+	N_("git checkout--worker [<options>]"),
+	NULL
+};
+
+int cmd_checkout__worker(int argc, const char **argv, const char *prefix)
+{
+	struct checkout state = CHECKOUT_INIT;
+	struct option checkout_worker_options[] = {
+		OPT_STRING(0, "prefix", &state.base_dir, N_("string"),
+			N_("when creating files, prepend <string>")),
+		OPT_END()
+	};
+
+	if (argc == 2 && !strcmp(argv[1], "-h"))
+		usage_with_options(checkout_worker_usage,
+				   checkout_worker_options);
+
+	git_config(git_default_config, NULL);
+	argc = parse_options(argc, argv, prefix, checkout_worker_options,
+			     checkout_worker_usage, 0);
+	if (argc > 0)
+		usage_with_options(checkout_worker_usage, checkout_worker_options);
+
+	if (state.base_dir)
+		state.base_dir_len = strlen(state.base_dir);
+
+	/*
+	 * Setting this on a worker won't actually update the index. We just
+	 * need to tell the checkout machinery to lstat() the written entries,
+	 * so that we can send this data back to the main process.
+	 */
+	state.refresh_cache = 1;
+
+	worker_loop(&state);
+	return 0;
+}
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index 4bbfc92..e21620d 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -11,6 +11,8 @@
 #include "quote.h"
 #include "cache-tree.h"
 #include "parse-options.h"
+#include "entry.h"
+#include "parallel-checkout.h"
 
 #define CHECKOUT_ALL 4
 static int nul_term_line;
@@ -23,22 +25,35 @@
 static void write_tempfile_record(const char *name, const char *prefix)
 {
 	int i;
+	int have_tempname = 0;
 
 	if (CHECKOUT_ALL == checkout_stage) {
-		for (i = 1; i < 4; i++) {
-			if (i > 1)
-				putchar(' ');
-			if (topath[i][0])
-				fputs(topath[i], stdout);
-			else
-				putchar('.');
-		}
-	} else
-		fputs(topath[checkout_stage], stdout);
+		for (i = 1; i < 4; i++)
+			if (topath[i][0]) {
+				have_tempname = 1;
+				break;
+			}
 
-	putchar('\t');
-	write_name_quoted_relative(name, prefix, stdout,
-				   nul_term_line ? '\0' : '\n');
+		if (have_tempname) {
+			for (i = 1; i < 4; i++) {
+				if (i > 1)
+					putchar(' ');
+				if (topath[i][0])
+					fputs(topath[i], stdout);
+				else
+					putchar('.');
+			}
+		}
+	} else if (topath[checkout_stage][0]) {
+		have_tempname = 1;
+		fputs(topath[checkout_stage], stdout);
+	}
+
+	if (have_tempname) {
+		putchar('\t');
+		write_name_quoted_relative(name, prefix, stdout,
+					   nul_term_line ? '\0' : '\n');
+	}
 
 	for (i = 0; i < 4; i++) {
 		topath[i][0] = 0;
@@ -101,11 +116,13 @@
 	return -1;
 }
 
-static void checkout_all(const char *prefix, int prefix_length)
+static int checkout_all(const char *prefix, int prefix_length)
 {
 	int i, errs = 0;
 	struct cache_entry *last_ce = NULL;
 
+	/* 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_stage(ce) != checkout_stage
@@ -128,11 +145,7 @@
 	}
 	if (last_ce && to_tempfile)
 		write_tempfile_record(last_ce->name, prefix);
-	if (errs)
-		/* we have already done our error reporting.
-		 * exit with the same code as die().
-		 */
-		exit(128);
+	return !!errs;
 }
 
 static const char * const builtin_checkout_index_usage[] = {
@@ -168,6 +181,7 @@
 	int force = 0, quiet = 0, not_new = 0;
 	int index_opt = 0;
 	int err = 0;
+	int pc_workers, pc_threshold;
 	struct option builtin_checkout_index_options[] = {
 		OPT_BOOL('a', "all", &all,
 			N_("check out all files in the index")),
@@ -222,6 +236,10 @@
 		hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
 	}
 
+	get_parallel_checkout_configs(&pc_workers, &pc_threshold);
+	if (pc_workers > 1)
+		init_parallel_checkout();
+
 	/* Check out named files first */
 	for (i = 0; i < argc; i++) {
 		const char *arg = argv[i];
@@ -261,12 +279,16 @@
 		strbuf_release(&buf);
 	}
 
+	if (all)
+		err |= checkout_all(prefix, prefix_length);
+
+	if (pc_workers > 1)
+		err |= run_parallel_checkout(&state, pc_workers, pc_threshold,
+					     NULL, NULL);
+
 	if (err)
 		return 1;
 
-	if (all)
-		checkout_all(prefix, prefix_length);
-
 	if (is_lock_file_locked(&lock_file) &&
 	    write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
 		die("Unable to write new index file");
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2d6550b..f4cd774 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -26,6 +26,8 @@
 #include "unpack-trees.h"
 #include "wt-status.h"
 #include "xdiff-interface.h"
+#include "entry.h"
+#include "parallel-checkout.h"
 
 static const char * const checkout_usage[] = {
 	N_("git checkout [<options>] <branch>"),
@@ -105,8 +107,8 @@
 			      int changed)
 {
 	return run_hook_le(NULL, "post-checkout",
-			   oid_to_hex(old_commit ? &old_commit->object.oid : &null_oid),
-			   oid_to_hex(new_commit ? &new_commit->object.oid : &null_oid),
+			   oid_to_hex(old_commit ? &old_commit->object.oid : null_oid()),
+			   oid_to_hex(new_commit ? &new_commit->object.oid : null_oid()),
 			   changed ? "1" : "0", NULL);
 	/* "new_commit" can be NULL when checking out from the index before
 	   a commit exists. */
@@ -114,7 +116,7 @@
 }
 
 static int update_some(const struct object_id *oid, struct strbuf *base,
-		const char *pathname, unsigned mode, int stage, void *context)
+		const char *pathname, unsigned mode, void *context)
 {
 	int len;
 	struct cache_entry *ce;
@@ -155,8 +157,8 @@
 
 static int read_tree_some(struct tree *tree, const struct pathspec *pathspec)
 {
-	read_tree_recursive(the_repository, tree, "", 0, 0,
-			    pathspec, update_some, NULL);
+	read_tree(the_repository, tree,
+		  pathspec, update_some, NULL);
 
 	/* update the index with the given tree's info
 	 * for all args, expanding wildcards, and exit
@@ -229,7 +231,8 @@
 		return error(_("path '%s' does not have their version"), ce->name);
 }
 
-static int checkout_merged(int pos, const struct checkout *state, int *nr_checkouts)
+static int checkout_merged(int pos, const struct checkout *state,
+			   int *nr_checkouts, struct mem_pool *ce_mem_pool)
 {
 	struct cache_entry *ce = active_cache[pos];
 	const char *path = ce->name;
@@ -290,11 +293,10 @@
 	if (write_object_file(result_buf.ptr, result_buf.size, blob_type, &oid))
 		die(_("Unable to add merge result for '%s'"), path);
 	free(result_buf.ptr);
-	ce = make_transient_cache_entry(mode, &oid, path, 2);
+	ce = make_transient_cache_entry(mode, &oid, path, 2, ce_mem_pool);
 	if (!ce)
 		die(_("make_cache_entry failed for path '%s'"), path);
 	status = checkout_entry(ce, state, NULL, nr_checkouts);
-	discard_cache_entry(ce);
 	return status;
 }
 
@@ -322,7 +324,7 @@
 	 * If it comes from the tree-ish, we already know it
 	 * matches the pathspec and could just stamp
 	 * CE_MATCHED to it from update_some(). But we still
-	 * need ps_matched and read_tree_recursive (and
+	 * need ps_matched and read_tree (and
 	 * eventually tree_entry_interesting) cannot fill
 	 * ps_matched yet. Once it can, we can avoid calling
 	 * match_pathspec() for _all_ entries when
@@ -358,16 +360,27 @@
 	int nr_checkouts = 0, nr_unmerged = 0;
 	int errs = 0;
 	int pos;
+	int pc_workers, pc_threshold;
+	struct mem_pool ce_mem_pool;
 
 	state.force = 1;
 	state.refresh_cache = 1;
 	state.istate = &the_index;
 
+	mem_pool_init(&ce_mem_pool, 0);
+	get_parallel_checkout_configs(&pc_workers, &pc_threshold);
 	init_checkout_metadata(&state.meta, info->refname,
 			       info->commit ? &info->commit->object.oid : &info->oid,
 			       NULL);
 
 	enable_delayed_checkout(&state);
+
+	if (pc_workers > 1)
+		init_parallel_checkout();
+
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&the_index);
+
 	for (pos = 0; pos < active_nr; pos++) {
 		struct cache_entry *ce = active_cache[pos];
 		if (ce->ce_flags & CE_MATCHED) {
@@ -383,10 +396,15 @@
 						       &nr_checkouts, opts->overlay_mode);
 			else if (opts->merge)
 				errs |= checkout_merged(pos, &state,
-							&nr_unmerged);
+							&nr_unmerged,
+							&ce_mem_pool);
 			pos = skip_same_name(ce, pos) - 1;
 		}
 	}
+	if (pc_workers > 1)
+		errs |= run_parallel_checkout(&state, pc_workers, pc_threshold,
+					      NULL, NULL);
+	mem_pool_discard(&ce_mem_pool, should_validate_cache_entries());
 	remove_marked_cache_entries(&the_index, 1);
 	remove_scheduled_dirs();
 	errs |= finish_delayed_checkout(&state, &nr_checkouts);
@@ -512,6 +530,8 @@
 	 * Make sure all pathspecs participated in locating the paths
 	 * to be checked out.
 	 */
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&the_index);
 	for (pos = 0; pos < active_nr; pos++)
 		if (opts->overlay_mode)
 			mark_ce_for_checkout_overlay(active_cache[pos],
@@ -601,6 +621,7 @@
 	diff_setup_done(&rev.diffopt);
 	add_pending_object(&rev, head, NULL);
 	run_diff_index(&rev, 0);
+	object_array_clear(&rev.pending);
 }
 
 static void describe_detached_head(const char *msg, struct commit *commit)
@@ -637,7 +658,7 @@
 	opts.src_index = &the_index;
 	opts.dst_index = &the_index;
 	init_checkout_metadata(&opts.meta, info->refname,
-			       info->commit ? &info->commit->object.oid : &null_oid,
+			       info->commit ? &info->commit->object.oid : null_oid(),
 			       NULL);
 	parse_tree(tree);
 	init_tree_desc(&tree_desc, tree->buffer, tree->size);
diff --git a/builtin/clean.c b/builtin/clean.c
index 687ab47..98a2860 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -189,10 +189,8 @@
 	strbuf_complete(path, '/');
 
 	len = path->len;
-	while ((e = readdir(dir)) != NULL) {
+	while ((e = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 		struct stat st;
-		if (is_dot_or_dotdot(e->d_name))
-			continue;
 
 		strbuf_setlen(path, len);
 		strbuf_addstr(path, e->d_name);
@@ -623,7 +621,7 @@
 				nr += chosen[i];
 		}
 
-		result = xcalloc(st_add(nr, 1), sizeof(int));
+		CALLOC_ARRAY(result, st_add(nr, 1));
 		for (i = 0; i < stuff->nr && j < nr; i++) {
 			if (chosen[i])
 				result[j++] = i;
@@ -643,7 +641,7 @@
 
 static int filter_by_patterns_cmd(void)
 {
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 	struct strbuf confirm = STRBUF_INIT;
 	struct strbuf **ignore_list;
 	struct string_list_item *item;
@@ -667,7 +665,6 @@
 		if (!confirm.len)
 			break;
 
-		dir_init(&dir);
 		pl = add_pattern_list(&dir, EXC_CMDL, "manual exclude");
 		ignore_list = strbuf_split_max(&confirm, ' ', 0);
 
@@ -892,7 +889,7 @@
 	int ignored_only = 0, config_set = 0, errors = 0, gone = 1;
 	int rm_flags = REMOVE_DIR_KEEP_NESTED_GIT;
 	struct strbuf abs_path = STRBUF_INIT;
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 	struct pathspec pathspec;
 	struct strbuf buf = STRBUF_INIT;
 	struct string_list exclude_list = STRING_LIST_INIT_NODUP;
@@ -923,7 +920,6 @@
 	argc = parse_options(argc, argv, prefix, options, builtin_clean_usage,
 			     0);
 
-	dir_init(&dir);
 	if (!interactive && !dry_run && !force) {
 		if (config_set)
 			die(_("clean.requireForce set to true and neither -i, -n, nor -f given; "
@@ -1003,7 +999,6 @@
 
 	for (i = 0; i < dir.nr; i++) {
 		struct dir_entry *ent = dir.entries[i];
-		int matches = 0;
 		struct stat st;
 		const char *rel;
 
@@ -1013,8 +1008,7 @@
 		if (lstat(ent->name, &st))
 			die_errno("Cannot lstat '%s'", ent->name);
 
-		if (S_ISDIR(st.st_mode) && !remove_directories &&
-		    matches != MATCHED_EXACTLY)
+		if (S_ISDIR(st.st_mode) && !remove_directories)
 			continue;
 
 		rel = relative_path(ent->name, prefix, &buf);
diff --git a/builtin/clone.c b/builtin/clone.c
index 51e844a..66fe666 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -50,6 +50,8 @@
 static int option_local = -1, option_no_hardlinks, option_shared;
 static int option_no_tags;
 static int option_shallow_submodules;
+static int option_reject_shallow = -1;    /* unspecified */
+static int config_reject_shallow = -1;    /* unspecified */
 static int deepen;
 static char *option_template, *option_depth, *option_since;
 static char *option_origin = NULL;
@@ -90,6 +92,8 @@
 	OPT__VERBOSITY(&option_verbosity),
 	OPT_BOOL(0, "progress", &option_progress,
 		 N_("force progress reporting")),
+	OPT_BOOL(0, "reject-shallow", &option_reject_shallow,
+		 N_("don't clone shallow repository")),
 	OPT_BOOL('n', "no-checkout", &option_no_checkout,
 		 N_("don't create a checkout")),
 	OPT_BOOL(0, "bare", &option_bare, N_("create a bare repository")),
@@ -816,7 +820,7 @@
 	if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
 		die(_("unable to write new index file"));
 
-	err |= run_hook_le(NULL, "post-checkout", oid_to_hex(&null_oid),
+	err |= run_hook_le(NULL, "post-checkout", oid_to_hex(null_oid()),
 			   oid_to_hex(&oid), "1", NULL);
 
 	if (!err && (option_recurse_submodules.nr > 0)) {
@@ -858,6 +862,9 @@
 		free(remote_name);
 		remote_name = xstrdup(v);
 	}
+	if (!strcmp(k, "clone.rejectshallow"))
+		config_reject_shallow = git_config_bool(k, v);
+
 	return git_default_config(k, v, cb);
 }
 
@@ -963,11 +970,12 @@
 int cmd_clone(int argc, const char **argv, const char *prefix)
 {
 	int is_bundle = 0, is_local;
+	int reject_shallow = 0;
 	const char *repo_name, *repo, *work_tree, *git_dir;
-	char *path, *dir, *display_repo = NULL;
+	char *path = NULL, *dir, *display_repo = NULL;
 	int dest_exists, real_dest_exists = 0;
 	const struct ref *refs, *remote_head;
-	const struct ref *remote_head_points_at;
+	struct ref *remote_head_points_at = NULL;
 	const struct ref *our_head_points_at;
 	struct ref *mapped_refs;
 	const struct ref *ref;
@@ -1017,9 +1025,10 @@
 	repo_name = argv[0];
 
 	path = get_repo_path(repo_name, &is_bundle);
-	if (path)
+	if (path) {
+		FREE_AND_NULL(path);
 		repo = absolute_pathdup(repo_name);
-	else if (strchr(repo_name, ':')) {
+	} else if (strchr(repo_name, ':')) {
 		repo = repo_name;
 		display_repo = transport_anonymize_url(repo);
 	} else
@@ -1157,6 +1166,15 @@
 	git_config(git_clone_config, NULL);
 
 	/*
+	 * If option_reject_shallow is specified from CLI option,
+	 * ignore config_reject_shallow from git_clone_config.
+	 */
+	if (config_reject_shallow != -1)
+		reject_shallow = config_reject_shallow;
+	if (option_reject_shallow != -1)
+		reject_shallow = option_reject_shallow;
+
+	/*
 	 * apply the remote name provided by --origin only after this second
 	 * call to git_config, to ensure it overrides all config-based values.
 	 */
@@ -1216,6 +1234,8 @@
 		if (filter_options.choice)
 			warning(_("--filter is ignored in local clones; use file:// instead."));
 		if (!access(mkpath("%s/shallow", path), F_OK)) {
+			if (reject_shallow)
+				die(_("source repository is shallow, reject to clone."));
 			if (option_local > 0)
 				warning(_("source repository is shallow, ignoring --local"));
 			is_local = 0;
@@ -1227,6 +1247,8 @@
 
 	transport_set_option(transport, TRANS_OPT_KEEP, "yes");
 
+	if (reject_shallow)
+		transport_set_option(transport, TRANS_OPT_REJECT_SHALLOW, "1");
 	if (option_depth)
 		transport_set_option(transport, TRANS_OPT_DEPTH,
 				     option_depth);
@@ -1298,9 +1320,8 @@
 			}
 
 		if (!is_local && !complete_refs_before_fetch) {
-			err = transport_fetch_refs(transport, mapped_refs);
-			if (err)
-				goto cleanup;
+			if (transport_fetch_refs(transport, mapped_refs))
+				die(_("remote transport reported error"));
 		}
 
 		remote_head = find_ref_by_name(refs, "HEAD");
@@ -1358,9 +1379,8 @@
 	if (is_local)
 		clone_local(path, git_dir);
 	else if (refs && complete_refs_before_fetch) {
-		err = transport_fetch_refs(transport, mapped_refs);
-		if (err)
-			goto cleanup;
+		if (transport_fetch_refs(transport, mapped_refs))
+			die(_("remote transport reported error"));
 	}
 
 	update_remote_refs(refs, mapped_refs, remote_head_points_at,
@@ -1388,11 +1408,15 @@
 	junk_mode = JUNK_LEAVE_REPO;
 	err = checkout(submodule_progress);
 
-cleanup:
 	free(remote_name);
 	strbuf_release(&reflog_msg);
 	strbuf_release(&branch_top);
 	strbuf_release(&key);
+	free_refs(mapped_refs);
+	free_refs(remote_head_points_at);
+	free(dir);
+	free(path);
+	UNLEAK(repo);
 	junk_mode = JUNK_LEAVE_ALL;
 
 	strvec_clear(&transport_ls_refs_options.ref_prefixes);
diff --git a/builtin/column.c b/builtin/column.c
index e815e14..40d4b3b 100644
--- a/builtin/column.c
+++ b/builtin/column.c
@@ -27,10 +27,10 @@
 		OPT_STRING(0, "command", &real_command, N_("name"), N_("lookup config vars")),
 		OPT_COLUMN(0, "mode", &colopts, N_("layout to use")),
 		OPT_INTEGER(0, "raw-mode", &colopts, N_("layout to use")),
-		OPT_INTEGER(0, "width", &copts.width, N_("Maximum width")),
-		OPT_STRING(0, "indent", &copts.indent, N_("string"), N_("Padding space on left border")),
-		OPT_INTEGER(0, "nl", &copts.nl, N_("Padding space on right border")),
-		OPT_INTEGER(0, "padding", &copts.padding, N_("Padding space between columns")),
+		OPT_INTEGER(0, "width", &copts.width, N_("maximum width")),
+		OPT_STRING(0, "indent", &copts.indent, N_("string"), N_("padding space on left border")),
+		OPT_INTEGER(0, "nl", &copts.nl, N_("padding space on right border")),
+		OPT_INTEGER(0, "padding", &copts.padding, N_("padding space between columns")),
 		OPT_END()
 	};
 
diff --git a/builtin/commit.c b/builtin/commit.c
index 739110c..7436262 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -105,7 +105,8 @@
  */
 static const char *author_message, *author_message_buffer;
 static char *edit_message, *use_message;
-static char *fixup_message, *squash_message;
+static char *fixup_message, *fixup_commit, *squash_message;
+static const char *fixup_prefix;
 static int all, also, interactive, patch_interactive, only, amend, signoff;
 static int edit_flag = -1; /* unspecified */
 static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
@@ -113,6 +114,7 @@
 static int no_post_rewrite, allow_empty_message, pathspec_file_nul;
 static char *untracked_files_arg, *force_date, *ignore_submodule_arg, *ignored_arg;
 static char *sign_commit, *pathspec_from_file;
+static struct strvec trailer_args = STRVEC_INIT;
 
 /*
  * The default commit message cleanup mode will remove the lines
@@ -131,6 +133,14 @@
 
 static enum wt_status_format status_format = STATUS_FORMAT_UNSPECIFIED;
 
+static int opt_pass_trailer(const struct option *opt, const char *arg, int unset)
+{
+	BUG_ON_OPT_NEG(unset);
+
+	strvec_pushl(&trailer_args, "--trailer", arg, NULL);
+	return 0;
+}
+
 static int opt_parse_porcelain(const struct option *opt, const char *arg, int unset)
 {
 	enum wt_status_format *value = (enum wt_status_format *)opt->value;
@@ -251,6 +261,8 @@
 		free(max_prefix);
 	}
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&the_index);
 	for (i = 0; i < active_nr; i++) {
 		const struct cache_entry *ce = active_cache[i];
 		struct string_list_item *item;
@@ -357,7 +369,8 @@
 		die(_("--pathspec-file-nul requires --pathspec-from-file"));
 	}
 
-	if (!pathspec.nr && (also || (only && !amend && !allow_empty)))
+	if (!pathspec.nr && (also || (only && !allow_empty &&
+	    (!amend || (fixup_message && strcmp(fixup_prefix, "amend"))))))
 		die(_("No paths with --include/--only does not make sense."));
 
 	if (read_cache_preload(&pathspec) < 0)
@@ -681,6 +694,22 @@
 	comment_line_char = *p;
 }
 
+static void prepare_amend_commit(struct commit *commit, struct strbuf *sb,
+				struct pretty_print_context *ctx)
+{
+	const char *buffer, *subject, *fmt;
+
+	buffer = get_commit_buffer(commit, NULL);
+	find_commit_subject(buffer, &subject);
+	/*
+	 * If we amend the 'amend!' commit then we don't want to
+	 * duplicate the subject line.
+	 */
+	fmt = starts_with(subject, "amend!") ? "%b" : "%B";
+	format_commit_message(commit, fmt, sb, ctx);
+	unuse_commit_buffer(commit, buffer);
+}
+
 static int prepare_to_commit(const char *index_file, const char *prefix,
 			     struct commit *current_head,
 			     struct wt_status *s,
@@ -745,15 +774,33 @@
 	} else if (fixup_message) {
 		struct pretty_print_context ctx = {0};
 		struct commit *commit;
-		commit = lookup_commit_reference_by_name(fixup_message);
+		char *fmt;
+		commit = lookup_commit_reference_by_name(fixup_commit);
 		if (!commit)
-			die(_("could not lookup commit %s"), fixup_message);
+			die(_("could not lookup commit %s"), fixup_commit);
 		ctx.output_encoding = get_commit_output_encoding();
-		format_commit_message(commit, "fixup! %s\n\n",
-				      &sb, &ctx);
-		if (have_option_m)
-			strbuf_addbuf(&sb, &message);
+		fmt = xstrfmt("%s! %%s\n\n", fixup_prefix);
+		format_commit_message(commit, fmt, &sb, &ctx);
+		free(fmt);
 		hook_arg1 = "message";
+
+		/*
+		 * Only `-m` commit message option is checked here, as
+		 * it supports `--fixup` to append the commit message.
+		 *
+		 * The other commit message options `-c`/`-C`/`-F` are
+		 * incompatible with all the forms of `--fixup` and
+		 * have already errored out while parsing the `git commit`
+		 * options.
+		 */
+		if (have_option_m && !strcmp(fixup_prefix, "fixup"))
+			strbuf_addbuf(&sb, &message);
+
+		if (!strcmp(fixup_prefix, "amend")) {
+			if (have_option_m)
+				die(_("cannot combine -m with --fixup:%s"), fixup_message);
+			prepare_amend_commit(commit, &sb, &ctx);
+		}
 	} else if (!stat(git_path_merge_msg(the_repository), &statbuf)) {
 		size_t merge_msg_start;
 
@@ -842,7 +889,22 @@
 		int ident_shown = 0;
 		int saved_color_setting;
 		struct ident_split ci, ai;
-
+		const char *hint_cleanup_all = allow_empty_message ?
+			_("Please enter the commit message for your changes."
+			  " Lines starting\nwith '%c' will be ignored.\n") :
+			_("Please enter the commit message for your changes."
+			  " Lines starting\nwith '%c' will be ignored, and an empty"
+			  " message aborts the commit.\n");
+		const char *hint_cleanup_space = allow_empty_message ?
+			_("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") :
+			_("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");
 		if (whence != FROM_COMMIT) {
 			if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS &&
 				!merge_contains_scissors)
@@ -864,20 +926,12 @@
 
 		fprintf(s->fp, "\n");
 		if (cleanup_mode == COMMIT_MSG_CLEANUP_ALL)
-			status_printf(s, GIT_COLOR_NORMAL,
-				_("Please enter the commit message for your changes."
-				  " Lines starting\nwith '%c' will be ignored, and an empty"
-				  " message aborts the commit.\n"), comment_line_char);
+			status_printf(s, GIT_COLOR_NORMAL, hint_cleanup_all, comment_line_char);
 		else if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) {
 			if (whence == FROM_COMMIT && !merge_contains_scissors)
 				wt_status_add_cut_line(s->fp);
 		} else /* COMMIT_MSG_CLEANUP_SPACE, that is. */
-			status_printf(s, GIT_COLOR_NORMAL,
-				_("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"), comment_line_char);
+			status_printf(s, GIT_COLOR_NORMAL, hint_cleanup_space, comment_line_char);
 
 		/*
 		 * These should never fail because they come from our own
@@ -931,6 +985,8 @@
 		if (get_oid(parent, &oid)) {
 			int i, ita_nr = 0;
 
+			/* TODO: audit for interaction with sparse-index. */
+			ensure_full_index(&the_index);
 			for (i = 0; i < active_nr; i++)
 				if (ce_intent_to_add(active_cache[i]))
 					ita_nr++;
@@ -958,6 +1014,18 @@
 
 	fclose(s->fp);
 
+	if (trailer_args.nr) {
+		struct child_process run_trailer = CHILD_PROCESS_INIT;
+
+		strvec_pushl(&run_trailer.args, "interpret-trailers",
+			     "--in-place", git_path_commit_editmsg(), NULL);
+		strvec_pushv(&run_trailer.args, trailer_args.v);
+		run_trailer.git_cmd = 1;
+		if (run_command(&run_trailer))
+			die(_("unable to pass trailers to --trailers"));
+		strvec_clear(&trailer_args);
+	}
+
 	/*
 	 * Reject an attempt to record a non-merge empty commit without
 	 * explicit --allow-empty. In the cherry-pick case, it may be
@@ -1152,6 +1220,19 @@
 		s->ahead_behind_flags = AHEAD_BEHIND_FULL;
 }
 
+static void check_fixup_reword_options(int argc, const char *argv[]) {
+	if (whence != FROM_COMMIT) {
+		if (whence == FROM_MERGE)
+			die(_("You are in the middle of a merge -- cannot reword."));
+		else if (is_from_cherry_pick(whence))
+			die(_("You are in the middle of a cherry-pick -- cannot reword."));
+	}
+	if (argc)
+		die(_("cannot combine reword option of --fixup with path '%s'"), *argv);
+	if (patch_interactive || interactive || all || also || only)
+		die(_("reword option of --fixup is mutually exclusive with --patch/--interactive/--all/--include/--only"));
+}
+
 static int parse_and_validate_options(int argc, const char *argv[],
 				      const struct option *options,
 				      const char * const usage[],
@@ -1170,7 +1251,7 @@
 	if (force_author && renew_authorship)
 		die(_("Using both --reset-author and --author does not make sense"));
 
-	if (logfile || have_option_m || use_message || fixup_message)
+	if (logfile || have_option_m || use_message)
 		use_editor = 0;
 	if (0 <= edit_flag)
 		use_editor = edit_flag;
@@ -1227,6 +1308,42 @@
 
 	if (also + only + all + interactive > 1)
 		die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
+
+	if (fixup_message) {
+		/*
+		 * We limit --fixup's suboptions to only alpha characters.
+		 * If the first character after a run of alpha is colon,
+		 * then the part before the colon may be a known suboption
+		 * name like `amend` or `reword`, or a misspelt suboption
+		 * name. In either case, we treat it as
+		 * --fixup=<suboption>:<arg>.
+		 *
+		 * Otherwise, we are dealing with --fixup=<commit>.
+		 */
+		char *p = fixup_message;
+		while (isalpha(*p))
+			p++;
+		if (p > fixup_message && *p == ':') {
+			*p = '\0';
+			fixup_commit = p + 1;
+			if (!strcmp("amend", fixup_message) ||
+			    !strcmp("reword", fixup_message)) {
+				fixup_prefix = "amend";
+				allow_empty = 1;
+				if (*fixup_message == 'r') {
+					check_fixup_reword_options(argc, argv);
+					only = 1;
+				}
+			} else {
+				die(_("unknown option: --fixup=%s:%s"), fixup_message, fixup_commit);
+			}
+		} else {
+			fixup_commit = fixup_message;
+			fixup_prefix = "fixup";
+			use_editor = 0;
+		}
+	}
+
 	cleanup_mode = get_cleanup_mode(cleanup_arg, use_editor);
 
 	handle_untracked_files_arg(s);
@@ -1400,6 +1517,9 @@
 	if (argc == 2 && !strcmp(argv[1], "-h"))
 		usage_with_options(builtin_status_usage, builtin_status_options);
 
+	prepare_repo_settings(the_repository);
+	the_repository->settings.command_requires_full_index = 0;
+
 	status_init_config(&s, git_status_config);
 	argc = parse_options(argc, argv, prefix,
 			     builtin_status_options,
@@ -1504,9 +1624,14 @@
 		OPT_CALLBACK('m', "message", &message, N_("message"), N_("commit message"), opt_parse_m),
 		OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
 		OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
-		OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")),
+		/*
+		 * TRANSLATORS: Leave "[(amend|reword):]" as-is,
+		 * and only translate <commit>.
+		 */
+		OPT_STRING(0, "fixup", &fixup_message, N_("[(amend|reword):]commit"), N_("use autosquash formatted message to fixup or amend/reword specified commit")),
 		OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
 		OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
+		OPT_CALLBACK_F(0, "trailer", NULL, N_("trailer"), N_("add custom trailer(s)"), PARSE_OPT_NONEG, opt_pass_trailer),
 		OPT_BOOL('s', "signoff", &signoff, N_("add a Signed-off-by trailer")),
 		OPT_FILENAME('t', "template", &template_file, N_("use specified template file")),
 		OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")),
@@ -1663,6 +1788,19 @@
 		exit(1);
 	}
 
+	if (fixup_message && starts_with(sb.buf, "amend! ") &&
+	    !allow_empty_message) {
+		struct strbuf body = STRBUF_INIT;
+		size_t len = commit_subject_length(sb.buf);
+		strbuf_addstr(&body, sb.buf + len);
+		if (message_is_empty(&body, cleanup_mode)) {
+			rollback_index_files();
+			fprintf(stderr, _("Aborting commit due to empty commit message body.\n"));
+			exit(1);
+		}
+		strbuf_release(&body);
+	}
+
 	if (amend) {
 		const char *exclude_gpgsig[3] = { "gpgsig", "gpgsig-sha256", NULL };
 		extra = read_commit_extra_headers(current_head, exclude_gpgsig);
diff --git a/builtin/config.c b/builtin/config.c
index f71fa39..865fddd 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -671,9 +671,9 @@
 	}
 
 	if (use_global_config) {
-		char *user_config = expand_user_path("~/.gitconfig", 0);
-		char *xdg_config = xdg_config_home("config");
+		char *user_config, *xdg_config;
 
+		git_global_config(&user_config, &xdg_config);
 		if (!user_config)
 			/*
 			 * It is unknown if HOME/.gitconfig exists, so
@@ -695,7 +695,7 @@
 		}
 	}
 	else if (use_system_config) {
-		given_config_source.file = git_etc_gitconfig();
+		given_config_source.file = git_system_config();
 		given_config_source.scope = CONFIG_SCOPE_SYSTEM;
 	} else if (use_local_config) {
 		given_config_source.file = git_pathdup("config");
diff --git a/builtin/credential-cache--daemon.c b/builtin/credential-cache--daemon.c
index c61f123..4c6c89a 100644
--- a/builtin/credential-cache--daemon.c
+++ b/builtin/credential-cache--daemon.c
@@ -203,9 +203,10 @@
 
 static void serve_cache(const char *socket_path, int debug)
 {
+	struct unix_stream_listen_opts opts = UNIX_STREAM_LISTEN_OPTS_INIT;
 	int fd;
 
-	fd = unix_stream_listen(socket_path);
+	fd = unix_stream_listen(socket_path, &opts);
 	if (fd < 0)
 		die_errno("unable to bind to '%s'", socket_path);
 
diff --git a/builtin/credential-cache.c b/builtin/credential-cache.c
index 9b3f709..76a6ba3 100644
--- a/builtin/credential-cache.c
+++ b/builtin/credential-cache.c
@@ -14,7 +14,7 @@
 static int send_request(const char *socket, const struct strbuf *out)
 {
 	int got_data = 0;
-	int fd = unix_stream_connect(socket);
+	int fd = unix_stream_connect(socket, 0);
 
 	if (fd < 0)
 		return -1;
diff --git a/builtin/describe.c b/builtin/describe.c
index 40482d8..e912ba5 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -502,7 +502,7 @@
 {
 	struct rev_info revs;
 	struct strvec args = STRVEC_INIT;
-	struct process_commit_data pcd = { null_oid, oid, dst, &revs};
+	struct process_commit_data pcd = { *null_oid(), oid, dst, &revs};
 
 	strvec_pushl(&args, "internal: The first arg is not parsed",
 		     "--objects", "--in-commit-order", "--reverse", "HEAD",
diff --git a/builtin/diff-files.c b/builtin/diff-files.c
index bb85266..70103c4 100644
--- a/builtin/diff-files.c
+++ b/builtin/diff-files.c
@@ -54,6 +54,7 @@
 	}
 	if (!rev.diffopt.output_format)
 		rev.diffopt.output_format = DIFF_FORMAT_RAW;
+	rev.diffopt.rotate_to_strict = 1;
 
 	/*
 	 * Make sure there are NO revision (i.e. pending object) parameter,
diff --git a/builtin/diff-index.c b/builtin/diff-index.c
index c33d7af..cf09559 100644
--- a/builtin/diff-index.c
+++ b/builtin/diff-index.c
@@ -2,6 +2,7 @@
 #include "cache.h"
 #include "config.h"
 #include "diff.h"
+#include "diff-merges.h"
 #include "commit.h"
 #include "revision.h"
 #include "builtin.h"
@@ -27,6 +28,12 @@
 	rev.abbrev = 0;
 	prefix = precompose_argv_prefix(argc, argv, prefix);
 
+	/*
+	 * We need no diff for merges options, and we need to avoid conflict
+	 * with our own meaning of "-m".
+	 */
+	diff_merges_suppress_options_parsing();
+
 	argc = setup_revisions(argc, argv, &rev, NULL);
 	for (i = 1; i < argc; i++) {
 		const char *arg = argv[i];
@@ -35,12 +42,16 @@
 			option |= DIFF_INDEX_CACHED;
 		else if (!strcmp(arg, "--merge-base"))
 			option |= DIFF_INDEX_MERGE_BASE;
+		else if (!strcmp(arg, "-m"))
+			rev.match_missing = 1;
 		else
 			usage(diff_cache_usage);
 	}
 	if (!rev.diffopt.output_format)
 		rev.diffopt.output_format = DIFF_FORMAT_RAW;
 
+	rev.diffopt.rotate_to_strict = 1;
+
 	/*
 	 * Make sure there is one revision (i.e. pending object),
 	 * and there is no revision filtering parameters.
diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c
index 178d12f..f33d30d 100644
--- a/builtin/diff-tree.c
+++ b/builtin/diff-tree.c
@@ -156,6 +156,8 @@
 	if (merge_base && opt->pending.nr != 2)
 		die(_("--merge-base only works with two commits"));
 
+	opt->diffopt.rotate_to_strict = 1;
+
 	/*
 	 * NOTE!  We expect "a..b" to expand to "^a b" but it is
 	 * perfectly valid for revision range parser to yield "b ^a",
@@ -192,6 +194,7 @@
 		int saved_nrl = 0;
 		int saved_dcctc = 0;
 
+		opt->diffopt.rotate_to_strict = 0;
 		if (opt->diffopt.detect_rename) {
 			if (!the_index.cache)
 				repo_read_index(the_repository);
diff --git a/builtin/diff.c b/builtin/diff.c
index 0f4859a..dd8ce68 100644
--- a/builtin/diff.c
+++ b/builtin/diff.c
@@ -26,8 +26,8 @@
 
 static const char builtin_diff_usage[] =
 "git diff [<options>] [<commit>] [--] [<path>...]\n"
-"   or: git diff [<options>] --cached [<commit>] [--] [<path>...]\n"
-"   or: git diff [<options>] <commit> [--merge-base] [<commit>...] <commit> [--] [<path>...]\n"
+"   or: git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]\n"
+"   or: git diff [<options>] [--merge-base] <commit> [<commit>...] <commit> [--] [<path>...]\n"
 "   or: git diff [<options>] <commit>...<commit>] [--] [<path>...]\n"
 "   or: git diff [<options>] <blob> <blob>]\n"
 "   or: git diff [<options>] --no-index [--] <path> <path>]\n"
@@ -98,7 +98,7 @@
 
 	stuff_change(&revs->diffopt,
 		     blob[0]->mode, canon_mode(st.st_mode),
-		     &blob[0]->item->oid, &null_oid,
+		     &blob[0]->item->oid, null_oid(),
 		     1, 0,
 		     blob[0]->path ? blob[0]->path : path,
 		     path);
@@ -491,6 +491,7 @@
 	}
 
 	rev.diffopt.flags.recursive = 1;
+	rev.diffopt.rotate_to_strict = 1;
 
 	setup_diff_pager(&rev.diffopt);
 
diff --git a/builtin/difftool.c b/builtin/difftool.c
index 6e18e62..6a9242a 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -23,6 +23,7 @@
 #include "lockfile.h"
 #include "object-store.h"
 #include "dir.h"
+#include "entry.h"
 
 static int trust_exit_code;
 
@@ -322,7 +323,7 @@
 	struct cache_entry *ce;
 	int ret;
 
-	ce = make_transient_cache_entry(mode, oid, path, 0);
+	ce = make_transient_cache_entry(mode, oid, path, 0, NULL);
 	ret = checkout_entry(ce, state, NULL, NULL);
 
 	discard_cache_entry(ce);
@@ -584,6 +585,9 @@
 		setenv("GIT_DIFFTOOL_DIRDIFF", "true", 1);
 	rc = run_command_v_opt(helper_argv, flags);
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&wtindex);
+
 	/*
 	 * If the diff includes working copy files and those
 	 * files were modified during the diff, then the changes
@@ -671,7 +675,7 @@
 		"GIT_PAGER=", "GIT_EXTERNAL_DIFF=git-difftool--helper", NULL,
 		NULL
 	};
-	int ret = 0, i;
+	int i;
 
 	if (prompt > 0)
 		env[2] = "GIT_DIFFTOOL_PROMPT=true";
@@ -682,8 +686,7 @@
 	strvec_push(&args, "diff");
 	for (i = 0; i < argc; i++)
 		strvec_push(&args, argv[i]);
-	ret = run_command_v_opt_cd_env(args.v, RUN_GIT_CMD, prefix, env);
-	exit(ret);
+	return run_command_v_opt_cd_env(args.v, RUN_GIT_CMD, prefix, env);
 }
 
 int cmd_difftool(int argc, const char **argv, const char *prefix)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 85a76e0..3c20f16 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -870,7 +870,7 @@
 				p = rewrite_commit((struct commit *)tagged);
 				if (!p) {
 					printf("reset %s\nfrom %s\n\n",
-					       name, oid_to_hex(&null_oid));
+					       name, oid_to_hex(null_oid()));
 					free(buf);
 					return;
 				}
@@ -884,7 +884,7 @@
 
 	if (tagged->type == OBJ_TAG) {
 		printf("reset %s\nfrom %s\n\n",
-		       name, oid_to_hex(&null_oid));
+		       name, oid_to_hex(null_oid()));
 	}
 	skip_prefix(name, "refs/tags/", &name);
 	printf("tag %s\n", name);
@@ -1016,7 +1016,7 @@
 				 * it.
 				 */
 				printf("reset %s\nfrom %s\n\n",
-				       name, oid_to_hex(&null_oid));
+				       name, oid_to_hex(null_oid()));
 				continue;
 			}
 
@@ -1035,7 +1035,7 @@
 				if (!reference_excluded_commits) {
 					/* delete the ref */
 					printf("reset %s\nfrom %s\n\n",
-					       name, oid_to_hex(&null_oid));
+					       name, oid_to_hex(null_oid()));
 					continue;
 				}
 				/* set ref to commit using oid, not mark */
@@ -1146,7 +1146,7 @@
 			continue;
 
 		printf("reset %s\nfrom %s\n\n",
-				refspec->dst, oid_to_hex(&null_oid));
+				refspec->dst, oid_to_hex(null_oid()));
 	}
 }
 
diff --git a/builtin/fast-import.c b/builtin/fast-import.c
index dd4d09c..20406f6 100644
--- a/builtin/fast-import.c
+++ b/builtin/fast-import.c
@@ -940,7 +940,7 @@
 	the_hash_algo->init_fn(&c);
 	the_hash_algo->update_fn(&c, hdr, hdrlen);
 	the_hash_algo->update_fn(&c, dat->buf, dat->len);
-	the_hash_algo->final_fn(oid.hash, &c);
+	the_hash_algo->final_oid_fn(&oid, &c);
 	if (oidout)
 		oidcpy(oidout, &oid);
 
@@ -1136,7 +1136,7 @@
 		}
 	}
 	git_deflate_end(&s);
-	the_hash_algo->final_fn(oid.hash, &c);
+	the_hash_algo->final_oid_fn(&oid, &c);
 
 	if (oidout)
 		oidcpy(oidout, &oid);
@@ -1276,8 +1276,8 @@
 		e->versions[0].mode = e->versions[1].mode;
 		e->name = to_atom(c, strlen(c));
 		c += e->name->str_len + 1;
-		hashcpy(e->versions[0].oid.hash, (unsigned char *)c);
-		hashcpy(e->versions[1].oid.hash, (unsigned char *)c);
+		oidread(&e->versions[0].oid, (unsigned char *)c);
+		oidread(&e->versions[1].oid, (unsigned char *)c);
 		c += the_hash_algo->rawsz;
 	}
 	free(buf);
@@ -3322,7 +3322,7 @@
 		die(_("Expected format name:filename for submodule rewrite option"));
 	*f = '\0';
 	f++;
-	ms = xcalloc(1, sizeof(*ms));
+	CALLOC_ARRAY(ms, 1);
 
 	fp = fopen(f, "r");
 	if (!fp)
@@ -3519,9 +3519,9 @@
 
 	alloc_objects(object_entry_alloc);
 	strbuf_init(&command_buf, 0);
-	atom_table = xcalloc(atom_table_sz, sizeof(struct atom_str*));
-	branch_table = xcalloc(branch_table_sz, sizeof(struct branch*));
-	avail_tree_table = xcalloc(avail_tree_table_sz, sizeof(struct avail_tree_content*));
+	CALLOC_ARRAY(atom_table, atom_table_sz);
+	CALLOC_ARRAY(branch_table, branch_table_sz);
+	CALLOC_ARRAY(avail_tree_table, avail_tree_table_sz);
 	marks = mem_pool_calloc(&fi_mem_pool, 1, sizeof(struct mark_set));
 
 	hashmap_init(&object_table, object_entry_hashcmp, NULL, 0);
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 0b90de8..25740c1 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -48,6 +48,7 @@
 static int fetch_prune_config = -1; /* unspecified */
 static int fetch_show_forced_updates = 1;
 static uint64_t forced_updates_ms = 0;
+static int prefetch = 0;
 static int prune = -1; /* unspecified */
 #define PRUNE_BY_DEFAULT 0 /* do we prune by default? */
 
@@ -82,6 +83,7 @@
 static struct string_list negotiation_tip = STRING_LIST_INIT_NODUP;
 static int fetch_write_commit_graph = -1;
 static int stdin_refspecs = 0;
+static int negotiate_only;
 
 static int git_fetch_config(const char *k, const char *v, void *cb)
 {
@@ -158,6 +160,8 @@
 		    N_("do not fetch all tags (--no-tags)"), TAGS_UNSET),
 	OPT_INTEGER('j', "jobs", &max_jobs,
 		    N_("number of submodules fetched in parallel")),
+	OPT_BOOL(0, "prefetch", &prefetch,
+		 N_("modify the refspec to place all refs within refs/prefetch/")),
 	OPT_BOOL('p', "prune", &prune,
 		 N_("prune remote-tracking branches no longer on remote")),
 	OPT_BOOL('P', "prune-tags", &prune_tags,
@@ -202,6 +206,8 @@
 			TRANSPORT_FAMILY_IPV6),
 	OPT_STRING_LIST(0, "negotiation-tip", &negotiation_tip, N_("revision"),
 			N_("report that we have only objects reachable from this object")),
+	OPT_BOOL(0, "negotiate-only", &negotiate_only,
+		 N_("do not fetch a packfile; instead, print ancestors of negotiation tips")),
 	OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
 	OPT_BOOL(0, "auto-maintenance", &enable_auto_gc,
 		 N_("run 'maintenance --auto' after fetching")),
@@ -436,6 +442,56 @@
 	oidset_clear(&fetch_oids);
 }
 
+static void filter_prefetch_refspec(struct refspec *rs)
+{
+	int i;
+
+	if (!prefetch)
+		return;
+
+	for (i = 0; i < rs->nr; i++) {
+		struct strbuf new_dst = STRBUF_INIT;
+		char *old_dst;
+		const char *sub = NULL;
+
+		if (rs->items[i].negative)
+			continue;
+		if (!rs->items[i].dst ||
+		    (rs->items[i].src &&
+		     !strncmp(rs->items[i].src, "refs/tags/", 10))) {
+			int j;
+
+			free(rs->items[i].src);
+			free(rs->items[i].dst);
+
+			for (j = i + 1; j < rs->nr; j++) {
+				rs->items[j - 1] = rs->items[j];
+				rs->raw[j - 1] = rs->raw[j];
+			}
+			rs->nr--;
+			i--;
+			continue;
+		}
+
+		old_dst = rs->items[i].dst;
+		strbuf_addstr(&new_dst, "refs/prefetch/");
+
+		/*
+		 * If old_dst starts with "refs/", then place
+		 * sub after that prefix. Otherwise, start at
+		 * the beginning of the string.
+		 */
+		if (!skip_prefix(old_dst, "refs/", &sub))
+			sub = old_dst;
+		strbuf_addstr(&new_dst, sub);
+
+		rs->items[i].dst = strbuf_detach(&new_dst, NULL);
+		rs->items[i].force = 1;
+
+		free(old_dst);
+	}
+}
+
 static struct ref *get_ref_map(struct remote *remote,
 			       const struct ref *remote_refs,
 			       struct refspec *rs,
@@ -452,6 +508,10 @@
 	struct hashmap existing_refs;
 	int existing_refs_populated = 0;
 
+	filter_prefetch_refspec(rs);
+	if (remote)
+		filter_prefetch_refspec(&remote->fetch);
+
 	if (rs->nr) {
 		struct refspec *fetch_refspec;
 
@@ -520,7 +580,7 @@
 			if (has_merge &&
 			    !strcmp(branch->remote_name, remote->name))
 				add_merge_config(&ref_map, remote_refs, branch, &tail);
-		} else {
+		} else if (!prefetch) {
 			ref_map = get_remote_ref(remote_refs, "HEAD");
 			if (!ref_map)
 				die(_("Couldn't find remote ref HEAD"));
@@ -1066,7 +1126,7 @@
 
 			if (rm->status == REF_STATUS_REJECT_SHALLOW) {
 				if (want_status == FETCH_HEAD_MERGE)
-					warning(_("reject %s because shallow roots are not allowed to be updated"),
+					warning(_("rejected %s because shallow roots are not allowed to be updated"),
 						rm->peer_ref ? rm->peer_ref->name : rm->name);
 				continue;
 			}
@@ -1930,6 +1990,9 @@
 		fetch_config_from_gitmodules(sfjc, rs);
 	}
 
+	if (negotiate_only && !negotiation_tip.nr)
+		die(_("--negotiate-only needs one or more --negotiate-tip=*"));
+
 	if (deepen_relative) {
 		if (deepen_relative < 0)
 			die(_("Negative depth in --deepen is not supported"));
@@ -1986,7 +2049,29 @@
 		}
 	}
 
-	if (remote) {
+	if (negotiate_only) {
+		struct oidset acked_commits = OIDSET_INIT;
+		struct oidset_iter iter;
+		const struct object_id *oid;
+
+		if (!remote)
+			die(_("must supply remote when using --negotiate-only"));
+		gtransport = prepare_transport(remote, 1);
+		if (gtransport->smart_options) {
+			gtransport->smart_options->acked_commits = &acked_commits;
+		} else {
+			warning(_("Protocol does not support --negotiate-only, exiting."));
+			return 1;
+		}
+		if (server_options.nr)
+			gtransport->server_options = &server_options;
+		result = transport_fetch_refs(gtransport, NULL);
+
+		oidset_iter_init(&acked_commits, &iter);
+		while ((oid = oidset_iter_next(&iter)))
+			printf("%s\n", oid_to_hex(oid));
+		oidset_clear(&acked_commits);
+	} else if (remote) {
 		if (filter_options.choice || has_promisor_remote())
 			fetch_one_setup_partial(remote);
 		result = fetch_one(remote, argc, argv, prune_tags_ok, stdin_refspecs);
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index cb9c81a..89cb630 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -22,6 +22,8 @@
 	struct ref_array array;
 	struct ref_filter filter;
 	struct ref_format format = REF_FORMAT_INIT;
+	struct strbuf output = STRBUF_INIT;
+	struct strbuf err = STRBUF_INIT;
 
 	struct option opts[] = {
 		OPT_BIT('s', "shell", &format.quote_style,
@@ -80,8 +82,20 @@
 
 	if (!maxcount || array.nr < maxcount)
 		maxcount = array.nr;
-	for (i = 0; i < maxcount; i++)
-		show_ref_array_item(array.items[i], &format);
+	for (i = 0; i < maxcount; i++) {
+		strbuf_reset(&err);
+		strbuf_reset(&output);
+		if (format_ref_array_item(array.items[i], &format, &output, &err))
+			die("%s", err.buf);
+		fwrite(output.buf, 1, output.len, stdout);
+		putchar('\n');
+	}
+
+	strbuf_release(&err);
+	strbuf_release(&output);
 	ref_array_clear(&array);
+	free_commit_list(filter.with_commit);
+	free_commit_list(filter.no_commit);
+	UNLEAK(sorting);
 	return 0;
 }
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 821e779..b42b6fe 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -71,11 +71,6 @@
 	return ret;
 }
 
-static int fsck_config(const char *var, const char *value, void *cb)
-{
-	return fsck_config_internal(var, value, cb, &fsck_obj_options);
-}
-
 static int objerror(struct object *obj, const char *err)
 {
 	errors_found |= ERROR_OBJECT;
@@ -89,7 +84,9 @@
 static int fsck_error_func(struct fsck_options *o,
 			   const struct object_id *oid,
 			   enum object_type object_type,
-			   int msg_type, const char *message)
+			   enum fsck_msg_type msg_type,
+			   enum fsck_msg_id msg_id,
+			   const char *message)
 {
 	switch (msg_type) {
 	case FSCK_WARN:
@@ -112,7 +109,8 @@
 
 static struct object_array pending;
 
-static int mark_object(struct object *obj, int type, void *data, struct fsck_options *options)
+static int mark_object(struct object *obj, enum object_type type,
+		       void *data, struct fsck_options *options)
 {
 	struct object *parent = data;
 
@@ -197,7 +195,8 @@
 	return !!result;
 }
 
-static int mark_used(struct object *obj, int type, void *data, struct fsck_options *options)
+static int mark_used(struct object *obj, enum object_type object_type,
+		     void *data, struct fsck_options *options)
 {
 	if (!obj)
 		return 1;
@@ -727,7 +726,7 @@
 
 static void mark_object_for_connectivity(const struct object_id *oid)
 {
-	struct object *obj = lookup_unknown_object(oid);
+	struct object *obj = lookup_unknown_object(the_repository, oid);
 	obj->flags |= HAS_OBJ;
 }
 
@@ -803,7 +802,7 @@
 	if (name_objects)
 		fsck_enable_object_names(&fsck_walk_options);
 
-	git_config(fsck_config, NULL);
+	git_config(git_fsck_config, &fsck_obj_options);
 
 	if (connectivity_only) {
 		for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
@@ -883,6 +882,8 @@
 		verify_index_checksum = 1;
 		verify_ce_order = 1;
 		read_cache();
+		/* TODO: audit for interaction with sparse-index. */
+		ensure_full_index(&the_index);
 		for (i = 0; i < active_nr; i++) {
 			unsigned int mode;
 			struct blob *blob;
diff --git a/builtin/gc.c b/builtin/gc.c
index 6db9cb3..f05d2f0 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -873,55 +873,40 @@
 	return 0;
 }
 
-static int fetch_remote(const char *remote, struct maintenance_run_opts *opts)
+static int fetch_remote(struct remote *remote, void *cbdata)
 {
+	struct maintenance_run_opts *opts = cbdata;
 	struct child_process child = CHILD_PROCESS_INIT;
 
+	if (remote->skip_default_update)
+		return 0;
+
 	child.git_cmd = 1;
-	strvec_pushl(&child.args, "fetch", remote, "--prune", "--no-tags",
+	strvec_pushl(&child.args, "fetch", remote->name,
+		     "--prefetch", "--prune", "--no-tags",
 		     "--no-write-fetch-head", "--recurse-submodules=no",
-		     "--refmap=", NULL);
+		     NULL);
 
 	if (opts->quiet)
 		strvec_push(&child.args, "--quiet");
 
-	strvec_pushf(&child.args, "+refs/heads/*:refs/prefetch/%s/*", remote);
-
 	return !!run_command(&child);
 }
 
-static int append_remote(struct remote *remote, void *cbdata)
-{
-	struct string_list *remotes = (struct string_list *)cbdata;
-
-	string_list_append(remotes, remote->name);
-	return 0;
-}
-
 static int maintenance_task_prefetch(struct maintenance_run_opts *opts)
 {
-	int result = 0;
-	struct string_list_item *item;
-	struct string_list remotes = STRING_LIST_INIT_DUP;
-
 	git_config_set_multivar_gently("log.excludedecoration",
 					"refs/prefetch/",
 					"refs/prefetch/",
 					CONFIG_FLAGS_FIXED_VALUE |
 					CONFIG_FLAGS_MULTI_REPLACE);
 
-	if (for_each_remote(append_remote, &remotes)) {
-		error(_("failed to fill remotes"));
-		result = 1;
-		goto cleanup;
+	if (for_each_remote(fetch_remote, opts)) {
+		error(_("failed to prefetch remotes"));
+		return 1;
 	}
 
-	for_each_string_list_item(item, &remotes)
-		result |= fetch_remote(item->string, opts);
-
-cleanup:
-	string_list_clear(&remotes, 0);
-	return result;
+	return 0;
 }
 
 static int maintenance_task_gc(struct maintenance_run_opts *opts)
@@ -1461,11 +1446,23 @@
 	return maintenance_run_tasks(&opts);
 }
 
+static char *get_maintpath(void)
+{
+	struct strbuf sb = STRBUF_INIT;
+	const char *p = the_repository->worktree ?
+		the_repository->worktree : the_repository->gitdir;
+
+	strbuf_realpath(&sb, p, 1);
+	return strbuf_detach(&sb, NULL);
+}
+
 static int maintenance_register(void)
 {
+	int rc;
 	char *config_value;
 	struct child_process config_set = CHILD_PROCESS_INIT;
 	struct child_process config_get = CHILD_PROCESS_INIT;
+	char *maintpath = get_maintpath();
 
 	/* Disable foreground maintenance */
 	git_config_set("maintenance.auto", "false");
@@ -1478,40 +1475,44 @@
 
 	config_get.git_cmd = 1;
 	strvec_pushl(&config_get.args, "config", "--global", "--get",
-		     "--fixed-value", "maintenance.repo",
-		     the_repository->worktree ? the_repository->worktree
-					      : the_repository->gitdir,
-			 NULL);
+		     "--fixed-value", "maintenance.repo", maintpath, NULL);
 	config_get.out = -1;
 
-	if (start_command(&config_get))
-		return error(_("failed to run 'git config'"));
+	if (start_command(&config_get)) {
+		rc = error(_("failed to run 'git config'"));
+		goto done;
+	}
 
 	/* We already have this value in our config! */
-	if (!finish_command(&config_get))
-		return 0;
+	if (!finish_command(&config_get)) {
+		rc = 0;
+		goto done;
+	}
 
 	config_set.git_cmd = 1;
 	strvec_pushl(&config_set.args, "config", "--add", "--global", "maintenance.repo",
-		     the_repository->worktree ? the_repository->worktree
-					      : the_repository->gitdir,
-		     NULL);
+		     maintpath, NULL);
 
-	return run_command(&config_set);
+	rc = run_command(&config_set);
+
+done:
+	free(maintpath);
+	return rc;
 }
 
 static int maintenance_unregister(void)
 {
+	int rc;
 	struct child_process config_unset = CHILD_PROCESS_INIT;
+	char *maintpath = get_maintpath();
 
 	config_unset.git_cmd = 1;
 	strvec_pushl(&config_unset.args, "config", "--global", "--unset",
-		     "--fixed-value", "maintenance.repo",
-		     the_repository->worktree ? the_repository->worktree
-					      : the_repository->gitdir,
-		     NULL);
+		     "--fixed-value", "maintenance.repo", maintpath, NULL);
 
-	return run_command(&config_unset);
+	rc = run_command(&config_unset);
+	free(maintpath);
+	return rc;
 }
 
 static const char *get_frequency(enum schedule_priority schedule)
@@ -1908,6 +1909,7 @@
 		else if (!in_old_region)
 			fprintf(cron_in, "%s\n", line.buf);
 	}
+	strbuf_release(&line);
 
 	if (run_maintenance) {
 		struct strbuf line_format = STRBUF_INIT;
@@ -1970,8 +1972,10 @@
 		cmd = sep + 1;
 	}
 
-	if (hold_lock_file_for_update(&lk, lock_path, LOCK_NO_DEREF) < 0)
-		return error(_("another process is scheduling background maintenance"));
+	if (hold_lock_file_for_update(&lk, lock_path, LOCK_NO_DEREF) < 0) {
+		result = error(_("another process is scheduling background maintenance"));
+		goto cleanup;
+	}
 
 	if (!strcmp(scheduler, "launchctl"))
 		result = launchctl_update_schedule(enable, get_lock_file_fd(&lk), cmd);
@@ -1983,6 +1987,9 @@
 		die("unknown background scheduler: %s", scheduler);
 
 	rollback_lock_file(&lk);
+
+cleanup:
+	free(lock_path);
 	free(testing);
 	return result;
 }
diff --git a/builtin/grep.c b/builtin/grep.c
index e348e6b..7d2f8e5 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -211,7 +211,7 @@
 		strbuf_init(&todo[i].out, 0);
 	}
 
-	threads = xcalloc(num_threads, sizeof(*threads));
+	CALLOC_ARRAY(threads, num_threads);
 	for (i = 0; i < num_threads; i++) {
 		int err;
 		struct grep_opt *o = grep_opt_dup(opt);
@@ -421,7 +421,7 @@
 	struct grep_opt subopt;
 	int hit;
 
-	sub = submodule_from_path(superproject, &null_oid, path);
+	sub = submodule_from_path(superproject, null_oid(), path);
 
 	if (!is_submodule_active(superproject, path))
 		return 0;
@@ -504,8 +504,14 @@
 	if (repo_read_index(repo) < 0)
 		die(_("index file corrupt"));
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(repo->index);
 	for (nr = 0; nr < repo->index->cache_nr; nr++) {
 		const struct cache_entry *ce = repo->index->cache[nr];
+
+		if (!cached && ce_skip_worktree(ce))
+			continue;
+
 		strbuf_setlen(&name, name_base_len);
 		strbuf_addstr(&name, ce->name);
 
@@ -518,8 +524,7 @@
 			 * cache entry are identical, even if worktree file has
 			 * been modified, so use cache version instead
 			 */
-			if (cached || (ce->ce_flags & CE_VALID) ||
-			    ce_skip_worktree(ce)) {
+			if (cached || (ce->ce_flags & CE_VALID)) {
 				if (ce_stage(ce) || ce_intent_to_add(ce))
 					continue;
 				hit |= grep_oid(opt, &ce->oid, name.buf,
@@ -699,10 +704,9 @@
 static int grep_directory(struct grep_opt *opt, const struct pathspec *pathspec,
 			  int exc_std, int use_index)
 {
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 	int i, hit = 0;
 
-	dir_init(&dir);
 	if (!use_index)
 		dir.flags |= DIR_NO_GITLINKS;
 	if (exc_std)
@@ -1178,6 +1182,5 @@
 		run_pager(&opt, prefix);
 	clear_pathspec(&pathspec);
 	free_grep_patterns(&opt);
-	grep_destroy();
 	return !hit;
 }
diff --git a/builtin/help.c b/builtin/help.c
index bb339f0..b7eec06 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -436,10 +436,9 @@
 		warning(_("'%s': unknown man viewer."), name);
 }
 
-static void show_man_page(const char *git_cmd)
+static void show_man_page(const char *page)
 {
 	struct man_viewer_list *viewer;
-	const char *page = cmd_to_page(git_cmd);
 	const char *fallback = getenv("GIT_MAN_VIEWER");
 
 	setup_man_path();
@@ -453,9 +452,8 @@
 	die(_("no man viewer handled the request"));
 }
 
-static void show_info_page(const char *git_cmd)
+static void show_info_page(const char *page)
 {
-	const char *page = cmd_to_page(git_cmd);
 	setenv("INFOPATH", system_path(GIT_INFO_PATH), 1);
 	execlp("info", "info", "gitman", page, (char *)NULL);
 	die(_("no info viewer handled the request"));
@@ -486,9 +484,8 @@
 	execl_git_cmd("web--browse", "-c", "help.browser", path, (char *)NULL);
 }
 
-static void show_html_page(const char *git_cmd)
+static void show_html_page(const char *page)
 {
-	const char *page = cmd_to_page(git_cmd);
 	struct strbuf page_path; /* it leaks but we exec bellow */
 
 	get_html_page_path(&page_path, page);
@@ -548,6 +545,7 @@
 {
 	int nongit;
 	enum help_format parsed_help_format;
+	const char *page;
 
 	argc = parse_options(argc, argv, prefix, builtin_help_options,
 			builtin_help_usage, 0);
@@ -606,16 +604,17 @@
 
 	argv[0] = check_git_cmd(argv[0]);
 
+	page = cmd_to_page(argv[0]);
 	switch (help_format) {
 	case HELP_FORMAT_NONE:
 	case HELP_FORMAT_MAN:
-		show_man_page(argv[0]);
+		show_man_page(page);
 		break;
 	case HELP_FORMAT_INFO:
-		show_info_page(argv[0]);
+		show_info_page(page);
 		break;
 	case HELP_FORMAT_WEB:
-		show_html_page(argv[0]);
+		show_html_page(page);
 		break;
 	}
 
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 54f74c4..8336466 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -120,7 +120,7 @@
 static int from_stdin;
 static int strict;
 static int do_fsck_object;
-static struct fsck_options fsck_options = FSCK_OPTIONS_STRICT;
+static struct fsck_options fsck_options = FSCK_OPTIONS_MISSING_GITMODULES;
 static int verbose;
 static int show_resolving_progress;
 static int show_stat;
@@ -185,7 +185,7 @@
 	if (show_stat)
 		pthread_mutex_init(&deepest_delta_mutex, NULL);
 	pthread_key_create(&key, NULL);
-	thread_data = xcalloc(nr_threads, sizeof(*thread_data));
+	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)
@@ -212,7 +212,8 @@
 	free(thread_data);
 }
 
-static int mark_link(struct object *obj, int type, void *data, struct fsck_options *options)
+static int mark_link(struct object *obj, enum object_type type,
+		     void *data, struct fsck_options *options)
 {
 	if (!obj)
 		return -1;
@@ -368,9 +369,7 @@
 	use(sizeof(struct pack_header));
 }
 
-static NORETURN void bad_object(off_t offset, const char *format,
-		       ...) __attribute__((format (printf, 2, 3)));
-
+__attribute__((format (printf, 2, 3)))
 static NORETURN void bad_object(off_t offset, const char *format, ...)
 {
 	va_list params;
@@ -488,7 +487,7 @@
 		bad_object(offset, _("inflate returned %d"), status);
 	git_inflate_end(&stream);
 	if (oid)
-		the_hash_algo->final_fn(oid->hash, &c);
+		the_hash_algo->final_oid_fn(oid, &c);
 	return buf == fixed_buf ? NULL : buf;
 }
 
@@ -523,7 +522,7 @@
 
 	switch (obj->type) {
 	case OBJ_REF_DELTA:
-		hashcpy(ref_oid->hash, fill(the_hash_algo->rawsz));
+		oidread(ref_oid, fill(the_hash_algo->rawsz));
 		use(the_hash_algo->rawsz);
 		break;
 	case OBJ_OFS_DELTA:
@@ -1357,7 +1356,7 @@
 	obj[1].idx.offset += write_compressed(f, buf, size);
 	obj[0].idx.crc32 = crc32_end(f);
 	hashflush(f);
-	hashcpy(obj->idx.oid.hash, sha1);
+	oidread(&obj->idx.oid, sha1);
 	return obj;
 }
 
@@ -1674,7 +1673,7 @@
 	unsigned long *chain_histogram = NULL;
 
 	if (deepest_delta)
-		chain_histogram = xcalloc(deepest_delta, sizeof(unsigned long));
+		CALLOC_ARRAY(chain_histogram, deepest_delta);
 
 	for (i = 0; i < nr_objects; i++) {
 		struct object_entry *obj = &objects[i];
@@ -1896,10 +1895,10 @@
 
 	curr_pack = open_pack_file(pack_name);
 	parse_pack_header();
-	objects = xcalloc(st_add(nr_objects, 1), sizeof(struct object_entry));
+	CALLOC_ARRAY(objects, st_add(nr_objects, 1));
 	if (show_stat)
-		obj_stat = xcalloc(st_add(nr_objects, 1), sizeof(struct object_stat));
-	ofs_deltas = xcalloc(nr_objects, sizeof(struct ofs_delta_entry));
+		CALLOC_ARRAY(obj_stat, st_add(nr_objects, 1));
+	CALLOC_ARRAY(ofs_deltas, nr_objects);
 	parse_pack_objects(pack_hash);
 	if (report_end_of_input)
 		write_in_full(2, "\0", 1);
diff --git a/builtin/init-db.c b/builtin/init-db.c
index dcc45be..2167796 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -25,7 +25,6 @@
 
 static int init_is_bare_repository = 0;
 static int init_shared_repository = -1;
-static const char *init_db_template_dir;
 
 static void copy_templates_1(struct strbuf *path, struct strbuf *template_path,
 			     DIR *dir)
@@ -94,7 +93,7 @@
 	}
 }
 
-static void copy_templates(const char *template_dir)
+static void copy_templates(const char *template_dir, const char *init_template_dir)
 {
 	struct strbuf path = STRBUF_INIT;
 	struct strbuf template_path = STRBUF_INIT;
@@ -107,7 +106,7 @@
 	if (!template_dir)
 		template_dir = getenv(TEMPLATE_DIR_ENVIRONMENT);
 	if (!template_dir)
-		template_dir = init_db_template_dir;
+		template_dir = init_template_dir;
 	if (!template_dir)
 		template_dir = to_free = system_path(DEFAULT_GIT_TEMPLATE_DIR);
 	if (!template_dir[0]) {
@@ -154,17 +153,6 @@
 	clear_repository_format(&template_format);
 }
 
-static int git_init_db_config(const char *k, const char *v, void *cb)
-{
-	if (!strcmp(k, "init.templatedir"))
-		return git_config_pathname(&init_db_template_dir, k, v);
-
-	if (starts_with(k, "core."))
-		return platform_core_config(k, v, cb);
-
-	return 0;
-}
-
 /*
  * If the git_dir is not directly inside the working tree, then git will not
  * find it by default, and we need to set the worktree explicitly.
@@ -212,10 +200,8 @@
 	int reinit;
 	int filemode;
 	struct strbuf err = STRBUF_INIT;
-
-	/* Just look for `init.templatedir` */
-	init_db_template_dir = NULL; /* re-set in case it was set before */
-	git_config(git_init_db_config, NULL);
+	const char *init_template_dir = NULL;
+	const char *work_tree = get_git_work_tree();
 
 	/*
 	 * First copy the templates -- we might have the default
@@ -226,7 +212,9 @@
 	 * values (since we've just potentially changed what's available on
 	 * disk).
 	 */
-	copy_templates(template_path);
+	git_config_get_pathname("init.templatedir", &init_template_dir);
+	copy_templates(template_path, init_template_dir);
+	free((char *)init_template_dir);
 	git_config_clear();
 	reset_shared_repository();
 	git_config(git_default_config, NULL);
@@ -235,7 +223,7 @@
 	 * We must make sure command-line options continue to override any
 	 * values we might have just re-read from the config.
 	 */
-	is_bare_repository_cfg = init_is_bare_repository;
+	is_bare_repository_cfg = init_is_bare_repository || !work_tree;
 	if (init_shared_repository != -1)
 		set_shared_repository(init_shared_repository);
 
@@ -299,7 +287,6 @@
 	if (is_bare_repository())
 		git_config_set("core.bare", "true");
 	else {
-		const char *work_tree = get_git_work_tree();
 		git_config_set("core.bare", "false");
 		/* allow template config file to override the default */
 		if (log_all_ref_updates == LOG_REFS_UNSET)
@@ -422,8 +409,8 @@
 	}
 	startup_info->have_repository = 1;
 
-	/* Just look for `core.hidedotfiles` */
-	git_config(git_init_db_config, NULL);
+	/* Ensure `core.hidedotfiles` is processed */
+	git_config(platform_core_config, NULL);
 
 	safe_create_dir(git_dir, 0);
 
@@ -575,8 +562,10 @@
 	if (real_git_dir && !is_absolute_path(real_git_dir))
 		real_git_dir = real_pathdup(real_git_dir, 1);
 
-	if (template_dir && *template_dir && !is_absolute_path(template_dir))
+	if (template_dir && *template_dir && !is_absolute_path(template_dir)) {
 		template_dir = absolute_pathdup(template_dir);
+		UNLEAK(template_dir);
+	}
 
 	if (argc == 1) {
 		int mkdir_tried = 0;
diff --git a/builtin/log.c b/builtin/log.c
index f67b67d..3d7717b 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -245,6 +245,9 @@
 			rev->abbrev_commit = 0;
 	}
 
+	if (rev->commit_format == CMIT_FMT_USERFORMAT && !w.decorate)
+		decoration_style = 0;
+
 	if (decoration_style) {
 		const struct string_list *config_exclude =
 			repo_config_get_value_multi(the_repository,
@@ -481,6 +484,8 @@
 			decoration_style = 0; /* maybe warn? */
 		return 0;
 	}
+	if (!strcmp(var, "log.diffmerges"))
+		return diff_merges_config(value);
 	if (!strcmp(var, "log.showroot")) {
 		default_show_root = git_config_bool(var, value);
 		return 0;
@@ -599,7 +604,7 @@
 
 static int show_tree_object(const struct object_id *oid,
 		struct strbuf *base,
-		const char *pathname, unsigned mode, int stage, void *context)
+		const char *pathname, unsigned mode, void *context)
 {
 	FILE *file = context;
 	fprintf(file, "%s%s\n", pathname, S_ISDIR(mode) ? "/" : "");
@@ -681,9 +686,9 @@
 					diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
 					name,
 					diff_get_color_opt(&rev.diffopt, DIFF_RESET));
-			read_tree_recursive(the_repository, (struct tree *)o, "",
-					    0, 0, &match_all, show_tree_object,
-					    rev.diffopt.file);
+			read_tree(the_repository, (struct tree *)o,
+				  &match_all, show_tree_object,
+				  rev.diffopt.file);
 			rev.shown_one = 1;
 			break;
 		case OBJ_COMMIT:
@@ -1662,13 +1667,19 @@
 	oidclr(&bases->base_commit);
 }
 
-static const char *diff_title(struct strbuf *sb, int reroll_count,
-		       const char *generic, const char *rerolled)
+static const char *diff_title(struct strbuf *sb,
+			      const char *reroll_count,
+			      const char *generic,
+			      const char *rerolled)
 {
-	if (reroll_count <= 0)
+	int v;
+
+	/* RFC may be v0, so allow -v1 to diff against v0 */
+	if (reroll_count && !strtol_i(reroll_count, 10, &v) &&
+	    v >= 1)
+		strbuf_addf(sb, rerolled, v - 1);
+	else
 		strbuf_addstr(sb, generic);
-	else /* RFC may be v0, so allow -v1 to diff against v0 */
-		strbuf_addf(sb, rerolled, reroll_count - 1);
 	return sb->buf;
 }
 
@@ -1717,7 +1728,7 @@
 	struct strbuf buf = STRBUF_INIT;
 	int use_patch_format = 0;
 	int quiet = 0;
-	int reroll_count = -1;
+	const char *reroll_count = NULL;
 	char *cover_from_description_arg = NULL;
 	char *branch_name = NULL;
 	char *base_commit = NULL;
@@ -1751,7 +1762,7 @@
 			    N_("use <sfx> instead of '.patch'")),
 		OPT_INTEGER(0, "start-number", &start_number,
 			    N_("start numbering patches at <n> instead of 1")),
-		OPT_INTEGER('v', "reroll-count", &reroll_count,
+		OPT_STRING('v', "reroll-count", &reroll_count, N_("reroll-count"),
 			    N_("mark the series as Nth re-roll")),
 		OPT_INTEGER(0, "filename-max-length", &fmt_patch_name_max,
 			    N_("max length of output filename")),
@@ -1862,9 +1873,10 @@
 	if (cover_from_description_arg)
 		cover_from_description_mode = parse_cover_from_description(cover_from_description_arg);
 
-	if (0 < reroll_count) {
+	if (reroll_count) {
 		struct strbuf sprefix = STRBUF_INIT;
-		strbuf_addf(&sprefix, "%s v%d",
+
+		strbuf_addf(&sprefix, "%s v%s",
 			    rev.subject_prefix, reroll_count);
 		rev.reroll_count = reroll_count;
 		rev.subject_prefix = strbuf_detach(&sprefix, NULL);
@@ -1959,8 +1971,7 @@
 	} else if (rev.diffopt.close_file) {
 		/*
 		 * The diff code parsed --output; it has already opened the
-		 * file, but but we must instruct it not to close after each
-		 * diff.
+		 * file, but we must instruct it not to close after each diff.
 		 */
 		rev.diffopt.no_free = 1;
 	} else {
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index f6f9e48..29a26ad 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -12,6 +12,7 @@
 #include "dir.h"
 #include "builtin.h"
 #include "tree.h"
+#include "cache-tree.h"
 #include "parse-options.h"
 #include "resolve-undo.h"
 #include "string-list.h"
@@ -56,7 +57,7 @@
 static const char *tag_skip_worktree = "";
 static const char *tag_resolve_undo = "";
 
-static void write_eolinfo(const struct index_state *istate,
+static void write_eolinfo(struct index_state *istate,
 			  const struct cache_entry *ce, const char *path)
 {
 	if (show_eol) {
@@ -121,7 +122,7 @@
 	}
 }
 
-static void show_dir_entry(const struct index_state *istate,
+static void show_dir_entry(struct index_state *istate,
 			   const char *tag, struct dir_entry *ent)
 {
 	int len = max_prefix_len;
@@ -138,7 +139,7 @@
 	write_name(ent->name);
 }
 
-static void show_other_files(const struct index_state *istate,
+static void show_other_files(struct index_state *istate,
 			     const struct dir_struct *dir)
 {
 	int i;
@@ -151,7 +152,7 @@
 	}
 }
 
-static void show_killed_files(const struct index_state *istate,
+static void show_killed_files(struct index_state *istate,
 			      const struct dir_struct *dir)
 {
 	int i;
@@ -209,7 +210,7 @@
 {
 	struct repository subrepo;
 	const struct submodule *sub = submodule_from_path(superproject,
-							  &null_oid, path);
+							  null_oid(), path);
 
 	if (repo_submodule_init(&subrepo, superproject, sub))
 		return;
@@ -253,7 +254,7 @@
 	}
 }
 
-static void show_ru_info(const struct index_state *istate)
+static void show_ru_info(struct index_state *istate)
 {
 	struct string_list_item *item;
 
@@ -316,6 +317,8 @@
 
 	if (!(show_cached || show_stage || show_deleted || show_modified))
 		return;
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(repo->index);
 	for (i = 0; i < repo->index->cache_nr; i++) {
 		const struct cache_entry *ce = repo->index->cache[i];
 		struct stat st;
@@ -420,6 +423,53 @@
 	return common_prefix_len;
 }
 
+static int read_one_entry_opt(struct index_state *istate,
+			      const struct object_id *oid,
+			      struct strbuf *base,
+			      const char *pathname,
+			      unsigned mode, int opt)
+{
+	int len;
+	struct cache_entry *ce;
+
+	if (S_ISDIR(mode))
+		return READ_TREE_RECURSIVE;
+
+	len = strlen(pathname);
+	ce = make_empty_cache_entry(istate, base->len + len);
+
+	ce->ce_mode = create_ce_mode(mode);
+	ce->ce_flags = create_ce_flags(1);
+	ce->ce_namelen = base->len + len;
+	memcpy(ce->name, base->buf, base->len);
+	memcpy(ce->name + base->len, pathname, len+1);
+	oidcpy(&ce->oid, oid);
+	return add_index_entry(istate, ce, opt);
+}
+
+static int read_one_entry(const struct object_id *oid, struct strbuf *base,
+			  const char *pathname, unsigned mode,
+			  void *context)
+{
+	struct index_state *istate = context;
+	return read_one_entry_opt(istate, oid, base, pathname,
+				  mode,
+				  ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
+}
+
+/*
+ * This is used when the caller knows there is no existing entries at
+ * the stage that will conflict with the entry being added.
+ */
+static int read_one_entry_quick(const struct object_id *oid, struct strbuf *base,
+				const char *pathname, unsigned mode,
+				void *context)
+{
+	struct index_state *istate = context;
+	return read_one_entry_opt(istate, oid, base, pathname,
+				  mode, ADD_CACHE_JUST_APPEND);
+}
+
 /*
  * Read the tree specified with --with-tree option
  * (typically, HEAD) into stage #1 and then
@@ -436,6 +486,8 @@
 	struct pathspec pathspec;
 	struct cache_entry *last_stage0 = NULL;
 	int i;
+	read_tree_fn_t fn = NULL;
+	int err;
 
 	if (get_oid(tree_name, &oid))
 		die("tree-ish %s not found.", tree_name);
@@ -444,6 +496,8 @@
 		die("bad tree-ish %s", tree_name);
 
 	/* Hoist the unmerged entries up to stage #3 to make room */
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(istate);
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct cache_entry *ce = istate->cache[i];
 		if (!ce_stage(ce))
@@ -458,9 +512,32 @@
 			       PATHSPEC_PREFER_CWD, prefix, matchbuf);
 	} else
 		memset(&pathspec, 0, sizeof(pathspec));
-	if (read_tree(the_repository, tree, 1, &pathspec, istate))
+
+	/*
+	 * See if we have cache entry at the stage.  If so,
+	 * do it the original slow way, otherwise, append and then
+	 * sort at the end.
+	 */
+	for (i = 0; !fn && i < istate->cache_nr; i++) {
+		const struct cache_entry *ce = istate->cache[i];
+		if (ce_stage(ce) == 1)
+			fn = read_one_entry;
+	}
+
+	if (!fn)
+		fn = read_one_entry_quick;
+	err = read_tree(the_repository, tree, &pathspec, fn, istate);
+	if (err)
 		die("unable to read tree entries %s", tree_name);
 
+	/*
+	 * Sort the cache entry -- we need to nuke the cache tree, though.
+	 */
+	if (fn == read_one_entry_quick) {
+		cache_tree_free(&istate->cache_tree);
+		QSORT(istate->cache, istate->cache_nr, cmp_cache_name_compare);
+	}
+
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct cache_entry *ce = istate->cache[i];
 		switch (ce_stage(ce)) {
@@ -530,8 +607,8 @@
 int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 {
 	int require_work_tree = 0, show_tag = 0, i;
-	const char *max_prefix;
-	struct dir_struct dir;
+	char *max_prefix;
+	struct dir_struct dir = DIR_INIT;
 	struct pattern_list *pl;
 	struct string_list exclude_list = STRING_LIST_INIT_NODUP;
 	struct option builtin_ls_files_options[] = {
@@ -601,7 +678,6 @@
 	if (argc == 2 && !strcmp(argv[1], "-h"))
 		usage_with_options(ls_files_usage, builtin_ls_files_options);
 
-	dir_init(&dir);
 	prefix = cmd_prefix;
 	if (prefix)
 		prefix_len = strlen(prefix);
@@ -675,6 +751,9 @@
 	if (pathspec.nr && error_unmatch)
 		ps_matched = xcalloc(pathspec.nr, 1);
 
+	if ((dir.flags & DIR_SHOW_IGNORED) && !show_others && !show_cached)
+		die("ls-files -i must be used with either -o or -c");
+
 	if ((dir.flags & DIR_SHOW_IGNORED) && !exc_given)
 		die("ls-files --ignored needs some exclude pattern");
 
@@ -708,5 +787,6 @@
 	}
 
 	dir_clear(&dir);
+	free(max_prefix);
 	return 0;
 }
diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c
index ef60475..1794548 100644
--- a/builtin/ls-remote.c
+++ b/builtin/ls-remote.c
@@ -88,7 +88,7 @@
 
 	if (argc > 1) {
 		int i;
-		pattern = xcalloc(argc, sizeof(const char *));
+		CALLOC_ARRAY(pattern, argc);
 		for (i = 1; i < argc; i++) {
 			pattern[i - 1] = xstrfmt("*/%s", argv[i]);
 		}
@@ -124,8 +124,6 @@
 		int hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
 		repo_set_hash_algo(the_repository, hash_algo);
 	}
-	if (transport_disconnect(transport))
-		return 1;
 
 	if (!dest && !quiet)
 		fprintf(stderr, "From %s\n", *remote->url);
@@ -151,5 +149,7 @@
 	}
 
 	ref_array_clear(&ref_array);
+	if (transport_disconnect(transport))
+		return 1;
 	return status;
 }
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index 7cad3f2..3a44263 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -62,7 +62,7 @@
 }
 
 static int show_tree(const struct object_id *oid, struct strbuf *base,
-		const char *pathname, unsigned mode, int stage, void *context)
+		const char *pathname, unsigned mode, void *context)
 {
 	int retval = 0;
 	int baselen;
@@ -185,6 +185,6 @@
 	tree = parse_tree_indirect(&oid);
 	if (!tree)
 		die("not a tree object");
-	return !!read_tree_recursive(the_repository, tree, "", 0, 0,
-				     &pathspec, show_tree, NULL);
+	return !!read_tree(the_repository, tree,
+			   &pathspec, show_tree, NULL);
 }
diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index cfb667a..01d16ef 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -7,54 +7,103 @@
 #include "utf8.h"
 #include "strbuf.h"
 #include "mailinfo.h"
+#include "parse-options.h"
 
-static const char mailinfo_usage[] =
-	"git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info";
+static const char * const mailinfo_usage[] = {
+	/* TRANSLATORS: keep <> in "<" mail ">" info. */
+	N_("git mailinfo [<options>] <msg> <patch> < mail >info"),
+	NULL,
+};
+
+struct metainfo_charset
+{
+	enum {
+		CHARSET_DEFAULT,
+		CHARSET_NO_REENCODE,
+		CHARSET_EXPLICIT,
+	} policy;
+	const char *charset;
+};
+
+static int parse_opt_explicit_encoding(const struct option *opt,
+				       const char *arg, int unset)
+{
+	struct metainfo_charset *meta_charset = opt->value;
+
+	BUG_ON_OPT_NEG(unset);
+
+	meta_charset->policy = CHARSET_EXPLICIT;
+	meta_charset->charset = arg;
+
+	return 0;
+}
+
+static int parse_opt_quoted_cr(const struct option *opt, const char *arg, int unset)
+{
+	BUG_ON_OPT_NEG(unset);
+
+	if (mailinfo_parse_quoted_cr_action(arg, opt->value) != 0)
+		return error(_("bad action '%s' for '%s'"), arg, "--quoted-cr");
+	return 0;
+}
 
 int cmd_mailinfo(int argc, const char **argv, const char *prefix)
 {
-	const char *def_charset;
+	struct metainfo_charset meta_charset;
 	struct mailinfo mi;
 	int status;
 	char *msgfile, *patchfile;
 
+	struct option options[] = {
+		OPT_BOOL('k', NULL, &mi.keep_subject, N_("keep subject")),
+		OPT_BOOL('b', NULL, &mi.keep_non_patch_brackets_in_subject,
+			 N_("keep non patch brackets in subject")),
+		OPT_BOOL('m', "message-id", &mi.add_message_id,
+			 N_("copy Message-ID to the end of commit message")),
+		OPT_SET_INT_F('u', NULL, &meta_charset.policy,
+			      N_("re-code metadata to i18n.commitEncoding"),
+			      CHARSET_DEFAULT, PARSE_OPT_NONEG),
+		OPT_SET_INT_F('n', NULL, &meta_charset.policy,
+			      N_("disable charset re-coding of metadata"),
+			      CHARSET_NO_REENCODE, PARSE_OPT_NONEG),
+		OPT_CALLBACK_F(0, "encoding", &meta_charset, N_("encoding"),
+			       N_("re-code metadata to this encoding"),
+			       PARSE_OPT_NONEG, parse_opt_explicit_encoding),
+		OPT_BOOL(0, "scissors", &mi.use_scissors, N_("use scissors")),
+		OPT_CALLBACK_F(0, "quoted-cr", &mi.quoted_cr, N_("<action>"),
+			       N_("action when quoted CR is found"),
+			       PARSE_OPT_NONEG, parse_opt_quoted_cr),
+		OPT_HIDDEN_BOOL(0, "inbody-headers", &mi.use_inbody_headers,
+			 N_("use headers in message's body")),
+		OPT_END()
+	};
+
 	setup_mailinfo(&mi);
+	meta_charset.policy = CHARSET_DEFAULT;
 
-	def_charset = get_commit_output_encoding();
-	mi.metainfo_charset = def_charset;
+	argc = parse_options(argc, argv, prefix, options, mailinfo_usage, 0);
 
-	while (1 < argc && argv[1][0] == '-') {
-		if (!strcmp(argv[1], "-k"))
-			mi.keep_subject = 1;
-		else if (!strcmp(argv[1], "-b"))
-			mi.keep_non_patch_brackets_in_subject = 1;
-		else if (!strcmp(argv[1], "-m") || !strcmp(argv[1], "--message-id"))
-			mi.add_message_id = 1;
-		else if (!strcmp(argv[1], "-u"))
-			mi.metainfo_charset = def_charset;
-		else if (!strcmp(argv[1], "-n"))
-			mi.metainfo_charset = NULL;
-		else if (starts_with(argv[1], "--encoding="))
-			mi.metainfo_charset = argv[1] + 11;
-		else if (!strcmp(argv[1], "--scissors"))
-			mi.use_scissors = 1;
-		else if (!strcmp(argv[1], "--no-scissors"))
-			mi.use_scissors = 0;
-		else if (!strcmp(argv[1], "--no-inbody-headers"))
-			mi.use_inbody_headers = 0;
-		else
-			usage(mailinfo_usage);
-		argc--; argv++;
+	if (argc != 2)
+		usage_with_options(mailinfo_usage, options);
+
+	switch (meta_charset.policy) {
+	case CHARSET_DEFAULT:
+		mi.metainfo_charset = get_commit_output_encoding();
+		break;
+	case CHARSET_NO_REENCODE:
+		mi.metainfo_charset = NULL;
+		break;
+	case CHARSET_EXPLICIT:
+		break;
+	default:
+		BUG("invalid meta_charset.policy");
 	}
 
-	if (argc != 3)
-		usage(mailinfo_usage);
-
 	mi.input = stdin;
 	mi.output = stdout;
 
-	msgfile = prefix_filename(prefix, argv[1]);
-	patchfile = prefix_filename(prefix, argv[2]);
+	msgfile = prefix_filename(prefix, argv[0]);
+	patchfile = prefix_filename(prefix, argv[1]);
 
 	status = !!mailinfo(&mi, msgfile, patchfile);
 	clear_mailinfo(&mi);
diff --git a/builtin/merge-index.c b/builtin/merge-index.c
index 38ea6ad..c0383fe 100644
--- a/builtin/merge-index.c
+++ b/builtin/merge-index.c
@@ -58,6 +58,8 @@
 static void merge_all(void)
 {
 	int i;
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&the_index);
 	for (i = 0; i < active_nr; i++) {
 		const struct cache_entry *ce = active_cache[i];
 		if (!ce_stage(ce))
@@ -80,6 +82,9 @@
 
 	read_cache();
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&the_index);
+
 	i = 1;
 	if (!strcmp(argv[i], "-o")) {
 		one_shot = 1;
diff --git a/builtin/merge-ours.c b/builtin/merge-ours.c
index 4594507..3583cff 100644
--- a/builtin/merge-ours.c
+++ b/builtin/merge-ours.c
@@ -28,6 +28,6 @@
 	if (read_cache() < 0)
 		die_errno("read_cache failed");
 	if (index_differs_from(the_repository, "HEAD", NULL, 0))
-		exit(2);
-	exit(0);
+		return 2;
+	return 0;
 }
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
index de85207..5dc94d6 100644
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -107,15 +107,12 @@
 	mmfile_t src, dst;
 	xpparam_t xpp;
 	xdemitconf_t xecfg;
-	xdemitcb_t ecb;
+	xdemitcb_t ecb = { .out_line = show_outf };
 
 	memset(&xpp, 0, sizeof(xpp));
 	xpp.flags = 0;
 	memset(&xecfg, 0, sizeof(xecfg));
 	xecfg.ctxlen = 3;
-	ecb.out_hunk = NULL;
-	ecb.out_line = show_outf;
-	ecb.priv = NULL;
 
 	src.ptr = origin(entry, &size);
 	if (!src.ptr)
diff --git a/builtin/merge.c b/builtin/merge.c
index eb00b27..a8a843b 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -56,8 +56,8 @@
 
 static const char * const builtin_merge_usage[] = {
 	N_("git merge [<options>] [<commit>...]"),
-	N_("git merge --abort"),
-	N_("git merge --continue"),
+	"git merge --abort",
+	"git merge --continue",
 	NULL
 };
 
@@ -210,7 +210,7 @@
 		exit(1);
 	}
 
-	ret = xcalloc(1, sizeof(struct strategy));
+	CALLOC_ARRAY(ret, 1);
 	ret->name = xstrdup(name);
 	ret->attr = NO_TRIVIAL;
 	return ret;
@@ -393,10 +393,14 @@
 }
 
 /* This is called when no merge was necessary. */
-static void finish_up_to_date(const char *msg)
+static void finish_up_to_date(void)
 {
-	if (verbosity >= 0)
-		printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg);
+	if (verbosity >= 0) {
+		if (squash)
+			puts(_("Already up to date. (nothing to squash)"));
+		else
+			puts(_("Already up to date."));
+	}
 	remove_merge_branch_state(the_repository);
 }
 
@@ -1522,7 +1526,7 @@
 		 * If head can reach all the merge then we are up to date.
 		 * but first the most common case of merging one remote.
 		 */
-		finish_up_to_date(_("Already up to date."));
+		finish_up_to_date();
 		goto done;
 	} else if (fast_forward != FF_NO && !remoteheads->next &&
 			!common->next &&
@@ -1610,7 +1614,7 @@
 			}
 		}
 		if (up_to_date) {
-			finish_up_to_date(_("Already up to date. Yeeah!"));
+			finish_up_to_date();
 			goto done;
 		}
 	}
diff --git a/builtin/mktag.c b/builtin/mktag.c
index 41a399a..dddcccd 100644
--- a/builtin/mktag.c
+++ b/builtin/mktag.c
@@ -14,15 +14,12 @@
 
 static struct fsck_options fsck_options = FSCK_OPTIONS_STRICT;
 
-static int mktag_config(const char *var, const char *value, void *cb)
-{
-	return fsck_config_internal(var, value, cb, &fsck_options);
-}
-
 static int mktag_fsck_error_func(struct fsck_options *o,
 				 const struct object_id *oid,
 				 enum object_type object_type,
-				 int msg_type, const char *message)
+				 enum fsck_msg_type msg_type,
+				 enum fsck_msg_id msg_id,
+				 const char *message)
 {
 	switch (msg_type) {
 	case FSCK_WARN:
@@ -91,9 +88,10 @@
 		die_errno(_("could not read from stdin"));
 
 	fsck_options.error_func = mktag_fsck_error_func;
-	fsck_set_msg_type(&fsck_options, "extraheaderentry", "warn");
+	fsck_set_msg_type_from_ids(&fsck_options, FSCK_MSG_EXTRA_HEADER_ENTRY,
+				   FSCK_WARN);
 	/* config might set fsck.extraHeaderEntry=* again */
-	git_config(mktag_config, NULL);
+	git_config(git_fsck_config, &fsck_options);
 	if (fsck_tag_standalone(NULL, buf.buf, buf.len, &fsck_options,
 				&tagged_oid, &tagged_type))
 		die(_("tag on stdin did not pass our strict fsck check"));
diff --git a/builtin/mktree.c b/builtin/mktree.c
index 891991b..ae78ca1 100644
--- a/builtin/mktree.c
+++ b/builtin/mktree.c
@@ -189,5 +189,5 @@
 		used=0; /* reset tree entry buffer for re-use in batch mode */
 	}
 	strbuf_release(&sb);
-	exit(0);
+	return 0;
 }
diff --git a/builtin/mv.c b/builtin/mv.c
index 7dac714..3fccdcb 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -221,7 +221,7 @@
 				}
 				argc += last - first;
 			}
-		} else if (!(ce = cache_file_exists(src, length, ignore_case))) {
+		} else if (!(ce = cache_file_exists(src, length, 0))) {
 			bad = _("not under version control");
 		} else if (ce_stage(ce)) {
 			bad = _("conflicted");
diff --git a/builtin/notes.c b/builtin/notes.c
index 2987c08..74bba39 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -373,7 +373,7 @@
 				     git_notes_list_usage, 0);
 
 	if (1 < argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_list_usage, options);
 	}
 
@@ -428,7 +428,7 @@
 			     PARSE_OPT_KEEP_ARGV0);
 
 	if (2 < argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_add_usage, options);
 	}
 
@@ -506,7 +506,7 @@
 
 	if (from_stdin || rewrite_cmd) {
 		if (argc) {
-			error(_("too many parameters"));
+			error(_("too many arguments"));
 			usage_with_options(git_notes_copy_usage, options);
 		} else {
 			return notes_copy_from_stdin(force, rewrite_cmd);
@@ -514,11 +514,11 @@
 	}
 
 	if (argc < 1) {
-		error(_("too few parameters"));
+		error(_("too few arguments"));
 		usage_with_options(git_notes_copy_usage, options);
 	}
 	if (2 < argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_copy_usage, options);
 	}
 
@@ -595,7 +595,7 @@
 			     PARSE_OPT_KEEP_ARGV0);
 
 	if (2 < argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(usage, options);
 	}
 
@@ -662,7 +662,7 @@
 			     0);
 
 	if (1 < argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_show_usage, options);
 	}
 
@@ -730,7 +730,7 @@
 	else
 		oidclr(&parent_oid);
 
-	t = xcalloc(1, sizeof(struct notes_tree));
+	CALLOC_ARRAY(t, 1);
 	init_notes(t, "NOTES_MERGE_PARTIAL", combine_notes_overwrite, 0);
 
 	o->local_ref = local_ref_to_free =
@@ -812,7 +812,7 @@
 		error(_("must specify a notes ref to merge"));
 		usage_with_options(git_notes_merge_usage, options);
 	} else if (!do_merge && argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_merge_usage, options);
 	}
 
@@ -960,7 +960,7 @@
 			     0);
 
 	if (argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_prune_usage, options);
 	}
 
@@ -982,7 +982,7 @@
 			     git_notes_get_ref_usage, 0);
 
 	if (argc) {
-		error(_("too many parameters"));
+		error(_("too many arguments"));
 		usage_with_options(git_notes_get_ref_usage, options);
 	}
 
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 6d62aaf..de00adb 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -37,6 +37,134 @@
 #include "shallow.h"
 #include "promisor-remote.h"
 
+/*
+ * Objects we are going to pack are collected in the `to_pack` structure.
+ * It contains an array (dynamically expanded) of the object data, and a map
+ * that can resolve SHA1s to their position in the array.
+ */
+static struct packing_data to_pack;
+
+static inline struct object_entry *oe_delta(
+		const struct packing_data *pack,
+		const struct object_entry *e)
+{
+	if (!e->delta_idx)
+		return NULL;
+	if (e->ext_base)
+		return &pack->ext_bases[e->delta_idx - 1];
+	else
+		return &pack->objects[e->delta_idx - 1];
+}
+
+static inline unsigned long oe_delta_size(struct packing_data *pack,
+					  const struct object_entry *e)
+{
+	if (e->delta_size_valid)
+		return e->delta_size_;
+
+	/*
+	 * pack->delta_size[] can't be NULL because oe_set_delta_size()
+	 * must have been called when a new delta is saved with
+	 * oe_set_delta().
+	 * If oe_delta() returns NULL (i.e. default state, which means
+	 * delta_size_valid is also false), then the caller must never
+	 * call oe_delta_size().
+	 */
+	return pack->delta_size[e - pack->objects];
+}
+
+unsigned long oe_get_size_slow(struct packing_data *pack,
+			       const struct object_entry *e);
+
+static inline unsigned long oe_size(struct packing_data *pack,
+				    const struct object_entry *e)
+{
+	if (e->size_valid)
+		return e->size_;
+
+	return oe_get_size_slow(pack, e);
+}
+
+static inline void oe_set_delta(struct packing_data *pack,
+				struct object_entry *e,
+				struct object_entry *delta)
+{
+	if (delta)
+		e->delta_idx = (delta - pack->objects) + 1;
+	else
+		e->delta_idx = 0;
+}
+
+static inline struct object_entry *oe_delta_sibling(
+		const struct packing_data *pack,
+		const struct object_entry *e)
+{
+	if (e->delta_sibling_idx)
+		return &pack->objects[e->delta_sibling_idx - 1];
+	return NULL;
+}
+
+static inline struct object_entry *oe_delta_child(
+		const struct packing_data *pack,
+		const struct object_entry *e)
+{
+	if (e->delta_child_idx)
+		return &pack->objects[e->delta_child_idx - 1];
+	return NULL;
+}
+
+static inline void oe_set_delta_child(struct packing_data *pack,
+				      struct object_entry *e,
+				      struct object_entry *delta)
+{
+	if (delta)
+		e->delta_child_idx = (delta - pack->objects) + 1;
+	else
+		e->delta_child_idx = 0;
+}
+
+static inline void oe_set_delta_sibling(struct packing_data *pack,
+					struct object_entry *e,
+					struct object_entry *delta)
+{
+	if (delta)
+		e->delta_sibling_idx = (delta - pack->objects) + 1;
+	else
+		e->delta_sibling_idx = 0;
+}
+
+static inline void oe_set_size(struct packing_data *pack,
+			       struct object_entry *e,
+			       unsigned long size)
+{
+	if (size < pack->oe_size_limit) {
+		e->size_ = size;
+		e->size_valid = 1;
+	} else {
+		e->size_valid = 0;
+		if (oe_get_size_slow(pack, e) != size)
+			BUG("'size' is supposed to be the object size!");
+	}
+}
+
+static inline void oe_set_delta_size(struct packing_data *pack,
+				     struct object_entry *e,
+				     unsigned long size)
+{
+	if (size < pack->oe_delta_size_limit) {
+		e->delta_size_ = size;
+		e->delta_size_valid = 1;
+	} else {
+		packing_data_lock(pack);
+		if (!pack->delta_size)
+			ALLOC_ARRAY(pack->delta_size, pack->nr_alloc);
+		packing_data_unlock(pack);
+
+		pack->delta_size[e - pack->objects] = size;
+		e->delta_size_valid = 0;
+	}
+}
+
 #define IN_PACK(obj) oe_in_pack(&to_pack, obj)
 #define SIZE(obj) oe_size(&to_pack, obj)
 #define SET_SIZE(obj,size) oe_set_size(&to_pack, obj, size)
@@ -56,13 +184,6 @@
 	NULL
 };
 
-/*
- * Objects we are going to pack are collected in the `to_pack` structure.
- * It contains an array (dynamically expanded) of the object data, and a map
- * that can resolve SHA1s to their position in the array.
- */
-static struct packing_data to_pack;
-
 static struct pack_idx_entry **written_list;
 static uint32_t nr_result, nr_written, nr_seen;
 static struct bitmap_index *bitmap_git;
@@ -301,6 +422,17 @@
 	}
 }
 
+static inline int oe_size_greater_than(struct packing_data *pack,
+				       const struct object_entry *lhs,
+				       unsigned long rhs)
+{
+	if (lhs->size_valid)
+		return lhs->size_ > rhs;
+	if (rhs < pack->oe_size_limit) /* rhs < 2^x <= lhs ? */
+		return 1;
+	return oe_get_size_slow(pack, lhs) > rhs;
+}
+
 /* Return 0 if we will bust the pack-size limit */
 static unsigned long write_no_reuse_object(struct hashfile *f, struct object_entry *entry,
 					   unsigned long limit, int usable_delta)
@@ -642,6 +774,14 @@
 	return 0;
 }
 
+static inline unsigned char oe_layer(struct packing_data *pack,
+				     struct object_entry *e)
+{
+	if (!pack->layer)
+		return 0;
+	return pack->layer[e - pack->objects];
+}
+
 static inline void add_to_write_order(struct object_entry **wo,
 			       unsigned int *endp,
 			       struct object_entry *e)
@@ -815,8 +955,8 @@
 	/* The offset of the first object of this chunk in the original
 	 * packfile. */
 	off_t original;
-	/* The offset of the first object of this chunk in the generated
-	 * packfile minus "original". */
+	/* The difference for "original" minus the offset of the first object of
+	 * this chunk in the generated packfile. */
 	off_t difference;
 } *reused_chunks;
 static int reused_chunks_nr;
@@ -1030,7 +1170,7 @@
 	write_order = compute_write_order();
 
 	do {
-		struct object_id oid;
+		unsigned char hash[GIT_MAX_RAWSZ];
 		char *pack_tmp_name = NULL;
 
 		if (pack_to_stdout)
@@ -1059,13 +1199,13 @@
 		 * If so, rewrite it like in fast-import
 		 */
 		if (pack_to_stdout) {
-			finalize_hashfile(f, oid.hash, CSUM_HASH_IN_STREAM | CSUM_CLOSE);
+			finalize_hashfile(f, hash, CSUM_HASH_IN_STREAM | CSUM_CLOSE);
 		} else if (nr_written == nr_remaining) {
-			finalize_hashfile(f, oid.hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
+			finalize_hashfile(f, hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
 		} else {
-			int fd = finalize_hashfile(f, oid.hash, 0);
-			fixup_pack_header_footer(fd, oid.hash, pack_tmp_name,
-						 nr_written, oid.hash, offset);
+			int fd = finalize_hashfile(f, hash, 0);
+			fixup_pack_header_footer(fd, hash, pack_tmp_name,
+						 nr_written, hash, offset);
 			close(fd);
 			if (write_bitmap_index) {
 				if (write_bitmap_index != WRITE_BITMAP_QUIET)
@@ -1100,17 +1240,17 @@
 			strbuf_addf(&tmpname, "%s-", base_name);
 
 			if (write_bitmap_index) {
-				bitmap_writer_set_checksum(oid.hash);
+				bitmap_writer_set_checksum(hash);
 				bitmap_writer_build_type_index(
 					&to_pack, written_list, nr_written);
 			}
 
 			finish_tmp_packfile(&tmpname, pack_tmp_name,
 					    written_list, nr_written,
-					    &pack_idx_opts, oid.hash);
+					    &pack_idx_opts, hash);
 
 			if (write_bitmap_index) {
-				strbuf_addf(&tmpname, "%s.bitmap", oid_to_hex(&oid));
+				strbuf_addf(&tmpname, "%s.bitmap", hash_to_hex(hash));
 
 				stop_progress(&progress_state);
 
@@ -1124,7 +1264,7 @@
 
 			strbuf_release(&tmpname);
 			free(pack_tmp_name);
-			puts(oid_to_hex(&oid));
+			puts(hash_to_hex(hash));
 		}
 
 		/* mark written objects as written to previous pack */
@@ -1188,7 +1328,8 @@
 	return 1;
 }
 
-static int want_found_object(int exclude, struct packed_git *p)
+static int want_found_object(const struct object_id *oid, int exclude,
+			     struct packed_git *p)
 {
 	if (exclude)
 		return 1;
@@ -1204,27 +1345,82 @@
 	 * make sure no copy of this object appears in _any_ pack that makes us
 	 * to omit the object, so we need to check all the packs.
 	 *
-	 * We can however first check whether these options can possible matter;
+	 * We can however first check whether these options can possibly matter;
 	 * if they do not matter we know we want the object in generated pack.
 	 * Otherwise, we signal "-1" at the end to tell the caller that we do
 	 * not know either way, and it needs to check more packs.
 	 */
-	if (!ignore_packed_keep_on_disk &&
-	    !ignore_packed_keep_in_core &&
-	    (!local || !have_non_local_packs))
-		return 1;
 
+	/*
+	 * Objects in packs borrowed from elsewhere are discarded regardless of
+	 * if they appear in other packs that weren't borrowed.
+	 */
 	if (local && !p->pack_local)
 		return 0;
-	if (p->pack_local &&
-	    ((ignore_packed_keep_on_disk && p->pack_keep) ||
-	     (ignore_packed_keep_in_core && p->pack_keep_in_core)))
-		return 0;
+
+	/*
+	 * Then handle .keep first, as we have a fast(er) path there.
+	 */
+	if (ignore_packed_keep_on_disk || ignore_packed_keep_in_core) {
+		/*
+		 * Set the flags for the kept-pack cache to be the ones we want
+		 * to ignore.
+		 *
+		 * That is, if we are ignoring objects in on-disk keep packs,
+		 * then we want to search through the on-disk keep and ignore
+		 * the in-core ones.
+		 */
+		unsigned flags = 0;
+		if (ignore_packed_keep_on_disk)
+			flags |= ON_DISK_KEEP_PACKS;
+		if (ignore_packed_keep_in_core)
+			flags |= IN_CORE_KEEP_PACKS;
+
+		if (ignore_packed_keep_on_disk && p->pack_keep)
+			return 0;
+		if (ignore_packed_keep_in_core && p->pack_keep_in_core)
+			return 0;
+		if (has_object_kept_pack(oid, flags))
+			return 0;
+	}
+
+	/*
+	 * At this point we know definitively that either we don't care about
+	 * keep-packs, or the object is not in one. Keep checking other
+	 * conditions...
+	 */
+	if (!local || !have_non_local_packs)
+		return 1;
 
 	/* we don't know yet; keep looking for more packs */
 	return -1;
 }
 
+static int want_object_in_pack_one(struct packed_git *p,
+				   const struct object_id *oid,
+				   int exclude,
+				   struct packed_git **found_pack,
+				   off_t *found_offset)
+{
+	off_t offset;
+
+	if (p == *found_pack)
+		offset = *found_offset;
+	else
+		offset = find_pack_entry_one(oid->hash, p);
+
+	if (offset) {
+		if (!*found_pack) {
+			if (!is_pack_valid(p))
+				return -1;
+			*found_offset = offset;
+			*found_pack = p;
+		}
+		return want_found_object(oid, exclude, p);
+	}
+	return -1;
+}
+
 /*
  * Check whether we want the object in the pack (e.g., we do not want
  * objects found in non-local stores if the "--local" option was used).
@@ -1252,7 +1448,7 @@
 	 * are present we will determine the answer right now.
 	 */
 	if (*found_pack) {
-		want = want_found_object(exclude, *found_pack);
+		want = want_found_object(oid, exclude, *found_pack);
 		if (want != -1)
 			return want;
 	}
@@ -1260,51 +1456,20 @@
 	for (m = get_multi_pack_index(the_repository); m; m = m->next) {
 		struct pack_entry e;
 		if (fill_midx_entry(the_repository, oid, &e, m)) {
-			struct packed_git *p = e.p;
-			off_t offset;
-
-			if (p == *found_pack)
-				offset = *found_offset;
-			else
-				offset = find_pack_entry_one(oid->hash, p);
-
-			if (offset) {
-				if (!*found_pack) {
-					if (!is_pack_valid(p))
-						continue;
-					*found_offset = offset;
-					*found_pack = p;
-				}
-				want = want_found_object(exclude, p);
-				if (want != -1)
-					return want;
-			}
+			want = want_object_in_pack_one(e.p, oid, exclude, found_pack, found_offset);
+			if (want != -1)
+				return want;
 		}
 	}
 
 	list_for_each(pos, get_packed_git_mru(the_repository)) {
 		struct packed_git *p = list_entry(pos, struct packed_git, mru);
-		off_t offset;
-
-		if (p == *found_pack)
-			offset = *found_offset;
-		else
-			offset = find_pack_entry_one(oid->hash, p);
-
-		if (offset) {
-			if (!*found_pack) {
-				if (!is_pack_valid(p))
-					continue;
-				*found_offset = offset;
-				*found_pack = p;
-			}
-			want = want_found_object(exclude, p);
-			if (!exclude && want > 0)
-				list_move(&p->mru,
-					  get_packed_git_mru(the_repository));
-			if (want != -1)
-				return want;
-		}
+		want = want_object_in_pack_one(p, oid, exclude, found_pack, found_offset);
+		if (!exclude && want > 0)
+			list_move(&p->mru,
+				  get_packed_git_mru(the_repository));
+		if (want != -1)
+			return want;
 	}
 
 	if (uri_protocols.nr) {
@@ -1635,7 +1800,7 @@
 		}
 	}
 
-	it = xcalloc(1, sizeof(*it));
+	CALLOC_ARRAY(it, 1);
 	it->next = pbase_tree;
 	pbase_tree = it;
 
@@ -2096,7 +2261,7 @@
 		progress_state = start_progress(_("Counting objects"),
 						to_pack.nr_objects);
 
-	sorted_by_offset = xcalloc(to_pack.nr_objects, sizeof(struct object_entry *));
+	CALLOC_ARRAY(sorted_by_offset, to_pack.nr_objects);
 	for (i = 0; i < to_pack.nr_objects; i++)
 		sorted_by_offset[i] = to_pack.objects + i;
 	QSORT(sorted_by_offset, to_pack.nr_objects, pack_offset_sort);
@@ -2206,6 +2371,26 @@
  * progress_mutex for protection.
  */
 
+static inline int oe_size_less_than(struct packing_data *pack,
+				    const struct object_entry *lhs,
+				    unsigned long rhs)
+{
+	if (lhs->size_valid)
+		return lhs->size_ < rhs;
+	if (rhs < pack->oe_size_limit) /* rhs < 2^x <= lhs ? */
+		return 0;
+	return oe_get_size_slow(pack, lhs) < rhs;
+}
+
+static inline void oe_set_tree_depth(struct packing_data *pack,
+				     struct object_entry *e,
+				     unsigned int tree_depth)
+{
+	if (!pack->tree_depth)
+		CALLOC_ARRAY(pack->tree_depth, pack->nr_alloc);
+	pack->tree_depth[e - pack->objects] = tree_depth;
+}
+
 /*
  * Return the size of the object without doing any delta
  * reconstruction (so non-deltas are true object sizes, but deltas
@@ -2428,7 +2613,7 @@
 	struct unpacked *array;
 	unsigned long mem_usage = 0;
 
-	array = xcalloc(window, sizeof(struct unpacked));
+	CALLOC_ARRAY(array, window);
 
 	for (;;) {
 		struct object_entry *entry;
@@ -2665,7 +2850,7 @@
 	if (progress > pack_to_stdout)
 		fprintf_ln(stderr, _("Delta compression using up to %d threads"),
 			   delta_search_threads);
-	p = xcalloc(delta_search_threads, sizeof(*p));
+	CALLOC_ARRAY(p, delta_search_threads);
 
 	/* Partition the work amongst work threads. */
 	for (i = 0; i < delta_search_threads; i++) {
@@ -2986,6 +3171,191 @@
 	return git_default_config(k, v, cb);
 }
 
+/* Counters for trace2 output when in --stdin-packs mode. */
+static int stdin_packs_found_nr;
+static int stdin_packs_hints_nr;
+
+static int add_object_entry_from_pack(const struct object_id *oid,
+				      struct packed_git *p,
+				      uint32_t pos,
+				      void *_data)
+{
+	struct rev_info *revs = _data;
+	struct object_info oi = OBJECT_INFO_INIT;
+	off_t ofs;
+	enum object_type type;
+
+	display_progress(progress_state, ++nr_seen);
+
+	if (have_duplicate_entry(oid, 0))
+		return 0;
+
+	ofs = nth_packed_object_offset(p, pos);
+	if (!want_object_in_pack(oid, 0, &p, &ofs))
+		return 0;
+
+	oi.typep = &type;
+	if (packed_object_info(the_repository, p, ofs, &oi) < 0)
+		die(_("could not get type of object %s in pack %s"),
+		    oid_to_hex(oid), p->pack_name);
+	else if (type == OBJ_COMMIT) {
+		/*
+		 * commits in included packs are used as starting points for the
+		 * subsequent revision walk
+		 */
+		add_pending_oid(revs, NULL, oid, 0);
+	}
+
+	stdin_packs_found_nr++;
+
+	create_object_entry(oid, type, 0, 0, 0, p, ofs);
+
+	return 0;
+}
+
+static void show_commit_pack_hint(struct commit *commit, void *_data)
+{
+	/* nothing to do; commits don't have a namehash */
+}
+
+static void show_object_pack_hint(struct object *object, const char *name,
+				  void *_data)
+{
+	struct object_entry *oe = packlist_find(&to_pack, &object->oid);
+	if (!oe)
+		return;
+
+	/*
+	 * Our 'to_pack' list was constructed by iterating all objects packed in
+	 * included packs, and so doesn't have a non-zero hash field that you
+	 * would typically pick up during a reachability traversal.
+	 *
+	 * Make a best-effort attempt to fill in the ->hash and ->no_try_delta
+	 * here using a now in order to perhaps improve the delta selection
+	 * process.
+	 */
+	oe->hash = pack_name_hash(name);
+	oe->no_try_delta = name && no_try_delta(name);
+
+	stdin_packs_hints_nr++;
+}
+
+static int pack_mtime_cmp(const void *_a, const void *_b)
+{
+	struct packed_git *a = ((const struct string_list_item*)_a)->util;
+	struct packed_git *b = ((const struct string_list_item*)_b)->util;
+
+	/*
+	 * order packs by descending mtime so that objects are laid out
+	 * roughly as newest-to-oldest
+	 */
+	if (a->mtime < b->mtime)
+		return 1;
+	else if (b->mtime < a->mtime)
+		return -1;
+	else
+		return 0;
+}
+
+static void read_packs_list_from_stdin(void)
+{
+	struct strbuf buf = STRBUF_INIT;
+	struct string_list include_packs = STRING_LIST_INIT_DUP;
+	struct string_list exclude_packs = STRING_LIST_INIT_DUP;
+	struct string_list_item *item = NULL;
+
+	struct packed_git *p;
+	struct rev_info revs;
+
+	repo_init_revisions(the_repository, &revs, NULL);
+	/*
+	 * Use a revision walk to fill in the namehash of objects in the include
+	 * packs. To save time, we'll avoid traversing through objects that are
+	 * in excluded packs.
+	 *
+	 * That may cause us to avoid populating all of the namehash fields of
+	 * all included objects, but our goal is best-effort, since this is only
+	 * an optimization during delta selection.
+	 */
+	revs.no_kept_objects = 1;
+	revs.keep_pack_cache_flags |= IN_CORE_KEEP_PACKS;
+	revs.blob_objects = 1;
+	revs.tree_objects = 1;
+	revs.tag_objects = 1;
+	revs.ignore_missing_links = 1;
+
+	while (strbuf_getline(&buf, stdin) != EOF) {
+		if (!buf.len)
+			continue;
+
+		if (*buf.buf == '^')
+			string_list_append(&exclude_packs, buf.buf + 1);
+		else
+			string_list_append(&include_packs, buf.buf);
+
+		strbuf_reset(&buf);
+	}
+
+	string_list_sort(&include_packs);
+	string_list_sort(&exclude_packs);
+
+	for (p = get_all_packs(the_repository); p; p = p->next) {
+		const char *pack_name = pack_basename(p);
+
+		item = string_list_lookup(&include_packs, pack_name);
+		if (!item)
+			item = string_list_lookup(&exclude_packs, pack_name);
+
+		if (item)
+			item->util = p;
+	}
+
+	/*
+	 * First handle all of the excluded packs, marking them as kept in-core
+	 * so that later calls to add_object_entry() discards any objects that
+	 * are also found in excluded packs.
+	 */
+	for_each_string_list_item(item, &exclude_packs) {
+		struct packed_git *p = item->util;
+		if (!p)
+			die(_("could not find pack '%s'"), item->string);
+		p->pack_keep_in_core = 1;
+	}
+
+	/*
+	 * Order packs by ascending mtime; use QSORT directly to access the
+	 * string_list_item's ->util pointer, which string_list_sort() does not
+	 * provide.
+	 */
+	QSORT(include_packs.items, include_packs.nr, pack_mtime_cmp);
+
+	for_each_string_list_item(item, &include_packs) {
+		struct packed_git *p = item->util;
+		if (!p)
+			die(_("could not find pack '%s'"), item->string);
+		for_each_object_in_pack(p,
+					add_object_entry_from_pack,
+					&revs,
+					FOR_EACH_OBJECT_PACK_ORDER);
+	}
+
+	if (prepare_revision_walk(&revs))
+		die(_("revision walk setup failed"));
+	traverse_commit_list(&revs,
+			     show_commit_pack_hint,
+			     show_object_pack_hint,
+			     NULL);
+
+	trace2_data_intmax("pack-objects", the_repository, "stdin_packs_found",
+			   stdin_packs_found_nr);
+	trace2_data_intmax("pack-objects", the_repository, "stdin_packs_hints",
+			   stdin_packs_hints_nr);
+
+	strbuf_release(&buf);
+	string_list_clear(&include_packs, 0);
+	string_list_clear(&exclude_packs, 0);
+}
+
 static void read_object_list_from_stdin(void)
 {
 	char line[GIT_MAX_HEXSZ + 1 + PATH_MAX + 2];
@@ -3176,7 +3546,7 @@
 
 		for (i = 0; i < p->num_objects; i++) {
 			nth_packed_object_id(&oid, p, i);
-			o = lookup_unknown_object(&oid);
+			o = lookup_unknown_object(the_repository, &oid);
 			if (!(o->flags & OBJECT_ADDED))
 				mark_in_pack_object(o, p, &in_pack);
 			o->flags |= OBJECT_ADDED;
@@ -3269,6 +3639,7 @@
 {
 	struct packed_git *p;
 	uint32_t i;
+	uint32_t loosened_objects_nr = 0;
 	struct object_id oid;
 
 	for (p = get_all_packs(the_repository); p; p = p->next) {
@@ -3282,11 +3653,16 @@
 			nth_packed_object_id(&oid, p, i);
 			if (!packlist_find(&to_pack, &oid) &&
 			    !has_sha1_pack_kept_or_nonlocal(&oid) &&
-			    !loosened_object_can_be_discarded(&oid, p->mtime))
+			    !loosened_object_can_be_discarded(&oid, p->mtime)) {
 				if (force_object_loose(&oid, p->mtime))
 					die(_("unable to force loose object"));
+				loosened_objects_nr++;
+			}
 		}
 	}
+
+	trace2_data_intmax("pack-objects", the_repository,
+			   "loosen_unused_packed_objects/loosened", loosened_objects_nr);
 }
 
 /*
@@ -3306,7 +3682,7 @@
 
 static int get_object_list_from_bitmap(struct rev_info *revs)
 {
-	if (!(bitmap_git = prepare_bitmap_walk(revs, &filter_options)))
+	if (!(bitmap_git = prepare_bitmap_walk(revs, &filter_options, 0)))
 		return -1;
 
 	if (pack_options_allow_reuse() &&
@@ -3317,7 +3693,8 @@
 			&reuse_packfile_bitmap)) {
 		assert(reuse_packfile_objects);
 		nr_result += reuse_packfile_objects;
-		display_progress(progress_state, nr_result);
+		nr_seen += reuse_packfile_objects;
+		display_progress(progress_state, nr_seen);
 	}
 
 	traverse_bitmap_commit_list(bitmap_git, revs,
@@ -3337,6 +3714,37 @@
 	oid_array_append(&recent_objects, &commit->object.oid);
 }
 
+static int mark_bitmap_preferred_tip(const char *refname,
+				     const struct object_id *oid, int flags,
+				     void *_data)
+{
+	struct object_id peeled;
+	struct object *object;
+
+	if (!peel_iterated_oid(oid, &peeled))
+		oid = &peeled;
+
+	object = parse_object_or_die(oid, refname);
+	if (object->type == OBJ_COMMIT)
+		object->flags |= NEEDS_BITMAP;
+
+	return 0;
+}
+
+static void mark_bitmap_preferred_tips(void)
+{
+	struct string_list_item *item;
+	const struct string_list *preferred_tips;
+
+	preferred_tips = bitmap_preferred_tips(the_repository);
+	if (!preferred_tips)
+		return;
+
+	for_each_string_list_item(item, preferred_tips) {
+		for_each_ref_in(item->string, mark_bitmap_preferred_tip, NULL);
+	}
+}
+
 static void get_object_list(int ac, const char **av)
 {
 	struct rev_info revs;
@@ -3391,6 +3799,9 @@
 	if (use_delta_islands)
 		load_delta_islands(the_repository, progress);
 
+	if (write_bitmap_index)
+		mark_bitmap_preferred_tips();
+
 	if (prepare_revision_walk(&revs))
 		die(_("revision walk setup failed"));
 	mark_edges_uninteresting(&revs, show_edge, sparse);
@@ -3489,6 +3900,7 @@
 	struct strvec rp = STRVEC_INIT;
 	int rev_list_unpacked = 0, rev_list_all = 0, rev_list_reflog = 0;
 	int rev_list_index = 0;
+	int stdin_packs = 0;
 	struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
 	struct option pack_objects_options[] = {
 		OPT_SET_INT('q', "quiet", &progress,
@@ -3539,6 +3951,8 @@
 		OPT_SET_INT_F(0, "indexed-objects", &rev_list_index,
 			      N_("include objects referred to by the index"),
 			      1, PARSE_OPT_NONEG),
+		OPT_BOOL(0, "stdin-packs", &stdin_packs,
+			 N_("read packs from stdin")),
 		OPT_BOOL(0, "stdout", &pack_to_stdout,
 			 N_("output pack to stdout")),
 		OPT_BOOL(0, "include-tag", &include_tag,
@@ -3613,6 +4027,8 @@
 	if (pack_to_stdout != !base_name || argc)
 		usage_with_options(pack_usage, pack_objects_options);
 
+	if (depth < 0)
+		depth = 0;
 	if (depth >= (1 << OE_DEPTH_BITS)) {
 		warning(_("delta chain depth %d is too deep, forcing %d"),
 			depth, (1 << OE_DEPTH_BITS) - 1);
@@ -3623,6 +4039,8 @@
 			(1U << OE_Z_DELTA_BITS) - 1);
 		cache_max_small_delta_size = (1U << OE_Z_DELTA_BITS) - 1;
 	}
+	if (window < 0)
+		window = 0;
 
 	strvec_push(&rp, "pack-objects");
 	if (thin) {
@@ -3645,7 +4063,7 @@
 		use_internal_rev_list = 1;
 		strvec_push(&rp, "--indexed-objects");
 	}
-	if (rev_list_unpacked) {
+	if (rev_list_unpacked && !stdin_packs) {
 		use_internal_rev_list = 1;
 		strvec_push(&rp, "--unpacked");
 	}
@@ -3690,8 +4108,13 @@
 	if (filter_options.choice) {
 		if (!pack_to_stdout)
 			die(_("cannot use --filter without --stdout"));
+		if (stdin_packs)
+			die(_("cannot use --filter with --stdin-packs"));
 	}
 
+	if (stdin_packs && use_internal_rev_list)
+		die(_("cannot use internal rev list with --stdin-packs"));
+
 	/*
 	 * "soft" reasons not to use bitmaps - for on-disk repack by default we want
 	 *
@@ -3750,7 +4173,13 @@
 
 	if (progress)
 		progress_state = start_progress(_("Enumerating objects"), 0);
-	if (!use_internal_rev_list)
+	if (stdin_packs) {
+		/* avoids adding objects in excluded packs */
+		ignore_packed_keep_in_core = 1;
+		read_packs_list_from_stdin();
+		if (rev_list_unpacked)
+			add_unreachable_loose_objects();
+	} else if (!use_internal_rev_list)
 		read_object_list_from_stdin();
 	else {
 		get_object_list(rp.nr, rp.v);
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index 6e115a8..8bf5c0a 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -20,7 +20,7 @@
 
 struct llist_item {
 	struct llist_item *next;
-	const struct object_id *oid;
+	struct object_id oid;
 };
 static struct llist {
 	struct llist_item *front;
@@ -95,10 +95,10 @@
 
 static inline struct llist_item *llist_insert(struct llist *list,
 					      struct llist_item *after,
-					      const struct object_id *oid)
+					      const unsigned char *oid)
 {
 	struct llist_item *new_item = llist_item_get();
-	new_item->oid = oid;
+	oidread(&new_item->oid, oid);
 	new_item->next = NULL;
 
 	if (after != NULL) {
@@ -118,7 +118,7 @@
 }
 
 static inline struct llist_item *llist_insert_back(struct llist *list,
-						   const struct object_id *oid)
+						   const unsigned char *oid)
 {
 	return llist_insert(list, list->back, oid);
 }
@@ -130,9 +130,9 @@
 
 	l = (hint == NULL) ? list->front : hint;
 	while (l) {
-		int cmp = oidcmp(l->oid, oid);
+		int cmp = oidcmp(&l->oid, oid);
 		if (cmp > 0) { /* we insert before this entry */
-			return llist_insert(list, prev, oid);
+			return llist_insert(list, prev, oid->hash);
 		}
 		if (!cmp) { /* already exists */
 			return l;
@@ -141,11 +141,11 @@
 		l = l->next;
 	}
 	/* insert at the end */
-	return llist_insert_back(list, oid);
+	return llist_insert_back(list, oid->hash);
 }
 
 /* returns a pointer to an item in front of sha1 */
-static inline struct llist_item * llist_sorted_remove(struct llist *list, const struct object_id *oid, struct llist_item *hint)
+static inline struct llist_item * llist_sorted_remove(struct llist *list, const unsigned char *oid, struct llist_item *hint)
 {
 	struct llist_item *prev, *l;
 
@@ -153,7 +153,7 @@
 	l = (hint == NULL) ? list->front : hint;
 	prev = NULL;
 	while (l) {
-		const int cmp = oidcmp(l->oid, oid);
+		const int cmp = hashcmp(l->oid.hash, oid);
 		if (cmp > 0) /* not in list, since sorted */
 			return prev;
 		if (!cmp) { /* found */
@@ -188,7 +188,7 @@
 	b = B->front;
 
 	while (b) {
-		hint = llist_sorted_remove(A, b->oid, hint);
+		hint = llist_sorted_remove(A, b->oid.hash, hint);
 		b = b->next;
 	}
 }
@@ -260,10 +260,10 @@
 		/* cmp ~ p1 - p2 */
 		if (cmp == 0) {
 			p1_hint = llist_sorted_remove(p1->unique_objects,
-					(const struct object_id *)(p1_base + p1_off),
+					p1_base + p1_off,
 					p1_hint);
 			p2_hint = llist_sorted_remove(p2->unique_objects,
-					(const struct object_id *)(p1_base + p1_off),
+					p1_base + p1_off,
 					p2_hint);
 			p1_off += p1_step;
 			p2_off += p2_step;
@@ -373,7 +373,7 @@
 		return;
 
 	/* prepare an array of packed_list for easier sorting */
-	ary = xcalloc(n, sizeof(struct pack_list *));
+	CALLOC_ARRAY(ary, n);
 	for (n = 0, p = *pl; p; p = p->next)
 		ary[n++] = p;
 
@@ -455,7 +455,7 @@
 		l = pl->remaining_objects->front;
 		while (l) {
 			hint = llist_insert_sorted_unique(all_objects,
-							  l->oid, hint);
+							  &l->oid, hint);
 			l = l->next;
 		}
 		pl = pl->next;
@@ -521,7 +521,7 @@
 	base += 256 * 4 + ((p->index_version < 2) ? 4 : 8);
 	step = the_hash_algo->rawsz + ((p->index_version < 2) ? 4 : 0);
 	while (off < p->num_objects * step) {
-		llist_insert_back(l.remaining_objects, (const struct object_id *)(base + off));
+		llist_insert_back(l.remaining_objects, base + off);
 		off += step;
 	}
 	l.all_objects_size = l.remaining_objects->size;
diff --git a/builtin/pull.c b/builtin/pull.c
index e8927fc..3e13f81 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -126,9 +126,9 @@
 	/* 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)",
-	  N_("incorporate changes by rebasing rather than merging"),
-	  PARSE_OPT_OPTARG, parse_opt_rebase),
+		"(false|true|merges|preserve|interactive)",
+		N_("incorporate changes by rebasing rather than merging"),
+		PARSE_OPT_OPTARG, parse_opt_rebase),
 	OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
 		N_("do not show a diffstat at the end of the merge"),
 		PARSE_OPT_NOARG | PARSE_OPT_NONEG),
@@ -947,7 +947,6 @@
 	struct oid_array merge_heads = OID_ARRAY_INIT;
 	struct object_id orig_head, curr_head;
 	struct object_id rebase_fork_point;
-	int autostash;
 	int rebase_unspecified = 0;
 	int can_ff;
 
@@ -982,8 +981,8 @@
 	if (get_oid("HEAD", &orig_head))
 		oidclr(&orig_head);
 
-	autostash = config_autostash;
 	if (opt_rebase) {
+		int autostash = config_autostash;
 		if (opt_autostash != -1)
 			autostash = opt_autostash;
 
@@ -1054,7 +1053,6 @@
 
 	if (opt_rebase) {
 		int ret = 0;
-		int ran_ff = 0;
 
 		struct object_id newbase;
 		struct object_id upstream;
@@ -1065,16 +1063,14 @@
 		     recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) &&
 		    submodule_touches_in_range(the_repository, &upstream, &curr_head))
 			die(_("cannot rebase with locally recorded submodule modifications"));
-		if (!autostash) {
-			if (can_ff) {
-				/* we can fast-forward this without invoking rebase */
-				opt_ff = "--ff-only";
-				ran_ff = 1;
-				ret = run_merge();
-			}
-		}
-		if (!ran_ff)
+
+		if (can_ff) {
+			/* we can fast-forward this without invoking rebase */
+			opt_ff = "--ff-only";
+			ret = run_merge();
+		} else {
 			ret = run_rebase(&newbase, &upstream);
+		}
 
 		if (!ret && (recurse_submodules == RECURSE_SUBMODULES_ON ||
 			     recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND))
diff --git a/builtin/push.c b/builtin/push.c
index 03adb58..e8b10a9 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -115,7 +115,7 @@
 			else
 				refspec_appendf(&rs, "refs/tags/%s", ref);
 		} else if (deleterefs) {
-			if (strchr(ref, ':'))
+			if (strchr(ref, ':') || !*ref)
 				die(_("--delete only accepts plain target ref names"));
 			refspec_appendf(&rs, ":%s", ref);
 		} else if (!strchr(ref, ':')) {
@@ -185,82 +185,73 @@
 	   "\n"
 	   "    git push %s HEAD:<name-of-remote-branch>\n");
 
-static void setup_push_upstream(struct remote *remote, struct branch *branch,
-				int triangular, int simple)
+static const char *get_upstream_ref(struct branch *branch, const char *remote_name)
 {
-	if (!branch)
-		die(_(message_detached_head_die), remote->name);
 	if (!branch->merge_nr || !branch->merge || !branch->remote_name)
 		die(_("The current branch %s has no upstream branch.\n"
 		    "To push the current branch and set the remote as upstream, use\n"
 		    "\n"
 		    "    git push --set-upstream %s %s\n"),
 		    branch->name,
-		    remote->name,
+		    remote_name,
 		    branch->name);
 	if (branch->merge_nr != 1)
 		die(_("The current branch %s has multiple upstream branches, "
 		    "refusing to push."), branch->name);
-	if (triangular)
-		die(_("You are pushing to remote '%s', which is not the upstream of\n"
-		      "your current branch '%s', without telling me what to push\n"
-		      "to update which remote branch."),
-		    remote->name, branch->name);
 
-	if (simple) {
-		/* Additional safety */
-		if (strcmp(branch->refname, branch->merge[0]->src))
-			die_push_simple(branch, remote);
-	}
-
-	refspec_appendf(&rs, "%s:%s", branch->refname, branch->merge[0]->src);
-}
-
-static void setup_push_current(struct remote *remote, struct branch *branch)
-{
-	if (!branch)
-		die(_(message_detached_head_die), remote->name);
-	refspec_appendf(&rs, "%s:%s", branch->refname, branch->refname);
-}
-
-static int is_workflow_triangular(struct remote *remote)
-{
-	struct remote *fetch_remote = remote_get(NULL);
-	return (fetch_remote && fetch_remote != remote);
+	return branch->merge[0]->src;
 }
 
 static void setup_default_push_refspecs(struct remote *remote)
 {
-	struct branch *branch = branch_get(NULL);
-	int triangular = is_workflow_triangular(remote);
+	struct branch *branch;
+	const char *dst;
+	int same_remote;
 
 	switch (push_default) {
-	default:
 	case PUSH_DEFAULT_MATCHING:
 		refspec_append(&rs, ":");
-		break;
-
-	case PUSH_DEFAULT_UNSPECIFIED:
-	case PUSH_DEFAULT_SIMPLE:
-		if (triangular)
-			setup_push_current(remote, branch);
-		else
-			setup_push_upstream(remote, branch, triangular, 1);
-		break;
-
-	case PUSH_DEFAULT_UPSTREAM:
-		setup_push_upstream(remote, branch, triangular, 0);
-		break;
-
-	case PUSH_DEFAULT_CURRENT:
-		setup_push_current(remote, branch);
-		break;
+		return;
 
 	case PUSH_DEFAULT_NOTHING:
 		die(_("You didn't specify any refspecs to push, and "
 		    "push.default is \"nothing\"."));
+		return;
+	default:
 		break;
 	}
+
+	branch = branch_get(NULL);
+	if (!branch)
+		die(_(message_detached_head_die), remote->name);
+
+	dst = branch->refname;
+	same_remote = !strcmp(remote->name, remote_for_branch(branch, NULL));
+
+	switch (push_default) {
+	default:
+	case PUSH_DEFAULT_UNSPECIFIED:
+	case PUSH_DEFAULT_SIMPLE:
+		if (!same_remote)
+			break;
+		if (strcmp(branch->refname, get_upstream_ref(branch, remote->name)))
+			die_push_simple(branch, remote);
+		break;
+
+	case PUSH_DEFAULT_UPSTREAM:
+		if (!same_remote)
+			die(_("You are pushing to remote '%s', which is not the upstream of\n"
+			      "your current branch '%s', without telling me what to push\n"
+			      "to update which remote branch."),
+			    remote->name, branch->name);
+		dst = get_upstream_ref(branch, remote->name);
+		break;
+
+	case PUSH_DEFAULT_CURRENT:
+		break;
+	}
+
+	refspec_appendf(&rs, "%s:%s", branch->refname, dst);
 }
 
 static const char message_advice_pull_before_push[] =
diff --git a/builtin/range-diff.c b/builtin/range-diff.c
index 78bc9fa..5031884 100644
--- a/builtin/range-diff.c
+++ b/builtin/range-diff.c
@@ -25,7 +25,7 @@
 	struct option range_diff_options[] = {
 		OPT_INTEGER(0, "creation-factor",
 			    &range_diff_opts.creation_factor,
-			    N_("Percentage by which creation is weighted")),
+			    N_("percentage by which creation is weighted")),
 		OPT_BOOL(0, "no-dual-color", &simple_color,
 			    N_("use simple diff colors")),
 		OPT_PASSTHRU_ARGV(0, "notes", &other_arg,
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 840dbd7..12f0931 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -100,8 +100,8 @@
 	char *strategy, *strategy_opts;
 	struct strbuf git_format_patch_opt;
 	int reschedule_failed_exec;
-	int use_legacy_rebase;
 	int reapply_cherry_picks;
+	int fork_point;
 };
 
 #define REBASE_OPTIONS_INIT {			  	\
@@ -111,7 +111,8 @@
 		.default_backend = "merge",	  	\
 		.flags = REBASE_NO_QUIET, 		\
 		.git_am_opts = STRVEC_INIT,		\
-		.git_format_patch_opt = STRBUF_INIT	\
+		.git_format_patch_opt = STRBUF_INIT,	\
+		.fork_point = -1,			\
 	}
 
 static struct replay_opts get_replay_opts(const struct rebase_options *opts)
@@ -484,7 +485,7 @@
 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;
+	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"),
@@ -737,6 +738,7 @@
 	int ret = 0;
 
 	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);
 	/*
@@ -1095,8 +1097,8 @@
 		return 0;
 	}
 
-	if (!strcmp(var, "rebase.usebuiltin")) {
-		opts->use_legacy_rebase = !git_config_bool(var, value);
+	if (!strcmp(var, "rebase.forkpoint")) {
+		opts->fork_point = git_config_bool(var, value) ? -1 : 0;
 		return 0;
 	}
 
@@ -1138,7 +1140,7 @@
 
 	merge_bases = get_merge_bases(onto, head);
 	if (!merge_bases || merge_bases->next) {
-		oidcpy(merge_base, &null_oid);
+		oidcpy(merge_base, null_oid());
 		goto done;
 	}
 
@@ -1306,7 +1308,6 @@
 	const char *gpg_sign = NULL;
 	struct string_list exec = STRING_LIST_INIT_NODUP;
 	const char *rebase_merges = NULL;
-	int fork_point = -1;
 	struct string_list strategy_options = STRING_LIST_INIT_NODUP;
 	struct object_id squash_onto;
 	char *squash_onto_name = NULL;
@@ -1406,7 +1407,7 @@
 			N_("mode"),
 			N_("try to rebase merges instead of skipping them"),
 			PARSE_OPT_OPTARG, NULL, (intptr_t)""},
-		OPT_BOOL(0, "fork-point", &fork_point,
+		OPT_BOOL(0, "fork-point", &options.fork_point,
 			 N_("use 'merge-base --fork-point' to refine upstream")),
 		OPT_STRING('s', "strategy", &options.strategy,
 			   N_("strategy"), N_("use the given merge strategy")),
@@ -1435,11 +1436,6 @@
 	gpg_sign = options.gpg_sign_opt ? "" : NULL;
 	FREE_AND_NULL(options.gpg_sign_opt);
 
-	if (options.use_legacy_rebase ||
-	    !git_env_bool("GIT_TEST_REBASE_USE_BUILTIN", -1))
-		warning(_("the rebase.useBuiltin support has been removed!\n"
-			  "See its entry in 'git help config' for details."));
-
 	strbuf_reset(&buf);
 	strbuf_addf(&buf, "%s/applying", apply_dir());
 	if(file_exists(buf.buf))
@@ -1494,7 +1490,7 @@
 			die(_("cannot combine '--keep-base' with '--root'"));
 	}
 
-	if (options.root && fork_point > 0)
+	if (options.root && options.fork_point > 0)
 		die(_("cannot combine '--root' with '--fork-point'"));
 
 	if (action != ACTION_NONE && !in_progress)
@@ -1840,8 +1836,8 @@
 								    NULL);
 			if (!options.upstream_name)
 				error_on_missing_default_upstream();
-			if (fork_point < 0)
-				fork_point = 1;
+			if (options.fork_point < 0)
+				options.fork_point = 1;
 		} else {
 			options.upstream_name = argv[0];
 			argc--;
@@ -1945,7 +1941,7 @@
 	} else
 		BUG("unexpected number of arguments left to parse");
 
-	if (fork_point > 0) {
+	if (options.fork_point > 0) {
 		struct commit *head =
 			lookup_commit_reference(the_repository,
 						&options.orig_head);
@@ -2113,6 +2109,7 @@
 	free(options.head_name);
 	free(options.gpg_sign_opt);
 	free(options.cmd);
+	strbuf_release(&options.git_format_patch_opt);
 	free(squash_onto_name);
 	return ret;
 }
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index b89ce31..2d1f97e 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -329,7 +329,7 @@
 	for_each_alternate_ref(show_one_alternate_ref, &seen);
 	oidset_clear(&seen);
 	if (!sent_capabilities)
-		show_ref("capabilities^{}", &null_oid);
+		show_ref("capabilities^{}", null_oid());
 
 	advertise_shallow_grafts(1);
 
@@ -358,7 +358,7 @@
 	char *p;
 	int len;
 
-	ref_pattern = xcalloc(1, sizeof(struct proc_receive_ref));
+	CALLOC_ARRAY(ref_pattern, 1);
 	p = strchr(prefix, ':');
 	if (p) {
 		while (prefix < p) {
@@ -425,9 +425,6 @@
 	return 0;
 }
 
-static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
-static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
-
 static void report_message(const char *prefix, const char *err, va_list params)
 {
 	int sz;
@@ -445,6 +442,7 @@
 		xwrite(2, msg, sz);
 }
 
+__attribute__((format (printf, 1, 2)))
 static void rp_warning(const char *err, ...)
 {
 	va_list params;
@@ -453,6 +451,7 @@
 	va_end(params);
 }
 
+__attribute__((format (printf, 1, 2)))
 static void rp_error(const char *err, ...)
 {
 	va_list params;
@@ -1024,7 +1023,7 @@
 			}
 			if (new_report) {
 				if (!hint->report) {
-					hint->report = xcalloc(1, sizeof(struct ref_push_report));
+					CALLOC_ARRAY(hint->report, 1);
 					report = hint->report;
 				} else {
 					report = hint->report;
@@ -2275,7 +2274,7 @@
 		status = start_command(&child);
 		if (status)
 			return "index-pack fork failed";
-		pack_lockfile = index_pack_lockfile(child.out);
+		pack_lockfile = index_pack_lockfile(child.out, NULL);
 		close(child.out);
 		status = finish_command(&child);
 		if (status)
@@ -2313,11 +2312,9 @@
 	ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
 	assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
 
-	si->need_reachability_test =
-		xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
-	si->reachable =
-		xcalloc(si->shallow->nr, sizeof(*si->reachable));
-	si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
+	CALLOC_ARRAY(si->need_reachability_test, si->shallow->nr);
+	CALLOC_ARRAY(si->reachable, si->shallow->nr);
+	CALLOC_ARRAY(si->shallow_ref, si->ref->nr);
 
 	for (i = 0; i < si->nr_ours; i++)
 		si->need_reachability_test[si->ours[i]] = 1;
diff --git a/builtin/remote.c b/builtin/remote.c
index d11a558..7f88e6c 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -221,7 +221,7 @@
 
 	if (fetch_tags != TAGS_DEFAULT) {
 		strbuf_reset(&buf);
-		strbuf_addf(&buf, "remote.%s.tagopt", name);
+		strbuf_addf(&buf, "remote.%s.tagOpt", name);
 		git_config_set(buf.buf,
 			       fetch_tags == TAGS_SET ? "--tags" : "--no-tags");
 	}
@@ -746,7 +746,7 @@
 		}
 		if (info->push_remote_name && !strcmp(info->push_remote_name, rename.old_name)) {
 			strbuf_reset(&buf);
-			strbuf_addf(&buf, "branch.%s.pushremote", item->string);
+			strbuf_addf(&buf, "branch.%s.pushRemote", item->string);
 			git_config_set(buf.buf, rename.new_name);
 		}
 	}
@@ -938,9 +938,6 @@
 				 struct ref_states *states,
 				 int query)
 {
-	struct transport *transport;
-	const struct ref *remote_refs;
-
 	states->remote = remote_get(name);
 	if (!states->remote)
 		return error(_("No such remote: '%s'"), name);
@@ -948,10 +945,12 @@
 	read_branches();
 
 	if (query) {
+		struct transport *transport;
+		const struct ref *remote_refs;
+
 		transport = transport_get(states->remote, states->remote->url_nr > 0 ?
 			states->remote->url[0] : NULL);
 		remote_refs = transport_get_remote_refs(transport, NULL);
-		transport_disconnect(transport);
 
 		states->queried = 1;
 		if (query & GET_REF_STATES)
@@ -960,6 +959,7 @@
 			get_head_names(remote_refs, states);
 		if (query & GET_PUSH_REF_STATES)
 			get_push_ref_states(remote_refs, states);
+		transport_disconnect(transport);
 	} else {
 		for_each_ref(append_ref_to_tracked_list, states);
 		string_list_sort(&states->tracked);
diff --git a/builtin/repack.c b/builtin/repack.c
index 9f00806..5f9bc74 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -20,7 +20,7 @@
 static int pack_kept_objects = -1;
 static int write_bitmaps = -1;
 static int use_delta_islands;
-static char *packdir, *packtmp;
+static char *packdir, *packtmp_name, *packtmp;
 
 static const char *const git_repack_usage[] = {
 	N_("git repack [<options>]"),
@@ -297,6 +297,142 @@
 #define ALL_INTO_ONE 1
 #define LOOSEN_UNREACHABLE 2
 
+struct pack_geometry {
+	struct packed_git **pack;
+	uint32_t pack_nr, pack_alloc;
+	uint32_t split;
+};
+
+static uint32_t geometry_pack_weight(struct packed_git *p)
+{
+	if (open_pack_index(p))
+		die(_("cannot open index for %s"), p->pack_name);
+	return p->num_objects;
+}
+
+static int geometry_cmp(const void *va, const void *vb)
+{
+	uint32_t aw = geometry_pack_weight(*(struct packed_git **)va),
+		 bw = geometry_pack_weight(*(struct packed_git **)vb);
+
+	if (aw < bw)
+		return -1;
+	if (aw > bw)
+		return 1;
+	return 0;
+}
+
+static void init_pack_geometry(struct pack_geometry **geometry_p)
+{
+	struct packed_git *p;
+	struct pack_geometry *geometry;
+
+	*geometry_p = xcalloc(1, sizeof(struct pack_geometry));
+	geometry = *geometry_p;
+
+	for (p = get_all_packs(the_repository); p; p = p->next) {
+		if (!pack_kept_objects && p->pack_keep)
+			continue;
+
+		ALLOC_GROW(geometry->pack,
+			   geometry->pack_nr + 1,
+			   geometry->pack_alloc);
+
+		geometry->pack[geometry->pack_nr] = p;
+		geometry->pack_nr++;
+	}
+
+	QSORT(geometry->pack, geometry->pack_nr, geometry_cmp);
+}
+
+static void split_pack_geometry(struct pack_geometry *geometry, int factor)
+{
+	uint32_t i;
+	uint32_t split;
+	off_t total_size = 0;
+
+	if (!geometry->pack_nr) {
+		geometry->split = geometry->pack_nr;
+		return;
+	}
+
+	/*
+	 * First, count the number of packs (in descending order of size) which
+	 * already form a geometric progression.
+	 */
+	for (i = geometry->pack_nr - 1; i > 0; i--) {
+		struct packed_git *ours = geometry->pack[i];
+		struct packed_git *prev = geometry->pack[i - 1];
+
+		if (unsigned_mult_overflows(factor, geometry_pack_weight(prev)))
+			die(_("pack %s too large to consider in geometric "
+			      "progression"),
+			    prev->pack_name);
+
+		if (geometry_pack_weight(ours) < factor * geometry_pack_weight(prev))
+			break;
+	}
+
+	split = i;
+
+	if (split) {
+		/*
+		 * Move the split one to the right, since the top element in the
+		 * last-compared pair can't be in the progression. Only do this
+		 * when we split in the middle of the array (otherwise if we got
+		 * to the end, then the split is in the right place).
+		 */
+		split++;
+	}
+
+	/*
+	 * Then, anything to the left of 'split' must be in a new pack. But,
+	 * creating that new pack may cause packs in the heavy half to no longer
+	 * form a geometric progression.
+	 *
+	 * Compute an expected size of the new pack, and then determine how many
+	 * packs in the heavy half need to be joined into it (if any) to restore
+	 * the geometric progression.
+	 */
+	for (i = 0; i < split; i++) {
+		struct packed_git *p = geometry->pack[i];
+
+		if (unsigned_add_overflows(total_size, geometry_pack_weight(p)))
+			die(_("pack %s too large to roll up"), p->pack_name);
+		total_size += geometry_pack_weight(p);
+	}
+	for (i = split; i < geometry->pack_nr; i++) {
+		struct packed_git *ours = geometry->pack[i];
+
+		if (unsigned_mult_overflows(factor, total_size))
+			die(_("pack %s too large to roll up"), ours->pack_name);
+
+		if (geometry_pack_weight(ours) < factor * total_size) {
+			if (unsigned_add_overflows(total_size,
+						   geometry_pack_weight(ours)))
+				die(_("pack %s too large to roll up"),
+				    ours->pack_name);
+
+			split++;
+			total_size += geometry_pack_weight(ours);
+		} else
+			break;
+	}
+
+	geometry->split = split;
+}
+
+static void clear_pack_geometry(struct pack_geometry *geometry)
+{
+	if (!geometry)
+		return;
+
+	free(geometry->pack);
+	geometry->pack_nr = 0;
+	geometry->pack_alloc = 0;
+	geometry->split = 0;
+}
+
 int cmd_repack(int argc, const char **argv, const char *prefix)
 {
 	struct child_process cmd = CHILD_PROCESS_INIT;
@@ -304,6 +440,7 @@
 	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 pack_geometry *geometry = NULL;
 	struct strbuf line = STRBUF_INIT;
 	int i, ext, ret;
 	FILE *out;
@@ -316,6 +453,7 @@
 	struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
 	int no_update_server_info = 0;
 	struct pack_objects_args po_args = {NULL};
+	int geometric_factor = 0;
 
 	struct option builtin_repack_options[] = {
 		OPT_BIT('a', NULL, &pack_everything,
@@ -356,6 +494,8 @@
 				N_("repack objects in packs marked with .keep")),
 		OPT_STRING_LIST(0, "keep-pack", &keep_pack_list, N_("name"),
 				N_("do not repack this pack")),
+		OPT_INTEGER('g', "geometric", &geometric_factor,
+			    N_("find a geometric progression with factor <N>")),
 		OPT_END()
 	};
 
@@ -382,8 +522,16 @@
 	if (write_bitmaps && !(pack_everything & ALL_INTO_ONE))
 		die(_(incremental_bitmap_conflict_error));
 
+	if (geometric_factor) {
+		if (pack_everything)
+			die(_("--geometric is incompatible with -A, -a"));
+		init_pack_geometry(&geometry);
+		split_pack_geometry(geometry, geometric_factor);
+	}
+
 	packdir = mkpathdup("%s/pack", get_object_directory());
-	packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
+	packtmp_name = xstrfmt(".tmp-%d-pack", (int)getpid());
+	packtmp = mkpathdup("%s/%s", packdir, packtmp_name);
 
 	sigchain_push_common(remove_pack_on_signal);
 
@@ -396,9 +544,21 @@
 		strvec_pushf(&cmd.args, "--keep-pack=%s",
 			     keep_pack_list.items[i].string);
 	strvec_push(&cmd.args, "--non-empty");
-	strvec_push(&cmd.args, "--all");
-	strvec_push(&cmd.args, "--reflog");
-	strvec_push(&cmd.args, "--indexed-objects");
+	if (!geometry) {
+		/*
+		 * We need to grab all reachable objects, including those that
+		 * are reachable from reflogs and the index.
+		 *
+		 * When repacking into a geometric progression of packs,
+		 * however, we ask 'git pack-objects --stdin-packs', and it is
+		 * not about packing objects based on reachability but about
+		 * repacking all the objects in specified packs and loose ones
+		 * (indeed, --stdin-packs is incompatible with these options).
+		 */
+		strvec_push(&cmd.args, "--all");
+		strvec_push(&cmd.args, "--reflog");
+		strvec_push(&cmd.args, "--indexed-objects");
+	}
 	if (has_promisor_remote())
 		strvec_push(&cmd.args, "--exclude-promisor-objects");
 	if (write_bitmaps > 0)
@@ -414,6 +574,10 @@
 		repack_promisor_objects(&po_args, &names);
 
 		if (existing_packs.nr && delete_redundant) {
+			for_each_string_list_item(item, &names) {
+				strvec_pushf(&cmd.args, "--keep-pack=%s-%s.pack",
+					     packtmp_name, item->string);
+			}
 			if (unpack_unreachable) {
 				strvec_pushf(&cmd.args,
 					     "--unpack-unreachable=%s",
@@ -429,17 +593,37 @@
 				strvec_push(&cmd.env_array, "GIT_REF_PARANOIA=1");
 			}
 		}
+	} else if (geometry) {
+		strvec_push(&cmd.args, "--stdin-packs");
+		strvec_push(&cmd.args, "--unpacked");
 	} else {
 		strvec_push(&cmd.args, "--unpacked");
 		strvec_push(&cmd.args, "--incremental");
 	}
 
-	cmd.no_stdin = 1;
+	if (geometry)
+		cmd.in = -1;
+	else
+		cmd.no_stdin = 1;
 
 	ret = start_command(&cmd);
 	if (ret)
 		return ret;
 
+	if (geometry) {
+		FILE *in = xfdopen(cmd.in, "w");
+		/*
+		 * The resulting pack should contain all objects in packs that
+		 * are going to be rolled up, but exclude objects in packs which
+		 * are being left alone.
+		 */
+		for (i = 0; i < geometry->split; i++)
+			fprintf(in, "%s\n", pack_basename(geometry->pack[i]));
+		for (i = geometry->split; i < geometry->pack_nr; i++)
+			fprintf(in, "^%s\n", pack_basename(geometry->pack[i]));
+		fclose(in);
+	}
+
 	out = xfdopen(cmd.out, "r");
 	while (strbuf_getline_lf(&line, out) != EOF) {
 		if (line.len != the_hash_algo->hexsz)
@@ -507,6 +691,25 @@
 			if (!string_list_has_string(&names, sha1))
 				remove_redundant_pack(packdir, item->string);
 		}
+
+		if (geometry) {
+			struct strbuf buf = STRBUF_INIT;
+
+			uint32_t i;
+			for (i = 0; i < geometry->split; i++) {
+				struct packed_git *p = geometry->pack[i];
+				if (string_list_has_string(&names,
+							   hash_to_hex(p->hash)))
+					continue;
+
+				strbuf_reset(&buf);
+				strbuf_addstr(&buf, pack_basename(p));
+				strbuf_strip_suffix(&buf, ".pack");
+
+				remove_redundant_pack(packdir, buf.buf);
+			}
+			strbuf_release(&buf);
+		}
 		if (!po_args.quiet && isatty(2))
 			opts |= PRUNE_PACKED_VERBOSE;
 		prune_packed_objects(opts);
@@ -528,6 +731,7 @@
 	string_list_clear(&names, 0);
 	string_list_clear(&rollback, 0);
 	string_list_clear(&existing_packs, 0);
+	clear_pack_geometry(geometry);
 	strbuf_release(&line);
 
 	return 0;
diff --git a/builtin/rerere.c b/builtin/rerere.c
index fd3be17..83d7a77 100644
--- a/builtin/rerere.c
+++ b/builtin/rerere.c
@@ -28,7 +28,7 @@
 {
 	xpparam_t xpp;
 	xdemitconf_t xecfg;
-	xdemitcb_t ecb;
+	xdemitcb_t ecb = { .out_line = outf };
 	mmfile_t minus, plus;
 	int ret;
 
@@ -41,8 +41,6 @@
 	xpp.flags = 0;
 	memset(&xecfg, 0, sizeof(xecfg));
 	xecfg.ctxlen = 3;
-	ecb.out_hunk = NULL;
-	ecb.out_line = outf;
 	ret = xdi_diff(&minus, &plus, &xpp, &xecfg, &ecb);
 
 	free(minus.ptr);
diff --git a/builtin/reset.c b/builtin/reset.c
index c635b06..43e855c 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -425,7 +425,7 @@
 
 			dwim_ref(rev, strlen(rev), &dummy, &ref, 0);
 			if (ref && !starts_with(ref, "refs/"))
-				ref = NULL;
+				FREE_AND_NULL(ref);
 
 			err = reset_index(ref, &oid, reset_type, quiet);
 			if (reset_type == KEEP && !err)
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 25c6c3b..36cb909 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -80,6 +80,19 @@
 
 #define DEFAULT_OIDSET_SIZE     (16*1024)
 
+static int show_disk_usage;
+static off_t total_disk_usage;
+
+static off_t get_object_disk_usage(struct object *obj)
+{
+	off_t size;
+	struct object_info oi = OBJECT_INFO_INIT;
+	oi.disk_sizep = &size;
+	if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
+		die(_("unable to get disk usage of %s"), oid_to_hex(&obj->oid));
+	return size;
+}
+
 static void finish_commit(struct commit *commit);
 static void show_commit(struct commit *commit, void *data)
 {
@@ -88,6 +101,9 @@
 
 	display_progress(progress, ++progress_counter);
 
+	if (show_disk_usage)
+		total_disk_usage += get_object_disk_usage(&commit->object);
+
 	if (info->flags & REV_LIST_QUIET) {
 		finish_commit(commit);
 		return;
@@ -111,13 +127,15 @@
 	if (info->header_prefix)
 		fputs(info->header_prefix, stdout);
 
-	if (!revs->graph)
-		fputs(get_revision_mark(revs, commit), stdout);
-	if (revs->abbrev_commit && revs->abbrev)
-		fputs(find_unique_abbrev(&commit->object.oid, revs->abbrev),
-		      stdout);
-	else
-		fputs(oid_to_hex(&commit->object.oid), stdout);
+	if (revs->include_header) {
+		if (!revs->graph)
+			fputs(get_revision_mark(revs, commit), stdout);
+		if (revs->abbrev_commit && revs->abbrev)
+			fputs(find_unique_abbrev(&commit->object.oid, revs->abbrev),
+			      stdout);
+		else
+			fputs(oid_to_hex(&commit->object.oid), stdout);
+	}
 	if (revs->print_parents) {
 		struct commit_list *parents = commit->parents;
 		while (parents) {
@@ -137,7 +155,7 @@
 	show_decorations(revs, commit);
 	if (revs->commit_format == CMIT_FMT_ONELINE)
 		putchar(' ');
-	else
+	else if (revs->include_header)
 		putchar('\n');
 
 	if (revs->verbose_header) {
@@ -258,6 +276,8 @@
 	if (finish_object(obj, name, cb_data))
 		return;
 	display_progress(progress, ++progress_counter);
+	if (show_disk_usage)
+		total_disk_usage += get_object_disk_usage(obj);
 	if (info->flags & REV_LIST_QUIET)
 		return;
 
@@ -380,7 +400,8 @@
 }
 
 static int try_bitmap_count(struct rev_info *revs,
-			    struct list_objects_filter_options *filter)
+			    struct list_objects_filter_options *filter,
+			    int filter_provided_objects)
 {
 	uint32_t commit_count = 0,
 		 tag_count = 0,
@@ -415,7 +436,7 @@
 	 */
 	max_count = revs->max_count;
 
-	bitmap_git = prepare_bitmap_walk(revs, filter);
+	bitmap_git = prepare_bitmap_walk(revs, filter, filter_provided_objects);
 	if (!bitmap_git)
 		return -1;
 
@@ -432,7 +453,8 @@
 }
 
 static int try_bitmap_traversal(struct rev_info *revs,
-				struct list_objects_filter_options *filter)
+				struct list_objects_filter_options *filter,
+				int filter_provided_objects)
 {
 	struct bitmap_index *bitmap_git;
 
@@ -443,7 +465,7 @@
 	if (revs->max_count >= 0)
 		return -1;
 
-	bitmap_git = prepare_bitmap_walk(revs, filter);
+	bitmap_git = prepare_bitmap_walk(revs, filter, filter_provided_objects);
 	if (!bitmap_git)
 		return -1;
 
@@ -452,6 +474,24 @@
 	return 0;
 }
 
+static int try_bitmap_disk_usage(struct rev_info *revs,
+				 struct list_objects_filter_options *filter,
+				 int filter_provided_objects)
+{
+	struct bitmap_index *bitmap_git;
+
+	if (!show_disk_usage)
+		return -1;
+
+	bitmap_git = prepare_bitmap_walk(revs, filter, filter_provided_objects);
+	if (!bitmap_git)
+		return -1;
+
+	printf("%"PRIuMAX"\n",
+	       (uintmax_t)get_disk_usage_from_bitmap(bitmap_git, revs));
+	return 0;
+}
+
 int cmd_rev_list(int argc, const char **argv, const char *prefix)
 {
 	struct rev_info revs;
@@ -464,6 +504,7 @@
 	int bisect_show_vars = 0;
 	int bisect_find_all = 0;
 	int use_bitmap_index = 0;
+	int filter_provided_objects = 0;
 	const char *show_progress = NULL;
 
 	if (argc == 2 && !strcmp(argv[1], "-h"))
@@ -473,6 +514,7 @@
 	repo_init_revisions(the_repository, &revs, prefix);
 	revs.abbrev = DEFAULT_ABBREV;
 	revs.commit_format = CMIT_FMT_UNSPECIFIED;
+	revs.include_header = 1;
 
 	/*
 	 * Scan the argument list before invoking setup_revisions(), so that we
@@ -564,6 +606,10 @@
 			list_objects_filter_set_no_filter(&filter_options);
 			continue;
 		}
+		if (!strcmp(arg, "--filter-provided-objects")) {
+			filter_provided_objects = 1;
+			continue;
+		}
 		if (!strcmp(arg, "--filter-print-omitted")) {
 			arg_print_omitted = 1;
 			continue;
@@ -584,13 +630,31 @@
 			continue;
 		}
 
+		if (!strcmp(arg, ("--commit-header"))) {
+			revs.include_header = 1;
+			continue;
+		}
+
+		if (!strcmp(arg, ("--no-commit-header"))) {
+			revs.include_header = 0;
+			continue;
+		}
+
+		if (!strcmp(arg, "--disk-usage")) {
+			show_disk_usage = 1;
+			info.flags |= REV_LIST_QUIET;
+			continue;
+		}
+
 		usage(rev_list_usage);
 
 	}
+	if (revs.commit_format != CMIT_FMT_USERFORMAT)
+		revs.include_header = 1;
 	if (revs.commit_format != CMIT_FMT_UNSPECIFIED) {
 		/* The command line has a --pretty  */
 		info.hdr_termination = '\n';
-		if (revs.commit_format == CMIT_FMT_ONELINE)
+		if (revs.commit_format == CMIT_FMT_ONELINE || !revs.include_header)
 			info.header_prefix = "";
 		else
 			info.header_prefix = "commit ";
@@ -624,9 +688,11 @@
 		progress = start_delayed_progress(show_progress, 0);
 
 	if (use_bitmap_index) {
-		if (!try_bitmap_count(&revs, &filter_options))
+		if (!try_bitmap_count(&revs, &filter_options, filter_provided_objects))
 			return 0;
-		if (!try_bitmap_traversal(&revs, &filter_options))
+		if (!try_bitmap_disk_usage(&revs, &filter_options, filter_provided_objects))
+			return 0;
+		if (!try_bitmap_traversal(&revs, &filter_options, filter_provided_objects))
 			return 0;
 	}
 
@@ -651,6 +717,16 @@
 			return show_bisect_vars(&info, reaches, all);
 	}
 
+	if (filter_provided_objects) {
+		struct commit_list *c;
+		for (i = 0; i < revs.pending.nr; i++) {
+			struct object_array_entry *pending = revs.pending.objects + i;
+			pending->item->flags |= NOT_USER_GIVEN;
+		}
+		for (c = revs.commits; c; c = c->next)
+			c->item->object.flags |= NOT_USER_GIVEN;
+	}
+
 	if (arg_print_omitted)
 		oidset_init(&omitted_objects, DEFAULT_OIDSET_SIZE);
 	if (arg_missing_action == MA_PRINT)
@@ -690,5 +766,8 @@
 			printf("%d\n", revs.count_left + revs.count_right);
 	}
 
+	if (show_disk_usage)
+		printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage);
+
 	return 0;
 }
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 85bad90..22c4e1a 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -435,11 +435,11 @@
 	/* get the usage up to the first line with a -- on it */
 	for (;;) {
 		if (strbuf_getline(&sb, stdin) == EOF)
-			die("premature end of input");
+			die(_("premature end of input"));
 		ALLOC_GROW(usage, unb + 1, usz);
 		if (!strcmp("--", sb.buf)) {
 			if (unb < 1)
-				die("no usage string given before the `--' separator");
+				die(_("no usage string given before the `--' separator"));
 			usage[unb] = NULL;
 			break;
 		}
@@ -545,7 +545,7 @@
 	if (quiet)
 		exit(1);
 	else
-		die("Needed a single revision");
+		die(_("Needed a single revision"));
 }
 
 static const char builtin_rev_parse_usage[] =
@@ -709,10 +709,10 @@
 			if (!strcmp(arg, "--resolve-git-dir")) {
 				const char *gitdir = argv[++i];
 				if (!gitdir)
-					die("--resolve-git-dir requires an argument");
+					die(_("--resolve-git-dir requires an argument"));
 				gitdir = resolve_gitdir(gitdir);
 				if (!gitdir)
-					die("not a gitdir '%s'", argv[i]);
+					die(_("not a gitdir '%s'"), argv[i]);
 				puts(gitdir);
 				continue;
 			}
@@ -736,7 +736,7 @@
 		if (!seen_end_of_options && *arg == '-') {
 			if (!strcmp(arg, "--git-path")) {
 				if (!argv[i + 1])
-					die("--git-path requires an argument");
+					die(_("--git-path requires an argument"));
 				strbuf_reset(&buf);
 				print_path(git_path("%s", argv[i + 1]), prefix,
 						format,
@@ -746,7 +746,7 @@
 			}
 			if (!strcmp(arg,"-n")) {
 				if (++i >= argc)
-					die("-n requires an argument");
+					die(_("-n requires an argument"));
 				if ((filter & DO_FLAGS) && (filter & DO_REVS)) {
 					show(arg);
 					show(argv[i]);
@@ -759,25 +759,27 @@
 				continue;
 			}
 			if (opt_with_value(arg, "--path-format", &arg)) {
+				if (!arg)
+					die(_("--path-format requires an argument"));
 				if (!strcmp(arg, "absolute")) {
 					format = FORMAT_CANONICAL;
 				} else if (!strcmp(arg, "relative")) {
 					format = FORMAT_RELATIVE;
 				} else {
-					die("unknown argument to --path-format: %s", arg);
+					die(_("unknown argument to --path-format: %s"), arg);
 				}
 				continue;
 			}
 			if (!strcmp(arg, "--default")) {
 				def = argv[++i];
 				if (!def)
-					die("--default requires an argument");
+					die(_("--default requires an argument"));
 				continue;
 			}
 			if (!strcmp(arg, "--prefix")) {
 				prefix = argv[++i];
 				if (!prefix)
-					die("--prefix requires an argument");
+					die(_("--prefix requires an argument"));
 				startup_info->prefix = prefix;
 				output_prefix = 1;
 				continue;
@@ -846,7 +848,7 @@
 					else if (!strcmp(arg, "loose"))
 						abbrev_ref_strict = 0;
 					else
-						die("unknown mode for --abbrev-ref: %s",
+						die(_("unknown mode for --abbrev-ref: %s"),
 						    arg);
 				}
 				continue;
@@ -890,7 +892,7 @@
 				if (work_tree)
 					print_path(work_tree, prefix, format, DEFAULT_UNMODIFIED);
 				else
-					die("this operation must be run in a work tree");
+					die(_("this operation must be run in a work tree"));
 				continue;
 			}
 			if (!strcmp(arg, "--show-superproject-working-tree")) {
@@ -1018,7 +1020,7 @@
 				if (strcmp(val, "storage") &&
 				    strcmp(val, "input") &&
 				    strcmp(val, "output"))
-					die("unknown mode for --show-object-format: %s",
+					die(_("unknown mode for --show-object-format: %s"),
 					    arg);
 				puts(the_hash_algo->name);
 				continue;
@@ -1056,7 +1058,7 @@
 		if (verify)
 			die_no_single_rev(quiet);
 		if (has_dashdash)
-			die("bad revision '%s'", arg);
+			die(_("bad revision '%s'"), arg);
 		as_is = 1;
 		if (!show_file(arg, output_prefix))
 			continue;
diff --git a/builtin/revert.c b/builtin/revert.c
index 314a86c..237f2f1 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -182,7 +182,7 @@
 				"--signoff", opts->signoff,
 				"--no-commit", opts->no_commit,
 				"-x", opts->record_origin,
-				"--edit", opts->edit,
+				"--edit", opts->edit > 0,
 				NULL);
 
 	if (cmd) {
@@ -230,8 +230,6 @@
 	struct replay_opts opts = REPLAY_OPTS_INIT;
 	int res;
 
-	if (isatty(0))
-		opts.edit = 1;
 	opts.action = REPLAY_REVERT;
 	sequencer_init_config(&opts);
 	res = run_sequencer(argc, argv, &opts);
diff --git a/builtin/rm.c b/builtin/rm.c
index 4858631..8a24c71 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -5,6 +5,7 @@
  */
 #define USE_THE_INDEX_COMPATIBILITY_MACROS
 #include "builtin.h"
+#include "advice.h"
 #include "config.h"
 #include "lockfile.h"
 #include "dir.h"
@@ -254,7 +255,7 @@
 int cmd_rm(int argc, const char **argv, const char *prefix)
 {
 	struct lock_file lock_file = LOCK_INIT;
-	int i;
+	int i, ret = 0;
 	struct pathspec pathspec;
 	char *seen;
 
@@ -293,8 +294,12 @@
 
 	seen = xcalloc(pathspec.nr, 1);
 
+	/* TODO: audit for interaction with sparse-index. */
+	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))
+			continue;
 		if (!ce_path_match(&the_index, ce, &pathspec, seen))
 			continue;
 		ALLOC_GROW(list.entry, list.nr + 1, list.alloc);
@@ -308,25 +313,37 @@
 	if (pathspec.nr) {
 		const char *original;
 		int seen_any = 0;
+		char *skip_worktree_seen = NULL;
+		struct string_list only_match_skip_worktree = STRING_LIST_INIT_NODUP;
+
 		for (i = 0; i < pathspec.nr; i++) {
 			original = pathspec.items[i].original;
-			if (!seen[i]) {
-				if (!ignore_unmatch) {
-					die(_("pathspec '%s' did not match any files"),
-					    original);
-				}
-			}
-			else {
+			if (seen[i])
 				seen_any = 1;
-			}
+			else if (ignore_unmatch)
+				continue;
+			else if (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);
+
 			if (!recursive && seen[i] == MATCHED_RECURSIVELY)
 				die(_("not removing '%s' recursively without -r"),
 				    *original ? original : ".");
 		}
 
+		if (only_match_skip_worktree.nr) {
+			advise_on_updating_sparse_paths(&only_match_skip_worktree);
+			ret = 1;
+		}
+		free(skip_worktree_seen);
+		string_list_clear(&only_match_skip_worktree, 0);
+
 		if (!seen_any)
-			exit(0);
+			exit(ret);
 	}
+	clear_pathspec(&pathspec);
+	free(seen);
 
 	if (!index_only)
 		submodules_absorb_gitdir_if_needed();
@@ -405,5 +422,5 @@
 			       COMMIT_LOCK | SKIP_IF_UNCHANGED))
 		die(_("Unable to write new index file"));
 
-	return 0;
+	return ret;
 }
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index d6d2dab..d77ce7a 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -939,9 +939,12 @@
 					mark = '*';
 				else
 					mark = '+';
-				printf("%s%c%s",
-				       get_color_code(i),
-				       mark, get_color_reset_code());
+				if (mark == ' ')
+					putchar(mark);
+				else
+					printf("%s%c%s",
+					       get_color_code(i),
+					       mark, get_color_reset_code());
 			}
 			putchar(' ');
 		}
diff --git a/builtin/show-index.c b/builtin/show-index.c
index 8106b03..0e0b9fb 100644
--- a/builtin/show-index.c
+++ b/builtin/show-index.c
@@ -71,9 +71,11 @@
 			uint32_t off;
 		} *entries;
 		ALLOC_ARRAY(entries, nr);
-		for (i = 0; i < nr; i++)
+		for (i = 0; i < nr; i++) {
 			if (fread(entries[i].oid.hash, hashsz, 1, stdin) != 1)
 				die("unable to read sha1 %u/%u", i, nr);
+			entries[i].oid.algo = hash_algo_by_ptr(the_hash_algo);
+		}
 		for (i = 0; i < nr; i++)
 			if (fread(&entries[i].crc, 4, 1, stdin) != 1)
 				die("unable to read crc %u/%u", i, nr);
diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
index 2306a9a..a4bdd7c 100644
--- a/builtin/sparse-checkout.c
+++ b/builtin/sparse-checkout.c
@@ -14,6 +14,7 @@
 #include "unpack-trees.h"
 #include "wt-status.h"
 #include "quote.h"
+#include "sparse-index.h"
 
 static const char *empty_base = "";
 
@@ -64,7 +65,7 @@
 	pl.use_cone_patterns = core_sparse_checkout_cone;
 
 	sparse_filename = get_sparse_checkout_filename();
-	res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL);
+	res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL, 0);
 	free(sparse_filename);
 
 	if (res < 0) {
@@ -110,6 +111,8 @@
 	if (is_index_unborn(r->index))
 		return UPDATE_SPARSITY_SUCCESS;
 
+	r->index->sparse_checkout_patterns = pl;
+
 	memset(&o, 0, sizeof(o));
 	o.verbose_update = isatty(2);
 	o.update = 1;
@@ -138,6 +141,7 @@
 	else
 		rollback_lock_file(&lock_file);
 
+	r->index->sparse_checkout_patterns = NULL;
 	return result;
 }
 
@@ -276,16 +280,20 @@
 				      "core.sparseCheckoutCone",
 				      mode == MODE_CONE_PATTERNS ? "true" : NULL);
 
+	if (mode == MODE_NO_PATTERNS)
+		set_sparse_index_config(the_repository, 0);
+
 	return 0;
 }
 
 static char const * const builtin_sparse_checkout_init_usage[] = {
-	N_("git sparse-checkout init [--cone]"),
+	N_("git sparse-checkout init [--cone] [--[no-]sparse-index]"),
 	NULL
 };
 
 static struct sparse_checkout_init_opts {
 	int cone_mode;
+	int sparse_index;
 } init_opts;
 
 static int sparse_checkout_init(int argc, const char **argv)
@@ -300,11 +308,15 @@
 	static struct option builtin_sparse_checkout_init_options[] = {
 		OPT_BOOL(0, "cone", &init_opts.cone_mode,
 			 N_("initialize the sparse-checkout in cone mode")),
+		OPT_BOOL(0, "sparse-index", &init_opts.sparse_index,
+			 N_("toggle the use of a sparse index")),
 		OPT_END(),
 	};
 
 	repo_read_index(the_repository);
 
+	init_opts.sparse_index = -1;
+
 	argc = parse_options(argc, argv, NULL,
 			     builtin_sparse_checkout_init_options,
 			     builtin_sparse_checkout_init_usage, 0);
@@ -321,12 +333,22 @@
 	memset(&pl, 0, sizeof(pl));
 
 	sparse_filename = get_sparse_checkout_filename();
-	res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL);
+	res = add_patterns_from_file_to_list(sparse_filename, "", 0, &pl, NULL, 0);
+
+	if (init_opts.sparse_index >= 0) {
+		if (set_sparse_index_config(the_repository, init_opts.sparse_index) < 0)
+			die(_("failed to modify sparse-index config"));
+
+		/* force an index rewrite */
+		repo_read_index(the_repository);
+		the_repository->index->updated_workdir = 1;
+	}
+
+	core_apply_sparse_checkout = 1;
 
 	/* If we already have a sparse-checkout file, use it. */
 	if (res >= 0) {
 		free(sparse_filename);
-		core_apply_sparse_checkout = 1;
 		return update_working_directory(NULL);
 	}
 
@@ -348,6 +370,7 @@
 	add_pattern(strbuf_detach(&pattern, NULL), empty_base, 0, &pl, 0);
 	strbuf_addstr(&pattern, "!/*/");
 	add_pattern(strbuf_detach(&pattern, NULL), empty_base, 0, &pl, 0);
+	pl.use_cone_patterns = init_opts.cone_mode;
 
 	return write_patterns_and_update(&pl);
 }
@@ -483,7 +506,7 @@
 	existing.use_cone_patterns = core_sparse_checkout_cone;
 
 	if (add_patterns_from_file_to_list(sparse_filename, "", 0,
-					   &existing, NULL))
+					   &existing, NULL, 0))
 		die(_("unable to load existing sparse-checkout patterns"));
 	free(sparse_filename);
 
@@ -507,7 +530,7 @@
 {
 	char *sparse_filename = get_sparse_checkout_filename();
 	if (add_patterns_from_file_to_list(sparse_filename, "", 0,
-					   pl, NULL))
+					   pl, NULL, 0))
 		die(_("unable to load existing sparse-checkout patterns"));
 	free(sparse_filename);
 	add_patterns_from_input(pl, argc, argv);
@@ -517,19 +540,18 @@
 {
 	int result;
 	int changed_config = 0;
-	struct pattern_list pl;
-	memset(&pl, 0, sizeof(pl));
+	struct pattern_list *pl = xcalloc(1, sizeof(*pl));
 
 	switch (m) {
 	case ADD:
 		if (core_sparse_checkout_cone)
-			add_patterns_cone_mode(argc, argv, &pl);
+			add_patterns_cone_mode(argc, argv, pl);
 		else
-			add_patterns_literal(argc, argv, &pl);
+			add_patterns_literal(argc, argv, pl);
 		break;
 
 	case REPLACE:
-		add_patterns_from_input(&pl, argc, argv);
+		add_patterns_from_input(pl, argc, argv);
 		break;
 	}
 
@@ -539,12 +561,13 @@
 		changed_config = 1;
 	}
 
-	result = write_patterns_and_update(&pl);
+	result = write_patterns_and_update(pl);
 
 	if (result && changed_config)
 		set_config(MODE_NO_PATTERNS);
 
-	clear_pattern_list(&pl);
+	clear_pattern_list(pl);
+	free(pl);
 	return result;
 }
 
@@ -614,6 +637,9 @@
 	strbuf_addstr(&match_all, "/*");
 	add_pattern(strbuf_detach(&match_all, NULL), empty_base, 0, &pl, 0);
 
+	prepare_repo_settings(the_repository);
+	the_repository->settings.sparse_index = 0;
+
 	if (update_working_directory(&pl))
 		die(_("error while refreshing working directory"));
 
diff --git a/builtin/stash.c b/builtin/stash.c
index 6f2b58f..8f42360 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -10,11 +10,13 @@
 #include "strvec.h"
 #include "run-command.h"
 #include "dir.h"
+#include "entry.h"
 #include "rerere.h"
 #include "revision.h"
 #include "log-tree.h"
 #include "diffcore.h"
 #include "exec-cmd.h"
+#include "entry.h"
 
 #define INCLUDE_ALL_FILES 2
 
@@ -24,7 +26,7 @@
 	N_("git stash drop [-q|--quiet] [<stash>]"),
 	N_("git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"),
 	N_("git stash branch <branchname> [<stash>]"),
-	N_("git stash clear"),
+	"git stash clear",
 	N_("git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 	   "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
 	   "          [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
@@ -65,7 +67,7 @@
 };
 
 static const char * const git_stash_clear_usage[] = {
-	N_("git stash clear"),
+	"git stash clear",
 	NULL
 };
 
@@ -222,7 +224,7 @@
 			     PARSE_OPT_STOP_AT_NON_OPTION);
 
 	if (argc)
-		return error(_("git stash clear with parameters is "
+		return error(_("git stash clear with arguments is "
 			       "unimplemented"));
 
 	return do_clear_stash();
@@ -759,7 +761,7 @@
 
 	cp.git_cmd = 1;
 	strvec_pushl(&cp.args, "log", "--format=%gd: %gs", "-g",
-		     "--first-parent", "-m", NULL);
+		     "--first-parent", NULL);
 	strvec_pushv(&cp.args, argv);
 	strvec_push(&cp.args, ref_stash);
 	strvec_push(&cp.args, "--");
@@ -768,6 +770,7 @@
 
 static int show_stat = 1;
 static int show_patch;
+static int show_include_untracked;
 static int use_legacy_stash;
 
 static int git_stash_config(const char *var, const char *value, void *cb)
@@ -780,6 +783,10 @@
 		show_patch = git_config_bool(var, value);
 		return 0;
 	}
+	if (!strcmp(var, "stash.showincludeuntracked")) {
+		show_include_untracked = git_config_bool(var, value);
+		return 0;
+	}
 	if (!strcmp(var, "stash.usebuiltin")) {
 		use_legacy_stash = !git_config_bool(var, value);
 		return 0;
@@ -787,6 +794,33 @@
 	return git_diff_basic_config(var, value, cb);
 }
 
+static void diff_include_untracked(const struct stash_info *info, struct diff_options *diff_opt)
+{
+	const struct object_id *oid[] = { &info->w_commit, &info->u_tree };
+	struct tree *tree[ARRAY_SIZE(oid)];
+	struct tree_desc tree_desc[ARRAY_SIZE(oid)];
+	struct unpack_trees_options unpack_tree_opt = { 0 };
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(oid); i++) {
+		tree[i] = parse_tree_indirect(oid[i]);
+		if (parse_tree(tree[i]) < 0)
+			die(_("failed to parse tree"));
+		init_tree_desc(&tree_desc[i], tree[i]->buffer, tree[i]->size);
+	}
+
+	unpack_tree_opt.head_idx = -1;
+	unpack_tree_opt.src_index = &the_index;
+	unpack_tree_opt.dst_index = &the_index;
+	unpack_tree_opt.merge = 1;
+	unpack_tree_opt.fn = stash_worktree_untracked_merge;
+
+	if (unpack_trees(ARRAY_SIZE(tree_desc), tree_desc, &unpack_tree_opt))
+		die(_("failed to unpack trees"));
+
+	do_diff_cache(&info->b_commit, diff_opt);
+}
+
 static int show_stash(int argc, const char **argv, const char *prefix)
 {
 	int i;
@@ -795,7 +829,18 @@
 	struct rev_info rev;
 	struct strvec stash_args = STRVEC_INIT;
 	struct strvec revision_args = STRVEC_INIT;
+	enum {
+		UNTRACKED_NONE,
+		UNTRACKED_INCLUDE,
+		UNTRACKED_ONLY
+	} show_untracked = show_include_untracked ? UNTRACKED_INCLUDE : UNTRACKED_NONE;
 	struct option options[] = {
+		OPT_SET_INT('u', "include-untracked", &show_untracked,
+			    N_("include untracked files in the stash"),
+			    UNTRACKED_INCLUDE),
+		OPT_SET_INT_F(0, "only-untracked", &show_untracked,
+			      N_("only show untracked files in the stash"),
+			      UNTRACKED_ONLY, PARSE_OPT_NONEG),
 		OPT_END()
 	};
 
@@ -803,6 +848,10 @@
 	git_config(git_diff_ui_config, NULL);
 	init_revisions(&rev, prefix);
 
+	argc = parse_options(argc, argv, prefix, options, git_stash_show_usage,
+			     PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN |
+			     PARSE_OPT_KEEP_DASHDASH);
+
 	strvec_push(&revision_args, argv[0]);
 	for (i = 1; i < argc; i++) {
 		if (argv[i][0] != '-')
@@ -845,7 +894,21 @@
 
 	rev.diffopt.flags.recursive = 1;
 	setup_diff_pager(&rev.diffopt);
-	diff_tree_oid(&info.b_commit, &info.w_commit, "", &rev.diffopt);
+	switch (show_untracked) {
+	case UNTRACKED_NONE:
+		diff_tree_oid(&info.b_commit, &info.w_commit, "", &rev.diffopt);
+		break;
+	case UNTRACKED_ONLY:
+		if (info.has_u)
+			diff_root_tree_oid(&info.u_tree, "", &rev.diffopt);
+		break;
+	case UNTRACKED_INCLUDE:
+		if (info.has_u)
+			diff_include_untracked(&info, &rev.diffopt);
+		else
+			diff_tree_oid(&info.b_commit, &info.w_commit, "", &rev.diffopt);
+		break;
+	}
 	log_tree_diff_flush(&rev);
 
 	free_stash_info(&info);
@@ -928,9 +991,8 @@
 {
 	int i;
 	int found = 0;
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 
-	dir_init(&dir);
 	if (include_untracked != INCLUDE_ALL_FILES)
 		setup_standard_excludes(&dir);
 
@@ -1350,6 +1412,8 @@
 		int i;
 		char *ps_matched = xcalloc(ps->nr, 1);
 
+		/* TODO: audit for interaction with sparse-index. */
+		ensure_full_index(&the_index);
 		for (i = 0; i < active_nr; i++)
 			ce_path_match(&the_index, active_cache[i], ps,
 				      ps_matched);
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index 9d505a6..f73963a 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -19,7 +19,6 @@
 #include "diffcore.h"
 #include "diff.h"
 #include "object-store.h"
-#include "dir.h"
 #include "advice.h"
 
 #define OPT_QUIET (1 << 0)
@@ -426,7 +425,8 @@
 		const struct cache_entry *ce = list.entries[i];
 
 		if (ce_stage(ce))
-			printf("%06o %s U\t", ce->ce_mode, oid_to_hex(&null_oid));
+			printf("%06o %s U\t", ce->ce_mode,
+			       oid_to_hex(null_oid()));
 		else
 			printf("%06o %s %d\t", ce->ce_mode,
 			       oid_to_hex(&ce->oid), ce_stage(ce));
@@ -466,7 +466,7 @@
 
 	displaypath = get_submodule_displaypath(path, info->prefix);
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 
 	if (!sub)
 		die(_("No url found for submodule path '%s' in .gitmodules"),
@@ -623,7 +623,7 @@
 
 	displaypath = get_submodule_displaypath(path, prefix);
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 
 	if (!sub)
 		die(_("No url found for submodule path '%s' in .gitmodules"),
@@ -783,14 +783,14 @@
 	struct strbuf buf = STRBUF_INIT;
 	const char *git_dir;
 
-	if (!submodule_from_path(the_repository, &null_oid, path))
+	if (!submodule_from_path(the_repository, null_oid(), path))
 		die(_("no submodule mapping found in .gitmodules for path '%s'"),
 		      path);
 
 	displaypath = get_submodule_displaypath(path, prefix);
 
 	if ((CE_STAGEMASK & ce_flags) >> CE_STAGESHIFT) {
-		print_status(flags, 'U', path, &null_oid, displaypath);
+		print_status(flags, 'U', path, null_oid(), displaypath);
 		goto cleanup;
 	}
 
@@ -916,7 +916,7 @@
 	if (argc != 2)
 		usage(_("git submodule--helper name <path>"));
 
-	sub = submodule_from_path(the_repository, &null_oid, argv[1]);
+	sub = submodule_from_path(the_repository, null_oid(), argv[1]);
 
 	if (!sub)
 		die(_("no submodule mapping found in .gitmodules for path '%s'"),
@@ -1040,7 +1040,7 @@
 	char *errmsg = NULL;
 	int total_commits = -1;
 
-	if (!info->cached && oideq(&p->oid_dst, &null_oid)) {
+	if (!info->cached && oideq(&p->oid_dst, null_oid())) {
 		if (S_ISGITLINK(p->mod_dst)) {
 			struct ref_store *refs = get_submodule_ref_store(p->sm_path);
 			if (refs)
@@ -1177,7 +1177,7 @@
 
 		if (info->for_status && p->status != 'A' &&
 		    (sub = submodule_from_path(the_repository,
-					       &null_oid, p->sm_path))) {
+					       null_oid(), p->sm_path))) {
 			char *config_key = NULL;
 			const char *value;
 			int ignore_all = 0;
@@ -1299,7 +1299,7 @@
 		OPT_BOOL(0, "cached", &cached,
 			 N_("use the commit stored in the index instead of the submodule HEAD")),
 		OPT_BOOL(0, "files", &files,
-			 N_("to compare the commit in the index with that in the submodule HEAD")),
+			 N_("compare the commit in the index with that in the submodule HEAD")),
 		OPT_BOOL(0, "for-status", &for_status,
 			 N_("skip submodules with 'ignore_config' value set to 'all'")),
 		OPT_INTEGER('n', "summary-limit", &summary_limit,
@@ -1373,7 +1373,7 @@
 	if (!is_submodule_active(the_repository, path))
 		return;
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 
 	if (sub && sub->url) {
 		if (starts_with_dot_dot_slash(sub->url) ||
@@ -1525,7 +1525,7 @@
 	struct strbuf sb_config = STRBUF_INIT;
 	char *sub_git_dir = xstrfmt("%s/.git", path);
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 
 	if (!sub || !sub->name)
 		goto cleanup;
@@ -1925,7 +1925,7 @@
 						const char *update,
 						struct submodule_update_strategy *out)
 {
-	const struct submodule *sub = submodule_from_path(r, &null_oid, path);
+	const struct submodule *sub = submodule_from_path(r, null_oid(), path);
 	char *key;
 	const char *val;
 
@@ -2077,7 +2077,7 @@
 		goto cleanup;
 	}
 
-	sub = submodule_from_path(the_repository, &null_oid, ce->name);
+	sub = submodule_from_path(the_repository, null_oid(), ce->name);
 
 	if (suc->recursive_prefix)
 		displaypath = relative_path(suc->recursive_prefix,
@@ -2395,7 +2395,7 @@
 	const char *branch = NULL;
 	char *key;
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 	if (!sub)
 		return NULL;
 
@@ -2533,7 +2533,7 @@
 
 	path = argv[1];
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 	if (!sub)
 		BUG("We could get the submodule handle before?");
 
diff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c
index 80237f0..e547a08 100644
--- a/builtin/symbolic-ref.c
+++ b/builtin/symbolic-ref.c
@@ -24,9 +24,11 @@
 			return 1;
 	}
 	if (print) {
+		char *to_free = NULL;
 		if (shorten)
-			refname = shorten_unambiguous_ref(refname, 0);
+			refname = to_free = shorten_unambiguous_ref(refname, 0);
 		puts(refname);
+		free(to_free);
 	}
 	return 0;
 }
diff --git a/builtin/tag.c b/builtin/tag.c
index 4237dc7..82fcfc0 100644
--- a/builtin/tag.c
+++ b/builtin/tag.c
@@ -39,6 +39,8 @@
 		     struct ref_format *format)
 {
 	struct ref_array array;
+	struct strbuf output = STRBUF_INIT;
+	struct strbuf err = STRBUF_INIT;
 	char *to_free = NULL;
 	int i;
 
@@ -63,8 +65,17 @@
 	filter_refs(&array, filter, FILTER_REFS_TAGS);
 	ref_array_sort(sorting, &array);
 
-	for (i = 0; i < array.nr; i++)
-		show_ref_array_item(array.items[i], format);
+	for (i = 0; i < array.nr; i++) {
+		strbuf_reset(&output);
+		strbuf_reset(&err);
+		if (format_ref_array_item(array.items[i], format, &output, &err))
+			die("%s", err.buf);
+		fwrite(output.buf, 1, output.len, stdout);
+		putchar('\n');
+	}
+
+	strbuf_release(&err);
+	strbuf_release(&output);
 	ref_array_clear(&array);
 	free(to_free);
 
@@ -572,7 +583,7 @@
 
 	object_ref = argc == 2 ? argv[1] : "HEAD";
 	if (argc > 2)
-		die(_("too many params"));
+		die(_("too many arguments"));
 
 	if (get_oid(object_ref, &object))
 		die(_("Failed to resolve '%s' as a valid ref."), object_ref);
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index dd4a75e..4a94662 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -46,7 +46,7 @@
 static void add_object_buffer(struct object *object, char *buffer, unsigned long size)
 {
 	struct obj_buffer *obj;
-	obj = xcalloc(1, sizeof(struct obj_buffer));
+	CALLOC_ARRAY(obj, 1);
 	obj->buffer = buffer;
 	obj->size = size;
 	if (add_decoration(&obj_decorate, object, obj))
@@ -187,7 +187,8 @@
  * that have reachability requirements and calls this function.
  * Verify its reachability and validity recursively and write it out.
  */
-static int check_object(struct object *obj, int type, void *data, struct fsck_options *options)
+static int check_object(struct object *obj, enum object_type type,
+			void *data, struct fsck_options *options)
 {
 	struct obj_buffer *obj_buf;
 
@@ -354,7 +355,7 @@
 	struct object_id base_oid;
 
 	if (type == OBJ_REF_DELTA) {
-		hashcpy(base_oid.hash, fill(the_hash_algo->rawsz));
+		oidread(&base_oid, fill(the_hash_algo->rawsz));
 		use(the_hash_algo->rawsz);
 		delta_data = get_data(delta_size);
 		if (dry_run || !delta_data) {
@@ -420,7 +421,8 @@
 			 * has not been resolved yet.
 			 */
 			oidclr(&obj_list[nr].oid);
-			add_delta_to_list(nr, &null_oid, base_offset, delta_data, delta_size);
+			add_delta_to_list(nr, null_oid(), base_offset,
+					  delta_data, delta_size);
 			return;
 		}
 	}
@@ -500,7 +502,7 @@
 
 	if (!quiet)
 		progress = start_progress(_("Unpacking objects"), nr_objects);
-	obj_list = xcalloc(nr_objects, sizeof(*obj_list));
+	CALLOC_ARRAY(obj_list, nr_objects);
 	for (i = 0; i < nr_objects; i++) {
 		unpack_one(i);
 		display_progress(progress, i + 1);
@@ -575,7 +577,7 @@
 	the_hash_algo->init_fn(&ctx);
 	unpack_all();
 	the_hash_algo->update_fn(&ctx, buffer, offset);
-	the_hash_algo->final_fn(oid.hash, &ctx);
+	the_hash_algo->final_oid_fn(&oid, &ctx);
 	if (strict) {
 		write_rest();
 		if (fsck_finish(&fsck_options))
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 79087bc..f1f16f2 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -745,6 +745,8 @@
 		 */
 		has_head = 0;
  redo:
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(&the_index);
 	for (pos = 0; pos < active_nr; pos++) {
 		const struct cache_entry *ce = active_cache[pos];
 		struct cache_entry *old = NULL;
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 1cd5c20..0d0a80d 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -30,7 +30,7 @@
 	int detach;
 	int quiet;
 	int checkout;
-	int keep_locked;
+	const char *keep_locked;
 };
 
 static int show_only;
@@ -118,10 +118,8 @@
 	struct dirent *d;
 	if (!dir)
 		return;
-	while ((d = readdir(dir)) != NULL) {
+	while ((d = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 		char *path;
-		if (is_dot_or_dotdot(d->d_name))
-			continue;
 		strbuf_reset(&reason);
 		if (should_prune_worktree(d->d_name, &reason, &path, expire))
 			prune_worktree(d->d_name, reason.buf);
@@ -304,10 +302,10 @@
 	 * after the preparation is over.
 	 */
 	strbuf_addf(&sb, "%s/locked", sb_repo.buf);
-	if (!opts->keep_locked)
-		write_file(sb.buf, "initializing");
+	if (opts->keep_locked)
+		write_file(sb.buf, "%s", opts->keep_locked);
 	else
-		write_file(sb.buf, "added with --lock");
+		write_file(sb.buf, _("initializing"));
 
 	strbuf_addf(&sb_git, "%s/.git", path);
 	if (safe_create_leading_directories_const(sb_git.buf))
@@ -331,7 +329,7 @@
 	 */
 	strbuf_reset(&sb);
 	strbuf_addf(&sb, "%s/HEAD", sb_repo.buf);
-	write_file(sb.buf, "%s", oid_to_hex(&null_oid));
+	write_file(sb.buf, "%s", oid_to_hex(null_oid()));
 	strbuf_reset(&sb);
 	strbuf_addf(&sb, "%s/commondir", sb_repo.buf);
 	write_file(sb.buf, "../..");
@@ -394,7 +392,7 @@
 			cp.argv = NULL;
 			cp.trace2_hook_name = "post-checkout";
 			strvec_pushl(&cp.args, absolute_path(hook),
-				     oid_to_hex(&null_oid),
+				     oid_to_hex(null_oid()),
 				     oid_to_hex(&commit->object.oid),
 				     "1", NULL);
 			ret = run_command(&cp);
@@ -446,16 +444,18 @@
 static const char *dwim_branch(const char *path, const char **new_branch)
 {
 	int n;
+	int branch_exists;
 	const char *s = worktree_basename(path, &n);
 	const char *branchname = xstrndup(s, n);
 	struct strbuf ref = STRBUF_INIT;
 
 	UNLEAK(branchname);
-	if (!strbuf_check_branch_ref(&ref, branchname) &&
-	    ref_exists(ref.buf)) {
-		strbuf_release(&ref);
+
+	branch_exists = !strbuf_check_branch_ref(&ref, branchname) &&
+			ref_exists(ref.buf);
+	strbuf_release(&ref);
+	if (branch_exists)
 		return branchname;
-	}
 
 	*new_branch = branchname;
 	if (guess_remote) {
@@ -475,6 +475,8 @@
 	const char *branch;
 	const char *new_branch = NULL;
 	const char *opt_track = NULL;
+	const char *lock_reason = NULL;
+	int keep_locked = 0;
 	struct option options[] = {
 		OPT__FORCE(&opts.force,
 			   N_("checkout <branch> even if already checked out in other worktree"),
@@ -485,7 +487,9 @@
 			   N_("create or reset a branch")),
 		OPT_BOOL('d', "detach", &opts.detach, N_("detach HEAD at named commit")),
 		OPT_BOOL(0, "checkout", &opts.checkout, N_("populate the new working tree")),
-		OPT_BOOL(0, "lock", &opts.keep_locked, N_("keep the new working tree locked")),
+		OPT_BOOL(0, "lock", &keep_locked, N_("keep the new working tree locked")),
+		OPT_STRING(0, "reason", &lock_reason, N_("string"),
+			   N_("reason for locking")),
 		OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
 		OPT_PASSTHRU(0, "track", &opt_track, NULL,
 			     N_("set up tracking mode (see git-branch(1))"),
@@ -500,6 +504,13 @@
 	ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
 	if (!!opts.detach + !!new_branch + !!new_branch_force > 1)
 		die(_("-b, -B, and --detach are mutually exclusive"));
+	if (lock_reason && !keep_locked)
+		die(_("--reason requires --lock"));
+	if (lock_reason)
+		opts.keep_locked = lock_reason;
+	else if (keep_locked)
+		opts.keep_locked = _("added with --lock");
+
 	if (ac < 1 || ac > 2)
 		usage_with_options(worktree_usage, options);
 
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 583aacb..b023d99 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -100,6 +100,7 @@
 			  const char *path, unsigned flags)
 {
 	git_zstream s;
+	unsigned char ibuf[16384];
 	unsigned char obuf[16384];
 	unsigned hdrlen;
 	int status = Z_OK;
@@ -113,8 +114,6 @@
 	s.avail_out = sizeof(obuf) - hdrlen;
 
 	while (status != Z_STREAM_END) {
-		unsigned char ibuf[16384];
-
 		if (size && !s.avail_in) {
 			ssize_t rsize = size < sizeof(ibuf) ? size : sizeof(ibuf);
 			ssize_t read_result = read_in_full(fd, ibuf, rsize);
@@ -211,7 +210,7 @@
 
 	/* Note: idx is non-NULL when we are writing */
 	if ((flags & HASH_WRITE_OBJECT) != 0)
-		idx = xcalloc(1, sizeof(*idx));
+		CALLOC_ARRAY(idx, 1);
 
 	already_hashed_to = 0;
 
@@ -238,7 +237,7 @@
 		if (lseek(fd, seekback, SEEK_SET) == (off_t) -1)
 			return error("cannot seek back");
 	}
-	the_hash_algo->final_fn(result_oid->hash, &ctx);
+	the_hash_algo->final_oid_fn(result_oid, &ctx);
 	if (!idx)
 		return 0;
 
diff --git a/bundle.c b/bundle.c
index 693d619..ab63f40 100644
--- a/bundle.c
+++ b/bundle.c
@@ -23,13 +23,16 @@
 	{ 3, v3_bundle_signature },
 };
 
-static void add_to_ref_list(const struct object_id *oid, const char *name,
-		struct ref_list *list)
+void bundle_header_init(struct bundle_header *header)
 {
-	ALLOC_GROW(list->list, list->nr + 1, list->alloc);
-	oidcpy(&list->list[list->nr].oid, oid);
-	list->list[list->nr].name = xstrdup(name);
-	list->nr++;
+	struct bundle_header blank = BUNDLE_HEADER_INIT;
+	memcpy(header, &blank, sizeof(*header));
+}
+
+void bundle_header_release(struct bundle_header *header)
+{
+	string_list_clear(&header->prerequisites, 1);
+	string_list_clear(&header->references, 1);
 }
 
 static int parse_capability(struct bundle_header *header, const char *capability)
@@ -112,10 +115,11 @@
 			status = -1;
 			break;
 		} else {
+			struct object_id *dup = oiddup(&oid);
 			if (is_prereq)
-				add_to_ref_list(&oid, "", &header->prerequisites);
+				string_list_append(&header->prerequisites, "")->util = dup;
 			else
-				add_to_ref_list(&oid, p + 1, &header->references);
+				string_list_append(&header->references, p + 1)->util = dup;
 		}
 	}
 
@@ -139,33 +143,38 @@
 
 int is_bundle(const char *path, int quiet)
 {
-	struct bundle_header header;
+	struct bundle_header header = BUNDLE_HEADER_INIT;
 	int fd = open(path, O_RDONLY);
 
 	if (fd < 0)
 		return 0;
-	memset(&header, 0, sizeof(header));
 	fd = parse_bundle_header(fd, &header, quiet ? NULL : path);
 	if (fd >= 0)
 		close(fd);
+	bundle_header_release(&header);
 	return (fd >= 0);
 }
 
-static int list_refs(struct ref_list *r, int argc, const char **argv)
+static int list_refs(struct string_list *r, int argc, const char **argv)
 {
 	int i;
 
 	for (i = 0; i < r->nr; i++) {
+		struct object_id *oid;
+		const char *name;
+
 		if (argc > 1) {
 			int j;
 			for (j = 1; j < argc; j++)
-				if (!strcmp(r->list[i].name, argv[j]))
+				if (!strcmp(r->items[i].string, argv[j]))
 					break;
 			if (j == argc)
 				continue;
 		}
-		printf("%s %s\n", oid_to_hex(&r->list[i].oid),
-				r->list[i].name);
+
+		oid = r->items[i].util;
+		name = r->items[i].string;
+		printf("%s %s\n", oid_to_hex(oid), name);
 	}
 	return 0;
 }
@@ -181,7 +190,7 @@
 	 * Do fast check, then if any prereqs are missing then go line by line
 	 * to be verbose about the errors
 	 */
-	struct ref_list *p = &header->prerequisites;
+	struct string_list *p = &header->prerequisites;
 	struct rev_info revs;
 	const char *argv[] = {NULL, "--all", NULL};
 	struct commit *commit;
@@ -193,16 +202,18 @@
 
 	repo_init_revisions(r, &revs, NULL);
 	for (i = 0; i < p->nr; i++) {
-		struct ref_list_entry *e = p->list + i;
-		struct object *o = parse_object(r, &e->oid);
+		struct string_list_item *e = p->items + i;
+		const char *name = e->string;
+		struct object_id *oid = e->util;
+		struct object *o = parse_object(r, oid);
 		if (o) {
 			o->flags |= PREREQ_MARK;
-			add_pending_object(&revs, o, e->name);
+			add_pending_object(&revs, o, name);
 			continue;
 		}
 		if (++ret == 1)
 			error("%s", message);
-		error("%s %s", oid_to_hex(&e->oid), e->name);
+		error("%s %s", oid_to_hex(oid), name);
 	}
 	if (revs.pending.nr != p->nr)
 		return ret;
@@ -218,26 +229,29 @@
 			i--;
 
 	for (i = 0; i < p->nr; i++) {
-		struct ref_list_entry *e = p->list + i;
-		struct object *o = parse_object(r, &e->oid);
+		struct string_list_item *e = p->items + i;
+		const char *name = e->string;
+		const struct object_id *oid = e->util;
+		struct object *o = parse_object(r, oid);
 		assert(o); /* otherwise we'd have returned early */
 		if (o->flags & SHOWN)
 			continue;
 		if (++ret == 1)
 			error("%s", message);
-		error("%s %s", oid_to_hex(&e->oid), e->name);
+		error("%s %s", oid_to_hex(oid), name);
 	}
 
 	/* Clean up objects used, as they will be reused. */
 	for (i = 0; i < p->nr; i++) {
-		struct ref_list_entry *e = p->list + i;
-		commit = lookup_commit_reference_gently(r, &e->oid, 1);
+		struct string_list_item *e = p->items + i;
+		struct object_id *oid = e->util;
+		commit = lookup_commit_reference_gently(r, oid, 1);
 		if (commit)
 			clear_commit_marks(commit, ALL_REV_FLAGS);
 	}
 
 	if (verbose) {
-		struct ref_list *r;
+		struct string_list *r;
 
 		r = &header->references;
 		printf_ln(Q_("The bundle contains this ref:",
diff --git a/bundle.h b/bundle.h
index f9e2d1c..1927d8c 100644
--- a/bundle.h
+++ b/bundle.h
@@ -3,22 +3,23 @@
 
 #include "strvec.h"
 #include "cache.h"
-
-struct ref_list {
-	unsigned int nr, alloc;
-	struct ref_list_entry {
-		struct object_id oid;
-		char *name;
-	} *list;
-};
+#include "string-list.h"
 
 struct bundle_header {
 	unsigned version;
-	struct ref_list prerequisites;
-	struct ref_list references;
+	struct string_list prerequisites;
+	struct string_list references;
 	const struct git_hash_algo *hash_algo;
 };
 
+#define BUNDLE_HEADER_INIT \
+{ \
+	.prerequisites = STRING_LIST_INIT_DUP, \
+	.references = STRING_LIST_INIT_DUP, \
+}
+void bundle_header_init(struct bundle_header *header);
+void bundle_header_release(struct bundle_header *header);
+
 int is_bundle(const char *path, int quiet);
 int read_bundle_header(const char *path, struct bundle_header *header);
 int create_bundle(struct repository *r, const char *path,
diff --git a/cache-tree.c b/cache-tree.c
index 2fb483d..45e5866 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -6,6 +6,7 @@
 #include "object-store.h"
 #include "replace-object.h"
 #include "promisor-remote.h"
+#include "sparse-index.h"
 
 #ifndef DEBUG_CACHE_TREE
 #define DEBUG_CACHE_TREE 0
@@ -255,6 +256,24 @@
 
 	*skip_count = 0;
 
+	/*
+	 * If the first entry of this region is a sparse directory
+	 * entry corresponding exactly to 'base', then this cache_tree
+	 * struct is a "leaf" in the data structure, pointing to the
+	 * tree OID specified in the entry.
+	 */
+	if (entries > 0) {
+		const struct cache_entry *ce = cache[0];
+
+		if (S_ISSPARSEDIR(ce->ce_mode) &&
+		    ce->ce_namelen == baselen &&
+		    !strncmp(ce->name, base, baselen)) {
+			it->entry_count = 1;
+			oidcpy(&it->oid, &ce->oid);
+			return 1;
+		}
+	}
+
 	if (0 <= it->entry_count && has_object_file(&it->oid))
 		return it->entry_count;
 
@@ -442,6 +461,8 @@
 	if (i)
 		return i;
 
+	ensure_full_index(istate);
+
 	if (!istate->cache_tree)
 		istate->cache_tree = cache_tree();
 
@@ -564,7 +585,7 @@
 	 * hence +2.
 	 */
 	it->subtree_alloc = subtree_nr + 2;
-	it->down = xcalloc(it->subtree_alloc, sizeof(struct cache_tree_sub *));
+	CALLOC_ARRAY(it->down, it->subtree_alloc);
 	for (i = 0; i < subtree_nr; i++) {
 		/* read each subtree */
 		struct cache_tree *sub;
@@ -787,6 +808,19 @@
 	return 0;
 }
 
+static void verify_one_sparse(struct repository *r,
+			      struct index_state *istate,
+			      struct cache_tree *it,
+			      struct strbuf *path,
+			      int pos)
+{
+	struct cache_entry *ce = istate->cache[pos];
+
+	if (!S_ISSPARSEDIR(ce->ce_mode))
+		BUG("directory '%s' is present in index, but not sparse",
+		    path->buf);
+}
+
 static void verify_one(struct repository *r,
 		       struct index_state *istate,
 		       struct cache_tree *it,
@@ -809,6 +843,12 @@
 
 	if (path->len) {
 		pos = index_name_pos(istate, path->buf, path->len);
+
+		if (pos >= 0) {
+			verify_one_sparse(r, istate, it, path, pos);
+			return;
+		}
+
 		pos = -pos - 1;
 	} else {
 		pos = 0;
diff --git a/cache.h b/cache.h
index d928149..f9aed2d 100644
--- a/cache.h
+++ b/cache.h
@@ -204,6 +204,8 @@
 #error "CE_EXTENDED_FLAGS out of range"
 #endif
 
+#define S_ISSPARSEDIR(m) ((m) == S_IFDIR)
+
 /* Forward structure decls */
 struct pathspec;
 struct child_process;
@@ -249,6 +251,8 @@
 {
 	if (S_ISLNK(mode))
 		return S_IFLNK;
+	if (S_ISSPARSEDIR(mode))
+		return S_IFDIR;
 	if (S_ISDIR(mode) || S_ISGITLINK(mode))
 		return S_IFGITLINK;
 	return S_IFREG | ce_permissions(mode);
@@ -305,6 +309,7 @@
 struct split_index;
 struct untracked_cache;
 struct progress;
+struct pattern_list;
 
 struct index_state {
 	struct cache_entry **cache;
@@ -319,7 +324,14 @@
 		 drop_cache_tree : 1,
 		 updated_workdir : 1,
 		 updated_skipworktree : 1,
-		 fsmonitor_has_run_once : 1;
+		 fsmonitor_has_run_once : 1,
+
+		 /*
+		  * sparse_index == 1 when sparse-directory
+		  * entries exist. Requires sparse-checkout
+		  * in cone mode.
+		  */
+		 sparse_index : 1;
 	struct hashmap name_hash;
 	struct hashmap dir_hash;
 	struct object_id oid;
@@ -329,6 +341,7 @@
 	struct mem_pool *ce_mem_pool;
 	struct progress *progress;
 	struct repository *repo;
+	struct pattern_list *sparse_checkout_patterns;
 };
 
 /* Name hashing */
@@ -337,6 +350,7 @@
 void remove_name_hash(struct index_state *istate, struct cache_entry *ce);
 void free_name_hash(struct index_state *istate);
 
+void ensure_full_index(struct index_state *istate);
 
 /* Cache entry creation and cleanup */
 
@@ -356,16 +370,20 @@
 					   size_t name_len);
 
 /*
- * Create a cache_entry that is not intended to be added to an index.
- * Caller is responsible for discarding the cache_entry
- * with `discard_cache_entry`.
+ * Create a cache_entry that is not intended to be added to an index. If
+ * `ce_mem_pool` is not NULL, the entry is allocated within the given memory
+ * pool. Caller is responsible for discarding "loose" entries with
+ * `discard_cache_entry()` and the memory pool with
+ * `mem_pool_discard(ce_mem_pool, should_validate_cache_entries())`.
  */
 struct cache_entry *make_transient_cache_entry(unsigned int mode,
 					       const struct object_id *oid,
 					       const char *path,
-					       int stage);
+					       int stage,
+					       struct mem_pool *ce_mem_pool);
 
-struct cache_entry *make_empty_transient_cache_entry(size_t name_len);
+struct cache_entry *make_empty_transient_cache_entry(size_t len,
+						     struct mem_pool *ce_mem_pool);
 
 /*
  * Discard cache entry.
@@ -722,6 +740,8 @@
 		    const char *gitdir);
 int is_index_unborn(struct index_state *);
 
+void ensure_full_index(struct index_state *istate);
+
 /* For use with `write_locked_index()`. */
 #define COMMIT_LOCK		(1 << 0)
 #define SKIP_IF_UNCHANGED	(1 << 1)
@@ -785,7 +805,7 @@
  * index_name_pos(&index, "f", 1) -> -3
  * index_name_pos(&index, "g", 1) -> -5
  */
-int index_name_pos(const struct index_state *, const char *name, int namelen);
+int index_name_pos(struct index_state *, const char *name, int namelen);
 
 /*
  * Some functions return the negative complement of an insert position when a
@@ -803,7 +823,7 @@
 #define ADD_CACHE_OK_TO_ADD 1		/* Ok to add */
 #define ADD_CACHE_OK_TO_REPLACE 2	/* Ok to replace file/directory */
 #define ADD_CACHE_SKIP_DFCHECK 4	/* Ok to skip DF conflict checks */
-#define ADD_CACHE_JUST_APPEND 8		/* Append only; tree.c::read_tree() */
+#define ADD_CACHE_JUST_APPEND 8		/* Append only */
 #define ADD_CACHE_NEW_ONLY 16		/* Do not replace existing ones */
 #define ADD_CACHE_KEEP_CACHE_TREE 32	/* Do not invalidate cache-tree */
 #define ADD_CACHE_RENORMALIZE 64        /* Pass along HASH_RENORMALIZE */
@@ -835,8 +855,8 @@
 int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip);
 int ce_same_name(const struct cache_entry *a, const struct cache_entry *b);
 void set_object_name_for_intent_to_add_entry(struct cache_entry *ce);
-int index_name_is_other(const struct index_state *, const char *, int);
-void *read_blob_data_from_index(const struct index_state *, const char *, unsigned long *);
+int index_name_is_other(struct index_state *, const char *, int);
+void *read_blob_data_from_index(struct index_state *, const char *, unsigned long *);
 
 /* do stat comparison even if CE_VALID is true */
 #define CE_MATCH_IGNORE_VALID		01
@@ -879,13 +899,14 @@
 
 void fill_stat_cache_info(struct index_state *istate, struct cache_entry *ce, struct stat *st);
 
-#define REFRESH_REALLY		0x0001	/* ignore_valid */
-#define REFRESH_UNMERGED	0x0002	/* allow unmerged */
-#define REFRESH_QUIET		0x0004	/* be quiet about it */
-#define REFRESH_IGNORE_MISSING	0x0008	/* ignore non-existent */
-#define REFRESH_IGNORE_SUBMODULES	0x0010	/* ignore submodules */
-#define REFRESH_IN_PORCELAIN	0x0020	/* user friendly output, not "needs update" */
-#define REFRESH_PROGRESS	0x0040  /* show progress bar if stderr is tty */
+#define REFRESH_REALLY                   (1 << 0) /* ignore_valid */
+#define REFRESH_UNMERGED                 (1 << 1) /* allow unmerged */
+#define REFRESH_QUIET                    (1 << 2) /* be quiet about it */
+#define REFRESH_IGNORE_MISSING           (1 << 3) /* ignore non-existent */
+#define REFRESH_IGNORE_SUBMODULES        (1 << 4) /* ignore submodules */
+#define REFRESH_IN_PORCELAIN             (1 << 5) /* user friendly output, not "needs update" */
+#define REFRESH_PROGRESS                 (1 << 6) /* show progress bar if stderr is tty */
+#define REFRESH_IGNORE_SKIP_WORKTREE     (1 << 7) /* ignore skip_worktree entries */
 int refresh_index(struct index_state *, unsigned int flags, const struct pathspec *pathspec, char *seen, const char *header_msg);
 /*
  * Refresh the index and write it to disk.
@@ -1044,6 +1065,7 @@
 	int worktree_config;
 	int is_bare;
 	int hash_algo;
+	int sparse_index;
 	char *work_tree;
 	struct string_list unknown_extensions;
 	struct string_list v1_only_extensions;
@@ -1254,6 +1276,7 @@
 int is_ntfs_dotgitmodules(const char *name);
 int is_ntfs_dotgitignore(const char *name);
 int is_ntfs_dotgitattributes(const char *name);
+int is_ntfs_dotmailmap(const char *name);
 
 /*
  * Returns true iff "str" could be confused as a command-line option when
@@ -1362,6 +1385,7 @@
 };
 
 int repo_get_oid(struct repository *r, const char *str, struct object_id *oid);
+__attribute__((format (printf, 2, 3)))
 int get_oidf(struct object_id *oid, const char *fmt, ...);
 int repo_get_oid_commit(struct repository *r, const char *str, struct object_id *oid);
 int repo_get_oid_committish(struct repository *r, const char *str, struct object_id *oid);
@@ -1621,30 +1645,6 @@
  */
 int ident_cmp(const struct ident_split *, const struct ident_split *);
 
-struct checkout {
-	struct index_state *istate;
-	const char *base_dir;
-	int base_dir_len;
-	struct delayed_checkout *delayed_checkout;
-	struct checkout_metadata meta;
-	unsigned force:1,
-		 quiet:1,
-		 not_new:1,
-		 clone:1,
-		 refresh_cache:1;
-};
-#define CHECKOUT_INIT { NULL, "" }
-
-#define TEMPORARY_FILENAME_LENGTH 25
-int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath, int *nr_checkouts);
-void enable_delayed_checkout(struct checkout *state);
-int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
-/*
- * Unlink the last component and schedule the leading directories for
- * removal, such that empty directories get removed.
- */
-void unlink_entry(const struct cache_entry *ce);
-
 struct cache_def {
 	struct strbuf path;
 	int flags;
@@ -1659,8 +1659,9 @@
 
 int has_symlink_leading_path(const char *name, int len);
 int threaded_has_symlink_leading_path(struct cache_def *, const char *, int);
-int check_leading_path(const char *name, int len);
+int check_leading_path(const char *name, int len, int warn_on_lstat_err);
 int has_dirs_only_path(const char *name, int len, int prefix_len);
+void invalidate_lstat_cache(void);
 void schedule_dir_for_removal(const char *name, int len);
 void remove_scheduled_dirs(void);
 
diff --git a/cbtree.c b/cbtree.c
new file mode 100644
index 0000000..b0c65d8
--- /dev/null
+++ b/cbtree.c
@@ -0,0 +1,167 @@
+/*
+ * crit-bit tree implementation, does no allocations internally
+ * For more information on crit-bit trees: https://cr.yp.to/critbit.html
+ * Based on Adam Langley's adaptation of Dan Bernstein's public domain code
+ * git clone https://github.com/agl/critbit.git
+ */
+#include "cbtree.h"
+
+static struct cb_node *cb_node_of(const void *p)
+{
+	return (struct cb_node *)((uintptr_t)p - 1);
+}
+
+/* locate the best match, does not do a final comparision */
+static struct cb_node *cb_internal_best_match(struct cb_node *p,
+					const uint8_t *k, size_t klen)
+{
+	while (1 & (uintptr_t)p) {
+		struct cb_node *q = cb_node_of(p);
+		uint8_t c = q->byte < klen ? k[q->byte] : 0;
+		size_t direction = (1 + (q->otherbits | c)) >> 8;
+
+		p = q->child[direction];
+	}
+	return p;
+}
+
+/* returns NULL if successful, existing cb_node if duplicate */
+struct cb_node *cb_insert(struct cb_tree *t, struct cb_node *node, size_t klen)
+{
+	size_t newbyte, newotherbits;
+	uint8_t c;
+	int newdirection;
+	struct cb_node **wherep, *p;
+
+	assert(!((uintptr_t)node & 1)); /* allocations must be aligned */
+
+	if (!t->root) {		/* insert into empty tree */
+		t->root = node;
+		return NULL;	/* success */
+	}
+
+	/* see if a node already exists */
+	p = cb_internal_best_match(t->root, node->k, klen);
+
+	/* find first differing byte */
+	for (newbyte = 0; newbyte < klen; newbyte++) {
+		if (p->k[newbyte] != node->k[newbyte])
+			goto different_byte_found;
+	}
+	return p;	/* element exists, let user deal with it */
+
+different_byte_found:
+	newotherbits = p->k[newbyte] ^ node->k[newbyte];
+	newotherbits |= newotherbits >> 1;
+	newotherbits |= newotherbits >> 2;
+	newotherbits |= newotherbits >> 4;
+	newotherbits = (newotherbits & ~(newotherbits >> 1)) ^ 255;
+	c = p->k[newbyte];
+	newdirection = (1 + (newotherbits | c)) >> 8;
+
+	node->byte = newbyte;
+	node->otherbits = newotherbits;
+	node->child[1 - newdirection] = node;
+
+	/* find a place to insert it */
+	wherep = &t->root;
+	for (;;) {
+		struct cb_node *q;
+		size_t direction;
+
+		p = *wherep;
+		if (!(1 & (uintptr_t)p))
+			break;
+		q = cb_node_of(p);
+		if (q->byte > newbyte)
+			break;
+		if (q->byte == newbyte && q->otherbits > newotherbits)
+			break;
+		c = q->byte < klen ? node->k[q->byte] : 0;
+		direction = (1 + (q->otherbits | c)) >> 8;
+		wherep = q->child + direction;
+	}
+
+	node->child[newdirection] = *wherep;
+	*wherep = (struct cb_node *)(1 + (uintptr_t)node);
+
+	return NULL; /* success */
+}
+
+struct cb_node *cb_lookup(struct cb_tree *t, const uint8_t *k, size_t klen)
+{
+	struct cb_node *p = cb_internal_best_match(t->root, k, klen);
+
+	return p && !memcmp(p->k, k, klen) ? p : NULL;
+}
+
+struct cb_node *cb_unlink(struct cb_tree *t, const uint8_t *k, size_t klen)
+{
+	struct cb_node **wherep = &t->root;
+	struct cb_node **whereq = NULL;
+	struct cb_node *q = NULL;
+	size_t direction = 0;
+	uint8_t c;
+	struct cb_node *p = t->root;
+
+	if (!p) return NULL;	/* empty tree, nothing to delete */
+
+	/* traverse to find best match, keeping link to parent */
+	while (1 & (uintptr_t)p) {
+		whereq = wherep;
+		q = cb_node_of(p);
+		c = q->byte < klen ? k[q->byte] : 0;
+		direction = (1 + (q->otherbits | c)) >> 8;
+		wherep = q->child + direction;
+		p = *wherep;
+	}
+
+	if (memcmp(p->k, k, klen))
+		return NULL;		/* no match, nothing unlinked */
+
+	/* found an exact match */
+	if (whereq)	/* update parent */
+		*whereq = q->child[1 - direction];
+	else
+		t->root = NULL;
+	return p;
+}
+
+static enum cb_next cb_descend(struct cb_node *p, cb_iter fn, void *arg)
+{
+	if (1 & (uintptr_t)p) {
+		struct cb_node *q = cb_node_of(p);
+		enum cb_next n = cb_descend(q->child[0], fn, arg);
+
+		return n == CB_BREAK ? n : cb_descend(q->child[1], fn, arg);
+	} else {
+		return fn(p, arg);
+	}
+}
+
+void cb_each(struct cb_tree *t, const uint8_t *kpfx, size_t klen,
+			cb_iter fn, void *arg)
+{
+	struct cb_node *p = t->root;
+	struct cb_node *top = p;
+	size_t i = 0;
+
+	if (!p) return; /* empty tree */
+
+	/* Walk tree, maintaining top pointer */
+	while (1 & (uintptr_t)p) {
+		struct cb_node *q = cb_node_of(p);
+		uint8_t c = q->byte < klen ? kpfx[q->byte] : 0;
+		size_t direction = (1 + (q->otherbits | c)) >> 8;
+
+		p = q->child[direction];
+		if (q->byte < klen)
+			top = p;
+	}
+
+	for (i = 0; i < klen; i++) {
+		if (p->k[i] != kpfx[i])
+			return; /* "best" match failed */
+	}
+	cb_descend(top, fn, arg);
+}
diff --git a/cbtree.h b/cbtree.h
new file mode 100644
index 0000000..fe45870
--- /dev/null
+++ b/cbtree.h
@@ -0,0 +1,56 @@
+/*
+ * crit-bit tree implementation, does no allocations internally
+ * For more information on crit-bit trees: https://cr.yp.to/critbit.html
+ * Based on Adam Langley's adaptation of Dan Bernstein's public domain code
+ * git clone https://github.com/agl/critbit.git
+ *
+ * This is adapted to store arbitrary data (not just NUL-terminated C strings
+ * and allocates no memory internally.  The user needs to allocate
+ * "struct cb_node" and fill cb_node.k[] with arbitrary match data
+ * for memcmp.
+ * If "klen" is variable, then it should be embedded into "c_node.k[]"
+ * Recursion is bound by the maximum value of "klen" used.
+ */
+#ifndef CBTREE_H
+#define CBTREE_H
+
+#include "git-compat-util.h"
+
+struct cb_node;
+struct cb_node {
+	struct cb_node *child[2];
+	/*
+	 * n.b. uint32_t for `byte' is excessive for OIDs,
+	 * we may consider shorter variants if nothing else gets stored.
+	 */
+	uint32_t byte;
+	uint8_t otherbits;
+	uint8_t k[FLEX_ARRAY]; /* arbitrary data */
+};
+
+struct cb_tree {
+	struct cb_node *root;
+};
+
+enum cb_next {
+	CB_CONTINUE = 0,
+	CB_BREAK = 1
+};
+
+#define CBTREE_INIT { .root = NULL }
+
+static inline void cb_init(struct cb_tree *t)
+{
+	t->root = NULL;
+}
+
+struct cb_node *cb_lookup(struct cb_tree *, const uint8_t *k, size_t klen);
+struct cb_node *cb_insert(struct cb_tree *, struct cb_node *, size_t klen);
+struct cb_node *cb_unlink(struct cb_tree *t, const uint8_t *k, size_t klen);
+
+typedef enum cb_next (*cb_iter)(struct cb_node *, void *arg);
+
+void cb_each(struct cb_tree *, const uint8_t *kpfx, size_t klen,
+		cb_iter, void *arg);
+
+#endif /* CBTREE_H */
diff --git a/chunk-format.c b/chunk-format.c
index da191e5..1c3dca6 100644
--- a/chunk-format.c
+++ b/chunk-format.c
@@ -58,9 +58,11 @@
 
 int write_chunkfile(struct chunkfile *cf, void *data)
 {
-	int i;
+	int i, result = 0;
 	uint64_t cur_offset = hashfile_total(cf->f);
 
+	trace2_region_enter("chunkfile", "write", the_repository);
+
 	/* Add the table of contents to the current offset */
 	cur_offset += (cf->chunks_nr + 1) * CHUNK_TOC_ENTRY_SIZE;
 
@@ -77,10 +79,10 @@
 
 	for (i = 0; i < cf->chunks_nr; i++) {
 		off_t start_offset = hashfile_total(cf->f);
-		int result = cf->chunks[i].write_fn(cf->f, data);
+		result = cf->chunks[i].write_fn(cf->f, data);
 
 		if (result)
-			return result;
+			goto cleanup;
 
 		if (hashfile_total(cf->f) - start_offset != cf->chunks[i].size)
 			BUG("expected to write %"PRId64" bytes to chunk %"PRIx32", but wrote %"PRId64" instead",
@@ -88,7 +90,9 @@
 			    hashfile_total(cf->f) - start_offset);
 	}
 
-	return 0;
+cleanup:
+	trace2_region_leave("chunkfile", "write", the_repository);
+	return result;
 }
 
 int read_table_of_contents(struct chunkfile *cf,
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index 67852d0..5772081 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -65,6 +65,11 @@
 	sudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \
 		libexpat-dev gettext make
 	;;
+sparse)
+	sudo apt-get -q update -q
+	sudo apt-get -q -y install libssl-dev libcurl4-openssl-dev \
+		libexpat-dev gettext zlib1g-dev
+	;;
 Documentation)
 	sudo apt-get -q update
 	sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make
diff --git a/ci/lib.sh b/ci/lib.sh
index d848c03..476c3f3 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -229,6 +229,7 @@
 	CC=gcc
 	MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=/usr/bin/python3 USE_LIBPCRE2=Yes"
 	MAKEFLAGS="$MAKEFLAGS NO_REGEX=Yes ICONV_OMITS_BOM=Yes"
+	MAKEFLAGS="$MAKEFLAGS GIT_TEST_UTF8_LOCALE=C.UTF-8"
 	;;
 esac
 
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index a66b5e8..3ce81ff 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -16,6 +16,7 @@
 	export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 	make test
 	export GIT_TEST_SPLIT_INDEX=yes
+	export GIT_TEST_MERGE_ALGORITHM=recursive
 	export GIT_TEST_FULL_IN_PACK_ARRAY=true
 	export GIT_TEST_OE_SIZE=10
 	export GIT_TEST_OE_DELTA_SIZE=5
@@ -25,6 +26,7 @@
 	export GIT_TEST_ADD_I_USE_BUILTIN=1
 	export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
 	export GIT_TEST_WRITE_REV_INDEX=1
+	export GIT_TEST_CHECKOUT_WORKERS=2
 	make test
 	;;
 linux-clang)
diff --git a/combine-diff.c b/combine-diff.c
index 9228aeb..d93782d 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -214,11 +214,11 @@
 	 *   - Else if we have NEW, insert newend lline into base and
 	 *   consume newend
 	 */
-	lcs = xcalloc(st_add(origbaselen, 1), sizeof(int*));
-	directions = xcalloc(st_add(origbaselen, 1), sizeof(enum coalesce_direction*));
+	CALLOC_ARRAY(lcs, st_add(origbaselen, 1));
+	CALLOC_ARRAY(directions, st_add(origbaselen, 1));
 	for (i = 0; i < origbaselen + 1; i++) {
-		lcs[i] = xcalloc(st_add(lennew, 1), sizeof(int));
-		directions[i] = xcalloc(st_add(lennew, 1), sizeof(enum coalesce_direction));
+		CALLOC_ARRAY(lcs[i], st_add(lennew, 1));
+		CALLOC_ARRAY(directions[i], st_add(lennew, 1));
 		directions[i][0] = BASE;
 	}
 	for (j = 1; j < lennew + 1; j++)
@@ -398,16 +398,16 @@
 		state->lost_bucket = &state->sline[state->nb-1];
 	}
 	if (!state->sline[state->nb-1].p_lno)
-		state->sline[state->nb-1].p_lno =
-			xcalloc(state->num_parent, sizeof(unsigned long));
+		CALLOC_ARRAY(state->sline[state->nb - 1].p_lno,
+			     state->num_parent);
 	state->sline[state->nb-1].p_lno[state->n] = state->ob;
 }
 
-static void consume_line(void *state_, char *line, unsigned long len)
+static int consume_line(void *state_, char *line, unsigned long len)
 {
 	struct combine_diff_state *state = state_;
 	if (!state->lost_bucket)
-		return; /* not in any hunk yet */
+		return 0; /* not in any hunk yet */
 	switch (line[0]) {
 	case '-':
 		append_lost(state->lost_bucket, state->n, line+1, len-1);
@@ -417,6 +417,7 @@
 		state->lno++;
 		break;
 	}
+	return 0;
 }
 
 static void combine_diff(struct repository *r,
@@ -1068,7 +1069,7 @@
 						   &result_size, NULL, NULL);
 		} else if (textconv) {
 			struct diff_filespec *df = alloc_filespec(elem->path);
-			fill_filespec(df, &null_oid, 0, st.st_mode);
+			fill_filespec(df, null_oid(), 0, st.st_mode);
 			result_size = fill_textconv(opt->repo, textconv, df, &result);
 			free_filespec(df);
 		} else if (0 <= (fd = open(elem->path, O_RDONLY))) {
@@ -1159,7 +1160,7 @@
 	if (result_size && result[result_size-1] != '\n')
 		cnt++; /* incomplete line */
 
-	sline = xcalloc(st_add(cnt, 2), sizeof(*sline));
+	CALLOC_ARRAY(sline, st_add(cnt, 2));
 	sline[0].bol = result;
 	for (lno = 0, cp = result; cp < result + result_size; cp++) {
 		if (*cp == '\n') {
@@ -1178,7 +1179,7 @@
 	/* Even p_lno[cnt+1] is valid -- that is for the end line number
 	 * for deletion hunk at the end.
 	 */
-	sline[0].p_lno = xcalloc(st_mult(st_add(cnt, 2), num_parent), sizeof(unsigned long));
+	CALLOC_ARRAY(sline[0].p_lno, st_mult(st_add(cnt, 2), num_parent));
 	for (lno = 0; lno <= cnt; lno++)
 		sline[lno+1].p_lno = sline[lno].p_lno + num_parent;
 
@@ -1319,7 +1320,7 @@
 	struct diff_filespec *pool;
 
 	pair = xmalloc(sizeof(*pair));
-	pool = xcalloc(st_add(num_parent, 1), sizeof(struct diff_filespec));
+	CALLOC_ARRAY(pool, st_add(num_parent, 1));
 	pair->one = pool + 1;
 	pair->two = pool;
 
@@ -1348,7 +1349,7 @@
 	struct diff_queue_struct q;
 	int i;
 
-	q.queue = xcalloc(num_paths, sizeof(struct diff_filepair *));
+	CALLOC_ARRAY(q.queue, num_paths);
 	q.alloc = num_paths;
 	q.nr = num_paths;
 	for (i = 0, p = paths; p; p = p->next)
diff --git a/commit-graph.c b/commit-graph.c
index 6aa0c48..3860a0d 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -96,6 +96,13 @@
 static struct commit_graph_data_slab commit_graph_data_slab =
 	COMMIT_SLAB_INIT(1, commit_graph_data_slab);
 
+static int get_configured_generation_version(struct repository *r)
+{
+	int version = 2;
+	repo_config_get_int(r, "commitgraph.generationversion", &version);
+	return version;
+}
+
 uint32_t commit_graph_position(const struct commit *c)
 {
 	struct commit_graph_data *data =
@@ -214,24 +221,16 @@
 
 	if (read_replace_refs) {
 		prepare_replace_object(r);
-		if (hashmap_get_size(&r->objects->replace_map->map)) {
-			warning(_("repository contains replace objects; "
-			       "skipping commit-graph"));
+		if (hashmap_get_size(&r->objects->replace_map->map))
 			return 0;
-		}
 	}
 
 	prepare_commit_graft(r);
 	if (r->parsed_objects &&
-	    (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent)) {
-		warning(_("repository contains (deprecated) grafts; "
-		       "skipping commit-graph"));
+	    (r->parsed_objects->grafts_nr || r->parsed_objects->substituted_parent))
 		return 0;
-	}
-	if (is_repository_shallow(r)) {
-		warning(_("repository is shallow; skipping commit-graph"));
+	if (is_repository_shallow(r))
 		return 0;
-	}
 
 	return 1;
 }
@@ -402,10 +401,13 @@
 	pair_chunk(cf, GRAPH_CHUNKID_DATA, &graph->chunk_commit_data);
 	pair_chunk(cf, GRAPH_CHUNKID_EXTRAEDGES, &graph->chunk_extra_edges);
 	pair_chunk(cf, GRAPH_CHUNKID_BASE, &graph->chunk_base_graphs);
-	pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
-		   &graph->chunk_generation_data);
-	pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
-		   &graph->chunk_generation_data_overflow);
+
+	if (get_configured_generation_version(r) >= 2) {
+		pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
+			&graph->chunk_generation_data);
+		pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
+			&graph->chunk_generation_data_overflow);
+	}
 
 	if (r->settings.commit_graph_read_changed_paths) {
 		pair_chunk(cf, GRAPH_CHUNKID_BLOOMINDEXES,
@@ -423,7 +425,7 @@
 		FREE_AND_NULL(graph->bloom_filter_settings);
 	}
 
-	hashcpy(graph->oid.hash, graph->data + graph->data_len - graph->hash_len);
+	oidread(&graph->oid, graph->data + graph->data_len - graph->hash_len);
 
 	if (verify_commit_graph_lite(graph))
 		goto free_and_return;
@@ -524,7 +526,7 @@
 		return NULL;
 
 	count = st.st_size / (the_hash_algo->hexsz + 1);
-	oids = xcalloc(count, sizeof(struct object_id));
+	CALLOC_ARRAY(oids, count);
 
 	prepare_alt_odb(r);
 
@@ -744,7 +746,7 @@
 
 	lex_index = pos - g->num_commits_in_base;
 
-	hashcpy(oid->hash, g->chunk_oid_lookup + g->hash_len * lex_index);
+	oidread(oid, g->chunk_oid_lookup + g->hash_len * lex_index);
 }
 
 static struct commit_list **insert_parent_or_die(struct repository *r,
@@ -937,7 +939,7 @@
 	commit_data = g->chunk_commit_data +
 			GRAPH_DATA_WIDTH * (graph_pos - g->num_commits_in_base);
 
-	hashcpy(oid.hash, commit_data);
+	oidread(&oid, commit_data);
 	set_commit_tree(c, lookup_tree(r, &oid));
 
 	return c->maybe_tree;
@@ -1791,8 +1793,8 @@
 	struct lock_file lk = LOCK_INIT;
 	const unsigned hashsz = the_hash_algo->rawsz;
 	struct strbuf progress_title = STRBUF_INIT;
-	struct object_id file_hash;
 	struct chunkfile *cf;
+	unsigned char file_hash[GIT_MAX_RAWSZ];
 
 	if (ctx->split) {
 		struct strbuf tmp_file = STRBUF_INIT;
@@ -1847,8 +1849,6 @@
 	add_chunk(cf, GRAPH_CHUNKID_DATA, (hashsz + 16) * ctx->commits.nr,
 		  write_graph_chunk_data);
 
-	if (git_env_bool(GIT_TEST_COMMIT_GRAPH_NO_GDAT, 0))
-		ctx->write_generation_data = 0;
 	if (ctx->write_generation_data)
 		add_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA,
 			  sizeof(uint32_t) * ctx->commits.nr,
@@ -1909,7 +1909,7 @@
 	}
 
 	close_commit_graph(ctx->r->objects);
-	finalize_hashfile(f, file_hash.hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
+	finalize_hashfile(f, file_hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
 	free_chunkfile(cf);
 
 	if (ctx->split) {
@@ -1945,7 +1945,7 @@
 			unlink(graph_name);
 		}
 
-		ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(oid_to_hex(&file_hash));
+		ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(hash_to_hex(file_hash));
 		final_graph_name = get_split_graph_filename(ctx->odb,
 					ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1]);
 		ctx->commit_graph_filenames_after[ctx->num_commit_graphs_after - 1] = final_graph_name;
@@ -2231,6 +2231,7 @@
 		       enum commit_graph_write_flags flags,
 		       const struct commit_graph_opts *opts)
 {
+	struct repository *r = the_repository;
 	struct write_commit_graph_context *ctx;
 	uint32_t i;
 	int res = 0;
@@ -2238,23 +2239,23 @@
 	struct bloom_filter_settings bloom_settings = DEFAULT_BLOOM_FILTER_SETTINGS;
 	struct topo_level_slab topo_levels;
 
-	prepare_repo_settings(the_repository);
-	if (!the_repository->settings.core_commit_graph) {
+	prepare_repo_settings(r);
+	if (!r->settings.core_commit_graph) {
 		warning(_("attempting to write a commit-graph, but 'core.commitGraph' is disabled"));
 		return 0;
 	}
-	if (!commit_graph_compatible(the_repository))
+	if (!commit_graph_compatible(r))
 		return 0;
 
-	ctx = xcalloc(1, sizeof(struct write_commit_graph_context));
-	ctx->r = the_repository;
+	CALLOC_ARRAY(ctx, 1);
+	ctx->r = r;
 	ctx->odb = odb;
 	ctx->append = flags & COMMIT_GRAPH_WRITE_APPEND ? 1 : 0;
 	ctx->report_progress = flags & COMMIT_GRAPH_WRITE_PROGRESS ? 1 : 0;
 	ctx->split = flags & COMMIT_GRAPH_WRITE_SPLIT ? 1 : 0;
 	ctx->opts = opts;
 	ctx->total_bloom_filter_data_size = 0;
-	ctx->write_generation_data = 1;
+	ctx->write_generation_data = (get_configured_generation_version(r) == 2);
 	ctx->num_generation_data_overflows = 0;
 
 	bloom_settings.bits_per_entry = git_env_ulong("GIT_TEST_BLOOM_SETTINGS_BITS_PER_ENTRY",
@@ -2321,7 +2322,7 @@
 		struct commit_graph *g = ctx->r->objects->commit_graph;
 		for (i = 0; i < g->num_commits; i++) {
 			struct object_id oid;
-			hashcpy(oid.hash, g->chunk_oid_lookup + g->hash_len * i);
+			oidread(&oid, g->chunk_oid_lookup + g->hash_len * i);
 			oid_array_append(&ctx->oids, &oid);
 		}
 	}
@@ -2383,6 +2384,7 @@
 	free(ctx->graph_name);
 	free(ctx->commits.list);
 	oid_array_clear(&ctx->oids);
+	clear_topo_level_slab(&topo_levels);
 
 	if (ctx->commit_graph_filenames_after) {
 		for (i = 0; i < ctx->num_commit_graphs_after; i++) {
@@ -2406,6 +2408,7 @@
 #define VERIFY_COMMIT_GRAPH_ERROR_HASH 2
 static int verify_commit_graph_error;
 
+__attribute__((format (printf, 1, 2)))
 static void graph_report(const char *fmt, ...)
 {
 	va_list ap;
@@ -2420,13 +2423,16 @@
 #define GENERATION_ZERO_EXISTS 1
 #define GENERATION_NUMBER_EXISTS 2
 
+static int commit_graph_checksum_valid(struct commit_graph *g)
+{
+	return hashfile_checksum_valid(g->data, g->data_len);
+}
+
 int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
 {
 	uint32_t i, cur_fanout_pos = 0;
-	struct object_id prev_oid, cur_oid, checksum;
+	struct object_id prev_oid, cur_oid;
 	int generation_zero = 0;
-	struct hashfile *f;
-	int devnull;
 	struct progress *progress = NULL;
 	int local_error = 0;
 
@@ -2439,11 +2445,7 @@
 	if (verify_commit_graph_error)
 		return verify_commit_graph_error;
 
-	devnull = open("/dev/null", O_WRONLY);
-	f = hashfd(devnull, NULL);
-	hashwrite(f, g->data, g->data_len - g->hash_len);
-	finalize_hashfile(f, checksum.hash, CSUM_CLOSE);
-	if (!hasheq(checksum.hash, g->data + g->data_len - g->hash_len)) {
+	if (!commit_graph_checksum_valid(g)) {
 		graph_report(_("the commit-graph file has incorrect checksum and is likely corrupt"));
 		verify_commit_graph_error = VERIFY_COMMIT_GRAPH_ERROR_HASH;
 	}
@@ -2451,7 +2453,7 @@
 	for (i = 0; i < g->num_commits; i++) {
 		struct commit *graph_commit;
 
-		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
+		oidread(&cur_oid, g->chunk_oid_lookup + g->hash_len * i);
 
 		if (i && oidcmp(&prev_oid, &cur_oid) >= 0)
 			graph_report(_("commit-graph has incorrect OID order: %s then %s"),
@@ -2499,7 +2501,7 @@
 		timestamp_t generation;
 
 		display_progress(progress, i + 1);
-		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
+		oidread(&cur_oid, g->chunk_oid_lookup + g->hash_len * i);
 
 		graph_commit = lookup_commit(r, &cur_oid);
 		odb_commit = (struct commit *)create_object(r, &cur_oid, alloc_commit_node(r));
diff --git a/commit-graph.h b/commit-graph.h
index 97f3497..96c24fb 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -6,7 +6,6 @@
 #include "oidset.h"
 
 #define GIT_TEST_COMMIT_GRAPH "GIT_TEST_COMMIT_GRAPH"
-#define GIT_TEST_COMMIT_GRAPH_NO_GDAT "GIT_TEST_COMMIT_GRAPH_NO_GDAT"
 #define GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE "GIT_TEST_COMMIT_GRAPH_DIE_ON_PARSE"
 #define GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS "GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS"
 
diff --git a/commit-reach.c b/commit-reach.c
index e38771c..c226ee3 100644
--- a/commit-reach.c
+++ b/commit-reach.c
@@ -17,6 +17,25 @@
 
 static const unsigned all_flags = (PARENT1 | PARENT2 | STALE | RESULT);
 
+static int compare_commits_by_gen(const void *_a, const void *_b)
+{
+	const struct commit *a = *(const struct commit * const *)_a;
+	const struct commit *b = *(const struct commit * const *)_b;
+
+	timestamp_t generation_a = commit_graph_generation(a);
+	timestamp_t generation_b = commit_graph_generation(b);
+
+	if (generation_a < generation_b)
+		return -1;
+	if (generation_a > generation_b)
+		return 1;
+	if (a->date < b->date)
+		return -1;
+	if (a->date > b->date)
+		return 1;
+	return 0;
+}
+
 static int queue_has_nonstale(struct prio_queue *queue)
 {
 	int i;
@@ -156,20 +175,15 @@
 	return ret;
 }
 
-static int remove_redundant(struct repository *r, struct commit **array, int cnt)
+static int remove_redundant_no_gen(struct repository *r,
+				   struct commit **array, int cnt)
 {
-	/*
-	 * Some commit in the array may be an ancestor of
-	 * another commit.  Move such commit to the end of
-	 * the array, and return the number of commits that
-	 * are independent from each other.
-	 */
 	struct commit **work;
 	unsigned char *redundant;
 	int *filled_index;
 	int i, j, filled;
 
-	work = xcalloc(cnt, sizeof(*work));
+	CALLOC_ARRAY(work, cnt);
 	redundant = xcalloc(cnt, 1);
 	ALLOC_ARRAY(filled_index, cnt - 1);
 
@@ -209,15 +223,156 @@
 	for (i = filled = 0; i < cnt; i++)
 		if (!redundant[i])
 			array[filled++] = work[i];
-	for (j = filled, i = 0; i < cnt; i++)
-		if (redundant[i])
-			array[j++] = work[i];
 	free(work);
 	free(redundant);
 	free(filled_index);
 	return filled;
 }
 
+static int remove_redundant_with_gen(struct repository *r,
+				     struct commit **array, int cnt)
+{
+	int i, count_non_stale = 0, count_still_independent = cnt;
+	timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
+	struct commit **walk_start, **sorted;
+	size_t walk_start_nr = 0, walk_start_alloc = cnt;
+	int min_gen_pos = 0;
+
+	/*
+	 * Sort the input by generation number, ascending. This allows
+	 * us to increase the "min_generation" limit when we discover
+	 * the commit with lowest generation is STALE. The index
+	 * min_gen_pos points to the current position within 'array'
+	 * that is not yet known to be STALE.
+	 */
+	ALLOC_ARRAY(sorted, cnt);
+	COPY_ARRAY(sorted, array, cnt);
+	QSORT(sorted, cnt, compare_commits_by_gen);
+	min_generation = commit_graph_generation(sorted[0]);
+
+	ALLOC_ARRAY(walk_start, walk_start_alloc);
+
+	/* Mark all parents of the input as STALE */
+	for (i = 0; i < cnt; i++) {
+		struct commit_list *parents;
+
+		repo_parse_commit(r, array[i]);
+		array[i]->object.flags |= RESULT;
+		parents = array[i]->parents;
+
+		while (parents) {
+			repo_parse_commit(r, parents->item);
+			if (!(parents->item->object.flags & STALE)) {
+				parents->item->object.flags |= STALE;
+				ALLOC_GROW(walk_start, walk_start_nr + 1, walk_start_alloc);
+				walk_start[walk_start_nr++] = parents->item;
+			}
+			parents = parents->next;
+		}
+	}
+
+	QSORT(walk_start, walk_start_nr, compare_commits_by_gen);
+
+	/* remove STALE bit for now to allow walking through parents */
+	for (i = 0; i < walk_start_nr; i++)
+		walk_start[i]->object.flags &= ~STALE;
+
+	/*
+	 * Start walking from the highest generation. Hopefully, it will
+	 * find all other items during the first-parent walk, and we can
+	 * terminate early. Otherwise, we will do the same amount of work
+	 * as before.
+	 */
+	for (i = walk_start_nr - 1; i >= 0 && count_still_independent > 1; i--) {
+		/* push the STALE bits up to min generation */
+		struct commit_list *stack = NULL;
+
+		commit_list_insert(walk_start[i], &stack);
+		walk_start[i]->object.flags |= STALE;
+
+		while (stack) {
+			struct commit_list *parents;
+			struct commit *c = stack->item;
+
+			repo_parse_commit(r, c);
+
+			if (c->object.flags & RESULT) {
+				c->object.flags &= ~RESULT;
+				if (--count_still_independent <= 1)
+					break;
+				if (oideq(&c->object.oid, &sorted[min_gen_pos]->object.oid)) {
+					while (min_gen_pos < cnt - 1 &&
+					       (sorted[min_gen_pos]->object.flags & STALE))
+						min_gen_pos++;
+					min_generation = commit_graph_generation(sorted[min_gen_pos]);
+				}
+			}
+
+			if (commit_graph_generation(c) < min_generation) {
+				pop_commit(&stack);
+				continue;
+			}
+
+			parents = c->parents;
+			while (parents) {
+				if (!(parents->item->object.flags & STALE)) {
+					parents->item->object.flags |= STALE;
+					commit_list_insert(parents->item, &stack);
+					break;
+				}
+				parents = parents->next;
+			}
+
+			/* pop if all parents have been visited already */
+			if (!parents)
+				pop_commit(&stack);
+		}
+		free_commit_list(stack);
+	}
+	free(sorted);
+
+	/* clear result */
+	for (i = 0; i < cnt; i++)
+		array[i]->object.flags &= ~RESULT;
+
+	/* rearrange array */
+	for (i = count_non_stale = 0; i < cnt; i++) {
+		if (!(array[i]->object.flags & STALE))
+			array[count_non_stale++] = array[i];
+	}
+
+	/* clear marks */
+	clear_commit_marks_many(walk_start_nr, walk_start, STALE);
+	free(walk_start);
+
+	return count_non_stale;
+}
+
+static int remove_redundant(struct repository *r, struct commit **array, int cnt)
+{
+	/*
+	 * Some commit in the array may be an ancestor of
+	 * another commit.  Move the independent commits to the
+	 * beginning of 'array' and return their number. Callers
+	 * should not rely upon the contents of 'array' after
+	 * that number.
+	 */
+	if (generation_numbers_enabled(r)) {
+		int i;
+
+		/*
+		 * If we have a single commit with finite generation
+		 * number, then the _with_gen algorithm is preferred.
+		 */
+		for (i = 0; i < cnt; i++) {
+			if (commit_graph_generation(array[i]) < GENERATION_NUMBER_INFINITY)
+				return remove_redundant_with_gen(r, array, cnt);
+		}
+	}
+
+	return remove_redundant_no_gen(r, array, cnt);
+}
+
 static struct commit_list *get_merge_bases_many_0(struct repository *r,
 						  struct commit *one,
 						  int n,
@@ -244,7 +399,7 @@
 
 	/* There are more than one */
 	cnt = commit_list_count(result);
-	rslt = xcalloc(cnt, sizeof(*rslt));
+	CALLOC_ARRAY(rslt, cnt);
 	for (list = result, i = 0; list; list = list->next)
 		rslt[i++] = list->item;
 	free_commit_list(result);
@@ -386,7 +541,7 @@
 		p->item->object.flags |= STALE;
 		num_head++;
 	}
-	array = xcalloc(num_head, sizeof(*array));
+	CALLOC_ARRAY(array, num_head);
 	for (p = heads, i = 0; p; p = p->next) {
 		if (p->item->object.flags & STALE) {
 			array[i++] = p->item;
@@ -561,21 +716,6 @@
 	return repo_is_descendant_of(the_repository, commit, list);
 }
 
-static int compare_commits_by_gen(const void *_a, const void *_b)
-{
-	const struct commit *a = *(const struct commit * const *)_a;
-	const struct commit *b = *(const struct commit * const *)_b;
-
-	timestamp_t generation_a = commit_graph_generation(a);
-	timestamp_t generation_b = commit_graph_generation(b);
-
-	if (generation_a < generation_b)
-		return -1;
-	if (generation_a > generation_b)
-		return 1;
-	return 0;
-}
-
 int can_all_from_reach_with_flag(struct object_array *from,
 				 unsigned int with_flag,
 				 unsigned int assign_flag,
diff --git a/commit.c b/commit.c
index 6ccd774..143f472 100644
--- a/commit.c
+++ b/commit.c
@@ -535,6 +535,20 @@
 	return eol - p;
 }
 
+size_t commit_subject_length(const char *body)
+{
+	const char *p = body;
+	while (*p) {
+		const char *next = skip_blank_lines(p);
+		if (next != p)
+			break;
+		p = strchrnul(p, '\n');
+		if (*p)
+			p++;
+	}
+	return p - body;
+}
+
 struct commit_list *commit_list_insert(struct commit *item, struct commit_list **list_p)
 {
 	struct commit_list *new_list = xmalloc(sizeof(struct commit_list));
@@ -1164,14 +1178,14 @@
 	/*
 	 * We could verify this signature and either omit the tag when
 	 * it does not validate, but the integrator may not have the
-	 * public key of the signer of the tag he is merging, while a
+	 * public key of the signer of the tag being merged, while a
 	 * later auditor may have it while auditing, so let's not run
 	 * verify-signed-buffer here for now...
 	 *
 	 * if (verify_signed_buffer(buf, len, buf + len, size - len, ...))
 	 *	warn("warning: signed tag unverified.");
 	 */
-	mergetag = xcalloc(1, sizeof(*mergetag));
+	CALLOC_ARRAY(mergetag, 1);
 	mergetag->key = xstrdup("mergetag");
 	mergetag->value = buf;
 	mergetag->len = size;
@@ -1336,7 +1350,7 @@
 			 excluded_header_field(line, eof - line, exclude))
 			continue;
 
-		it = xcalloc(1, sizeof(*it));
+		CALLOC_ARRAY(it, 1);
 		it->key = xmemdupz(line, eof-line);
 		*tail = it;
 		tail = &it->next;
diff --git a/commit.h b/commit.h
index 49c0f50..df42eb4 100644
--- a/commit.h
+++ b/commit.h
@@ -167,6 +167,9 @@
 /* Find beginning and length of commit subject. */
 int find_commit_subject(const char *commit_buffer, const char **subject);
 
+/* Return length of the commit subject from commit log message. */
+size_t commit_subject_length(const char *body);
+
 struct commit_list *commit_list_insert(struct commit *item,
 					struct commit_list **list);
 int commit_list_contains(struct commit *item,
diff --git a/compat/mingw.c b/compat/mingw.c
index a00f331..aa647b3 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -367,6 +367,8 @@
 	       ask_yes_no_if_possible("Deletion of directory '%s' failed. "
 			"Should I try again?", pathname))
 	       ret = _wrmdir(wpathname);
+	if (!ret)
+		invalidate_lstat_cache();
 	return ret;
 }
 
@@ -683,6 +685,8 @@
 int mingw_access(const char *filename, int mode)
 {
 	wchar_t wfilename[MAX_PATH];
+	if (!strcmp("nul", filename) || !strcmp("/dev/null", filename))
+		return 0;
 	if (xutftowcs_path(wfilename, filename) < 0)
 		return -1;
 	/* X_OK is not supported by the MSVCRT version */
diff --git a/compat/mingw.h b/compat/mingw.h
index af8eddd..c9a52ad 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -227,6 +227,7 @@
 
 int mingw_open (const char *filename, int oflags, ...);
 #define open mingw_open
+#undef OPEN_RETURNS_EINTR
 
 int mingw_fgetc(FILE *stream);
 #define fgetc mingw_fgetc
diff --git a/compat/open.c b/compat/open.c
new file mode 100644
index 0000000..eb3754a
--- /dev/null
+++ b/compat/open.c
@@ -0,0 +1,25 @@
+#include "git-compat-util.h"
+
+#undef open
+int git_open_with_retry(const char *path, int flags, ...)
+{
+	mode_t mode = 0;
+	int ret;
+
+	/*
+	 * Also O_TMPFILE would take a mode, but it isn't defined everywhere.
+	 * And anyway, we don't use it in our code base.
+	 */
+	if (flags & O_CREAT) {
+		va_list ap;
+		va_start(ap, flags);
+		mode = va_arg(ap, int);
+		va_end(ap);
+	}
+
+	do {
+		ret = open(path, flags, mode);
+	} while (ret < 0 && errno == EINTR);
+
+	return ret;
+}
diff --git a/compat/precompose_utf8.c b/compat/precompose_utf8.c
index ec56056..cce1d57 100644
--- a/compat/precompose_utf8.c
+++ b/compat/precompose_utf8.c
@@ -60,10 +60,12 @@
 	strbuf_release(&path);
 }
 
-static inline const char *precompose_string_if_needed(const char *in)
+const char *precompose_string_if_needed(const char *in)
 {
 	size_t inlen;
 	size_t outlen;
+	if (!in)
+		return NULL;
 	if (has_non_ascii(in, (size_t)-1, &inlen)) {
 		iconv_t ic_prec;
 		char *out;
@@ -96,10 +98,7 @@
 		argv[i] = precompose_string_if_needed(argv[i]);
 		i++;
 	}
-	if (prefix) {
-		prefix = precompose_string_if_needed(prefix);
-	}
-	return prefix;
+	return precompose_string_if_needed(prefix);
 }
 
 
diff --git a/compat/precompose_utf8.h b/compat/precompose_utf8.h
index d70b846..fea06cf 100644
--- a/compat/precompose_utf8.h
+++ b/compat/precompose_utf8.h
@@ -29,6 +29,7 @@
 } PREC_DIR;
 
 const char *precompose_argv_prefix(int argc, const char **argv, const char *prefix);
+const char *precompose_string_if_needed(const char *in);
 void probe_utf8_pathname_composition(void);
 
 PREC_DIR *precompose_utf8_opendir(const char *dirname);
diff --git a/compat/simple-ipc/ipc-shared.c b/compat/simple-ipc/ipc-shared.c
new file mode 100644
index 0000000..1b9d359
--- /dev/null
+++ b/compat/simple-ipc/ipc-shared.c
@@ -0,0 +1,32 @@
+#include "cache.h"
+#include "simple-ipc.h"
+#include "strbuf.h"
+#include "pkt-line.h"
+#include "thread-utils.h"
+
+#ifndef SUPPORTS_SIMPLE_IPC
+/*
+ * This source file should only be compiled when Simple IPC is supported.
+ * See the top-level Makefile.
+ */
+#error SUPPORTS_SIMPLE_IPC not defined
+#endif
+
+int ipc_server_run(const char *path, const struct ipc_server_opts *opts,
+		   ipc_server_application_cb *application_cb,
+		   void *application_data)
+{
+	struct ipc_server_data *server_data = NULL;
+	int ret;
+
+	ret = ipc_server_run_async(&server_data, path, opts,
+				   application_cb, application_data);
+	if (ret)
+		return ret;
+
+	ret = ipc_server_await(server_data);
+
+	ipc_server_free(server_data);
+
+	return ret;
+}
diff --git a/compat/simple-ipc/ipc-unix-socket.c b/compat/simple-ipc/ipc-unix-socket.c
new file mode 100644
index 0000000..1927e6e
--- /dev/null
+++ b/compat/simple-ipc/ipc-unix-socket.c
@@ -0,0 +1,1003 @@
+#include "cache.h"
+#include "simple-ipc.h"
+#include "strbuf.h"
+#include "pkt-line.h"
+#include "thread-utils.h"
+#include "unix-socket.h"
+#include "unix-stream-server.h"
+
+#ifndef SUPPORTS_SIMPLE_IPC
+/*
+ * This source file should only be compiled when Simple IPC is supported.
+ * See the top-level Makefile.
+ */
+#error SUPPORTS_SIMPLE_IPC not defined
+#endif
+
+enum ipc_active_state ipc_get_active_state(const char *path)
+{
+	enum ipc_active_state state = IPC_STATE__OTHER_ERROR;
+	struct ipc_client_connect_options options
+		= IPC_CLIENT_CONNECT_OPTIONS_INIT;
+	struct stat st;
+	struct ipc_client_connection *connection_test = NULL;
+
+	options.wait_if_busy = 0;
+	options.wait_if_not_found = 0;
+
+	if (lstat(path, &st) == -1) {
+		switch (errno) {
+		case ENOENT:
+		case ENOTDIR:
+			return IPC_STATE__NOT_LISTENING;
+		default:
+			return IPC_STATE__INVALID_PATH;
+		}
+	}
+
+	/* also complain if a plain file is in the way */
+	if ((st.st_mode & S_IFMT) != S_IFSOCK)
+		return IPC_STATE__INVALID_PATH;
+
+	/*
+	 * Just because the filesystem has a S_IFSOCK type inode
+	 * at `path`, doesn't mean it that there is a server listening.
+	 * Ping it to be sure.
+	 */
+	state = ipc_client_try_connect(path, &options, &connection_test);
+	ipc_client_close_connection(connection_test);
+
+	return state;
+}
+
+/*
+ * Retry frequency when trying to connect to a server.
+ *
+ * This value should be short enough that we don't seriously delay our
+ * caller, but not fast enough that our spinning puts pressure on the
+ * system.
+ */
+#define WAIT_STEP_MS (50)
+
+/*
+ * Try to connect to the server.  If the server is just starting up or
+ * is very busy, we may not get a connection the first time.
+ */
+static enum ipc_active_state connect_to_server(
+	const char *path,
+	int timeout_ms,
+	const struct ipc_client_connect_options *options,
+	int *pfd)
+{
+	int k;
+
+	*pfd = -1;
+
+	for (k = 0; k < timeout_ms; k += WAIT_STEP_MS) {
+		int fd = unix_stream_connect(path, options->uds_disallow_chdir);
+
+		if (fd != -1) {
+			*pfd = fd;
+			return IPC_STATE__LISTENING;
+		}
+
+		if (errno == ENOENT) {
+			if (!options->wait_if_not_found)
+				return IPC_STATE__PATH_NOT_FOUND;
+
+			goto sleep_and_try_again;
+		}
+
+		if (errno == ETIMEDOUT) {
+			if (!options->wait_if_busy)
+				return IPC_STATE__NOT_LISTENING;
+
+			goto sleep_and_try_again;
+		}
+
+		if (errno == ECONNREFUSED) {
+			if (!options->wait_if_busy)
+				return IPC_STATE__NOT_LISTENING;
+
+			goto sleep_and_try_again;
+		}
+
+		return IPC_STATE__OTHER_ERROR;
+
+	sleep_and_try_again:
+		sleep_millisec(WAIT_STEP_MS);
+	}
+
+	return IPC_STATE__NOT_LISTENING;
+}
+
+/*
+ * The total amount of time that we are willing to wait when trying to
+ * connect to a server.
+ *
+ * When the server is first started, it might take a little while for
+ * it to become ready to service requests.  Likewise, the server may
+ * be very (temporarily) busy and not respond to our connections.
+ *
+ * We should gracefully and silently handle those conditions and try
+ * again for a reasonable time period.
+ *
+ * The value chosen here should be long enough for the server
+ * to reliably heal from the above conditions.
+ */
+#define MY_CONNECTION_TIMEOUT_MS (1000)
+
+enum ipc_active_state ipc_client_try_connect(
+	const char *path,
+	const struct ipc_client_connect_options *options,
+	struct ipc_client_connection **p_connection)
+{
+	enum ipc_active_state state = IPC_STATE__OTHER_ERROR;
+	int fd = -1;
+
+	*p_connection = NULL;
+
+	trace2_region_enter("ipc-client", "try-connect", NULL);
+	trace2_data_string("ipc-client", NULL, "try-connect/path", path);
+
+	state = connect_to_server(path, MY_CONNECTION_TIMEOUT_MS,
+				  options, &fd);
+
+	trace2_data_intmax("ipc-client", NULL, "try-connect/state",
+			   (intmax_t)state);
+	trace2_region_leave("ipc-client", "try-connect", NULL);
+
+	if (state == IPC_STATE__LISTENING) {
+		(*p_connection) = xcalloc(1, sizeof(struct ipc_client_connection));
+		(*p_connection)->fd = fd;
+	}
+
+	return state;
+}
+
+void ipc_client_close_connection(struct ipc_client_connection *connection)
+{
+	if (!connection)
+		return;
+
+	if (connection->fd != -1)
+		close(connection->fd);
+
+	free(connection);
+}
+
+int ipc_client_send_command_to_connection(
+	struct ipc_client_connection *connection,
+	const char *message, struct strbuf *answer)
+{
+	int ret = 0;
+
+	strbuf_setlen(answer, 0);
+
+	trace2_region_enter("ipc-client", "send-command", NULL);
+
+	if (write_packetized_from_buf_no_flush(message, strlen(message),
+					       connection->fd) < 0 ||
+	    packet_flush_gently(connection->fd) < 0) {
+		ret = error(_("could not send IPC command"));
+		goto done;
+	}
+
+	if (read_packetized_to_strbuf(
+		    connection->fd, answer,
+		    PACKET_READ_GENTLE_ON_EOF | PACKET_READ_GENTLE_ON_READ_ERROR) < 0) {
+		ret = error(_("could not read IPC response"));
+		goto done;
+	}
+
+done:
+	trace2_region_leave("ipc-client", "send-command", NULL);
+	return ret;
+}
+
+int ipc_client_send_command(const char *path,
+			    const struct ipc_client_connect_options *options,
+			    const char *message, struct strbuf *answer)
+{
+	int ret = -1;
+	enum ipc_active_state state;
+	struct ipc_client_connection *connection = NULL;
+
+	state = ipc_client_try_connect(path, options, &connection);
+
+	if (state != IPC_STATE__LISTENING)
+		return ret;
+
+	ret = ipc_client_send_command_to_connection(connection, message, answer);
+
+	ipc_client_close_connection(connection);
+
+	return ret;
+}
+
+static int set_socket_blocking_flag(int fd, int make_nonblocking)
+{
+	int flags;
+
+	flags = fcntl(fd, F_GETFL, NULL);
+
+	if (flags < 0)
+		return -1;
+
+	if (make_nonblocking)
+		flags |= O_NONBLOCK;
+	else
+		flags &= ~O_NONBLOCK;
+
+	return fcntl(fd, F_SETFL, flags);
+}
+
+/*
+ * Magic numbers used to annotate callback instance data.
+ * These are used to help guard against accidentally passing the
+ * wrong instance data across multiple levels of callbacks (which
+ * is easy to do if there are `void*` arguments).
+ */
+enum magic {
+	MAGIC_SERVER_REPLY_DATA,
+	MAGIC_WORKER_THREAD_DATA,
+	MAGIC_ACCEPT_THREAD_DATA,
+	MAGIC_SERVER_DATA,
+};
+
+struct ipc_server_reply_data {
+	enum magic magic;
+	int fd;
+	struct ipc_worker_thread_data *worker_thread_data;
+};
+
+struct ipc_worker_thread_data {
+	enum magic magic;
+	struct ipc_worker_thread_data *next_thread;
+	struct ipc_server_data *server_data;
+	pthread_t pthread_id;
+};
+
+struct ipc_accept_thread_data {
+	enum magic magic;
+	struct ipc_server_data *server_data;
+
+	struct unix_ss_socket *server_socket;
+
+	int fd_send_shutdown;
+	int fd_wait_shutdown;
+	pthread_t pthread_id;
+};
+
+/*
+ * With unix-sockets, the conceptual "ipc-server" is implemented as a single
+ * controller "accept-thread" thread and a pool of "worker-thread" threads.
+ * The former does the usual `accept()` loop and dispatches connections
+ * to an idle worker thread.  The worker threads wait in an idle loop for
+ * a new connection, communicate with the client and relay data to/from
+ * the `application_cb` and then wait for another connection from the
+ * server thread.  This avoids the overhead of constantly creating and
+ * destroying threads.
+ */
+struct ipc_server_data {
+	enum magic magic;
+	ipc_server_application_cb *application_cb;
+	void *application_data;
+	struct strbuf buf_path;
+
+	struct ipc_accept_thread_data *accept_thread;
+	struct ipc_worker_thread_data *worker_thread_list;
+
+	pthread_mutex_t work_available_mutex;
+	pthread_cond_t work_available_cond;
+
+	/*
+	 * Accepted but not yet processed client connections are kept
+	 * in a circular buffer FIFO.  The queue is empty when the
+	 * positions are equal.
+	 */
+	int *fifo_fds;
+	int queue_size;
+	int back_pos;
+	int front_pos;
+
+	int shutdown_requested;
+	int is_stopped;
+};
+
+/*
+ * Remove and return the oldest queued connection.
+ *
+ * Returns -1 if empty.
+ */
+static int fifo_dequeue(struct ipc_server_data *server_data)
+{
+	/* ASSERT holding mutex */
+
+	int fd;
+
+	if (server_data->back_pos == server_data->front_pos)
+		return -1;
+
+	fd = server_data->fifo_fds[server_data->front_pos];
+	server_data->fifo_fds[server_data->front_pos] = -1;
+
+	server_data->front_pos++;
+	if (server_data->front_pos == server_data->queue_size)
+		server_data->front_pos = 0;
+
+	return fd;
+}
+
+/*
+ * Push a new fd onto the back of the queue.
+ *
+ * Drop it and return -1 if queue is already full.
+ */
+static int fifo_enqueue(struct ipc_server_data *server_data, int fd)
+{
+	/* ASSERT holding mutex */
+
+	int next_back_pos;
+
+	next_back_pos = server_data->back_pos + 1;
+	if (next_back_pos == server_data->queue_size)
+		next_back_pos = 0;
+
+	if (next_back_pos == server_data->front_pos) {
+		/* Queue is full. Just drop it. */
+		close(fd);
+		return -1;
+	}
+
+	server_data->fifo_fds[server_data->back_pos] = fd;
+	server_data->back_pos = next_back_pos;
+
+	return fd;
+}
+
+/*
+ * Wait for a connection to be queued to the FIFO and return it.
+ *
+ * Returns -1 if someone has already requested a shutdown.
+ */
+static int worker_thread__wait_for_connection(
+	struct ipc_worker_thread_data *worker_thread_data)
+{
+	/* ASSERT NOT holding mutex */
+
+	struct ipc_server_data *server_data = worker_thread_data->server_data;
+	int fd = -1;
+
+	pthread_mutex_lock(&server_data->work_available_mutex);
+	for (;;) {
+		if (server_data->shutdown_requested)
+			break;
+
+		fd = fifo_dequeue(server_data);
+		if (fd >= 0)
+			break;
+
+		pthread_cond_wait(&server_data->work_available_cond,
+				  &server_data->work_available_mutex);
+	}
+	pthread_mutex_unlock(&server_data->work_available_mutex);
+
+	return fd;
+}
+
+/*
+ * Forward declare our reply callback function so that any compiler
+ * errors are reported when we actually define the function (in addition
+ * to any errors reported when we try to pass this callback function as
+ * a parameter in a function call).  The former are easier to understand.
+ */
+static ipc_server_reply_cb do_io_reply_callback;
+
+/*
+ * Relay application's response message to the client process.
+ * (We do not flush at this point because we allow the caller
+ * to chunk data to the client thru us.)
+ */
+static int do_io_reply_callback(struct ipc_server_reply_data *reply_data,
+		       const char *response, size_t response_len)
+{
+	if (reply_data->magic != MAGIC_SERVER_REPLY_DATA)
+		BUG("reply_cb called with wrong instance data");
+
+	return write_packetized_from_buf_no_flush(response, response_len,
+						  reply_data->fd);
+}
+
+/* A randomly chosen value. */
+#define MY_WAIT_POLL_TIMEOUT_MS (10)
+
+/*
+ * If the client hangs up without sending any data on the wire, just
+ * quietly close the socket and ignore this client.
+ *
+ * This worker thread is committed to reading the IPC request data
+ * from the client at the other end of this fd.  Wait here for the
+ * client to actually put something on the wire -- because if the
+ * client just does a ping (connect and hangup without sending any
+ * data), our use of the pkt-line read routines will spew an error
+ * message.
+ *
+ * Return -1 if the client hung up.
+ * Return 0 if data (possibly incomplete) is ready.
+ */
+static int worker_thread__wait_for_io_start(
+	struct ipc_worker_thread_data *worker_thread_data,
+	int fd)
+{
+	struct ipc_server_data *server_data = worker_thread_data->server_data;
+	struct pollfd pollfd[1];
+	int result;
+
+	for (;;) {
+		pollfd[0].fd = fd;
+		pollfd[0].events = POLLIN;
+
+		result = poll(pollfd, 1, MY_WAIT_POLL_TIMEOUT_MS);
+		if (result < 0) {
+			if (errno == EINTR)
+				continue;
+			goto cleanup;
+		}
+
+		if (result == 0) {
+			/* a timeout */
+
+			int in_shutdown;
+
+			pthread_mutex_lock(&server_data->work_available_mutex);
+			in_shutdown = server_data->shutdown_requested;
+			pthread_mutex_unlock(&server_data->work_available_mutex);
+
+			/*
+			 * If a shutdown is already in progress and this
+			 * client has not started talking yet, just drop it.
+			 */
+			if (in_shutdown)
+				goto cleanup;
+			continue;
+		}
+
+		if (pollfd[0].revents & POLLHUP)
+			goto cleanup;
+
+		if (pollfd[0].revents & POLLIN)
+			return 0;
+
+		goto cleanup;
+	}
+
+cleanup:
+	close(fd);
+	return -1;
+}
+
+/*
+ * Receive the request/command from the client and pass it to the
+ * registered request-callback.  The request-callback will compose
+ * a response and call our reply-callback to send it to the client.
+ */
+static int worker_thread__do_io(
+	struct ipc_worker_thread_data *worker_thread_data,
+	int fd)
+{
+	/* ASSERT NOT holding lock */
+
+	struct strbuf buf = STRBUF_INIT;
+	struct ipc_server_reply_data reply_data;
+	int ret = 0;
+
+	reply_data.magic = MAGIC_SERVER_REPLY_DATA;
+	reply_data.worker_thread_data = worker_thread_data;
+
+	reply_data.fd = fd;
+
+	ret = read_packetized_to_strbuf(
+		reply_data.fd, &buf,
+		PACKET_READ_GENTLE_ON_EOF | PACKET_READ_GENTLE_ON_READ_ERROR);
+	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);
+
+		packet_flush_gently(reply_data.fd);
+	}
+	else {
+		/*
+		 * The client probably disconnected/shutdown before it
+		 * could send a well-formed message.  Ignore it.
+		 */
+	}
+
+	strbuf_release(&buf);
+	close(reply_data.fd);
+
+	return ret;
+}
+
+/*
+ * Block SIGPIPE on the current thread (so that we get EPIPE from
+ * write() rather than an actual signal).
+ *
+ * Note that using sigchain_push() and _pop() to control SIGPIPE
+ * around our IO calls is not thread safe:
+ * [] It uses a global stack of handler frames.
+ * [] It uses ALLOC_GROW() to resize it.
+ * [] Finally, according to the `signal(2)` man-page:
+ *    "The effects of `signal()` in a multithreaded process are unspecified."
+ */
+static void thread_block_sigpipe(sigset_t *old_set)
+{
+	sigset_t new_set;
+
+	sigemptyset(&new_set);
+	sigaddset(&new_set, SIGPIPE);
+
+	sigemptyset(old_set);
+	pthread_sigmask(SIG_BLOCK, &new_set, old_set);
+}
+
+/*
+ * Thread proc for an IPC worker thread.  It handles a series of
+ * connections from clients.  It pulls the next fd from the queue
+ * processes it, and then waits for the next client.
+ *
+ * Block SIGPIPE in this worker thread for the life of the thread.
+ * This avoids stray (and sometimes delayed) SIGPIPE signals caused
+ * by client errors and/or when we are under extremely heavy IO load.
+ *
+ * This means that the application callback will have SIGPIPE blocked.
+ * The callback should not change it.
+ */
+static void *worker_thread_proc(void *_worker_thread_data)
+{
+	struct ipc_worker_thread_data *worker_thread_data = _worker_thread_data;
+	struct ipc_server_data *server_data = worker_thread_data->server_data;
+	sigset_t old_set;
+	int fd, io;
+	int ret;
+
+	trace2_thread_start("ipc-worker");
+
+	thread_block_sigpipe(&old_set);
+
+	for (;;) {
+		fd = worker_thread__wait_for_connection(worker_thread_data);
+		if (fd == -1)
+			break; /* in shutdown */
+
+		io = worker_thread__wait_for_io_start(worker_thread_data, fd);
+		if (io == -1)
+			continue; /* client hung up without sending anything */
+
+		ret = worker_thread__do_io(worker_thread_data, fd);
+
+		if (ret == SIMPLE_IPC_QUIT) {
+			trace2_data_string("ipc-worker", NULL, "queue_stop_async",
+					   "application_quit");
+			/*
+			 * The application layer is telling the ipc-server
+			 * layer to shutdown.
+			 *
+			 * We DO NOT have a response to send to the client.
+			 *
+			 * Queue an async stop (to stop the other threads) and
+			 * allow this worker thread to exit now (no sense waiting
+			 * for the thread-pool shutdown signal).
+			 *
+			 * Other non-idle worker threads are allowed to finish
+			 * responding to their current clients.
+			 */
+			ipc_server_stop_async(server_data);
+			break;
+		}
+	}
+
+	trace2_thread_exit();
+	return NULL;
+}
+
+/* A randomly chosen value. */
+#define MY_ACCEPT_POLL_TIMEOUT_MS (60 * 1000)
+
+/*
+ * Accept a new client connection on our socket.  This uses non-blocking
+ * IO so that we can also wait for shutdown requests on our socket-pair
+ * without actually spinning on a fast timeout.
+ */
+static int accept_thread__wait_for_connection(
+	struct ipc_accept_thread_data *accept_thread_data)
+{
+	struct pollfd pollfd[2];
+	int result;
+
+	for (;;) {
+		pollfd[0].fd = accept_thread_data->fd_wait_shutdown;
+		pollfd[0].events = POLLIN;
+
+		pollfd[1].fd = accept_thread_data->server_socket->fd_socket;
+		pollfd[1].events = POLLIN;
+
+		result = poll(pollfd, 2, MY_ACCEPT_POLL_TIMEOUT_MS);
+		if (result < 0) {
+			if (errno == EINTR)
+				continue;
+			return result;
+		}
+
+		if (result == 0) {
+			/* a timeout */
+
+			/*
+			 * If someone deletes or force-creates a new unix
+			 * domain socket at our path, all future clients
+			 * will be routed elsewhere and we silently starve.
+			 * If that happens, just queue a shutdown.
+			 */
+			if (unix_ss_was_stolen(
+				    accept_thread_data->server_socket)) {
+				trace2_data_string("ipc-accept", NULL,
+						   "queue_stop_async",
+						   "socket_stolen");
+				ipc_server_stop_async(
+					accept_thread_data->server_data);
+			}
+			continue;
+		}
+
+		if (pollfd[0].revents & POLLIN) {
+			/* shutdown message queued to socketpair */
+			return -1;
+		}
+
+		if (pollfd[1].revents & POLLIN) {
+			/* a connection is available on server_socket */
+
+			int client_fd =
+				accept(accept_thread_data->server_socket->fd_socket,
+				       NULL, NULL);
+			if (client_fd >= 0)
+				return client_fd;
+
+			/*
+			 * An error here is unlikely -- it probably
+			 * indicates that the connecting process has
+			 * already dropped the connection.
+			 */
+			continue;
+		}
+
+		BUG("unandled poll result errno=%d r[0]=%d r[1]=%d",
+		    errno, pollfd[0].revents, pollfd[1].revents);
+	}
+}
+
+/*
+ * Thread proc for the IPC server "accept thread".  This waits for
+ * an incoming socket connection, appends it to the queue of available
+ * connections, and notifies a worker thread to process it.
+ *
+ * Block SIGPIPE in this thread for the life of the thread.  This
+ * avoids any stray SIGPIPE signals when closing pipe fds under
+ * extremely heavy loads (such as when the fifo queue is full and we
+ * drop incomming connections).
+ */
+static void *accept_thread_proc(void *_accept_thread_data)
+{
+	struct ipc_accept_thread_data *accept_thread_data = _accept_thread_data;
+	struct ipc_server_data *server_data = accept_thread_data->server_data;
+	sigset_t old_set;
+
+	trace2_thread_start("ipc-accept");
+
+	thread_block_sigpipe(&old_set);
+
+	for (;;) {
+		int client_fd = accept_thread__wait_for_connection(
+			accept_thread_data);
+
+		pthread_mutex_lock(&server_data->work_available_mutex);
+		if (server_data->shutdown_requested) {
+			pthread_mutex_unlock(&server_data->work_available_mutex);
+			if (client_fd >= 0)
+				close(client_fd);
+			break;
+		}
+
+		if (client_fd < 0) {
+			/* ignore transient accept() errors */
+		}
+		else {
+			fifo_enqueue(server_data, client_fd);
+			pthread_cond_broadcast(&server_data->work_available_cond);
+		}
+		pthread_mutex_unlock(&server_data->work_available_mutex);
+	}
+
+	trace2_thread_exit();
+	return NULL;
+}
+
+/*
+ * We can't predict the connection arrival rate relative to the worker
+ * processing rate, therefore we allow the "accept-thread" to queue up
+ * a generous number of connections, since we'd rather have the client
+ * not unnecessarily timeout if we can avoid it.  (The assumption is
+ * that this will be used for FSMonitor and a few second wait on a
+ * connection is better than having the client timeout and do the full
+ * computation itself.)
+ *
+ * The FIFO queue size is set to a multiple of the worker pool size.
+ * This value chosen at random.
+ */
+#define FIFO_SCALE (100)
+
+/*
+ * The backlog value for `listen(2)`.  This doesn't need to huge,
+ * rather just large enough for our "accept-thread" to wake up and
+ * queue incoming connections onto the FIFO without the kernel
+ * dropping any.
+ *
+ * This value chosen at random.
+ */
+#define LISTEN_BACKLOG (50)
+
+static int create_listener_socket(
+	const char *path,
+	const struct ipc_server_opts *ipc_opts,
+	struct unix_ss_socket **new_server_socket)
+{
+	struct unix_ss_socket *server_socket = NULL;
+	struct unix_stream_listen_opts uslg_opts = UNIX_STREAM_LISTEN_OPTS_INIT;
+	int ret;
+
+	uslg_opts.listen_backlog_size = LISTEN_BACKLOG;
+	uslg_opts.disallow_chdir = ipc_opts->uds_disallow_chdir;
+
+	ret = unix_ss_create(path, &uslg_opts, -1, &server_socket);
+	if (ret)
+		return ret;
+
+	if (set_socket_blocking_flag(server_socket->fd_socket, 1)) {
+		int saved_errno = errno;
+		unix_ss_free(server_socket);
+		errno = saved_errno;
+		return -1;
+	}
+
+	*new_server_socket = server_socket;
+
+	trace2_data_string("ipc-server", NULL, "listen-with-lock", path);
+	return 0;
+}
+
+static int setup_listener_socket(
+	const char *path,
+	const struct ipc_server_opts *ipc_opts,
+	struct unix_ss_socket **new_server_socket)
+{
+	int ret, saved_errno;
+
+	trace2_region_enter("ipc-server", "create-listener_socket", NULL);
+
+	ret = create_listener_socket(path, ipc_opts, new_server_socket);
+
+	saved_errno = errno;
+	trace2_region_leave("ipc-server", "create-listener_socket", NULL);
+	errno = saved_errno;
+
+	return ret;
+}
+
+/*
+ * Start IPC server in a pool of background threads.
+ */
+int ipc_server_run_async(struct ipc_server_data **returned_server_data,
+			 const char *path, const struct ipc_server_opts *opts,
+			 ipc_server_application_cb *application_cb,
+			 void *application_data)
+{
+	struct unix_ss_socket *server_socket = NULL;
+	struct ipc_server_data *server_data;
+	int sv[2];
+	int k;
+	int ret;
+	int nr_threads = opts->nr_threads;
+
+	*returned_server_data = NULL;
+
+	/*
+	 * Create a socketpair and set sv[1] to non-blocking.  This
+	 * will used to send a shutdown message to the accept-thread
+	 * and allows the accept-thread to wait on EITHER a client
+	 * connection or a shutdown request without spinning.
+	 */
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv) < 0)
+		return -1;
+
+	if (set_socket_blocking_flag(sv[1], 1)) {
+		int saved_errno = errno;
+		close(sv[0]);
+		close(sv[1]);
+		errno = saved_errno;
+		return -1;
+	}
+
+	ret = setup_listener_socket(path, opts, &server_socket);
+	if (ret) {
+		int saved_errno = errno;
+		close(sv[0]);
+		close(sv[1]);
+		errno = saved_errno;
+		return ret;
+	}
+
+	server_data = xcalloc(1, sizeof(*server_data));
+	server_data->magic = MAGIC_SERVER_DATA;
+	server_data->application_cb = application_cb;
+	server_data->application_data = application_data;
+	strbuf_init(&server_data->buf_path, 0);
+	strbuf_addstr(&server_data->buf_path, path);
+
+	if (nr_threads < 1)
+		nr_threads = 1;
+
+	pthread_mutex_init(&server_data->work_available_mutex, NULL);
+	pthread_cond_init(&server_data->work_available_cond, NULL);
+
+	server_data->queue_size = nr_threads * FIFO_SCALE;
+	CALLOC_ARRAY(server_data->fifo_fds, server_data->queue_size);
+
+	server_data->accept_thread =
+		xcalloc(1, sizeof(*server_data->accept_thread));
+	server_data->accept_thread->magic = MAGIC_ACCEPT_THREAD_DATA;
+	server_data->accept_thread->server_data = server_data;
+	server_data->accept_thread->server_socket = server_socket;
+	server_data->accept_thread->fd_send_shutdown = sv[0];
+	server_data->accept_thread->fd_wait_shutdown = sv[1];
+
+	if (pthread_create(&server_data->accept_thread->pthread_id, NULL,
+			   accept_thread_proc, server_data->accept_thread))
+		die_errno(_("could not start accept_thread '%s'"), path);
+
+	for (k = 0; k < nr_threads; k++) {
+		struct ipc_worker_thread_data *wtd;
+
+		wtd = xcalloc(1, sizeof(*wtd));
+		wtd->magic = MAGIC_WORKER_THREAD_DATA;
+		wtd->server_data = server_data;
+
+		if (pthread_create(&wtd->pthread_id, NULL, worker_thread_proc,
+				   wtd)) {
+			if (k == 0)
+				die(_("could not start worker[0] for '%s'"),
+				    path);
+			/*
+			 * Limp along with the thread pool that we have.
+			 */
+			break;
+		}
+
+		wtd->next_thread = server_data->worker_thread_list;
+		server_data->worker_thread_list = wtd;
+	}
+
+	*returned_server_data = server_data;
+	return 0;
+}
+
+/*
+ * Gently tell the IPC server treads to shutdown.
+ * Can be run on any thread.
+ */
+int ipc_server_stop_async(struct ipc_server_data *server_data)
+{
+	/* ASSERT NOT holding mutex */
+
+	int fd;
+
+	if (!server_data)
+		return 0;
+
+	trace2_region_enter("ipc-server", "server-stop-async", NULL);
+
+	pthread_mutex_lock(&server_data->work_available_mutex);
+
+	server_data->shutdown_requested = 1;
+
+	/*
+	 * Write a byte to the shutdown socket pair to wake up the
+	 * accept-thread.
+	 */
+	if (write(server_data->accept_thread->fd_send_shutdown, "Q", 1) < 0)
+		error_errno("could not write to fd_send_shutdown");
+
+	/*
+	 * Drain the queue of existing connections.
+	 */
+	while ((fd = fifo_dequeue(server_data)) != -1)
+		close(fd);
+
+	/*
+	 * Gently tell worker threads to stop processing new connections
+	 * and exit.  (This does not abort in-process conversations.)
+	 */
+	pthread_cond_broadcast(&server_data->work_available_cond);
+
+	pthread_mutex_unlock(&server_data->work_available_mutex);
+
+	trace2_region_leave("ipc-server", "server-stop-async", NULL);
+
+	return 0;
+}
+
+/*
+ * Wait for all IPC server threads to stop.
+ */
+int ipc_server_await(struct ipc_server_data *server_data)
+{
+	pthread_join(server_data->accept_thread->pthread_id, NULL);
+
+	if (!server_data->shutdown_requested)
+		BUG("ipc-server: accept-thread stopped for '%s'",
+		    server_data->buf_path.buf);
+
+	while (server_data->worker_thread_list) {
+		struct ipc_worker_thread_data *wtd =
+			server_data->worker_thread_list;
+
+		pthread_join(wtd->pthread_id, NULL);
+
+		server_data->worker_thread_list = wtd->next_thread;
+		free(wtd);
+	}
+
+	server_data->is_stopped = 1;
+
+	return 0;
+}
+
+void ipc_server_free(struct ipc_server_data *server_data)
+{
+	struct ipc_accept_thread_data * accept_thread_data;
+
+	if (!server_data)
+		return;
+
+	if (!server_data->is_stopped)
+		BUG("cannot free ipc-server while running for '%s'",
+		    server_data->buf_path.buf);
+
+	accept_thread_data = server_data->accept_thread;
+	if (accept_thread_data) {
+		unix_ss_free(accept_thread_data->server_socket);
+
+		if (accept_thread_data->fd_send_shutdown != -1)
+			close(accept_thread_data->fd_send_shutdown);
+		if (accept_thread_data->fd_wait_shutdown != -1)
+			close(accept_thread_data->fd_wait_shutdown);
+
+		free(server_data->accept_thread);
+	}
+
+	while (server_data->worker_thread_list) {
+		struct ipc_worker_thread_data *wtd =
+			server_data->worker_thread_list;
+
+		server_data->worker_thread_list = wtd->next_thread;
+		free(wtd);
+	}
+
+	pthread_cond_destroy(&server_data->work_available_cond);
+	pthread_mutex_destroy(&server_data->work_available_mutex);
+
+	strbuf_release(&server_data->buf_path);
+
+	free(server_data->fifo_fds);
+	free(server_data);
+}
diff --git a/compat/simple-ipc/ipc-win32.c b/compat/simple-ipc/ipc-win32.c
new file mode 100644
index 0000000..8dc7bda
--- /dev/null
+++ b/compat/simple-ipc/ipc-win32.c
@@ -0,0 +1,755 @@
+#include "cache.h"
+#include "simple-ipc.h"
+#include "strbuf.h"
+#include "pkt-line.h"
+#include "thread-utils.h"
+
+#ifndef SUPPORTS_SIMPLE_IPC
+/*
+ * This source file should only be compiled when Simple IPC is supported.
+ * See the top-level Makefile.
+ */
+#error SUPPORTS_SIMPLE_IPC not defined
+#endif
+
+static int initialize_pipe_name(const char *path, wchar_t *wpath, size_t alloc)
+{
+	int off = 0;
+	struct strbuf realpath = STRBUF_INIT;
+
+	if (!strbuf_realpath(&realpath, path, 0))
+		return -1;
+
+	off = swprintf(wpath, alloc, L"\\\\.\\pipe\\");
+	if (xutftowcs(wpath + off, realpath.buf, alloc - off) < 0)
+		return -1;
+
+	/* Handle drive prefix */
+	if (wpath[off] && wpath[off + 1] == L':') {
+		wpath[off + 1] = L'_';
+		off += 2;
+	}
+
+	for (; wpath[off]; off++)
+		if (wpath[off] == L'/')
+			wpath[off] = L'\\';
+
+	strbuf_release(&realpath);
+	return 0;
+}
+
+static enum ipc_active_state get_active_state(wchar_t *pipe_path)
+{
+	if (WaitNamedPipeW(pipe_path, NMPWAIT_USE_DEFAULT_WAIT))
+		return IPC_STATE__LISTENING;
+
+	if (GetLastError() == ERROR_SEM_TIMEOUT)
+		return IPC_STATE__NOT_LISTENING;
+
+	if (GetLastError() == ERROR_FILE_NOT_FOUND)
+		return IPC_STATE__PATH_NOT_FOUND;
+
+	return IPC_STATE__OTHER_ERROR;
+}
+
+enum ipc_active_state ipc_get_active_state(const char *path)
+{
+	wchar_t pipe_path[MAX_PATH];
+
+	if (initialize_pipe_name(path, pipe_path, ARRAY_SIZE(pipe_path)) < 0)
+		return IPC_STATE__INVALID_PATH;
+
+	return get_active_state(pipe_path);
+}
+
+#define WAIT_STEP_MS (50)
+
+static enum ipc_active_state connect_to_server(
+	const wchar_t *wpath,
+	DWORD timeout_ms,
+	const struct ipc_client_connect_options *options,
+	int *pfd)
+{
+	DWORD t_start_ms, t_waited_ms;
+	DWORD step_ms;
+	HANDLE hPipe = INVALID_HANDLE_VALUE;
+	DWORD mode = PIPE_READMODE_BYTE;
+	DWORD gle;
+
+	*pfd = -1;
+
+	for (;;) {
+		hPipe = CreateFileW(wpath, GENERIC_READ | GENERIC_WRITE,
+				    0, NULL, OPEN_EXISTING, 0, NULL);
+		if (hPipe != INVALID_HANDLE_VALUE)
+			break;
+
+		gle = GetLastError();
+
+		switch (gle) {
+		case ERROR_FILE_NOT_FOUND:
+			if (!options->wait_if_not_found)
+				return IPC_STATE__PATH_NOT_FOUND;
+			if (!timeout_ms)
+				return IPC_STATE__PATH_NOT_FOUND;
+
+			step_ms = (timeout_ms < WAIT_STEP_MS) ?
+				timeout_ms : WAIT_STEP_MS;
+			sleep_millisec(step_ms);
+
+			timeout_ms -= step_ms;
+			break; /* try again */
+
+		case ERROR_PIPE_BUSY:
+			if (!options->wait_if_busy)
+				return IPC_STATE__NOT_LISTENING;
+			if (!timeout_ms)
+				return IPC_STATE__NOT_LISTENING;
+
+			t_start_ms = (DWORD)(getnanotime() / 1000000);
+
+			if (!WaitNamedPipeW(wpath, timeout_ms)) {
+				if (GetLastError() == ERROR_SEM_TIMEOUT)
+					return IPC_STATE__NOT_LISTENING;
+
+				return IPC_STATE__OTHER_ERROR;
+			}
+
+			/*
+			 * A pipe server instance became available.
+			 * Race other client processes to connect to
+			 * it.
+			 *
+			 * But first decrement our overall timeout so
+			 * that we don't starve if we keep losing the
+			 * race.  But also guard against special
+			 * NPMWAIT_ values (0 and -1).
+			 */
+			t_waited_ms = (DWORD)(getnanotime() / 1000000) - t_start_ms;
+			if (t_waited_ms < timeout_ms)
+				timeout_ms -= t_waited_ms;
+			else
+				timeout_ms = 1;
+			break; /* try again */
+
+		default:
+			return IPC_STATE__OTHER_ERROR;
+		}
+	}
+
+	if (!SetNamedPipeHandleState(hPipe, &mode, NULL, NULL)) {
+		CloseHandle(hPipe);
+		return IPC_STATE__OTHER_ERROR;
+	}
+
+	*pfd = _open_osfhandle((intptr_t)hPipe, O_RDWR|O_BINARY);
+	if (*pfd < 0) {
+		CloseHandle(hPipe);
+		return IPC_STATE__OTHER_ERROR;
+	}
+
+	/* fd now owns hPipe */
+
+	return IPC_STATE__LISTENING;
+}
+
+/*
+ * The default connection timeout for Windows clients.
+ *
+ * This is not currently part of the ipc_ API (nor the config settings)
+ * because of differences between Windows and other platforms.
+ *
+ * This value was chosen at random.
+ */
+#define WINDOWS_CONNECTION_TIMEOUT_MS (30000)
+
+enum ipc_active_state ipc_client_try_connect(
+	const char *path,
+	const struct ipc_client_connect_options *options,
+	struct ipc_client_connection **p_connection)
+{
+	wchar_t wpath[MAX_PATH];
+	enum ipc_active_state state = IPC_STATE__OTHER_ERROR;
+	int fd = -1;
+
+	*p_connection = NULL;
+
+	trace2_region_enter("ipc-client", "try-connect", NULL);
+	trace2_data_string("ipc-client", NULL, "try-connect/path", path);
+
+	if (initialize_pipe_name(path, wpath, ARRAY_SIZE(wpath)) < 0)
+		state = IPC_STATE__INVALID_PATH;
+	else
+		state = connect_to_server(wpath, WINDOWS_CONNECTION_TIMEOUT_MS,
+					  options, &fd);
+
+	trace2_data_intmax("ipc-client", NULL, "try-connect/state",
+			   (intmax_t)state);
+	trace2_region_leave("ipc-client", "try-connect", NULL);
+
+	if (state == IPC_STATE__LISTENING) {
+		(*p_connection) = xcalloc(1, sizeof(struct ipc_client_connection));
+		(*p_connection)->fd = fd;
+	}
+
+	return state;
+}
+
+void ipc_client_close_connection(struct ipc_client_connection *connection)
+{
+	if (!connection)
+		return;
+
+	if (connection->fd != -1)
+		close(connection->fd);
+
+	free(connection);
+}
+
+int ipc_client_send_command_to_connection(
+	struct ipc_client_connection *connection,
+	const char *message, struct strbuf *answer)
+{
+	int ret = 0;
+
+	strbuf_setlen(answer, 0);
+
+	trace2_region_enter("ipc-client", "send-command", NULL);
+
+	if (write_packetized_from_buf_no_flush(message, strlen(message),
+					       connection->fd) < 0 ||
+	    packet_flush_gently(connection->fd) < 0) {
+		ret = error(_("could not send IPC command"));
+		goto done;
+	}
+
+	FlushFileBuffers((HANDLE)_get_osfhandle(connection->fd));
+
+	if (read_packetized_to_strbuf(
+		    connection->fd, answer,
+		    PACKET_READ_GENTLE_ON_EOF | PACKET_READ_GENTLE_ON_READ_ERROR) < 0) {
+		ret = error(_("could not read IPC response"));
+		goto done;
+	}
+
+done:
+	trace2_region_leave("ipc-client", "send-command", NULL);
+	return ret;
+}
+
+int ipc_client_send_command(const char *path,
+			    const struct ipc_client_connect_options *options,
+			    const char *message, struct strbuf *response)
+{
+	int ret = -1;
+	enum ipc_active_state state;
+	struct ipc_client_connection *connection = NULL;
+
+	state = ipc_client_try_connect(path, options, &connection);
+
+	if (state != IPC_STATE__LISTENING)
+		return ret;
+
+	ret = ipc_client_send_command_to_connection(connection, message, response);
+
+	ipc_client_close_connection(connection);
+
+	return ret;
+}
+
+/*
+ * Duplicate the given pipe handle and wrap it in a file descriptor so
+ * that we can use pkt-line on it.
+ */
+static int dup_fd_from_pipe(const HANDLE pipe)
+{
+	HANDLE process = GetCurrentProcess();
+	HANDLE handle;
+	int fd;
+
+	if (!DuplicateHandle(process, pipe, process, &handle, 0, FALSE,
+			     DUPLICATE_SAME_ACCESS)) {
+		errno = err_win_to_posix(GetLastError());
+		return -1;
+	}
+
+	fd = _open_osfhandle((intptr_t)handle, O_RDWR|O_BINARY);
+	if (fd < 0) {
+		errno = err_win_to_posix(GetLastError());
+		CloseHandle(handle);
+		return -1;
+	}
+
+	/*
+	 * `handle` is now owned by `fd` and will be automatically closed
+	 * when the descriptor is closed.
+	 */
+
+	return fd;
+}
+
+/*
+ * Magic numbers used to annotate callback instance data.
+ * These are used to help guard against accidentally passing the
+ * wrong instance data across multiple levels of callbacks (which
+ * is easy to do if there are `void*` arguments).
+ */
+enum magic {
+	MAGIC_SERVER_REPLY_DATA,
+	MAGIC_SERVER_THREAD_DATA,
+	MAGIC_SERVER_DATA,
+};
+
+struct ipc_server_reply_data {
+	enum magic magic;
+	int fd;
+	struct ipc_server_thread_data *server_thread_data;
+};
+
+struct ipc_server_thread_data {
+	enum magic magic;
+	struct ipc_server_thread_data *next_thread;
+	struct ipc_server_data *server_data;
+	pthread_t pthread_id;
+	HANDLE hPipe;
+};
+
+/*
+ * On Windows, the conceptual "ipc-server" is implemented as a pool of
+ * n idential/peer "server-thread" threads.  That is, there is no
+ * hierarchy of threads; and therefore no controller thread managing
+ * the pool.  Each thread has an independent handle to the named pipe,
+ * receives incoming connections, processes the client, and re-uses
+ * the pipe for the next client connection.
+ *
+ * Therefore, the "ipc-server" only needs to maintain a list of the
+ * spawned threads for eventual "join" purposes.
+ *
+ * A single "stop-event" is visible to all of the server threads to
+ * tell them to shutdown (when idle).
+ */
+struct ipc_server_data {
+	enum magic magic;
+	ipc_server_application_cb *application_cb;
+	void *application_data;
+	struct strbuf buf_path;
+	wchar_t wpath[MAX_PATH];
+
+	HANDLE hEventStopRequested;
+	struct ipc_server_thread_data *thread_list;
+	int is_stopped;
+};
+
+enum connect_result {
+	CR_CONNECTED = 0,
+	CR_CONNECT_PENDING,
+	CR_CONNECT_ERROR,
+	CR_WAIT_ERROR,
+	CR_SHUTDOWN,
+};
+
+static enum connect_result queue_overlapped_connect(
+	struct ipc_server_thread_data *server_thread_data,
+	OVERLAPPED *lpo)
+{
+	if (ConnectNamedPipe(server_thread_data->hPipe, lpo))
+		goto failed;
+
+	switch (GetLastError()) {
+	case ERROR_IO_PENDING:
+		return CR_CONNECT_PENDING;
+
+	case ERROR_PIPE_CONNECTED:
+		SetEvent(lpo->hEvent);
+		return CR_CONNECTED;
+
+	default:
+		break;
+	}
+
+failed:
+	error(_("ConnectNamedPipe failed for '%s' (%lu)"),
+	      server_thread_data->server_data->buf_path.buf,
+	      GetLastError());
+	return CR_CONNECT_ERROR;
+}
+
+/*
+ * Use Windows Overlapped IO to wait for a connection or for our event
+ * to be signalled.
+ */
+static enum connect_result wait_for_connection(
+	struct ipc_server_thread_data *server_thread_data,
+	OVERLAPPED *lpo)
+{
+	enum connect_result r;
+	HANDLE waitHandles[2];
+	DWORD dwWaitResult;
+
+	r = queue_overlapped_connect(server_thread_data, lpo);
+	if (r != CR_CONNECT_PENDING)
+		return r;
+
+	waitHandles[0] = server_thread_data->server_data->hEventStopRequested;
+	waitHandles[1] = lpo->hEvent;
+
+	dwWaitResult = WaitForMultipleObjects(2, waitHandles, FALSE, INFINITE);
+	switch (dwWaitResult) {
+	case WAIT_OBJECT_0 + 0:
+		return CR_SHUTDOWN;
+
+	case WAIT_OBJECT_0 + 1:
+		ResetEvent(lpo->hEvent);
+		return CR_CONNECTED;
+
+	default:
+		return CR_WAIT_ERROR;
+	}
+}
+
+/*
+ * Forward declare our reply callback function so that any compiler
+ * errors are reported when we actually define the function (in addition
+ * to any errors reported when we try to pass this callback function as
+ * a parameter in a function call).  The former are easier to understand.
+ */
+static ipc_server_reply_cb do_io_reply_callback;
+
+/*
+ * Relay application's response message to the client process.
+ * (We do not flush at this point because we allow the caller
+ * to chunk data to the client thru us.)
+ */
+static int do_io_reply_callback(struct ipc_server_reply_data *reply_data,
+		       const char *response, size_t response_len)
+{
+	if (reply_data->magic != MAGIC_SERVER_REPLY_DATA)
+		BUG("reply_cb called with wrong instance data");
+
+	return write_packetized_from_buf_no_flush(response, response_len,
+						  reply_data->fd);
+}
+
+/*
+ * Receive the request/command from the client and pass it to the
+ * registered request-callback.  The request-callback will compose
+ * a response and call our reply-callback to send it to the client.
+ *
+ * Simple-IPC only contains one round trip, so we flush and close
+ * here after the response.
+ */
+static int do_io(struct ipc_server_thread_data *server_thread_data)
+{
+	struct strbuf buf = STRBUF_INIT;
+	struct ipc_server_reply_data reply_data;
+	int ret = 0;
+
+	reply_data.magic = MAGIC_SERVER_REPLY_DATA;
+	reply_data.server_thread_data = server_thread_data;
+
+	reply_data.fd = dup_fd_from_pipe(server_thread_data->hPipe);
+	if (reply_data.fd < 0)
+		return error(_("could not create fd from pipe for '%s'"),
+			     server_thread_data->server_data->buf_path.buf);
+
+	ret = read_packetized_to_strbuf(
+		reply_data.fd, &buf,
+		PACKET_READ_GENTLE_ON_EOF | PACKET_READ_GENTLE_ON_READ_ERROR);
+	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);
+
+		packet_flush_gently(reply_data.fd);
+
+		FlushFileBuffers((HANDLE)_get_osfhandle((reply_data.fd)));
+	}
+	else {
+		/*
+		 * The client probably disconnected/shutdown before it
+		 * could send a well-formed message.  Ignore it.
+		 */
+	}
+
+	strbuf_release(&buf);
+	close(reply_data.fd);
+
+	return ret;
+}
+
+/*
+ * Handle IPC request and response with this connected client.  And reset
+ * the pipe to prepare for the next client.
+ */
+static int use_connection(struct ipc_server_thread_data *server_thread_data)
+{
+	int ret;
+
+	ret = do_io(server_thread_data);
+
+	FlushFileBuffers(server_thread_data->hPipe);
+	DisconnectNamedPipe(server_thread_data->hPipe);
+
+	return ret;
+}
+
+/*
+ * Thread proc for an IPC server worker thread.  It handles a series of
+ * connections from clients.  It cleans and reuses the hPipe between each
+ * client.
+ */
+static void *server_thread_proc(void *_server_thread_data)
+{
+	struct ipc_server_thread_data *server_thread_data = _server_thread_data;
+	HANDLE hEventConnected = INVALID_HANDLE_VALUE;
+	OVERLAPPED oConnect;
+	enum connect_result cr;
+	int ret;
+
+	assert(server_thread_data->hPipe != INVALID_HANDLE_VALUE);
+
+	trace2_thread_start("ipc-server");
+	trace2_data_string("ipc-server", NULL, "pipe",
+			   server_thread_data->server_data->buf_path.buf);
+
+	hEventConnected = CreateEventW(NULL, TRUE, FALSE, NULL);
+
+	memset(&oConnect, 0, sizeof(oConnect));
+	oConnect.hEvent = hEventConnected;
+
+	for (;;) {
+		cr = wait_for_connection(server_thread_data, &oConnect);
+
+		switch (cr) {
+		case CR_SHUTDOWN:
+			goto finished;
+
+		case CR_CONNECTED:
+			ret = use_connection(server_thread_data);
+			if (ret == SIMPLE_IPC_QUIT) {
+				ipc_server_stop_async(
+					server_thread_data->server_data);
+				goto finished;
+			}
+			if (ret > 0) {
+				/*
+				 * Ignore (transient) IO errors with this
+				 * client and reset for the next client.
+				 */
+			}
+			break;
+
+		case CR_CONNECT_PENDING:
+			/* By construction, this should not happen. */
+			BUG("ipc-server[%s]: unexpeced CR_CONNECT_PENDING",
+			    server_thread_data->server_data->buf_path.buf);
+
+		case CR_CONNECT_ERROR:
+		case CR_WAIT_ERROR:
+			/*
+			 * Ignore these theoretical errors.
+			 */
+			DisconnectNamedPipe(server_thread_data->hPipe);
+			break;
+
+		default:
+			BUG("unandled case after wait_for_connection");
+		}
+	}
+
+finished:
+	CloseHandle(server_thread_data->hPipe);
+	CloseHandle(hEventConnected);
+
+	trace2_thread_exit();
+	return NULL;
+}
+
+static HANDLE create_new_pipe(wchar_t *wpath, int is_first)
+{
+	HANDLE hPipe;
+	DWORD dwOpenMode, dwPipeMode;
+	LPSECURITY_ATTRIBUTES lpsa = NULL;
+
+	dwOpenMode = PIPE_ACCESS_INBOUND | PIPE_ACCESS_OUTBOUND |
+		FILE_FLAG_OVERLAPPED;
+
+	dwPipeMode = PIPE_TYPE_MESSAGE | PIPE_READMODE_BYTE | PIPE_WAIT |
+		PIPE_REJECT_REMOTE_CLIENTS;
+
+	if (is_first) {
+		dwOpenMode |= FILE_FLAG_FIRST_PIPE_INSTANCE;
+
+		/*
+		 * On Windows, the first server pipe instance gets to
+		 * 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.
+		 */
+	}
+
+	hPipe = CreateNamedPipeW(wpath, dwOpenMode, dwPipeMode,
+				 PIPE_UNLIMITED_INSTANCES, 1024, 1024, 0, lpsa);
+
+	return hPipe;
+}
+
+int ipc_server_run_async(struct ipc_server_data **returned_server_data,
+			 const char *path, const struct ipc_server_opts *opts,
+			 ipc_server_application_cb *application_cb,
+			 void *application_data)
+{
+	struct ipc_server_data *server_data;
+	wchar_t wpath[MAX_PATH];
+	HANDLE hPipeFirst = INVALID_HANDLE_VALUE;
+	int k;
+	int ret = 0;
+	int nr_threads = opts->nr_threads;
+
+	*returned_server_data = NULL;
+
+	ret = initialize_pipe_name(path, wpath, ARRAY_SIZE(wpath));
+	if (ret < 0) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	hPipeFirst = create_new_pipe(wpath, 1);
+	if (hPipeFirst == INVALID_HANDLE_VALUE) {
+		errno = EADDRINUSE;
+		return -2;
+	}
+
+	server_data = xcalloc(1, sizeof(*server_data));
+	server_data->magic = MAGIC_SERVER_DATA;
+	server_data->application_cb = application_cb;
+	server_data->application_data = application_data;
+	server_data->hEventStopRequested = CreateEvent(NULL, TRUE, FALSE, NULL);
+	strbuf_init(&server_data->buf_path, 0);
+	strbuf_addstr(&server_data->buf_path, path);
+	wcscpy(server_data->wpath, wpath);
+
+	if (nr_threads < 1)
+		nr_threads = 1;
+
+	for (k = 0; k < nr_threads; k++) {
+		struct ipc_server_thread_data *std;
+
+		std = xcalloc(1, sizeof(*std));
+		std->magic = MAGIC_SERVER_THREAD_DATA;
+		std->server_data = server_data;
+		std->hPipe = INVALID_HANDLE_VALUE;
+
+		std->hPipe = (k == 0)
+			? hPipeFirst
+			: create_new_pipe(server_data->wpath, 0);
+
+		if (std->hPipe == INVALID_HANDLE_VALUE) {
+			/*
+			 * If we've reached a pipe instance limit for
+			 * this path, just use fewer threads.
+			 */
+			free(std);
+			break;
+		}
+
+		if (pthread_create(&std->pthread_id, NULL,
+				   server_thread_proc, std)) {
+			/*
+			 * Likewise, if we're out of threads, just use
+			 * fewer threads than requested.
+			 *
+			 * However, we just give up if we can't even get
+			 * one thread.  This should not happen.
+			 */
+			if (k == 0)
+				die(_("could not start thread[0] for '%s'"),
+				    path);
+
+			CloseHandle(std->hPipe);
+			free(std);
+			break;
+		}
+
+		std->next_thread = server_data->thread_list;
+		server_data->thread_list = std;
+	}
+
+	*returned_server_data = server_data;
+	return 0;
+}
+
+int ipc_server_stop_async(struct ipc_server_data *server_data)
+{
+	if (!server_data)
+		return 0;
+
+	/*
+	 * Gently tell all of the ipc_server threads to shutdown.
+	 * This will be seen the next time they are idle (and waiting
+	 * for a connection).
+	 *
+	 * We DO NOT attempt to force them to drop an active connection.
+	 */
+	SetEvent(server_data->hEventStopRequested);
+	return 0;
+}
+
+int ipc_server_await(struct ipc_server_data *server_data)
+{
+	DWORD dwWaitResult;
+
+	if (!server_data)
+		return 0;
+
+	dwWaitResult = WaitForSingleObject(server_data->hEventStopRequested, INFINITE);
+	if (dwWaitResult != WAIT_OBJECT_0)
+		return error(_("wait for hEvent failed for '%s'"),
+			     server_data->buf_path.buf);
+
+	while (server_data->thread_list) {
+		struct ipc_server_thread_data *std = server_data->thread_list;
+
+		pthread_join(std->pthread_id, NULL);
+
+		server_data->thread_list = std->next_thread;
+		free(std);
+	}
+
+	server_data->is_stopped = 1;
+
+	return 0;
+}
+
+void ipc_server_free(struct ipc_server_data *server_data)
+{
+	if (!server_data)
+		return;
+
+	if (!server_data->is_stopped)
+		BUG("cannot free ipc-server while running for '%s'",
+		    server_data->buf_path.buf);
+
+	strbuf_release(&server_data->buf_path);
+
+	if (server_data->hEventStopRequested != INVALID_HANDLE_VALUE)
+		CloseHandle(server_data->hEventStopRequested);
+
+	while (server_data->thread_list) {
+		struct ipc_server_thread_data *std = server_data->thread_list;
+
+		server_data->thread_list = std->next_thread;
+		free(std);
+	}
+
+	free(server_data);
+}
diff --git a/config.c b/config.c
index f90b633..f33abea 100644
--- a/config.c
+++ b/config.c
@@ -1180,20 +1180,6 @@
 	}
 }
 
-NORETURN
-static void die_bad_bool(const char *name, const char *value)
-{
-	if (!strcmp(name, "GIT_TEST_GETTEXT_POISON"))
-		/*
-		 * We explicitly *don't* use _() here since it would
-		 * cause an infinite loop with _() needing to call
-		 * use_gettext_poison().
-		 */
-		die("bad boolean config value '%s' for '%s'", value, name);
-	else
-		die(_("bad boolean config value '%s' for '%s'"), value, name);
-}
-
 int git_config_int(const char *name, const char *value)
 {
 	int ret;
@@ -1268,7 +1254,7 @@
 {
 	int v = git_parse_maybe_bool(value);
 	if (v < 0)
-		die_bad_bool(name, value);
+		die(_("bad boolean config value '%s' for '%s'"), value, name);
 	return v;
 }
 
@@ -1844,12 +1830,27 @@
 	return git_config_from_blob_oid(fn, name, &oid, data);
 }
 
-const char *git_etc_gitconfig(void)
+char *git_system_config(void)
 {
-	static const char *system_wide;
-	if (!system_wide)
-		system_wide = system_path(ETC_GITCONFIG);
-	return system_wide;
+	char *system_config = xstrdup_or_null(getenv("GIT_CONFIG_SYSTEM"));
+	if (!system_config)
+		system_config = system_path(ETC_GITCONFIG);
+	normalize_path_copy(system_config, system_config);
+	return system_config;
+}
+
+void git_global_config(char **user_out, char **xdg_out)
+{
+	char *user_config = xstrdup_or_null(getenv("GIT_CONFIG_GLOBAL"));
+	char *xdg_config = NULL;
+
+	if (!user_config) {
+		user_config = expand_user_path("~/.gitconfig", 0);
+		xdg_config = xdg_config_home("config");
+	}
+
+	*user_out = user_config;
+	*xdg_out = xdg_config;
 }
 
 /*
@@ -1883,8 +1884,9 @@
 				  config_fn_t fn, void *data)
 {
 	int ret = 0;
-	char *xdg_config = xdg_config_home("config");
-	char *user_config = expand_user_path("~/.gitconfig", 0);
+	char *system_config = git_system_config();
+	char *xdg_config = NULL;
+	char *user_config = NULL;
 	char *repo_config;
 	enum config_scope prev_parsing_scope = current_parsing_scope;
 
@@ -1896,13 +1898,14 @@
 		repo_config = NULL;
 
 	current_parsing_scope = CONFIG_SCOPE_SYSTEM;
-	if (git_config_system() && !access_or_die(git_etc_gitconfig(), R_OK,
-						  opts->system_gently ?
-						  ACCESS_EACCES_OK : 0))
-		ret += git_config_from_file(fn, git_etc_gitconfig(),
-					    data);
+	if (git_config_system() && system_config &&
+	    !access_or_die(system_config, R_OK,
+			   opts->system_gently ? ACCESS_EACCES_OK : 0))
+		ret += git_config_from_file(fn, system_config, data);
 
 	current_parsing_scope = CONFIG_SCOPE_GLOBAL;
+	git_global_config(&user_config, &xdg_config);
+
 	if (xdg_config && !access_or_die(xdg_config, R_OK, ACCESS_EACCES_OK))
 		ret += git_config_from_file(fn, xdg_config, data);
 
@@ -1927,6 +1930,7 @@
 		die(_("unable to parse command-line config"));
 
 	current_parsing_scope = prev_parsing_scope;
+	free(system_config);
 	free(xdg_config);
 	free(user_config);
 	free(repo_config);
@@ -2069,7 +2073,7 @@
 		e = xmalloc(sizeof(*e));
 		hashmap_entry_init(&e->ent, strhash(key));
 		e->key = xstrdup(key);
-		string_list_init(&e->value_list, 1);
+		string_list_init_dup(&e->value_list);
 		hashmap_add(&cs->config_hash, &e->ent);
 	}
 	si = string_list_append_nodup(&e->value_list, xstrdup_or_null(value));
@@ -2269,7 +2273,7 @@
 	opts.git_dir = repo->gitdir;
 
 	if (!repo->config)
-		repo->config = xcalloc(1, sizeof(struct config_set));
+		CALLOC_ARRAY(repo->config, 1);
 	else
 		git_configset_clear(repo->config);
 
@@ -2834,7 +2838,7 @@
 	begin = store->parsed[i].begin;
 
 	/*
-	 * Next, make sure that we are removing he last key(s) in the section,
+	 * Next, make sure that we are removing the last key(s) in the section,
 	 * and that there are no comments that are possibly about the current
 	 * section.
 	 */
@@ -3048,7 +3052,8 @@
 		if (contents == MAP_FAILED) {
 			if (errno == ENODEV && S_ISDIR(st.st_mode))
 				errno = EISDIR;
-			error_errno(_("unable to mmap '%s'"), config_filename);
+			error_errno(_("unable to mmap '%s'%s"),
+					config_filename, mmap_os_err());
 			ret = CONFIG_INVALID_FILE;
 			contents = NULL;
 			goto out_free;
diff --git a/config.h b/config.h
index 19a9adb..a2200f3 100644
--- a/config.h
+++ b/config.h
@@ -318,7 +318,6 @@
 int git_config_rename_section_in_file(const char *, const char *, const char *);
 int git_config_copy_section(const char *, const char *);
 int git_config_copy_section_in_file(const char *, const char *, const char *);
-const char *git_etc_gitconfig(void);
 int git_env_bool(const char *, int);
 unsigned long git_env_ulong(const char *, unsigned long);
 int git_config_system(void);
@@ -327,6 +326,9 @@
 #define config_error_nonbool(s) (config_error_nonbool(s), const_error())
 #endif
 
+char *git_system_config(void);
+void git_global_config(char **user, char **xdg);
+
 int git_config_parse_parameter(const char *, config_fn_t fn, void *data);
 
 enum config_scope current_config_scope(void);
@@ -448,8 +450,8 @@
 /**
  * Parses the file and adds the variable-value pairs to the `config_set`,
  * dies if there is an error in parsing the file. Returns 0 on success, or
- * -1 if the file does not exist or is inaccessible. The user has to decide
- * if he wants to free the incomplete configset or continue using it when
+ * -1 if the file does not exist or is inaccessible. The caller decides
+ * whether to free the incomplete configset or continue using it when
  * the function returns -1.
  */
 int git_configset_add_file(struct config_set *cs, const char *filename);
diff --git a/config.mak.uname b/config.mak.uname
index e22d4b6..69413fb 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -124,6 +124,9 @@
 	ifeq ($(shell test "`expr "$(uname_R)" : '\([0-9][0-9]*\)\.'`" -ge 11 && echo 1),1)
 		HAVE_GETDELIM = YesPlease
 	endif
+	ifeq ($(shell test "`expr "$(uname_R)" : '\([0-9][0-9]*\)\.'`" -ge 20 && echo 1),1)
+		OPEN_RETURNS_EINTR = UnfortunatelyYes
+	endif
 	NO_MEMMEM = YesPlease
 	USE_ST_TIMESPEC = YesPlease
 	HAVE_DEV_TTY = YesPlease
@@ -421,6 +424,7 @@
 	RUNTIME_PREFIX = YesPlease
 	HAVE_WPGMPTR = YesWeDo
 	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	USE_WIN32_IPC = YesPlease
 	USE_WIN32_MMAP = YesPlease
 	MMAP_PREVENTS_DELETE = UnfortunatelyYes
 	# USE_NED_ALLOCATOR = YesPlease
@@ -433,6 +437,11 @@
 	NO_POSIX_GOODIES = UnfortunatelyYes
 	NATIVE_CRLF = YesPlease
 	DEFAULT_HELP_FORMAT = html
+ifeq (/mingw64,$(subst 32,64,$(prefix)))
+	# Move system config into top-level /etc/
+	ETC_GITCONFIG = ../etc/gitconfig
+	ETC_GITATTRIBUTES = ../etc/gitattributes
+endif
 
 	CC = compat/vcbuild/scripts/clink.pl
 	AR = compat/vcbuild/scripts/lib.pl
@@ -597,6 +606,7 @@
 	RUNTIME_PREFIX = YesPlease
 	HAVE_WPGMPTR = YesWeDo
 	NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
+	USE_WIN32_IPC = YesPlease
 	USE_WIN32_MMAP = YesPlease
 	MMAP_PREVENTS_DELETE = UnfortunatelyYes
 	USE_NED_ALLOCATOR = YesPlease
@@ -663,9 +673,14 @@
 		HAVE_LIBCHARSET_H = YesPlease
 		NO_GETTEXT =
 		USE_GETTEXT_SCHEME = fallthrough
-		USE_LIBPCRE= YesPlease
+		USE_LIBPCRE = YesPlease
 		NO_CURL =
 		USE_NED_ALLOCATOR = YesPlease
+		ifeq (/mingw64,$(subst 32,64,$(prefix)))
+			# Move system config into top-level /etc/
+			ETC_GITCONFIG = ../etc/gitconfig
+			ETC_GITATTRIBUTES = ../etc/gitattributes
+		endif
 	else
 		COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO
 		NO_CURL = YesPlease
diff --git a/connect.c b/connect.c
index 40b5c15..70b1338 100644
--- a/connect.c
+++ b/connect.c
@@ -254,7 +254,7 @@
 		return 0;
 	name++;
 
-	return oideq(&null_oid, &oid) && !strcmp(name, "capabilities^{}");
+	return oideq(null_oid(), &oid) && !strcmp(name, "capabilities^{}");
 }
 
 static void check_no_capabilities(const char *line, int len)
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index ac3dbc0..171b412 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -43,14 +43,27 @@
 to use another tool say `ninja` add this to the command line when configuring.
 `-G Ninja`
 
+NOTE: By default CMake will install vcpkg locally to your source tree on configuration,
+to avoid this, add `-DNO_VCPKG=TRUE` to the command line when configuring.
+
 ]]
 cmake_minimum_required(VERSION 3.14)
 
 #set the source directory to root of git
 set(CMAKE_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
-if(WIN32)
+
+option(USE_VCPKG "Whether or not to use vcpkg for obtaining dependencies.  Only applicable to Windows platforms" ON)
+if(NOT WIN32)
+	set(USE_VCPKG OFF CACHE BOOL FORCE)
+endif()
+
+if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)
+	set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
+endif()
+
+if(USE_VCPKG)
 	set(VCPKG_DIR "${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg")
-	if(MSVC AND NOT EXISTS ${VCPKG_DIR})
+	if(NOT EXISTS ${VCPKG_DIR})
 		message("Initializing vcpkg and building the Git's dependencies (this will take a while...)")
 		execute_process(COMMAND ${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg_install.bat)
 	endif()
@@ -58,6 +71,10 @@
 
 	# In the vcpkg edition, we need this to be able to link to libcurl
 	set(CURL_NO_CURL_CMAKE ON)
+
+	# Copy the necessary vcpkg DLLs (like iconv) to the install dir
+	set(X_VCPKG_APPLOCAL_DEPS_INSTALL ON)
+	set(CMAKE_TOOLCHAIN_FILE ${VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake CACHE STRING "Vcpkg toolchain file")
 endif()
 
 find_program(SH_EXE sh PATHS "C:/Program Files/Git/bin")
@@ -172,12 +189,18 @@
 	endif()
 endif()
 
-find_program(MSGFMT_EXE msgfmt)
-if(NOT MSGFMT_EXE)
-	set(MSGFMT_EXE ${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg/downloads/tools/msys2/msys64/usr/bin/msgfmt.exe)
-	if(NOT EXISTS ${MSGFMT_EXE})
-		message(WARNING "Text Translations won't be built")
-		unset(MSGFMT_EXE)
+if(NO_GETTEXT)
+	message(STATUS "msgfmt not used under NO_GETTEXT")
+else()
+	find_program(MSGFMT_EXE msgfmt)
+	if(NOT MSGFMT_EXE)
+		if(USE_VCPKG)
+			set(MSGFMT_EXE ${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg/downloads/tools/msys2/msys64/usr/bin/msgfmt.exe)
+		endif()
+		if(NOT EXISTS ${MSGFMT_EXE})
+			message(WARNING "Text Translations won't be built")
+			unset(MSGFMT_EXE)
+		endif()
 	endif()
 endif()
 
@@ -200,8 +223,6 @@
 
 
 add_compile_definitions(PAGER_ENV="LESS=FRX LV=-c"
-			ETC_GITATTRIBUTES="etc/gitattributes"
-			ETC_GITCONFIG="etc/gitconfig"
 			GIT_EXEC_PATH="libexec/git-core"
 			GIT_LOCALE_PATH="share/locale"
 			GIT_MAN_PATH="share/man"
@@ -216,10 +237,15 @@
 
 if(WIN32)
 	set(FALLBACK_RUNTIME_PREFIX /mingw64)
-	add_compile_definitions(FALLBACK_RUNTIME_PREFIX="${FALLBACK_RUNTIME_PREFIX}")
+	# Move system config into top-level /etc/
+	add_compile_definitions(FALLBACK_RUNTIME_PREFIX="${FALLBACK_RUNTIME_PREFIX}"
+		ETC_GITATTRIBUTES="../etc/gitattributes"
+		ETC_GITCONFIG="../etc/gitconfig")
 else()
 	set(FALLBACK_RUNTIME_PREFIX /home/$ENV{USER})
-	add_compile_definitions(FALLBACK_RUNTIME_PREFIX="${FALLBACK_RUNTIME_PREFIX}")
+	add_compile_definitions(FALLBACK_RUNTIME_PREFIX="${FALLBACK_RUNTIME_PREFIX}"
+		ETC_GITATTRIBUTES="etc/gitattributes"
+		ETC_GITCONFIG="etc/gitconfig")
 endif()
 
 
@@ -243,7 +269,20 @@
 
 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
 	add_compile_definitions(PROCFS_EXECUTABLE_PATH="/proc/self/exe" HAVE_DEV_TTY )
-	list(APPEND compat_SOURCES unix-socket.c)
+	list(APPEND compat_SOURCES unix-socket.c unix-stream-server.c)
+endif()
+
+if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+	list(APPEND compat_SOURCES compat/simple-ipc/ipc-shared.c compat/simple-ipc/ipc-win32.c)
+	add_compile_definitions(SUPPORTS_SIMPLE_IPC)
+	set(SUPPORTS_SIMPLE_IPC 1)
+else()
+	# Simple IPC requires both Unix sockets and pthreads on Unix-based systems.
+	if(NOT NO_UNIX_SOCKETS AND NOT NO_PTHREADS)
+		list(APPEND compat_SOURCES compat/simple-ipc/ipc-shared.c compat/simple-ipc/ipc-unix-socket.c)
+		add_compile_definitions(SUPPORTS_SIMPLE_IPC)
+		set(SUPPORTS_SIMPLE_IPC 1)
+	endif()
 endif()
 
 set(EXE_EXTENSION ${CMAKE_EXECUTABLE_SUFFIX})
@@ -685,13 +724,17 @@
 
 parse_makefile_for_executables(git_builtin_extra "BUILT_INS")
 
+option(SKIP_DASHED_BUILT_INS "Skip hardlinking the dashed versions of the built-ins")
+
 #Creating hardlinks
+if(NOT SKIP_DASHED_BUILT_INS)
 foreach(s ${git_SOURCES} ${git_builtin_extra})
 	string(REPLACE "${CMAKE_SOURCE_DIR}/builtin/" "" s ${s})
 	string(REPLACE ".c" "" s ${s})
 	file(APPEND ${CMAKE_BINARY_DIR}/CreateLinks.cmake "file(CREATE_LINK git${EXE_EXTENSION} git-${s}${EXE_EXTENSION})\n")
 	list(APPEND git_links ${CMAKE_BINARY_DIR}/git-${s}${EXE_EXTENSION})
 endforeach()
+endif()
 
 if(CURL_FOUND)
 	set(remote_exes
@@ -807,15 +850,19 @@
 list(TRANSFORM git_perl_scripts PREPEND "${CMAKE_BINARY_DIR}/")
 
 #install
-install(TARGETS git git-shell
+foreach(program ${PROGRAMS_BUILT})
+if(program STREQUAL "git" OR program STREQUAL "git-shell")
+install(TARGETS ${program}
 	RUNTIME DESTINATION bin)
+else()
+install(TARGETS ${program}
+	RUNTIME DESTINATION libexec/git-core)
+endif()
+endforeach()
+
 install(PROGRAMS ${CMAKE_BINARY_DIR}/git-cvsserver
 	DESTINATION bin)
 
-list(REMOVE_ITEM PROGRAMS_BUILT git git-shell)
-install(TARGETS ${PROGRAMS_BUILT}
-	RUNTIME DESTINATION libexec/git-core)
-
 set(bin_links
 	git-receive-pack git-upload-archive git-upload-pack)
 
@@ -828,12 +875,12 @@
 
 foreach(b ${git_links})
 	string(REPLACE "${CMAKE_BINARY_DIR}" "" b ${b})
-	install(CODE "file(CREATE_LINK ${CMAKE_INSTALL_PREFIX}/bin/git${EXE_EXTENSION} ${CMAKE_INSTALL_PREFIX}/libexec/git-core/${b}${EXE_EXTENSION})")
+	install(CODE "file(CREATE_LINK ${CMAKE_INSTALL_PREFIX}/bin/git${EXE_EXTENSION} ${CMAKE_INSTALL_PREFIX}/libexec/git-core/${b})")
 endforeach()
 
 foreach(b ${git_http_links})
 	string(REPLACE "${CMAKE_BINARY_DIR}" "" b ${b})
-	install(CODE "file(CREATE_LINK  ${CMAKE_INSTALL_PREFIX}/libexec/git-core/git-remote-http${EXE_EXTENSION} ${CMAKE_INSTALL_PREFIX}/libexec/git-core/${b}${EXE_EXTENSION})")
+	install(CODE "file(CREATE_LINK  ${CMAKE_INSTALL_PREFIX}/libexec/git-core/git-remote-http${EXE_EXTENSION} ${CMAKE_INSTALL_PREFIX}/libexec/git-core/${b})")
 endforeach()
 
 install(PROGRAMS ${git_shell_scripts} ${git_perl_scripts} ${CMAKE_BINARY_DIR}/git-p4
@@ -956,7 +1003,8 @@
 file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_GETTEXT='${NO_GETTEXT}'\n")
 file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "RUNTIME_PREFIX='${RUNTIME_PREFIX}'\n")
 file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PYTHON='${NO_PYTHON}'\n")
-if(WIN32)
+file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "SUPPORTS_SIMPLE_IPC='${SUPPORTS_SIMPLE_IPC}'\n")
+if(USE_VCPKG)
 	file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
 endif()
 
diff --git a/contrib/coccinelle/array.cocci b/contrib/coccinelle/array.cocci
index 46b8d2e..9a4f00c 100644
--- a/contrib/coccinelle/array.cocci
+++ b/contrib/coccinelle/array.cocci
@@ -88,3 +88,11 @@
 @@
 - ptr = xmalloc((n) * sizeof(T));
 + ALLOC_ARRAY(ptr, n);
+
+@@
+type T;
+T *ptr;
+expression n != 1;
+@@
+- ptr = xcalloc(n, \( sizeof(*ptr) \| sizeof(T) \) )
++ CALLOC_ARRAY(ptr, n)
diff --git a/contrib/coccinelle/xcalloc.cocci b/contrib/coccinelle/xcalloc.cocci
new file mode 100644
index 0000000..c291011
--- /dev/null
+++ b/contrib/coccinelle/xcalloc.cocci
@@ -0,0 +1,10 @@
+@@
+type T;
+T *ptr;
+expression n;
+@@
+  xcalloc(
++ n,
+  \( sizeof(T) \| sizeof(*ptr) \)
+- , n
+  )
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 7dc6cd8..4bdd27d 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -77,7 +77,7 @@
 		test -d "$__git_dir" &&
 		__git_repo_path="$__git_dir"
 	elif [ -n "${GIT_DIR-}" ]; then
-		test -d "${GIT_DIR-}" &&
+		test -d "$GIT_DIR" &&
 		__git_repo_path="$GIT_DIR"
 	elif [ -d .git ]; then
 		__git_repo_path=.git
@@ -427,7 +427,7 @@
 
 	if [ -z "$options" ]; then
 		local completion_helper
-		if [ "$GIT_COMPLETION_SHOW_ALL" = "1" ]; then
+		if [ "${GIT_COMPLETION_SHOW_ALL-}" = "1" ]; then
 			completion_helper="--git-completion-helper-all"
 		else
 			completion_helper="--git-completion-helper"
@@ -744,7 +744,7 @@
 			track=""
 			;;
 		*)
-			for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD; do
+			for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD; do
 				case "$i" in
 				$match*)
 					if [ -e "$dir/$i" ]; then
@@ -1006,8 +1006,8 @@
 
 __git_complete_remote_or_refspec ()
 {
-	local cur_="$cur" cmd="${words[1]}"
-	local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
+	local cur_="$cur" cmd="${words[__git_cmd_idx]}"
+	local i c=$((__git_cmd_idx+1)) remote="" pfx="" lhs=1 no_complete_refspec=0
 	if [ "$cmd" = "remote" ]; then
 		((c++))
 	fi
@@ -1129,7 +1129,7 @@
 # __git_aliased_command requires 1 argument
 __git_aliased_command ()
 {
-	local cur=$1 last list word cmdline
+	local cur=$1 last list= word cmdline
 
 	while [[ -n "$cur" ]]; do
 		if [[ "$list" == *" $cur "* ]]; then
@@ -1176,7 +1176,7 @@
 # --show-idx: Optionally show the index of the found word in the $words array.
 __git_find_on_cmdline ()
 {
-	local word c=1 show_idx
+	local word c="$__git_cmd_idx" show_idx
 
 	while test $# -gt 1; do
 		case "$1" in
@@ -1221,7 +1221,7 @@
 	done
 	local wordlist="$1"
 
-	while [ $c -gt 1 ]; do
+	while [ $c -gt "$__git_cmd_idx" ]; do
 		((c--))
 		for word in $wordlist; do
 			if [ "$word" = "${words[c]}" ]; then
@@ -1306,7 +1306,7 @@
 	local word i c=0
 
 	# Skip "git" (first argument)
-	for ((i=1; i < ${#words[@]}; i++)); do
+	for ((i=$__git_cmd_idx; i < ${#words[@]}; i++)); do
 		word="${words[i]}"
 
 		case "$word" in
@@ -1333,6 +1333,7 @@
 __git_patchformat="mbox stgit stgit-series hg mboxrd"
 __git_showcurrentpatch="diff raw"
 __git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch"
+__git_quoted_cr="nowarn warn strip"
 
 _git_am ()
 {
@@ -1354,6 +1355,10 @@
 		__gitcomp "$__git_showcurrentpatch" "" "${cur##--show-current-patch=}"
 		return
 		;;
+	--quoted-cr=*)
+		__gitcomp "$__git_quoted_cr" "" "${cur##--quoted-cr=}"
+		return
+		;;
 	--*)
 		__gitcomp_builtin am "" \
 			"$__git_am_inprogress_options"
@@ -1442,7 +1447,7 @@
 
 _git_branch ()
 {
-	local i c=1 only_local_ref="n" has_r="n"
+	local i c="$__git_cmd_idx" only_local_ref="n" has_r="n"
 
 	while [ $c -lt $cword ]; do
 		i="${words[c]}"
@@ -1474,12 +1479,12 @@
 
 _git_bundle ()
 {
-	local cmd="${words[2]}"
+	local cmd="${words[__git_cmd_idx+1]}"
 	case "$cword" in
-	2)
+	$((__git_cmd_idx+1)))
 		__gitcomp "create list-heads verify unbundle"
 		;;
-	3)
+	$((__git_cmd_idx+2)))
 		# looking for a file
 		;;
 	*)
@@ -1724,6 +1729,7 @@
 			--indent-heuristic --no-indent-heuristic
 			--textconv --no-textconv
 			--patch --no-patch
+			--anchored=
 "
 
 __git_diff_difftool_options="--cached --staged --pickaxe-all --pickaxe-regex
@@ -1894,7 +1900,7 @@
 	esac
 
 	case "$cword,$prev" in
-	2,*|*,-*)
+	$((__git_cmd_idx+1)),*|*,-*)
 		__git_complete_symbol && return
 		;;
 	esac
@@ -1910,7 +1916,7 @@
 		return
 		;;
 	esac
-	if test -n "$GIT_TESTING_ALL_COMMAND_LIST"
+	if test -n "${GIT_TESTING_ALL_COMMAND_LIST-}"
 	then
 		__gitcomp "$GIT_TESTING_ALL_COMMAND_LIST $(__git --list-cmds=alias,list-guide) gitk"
 	else
@@ -2474,7 +2480,7 @@
 __git_config_get_set_variables ()
 {
 	local prevword word config_file= c=$cword
-	while [ $c -gt 1 ]; do
+	while [ $c -gt "$__git_cmd_idx" ]; do
 		word="${words[c]}"
 		case "$word" in
 		--system|--global|--local|--file=*)
@@ -3013,66 +3019,48 @@
 
 _git_stash ()
 {
-	local save_opts='--all --keep-index --no-keep-index --quiet --patch --include-untracked'
 	local subcommands='push list show apply clear drop pop create branch'
 	local subcommand="$(__git_find_on_cmdline "$subcommands save")"
-	if [ -z "$subcommand" -a -n "$(__git_find_on_cmdline "-p")" ]; then
-		subcommand="push"
-	fi
+
 	if [ -z "$subcommand" ]; then
-		case "$cur" in
-		--*)
-			__gitcomp "$save_opts"
+		case "$((cword - __git_cmd_idx)),$cur" in
+		*,--*)
+			__gitcomp_builtin stash_push
 			;;
-		sa*)
-			if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
-				__gitcomp "save"
-			fi
+		1,sa*)
+			__gitcomp "save"
 			;;
-		*)
-			if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
-				__gitcomp "$subcommands"
-			fi
+		1,*)
+			__gitcomp "$subcommands"
 			;;
 		esac
-	else
-		case "$subcommand,$cur" in
-		push,--*)
-			__gitcomp "$save_opts --message"
-			;;
-		save,--*)
-			__gitcomp "$save_opts"
-			;;
-		apply,--*|pop,--*)
-			__gitcomp "--index --quiet"
-			;;
-		drop,--*)
-			__gitcomp "--quiet"
-			;;
-		list,--*)
-			__gitcomp "--name-status --oneline --patch-with-stat"
-			;;
-		show,--*)
-			__gitcomp "$__git_diff_common_options"
-			;;
-		branch,--*)
-			;;
-		branch,*)
-			if [ $cword -eq 3 ]; then
-				__git_complete_refs
-			else
-				__gitcomp_nl "$(__git stash list \
-						| sed -n -e 's/:.*//p')"
-			fi
-			;;
-		show,*|apply,*|drop,*|pop,*)
+		return
+	fi
+
+	case "$subcommand,$cur" in
+	list,--*)
+		# NEEDSWORK: can we somehow unify this with the options in _git_log() and _git_show()
+		__gitcomp_builtin stash_list "$__git_log_common_options $__git_diff_common_options"
+		;;
+	show,--*)
+		__gitcomp_builtin stash_show "$__git_diff_common_options"
+		;;
+	*,--*)
+		__gitcomp_builtin "stash_$subcommand"
+		;;
+	branch,*)
+		if [ $cword -eq $((__git_cmd_idx+2)) ]; then
+			__git_complete_refs
+		else
 			__gitcomp_nl "$(__git stash list \
 					| sed -n -e 's/:.*//p')"
-			;;
-		*)
-			;;
-		esac
-	fi
+		fi
+		;;
+	show,*|apply,*|drop,*|pop,*)
+		__gitcomp_nl "$(__git stash list \
+				| sed -n -e 's/:.*//p')"
+		;;
+	esac
 }
 
 _git_submodule ()
@@ -3225,7 +3213,7 @@
 
 _git_tag ()
 {
-	local i c=1 f=0
+	local i c="$__git_cmd_idx" f=0
 	while [ $c -lt $cword ]; do
 		i="${words[c]}"
 		case "$i" in
@@ -3268,9 +3256,10 @@
 __git_complete_worktree_paths ()
 {
 	local IFS=$'\n'
+	# Generate completion reply from worktree list skipping the first
+	# entry: it's the path of the main worktree, which can't be moved,
+	# removed, locked, etc.
 	__gitcomp_nl "$(git worktree list --porcelain |
-		# Skip the first entry: it's the path of the main worktree,
-		# which can't be moved, removed, locked, etc.
 		sed -n -e '2,$ s/^worktree //p')"
 }
 
@@ -3398,21 +3387,40 @@
 {
 	local i c=1 command __git_dir __git_repo_path
 	local __git_C_args C_args_count=0
+	local __git_cmd_idx
 
 	while [ $c -lt $cword ]; do
 		i="${words[c]}"
 		case "$i" in
-		--git-dir=*) __git_dir="${i#--git-dir=}" ;;
-		--git-dir)   ((c++)) ; __git_dir="${words[c]}" ;;
-		--bare)      __git_dir="." ;;
-		--help) command="help"; break ;;
-		-c|--work-tree|--namespace) ((c++)) ;;
-		-C)	__git_C_args[C_args_count++]=-C
+		--git-dir=*)
+			__git_dir="${i#--git-dir=}"
+			;;
+		--git-dir)
+			((c++))
+			__git_dir="${words[c]}"
+			;;
+		--bare)
+			__git_dir="."
+			;;
+		--help)
+			command="help"
+			break
+			;;
+		-c|--work-tree|--namespace)
+			((c++))
+			;;
+		-C)
+			__git_C_args[C_args_count++]=-C
 			((c++))
 			__git_C_args[C_args_count++]="${words[c]}"
 			;;
-		-*) ;;
-		*) command="$i"; break ;;
+		-*)
+			;;
+		*)
+			command="$i"
+			__git_cmd_idx="$c"
+			break
+			;;
 		esac
 		((c++))
 	done
@@ -3434,7 +3442,8 @@
 			;;
 		esac
 		case "$cur" in
-		--*)   __gitcomp "
+		--*)
+			__gitcomp "
 			--paginate
 			--no-pager
 			--git-dir=
@@ -3504,6 +3513,7 @@
 __git_func_wrap ()
 {
 	local cur words cword prev
+	local __git_cmd_idx=0
 	_get_comp_words_by_ref -n =: cur words cword prev
 	$1
 }
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index 6c56296..cac6f61 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -251,7 +251,7 @@
 		done
 		;;
 	(arg)
-		local command="${words[1]}" __git_dir
+		local command="${words[1]}" __git_dir __git_cmd_idx=1
 
 		if (( $+opt_args[--bare] )); then
 			__git_dir='.'
diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 4640a15..db7c006 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -433,8 +433,8 @@
 	fi
 
 	local sparse=""
-	if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
-	   [ -z "${GIT_PS1_OMITSPARSESTATE}" ] &&
+	if [ -z "${GIT_PS1_COMPRESSSPARSESTATE-}" ] &&
+	   [ -z "${GIT_PS1_OMITSPARSESTATE-}" ] &&
 	   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
 		sparse="|SPARSE"
 	fi
@@ -543,7 +543,7 @@
 			u="%${ZSH_VERSION+%}"
 		fi
 
-		if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
+		if [ -n "${GIT_PS1_COMPRESSSPARSESTATE-}" ] &&
 		   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
 			h="?"
 		fi
diff --git a/contrib/credential/osxkeychain/git-credential-osxkeychain.c b/contrib/credential/osxkeychain/git-credential-osxkeychain.c
index bcd3f57..0b44a9b 100644
--- a/contrib/credential/osxkeychain/git-credential-osxkeychain.c
+++ b/contrib/credential/osxkeychain/git-credential-osxkeychain.c
@@ -10,6 +10,7 @@
 static char *password;
 static UInt16 port;
 
+__attribute__((format (printf, 1, 2)))
 static void die(const char *err, ...)
 {
 	char msg[4096];
diff --git a/contrib/credential/wincred/git-credential-wincred.c b/contrib/credential/wincred/git-credential-wincred.c
index 5bdad41..5091048 100644
--- a/contrib/credential/wincred/git-credential-wincred.c
+++ b/contrib/credential/wincred/git-credential-wincred.c
@@ -11,6 +11,7 @@
 
 #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
 
+__attribute__((format (printf, 1, 2)))
 static void die(const char *err, ...)
 {
 	char msg[4096];
diff --git a/contrib/hooks/multimail/CHANGES b/contrib/hooks/multimail/CHANGES
deleted file mode 100644
index 35791fd..0000000
--- a/contrib/hooks/multimail/CHANGES
+++ /dev/null
@@ -1,285 +0,0 @@
-Release 1.5.0
-=============
-
-Backward-incompatible change
-----------------------------
-
-The name of classes for environment was misnamed as `*Environement`.
-It is now `*Environment`.
-
-New features
-------------
-
-* A Thread-Index header is now added to each email sent (except for
-  combined emails where it would not make sense), so that MS Outlook
-  properly groups messages by threads even though they have a
-  different subject line. Unfortunately, even adding this header the
-  threading still seems to be unreliable, but it is unclear whether
-  this is an issue on our side or on MS Outlook's side (see discussion
-  here: https://github.com/git-multimail/git-multimail/pull/194).
-
-* A new variable multimailhook.ExcludeMergeRevisions was added to send
-  notification emails only for non-merge commits.
-
-* For gitolite environment, it is now possible to specify the mail map
-  in a separate file in addition to gitolite.conf, using the variable
-  multimailhook.MailaddressMap.
-
-Internal changes
-----------------
-
-* The testsuite now uses GIT_PRINT_SHA1_ELLIPSIS where needed for
-  compatibility with recent Git versions. Only tests are affected.
-
-* We don't try to install pyflakes in the continuous integration job
-  for old Python versions where it's no longer available.
-
-* Stop using the deprecated cgi.escape in Python 3.
-
-* New flake8 warnings have been fixed.
-
-* Python 3.6 is now tested against on Travis-CI.
-
-* A bunch of lgtm.com warnings have been fixed.
-
-Bug fixes
----------
-
-* SMTPMailer logs in only once now. It used to re-login for each email
-  sent which triggered errors for some SMTP servers.
-
-* migrate-mailhook-config was broken by internal refactoring, it
-  should now work again.
-
-This version was tested with Python 2.6 to 3.7. It was tested with Git
-1.7.10.406.gdc801, 2.15.1 and 2.20.1.98.gecbdaf0.
-
-Release 1.4.0
-=============
-
-New features to troubleshoot a git-multimail installation
----------------------------------------------------------
-
-* One can now perform a basic check of git-multimail's setup by
-  running the hook with the environment variable
-  GIT_MULTIMAIL_CHECK_SETUP set to a non-empty string. See
-  doc/troubleshooting.rst for details.
-
-* A new log files system was added. See the multimailhook.logFile,
-  multimailhook.errorLogFile and multimailhook.debugLogFile variables.
-
-* git_multimail.py can now be made more verbose using
-  multimailhook.verbose.
-
-* A new option --check-ref-filter is now available to help debugging
-  the refFilter* options.
-
-Formatting emails
------------------
-
-* Formatting of emails was made slightly more compact, to reduce the
-  odds of having long subject lines truncated or wrapped in short list
-  of commits.
-
-* multimailhook.emailPrefix may now use the '%(repo_shortname)s'
-  placeholder for the repository's short name.
-
-* A new option multimailhook.subjectMaxLength is available to truncate
-  overly long subject lines.
-
-Bug fixes and minor changes
----------------------------
-
-* Options refFilterDoSendRegex and refFilterDontSendRegex were
-  essentially broken. They should work now.
-
-* The behavior when both refFilter{Do,Dont}SendRegex and
-  refFilter{Exclusion,Inclusion}Regex are set have been slightly
-  changed. Exclusion/Inclusion is now strictly stronger than
-  DoSend/DontSend.
-
-* The management of precedence when a setting can be computed in
-  multiple ways has been considerably refactored and modified.
-  multimailhook.from and multimailhook.reponame now have precedence
-  over the environment-specific settings ($GL_REPO/$GL_USER for
-  gitolite, --stash-user/repo for Stash, --submitter/--project for
-  Gerrit).
-
-* The coverage of the testsuite has been considerably improved. All
-  configuration variables now appear at least once in the testsuite.
-
-This version was tested with Python 2.6 to 3.5. It also mostly works
-with Python 2.4, but there is one known breakage in the testsuite
-related to non-ascii characters. It was tested with Git
-1.7.10.406.gdc801, 1.8.5.6, 2.1.4, and 2.10.0.rc0.1.g07c9292.
-
-Release 1.3.1 (bugfix-only release)
-===================================
-
-* Generate links to commits in combined emails (it was done only for
-  commit emails in 1.3.0).
-
-* Fix broken links on PyPi.
-
-Release 1.3.0
-=============
-
-* New options multimailhook.htmlInIntro and multimailhook.htmlInFooter
-  now allow using HTML in the introduction and footer of emails (e.g.
-  for a more pleasant formatting or to insert a link to the commit on
-  a web interface).
-
-* A new option multimailhook.commitBrowseURL gives a simpler (and less
-  flexible) way to add a link to a web interface for commit emails
-  than multimailhook.htmlInIntro and multimailhook.htmlInFooter.
-
-* A new public function config.add_config_parameters was added to
-  allow custom hooks to set specific Git configuration variables
-  without modifying the configuration files. See an example in
-  post-receive.example.
-
-* Error handling for SMTP has been improved (we used to print Python
-  backtraces for legitimate errors).
-
-* The SMTP mailer can now check TLS certificates when the newly added
-  configuration variable multimailhook.smtpCACerts.
-
-* Python 3 portability has been improved.
-
-* The documentation's formatting has been improved.
-
-* The testsuite has been improved (we now use pyflakes to check for
-  errors in the code).
-
-This version has been tested with Python 2.4 and 2.6 to 3.5, and Git
-v1.7.10-406-gdc801e7, 2.1.4 and 2.8.1.339.g3ad15fd.
-
-No change since 1.3 RC1.
-
-Release 1.2.0
-=============
-
-* It is now possible to exclude some refs (e.g. exclude some branches
-  or tags). See refFilterDoSendRegex, refFilterDontSendRegex,
-  refFilterInclusionRegex and refFilterExclusionRegex.
-
-* New commitEmailFormat option which can be set to "html" to generate
-  simple colorized diffs using HTML for the commit emails.
-
-* git-multimail can now be ran as a Gerrit ref-updated hook, or from
-  Atlassian BitBucket Server (formerly known as Atlassian Stash).
-
-* The From: field is now more customizeable. It can be set
-  independently for refchange emails and commit emails (see
-  fromCommit, fromRefChange). The special values pusher and author can
-  be used in these configuration variable.
-
-* A new command-line option, --version, was added. The version is also
-  available in the X-Git-Multimail-Version header of sent emails.
-
-* Set X-Git-NotificationType header to differentiate the various types
-  of notifications. Current values are: diff, ref_changed_plus_diff,
-  ref_changed.
-
-* Preliminary support for Python 3. The testsuite passes with Python 3,
-  but it has not received as much testing as the Python 2 version yet.
-
-* Several encoding-related fixes. UTF-8 characters work in more
-  situations (but non-ascii characters in email address are still not
-  supported).
-
-* The testsuite and its documentation has been greatly improved.
-
-Plus all the bugfixes from version 1.1.1.
-
-This version has been tested with Python 2.4 and 2.6 to 3.5, and Git
-v1.7.10-406-gdc801e7, git-1.8.2.3 and 2.6.0. Git versions prior to
-v1.7.10-406-gdc801e7 probably work, but cannot run the testsuite
-properly.
-
-Release 1.1.1 (bugfix-only release)
-===================================
-
-* The SMTP mailer was not working with Python 2.4.
-
-Release 1.1.0
-=============
-
-* When a single commit is pushed, omit the reference changed email.
-  Set multimailhook.combineWhenSingleCommit to false to disable this
-  new feature.
-
-* In gitolite environments, the pusher's email address can be used as
-  the From address by creating a specially formatted comment block in
-  gitolite.conf (see multimailhook.from in README).
-
-* Support for SMTP authentication and SSL/TLS encryption was added,
-  see smtpUser, smtpPass, smtpEncryption in README.
-
-* A new option scanCommitForCc was added to allow git-multimail to
-  search the commit message for 'Cc: ...' lines, and add the
-  corresponding emails in Cc.
-
-* If $USER is not set, use the variable $USERNAME. This is needed on
-  Windows platform to recognize the pusher.
-
-* The emailPrefix variable can now be set to an empty string to remove
-  the prefix.
-
-* A short tutorial was added in doc/gitolite.rst to set up
-  git-multimail with gitolite.
-
-* The post-receive file was renamed to post-receive.example. It has
-  always been an example (the standard way to call git-multimail is to
-  call git_multimail.py), but it was unclear to many users.
-
-* A new refchangeShowGraph option was added to make it possible to
-  include both a graph and a log in the summary emails.  The options
-  to control the graph formatting can be set via the new graphOpts
-  option.
-
-* New option --force-send was added to disable new commit detection
-  for update hook. One use-case is to run git_multimail.py after
-  running "git fetch" to send emails about commits that have just been
-  fetched (the detection of new commits was unreliable in this mode).
-
-* The testing infrastructure was considerably improved (continuous
-  integration with travis-ci, automatic check of PEP8 and RST syntax,
-  many improvements to the test scripts).
-
-This version has been tested with Python 2.4 to 2.7, and Git 1.7.1 to
-2.4.
-
-Release 1.0.0
-=============
-
-* Fix encoding of non-ASCII email addresses in email headers.
-
-* Fix backwards-compatibility bugs for older Python 2.x versions.
-
-* Fix a backwards-compatibility bug for Git 1.7.1.
-
-* Add an option commitDiffOpts to customize logs for revisions.
-
-* Pass "-oi" to sendmail by default to prevent premature termination
-  on a line containing only ".".
-
-* Stagger email "Date:" values in an attempt to help mail clients
-  thread the emails in the right order.
-
-* If a mailing list setting is missing, just skip sending the
-  corresponding email (with a warning) instead of failing.
-
-* Add a X-Git-Host header that can be used for email filtering.
-
-* Allow the sender's fully-qualified domain name to be configured.
-
-* Minor documentation improvements.
-
-* Add this CHANGES file.
-
-
-Release 0.9.0
-=============
-
-* Initial release.
diff --git a/contrib/hooks/multimail/CONTRIBUTING.rst b/contrib/hooks/multimail/CONTRIBUTING.rst
deleted file mode 100644
index de20a54..0000000
--- a/contrib/hooks/multimail/CONTRIBUTING.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-Contributing
-============
-
-git-multimail is an open-source project, built by volunteers. We would
-welcome your help!
-
-The current maintainers are `Matthieu Moy <http://matthieu-moy.fr>`__ and
-`Michael Haggerty <https://github.com/mhagger>`__.
-
-Please note that although a copy of git-multimail is distributed in
-the "contrib" section of the main Git project, development takes place
-in a separate `git-multimail repository on GitHub`_.
-
-Whenever enough changes to git-multimail have accumulated, a new
-code-drop of git-multimail will be submitted for inclusion in the Git
-project.
-
-We use the GitHub issue tracker to keep track of bugs and feature
-requests, and we use GitHub pull requests to exchange patches (though,
-if you prefer, you can send patches via the Git mailing list with CC
-to the maintainers). Please sign off your patches as per the `Git
-project practice
-<https://github.com/git/git/blob/master/Documentation/SubmittingPatches#L234>`__.
-
-Please vote for issues you would like to be addressed in priority
-(click "add your reaction" and then the "+1" thumbs-up button on the
-GitHub issue).
-
-General discussion of git-multimail can take place on the main `Git
-mailing list`_.
-
-Please CC emails regarding git-multimail to the maintainers so that we
-don't overlook them.
-
-Help needed: testers/maintainer for specific environments/OS
-------------------------------------------------------------
-
-The current maintainer uses and tests git-multimail on Linux with the
-Generic environment. More testers, or better contributors are needed
-to test git-multimail on other real-life setups:
-
-* Mac OS X, Windows: git-multimail is currently not supported on these
-  platforms. But since we have no external dependencies and try to
-  write code as portable as possible, it is possible that
-  git-multimail already runs there and if not, it is likely that it
-  could be ported easily.
-
-  Patches to improve support for Windows and OS X are welcome.
-  Ideally, there would be a sub-maintainer for each OS who would test
-  at least once before each release (around twice a year).
-
-* Gerrit, Stash, Gitolite environments: although the testsuite
-  contains tests for these environments, a tester/maintainer for each
-  environment would be welcome to test and report failure (or success)
-  on real-life environments periodically (here also, feedback before
-  each release would be highly appreciated).
-
-
-.. _`git-multimail repository on GitHub`: https://github.com/git-multimail/git-multimail
-.. _`Git mailing list`: git@vger.kernel.org
diff --git a/contrib/hooks/multimail/README.Git b/contrib/hooks/multimail/README.Git
index 0444442..c427efc 100644
--- a/contrib/hooks/multimail/README.Git
+++ b/contrib/hooks/multimail/README.Git
@@ -1,15 +1,7 @@
-This copy of git-multimail is distributed as part of the "contrib"
-section of the Git project as a convenience to Git users.
 git-multimail is developed as an independent project at the following
 website:
 
     https://github.com/git-multimail/git-multimail
 
-The version in this directory was obtained from the upstream project
-on January 07 2019 and consists of the "git-multimail" subdirectory from
-revision
-
-    04e80e6c40be465cc62b6c246f0fcb8fd2cfd454 refs/tags/1.5.0
-
-Please see the README file in this directory for information about how
-to report bugs or contribute to git-multimail.
+Please refer to that project page for information about how to report
+bugs or contribute to git-multimail.
diff --git a/contrib/hooks/multimail/README.migrate-from-post-receive-email b/contrib/hooks/multimail/README.migrate-from-post-receive-email
deleted file mode 100644
index 1e6a976..0000000
--- a/contrib/hooks/multimail/README.migrate-from-post-receive-email
+++ /dev/null
@@ -1,145 +0,0 @@
-git-multimail is close to, but not exactly, a plug-in replacement for
-the old Git project script contrib/hooks/post-receive-email.  This
-document describes the differences and explains how to configure
-git-multimail to get behavior closest to that of post-receive-email.
-
-If you are in a hurry
-=====================
-
-A script called migrate-mailhook-config is included with
-git-multimail.  If you run this script within a Git repository that is
-configured to use post-receive-email, it will convert the
-configuration settings into the approximate equivalent settings for
-git-multimail.  For more information, run
-
-    migrate-mailhook-config --help
-
-
-Configuration differences
-=========================
-
-* The names of the config options for git-multimail are in namespace
-  "multimailhook.*" instead of "hooks.*".  (Editorial comment:
-  post-receive-email should never have used such a generic top-level
-  namespace.)
-
-* In emails about new annotated tags, post-receive-email includes a
-  shortlog of all changes since the previous annotated tag.  To get
-  this behavior with git-multimail, you need to set
-  multimailhook.announceshortlog to true:
-
-      git config multimailhook.announceshortlog true
-
-* multimailhook.commitlist -- This is a new configuration variable.
-  Recipients listed here will receive a separate email for each new
-  commit.  However, if this variable is *not* set, it defaults to the
-  value of multimailhook.mailinglist.  Therefore, if you *don't* want
-  the members of multimailhook.mailinglist to receive one email per
-  commit, then set this value to the empty string:
-
-      git config multimailhook.commitlist ''
-
-* multimailhook.emailprefix -- If this value is not set, then the
-  subjects of generated emails are prefixed with the short name of the
-  repository enclosed in square brackets; e.g., "[myrepo]".
-  post-receive-email defaults to prefix "[SCM]" if this option is not
-  set.  So if you were using the old default and want to retain it
-  (for example, to avoid having to change your email filters), set
-  this variable explicitly to the old value:
-
-      git config multimailhook.emailprefix "[SCM]"
-
-* The "multimailhook.showrev" configuration option is not supported.
-  Its main use is obsoleted by the one-email-per-commit feature of
-  git-multimail.
-
-
-Other differences
-=================
-
-This section describes other differences in the behavior of
-git-multimail vs. post-receive-email.  For full details, please refer
-to the main README file:
-
-* One email per commit.  For each reference change, the script first
-  outputs one email summarizing the reference change (including
-  one-line summaries of the new commits), then it outputs a separate
-  email for each new commit that was introduced, including patches.
-  These one-email-per-commit emails go to the addresses listed in
-  multimailhook.commitlist.  post-receive-email sends only one email
-  for each *reference* that is changed, no matter how many commits
-  were added to the reference.
-
-* Better algorithm for detecting new commits.  post-receive-email
-  processes one reference change at a time, which causes it to fail to
-  describe new commits that were included in multiple branches.  For
-  example, if a single push adds the "*" commits in the diagram below,
-  then post-receive-email would never include the details of the two
-  commits that are common to "master" and "branch" in its
-  notifications.
-
-      o---o---o---*---*---*    <-- master
-                       \
-                        *---*  <-- branch
-
-  git-multimail analyzes all reference modifications to determine
-  which commits were not present before the change, therefore avoiding
-  that error.
-
-* In reference change emails, git-multimail tells which commits have
-  been added to the reference vs. are entirely new to the repository,
-  and which commits that have been omitted from the reference
-  vs. entirely discarded from the repository.
-
-* The environment in which Git is running can be configured via an
-  "Environment" abstraction.
-
-* Built-in support for Gitolite-managed repositories.
-
-* Instead of using full SHA1 object names in emails, git-multimail
-  mostly uses abbreviated SHA1s, plus one-line log message summaries
-  where appropriate.
-
-* In the schematic diagrams that explain non-fast-forward commits,
-  git-multimail shows the names of the branches involved.
-
-* The emails generated by git-multimail include the name of the Git
-  repository that was modified; this is convenient for recipients who
-  are monitoring multiple repositories.
-
-* git-multimail allows the email "From" addresses to be configured.
-
-* The recipients lists (multimailhook.mailinglist,
-  multimailhook.refchangelist, multimailhook.announcelist, and
-  multimailhook.commitlist) can be comma-separated values and/or
-  multivalued settings in the config file; e.g.,
-
-      [multimailhook]
-              mailinglist = mr.brown@example.com, mr.black@example.com
-              announcelist = Him <him@example.com>
-              announcelist = Jim <jim@example.com>
-              announcelist = pop@example.com
-
-  This might make it easier to maintain short recipients lists without
-  requiring full-fledged mailing list software.
-
-* By default, git-multimail sets email "Reply-To" headers to reply to
-  the pusher (for reference updates) and to the author (for commit
-  notifications).  By default, the pusher's email address is
-  constructed by appending "multimailhook.emaildomain" to the pusher's
-  username.
-
-* The generated emails contain a configurable footer.  By default, it
-  lists the name of the administrator who should be contacted to
-  unsubscribe from notification emails.
-
-* New option multimailhook.emailmaxlinelength to limit the length of
-  lines in the main part of the email body.  The default limit is 500
-  characters.
-
-* New option multimailhook.emailstrictutf8 to ensure that the main
-  part of the email body is valid UTF-8.  Invalid characters are
-  turned into the Unicode replacement character, U+FFFD.  By default
-  this option is turned on.
-
-* Written in Python.  Easier to add new features.
diff --git a/contrib/hooks/multimail/README.rst b/contrib/hooks/multimail/README.rst
deleted file mode 100644
index 7c0fc4a..0000000
--- a/contrib/hooks/multimail/README.rst
+++ /dev/null
@@ -1,774 +0,0 @@
-git-multimail version 1.5.0
-===========================
-
-.. image:: https://travis-ci.org/git-multimail/git-multimail.svg?branch=master
-    :target: https://travis-ci.org/git-multimail/git-multimail
-
-git-multimail is a tool for sending notification emails on pushes to a
-Git repository.  It includes a Python module called ``git_multimail.py``,
-which can either be used as a hook script directly or can be imported
-as a Python module into another script.
-
-git-multimail is derived from the Git project's old
-contrib/hooks/post-receive-email, and is mostly compatible with that
-script.  See README.migrate-from-post-receive-email for details about
-the differences and for how to migrate from post-receive-email to
-git-multimail.
-
-git-multimail, like the rest of the Git project, is licensed under
-GPLv2 (see the COPYING file for details).
-
-Please note: although, as a convenience, git-multimail may be
-distributed along with the main Git project, development of
-git-multimail takes place in its own, separate project.  Please, read
-`<CONTRIBUTING.rst>`__ for more information.
-
-
-By default, for each push received by the repository, git-multimail:
-
-1. Outputs one email summarizing each reference that was changed.
-   These "reference change" (called "refchange" below) emails describe
-   the nature of the change (e.g., was the reference created, deleted,
-   fast-forwarded, etc.) and include a one-line summary of each commit
-   that was added to the reference.
-
-2. Outputs one email for each new commit that was introduced by the
-   reference change.  These "commit" emails include a list of the
-   files changed by the commit, followed by the diffs of files
-   modified by the commit.  The commit emails are threaded to the
-   corresponding reference change email via "In-Reply-To".  This style
-   (similar to the "git format-patch" style used on the Git mailing
-   list) makes it easy to scan through the emails, jump to patches
-   that need further attention, and write comments about specific
-   commits.  Commits are handled in reverse topological order (i.e.,
-   parents shown before children).  For example::
-
-     [git] branch master updated
-     + [git] 01/08: doc: fix xref link from api docs to manual pages
-     + [git] 02/08: api-credentials.txt: show the big picture first
-     + [git] 03/08: api-credentials.txt: mention credential.helper explicitly
-     + [git] 04/08: api-credentials.txt: add "see also" section
-     + [git] 05/08: t3510 (cherry-pick-sequence): add missing '&&'
-     + [git] 06/08: Merge branch 'rr/maint-t3510-cascade-fix'
-     + [git] 07/08: Merge branch 'mm/api-credentials-doc'
-     + [git] 08/08: Git 1.7.11-rc2
-
-   By default, each commit appears in exactly one commit email, the
-   first time that it is pushed to the repository.  If a commit is later
-   merged into another branch, then a one-line summary of the commit
-   is included in the reference change email (as usual), but no
-   additional commit email is generated. See
-   `multimailhook.refFilter(Inclusion|Exclusion|DoSend|DontSend)Regex`
-   below to configure which branches and tags are watched by the hook.
-
-   By default, reference change emails have their "Reply-To" field set
-   to the person who pushed the change, and commit emails have their
-   "Reply-To" field set to the author of the commit.
-
-3. Output one "announce" mail for each new annotated tag, including
-   information about the tag and optionally a shortlog describing the
-   changes since the previous tag.  Such emails might be useful if you
-   use annotated tags to mark releases of your project.
-
-
-Requirements
-------------
-
-* Python 2.x, version 2.4 or later.  No non-standard Python modules
-  are required.  git-multimail has preliminary support for Python 3
-  (but it has been better tested with Python 2).
-
-* The ``git`` command must be in your PATH.  git-multimail is known to
-  work with Git versions back to 1.7.1.  (Earlier versions have not
-  been tested; if you do so, please report your results.)
-
-* To send emails using the default configuration, a standard sendmail
-  program must be located at '/usr/sbin/sendmail' or
-  '/usr/lib/sendmail' and must be configured correctly to send emails.
-  If this is not the case, set multimailhook.sendmailCommand, or see
-  the multimailhook.mailer configuration variable below for how to
-  configure git-multimail to send emails via an SMTP server.
-
-* git-multimail is currently tested only on Linux. It may or may not
-  work on other platforms such as Windows and Mac OS. See
-  `<CONTRIBUTING.rst>`__ to improve the situation.
-
-
-Invocation
-----------
-
-``git_multimail.py`` is designed to be used as a ``post-receive`` hook in a
-Git repository (see githooks(5)).  Link or copy it to
-$GIT_DIR/hooks/post-receive within the repository for which email
-notifications are desired.  Usually it should be installed on the
-central repository for a project, to which all commits are eventually
-pushed.
-
-For use on pre-v1.5.1 Git servers, ``git_multimail.py`` can also work as
-an ``update`` hook, taking its arguments on the command line.  To use
-this script in this manner, link or copy it to $GIT_DIR/hooks/update.
-Please note that the script is not completely reliable in this mode
-[1]_.
-
-Alternatively, ``git_multimail.py`` can be imported as a Python module
-into your own Python post-receive script.  This method is a bit more
-work, but allows the behavior of the hook to be customized using
-arbitrary Python code.  For example, you can use a custom environment
-(perhaps inheriting from GenericEnvironment or GitoliteEnvironment) to
-
-* change how the user who did the push is determined
-
-* read users' email addresses from an LDAP server or from a database
-
-* decide which users should be notified about which commits based on
-  the contents of the commits (e.g., for users who want to be notified
-  only about changes affecting particular files or subdirectories)
-
-Or you can change how emails are sent by writing your own Mailer
-class.  The ``post-receive`` script in this directory demonstrates how
-to use ``git_multimail.py`` as a Python module.  (If you make interesting
-changes of this type, please consider sharing them with the
-community.)
-
-
-Troubleshooting/FAQ
--------------------
-
-Please read `<doc/troubleshooting.rst>`__ for frequently asked
-questions and common issues with git-multimail.
-
-
-Configuration
--------------
-
-By default, git-multimail mostly takes its configuration from the
-following ``git config`` settings:
-
-multimailhook.environment
-    This describes the general environment of the repository. In most
-    cases, you do not need to specify a value for this variable:
-    `git-multimail` will autodetect which environment to use.
-    Currently supported values:
-
-    generic
-      the username of the pusher is read from $USER or $USERNAME and
-      the repository name is derived from the repository's path.
-
-    gitolite
-      Environment to use when ``git-multimail`` is ran as a gitolite_
-      hook.
-
-      The username of the pusher is read from $GL_USER, the repository
-      name is read from $GL_REPO, and the From: header value is
-      optionally read from gitolite.conf (see multimailhook.from).
-
-      For more information about gitolite and git-multimail, read
-      `<doc/gitolite.rst>`__
-
-    stash
-      Environment to use when ``git-multimail`` is ran as an Atlassian
-      BitBucket Server (formerly known as Atlassian Stash) hook.
-
-      **Warning:** this mode was provided by a third-party contributor
-      and never tested by the git-multimail maintainers. It is
-      provided as-is and may or may not work for you.
-
-      This value is automatically assumed when the stash-specific
-      flags (``--stash-user`` and ``--stash-repo``) are specified on
-      the command line. When this environment is active, the username
-      and repo come from these two command line flags, which must be
-      specified.
-
-    gerrit
-      Environment to use when ``git-multimail`` is ran as a
-      ``ref-updated`` Gerrit hook.
-
-      This value is used when the gerrit-specific command line flags
-      (``--oldrev``, ``--newrev``, ``--refname``, ``--project``) for
-      gerrit's ref-updated hook are present. When this environment is
-      active, the username of the pusher is taken from the
-      ``--submitter`` argument if that command line option is passed,
-      otherwise 'Gerrit' is used. The repository name is taken from
-      the ``--project`` option on the command line, which must be passed.
-
-      For more information about gerrit and git-multimail, read
-      `<doc/gerrit.rst>`__
-
-    If none of these environments is suitable for your setup, then you
-    can implement a Python class that inherits from Environment and
-    instantiate it via a script that looks like the example
-    post-receive script.
-
-    The environment value can be specified on the command line using
-    the ``--environment`` option. If it is not specified on the
-    command line or by ``multimailhook.environment``, the value is
-    guessed as follows:
-
-    * If stash-specific (respectively gerrit-specific) command flags
-      are present on the command-line, then ``stash`` (respectively
-      ``gerrit``) is used.
-
-    * If the environment variables $GL_USER and $GL_REPO are set, then
-      ``gitolite`` is used.
-
-    * If none of the above apply, then ``generic`` is used.
-
-multimailhook.repoName
-    A short name of this Git repository, to be used in various places
-    in the notification email text.  The default is to use $GL_REPO
-    for gitolite repositories, or otherwise to derive this value from
-    the repository path name.
-
-multimailhook.mailingList
-    The list of email addresses to which notification emails should be
-    sent, as RFC 2822 email addresses separated by commas.  This
-    configuration option can be multivalued.  Leave it unset or set it
-    to the empty string to not send emails by default.  The next few
-    settings can be used to configure specific address lists for
-    specific types of notification email.
-
-multimailhook.refchangeList
-    The list of email addresses to which summary emails about
-    reference changes should be sent, as RFC 2822 email addresses
-    separated by commas.  This configuration option can be
-    multivalued.  The default is the value in
-    multimailhook.mailingList.  Set this value to "none" (or the empty
-    string) to prevent reference change emails from being sent even if
-    multimailhook.mailingList is set.
-
-multimailhook.announceList
-    The list of email addresses to which emails about new annotated
-    tags should be sent, as RFC 2822 email addresses separated by
-    commas.  This configuration option can be multivalued.  The
-    default is the value in multimailhook.refchangeList or
-    multimailhook.mailingList.  Set this value to "none" (or the empty
-    string) to prevent annotated tag announcement emails from being sent
-    even if one of the other values is set.
-
-multimailhook.commitList
-    The list of email addresses to which emails about individual new
-    commits should be sent, as RFC 2822 email addresses separated by
-    commas.  This configuration option can be multivalued.  The
-    default is the value in multimailhook.mailingList.  Set this value
-    to "none" (or the empty string) to prevent notification emails about
-    individual commits from being sent even if
-    multimailhook.mailingList is set.
-
-multimailhook.announceShortlog
-    If this option is set to true, then emails about changes to
-    annotated tags include a shortlog of changes since the previous
-    tag.  This can be useful if the annotated tags represent releases;
-    then the shortlog will be a kind of rough summary of what has
-    happened since the last release.  But if your tagging policy is
-    not so straightforward, then the shortlog might be confusing
-    rather than useful.  Default is false.
-
-multimailhook.commitEmailFormat
-    The format of email messages for the individual commits, can be "text" or
-    "html". In the latter case, the emails will include diffs using colorized
-    HTML instead of plain text used by default. Note that this  currently the
-    ref change emails are always sent in plain text.
-
-    Note that when using "html", the formatting is done by parsing the
-    output of ``git log`` with ``-p``. When using
-    ``multimailhook.commitLogOpts`` to specify a ``--format`` for
-    ``git log``, one may get false positive (e.g. lines in the body of
-    the message starting with ``+++`` or ``---`` colored in red or
-    green).
-
-    By default, all the message is HTML-escaped. See
-    ``multimailhook.htmlInIntro`` to change this behavior.
-
-multimailhook.commitBrowseURL
-    Used to generate a link to an online repository browser in commit
-    emails. This variable must be a string. Format directives like
-    ``%(<variable>)s`` will be expanded the same way as template
-    strings. In particular, ``%(id)s`` will be replaced by the full
-    Git commit identifier (40-chars hexadecimal).
-
-    If the string does not contain any format directive, then
-    ``%(id)s`` will be automatically added to the string. If you don't
-    want ``%(id)s`` to be automatically added, use the empty format
-    directive ``%()s`` anywhere in the string.
-
-    For example, a suitable value for the git-multimail project itself
-    would be
-    ``https://github.com/git-multimail/git-multimail/commit/%(id)s``.
-
-multimailhook.htmlInIntro, multimailhook.htmlInFooter
-    When generating an HTML message, git-multimail escapes any HTML
-    sequence by default. This means that if a template contains HTML
-    like ``<a href="foo">link</a>``, the reader will see the HTML
-    source code and not a proper link.
-
-    Set ``multimailhook.htmlInIntro`` to true to allow writing HTML
-    formatting in introduction templates. Similarly, set
-    ``multimailhook.htmlInFooter`` for HTML in the footer.
-
-    Variables expanded in the template are still escaped. For example,
-    if a repository's path contains a ``<``, it will be rendered as
-    such in the message.
-
-    Read `<doc/customizing-emails.rst>`__ for more details and
-    examples.
-
-multimailhook.refchangeShowGraph
-    If this option is set to true, then summary emails about reference
-    changes will additionally include:
-
-    * a graph of the added commits (if any)
-
-    * a graph of the discarded commits (if any)
-
-    The log is generated by running ``git log --graph`` with the options
-    specified in graphOpts.  The default is false.
-
-multimailhook.refchangeShowLog
-    If this option is set to true, then summary emails about reference
-    changes will include a detailed log of the added commits in
-    addition to the one line summary.  The log is generated by running
-    ``git log`` with the options specified in multimailhook.logOpts.
-    Default is false.
-
-multimailhook.mailer
-    This option changes the way emails are sent.  Accepted values are:
-
-    * **sendmail (the default)**: use the command ``/usr/sbin/sendmail`` or
-      ``/usr/lib/sendmail`` (or sendmailCommand, if configured).  This
-      mode can be further customized via the following options:
-
-      multimailhook.sendmailCommand
-          The command used by mailer ``sendmail`` to send emails.  Shell
-          quoting is allowed in the value of this setting, but remember that
-          Git requires double-quotes to be escaped; e.g.::
-
-              git config multimailhook.sendmailcommand '/usr/sbin/sendmail -oi -t -F \"Git Repo\"'
-
-          Default is '/usr/sbin/sendmail -oi -t' or
-          '/usr/lib/sendmail -oi -t' (depending on which file is
-          present and executable).
-
-      multimailhook.envelopeSender
-          If set then pass this value to sendmail via the -f option to set
-          the envelope sender address.
-
-    * **smtp**: use Python's smtplib.  This is useful when the sendmail
-      command is not available on the system.  This mode can be
-      further customized via the following options:
-
-      multimailhook.smtpServer
-          The name of the SMTP server to connect to.  The value can
-          also include a colon and a port number; e.g.,
-          ``mail.example.com:25``.  Default is 'localhost' using port 25.
-
-      multimailhook.smtpUser, multimailhook.smtpPass
-          Server username and password. Required if smtpEncryption is 'ssl'.
-          Note that the username and password currently need to be
-          set cleartext in the configuration file, which is not
-          recommended. If you need to use this option, be sure your
-          configuration file is read-only.
-
-      multimailhook.envelopeSender
-        The sender address to be passed to the SMTP server.  If
-        unset, then the value of multimailhook.from is used.
-
-      multimailhook.smtpServerTimeout
-        Timeout in seconds. Default is 10.
-
-      multimailhook.smtpEncryption
-        Set the security type. Allowed values: ``none``, ``ssl``, ``tls`` (starttls).
-        Default is ``none``.
-
-      multimailhook.smtpCACerts
-        Set the path to a list of trusted CA certificate to verify the
-        server certificate, only supported when ``smtpEncryption`` is
-        ``tls``. If unset or empty, the server certificate is not
-        verified. If it targets a file containing a list of trusted CA
-        certificates (PEM format) these CAs will be used to verify the
-        server certificate. For debian, you can set
-        ``/etc/ssl/certs/ca-certificates.crt`` for using the system
-        trusted CAs. For self-signed server, you can add your server
-        certificate to the system store::
-
-            cd /usr/local/share/ca-certificates/
-            openssl s_client -starttls smtp \
-                   -connect mail.example.net:587 -showcerts \
-                   </dev/null 2>/dev/null \
-                 | openssl x509 -outform PEM >mail.example.net.crt
-            update-ca-certificates
-
-        and used the updated ``/etc/ssl/certs/ca-certificates.crt``. Or
-        directly use your ``/path/to/mail.example.net.crt``. Default is
-        unset.
-
-      multimailhook.smtpServerDebugLevel
-        Integer number. Set to greater than 0 to activate debugging.
-
-multimailhook.from, multimailhook.fromCommit, multimailhook.fromRefchange
-    If set, use this value in the From: field of generated emails.
-    ``fromCommit`` is used for commit emails, ``fromRefchange`` is
-    used for refchange emails, and ``from`` is used as fall-back in
-    all cases.
-
-    The value for these variables can be either:
-
-    - An email address, which will be used directly.
-
-    - The value ``pusher``, in which case the pusher's address (if
-      available) will be used.
-
-    - The value ``author`` (meaningful only for ``fromCommit``), in which
-      case the commit author's address will be used.
-
-    If config values are unset, the value of the From: header is
-    determined as follows:
-
-    1. (gitolite environment only)
-       1.a) If ``multimailhook.MailaddressMap`` is set, and is a path
-       to an existing file (if relative, it is considered relative to
-       the place where ``gitolite.conf`` is located), then this file
-       should contain lines like::
-
-           username Firstname Lastname <email@example.com>
-
-       git-multimail will then look for a line where ``$GL_USER``
-       matches the ``username`` part, and use the rest of the line for
-       the ``From:`` header.
-
-       1.b) Parse gitolite.conf, looking for a block of comments that
-       looks like this::
-
-           # BEGIN USER EMAILS
-           # username Firstname Lastname <email@example.com>
-           # END USER EMAILS
-
-       If that block exists, and there is a line between the BEGIN
-       USER EMAILS and END USER EMAILS lines where the first field
-       matches the gitolite username ($GL_USER), use the rest of the
-       line for the From: header.
-
-    2. If the user.email configuration setting is set, use its value
-       (and the value of user.name, if set).
-
-    3. Use the value of multimailhook.envelopeSender.
-
-multimailhook.MailaddressMap
-    (gitolite environment only)
-    File to look for a ``From:`` address based on the user doing the
-    push. Defaults to unset. See ``multimailhook.from`` for details.
-
-multimailhook.administrator
-    The name and/or email address of the administrator of the Git
-    repository; used in FOOTER_TEMPLATE.  Default is
-    multimailhook.envelopesender if it is set; otherwise a generic
-    string is used.
-
-multimailhook.emailPrefix
-    All emails have this string prepended to their subjects, to aid
-    email filtering (though filtering based on the X-Git-* email
-    headers is probably more robust).  Default is the short name of
-    the repository in square brackets; e.g., ``[myrepo]``.  Set this
-    value to the empty string to suppress the email prefix. You may
-    use the placeholder ``%(repo_shortname)s`` for the short name of
-    the repository.
-
-multimailhook.emailMaxLines
-    The maximum number of lines that should be included in the body of
-    a generated email.  If not specified, there is no limit.  Lines
-    beyond the limit are suppressed and counted, and a final line is
-    added indicating the number of suppressed lines.
-
-multimailhook.emailMaxLineLength
-    The maximum length of a line in the email body.  Lines longer than
-    this limit are truncated to this length with a trailing ``[...]``
-    added to indicate the missing text.  The default is 500, because
-    (a) diffs with longer lines are probably from binary files, for
-    which a diff is useless, and (b) even if a text file has such long
-    lines, the diffs are probably unreadable anyway.  To disable line
-    truncation, set this option to 0.
-
-multimailhook.subjectMaxLength
-    The maximum length of the subject line (i.e. the ``oneline`` field
-    in templates, not including the prefix). Lines longer than this
-    limit are truncated to this length with a trailing ``[...]`` added
-    to indicate the missing text. This option The default is to use
-    ``multimailhook.emailMaxLineLength``. This option avoids sending
-    emails with overly long subject lines, but should not be needed if
-    the commit messages follow the Git convention (one short subject
-    line, then a blank line, then the message body). To disable line
-    truncation, set this option to 0.
-
-multimailhook.maxCommitEmails
-    The maximum number of commit emails to send for a given change.
-    When the number of patches is larger that this value, only the
-    summary refchange email is sent.  This can avoid accidental
-    mailbombing, for example on an initial push.  To disable commit
-    emails limit, set this option to 0.  The default is 500.
-
-multimailhook.excludeMergeRevisions
-    When sending out revision emails, do not consider merge commits (the
-    functional equivalent of `rev-list --no-merges`).
-    The default is `false` (send merge commit emails).
-
-multimailhook.emailStrictUTF8
-    If this boolean option is set to `true`, then the main part of the
-    email body is forced to be valid UTF-8.  Any characters that are
-    not valid UTF-8 are converted to the Unicode replacement
-    character, U+FFFD.  The default is `true`.
-
-    This option is ineffective with Python 3, where non-UTF-8
-    characters are unconditionally replaced.
-
-multimailhook.diffOpts
-    Options passed to ``git diff-tree`` when generating the summary
-    information for ReferenceChange emails.  Default is ``--stat
-    --summary --find-copies-harder``.  Add -p to those options to
-    include a unified diff of changes in addition to the usual summary
-    output.  Shell quoting is allowed; see ``multimailhook.logOpts`` for
-    details.
-
-multimailhook.graphOpts
-    Options passed to ``git log --graph`` when generating graphs for the
-    reference change summary emails (used only if refchangeShowGraph
-    is true).  The default is '--oneline --decorate'.
-
-    Shell quoting is allowed; see logOpts for details.
-
-multimailhook.logOpts
-    Options passed to ``git log`` to generate additional info for
-    reference change emails (used only if refchangeShowLog is set).
-    For example, adding -p will show each commit's complete diff.  The
-    default is empty.
-
-    Shell quoting is allowed; for example, a log format that contains
-    spaces can be specified using something like::
-
-      git config multimailhook.logopts '--pretty=format:"%h %aN <%aE>%n%s%n%n%b%n"'
-
-    If you want to set this by editing your configuration file
-    directly, remember that Git requires double-quotes to be escaped
-    (see git-config(1) for more information)::
-
-      [multimailhook]
-              logopts = --pretty=format:\"%h %aN <%aE>%n%s%n%n%b%n\"
-
-multimailhook.commitLogOpts
-    Options passed to ``git log`` to generate additional info for
-    revision change emails.  For example, adding --ignore-all-spaces
-    will suppress whitespace changes.  The default options are ``-C
-    --stat -p --cc``.  Shell quoting is allowed; see
-    multimailhook.logOpts for details.
-
-multimailhook.dateSubstitute
-    String to use as a substitute for ``Date:`` in the output of ``git
-    log`` while formatting commit messages. This is useful to avoid
-    emitting a line that can be interpreted by mailers as the start of
-    a cited message (Zimbra webmail in particular). Defaults to
-    ``CommitDate:``. Set to an empty string or ``none`` to deactivate
-    the behavior.
-
-multimailhook.emailDomain
-    Domain name appended to the username of the person doing the push
-    to convert it into an email address
-    (via ``"%s@%s" % (username, emaildomain)``). More complicated
-    schemes can be implemented by overriding Environment and
-    overriding its get_pusher_email() method.
-
-multimailhook.replyTo, multimailhook.replyToCommit, multimailhook.replyToRefchange
-    Addresses to use in the Reply-To: field for commit emails
-    (replyToCommit) and refchange emails (replyToRefchange).
-    multimailhook.replyTo is used as default when replyToCommit or
-    replyToRefchange is not set. The shortcuts ``pusher`` and
-    ``author`` are allowed with the same semantics as for
-    ``multimailhook.from``. In addition, the value ``none`` can be
-    used to omit the ``Reply-To:`` field.
-
-    The default is ``pusher`` for refchange emails, and ``author`` for
-    commit emails.
-
-multimailhook.quiet
-    Do not output the list of email recipients from the hook
-
-multimailhook.stdout
-    For debugging, send emails to stdout rather than to the
-    mailer.  Equivalent to the --stdout command line option
-
-multimailhook.scanCommitForCc
-    If this option is set to true, than recipients from lines in commit body
-    that starts with ``CC:`` will be added to CC list.
-    Default: false
-
-multimailhook.combineWhenSingleCommit
-    If this option is set to true and a single new commit is pushed to
-    a branch, combine the summary and commit email messages into a
-    single email.
-    Default: true
-
-multimailhook.refFilterInclusionRegex, multimailhook.refFilterExclusionRegex, multimailhook.refFilterDoSendRegex, multimailhook.refFilterDontSendRegex
-    **Warning:** these options are experimental. They should work, but
-    the user-interface is not stable yet (in particular, the option
-    names may change). If you want to participate in stabilizing the
-    feature, please contact the maintainers and/or send pull-requests.
-    If you are happy with the current shape of the feature, please
-    report it too.
-
-    Regular expressions that can be used to limit refs for which email
-    updates will be sent.  It is an error to specify both an inclusion
-    and an exclusion regex.  If a ``refFilterInclusionRegex`` is
-    specified, emails will only be sent for refs which match this
-    regex.  If a ``refFilterExclusionRegex`` regex is specified,
-    emails will be sent for all refs except those that match this
-    regex (or that match a predefined regex specific to the
-    environment, such as "^refs/notes" for most environments and
-    "^refs/notes|^refs/changes" for the gerrit environment).
-
-    The expressions are matched against the complete refname, and is
-    considered to match if any substring matches. For example, to
-    filter-out all tags, set ``refFilterExclusionRegex`` to
-    ``^refs/tags/`` (note the leading ``^`` but no trailing ``$``). If
-    you set ``refFilterExclusionRegex`` to ``master``, then any ref
-    containing ``master`` will be excluded (the ``master`` branch, but
-    also ``refs/tags/master`` or ``refs/heads/foo-master-bar``).
-
-    ``refFilterDoSendRegex`` and ``refFilterDontSendRegex`` are
-    analogous to ``refFilterInclusionRegex`` and
-    ``refFilterExclusionRegex`` with one difference: with
-    ``refFilterDoSendRegex`` and ``refFilterDontSendRegex``, commits
-    introduced by one excluded ref will not be considered as new when
-    they reach an included ref. Typically, if you add a branch ``foo``
-    to  ``refFilterDontSendRegex``, push commits to this branch, and
-    later merge branch ``foo`` into ``master``, then the notification
-    email for ``master`` will contain a commit email only for the
-    merge commit. If you include ``foo`` in
-    ``refFilterExclusionRegex``, then at the time of merge, you will
-    receive one commit email per commit in the branch.
-
-    These variables can be multi-valued, like::
-
-      [multimailhook]
-              refFilterExclusionRegex = ^refs/tags/
-              refFilterExclusionRegex = ^refs/heads/master$
-
-    You can also provide a whitespace-separated list like::
-
-      [multimailhook]
-              refFilterExclusionRegex = ^refs/tags/ ^refs/heads/master$
-
-    Both examples exclude tags and the master branch, and are
-    equivalent to::
-
-      [multimailhook]
-              refFilterExclusionRegex = ^refs/tags/|^refs/heads/master$
-
-    ``refFilterInclusionRegex`` and ``refFilterExclusionRegex`` are
-    strictly stronger than ``refFilterDoSendRegex`` and
-    ``refFilterDontSendRegex``. In other words, adding a ref to a
-    DoSend/DontSend regex has no effect if it is already excluded by a
-    Exclusion/Inclusion regex.
-
-multimailhook.logFile, multimailhook.errorLogFile, multimailhook.debugLogFile
-
-    When set, these variable designate path to files where
-    git-multimail will log some messages. Normal messages and error
-    messages are sent to ``logFile``, and error messages are also sent
-    to ``errorLogFile``. Debug messages and all other messages are
-    sent to ``debugLogFile``. The recommended way is to set only one
-    of these variables, but it is also possible to set several of them
-    (part of the information is then duplicated in several log files,
-    for example errors are duplicated to all log files).
-
-    Relative path are relative to the Git repository where the push is
-    done.
-
-multimailhook.verbose
-
-    Verbosity level of git-multimail on its standard output. By
-    default, show only error and info messages. If set to true, show
-    also debug messages.
-
-Email filtering aids
---------------------
-
-All emails include extra headers to enable fine tuned filtering and
-give information for debugging.  All emails include the headers
-``X-Git-Host``, ``X-Git-Repo``, ``X-Git-Refname``, and ``X-Git-Reftype``.
-ReferenceChange emails also include headers ``X-Git-Oldrev`` and ``X-Git-Newrev``;
-Revision emails also include header ``X-Git-Rev``.
-
-
-Customizing email contents
---------------------------
-
-git-multimail mostly generates emails by expanding templates.  The
-templates can be customized.  To avoid the need to edit
-``git_multimail.py`` directly, the preferred way to change the templates
-is to write a separate Python script that imports ``git_multimail.py`` as
-a module, then replaces the templates in place.  See the provided
-post-receive script for an example of how this is done.
-
-
-Customizing git-multimail for your environment
-----------------------------------------------
-
-git-multimail is mostly customized via an "environment" that describes
-the local environment in which Git is running.  Two types of
-environment are built in:
-
-GenericEnvironment
-    a stand-alone Git repository.
-
-GitoliteEnvironment
-    a Git repository that is managed by gitolite_.  For such
-    repositories, the identity of the pusher is read from
-    environment variable $GL_USER, the name of the repository is read
-    from $GL_REPO (if it is not overridden by multimailhook.reponame),
-    and the From: header value is optionally read from gitolite.conf
-    (see multimailhook.from).
-
-By default, git-multimail assumes GitoliteEnvironment if $GL_USER and
-$GL_REPO are set, and otherwise assumes GenericEnvironment.
-Alternatively, you can choose one of these two environments explicitly
-by setting a ``multimailhook.environment`` config setting (which can
-have the value `generic` or `gitolite`) or by passing an --environment
-option to the script.
-
-If you need to customize the script in ways that are not supported by
-the existing environments, you can define your own environment class
-class using arbitrary Python code.  To do so, you need to import
-``git_multimail.py`` as a Python module, as demonstrated by the example
-post-receive script.  Then implement your environment class; it should
-usually inherit from one of the existing Environment classes and
-possibly one or more of the EnvironmentMixin classes.  Then set the
-``environment`` variable to an instance of your own environment class
-and pass it to ``run_as_post_receive_hook()``.
-
-The standard environment classes, GenericEnvironment and
-GitoliteEnvironment, are in fact themselves put together out of a
-number of mixin classes, each of which handles one aspect of the
-customization.  For the finest control over your configuration, you
-can specify exactly which mixin classes your own environment class
-should inherit from, and override individual methods (or even add your
-own mixin classes) to implement entirely new behaviors.  If you
-implement any mixins that might be useful to other people, please
-consider sharing them with the community!
-
-
-Getting involved
-----------------
-
-Please, read `<CONTRIBUTING.rst>`__ for instructions on how to
-contribute to git-multimail.
-
-
-Footnotes
----------
-
-.. [1] Because of the way information is passed to update hooks, the
-       script's method of determining whether a commit has already
-       been seen does not work when it is used as an ``update`` script.
-       In particular, no notification email will be generated for a
-       new commit that is added to multiple references in the same
-       push. A workaround is to use --force-send to force sending the
-       emails.
-
-.. _gitolite: https://github.com/sitaramc/gitolite
diff --git a/contrib/hooks/multimail/doc/customizing-emails.rst b/contrib/hooks/multimail/doc/customizing-emails.rst
deleted file mode 100644
index 3f5b67f..0000000
--- a/contrib/hooks/multimail/doc/customizing-emails.rst
+++ /dev/null
@@ -1,56 +0,0 @@
-Customizing the content and formatting of emails
-================================================
-
-Overloading template strings
-----------------------------
-
-The content of emails is generated based on template strings defined
-in ``git_multimail.py``. You can customize these template strings
-without changing the script itself, by defining a Python wrapper
-around it. The python wrapper should ``import git_multimail`` and then
-override the ``git_multimail.*`` strings like this::
-
-  import sys  # needed for sys.argv
-
-  # Import and customize git_multimail:
-  import git_multimail
-  git_multimail.REVISION_INTRO_TEMPLATE = """..."""
-  git_multimail.COMBINED_INTRO_TEMPLATE = git_multimail.REVISION_INTRO_TEMPLATE
-
-  # start git_multimail itself:
-  git_multimail.main(sys.argv[1:])
-
-The template strings can use any value already used in the existing
-templates (read the source code).
-
-Using HTML in template strings
-------------------------------
-
-If ``multimailhook.commitEmailFormat`` is set to HTML, then
-git-multimail will generate HTML emails for commit notifications. The
-log and diff will be formatted automatically by git-multimail. By
-default, any HTML special character in the templates will be escaped.
-
-To use HTML formatting in the introduction of the email, set
-``multimailhook.htmlInIntro`` to ``true``. Then, the template can
-contain any HTML tags, that will be sent as-is in the email. For
-example, to add some formatting and a link to the online commit, use
-a format like::
-
-  git_multimail.REVISION_INTRO_TEMPLATE = """\
-  <span style="color:#808080">This is an automated email from the git hooks/post-receive script.</span><br /><br />
-
-  <strong>%(pusher)s</strong> pushed a commit to %(refname_type)s %(short_refname)s
-  in repository %(repo_shortname)s.<br />
-
-  <a href="https://github.com/git-multimail/git-multimail/commit/%(newrev)s">View on GitHub</a>.
-  """
-
-Note that the values expanded from ``%(variable)s`` in the format
-strings will still be escaped.
-
-For a less flexible but easier to set up way to add a link to commit
-emails, see ``multimailhook.commitBrowseURL``.
-
-Similarly, one can set ``multimailhook.htmlInFooter`` and override any
-of the ``*_FOOTER*`` template strings.
diff --git a/contrib/hooks/multimail/doc/gerrit.rst b/contrib/hooks/multimail/doc/gerrit.rst
deleted file mode 100644
index 8011d05..0000000
--- a/contrib/hooks/multimail/doc/gerrit.rst
+++ /dev/null
@@ -1,56 +0,0 @@
-Setting up git-multimail on Gerrit
-==================================
-
-Gerrit has its own email-sending system, but you may prefer using
-``git-multimail`` instead. It supports Gerrit natively as a Gerrit
-``ref-updated`` hook (Warning: `Gerrit hooks
-<https://gerrit-review.googlesource.com/Documentation/config-hooks.html>`__
-are distinct from Git hooks). Setting up ``git-multimail`` on a Gerrit
-installation can be done following the instructions below.
-
-The explanations show an easy way to set up ``git-multimail``,
-but leave ``git-multimail`` installed and unconfigured for a while. If
-you run Gerrit on a production server, it is advised that you
-execute the step "Set up the hook" last to avoid confusing your users
-in the meantime.
-
-Set up the hook
----------------
-
-Create a directory ``$site_path/hooks/`` if it does not exist (if you
-don't know what ``$site_path`` is, run ``gerrit.sh status`` and look
-for a ``GERRIT_SITE`` line). Either copy ``git_multimail.py`` to
-``$site_path/hooks/ref-updated`` or create a wrapper script like
-this::
-
-  #! /bin/sh
-  exec /path/to/git_multimail.py "$@"
-
-In both cases, make sure the file is named exactly
-``$site_path/hooks/ref-updated`` and is executable.
-
-(Alternatively, you may configure the ``[hooks]`` section of
-gerrit.config)
-
-Configuration
--------------
-
-Log on the gerrit server and edit ``$site_path/git/$project/config``
-to configure ``git-multimail``.
-
-Troubleshooting
----------------
-
-Warning: this will disable ``git-multimail`` during the debug, and
-could confuse your users. Don't run on a production server.
-
-To debug configuration issues with ``git-multimail``, you can add the
-``--stdout`` option when calling ``git_multimail.py`` like this::
-
-  #!/bin/sh
-  exec /path/to/git-multimail/git-multimail/git_multimail.py \
-    --stdout "$@" >> /tmp/log.txt
-
-and try pushing from a test repository. You should see the source of
-the email that would have been sent in the output of ``git push`` in
-the file ``/tmp/log.txt``.
diff --git a/contrib/hooks/multimail/doc/gitolite.rst b/contrib/hooks/multimail/doc/gitolite.rst
deleted file mode 100644
index 5054833..0000000
--- a/contrib/hooks/multimail/doc/gitolite.rst
+++ /dev/null
@@ -1,118 +0,0 @@
-Setting up git-multimail on gitolite
-====================================
-
-``git-multimail`` supports gitolite 3 natively.
-The explanations below show an easy way to set up ``git-multimail``,
-but leave ``git-multimail`` installed and unconfigured for a while. If
-you run gitolite on a production server, it is advised that you
-execute the step "Set up the hook" last to avoid confusing your users
-in the meantime.
-
-Set up the hook
----------------
-
-Log in as your gitolite user.
-
-Create a file ``.gitolite/hooks/common/post-receive`` on your gitolite
-account containing (adapt the path, obviously)::
-
-  #!/bin/sh
-  exec /path/to/git-multimail/git-multimail/git_multimail.py "$@"
-
-Make sure it's executable (``chmod +x``). Record the hook in
-gitolite::
-
-  gitolite setup
-
-Configuration
--------------
-
-First, you have to allow the admin to set Git configuration variables.
-
-As gitolite user, edit the line containing ``GIT_CONFIG_KEYS`` in file
-``.gitolite.rc``, to make it look like::
-
-  GIT_CONFIG_KEYS                 =>  'multimailhook\..*',
-
-You can now log out and return to your normal user.
-
-In the ``gitolite-admin`` clone, edit the file ``conf/gitolite.conf``
-and add::
-
-  repo @all
-      # Not strictly needed as git_multimail.py will chose gitolite if
-      # $GL_USER is set.
-      config multimailhook.environment = gitolite
-      config multimailhook.mailingList = # Where emails should be sent
-      config multimailhook.from = # From address to use
-
-Note that by default, gitolite forbids ``<`` and ``>`` in variable
-values (for security/paranoia reasons, see
-`compensating for UNSAFE_PATT
-<http://gitolite.com/gitolite/git-config/index.html#compensating-for-unsafe95patt>`__
-in gitolite's documentation for explanations and a way to disable
-this). As a consequence, you will not be able to use ``First Last
-<First.Last@example.com>`` as recipient email, but specifying
-``First.Last@example.com`` alone works.
-
-Obviously, you can customize all parameters on a per-repository basis by
-adding these ``config multimailhook.*`` lines in the section
-corresponding to a repository or set of repositories.
-
-To activate ``git-multimail`` on a per-repository basis, do not set
-``multimailhook.mailingList`` in the ``@all`` section and set it only
-for repositories for which you want ``git-multimail``.
-
-Alternatively, you can set up the ``From:`` field on a per-user basis
-by adding a ``BEGIN USER EMAILS``/``END USER EMAILS`` section (see
-``../README``).
-
-Specificities of Gitolite for Configuration
--------------------------------------------
-
-Empty configuration variables
-.............................
-
-With gitolite, the syntax ``config multimailhook.commitList = ""``
-unsets the variable instead of setting it to an empty string (see
-`here
-<http://gitolite.com/gitolite/git-config.html#an-important-warning-about-deleting-a-config-line>`__).
-As a result, there is no way to set a variable to the empty string.
-In all most places where an empty value is required, git-multimail
-now allows to specify special ``"none"`` value (case-sensitive) to
-mean the same.
-
-Alternatively, one can use ``" "`` (a single space) instead of ``""``.
-In most cases (in particular ``multimailhook.*List`` variables), this
-will be equivalent to an empty string.
-
-If you have a use-case where ``"none"`` is not an acceptable value and
-you need ``" "`` or  ``""`` instead, please report it as a bug to
-git-multimail.
-
-Allowing Regular Expressions in Configuration
-.............................................
-
-gitolite has a mechanism to prevent unsafe configuration variable
-values, which prevent characters like ``|`` commonly used in regular
-expressions. If you do not need the safety feature of gitolite and
-need to use regular expressions in your configuration (e.g. for
-``multimailhook.refFilter*`` variables), set
-`UNSAFE_PATT
-<http://gitolite.com/gitolite/git-config.html#unsafe-patt>`__ to a
-less restrictive value.
-
-Troubleshooting
----------------
-
-Warning: this will disable ``git-multimail`` during the debug, and
-could confuse your users. Don't run on a production server.
-
-To debug configuration issues with ``git-multimail``, you can add the
-``--stdout`` option when calling ``git_multimail.py`` like this::
-
-  #!/bin/sh
-  exec /path/to/git-multimail/git-multimail/git_multimail.py --stdout "$@"
-
-and try pushing from a test repository. You should see the source of
-the email that would have been sent in the output of ``git push``.
diff --git a/contrib/hooks/multimail/doc/troubleshooting.rst b/contrib/hooks/multimail/doc/troubleshooting.rst
deleted file mode 100644
index 651b509..0000000
--- a/contrib/hooks/multimail/doc/troubleshooting.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-Troubleshooting issues with git-multimail: a FAQ
-================================================
-
-How to check that git-multimail is properly set up?
----------------------------------------------------
-
-Since version 1.4.0, git-multimail allows a simple self-checking of
-its configuration: run it with the environment variable
-``GIT_MULTIMAIL_CHECK_SETUP`` set to a non-empty string. You should
-get something like this::
-
-  $ GIT_MULTIMAIL_CHECK_SETUP=true /home/moy/dev/git-multimail/git-multimail/git_multimail.py
-  Environment values:
-      administrator : 'the administrator of this repository'
-      charset : 'utf-8'
-      emailprefix : '[git-multimail] '
-      fqdn : 'anie'
-      projectdesc : 'UNNAMED PROJECT'
-      pusher : 'moy'
-      repo_path : '/home/moy/dev/git-multimail'
-      repo_shortname : 'git-multimail'
-
-  Now, checking that git-multimail's standard input is properly set ...
-  Please type some text and then press Return
-  foo
-  You have just entered:
-  foo
-  git-multimail seems properly set up.
-
-If you forgot to set an important variable, you may get instead::
-
-  $ GIT_MULTIMAIL_CHECK_SETUP=true /home/moy/dev/git-multimail/git-multimail/git_multimail.py
-  No email recipients configured!
-
-Do not set ``$GIT_MULTIMAIL_CHECK_SETUP`` other than for testing your
-configuration: it would disable the hook completely.
-
-Git is not using the right address in the From/To/Reply-To field
-----------------------------------------------------------------
-
-First, make sure that git-multimail actually uses what you think it is
-using. A lot happens to your email (especially when posting to a
-mailing-list) between the time `git_multimail.py` sends it and the
-time it reaches your inbox.
-
-A simple test (to do on a test repository, do not use in production as
-it would disable email sending): change your post-receive hook to call
-`git_multimail.py` with the `--stdout` option, and try to push to the
-repository. You should see something like::
-
-  Counting objects: 3, done.
-  Writing objects: 100% (3/3), 263 bytes | 0 bytes/s, done.
-  Total 3 (delta 0), reused 0 (delta 0)
-  remote: Sending notification emails to: foo.bar@example.com
-  remote: ===========================================================================
-  remote: Date: Mon, 25 Apr 2016 18:39:59 +0200
-  remote: To: foo.bar@example.com
-  remote: Subject: [git] branch master updated: foo
-  remote: MIME-Version: 1.0
-  remote: Content-Type: text/plain; charset=utf-8
-  remote: Content-Transfer-Encoding: 8bit
-  remote: Message-ID: <20160425163959.2311.20498@anie>
-  remote: From: Auth Or <Foo.Bar@example.com>
-  remote: Reply-To: Auth Or <Foo.Bar@example.com>
-  remote: X-Git-Host: example
-  ...
-  remote: --
-  remote: To stop receiving notification emails like this one, please contact
-  remote: the administrator of this repository.
-  remote: ===========================================================================
-  To /path/to/repo
-     6278f04..e173f20  master -> master
-
-Note: this does not include the sender (Return-Path: header), as it is
-not part of the message content but passed to the mailer. Some mailer
-show the ``Sender:`` field instead of the ``From:`` field (for
-example, Zimbra Webmail shows ``From: <sender-field> on behalf of
-<from-field>``).
diff --git a/contrib/hooks/multimail/git_multimail.py b/contrib/hooks/multimail/git_multimail.py
deleted file mode 100755
index f563be8..0000000
--- a/contrib/hooks/multimail/git_multimail.py
+++ /dev/null
@@ -1,4346 +0,0 @@
-#! /usr/bin/env python
-
-__version__ = '1.5.0'
-
-# Copyright (c) 2015-2016 Matthieu Moy and others
-# Copyright (c) 2012-2014 Michael Haggerty and others
-# Derived from contrib/hooks/post-receive-email, which is
-# Copyright (c) 2007 Andy Parkins
-# and also includes contributions by other authors.
-#
-# This file is part of git-multimail.
-#
-# git-multimail is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License version
-# 2 as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see
-# <http://www.gnu.org/licenses/>.
-
-"""Generate notification emails for pushes to a git repository.
-
-This hook sends emails describing changes introduced by pushes to a
-git repository.  For each reference that was changed, it emits one
-ReferenceChange email summarizing how the reference was changed,
-followed by one Revision email for each new commit that was introduced
-by the reference change.
-
-Each commit is announced in exactly one Revision email.  If the same
-commit is merged into another branch in the same or a later push, then
-the ReferenceChange email will list the commit's SHA1 and its one-line
-summary, but no new Revision email will be generated.
-
-This script is designed to be used as a "post-receive" hook in a git
-repository (see githooks(5)).  It can also be used as an "update"
-script, but this usage is not completely reliable and is deprecated.
-
-To help with debugging, this script accepts a --stdout option, which
-causes the emails to be written to standard output rather than sent
-using sendmail.
-
-See the accompanying README file for the complete documentation.
-
-"""
-
-import sys
-import os
-import re
-import bisect
-import socket
-import subprocess
-import shlex
-import optparse
-import logging
-import smtplib
-try:
-    import ssl
-except ImportError:
-    # Python < 2.6 do not have ssl, but that's OK if we don't use it.
-    pass
-import time
-
-import uuid
-import base64
-
-PYTHON3 = sys.version_info >= (3, 0)
-
-if sys.version_info <= (2, 5):
-    def all(iterable):
-        for element in iterable:
-            if not element:
-                return False
-        return True
-
-
-def is_ascii(s):
-    return all(ord(c) < 128 and ord(c) > 0 for c in s)
-
-
-if PYTHON3:
-    def is_string(s):
-        return isinstance(s, str)
-
-    def str_to_bytes(s):
-        return s.encode(ENCODING)
-
-    def bytes_to_str(s, errors='strict'):
-        return s.decode(ENCODING, errors)
-
-    unicode = str
-
-    def write_str(f, msg):
-        # Try outputting with the default encoding. If it fails,
-        # try UTF-8.
-        try:
-            f.buffer.write(msg.encode(sys.getdefaultencoding()))
-        except UnicodeEncodeError:
-            f.buffer.write(msg.encode(ENCODING))
-
-    def read_line(f):
-        # Try reading with the default encoding. If it fails,
-        # try UTF-8.
-        out = f.buffer.readline()
-        try:
-            return out.decode(sys.getdefaultencoding())
-        except UnicodeEncodeError:
-            return out.decode(ENCODING)
-
-    import html
-
-    def html_escape(s):
-        return html.escape(s)
-
-else:
-    def is_string(s):
-        try:
-            return isinstance(s, basestring)
-        except NameError:  # Silence Pyflakes warning
-            raise
-
-    def str_to_bytes(s):
-        return s
-
-    def bytes_to_str(s, errors='strict'):
-        return s
-
-    def write_str(f, msg):
-        f.write(msg)
-
-    def read_line(f):
-        return f.readline()
-
-    def next(it):
-        return it.next()
-
-    import cgi
-
-    def html_escape(s):
-        return cgi.escape(s, True)
-
-try:
-    from email.charset import Charset
-    from email.utils import make_msgid
-    from email.utils import getaddresses
-    from email.utils import formataddr
-    from email.utils import formatdate
-    from email.header import Header
-except ImportError:
-    # Prior to Python 2.5, the email module used different names:
-    from email.Charset import Charset
-    from email.Utils import make_msgid
-    from email.Utils import getaddresses
-    from email.Utils import formataddr
-    from email.Utils import formatdate
-    from email.Header import Header
-
-
-DEBUG = False
-
-ZEROS = '0' * 40
-LOGBEGIN = '- Log -----------------------------------------------------------------\n'
-LOGEND = '-----------------------------------------------------------------------\n'
-
-ADDR_HEADERS = set(['from', 'to', 'cc', 'bcc', 'reply-to', 'sender'])
-
-# It is assumed in many places that the encoding is uniformly UTF-8,
-# so changing these constants is unsupported.  But define them here
-# anyway, to make it easier to find (at least most of) the places
-# where the encoding is important.
-(ENCODING, CHARSET) = ('UTF-8', 'utf-8')
-
-
-REF_CREATED_SUBJECT_TEMPLATE = (
-    '%(emailprefix)s%(refname_type)s %(short_refname)s created'
-    ' (now %(newrev_short)s)'
-    )
-REF_UPDATED_SUBJECT_TEMPLATE = (
-    '%(emailprefix)s%(refname_type)s %(short_refname)s updated'
-    ' (%(oldrev_short)s -> %(newrev_short)s)'
-    )
-REF_DELETED_SUBJECT_TEMPLATE = (
-    '%(emailprefix)s%(refname_type)s %(short_refname)s deleted'
-    ' (was %(oldrev_short)s)'
-    )
-
-COMBINED_REFCHANGE_REVISION_SUBJECT_TEMPLATE = (
-    '%(emailprefix)s%(refname_type)s %(short_refname)s updated: %(oneline)s'
-    )
-
-REFCHANGE_HEADER_TEMPLATE = """\
-Date: %(send_date)s
-To: %(recipients)s
-Subject: %(subject)s
-MIME-Version: 1.0
-Content-Type: text/%(contenttype)s; charset=%(charset)s
-Content-Transfer-Encoding: 8bit
-Message-ID: %(msgid)s
-From: %(fromaddr)s
-Reply-To: %(reply_to)s
-Thread-Index: %(thread_index)s
-X-Git-Host: %(fqdn)s
-X-Git-Repo: %(repo_shortname)s
-X-Git-Refname: %(refname)s
-X-Git-Reftype: %(refname_type)s
-X-Git-Oldrev: %(oldrev)s
-X-Git-Newrev: %(newrev)s
-X-Git-NotificationType: ref_changed
-X-Git-Multimail-Version: %(multimail_version)s
-Auto-Submitted: auto-generated
-"""
-
-REFCHANGE_INTRO_TEMPLATE = """\
-This is an automated email from the git hooks/post-receive script.
-
-%(pusher)s pushed a change to %(refname_type)s %(short_refname)s
-in repository %(repo_shortname)s.
-
-"""
-
-
-FOOTER_TEMPLATE = """\
-
--- \n\
-To stop receiving notification emails like this one, please contact
-%(administrator)s.
-"""
-
-
-REWIND_ONLY_TEMPLATE = """\
-This update removed existing revisions from the reference, leaving the
-reference pointing at a previous point in the repository history.
-
- * -- * -- N   %(refname)s (%(newrev_short)s)
-            \\
-             O -- O -- O   (%(oldrev_short)s)
-
-Any revisions marked "omit" are not gone; other references still
-refer to them.  Any revisions marked "discard" are gone forever.
-"""
-
-
-NON_FF_TEMPLATE = """\
-This update added new revisions after undoing existing revisions.
-That is to say, some revisions that were in the old version of the
-%(refname_type)s are not in the new version.  This situation occurs
-when a user --force pushes a change and generates a repository
-containing something like this:
-
- * -- * -- B -- O -- O -- O   (%(oldrev_short)s)
-            \\
-             N -- N -- N   %(refname)s (%(newrev_short)s)
-
-You should already have received notification emails for all of the O
-revisions, and so the following emails describe only the N revisions
-from the common base, B.
-
-Any revisions marked "omit" are not gone; other references still
-refer to them.  Any revisions marked "discard" are gone forever.
-"""
-
-
-NO_NEW_REVISIONS_TEMPLATE = """\
-No new revisions were added by this update.
-"""
-
-
-DISCARDED_REVISIONS_TEMPLATE = """\
-This change permanently discards the following revisions:
-"""
-
-
-NO_DISCARDED_REVISIONS_TEMPLATE = """\
-The revisions that were on this %(refname_type)s are still contained in
-other references; therefore, this change does not discard any commits
-from the repository.
-"""
-
-
-NEW_REVISIONS_TEMPLATE = """\
-The %(tot)s revisions listed above as "new" are entirely new to this
-repository and will be described in separate emails.  The revisions
-listed as "add" were already present in the repository and have only
-been added to this reference.
-
-"""
-
-
-TAG_CREATED_TEMPLATE = """\
-      at %(newrev_short)-8s (%(newrev_type)s)
-"""
-
-
-TAG_UPDATED_TEMPLATE = """\
-*** WARNING: tag %(short_refname)s was modified! ***
-
-    from %(oldrev_short)-8s (%(oldrev_type)s)
-      to %(newrev_short)-8s (%(newrev_type)s)
-"""
-
-
-TAG_DELETED_TEMPLATE = """\
-*** WARNING: tag %(short_refname)s was deleted! ***
-
-"""
-
-
-# The template used in summary tables.  It looks best if this uses the
-# same alignment as TAG_CREATED_TEMPLATE and TAG_UPDATED_TEMPLATE.
-BRIEF_SUMMARY_TEMPLATE = """\
-%(action)8s %(rev_short)-8s %(text)s
-"""
-
-
-NON_COMMIT_UPDATE_TEMPLATE = """\
-This is an unusual reference change because the reference did not
-refer to a commit either before or after the change.  We do not know
-how to provide full information about this reference change.
-"""
-
-
-REVISION_HEADER_TEMPLATE = """\
-Date: %(send_date)s
-To: %(recipients)s
-Cc: %(cc_recipients)s
-Subject: %(emailprefix)s%(num)02d/%(tot)02d: %(oneline)s
-MIME-Version: 1.0
-Content-Type: text/%(contenttype)s; charset=%(charset)s
-Content-Transfer-Encoding: 8bit
-From: %(fromaddr)s
-Reply-To: %(reply_to)s
-In-Reply-To: %(reply_to_msgid)s
-References: %(reply_to_msgid)s
-Thread-Index: %(thread_index)s
-X-Git-Host: %(fqdn)s
-X-Git-Repo: %(repo_shortname)s
-X-Git-Refname: %(refname)s
-X-Git-Reftype: %(refname_type)s
-X-Git-Rev: %(rev)s
-X-Git-NotificationType: diff
-X-Git-Multimail-Version: %(multimail_version)s
-Auto-Submitted: auto-generated
-"""
-
-REVISION_INTRO_TEMPLATE = """\
-This is an automated email from the git hooks/post-receive script.
-
-%(pusher)s pushed a commit to %(refname_type)s %(short_refname)s
-in repository %(repo_shortname)s.
-
-"""
-
-LINK_TEXT_TEMPLATE = """\
-View the commit online:
-%(browse_url)s
-
-"""
-
-LINK_HTML_TEMPLATE = """\
-<p><a href="%(browse_url)s">View the commit online</a>.</p>
-"""
-
-
-REVISION_FOOTER_TEMPLATE = FOOTER_TEMPLATE
-
-
-# Combined, meaning refchange+revision email (for single-commit additions)
-COMBINED_HEADER_TEMPLATE = """\
-Date: %(send_date)s
-To: %(recipients)s
-Subject: %(subject)s
-MIME-Version: 1.0
-Content-Type: text/%(contenttype)s; charset=%(charset)s
-Content-Transfer-Encoding: 8bit
-Message-ID: %(msgid)s
-From: %(fromaddr)s
-Reply-To: %(reply_to)s
-X-Git-Host: %(fqdn)s
-X-Git-Repo: %(repo_shortname)s
-X-Git-Refname: %(refname)s
-X-Git-Reftype: %(refname_type)s
-X-Git-Oldrev: %(oldrev)s
-X-Git-Newrev: %(newrev)s
-X-Git-Rev: %(rev)s
-X-Git-NotificationType: ref_changed_plus_diff
-X-Git-Multimail-Version: %(multimail_version)s
-Auto-Submitted: auto-generated
-"""
-
-COMBINED_INTRO_TEMPLATE = """\
-This is an automated email from the git hooks/post-receive script.
-
-%(pusher)s pushed a commit to %(refname_type)s %(short_refname)s
-in repository %(repo_shortname)s.
-
-"""
-
-COMBINED_FOOTER_TEMPLATE = FOOTER_TEMPLATE
-
-
-class CommandError(Exception):
-    def __init__(self, cmd, retcode):
-        self.cmd = cmd
-        self.retcode = retcode
-        Exception.__init__(
-            self,
-            'Command "%s" failed with retcode %s' % (' '.join(cmd), retcode,)
-            )
-
-
-class ConfigurationException(Exception):
-    pass
-
-
-# The "git" program (this could be changed to include a full path):
-GIT_EXECUTABLE = 'git'
-
-
-# How "git" should be invoked (including global arguments), as a list
-# of words.  This variable is usually initialized automatically by
-# read_git_output() via choose_git_command(), but if a value is set
-# here then it will be used unconditionally.
-GIT_CMD = None
-
-
-def choose_git_command():
-    """Decide how to invoke git, and record the choice in GIT_CMD."""
-
-    global GIT_CMD
-
-    if GIT_CMD is None:
-        try:
-            # Check to see whether the "-c" option is accepted (it was
-            # only added in Git 1.7.2).  We don't actually use the
-            # output of "git --version", though if we needed more
-            # specific version information this would be the place to
-            # do it.
-            cmd = [GIT_EXECUTABLE, '-c', 'foo.bar=baz', '--version']
-            read_output(cmd)
-            GIT_CMD = [GIT_EXECUTABLE, '-c', 'i18n.logoutputencoding=%s' % (ENCODING,)]
-        except CommandError:
-            GIT_CMD = [GIT_EXECUTABLE]
-
-
-def read_git_output(args, input=None, keepends=False, **kw):
-    """Read the output of a Git command."""
-
-    if GIT_CMD is None:
-        choose_git_command()
-
-    return read_output(GIT_CMD + args, input=input, keepends=keepends, **kw)
-
-
-def read_output(cmd, input=None, keepends=False, **kw):
-    if input:
-        stdin = subprocess.PIPE
-        input = str_to_bytes(input)
-    else:
-        stdin = None
-    errors = 'strict'
-    if 'errors' in kw:
-        errors = kw['errors']
-        del kw['errors']
-    p = subprocess.Popen(
-        tuple(str_to_bytes(w) for w in cmd),
-        stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kw
-        )
-    (out, err) = p.communicate(input)
-    out = bytes_to_str(out, errors=errors)
-    retcode = p.wait()
-    if retcode:
-        raise CommandError(cmd, retcode)
-    if not keepends:
-        out = out.rstrip('\n\r')
-    return out
-
-
-def read_git_lines(args, keepends=False, **kw):
-    """Return the lines output by Git command.
-
-    Return as single lines, with newlines stripped off."""
-
-    return read_git_output(args, keepends=True, **kw).splitlines(keepends)
-
-
-def git_rev_list_ish(cmd, spec, args=None, **kw):
-    """Common functionality for invoking a 'git rev-list'-like command.
-
-    Parameters:
-      * cmd is the Git command to run, e.g., 'rev-list' or 'log'.
-      * spec is a list of revision arguments to pass to the named
-        command.  If None, this function returns an empty list.
-      * args is a list of extra arguments passed to the named command.
-      * All other keyword arguments (if any) are passed to the
-        underlying read_git_lines() function.
-
-    Return the output of the Git command in the form of a list, one
-    entry per output line.
-    """
-    if spec is None:
-        return []
-    if args is None:
-        args = []
-    args = [cmd, '--stdin'] + args
-    spec_stdin = ''.join(s + '\n' for s in spec)
-    return read_git_lines(args, input=spec_stdin, **kw)
-
-
-def git_rev_list(spec, **kw):
-    """Run 'git rev-list' with the given list of revision arguments.
-
-    See git_rev_list_ish() for parameter and return value
-    documentation.
-    """
-    return git_rev_list_ish('rev-list', spec, **kw)
-
-
-def git_log(spec, **kw):
-    """Run 'git log' with the given list of revision arguments.
-
-    See git_rev_list_ish() for parameter and return value
-    documentation.
-    """
-    return git_rev_list_ish('log', spec, **kw)
-
-
-def header_encode(text, header_name=None):
-    """Encode and line-wrap the value of an email header field."""
-
-    # Convert to unicode, if required.
-    if not isinstance(text, unicode):
-        text = unicode(text, 'utf-8')
-
-    if is_ascii(text):
-        charset = 'ascii'
-    else:
-        charset = 'utf-8'
-
-    return Header(text, header_name=header_name, charset=Charset(charset)).encode()
-
-
-def addr_header_encode(text, header_name=None):
-    """Encode and line-wrap the value of an email header field containing
-    email addresses."""
-
-    # Convert to unicode, if required.
-    if not isinstance(text, unicode):
-        text = unicode(text, 'utf-8')
-
-    text = ', '.join(
-        formataddr((header_encode(name), emailaddr))
-        for name, emailaddr in getaddresses([text])
-        )
-
-    if is_ascii(text):
-        charset = 'ascii'
-    else:
-        charset = 'utf-8'
-
-    return Header(text, header_name=header_name, charset=Charset(charset)).encode()
-
-
-class Config(object):
-    def __init__(self, section, git_config=None):
-        """Represent a section of the git configuration.
-
-        If git_config is specified, it is passed to "git config" in
-        the GIT_CONFIG environment variable, meaning that "git config"
-        will read the specified path rather than the Git default
-        config paths."""
-
-        self.section = section
-        if git_config:
-            self.env = os.environ.copy()
-            self.env['GIT_CONFIG'] = git_config
-        else:
-            self.env = None
-
-    @staticmethod
-    def _split(s):
-        """Split NUL-terminated values."""
-
-        words = s.split('\0')
-        assert words[-1] == ''
-        return words[:-1]
-
-    @staticmethod
-    def add_config_parameters(c):
-        """Add configuration parameters to Git.
-
-        c is either an str or a list of str, each element being of the
-        form 'var=val' or 'var', with the same syntax and meaning as
-        the argument of 'git -c var=val'.
-        """
-        if isinstance(c, str):
-            c = (c,)
-        parameters = os.environ.get('GIT_CONFIG_PARAMETERS', '')
-        if parameters:
-            parameters += ' '
-        # git expects GIT_CONFIG_PARAMETERS to be of the form
-        #    "'name1=value1' 'name2=value2' 'name3=value3'"
-        # including everything inside the double quotes (but not the double
-        # quotes themselves).  Spacing is critical.  Also, if a value contains
-        # a literal single quote that quote must be represented using the
-        # four character sequence: '\''
-        parameters += ' '.join("'" + x.replace("'", "'\\''") + "'" for x in c)
-        os.environ['GIT_CONFIG_PARAMETERS'] = parameters
-
-    def get(self, name, default=None):
-        try:
-            values = self._split(read_git_output(
-                ['config', '--get', '--null', '%s.%s' % (self.section, name)],
-                env=self.env, keepends=True,
-                ))
-            assert len(values) == 1
-            return values[0]
-        except CommandError:
-            return default
-
-    def get_bool(self, name, default=None):
-        try:
-            value = read_git_output(
-                ['config', '--get', '--bool', '%s.%s' % (self.section, name)],
-                env=self.env,
-                )
-        except CommandError:
-            return default
-        return value == 'true'
-
-    def get_all(self, name, default=None):
-        """Read a (possibly multivalued) setting from the configuration.
-
-        Return the result as a list of values, or default if the name
-        is unset."""
-
-        try:
-            return self._split(read_git_output(
-                ['config', '--get-all', '--null', '%s.%s' % (self.section, name)],
-                env=self.env, keepends=True,
-                ))
-        except CommandError:
-            t, e, traceback = sys.exc_info()
-            if e.retcode == 1:
-                # "the section or key is invalid"; i.e., there is no
-                # value for the specified key.
-                return default
-            else:
-                raise
-
-    def set(self, name, value):
-        read_git_output(
-            ['config', '%s.%s' % (self.section, name), value],
-            env=self.env,
-            )
-
-    def add(self, name, value):
-        read_git_output(
-            ['config', '--add', '%s.%s' % (self.section, name), value],
-            env=self.env,
-            )
-
-    def __contains__(self, name):
-        return self.get_all(name, default=None) is not None
-
-    # We don't use this method anymore internally, but keep it here in
-    # case somebody is calling it from their own code:
-    def has_key(self, name):
-        return name in self
-
-    def unset_all(self, name):
-        try:
-            read_git_output(
-                ['config', '--unset-all', '%s.%s' % (self.section, name)],
-                env=self.env,
-                )
-        except CommandError:
-            t, e, traceback = sys.exc_info()
-            if e.retcode == 5:
-                # The name doesn't exist, which is what we wanted anyway...
-                pass
-            else:
-                raise
-
-    def set_recipients(self, name, value):
-        self.unset_all(name)
-        for pair in getaddresses([value]):
-            self.add(name, formataddr(pair))
-
-
-def generate_summaries(*log_args):
-    """Generate a brief summary for each revision requested.
-
-    log_args are strings that will be passed directly to "git log" as
-    revision selectors.  Iterate over (sha1_short, subject) for each
-    commit specified by log_args (subject is the first line of the
-    commit message as a string without EOLs)."""
-
-    cmd = [
-        'log', '--abbrev', '--format=%h %s',
-        ] + list(log_args) + ['--']
-    for line in read_git_lines(cmd):
-        yield tuple(line.split(' ', 1))
-
-
-def limit_lines(lines, max_lines):
-    for (index, line) in enumerate(lines):
-        if index < max_lines:
-            yield line
-
-    if index >= max_lines:
-        yield '... %d lines suppressed ...\n' % (index + 1 - max_lines,)
-
-
-def limit_linelength(lines, max_linelength):
-    for line in lines:
-        # Don't forget that lines always include a trailing newline.
-        if len(line) > max_linelength + 1:
-            line = line[:max_linelength - 7] + ' [...]\n'
-        yield line
-
-
-class CommitSet(object):
-    """A (constant) set of object names.
-
-    The set should be initialized with full SHA1 object names.  The
-    __contains__() method returns True iff its argument is an
-    abbreviation of any the names in the set."""
-
-    def __init__(self, names):
-        self._names = sorted(names)
-
-    def __len__(self):
-        return len(self._names)
-
-    def __contains__(self, sha1_abbrev):
-        """Return True iff this set contains sha1_abbrev (which might be abbreviated)."""
-
-        i = bisect.bisect_left(self._names, sha1_abbrev)
-        return i < len(self) and self._names[i].startswith(sha1_abbrev)
-
-
-class GitObject(object):
-    def __init__(self, sha1, type=None):
-        if sha1 == ZEROS:
-            self.sha1 = self.type = self.commit_sha1 = None
-        else:
-            self.sha1 = sha1
-            self.type = type or read_git_output(['cat-file', '-t', self.sha1])
-
-            if self.type == 'commit':
-                self.commit_sha1 = self.sha1
-            elif self.type == 'tag':
-                try:
-                    self.commit_sha1 = read_git_output(
-                        ['rev-parse', '--verify', '%s^0' % (self.sha1,)]
-                        )
-                except CommandError:
-                    # Cannot deref tag to determine commit_sha1
-                    self.commit_sha1 = None
-            else:
-                self.commit_sha1 = None
-
-        self.short = read_git_output(['rev-parse', '--short', sha1])
-
-    def get_summary(self):
-        """Return (sha1_short, subject) for this commit."""
-
-        if not self.sha1:
-            raise ValueError('Empty commit has no summary')
-
-        return next(iter(generate_summaries('--no-walk', self.sha1)))
-
-    def __eq__(self, other):
-        return isinstance(other, GitObject) and self.sha1 == other.sha1
-
-    def __ne__(self, other):
-        return not self == other
-
-    def __hash__(self):
-        return hash(self.sha1)
-
-    def __nonzero__(self):
-        return bool(self.sha1)
-
-    def __bool__(self):
-        """Python 2 backward compatibility"""
-        return self.__nonzero__()
-
-    def __str__(self):
-        return self.sha1 or ZEROS
-
-
-class Change(object):
-    """A Change that has been made to the Git repository.
-
-    Abstract class from which both Revisions and ReferenceChanges are
-    derived.  A Change knows how to generate a notification email
-    describing itself."""
-
-    def __init__(self, environment):
-        self.environment = environment
-        self._values = None
-        self._contains_html_diff = False
-
-    def _contains_diff(self):
-        # We do contain a diff, should it be rendered in HTML?
-        if self.environment.commit_email_format == "html":
-            self._contains_html_diff = True
-
-    def _compute_values(self):
-        """Return a dictionary {keyword: expansion} for this Change.
-
-        Derived classes overload this method to add more entries to
-        the return value.  This method is used internally by
-        get_values().  The return value should always be a new
-        dictionary."""
-
-        values = self.environment.get_values()
-        fromaddr = self.environment.get_fromaddr(change=self)
-        if fromaddr is not None:
-            values['fromaddr'] = fromaddr
-        values['multimail_version'] = get_version()
-        return values
-
-    # Aliases usable in template strings. Tuple of pairs (destination,
-    # source).
-    VALUES_ALIAS = (
-        ("id", "newrev"),
-        )
-
-    def get_values(self, **extra_values):
-        """Return a dictionary {keyword: expansion} for this Change.
-
-        Return a dictionary mapping keywords to the values that they
-        should be expanded to for this Change (used when interpolating
-        template strings).  If any keyword arguments are supplied, add
-        those to the return value as well.  The return value is always
-        a new dictionary."""
-
-        if self._values is None:
-            self._values = self._compute_values()
-
-        values = self._values.copy()
-        if extra_values:
-            values.update(extra_values)
-
-        for alias, val in self.VALUES_ALIAS:
-            values[alias] = values[val]
-        return values
-
-    def expand(self, template, **extra_values):
-        """Expand template.
-
-        Expand the template (which should be a string) using string
-        interpolation of the values for this Change.  If any keyword
-        arguments are provided, also include those in the keywords
-        available for interpolation."""
-
-        return template % self.get_values(**extra_values)
-
-    def expand_lines(self, template, html_escape_val=False, **extra_values):
-        """Break template into lines and expand each line."""
-
-        values = self.get_values(**extra_values)
-        if html_escape_val:
-            for k in values:
-                if is_string(values[k]):
-                    values[k] = html_escape(values[k])
-        for line in template.splitlines(True):
-            yield line % values
-
-    def expand_header_lines(self, template, **extra_values):
-        """Break template into lines and expand each line as an RFC 2822 header.
-
-        Encode values and split up lines that are too long.  Silently
-        skip lines that contain references to unknown variables."""
-
-        values = self.get_values(**extra_values)
-        if self._contains_html_diff:
-            self._content_type = 'html'
-        else:
-            self._content_type = 'plain'
-        values['contenttype'] = self._content_type
-
-        for line in template.splitlines():
-            (name, value) = line.split(': ', 1)
-
-            try:
-                value = value % values
-            except KeyError:
-                t, e, traceback = sys.exc_info()
-                if DEBUG:
-                    self.environment.log_warning(
-                        'Warning: unknown variable %r in the following line; line skipped:\n'
-                        '    %s\n'
-                        % (e.args[0], line,)
-                        )
-            else:
-                if name.lower() in ADDR_HEADERS:
-                    value = addr_header_encode(value, name)
-                else:
-                    value = header_encode(value, name)
-                for splitline in ('%s: %s\n' % (name, value)).splitlines(True):
-                    yield splitline
-
-    def generate_email_header(self):
-        """Generate the RFC 2822 email headers for this Change, a line at a time.
-
-        The output should not include the trailing blank line."""
-
-        raise NotImplementedError()
-
-    def generate_browse_link(self, base_url):
-        """Generate a link to an online repository browser."""
-        return iter(())
-
-    def generate_email_intro(self, html_escape_val=False):
-        """Generate the email intro for this Change, a line at a time.
-
-        The output will be used as the standard boilerplate at the top
-        of the email body."""
-
-        raise NotImplementedError()
-
-    def generate_email_body(self, push):
-        """Generate the main part of the email body, a line at a time.
-
-        The text in the body might be truncated after a specified
-        number of lines (see multimailhook.emailmaxlines)."""
-
-        raise NotImplementedError()
-
-    def generate_email_footer(self, html_escape_val):
-        """Generate the footer of the email, a line at a time.
-
-        The footer is always included, irrespective of
-        multimailhook.emailmaxlines."""
-
-        raise NotImplementedError()
-
-    def _wrap_for_html(self, lines):
-        """Wrap the lines in HTML <pre> tag when using HTML format.
-
-        Escape special HTML characters and add <pre> and </pre> tags around
-        the given lines if we should be generating HTML as indicated by
-        self._contains_html_diff being set to true.
-        """
-        if self._contains_html_diff:
-            yield "<pre style='margin:0'>\n"
-
-            for line in lines:
-                yield html_escape(line)
-
-            yield '</pre>\n'
-        else:
-            for line in lines:
-                yield line
-
-    def generate_email(self, push, body_filter=None, extra_header_values={}):
-        """Generate an email describing this change.
-
-        Iterate over the lines (including the header lines) of an
-        email describing this change.  If body_filter is not None,
-        then use it to filter the lines that are intended for the
-        email body.
-
-        The extra_header_values field is received as a dict and not as
-        **kwargs, to allow passing other keyword arguments in the
-        future (e.g. passing extra values to generate_email_intro()"""
-
-        for line in self.generate_email_header(**extra_header_values):
-            yield line
-        yield '\n'
-        html_escape_val = (self.environment.html_in_intro and
-                           self._contains_html_diff)
-        intro = self.generate_email_intro(html_escape_val)
-        if not self.environment.html_in_intro:
-            intro = self._wrap_for_html(intro)
-        for line in intro:
-            yield line
-
-        if self.environment.commitBrowseURL:
-            for line in self.generate_browse_link(self.environment.commitBrowseURL):
-                yield line
-
-        body = self.generate_email_body(push)
-        if body_filter is not None:
-            body = body_filter(body)
-
-        diff_started = False
-        if self._contains_html_diff:
-            # "white-space: pre" is the default, but we need to
-            # specify it again in case the message is viewed in a
-            # webmail which wraps it in an element setting white-space
-            # to something else (Zimbra does this and sets
-            # white-space: pre-line).
-            yield '<pre style="white-space: pre; background: #F8F8F8">'
-        for line in body:
-            if self._contains_html_diff:
-                # This is very, very naive. It would be much better to really
-                # parse the diff, i.e. look at how many lines do we have in
-                # the hunk headers instead of blindly highlighting everything
-                # that looks like it might be part of a diff.
-                bgcolor = ''
-                fgcolor = ''
-                if line.startswith('--- a/'):
-                    diff_started = True
-                    bgcolor = 'e0e0ff'
-                elif line.startswith('diff ') or line.startswith('index '):
-                    diff_started = True
-                    fgcolor = '808080'
-                elif diff_started:
-                    if line.startswith('+++ '):
-                        bgcolor = 'e0e0ff'
-                    elif line.startswith('@@'):
-                        bgcolor = 'e0e0e0'
-                    elif line.startswith('+'):
-                        bgcolor = 'e0ffe0'
-                    elif line.startswith('-'):
-                        bgcolor = 'ffe0e0'
-                elif line.startswith('commit '):
-                    fgcolor = '808000'
-                elif line.startswith('    '):
-                    fgcolor = '404040'
-
-                # Chop the trailing LF, we don't want it inside <pre>.
-                line = html_escape(line[:-1])
-
-                if bgcolor or fgcolor:
-                    style = 'display:block; white-space:pre;'
-                    if bgcolor:
-                        style += 'background:#' + bgcolor + ';'
-                    if fgcolor:
-                        style += 'color:#' + fgcolor + ';'
-                    # Use a <span style='display:block> to color the
-                    # whole line. The newline must be inside the span
-                    # to display properly both in Firefox and in
-                    # text-based browser.
-                    line = "<span style='%s'>%s\n</span>" % (style, line)
-                else:
-                    line = line + '\n'
-
-            yield line
-        if self._contains_html_diff:
-            yield '</pre>'
-        html_escape_val = (self.environment.html_in_footer and
-                           self._contains_html_diff)
-        footer = self.generate_email_footer(html_escape_val)
-        if not self.environment.html_in_footer:
-            footer = self._wrap_for_html(footer)
-        for line in footer:
-            yield line
-
-    def get_specific_fromaddr(self):
-        """For kinds of Changes which specify it, return the kind-specific
-        From address to use."""
-        return None
-
-
-class Revision(Change):
-    """A Change consisting of a single git commit."""
-
-    CC_RE = re.compile(r'^\s*C[Cc]:\s*(?P<to>[^#]+@[^\s#]*)\s*(#.*)?$')
-
-    def __init__(self, reference_change, rev, num, tot):
-        Change.__init__(self, reference_change.environment)
-        self.reference_change = reference_change
-        self.rev = rev
-        self.change_type = self.reference_change.change_type
-        self.refname = self.reference_change.refname
-        self.num = num
-        self.tot = tot
-        self.author = read_git_output(['log', '--no-walk', '--format=%aN <%aE>', self.rev.sha1])
-        self.recipients = self.environment.get_revision_recipients(self)
-
-        # -s is short for --no-patch, but -s works on older git's (e.g. 1.7)
-        self.parents = read_git_lines(['show', '-s', '--format=%P',
-                                      self.rev.sha1])[0].split()
-
-        self.cc_recipients = ''
-        if self.environment.get_scancommitforcc():
-            self.cc_recipients = ', '.join(to.strip() for to in self._cc_recipients())
-            if self.cc_recipients:
-                self.environment.log_msg(
-                    'Add %s to CC for %s' % (self.cc_recipients, self.rev.sha1))
-
-    def _cc_recipients(self):
-        cc_recipients = []
-        message = read_git_output(['log', '--no-walk', '--format=%b', self.rev.sha1])
-        lines = message.strip().split('\n')
-        for line in lines:
-            m = re.match(self.CC_RE, line)
-            if m:
-                cc_recipients.append(m.group('to'))
-
-        return cc_recipients
-
-    def _compute_values(self):
-        values = Change._compute_values(self)
-
-        oneline = read_git_output(
-            ['log', '--format=%s', '--no-walk', self.rev.sha1]
-            )
-
-        max_subject_length = self.environment.get_max_subject_length()
-        if max_subject_length > 0 and len(oneline) > max_subject_length:
-            oneline = oneline[:max_subject_length - 6] + ' [...]'
-
-        values['rev'] = self.rev.sha1
-        values['parents'] = ' '.join(self.parents)
-        values['rev_short'] = self.rev.short
-        values['change_type'] = self.change_type
-        values['refname'] = self.refname
-        values['newrev'] = self.rev.sha1
-        values['short_refname'] = self.reference_change.short_refname
-        values['refname_type'] = self.reference_change.refname_type
-        values['reply_to_msgid'] = self.reference_change.msgid
-        values['thread_index'] = self.reference_change.thread_index
-        values['num'] = self.num
-        values['tot'] = self.tot
-        values['recipients'] = self.recipients
-        if self.cc_recipients:
-            values['cc_recipients'] = self.cc_recipients
-        values['oneline'] = oneline
-        values['author'] = self.author
-
-        reply_to = self.environment.get_reply_to_commit(self)
-        if reply_to:
-            values['reply_to'] = reply_to
-
-        return values
-
-    def generate_email_header(self, **extra_values):
-        for line in self.expand_header_lines(
-                REVISION_HEADER_TEMPLATE, **extra_values
-                ):
-            yield line
-
-    def generate_browse_link(self, base_url):
-        if '%(' not in base_url:
-            base_url += '%(id)s'
-        url = "".join(self.expand_lines(base_url))
-        if self._content_type == 'html':
-            for line in self.expand_lines(LINK_HTML_TEMPLATE,
-                                          html_escape_val=True,
-                                          browse_url=url):
-                yield line
-        elif self._content_type == 'plain':
-            for line in self.expand_lines(LINK_TEXT_TEMPLATE,
-                                          html_escape_val=False,
-                                          browse_url=url):
-                yield line
-        else:
-            raise NotImplementedError("Content-type %s unsupported. Please report it as a bug.")
-
-    def generate_email_intro(self, html_escape_val=False):
-        for line in self.expand_lines(REVISION_INTRO_TEMPLATE,
-                                      html_escape_val=html_escape_val):
-            yield line
-
-    def generate_email_body(self, push):
-        """Show this revision."""
-
-        for line in read_git_lines(
-                ['log'] + self.environment.commitlogopts + ['-1', self.rev.sha1],
-                keepends=True,
-                errors='replace'):
-            if line.startswith('Date:   ') and self.environment.date_substitute:
-                yield self.environment.date_substitute + line[len('Date:   '):]
-            else:
-                yield line
-
-    def generate_email_footer(self, html_escape_val):
-        return self.expand_lines(REVISION_FOOTER_TEMPLATE,
-                                 html_escape_val=html_escape_val)
-
-    def generate_email(self, push, body_filter=None, extra_header_values={}):
-        self._contains_diff()
-        return Change.generate_email(self, push, body_filter, extra_header_values)
-
-    def get_specific_fromaddr(self):
-        return self.environment.from_commit
-
-
-class ReferenceChange(Change):
-    """A Change to a Git reference.
-
-    An abstract class representing a create, update, or delete of a
-    Git reference.  Derived classes handle specific types of reference
-    (e.g., tags vs. branches).  These classes generate the main
-    reference change email summarizing the reference change and
-    whether it caused any any commits to be added or removed.
-
-    ReferenceChange objects are usually created using the static
-    create() method, which has the logic to decide which derived class
-    to instantiate."""
-
-    REF_RE = re.compile(r'^refs\/(?P<area>[^\/]+)\/(?P<shortname>.*)$')
-
-    @staticmethod
-    def create(environment, oldrev, newrev, refname):
-        """Return a ReferenceChange object representing the change.
-
-        Return an object that represents the type of change that is being
-        made. oldrev and newrev should be SHA1s or ZEROS."""
-
-        old = GitObject(oldrev)
-        new = GitObject(newrev)
-        rev = new or old
-
-        # The revision type tells us what type the commit is, combined with
-        # the location of the ref we can decide between
-        #  - working branch
-        #  - tracking branch
-        #  - unannotated tag
-        #  - annotated tag
-        m = ReferenceChange.REF_RE.match(refname)
-        if m:
-            area = m.group('area')
-            short_refname = m.group('shortname')
-        else:
-            area = ''
-            short_refname = refname
-
-        if rev.type == 'tag':
-            # Annotated tag:
-            klass = AnnotatedTagChange
-        elif rev.type == 'commit':
-            if area == 'tags':
-                # Non-annotated tag:
-                klass = NonAnnotatedTagChange
-            elif area == 'heads':
-                # Branch:
-                klass = BranchChange
-            elif area == 'remotes':
-                # Tracking branch:
-                environment.log_warning(
-                    '*** Push-update of tracking branch %r\n'
-                    '***  - incomplete email generated.'
-                    % (refname,)
-                    )
-                klass = OtherReferenceChange
-            else:
-                # Some other reference namespace:
-                environment.log_warning(
-                    '*** Push-update of strange reference %r\n'
-                    '***  - incomplete email generated.'
-                    % (refname,)
-                    )
-                klass = OtherReferenceChange
-        else:
-            # Anything else (is there anything else?)
-            environment.log_warning(
-                '*** Unknown type of update to %r (%s)\n'
-                '***  - incomplete email generated.'
-                % (refname, rev.type,)
-                )
-            klass = OtherReferenceChange
-
-        return klass(
-            environment,
-            refname=refname, short_refname=short_refname,
-            old=old, new=new, rev=rev,
-            )
-
-    @staticmethod
-    def make_thread_index():
-        """Return a string appropriate for the Thread-Index header,
-        needed by MS Outlook to get threading right.
-
-        The format is (base64-encoded):
-        - 1 byte must be 1
-        - 5 bytes encode a date (hardcoded here)
-        - 16 bytes for a globally unique identifier
-
-        FIXME: Unfortunately, even with the Thread-Index field, MS
-        Outlook doesn't seem to do the threading reliably (see
-        https://github.com/git-multimail/git-multimail/pull/194).
-        """
-        thread_index = b'\x01\x00\x00\x12\x34\x56' + uuid.uuid4().bytes
-        return base64.standard_b64encode(thread_index).decode('ascii')
-
-    def __init__(self, environment, refname, short_refname, old, new, rev):
-        Change.__init__(self, environment)
-        self.change_type = {
-            (False, True): 'create',
-            (True, True): 'update',
-            (True, False): 'delete',
-            }[bool(old), bool(new)]
-        self.refname = refname
-        self.short_refname = short_refname
-        self.old = old
-        self.new = new
-        self.rev = rev
-        self.msgid = make_msgid()
-        self.thread_index = self.make_thread_index()
-        self.diffopts = environment.diffopts
-        self.graphopts = environment.graphopts
-        self.logopts = environment.logopts
-        self.commitlogopts = environment.commitlogopts
-        self.showgraph = environment.refchange_showgraph
-        self.showlog = environment.refchange_showlog
-
-        self.header_template = REFCHANGE_HEADER_TEMPLATE
-        self.intro_template = REFCHANGE_INTRO_TEMPLATE
-        self.footer_template = FOOTER_TEMPLATE
-
-    def _compute_values(self):
-        values = Change._compute_values(self)
-
-        values['change_type'] = self.change_type
-        values['refname_type'] = self.refname_type
-        values['refname'] = self.refname
-        values['short_refname'] = self.short_refname
-        values['msgid'] = self.msgid
-        values['thread_index'] = self.thread_index
-        values['recipients'] = self.recipients
-        values['oldrev'] = str(self.old)
-        values['oldrev_short'] = self.old.short
-        values['newrev'] = str(self.new)
-        values['newrev_short'] = self.new.short
-
-        if self.old:
-            values['oldrev_type'] = self.old.type
-        if self.new:
-            values['newrev_type'] = self.new.type
-
-        reply_to = self.environment.get_reply_to_refchange(self)
-        if reply_to:
-            values['reply_to'] = reply_to
-
-        return values
-
-    def send_single_combined_email(self, known_added_sha1s):
-        """Determine if a combined refchange/revision email should be sent
-
-        If there is only a single new (non-merge) commit added by a
-        change, it is useful to combine the ReferenceChange and
-        Revision emails into one.  In such a case, return the single
-        revision; otherwise, return None.
-
-        This method is overridden in BranchChange."""
-
-        return None
-
-    def generate_combined_email(self, push, revision, body_filter=None, extra_header_values={}):
-        """Generate an email describing this change AND specified revision.
-
-        Iterate over the lines (including the header lines) of an
-        email describing this change.  If body_filter is not None,
-        then use it to filter the lines that are intended for the
-        email body.
-
-        The extra_header_values field is received as a dict and not as
-        **kwargs, to allow passing other keyword arguments in the
-        future (e.g. passing extra values to generate_email_intro()
-
-        This method is overridden in BranchChange."""
-
-        raise NotImplementedError
-
-    def get_subject(self):
-        template = {
-            'create': REF_CREATED_SUBJECT_TEMPLATE,
-            'update': REF_UPDATED_SUBJECT_TEMPLATE,
-            'delete': REF_DELETED_SUBJECT_TEMPLATE,
-            }[self.change_type]
-        return self.expand(template)
-
-    def generate_email_header(self, **extra_values):
-        if 'subject' not in extra_values:
-            extra_values['subject'] = self.get_subject()
-
-        for line in self.expand_header_lines(
-                self.header_template, **extra_values
-                ):
-            yield line
-
-    def generate_email_intro(self, html_escape_val=False):
-        for line in self.expand_lines(self.intro_template,
-                                      html_escape_val=html_escape_val):
-            yield line
-
-    def generate_email_body(self, push):
-        """Call the appropriate body-generation routine.
-
-        Call one of generate_create_summary() /
-        generate_update_summary() / generate_delete_summary()."""
-
-        change_summary = {
-            'create': self.generate_create_summary,
-            'delete': self.generate_delete_summary,
-            'update': self.generate_update_summary,
-            }[self.change_type](push)
-        for line in change_summary:
-            yield line
-
-        for line in self.generate_revision_change_summary(push):
-            yield line
-
-    def generate_email_footer(self, html_escape_val):
-        return self.expand_lines(self.footer_template,
-                                 html_escape_val=html_escape_val)
-
-    def generate_revision_change_graph(self, push):
-        if self.showgraph:
-            args = ['--graph'] + self.graphopts
-            for newold in ('new', 'old'):
-                has_newold = False
-                spec = push.get_commits_spec(newold, self)
-                for line in git_log(spec, args=args, keepends=True):
-                    if not has_newold:
-                        has_newold = True
-                        yield '\n'
-                        yield 'Graph of %s commits:\n\n' % (
-                            {'new': 'new', 'old': 'discarded'}[newold],)
-                    yield '  ' + line
-                if has_newold:
-                    yield '\n'
-
-    def generate_revision_change_log(self, new_commits_list):
-        if self.showlog:
-            yield '\n'
-            yield 'Detailed log of new commits:\n\n'
-            for line in read_git_lines(
-                    ['log', '--no-walk'] +
-                    self.logopts +
-                    new_commits_list +
-                    ['--'],
-                    keepends=True,
-                    ):
-                yield line
-
-    def generate_new_revision_summary(self, tot, new_commits_list, push):
-        for line in self.expand_lines(NEW_REVISIONS_TEMPLATE, tot=tot):
-            yield line
-        for line in self.generate_revision_change_graph(push):
-            yield line
-        for line in self.generate_revision_change_log(new_commits_list):
-            yield line
-
-    def generate_revision_change_summary(self, push):
-        """Generate a summary of the revisions added/removed by this change."""
-
-        if self.new.commit_sha1 and not self.old.commit_sha1:
-            # A new reference was created.  List the new revisions
-            # brought by the new reference (i.e., those revisions that
-            # were not in the repository before this reference
-            # change).
-            sha1s = list(push.get_new_commits(self))
-            sha1s.reverse()
-            tot = len(sha1s)
-            new_revisions = [
-                Revision(self, GitObject(sha1), num=i + 1, tot=tot)
-                for (i, sha1) in enumerate(sha1s)
-                ]
-
-            if new_revisions:
-                yield self.expand('This %(refname_type)s includes the following new commits:\n')
-                yield '\n'
-                for r in new_revisions:
-                    (sha1, subject) = r.rev.get_summary()
-                    yield r.expand(
-                        BRIEF_SUMMARY_TEMPLATE, action='new', text=subject,
-                        )
-                yield '\n'
-                for line in self.generate_new_revision_summary(
-                        tot, [r.rev.sha1 for r in new_revisions], push):
-                    yield line
-            else:
-                for line in self.expand_lines(NO_NEW_REVISIONS_TEMPLATE):
-                    yield line
-
-        elif self.new.commit_sha1 and self.old.commit_sha1:
-            # A reference was changed to point at a different commit.
-            # List the revisions that were removed and/or added *from
-            # that reference* by this reference change, along with a
-            # diff between the trees for its old and new values.
-
-            # List of the revisions that were added to the branch by
-            # this update.  Note this list can include revisions that
-            # have already had notification emails; we want such
-            # revisions in the summary even though we will not send
-            # new notification emails for them.
-            adds = list(generate_summaries(
-                '--topo-order', '--reverse', '%s..%s'
-                % (self.old.commit_sha1, self.new.commit_sha1,)
-                ))
-
-            # List of the revisions that were removed from the branch
-            # by this update.  This will be empty except for
-            # non-fast-forward updates.
-            discards = list(generate_summaries(
-                '%s..%s' % (self.new.commit_sha1, self.old.commit_sha1,)
-                ))
-
-            if adds:
-                new_commits_list = push.get_new_commits(self)
-            else:
-                new_commits_list = []
-            new_commits = CommitSet(new_commits_list)
-
-            if discards:
-                discarded_commits = CommitSet(push.get_discarded_commits(self))
-            else:
-                discarded_commits = CommitSet([])
-
-            if discards and adds:
-                for (sha1, subject) in discards:
-                    if sha1 in discarded_commits:
-                        action = 'discard'
-                    else:
-                        action = 'omit'
-                    yield self.expand(
-                        BRIEF_SUMMARY_TEMPLATE, action=action,
-                        rev_short=sha1, text=subject,
-                        )
-                for (sha1, subject) in adds:
-                    if sha1 in new_commits:
-                        action = 'new'
-                    else:
-                        action = 'add'
-                    yield self.expand(
-                        BRIEF_SUMMARY_TEMPLATE, action=action,
-                        rev_short=sha1, text=subject,
-                        )
-                yield '\n'
-                for line in self.expand_lines(NON_FF_TEMPLATE):
-                    yield line
-
-            elif discards:
-                for (sha1, subject) in discards:
-                    if sha1 in discarded_commits:
-                        action = 'discard'
-                    else:
-                        action = 'omit'
-                    yield self.expand(
-                        BRIEF_SUMMARY_TEMPLATE, action=action,
-                        rev_short=sha1, text=subject,
-                        )
-                yield '\n'
-                for line in self.expand_lines(REWIND_ONLY_TEMPLATE):
-                    yield line
-
-            elif adds:
-                (sha1, subject) = self.old.get_summary()
-                yield self.expand(
-                    BRIEF_SUMMARY_TEMPLATE, action='from',
-                    rev_short=sha1, text=subject,
-                    )
-                for (sha1, subject) in adds:
-                    if sha1 in new_commits:
-                        action = 'new'
-                    else:
-                        action = 'add'
-                    yield self.expand(
-                        BRIEF_SUMMARY_TEMPLATE, action=action,
-                        rev_short=sha1, text=subject,
-                        )
-
-            yield '\n'
-
-            if new_commits:
-                for line in self.generate_new_revision_summary(
-                        len(new_commits), new_commits_list, push):
-                    yield line
-            else:
-                for line in self.expand_lines(NO_NEW_REVISIONS_TEMPLATE):
-                    yield line
-                for line in self.generate_revision_change_graph(push):
-                    yield line
-
-            # The diffstat is shown from the old revision to the new
-            # revision.  This is to show the truth of what happened in
-            # this change.  There's no point showing the stat from the
-            # base to the new revision because the base is effectively a
-            # random revision at this point - the user will be interested
-            # in what this revision changed - including the undoing of
-            # previous revisions in the case of non-fast-forward updates.
-            yield '\n'
-            yield 'Summary of changes:\n'
-            for line in read_git_lines(
-                    ['diff-tree'] +
-                    self.diffopts +
-                    ['%s..%s' % (self.old.commit_sha1, self.new.commit_sha1,)],
-                    keepends=True,
-                    ):
-                yield line
-
-        elif self.old.commit_sha1 and not self.new.commit_sha1:
-            # A reference was deleted.  List the revisions that were
-            # removed from the repository by this reference change.
-
-            sha1s = list(push.get_discarded_commits(self))
-            tot = len(sha1s)
-            discarded_revisions = [
-                Revision(self, GitObject(sha1), num=i + 1, tot=tot)
-                for (i, sha1) in enumerate(sha1s)
-                ]
-
-            if discarded_revisions:
-                for line in self.expand_lines(DISCARDED_REVISIONS_TEMPLATE):
-                    yield line
-                yield '\n'
-                for r in discarded_revisions:
-                    (sha1, subject) = r.rev.get_summary()
-                    yield r.expand(
-                        BRIEF_SUMMARY_TEMPLATE, action='discard', text=subject,
-                        )
-                for line in self.generate_revision_change_graph(push):
-                    yield line
-            else:
-                for line in self.expand_lines(NO_DISCARDED_REVISIONS_TEMPLATE):
-                    yield line
-
-        elif not self.old.commit_sha1 and not self.new.commit_sha1:
-            for line in self.expand_lines(NON_COMMIT_UPDATE_TEMPLATE):
-                yield line
-
-    def generate_create_summary(self, push):
-        """Called for the creation of a reference."""
-
-        # This is a new reference and so oldrev is not valid
-        (sha1, subject) = self.new.get_summary()
-        yield self.expand(
-            BRIEF_SUMMARY_TEMPLATE, action='at',
-            rev_short=sha1, text=subject,
-            )
-        yield '\n'
-
-    def generate_update_summary(self, push):
-        """Called for the change of a pre-existing branch."""
-
-        return iter([])
-
-    def generate_delete_summary(self, push):
-        """Called for the deletion of any type of reference."""
-
-        (sha1, subject) = self.old.get_summary()
-        yield self.expand(
-            BRIEF_SUMMARY_TEMPLATE, action='was',
-            rev_short=sha1, text=subject,
-            )
-        yield '\n'
-
-    def get_specific_fromaddr(self):
-        return self.environment.from_refchange
-
-
-class BranchChange(ReferenceChange):
-    refname_type = 'branch'
-
-    def __init__(self, environment, refname, short_refname, old, new, rev):
-        ReferenceChange.__init__(
-            self, environment,
-            refname=refname, short_refname=short_refname,
-            old=old, new=new, rev=rev,
-            )
-        self.recipients = environment.get_refchange_recipients(self)
-        self._single_revision = None
-
-    def send_single_combined_email(self, known_added_sha1s):
-        if not self.environment.combine_when_single_commit:
-            return None
-
-        # In the sadly-all-too-frequent usecase of people pushing only
-        # one of their commits at a time to a repository, users feel
-        # the reference change summary emails are noise rather than
-        # important signal.  This is because, in this particular
-        # usecase, there is a reference change summary email for each
-        # new commit, and all these summaries do is point out that
-        # there is one new commit (which can readily be inferred by
-        # the existence of the individual revision email that is also
-        # sent).  In such cases, our users prefer there to be a combined
-        # reference change summary/new revision email.
-        #
-        # So, if the change is an update and it doesn't discard any
-        # commits, and it adds exactly one non-merge commit (gerrit
-        # forces a workflow where every commit is individually merged
-        # and the git-multimail hook fired off for just this one
-        # change), then we send a combined refchange/revision email.
-        try:
-            # If this change is a reference update that doesn't discard
-            # any commits...
-            if self.change_type != 'update':
-                return None
-
-            if read_git_lines(
-                    ['merge-base', self.old.sha1, self.new.sha1]
-                    ) != [self.old.sha1]:
-                return None
-
-            # Check if this update introduced exactly one non-merge
-            # commit:
-
-            def split_line(line):
-                """Split line into (sha1, [parent,...])."""
-
-                words = line.split()
-                return (words[0], words[1:])
-
-            # Get the new commits introduced by the push as a list of
-            # (sha1, [parent,...])
-            new_commits = [
-                split_line(line)
-                for line in read_git_lines(
-                    [
-                        'log', '-3', '--format=%H %P',
-                        '%s..%s' % (self.old.sha1, self.new.sha1),
-                        ]
-                    )
-                ]
-
-            if not new_commits:
-                return None
-
-            # If the newest commit is a merge, save it for a later check
-            # but otherwise ignore it
-            merge = None
-            tot = len(new_commits)
-            if len(new_commits[0][1]) > 1:
-                merge = new_commits[0][0]
-                del new_commits[0]
-
-            # Our primary check: we can't combine if more than one commit
-            # is introduced.  We also currently only combine if the new
-            # commit is a non-merge commit, though it may make sense to
-            # combine if it is a merge as well.
-            if not (
-                    len(new_commits) == 1 and
-                    len(new_commits[0][1]) == 1 and
-                    new_commits[0][0] in known_added_sha1s
-                    ):
-                return None
-
-            # We do not want to combine revision and refchange emails if
-            # those go to separate locations.
-            rev = Revision(self, GitObject(new_commits[0][0]), 1, tot)
-            if rev.recipients != self.recipients:
-                return None
-
-            # We ignored the newest commit if it was just a merge of the one
-            # commit being introduced.  But we don't want to ignore that
-            # merge commit it it involved conflict resolutions.  Check that.
-            if merge and merge != read_git_output(['diff-tree', '--cc', merge]):
-                return None
-
-            # We can combine the refchange and one new revision emails
-            # into one.  Return the Revision that a combined email should
-            # be sent about.
-            return rev
-        except CommandError:
-            # Cannot determine number of commits in old..new or new..old;
-            # don't combine reference/revision emails:
-            return None
-
-    def generate_combined_email(self, push, revision, body_filter=None, extra_header_values={}):
-        values = revision.get_values()
-        if extra_header_values:
-            values.update(extra_header_values)
-        if 'subject' not in extra_header_values:
-            values['subject'] = self.expand(COMBINED_REFCHANGE_REVISION_SUBJECT_TEMPLATE, **values)
-
-        self._single_revision = revision
-        self._contains_diff()
-        self.header_template = COMBINED_HEADER_TEMPLATE
-        self.intro_template = COMBINED_INTRO_TEMPLATE
-        self.footer_template = COMBINED_FOOTER_TEMPLATE
-
-        def revision_gen_link(base_url):
-            # revision is used only to generate the body, and
-            # _content_type is set while generating headers. Get it
-            # from the BranchChange object.
-            revision._content_type = self._content_type
-            return revision.generate_browse_link(base_url)
-        self.generate_browse_link = revision_gen_link
-        for line in self.generate_email(push, body_filter, values):
-            yield line
-
-    def generate_email_body(self, push):
-        '''Call the appropriate body generation routine.
-
-        If this is a combined refchange/revision email, the special logic
-        for handling this combined email comes from this function.  For
-        other cases, we just use the normal handling.'''
-
-        # If self._single_revision isn't set; don't override
-        if not self._single_revision:
-            for line in super(BranchChange, self).generate_email_body(push):
-                yield line
-            return
-
-        # This is a combined refchange/revision email; we first provide
-        # some info from the refchange portion, and then call the revision
-        # generate_email_body function to handle the revision portion.
-        adds = list(generate_summaries(
-            '--topo-order', '--reverse', '%s..%s'
-            % (self.old.commit_sha1, self.new.commit_sha1,)
-            ))
-
-        yield self.expand("The following commit(s) were added to %(refname)s by this push:\n")
-        for (sha1, subject) in adds:
-            yield self.expand(
-                BRIEF_SUMMARY_TEMPLATE, action='new',
-                rev_short=sha1, text=subject,
-                )
-
-        yield self._single_revision.rev.short + " is described below\n"
-        yield '\n'
-
-        for line in self._single_revision.generate_email_body(push):
-            yield line
-
-
-class AnnotatedTagChange(ReferenceChange):
-    refname_type = 'annotated tag'
-
-    def __init__(self, environment, refname, short_refname, old, new, rev):
-        ReferenceChange.__init__(
-            self, environment,
-            refname=refname, short_refname=short_refname,
-            old=old, new=new, rev=rev,
-            )
-        self.recipients = environment.get_announce_recipients(self)
-        self.show_shortlog = environment.announce_show_shortlog
-
-    ANNOTATED_TAG_FORMAT = (
-        '%(*objectname)\n'
-        '%(*objecttype)\n'
-        '%(taggername)\n'
-        '%(taggerdate)'
-        )
-
-    def describe_tag(self, push):
-        """Describe the new value of an annotated tag."""
-
-        # Use git for-each-ref to pull out the individual fields from
-        # the tag
-        [tagobject, tagtype, tagger, tagged] = read_git_lines(
-            ['for-each-ref', '--format=%s' % (self.ANNOTATED_TAG_FORMAT,), self.refname],
-            )
-
-        yield self.expand(
-            BRIEF_SUMMARY_TEMPLATE, action='tagging',
-            rev_short=tagobject, text='(%s)' % (tagtype,),
-            )
-        if tagtype == 'commit':
-            # If the tagged object is a commit, then we assume this is a
-            # release, and so we calculate which tag this tag is
-            # replacing
-            try:
-                prevtag = read_git_output(['describe', '--abbrev=0', '%s^' % (self.new,)])
-            except CommandError:
-                prevtag = None
-            if prevtag:
-                yield ' replaces %s\n' % (prevtag,)
-        else:
-            prevtag = None
-            yield '  length %s bytes\n' % (read_git_output(['cat-file', '-s', tagobject]),)
-
-        yield '      by %s\n' % (tagger,)
-        yield '      on %s\n' % (tagged,)
-        yield '\n'
-
-        # Show the content of the tag message; this might contain a
-        # change log or release notes so is worth displaying.
-        yield LOGBEGIN
-        contents = list(read_git_lines(['cat-file', 'tag', self.new.sha1], keepends=True))
-        contents = contents[contents.index('\n') + 1:]
-        if contents and contents[-1][-1:] != '\n':
-            contents.append('\n')
-        for line in contents:
-            yield line
-
-        if self.show_shortlog and tagtype == 'commit':
-            # Only commit tags make sense to have rev-list operations
-            # performed on them
-            yield '\n'
-            if prevtag:
-                # Show changes since the previous release
-                revlist = read_git_output(
-                    ['rev-list', '--pretty=short', '%s..%s' % (prevtag, self.new,)],
-                    keepends=True,
-                    )
-            else:
-                # No previous tag, show all the changes since time
-                # began
-                revlist = read_git_output(
-                    ['rev-list', '--pretty=short', '%s' % (self.new,)],
-                    keepends=True,
-                    )
-            for line in read_git_lines(['shortlog'], input=revlist, keepends=True):
-                yield line
-
-        yield LOGEND
-        yield '\n'
-
-    def generate_create_summary(self, push):
-        """Called for the creation of an annotated tag."""
-
-        for line in self.expand_lines(TAG_CREATED_TEMPLATE):
-            yield line
-
-        for line in self.describe_tag(push):
-            yield line
-
-    def generate_update_summary(self, push):
-        """Called for the update of an annotated tag.
-
-        This is probably a rare event and may not even be allowed."""
-
-        for line in self.expand_lines(TAG_UPDATED_TEMPLATE):
-            yield line
-
-        for line in self.describe_tag(push):
-            yield line
-
-    def generate_delete_summary(self, push):
-        """Called when a non-annotated reference is updated."""
-
-        for line in self.expand_lines(TAG_DELETED_TEMPLATE):
-            yield line
-
-        yield self.expand('   tag was  %(oldrev_short)s\n')
-        yield '\n'
-
-
-class NonAnnotatedTagChange(ReferenceChange):
-    refname_type = 'tag'
-
-    def __init__(self, environment, refname, short_refname, old, new, rev):
-        ReferenceChange.__init__(
-            self, environment,
-            refname=refname, short_refname=short_refname,
-            old=old, new=new, rev=rev,
-            )
-        self.recipients = environment.get_refchange_recipients(self)
-
-    def generate_create_summary(self, push):
-        """Called for the creation of an annotated tag."""
-
-        for line in self.expand_lines(TAG_CREATED_TEMPLATE):
-            yield line
-
-    def generate_update_summary(self, push):
-        """Called when a non-annotated reference is updated."""
-
-        for line in self.expand_lines(TAG_UPDATED_TEMPLATE):
-            yield line
-
-    def generate_delete_summary(self, push):
-        """Called when a non-annotated reference is updated."""
-
-        for line in self.expand_lines(TAG_DELETED_TEMPLATE):
-            yield line
-
-        for line in ReferenceChange.generate_delete_summary(self, push):
-            yield line
-
-
-class OtherReferenceChange(ReferenceChange):
-    refname_type = 'reference'
-
-    def __init__(self, environment, refname, short_refname, old, new, rev):
-        # We use the full refname as short_refname, because otherwise
-        # the full name of the reference would not be obvious from the
-        # text of the email.
-        ReferenceChange.__init__(
-            self, environment,
-            refname=refname, short_refname=refname,
-            old=old, new=new, rev=rev,
-            )
-        self.recipients = environment.get_refchange_recipients(self)
-
-
-class Mailer(object):
-    """An object that can send emails."""
-
-    def __init__(self, environment):
-        self.environment = environment
-
-    def close(self):
-        pass
-
-    def send(self, lines, to_addrs):
-        """Send an email consisting of lines.
-
-        lines must be an iterable over the lines constituting the
-        header and body of the email.  to_addrs is a list of recipient
-        addresses (can be needed even if lines already contains a
-        "To:" field).  It can be either a string (comma-separated list
-        of email addresses) or a Python list of individual email
-        addresses.
-
-        """
-
-        raise NotImplementedError()
-
-
-class SendMailer(Mailer):
-    """Send emails using 'sendmail -oi -t'."""
-
-    SENDMAIL_CANDIDATES = [
-        '/usr/sbin/sendmail',
-        '/usr/lib/sendmail',
-        ]
-
-    @staticmethod
-    def find_sendmail():
-        for path in SendMailer.SENDMAIL_CANDIDATES:
-            if os.access(path, os.X_OK):
-                return path
-        else:
-            raise ConfigurationException(
-                'No sendmail executable found.  '
-                'Try setting multimailhook.sendmailCommand.'
-                )
-
-    def __init__(self, environment, command=None, envelopesender=None):
-        """Construct a SendMailer instance.
-
-        command should be the command and arguments used to invoke
-        sendmail, as a list of strings.  If an envelopesender is
-        provided, it will also be passed to the command, via '-f
-        envelopesender'."""
-        super(SendMailer, self).__init__(environment)
-        if command:
-            self.command = command[:]
-        else:
-            self.command = [self.find_sendmail(), '-oi', '-t']
-
-        if envelopesender:
-            self.command.extend(['-f', envelopesender])
-
-    def send(self, lines, to_addrs):
-        try:
-            p = subprocess.Popen(self.command, stdin=subprocess.PIPE)
-        except OSError:
-            self.environment.get_logger().error(
-                '*** Cannot execute command: %s\n' % ' '.join(self.command) +
-                '*** %s\n' % sys.exc_info()[1] +
-                '*** Try setting multimailhook.mailer to "smtp"\n' +
-                '*** to send emails without using the sendmail command.\n'
-                )
-            sys.exit(1)
-        try:
-            lines = (str_to_bytes(line) for line in lines)
-            p.stdin.writelines(lines)
-        except Exception:
-            self.environment.get_logger().error(
-                '*** Error while generating commit email\n'
-                '***  - mail sending aborted.\n'
-                )
-            if hasattr(p, 'terminate'):
-                # subprocess.terminate() is not available in Python 2.4
-                p.terminate()
-            else:
-                import signal
-                os.kill(p.pid, signal.SIGTERM)
-            raise
-        else:
-            p.stdin.close()
-            retcode = p.wait()
-            if retcode:
-                raise CommandError(self.command, retcode)
-
-
-class SMTPMailer(Mailer):
-    """Send emails using Python's smtplib."""
-
-    def __init__(self, environment,
-                 envelopesender, smtpserver,
-                 smtpservertimeout=10.0, smtpserverdebuglevel=0,
-                 smtpencryption='none',
-                 smtpuser='', smtppass='',
-                 smtpcacerts=''
-                 ):
-        super(SMTPMailer, self).__init__(environment)
-        if not envelopesender:
-            self.environment.get_logger().error(
-                'fatal: git_multimail: cannot use SMTPMailer without a sender address.\n'
-                'please set either multimailhook.envelopeSender or user.email\n'
-                )
-            sys.exit(1)
-        if smtpencryption == 'ssl' and not (smtpuser and smtppass):
-            raise ConfigurationException(
-                'Cannot use SMTPMailer with security option ssl '
-                'without options username and password.'
-                )
-        self.envelopesender = envelopesender
-        self.smtpserver = smtpserver
-        self.smtpservertimeout = smtpservertimeout
-        self.smtpserverdebuglevel = smtpserverdebuglevel
-        self.security = smtpencryption
-        self.username = smtpuser
-        self.password = smtppass
-        self.smtpcacerts = smtpcacerts
-        self.loggedin = False
-        try:
-            def call(klass, server, timeout):
-                try:
-                    return klass(server, timeout=timeout)
-                except TypeError:
-                    # Old Python versions do not have timeout= argument.
-                    return klass(server)
-            if self.security == 'none':
-                self.smtp = call(smtplib.SMTP, self.smtpserver, timeout=self.smtpservertimeout)
-            elif self.security == 'ssl':
-                if self.smtpcacerts:
-                    raise smtplib.SMTPException(
-                        "Checking certificate is not supported for ssl, prefer starttls"
-                        )
-                self.smtp = call(smtplib.SMTP_SSL, self.smtpserver, timeout=self.smtpservertimeout)
-            elif self.security == 'tls':
-                if 'ssl' not in sys.modules:
-                    self.environment.get_logger().error(
-                        '*** Your Python version does not have the ssl library installed\n'
-                        '*** smtpEncryption=tls is not available.\n'
-                        '*** Either upgrade Python to 2.6 or later\n'
-                        '    or use git_multimail.py version 1.2.\n')
-                if ':' not in self.smtpserver:
-                    self.smtpserver += ':587'  # default port for TLS
-                self.smtp = call(smtplib.SMTP, self.smtpserver, timeout=self.smtpservertimeout)
-                # start: ehlo + starttls
-                # equivalent to
-                #     self.smtp.ehlo()
-                #     self.smtp.starttls()
-                # with access to the ssl layer
-                self.smtp.ehlo()
-                if not self.smtp.has_extn("starttls"):
-                    raise smtplib.SMTPException("STARTTLS extension not supported by server")
-                resp, reply = self.smtp.docmd("STARTTLS")
-                if resp != 220:
-                    raise smtplib.SMTPException("Wrong answer to the STARTTLS command")
-                if self.smtpcacerts:
-                    self.smtp.sock = ssl.wrap_socket(
-                        self.smtp.sock,
-                        ca_certs=self.smtpcacerts,
-                        cert_reqs=ssl.CERT_REQUIRED
-                        )
-                else:
-                    self.smtp.sock = ssl.wrap_socket(
-                        self.smtp.sock,
-                        cert_reqs=ssl.CERT_NONE
-                        )
-                    self.environment.get_logger().error(
-                        '*** Warning, the server certificate is not verified (smtp) ***\n'
-                        '***          set the option smtpCACerts                   ***\n'
-                        )
-                if not hasattr(self.smtp.sock, "read"):
-                    # using httplib.FakeSocket with Python 2.5.x or earlier
-                    self.smtp.sock.read = self.smtp.sock.recv
-                self.smtp.file = smtplib.SSLFakeFile(self.smtp.sock)
-                self.smtp.helo_resp = None
-                self.smtp.ehlo_resp = None
-                self.smtp.esmtp_features = {}
-                self.smtp.does_esmtp = 0
-                # end:   ehlo + starttls
-                self.smtp.ehlo()
-            else:
-                sys.stdout.write('*** Error: Control reached an invalid option. ***')
-                sys.exit(1)
-            if self.smtpserverdebuglevel > 0:
-                sys.stdout.write(
-                    "*** Setting debug on for SMTP server connection (%s) ***\n"
-                    % self.smtpserverdebuglevel)
-                self.smtp.set_debuglevel(self.smtpserverdebuglevel)
-        except Exception:
-            self.environment.get_logger().error(
-                '*** Error establishing SMTP connection to %s ***\n'
-                '*** %s\n'
-                % (self.smtpserver, sys.exc_info()[1]))
-            sys.exit(1)
-
-    def close(self):
-        if hasattr(self, 'smtp'):
-            self.smtp.quit()
-            del self.smtp
-
-    def __del__(self):
-        self.close()
-
-    def send(self, lines, to_addrs):
-        try:
-            if self.username or self.password:
-                if not self.loggedin:
-                    self.smtp.login(self.username, self.password)
-                    self.loggedin = True
-            msg = ''.join(lines)
-            # turn comma-separated list into Python list if needed.
-            if is_string(to_addrs):
-                to_addrs = [email for (name, email) in getaddresses([to_addrs])]
-            self.smtp.sendmail(self.envelopesender, to_addrs, msg)
-        except socket.timeout:
-            self.environment.get_logger().error(
-                '*** Error sending email ***\n'
-                '*** SMTP server timed out (timeout is %s)\n'
-                % self.smtpservertimeout)
-        except smtplib.SMTPResponseException:
-            err = sys.exc_info()[1]
-            self.environment.get_logger().error(
-                '*** Error sending email ***\n'
-                '*** Error %d: %s\n'
-                % (err.smtp_code, bytes_to_str(err.smtp_error)))
-            try:
-                smtp = self.smtp
-                # delete the field before quit() so that in case of
-                # error, self.smtp is deleted anyway.
-                del self.smtp
-                smtp.quit()
-            except:
-                self.environment.get_logger().error(
-                    '*** Error closing the SMTP connection ***\n'
-                    '*** Exiting anyway ... ***\n'
-                    '*** %s\n' % sys.exc_info()[1])
-            sys.exit(1)
-
-
-class OutputMailer(Mailer):
-    """Write emails to an output stream, bracketed by lines of '=' characters.
-
-    This is intended for debugging purposes."""
-
-    SEPARATOR = '=' * 75 + '\n'
-
-    def __init__(self, f, environment=None):
-        super(OutputMailer, self).__init__(environment=environment)
-        self.f = f
-
-    def send(self, lines, to_addrs):
-        write_str(self.f, self.SEPARATOR)
-        for line in lines:
-            write_str(self.f, line)
-        write_str(self.f, self.SEPARATOR)
-
-
-def get_git_dir():
-    """Determine GIT_DIR.
-
-    Determine GIT_DIR either from the GIT_DIR environment variable or
-    from the working directory, using Git's usual rules."""
-
-    try:
-        return read_git_output(['rev-parse', '--git-dir'])
-    except CommandError:
-        sys.stderr.write('fatal: git_multimail: not in a git directory\n')
-        sys.exit(1)
-
-
-class Environment(object):
-    """Describes the environment in which the push is occurring.
-
-    An Environment object encapsulates information about the local
-    environment.  For example, it knows how to determine:
-
-    * the name of the repository to which the push occurred
-
-    * what user did the push
-
-    * what users want to be informed about various types of changes.
-
-    An Environment object is expected to have the following methods:
-
-        get_repo_shortname()
-
-            Return a short name for the repository, for display
-            purposes.
-
-        get_repo_path()
-
-            Return the absolute path to the Git repository.
-
-        get_emailprefix()
-
-            Return a string that will be prefixed to every email's
-            subject.
-
-        get_pusher()
-
-            Return the username of the person who pushed the changes.
-            This value is used in the email body to indicate who
-            pushed the change.
-
-        get_pusher_email() (may return None)
-
-            Return the email address of the person who pushed the
-            changes.  The value should be a single RFC 2822 email
-            address as a string; e.g., "Joe User <user@example.com>"
-            if available, otherwise "user@example.com".  If set, the
-            value is used as the Reply-To address for refchange
-            emails.  If it is impossible to determine the pusher's
-            email, this attribute should be set to None (in which case
-            no Reply-To header will be output).
-
-        get_sender()
-
-            Return the address to be used as the 'From' email address
-            in the email envelope.
-
-        get_fromaddr(change=None)
-
-            Return the 'From' email address used in the email 'From:'
-            headers.  If the change is known when this function is
-            called, it is passed in as the 'change' parameter.  (May
-            be a full RFC 2822 email address like 'Joe User
-            <user@example.com>'.)
-
-        get_administrator()
-
-            Return the name and/or email of the repository
-            administrator.  This value is used in the footer as the
-            person to whom requests to be removed from the
-            notification list should be sent.  Ideally, it should
-            include a valid email address.
-
-        get_reply_to_refchange()
-        get_reply_to_commit()
-
-            Return the address to use in the email "Reply-To" header,
-            as a string.  These can be an RFC 2822 email address, or
-            None to omit the "Reply-To" header.
-            get_reply_to_refchange() is used for refchange emails;
-            get_reply_to_commit() is used for individual commit
-            emails.
-
-        get_ref_filter_regex()
-
-            Return a tuple -- a compiled regex, and a boolean indicating
-            whether the regex picks refs to include (if False, the regex
-            matches on refs to exclude).
-
-        get_default_ref_ignore_regex()
-
-            Return a regex that should be ignored for both what emails
-            to send and when computing what commits are considered new
-            to the repository.  Default is "^refs/notes/".
-
-        get_max_subject_length()
-
-            Return an int giving the maximal length for the subject
-            (git log --oneline).
-
-    They should also define the following attributes:
-
-        announce_show_shortlog (bool)
-
-            True iff announce emails should include a shortlog.
-
-        commit_email_format (string)
-
-            If "html", generate commit emails in HTML instead of plain text
-            used by default.
-
-        html_in_intro (bool)
-        html_in_footer (bool)
-
-            When generating HTML emails, the introduction (respectively,
-            the footer) will be HTML-escaped iff html_in_intro (respectively,
-            the footer) is true. When false, only the values used to expand
-            the template are escaped.
-
-        refchange_showgraph (bool)
-
-            True iff refchanges emails should include a detailed graph.
-
-        refchange_showlog (bool)
-
-            True iff refchanges emails should include a detailed log.
-
-        diffopts (list of strings)
-
-            The options that should be passed to 'git diff' for the
-            summary email.  The value should be a list of strings
-            representing words to be passed to the command.
-
-        graphopts (list of strings)
-
-            Analogous to diffopts, but contains options passed to
-            'git log --graph' when generating the detailed graph for
-            a set of commits (see refchange_showgraph)
-
-        logopts (list of strings)
-
-            Analogous to diffopts, but contains options passed to
-            'git log' when generating the detailed log for a set of
-            commits (see refchange_showlog)
-
-        commitlogopts (list of strings)
-
-            The options that should be passed to 'git log' for each
-            commit mail.  The value should be a list of strings
-            representing words to be passed to the command.
-
-        date_substitute (string)
-
-            String to be used in substitution for 'Date:' at start of
-            line in the output of 'git log'.
-
-        quiet (bool)
-            On success do not write to stderr
-
-        stdout (bool)
-            Write email to stdout rather than emailing. Useful for debugging
-
-        combine_when_single_commit (bool)
-
-            True if a combined email should be produced when a single
-            new commit is pushed to a branch, False otherwise.
-
-        from_refchange, from_commit (strings)
-
-            Addresses to use for the From: field for refchange emails
-            and commit emails respectively.  Set from
-            multimailhook.fromRefchange and multimailhook.fromCommit
-            by ConfigEnvironmentMixin.
-
-        log_file, error_log_file, debug_log_file (string)
-
-            Name of a file to which logs should be sent.
-
-        verbose (int)
-
-            How verbose the system should be.
-            - 0 (default): show info, errors, ...
-            - 1 : show basic debug info
-    """
-
-    REPO_NAME_RE = re.compile(r'^(?P<name>.+?)(?:\.git)$')
-
-    def __init__(self, osenv=None):
-        self.osenv = osenv or os.environ
-        self.announce_show_shortlog = False
-        self.commit_email_format = "text"
-        self.html_in_intro = False
-        self.html_in_footer = False
-        self.commitBrowseURL = None
-        self.maxcommitemails = 500
-        self.excludemergerevisions = False
-        self.diffopts = ['--stat', '--summary', '--find-copies-harder']
-        self.graphopts = ['--oneline', '--decorate']
-        self.logopts = []
-        self.refchange_showgraph = False
-        self.refchange_showlog = False
-        self.commitlogopts = ['-C', '--stat', '-p', '--cc']
-        self.date_substitute = 'AuthorDate: '
-        self.quiet = False
-        self.stdout = False
-        self.combine_when_single_commit = True
-        self.logger = None
-
-        self.COMPUTED_KEYS = [
-            'administrator',
-            'charset',
-            'emailprefix',
-            'pusher',
-            'pusher_email',
-            'repo_path',
-            'repo_shortname',
-            'sender',
-            ]
-
-        self._values = None
-
-    def get_logger(self):
-        """Get (possibly creates) the logger associated to this environment."""
-        if self.logger is None:
-            self.logger = Logger(self)
-        return self.logger
-
-    def get_repo_shortname(self):
-        """Use the last part of the repo path, with ".git" stripped off if present."""
-
-        basename = os.path.basename(os.path.abspath(self.get_repo_path()))
-        m = self.REPO_NAME_RE.match(basename)
-        if m:
-            return m.group('name')
-        else:
-            return basename
-
-    def get_pusher(self):
-        raise NotImplementedError()
-
-    def get_pusher_email(self):
-        return None
-
-    def get_fromaddr(self, change=None):
-        config = Config('user')
-        fromname = config.get('name', default='')
-        fromemail = config.get('email', default='')
-        if fromemail:
-            return formataddr([fromname, fromemail])
-        return self.get_sender()
-
-    def get_administrator(self):
-        return 'the administrator of this repository'
-
-    def get_emailprefix(self):
-        return ''
-
-    def get_repo_path(self):
-        if read_git_output(['rev-parse', '--is-bare-repository']) == 'true':
-            path = get_git_dir()
-        else:
-            path = read_git_output(['rev-parse', '--show-toplevel'])
-        return os.path.abspath(path)
-
-    def get_charset(self):
-        return CHARSET
-
-    def get_values(self):
-        """Return a dictionary {keyword: expansion} for this Environment.
-
-        This method is called by Change._compute_values().  The keys
-        in the returned dictionary are available to be used in any of
-        the templates.  The dictionary is created by calling
-        self.get_NAME() for each of the attributes named in
-        COMPUTED_KEYS and recording those that do not return None.
-        The return value is always a new dictionary."""
-
-        if self._values is None:
-            values = {'': ''}  # %()s expands to the empty string.
-
-            for key in self.COMPUTED_KEYS:
-                value = getattr(self, 'get_%s' % (key,))()
-                if value is not None:
-                    values[key] = value
-
-            self._values = values
-
-        return self._values.copy()
-
-    def get_refchange_recipients(self, refchange):
-        """Return the recipients for notifications about refchange.
-
-        Return the list of email addresses to which notifications
-        about the specified ReferenceChange should be sent."""
-
-        raise NotImplementedError()
-
-    def get_announce_recipients(self, annotated_tag_change):
-        """Return the recipients for notifications about annotated_tag_change.
-
-        Return the list of email addresses to which notifications
-        about the specified AnnotatedTagChange should be sent."""
-
-        raise NotImplementedError()
-
-    def get_reply_to_refchange(self, refchange):
-        return self.get_pusher_email()
-
-    def get_revision_recipients(self, revision):
-        """Return the recipients for messages about revision.
-
-        Return the list of email addresses to which notifications
-        about the specified Revision should be sent.  This method
-        could be overridden, for example, to take into account the
-        contents of the revision when deciding whom to notify about
-        it.  For example, there could be a scheme for users to express
-        interest in particular files or subdirectories, and only
-        receive notification emails for revisions that affecting those
-        files."""
-
-        raise NotImplementedError()
-
-    def get_reply_to_commit(self, revision):
-        return revision.author
-
-    def get_default_ref_ignore_regex(self):
-        # The commit messages of git notes are essentially meaningless
-        # and "filenames" in git notes commits are an implementational
-        # detail that might surprise users at first.  As such, we
-        # would need a completely different method for handling emails
-        # of git notes in order for them to be of benefit for users,
-        # which we simply do not have right now.
-        return "^refs/notes/"
-
-    def get_max_subject_length(self):
-        """Return the maximal subject line (git log --oneline) length.
-        Longer subject lines will be truncated."""
-        raise NotImplementedError()
-
-    def filter_body(self, lines):
-        """Filter the lines intended for an email body.
-
-        lines is an iterable over the lines that would go into the
-        email body.  Filter it (e.g., limit the number of lines, the
-        line length, character set, etc.), returning another iterable.
-        See FilterLinesEnvironmentMixin and MaxlinesEnvironmentMixin
-        for classes implementing this functionality."""
-
-        return lines
-
-    def log_msg(self, msg):
-        """Write the string msg on a log file or on stderr.
-
-        Sends the text to stderr by default, override to change the behavior."""
-        self.get_logger().info(msg)
-
-    def log_warning(self, msg):
-        """Write the string msg on a log file or on stderr.
-
-        Sends the text to stderr by default, override to change the behavior."""
-        self.get_logger().warning(msg)
-
-    def log_error(self, msg):
-        """Write the string msg on a log file or on stderr.
-
-        Sends the text to stderr by default, override to change the behavior."""
-        self.get_logger().error(msg)
-
-    def check(self):
-        pass
-
-
-class ConfigEnvironmentMixin(Environment):
-    """A mixin that sets self.config to its constructor's config argument.
-
-    This class's constructor consumes the "config" argument.
-
-    Mixins that need to inspect the config should inherit from this
-    class (1) to make sure that "config" is still in the constructor
-    arguments with its own constructor runs and/or (2) to be sure that
-    self.config is set after construction."""
-
-    def __init__(self, config, **kw):
-        super(ConfigEnvironmentMixin, self).__init__(**kw)
-        self.config = config
-
-
-class ConfigOptionsEnvironmentMixin(ConfigEnvironmentMixin):
-    """An Environment that reads most of its information from "git config"."""
-
-    @staticmethod
-    def forbid_field_values(name, value, forbidden):
-        for forbidden_val in forbidden:
-            if value is not None and value.lower() == forbidden:
-                raise ConfigurationException(
-                    '"%s" is not an allowed setting for %s' % (value, name)
-                    )
-
-    def __init__(self, config, **kw):
-        super(ConfigOptionsEnvironmentMixin, self).__init__(
-            config=config, **kw
-            )
-
-        for var, cfg in (
-                ('announce_show_shortlog', 'announceshortlog'),
-                ('refchange_showgraph', 'refchangeShowGraph'),
-                ('refchange_showlog', 'refchangeshowlog'),
-                ('quiet', 'quiet'),
-                ('stdout', 'stdout'),
-                ):
-            val = config.get_bool(cfg)
-            if val is not None:
-                setattr(self, var, val)
-
-        commit_email_format = config.get('commitEmailFormat')
-        if commit_email_format is not None:
-            if commit_email_format != "html" and commit_email_format != "text":
-                self.log_warning(
-                    '*** Unknown value for multimailhook.commitEmailFormat: %s\n' %
-                    commit_email_format +
-                    '*** Expected either "text" or "html".  Ignoring.\n'
-                    )
-            else:
-                self.commit_email_format = commit_email_format
-
-        html_in_intro = config.get_bool('htmlInIntro')
-        if html_in_intro is not None:
-            self.html_in_intro = html_in_intro
-
-        html_in_footer = config.get_bool('htmlInFooter')
-        if html_in_footer is not None:
-            self.html_in_footer = html_in_footer
-
-        self.commitBrowseURL = config.get('commitBrowseURL')
-
-        self.excludemergerevisions = config.get('excludeMergeRevisions')
-
-        maxcommitemails = config.get('maxcommitemails')
-        if maxcommitemails is not None:
-            try:
-                self.maxcommitemails = int(maxcommitemails)
-            except ValueError:
-                self.log_warning(
-                    '*** Malformed value for multimailhook.maxCommitEmails: %s\n'
-                    % maxcommitemails +
-                    '*** Expected a number.  Ignoring.\n'
-                    )
-
-        diffopts = config.get('diffopts')
-        if diffopts is not None:
-            self.diffopts = shlex.split(diffopts)
-
-        graphopts = config.get('graphOpts')
-        if graphopts is not None:
-            self.graphopts = shlex.split(graphopts)
-
-        logopts = config.get('logopts')
-        if logopts is not None:
-            self.logopts = shlex.split(logopts)
-
-        commitlogopts = config.get('commitlogopts')
-        if commitlogopts is not None:
-            self.commitlogopts = shlex.split(commitlogopts)
-
-        date_substitute = config.get('dateSubstitute')
-        if date_substitute == 'none':
-            self.date_substitute = None
-        elif date_substitute is not None:
-            self.date_substitute = date_substitute
-
-        reply_to = config.get('replyTo')
-        self.__reply_to_refchange = config.get('replyToRefchange', default=reply_to)
-        self.forbid_field_values('replyToRefchange',
-                                 self.__reply_to_refchange,
-                                 ['author'])
-        self.__reply_to_commit = config.get('replyToCommit', default=reply_to)
-
-        self.from_refchange = config.get('fromRefchange')
-        self.forbid_field_values('fromRefchange',
-                                 self.from_refchange,
-                                 ['author', 'none'])
-        self.from_commit = config.get('fromCommit')
-        self.forbid_field_values('fromCommit',
-                                 self.from_commit,
-                                 ['none'])
-
-        combine = config.get_bool('combineWhenSingleCommit')
-        if combine is not None:
-            self.combine_when_single_commit = combine
-
-        self.log_file = config.get('logFile', default=None)
-        self.error_log_file = config.get('errorLogFile', default=None)
-        self.debug_log_file = config.get('debugLogFile', default=None)
-        if config.get_bool('Verbose', default=False):
-            self.verbose = 1
-        else:
-            self.verbose = 0
-
-    def get_administrator(self):
-        return (
-            self.config.get('administrator') or
-            self.get_sender() or
-            super(ConfigOptionsEnvironmentMixin, self).get_administrator()
-            )
-
-    def get_repo_shortname(self):
-        return (
-            self.config.get('reponame') or
-            super(ConfigOptionsEnvironmentMixin, self).get_repo_shortname()
-            )
-
-    def get_emailprefix(self):
-        emailprefix = self.config.get('emailprefix')
-        if emailprefix is not None:
-            emailprefix = emailprefix.strip()
-            if emailprefix:
-                emailprefix += ' '
-        else:
-            emailprefix = '[%(repo_shortname)s] '
-        short_name = self.get_repo_shortname()
-        try:
-            return emailprefix % {'repo_shortname': short_name}
-        except:
-            self.get_logger().error(
-                '*** Invalid multimailhook.emailPrefix: %s\n' % emailprefix +
-                '*** %s\n' % sys.exc_info()[1] +
-                "*** Only the '%(repo_shortname)s' placeholder is allowed\n"
-                )
-            raise ConfigurationException(
-                '"%s" is not an allowed setting for emailPrefix' % emailprefix
-                )
-
-    def get_sender(self):
-        return self.config.get('envelopesender')
-
-    def process_addr(self, addr, change):
-        if addr.lower() == 'author':
-            if hasattr(change, 'author'):
-                return change.author
-            else:
-                return None
-        elif addr.lower() == 'pusher':
-            return self.get_pusher_email()
-        elif addr.lower() == 'none':
-            return None
-        else:
-            return addr
-
-    def get_fromaddr(self, change=None):
-        fromaddr = self.config.get('from')
-        if change:
-            specific_fromaddr = change.get_specific_fromaddr()
-            if specific_fromaddr:
-                fromaddr = specific_fromaddr
-        if fromaddr:
-            fromaddr = self.process_addr(fromaddr, change)
-        if fromaddr:
-            return fromaddr
-        return super(ConfigOptionsEnvironmentMixin, self).get_fromaddr(change)
-
-    def get_reply_to_refchange(self, refchange):
-        if self.__reply_to_refchange is None:
-            return super(ConfigOptionsEnvironmentMixin, self).get_reply_to_refchange(refchange)
-        else:
-            return self.process_addr(self.__reply_to_refchange, refchange)
-
-    def get_reply_to_commit(self, revision):
-        if self.__reply_to_commit is None:
-            return super(ConfigOptionsEnvironmentMixin, self).get_reply_to_commit(revision)
-        else:
-            return self.process_addr(self.__reply_to_commit, revision)
-
-    def get_scancommitforcc(self):
-        return self.config.get('scancommitforcc')
-
-
-class FilterLinesEnvironmentMixin(Environment):
-    """Handle encoding and maximum line length of body lines.
-
-        email_max_line_length (int or None)
-
-            The maximum length of any single line in the email body.
-            Longer lines are truncated at that length with ' [...]'
-            appended.
-
-        strict_utf8 (bool)
-
-            If this field is set to True, then the email body text is
-            expected to be UTF-8.  Any invalid characters are
-            converted to U+FFFD, the Unicode replacement character
-            (encoded as UTF-8, of course).
-
-    """
-
-    def __init__(self, strict_utf8=True,
-                 email_max_line_length=500, max_subject_length=500,
-                 **kw):
-        super(FilterLinesEnvironmentMixin, self).__init__(**kw)
-        self.__strict_utf8 = strict_utf8
-        self.__email_max_line_length = email_max_line_length
-        self.__max_subject_length = max_subject_length
-
-    def filter_body(self, lines):
-        lines = super(FilterLinesEnvironmentMixin, self).filter_body(lines)
-        if self.__strict_utf8:
-            if not PYTHON3:
-                lines = (line.decode(ENCODING, 'replace') for line in lines)
-            # Limit the line length in Unicode-space to avoid
-            # splitting characters:
-            if self.__email_max_line_length > 0:
-                lines = limit_linelength(lines, self.__email_max_line_length)
-            if not PYTHON3:
-                lines = (line.encode(ENCODING, 'replace') for line in lines)
-        elif self.__email_max_line_length:
-            lines = limit_linelength(lines, self.__email_max_line_length)
-
-        return lines
-
-    def get_max_subject_length(self):
-        return self.__max_subject_length
-
-
-class ConfigFilterLinesEnvironmentMixin(
-        ConfigEnvironmentMixin,
-        FilterLinesEnvironmentMixin,
-        ):
-    """Handle encoding and maximum line length based on config."""
-
-    def __init__(self, config, **kw):
-        strict_utf8 = config.get_bool('emailstrictutf8', default=None)
-        if strict_utf8 is not None:
-            kw['strict_utf8'] = strict_utf8
-
-        email_max_line_length = config.get('emailmaxlinelength')
-        if email_max_line_length is not None:
-            kw['email_max_line_length'] = int(email_max_line_length)
-
-        max_subject_length = config.get('subjectMaxLength', default=email_max_line_length)
-        if max_subject_length is not None:
-            kw['max_subject_length'] = int(max_subject_length)
-
-        super(ConfigFilterLinesEnvironmentMixin, self).__init__(
-            config=config, **kw
-            )
-
-
-class MaxlinesEnvironmentMixin(Environment):
-    """Limit the email body to a specified number of lines."""
-
-    def __init__(self, emailmaxlines, **kw):
-        super(MaxlinesEnvironmentMixin, self).__init__(**kw)
-        self.__emailmaxlines = emailmaxlines
-
-    def filter_body(self, lines):
-        lines = super(MaxlinesEnvironmentMixin, self).filter_body(lines)
-        if self.__emailmaxlines > 0:
-            lines = limit_lines(lines, self.__emailmaxlines)
-        return lines
-
-
-class ConfigMaxlinesEnvironmentMixin(
-        ConfigEnvironmentMixin,
-        MaxlinesEnvironmentMixin,
-        ):
-    """Limit the email body to the number of lines specified in config."""
-
-    def __init__(self, config, **kw):
-        emailmaxlines = int(config.get('emailmaxlines', default='0'))
-        super(ConfigMaxlinesEnvironmentMixin, self).__init__(
-            config=config,
-            emailmaxlines=emailmaxlines,
-            **kw
-            )
-
-
-class FQDNEnvironmentMixin(Environment):
-    """A mixin that sets the host's FQDN to its constructor argument."""
-
-    def __init__(self, fqdn, **kw):
-        super(FQDNEnvironmentMixin, self).__init__(**kw)
-        self.COMPUTED_KEYS += ['fqdn']
-        self.__fqdn = fqdn
-
-    def get_fqdn(self):
-        """Return the fully-qualified domain name for this host.
-
-        Return None if it is unavailable or unwanted."""
-
-        return self.__fqdn
-
-
-class ConfigFQDNEnvironmentMixin(
-        ConfigEnvironmentMixin,
-        FQDNEnvironmentMixin,
-        ):
-    """Read the FQDN from the config."""
-
-    def __init__(self, config, **kw):
-        fqdn = config.get('fqdn')
-        super(ConfigFQDNEnvironmentMixin, self).__init__(
-            config=config,
-            fqdn=fqdn,
-            **kw
-            )
-
-
-class ComputeFQDNEnvironmentMixin(FQDNEnvironmentMixin):
-    """Get the FQDN by calling socket.getfqdn()."""
-
-    def __init__(self, **kw):
-        super(ComputeFQDNEnvironmentMixin, self).__init__(
-            fqdn=socket.getfqdn(),
-            **kw
-            )
-
-
-class PusherDomainEnvironmentMixin(ConfigEnvironmentMixin):
-    """Deduce pusher_email from pusher by appending an emaildomain."""
-
-    def __init__(self, **kw):
-        super(PusherDomainEnvironmentMixin, self).__init__(**kw)
-        self.__emaildomain = self.config.get('emaildomain')
-
-    def get_pusher_email(self):
-        if self.__emaildomain:
-            # Derive the pusher's full email address in the default way:
-            return '%s@%s' % (self.get_pusher(), self.__emaildomain)
-        else:
-            return super(PusherDomainEnvironmentMixin, self).get_pusher_email()
-
-
-class StaticRecipientsEnvironmentMixin(Environment):
-    """Set recipients statically based on constructor parameters."""
-
-    def __init__(
-            self,
-            refchange_recipients, announce_recipients, revision_recipients, scancommitforcc,
-            **kw
-            ):
-        super(StaticRecipientsEnvironmentMixin, self).__init__(**kw)
-
-        # The recipients for various types of notification emails, as
-        # RFC 2822 email addresses separated by commas (or the empty
-        # string if no recipients are configured).  Although there is
-        # a mechanism to choose the recipient lists based on on the
-        # actual *contents* of the change being reported, we only
-        # choose based on the *type* of the change.  Therefore we can
-        # compute them once and for all:
-        self.__refchange_recipients = refchange_recipients
-        self.__announce_recipients = announce_recipients
-        self.__revision_recipients = revision_recipients
-
-    def check(self):
-        if not (self.get_refchange_recipients(None) or
-                self.get_announce_recipients(None) or
-                self.get_revision_recipients(None) or
-                self.get_scancommitforcc()):
-            raise ConfigurationException('No email recipients configured!')
-        super(StaticRecipientsEnvironmentMixin, self).check()
-
-    def get_refchange_recipients(self, refchange):
-        if self.__refchange_recipients is None:
-            return super(StaticRecipientsEnvironmentMixin,
-                         self).get_refchange_recipients(refchange)
-        return self.__refchange_recipients
-
-    def get_announce_recipients(self, annotated_tag_change):
-        if self.__announce_recipients is None:
-            return super(StaticRecipientsEnvironmentMixin,
-                         self).get_refchange_recipients(annotated_tag_change)
-        return self.__announce_recipients
-
-    def get_revision_recipients(self, revision):
-        if self.__revision_recipients is None:
-            return super(StaticRecipientsEnvironmentMixin,
-                         self).get_refchange_recipients(revision)
-        return self.__revision_recipients
-
-
-class CLIRecipientsEnvironmentMixin(Environment):
-    """Mixin storing recipients information coming from the
-    command-line."""
-
-    def __init__(self, cli_recipients=None, **kw):
-        super(CLIRecipientsEnvironmentMixin, self).__init__(**kw)
-        self.__cli_recipients = cli_recipients
-
-    def get_refchange_recipients(self, refchange):
-        if self.__cli_recipients is None:
-            return super(CLIRecipientsEnvironmentMixin,
-                         self).get_refchange_recipients(refchange)
-        return self.__cli_recipients
-
-    def get_announce_recipients(self, annotated_tag_change):
-        if self.__cli_recipients is None:
-            return super(CLIRecipientsEnvironmentMixin,
-                         self).get_announce_recipients(annotated_tag_change)
-        return self.__cli_recipients
-
-    def get_revision_recipients(self, revision):
-        if self.__cli_recipients is None:
-            return super(CLIRecipientsEnvironmentMixin,
-                         self).get_revision_recipients(revision)
-        return self.__cli_recipients
-
-
-class ConfigRecipientsEnvironmentMixin(
-        ConfigEnvironmentMixin,
-        StaticRecipientsEnvironmentMixin
-        ):
-    """Determine recipients statically based on config."""
-
-    def __init__(self, config, **kw):
-        super(ConfigRecipientsEnvironmentMixin, self).__init__(
-            config=config,
-            refchange_recipients=self._get_recipients(
-                config, 'refchangelist', 'mailinglist',
-                ),
-            announce_recipients=self._get_recipients(
-                config, 'announcelist', 'refchangelist', 'mailinglist',
-                ),
-            revision_recipients=self._get_recipients(
-                config, 'commitlist', 'mailinglist',
-                ),
-            scancommitforcc=config.get('scancommitforcc'),
-            **kw
-            )
-
-    def _get_recipients(self, config, *names):
-        """Return the recipients for a particular type of message.
-
-        Return the list of email addresses to which a particular type
-        of notification email should be sent, by looking at the config
-        value for "multimailhook.$name" for each of names.  Use the
-        value from the first name that is configured.  The return
-        value is a (possibly empty) string containing RFC 2822 email
-        addresses separated by commas.  If no configuration could be
-        found, raise a ConfigurationException."""
-
-        for name in names:
-            lines = config.get_all(name)
-            if lines is not None:
-                lines = [line.strip() for line in lines]
-                # Single "none" is a special value equivalen to empty string.
-                if lines == ['none']:
-                    lines = ['']
-                return ', '.join(lines)
-        else:
-            return ''
-
-
-class StaticRefFilterEnvironmentMixin(Environment):
-    """Set branch filter statically based on constructor parameters."""
-
-    def __init__(self, ref_filter_incl_regex, ref_filter_excl_regex,
-                 ref_filter_do_send_regex, ref_filter_dont_send_regex,
-                 **kw):
-        super(StaticRefFilterEnvironmentMixin, self).__init__(**kw)
-
-        if ref_filter_incl_regex and ref_filter_excl_regex:
-            raise ConfigurationException(
-                "Cannot specify both a ref inclusion and exclusion regex.")
-        self.__is_inclusion_filter = bool(ref_filter_incl_regex)
-        default_exclude = self.get_default_ref_ignore_regex()
-        if ref_filter_incl_regex:
-            ref_filter_regex = ref_filter_incl_regex
-        elif ref_filter_excl_regex:
-            ref_filter_regex = ref_filter_excl_regex + '|' + default_exclude
-        else:
-            ref_filter_regex = default_exclude
-        try:
-            self.__compiled_regex = re.compile(ref_filter_regex)
-        except Exception:
-            raise ConfigurationException(
-                'Invalid Ref Filter Regex "%s": %s' % (ref_filter_regex, sys.exc_info()[1]))
-
-        if ref_filter_do_send_regex and ref_filter_dont_send_regex:
-            raise ConfigurationException(
-                "Cannot specify both a ref doSend and dontSend regex.")
-        self.__is_do_send_filter = bool(ref_filter_do_send_regex)
-        if ref_filter_do_send_regex:
-            ref_filter_send_regex = ref_filter_do_send_regex
-        elif ref_filter_dont_send_regex:
-            ref_filter_send_regex = ref_filter_dont_send_regex
-        else:
-            ref_filter_send_regex = '.*'
-            self.__is_do_send_filter = True
-        try:
-            self.__send_compiled_regex = re.compile(ref_filter_send_regex)
-        except Exception:
-            raise ConfigurationException(
-                'Invalid Ref Filter Regex "%s": %s' %
-                (ref_filter_send_regex, sys.exc_info()[1]))
-
-    def get_ref_filter_regex(self, send_filter=False):
-        if send_filter:
-            return self.__send_compiled_regex, self.__is_do_send_filter
-        else:
-            return self.__compiled_regex, self.__is_inclusion_filter
-
-
-class ConfigRefFilterEnvironmentMixin(
-        ConfigEnvironmentMixin,
-        StaticRefFilterEnvironmentMixin
-        ):
-    """Determine branch filtering statically based on config."""
-
-    def _get_regex(self, config, key):
-        """Get a list of whitespace-separated regex. The refFilter* config
-        variables are multivalued (hence the use of get_all), and we
-        allow each entry to be a whitespace-separated list (hence the
-        split on each line). The whole thing is glued into a single regex."""
-        values = config.get_all(key)
-        if values is None:
-            return values
-        items = []
-        for line in values:
-            for i in line.split():
-                items.append(i)
-        if items == []:
-            return None
-        return '|'.join(items)
-
-    def __init__(self, config, **kw):
-        super(ConfigRefFilterEnvironmentMixin, self).__init__(
-            config=config,
-            ref_filter_incl_regex=self._get_regex(config, 'refFilterInclusionRegex'),
-            ref_filter_excl_regex=self._get_regex(config, 'refFilterExclusionRegex'),
-            ref_filter_do_send_regex=self._get_regex(config, 'refFilterDoSendRegex'),
-            ref_filter_dont_send_regex=self._get_regex(config, 'refFilterDontSendRegex'),
-            **kw
-            )
-
-
-class ProjectdescEnvironmentMixin(Environment):
-    """Make a "projectdesc" value available for templates.
-
-    By default, it is set to the first line of $GIT_DIR/description
-    (if that file is present and appears to be set meaningfully)."""
-
-    def __init__(self, **kw):
-        super(ProjectdescEnvironmentMixin, self).__init__(**kw)
-        self.COMPUTED_KEYS += ['projectdesc']
-
-    def get_projectdesc(self):
-        """Return a one-line description of the project."""
-
-        git_dir = get_git_dir()
-        try:
-            projectdesc = open(os.path.join(git_dir, 'description')).readline().strip()
-            if projectdesc and not projectdesc.startswith('Unnamed repository'):
-                return projectdesc
-        except IOError:
-            pass
-
-        return 'UNNAMED PROJECT'
-
-
-class GenericEnvironmentMixin(Environment):
-    def get_pusher(self):
-        return self.osenv.get('USER', self.osenv.get('USERNAME', 'unknown user'))
-
-
-class GitoliteEnvironmentHighPrecMixin(Environment):
-    def get_pusher(self):
-        return self.osenv.get('GL_USER', 'unknown user')
-
-
-class GitoliteEnvironmentLowPrecMixin(
-        ConfigEnvironmentMixin,
-        Environment):
-
-    def get_repo_shortname(self):
-        # The gitolite environment variable $GL_REPO is a pretty good
-        # repo_shortname (though it's probably not as good as a value
-        # the user might have explicitly put in his config).
-        return (
-            self.osenv.get('GL_REPO', None) or
-            super(GitoliteEnvironmentLowPrecMixin, self).get_repo_shortname()
-            )
-
-    @staticmethod
-    def _compile_regex(re_template):
-        return (
-            re.compile(re_template % x)
-            for x in (
-                r'BEGIN\s+USER\s+EMAILS',
-                r'([^\s]+)\s+(.*)',
-                r'END\s+USER\s+EMAILS',
-                ))
-
-    def get_fromaddr(self, change=None):
-        GL_USER = self.osenv.get('GL_USER')
-        if GL_USER is not None:
-            # Find the path to gitolite.conf.  Note that gitolite v3
-            # did away with the GL_ADMINDIR and GL_CONF environment
-            # variables (they are now hard-coded).
-            GL_ADMINDIR = self.osenv.get(
-                'GL_ADMINDIR',
-                os.path.expanduser(os.path.join('~', '.gitolite')))
-            GL_CONF = self.osenv.get(
-                'GL_CONF',
-                os.path.join(GL_ADMINDIR, 'conf', 'gitolite.conf'))
-
-            mailaddress_map = self.config.get('MailaddressMap')
-            # If relative, consider relative to GL_CONF:
-            if mailaddress_map:
-                mailaddress_map = os.path.join(os.path.dirname(GL_CONF),
-                                               mailaddress_map)
-                if os.path.isfile(mailaddress_map):
-                    f = open(mailaddress_map, 'rU')
-                    try:
-                        # Leading '#' is optional
-                        re_begin, re_user, re_end = self._compile_regex(
-                            r'^(?:\s*#)?\s*%s\s*$')
-                        for l in f:
-                            l = l.rstrip('\n')
-                            if re_begin.match(l) or re_end.match(l):
-                                continue  # Ignore these lines
-                            m = re_user.match(l)
-                            if m:
-                                if m.group(1) == GL_USER:
-                                    return m.group(2)
-                                else:
-                                    continue  # Not this user, but not an error
-                            raise ConfigurationException(
-                                "Syntax error in mail address map.\n"
-                                "Check file {}.\n"
-                                "Line: {}".format(mailaddress_map, l))
-
-                    finally:
-                        f.close()
-
-            if os.path.isfile(GL_CONF):
-                f = open(GL_CONF, 'rU')
-                try:
-                    in_user_emails_section = False
-                    re_begin, re_user, re_end = self._compile_regex(
-                        r'^\s*#\s*%s\s*$')
-                    for l in f:
-                        l = l.rstrip('\n')
-                        if not in_user_emails_section:
-                            if re_begin.match(l):
-                                in_user_emails_section = True
-                            continue
-                        if re_end.match(l):
-                            break
-                        m = re_user.match(l)
-                        if m and m.group(1) == GL_USER:
-                            return m.group(2)
-                finally:
-                    f.close()
-        return super(GitoliteEnvironmentLowPrecMixin, self).get_fromaddr(change)
-
-
-class IncrementalDateTime(object):
-    """Simple wrapper to give incremental date/times.
-
-    Each call will result in a date/time a second later than the
-    previous call.  This can be used to falsify email headers, to
-    increase the likelihood that email clients sort the emails
-    correctly."""
-
-    def __init__(self):
-        self.time = time.time()
-        self.next = self.__next__  # Python 2 backward compatibility
-
-    def __next__(self):
-        formatted = formatdate(self.time, True)
-        self.time += 1
-        return formatted
-
-
-class StashEnvironmentHighPrecMixin(Environment):
-    def __init__(self, user=None, repo=None, **kw):
-        super(StashEnvironmentHighPrecMixin,
-              self).__init__(user=user, repo=repo, **kw)
-        self.__user = user
-        self.__repo = repo
-
-    def get_pusher(self):
-        return re.match(r'(.*?)\s*<', self.__user).group(1)
-
-    def get_pusher_email(self):
-        return self.__user
-
-
-class StashEnvironmentLowPrecMixin(Environment):
-    def __init__(self, user=None, repo=None, **kw):
-        super(StashEnvironmentLowPrecMixin, self).__init__(**kw)
-        self.__repo = repo
-        self.__user = user
-
-    def get_repo_shortname(self):
-        return self.__repo
-
-    def get_fromaddr(self, change=None):
-        return self.__user
-
-
-class GerritEnvironmentHighPrecMixin(Environment):
-    def __init__(self, project=None, submitter=None, update_method=None, **kw):
-        super(GerritEnvironmentHighPrecMixin,
-              self).__init__(submitter=submitter, project=project, **kw)
-        self.__project = project
-        self.__submitter = submitter
-        self.__update_method = update_method
-        "Make an 'update_method' value available for templates."
-        self.COMPUTED_KEYS += ['update_method']
-
-    def get_pusher(self):
-        if self.__submitter:
-            if self.__submitter.find('<') != -1:
-                # Submitter has a configured email, we transformed
-                # __submitter into an RFC 2822 string already.
-                return re.match(r'(.*?)\s*<', self.__submitter).group(1)
-            else:
-                # Submitter has no configured email, it's just his name.
-                return self.__submitter
-        else:
-            # If we arrive here, this means someone pushed "Submit" from
-            # the gerrit web UI for the CR (or used one of the programmatic
-            # APIs to do the same, such as gerrit review) and the
-            # merge/push was done by the Gerrit user.  It was technically
-            # triggered by someone else, but sadly we have no way of
-            # determining who that someone else is at this point.
-            return 'Gerrit'  # 'unknown user'?
-
-    def get_pusher_email(self):
-        if self.__submitter:
-            return self.__submitter
-        else:
-            return super(GerritEnvironmentHighPrecMixin, self).get_pusher_email()
-
-    def get_default_ref_ignore_regex(self):
-        default = super(GerritEnvironmentHighPrecMixin, self).get_default_ref_ignore_regex()
-        return default + '|^refs/changes/|^refs/cache-automerge/|^refs/meta/'
-
-    def get_revision_recipients(self, revision):
-        # Merge commits created by Gerrit when users hit "Submit this patchset"
-        # in the Web UI (or do equivalently with REST APIs or the gerrit review
-        # command) are not something users want to see an individual email for.
-        # Filter them out.
-        committer = read_git_output(['log', '--no-walk', '--format=%cN',
-                                     revision.rev.sha1])
-        if committer == 'Gerrit Code Review':
-            return []
-        else:
-            return super(GerritEnvironmentHighPrecMixin, self).get_revision_recipients(revision)
-
-    def get_update_method(self):
-        return self.__update_method
-
-
-class GerritEnvironmentLowPrecMixin(Environment):
-    def __init__(self, project=None, submitter=None, **kw):
-        super(GerritEnvironmentLowPrecMixin, self).__init__(**kw)
-        self.__project = project
-        self.__submitter = submitter
-
-    def get_repo_shortname(self):
-        return self.__project
-
-    def get_fromaddr(self, change=None):
-        if self.__submitter and self.__submitter.find('<') != -1:
-            return self.__submitter
-        else:
-            return super(GerritEnvironmentLowPrecMixin, self).get_fromaddr(change)
-
-
-class Push(object):
-    """Represent an entire push (i.e., a group of ReferenceChanges).
-
-    It is easy to figure out what commits were added to a *branch* by
-    a Reference change:
-
-        git rev-list change.old..change.new
-
-    or removed from a *branch*:
-
-        git rev-list change.new..change.old
-
-    But it is not quite so trivial to determine which entirely new
-    commits were added to the *repository* by a push and which old
-    commits were discarded by a push.  A big part of the job of this
-    class is to figure out these things, and to make sure that new
-    commits are only detailed once even if they were added to multiple
-    references.
-
-    The first step is to determine the "other" references--those
-    unaffected by the current push.  They are computed by listing all
-    references then removing any affected by this push.  The results
-    are stored in Push._other_ref_sha1s.
-
-    The commits contained in the repository before this push were
-
-        git rev-list other1 other2 other3 ... change1.old change2.old ...
-
-    Where "changeN.old" is the old value of one of the references
-    affected by this push.
-
-    The commits contained in the repository after this push are
-
-        git rev-list other1 other2 other3 ... change1.new change2.new ...
-
-    The commits added by this push are the difference between these
-    two sets, which can be written
-
-        git rev-list \
-            ^other1 ^other2 ... \
-            ^change1.old ^change2.old ... \
-            change1.new change2.new ...
-
-    The commits removed by this push can be computed by
-
-        git rev-list \
-            ^other1 ^other2 ... \
-            ^change1.new ^change2.new ... \
-            change1.old change2.old ...
-
-    The last point is that it is possible that other pushes are
-    occurring simultaneously to this one, so reference values can
-    change at any time.  It is impossible to eliminate all race
-    conditions, but we reduce the window of time during which problems
-    can occur by translating reference names to SHA1s as soon as
-    possible and working with SHA1s thereafter (because SHA1s are
-    immutable)."""
-
-    # A map {(changeclass, changetype): integer} specifying the order
-    # that reference changes will be processed if multiple reference
-    # changes are included in a single push.  The order is significant
-    # mostly because new commit notifications are threaded together
-    # with the first reference change that includes the commit.  The
-    # following order thus causes commits to be grouped with branch
-    # changes (as opposed to tag changes) if possible.
-    SORT_ORDER = dict(
-        (value, i) for (i, value) in enumerate([
-            (BranchChange, 'update'),
-            (BranchChange, 'create'),
-            (AnnotatedTagChange, 'update'),
-            (AnnotatedTagChange, 'create'),
-            (NonAnnotatedTagChange, 'update'),
-            (NonAnnotatedTagChange, 'create'),
-            (BranchChange, 'delete'),
-            (AnnotatedTagChange, 'delete'),
-            (NonAnnotatedTagChange, 'delete'),
-            (OtherReferenceChange, 'update'),
-            (OtherReferenceChange, 'create'),
-            (OtherReferenceChange, 'delete'),
-            ])
-        )
-
-    def __init__(self, environment, changes, ignore_other_refs=False):
-        self.changes = sorted(changes, key=self._sort_key)
-        self.__other_ref_sha1s = None
-        self.__cached_commits_spec = {}
-        self.environment = environment
-
-        if ignore_other_refs:
-            self.__other_ref_sha1s = set()
-
-    @classmethod
-    def _sort_key(klass, change):
-        return (klass.SORT_ORDER[change.__class__, change.change_type], change.refname,)
-
-    @property
-    def _other_ref_sha1s(self):
-        """The GitObjects referred to by references unaffected by this push.
-        """
-        if self.__other_ref_sha1s is None:
-            # The refnames being changed by this push:
-            updated_refs = set(
-                change.refname
-                for change in self.changes
-                )
-
-            # The SHA-1s of commits referred to by all references in this
-            # repository *except* updated_refs:
-            sha1s = set()
-            fmt = (
-                '%(objectname) %(objecttype) %(refname)\n'
-                '%(*objectname) %(*objecttype) %(refname)'
-                )
-            ref_filter_regex, is_inclusion_filter = \
-                self.environment.get_ref_filter_regex()
-            for line in read_git_lines(
-                    ['for-each-ref', '--format=%s' % (fmt,)]):
-                (sha1, type, name) = line.split(' ', 2)
-                if (sha1 and type == 'commit' and
-                        name not in updated_refs and
-                        include_ref(name, ref_filter_regex, is_inclusion_filter)):
-                    sha1s.add(sha1)
-
-            self.__other_ref_sha1s = sha1s
-
-        return self.__other_ref_sha1s
-
-    def _get_commits_spec_incl(self, new_or_old, reference_change=None):
-        """Get new or old SHA-1 from one or each of the changed refs.
-
-        Return a list of SHA-1 commit identifier strings suitable as
-        arguments to 'git rev-list' (or 'git log' or ...).  The
-        returned identifiers are either the old or new values from one
-        or all of the changed references, depending on the values of
-        new_or_old and reference_change.
-
-        new_or_old is either the string 'new' or the string 'old'.  If
-        'new', the returned SHA-1 identifiers are the new values from
-        each changed reference.  If 'old', the SHA-1 identifiers are
-        the old values from each changed reference.
-
-        If reference_change is specified and not None, only the new or
-        old reference from the specified reference is included in the
-        return value.
-
-        This function returns None if there are no matching revisions
-        (e.g., because a branch was deleted and new_or_old is 'new').
-        """
-
-        if not reference_change:
-            incl_spec = sorted(
-                getattr(change, new_or_old).sha1
-                for change in self.changes
-                if getattr(change, new_or_old)
-                )
-            if not incl_spec:
-                incl_spec = None
-        elif not getattr(reference_change, new_or_old).commit_sha1:
-            incl_spec = None
-        else:
-            incl_spec = [getattr(reference_change, new_or_old).commit_sha1]
-        return incl_spec
-
-    def _get_commits_spec_excl(self, new_or_old):
-        """Get exclusion revisions for determining new or discarded commits.
-
-        Return a list of strings suitable as arguments to 'git
-        rev-list' (or 'git log' or ...) that will exclude all
-        commits that, depending on the value of new_or_old, were
-        either previously in the repository (useful for determining
-        which commits are new to the repository) or currently in the
-        repository (useful for determining which commits were
-        discarded from the repository).
-
-        new_or_old is either the string 'new' or the string 'old'.  If
-        'new', the commits to be excluded are those that were in the
-        repository before the push.  If 'old', the commits to be
-        excluded are those that are currently in the repository.  """
-
-        old_or_new = {'old': 'new', 'new': 'old'}[new_or_old]
-        excl_revs = self._other_ref_sha1s.union(
-            getattr(change, old_or_new).sha1
-            for change in self.changes
-            if getattr(change, old_or_new).type in ['commit', 'tag']
-            )
-        return ['^' + sha1 for sha1 in sorted(excl_revs)]
-
-    def get_commits_spec(self, new_or_old, reference_change=None):
-        """Get rev-list arguments for added or discarded commits.
-
-        Return a list of strings suitable as arguments to 'git
-        rev-list' (or 'git log' or ...) that select those commits
-        that, depending on the value of new_or_old, are either new to
-        the repository or were discarded from the repository.
-
-        new_or_old is either the string 'new' or the string 'old'.  If
-        'new', the returned list is used to select commits that are
-        new to the repository.  If 'old', the returned value is used
-        to select the commits that have been discarded from the
-        repository.
-
-        If reference_change is specified and not None, the new or
-        discarded commits are limited to those that are reachable from
-        the new or old value of the specified reference.
-
-        This function returns None if there are no added (or discarded)
-        revisions.
-        """
-        key = (new_or_old, reference_change)
-        if key not in self.__cached_commits_spec:
-            ret = self._get_commits_spec_incl(new_or_old, reference_change)
-            if ret is not None:
-                ret.extend(self._get_commits_spec_excl(new_or_old))
-            self.__cached_commits_spec[key] = ret
-        return self.__cached_commits_spec[key]
-
-    def get_new_commits(self, reference_change=None):
-        """Return a list of commits added by this push.
-
-        Return a list of the object names of commits that were added
-        by the part of this push represented by reference_change.  If
-        reference_change is None, then return a list of *all* commits
-        added by this push."""
-
-        spec = self.get_commits_spec('new', reference_change)
-        return git_rev_list(spec)
-
-    def get_discarded_commits(self, reference_change):
-        """Return a list of commits discarded by this push.
-
-        Return a list of the object names of commits that were
-        entirely discarded from the repository by the part of this
-        push represented by reference_change."""
-
-        spec = self.get_commits_spec('old', reference_change)
-        return git_rev_list(spec)
-
-    def send_emails(self, mailer, body_filter=None):
-        """Use send all of the notification emails needed for this push.
-
-        Use send all of the notification emails (including reference
-        change emails and commit emails) needed for this push.  Send
-        the emails using mailer.  If body_filter is not None, then use
-        it to filter the lines that are intended for the email
-        body."""
-
-        # The sha1s of commits that were introduced by this push.
-        # They will be removed from this set as they are processed, to
-        # guarantee that one (and only one) email is generated for
-        # each new commit.
-        unhandled_sha1s = set(self.get_new_commits())
-        send_date = IncrementalDateTime()
-        for change in self.changes:
-            sha1s = []
-            for sha1 in reversed(list(self.get_new_commits(change))):
-                if sha1 in unhandled_sha1s:
-                    sha1s.append(sha1)
-                    unhandled_sha1s.remove(sha1)
-
-            # Check if we've got anyone to send to
-            if not change.recipients:
-                change.environment.log_warning(
-                    '*** no recipients configured so no email will be sent\n'
-                    '*** for %r update %s->%s'
-                    % (change.refname, change.old.sha1, change.new.sha1,)
-                    )
-            else:
-                if not change.environment.quiet:
-                    change.environment.log_msg(
-                        'Sending notification emails to: %s' % (change.recipients,))
-                extra_values = {'send_date': next(send_date)}
-
-                rev = change.send_single_combined_email(sha1s)
-                if rev:
-                    mailer.send(
-                        change.generate_combined_email(self, rev, body_filter, extra_values),
-                        rev.recipients,
-                        )
-                    # This change is now fully handled; no need to handle
-                    # individual revisions any further.
-                    continue
-                else:
-                    mailer.send(
-                        change.generate_email(self, body_filter, extra_values),
-                        change.recipients,
-                        )
-
-            max_emails = change.environment.maxcommitemails
-            if max_emails and len(sha1s) > max_emails:
-                change.environment.log_warning(
-                    '*** Too many new commits (%d), not sending commit emails.\n' % len(sha1s) +
-                    '*** Try setting multimailhook.maxCommitEmails to a greater value\n' +
-                    '*** Currently, multimailhook.maxCommitEmails=%d' % max_emails
-                    )
-                return
-
-            for (num, sha1) in enumerate(sha1s):
-                rev = Revision(change, GitObject(sha1), num=num + 1, tot=len(sha1s))
-                if len(rev.parents) > 1 and change.environment.excludemergerevisions:
-                    # skipping a merge commit
-                    continue
-                if not rev.recipients and rev.cc_recipients:
-                    change.environment.log_msg('*** Replacing Cc: with To:')
-                    rev.recipients = rev.cc_recipients
-                    rev.cc_recipients = None
-                if rev.recipients:
-                    extra_values = {'send_date': next(send_date)}
-                    mailer.send(
-                        rev.generate_email(self, body_filter, extra_values),
-                        rev.recipients,
-                        )
-
-        # Consistency check:
-        if unhandled_sha1s:
-            change.environment.log_error(
-                'ERROR: No emails were sent for the following new commits:\n'
-                '    %s'
-                % ('\n    '.join(sorted(unhandled_sha1s)),)
-                )
-
-
-def include_ref(refname, ref_filter_regex, is_inclusion_filter):
-    does_match = bool(ref_filter_regex.search(refname))
-    if is_inclusion_filter:
-        return does_match
-    else:  # exclusion filter -- we include the ref if the regex doesn't match
-        return not does_match
-
-
-def run_as_post_receive_hook(environment, mailer):
-    environment.check()
-    send_filter_regex, send_is_inclusion_filter = environment.get_ref_filter_regex(True)
-    ref_filter_regex, is_inclusion_filter = environment.get_ref_filter_regex(False)
-    changes = []
-    while True:
-        line = read_line(sys.stdin)
-        if line == '':
-            break
-        (oldrev, newrev, refname) = line.strip().split(' ', 2)
-        environment.get_logger().debug(
-            "run_as_post_receive_hook: oldrev=%s, newrev=%s, refname=%s" %
-            (oldrev, newrev, refname))
-
-        if not include_ref(refname, ref_filter_regex, is_inclusion_filter):
-            continue
-        if not include_ref(refname, send_filter_regex, send_is_inclusion_filter):
-            continue
-        changes.append(
-            ReferenceChange.create(environment, oldrev, newrev, refname)
-            )
-    if not changes:
-        mailer.close()
-        return
-    push = Push(environment, changes)
-    try:
-        push.send_emails(mailer, body_filter=environment.filter_body)
-    finally:
-        mailer.close()
-
-
-def run_as_update_hook(environment, mailer, refname, oldrev, newrev, force_send=False):
-    environment.check()
-    send_filter_regex, send_is_inclusion_filter = environment.get_ref_filter_regex(True)
-    ref_filter_regex, is_inclusion_filter = environment.get_ref_filter_regex(False)
-    if not include_ref(refname, ref_filter_regex, is_inclusion_filter):
-        return
-    if not include_ref(refname, send_filter_regex, send_is_inclusion_filter):
-        return
-    changes = [
-        ReferenceChange.create(
-            environment,
-            read_git_output(['rev-parse', '--verify', oldrev]),
-            read_git_output(['rev-parse', '--verify', newrev]),
-            refname,
-            ),
-        ]
-    if not changes:
-        mailer.close()
-        return
-    push = Push(environment, changes, force_send)
-    try:
-        push.send_emails(mailer, body_filter=environment.filter_body)
-    finally:
-        mailer.close()
-
-
-def check_ref_filter(environment):
-    send_filter_regex, send_is_inclusion = environment.get_ref_filter_regex(True)
-    ref_filter_regex, ref_is_inclusion = environment.get_ref_filter_regex(False)
-
-    def inc_exc_lusion(b):
-        if b:
-            return 'inclusion'
-        else:
-            return 'exclusion'
-
-    if send_filter_regex:
-        sys.stdout.write("DoSend/DontSend filter regex (" +
-                         (inc_exc_lusion(send_is_inclusion)) +
-                         '): ' + send_filter_regex.pattern +
-                         '\n')
-    if send_filter_regex:
-        sys.stdout.write("Include/Exclude filter regex (" +
-                         (inc_exc_lusion(ref_is_inclusion)) +
-                         '): ' + ref_filter_regex.pattern +
-                         '\n')
-    sys.stdout.write(os.linesep)
-
-    sys.stdout.write(
-        "Refs marked as EXCLUDE are excluded by either refFilterInclusionRegex\n"
-        "or refFilterExclusionRegex. No emails will be sent for commits included\n"
-        "in these refs.\n"
-        "Refs marked as DONT-SEND are excluded by either refFilterDoSendRegex or\n"
-        "refFilterDontSendRegex, but not by either refFilterInclusionRegex or\n"
-        "refFilterExclusionRegex. Emails will be sent for commits included in these\n"
-        "refs only when the commit reaches a ref which isn't excluded.\n"
-        "Refs marked as DO-SEND are not excluded by any filter. Emails will\n"
-        "be sent normally for commits included in these refs.\n")
-
-    sys.stdout.write(os.linesep)
-
-    for refname in read_git_lines(['for-each-ref', '--format', '%(refname)']):
-        sys.stdout.write(refname)
-        if not include_ref(refname, ref_filter_regex, ref_is_inclusion):
-            sys.stdout.write(' EXCLUDE')
-        elif not include_ref(refname, send_filter_regex, send_is_inclusion):
-            sys.stdout.write(' DONT-SEND')
-        else:
-            sys.stdout.write(' DO-SEND')
-
-        sys.stdout.write(os.linesep)
-
-
-def show_env(environment, out):
-    out.write('Environment values:\n')
-    for (k, v) in sorted(environment.get_values().items()):
-        if k:  # Don't show the {'' : ''} pair.
-            out.write('    %s : %r\n' % (k, v))
-    out.write('\n')
-    # Flush to avoid interleaving with further log output
-    out.flush()
-
-
-def check_setup(environment):
-    environment.check()
-    show_env(environment, sys.stdout)
-    sys.stdout.write("Now, checking that git-multimail's standard input "
-                     "is properly set ..." + os.linesep)
-    sys.stdout.write("Please type some text and then press Return" + os.linesep)
-    stdin = sys.stdin.readline()
-    sys.stdout.write("You have just entered:" + os.linesep)
-    sys.stdout.write(stdin)
-    sys.stdout.write("git-multimail seems properly set up." + os.linesep)
-
-
-def choose_mailer(config, environment):
-    mailer = config.get('mailer', default='sendmail')
-
-    if mailer == 'smtp':
-        smtpserver = config.get('smtpserver', default='localhost')
-        smtpservertimeout = float(config.get('smtpservertimeout', default=10.0))
-        smtpserverdebuglevel = int(config.get('smtpserverdebuglevel', default=0))
-        smtpencryption = config.get('smtpencryption', default='none')
-        smtpuser = config.get('smtpuser', default='')
-        smtppass = config.get('smtppass', default='')
-        smtpcacerts = config.get('smtpcacerts', default='')
-        mailer = SMTPMailer(
-            environment,
-            envelopesender=(environment.get_sender() or environment.get_fromaddr()),
-            smtpserver=smtpserver, smtpservertimeout=smtpservertimeout,
-            smtpserverdebuglevel=smtpserverdebuglevel,
-            smtpencryption=smtpencryption,
-            smtpuser=smtpuser,
-            smtppass=smtppass,
-            smtpcacerts=smtpcacerts
-            )
-    elif mailer == 'sendmail':
-        command = config.get('sendmailcommand')
-        if command:
-            command = shlex.split(command)
-        mailer = SendMailer(environment,
-                            command=command, envelopesender=environment.get_sender())
-    else:
-        environment.log_error(
-            'fatal: multimailhook.mailer is set to an incorrect value: "%s"\n' % mailer +
-            'please use one of "smtp" or "sendmail".'
-            )
-        sys.exit(1)
-    return mailer
-
-
-KNOWN_ENVIRONMENTS = {
-    'generic': {'highprec': GenericEnvironmentMixin},
-    'gitolite': {'highprec': GitoliteEnvironmentHighPrecMixin,
-                 'lowprec': GitoliteEnvironmentLowPrecMixin},
-    'stash': {'highprec': StashEnvironmentHighPrecMixin,
-              'lowprec': StashEnvironmentLowPrecMixin},
-    'gerrit': {'highprec': GerritEnvironmentHighPrecMixin,
-               'lowprec': GerritEnvironmentLowPrecMixin},
-    }
-
-
-def choose_environment(config, osenv=None, env=None, recipients=None,
-                       hook_info=None):
-    env_name = choose_environment_name(config, env, osenv)
-    environment_klass = build_environment_klass(env_name)
-    env = build_environment(environment_klass, env_name, config,
-                            osenv, recipients, hook_info)
-    return env
-
-
-def choose_environment_name(config, env, osenv):
-    if not osenv:
-        osenv = os.environ
-
-    if not env:
-        env = config.get('environment')
-
-    if not env:
-        if 'GL_USER' in osenv and 'GL_REPO' in osenv:
-            env = 'gitolite'
-        else:
-            env = 'generic'
-    return env
-
-
-COMMON_ENVIRONMENT_MIXINS = [
-    ConfigRecipientsEnvironmentMixin,
-    CLIRecipientsEnvironmentMixin,
-    ConfigRefFilterEnvironmentMixin,
-    ProjectdescEnvironmentMixin,
-    ConfigMaxlinesEnvironmentMixin,
-    ComputeFQDNEnvironmentMixin,
-    ConfigFilterLinesEnvironmentMixin,
-    PusherDomainEnvironmentMixin,
-    ConfigOptionsEnvironmentMixin,
-    ]
-
-
-def build_environment_klass(env_name):
-    if 'class' in KNOWN_ENVIRONMENTS[env_name]:
-        return KNOWN_ENVIRONMENTS[env_name]['class']
-
-    environment_mixins = []
-    known_env = KNOWN_ENVIRONMENTS[env_name]
-    if 'highprec' in known_env:
-        high_prec_mixin = known_env['highprec']
-        environment_mixins.append(high_prec_mixin)
-    environment_mixins = environment_mixins + COMMON_ENVIRONMENT_MIXINS
-    if 'lowprec' in known_env:
-        low_prec_mixin = known_env['lowprec']
-        environment_mixins.append(low_prec_mixin)
-    environment_mixins.append(Environment)
-    klass_name = env_name.capitalize() + 'Environment'
-    environment_klass = type(
-        klass_name,
-        tuple(environment_mixins),
-        {},
-        )
-    KNOWN_ENVIRONMENTS[env_name]['class'] = environment_klass
-    return environment_klass
-
-
-GerritEnvironment = build_environment_klass('gerrit')
-StashEnvironment = build_environment_klass('stash')
-GitoliteEnvironment = build_environment_klass('gitolite')
-GenericEnvironment = build_environment_klass('generic')
-
-
-def build_environment(environment_klass, env, config,
-                      osenv, recipients, hook_info):
-    environment_kw = {
-        'osenv': osenv,
-        'config': config,
-        }
-
-    if env == 'stash':
-        environment_kw['user'] = hook_info['stash_user']
-        environment_kw['repo'] = hook_info['stash_repo']
-    elif env == 'gerrit':
-        environment_kw['project'] = hook_info['project']
-        environment_kw['submitter'] = hook_info['submitter']
-        environment_kw['update_method'] = hook_info['update_method']
-
-    environment_kw['cli_recipients'] = recipients
-
-    return environment_klass(**environment_kw)
-
-
-def get_version():
-    oldcwd = os.getcwd()
-    try:
-        try:
-            os.chdir(os.path.dirname(os.path.realpath(__file__)))
-            git_version = read_git_output(['describe', '--tags', 'HEAD'])
-            if git_version == __version__:
-                return git_version
-            else:
-                return '%s (%s)' % (__version__, git_version)
-        except:
-            pass
-    finally:
-        os.chdir(oldcwd)
-    return __version__
-
-
-def compute_gerrit_options(options, args, required_gerrit_options,
-                           raw_refname):
-    if None in required_gerrit_options:
-        raise SystemExit("Error: Specify all of --oldrev, --newrev, --refname, "
-                         "and --project; or none of them.")
-
-    if options.environment not in (None, 'gerrit'):
-        raise SystemExit("Non-gerrit environments incompatible with --oldrev, "
-                         "--newrev, --refname, and --project")
-    options.environment = 'gerrit'
-
-    if args:
-        raise SystemExit("Error: Positional parameters not allowed with "
-                         "--oldrev, --newrev, and --refname.")
-
-    # Gerrit oddly omits 'refs/heads/' in the refname when calling
-    # ref-updated hook; put it back.
-    git_dir = get_git_dir()
-    if (not os.path.exists(os.path.join(git_dir, raw_refname)) and
-        os.path.exists(os.path.join(git_dir, 'refs', 'heads',
-                                    raw_refname))):
-        options.refname = 'refs/heads/' + options.refname
-
-    # New revisions can appear in a gerrit repository either due to someone
-    # pushing directly (in which case options.submitter will be set), or they
-    # can press "Submit this patchset" in the web UI for some CR (in which
-    # case options.submitter will not be set and gerrit will not have provided
-    # us the information about who pressed the button).
-    #
-    # Note for the nit-picky: I'm lumping in REST API calls and the ssh
-    # gerrit review command in with "Submit this patchset" button, since they
-    # have the same effect.
-    if options.submitter:
-        update_method = 'pushed'
-        # The submitter argument is almost an RFC 2822 email address; change it
-        # from 'User Name (email@domain)' to 'User Name <email@domain>' so it is
-        options.submitter = options.submitter.replace('(', '<').replace(')', '>')
-    else:
-        update_method = 'submitted'
-        # Gerrit knew who submitted this patchset, but threw that information
-        # away when it invoked this hook.  However, *IF* Gerrit created a
-        # merge to bring the patchset in (project 'Submit Type' is either
-        # "Always Merge", or is "Merge if Necessary" and happens to be
-        # necessary for this particular CR), then it will have the committer
-        # of that merge be 'Gerrit Code Review' and the author will be the
-        # person who requested the submission of the CR.  Since this is fairly
-        # likely for most gerrit installations (of a reasonable size), it's
-        # worth the extra effort to try to determine the actual submitter.
-        rev_info = read_git_lines(['log', '--no-walk', '--merges',
-                                   '--format=%cN%n%aN <%aE>', options.newrev])
-        if rev_info and rev_info[0] == 'Gerrit Code Review':
-            options.submitter = rev_info[1]
-
-    # We pass back refname, oldrev, newrev as args because then the
-    # gerrit ref-updated hook is much like the git update hook
-    return (options,
-            [options.refname, options.oldrev, options.newrev],
-            {'project': options.project, 'submitter': options.submitter,
-             'update_method': update_method})
-
-
-def check_hook_specific_args(options, args):
-    raw_refname = options.refname
-    # Convert each string option unicode for Python3.
-    if PYTHON3:
-        opts = ['environment', 'recipients', 'oldrev', 'newrev', 'refname',
-                'project', 'submitter', 'stash_user', 'stash_repo']
-        for opt in opts:
-            if not hasattr(options, opt):
-                continue
-            obj = getattr(options, opt)
-            if obj:
-                enc = obj.encode('utf-8', 'surrogateescape')
-                dec = enc.decode('utf-8', 'replace')
-                setattr(options, opt, dec)
-
-    # First check for stash arguments
-    if (options.stash_user is None) != (options.stash_repo is None):
-        raise SystemExit("Error: Specify both of --stash-user and "
-                         "--stash-repo or neither.")
-    if options.stash_user:
-        options.environment = 'stash'
-        return options, args, {'stash_user': options.stash_user,
-                               'stash_repo': options.stash_repo}
-
-    # Finally, check for gerrit specific arguments
-    required_gerrit_options = (options.oldrev, options.newrev, options.refname,
-                               options.project)
-    if required_gerrit_options != (None,) * 4:
-        return compute_gerrit_options(options, args, required_gerrit_options,
-                                      raw_refname)
-
-    # No special options in use, just return what we started with
-    return options, args, {}
-
-
-class Logger(object):
-    def parse_verbose(self, verbose):
-        if verbose > 0:
-            return logging.DEBUG
-        else:
-            return logging.INFO
-
-    def create_log_file(self, environment, name, path, verbosity):
-        log_file = logging.getLogger(name)
-        file_handler = logging.FileHandler(path)
-        log_fmt = logging.Formatter("%(asctime)s [%(levelname)-5.5s]  %(message)s")
-        file_handler.setFormatter(log_fmt)
-        log_file.addHandler(file_handler)
-        log_file.setLevel(verbosity)
-        return log_file
-
-    def __init__(self, environment):
-        self.environment = environment
-        self.loggers = []
-        stderr_log = logging.getLogger('git_multimail.stderr')
-
-        class EncodedStderr(object):
-            def write(self, x):
-                write_str(sys.stderr, x)
-
-            def flush(self):
-                sys.stderr.flush()
-
-        stderr_handler = logging.StreamHandler(EncodedStderr())
-        stderr_log.addHandler(stderr_handler)
-        stderr_log.setLevel(self.parse_verbose(environment.verbose))
-        self.loggers.append(stderr_log)
-
-        if environment.debug_log_file is not None:
-            debug_log_file = self.create_log_file(
-                environment, 'git_multimail.debug', environment.debug_log_file, logging.DEBUG)
-            self.loggers.append(debug_log_file)
-
-        if environment.log_file is not None:
-            log_file = self.create_log_file(
-                environment, 'git_multimail.file', environment.log_file, logging.INFO)
-            self.loggers.append(log_file)
-
-        if environment.error_log_file is not None:
-            error_log_file = self.create_log_file(
-                environment, 'git_multimail.error', environment.error_log_file, logging.ERROR)
-            self.loggers.append(error_log_file)
-
-    def info(self, msg, *args, **kwargs):
-        for l in self.loggers:
-            l.info(msg, *args, **kwargs)
-
-    def debug(self, msg, *args, **kwargs):
-        for l in self.loggers:
-            l.debug(msg, *args, **kwargs)
-
-    def warning(self, msg, *args, **kwargs):
-        for l in self.loggers:
-            l.warning(msg, *args, **kwargs)
-
-    def error(self, msg, *args, **kwargs):
-        for l in self.loggers:
-            l.error(msg, *args, **kwargs)
-
-
-def main(args):
-    parser = optparse.OptionParser(
-        description=__doc__,
-        usage='%prog [OPTIONS]\n   or: %prog [OPTIONS] REFNAME OLDREV NEWREV',
-        )
-
-    parser.add_option(
-        '--environment', '--env', action='store', type='choice',
-        choices=list(KNOWN_ENVIRONMENTS.keys()), default=None,
-        help=(
-            'Choose type of environment is in use.  Default is taken from '
-            'multimailhook.environment if set; otherwise "generic".'
-            ),
-        )
-    parser.add_option(
-        '--stdout', action='store_true', default=False,
-        help='Output emails to stdout rather than sending them.',
-        )
-    parser.add_option(
-        '--recipients', action='store', default=None,
-        help='Set list of email recipients for all types of emails.',
-        )
-    parser.add_option(
-        '--show-env', action='store_true', default=False,
-        help=(
-            'Write to stderr the values determined for the environment '
-            '(intended for debugging purposes), then proceed normally.'
-            ),
-        )
-    parser.add_option(
-        '--force-send', action='store_true', default=False,
-        help=(
-            'Force sending refchange email when using as an update hook. '
-            'This is useful to work around the unreliable new commits '
-            'detection in this mode.'
-            ),
-        )
-    parser.add_option(
-        '-c', metavar="<name>=<value>", action='append',
-        help=(
-            'Pass a configuration parameter through to git.  The value given '
-            'will override values from configuration files.  See the -c option '
-            'of git(1) for more details.  (Only works with git >= 1.7.3)'
-            ),
-        )
-    parser.add_option(
-        '--version', '-v', action='store_true', default=False,
-        help=(
-            "Display git-multimail's version"
-            ),
-        )
-
-    parser.add_option(
-        '--python-version', action='store_true', default=False,
-        help=(
-            "Display the version of Python used by git-multimail"
-            ),
-        )
-
-    parser.add_option(
-        '--check-ref-filter', action='store_true', default=False,
-        help=(
-            'List refs and show information on how git-multimail '
-            'will process them.'
-            )
-        )
-
-    # The following options permit this script to be run as a gerrit
-    # ref-updated hook.  See e.g.
-    # code.google.com/p/gerrit/source/browse/Documentation/config-hooks.txt
-    # We suppress help for these items, since these are specific to gerrit,
-    # and we don't want users directly using them any way other than how the
-    # gerrit ref-updated hook is called.
-    parser.add_option('--oldrev', action='store', help=optparse.SUPPRESS_HELP)
-    parser.add_option('--newrev', action='store', help=optparse.SUPPRESS_HELP)
-    parser.add_option('--refname', action='store', help=optparse.SUPPRESS_HELP)
-    parser.add_option('--project', action='store', help=optparse.SUPPRESS_HELP)
-    parser.add_option('--submitter', action='store', help=optparse.SUPPRESS_HELP)
-
-    # The following allow this to be run as a stash asynchronous post-receive
-    # hook (almost identical to a git post-receive hook but triggered also for
-    # merges of pull requests from the UI).  We suppress help for these items,
-    # since these are specific to stash.
-    parser.add_option('--stash-user', action='store', help=optparse.SUPPRESS_HELP)
-    parser.add_option('--stash-repo', action='store', help=optparse.SUPPRESS_HELP)
-
-    (options, args) = parser.parse_args(args)
-    (options, args, hook_info) = check_hook_specific_args(options, args)
-
-    if options.version:
-        sys.stdout.write('git-multimail version ' + get_version() + '\n')
-        return
-
-    if options.python_version:
-        sys.stdout.write('Python version ' + sys.version + '\n')
-        return
-
-    if options.c:
-        Config.add_config_parameters(options.c)
-
-    config = Config('multimailhook')
-
-    environment = None
-    try:
-        environment = choose_environment(
-            config, osenv=os.environ,
-            env=options.environment,
-            recipients=options.recipients,
-            hook_info=hook_info,
-            )
-
-        if options.show_env:
-            show_env(environment, sys.stderr)
-
-        if options.stdout or environment.stdout:
-            mailer = OutputMailer(sys.stdout, environment)
-        else:
-            mailer = choose_mailer(config, environment)
-
-        must_check_setup = os.environ.get('GIT_MULTIMAIL_CHECK_SETUP')
-        if must_check_setup == '':
-            must_check_setup = False
-        if options.check_ref_filter:
-            check_ref_filter(environment)
-        elif must_check_setup:
-            check_setup(environment)
-        # Dual mode: if arguments were specified on the command line, run
-        # like an update hook; otherwise, run as a post-receive hook.
-        elif args:
-            if len(args) != 3:
-                parser.error('Need zero or three non-option arguments')
-            (refname, oldrev, newrev) = args
-            environment.get_logger().debug(
-                "run_as_update_hook: refname=%s, oldrev=%s, newrev=%s, force_send=%s" %
-                (refname, oldrev, newrev, options.force_send))
-            run_as_update_hook(environment, mailer, refname, oldrev, newrev, options.force_send)
-        else:
-            run_as_post_receive_hook(environment, mailer)
-    except ConfigurationException:
-        sys.exit(sys.exc_info()[1])
-    except SystemExit:
-        raise
-    except Exception:
-        t, e, tb = sys.exc_info()
-        import traceback
-        sys.stderr.write('\n')  # Avoid mixing message with previous output
-        msg = (
-            'Exception \'' + t.__name__ +
-            '\' raised. Please report this as a bug to\n'
-            'https://github.com/git-multimail/git-multimail/issues\n'
-            'with the information below:\n\n'
-            'git-multimail version ' + get_version() + '\n'
-            'Python version ' + sys.version + '\n' +
-            traceback.format_exc())
-        try:
-            environment.get_logger().error(msg)
-        except:
-            sys.stderr.write(msg)
-        sys.exit(1)
-
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
diff --git a/contrib/hooks/multimail/migrate-mailhook-config b/contrib/hooks/multimail/migrate-mailhook-config
deleted file mode 100755
index 241ba22..0000000
--- a/contrib/hooks/multimail/migrate-mailhook-config
+++ /dev/null
@@ -1,274 +0,0 @@
-#! /usr/bin/env python
-
-"""Migrate a post-receive-email configuration to be usable with git_multimail.py.
-
-See README.migrate-from-post-receive-email for more information.
-
-"""
-
-import sys
-import optparse
-
-from git_multimail import CommandError
-from git_multimail import Config
-from git_multimail import read_output
-
-
-OLD_NAMES = [
-    'mailinglist',
-    'announcelist',
-    'envelopesender',
-    'emailprefix',
-    'showrev',
-    'emailmaxlines',
-    'diffopts',
-    'scancommitforcc',
-    ]
-
-NEW_NAMES = [
-    'environment',
-    'reponame',
-    'mailinglist',
-    'refchangelist',
-    'commitlist',
-    'announcelist',
-    'announceshortlog',
-    'envelopesender',
-    'administrator',
-    'emailprefix',
-    'emailmaxlines',
-    'diffopts',
-    'emaildomain',
-    'scancommitforcc',
-    ]
-
-
-INFO = """\
-
-SUCCESS!
-
-Your post-receive-email configuration has been converted to
-git-multimail format.  Please see README and
-README.migrate-from-post-receive-email to learn about other
-git-multimail configuration possibilities.
-
-For example, git-multimail has the following new options with no
-equivalent in post-receive-email.  You might want to read about them
-to see if they would be useful in your situation:
-
-"""
-
-
-def _check_old_config_exists(old):
-    """Check that at least one old configuration value is set."""
-
-    for name in OLD_NAMES:
-        if name in old:
-            return True
-
-    return False
-
-
-def _check_new_config_clear(new):
-    """Check that none of the new configuration names are set."""
-
-    retval = True
-    for name in NEW_NAMES:
-        if name in new:
-            if retval:
-                sys.stderr.write('INFO: The following configuration values already exist:\n\n')
-            sys.stderr.write('    "%s.%s"\n' % (new.section, name))
-            retval = False
-
-    return retval
-
-
-def erase_values(config, names):
-    for name in names:
-        if name in config:
-            try:
-                sys.stderr.write('...unsetting "%s.%s"\n' % (config.section, name))
-                config.unset_all(name)
-            except CommandError:
-                sys.stderr.write(
-                    '\nWARNING: could not unset "%s.%s".  '
-                    'Perhaps it is not set at the --local level?\n\n'
-                    % (config.section, name)
-                    )
-
-
-def is_section_empty(section, local):
-    """Return True iff the specified configuration section is empty.
-
-    Iff local is True, use the --local option when invoking 'git
-    config'."""
-
-    if local:
-        local_option = ['--local']
-    else:
-        local_option = []
-
-    try:
-        read_output(
-            ['git', 'config'] +
-            local_option +
-            ['--get-regexp', '^%s\.' % (section,)]
-            )
-    except CommandError:
-        t, e, traceback = sys.exc_info()
-        if e.retcode == 1:
-            # This means that no settings were found.
-            return True
-        else:
-            raise
-    else:
-        return False
-
-
-def remove_section_if_empty(section):
-    """If the specified configuration section is empty, delete it."""
-
-    try:
-        empty = is_section_empty(section, local=True)
-    except CommandError:
-        # Older versions of git do not support the --local option, so
-        # if the first attempt fails, try without --local.
-        try:
-            empty = is_section_empty(section, local=False)
-        except CommandError:
-            sys.stderr.write(
-                '\nINFO: If configuration section "%s.*" is empty, you might want '
-                'to delete it.\n\n'
-                % (section,)
-                )
-            return
-
-    if empty:
-        sys.stderr.write('...removing section "%s.*"\n' % (section,))
-        read_output(['git', 'config', '--remove-section', section])
-    else:
-        sys.stderr.write(
-            '\nINFO: Configuration section "%s.*" still has contents.  '
-            'It will not be deleted.\n\n'
-            % (section,)
-            )
-
-
-def migrate_config(strict=False, retain=False, overwrite=False):
-    old = Config('hooks')
-    new = Config('multimailhook')
-    if not _check_old_config_exists(old):
-        sys.exit(
-            'Your repository has no post-receive-email configuration.  '
-            'Nothing to do.'
-            )
-    if not _check_new_config_clear(new):
-        if overwrite:
-            sys.stderr.write('\nWARNING: Erasing the above values...\n\n')
-            erase_values(new, NEW_NAMES)
-        else:
-            sys.exit(
-                '\nERROR: Refusing to overwrite existing values.  Use the --overwrite\n'
-                'option to continue anyway.'
-                )
-
-    name = 'showrev'
-    if name in old:
-        msg = 'git-multimail does not support "%s.%s"' % (old.section, name,)
-        if strict:
-            sys.exit(
-                'ERROR: %s.\n'
-                'Please unset that value then try again, or run without --strict.'
-                % (msg,)
-                )
-        else:
-            sys.stderr.write('\nWARNING: %s (ignoring).\n\n' % (msg,))
-
-    for name in ['mailinglist', 'announcelist']:
-        if name in old:
-            sys.stderr.write(
-                '...copying "%s.%s" to "%s.%s"\n' % (old.section, name, new.section, name)
-                )
-            old_recipients = old.get_all(name, default=None)
-            old_recipients = ', '.join(o.strip() for o in old_recipients)
-            new.set_recipients(name, old_recipients)
-
-    if strict:
-        sys.stderr.write(
-            '...setting "%s.commitlist" to the empty string\n' % (new.section,)
-            )
-        new.set_recipients('commitlist', '')
-        sys.stderr.write(
-            '...setting "%s.announceshortlog" to "true"\n' % (new.section,)
-            )
-        new.set('announceshortlog', 'true')
-
-    for name in ['envelopesender', 'emailmaxlines', 'diffopts', 'scancommitforcc']:
-        if name in old:
-            sys.stderr.write(
-                '...copying "%s.%s" to "%s.%s"\n' % (old.section, name, new.section, name)
-                )
-            new.set(name, old.get(name))
-
-    name = 'emailprefix'
-    if name in old:
-        sys.stderr.write(
-            '...copying "%s.%s" to "%s.%s"\n' % (old.section, name, new.section, name)
-            )
-        new.set(name, old.get(name))
-    elif strict:
-        sys.stderr.write(
-            '...setting "%s.%s" to "[SCM]" to preserve old subject lines\n'
-            % (new.section, name)
-            )
-        new.set(name, '[SCM]')
-
-    if not retain:
-        erase_values(old, OLD_NAMES)
-        remove_section_if_empty(old.section)
-
-    sys.stderr.write(INFO)
-    for name in NEW_NAMES:
-        if name not in OLD_NAMES:
-            sys.stderr.write('    "%s.%s"\n' % (new.section, name,))
-    sys.stderr.write('\n')
-
-
-def main(args):
-    parser = optparse.OptionParser(
-        description=__doc__,
-        usage='%prog [OPTIONS]',
-        )
-
-    parser.add_option(
-        '--strict', action='store_true', default=False,
-        help=(
-            'Slavishly configure git-multimail as closely as possible to '
-            'the post-receive-email configuration.  Default is to turn '
-            'on some new features that have no equivalent in post-receive-email.'
-            ),
-        )
-    parser.add_option(
-        '--retain', action='store_true', default=False,
-        help=(
-            'Retain the post-receive-email configuration values.  '
-            'Default is to delete them after the new values are set.'
-            ),
-        )
-    parser.add_option(
-        '--overwrite', action='store_true', default=False,
-        help=(
-            'Overwrite any existing git-multimail configuration settings.  '
-            'Default is to abort if such settings already exist.'
-            ),
-        )
-
-    (options, args) = parser.parse_args(args)
-
-    if args:
-        parser.error('Unexpected arguments: %s' % (' '.join(args),))
-
-    migrate_config(strict=options.strict, retain=options.retain, overwrite=options.overwrite)
-
-
-main(sys.argv[1:])
diff --git a/contrib/hooks/multimail/post-receive.example b/contrib/hooks/multimail/post-receive.example
deleted file mode 100755
index 0f98c5a..0000000
--- a/contrib/hooks/multimail/post-receive.example
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /usr/bin/env python
-
-"""Example post-receive hook based on git-multimail.
-
-The simplest way to use git-multimail is to use the script
-git_multimail.py directly as a post-receive hook, and to configure it
-using Git's configuration files and command-line parameters.  You can
-also write your own Python wrapper for more advanced configurability,
-using git_multimail.py as a Python module.
-
-This script is a simple example of such a post-receive hook.  It is
-intended to be customized before use; see the comments in the script
-to help you get started.
-
-Using git-multimail as a Python module as done here provides more
-flexibility.  It has the following advantages:
-
-* The tool's behavior can be customized using arbitrary Python code,
-  without having to edit git_multimail.py.
-
-* Configuration settings can be read from other sources; for example,
-  user names and email addresses could be read from LDAP or from a
-  database.  Or the settings can even be hardcoded in the importing
-  Python script, if this is preferred.
-
-This script is a very basic example of how to use git_multimail.py as
-a module.  The comments below explain some of the points at which the
-script's behavior could be changed or customized.
-
-"""
-
-import sys
-
-# If necessary, add the path to the directory containing
-# git_multimail.py to the Python path as follows.  (This is not
-# necessary if git_multimail.py is in the same directory as this
-# script):
-
-#LIBDIR = 'path/to/directory/containing/module'
-#sys.path.insert(0, LIBDIR)
-
-import git_multimail
-
-# It is possible to modify the output templates here; e.g.:
-
-#git_multimail.FOOTER_TEMPLATE = """\
-#
-#-- \n\
-#This email was generated by the wonderful git-multimail tool.
-#"""
-
-
-# Specify which "git config" section contains the configuration for
-# git-multimail:
-config = git_multimail.Config('multimailhook')
-
-# Set some Git configuration variables. Equivalent to passing var=val
-# to "git -c var=val" each time git is called, or to adding the
-# configuration in .git/config (must come before instantiating the
-# environment) :
-#git_multimail.Config.add_config_parameters('multimailhook.commitEmailFormat=html')
-#git_multimail.Config.add_config_parameters(('user.name=foo', 'user.email=foo@example.com'))
-
-# Select the type of environment:
-try:
-    environment = git_multimail.GenericEnvironment(config=config)
-    #environment = git_multimail.GitoliteEnvironment(config=config)
-except git_multimail.ConfigurationException:
-    sys.stderr.write('*** %s\n' % sys.exc_info()[1])
-    sys.exit(1)
-
-
-# Choose the method of sending emails based on the git config:
-mailer = git_multimail.choose_mailer(config, environment)
-
-# Alternatively, you may hardcode the mailer using code like one of
-# the following:
-
-# Use "/usr/sbin/sendmail -oi -t" to send emails.  The envelopesender
-# argument is optional:
-#mailer = git_multimail.SendMailer(
-#    command=['/usr/sbin/sendmail', '-oi', '-t'],
-#    envelopesender='git-repo@example.com',
-#    )
-
-# Use Python's smtplib to send emails.  Both arguments are required.
-#mailer = git_multimail.SMTPMailer(
-#    environment=environment,
-#    envelopesender='git-repo@example.com',
-#    # The smtpserver argument can also include a port number; e.g.,
-#    #     smtpserver='mail.example.com:25'
-#    smtpserver='mail.example.com',
-#    )
-
-# OutputMailer is intended only for testing; it writes the emails to
-# the specified file stream.
-#mailer = git_multimail.OutputMailer(sys.stdout)
-
-
-# Read changes from stdin and send notification emails:
-git_multimail.run_as_post_receive_hook(environment, mailer)
diff --git a/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh b/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh
index 4c39bda..f08890d 100755
--- a/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh
+++ b/contrib/mw-to-git/t/t9360-mw-to-git-clone.sh
@@ -86,7 +86,7 @@
 test_expect_success 'Git clone works with an edited page ' '
 	wiki_reset &&
 	wiki_editpage foo "this page will be edited" \
-		false -s "first edition of page foo"&&
+		false -s "first edition of page foo" &&
 	wiki_editpage foo "this page has been edited and must be on the clone " true &&
 	git clone mediawiki::'"$WIKI_URL"' mw_dir_6 &&
 	test_path_is_file mw_dir_6/Foo.mw &&
diff --git a/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh b/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh
index 6b0dbda..526d928 100755
--- a/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh
+++ b/contrib/mw-to-git/t/t9362-mw-to-git-utf8.sh
@@ -287,7 +287,7 @@
 		git add \\ko\\o.mw &&
 		git commit -m " \\ko\\o added" &&
 		git push
-	)&&
+	) &&
 	wiki_page_exist \\ko\\o &&
 	wiki_check_content mw_dir_18/\\ko\\o.mw \\ko\\o
 
@@ -311,7 +311,7 @@
 		git add \\fo\\o.mw &&
 		git commit -m " \\fo\\o added" &&
 		git push
-	)&&
+	) &&
 	wiki_page_exist \\fo\\o &&
 	wiki_check_content mw_dir_20/\\fo\\o.mw \\fo\\o
 
diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 868e18b..7f767b5 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -4,208 +4,265 @@
 #
 # Copyright (C) 2009 Avery Pennarun <apenwarr@gmail.com>
 #
-if test $# -eq 0
+
+if test -z "$GIT_EXEC_PATH" || ! test -f "$GIT_EXEC_PATH/git-sh-setup" || {
+	test "${PATH#"${GIT_EXEC_PATH}:"}" = "$PATH" &&
+	test ! "$GIT_EXEC_PATH" -ef "${PATH%%:*}" 2>/dev/null
+}
 then
-	set -- -h
+	basename=${0##*[/\\]}
+	echo >&2 'It looks like either your git installation or your'
+	echo >&2 'git-subtree installation is broken.'
+	echo >&2
+	echo >&2 "Tips:"
+	echo >&2 " - If \`git --exec-path\` does not print the correct path to"
+	echo >&2 "   your git install directory, then set the GIT_EXEC_PATH"
+	echo >&2 "   environment variable to the correct directory."
+	echo >&2 " - Make sure that your \`$basename\` file is either in your"
+	echo >&2 "   PATH or in your git exec path (\`$(git --exec-path)\`)."
+	echo >&2 " - You should run git-subtree as \`git ${basename#git-}\`,"
+	echo >&2 "   not as \`$basename\`." >&2
+	exit 126
 fi
+
 OPTS_SPEC="\
 git subtree add   --prefix=<prefix> <commit>
 git subtree add   --prefix=<prefix> <repository> <ref>
 git subtree merge --prefix=<prefix> <commit>
+git subtree split --prefix=<prefix> [<commit>]
 git subtree pull  --prefix=<prefix> <repository> <ref>
-git subtree push  --prefix=<prefix> <repository> <ref>
-git subtree split --prefix=<prefix> <commit>
+git subtree push  --prefix=<prefix> <repository> <refspec>
 --
 h,help        show the help
 q             quiet
 d             show debug messages
 P,prefix=     the name of the subdir to split out
-m,message=    use the given message as the commit message for the merge commit
- options for 'split'
+ options for 'split' (also: 'push')
 annotate=     add a prefix to commit message of new commits
 b,branch=     create a new branch from the split subtree
 ignore-joins  ignore prior --rejoin commits
 onto=         try connecting new tree to an existing one
 rejoin        merge the new branch back into HEAD
- options for 'add', 'merge', and 'pull'
+ options for 'add' and 'merge' (also: 'pull', 'split --rejoin', and 'push --rejoin')
 squash        merge subtree changes as a single commit
+m,message=    use the given message as the commit message for the merge commit
 "
-eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
 
-PATH=$PATH:$(git --exec-path)
-. git-sh-setup
+indent=0
 
-require_work_tree
-
-quiet=
-branch=
-debug=
-command=
-onto=
-rejoin=
-ignore_joins=
-annotate=
-squash=
-message=
-prefix=
-
+# Usage: debug [MSG...]
 debug () {
-	if test -n "$debug"
+	if test -n "$arg_debug"
 	then
-		printf "%s\n" "$*" >&2
+		printf "%$(($indent * 2))s%s\n" '' "$*" >&2
 	fi
 }
 
-say () {
-	if test -z "$quiet"
-	then
-		printf "%s\n" "$*" >&2
-	fi
-}
-
+# Usage: progress [MSG...]
 progress () {
-	if test -z "$quiet"
+	if test -z "$GIT_QUIET"
 	then
-		printf "%s\r" "$*" >&2
+		if test -z "$arg_debug"
+		then
+			# Debug mode is off.
+			#
+			# Print one progress line that we keep updating (use
+			# "\r" to return to the beginning of the line, rather
+			# than "\n" to start a new line).  This only really
+			# works when stderr is a terminal.
+			printf "%s\r" "$*" >&2
+		else
+			# Debug mode is on.  The `debug` function is regularly
+			# printing to stderr.
+			#
+			# Don't do the one-line-with-"\r" thing, because on a
+			# terminal the debug output would overwrite and hide the
+			# progress output.  Add a "progress:" prefix to make the
+			# progress output and the debug output easy to
+			# distinguish.  This ensures maximum readability whether
+			# stderr is a terminal or a file.
+			printf "progress: %s\n" "$*" >&2
+		fi
 	fi
 }
 
+# Usage: assert CMD...
 assert () {
 	if ! "$@"
 	then
-		die "assertion failed: " "$@"
+		die "assertion failed: $*"
 	fi
 }
 
-ensure_single_rev () {
-	if test $# -ne 1
+main () {
+	if test $# -eq 0
 	then
-		die "You must provide exactly one revision.  Got: '$@'"
+		set -- -h
 	fi
-}
+	set_args="$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
+	eval "$set_args"
+	. git-sh-setup
+	require_work_tree
 
-while test $# -gt 0
-do
-	opt="$1"
-	shift
-
-	case "$opt" in
-	-q)
-		quiet=1
-		;;
-	-d)
-		debug=1
-		;;
-	--annotate)
-		annotate="$1"
+	# First figure out the command and whether we use --rejoin, so
+	# that we can provide more helpful validation when we do the
+	# "real" flag parsing.
+	arg_split_rejoin=
+	allow_split=
+	allow_addmerge=
+	while test $# -gt 0
+	do
+		opt="$1"
 		shift
+		case "$opt" in
+			--annotate|-b|-P|-m|--onto)
+				shift
+				;;
+			--rejoin)
+				arg_split_rejoin=1
+				;;
+			--no-rejoin)
+				arg_split_rejoin=
+				;;
+			--)
+				break
+				;;
+		esac
+	done
+	arg_command=$1
+	case "$arg_command" in
+	add|merge|pull)
+		allow_addmerge=1
 		;;
-	--no-annotate)
-		annotate=
-		;;
-	-b)
-		branch="$1"
-		shift
-		;;
-	-P)
-		prefix="${1%/}"
-		shift
-		;;
-	-m)
-		message="$1"
-		shift
-		;;
-	--no-prefix)
-		prefix=
-		;;
-	--onto)
-		onto="$1"
-		shift
-		;;
-	--no-onto)
-		onto=
-		;;
-	--rejoin)
-		rejoin=1
-		;;
-	--no-rejoin)
-		rejoin=
-		;;
-	--ignore-joins)
-		ignore_joins=1
-		;;
-	--no-ignore-joins)
-		ignore_joins=
-		;;
-	--squash)
-		squash=1
-		;;
-	--no-squash)
-		squash=
-		;;
-	--)
-		break
+	split|push)
+		allow_split=1
+		allow_addmerge=$arg_split_rejoin
 		;;
 	*)
-		die "Unexpected option: $opt"
+		die "Unknown command '$arg_command'"
 		;;
 	esac
-done
+	# Reset the arguments array for "real" flag parsing.
+	eval "$set_args"
 
-command="$1"
-shift
+	# Begin "real" flag parsing.
+	arg_debug=
+	arg_prefix=
+	arg_split_branch=
+	arg_split_onto=
+	arg_split_ignore_joins=
+	arg_split_annotate=
+	arg_addmerge_squash=
+	arg_addmerge_message=
+	while test $# -gt 0
+	do
+		opt="$1"
+		shift
 
-case "$command" in
-add|merge|pull)
-	default=
-	;;
-split|push)
-	default="--default HEAD"
-	;;
-*)
-	die "Unknown command '$command'"
-	;;
-esac
+		case "$opt" in
+		-q)
+			GIT_QUIET=1
+			;;
+		-d)
+			arg_debug=1
+			;;
+		--annotate)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_annotate="$1"
+			shift
+			;;
+		--no-annotate)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_annotate=
+			;;
+		-b)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_branch="$1"
+			shift
+			;;
+		-P)
+			arg_prefix="${1%/}"
+			shift
+			;;
+		-m)
+			test -n "$allow_addmerge" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_addmerge_message="$1"
+			shift
+			;;
+		--no-prefix)
+			arg_prefix=
+			;;
+		--onto)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_onto="$1"
+			shift
+			;;
+		--no-onto)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_onto=
+			;;
+		--rejoin)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			;;
+		--no-rejoin)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			;;
+		--ignore-joins)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_ignore_joins=1
+			;;
+		--no-ignore-joins)
+			test -n "$allow_split" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_split_ignore_joins=
+			;;
+		--squash)
+			test -n "$allow_addmerge" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_addmerge_squash=1
+			;;
+		--no-squash)
+			test -n "$allow_addmerge" || die "The '$opt' flag does not make sense with 'git subtree $arg_command'."
+			arg_addmerge_squash=
+			;;
+		--)
+			break
+			;;
+		*)
+			die "Unexpected option: $opt"
+			;;
+		esac
+	done
+	shift
 
-if test -z "$prefix"
-then
-	die "You must provide the --prefix option."
-fi
-
-case "$command" in
-add)
-	test -e "$prefix" &&
-		die "prefix '$prefix' already exists."
-	;;
-*)
-	test -e "$prefix" ||
-		die "'$prefix' does not exist; use 'git subtree add'"
-	;;
-esac
-
-dir="$(dirname "$prefix/.")"
-
-if test "$command" != "pull" &&
-		test "$command" != "add" &&
-		test "$command" != "push"
-then
-	revs=$(git rev-parse $default --revs-only "$@") || exit $?
-	dirs=$(git rev-parse --no-revs --no-flags "$@") || exit $?
-	ensure_single_rev $revs
-	if test -n "$dirs"
+	if test -z "$arg_prefix"
 	then
-		die "Error: Use --prefix instead of bare filenames."
+		die "You must provide the --prefix option."
 	fi
-fi
 
-debug "command: {$command}"
-debug "quiet: {$quiet}"
-debug "revs: {$revs}"
-debug "dir: {$dir}"
-debug "opts: {$*}"
-debug
+	case "$arg_command" in
+	add)
+		test -e "$arg_prefix" &&
+			die "prefix '$arg_prefix' already exists."
+		;;
+	*)
+		test -e "$arg_prefix" ||
+			die "'$arg_prefix' does not exist; use 'git subtree add'"
+		;;
+	esac
 
+	dir="$(dirname "$arg_prefix/.")"
+
+	debug "command: {$arg_command}"
+	debug "quiet: {$GIT_QUIET}"
+	debug "dir: {$dir}"
+	debug "opts: {$*}"
+	debug
+
+	"cmd_$arg_command" "$@"
+}
+
+# Usage: cache_setup
 cache_setup () {
+	assert test $# = 0
 	cachedir="$GIT_DIR/subtree-cache/$$"
 	rm -rf "$cachedir" ||
 		die "Can't delete old cachedir: $cachedir"
@@ -216,6 +273,7 @@
 	debug "Using cachedir: $cachedir" >&2
 }
 
+# Usage: cache_get [REVS...]
 cache_get () {
 	for oldrev in "$@"
 	do
@@ -227,6 +285,7 @@
 	done
 }
 
+# Usage: cache_miss [REVS...]
 cache_miss () {
 	for oldrev in "$@"
 	do
@@ -237,24 +296,30 @@
 	done
 }
 
+# Usage: check_parents PARENTS_EXPR
 check_parents () {
-	missed=$(cache_miss "$1")
-	local indent=$(($2 + 1))
+	assert test $# = 1
+	missed=$(cache_miss "$1") || exit $?
+	local indent=$(($indent + 1))
 	for miss in $missed
 	do
 		if ! test -r "$cachedir/notree/$miss"
 		then
-			debug "  incorrect order: $miss"
-			process_split_commit "$miss" "" "$indent"
+			debug "incorrect order: $miss"
+			process_split_commit "$miss" ""
 		fi
 	done
 }
 
+# Usage: set_notree REV
 set_notree () {
+	assert test $# = 1
 	echo "1" > "$cachedir/notree/$1"
 }
 
+# Usage: cache_set OLDREV NEWREV
 cache_set () {
+	assert test $# = 2
 	oldrev="$1"
 	newrev="$2"
 	if test "$oldrev" != "latest_old" &&
@@ -266,7 +331,9 @@
 	echo "$newrev" >"$cachedir/$oldrev"
 }
 
+# Usage: rev_exists REV
 rev_exists () {
+	assert test $# = 1
 	if git rev-parse "$1" >/dev/null 2>&1
 	then
 		return 0
@@ -275,32 +342,25 @@
 	fi
 }
 
-rev_is_descendant_of_branch () {
-	newrev="$1"
-	branch="$2"
-	branch_hash=$(git rev-parse "$branch")
-	match=$(git rev-list -1 "$branch_hash" "^$newrev")
-
-	if test -z "$match"
-	then
-		return 0
-	else
-		return 1
-	fi
-}
-
-# if a commit doesn't have a parent, this might not work.  But we only want
+# Usage: try_remove_previous REV
+#
+# If a commit doesn't have a parent, this might not work.  But we only want
 # to remove the parent from the rev-list, and since it doesn't exist, it won't
 # be there anyway, so do nothing in that case.
 try_remove_previous () {
+	assert test $# = 1
 	if rev_exists "$1^"
 	then
 		echo "^$1^"
 	fi
 }
 
+# Usage: find_latest_squash DIR
 find_latest_squash () {
+	assert test $# = 1
 	debug "Looking for latest squash ($dir)..."
+	local indent=$(($indent + 1))
+
 	dir="$1"
 	sq=
 	main=
@@ -319,7 +379,7 @@
 			main="$b"
 			;;
 		git-subtree-split:)
-			sub="$(git rev-parse "$b^0")" ||
+			sub="$(git rev-parse "$b^{commit}")" ||
 			die "could not rev-parse split hash $b from commit $sq"
 			;;
 		END)
@@ -329,7 +389,8 @@
 				then
 					# a rejoin commit?
 					# Pretend its sub was a squash.
-					sq="$sub"
+					sq=$(git rev-parse --verify "$sq^2") ||
+						die
 				fi
 				debug "Squash found: $sq $sub"
 				echo "$sq" "$sub"
@@ -340,22 +401,26 @@
 			sub=
 			;;
 		esac
-	done
+	done || exit $?
 }
 
+# Usage: find_existing_splits DIR REV
 find_existing_splits () {
+	assert test $# = 2
 	debug "Looking for prior splits..."
+	local indent=$(($indent + 1))
+
 	dir="$1"
-	revs="$2"
+	rev="$2"
 	main=
 	sub=
 	local grep_format="^git-subtree-dir: $dir/*\$"
-	if test -n "$ignore_joins"
+	if test -n "$arg_split_ignore_joins"
 	then
 		grep_format="^Add '$dir/' from commit '"
 	fi
 	git log --grep="$grep_format" \
-		--no-show-signature --pretty=format:'START %H%n%s%n%n%b%nEND%n' $revs |
+		--no-show-signature --pretty=format:'START %H%n%s%n%n%b%nEND%n' "$rev" |
 	while read a b junk
 	do
 		case "$a" in
@@ -366,11 +431,11 @@
 			main="$b"
 			;;
 		git-subtree-split:)
-			sub="$(git rev-parse "$b^0")" ||
+			sub="$(git rev-parse "$b^{commit}")" ||
 			die "could not rev-parse split hash $b from commit $sq"
 			;;
 		END)
-			debug "  Main is: '$main'"
+			debug "Main is: '$main'"
 			if test -z "$main" -a -n "$sub"
 			then
 				# squash commits refer to a subtree
@@ -389,10 +454,12 @@
 			sub=
 			;;
 		esac
-	done
+	done || exit $?
 }
 
+# Usage: copy_commit REV TREE FLAGS_STR
 copy_commit () {
+	assert test $# = 3
 	# We're going to set some environment vars here, so
 	# do it in a subshell to get rid of them safely later
 	debug copy_commit "{$1}" "{$2}" "{$3}"
@@ -411,23 +478,32 @@
 			GIT_COMMITTER_EMAIL \
 			GIT_COMMITTER_DATE
 		(
-			printf "%s" "$annotate"
+			printf "%s" "$arg_split_annotate"
 			cat
 		) |
 		git commit-tree "$2" $3  # reads the rest of stdin
 	) || die "Can't copy commit $1"
 }
 
+# Usage: add_msg DIR LATEST_OLD LATEST_NEW
 add_msg () {
+	assert test $# = 3
 	dir="$1"
 	latest_old="$2"
 	latest_new="$3"
-	if test -n "$message"
+	if test -n "$arg_addmerge_message"
 	then
-		commit_message="$message"
+		commit_message="$arg_addmerge_message"
 	else
 		commit_message="Add '$dir/' from commit '$latest_new'"
 	fi
+	if test -n "$arg_split_rejoin"
+	then
+		# If this is from a --rejoin, then rejoin_msg has
+		# already inserted the `git-subtree-xxx:` tags
+		echo "$commit_message"
+		return
+	fi
 	cat <<-EOF
 		$commit_message
 
@@ -437,22 +513,26 @@
 	EOF
 }
 
+# Usage: add_squashed_msg REV DIR
 add_squashed_msg () {
-	if test -n "$message"
+	assert test $# = 2
+	if test -n "$arg_addmerge_message"
 	then
-		echo "$message"
+		echo "$arg_addmerge_message"
 	else
 		echo "Merge commit '$1' as '$2'"
 	fi
 }
 
+# Usage: rejoin_msg DIR LATEST_OLD LATEST_NEW
 rejoin_msg () {
+	assert test $# = 3
 	dir="$1"
 	latest_old="$2"
 	latest_new="$3"
-	if test -n "$message"
+	if test -n "$arg_addmerge_message"
 	then
-		commit_message="$message"
+		commit_message="$arg_addmerge_message"
 	else
 		commit_message="Split '$dir/' into commit '$latest_new'"
 	fi
@@ -465,7 +545,9 @@
 	EOF
 }
 
+# Usage: squash_msg DIR OLD_SUBTREE_COMMIT NEW_SUBTREE_COMMIT
 squash_msg () {
+	assert test $# = 3
 	dir="$1"
 	oldsub="$2"
 	newsub="$3"
@@ -487,12 +569,16 @@
 	echo "git-subtree-split: $newsub"
 }
 
+# Usage: toptree_for_commit COMMIT
 toptree_for_commit () {
+	assert test $# = 1
 	commit="$1"
 	git rev-parse --verify "$commit^{tree}" || exit $?
 }
 
+# Usage: subtree_for_commit COMMIT DIR
 subtree_for_commit () {
+	assert test $# = 2
 	commit="$1"
 	dir="$2"
 	git ls-tree "$commit" -- "$dir" |
@@ -503,17 +589,19 @@
 		test "$type" = "commit" && continue  # ignore submodules
 		echo $tree
 		break
-	done
+	done || exit $?
 }
 
+# Usage: tree_changed TREE [PARENTS...]
 tree_changed () {
+	assert test $# -gt 0
 	tree=$1
 	shift
 	if test $# -ne 1
 	then
 		return 0   # weird parents, consider it changed
 	else
-		ptree=$(toptree_for_commit $1)
+		ptree=$(toptree_for_commit $1) || exit $?
 		if test "$ptree" != "$tree"
 		then
 			return 0   # changed
@@ -523,7 +611,9 @@
 	fi
 }
 
+# Usage: new_squash_commit OLD_SQUASHED_COMMIT OLD_NONSQUASHED_COMMIT NEW_NONSQUASHED_COMMIT
 new_squash_commit () {
+	assert test $# = 3
 	old="$1"
 	oldsub="$2"
 	newsub="$3"
@@ -538,7 +628,9 @@
 	fi
 }
 
+# Usage: copy_or_skip REV TREE NEWPARENTS
 copy_or_skip () {
+	assert test $# = 3
 	rev="$1"
 	tree="$2"
 	newparents="$3"
@@ -613,7 +705,9 @@
 	fi
 }
 
+# Usage: ensure_clean
 ensure_clean () {
+	assert test $# = 0
 	if ! git diff-index HEAD --exit-code --quiet 2>&1
 	then
 		die "Working tree has modifications.  Cannot add."
@@ -624,15 +718,18 @@
 	fi
 }
 
+# Usage: ensure_valid_ref_format REF
 ensure_valid_ref_format () {
+	assert test $# = 1
 	git check-ref-format "refs/heads/$1" ||
 		die "'$1' does not look like a ref"
 }
 
+# Usage: process_split_commit REV PARENTS
 process_split_commit () {
+	assert test $# = 2
 	local rev="$1"
 	local parents="$2"
-	local indent=$3
 
 	if test $indent -eq 0
 	then
@@ -647,20 +744,21 @@
 	progress "$revcount/$revmax ($createcount) [$extracount]"
 
 	debug "Processing commit: $rev"
-	exists=$(cache_get "$rev")
+	local indent=$(($indent + 1))
+	exists=$(cache_get "$rev") || exit $?
 	if test -n "$exists"
 	then
-		debug "  prior: $exists"
+		debug "prior: $exists"
 		return
 	fi
 	createcount=$(($createcount + 1))
-	debug "  parents: $parents"
-	check_parents "$parents" "$indent"
-	newparents=$(cache_get $parents)
-	debug "  newparents: $newparents"
+	debug "parents: $parents"
+	check_parents "$parents"
+	newparents=$(cache_get $parents) || exit $?
+	debug "newparents: $newparents"
 
-	tree=$(subtree_for_commit "$rev" "$dir")
-	debug "  tree is: $tree"
+	tree=$(subtree_for_commit "$rev" "$dir") || exit $?
+	debug "tree is: $tree"
 
 	# ugly.  is there no better way to tell if this is a subtree
 	# vs. a mainline commit?  Does it matter?
@@ -675,17 +773,15 @@
 	fi
 
 	newrev=$(copy_or_skip "$rev" "$tree" "$newparents") || exit $?
-	debug "  newrev is: $newrev"
+	debug "newrev is: $newrev"
 	cache_set "$rev" "$newrev"
 	cache_set latest_new "$newrev"
 	cache_set latest_old "$rev"
 }
 
+# Usage: cmd_add REV
+#    Or: cmd_add REPOSITORY REF
 cmd_add () {
-	if test -e "$dir"
-	then
-		die "'$dir' already exists.  Cannot add."
-	fi
 
 	ensure_clean
 
@@ -707,27 +803,35 @@
 
 		cmd_add_repository "$@"
 	else
-		say "error: parameters were '$@'"
+		say >&2 "error: parameters were '$*'"
 		die "Provide either a commit or a repository and commit."
 	fi
 }
 
+# Usage: cmd_add_repository REPOSITORY REFSPEC
 cmd_add_repository () {
+	assert test $# = 2
 	echo "git fetch" "$@"
 	repository=$1
 	refspec=$2
 	git fetch "$@" || exit $?
-	revs=FETCH_HEAD
-	set -- $revs
-	cmd_add_commit "$@"
+	cmd_add_commit FETCH_HEAD
 }
 
+# Usage: cmd_add_commit REV
 cmd_add_commit () {
-	rev=$(git rev-parse $default --revs-only "$@") || exit $?
-	ensure_single_rev $rev
+	# The rev has already been validated by cmd_add(), we just
+	# need to normalize it.
+	assert test $# = 1
+	rev=$(git rev-parse --verify "$1^{commit}") || exit $?
 
 	debug "Adding $dir as '$rev'..."
-	git read-tree --prefix="$dir" $rev || exit $?
+	if test -z "$arg_split_rejoin"
+	then
+		# Only bother doing this if this is a genuine 'add',
+		# not a synthetic 'add' from '--rejoin'.
+		git read-tree --prefix="$dir" $rev || exit $?
+	fi
 	git checkout -- "$dir" || exit $?
 	tree=$(git write-tree) || exit $?
 
@@ -739,44 +843,61 @@
 		headp=
 	fi
 
-	if test -n "$squash"
+	if test -n "$arg_addmerge_squash"
 	then
 		rev=$(new_squash_commit "" "" "$rev") || exit $?
 		commit=$(add_squashed_msg "$rev" "$dir" |
 			git commit-tree "$tree" $headp -p "$rev") || exit $?
 	else
-		revp=$(peel_committish "$rev") &&
+		revp=$(peel_committish "$rev") || exit $?
 		commit=$(add_msg "$dir" $headrev "$rev" |
 			git commit-tree "$tree" $headp -p "$revp") || exit $?
 	fi
 	git reset "$commit" || exit $?
 
-	say "Added dir '$dir'"
+	say >&2 "Added dir '$dir'"
 }
 
+# Usage: cmd_split [REV]
 cmd_split () {
+	if test $# -eq 0
+	then
+		rev=$(git rev-parse HEAD)
+	elif test $# -eq 1
+	then
+		rev=$(git rev-parse -q --verify "$1^{commit}") ||
+			die "'$1' does not refer to a commit"
+	else
+		die "You must provide exactly one revision.  Got: '$*'"
+	fi
+
+	if test -n "$arg_split_rejoin"
+	then
+		ensure_clean
+	fi
+
 	debug "Splitting $dir..."
 	cache_setup || exit $?
 
-	if test -n "$onto"
+	if test -n "$arg_split_onto"
 	then
-		debug "Reading history for --onto=$onto..."
-		git rev-list $onto |
+		debug "Reading history for --onto=$arg_split_onto..."
+		git rev-list $arg_split_onto |
 		while read rev
 		do
 			# the 'onto' history is already just the subdir, so
 			# any parent we find there can be used verbatim
-			debug "  cache: $rev"
+			debug "cache: $rev"
 			cache_set "$rev" "$rev"
-		done
+		done || exit $?
 	fi
 
-	unrevs="$(find_existing_splits "$dir" "$revs")"
+	unrevs="$(find_existing_splits "$dir" "$rev")" || exit $?
 
 	# We can't restrict rev-list to only $dir here, because some of our
 	# parents have the $dir contents the root, and those won't match.
 	# (and rev-list --follow doesn't seem to solve this)
-	grl='git rev-list --topo-order --reverse --parents $revs $unrevs'
+	grl='git rev-list --topo-order --reverse --parents $rev $unrevs'
 	revmax=$(eval "$grl" | wc -l)
 	revcount=0
 	createcount=0
@@ -784,52 +905,58 @@
 	eval "$grl" |
 	while read rev parents
 	do
-		process_split_commit "$rev" "$parents" 0
+		process_split_commit "$rev" "$parents"
 	done || exit $?
 
-	latest_new=$(cache_get latest_new)
+	latest_new=$(cache_get latest_new) || exit $?
 	if test -z "$latest_new"
 	then
 		die "No new revisions were found"
 	fi
 
-	if test -n "$rejoin"
+	if test -n "$arg_split_rejoin"
 	then
 		debug "Merging split branch into HEAD..."
-		latest_old=$(cache_get latest_old)
-		git merge -s ours \
-			--allow-unrelated-histories \
-			-m "$(rejoin_msg "$dir" "$latest_old" "$latest_new")" \
-			"$latest_new" >&2 || exit $?
-	fi
-	if test -n "$branch"
-	then
-		if rev_exists "refs/heads/$branch"
+		latest_old=$(cache_get latest_old) || exit $?
+		arg_addmerge_message="$(rejoin_msg "$dir" "$latest_old" "$latest_new")" || exit $?
+		if test -z "$(find_latest_squash "$dir")"
 		then
-			if ! rev_is_descendant_of_branch "$latest_new" "$branch"
+			cmd_add "$latest_new" >&2 || exit $?
+		else
+			cmd_merge "$latest_new" >&2 || exit $?
+		fi
+	fi
+	if test -n "$arg_split_branch"
+	then
+		if rev_exists "refs/heads/$arg_split_branch"
+		then
+			if ! git merge-base --is-ancestor "$arg_split_branch" "$latest_new"
 			then
-				die "Branch '$branch' is not an ancestor of commit '$latest_new'."
+				die "Branch '$arg_split_branch' is not an ancestor of commit '$latest_new'."
 			fi
 			action='Updated'
 		else
 			action='Created'
 		fi
 		git update-ref -m 'subtree split' \
-			"refs/heads/$branch" "$latest_new" || exit $?
-		say "$action branch '$branch'"
+			"refs/heads/$arg_split_branch" "$latest_new" || exit $?
+		say >&2 "$action branch '$arg_split_branch'"
 	fi
 	echo "$latest_new"
 	exit 0
 }
 
+# Usage: cmd_merge REV
 cmd_merge () {
-	rev=$(git rev-parse $default --revs-only "$@") || exit $?
-	ensure_single_rev $rev
+	test $# -eq 1 ||
+		die "You must provide exactly one revision.  Got: '$*'"
+	rev=$(git rev-parse -q --verify "$1^{commit}") ||
+		die "'$1' does not refer to a commit"
 	ensure_clean
 
-	if test -n "$squash"
+	if test -n "$arg_addmerge_squash"
 	then
-		first_split="$(find_latest_squash "$dir")"
+		first_split="$(find_latest_squash "$dir")" || exit $?
 		if test -z "$first_split"
 		then
 			die "Can't squash-merge: '$dir' was never added."
@@ -839,7 +966,7 @@
 		sub=$2
 		if test "$sub" = "$rev"
 		then
-			say "Subtree is already at commit $rev."
+			say >&2 "Subtree is already at commit $rev."
 			exit 0
 		fi
 		new=$(new_squash_commit "$old" "$sub" "$rev") || exit $?
@@ -847,26 +974,16 @@
 		rev="$new"
 	fi
 
-	version=$(git version)
-	if test "$version" \< "git version 1.7"
+	if test -n "$arg_addmerge_message"
 	then
-		if test -n "$message"
-		then
-			git merge -s subtree --message="$message" "$rev"
-		else
-			git merge -s subtree "$rev"
-		fi
+		git merge -Xsubtree="$arg_prefix" \
+			--message="$arg_addmerge_message" "$rev"
 	else
-		if test -n "$message"
-		then
-			git merge -Xsubtree="$prefix" \
-				--message="$message" "$rev"
-		else
-			git merge -Xsubtree="$prefix" $rev
-		fi
+		git merge -Xsubtree="$arg_prefix" $rev
 	fi
 }
 
+# Usage: cmd_pull REPOSITORY REMOTEREF
 cmd_pull () {
 	if test $# -ne 2
 	then
@@ -875,27 +992,36 @@
 	ensure_clean
 	ensure_valid_ref_format "$2"
 	git fetch "$@" || exit $?
-	revs=FETCH_HEAD
-	set -- $revs
-	cmd_merge "$@"
+	cmd_merge FETCH_HEAD
 }
 
+# Usage: cmd_push REPOSITORY [+][LOCALREV:]REMOTEREF
 cmd_push () {
 	if test $# -ne 2
 	then
-		die "You must provide <repository> <ref>"
+		die "You must provide <repository> <refspec>"
 	fi
-	ensure_valid_ref_format "$2"
 	if test -e "$dir"
 	then
 		repository=$1
-		refspec=$2
+		refspec=${2#+}
+		remoteref=${refspec#*:}
+		if test "$remoteref" = "$refspec"
+		then
+			localrevname_presplit=HEAD
+		else
+			localrevname_presplit=${refspec%%:*}
+		fi
+		ensure_valid_ref_format "$remoteref"
+		localrev_presplit=$(git rev-parse -q --verify "$localrevname_presplit^{commit}") ||
+			die "'$localrevname_presplit' does not refer to a commit"
+
 		echo "git push using: " "$repository" "$refspec"
-		localrev=$(git subtree split --prefix="$prefix") || die
-		git push "$repository" "$localrev":"refs/heads/$refspec"
+		localrev=$(cmd_split "$localrev_presplit") || die
+		git push "$repository" "$localrev":"refs/heads/$remoteref"
 	else
 		die "'$dir' must already exist. Try 'git subtree add'."
 	fi
 }
 
-"cmd_$command" "$@"
+main "$@"
diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt
index 0db02fe..9cddfa2 100644
--- a/contrib/subtree/git-subtree.txt
+++ b/contrib/subtree/git-subtree.txt
@@ -9,13 +9,14 @@
 SYNOPSIS
 --------
 [verse]
-'git subtree' add   -P <prefix> <commit>
-'git subtree' add   -P <prefix> <repository> <ref>
-'git subtree' pull  -P <prefix> <repository> <ref>
-'git subtree' push  -P <prefix> <repository> <ref>
-'git subtree' merge -P <prefix> <commit>
-'git subtree' split -P <prefix> [OPTIONS] [<commit>]
+'git subtree' [<options>] -P <prefix> add <local-commit>
+'git subtree' [<options>] -P <prefix> add <repository> <remote-ref>
+'git subtree' [<options>] -P <prefix> merge <local-commit>
+'git subtree' [<options>] -P <prefix> split [<local-commit>]
 
+[verse]
+'git subtree' [<options>] -P <prefix> pull <repository> <remote-ref>
+'git subtree' [<options>] -P <prefix> push <repository> <refspec>
 
 DESCRIPTION
 -----------
@@ -28,7 +29,7 @@
 
 Subtrees are not to be confused with submodules, which are meant for
 the same task. Unlike submodules, subtrees do not need any special
-constructions (like .gitmodules files or gitlinks) be present in
+constructions (like '.gitmodules' files or gitlinks) be present in
 your repository, and do not force end-users of your
 repository to do anything special or to understand how subtrees
 work. A subtree is just a subdirectory that can be
@@ -59,70 +60,71 @@
 affects both the library and the main application, commit it in
 two pieces.  That way, when you split the library commits out
 later, their descriptions will still make sense.  But if this
-isn't important to you, it's not *necessary*.  git subtree will
+isn't important to you, it's not *necessary*.  'git subtree' will
 simply leave out the non-library-related parts of the commit
 when it splits it out into the subproject later.
 
 
 COMMANDS
 --------
-add::
+add <local-commit>::
+add <repository> <remote-ref>::
 	Create the <prefix> subtree by importing its contents
-	from the given <commit> or <repository> and remote <ref>.
+	from the given <local-commit> or <repository> and <remote-ref>.
 	A new commit is created	automatically, joining the imported
-	project's history with your own.  With '--squash', imports
+	project's history with your own.  With '--squash', import
 	only a single commit from the subproject, rather than its
 	entire history.
 
-merge::
-	Merge recent changes up to <commit> into the <prefix>
+merge <local-commit>::
+	Merge recent changes up to <local-commit> into the <prefix>
 	subtree.  As with normal 'git merge', this doesn't
 	remove your own local changes; it just merges those
-	changes into the latest <commit>.  With '--squash',
-	creates only one commit that contains all the changes,
+	changes into the latest <local-commit>.  With '--squash',
+	create only one commit that contains all the changes,
 	rather than merging in the entire history.
 +
 If you use '--squash', the merge direction doesn't always have to be
 forward; you can use this command to go back in time from v2.5 to v2.4,
 for example.  If your merge introduces a conflict, you can resolve it in
 the usual ways.
-	
-pull::
-	Exactly like 'merge', but parallels 'git pull' in that
-	it fetches the given ref from the specified remote
-	repository.
-	
-push::
-	Does a 'split' (see below) using the <prefix> supplied
-	and then does a 'git push' to push the result to the 
-	repository and ref. This can be used to push your
-	subtree to different branches of the remote repository.
 
-split::
+split [<local-commit>]::
 	Extract a new, synthetic project history from the
-	history of the <prefix> subtree.  The new history
+	history of the <prefix> subtree of <local-commit>, or of
+	HEAD if no <local-commit> is given.  The new history
 	includes only the commits (including merges) that
 	affected <prefix>, and each of those commits now has the
 	contents of <prefix> at the root of the project instead
 	of in a subdirectory.  Thus, the newly created history
 	is suitable for export as a separate git repository.
 +
-After splitting successfully, a single commit id is printed to stdout.
+After splitting successfully, a single commit ID is printed to stdout.
 This corresponds to the HEAD of the newly created tree, which you can
 manipulate however you want.
 +
 Repeated splits of exactly the same history are guaranteed to be
-identical (i.e. to produce the same commit ids).  Because of this, if
-you add new commits and then re-split, the new commits will be attached
-as commits on top of the history you generated last time, so 'git merge'
-and friends will work as expected.
-+
-Note that if you use '--squash' when you merge, you should usually not
-just '--rejoin' when you split.
+identical (i.e. to produce the same commit IDs) as long as the
+settings passed to 'split' (such as '--annotate') are the same.
+Because of this, if you add new commits and then re-split, the new
+commits will be attached as commits on top of the history you
+generated last time, so 'git merge' and friends will work as expected.
 
+pull <repository> <remote-ref>::
+	Exactly like 'merge', but parallels 'git pull' in that
+	it fetches the given ref from the specified remote
+	repository.
 
-OPTIONS
--------
+push <repository> [+][<local-commit>:]<remote-ref>::
+	Does a 'split' using the <prefix> subtree of <local-commit>
+	and then does a 'git push' to push the result to the
+	<repository> and <remote-ref>.  This can be used to push your
+	subtree to different branches of the remote repository.  Just
+	as with 'split', if no <local-commit> is given, then HEAD is
+	used.  The optional leading '+' is ignored.
+
+OPTIONS FOR ALL COMMANDS
+------------------------
 -q::
 --quiet::
 	Suppress unnecessary output messages on stderr.
@@ -137,21 +139,16 @@
 	want to manipulate.  This option is mandatory
 	for all commands.
 
--m <message>::
---message=<message>::
-	This option is only valid for add, merge, pull, and split --rejoin.
-	Specify <message> as the commit message for the merge commit.
+OPTIONS FOR 'add' AND 'merge' (ALSO: 'pull', 'split --rejoin', AND 'push --rejoin')
+-----------------------------------------------------------------------------------
+These options for 'add' and 'merge' may also be given to 'pull' (which
+wraps 'merge'), 'split --rejoin' (which wraps either 'add' or 'merge'
+as appropriate), and 'push --rejoin' (which wraps 'split --rejoin').
 
-
-OPTIONS FOR add, merge, and pull
---------------------------------
 --squash::
-	This option is only valid for add, merge, and pull
-	commands.
-+
-Instead of merging the entire history from the subtree project, produce
-only a single commit that contains all the differences you want to
-merge, and then merge that new commit into your project.
+	Instead of merging the entire history from the subtree project, produce
+	only a single commit that contains all the differences you want to
+	merge, and then merge that new commit into your project.
 +
 Using this option helps to reduce log clutter. People rarely want to see
 every change that happened between v1.0 and v1.1 of the library they're
@@ -174,57 +171,53 @@
 remain intact and can be later split and send upstream to the
 subproject.
 
+-m <message>::
+--message=<message>::
+	Specify <message> as the commit message for the merge commit.
 
-OPTIONS FOR split
------------------
+OPTIONS FOR 'split' (ALSO: 'push')
+----------------------------------
+These options for 'split' may also be given to 'push' (which wraps
+'split').
+
 --annotate=<annotation>::
-	This option is only valid for the split command.
-+
-When generating synthetic history, add <annotation> as a prefix to each
-commit message.  Since we're creating new commits with the same commit
-message, but possibly different content, from the original commits, this
-can help to differentiate them and avoid confusion.
+	When generating synthetic history, add <annotation> as a prefix to each
+	commit message.  Since we're creating new commits with the same commit
+	message, but possibly different content, from the original commits, this
+	can help to differentiate them and avoid confusion.
 +
 Whenever you split, you need to use the same <annotation>, or else you
 don't have a guarantee that the new re-created history will be identical
 to the old one.  That will prevent merging from working correctly.  git
-subtree tries to make it work anyway, particularly if you use --rejoin,
+subtree tries to make it work anyway, particularly if you use '--rejoin',
 but it may not always be effective.
 
 -b <branch>::
 --branch=<branch>::
-	This option is only valid for the split command.
-+
-After generating the synthetic history, create a new branch called
-<branch> that contains the new history.  This is suitable for immediate
-pushing upstream.  <branch> must not already exist.
+	After generating the synthetic history, create a new branch called
+	<branch> that contains the new history.  This is suitable for immediate
+	pushing upstream.  <branch> must not already exist.
 
 --ignore-joins::
-	This option is only valid for the split command.
-+
-If you use '--rejoin', git subtree attempts to optimize its history
-reconstruction to generate only the new commits since the last
-'--rejoin'.  '--ignore-join' disables this behaviour, forcing it to
-regenerate the entire history.  In a large project, this can take a long
-time.
+	If you use '--rejoin', git subtree attempts to optimize its history
+	reconstruction to generate only the new commits since the last
+	'--rejoin'.  '--ignore-joins' disables this behavior, forcing it to
+	regenerate the entire history.  In a large project, this can take a long
+	time.
 
 --onto=<onto>::
-	This option is only valid for the split command.
-+
-If your subtree was originally imported using something other than git
-subtree, its history may not match what git subtree is expecting.  In
-that case, you can specify the commit id <onto> that corresponds to the
-first revision of the subproject's history that was imported into your
-project, and git subtree will attempt to build its history from there.
+	If your subtree was originally imported using something other than git
+	subtree, its history may not match what git subtree is expecting.  In
+	that case, you can specify the commit ID <onto> that corresponds to the
+	first revision of the subproject's history that was imported into your
+	project, and git subtree will attempt to build its history from there.
 +
 If you used 'git subtree add', you should never need this option.
 
 --rejoin::
-	This option is only valid for the split command.
-+
-After splitting, merge the newly created synthetic history back into
-your main project.  That way, future splits can search only the part of
-history that has been added since the most recent --rejoin.
+	After splitting, merge the newly created synthetic history back into
+	your main project.  That way, future splits can search only the part of
+	history that has been added since the most recent '--rejoin'.
 +
 If your split commits end up merged into the upstream subproject, and
 then you want to get the latest upstream version, this will allow git's
@@ -235,13 +228,12 @@
 copy of every new commit that was created (the original, and the
 synthetic one).
 +
-If you do all your merges with '--squash', don't use '--rejoin' when you
-split, because you don't want the subproject's history to be part of
-your project anyway.
+If you do all your merges with '--squash', make sure you also use
+'--squash' when you 'split --rejoin'.
 
 
-EXAMPLE 1. Add command
-----------------------
+EXAMPLE 1. 'add' command
+------------------------
 Let's assume that you have a local repository that you would like
 to add an external vendor library to. In this case we will add the
 git-subtree repository as a subdirectory of your already existing
@@ -253,15 +245,15 @@
 'master' needs to be a valid remote ref and can be a different branch
 name
 
-You can omit the --squash flag, but doing so will increase the number
+You can omit the '--squash' flag, but doing so will increase the number
 of commits that are included in your local repository.
 
 We now have a ~/git-extensions/git-subtree directory containing code
 from the master branch of git://github.com/apenwarr/git-subtree.git
 in our git-extensions repository.
 
-EXAMPLE 2. Extract a subtree using commit, merge and pull
----------------------------------------------------------
+EXAMPLE 2. Extract a subtree using 'commit', 'merge' and 'pull'
+---------------------------------------------------------------
 Let's use the repository for the git source code as an example.
 First, get your own copy of the git.git repository:
 
@@ -269,7 +261,7 @@
 	$ cd test-git
 
 gitweb (commit 1130ef3) was merged into git as of commit
-0a8f4f0, after which it was no longer maintained separately. 
+0a8f4f0, after which it was no longer maintained separately.
 But imagine it had been maintained separately, and we wanted to
 extract git's changes to gitweb since that time, to share with
 the upstream.  You could do this:
@@ -279,14 +271,14 @@
         	--branch gitweb-latest
         $ gitk gitweb-latest
         $ git push git@github.com:whatever/gitweb.git gitweb-latest:master
-        
+
 (We use '0a8f4f0^..' because that means "all the changes from
 0a8f4f0 to the current version, including 0a8f4f0 itself.")
 
 If gitweb had originally been merged using 'git subtree add' (or
-a previous split had already been done with --rejoin specified)
+a previous split had already been done with '--rejoin' specified)
 then you can do all your splits without having to remember any
-weird commit ids:
+weird commit IDs:
 
 	$ git subtree split --prefix=gitweb --annotate='(split) ' --rejoin \
 		--branch gitweb-latest2
@@ -313,7 +305,7 @@
 	$ git subtree merge --prefix=gitweb --squash gitweb-latest
 
 And notice that your change is still intact:
-	
+
 	$ ls -l gitweb/myfile
 
 And you can split it out and look at your changes versus
@@ -321,8 +313,8 @@
 
 	git log gitweb-latest..$(git subtree split --prefix=gitweb)
 
-EXAMPLE 3. Extract a subtree using branch
------------------------------------------
+EXAMPLE 3. Extract a subtree using a branch
+-------------------------------------------
 Suppose you have a source directory with many files and
 subdirectories, and you want to extract the lib directory to its own
 git project. Here's a short way to do it:
diff --git a/contrib/subtree/t/t7900-subtree.sh b/contrib/subtree/t/t7900-subtree.sh
index 57ff4b2..4153b65 100755
--- a/contrib/subtree/t/t7900-subtree.sh
+++ b/contrib/subtree/t/t7900-subtree.sh
@@ -5,72 +5,24 @@
 #
 test_description='Basic porcelain support for subtrees
 
-This test verifies the basic operation of the add, pull, merge
-and split subcommands of git subtree.
+This test verifies the basic operation of the add, merge, split, pull,
+and push subcommands of git subtree.
 '
 
 TEST_DIRECTORY=$(pwd)/../../../t
-export TEST_DIRECTORY
+. "$TEST_DIRECTORY"/test-lib.sh
 
-. ../../../t/test-lib.sh
-
-subtree_test_create_repo()
-{
+# Use our own wrapper around test-lib.sh's test_create_repo, in order
+# to set log.date=relative.  `git subtree` parses the output of `git
+# log`, and so it must be careful to not be affected by settings that
+# change the `git log` output.  We test this by setting
+# log.date=relative for every repo in the tests.
+subtree_test_create_repo () {
 	test_create_repo "$1" &&
-	(
-		cd "$1" &&
-		git config log.date relative
-	)
+	git -C "$1" config log.date relative
 }
 
-create()
-{
-	echo "$1" >"$1" &&
-	git add "$1"
-}
-
-check_equal()
-{
-	test_debug 'echo'
-	test_debug "echo \"check a:\" \"{$1}\""
-	test_debug "echo \"      b:\" \"{$2}\""
-	if [ "$1" = "$2" ]; then
-		return 0
-	else
-		return 1
-	fi
-}
-
-undo()
-{
-	git reset --hard HEAD~
-}
-
-# Make sure no patch changes more than one file.
-# The original set of commits changed only one file each.
-# A multi-file change would imply that we pruned commits
-# too aggressively.
-join_commits()
-{
-	commit=
-	all=
-	while read x y; do
-		if [ -z "$x" ]; then
-			continue
-		elif [ "$x" = "commit:" ]; then
-			if [ -n "$commit" ]; then
-				echo "$commit $all"
-				all=
-			fi
-			commit="$y"
-		else
-			all="$all $y"
-		fi
-	done
-	echo "$commit $all"
-}
-
-test_create_commit() (
+test_create_commit () (
 	repo=$1 &&
 	commit=$2 &&
 	cd "$repo" &&
@@ -81,98 +33,116 @@
 	git commit -m "$commit" || error "Could not commit"
 )
 
-last_commit_message()
-{
+test_wrong_flag() {
+	test_must_fail "$@" >out 2>err &&
+	test_must_be_empty out &&
+	grep "flag does not make sense with" err
+}
+
+last_commit_subject () {
 	git log --pretty=format:%s -1
 }
 
-subtree_test_count=0
-next_test() {
-	subtree_test_count=$(($subtree_test_count+1))
-}
+test_expect_success 'shows short help text for -h' '
+	test_expect_code 129 git subtree -h >out 2>err &&
+	test_must_be_empty err &&
+	grep -e "^ *or: git subtree pull" out &&
+	grep -e --annotate out
+'
 
 #
 # Tests for 'git subtree add'
 #
 
-next_test
 test_expect_success 'no merge from non-existent subtree' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		test_must_fail git subtree merge --prefix="sub dir" FETCH_HEAD
 	)
 '
 
-next_test
 test_expect_success 'no pull from non-existent subtree' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
-		test_must_fail git subtree pull --prefix="sub dir" ./"sub proj" master
-	)'
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		test_must_fail git subtree pull --prefix="sub dir" ./"sub proj" HEAD
+	)
+'
 
-next_test
+test_expect_success 'add rejects flags for split' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		test_wrong_flag git subtree add --prefix="sub dir" --annotate=foo FETCH_HEAD &&
+		test_wrong_flag git subtree add --prefix="sub dir" --branch=foo FETCH_HEAD &&
+		test_wrong_flag git subtree add --prefix="sub dir" --ignore-joins FETCH_HEAD &&
+		test_wrong_flag git subtree add --prefix="sub dir" --onto=foo FETCH_HEAD &&
+		test_wrong_flag git subtree add --prefix="sub dir" --rejoin FETCH_HEAD
+	)
+'
+
 test_expect_success 'add subproj as subtree into sub dir/ with --prefix' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Add '\''sub dir/'\'' from commit '\''$(git rev-parse FETCH_HEAD)'\''"
+		test "$(last_commit_subject)" = "Add '\''sub dir/'\'' from commit '\''$(git rev-parse FETCH_HEAD)'\''"
 	)
 '
 
-next_test
 test_expect_success 'add subproj as subtree into sub dir/ with --prefix and --message' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" --message="Added subproject" FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Added subproject"
+		test "$(last_commit_subject)" = "Added subproject"
 	)
 '
 
-next_test
 test_expect_success 'add subproj as subtree into sub dir/ with --prefix as -P and --message as -m' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add -P "sub dir" -m "Added subproject" FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Added subproject"
+		test "$(last_commit_subject)" = "Added subproject"
 	)
 '
 
-next_test
 test_expect_success 'add subproj as subtree into sub dir/ with --squash and --prefix and --message' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" --message="Added subproject with squash" --squash FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Added subproject with squash"
+		test "$(last_commit_subject)" = "Added subproject with squash"
 	)
 '
 
@@ -180,100 +150,117 @@
 # Tests for 'git subtree merge'
 #
 
-next_test
+test_expect_success 'merge rejects flags for split' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		test_wrong_flag git subtree merge --prefix="sub dir" --annotate=foo FETCH_HEAD &&
+		test_wrong_flag git subtree merge --prefix="sub dir" --branch=foo FETCH_HEAD &&
+		test_wrong_flag git subtree merge --prefix="sub dir" --ignore-joins FETCH_HEAD &&
+		test_wrong_flag git subtree merge --prefix="sub dir" --onto=foo FETCH_HEAD &&
+		test_wrong_flag git subtree merge --prefix="sub dir" --rejoin FETCH_HEAD
+	)
+'
+
 test_expect_success 'merge new subproj history into sub dir/ with --prefix' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Merge commit '\''$(git rev-parse FETCH_HEAD)'\''"
+		test "$(last_commit_subject)" = "Merge commit '\''$(git rev-parse FETCH_HEAD)'\''"
 	)
 '
 
-next_test
 test_expect_success 'merge new subproj history into sub dir/ with --prefix and --message' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" --message="Merged changes from subproject" FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Merged changes from subproject"
+		test "$(last_commit_subject)" = "Merged changes from subproject"
 	)
 '
 
-next_test
 test_expect_success 'merge new subproj history into sub dir/ with --squash and --prefix and --message' '
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	subtree_test_create_repo "$subtree_test_count" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	subtree_test_create_repo "$test_count" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" --message="Merged changes from subproject using squash" --squash FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Merged changes from subproject using squash"
+		test "$(last_commit_subject)" = "Merged changes from subproject using squash"
 	)
 '
 
-next_test
 test_expect_success 'merge the added subproj again, should do nothing' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD &&
 		# this shouldn not actually do anything, since FETCH_HEAD
 		# is already a parent
 		result=$(git merge -s ours -m "merge -s -ours" FETCH_HEAD) &&
-		check_equal "${result}" "Already up to date."
+		test "${result}" = "Already up to date."
 	)
 '
 
-next_test
 test_expect_success 'merge new subproj history into subdir/ with a slash appended to the argument of --prefix' '
-	test_create_repo "$test_count" &&
-	test_create_repo "$test_count/subproj" &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/subproj" &&
 	test_create_commit "$test_count" main1 &&
 	test_create_commit "$test_count/subproj" sub1 &&
 	(
 		cd "$test_count" &&
-		git fetch ./subproj master &&
+		git fetch ./subproj HEAD &&
 		git subtree add --prefix=subdir/ FETCH_HEAD
 	) &&
 	test_create_commit "$test_count/subproj" sub2 &&
 	(
 		cd "$test_count" &&
-		git fetch ./subproj master &&
+		git fetch ./subproj HEAD &&
 		git subtree merge --prefix=subdir/ FETCH_HEAD &&
-		check_equal "$(last_commit_message)" "Merge commit '\''$(git rev-parse FETCH_HEAD)'\''"
+		test "$(last_commit_subject)" = "Merge commit '\''$(git rev-parse FETCH_HEAD)'\''"
 	)
 '
 
@@ -281,18 +268,17 @@
 # Tests for 'git subtree split'
 #
 
-next_test
 test_expect_success 'split requires option --prefix' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD &&
-		echo "You must provide the --prefix option." > expected &&
-		test_must_fail git subtree split > actual 2>&1 &&
+		echo "You must provide the --prefix option." >expected &&
+		test_must_fail git subtree split >actual 2>&1 &&
 		test_debug "printf '"expected: "'" &&
 		test_debug "cat expected" &&
 		test_debug "printf '"actual: "'" &&
@@ -301,18 +287,17 @@
 	)
 '
 
-next_test
 test_expect_success 'split requires path given by option --prefix must exist' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD &&
-		echo "'\''non-existent-directory'\'' does not exist; use '\''git subtree add'\''" > expected &&
-		test_must_fail git subtree split --prefix=non-existent-directory > actual 2>&1 &&
+		echo "'\''non-existent-directory'\'' does not exist; use '\''git subtree add'\''" >expected &&
+		test_must_fail git subtree split --prefix=non-existent-directory >actual 2>&1 &&
 		test_debug "printf '"expected: "'" &&
 		test_debug "cat expected" &&
 		test_debug "printf '"actual: "'" &&
@@ -321,222 +306,696 @@
 	)
 '
 
-next_test
-test_expect_success 'split sub dir/ with --rejoin' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+test_expect_success 'split rejects flags for add' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
+		test_wrong_flag git subtree split --prefix="sub dir" --squash &&
+		test_wrong_flag git subtree split --prefix="sub dir" --message=foo
+	)
+'
+
+test_expect_success 'split sub dir/ with --rejoin' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
 		git subtree split --prefix="sub dir" --annotate="*" --rejoin &&
-		check_equal "$(last_commit_message)" "Split '\''sub dir/'\'' into commit '\''$split_hash'\''"
+		test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$split_hash'\''"
 	)
- '
+'
 
-next_test
 test_expect_success 'split sub dir/ with --rejoin from scratch' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	test_create_commit "$subtree_test_count" main1 &&
+	subtree_test_create_repo "$test_count" &&
+	test_create_commit "$test_count" main1 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		mkdir "sub dir" &&
 		echo file >"sub dir"/file &&
 		git add "sub dir/file" &&
 		git commit -m"sub dir file" &&
 		split_hash=$(git subtree split --prefix="sub dir" --rejoin) &&
 		git subtree split --prefix="sub dir" --rejoin &&
-		check_equal "$(last_commit_message)" "Split '\''sub dir/'\'' into commit '\''$split_hash'\''"
+		test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$split_hash'\''"
 	)
- '
+'
 
-next_test
 test_expect_success 'split sub dir/ with --rejoin and --message' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --message="Split & rejoin" --annotate="*" --rejoin &&
-		check_equal "$(last_commit_message)" "Split & rejoin"
+		test "$(last_commit_subject)" = "Split & rejoin"
 	)
 '
 
-next_test
+test_expect_success 'split "sub dir"/ with --rejoin and --squash' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" --squash FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git subtree pull --prefix="sub dir" --squash ./"sub proj" HEAD &&
+		MAIN=$(git rev-parse --verify HEAD) &&
+		SUB=$(git -C "sub proj" rev-parse --verify HEAD) &&
+
+		SPLIT=$(git subtree split --prefix="sub dir" --annotate="*" --rejoin --squash) &&
+
+		test_must_fail git merge-base --is-ancestor $SUB HEAD &&
+		test_must_fail git merge-base --is-ancestor $SPLIT HEAD &&
+		git rev-list HEAD ^$MAIN >commit-list &&
+		test_line_count = 2 commit-list &&
+		test "$(git rev-parse --verify HEAD:)"           = "$(git rev-parse --verify $MAIN:)" &&
+		test "$(git rev-parse --verify HEAD:"sub dir")"  = "$(git rev-parse --verify $SPLIT:)" &&
+		test "$(git rev-parse --verify HEAD^1)"          = $MAIN &&
+		test "$(git rev-parse --verify HEAD^2)"         != $SPLIT &&
+		test "$(git rev-parse --verify HEAD^2:)"         = "$(git rev-parse --verify $SPLIT:)" &&
+		test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$SPLIT'\''"
+	)
+'
+
+test_expect_success 'split then pull "sub dir"/ with --rejoin and --squash' '
+	# 1. "add"
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	git -C "$test_count" subtree --prefix="sub dir" add --squash ./"sub proj" HEAD &&
+
+	# 2. commit from parent
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+
+	# 3. "split --rejoin --squash"
+	git -C "$test_count" subtree --prefix="sub dir" split --rejoin --squash &&
+
+	# 4. "pull --squash"
+	test_create_commit "$test_count/sub proj" sub2 &&
+	git -C "$test_count" subtree -d --prefix="sub dir" pull --squash ./"sub proj" HEAD &&
+
+	test_must_fail git merge-base HEAD FETCH_HEAD
+'
+
 test_expect_success 'split "sub dir"/ with --branch' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br &&
-		check_equal "$(git rev-parse subproj-br)" "$split_hash"
+		test "$(git rev-parse subproj-br)" = "$split_hash"
 	)
 '
 
-next_test
 test_expect_success 'check hash of split' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br &&
-		check_equal "$(git rev-parse subproj-br)" "$split_hash" &&
+		test "$(git rev-parse subproj-br)" = "$split_hash" &&
 		# Check hash of split
 		new_hash=$(git rev-parse subproj-br^2) &&
 		(
 			cd ./"sub proj" &&
 			subdir_hash=$(git rev-parse HEAD) &&
-			check_equal ''"$new_hash"'' "$subdir_hash"
+			test "$new_hash" = "$subdir_hash"
 		)
 	)
 '
 
-next_test
 test_expect_success 'split "sub dir"/ with --branch for an existing branch' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git branch subproj-br FETCH_HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br &&
-		check_equal "$(git rev-parse subproj-br)" "$split_hash"
+		test "$(git rev-parse subproj-br)" = "$split_hash"
 	)
 '
 
-next_test
 test_expect_success 'split "sub dir"/ with --branch for an incompatible branch' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git branch init HEAD &&
-		git fetch ./"sub proj" master &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		test_must_fail git subtree split --prefix="sub dir" --branch init
 	)
 '
 
 #
+# Tests for 'git subtree pull'
+#
+
+test_expect_success 'pull requires option --prefix' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	(
+		cd "$test_count" &&
+		test_must_fail git subtree pull ./"sub proj" HEAD >out 2>err &&
+
+		echo "You must provide the --prefix option." >expected &&
+		test_must_be_empty out &&
+		test_cmp expected err
+	)
+'
+
+test_expect_success 'pull requires path given by option --prefix must exist' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		test_must_fail git subtree pull --prefix="sub dir" ./"sub proj" HEAD >out 2>err &&
+
+		echo "'\''sub dir'\'' does not exist; use '\''git subtree add'\''" >expected &&
+		test_must_be_empty out &&
+		test_cmp expected err
+	)
+'
+
+test_expect_success 'pull basic operation' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	(
+		cd "$test_count" &&
+		exp=$(git -C "sub proj" rev-parse --verify HEAD:) &&
+		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
+		act=$(git rev-parse --verify HEAD:"sub dir") &&
+		test "$act" = "$exp"
+	)
+'
+
+test_expect_success 'pull rejects flags for split' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	(
+		test_must_fail git subtree pull --prefix="sub dir" --annotate=foo ./"sub proj" HEAD &&
+		test_must_fail git subtree pull --prefix="sub dir" --branch=foo ./"sub proj" HEAD &&
+		test_must_fail git subtree pull --prefix="sub dir" --ignore-joins ./"sub proj" HEAD &&
+		test_must_fail git subtree pull --prefix="sub dir" --onto=foo ./"sub proj" HEAD &&
+		test_must_fail git subtree pull --prefix="sub dir" --rejoin ./"sub proj" HEAD
+	)
+'
+
+#
+# Tests for 'git subtree push'
+#
+
+test_expect_success 'push requires option --prefix' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD &&
+		echo "You must provide the --prefix option." >expected &&
+		test_must_fail git subtree push "./sub proj" from-mainline >actual 2>&1 &&
+		test_debug "printf '"expected: "'" &&
+		test_debug "cat expected" &&
+		test_debug "printf '"actual: "'" &&
+		test_debug "cat actual" &&
+		test_cmp expected actual
+	)
+'
+
+test_expect_success 'push requires path given by option --prefix must exist' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD &&
+		echo "'\''non-existent-directory'\'' does not exist; use '\''git subtree add'\''" >expected &&
+		test_must_fail git subtree push --prefix=non-existent-directory "./sub proj" from-mainline >actual 2>&1 &&
+		test_debug "printf '"expected: "'" &&
+		test_debug "cat expected" &&
+		test_debug "printf '"actual: "'" &&
+		test_debug "cat actual" &&
+		test_cmp expected actual
+	)
+'
+
+test_expect_success 'push rejects flags for add' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		test_wrong_flag git subtree split --prefix="sub dir" --squash ./"sub proj" from-mainline &&
+		test_wrong_flag git subtree split --prefix="sub dir" --message=foo ./"sub proj" from-mainline
+	)
+'
+
+test_expect_success 'push basic operation' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		before=$(git rev-parse --verify HEAD) &&
+		split_hash=$(git subtree split --prefix="sub dir") &&
+		git subtree push --prefix="sub dir" ./"sub proj" from-mainline &&
+		test "$before" = "$(git rev-parse --verify HEAD)" &&
+		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push sub dir/ with --rejoin' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
+		git subtree push --prefix="sub dir" --annotate="*" --rejoin ./"sub proj" from-mainline &&
+		test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$split_hash'\''" &&
+		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push sub dir/ with --rejoin from scratch' '
+	subtree_test_create_repo "$test_count" &&
+	test_create_commit "$test_count" main1 &&
+	(
+		cd "$test_count" &&
+		mkdir "sub dir" &&
+		echo file >"sub dir"/file &&
+		git add "sub dir/file" &&
+		git commit -m"sub dir file" &&
+		split_hash=$(git subtree split --prefix="sub dir" --rejoin) &&
+		git init --bare "sub proj.git" &&
+		git subtree push --prefix="sub dir" --rejoin ./"sub proj.git" from-mainline &&
+		test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$split_hash'\''" &&
+		test "$split_hash" = "$(git -C "sub proj.git" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push sub dir/ with --rejoin and --message' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		git subtree push --prefix="sub dir" --message="Split & rejoin" --annotate="*" --rejoin ./"sub proj" from-mainline &&
+		test "$(last_commit_subject)" = "Split & rejoin" &&
+		split_hash="$(git rev-parse --verify HEAD^2)" &&
+		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push "sub dir"/ with --rejoin and --squash' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" --squash FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git subtree pull --prefix="sub dir" --squash ./"sub proj" HEAD &&
+		MAIN=$(git rev-parse --verify HEAD) &&
+		SUB=$(git -C "sub proj" rev-parse --verify HEAD) &&
+
+		SPLIT=$(git subtree split --prefix="sub dir" --annotate="*") &&
+		git subtree push --prefix="sub dir" --annotate="*" --rejoin --squash ./"sub proj" from-mainline &&
+
+		test_must_fail git merge-base --is-ancestor $SUB HEAD &&
+		test_must_fail git merge-base --is-ancestor $SPLIT HEAD &&
+		git rev-list HEAD ^$MAIN >commit-list &&
+		test_line_count = 2 commit-list &&
+		test "$(git rev-parse --verify HEAD:)"           = "$(git rev-parse --verify $MAIN:)" &&
+		test "$(git rev-parse --verify HEAD:"sub dir")"  = "$(git rev-parse --verify $SPLIT:)" &&
+		test "$(git rev-parse --verify HEAD^1)"          = $MAIN &&
+		test "$(git rev-parse --verify HEAD^2)"         != $SPLIT &&
+		test "$(git rev-parse --verify HEAD^2:)"         = "$(git rev-parse --verify $SPLIT:)" &&
+		test "$(last_commit_subject)" = "Split '\''sub dir/'\'' into commit '\''$SPLIT'\''" &&
+		test "$SPLIT" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push "sub dir"/ with --branch' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
+		git subtree push --prefix="sub dir" --annotate="*" --branch subproj-br ./"sub proj" from-mainline &&
+		test "$(git rev-parse subproj-br)" = "$split_hash" &&
+		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'check hash of push' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
+		git subtree push --prefix="sub dir" --annotate="*" --branch subproj-br ./"sub proj" from-mainline &&
+		test "$(git rev-parse subproj-br)" = "$split_hash" &&
+		# Check hash of split
+		new_hash=$(git rev-parse subproj-br^2) &&
+		(
+			cd ./"sub proj" &&
+			subdir_hash=$(git rev-parse HEAD) &&
+			test "$new_hash" = "$subdir_hash"
+		) &&
+		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push "sub dir"/ with --branch for an existing branch' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git branch subproj-br FETCH_HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		split_hash=$(git subtree split --prefix="sub dir" --annotate="*") &&
+		git subtree push --prefix="sub dir" --annotate="*" --branch subproj-br ./"sub proj" from-mainline &&
+		test "$(git rev-parse subproj-br)" = "$split_hash" &&
+		test "$split_hash" = "$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline)"
+	)
+'
+
+test_expect_success 'push "sub dir"/ with --branch for an incompatible branch' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git branch init HEAD &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree merge --prefix="sub dir" FETCH_HEAD &&
+		test_must_fail git subtree push --prefix="sub dir" --branch init "./sub proj" from-mainline
+	)
+'
+
+test_expect_success 'push "sub dir"/ with a local rev' '
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
+	(
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
+		git subtree add --prefix="sub dir" FETCH_HEAD
+	) &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
+	(
+		cd "$test_count" &&
+		bad_tree=$(git rev-parse --verify HEAD:"sub dir") &&
+		good_tree=$(git rev-parse --verify HEAD^:"sub dir") &&
+		git subtree push --prefix="sub dir" --annotate="*" ./"sub proj" HEAD^:from-mainline &&
+		split_tree=$(git -C "sub proj" rev-parse --verify refs/heads/from-mainline:) &&
+		test "$split_tree" = "$good_tree"
+	)
+'
+
+#
 # Validity checking
 #
 
-next_test
 test_expect_success 'make sure exactly the right set of files ends up in the subproj' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub3 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
+	test_create_commit "$test_count/sub proj" sub3 &&
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub4 &&
+	test_create_commit "$test_count/sub proj" sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub4 &&
+	test_create_commit "$test_count" "sub dir"/main-sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD &&
 
@@ -547,46 +1006,45 @@
 	)
 '
 
-next_test
 test_expect_success 'make sure the subproj *only* contains commits that affect the "sub dir"' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub3 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
+	test_create_commit "$test_count/sub proj" sub3 &&
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub4 &&
+	test_create_commit "$test_count/sub proj" sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub4 &&
+	test_create_commit "$test_count" "sub dir"/main-sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD &&
 
@@ -598,52 +1056,51 @@
 	)
 '
 
-next_test
 test_expect_success 'make sure exactly the right set of files ends up in the mainline' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub3 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
+	test_create_commit "$test_count/sub proj" sub3 &&
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub4 &&
+	test_create_commit "$test_count/sub proj" sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub4 &&
+	test_create_commit "$test_count" "sub dir"/main-sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
 	(
-		cd "$subtree_test_count" &&
-		git subtree pull --prefix="sub dir" ./"sub proj" master &&
+		cd "$test_count" &&
+		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
 
 		test_write_lines main1 main2 >chkm &&
 		test_write_lines main-sub1 main-sub2 main-sub3 main-sub4 >chkms &&
@@ -657,53 +1114,52 @@
 	)
 '
 
-next_test
 test_expect_success 'make sure each filename changed exactly once in the entire history' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git config log.date relative &&
-		git fetch ./"sub proj" master &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub3 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
+	test_create_commit "$test_count/sub proj" sub3 &&
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub4 &&
+	test_create_commit "$test_count/sub proj" sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub4 &&
+	test_create_commit "$test_count" "sub dir"/main-sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
 	(
-		cd "$subtree_test_count" &&
-		git subtree pull --prefix="sub dir" ./"sub proj" master &&
+		cd "$test_count" &&
+		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
 
 		test_write_lines main1 main2 >chkm &&
 		test_write_lines sub1 sub2 sub3 sub4 >chks &&
@@ -723,105 +1179,103 @@
 	)
 '
 
-next_test
 test_expect_success 'make sure the --rejoin commits never make it into subproj' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub3 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
+	test_create_commit "$test_count/sub proj" sub3 &&
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub4 &&
+	test_create_commit "$test_count/sub proj" sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub4 &&
+	test_create_commit "$test_count" "sub dir"/main-sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
 	(
-		cd "$subtree_test_count" &&
-		git subtree pull --prefix="sub dir" ./"sub proj" master &&
-		check_equal "$(git log --pretty=format:"%s" HEAD^2 | grep -i split)" ""
+		cd "$test_count" &&
+		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
+		test "$(git log --pretty=format:"%s" HEAD^2 | grep -i split)" = ""
 	)
 '
 
-next_test
 test_expect_success 'make sure no "git subtree" tagged commits make it into subproj' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub3 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
+	test_create_commit "$test_count/sub proj" sub3 &&
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		 git merge FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub4 &&
+	test_create_commit "$test_count/sub proj" sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub4 &&
+	test_create_commit "$test_count" "sub dir"/main-sub4 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --annotate="*" --branch subproj-br --rejoin
 	) &&
 	(
-		cd "$subtree_test_count/sub proj" &&
+		cd "$test_count/sub proj" &&
 		git fetch .. subproj-br &&
 		git merge FETCH_HEAD
 	) &&
 	(
-		cd "$subtree_test_count" &&
-		git subtree pull --prefix="sub dir" ./"sub proj" master &&
+		cd "$test_count" &&
+		git subtree pull --prefix="sub dir" ./"sub proj" HEAD &&
 
 		# They are meaningless to subproj since one side of the merge refers to the mainline
-		check_equal "$(git log --pretty=format:"%s%n%b" HEAD^2 | grep "git-subtree.*:")" ""
+		test "$(git log --pretty=format:"%s%n%b" HEAD^2 | grep "git-subtree.*:")" = ""
 	)
 '
 
@@ -829,145 +1283,135 @@
 # A new set of tests
 #
 
-next_test
 test_expect_success 'make sure "git subtree split" find the correct parent' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git branch subproj-ref FETCH_HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --branch subproj-br &&
 
 		# at this point, the new commit parent should be subproj-ref, if it is
-		# not, something went wrong (the "newparent" of "master~" commit should
+		# not, something went wrong (the "newparent" of "HEAD~" commit should
 		# have been sub2, but it was not, because its cache was not set to
 		# itself)
-		check_equal "$(git log --pretty=format:%P -1 subproj-br)" "$(git rev-parse subproj-ref)"
+		test "$(git log --pretty=format:%P -1 subproj-br)" = "$(git rev-parse subproj-ref)"
 	)
 '
 
-next_test
 test_expect_success 'split a new subtree without --onto option' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --branch subproj-br
 	) &&
-	mkdir "$subtree_test_count"/"sub dir2" &&
-	test_create_commit "$subtree_test_count" "sub dir2"/main-sub2 &&
+	mkdir "$test_count"/"sub dir2" &&
+	test_create_commit "$test_count" "sub dir2"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 
 		# also test that we still can split out an entirely new subtree
 		# if the parent of the first commit in the tree is not empty,
 		# then the new subtree has accidentally been attached to something
 		git subtree split --prefix="sub dir2" --branch subproj2-br &&
-		check_equal "$(git log --pretty=format:%P -1 subproj2-br)" ""
+		test "$(git log --pretty=format:%P -1 subproj2-br)" = ""
 	)
 '
 
-next_test
 test_expect_success 'verify one file change per commit' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git branch sub1 FETCH_HEAD &&
 		git subtree add --prefix="sub dir" sub1
 	) &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir" --branch subproj-br
 	) &&
-	mkdir "$subtree_test_count"/"sub dir2" &&
-	test_create_commit "$subtree_test_count" "sub dir2"/main-sub2 &&
+	mkdir "$test_count"/"sub dir2" &&
+	test_create_commit "$test_count" "sub dir2"/main-sub2 &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git subtree split --prefix="sub dir2" --branch subproj2-br &&
 
-		x= &&
-		git log --pretty=format:"commit: %H" | join_commits |
-		(
-			while read commit a b; do
-				test_debug "echo Verifying commit $commit"
-				test_debug "echo a: $a"
-				test_debug "echo b: $b"
-				check_equal "$b" ""
-				x=1
-			done
-			check_equal "$x" 1
-		)
+		git log --format="%H" >commit-list &&
+		while read commit
+		do
+			git log -n1 --format="" --name-only "$commit" >file-list &&
+			test_line_count -le 1 file-list || return 1
+		done <commit-list
 	)
 '
 
-next_test
 test_expect_success 'push split to subproj' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	subtree_test_create_repo "$subtree_test_count/sub proj" &&
-	test_create_commit "$subtree_test_count" main1 &&
-	test_create_commit "$subtree_test_count/sub proj" sub1 &&
+	subtree_test_create_repo "$test_count" &&
+	subtree_test_create_repo "$test_count/sub proj" &&
+	test_create_commit "$test_count" main1 &&
+	test_create_commit "$test_count/sub proj" sub1 &&
 	(
-		cd "$subtree_test_count" &&
-		git fetch ./"sub proj" master &&
+		cd "$test_count" &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree add --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub1 &&
-	test_create_commit "$subtree_test_count" main2 &&
-	test_create_commit "$subtree_test_count/sub proj" sub2 &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub1 &&
+	test_create_commit "$test_count" main2 &&
+	test_create_commit "$test_count/sub proj" sub2 &&
+	test_create_commit "$test_count" "sub dir"/main-sub2 &&
 	(
-		cd $subtree_test_count/"sub proj" &&
-                git branch sub-branch-1 &&
-                cd .. &&
-		git fetch ./"sub proj" master &&
+		cd $test_count/"sub proj" &&
+		git branch sub-branch-1 &&
+		cd .. &&
+		git fetch ./"sub proj" HEAD &&
 		git subtree merge --prefix="sub dir" FETCH_HEAD
 	) &&
-	test_create_commit "$subtree_test_count" "sub dir"/main-sub3 &&
-        (
-		cd "$subtree_test_count" &&
-	        git subtree push ./"sub proj" --prefix "sub dir" sub-branch-1 &&
-                cd ./"sub proj" &&
-                git checkout sub-branch-1 &&
-         	check_equal "$(last_commit_message)" "sub dir/main-sub3"
+	test_create_commit "$test_count" "sub dir"/main-sub3 &&
+	(
+		cd "$test_count" &&
+		git subtree push ./"sub proj" --prefix "sub dir" sub-branch-1 &&
+		cd ./"sub proj" &&
+		git checkout sub-branch-1 &&
+		test "$(last_commit_subject)" = "sub dir/main-sub3"
 	)
 '
 
@@ -991,43 +1435,43 @@
 #   set of commits.
 #
 
-next_test
 test_expect_success 'subtree descendant check' '
-	subtree_test_create_repo "$subtree_test_count" &&
-	test_create_commit "$subtree_test_count" folder_subtree/a &&
+	subtree_test_create_repo "$test_count" &&
+	defaultBranch=$(sed "s,ref: refs/heads/,," "$test_count/.git/HEAD") &&
+	test_create_commit "$test_count" folder_subtree/a &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git branch branch
 	) &&
-	test_create_commit "$subtree_test_count" folder_subtree/0 &&
-	test_create_commit "$subtree_test_count" folder_subtree/b &&
-	cherry=$(cd "$subtree_test_count"; git rev-parse HEAD) &&
+	test_create_commit "$test_count" folder_subtree/0 &&
+	test_create_commit "$test_count" folder_subtree/b &&
+	cherry=$(cd "$test_count"; git rev-parse HEAD) &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git checkout branch
 	) &&
-	test_create_commit "$subtree_test_count" commit_on_branch &&
+	test_create_commit "$test_count" commit_on_branch &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git cherry-pick $cherry &&
-		git checkout master &&
+		git checkout $defaultBranch &&
 		git merge -m "merge should be kept on subtree" branch &&
 		git branch no_subtree_work_branch
 	) &&
-	test_create_commit "$subtree_test_count" folder_subtree/d &&
+	test_create_commit "$test_count" folder_subtree/d &&
 	(
-		cd "$subtree_test_count" &&
+		cd "$test_count" &&
 		git checkout no_subtree_work_branch
 	) &&
-	test_create_commit "$subtree_test_count" not_a_subtree_change &&
+	test_create_commit "$test_count" not_a_subtree_change &&
 	(
-		cd "$subtree_test_count" &&
-		git checkout master &&
+		cd "$test_count" &&
+		git checkout $defaultBranch &&
 		git merge -m "merge should be skipped on subtree" no_subtree_work_branch &&
 
-		git subtree split --prefix folder_subtree/ --branch subtree_tip master &&
+		git subtree split --prefix folder_subtree/ --branch subtree_tip $defaultBranch &&
 		git subtree split --prefix folder_subtree/ --branch subtree_branch branch &&
-		check_equal $(git rev-list --count subtree_tip..subtree_branch) 0
+		test $(git rev-list --count subtree_tip..subtree_branch) = 0
 	)
 '
 
diff --git a/contrib/subtree/todo b/contrib/subtree/todo
index 0d0e777..32d2ce3 100644
--- a/contrib/subtree/todo
+++ b/contrib/subtree/todo
@@ -23,9 +23,9 @@
 
 	"pull" and "merge" commands should fail if you've never merged
 		that --prefix before
-		
+
 	docs should provide an example of "add"
-	
+
 	note that the initial split doesn't *have* to have a commitid
 		specified... that's just an optimization
 
@@ -33,7 +33,7 @@
 		get a misleading "prefix must end with /" message from
 		one of the other git tools that git-subtree calls.  Should
 		detect this situation and print the *real* problem.
-	
+
 	"pull --squash" should do fetch-synthesize-merge, but instead just
 		does "pull" directly, which doesn't work at all.
 
diff --git a/convert.c b/convert.c
index ee360c2..fd9c84b 100644
--- a/convert.c
+++ b/convert.c
@@ -24,17 +24,6 @@
 #define CONVERT_STAT_BITS_TXT_CRLF  0x2
 #define CONVERT_STAT_BITS_BIN       0x4
 
-enum crlf_action {
-	CRLF_UNDEFINED,
-	CRLF_BINARY,
-	CRLF_TEXT,
-	CRLF_TEXT_INPUT,
-	CRLF_TEXT_CRLF,
-	CRLF_AUTO,
-	CRLF_AUTO_INPUT,
-	CRLF_AUTO_CRLF
-};
-
 struct text_stat {
 	/* NUL, CR, LF and CRLF counts */
 	unsigned nul, lonecr, lonelf, crlf;
@@ -138,7 +127,7 @@
 	}
 }
 
-const char *get_cached_convert_stats_ascii(const struct index_state *istate,
+const char *get_cached_convert_stats_ascii(struct index_state *istate,
 					   const char *path)
 {
 	const char *ret;
@@ -172,7 +161,7 @@
 	return 0;
 }
 
-static enum eol output_eol(enum crlf_action crlf_action)
+static enum eol output_eol(enum convert_crlf_action crlf_action)
 {
 	switch (crlf_action) {
 	case CRLF_BINARY:
@@ -222,7 +211,7 @@
 	}
 }
 
-static int has_crlf_in_index(const struct index_state *istate, const char *path)
+static int has_crlf_in_index(struct index_state *istate, const char *path)
 {
 	unsigned long sz;
 	void *data;
@@ -246,7 +235,7 @@
 }
 
 static int will_convert_lf_to_crlf(struct text_stat *stats,
-				   enum crlf_action crlf_action)
+				   enum convert_crlf_action crlf_action)
 {
 	if (output_eol(crlf_action) != EOL_CRLF)
 		return 0;
@@ -496,10 +485,10 @@
 	return 1;
 }
 
-static int crlf_to_git(const struct index_state *istate,
+static int crlf_to_git(struct index_state *istate,
 		       const char *path, const char *src, size_t len,
 		       struct strbuf *buf,
-		       enum crlf_action crlf_action, int conv_flags)
+		       enum convert_crlf_action crlf_action, int conv_flags)
 {
 	struct text_stat stats;
 	char *dst;
@@ -585,8 +574,8 @@
 	return 1;
 }
 
-static int crlf_to_worktree(const char *src, size_t len,
-			    struct strbuf *buf, enum crlf_action crlf_action)
+static int crlf_to_worktree(const char *src, size_t len, struct strbuf *buf,
+			    enum convert_crlf_action crlf_action)
 {
 	char *to_free = NULL;
 	struct text_stat stats;
@@ -884,9 +873,13 @@
 		goto done;
 
 	if (fd >= 0)
-		err = write_packetized_from_fd(fd, process->in);
+		err = write_packetized_from_fd_no_flush(fd, process->in);
 	else
-		err = write_packetized_from_buf(src, len, process->in);
+		err = write_packetized_from_buf_no_flush(src, len, process->in);
+	if (err)
+		goto done;
+
+	err = packet_flush_gently(process->in);
 	if (err)
 		goto done;
 
@@ -903,7 +896,8 @@
 		if (err)
 			goto done;
 
-		err = read_packetized_to_strbuf(process->out, &nbuf) < 0;
+		err = read_packetized_to_strbuf(process->out, &nbuf,
+						PACKET_READ_GENTLE_ON_EOF) < 0;
 		if (err)
 			goto done;
 
@@ -1028,7 +1022,7 @@
 		if (!strncmp(drv->name, name, namelen) && !drv->name[namelen])
 			break;
 	if (!drv) {
-		drv = xcalloc(1, sizeof(struct convert_driver));
+		CALLOC_ARRAY(drv, 1);
 		drv->name = xmemdupz(name, namelen);
 		*user_convert_tail = drv;
 		user_convert_tail = &(drv->next);
@@ -1247,7 +1241,7 @@
 	return value;
 }
 
-static enum crlf_action git_path_check_crlf(struct attr_check_item *check)
+static enum convert_crlf_action git_path_check_crlf(struct attr_check_item *check)
 {
 	const char *value = check->value;
 
@@ -1297,18 +1291,10 @@
 	return !!ATTR_TRUE(value);
 }
 
-struct conv_attrs {
-	struct convert_driver *drv;
-	enum crlf_action attr_action; /* What attr says */
-	enum crlf_action crlf_action; /* When no attr is set, use core.autocrlf */
-	int ident;
-	const char *working_tree_encoding; /* Supported encoding or default encoding if NULL */
-};
-
 static struct attr_check *check;
 
-static void convert_attrs(const struct index_state *istate,
-			  struct conv_attrs *ca, const char *path)
+void convert_attrs(struct index_state *istate,
+		   struct conv_attrs *ca, const char *path)
 {
 	struct attr_check_item *ccheck = NULL;
 
@@ -1369,7 +1355,7 @@
 	user_convert_tail = NULL;
 }
 
-int would_convert_to_git_filter_fd(const struct index_state *istate, const char *path)
+int would_convert_to_git_filter_fd(struct index_state *istate, const char *path)
 {
 	struct conv_attrs ca;
 
@@ -1388,7 +1374,7 @@
 	return apply_filter(path, NULL, 0, -1, NULL, ca.drv, CAP_CLEAN, NULL, NULL);
 }
 
-const char *get_convert_attr_ascii(const struct index_state *istate, const char *path)
+const char *get_convert_attr_ascii(struct index_state *istate, const char *path)
 {
 	struct conv_attrs ca;
 
@@ -1414,7 +1400,7 @@
 	return "";
 }
 
-int convert_to_git(const struct index_state *istate,
+int convert_to_git(struct index_state *istate,
 		   const char *path, const char *src, size_t len,
 		   struct strbuf *dst, int conv_flags)
 {
@@ -1448,7 +1434,7 @@
 	return ret | ident_to_git(src, len, dst, ca.ident);
 }
 
-void convert_to_git_filter_fd(const struct index_state *istate,
+void convert_to_git_filter_fd(struct index_state *istate,
 			      const char *path, int fd, struct strbuf *dst,
 			      int conv_flags)
 {
@@ -1456,7 +1442,6 @@
 	convert_attrs(istate, &ca, path);
 
 	assert(ca.drv);
-	assert(ca.drv->clean || ca.drv->process);
 
 	if (!apply_filter(path, NULL, 0, fd, dst, ca.drv, CAP_CLEAN, NULL, NULL))
 		die(_("%s: clean filter '%s' failed"), path, ca.drv->name);
@@ -1466,19 +1451,16 @@
 	ident_to_git(dst->buf, dst->len, dst, ca.ident);
 }
 
-static int convert_to_working_tree_internal(const struct index_state *istate,
-					    const char *path, const char *src,
-					    size_t len, struct strbuf *dst,
-					    int normalizing,
-					    const struct checkout_metadata *meta,
-					    struct delayed_checkout *dco)
+static int convert_to_working_tree_ca_internal(const struct conv_attrs *ca,
+					       const char *path, const char *src,
+					       size_t len, struct strbuf *dst,
+					       int normalizing,
+					       const struct checkout_metadata *meta,
+					       struct delayed_checkout *dco)
 {
 	int ret = 0, ret_filter = 0;
-	struct conv_attrs ca;
 
-	convert_attrs(istate, &ca, path);
-
-	ret |= ident_to_worktree(src, len, dst, ca.ident);
+	ret |= ident_to_worktree(src, len, dst, ca->ident);
 	if (ret) {
 		src = dst->buf;
 		len = dst->len;
@@ -1488,49 +1470,56 @@
 	 * is a smudge or process filter (even if the process filter doesn't
 	 * support smudge).  The filters might expect CRLFs.
 	 */
-	if ((ca.drv && (ca.drv->smudge || ca.drv->process)) || !normalizing) {
-		ret |= crlf_to_worktree(src, len, dst, ca.crlf_action);
+	if ((ca->drv && (ca->drv->smudge || ca->drv->process)) || !normalizing) {
+		ret |= crlf_to_worktree(src, len, dst, ca->crlf_action);
 		if (ret) {
 			src = dst->buf;
 			len = dst->len;
 		}
 	}
 
-	ret |= encode_to_worktree(path, src, len, dst, ca.working_tree_encoding);
+	ret |= encode_to_worktree(path, src, len, dst, ca->working_tree_encoding);
 	if (ret) {
 		src = dst->buf;
 		len = dst->len;
 	}
 
 	ret_filter = apply_filter(
-		path, src, len, -1, dst, ca.drv, CAP_SMUDGE, meta, dco);
-	if (!ret_filter && ca.drv && ca.drv->required)
-		die(_("%s: smudge filter %s failed"), path, ca.drv->name);
+		path, src, len, -1, dst, ca->drv, CAP_SMUDGE, meta, dco);
+	if (!ret_filter && ca->drv && ca->drv->required)
+		die(_("%s: smudge filter %s failed"), path, ca->drv->name);
 
 	return ret | ret_filter;
 }
 
-int async_convert_to_working_tree(const struct index_state *istate,
-				  const char *path, const char *src,
-				  size_t len, struct strbuf *dst,
-				  const struct checkout_metadata *meta,
-				  void *dco)
+int async_convert_to_working_tree_ca(const struct conv_attrs *ca,
+				     const char *path, const char *src,
+				     size_t len, struct strbuf *dst,
+				     const struct checkout_metadata *meta,
+				     void *dco)
 {
-	return convert_to_working_tree_internal(istate, path, src, len, dst, 0, meta, dco);
+	return convert_to_working_tree_ca_internal(ca, path, src, len, dst, 0,
+						   meta, dco);
 }
 
-int convert_to_working_tree(const struct index_state *istate,
-			    const char *path, const char *src,
-			    size_t len, struct strbuf *dst,
-			    const struct checkout_metadata *meta)
+int convert_to_working_tree_ca(const struct conv_attrs *ca,
+			       const char *path, const char *src,
+			       size_t len, struct strbuf *dst,
+			       const struct checkout_metadata *meta)
 {
-	return convert_to_working_tree_internal(istate, path, src, len, dst, 0, meta, NULL);
+	return convert_to_working_tree_ca_internal(ca, path, src, len, dst, 0,
+						   meta, NULL);
 }
 
-int renormalize_buffer(const struct index_state *istate, const char *path,
+int renormalize_buffer(struct index_state *istate, const char *path,
 		       const char *src, size_t len, struct strbuf *dst)
 {
-	int ret = convert_to_working_tree_internal(istate, path, src, len, dst, 1, NULL, NULL);
+	struct conv_attrs ca;
+	int ret;
+
+	convert_attrs(istate, &ca, path);
+	ret = convert_to_working_tree_ca_internal(&ca, path, src, len, dst, 1,
+						  NULL, NULL);
 	if (ret) {
 		src = dst->buf;
 		len = dst->len;
@@ -1957,34 +1946,25 @@
 }
 
 /*
- * Return an appropriately constructed filter for the path, or NULL if
+ * Return an appropriately constructed filter for the given ca, or NULL if
  * the contents cannot be filtered without reading the whole thing
  * in-core.
  *
  * Note that you would be crazy to set CRLF, smudge/clean or ident to a
  * large binary blob you would want us not to slurp into the memory!
  */
-struct stream_filter *get_stream_filter(const struct index_state *istate,
-					const char *path,
-					const struct object_id *oid)
+struct stream_filter *get_stream_filter_ca(const struct conv_attrs *ca,
+					   const struct object_id *oid)
 {
-	struct conv_attrs ca;
 	struct stream_filter *filter = NULL;
 
-	convert_attrs(istate, &ca, path);
-	if (ca.drv && (ca.drv->process || ca.drv->smudge || ca.drv->clean))
+	if (classify_conv_attrs(ca) != CA_CLASS_STREAMABLE)
 		return NULL;
 
-	if (ca.working_tree_encoding)
-		return NULL;
-
-	if (ca.crlf_action == CRLF_AUTO || ca.crlf_action == CRLF_AUTO_CRLF)
-		return NULL;
-
-	if (ca.ident)
+	if (ca->ident)
 		filter = ident_filter(oid);
 
-	if (output_eol(ca.crlf_action) == EOL_CRLF)
+	if (output_eol(ca->crlf_action) == EOL_CRLF)
 		filter = cascade_filter(filter, lf_to_crlf_filter());
 	else
 		filter = cascade_filter(filter, &null_filter_singleton);
@@ -1992,6 +1972,15 @@
 	return filter;
 }
 
+struct stream_filter *get_stream_filter(struct index_state *istate,
+					const char *path,
+					const struct object_id *oid)
+{
+	struct conv_attrs ca;
+	convert_attrs(istate, &ca, path);
+	return get_stream_filter_ca(&ca, oid);
+}
+
 void free_stream_filter(struct stream_filter *filter)
 {
 	filter->vtbl->free(filter);
@@ -2025,3 +2014,21 @@
 	if (blob)
 		oidcpy(&dst->blob, blob);
 }
+
+enum conv_attrs_classification classify_conv_attrs(const struct conv_attrs *ca)
+{
+	if (ca->drv) {
+		if (ca->drv->process)
+			return CA_CLASS_INCORE_PROCESS;
+		if (ca->drv->smudge || ca->drv->clean)
+			return CA_CLASS_INCORE_FILTER;
+	}
+
+	if (ca->working_tree_encoding)
+		return CA_CLASS_INCORE;
+
+	if (ca->crlf_action == CRLF_AUTO || ca->crlf_action == CRLF_AUTO_CRLF)
+		return CA_CLASS_INCORE;
+
+	return CA_CLASS_STREAMABLE;
+}
diff --git a/convert.h b/convert.h
index e29d102..5ee1c32 100644
--- a/convert.h
+++ b/convert.h
@@ -63,43 +63,86 @@
 	struct object_id blob;
 };
 
+enum convert_crlf_action {
+	CRLF_UNDEFINED,
+	CRLF_BINARY,
+	CRLF_TEXT,
+	CRLF_TEXT_INPUT,
+	CRLF_TEXT_CRLF,
+	CRLF_AUTO,
+	CRLF_AUTO_INPUT,
+	CRLF_AUTO_CRLF
+};
+
+struct convert_driver;
+
+struct conv_attrs {
+	struct convert_driver *drv;
+	enum convert_crlf_action attr_action; /* What attr says */
+	enum convert_crlf_action crlf_action; /* When no attr is set, use core.autocrlf */
+	int ident;
+	const char *working_tree_encoding; /* Supported encoding or default encoding if NULL */
+};
+
+void convert_attrs(struct index_state *istate,
+		   struct conv_attrs *ca, const char *path);
+
 extern enum eol core_eol;
 extern char *check_roundtrip_encoding;
-const char *get_cached_convert_stats_ascii(const struct index_state *istate,
+const char *get_cached_convert_stats_ascii(struct index_state *istate,
 					   const char *path);
 const char *get_wt_convert_stats_ascii(const char *path);
-const char *get_convert_attr_ascii(const struct index_state *istate,
+const char *get_convert_attr_ascii(struct index_state *istate,
 				   const char *path);
 
 /* returns 1 if *dst was used */
-int convert_to_git(const struct index_state *istate,
+int convert_to_git(struct index_state *istate,
 		   const char *path, const char *src, size_t len,
 		   struct strbuf *dst, int conv_flags);
-int convert_to_working_tree(const struct index_state *istate,
-			    const char *path, const char *src,
-			    size_t len, struct strbuf *dst,
-			    const struct checkout_metadata *meta);
-int async_convert_to_working_tree(const struct index_state *istate,
-				  const char *path, const char *src,
-				  size_t len, struct strbuf *dst,
-				  const struct checkout_metadata *meta,
-				  void *dco);
+int convert_to_working_tree_ca(const struct conv_attrs *ca,
+			       const char *path, const char *src,
+			       size_t len, struct strbuf *dst,
+			       const struct checkout_metadata *meta);
+int async_convert_to_working_tree_ca(const struct conv_attrs *ca,
+				     const char *path, const char *src,
+				     size_t len, struct strbuf *dst,
+				     const struct checkout_metadata *meta,
+				     void *dco);
+static inline int convert_to_working_tree(struct index_state *istate,
+					  const char *path, const char *src,
+					  size_t len, struct strbuf *dst,
+					  const struct checkout_metadata *meta)
+{
+	struct conv_attrs ca;
+	convert_attrs(istate, &ca, path);
+	return convert_to_working_tree_ca(&ca, path, src, len, dst, meta);
+}
+static inline int async_convert_to_working_tree(struct index_state *istate,
+						const char *path, const char *src,
+						size_t len, struct strbuf *dst,
+						const struct checkout_metadata *meta,
+						void *dco)
+{
+	struct conv_attrs ca;
+	convert_attrs(istate, &ca, path);
+	return async_convert_to_working_tree_ca(&ca, path, src, len, dst, meta, dco);
+}
 int async_query_available_blobs(const char *cmd,
 				struct string_list *available_paths);
-int renormalize_buffer(const struct index_state *istate,
+int renormalize_buffer(struct index_state *istate,
 		       const char *path, const char *src, size_t len,
 		       struct strbuf *dst);
-static inline int would_convert_to_git(const struct index_state *istate,
+static inline int would_convert_to_git(struct index_state *istate,
 				       const char *path)
 {
 	return convert_to_git(istate, path, NULL, 0, NULL, 0);
 }
 /* Precondition: would_convert_to_git_filter_fd(path) == true */
-void convert_to_git_filter_fd(const struct index_state *istate,
+void convert_to_git_filter_fd(struct index_state *istate,
 			      const char *path, int fd,
 			      struct strbuf *dst,
 			      int conv_flags);
-int would_convert_to_git_filter_fd(const struct index_state *istate,
+int would_convert_to_git_filter_fd(struct index_state *istate,
 				   const char *path);
 
 /*
@@ -133,9 +176,11 @@
 
 struct stream_filter; /* opaque */
 
-struct stream_filter *get_stream_filter(const struct index_state *istate,
+struct stream_filter *get_stream_filter(struct index_state *istate,
 					const char *path,
 					const struct object_id *);
+struct stream_filter *get_stream_filter_ca(const struct conv_attrs *ca,
+					   const struct object_id *oid);
 void free_stream_filter(struct stream_filter *);
 int is_null_stream_filter(struct stream_filter *);
 
@@ -155,4 +200,37 @@
 		  const char *input, size_t *isize_p,
 		  char *output, size_t *osize_p);
 
+enum conv_attrs_classification {
+	/*
+	 * The blob must be loaded into a buffer before it can be
+	 * smudged. All smudging is done in-proc.
+	 */
+	CA_CLASS_INCORE,
+
+	/*
+	 * The blob must be loaded into a buffer, but uses a
+	 * single-file driver filter, such as rot13.
+	 */
+	CA_CLASS_INCORE_FILTER,
+
+	/*
+	 * The blob must be loaded into a buffer, but uses a
+	 * long-running driver process, such as LFS. This might or
+	 * might not use delayed operations. (The important thing is
+	 * that there is a single subordinate long-running process
+	 * handling all associated blobs and in case of delayed
+	 * operations, may hold per-blob state.)
+	 */
+	CA_CLASS_INCORE_PROCESS,
+
+	/*
+	 * The blob can be streamed and smudged without needing to
+	 * completely read it into a buffer.
+	 */
+	CA_CLASS_STREAMABLE,
+};
+
+enum conv_attrs_classification classify_conv_attrs(
+	const struct conv_attrs *ca);
+
 #endif /* CONVERT_H */
diff --git a/credential.c b/credential.c
index e5202fb..3c05c7c 100644
--- a/credential.c
+++ b/credential.c
@@ -10,8 +10,8 @@
 
 void credential_init(struct credential *c)
 {
-	memset(c, 0, sizeof(*c));
-	c->helpers.strdup_strings = 1;
+	struct credential blank = CREDENTIAL_INIT;
+	memcpy(c, &blank, sizeof(*c));
 }
 
 void credential_clear(struct credential *c)
diff --git a/credential.h b/credential.h
index c0e17e3..f430e77 100644
--- a/credential.h
+++ b/credential.h
@@ -128,7 +128,9 @@
 	char *path;
 };
 
-#define CREDENTIAL_INIT { STRING_LIST_INIT_DUP }
+#define CREDENTIAL_INIT { \
+	.helpers = STRING_LIST_INIT_DUP, \
+}
 
 /* Initialize a credential structure, setting all fields to empty. */
 void credential_init(struct credential *);
diff --git a/csum-file.c b/csum-file.c
index 0f35fa5..c951cf8 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -11,35 +11,33 @@
 #include "progress.h"
 #include "csum-file.h"
 
+static void verify_buffer_or_die(struct hashfile *f,
+				 const void *buf,
+				 unsigned int count)
+{
+	ssize_t ret = read_in_full(f->check_fd, f->check_buffer, count);
+
+	if (ret < 0)
+		die_errno("%s: sha1 file read error", f->name);
+	if (ret != count)
+		die("%s: sha1 file truncated", f->name);
+	if (memcmp(buf, f->check_buffer, count))
+		die("sha1 file '%s' validation error", f->name);
+}
+
 static void flush(struct hashfile *f, const void *buf, unsigned int count)
 {
-	if (0 <= f->check_fd && count)  {
-		unsigned char check_buffer[8192];
-		ssize_t ret = read_in_full(f->check_fd, check_buffer, count);
+	if (0 <= f->check_fd && count)
+		verify_buffer_or_die(f, buf, count);
 
-		if (ret < 0)
-			die_errno("%s: sha1 file read error", f->name);
-		if (ret != count)
-			die("%s: sha1 file truncated", f->name);
-		if (memcmp(buf, check_buffer, count))
-			die("sha1 file '%s' validation error", f->name);
-	}
-
-	for (;;) {
-		int ret = xwrite(f->fd, buf, count);
-		if (ret > 0) {
-			f->total += ret;
-			display_throughput(f->tp, f->total);
-			buf = (char *) buf + ret;
-			count -= ret;
-			if (count)
-				continue;
-			return;
-		}
-		if (!ret)
+	if (write_in_full(f->fd, buf, count) < 0) {
+		if (errno == ENOSPC)
 			die("sha1 file '%s' write error. Out of diskspace", f->name);
 		die_errno("sha1 file '%s' write error", f->name);
 	}
+
+	f->total += count;
+	display_throughput(f->tp, f->total);
 }
 
 void hashflush(struct hashfile *f)
@@ -53,6 +51,13 @@
 	}
 }
 
+static void free_hashfile(struct hashfile *f)
+{
+	free(f->buffer);
+	free(f->check_buffer);
+	free(f);
+}
+
 int finalize_hashfile(struct hashfile *f, unsigned char *result, unsigned int flags)
 {
 	int fd;
@@ -82,47 +87,45 @@
 		if (close(f->check_fd))
 			die_errno("%s: sha1 file error on close", f->name);
 	}
-	free(f);
+	free_hashfile(f);
 	return fd;
 }
 
 void hashwrite(struct hashfile *f, const void *buf, unsigned int count)
 {
 	while (count) {
-		unsigned offset = f->offset;
-		unsigned left = sizeof(f->buffer) - offset;
+		unsigned left = f->buffer_len - f->offset;
 		unsigned nr = count > left ? left : count;
-		const void *data;
 
 		if (f->do_crc)
 			f->crc32 = crc32(f->crc32, buf, nr);
 
-		if (nr == sizeof(f->buffer)) {
-			/* process full buffer directly without copy */
-			data = buf;
+		if (nr == f->buffer_len) {
+			/*
+			 * Flush a full batch worth of data directly
+			 * from the input, skipping the memcpy() to
+			 * the hashfile's buffer. In this block,
+			 * f->offset is necessarily zero.
+			 */
+			the_hash_algo->update_fn(&f->ctx, buf, nr);
+			flush(f, buf, nr);
 		} else {
-			memcpy(f->buffer + offset, buf, nr);
-			data = f->buffer;
+			/*
+			 * Copy to the hashfile's buffer, flushing only
+			 * if it became full.
+			 */
+			memcpy(f->buffer + f->offset, buf, nr);
+			f->offset += nr;
+			left -= nr;
+			if (!left)
+				hashflush(f);
 		}
 
 		count -= nr;
-		offset += nr;
 		buf = (char *) buf + nr;
-		left -= nr;
-		if (!left) {
-			the_hash_algo->update_fn(&f->ctx, data, offset);
-			flush(f, data, offset);
-			offset = 0;
-		}
-		f->offset = offset;
 	}
 }
 
-struct hashfile *hashfd(int fd, const char *name)
-{
-	return hashfd_throughput(fd, name, NULL);
-}
-
 struct hashfile *hashfd_check(const char *name)
 {
 	int sink, check;
@@ -136,10 +139,14 @@
 		die_errno("unable to open '%s'", name);
 	f = hashfd(sink, name);
 	f->check_fd = check;
+	f->check_buffer = xmalloc(f->buffer_len);
+
 	return f;
 }
 
-struct hashfile *hashfd_throughput(int fd, const char *name, struct progress *tp)
+static struct hashfile *hashfd_internal(int fd, const char *name,
+					struct progress *tp,
+					size_t buffer_len)
 {
 	struct hashfile *f = xmalloc(sizeof(*f));
 	f->fd = fd;
@@ -150,9 +157,35 @@
 	f->name = name;
 	f->do_crc = 0;
 	the_hash_algo->init_fn(&f->ctx);
+
+	f->buffer_len = buffer_len;
+	f->buffer = xmalloc(buffer_len);
+	f->check_buffer = NULL;
+
 	return f;
 }
 
+struct hashfile *hashfd(int fd, const char *name)
+{
+	/*
+	 * Since we are not going to use a progress meter to
+	 * measure the rate of data passing through this hashfile,
+	 * use a larger buffer size to reduce fsync() calls.
+	 */
+	return hashfd_internal(fd, name, NULL, 128 * 1024);
+}
+
+struct hashfile *hashfd_throughput(int fd, const char *name, struct progress *tp)
+{
+	/*
+	 * Since we are expecting to report progress of the
+	 * write into this hashfile, use a smaller buffer
+	 * size so the progress indicators arrive at a more
+	 * frequent rate.
+	 */
+	return hashfd_internal(fd, name, tp, 8 * 1024);
+}
+
 void hashfile_checkpoint(struct hashfile *f, struct hashfile_checkpoint *checkpoint)
 {
 	hashflush(f);
@@ -184,3 +217,19 @@
 	f->do_crc = 0;
 	return f->crc32;
 }
+
+int hashfile_checksum_valid(const unsigned char *data, size_t total_len)
+{
+	unsigned char got[GIT_MAX_RAWSZ];
+	git_hash_ctx ctx;
+	size_t data_len = total_len - the_hash_algo->rawsz;
+
+	if (total_len < the_hash_algo->rawsz)
+		return 0; /* say "too short"? */
+
+	the_hash_algo->init_fn(&ctx);
+	the_hash_algo->update_fn(&ctx, data, data_len);
+	the_hash_algo->final_fn(got, &ctx);
+
+	return hasheq(got, data + data_len);
+}
diff --git a/csum-file.h b/csum-file.h
index e54d53d..291215b 100644
--- a/csum-file.h
+++ b/csum-file.h
@@ -16,7 +16,9 @@
 	const char *name;
 	int do_crc;
 	uint32_t crc32;
-	unsigned char buffer[8192];
+	size_t buffer_len;
+	unsigned char *buffer;
+	unsigned char *check_buffer;
 };
 
 /* Checkpoint */
@@ -42,6 +44,9 @@
 void crc32_begin(struct hashfile *);
 uint32_t crc32_end(struct hashfile *);
 
+/* Verify checksum validity while reading. Returns non-zero on success. */
+int hashfile_checksum_valid(const unsigned char *data, size_t len);
+
 /*
  * Returns the total number of bytes fed to the hashfile so far (including ones
  * that have not been written out to the descriptor yet).
diff --git a/daemon.c b/daemon.c
index 2ab7ea8..5c4cbad 100644
--- a/daemon.c
+++ b/daemon.c
@@ -566,14 +566,14 @@
 
 /*
  * Sanitize a string from the client so that it's OK to be inserted into a
- * filesystem path. Specifically, we disallow slashes, runs of "..", and
- * trailing and leading dots, which means that the client cannot escape
- * our base path via ".." traversal.
+ * filesystem path. Specifically, we disallow directory separators, runs
+ * of "..", and trailing and leading dots, which means that the client
+ * cannot escape our base path via ".." traversal.
  */
 static void sanitize_client(struct strbuf *out, const char *in)
 {
 	for (; *in; in++) {
-		if (*in == '/')
+		if (is_dir_sep(*in))
 			continue;
 		if (*in == '.' && (!out->len || out->buf[out->len - 1] == '.'))
 			continue;
@@ -840,7 +840,7 @@
 {
 	struct child *newborn, **cradle;
 
-	newborn = xcalloc(1, sizeof(*newborn));
+	CALLOC_ARRAY(newborn, 1);
 	live_children++;
 	memcpy(&newborn->cld, cld, sizeof(*cld));
 	memcpy(&newborn->address, addr, addrlen);
@@ -1148,7 +1148,7 @@
 	struct pollfd *pfd;
 	int i;
 
-	pfd = xcalloc(socklist->nr, sizeof(struct pollfd));
+	CALLOC_ARRAY(pfd, socklist->nr);
 
 	for (i = 0; i < socklist->nr; i++) {
 		pfd[i].fd = socklist->list[i];
diff --git a/date.c b/date.c
index f9ea807..c55ea47 100644
--- a/date.c
+++ b/date.c
@@ -908,7 +908,7 @@
 		/*
 		 * We take over "now" here, which usually translates
 		 * to the current timestamp.  This is because the user
-		 * really means to expire everything she has done in
+		 * really means to expire everything that was done in
 		 * the past, and by definition reflogs are the record
 		 * of the past, and there is nothing from the future
 		 * to be kept.
diff --git a/decorate.c b/decorate.c
index a605b1b..2036d15 100644
--- a/decorate.c
+++ b/decorate.c
@@ -39,7 +39,7 @@
 	struct decoration_entry *old_entries = n->entries;
 
 	n->size = (old_size + 1000) * 3 / 2;
-	n->entries = xcalloc(n->size, sizeof(struct decoration_entry));
+	CALLOC_ARRAY(n->entries, n->size);
 	n->nr = 0;
 
 	for (i = 0; i < old_size; i++) {
diff --git a/diff-lib.c b/diff-lib.c
index b73cc18..f9eadc4 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -28,9 +28,10 @@
  * exists for ce that is a submodule -- it is a submodule that is not
  * checked out).  Return negative for an error.
  */
-static int check_removed(const struct cache_entry *ce, struct stat *st)
+static int check_removed(const struct index_state *istate, const struct cache_entry *ce, struct stat *st)
 {
-	if (lstat(ce->name, st) < 0) {
+	assert(is_fsmonitor_refreshed(istate));
+	if (!(ce->ce_flags & CE_FSMONITOR_VALID) && lstat(ce->name, st) < 0) {
 		if (!is_missing_file_error(errno))
 			return -1;
 		return 1;
@@ -136,7 +137,7 @@
 			memset(&(dpath->parent[0]), 0,
 			       sizeof(struct combine_diff_parent)*5);
 
-			changed = check_removed(ce, &st);
+			changed = check_removed(istate, ce, &st);
 			if (!changed)
 				wt_mode = ce_mode_from_stat(ce, st.st_mode);
 			else {
@@ -216,7 +217,7 @@
 		} else {
 			struct stat st;
 
-			changed = check_removed(ce, &st);
+			changed = check_removed(istate, ce, &st);
 			if (changed) {
 				if (changed < 0) {
 					perror(ce->name);
@@ -231,7 +232,7 @@
 				   ce_intent_to_add(ce)) {
 				newmode = ce_mode_from_stat(ce, st.st_mode);
 				diff_addremove(&revs->diffopt, '+', newmode,
-					       &null_oid, 0, ce->name, 0);
+					       null_oid(), 0, ce->name, 0);
 				continue;
 			}
 
@@ -248,7 +249,7 @@
 		}
 		oldmode = ce->ce_mode;
 		old_oid = &ce->oid;
-		new_oid = changed ? &null_oid : &ce->oid;
+		new_oid = changed ? null_oid() : &ce->oid;
 		diff_change(&revs->diffopt, oldmode, newmode,
 			    old_oid, new_oid,
 			    !is_null_oid(old_oid),
@@ -278,7 +279,8 @@
 		       oid, oid_valid, ce->name, dirty_submodule);
 }
 
-static int get_stat_data(const struct cache_entry *ce,
+static int get_stat_data(const struct index_state *istate,
+			 const struct cache_entry *ce,
 			 const struct object_id **oidp,
 			 unsigned int *modep,
 			 int cached, int match_missing,
@@ -290,7 +292,7 @@
 	if (!cached && !ce_uptodate(ce)) {
 		int changed;
 		struct stat st;
-		changed = check_removed(ce, &st);
+		changed = check_removed(istate, ce, &st);
 		if (changed < 0)
 			return -1;
 		else if (changed) {
@@ -305,7 +307,7 @@
 						    0, dirty_submodule);
 		if (changed) {
 			mode = ce_mode_from_stat(ce, st.st_mode);
-			oid = &null_oid;
+			oid = null_oid();
 		}
 	}
 
@@ -321,12 +323,18 @@
 	const struct object_id *oid;
 	unsigned int mode;
 	unsigned dirty_submodule = 0;
+	struct index_state *istate = revs->diffopt.repo->index;
+
+	if (new_file && S_ISSPARSEDIR(new_file->ce_mode)) {
+		diff_tree_oid(NULL, &new_file->oid, new_file->name, &revs->diffopt);
+		return;
+	}
 
 	/*
 	 * New file in the index: it might actually be different in
 	 * the working tree.
 	 */
-	if (get_stat_data(new_file, &oid, &mode, cached, match_missing,
+	if (get_stat_data(istate, new_file, &oid, &mode, cached, match_missing,
 	    &dirty_submodule, &revs->diffopt) < 0)
 		return;
 
@@ -342,8 +350,23 @@
 	unsigned int mode, oldmode;
 	const struct object_id *oid;
 	unsigned dirty_submodule = 0;
+	struct index_state *istate = revs->diffopt.repo->index;
 
-	if (get_stat_data(new_entry, &oid, &mode, cached, match_missing,
+	assert(S_ISSPARSEDIR(old_entry->ce_mode) ==
+	       S_ISSPARSEDIR(new_entry->ce_mode));
+
+	/*
+	 * If both are sparse directory entries, then expand the
+	 * modifications to the file level. If only one was a sparse
+	 * directory, then they appear as an add and delete instead of
+	 * a modification.
+	 */
+	if (S_ISSPARSEDIR(new_entry->ce_mode)) {
+		diff_tree_oid(&old_entry->oid, &new_entry->oid, new_entry->name, &revs->diffopt);
+		return 0;
+	}
+
+	if (get_stat_data(istate, new_entry, &oid, &mode, cached, match_missing,
 			  &dirty_submodule, &revs->diffopt) < 0) {
 		if (report_missing)
 			diff_index_show_file(revs, "-", old_entry,
@@ -574,6 +597,7 @@
 	struct object_id oid;
 	const char *name;
 	char merge_base_hex[GIT_MAX_HEXSZ + 1];
+	struct index_state *istate = revs->diffopt.repo->index;
 
 	if (revs->pending.nr != 1)
 		BUG("run_diff_index must be passed exactly one tree");
@@ -581,6 +605,8 @@
 	trace_performance_enter();
 	ent = revs->pending.objects;
 
+	refresh_fsmonitor(istate);
+
 	if (merge_base) {
 		diff_get_merge_base(revs, &oid);
 		name = oid_to_hex_r(merge_base_hex, &oid);
diff --git a/diff-merges.c b/diff-merges.c
index 146bb50..0dfcaa1 100644
--- a/diff-merges.c
+++ b/diff-merges.c
@@ -2,6 +2,12 @@
 
 #include "revision.h"
 
+typedef void (*diff_merges_setup_func_t)(struct rev_info *);
+static void set_separate(struct rev_info *revs);
+
+static diff_merges_setup_func_t set_to_default = set_separate;
+static int suppress_parsing;
+
 static void suppress(struct rev_info *revs)
 {
 	revs->separate_merges = 0;
@@ -9,7 +15,7 @@
 	revs->combine_merges = 0;
 	revs->dense_combined_merges = 0;
 	revs->combined_all_paths = 0;
-	revs->combined_imply_patch = 0;
+	revs->merges_imply_patch = 0;
 	revs->merges_need_diff = 0;
 }
 
@@ -25,17 +31,6 @@
 	revs->first_parent_merges = 1;
 }
 
-static void set_m(struct rev_info *revs)
-{
-	/*
-	 * To "diff-index", "-m" means "match missing", and to the "log"
-	 * family of commands, it means "show full diff for merges". Set
-	 * both fields appropriately.
-	 */
-	set_separate(revs);
-	revs->match_missing = 1;
-}
-
 static void set_combined(struct rev_info *revs)
 {
 	suppress(revs);
@@ -50,47 +45,75 @@
 	revs->dense_combined_merges = 1;
 }
 
+static diff_merges_setup_func_t func_by_opt(const char *optarg)
+{
+	if (!strcmp(optarg, "off") || !strcmp(optarg, "none"))
+		return suppress;
+	if (!strcmp(optarg, "1") || !strcmp(optarg, "first-parent"))
+		return set_first_parent;
+	else if (!strcmp(optarg, "separate"))
+		return set_separate;
+	else if (!strcmp(optarg, "c") || !strcmp(optarg, "combined"))
+		return set_combined;
+	else if (!strcmp(optarg, "cc") || !strcmp(optarg, "dense-combined"))
+		return set_dense_combined;
+	else if (!strcmp(optarg, "m") || !strcmp(optarg, "on"))
+		return set_to_default;
+	return NULL;
+}
+
 static void set_diff_merges(struct rev_info *revs, const char *optarg)
 {
-	if (!strcmp(optarg, "off") || !strcmp(optarg, "none")) {
-		suppress(revs);
-		/* Return early to leave revs->merges_need_diff unset */
-		return;
-	}
+	diff_merges_setup_func_t func = func_by_opt(optarg);
 
-	if (!strcmp(optarg, "1") || !strcmp(optarg, "first-parent"))
-		set_first_parent(revs);
-	else if (!strcmp(optarg, "m") || !strcmp(optarg, "separate"))
-		set_separate(revs);
-	else if (!strcmp(optarg, "c") || !strcmp(optarg, "combined"))
-		set_combined(revs);
-	else if (!strcmp(optarg, "cc") || !strcmp(optarg, "dense-combined"))
-		set_dense_combined(revs);
-	else
+	if (!func)
 		die(_("unknown value for --diff-merges: %s"), optarg);
 
-	/* The flag is cleared by set_xxx() functions, so don't move this up */
-	revs->merges_need_diff = 1;
+	func(revs);
+
+	/* NOTE: the merges_need_diff flag is cleared by func() call */
+	if (func != suppress)
+		revs->merges_need_diff = 1;
 }
 
 /*
  * Public functions. They are in the order they are called.
  */
 
+int diff_merges_config(const char *value)
+{
+	diff_merges_setup_func_t func = func_by_opt(value);
+
+	if (!func)
+		return -1;
+
+	set_to_default = func;
+	return 0;
+}
+
+void diff_merges_suppress_options_parsing(void)
+{
+	suppress_parsing = 1;
+}
+
 int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
 {
 	int argcount = 1;
 	const char *optarg;
 	const char *arg = argv[0];
 
+	if (suppress_parsing)
+		return 0;
+
 	if (!strcmp(arg, "-m")) {
-		set_m(revs);
+		set_to_default(revs);
+		revs->merges_imply_patch = 1;
 	} else if (!strcmp(arg, "-c")) {
 		set_combined(revs);
-		revs->combined_imply_patch = 1;
+		revs->merges_imply_patch = 1;
 	} else if (!strcmp(arg, "--cc")) {
 		set_dense_combined(revs);
-		revs->combined_imply_patch = 1;
+		revs->merges_imply_patch = 1;
 	} else if (!strcmp(arg, "--no-diff-merges")) {
 		suppress(revs);
 	} else if (!strcmp(arg, "--combined-all-paths")) {
@@ -131,15 +154,18 @@
 
 void diff_merges_setup_revs(struct rev_info *revs)
 {
+	if (suppress_parsing)
+		return;
+
 	if (revs->combine_merges == 0)
 		revs->dense_combined_merges = 0;
 	if (revs->separate_merges == 0)
 		revs->first_parent_merges = 0;
 	if (revs->combined_all_paths && !revs->combine_merges)
 		die("--combined-all-paths makes no sense without -c or --cc");
-	if (revs->combined_imply_patch)
+	if (revs->merges_imply_patch)
 		revs->diff = 1;
-	if (revs->combined_imply_patch || revs->merges_need_diff) {
+	if (revs->merges_imply_patch || revs->merges_need_diff) {
 		if (!revs->diffopt.output_format)
 			revs->diffopt.output_format = DIFF_FORMAT_PATCH;
 	}
diff --git a/diff-merges.h b/diff-merges.h
index 659467c..b5d57f6 100644
--- a/diff-merges.h
+++ b/diff-merges.h
@@ -9,6 +9,10 @@
 
 struct rev_info;
 
+int diff_merges_config(const char *value);
+
+void diff_merges_suppress_options_parsing(void);
+
 int diff_merges_parse_opts(struct rev_info *revs, const char **argv);
 
 void diff_merges_suppress(struct rev_info *revs);
diff --git a/diff-no-index.c b/diff-no-index.c
index 7814eab..9a8b093 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -26,9 +26,8 @@
 	if (!(dir = opendir(path)))
 		return error("Could not open directory %s", path);
 
-	while ((e = readdir(dir)))
-		if (!is_dot_or_dotdot(e->d_name))
-			string_list_insert(list, e->d_name);
+	while ((e = readdir_skip_dot_and_dotdot(dir)))
+		string_list_insert(list, e->d_name);
 
 	closedir(dir);
 	return 0;
@@ -83,7 +82,7 @@
 	if (!name)
 		name = "/dev/null";
 	s = alloc_filespec(name);
-	fill_filespec(s, &null_oid, 0, mode);
+	fill_filespec(s, null_oid(), 0, mode);
 	if (name == file_from_standard_input)
 		populate_from_stdin(s);
 	return s;
diff --git a/diff.c b/diff.c
index bf2cbf1..82f88de 100644
--- a/diff.c
+++ b/diff.c
@@ -35,7 +35,7 @@
 
 static int diff_detect_rename_default;
 static int diff_indent_heuristic = 1;
-static int diff_rename_limit_default = 400;
+static int diff_rename_limit_default = 1000;
 static int diff_suppress_blank_empty;
 static int diff_use_color_default = -1;
 static int diff_color_moved_default;
@@ -2053,7 +2053,7 @@
 static int find_word_boundaries(mmfile_t *buffer, regex_t *word_regex,
 		int *begin, int *end)
 {
-	if (word_regex && *begin < buffer->size) {
+	while (word_regex && *begin < buffer->size) {
 		regmatch_t match[1];
 		if (!regexec_buf(word_regex, buffer->ptr + *begin,
 				 buffer->size - *begin, 1, match, 0)) {
@@ -2061,9 +2061,13 @@
 					'\n', match[0].rm_eo - match[0].rm_so);
 			*end = p ? p - buffer->ptr : match[0].rm_eo + *begin;
 			*begin += match[0].rm_so;
-			return *begin >= *end;
+			if (*begin == *end)
+				(*begin)++;
+			else
+				return *begin > *end;
+		} else {
+			return -1;
 		}
-		return -1;
 	}
 
 	/* find the next word */
@@ -2233,14 +2237,12 @@
 	struct diff_options *o = xmalloc(sizeof(struct diff_options));
 	memcpy(o, orig_opts, sizeof(struct diff_options));
 
-	ecbdata->diff_words =
-		xcalloc(1, sizeof(struct diff_words_data));
+	CALLOC_ARRAY(ecbdata->diff_words, 1);
 	ecbdata->diff_words->type = o->word_diff;
 	ecbdata->diff_words->opt = o;
 
 	if (orig_opts->emitted_symbols)
-		o->emitted_symbols =
-			xcalloc(1, sizeof(struct emitted_diff_symbols));
+		CALLOC_ARRAY(o->emitted_symbols, 1);
 
 	if (!o->word_regex)
 		o->word_regex = userdiff_word_regex(one, o->repo->index);
@@ -2338,7 +2340,7 @@
 	ecbdata->lno_in_postimage = strtol(p + 1, NULL, 10);
 }
 
-static void fn_out_consume(void *priv, char *line, unsigned long len)
+static int fn_out_consume(void *priv, char *line, unsigned long len)
 {
 	struct emit_callback *ecbdata = priv;
 	struct diff_options *o = ecbdata->opt;
@@ -2374,7 +2376,7 @@
 		len = sane_truncate_line(line, len);
 		find_lno(line, ecbdata);
 		emit_hunk_header(ecbdata, line, len);
-		return;
+		return 0;
 	}
 
 	if (ecbdata->diff_words) {
@@ -2384,11 +2386,11 @@
 		if (line[0] == '-') {
 			diff_words_append(line, len,
 					  &ecbdata->diff_words->minus);
-			return;
+			return 0;
 		} else if (line[0] == '+') {
 			diff_words_append(line, len,
 					  &ecbdata->diff_words->plus);
-			return;
+			return 0;
 		} else if (starts_with(line, "\\ ")) {
 			/*
 			 * Eat the "no newline at eof" marker as if we
@@ -2397,11 +2399,11 @@
 			 * defer processing. If this is the end of
 			 * preimage, more "+" lines may come after it.
 			 */
-			return;
+			return 0;
 		}
 		diff_words_flush(ecbdata);
 		emit_diff_symbol(o, s, line, len, 0);
-		return;
+		return 0;
 	}
 
 	switch (line[0]) {
@@ -2425,6 +2427,7 @@
 				 line, len, 0);
 		break;
 	}
+	return 0;
 }
 
 static void pprint_rename(struct strbuf *name, const char *a, const char *b)
@@ -2509,7 +2512,7 @@
 					  const char *name_b)
 {
 	struct diffstat_file *x;
-	x = xcalloc(1, sizeof(*x));
+	CALLOC_ARRAY(x, 1);
 	ALLOC_GROW(diffstat->files, diffstat->nr + 1, diffstat->alloc);
 	diffstat->files[diffstat->nr++] = x;
 	if (name_b) {
@@ -2524,7 +2527,7 @@
 	return x;
 }
 
-static void diffstat_consume(void *priv, char *line, unsigned long len)
+static int diffstat_consume(void *priv, char *line, unsigned long len)
 {
 	struct diffstat_t *diffstat = priv;
 	struct diffstat_file *x = diffstat->files[diffstat->nr - 1];
@@ -2533,6 +2536,7 @@
 		x->added++;
 	else if (line[0] == '-')
 		x->deleted++;
+	return 0;
 }
 
 const char mime_boundary_leader[] = "------------";
@@ -3210,7 +3214,7 @@
 	data->lineno = nb - 1;
 }
 
-static void checkdiff_consume(void *priv, char *line, unsigned long len)
+static int checkdiff_consume(void *priv, char *line, unsigned long len)
 {
 	struct checkdiff_t *data = priv;
 	int marker_size = data->conflict_marker_size;
@@ -3234,7 +3238,7 @@
 		}
 		bad = ws_check(line + 1, len - 1, data->ws_rule);
 		if (!bad)
-			return;
+			return 0;
 		data->status |= bad;
 		err = whitespace_error_string(bad);
 		fprintf(data->o->file, "%s%s:%d: %s.\n",
@@ -3246,6 +3250,7 @@
 	} else if (line[0] == ' ') {
 		data->lineno++;
 	}
+	return 0;
 }
 
 static unsigned char *deflate_it(char *data,
@@ -3724,7 +3729,8 @@
 		xpp.anchors_nr = o->anchors_nr;
 		xecfg.ctxlen = o->context;
 		xecfg.interhunkctxlen = o->interhunkcontext;
-		if (xdi_diff_outf(&mf1, &mf2, discard_hunk_line,
+		xecfg.flags = XDL_EMIT_NO_HUNK_HDR;
+		if (xdi_diff_outf(&mf1, &mf2, NULL,
 				  diffstat_consume, diffstat, &xpp, &xecfg))
 			die("unable to generate diffstat for %s", one->path);
 
@@ -4192,7 +4198,7 @@
 				die_errno("readlink(%s)", name);
 			prep_temp_blob(r->index, name, temp, sb.buf, sb.len,
 				       (one->oid_valid ?
-					&one->oid : &null_oid),
+					&one->oid : null_oid()),
 				       (one->oid_valid ?
 					one->mode : S_IFLNK));
 			strbuf_release(&sb);
@@ -4201,7 +4207,7 @@
 			/* we can borrow from the file in the work tree */
 			temp->name = name;
 			if (!one->oid_valid)
-				oid_to_hex_r(temp->hex, &null_oid);
+				oid_to_hex_r(temp->hex, null_oid());
 			else
 				oid_to_hex_r(temp->hex, &one->oid);
 			/* Even though we may sometimes borrow the
@@ -4630,6 +4636,12 @@
 	if (HAS_MULTI_BITS(options->pickaxe_opts & DIFF_PICKAXE_KINDS_MASK))
 		die(_("-G, -S and --find-object are mutually exclusive"));
 
+	if (HAS_MULTI_BITS(options->pickaxe_opts & DIFF_PICKAXE_KINDS_G_REGEX_MASK))
+		die(_("-G and --pickaxe-regex are mutually exclusive, use --pickaxe-regex with -S"));
+
+	if (HAS_MULTI_BITS(options->pickaxe_opts & DIFF_PICKAXE_KINDS_ALL_OBJFIND_MASK))
+		die(_("---pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all with -G and -S"));
+
 	/*
 	 * Most of the time we can say "there are changes"
 	 * only by checking if there are changed paths, but
@@ -4918,7 +4930,7 @@
 		return error(_("unable to resolve '%s'"), arg);
 
 	if (!opt->objfind)
-		opt->objfind = xcalloc(1, sizeof(*opt->objfind));
+		CALLOC_ARRAY(opt->objfind, 1);
 
 	opt->pickaxe_opts |= DIFF_PICKAXE_KIND_OBJFIND;
 	opt->flags.recursive = 1;
@@ -5348,6 +5360,19 @@
 	return 0;
 }
 
+static int diff_opt_rotate_to(const struct option *opt, const char *arg, int unset)
+{
+	struct diff_options *options = opt->value;
+
+	BUG_ON_OPT_NEG(unset);
+	if (!strcmp(opt->long_name, "skip-to"))
+		options->skip_instead_of_rotate = 1;
+	else
+		options->skip_instead_of_rotate = 0;
+	options->rotate_to = arg;
+	return 0;
+}
+
 static void prep_parse_options(struct diff_options *options)
 {
 	struct option parseopts[] = {
@@ -5599,6 +5624,12 @@
 			  DIFF_PICKAXE_REGEX, PARSE_OPT_NONEG),
 		OPT_FILENAME('O', NULL, &options->orderfile,
 			     N_("control the order in which files appear in the output")),
+		OPT_CALLBACK_F(0, "rotate-to", options, N_("<path>"),
+			       N_("show the change in the specified path first"),
+			       PARSE_OPT_NONEG, diff_opt_rotate_to),
+		OPT_CALLBACK_F(0, "skip-to", options, N_("<path>"),
+			       N_("skip the output to the specified path"),
+			       PARSE_OPT_NONEG, diff_opt_rotate_to),
 		OPT_CALLBACK_F(0, "find-object", options, N_("<object-id>"),
 			       N_("look for differences that change the number of occurrences of the specified object"),
 			       PARSE_OPT_NONEG, diff_opt_find_object),
@@ -6098,17 +6129,18 @@
 	}
 }
 
-static void patch_id_consume(void *priv, char *line, unsigned long len)
+static int patch_id_consume(void *priv, char *line, unsigned long len)
 {
 	struct patch_id_t *data = priv;
 	int new_len;
 
 	if (len > 12 && starts_with(line, "\\ "))
-		return;
+		return 0;
 	new_len = remove_space(line, len);
 
 	the_hash_algo->update_fn(data->ctx, line, new_len);
 	data->patchlen += new_len;
+	return 0;
 }
 
 static void patch_id_add_string(git_hash_ctx *ctx, const char *str)
@@ -6206,8 +6238,8 @@
 
 		xpp.flags = 0;
 		xecfg.ctxlen = 3;
-		xecfg.flags = 0;
-		if (xdi_diff_outf(&mf1, &mf2, discard_hunk_line,
+		xecfg.flags = XDL_EMIT_NO_HUNK_HDR;
+		if (xdi_diff_outf(&mf1, &mf2, NULL,
 				  patch_id_consume, &data, &xpp, &xecfg))
 			return error("unable to generate patch-id diff for %s",
 				     p->one->path);
@@ -6217,7 +6249,7 @@
 	}
 
 	if (!stable)
-		the_hash_algo->final_fn(oid->hash, &ctx);
+		the_hash_algo->final_oid_fn(oid, &ctx);
 
 	return 0;
 }
@@ -6263,7 +6295,7 @@
 }
 
 static const char rename_limit_warning[] =
-N_("inexact rename detection was skipped due to too many files.");
+N_("exhaustive rename detection was skipped due to too many files.");
 
 static const char degrade_cc_to_c_warning[] =
 N_("only found copies from modified paths due to too many files.");
@@ -6693,6 +6725,8 @@
 		diffcore_pickaxe(options);
 	if (options->orderfile)
 		diffcore_order(options->orderfile);
+	if (options->rotate_to)
+		diffcore_rotate(options);
 	if (!options->found_follow)
 		/* See try_to_follow_renames() in tree-diff.c */
 		diff_resolve_rename_copy();
diff --git a/diff.h b/diff.h
index 527fb56..8ba85c5 100644
--- a/diff.h
+++ b/diff.h
@@ -237,6 +237,27 @@
 struct diff_options {
 	const char *orderfile;
 
+	/*
+	 * "--rotate-to=<file>" would start showing at <file> and when
+	 * the output reaches the end, wrap around by default.
+	 * Setting skip_instead_of_rotate to true stops the output at the
+	 * end, effectively discarding the earlier part of the output
+	 * before <file>'s diff (this is used to implement the
+	 * "--skip-to=<file>" option).
+	 *
+	 * When rotate_to_strict is set, it is an error if there is no
+	 * <file> in the diff.  Otherwise, the output starts at the
+	 * path that is the same as, or first path that sorts after,
+	 * <file>.  Because it is unreasonable to require the exact
+	 * match for "git log -p --rotate-to=<file>" (i.e. not all
+	 * commit would touch that single <file>), "git log" sets it
+	 * to false.  "git diff" sets it to true to detect an error
+	 * in the command line option.
+	 */
+	const char *rotate_to;
+	int skip_instead_of_rotate;
+	int rotate_to_strict;
+
 	/**
 	 * A constant string (can and typically does contain newlines to look for
 	 * a block of text, not just a single line) to filter out the filepairs
@@ -244,6 +265,7 @@
 	 * postimage of the diff_queue.
 	 */
 	const char *pickaxe;
+	unsigned pickaxe_opts;
 
 	/* -I<regex> */
 	regex_t **ignore_regex;
@@ -283,8 +305,6 @@
 	/* The output format used when `diff_flush()` is run. */
 	int output_format;
 
-	unsigned pickaxe_opts;
-
 	/* Affects the way detection logic for complete rewrites, renames and
 	 * copies.
 	 */
@@ -535,6 +555,10 @@
 #define DIFF_PICKAXE_KINDS_MASK (DIFF_PICKAXE_KIND_S | \
 				 DIFF_PICKAXE_KIND_G | \
 				 DIFF_PICKAXE_KIND_OBJFIND)
+#define DIFF_PICKAXE_KINDS_G_REGEX_MASK (DIFF_PICKAXE_KIND_G | \
+					 DIFF_PICKAXE_REGEX)
+#define DIFF_PICKAXE_KINDS_ALL_OBJFIND_MASK (DIFF_PICKAXE_ALL | \
+					     DIFF_PICKAXE_KIND_OBJFIND)
 
 #define DIFF_PICKAXE_IGNORE_CASE	32
 
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index a9c6d60..c88e50c 100644
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c
@@ -19,38 +19,31 @@
 	int hit;
 };
 
-static void diffgrep_consume(void *priv, char *line, unsigned long len)
+static int diffgrep_consume(void *priv, char *line, unsigned long len)
 {
 	struct diffgrep_cb *data = priv;
 	regmatch_t regmatch;
 
 	if (line[0] != '+' && line[0] != '-')
-		return;
+		return 0;
 	if (data->hit)
-		/*
-		 * NEEDSWORK: we should have a way to terminate the
-		 * caller early.
-		 */
-		return;
-	data->hit = !regexec_buf(data->regexp, line + 1, len - 1, 1,
-				 &regmatch, 0);
+		BUG("Already matched in diffgrep_consume! Broken xdiff_emit_line_fn?");
+	if (!regexec_buf(data->regexp, line + 1, len - 1, 1,
+			 &regmatch, 0)) {
+		data->hit = 1;
+		return 1;
+	}
+	return 0;
 }
 
 static int diff_grep(mmfile_t *one, mmfile_t *two,
 		     struct diff_options *o,
 		     regex_t *regexp, kwset_t kws)
 {
-	regmatch_t regmatch;
 	struct diffgrep_cb ecbdata;
 	xpparam_t xpp;
 	xdemitconf_t xecfg;
-
-	if (!one)
-		return !regexec_buf(regexp, two->ptr, two->size,
-				    1, &regmatch, 0);
-	if (!two)
-		return !regexec_buf(regexp, one->ptr, one->size,
-				    1, &regmatch, 0);
+	int ret;
 
 	/*
 	 * We have both sides; need to run textual diff and see if
@@ -60,38 +53,47 @@
 	memset(&xecfg, 0, sizeof(xecfg));
 	ecbdata.regexp = regexp;
 	ecbdata.hit = 0;
+	xecfg.flags = XDL_EMIT_NO_HUNK_HDR;
 	xecfg.ctxlen = o->context;
 	xecfg.interhunkctxlen = o->interhunkcontext;
-	if (xdi_diff_outf(one, two, discard_hunk_line, diffgrep_consume,
-			  &ecbdata, &xpp, &xecfg))
-		return 0;
-	return ecbdata.hit;
+
+	/*
+	 * An xdiff error might be our "data->hit" from above. See the
+	 * comment for xdiff_emit_line_fn in xdiff-interface.h
+	 */
+	ret = xdi_diff_outf(one, two, NULL, diffgrep_consume,
+			    &ecbdata, &xpp, &xecfg);
+	if (ecbdata.hit)
+		return 1;
+	if (ret)
+		return ret;
+	return 0;
 }
 
-static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws)
+static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws,
+			     unsigned int limit)
 {
-	unsigned int cnt;
-	unsigned long sz;
-	const char *data;
-
-	sz = mf->size;
-	data = mf->ptr;
-	cnt = 0;
+	unsigned int cnt = 0;
+	unsigned long sz = mf->size;
+	const char *data = mf->ptr;
 
 	if (regexp) {
 		regmatch_t regmatch;
 		int flags = 0;
 
-		while (sz && *data &&
+		while (sz &&
 		       !regexec_buf(regexp, data, sz, 1, &regmatch, flags)) {
 			flags |= REG_NOTBOL;
 			data += regmatch.rm_eo;
 			sz -= regmatch.rm_eo;
-			if (sz && *data && regmatch.rm_so == regmatch.rm_eo) {
+			if (sz && regmatch.rm_so == regmatch.rm_eo) {
 				data++;
 				sz--;
 			}
 			cnt++;
+
+			if (limit && cnt == limit)
+				return cnt;
 		}
 
 	} else { /* Classic exact string match */
@@ -103,6 +105,9 @@
 			sz -= offset + kwsm.size[0];
 			data += offset + kwsm.size[0];
 			cnt++;
+
+			if (limit && cnt == limit)
+				return cnt;
 		}
 	}
 	return cnt;
@@ -112,9 +117,9 @@
 		       struct diff_options *o,
 		       regex_t *regexp, kwset_t kws)
 {
-	unsigned int one_contains = one ? contains(one, regexp, kws) : 0;
-	unsigned int two_contains = two ? contains(two, regexp, kws) : 0;
-	return one_contains != two_contains;
+	unsigned int c1 = one ? contains(one, regexp, kws, 0) : 0;
+	unsigned int c2 = two ? contains(two, regexp, kws, c1 + 1) : 0;
+	return c1 != c2;
 }
 
 static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
@@ -136,9 +141,6 @@
 			 oidset_contains(o->objfind, &p->two->oid));
 	}
 
-	if (!o->pickaxe[0])
-		return 0;
-
 	if (o->flags.allow_textconv) {
 		textconv_one = get_textconv(o->repo, p->one);
 		textconv_two = get_textconv(o->repo, p->two);
@@ -163,9 +165,7 @@
 	mf1.size = fill_textconv(o->repo, textconv_one, p->one, &mf1.ptr);
 	mf2.size = fill_textconv(o->repo, textconv_two, p->two, &mf2.ptr);
 
-	ret = fn(DIFF_FILE_VALID(p->one) ? &mf1 : NULL,
-		 DIFF_FILE_VALID(p->two) ? &mf2 : NULL,
-		 o, regexp, kws);
+	ret = fn(&mf1, &mf2, o, regexp, kws);
 
 	if (textconv_one)
 		free(mf1.ptr);
@@ -232,13 +232,31 @@
 	int opts = o->pickaxe_opts;
 	regex_t regex, *regexp = NULL;
 	kwset_t kws = NULL;
+	pickaxe_fn fn;
 
+	if (opts & ~DIFF_PICKAXE_KIND_OBJFIND &&
+	    (!needle || !*needle))
+		BUG("should have needle under -G or -S");
 	if (opts & (DIFF_PICKAXE_REGEX | DIFF_PICKAXE_KIND_G)) {
 		int cflags = REG_EXTENDED | REG_NEWLINE;
 		if (o->pickaxe_opts & DIFF_PICKAXE_IGNORE_CASE)
 			cflags |= REG_ICASE;
 		regcomp_or_die(&regex, needle, cflags);
 		regexp = &regex;
+
+		if (opts & DIFF_PICKAXE_KIND_G)
+			fn = diff_grep;
+		else if (opts & DIFF_PICKAXE_REGEX)
+			fn = has_changes;
+		else
+			/*
+			 * We don't need to check the combination of
+			 * -G and --pickaxe-regex, by the time we get
+			 * here diff.c has already died if they're
+			 * combined. See the usage tests in
+			 * t4209-log-pickaxe.sh.
+			 */
+			BUG("unreachable");
 	} else if (opts & DIFF_PICKAXE_KIND_S) {
 		if (o->pickaxe_opts & DIFF_PICKAXE_IGNORE_CASE &&
 		    has_non_ascii(needle)) {
@@ -255,10 +273,14 @@
 			kwsincr(kws, needle, strlen(needle));
 			kwsprep(kws);
 		}
+		fn = has_changes;
+	} else if (opts & DIFF_PICKAXE_KIND_OBJFIND) {
+		fn = NULL;
+	} else {
+		BUG("unknown pickaxe_opts flag");
 	}
 
-	pickaxe(&diff_queued_diff, o, regexp, kws,
-		(opts & DIFF_PICKAXE_KIND_G) ? diff_grep : has_changes);
+	pickaxe(&diff_queued_diff, o, regexp, kws, fn);
 
 	if (regexp)
 		regfree(regexp);
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 8fe6c93..2618bb0 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -54,7 +54,7 @@
 	if (p->broken_pair) {
 		if (!break_idx) {
 			break_idx = xmalloc(sizeof(*break_idx));
-			strintmap_init(break_idx, -1);
+			strintmap_init_with_options(break_idx, -1, NULL, 0);
 		}
 		strintmap_set(break_idx, p->one->path, rename_dst_nr);
 	}
@@ -87,13 +87,13 @@
 	short name_score;
 };
 
-struct prefetch_options {
+struct inexact_prefetch_options {
 	struct repository *repo;
 	int skip_unmodified;
 };
-static void prefetch(void *prefetch_options)
+static void inexact_prefetch(void *prefetch_options)
 {
-	struct prefetch_options *options = prefetch_options;
+	struct inexact_prefetch_options *options = prefetch_options;
 	int i;
 	struct oid_array to_fetch = OID_ARRAY_INIT;
 
@@ -126,7 +126,7 @@
 			       struct diff_filespec *src,
 			       struct diff_filespec *dst,
 			       int minimum_score,
-			       int skip_unmodified)
+			       struct diff_populate_filespec_options *dpf_opt)
 {
 	/* src points at a file that existed in the original tree (or
 	 * optionally a file in the destination tree) and dst points
@@ -143,15 +143,6 @@
 	 */
 	unsigned long max_size, delta_size, base_size, src_copied, literal_added;
 	int score;
-	struct diff_populate_filespec_options dpf_options = {
-		.check_size_only = 1
-	};
-	struct prefetch_options prefetch_options = {r, skip_unmodified};
-
-	if (r == the_repository && has_promisor_remote()) {
-		dpf_options.missing_object_cb = prefetch;
-		dpf_options.missing_object_data = &prefetch_options;
-	}
 
 	/* We deal only with regular files.  Symlink renames are handled
 	 * only when they are exact matches --- in other words, no edits
@@ -169,11 +160,13 @@
 	 * is a possible size - we really should have a flag to
 	 * say whether the size is valid or not!)
 	 */
+	dpf_opt->check_size_only = 1;
+
 	if (!src->cnt_data &&
-	    diff_populate_filespec(r, src, &dpf_options))
+	    diff_populate_filespec(r, src, dpf_opt))
 		return 0;
 	if (!dst->cnt_data &&
-	    diff_populate_filespec(r, dst, &dpf_options))
+	    diff_populate_filespec(r, dst, dpf_opt))
 		return 0;
 
 	max_size = ((src->size > dst->size) ? src->size : dst->size);
@@ -191,11 +184,11 @@
 	if (max_size * (MAX_SCORE-minimum_score) < delta_size * MAX_SCORE)
 		return 0;
 
-	dpf_options.check_size_only = 0;
+	dpf_opt->check_size_only = 0;
 
-	if (!src->cnt_data && diff_populate_filespec(r, src, &dpf_options))
+	if (!src->cnt_data && diff_populate_filespec(r, src, dpf_opt))
 		return 0;
-	if (!dst->cnt_data && diff_populate_filespec(r, dst, &dpf_options))
+	if (!dst->cnt_data && diff_populate_filespec(r, dst, dpf_opt))
 		return 0;
 
 	if (diffcore_count_changes(r, src, dst,
@@ -367,6 +360,695 @@
 	return renames;
 }
 
+struct dir_rename_info {
+	struct strintmap idx_map;
+	struct strmap dir_rename_guess;
+	struct strmap *dir_rename_count;
+	struct strintmap *relevant_source_dirs;
+	unsigned setup;
+};
+
+static char *get_dirname(const char *filename)
+{
+	char *slash = strrchr(filename, '/');
+	return slash ? xstrndup(filename, slash - filename) : xstrdup("");
+}
+
+static void dirname_munge(char *filename)
+{
+	char *slash = strrchr(filename, '/');
+	if (!slash)
+		slash = filename;
+	*slash = '\0';
+}
+
+static const char *get_highest_rename_path(struct strintmap *counts)
+{
+	int highest_count = 0;
+	const char *highest_destination_dir = NULL;
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+
+	strintmap_for_each_entry(counts, &iter, entry) {
+		const char *destination_dir = entry->key;
+		intptr_t count = (intptr_t)entry->value;
+		if (count > highest_count) {
+			highest_count = count;
+			highest_destination_dir = destination_dir;
+		}
+	}
+	return highest_destination_dir;
+}
+
+static char *UNKNOWN_DIR = "/";  /* placeholder -- short, illegal directory */
+
+static int dir_rename_already_determinable(struct strintmap *counts)
+{
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+	int first = 0, second = 0, unknown = 0;
+	strintmap_for_each_entry(counts, &iter, entry) {
+		const char *destination_dir = entry->key;
+		intptr_t count = (intptr_t)entry->value;
+		if (!strcmp(destination_dir, UNKNOWN_DIR)) {
+			unknown = count;
+		} else if (count >= first) {
+			second = first;
+			first = count;
+		} else if (count >= second) {
+			second = count;
+		}
+	}
+	return first > second + unknown;
+}
+
+static void increment_count(struct dir_rename_info *info,
+			    char *old_dir,
+			    char *new_dir)
+{
+	struct strintmap *counts;
+	struct strmap_entry *e;
+
+	/* Get the {new_dirs -> counts} mapping using old_dir */
+	e = strmap_get_entry(info->dir_rename_count, old_dir);
+	if (e) {
+		counts = e->value;
+	} else {
+		counts = xmalloc(sizeof(*counts));
+		strintmap_init_with_options(counts, 0, NULL, 1);
+		strmap_put(info->dir_rename_count, old_dir, counts);
+	}
+
+	/* Increment the count for new_dir */
+	strintmap_incr(counts, new_dir, 1);
+}
+
+static void update_dir_rename_counts(struct dir_rename_info *info,
+				     struct strintmap *dirs_removed,
+				     const char *oldname,
+				     const char *newname)
+{
+	char *old_dir = xstrdup(oldname);
+	char *new_dir = xstrdup(newname);
+	char new_dir_first_char = new_dir[0];
+	int first_time_in_loop = 1;
+
+	if (!info->setup)
+		/*
+		 * info->setup is 0 here in two cases: (1) all auxiliary
+		 * vars (like dirs_removed) were NULL so
+		 * initialize_dir_rename_info() returned early, or (2)
+		 * either break detection or copy detection are active so
+		 * that we never called initialize_dir_rename_info().  In
+		 * the former case, we don't have enough info to know if
+		 * directories were renamed (because dirs_removed lets us
+		 * know about a necessary prerequisite, namely if they were
+		 * removed), and in the latter, we don't care about
+		 * directory renames or find_basename_matches.
+		 *
+		 * This matters because both basename and inexact matching
+		 * will also call update_dir_rename_counts().  In either of
+		 * the above two cases info->dir_rename_counts will not
+		 * have been properly initialized which prevents us from
+		 * updating it, but in these two cases we don't care about
+		 * dir_rename_counts anyway, so we can just exit early.
+		 */
+		return;
+
+	while (1) {
+		int drd_flag = NOT_RELEVANT;
+
+		/* Get old_dir, skip if its directory isn't relevant. */
+		dirname_munge(old_dir);
+		if (info->relevant_source_dirs &&
+		    !strintmap_contains(info->relevant_source_dirs, old_dir))
+			break;
+
+		/* Get new_dir */
+		dirname_munge(new_dir);
+
+		/*
+		 * When renaming
+		 *   "a/b/c/d/e/foo.c" -> "a/b/some/thing/else/e/foo.c"
+		 * then this suggests that both
+		 *   a/b/c/d/e/ => a/b/some/thing/else/e/
+		 *   a/b/c/d/   => a/b/some/thing/else/
+		 * so we want to increment counters for both.  We do NOT,
+		 * however, also want to suggest that there was the following
+		 * rename:
+		 *   a/b/c/ => a/b/some/thing/
+		 * so we need to quit at that point.
+		 *
+		 * Note the when first_time_in_loop, we only strip off the
+		 * basename, and we don't care if that's different.
+		 */
+		if (!first_time_in_loop) {
+			char *old_sub_dir = strchr(old_dir, '\0')+1;
+			char *new_sub_dir = strchr(new_dir, '\0')+1;
+			if (!*new_dir) {
+				/*
+				 * Special case when renaming to root directory,
+				 * i.e. when new_dir == "".  In this case, we had
+				 * something like
+				 *    a/b/subdir => subdir
+				 * and so dirname_munge() sets things up so that
+				 *    old_dir = "a/b\0subdir\0"
+				 *    new_dir = "\0ubdir\0"
+				 * We didn't have a '/' to overwrite a '\0' onto
+				 * in new_dir, so we have to compare differently.
+				 */
+				if (new_dir_first_char != old_sub_dir[0] ||
+				    strcmp(old_sub_dir+1, new_sub_dir))
+					break;
+			} else {
+				if (strcmp(old_sub_dir, new_sub_dir))
+					break;
+			}
+		}
+
+		/*
+		 * Above we suggested that we'd keep recording renames for
+		 * all ancestor directories where the trailing directories
+		 * matched, i.e. for
+		 *   "a/b/c/d/e/foo.c" -> "a/b/some/thing/else/e/foo.c"
+		 * we'd increment rename counts for each of
+		 *   a/b/c/d/e/ => a/b/some/thing/else/e/
+		 *   a/b/c/d/   => a/b/some/thing/else/
+		 * However, we only need the rename counts for directories
+		 * in dirs_removed whose value is RELEVANT_FOR_SELF.
+		 * However, we add one special case of also recording it for
+		 * first_time_in_loop because find_basename_matches() can
+		 * use that as a hint to find a good pairing.
+		 */
+		if (dirs_removed)
+			drd_flag = strintmap_get(dirs_removed, old_dir);
+		if (drd_flag == RELEVANT_FOR_SELF || first_time_in_loop)
+			increment_count(info, old_dir, new_dir);
+
+		first_time_in_loop = 0;
+		if (drd_flag == NOT_RELEVANT)
+			break;
+		/* If we hit toplevel directory ("") for old or new dir, quit */
+		if (!*old_dir || !*new_dir)
+			break;
+	}
+
+	/* Free resources we don't need anymore */
+	free(old_dir);
+	free(new_dir);
+}
+
+static void initialize_dir_rename_info(struct dir_rename_info *info,
+				       struct strintmap *relevant_sources,
+				       struct strintmap *dirs_removed,
+				       struct strmap *dir_rename_count,
+				       struct strmap *cached_pairs)
+{
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+	int i;
+
+	if (!dirs_removed && !relevant_sources) {
+		info->setup = 0;
+		return;
+	}
+	info->setup = 1;
+
+	info->dir_rename_count = dir_rename_count;
+	if (!info->dir_rename_count) {
+		info->dir_rename_count = xmalloc(sizeof(*dir_rename_count));
+		strmap_init(info->dir_rename_count);
+	}
+	strintmap_init_with_options(&info->idx_map, -1, NULL, 0);
+	strmap_init_with_options(&info->dir_rename_guess, NULL, 0);
+
+	/* Setup info->relevant_source_dirs */
+	info->relevant_source_dirs = NULL;
+	if (dirs_removed || !relevant_sources) {
+		info->relevant_source_dirs = dirs_removed; /* might be NULL */
+	} else {
+		info->relevant_source_dirs = xmalloc(sizeof(struct strintmap));
+		strintmap_init(info->relevant_source_dirs, 0 /* unused */);
+		strintmap_for_each_entry(relevant_sources, &iter, entry) {
+			char *dirname = get_dirname(entry->key);
+			if (!dirs_removed ||
+			    strintmap_contains(dirs_removed, dirname))
+				strintmap_set(info->relevant_source_dirs,
+					      dirname, 0 /* value irrelevant */);
+			free(dirname);
+		}
+	}
+
+	/*
+	 * Loop setting up both info->idx_map, and doing setup of
+	 * info->dir_rename_count.
+	 */
+	for (i = 0; i < rename_dst_nr; ++i) {
+		/*
+		 * For non-renamed files, make idx_map contain mapping of
+		 *   filename -> index (index within rename_dst, that is)
+		 */
+		if (!rename_dst[i].is_rename) {
+			char *filename = rename_dst[i].p->two->path;
+			strintmap_set(&info->idx_map, filename, i);
+			continue;
+		}
+
+		/*
+		 * For everything else (i.e. renamed files), make
+		 * dir_rename_count contain a map of a map:
+		 *   old_directory -> {new_directory -> count}
+		 * In other words, for every pair look at the directories for
+		 * the old filename and the new filename and count how many
+		 * times that pairing occurs.
+		 */
+		update_dir_rename_counts(info, dirs_removed,
+					 rename_dst[i].p->one->path,
+					 rename_dst[i].p->two->path);
+	}
+
+	/* Add cached_pairs to counts */
+	strmap_for_each_entry(cached_pairs, &iter, entry) {
+		const char *old_name = entry->key;
+		const char *new_name = entry->value;
+		if (!new_name)
+			/* known delete; ignore it */
+			continue;
+
+		update_dir_rename_counts(info, dirs_removed, old_name, new_name);
+	}
+
+	/*
+	 * Now we collapse
+	 *    dir_rename_count: old_directory -> {new_directory -> count}
+	 * down to
+	 *    dir_rename_guess: old_directory -> best_new_directory
+	 * where best_new_directory is the one with the highest count.
+	 */
+	strmap_for_each_entry(info->dir_rename_count, &iter, entry) {
+		/* entry->key is source_dir */
+		struct strintmap *counts = entry->value;
+		char *best_newdir;
+
+		best_newdir = xstrdup(get_highest_rename_path(counts));
+		strmap_put(&info->dir_rename_guess, entry->key,
+			   best_newdir);
+	}
+}
+
+void partial_clear_dir_rename_count(struct strmap *dir_rename_count)
+{
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+
+	strmap_for_each_entry(dir_rename_count, &iter, entry) {
+		struct strintmap *counts = entry->value;
+		strintmap_clear(counts);
+	}
+	strmap_partial_clear(dir_rename_count, 1);
+}
+
+static void cleanup_dir_rename_info(struct dir_rename_info *info,
+				    struct strintmap *dirs_removed,
+				    int keep_dir_rename_count)
+{
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+	struct string_list to_remove = STRING_LIST_INIT_NODUP;
+	int i;
+
+	if (!info->setup)
+		return;
+
+	/* idx_map */
+	strintmap_clear(&info->idx_map);
+
+	/* dir_rename_guess */
+	strmap_clear(&info->dir_rename_guess, 1);
+
+	/* relevant_source_dirs */
+	if (info->relevant_source_dirs &&
+	    info->relevant_source_dirs != dirs_removed) {
+		strintmap_clear(info->relevant_source_dirs);
+		FREE_AND_NULL(info->relevant_source_dirs);
+	}
+
+	/* dir_rename_count */
+	if (!keep_dir_rename_count) {
+		partial_clear_dir_rename_count(info->dir_rename_count);
+		strmap_clear(info->dir_rename_count, 1);
+		FREE_AND_NULL(info->dir_rename_count);
+		return;
+	}
+
+	/*
+	 * Although dir_rename_count was passed in
+	 * diffcore_rename_extended() and we want to keep it around and
+	 * return it to that caller, we first want to remove any counts in
+	 * the maps associated with UNKNOWN_DIR entries and any data
+	 * associated with directories that weren't renamed.
+	 */
+	strmap_for_each_entry(info->dir_rename_count, &iter, entry) {
+		const char *source_dir = entry->key;
+		struct strintmap *counts = entry->value;
+
+		if (!strintmap_get(dirs_removed, source_dir)) {
+			string_list_append(&to_remove, source_dir);
+			strintmap_clear(counts);
+			continue;
+		}
+
+		if (strintmap_contains(counts, UNKNOWN_DIR))
+			strintmap_remove(counts, UNKNOWN_DIR);
+	}
+	for (i = 0; i < to_remove.nr; ++i)
+		strmap_remove(info->dir_rename_count,
+			      to_remove.items[i].string, 1);
+	string_list_clear(&to_remove, 0);
+}
+
+static const char *get_basename(const char *filename)
+{
+	/*
+	 * gitbasename() has to worry about special drives, multiple
+	 * directory separator characters, trailing slashes, NULL or
+	 * empty strings, etc.  We only work on filenames as stored in
+	 * git, and thus get to ignore all those complications.
+	 */
+	const char *base = strrchr(filename, '/');
+	return base ? base + 1 : filename;
+}
+
+static int idx_possible_rename(char *filename, struct dir_rename_info *info)
+{
+	/*
+	 * Our comparison of files with the same basename (see
+	 * find_basename_matches() below), is only helpful when after exact
+	 * rename detection we have exactly one file with a given basename
+	 * among the rename sources and also only exactly one file with
+	 * that basename among the rename destinations.  When we have
+	 * multiple files with the same basename in either set, we do not
+	 * know which to compare against.  However, there are some
+	 * filenames that occur in large numbers (particularly
+	 * build-related filenames such as 'Makefile', '.gitignore', or
+	 * 'build.gradle' that potentially exist within every single
+	 * subdirectory), and for performance we want to be able to quickly
+	 * find renames for these files too.
+	 *
+	 * The reason basename comparisons are a useful heuristic was that it
+	 * is common for people to move files across directories while keeping
+	 * their filename the same.  If we had a way of determining or even
+	 * making a good educated guess about which directory these non-unique
+	 * basename files had moved the file to, we could check it.
+	 * Luckily...
+	 *
+	 * When an entire directory is in fact renamed, we have two factors
+	 * helping us out:
+	 *   (a) the original directory disappeared giving us a hint
+	 *       about when we can apply an extra heuristic.
+	 *   (a) we often have several files within that directory and
+	 *       subdirectories that are renamed without changes
+	 * So, rules for a heuristic:
+	 *   (0) If there basename matches are non-unique (the condition under
+	 *       which this function is called) AND
+	 *   (1) the directory in which the file was found has disappeared
+	 *       (i.e. dirs_removed is non-NULL and has a relevant entry) THEN
+	 *   (2) use exact renames of files within the directory to determine
+	 *       where the directory is likely to have been renamed to.  IF
+	 *       there is at least one exact rename from within that
+	 *       directory, we can proceed.
+	 *   (3) If there are multiple places the directory could have been
+	 *       renamed to based on exact renames, ignore all but one of them.
+	 *       Just use the destination with the most renames going to it.
+	 *   (4) Check if applying that directory rename to the original file
+	 *       would result in a destination filename that is in the
+	 *       potential rename set.  If so, return the index of the
+	 *       destination file (the index within rename_dst).
+	 *   (5) Compare the original file and returned destination for
+	 *       similarity, and if they are sufficiently similar, record the
+	 *       rename.
+	 *
+	 * This function, idx_possible_rename(), is only responsible for (4).
+	 * The conditions/steps in (1)-(3) are handled via setting up
+	 * dir_rename_count and dir_rename_guess in
+	 * initialize_dir_rename_info().  Steps (0) and (5) are handled by
+	 * the caller of this function.
+	 */
+	char *old_dir, *new_dir;
+	struct strbuf new_path = STRBUF_INIT;
+	int idx;
+
+	if (!info->setup)
+		return -1;
+
+	old_dir = get_dirname(filename);
+	new_dir = strmap_get(&info->dir_rename_guess, old_dir);
+	free(old_dir);
+	if (!new_dir)
+		return -1;
+
+	strbuf_addstr(&new_path, new_dir);
+	strbuf_addch(&new_path, '/');
+	strbuf_addstr(&new_path, get_basename(filename));
+
+	idx = strintmap_get(&info->idx_map, new_path.buf);
+	strbuf_release(&new_path);
+	return idx;
+}
+
+struct basename_prefetch_options {
+	struct repository *repo;
+	struct strintmap *relevant_sources;
+	struct strintmap *sources;
+	struct strintmap *dests;
+	struct dir_rename_info *info;
+};
+static void basename_prefetch(void *prefetch_options)
+{
+	struct basename_prefetch_options *options = prefetch_options;
+	struct strintmap *relevant_sources = options->relevant_sources;
+	struct strintmap *sources = options->sources;
+	struct strintmap *dests = options->dests;
+	struct dir_rename_info *info = options->info;
+	int i;
+	struct oid_array to_fetch = OID_ARRAY_INIT;
+
+	/*
+	 * TODO: The following loops mirror the code/logic from
+	 * find_basename_matches(), though not quite exactly.  Maybe
+	 * abstract the iteration logic out somehow?
+	 */
+	for (i = 0; i < rename_src_nr; ++i) {
+		char *filename = rename_src[i].p->one->path;
+		const char *base = NULL;
+		intptr_t src_index;
+		intptr_t dst_index;
+
+		/* Skip irrelevant sources */
+		if (relevant_sources &&
+		    !strintmap_contains(relevant_sources, filename))
+			continue;
+
+		/*
+		 * If the basename is unique among remaining sources, then
+		 * src_index will equal 'i' and we can attempt to match it
+		 * to a unique basename in the destinations.  Otherwise,
+		 * use directory rename heuristics, if possible.
+		 */
+		base = get_basename(filename);
+		src_index = strintmap_get(sources, base);
+		assert(src_index == -1 || src_index == i);
+
+		if (strintmap_contains(dests, base)) {
+			struct diff_filespec *one, *two;
+
+			/* Find a matching destination, if possible */
+			dst_index = strintmap_get(dests, base);
+			if (src_index == -1 || dst_index == -1) {
+				src_index = i;
+				dst_index = idx_possible_rename(filename, info);
+			}
+			if (dst_index == -1)
+				continue;
+
+			/* Ignore this dest if already used in a rename */
+			if (rename_dst[dst_index].is_rename)
+				continue; /* already used previously */
+
+			one = rename_src[src_index].p->one;
+			two = rename_dst[dst_index].p->two;
+
+			/* Add the pairs */
+			diff_add_if_missing(options->repo, &to_fetch, two);
+			diff_add_if_missing(options->repo, &to_fetch, one);
+		}
+	}
+
+	promisor_remote_get_direct(options->repo, to_fetch.oid, to_fetch.nr);
+	oid_array_clear(&to_fetch);
+}
+
+static int find_basename_matches(struct diff_options *options,
+				 int minimum_score,
+				 struct dir_rename_info *info,
+				 struct strintmap *relevant_sources,
+				 struct strintmap *dirs_removed)
+{
+	/*
+	 * When I checked in early 2020, over 76% of file renames in linux
+	 * just moved files to a different directory but kept the same
+	 * basename.  gcc did that with over 64% of renames, gecko did it
+	 * with over 79%, and WebKit did it with over 89%.
+	 *
+	 * Therefore we can bypass the normal exhaustive NxM matrix
+	 * comparison of similarities between all potential rename sources
+	 * and destinations by instead using file basename as a hint (i.e.
+	 * the portion of the filename after the last '/'), checking for
+	 * similarity between files with the same basename, and if we find
+	 * a pair that are sufficiently similar, record the rename pair and
+	 * exclude those two from the NxM matrix.
+	 *
+	 * This *might* cause us to find a less than optimal pairing (if
+	 * there is another file that we are even more similar to but has a
+	 * different basename).  Given the huge performance advantage
+	 * basename matching provides, and given the frequency with which
+	 * people use the same basename in real world projects, that's a
+	 * trade-off we are willing to accept when doing just rename
+	 * detection.
+	 *
+	 * If someone wants copy detection that implies they are willing to
+	 * spend more cycles to find similarities between files, so it may
+	 * be less likely that this heuristic is wanted.  If someone is
+	 * doing break detection, that means they do not want filename
+	 * similarity to imply any form of content similiarity, and thus
+	 * this heuristic would definitely be incompatible.
+	 */
+
+	int i, renames = 0;
+	struct strintmap sources;
+	struct strintmap dests;
+	struct diff_populate_filespec_options dpf_options = {
+		.check_binary = 0,
+		.missing_object_cb = NULL,
+		.missing_object_data = NULL
+	};
+	struct basename_prefetch_options prefetch_options = {
+		.repo = options->repo,
+		.relevant_sources = relevant_sources,
+		.sources = &sources,
+		.dests = &dests,
+		.info = info
+	};
+
+	/*
+	 * Create maps of basename -> fullname(s) for remaining sources and
+	 * dests.
+	 */
+	strintmap_init_with_options(&sources, -1, NULL, 0);
+	strintmap_init_with_options(&dests, -1, NULL, 0);
+	for (i = 0; i < rename_src_nr; ++i) {
+		char *filename = rename_src[i].p->one->path;
+		const char *base;
+
+		/* exact renames removed in remove_unneeded_paths_from_src() */
+		assert(!rename_src[i].p->one->rename_used);
+
+		/* Record index within rename_src (i) if basename is unique */
+		base = get_basename(filename);
+		if (strintmap_contains(&sources, base))
+			strintmap_set(&sources, base, -1);
+		else
+			strintmap_set(&sources, base, i);
+	}
+	for (i = 0; i < rename_dst_nr; ++i) {
+		char *filename = rename_dst[i].p->two->path;
+		const char *base;
+
+		if (rename_dst[i].is_rename)
+			continue; /* involved in exact match already. */
+
+		/* Record index within rename_dst (i) if basename is unique */
+		base = get_basename(filename);
+		if (strintmap_contains(&dests, base))
+			strintmap_set(&dests, base, -1);
+		else
+			strintmap_set(&dests, base, i);
+	}
+
+	if (options->repo == the_repository && has_promisor_remote()) {
+		dpf_options.missing_object_cb = basename_prefetch;
+		dpf_options.missing_object_data = &prefetch_options;
+	}
+
+	/* Now look for basename matchups and do similarity estimation */
+	for (i = 0; i < rename_src_nr; ++i) {
+		char *filename = rename_src[i].p->one->path;
+		const char *base = NULL;
+		intptr_t src_index;
+		intptr_t dst_index;
+
+		/* Skip irrelevant sources */
+		if (relevant_sources &&
+		    !strintmap_contains(relevant_sources, filename))
+			continue;
+
+		/*
+		 * If the basename is unique among remaining sources, then
+		 * src_index will equal 'i' and we can attempt to match it
+		 * to a unique basename in the destinations.  Otherwise,
+		 * use directory rename heuristics, if possible.
+		 */
+		base = get_basename(filename);
+		src_index = strintmap_get(&sources, base);
+		assert(src_index == -1 || src_index == i);
+
+		if (strintmap_contains(&dests, base)) {
+			struct diff_filespec *one, *two;
+			int score;
+
+			/* Find a matching destination, if possible */
+			dst_index = strintmap_get(&dests, base);
+			if (src_index == -1 || dst_index == -1) {
+				src_index = i;
+				dst_index = idx_possible_rename(filename, info);
+			}
+			if (dst_index == -1)
+				continue;
+
+			/* Ignore this dest if already used in a rename */
+			if (rename_dst[dst_index].is_rename)
+				continue; /* already used previously */
+
+			/* Estimate the similarity */
+			one = rename_src[src_index].p->one;
+			two = rename_dst[dst_index].p->two;
+			score = estimate_similarity(options->repo, one, two,
+						    minimum_score, &dpf_options);
+
+			/* If sufficiently similar, record as rename pair */
+			if (score < minimum_score)
+				continue;
+			record_rename_pair(dst_index, src_index, score);
+			renames++;
+			update_dir_rename_counts(info, dirs_removed,
+						 one->path, two->path);
+
+			/*
+			 * Found a rename so don't need text anymore; if we
+			 * didn't find a rename, the filespec_blob would get
+			 * re-used when doing the matrix of comparisons.
+			 */
+			diff_free_filespec_blob(one);
+			diff_free_filespec_blob(two);
+		}
+	}
+
+	strintmap_clear(&sources);
+	strintmap_clear(&dests);
+
+	return renames;
+}
+
 #define NUM_CANDIDATE_PER_DST 4
 static void record_if_better(struct diff_score m[], struct diff_score *o)
 {
@@ -409,7 +1091,7 @@
 	 * memory for the matrix anyway.
 	 */
 	if (rename_limit <= 0)
-		rename_limit = 32767;
+		return 0; /* treat as unlimited */
 	if (st_mult(num_destinations, num_sources)
 	    <= st_mult(rename_limit, rename_limit))
 		return 0;
@@ -433,7 +1115,12 @@
 	return 1;
 }
 
-static int find_renames(struct diff_score *mx, int dst_cnt, int minimum_score, int copies)
+static int find_renames(struct diff_score *mx,
+			int dst_cnt,
+			int minimum_score,
+			int copies,
+			struct dir_rename_info *info,
+			struct strintmap *dirs_removed)
 {
 	int count = 0, i;
 
@@ -450,11 +1137,200 @@
 			continue;
 		record_rename_pair(mx[i].dst, mx[i].src, mx[i].score);
 		count++;
+		update_dir_rename_counts(info, dirs_removed,
+					 rename_src[mx[i].src].p->one->path,
+					 rename_dst[mx[i].dst].p->two->path);
 	}
 	return count;
 }
 
-void diffcore_rename(struct diff_options *options)
+static void remove_unneeded_paths_from_src(int detecting_copies,
+					   struct strintmap *interesting)
+{
+	int i, new_num_src;
+
+	if (detecting_copies && !interesting)
+		return; /* nothing to remove */
+	if (break_idx)
+		return; /* culling incompatible with break detection */
+
+	/*
+	 * Note on reasons why we cull unneeded sources but not destinations:
+	 *   1) Pairings are stored in rename_dst (not rename_src), which we
+	 *      need to keep around.  So, we just can't cull rename_dst even
+	 *      if we wanted to.  But doing so wouldn't help because...
+	 *
+	 *   2) There is a matrix pairwise comparison that follows the
+	 *      "Performing inexact rename detection" progress message.
+	 *      Iterating over the destinations is done in the outer loop,
+	 *      hence we only iterate over each of those once and we can
+	 *      easily skip the outer loop early if the destination isn't
+	 *      relevant.  That's only one check per destination path to
+	 *      skip.
+	 *
+	 *      By contrast, the sources are iterated in the inner loop; if
+	 *      we check whether a source can be skipped, then we'll be
+	 *      checking it N separate times, once for each destination.
+	 *      We don't want to have to iterate over known-not-needed
+	 *      sources N times each, so avoid that by removing the sources
+	 *      from rename_src here.
+	 */
+	for (i = 0, new_num_src = 0; i < rename_src_nr; i++) {
+		struct diff_filespec *one = rename_src[i].p->one;
+
+		/*
+		 * renames are stored in rename_dst, so if a rename has
+		 * already been detected using this source, we can just
+		 * remove the source knowing rename_dst has its info.
+		 */
+		if (!detecting_copies && one->rename_used)
+			continue;
+
+		/* If we don't care about the source path, skip it */
+		if (interesting && !strintmap_contains(interesting, one->path))
+			continue;
+
+		if (new_num_src < i)
+			memcpy(&rename_src[new_num_src], &rename_src[i],
+			       sizeof(struct diff_rename_src));
+		new_num_src++;
+	}
+
+	rename_src_nr = new_num_src;
+}
+
+static void handle_early_known_dir_renames(struct dir_rename_info *info,
+					   struct strintmap *relevant_sources,
+					   struct strintmap *dirs_removed)
+{
+	/*
+	 * Directory renames are determined via an aggregate of all renames
+	 * under them and using a "majority wins" rule.  The fact that
+	 * "majority wins", though, means we don't need all the renames
+	 * under the given directory, we only need enough to ensure we have
+	 * a majority.
+	 */
+
+	int i, new_num_src;
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+
+	if (!dirs_removed || !relevant_sources)
+		return; /* nothing to cull */
+	if (break_idx)
+		return; /* culling incompatbile with break detection */
+
+	/*
+	 * Supplement dir_rename_count with number of potential renames,
+	 * marking all potential rename sources as mapping to UNKNOWN_DIR.
+	 */
+	for (i = 0; i < rename_src_nr; i++) {
+		char *old_dir;
+		struct diff_filespec *one = rename_src[i].p->one;
+
+		/*
+		 * sources that are part of a rename will have already been
+		 * removed by a prior call to remove_unneeded_paths_from_src()
+		 */
+		assert(!one->rename_used);
+
+		old_dir = get_dirname(one->path);
+		while (*old_dir != '\0' &&
+		       NOT_RELEVANT != strintmap_get(dirs_removed, old_dir)) {
+			char *freeme = old_dir;
+
+			increment_count(info, old_dir, UNKNOWN_DIR);
+			old_dir = get_dirname(old_dir);
+
+			/* Free resources we don't need anymore */
+			free(freeme);
+		}
+		/*
+		 * old_dir and new_dir free'd in increment_count, but
+		 * get_dirname() gives us a new pointer we need to free for
+		 * old_dir.  Also, if the loop runs 0 times we need old_dir
+		 * to be freed.
+		 */
+		free(old_dir);
+	}
+
+	/*
+	 * For any directory which we need a potential rename detected for
+	 * (i.e. those marked as RELEVANT_FOR_SELF in dirs_removed), check
+	 * whether we have enough renames to satisfy the "majority rules"
+	 * requirement such that detecting any more renames of files under
+	 * it won't change the result.  For any such directory, mark that
+	 * we no longer need to detect a rename for it.  However, since we
+	 * might need to still detect renames for an ancestor of that
+	 * directory, use RELEVANT_FOR_ANCESTOR.
+	 */
+	strmap_for_each_entry(info->dir_rename_count, &iter, entry) {
+		/* entry->key is source_dir */
+		struct strintmap *counts = entry->value;
+
+		if (strintmap_get(dirs_removed, entry->key) ==
+		    RELEVANT_FOR_SELF &&
+		    dir_rename_already_determinable(counts)) {
+			strintmap_set(dirs_removed, entry->key,
+				      RELEVANT_FOR_ANCESTOR);
+		}
+	}
+
+	for (i = 0, new_num_src = 0; i < rename_src_nr; i++) {
+		struct diff_filespec *one = rename_src[i].p->one;
+		int val;
+
+		val = strintmap_get(relevant_sources, one->path);
+
+		/*
+		 * sources that were not found in relevant_sources should
+		 * have already been removed by a prior call to
+		 * remove_unneeded_paths_from_src()
+		 */
+		assert(val != -1);
+
+		if (val == RELEVANT_LOCATION) {
+			int removable = 1;
+			char *dir = get_dirname(one->path);
+			while (1) {
+				char *freeme = dir;
+				int res = strintmap_get(dirs_removed, dir);
+
+				/* Quit if not found or irrelevant */
+				if (res == NOT_RELEVANT)
+					break;
+				/* If RELEVANT_FOR_SELF, can't remove */
+				if (res == RELEVANT_FOR_SELF) {
+					removable = 0;
+					break;
+				}
+				/* Else continue searching upwards */
+				assert(res == RELEVANT_FOR_ANCESTOR);
+				dir = get_dirname(dir);
+				free(freeme);
+			}
+			free(dir);
+			if (removable) {
+				strintmap_set(relevant_sources, one->path,
+					      RELEVANT_NO_MORE);
+				continue;
+			}
+		}
+
+		if (new_num_src < i)
+			memcpy(&rename_src[new_num_src], &rename_src[i],
+			       sizeof(struct diff_rename_src));
+		new_num_src++;
+	}
+
+	rename_src_nr = new_num_src;
+}
+
+void diffcore_rename_extended(struct diff_options *options,
+			      struct strintmap *relevant_sources,
+			      struct strintmap *dirs_removed,
+			      struct strmap *dir_rename_count,
+			      struct strmap *cached_pairs)
 {
 	int detect_rename = options->detect_rename;
 	int minimum_score = options->rename_score;
@@ -463,9 +1339,26 @@
 	struct diff_score *mx;
 	int i, j, rename_count, skip_unmodified = 0;
 	int num_destinations, dst_cnt;
+	int num_sources, want_copies;
 	struct progress *progress = NULL;
+	struct dir_rename_info info;
+	struct diff_populate_filespec_options dpf_options = {
+		.check_binary = 0,
+		.missing_object_cb = NULL,
+		.missing_object_data = NULL
+	};
+	struct inexact_prefetch_options prefetch_options = {
+		.repo = options->repo
+	};
 
 	trace2_region_enter("diff", "setup", options->repo);
+	info.setup = 0;
+	assert(!dir_rename_count || strmap_empty(dir_rename_count));
+	want_copies = (detect_rename == DIFF_DETECT_COPY);
+	if (dirs_removed && (break_idx || want_copies))
+		BUG("dirs_removed incompatible with break/copy detection");
+	if (break_idx && relevant_sources)
+		BUG("break detection incompatible with source specification");
 	if (!minimum_score)
 		minimum_score = DEFAULT_RENAME_SCORE;
 
@@ -502,7 +1395,7 @@
 				p->one->rename_used++;
 			register_rename_src(p);
 		}
-		else if (detect_rename == DIFF_DETECT_COPY) {
+		else if (want_copies) {
 			/*
 			 * Increment the "rename_used" score by
 			 * one, to indicate ourselves as a user.
@@ -527,17 +1420,79 @@
 	if (minimum_score == MAX_SCORE)
 		goto cleanup;
 
-	/*
-	 * Calculate how many renames are left (but all the source
-	 * files still remain as options for rename/copies!)
-	 */
+	num_sources = rename_src_nr;
+
+	if (want_copies || break_idx) {
+		/*
+		 * Cull sources:
+		 *   - remove ones corresponding to exact renames
+		 *   - remove ones not found in relevant_sources
+		 */
+		trace2_region_enter("diff", "cull after exact", options->repo);
+		remove_unneeded_paths_from_src(want_copies, relevant_sources);
+		trace2_region_leave("diff", "cull after exact", options->repo);
+	} else {
+		/* Determine minimum score to match basenames */
+		double factor = 0.5;
+		char *basename_factor = getenv("GIT_BASENAME_FACTOR");
+		int min_basename_score;
+
+		if (basename_factor)
+			factor = strtol(basename_factor, NULL, 10)/100.0;
+		assert(factor >= 0.0 && factor <= 1.0);
+		min_basename_score = minimum_score +
+			(int)(factor * (MAX_SCORE - minimum_score));
+
+		/*
+		 * Cull sources:
+		 *   - remove ones involved in renames (found via exact match)
+		 */
+		trace2_region_enter("diff", "cull after exact", options->repo);
+		remove_unneeded_paths_from_src(want_copies, NULL);
+		trace2_region_leave("diff", "cull after exact", options->repo);
+
+		/* Preparation for basename-driven matching. */
+		trace2_region_enter("diff", "dir rename setup", options->repo);
+		initialize_dir_rename_info(&info, relevant_sources,
+					   dirs_removed, dir_rename_count,
+					   cached_pairs);
+		trace2_region_leave("diff", "dir rename setup", options->repo);
+
+		/* Utilize file basenames to quickly find renames. */
+		trace2_region_enter("diff", "basename matches", options->repo);
+		rename_count += find_basename_matches(options,
+						      min_basename_score,
+						      &info,
+						      relevant_sources,
+						      dirs_removed);
+		trace2_region_leave("diff", "basename matches", options->repo);
+
+		/*
+		 * Cull sources, again:
+		 *   - remove ones involved in renames (found via basenames)
+		 *   - remove ones not found in relevant_sources
+		 * and
+		 *   - remove ones in relevant_sources which are needed only
+		 *     for directory renames IF no ancestory directory
+		 *     actually needs to know any more individual path
+		 *     renames under them
+		 */
+		trace2_region_enter("diff", "cull basename", options->repo);
+		remove_unneeded_paths_from_src(want_copies, relevant_sources);
+		handle_early_known_dir_renames(&info, relevant_sources,
+					       dirs_removed);
+		trace2_region_leave("diff", "cull basename", options->repo);
+	}
+
+	/* Calculate how many rename destinations are left */
 	num_destinations = (rename_dst_nr - rename_count);
+	num_sources = rename_src_nr; /* rename_src_nr reflects lower number */
 
 	/* All done? */
-	if (!num_destinations)
+	if (!num_destinations || !num_sources)
 		goto cleanup;
 
-	switch (too_many_rename_candidates(num_destinations, rename_src_nr,
+	switch (too_many_rename_candidates(num_destinations, num_sources,
 					   options)) {
 	case 1:
 		goto cleanup;
@@ -553,17 +1508,23 @@
 	if (options->show_rename_progress) {
 		progress = start_delayed_progress(
 				_("Performing inexact rename detection"),
-				(uint64_t)num_destinations * (uint64_t)rename_src_nr);
+				(uint64_t)num_destinations * (uint64_t)num_sources);
 	}
 
-	mx = xcalloc(st_mult(NUM_CANDIDATE_PER_DST, num_destinations),
-		     sizeof(*mx));
+	/* Finish setting up dpf_options */
+	prefetch_options.skip_unmodified = skip_unmodified;
+	if (options->repo == the_repository && has_promisor_remote()) {
+		dpf_options.missing_object_cb = inexact_prefetch;
+		dpf_options.missing_object_data = &prefetch_options;
+	}
+
+	CALLOC_ARRAY(mx, st_mult(NUM_CANDIDATE_PER_DST, num_destinations));
 	for (dst_cnt = i = 0; i < rename_dst_nr; i++) {
 		struct diff_filespec *two = rename_dst[i].p->two;
 		struct diff_score *m;
 
 		if (rename_dst[i].is_rename)
-			continue; /* dealt with exact match already. */
+			continue; /* exact or basename match already handled */
 
 		m = &mx[dst_cnt * NUM_CANDIDATE_PER_DST];
 		for (j = 0; j < NUM_CANDIDATE_PER_DST; j++)
@@ -573,6 +1534,8 @@
 			struct diff_filespec *one = rename_src[j].p->one;
 			struct diff_score this_src;
 
+			assert(!one->rename_used || want_copies || break_idx);
+
 			if (skip_unmodified &&
 			    diff_unmodified_pair(rename_src[j].p))
 				continue;
@@ -580,7 +1543,7 @@
 			this_src.score = estimate_similarity(options->repo,
 							     one, two,
 							     minimum_score,
-							     skip_unmodified);
+							     &dpf_options);
 			this_src.name_score = basename_same(one, two);
 			this_src.dst = i;
 			this_src.src = j;
@@ -594,16 +1557,18 @@
 		}
 		dst_cnt++;
 		display_progress(progress,
-				 (uint64_t)dst_cnt * (uint64_t)rename_src_nr);
+				 (uint64_t)dst_cnt * (uint64_t)num_sources);
 	}
 	stop_progress(&progress);
 
 	/* cost matrix sorted by most to least similar pair */
 	STABLE_QSORT(mx, dst_cnt * NUM_CANDIDATE_PER_DST, score_compare);
 
-	rename_count += find_renames(mx, dst_cnt, minimum_score, 0);
-	if (detect_rename == DIFF_DETECT_COPY)
-		rename_count += find_renames(mx, dst_cnt, minimum_score, 1);
+	rename_count += find_renames(mx, dst_cnt, minimum_score, 0,
+				     &info, dirs_removed);
+	if (want_copies)
+		rename_count += find_renames(mx, dst_cnt, minimum_score, 1,
+					     &info, dirs_removed);
 	free(mx);
 	trace2_region_leave("diff", "inexact renames", options->repo);
 
@@ -663,7 +1628,7 @@
 			/* all the usual ones need to be kept */
 			diff_q(&outq, p);
 		else
-			/* no need to keep unmodified pairs; FIXME: remove earlier? */
+			/* no need to keep unmodified pairs */
 			pair_to_free = p;
 
 		if (pair_to_free)
@@ -679,6 +1644,7 @@
 		if (rename_dst[i].filespec_to_free)
 			free_filespec(rename_dst[i].filespec_to_free);
 
+	cleanup_dir_rename_info(&info, dirs_removed, dir_rename_count != NULL);
 	FREE_AND_NULL(rename_dst);
 	rename_dst_nr = rename_dst_alloc = 0;
 	FREE_AND_NULL(rename_src);
@@ -690,3 +1656,8 @@
 	trace2_region_leave("diff", "write back to queue", options->repo);
 	return;
 }
+
+void diffcore_rename(struct diff_options *options)
+{
+	diffcore_rename_extended(options, NULL, NULL, NULL, NULL);
+}
diff --git a/diffcore-rotate.c b/diffcore-rotate.c
new file mode 100644
index 0000000..445f060
--- /dev/null
+++ b/diffcore-rotate.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2021, Google LLC.
+ * Based on diffcore-order.c, which is Copyright (C) 2005, Junio C Hamano
+ */
+#include "cache.h"
+#include "diff.h"
+#include "diffcore.h"
+
+void diffcore_rotate(struct diff_options *opt)
+{
+	struct diff_queue_struct *q = &diff_queued_diff;
+	struct diff_queue_struct outq;
+	int rotate_to, i;
+
+	if (!q->nr)
+		return;
+
+	for (i = 0; i < q->nr; i++) {
+		int cmp = strcmp(opt->rotate_to, q->queue[i]->two->path);
+		if (!cmp)
+			break; /* exact match */
+		if (!opt->rotate_to_strict && cmp < 0)
+			break; /* q->queue[i] is now past the target pathname */
+	}
+
+	if (q->nr <= i) {
+		/* we did not find the specified path */
+		if (opt->rotate_to_strict)
+			die(_("No such path '%s' in the diff"), opt->rotate_to);
+		return;
+	}
+
+	DIFF_QUEUE_CLEAR(&outq);
+	rotate_to = i;
+
+	for (i = rotate_to; i < q->nr; i++)
+		diff_q(&outq, q->queue[i]);
+	for (i = 0; i < rotate_to; i++) {
+		if (opt->skip_instead_of_rotate)
+			diff_free_filepair(q->queue[i]);
+		else
+			diff_q(&outq, q->queue[i]);
+	}
+	free(q->queue);
+	*q = outq;
+}
diff --git a/diffcore.h b/diffcore.h
index d2a63c5..533b30e 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -8,6 +8,8 @@
 
 struct diff_options;
 struct repository;
+struct strintmap;
+struct strmap;
 struct userdiff_driver;
 
 /* This header file is internal between diff.c and its diff transformers
@@ -159,11 +161,32 @@
 				 struct diff_filespec *);
 void diff_q(struct diff_queue_struct *, struct diff_filepair *);
 
+/* dir_rename_relevance: the reason we want rename information for a dir */
+enum dir_rename_relevance {
+	NOT_RELEVANT = 0,
+	RELEVANT_FOR_ANCESTOR = 1,
+	RELEVANT_FOR_SELF = 2
+};
+/* file_rename_relevance: the reason(s) we want rename information for a file */
+enum file_rename_relevance {
+	RELEVANT_NO_MORE = 0,  /* i.e. NOT relevant */
+	RELEVANT_CONTENT = 1,
+	RELEVANT_LOCATION = 2
+};
+
+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 strintmap *relevant_sources,
+			      struct strintmap *dirs_removed,
+			      struct strmap *dir_rename_count,
+			      struct strmap *cached_pairs);
 void diffcore_merge_broken(void);
 void diffcore_pickaxe(struct diff_options *);
 void diffcore_order(const char *orderfile);
+void diffcore_rotate(struct diff_options *);
 
 /* low-level interface to diffcore_order */
 struct obj_order {
diff --git a/dir.c b/dir.c
index d153a63..23b4417 100644
--- a/dir.c
+++ b/dir.c
@@ -53,10 +53,15 @@
 	int check_only, int stop_at_first_file, const struct pathspec *pathspec);
 static int resolve_dtype(int dtype, struct index_state *istate,
 			 const char *path, int len);
-
-void dir_init(struct dir_struct *dir)
+struct dirent *readdir_skip_dot_and_dotdot(DIR *dirp)
 {
-	memset(dir, 0, sizeof(*dir));
+	struct dirent *e;
+
+	while ((e = readdir(dirp)) != NULL) {
+		if (!is_dot_or_dotdot(e->d_name))
+			break;
+	}
+	return e;
 }
 
 int count_slashes(const char *s)
@@ -73,11 +78,21 @@
 	return ignore_case ? strcasecmp(a, b) : strcmp(a, b);
 }
 
+int fspatheq(const char *a, const char *b)
+{
+	return !fspathcmp(a, b);
+}
+
 int fspathncmp(const char *a, const char *b, size_t count)
 {
 	return ignore_case ? strncasecmp(a, b, count) : strncmp(a, b, count);
 }
 
+unsigned int fspathhash(const char *str)
+{
+	return ignore_case ? strihash(str) : strhash(str);
+}
+
 int git_fnmatch(const struct pathspec_item *item,
 		const char *pattern, const char *string,
 		int prefix)
@@ -306,7 +321,7 @@
  * [1] Only if DO_MATCH_DIRECTORY is passed; otherwise, this is NOT a match.
  * [2] Only if DO_MATCH_LEADING_PATHSPEC is passed; otherwise, not a match.
  */
-static int match_pathspec_item(const struct index_state *istate,
+static int match_pathspec_item(struct index_state *istate,
 			       const struct pathspec_item *item, int prefix,
 			       const char *name, int namelen, unsigned flags)
 {
@@ -429,7 +444,7 @@
  * pathspec did not match any names, which could indicate that the
  * user mistyped the nth pathspec.
  */
-static int do_match_pathspec(const struct index_state *istate,
+static int do_match_pathspec(struct index_state *istate,
 			     const struct pathspec *ps,
 			     const char *name, int namelen,
 			     int prefix, char *seen,
@@ -500,7 +515,7 @@
 	return retval;
 }
 
-static int match_pathspec_with_flags(const struct index_state *istate,
+static int match_pathspec_with_flags(struct index_state *istate,
 				     const struct pathspec *ps,
 				     const char *name, int namelen,
 				     int prefix, char *seen, unsigned flags)
@@ -516,7 +531,7 @@
 	return negative ? 0 : positive;
 }
 
-int match_pathspec(const struct index_state *istate,
+int match_pathspec(struct index_state *istate,
 		   const struct pathspec *ps,
 		   const char *name, int namelen,
 		   int prefix, char *seen, int is_dir)
@@ -529,7 +544,7 @@
 /**
  * Check if a submodule is a superset of the pathspec
  */
-int submodule_path_match(const struct index_state *istate,
+int submodule_path_match(struct index_state *istate,
 			 const struct pathspec *ps,
 			 const char *submodule_name,
 			 char *seen)
@@ -892,7 +907,7 @@
 	add_pattern_to_hashsets(pl, pattern);
 }
 
-static int read_skip_worktree_file_from_index(const struct index_state *istate,
+static int read_skip_worktree_file_from_index(struct index_state *istate,
 					      const char *path,
 					      size_t *size_out, char **data_out,
 					      struct oid_stat *oid_stat)
@@ -1035,6 +1050,9 @@
 				    const char *base, int baselen,
 				    struct pattern_list *pl);
 
+/* Flags for add_patterns() */
+#define PATTERN_NOFOLLOW (1<<0)
+
 /*
  * Given a file with name "fname", read it (either from disk, or from
  * an index if 'istate' is non-null), parse it and store the
@@ -1046,7 +1064,7 @@
  */
 static int add_patterns(const char *fname, const char *base, int baselen,
 			struct pattern_list *pl, struct index_state *istate,
-			struct oid_stat *oid_stat)
+			unsigned flags, struct oid_stat *oid_stat)
 {
 	struct stat st;
 	int r;
@@ -1054,7 +1072,11 @@
 	size_t size = 0;
 	char *buf;
 
-	fd = open(fname, O_RDONLY);
+	if (flags & PATTERN_NOFOLLOW)
+		fd = open_nofollow(fname, O_RDONLY);
+	else
+		fd = open(fname, O_RDONLY);
+
 	if (fd < 0 || fstat(fd, &st) < 0) {
 		if (fd < 0)
 			warn_on_fopen_errors(fname);
@@ -1143,9 +1165,10 @@
 
 int add_patterns_from_file_to_list(const char *fname, const char *base,
 				   int baselen, struct pattern_list *pl,
-				   struct index_state *istate)
+				   struct index_state *istate,
+				   unsigned flags)
 {
-	return add_patterns(fname, base, baselen, pl, istate, NULL);
+	return add_patterns(fname, base, baselen, pl, istate, flags, NULL);
 }
 
 int add_patterns_from_blob_to_list(
@@ -1194,7 +1217,7 @@
 	if (!dir->untracked)
 		dir->unmanaged_exclude_files++;
 	pl = add_pattern_list(dir, EXC_FILE, fname);
-	if (add_patterns(fname, "", 0, pl, NULL, oid_stat) < 0)
+	if (add_patterns(fname, "", 0, pl, NULL, 0, oid_stat) < 0)
 		die(_("cannot use %s as an exclude file"), fname);
 }
 
@@ -1357,7 +1380,7 @@
 	struct path_pattern *pattern;
 	struct strbuf parent_pathname = STRBUF_INIT;
 	int result = NOT_MATCHED;
-	const char *slash_pos;
+	size_t slash_pos;
 
 	if (!pl->use_cone_patterns) {
 		pattern = last_matching_pattern_from_list(pathname, pathlen, basename,
@@ -1378,21 +1401,35 @@
 	strbuf_addch(&parent_pathname, '/');
 	strbuf_add(&parent_pathname, pathname, pathlen);
 
+	/*
+	 * Directory entries are matched if and only if a file
+	 * contained immediately within them is matched. For the
+	 * case of a directory entry, modify the path to create
+	 * a fake filename within this directory, allowing us to
+	 * use the file-base matching logic in an equivalent way.
+	 */
+	if (parent_pathname.len > 0 &&
+	    parent_pathname.buf[parent_pathname.len - 1] == '/') {
+		slash_pos = parent_pathname.len - 1;
+		strbuf_add(&parent_pathname, "-", 1);
+	} else {
+		const char *slash_ptr = strrchr(parent_pathname.buf, '/');
+		slash_pos = slash_ptr ? slash_ptr - parent_pathname.buf : 0;
+	}
+
 	if (hashmap_contains_path(&pl->recursive_hashmap,
 				  &parent_pathname)) {
 		result = MATCHED_RECURSIVE;
 		goto done;
 	}
 
-	slash_pos = strrchr(parent_pathname.buf, '/');
-
-	if (slash_pos == parent_pathname.buf) {
+	if (!slash_pos) {
 		/* include every file in root */
 		result = MATCHED;
 		goto done;
 	}
 
-	strbuf_setlen(&parent_pathname, slash_pos - parent_pathname.buf);
+	strbuf_setlen(&parent_pathname, slash_pos);
 
 	if (hashmap_contains_path(&pl->parent_hashmap, &parent_pathname)) {
 		result = MATCHED;
@@ -1488,7 +1525,7 @@
 		const char *cp;
 		struct oid_stat oid_stat;
 
-		stk = xcalloc(1, sizeof(*stk));
+		CALLOC_ARRAY(stk, 1);
 		if (current < 0) {
 			cp = base;
 			current = 0;
@@ -1558,6 +1595,7 @@
 			strbuf_addstr(&sb, dir->exclude_per_dir);
 			pl->src = strbuf_detach(&sb, NULL);
 			add_patterns(pl->src, pl->src, stk->baselen, pl, istate,
+				     PATTERN_NOFOLLOW,
 				     untracked ? &oid_stat : NULL);
 		}
 		/*
@@ -1740,13 +1778,13 @@
  * Case 3: if we didn't have it in the index previously, we
  * have a few sub-cases:
  *
- *  (a) if "show_other_directories" is true, we show it as
- *      just a directory, unless "hide_empty_directories" is
+ *  (a) if DIR_SHOW_OTHER_DIRECTORIES flag is set, we show it as
+ *      just a directory, unless DIR_HIDE_EMPTY_DIRECTORIES is
  *      also true, in which case we need to check if it contains any
  *      untracked and / or ignored files.
- *  (b) if it looks like a git directory, and we don't have
- *      'no_gitlinks' set we treat it as a gitlink, and show it
- *      as a directory.
+ *  (b) if it looks like a git directory and we don't have the
+ *      DIR_NO_GITLINKS flag, then we treat it as a gitlink, and
+ *      show it as a directory.
  *  (c) otherwise, we recurse into it.
  */
 static enum path_treatment treat_directory(struct dir_struct *dir,
@@ -1834,7 +1872,7 @@
 		return path_recurse;
 	}
 
-	/* This is the "show_other_directories" case */
+	assert(dir->flags & DIR_SHOW_OTHER_DIRECTORIES);
 
 	/*
 	 * If we have a pathspec which could match something _below_ this
@@ -1845,27 +1883,42 @@
 	if (matches_how == MATCHED_RECURSIVELY_LEADING_PATHSPEC)
 		return path_recurse;
 
+	/* Special cases for where this directory is excluded/ignored */
+	if (excluded) {
+		/*
+		 * If DIR_SHOW_OTHER_DIRECTORIES is set and we're not
+		 * hiding empty directories, there is no need to
+		 * recurse into an ignored directory.
+		 */
+		if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
+			return path_excluded;
+
+		/*
+		 * Even if we are hiding empty directories, we can still avoid
+		 * recursing into ignored directories for DIR_SHOW_IGNORED_TOO
+		 * if DIR_SHOW_IGNORED_TOO_MODE_MATCHING is also set.
+		 */
+		if ((dir->flags & DIR_SHOW_IGNORED_TOO) &&
+		    (dir->flags & DIR_SHOW_IGNORED_TOO_MODE_MATCHING))
+			return path_excluded;
+	}
+
 	/*
-	 * Other than the path_recurse case immediately above, we only need
-	 * to recurse into untracked/ignored directories if either of the
-	 * following bits is set:
-	 *   - DIR_SHOW_IGNORED_TOO (because then we need to determine if
-	 *                           there are ignored entries below)
+	 * Other than the path_recurse case above, we only need to
+	 * recurse into untracked directories if any of the following
+	 * bits is set:
+	 *   - DIR_SHOW_IGNORED (because then we need to determine if
+	 *                       there are ignored entries below)
+	 *   - DIR_SHOW_IGNORED_TOO (same as above)
 	 *   - DIR_HIDE_EMPTY_DIRECTORIES (because we have to determine if
 	 *                                 the directory is empty)
 	 */
-	if (!(dir->flags & (DIR_SHOW_IGNORED_TOO | DIR_HIDE_EMPTY_DIRECTORIES)))
-		return excluded ? path_excluded : path_untracked;
-
-	/*
-	 * ...and even if DIR_SHOW_IGNORED_TOO is set, we can still avoid
-	 * recursing into ignored directories if the path is excluded and
-	 * DIR_SHOW_IGNORED_TOO_MODE_MATCHING is also set.
-	 */
-	if (excluded &&
-	    (dir->flags & DIR_SHOW_IGNORED_TOO) &&
-	    (dir->flags & DIR_SHOW_IGNORED_TOO_MODE_MATCHING))
-		return path_excluded;
+	if (!excluded &&
+	    !(dir->flags & (DIR_SHOW_IGNORED |
+			    DIR_SHOW_IGNORED_TOO |
+			    DIR_HIDE_EMPTY_DIRECTORIES))) {
+		return path_untracked;
+	}
 
 	/*
 	 * Even if we don't want to know all the paths under an untracked or
@@ -2317,7 +2370,7 @@
 	struct dirent *de;
 
 	if (cdir->fdir) {
-		de = readdir(cdir->fdir);
+		de = readdir_skip_dot_and_dotdot(cdir->fdir);
 		if (!de) {
 			cdir->d_name = NULL;
 			cdir->d_type = DT_UNKNOWN;
@@ -2431,6 +2484,7 @@
 
 	if (open_cached_dir(&cdir, dir, untracked, istate, &path, check_only))
 		goto out;
+	dir->visited_directories++;
 
 	if (untracked)
 		untracked->check_only = !!check_only;
@@ -2439,6 +2493,7 @@
 		/* check how the file or directory should be treated */
 		state = treat_path(dir, untracked, &cdir, istate, &path,
 				   baselen, pathspec);
+		dir->visited_paths++;
 
 		if (state > dir_state)
 			dir_state = state;
@@ -2730,11 +2785,8 @@
 		return NULL;
 	}
 
-	if (!dir->untracked->root) {
-		const int len = sizeof(*dir->untracked->root);
-		dir->untracked->root = xmalloc(len);
-		memset(dir->untracked->root, 0, len);
-	}
+	if (!dir->untracked->root)
+		FLEX_ALLOC_STR(dir->untracked->root, name, "");
 
 	/* Validate $GIT_DIR/info/exclude and core.excludesfile */
 	root = dir->untracked->root;
@@ -2754,15 +2806,53 @@
 	return root;
 }
 
+static void emit_traversal_statistics(struct dir_struct *dir,
+				      struct repository *repo,
+				      const char *path,
+				      int path_len)
+{
+	if (!trace2_is_enabled())
+		return;
+
+	if (!path_len) {
+		trace2_data_string("read_directory", repo, "path", "");
+	} else {
+		struct strbuf tmp = STRBUF_INIT;
+		strbuf_add(&tmp, path, path_len);
+		trace2_data_string("read_directory", repo, "path", tmp.buf);
+		strbuf_release(&tmp);
+	}
+
+	trace2_data_intmax("read_directory", repo,
+			   "directories-visited", dir->visited_directories);
+	trace2_data_intmax("read_directory", repo,
+			   "paths-visited", dir->visited_paths);
+
+	if (!dir->untracked)
+		return;
+	trace2_data_intmax("read_directory", repo,
+			   "node-creation", dir->untracked->dir_created);
+	trace2_data_intmax("read_directory", repo,
+			   "gitignore-invalidation",
+			   dir->untracked->gitignore_invalidated);
+	trace2_data_intmax("read_directory", repo,
+			   "directory-invalidation",
+			   dir->untracked->dir_invalidated);
+	trace2_data_intmax("read_directory", repo,
+			   "opendir", dir->untracked->dir_opened);
+}
+
 int read_directory(struct dir_struct *dir, struct index_state *istate,
 		   const char *path, int len, const struct pathspec *pathspec)
 {
 	struct untracked_cache_dir *untracked;
 
-	trace_performance_enter();
+	trace2_region_enter("dir", "read_directory", istate->repo);
+	dir->visited_paths = 0;
+	dir->visited_directories = 0;
 
 	if (has_symlink_leading_path(path, len)) {
-		trace_performance_leave("read directory %.*s", len, path);
+		trace2_region_leave("dir", "read_directory", istate->repo);
 		return dir->nr;
 	}
 
@@ -2778,23 +2868,15 @@
 	QSORT(dir->entries, dir->nr, cmp_dir_entry);
 	QSORT(dir->ignored, dir->ignored_nr, cmp_dir_entry);
 
-	trace_performance_leave("read directory %.*s", len, path);
+	emit_traversal_statistics(dir, istate->repo, path, len);
+
+	trace2_region_leave("dir", "read_directory", istate->repo);
 	if (dir->untracked) {
 		static int force_untracked_cache = -1;
-		static struct trace_key trace_untracked_stats = TRACE_KEY_INIT(UNTRACKED_STATS);
 
 		if (force_untracked_cache < 0)
 			force_untracked_cache =
 				git_env_bool("GIT_FORCE_UNTRACKED_CACHE", 0);
-		trace_printf_key(&trace_untracked_stats,
-				 "node creation: %u\n"
-				 "gitignore invalidation: %u\n"
-				 "directory invalidation: %u\n"
-				 "opendir: %u\n",
-				 dir->untracked->dir_created,
-				 dir->untracked->gitignore_invalidated,
-				 dir->untracked->dir_invalidated,
-				 dir->untracked->dir_opened);
 		if (force_untracked_cache &&
 			dir->untracked == istate->untracked &&
 		    (dir->untracked->dir_opened ||
@@ -2805,6 +2887,7 @@
 			FREE_AND_NULL(dir->untracked);
 		}
 	}
+
 	return dir->nr;
 }
 
@@ -2886,11 +2969,9 @@
 	if (!dir)
 		return 0;
 
-	while ((e = readdir(dir)) != NULL)
-		if (!is_dot_or_dotdot(e->d_name)) {
-			ret = 0;
-			break;
-		}
+	e = readdir_skip_dot_and_dotdot(dir);
+	if (e)
+		ret = 0;
 
 	closedir(dir);
 	return ret;
@@ -2930,10 +3011,8 @@
 	strbuf_complete(path, '/');
 
 	len = path->len;
-	while ((e = readdir(dir)) != NULL) {
+	while ((e = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 		struct stat st;
-		if (is_dot_or_dotdot(e->d_name))
-			continue;
 
 		strbuf_setlen(path, len);
 		strbuf_addstr(path, e->d_name);
@@ -3009,7 +3088,7 @@
 	char *sparse_filename = get_sparse_checkout_filename();
 
 	pl->use_cone_patterns = core_sparse_checkout_cone;
-	res = add_patterns_from_file_to_list(sparse_filename, "", 0, pl, NULL);
+	res = add_patterns_from_file_to_list(sparse_filename, "", 0, pl, NULL, 0);
 
 	free(sparse_filename);
 	return res;
@@ -3044,6 +3123,7 @@
 	struct exclude_list_group *group;
 	struct pattern_list *pl;
 	struct exclude_stack *stk;
+	struct dir_struct new = DIR_INIT;
 
 	for (i = EXC_CMDL; i <= EXC_FILE; i++) {
 		group = &dir->exclude_list_group[i];
@@ -3071,7 +3151,7 @@
 	}
 	strbuf_release(&dir->basebuf);
 
-	dir_init(dir);
+	memcpy(dir, &new, sizeof(*dir));
 }
 
 struct ondisk_untracked_cache {
@@ -3165,7 +3245,7 @@
 	int varint_len;
 	const unsigned hashsz = the_hash_algo->rawsz;
 
-	ouc = xcalloc(1, sizeof(*ouc));
+	CALLOC_ARRAY(ouc, 1);
 	stat_data_to_disk(&ouc->info_exclude_stat, &untracked->ss_info_exclude.stat);
 	stat_data_to_disk(&ouc->excludes_file_stat, &untracked->ss_excludes_file.stat);
 	ouc->dir_flags = htonl(untracked->dir_flags);
@@ -3338,7 +3418,7 @@
 		rd->data = rd->end + 1;
 		return;
 	}
-	hashcpy(ud->exclude_oid.hash, rd->data);
+	oidread(&ud->exclude_oid, rd->data);
 	rd->data += the_hash_algo->rawsz;
 }
 
@@ -3346,7 +3426,7 @@
 			  const unsigned char *sha1)
 {
 	stat_data_from_disk(&oid_stat->stat, data);
-	hashcpy(oid_stat->oid.hash, sha1);
+	oidread(&oid_stat->oid, sha1);
 	oid_stat->valid = 1;
 }
 
@@ -3376,7 +3456,7 @@
 	if (next + exclude_per_dir_offset + 1 > end)
 		return NULL;
 
-	uc = xcalloc(1, sizeof(*uc));
+	CALLOC_ARRAY(uc, 1);
 	strbuf_init(&uc->ident, ident_len);
 	strbuf_add(&uc->ident, ident, ident_len);
 	load_oid_stat(&uc->ss_info_exclude,
@@ -3536,6 +3616,8 @@
 	if (repo_read_index(&subrepo) < 0)
 		die(_("index file corrupt in repo %s"), subrepo.gitdir);
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(subrepo.index);
 	for (i = 0; i < subrepo.index->cache_nr; i++) {
 		const struct cache_entry *ce = subrepo.index->cache[i];
 
@@ -3550,7 +3632,7 @@
 			 */
 			i++;
 
-		sub = submodule_from_path(&subrepo, &null_oid, ce->name);
+		sub = submodule_from_path(&subrepo, null_oid(), ce->name);
 		if (!sub || !is_submodule_active(&subrepo, ce->name))
 			/* .gitmodules broken or inactive sub */
 			continue;
diff --git a/dir.h b/dir.h
index facfae4..b3e1a54a 100644
--- a/dir.h
+++ b/dir.h
@@ -336,8 +336,16 @@
 	struct oid_stat ss_info_exclude;
 	struct oid_stat ss_excludes_file;
 	unsigned unmanaged_exclude_files;
+
+	/* Stats about the traversal */
+	unsigned visited_paths;
+	unsigned visited_directories;
 };
 
+#define DIR_INIT { 0 }
+
+struct dirent *readdir_skip_dot_and_dotdot(DIR *dirp);
+
 /*Count the number of slashes for string s*/
 int count_slashes(const char *s);
 
@@ -354,15 +362,13 @@
 int simple_length(const char *match);
 int no_wildcard(const char *string);
 char *common_prefix(const struct pathspec *pathspec);
-int match_pathspec(const struct index_state *istate,
+int match_pathspec(struct index_state *istate,
 		   const struct pathspec *pathspec,
 		   const char *name, int namelen,
 		   int prefix, char *seen, int is_dir);
 int report_path_error(const char *ps_matched, const struct pathspec *pathspec);
 int within_depth(const char *name, int namelen, int depth, int max_depth);
 
-void dir_init(struct dir_struct *dir);
-
 int fill_directory(struct dir_struct *dir,
 		   struct index_state *istate,
 		   const struct pathspec *pathspec);
@@ -420,7 +426,8 @@
 struct pattern_list *add_pattern_list(struct dir_struct *dir,
 				      int group_type, const char *src);
 int add_patterns_from_file_to_list(const char *fname, const char *base, int baselen,
-				   struct pattern_list *pl, struct  index_state *istate);
+				   struct pattern_list *pl, struct index_state *istate,
+				   unsigned flags);
 void add_patterns_from_file(struct dir_struct *, const char *fname);
 int add_patterns_from_blob_to_list(struct object_id *oid,
 				   const char *base, int baselen,
@@ -482,7 +489,9 @@
 int remove_path(const char *path);
 
 int fspathcmp(const char *a, const char *b);
+int fspatheq(const char *a, const char *b);
 int fspathncmp(const char *a, const char *b, size_t count);
+unsigned int fspathhash(const char *str);
 
 /*
  * The prefix part of pattern must not contains wildcards.
@@ -492,12 +501,12 @@
 		const char *pattern, const char *string,
 		int prefix);
 
-int submodule_path_match(const struct index_state *istate,
+int submodule_path_match(struct index_state *istate,
 			 const struct pathspec *ps,
 			 const char *submodule_name,
 			 char *seen);
 
-static inline int ce_path_match(const struct index_state *istate,
+static inline int ce_path_match(struct index_state *istate,
 				const struct cache_entry *ce,
 				const struct pathspec *pathspec,
 				char *seen)
@@ -506,7 +515,7 @@
 			      S_ISDIR(ce->ce_mode) || S_ISGITLINK(ce->ce_mode));
 }
 
-static inline int dir_path_match(const struct index_state *istate,
+static inline int dir_path_match(struct index_state *istate,
 				 const struct dir_entry *ent,
 				 const struct pathspec *pathspec,
 				 int prefix, char *seen)
diff --git a/entry.c b/entry.c
index a0532f1..125fabd 100644
--- a/entry.c
+++ b/entry.c
@@ -6,6 +6,8 @@
 #include "submodule.h"
 #include "progress.h"
 #include "fsmonitor.h"
+#include "entry.h"
+#include "parallel-checkout.h"
 
 static void create_directories(const char *path, int path_len,
 			       const struct checkout *state)
@@ -56,12 +58,9 @@
 
 	if (!dir)
 		die_errno("cannot opendir '%s'", path->buf);
-	while ((de = readdir(dir)) != NULL) {
+	while ((de = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 		struct stat st;
 
-		if (is_dot_or_dotdot(de->d_name))
-			continue;
-
 		strbuf_addch(path, '/');
 		strbuf_addstr(path, de->d_name);
 		if (lstat(path->buf, &st))
@@ -83,7 +82,7 @@
 	return open(path, O_WRONLY | O_CREAT | O_EXCL, mode);
 }
 
-static void *read_blob_entry(const struct cache_entry *ce, unsigned long *size)
+void *read_blob_entry(const struct cache_entry *ce, unsigned long *size)
 {
 	enum object_type type;
 	void *blob_data = read_object_file(&ce->oid, &type, size);
@@ -108,7 +107,7 @@
 	}
 }
 
-static int fstat_output(int fd, const struct checkout *state, struct stat *st)
+int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st)
 {
 	/* use fstat() only when path == ce->name */
 	if (fstat_is_reliable() &&
@@ -131,7 +130,7 @@
 		return -1;
 
 	result |= stream_blob_to_fd(fd, &ce->oid, filter, 1);
-	*fstat_done = fstat_output(fd, state, statbuf);
+	*fstat_done = fstat_checkout_output(fd, state, statbuf);
 	result |= close(fd);
 
 	if (result)
@@ -144,8 +143,8 @@
 	if (!state->delayed_checkout) {
 		state->delayed_checkout = xmalloc(sizeof(*state->delayed_checkout));
 		state->delayed_checkout->state = CE_CAN_DELAY;
-		string_list_init(&state->delayed_checkout->filters, 0);
-		string_list_init(&state->delayed_checkout->paths, 0);
+		string_list_init_nodup(&state->delayed_checkout->filters);
+		string_list_init_nodup(&state->delayed_checkout->paths);
 	}
 }
 
@@ -250,8 +249,21 @@
 	return errs;
 }
 
-static int write_entry(struct cache_entry *ce,
-		       char *path, const struct checkout *state, int to_tempfile)
+void update_ce_after_write(const struct checkout *state, struct cache_entry *ce,
+			   struct stat *st)
+{
+	if (state->refresh_cache) {
+		assert(state->istate);
+		fill_stat_cache_info(state->istate, ce, st);
+		ce->ce_flags |= CE_UPDATE_IN_BASE;
+		mark_fsmonitor_invalid(state->istate, ce);
+		state->istate->cache_changed |= CE_ENTRY_CHANGED;
+	}
+}
+
+/* Note: ca is used (and required) iff the entry refers to a regular file. */
+static int write_entry(struct cache_entry *ce, char *path, struct conv_attrs *ca,
+		       const struct checkout *state, int to_tempfile)
 {
 	unsigned int ce_mode_s_ifmt = ce->ce_mode & S_IFMT;
 	struct delayed_checkout *dco = state->delayed_checkout;
@@ -268,8 +280,7 @@
 	clone_checkout_metadata(&meta, &state->meta, &ce->oid);
 
 	if (ce_mode_s_ifmt == S_IFREG) {
-		struct stream_filter *filter = get_stream_filter(state->istate, ce->name,
-								 &ce->oid);
+		struct stream_filter *filter = get_stream_filter_ca(ca, &ce->oid);
 		if (filter &&
 		    !streaming_write_entry(ce, path, filter,
 					   state, to_tempfile,
@@ -282,7 +293,7 @@
 		new_blob = read_blob_entry(ce, &size);
 		if (!new_blob)
 			return error("unable to read sha1 file of %s (%s)",
-				     path, oid_to_hex(&ce->oid));
+				     ce->name, oid_to_hex(&ce->oid));
 
 		/*
 		 * We can't make a real symlink; write out a regular file entry
@@ -309,21 +320,24 @@
 			new_blob = read_blob_entry(ce, &size);
 			if (!new_blob)
 				return error("unable to read sha1 file of %s (%s)",
-					     path, oid_to_hex(&ce->oid));
+					     ce->name, oid_to_hex(&ce->oid));
 		}
 
 		/*
 		 * Convert from git internal format to working tree format
 		 */
 		if (dco && dco->state != CE_NO_DELAY) {
-			ret = async_convert_to_working_tree(state->istate, ce->name, new_blob,
-							    size, &buf, &meta, dco);
+			ret = async_convert_to_working_tree_ca(ca, ce->name,
+							       new_blob, size,
+							       &buf, &meta, dco);
 			if (ret && string_list_has_string(&dco->paths, ce->name)) {
 				free(new_blob);
 				goto delayed;
 			}
-		} else
-			ret = convert_to_working_tree(state->istate, ce->name, new_blob, size, &buf, &meta);
+		} else {
+			ret = convert_to_working_tree_ca(ca, ce->name, new_blob,
+							 size, &buf, &meta);
+		}
 
 		if (ret) {
 			free(new_blob);
@@ -345,7 +359,7 @@
 
 		wrote = write_in_full(fd, new_blob, size);
 		if (!to_tempfile)
-			fstat_done = fstat_output(fd, state, &st);
+			fstat_done = fstat_checkout_output(fd, state, &st);
 		close(fd);
 		free(new_blob);
 		if (wrote < 0)
@@ -354,7 +368,7 @@
 
 	case S_IFGITLINK:
 		if (to_tempfile)
-			return error("cannot create temporary submodule %s", path);
+			return error("cannot create temporary submodule %s", ce->name);
 		if (mkdir(path, 0777) < 0)
 			return error("cannot create submodule directory %s", path);
 		sub = submodule_from_ce(ce);
@@ -365,20 +379,15 @@
 		break;
 
 	default:
-		return error("unknown file mode for %s in index", path);
+		return error("unknown file mode for %s in index", ce->name);
 	}
 
 finish:
 	if (state->refresh_cache) {
-		assert(state->istate);
-		if (!fstat_done)
-			if (lstat(ce->name, &st) < 0)
-				return error_errno("unable to stat just-written file %s",
-						   ce->name);
-		fill_stat_cache_info(state->istate, ce, &st);
-		ce->ce_flags |= CE_UPDATE_IN_BASE;
-		mark_fsmonitor_invalid(state->istate, ce);
-		state->istate->cache_changed |= CE_ENTRY_CHANGED;
+		if (!fstat_done && lstat(ce->name, &st) < 0)
+			return error_errno("unable to stat just-written file %s",
+					   ce->name);
+		update_ce_after_write(state, ce , &st);
 	}
 delayed:
 	return 0;
@@ -412,11 +421,22 @@
 
 	ce->ce_flags |= CE_MATCHED;
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(state->istate);
 	for (i = 0; i < state->istate->cache_nr; i++) {
 		struct cache_entry *dup = state->istate->cache[i];
 
-		if (dup == ce)
-			break;
+		if (dup == ce) {
+			/*
+			 * Parallel checkout doesn't create the files in index
+			 * order. So the other side of the collision may appear
+			 * after the given cache_entry in the array.
+			 */
+			if (parallel_checkout_status() == PC_RUNNING)
+				continue;
+			else
+				break;
+		}
 
 		if (dup->ce_flags & (CE_MATCHED | CE_VALID | CE_SKIP_WORKTREE))
 			continue;
@@ -429,19 +449,13 @@
 	}
 }
 
-/*
- * Write the contents from ce out to the working tree.
- *
- * When topath[] is not NULL, instead of writing to the working tree
- * file named by ce, a temporary file is created by this function and
- * its name is returned in topath[], which must be able to hold at
- * least TEMPORARY_FILENAME_LENGTH bytes long.
- */
-int checkout_entry(struct cache_entry *ce, const struct checkout *state,
-		   char *topath, int *nr_checkouts)
+int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
+		      const struct checkout *state, char *topath,
+		      int *nr_checkouts)
 {
 	static struct strbuf path = STRBUF_INIT;
 	struct stat st;
+	struct conv_attrs ca_buf;
 
 	if (ce->ce_flags & CE_WT_REMOVE) {
 		if (topath)
@@ -454,8 +468,13 @@
 		return 0;
 	}
 
-	if (topath)
-		return write_entry(ce, topath, state, 1);
+	if (topath) {
+		if (S_ISREG(ce->ce_mode) && !ca) {
+			convert_attrs(state->istate, &ca_buf, ce->name);
+			ca = &ca_buf;
+		}
+		return write_entry(ce, topath, ca, state, 1);
+	}
 
 	strbuf_reset(&path);
 	strbuf_add(&path, state->base_dir, state->base_dir_len);
@@ -517,9 +536,19 @@
 		return 0;
 
 	create_directories(path.buf, path.len, state);
+
 	if (nr_checkouts)
 		(*nr_checkouts)++;
-	return write_entry(ce, path.buf, state, 0);
+
+	if (S_ISREG(ce->ce_mode) && !ca) {
+		convert_attrs(state->istate, &ca_buf, ce->name);
+		ca = &ca_buf;
+	}
+
+	if (!enqueue_checkout(ce, ca))
+		return 0;
+
+	return write_entry(ce, path.buf, ca, state, 0);
 }
 
 void unlink_entry(const struct cache_entry *ce)
@@ -530,7 +559,7 @@
 		submodule_move_head(ce->name, "HEAD", NULL,
 				    SUBMODULE_MOVE_HEAD_FORCE);
 	}
-	if (!check_leading_path(ce->name, ce_namelen(ce)))
+	if (check_leading_path(ce->name, ce_namelen(ce), 1) >= 0)
 		return;
 	if (remove_or_warn(ce->ce_mode, ce->name))
 		return;
diff --git a/entry.h b/entry.h
new file mode 100644
index 0000000..b8c0e17
--- /dev/null
+++ b/entry.h
@@ -0,0 +1,59 @@
+#ifndef ENTRY_H
+#define ENTRY_H
+
+#include "cache.h"
+#include "convert.h"
+
+struct checkout {
+	struct index_state *istate;
+	const char *base_dir;
+	int base_dir_len;
+	struct delayed_checkout *delayed_checkout;
+	struct checkout_metadata meta;
+	unsigned force:1,
+		 quiet:1,
+		 not_new:1,
+		 clone:1,
+		 refresh_cache:1;
+};
+#define CHECKOUT_INIT { NULL, "" }
+
+#define TEMPORARY_FILENAME_LENGTH 25
+/*
+ * Write the contents from ce out to the working tree.
+ *
+ * When topath[] is not NULL, instead of writing to the working tree
+ * file named by ce, a temporary file is created by this function and
+ * its name is returned in topath[], which must be able to hold at
+ * least TEMPORARY_FILENAME_LENGTH bytes long.
+ *
+ * With checkout_entry_ca(), callers can optionally pass a preloaded
+ * conv_attrs struct (to avoid reloading it), when ce refers to a
+ * regular file. If ca is NULL, the attributes will be loaded
+ * internally when (and if) needed.
+ */
+int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
+		      const struct checkout *state, char *topath,
+		      int *nr_checkouts);
+static inline int checkout_entry(struct cache_entry *ce,
+				 const struct checkout *state, char *topath,
+				 int *nr_checkouts)
+{
+	return checkout_entry_ca(ce, NULL, state, topath, nr_checkouts);
+}
+
+void enable_delayed_checkout(struct checkout *state);
+int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
+
+/*
+ * Unlink the last component and schedule the leading directories for
+ * removal, such that empty directories get removed.
+ */
+void unlink_entry(const struct cache_entry *ce);
+
+void *read_blob_entry(const struct cache_entry *ce, unsigned long *size);
+int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st);
+void update_ce_after_write(const struct checkout *state, struct cache_entry *ce,
+			   struct stat *st);
+
+#endif /* ENTRY_H */
diff --git a/ewah/bitmap.c b/ewah/bitmap.c
index 0d31cdc..38a47c4 100644
--- a/ewah/bitmap.c
+++ b/ewah/bitmap.c
@@ -25,7 +25,7 @@
 struct bitmap *bitmap_word_alloc(size_t word_alloc)
 {
 	struct bitmap *bitmap = xmalloc(sizeof(struct bitmap));
-	bitmap->words = xcalloc(word_alloc, sizeof(eword_t));
+	CALLOC_ARRAY(bitmap->words, word_alloc);
 	bitmap->word_alloc = word_alloc;
 	return bitmap;
 }
diff --git a/fetch-pack.c b/fetch-pack.c
index 1eaedcb..b0c7be7 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -23,6 +23,8 @@
 #include "fetch-negotiator.h"
 #include "fsck.h"
 #include "shallow.h"
+#include "commit-reach.h"
+#include "commit-graph.h"
 
 static int transfer_unpack_limit = -1;
 static int fetch_unpack_limit = -1;
@@ -38,12 +40,15 @@
 static int advertise_sid;
 static struct shallow_lock shallow_lock;
 static const char *alternate_shallow_file;
+static struct fsck_options fsck_options = FSCK_OPTIONS_MISSING_GITMODULES;
 static struct strbuf fsck_msg_types = STRBUF_INIT;
 static struct string_list uri_protocols = STRING_LIST_INIT_DUP;
 
 /* Remember to update object flag allocation in object.h */
 #define COMPLETE	(1U << 0)
 #define ALTERNATE	(1U << 1)
+#define COMMON		(1U << 6)
+#define REACH_SCRATCH	(1U << 7)
 
 /*
  * After sending this many "have"s if we do not get any new ACK , we
@@ -790,14 +795,36 @@
 	strbuf_release(&promisor_name);
 }
 
+static void parse_gitmodules_oids(int fd, struct oidset *gitmodules_oids)
+{
+	int len = the_hash_algo->hexsz + 1; /* hash + NL */
+
+	do {
+		char hex_hash[GIT_MAX_HEXSZ + 1];
+		int read_len = read_in_full(fd, hex_hash, len);
+		struct object_id oid;
+		const char *end;
+
+		if (!read_len)
+			return;
+		if (read_len != len)
+			die("invalid length read %d", read_len);
+		if (parse_oid_hex(hex_hash, &oid, &end) || *end != '\n')
+			die("invalid hash");
+		oidset_insert(gitmodules_oids, &oid);
+	} while (1);
+}
+
 /*
- * Pass 1 as "only_packfile" if the pack received is the only pack in this
- * fetch request (that is, if there were no packfile URIs provided).
+ * If packfile URIs were provided, pass a non-NULL pointer to index_pack_args.
+ * The strings to pass as the --index-pack-arg arguments to http-fetch will be
+ * stored there. (It must be freed by the caller.)
  */
 static int get_pack(struct fetch_pack_args *args,
 		    int xd[2], struct string_list *pack_lockfiles,
-		    int only_packfile,
-		    struct ref **sought, int nr_sought)
+		    struct strvec *index_pack_args,
+		    struct ref **sought, int nr_sought,
+		    struct oidset *gitmodules_oids)
 {
 	struct async demux;
 	int do_keep = args->keep_pack;
@@ -805,6 +832,7 @@
 	struct pack_header header;
 	int pass_header = 0;
 	struct child_process cmd = CHILD_PROCESS_INIT;
+	int fsck_objects = 0;
 	int ret;
 
 	memset(&demux, 0, sizeof(demux));
@@ -823,7 +851,7 @@
 	else
 		demux.out = xd[0];
 
-	if (!args->keep_pack && unpack_limit) {
+	if (!args->keep_pack && unpack_limit && !index_pack_args) {
 
 		if (read_pack_header(demux.out, &header))
 			die(_("protocol error: bad pack header"));
@@ -839,8 +867,15 @@
 		strvec_push(&cmd.args, alternate_shallow_file);
 	}
 
-	if (do_keep || args->from_promisor) {
-		if (pack_lockfiles)
+	if (fetch_fsck_objects >= 0
+	    ? fetch_fsck_objects
+	    : transfer_fsck_objects >= 0
+	    ? transfer_fsck_objects
+	    : 0)
+		fsck_objects = 1;
+
+	if (do_keep || args->from_promisor || index_pack_args || fsck_objects) {
+		if (pack_lockfiles || fsck_objects)
 			cmd.out = -1;
 		cmd_name = "index-pack";
 		strvec_push(&cmd.args, cmd_name);
@@ -849,7 +884,7 @@
 			strvec_push(&cmd.args, "-v");
 		if (args->use_thin_pack)
 			strvec_push(&cmd.args, "--fix-thin");
-		if (do_keep && (args->lock_pack || unpack_limit)) {
+		if ((do_keep || index_pack_args) && (args->lock_pack || unpack_limit)) {
 			char hostname[HOST_NAME_MAX + 1];
 			if (xgethostname(hostname, sizeof(hostname)))
 				xsnprintf(hostname, sizeof(hostname), "localhost");
@@ -857,7 +892,7 @@
 				     "--keep=fetch-pack %"PRIuMAX " on %s",
 				     (uintmax_t)getpid(), hostname);
 		}
-		if (only_packfile && args->check_self_contained_and_connected)
+		if (!index_pack_args && args->check_self_contained_and_connected)
 			strvec_push(&cmd.args, "--check-self-contained-and-connected");
 		else
 			/*
@@ -890,12 +925,8 @@
 		strvec_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
 			     ntohl(header.hdr_version),
 				 ntohl(header.hdr_entries));
-	if (fetch_fsck_objects >= 0
-	    ? fetch_fsck_objects
-	    : transfer_fsck_objects >= 0
-	    ? transfer_fsck_objects
-	    : 0) {
-		if (args->from_promisor || !only_packfile)
+	if (fsck_objects) {
+		if (args->from_promisor || index_pack_args)
 			/*
 			 * We cannot use --strict in index-pack because it
 			 * checks both broken objects and links, but we only
@@ -907,14 +938,26 @@
 				     fsck_msg_types.buf);
 	}
 
+	if (index_pack_args) {
+		int i;
+
+		for (i = 0; i < cmd.args.nr; i++)
+			strvec_push(index_pack_args, cmd.args.v[i]);
+	}
+
 	cmd.in = demux.out;
 	cmd.git_cmd = 1;
 	if (start_command(&cmd))
 		die(_("fetch-pack: unable to fork off %s"), cmd_name);
-	if (do_keep && pack_lockfiles) {
-		char *pack_lockfile = index_pack_lockfile(cmd.out);
+	if (do_keep && (pack_lockfiles || fsck_objects)) {
+		int is_well_formed;
+		char *pack_lockfile = index_pack_lockfile(cmd.out, &is_well_formed);
+
+		if (!is_well_formed)
+			die(_("fetch-pack: invalid index-pack output"));
 		if (pack_lockfile)
 			string_list_append_nodup(pack_lockfiles, pack_lockfile);
+		parse_gitmodules_oids(cmd.out, gitmodules_oids);
 		close(cmd.out);
 	}
 
@@ -1074,12 +1117,17 @@
 	if (args->deepen)
 		setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
 					NULL);
-	else if (si->nr_ours || si->nr_theirs)
+	else if (si->nr_ours || si->nr_theirs) {
+		if (args->reject_shallow_remote)
+			die(_("source repository is shallow, reject to clone."));
 		alternate_shallow_file = setup_temporary_shallow(si->shallow);
-	else
+	} else
 		alternate_shallow_file = NULL;
-	if (get_pack(args, fd, pack_lockfiles, 1, sought, nr_sought))
+	if (get_pack(args, fd, pack_lockfiles, NULL, sought, nr_sought,
+		     &fsck_options.gitmodules_found))
 		die(_("git fetch-pack: fetch failed."));
+	if (fsck_finish(&fsck_options))
+		die("fsck failed");
 
  all_done:
 	if (negotiator)
@@ -1151,11 +1199,9 @@
 }
 
 static int add_haves(struct fetch_negotiator *negotiator,
-		     int seen_ack,
 		     struct strbuf *req_buf,
-		     int *haves_to_send, int *in_vain)
+		     int *haves_to_send)
 {
-	int ret = 0;
 	int haves_added = 0;
 	const struct object_id *oid;
 
@@ -1165,17 +1211,42 @@
 			break;
 	}
 
-	*in_vain += haves_added;
-	if (!haves_added || (seen_ack && *in_vain >= MAX_IN_VAIN)) {
-		/* Send Done */
-		packet_buf_write(req_buf, "done\n");
-		ret = 1;
-	}
-
 	/* Increase haves to send on next round */
 	*haves_to_send = next_flush(1, *haves_to_send);
 
-	return ret;
+	return haves_added;
+}
+
+static void write_fetch_command_and_capabilities(struct strbuf *req_buf,
+						 const struct string_list *server_options)
+{
+	const char *hash_name;
+
+	if (server_supports_v2("fetch", 1))
+		packet_buf_write(req_buf, "command=fetch");
+	if (server_supports_v2("agent", 0))
+		packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
+	if (advertise_sid && server_supports_v2("session-id", 0))
+		packet_buf_write(req_buf, "session-id=%s", trace2_session_id());
+	if (server_options && server_options->nr &&
+	    server_supports_v2("server-option", 1)) {
+		int i;
+		for (i = 0; i < server_options->nr; i++)
+			packet_buf_write(req_buf, "server-option=%s",
+					 server_options->items[i].string);
+	}
+
+	if (server_feature_v2("object-format", &hash_name)) {
+		int hash_algo = hash_algo_by_name(hash_name);
+		if (hash_algo_by_ptr(the_hash_algo) != hash_algo)
+			die(_("mismatched algorithms: client %s; server %s"),
+			    the_hash_algo->name, hash_name);
+		packet_buf_write(req_buf, "object-format=%s", the_hash_algo->name);
+	} else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1) {
+		die(_("the server does not support algorithm '%s'"),
+		    the_hash_algo->name);
+	}
+	packet_buf_delim(req_buf);
 }
 
 static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
@@ -1184,36 +1255,12 @@
 			      int *haves_to_send, int *in_vain,
 			      int sideband_all, int seen_ack)
 {
-	int ret = 0;
-	const char *hash_name;
+	int haves_added;
+	int done_sent = 0;
 	struct strbuf req_buf = STRBUF_INIT;
 
-	if (server_supports_v2("fetch", 1))
-		packet_buf_write(&req_buf, "command=fetch");
-	if (server_supports_v2("agent", 0))
-		packet_buf_write(&req_buf, "agent=%s", git_user_agent_sanitized());
-	if (advertise_sid && server_supports_v2("session-id", 0))
-		packet_buf_write(&req_buf, "session-id=%s", trace2_session_id());
-	if (args->server_options && args->server_options->nr &&
-	    server_supports_v2("server-option", 1)) {
-		int i;
-		for (i = 0; i < args->server_options->nr; i++)
-			packet_buf_write(&req_buf, "server-option=%s",
-					 args->server_options->items[i].string);
-	}
+	write_fetch_command_and_capabilities(&req_buf, args->server_options);
 
-	if (server_feature_v2("object-format", &hash_name)) {
-		int hash_algo = hash_algo_by_name(hash_name);
-		if (hash_algo_by_ptr(the_hash_algo) != hash_algo)
-			die(_("mismatched algorithms: client %s; server %s"),
-			    the_hash_algo->name, hash_name);
-		packet_write_fmt(fd_out, "object-format=%s", the_hash_algo->name);
-	} else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1) {
-		die(_("the server does not support algorithm '%s'"),
-		    the_hash_algo->name);
-	}
-
-	packet_buf_delim(&req_buf);
 	if (args->use_thin_pack)
 		packet_buf_write(&req_buf, "thin-pack");
 	if (args->no_progress)
@@ -1268,9 +1315,13 @@
 	/* Add all of the common commits we've found in previous rounds */
 	add_common(&req_buf, common);
 
-	/* Add initial haves */
-	ret = add_haves(negotiator, seen_ack, &req_buf,
-			haves_to_send, in_vain);
+	haves_added = add_haves(negotiator, &req_buf, haves_to_send);
+	*in_vain += haves_added;
+	if (!haves_added || (seen_ack && *in_vain >= MAX_IN_VAIN)) {
+		/* Send Done */
+		packet_buf_write(&req_buf, "done\n");
+		done_sent = 1;
+	}
 
 	/* Send request */
 	packet_buf_flush(&req_buf);
@@ -1278,7 +1329,7 @@
 		die_errno(_("unable to write request to remote"));
 
 	strbuf_release(&req_buf);
-	return ret;
+	return done_sent;
 }
 
 /*
@@ -1307,35 +1358,11 @@
 	return ret;
 }
 
-enum common_found {
-	/*
-	 * No commit was found to be possessed by both the client and the
-	 * server, and "ready" was not received.
-	 */
-	NO_COMMON_FOUND,
-
-	/*
-	 * At least one commit was found to be possessed by both the client and
-	 * the server, and "ready" was not received.
-	 */
-	COMMON_FOUND,
-
-	/*
-	 * "ready" was received, indicating that the server is ready to send
-	 * the packfile without any further negotiation.
-	 */
-	READY
-};
-
-static enum common_found process_acks(struct fetch_negotiator *negotiator,
-				      struct packet_reader *reader,
-				      struct oidset *common)
+static int process_ack(struct fetch_negotiator *negotiator,
+		       struct packet_reader *reader,
+		       struct object_id *common_oid,
+		       int *received_ready)
 {
-	/* received */
-	int received_ready = 0;
-	int received_ack = 0;
-
-	process_section_header(reader, "acknowledgments", 0);
 	while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
 		const char *arg;
 
@@ -1343,20 +1370,17 @@
 			continue;
 
 		if (skip_prefix(reader->line, "ACK ", &arg)) {
-			struct object_id oid;
-			received_ack = 1;
-			if (!get_oid_hex(arg, &oid)) {
+			if (!get_oid_hex(arg, common_oid)) {
 				struct commit *commit;
-				oidset_insert(common, &oid);
-				commit = lookup_commit(the_repository, &oid);
+				commit = lookup_commit(the_repository, common_oid);
 				if (negotiator)
 					negotiator->ack(negotiator, commit);
 			}
-			continue;
+			return 1;
 		}
 
 		if (!strcmp(reader->line, "ready")) {
-			received_ready = 1;
+			*received_ready = 1;
 			continue;
 		}
 
@@ -1374,13 +1398,12 @@
 	 * sent. Therefore, a DELIM is expected if "ready" is sent, and a FLUSH
 	 * otherwise.
 	 */
-	if (received_ready && reader->status != PACKET_READ_DELIM)
+	if (*received_ready && reader->status != PACKET_READ_DELIM)
 		die(_("expected packfile to be sent after 'ready'"));
-	if (!received_ready && reader->status != PACKET_READ_FLUSH)
+	if (!*received_ready && reader->status != PACKET_READ_FLUSH)
 		die(_("expected no other sections to be sent after no 'ready'"));
 
-	return received_ready ? READY :
-		(received_ack ? COMMON_FOUND : NO_COMMON_FOUND);
+	return 0;
 }
 
 static void receive_shallow_info(struct fetch_pack_args *args,
@@ -1441,10 +1464,12 @@
 		 * rejected (unless --update-shallow is set); do the same.
 		 */
 		prepare_shallow_info(si, shallows);
-		if (si->nr_ours || si->nr_theirs)
+		if (si->nr_ours || si->nr_theirs) {
+			if (args->reject_shallow_remote)
+				die(_("source repository is shallow, reject to clone."));
 			alternate_shallow_file =
 				setup_temporary_shallow(si->shallow);
-		else
+		} else
 			alternate_shallow_file = NULL;
 	} else {
 		alternate_shallow_file = NULL;
@@ -1502,10 +1527,10 @@
 	FETCH_DONE,
 };
 
-static void do_check_stateless_delimiter(const struct fetch_pack_args *args,
+static void do_check_stateless_delimiter(int stateless_rpc,
 					 struct packet_reader *reader)
 {
-	check_stateless_delimiter(args->stateless_rpc, reader,
+	check_stateless_delimiter(stateless_rpc, reader,
 				  _("git fetch-pack: expected response end packet"));
 }
 
@@ -1527,8 +1552,11 @@
 	struct fetch_negotiator negotiator_alloc;
 	struct fetch_negotiator *negotiator;
 	int seen_ack = 0;
+	struct object_id common_oid;
+	int received_ready = 0;
 	struct string_list packfile_uris = STRING_LIST_INIT_DUP;
 	int i;
+	struct strvec index_pack_args = STRVEC_INIT;
 
 	negotiator = &negotiator_alloc;
 	fetch_negotiator_init(r, negotiator);
@@ -1584,22 +1612,22 @@
 			break;
 		case FETCH_PROCESS_ACKS:
 			/* Process ACKs/NAKs */
-			switch (process_acks(negotiator, &reader, &common)) {
-			case READY:
+			process_section_header(&reader, "acknowledgments", 0);
+			while (process_ack(negotiator, &reader, &common_oid,
+					   &received_ready)) {
+				in_vain = 0;
+				seen_ack = 1;
+				oidset_insert(&common, &common_oid);
+			}
+			if (received_ready) {
 				/*
 				 * Don't check for response delimiter; get_pack() will
 				 * read the rest of this response.
 				 */
 				state = FETCH_GET_PACK;
-				break;
-			case COMMON_FOUND:
-				in_vain = 0;
-				seen_ack = 1;
-				/* fallthrough */
-			case NO_COMMON_FOUND:
-				do_check_stateless_delimiter(args, &reader);
+			} else {
+				do_check_stateless_delimiter(args->stateless_rpc, &reader);
 				state = FETCH_SEND_REQUEST;
-				break;
 			}
 			break;
 		case FETCH_GET_PACK:
@@ -1617,10 +1645,20 @@
 			if (process_section_header(&reader, "packfile-uris", 1))
 				receive_packfile_uris(&reader, &packfile_uris);
 			process_section_header(&reader, "packfile", 0);
+
+			/*
+			 * this is the final request we'll make of the server;
+			 * do a half-duplex shutdown to indicate that they can
+			 * hang up as soon as the pack is sent.
+			 */
+			close(fd[1]);
+			fd[1] = -1;
+
 			if (get_pack(args, fd, pack_lockfiles,
-				     !packfile_uris.nr, sought, nr_sought))
+				     packfile_uris.nr ? &index_pack_args : NULL,
+				     sought, nr_sought, &fsck_options.gitmodules_found))
 				die(_("git fetch-pack: fetch failed."));
-			do_check_stateless_delimiter(args, &reader);
+			do_check_stateless_delimiter(args->stateless_rpc, &reader);
 
 			state = FETCH_DONE;
 			break;
@@ -1630,6 +1668,7 @@
 	}
 
 	for (i = 0; i < packfile_uris.nr; i++) {
+		int j;
 		struct child_process cmd = CHILD_PROCESS_INIT;
 		char packname[GIT_MAX_HEXSZ + 1];
 		const char *uri = packfile_uris.items[i].string +
@@ -1639,6 +1678,9 @@
 		strvec_pushf(&cmd.args, "--packfile=%.*s",
 			     (int) the_hash_algo->hexsz,
 			     packfile_uris.items[i].string);
+		for (j = 0; j < index_pack_args.nr; j++)
+			strvec_pushf(&cmd.args, "--index-pack-arg=%s",
+				     index_pack_args.v[j]);
 		strvec_push(&cmd.args, uri);
 		cmd.git_cmd = 1;
 		cmd.no_stdin = 1;
@@ -1657,6 +1699,8 @@
 
 		packname[the_hash_algo->hexsz] = '\0';
 
+		parse_gitmodules_oids(cmd.out, &fsck_options.gitmodules_found);
+
 		close(cmd.out);
 
 		if (finish_command(&cmd))
@@ -1674,6 +1718,10 @@
 						 packname));
 	}
 	string_list_clear(&packfile_uris, 0);
+	strvec_clear(&index_pack_args);
+
+	if (fsck_finish(&fsck_options))
+		die("fsck failed");
 
 	if (negotiator)
 		negotiator->release(negotiator);
@@ -1847,7 +1895,7 @@
 	 * remote is also shallow, check what ref is safe to update
 	 * without updating .git/shallow
 	 */
-	status = xcalloc(nr_sought, sizeof(*status));
+	CALLOC_ARRAY(status, nr_sought);
 	assign_shallow_commits_to_refs(si, NULL, status);
 	if (si->nr_ours || si->nr_theirs) {
 		for (i = 0; i < nr_sought; i++)
@@ -1927,6 +1975,105 @@
 	return ref_cpy;
 }
 
+static int add_to_object_array(const struct object_id *oid, void *data)
+{
+	struct object_array *a = data;
+
+	add_object_array(lookup_object(the_repository, oid), "", a);
+	return 0;
+}
+
+static void clear_common_flag(struct oidset *s)
+{
+	struct oidset_iter iter;
+	const struct object_id *oid;
+	oidset_iter_init(s, &iter);
+
+	while ((oid = oidset_iter_next(&iter))) {
+		struct object *obj = lookup_object(the_repository, oid);
+		obj->flags &= ~COMMON;
+	}
+}
+
+void negotiate_using_fetch(const struct oid_array *negotiation_tips,
+			   const struct string_list *server_options,
+			   int stateless_rpc,
+			   int fd[],
+			   struct oidset *acked_commits)
+{
+	struct fetch_negotiator negotiator;
+	struct packet_reader reader;
+	struct object_array nt_object_array = OBJECT_ARRAY_INIT;
+	struct strbuf req_buf = STRBUF_INIT;
+	int haves_to_send = INITIAL_FLUSH;
+	int in_vain = 0;
+	int seen_ack = 0;
+	int last_iteration = 0;
+	timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
+
+	fetch_negotiator_init(the_repository, &negotiator);
+	mark_tips(&negotiator, negotiation_tips);
+
+	packet_reader_init(&reader, fd[0], NULL, 0,
+			   PACKET_READ_CHOMP_NEWLINE |
+			   PACKET_READ_DIE_ON_ERR_PACKET);
+
+	oid_array_for_each((struct oid_array *) negotiation_tips,
+			   add_to_object_array,
+			   &nt_object_array);
+
+	while (!last_iteration) {
+		int haves_added;
+		struct object_id common_oid;
+		int received_ready = 0;
+
+		strbuf_reset(&req_buf);
+		write_fetch_command_and_capabilities(&req_buf, server_options);
+
+		packet_buf_write(&req_buf, "wait-for-done");
+
+		haves_added = add_haves(&negotiator, &req_buf, &haves_to_send);
+		in_vain += haves_added;
+		if (!haves_added || (seen_ack && in_vain >= MAX_IN_VAIN))
+			last_iteration = 1;
+
+		/* Send request */
+		packet_buf_flush(&req_buf);
+		if (write_in_full(fd[1], req_buf.buf, req_buf.len) < 0)
+			die_errno(_("unable to write request to remote"));
+
+		/* Process ACKs/NAKs */
+		process_section_header(&reader, "acknowledgments", 0);
+		while (process_ack(&negotiator, &reader, &common_oid,
+				   &received_ready)) {
+			struct commit *commit = lookup_commit(the_repository,
+							      &common_oid);
+			if (commit) {
+				timestamp_t generation;
+
+				parse_commit_or_die(commit);
+				commit->object.flags |= COMMON;
+				generation = commit_graph_generation(commit);
+				if (generation < min_generation)
+					min_generation = generation;
+			}
+			in_vain = 0;
+			seen_ack = 1;
+			oidset_insert(acked_commits, &common_oid);
+		}
+		if (received_ready)
+			die(_("unexpected 'ready' from remote"));
+		else
+			do_check_stateless_delimiter(stateless_rpc, &reader);
+		if (can_all_from_reach_with_flag(&nt_object_array, COMMON,
+						 REACH_SCRATCH, 0,
+						 min_generation))
+			last_iteration = 1;
+	}
+	clear_common_flag(acked_commits);
+	strbuf_release(&req_buf);
+}
+
 int report_unmatched_refs(struct ref **sought, int nr_sought)
 {
 	int i, ret = 0;
diff --git a/fetch-pack.h b/fetch-pack.h
index 736a3da..7f94a2a 100644
--- a/fetch-pack.h
+++ b/fetch-pack.h
@@ -5,6 +5,7 @@
 #include "run-command.h"
 #include "protocol.h"
 #include "list-objects-filter-options.h"
+#include "oidset.h"
 
 struct oid_array;
 
@@ -39,6 +40,7 @@
 	unsigned self_contained_and_connected:1;
 	unsigned cloning:1;
 	unsigned update_shallow:1;
+	unsigned reject_shallow_remote:1;
 	unsigned deepen:1;
 
 	/*
@@ -81,6 +83,19 @@
 		       enum protocol_version version);
 
 /*
+ * Execute the --negotiate-only mode of "git fetch", adding all known common
+ * commits to acked_commits.
+ *
+ * In the capability advertisement that has happened prior to invoking this
+ * function, the "wait-for-done" capability must be present.
+ */
+void negotiate_using_fetch(const struct oid_array *negotiation_tips,
+			   const struct string_list *server_options,
+			   int stateless_rpc,
+			   int fd[],
+			   struct oidset *acked_commits);
+
+/*
  * Print an appropriate error message for each sought ref that wasn't
  * matched.  Return 0 if all sought refs were matched, otherwise 1.
  */
diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c
index 1e51492..0f66818 100644
--- a/fmt-merge-msg.c
+++ b/fmt-merge-msg.c
@@ -130,7 +130,7 @@
 	if (!find_merge_parent(merge_parents, &oid, NULL))
 		return 0; /* subsumed by other parents */
 
-	origin_data = xcalloc(1, sizeof(struct origin_data));
+	CALLOC_ARRAY(origin_data, 1);
 	oidcpy(&origin_data->oid, &oid);
 
 	if (line[len - 1] == '\n')
diff --git a/fsck.c b/fsck.c
index 71134fd..3ec500d 100644
--- a/fsck.c
+++ b/fsck.c
@@ -19,90 +19,19 @@
 #include "credential.h"
 #include "help.h"
 
-static struct oidset gitmodules_found = OIDSET_INIT;
-static struct oidset gitmodules_done = OIDSET_INIT;
-
-#define FSCK_FATAL -1
-#define FSCK_INFO -2
-
-#define FOREACH_MSG_ID(FUNC) \
-	/* fatal errors */ \
-	FUNC(NUL_IN_HEADER, FATAL) \
-	FUNC(UNTERMINATED_HEADER, FATAL) \
-	/* errors */ \
-	FUNC(BAD_DATE, ERROR) \
-	FUNC(BAD_DATE_OVERFLOW, ERROR) \
-	FUNC(BAD_EMAIL, ERROR) \
-	FUNC(BAD_NAME, ERROR) \
-	FUNC(BAD_OBJECT_SHA1, ERROR) \
-	FUNC(BAD_PARENT_SHA1, ERROR) \
-	FUNC(BAD_TAG_OBJECT, ERROR) \
-	FUNC(BAD_TIMEZONE, ERROR) \
-	FUNC(BAD_TREE, ERROR) \
-	FUNC(BAD_TREE_SHA1, ERROR) \
-	FUNC(BAD_TYPE, ERROR) \
-	FUNC(DUPLICATE_ENTRIES, ERROR) \
-	FUNC(MISSING_AUTHOR, ERROR) \
-	FUNC(MISSING_COMMITTER, ERROR) \
-	FUNC(MISSING_EMAIL, ERROR) \
-	FUNC(MISSING_NAME_BEFORE_EMAIL, ERROR) \
-	FUNC(MISSING_OBJECT, ERROR) \
-	FUNC(MISSING_SPACE_BEFORE_DATE, ERROR) \
-	FUNC(MISSING_SPACE_BEFORE_EMAIL, ERROR) \
-	FUNC(MISSING_TAG, ERROR) \
-	FUNC(MISSING_TAG_ENTRY, ERROR) \
-	FUNC(MISSING_TREE, ERROR) \
-	FUNC(MISSING_TREE_OBJECT, ERROR) \
-	FUNC(MISSING_TYPE, ERROR) \
-	FUNC(MISSING_TYPE_ENTRY, ERROR) \
-	FUNC(MULTIPLE_AUTHORS, ERROR) \
-	FUNC(TREE_NOT_SORTED, ERROR) \
-	FUNC(UNKNOWN_TYPE, ERROR) \
-	FUNC(ZERO_PADDED_DATE, ERROR) \
-	FUNC(GITMODULES_MISSING, ERROR) \
-	FUNC(GITMODULES_BLOB, ERROR) \
-	FUNC(GITMODULES_LARGE, ERROR) \
-	FUNC(GITMODULES_NAME, ERROR) \
-	FUNC(GITMODULES_SYMLINK, ERROR) \
-	FUNC(GITMODULES_URL, ERROR) \
-	FUNC(GITMODULES_PATH, ERROR) \
-	FUNC(GITMODULES_UPDATE, ERROR) \
-	/* warnings */ \
-	FUNC(BAD_FILEMODE, WARN) \
-	FUNC(EMPTY_NAME, WARN) \
-	FUNC(FULL_PATHNAME, WARN) \
-	FUNC(HAS_DOT, WARN) \
-	FUNC(HAS_DOTDOT, WARN) \
-	FUNC(HAS_DOTGIT, WARN) \
-	FUNC(NULL_SHA1, WARN) \
-	FUNC(ZERO_PADDED_FILEMODE, WARN) \
-	FUNC(NUL_IN_COMMIT, WARN) \
-	/* infos (reported as warnings, but ignored by default) */ \
-	FUNC(GITMODULES_PARSE, INFO) \
-	FUNC(BAD_TAG_NAME, INFO) \
-	FUNC(MISSING_TAGGER_ENTRY, INFO) \
-	/* ignored (elevated when requested) */ \
-	FUNC(EXTRA_HEADER_ENTRY, IGNORE)
-
-#define MSG_ID(id, msg_type) FSCK_MSG_##id,
-enum fsck_msg_id {
-	FOREACH_MSG_ID(MSG_ID)
-	FSCK_MSG_MAX
-};
-#undef MSG_ID
-
 #define STR(x) #x
 #define MSG_ID(id, msg_type) { STR(id), NULL, NULL, FSCK_##msg_type },
 static struct {
 	const char *id_string;
 	const char *downcased;
 	const char *camelcased;
-	int msg_type;
+	enum fsck_msg_type msg_type;
 } msg_id_info[FSCK_MSG_MAX + 1] = {
-	FOREACH_MSG_ID(MSG_ID)
+	FOREACH_FSCK_MSG_ID(MSG_ID)
 	{ NULL, NULL, NULL, -1 }
 };
 #undef MSG_ID
+#undef STR
 
 static void prepare_msg_ids(void)
 {
@@ -164,25 +93,23 @@
 		list_config_item(list, prefix, msg_id_info[i].camelcased);
 }
 
-static int fsck_msg_type(enum fsck_msg_id msg_id,
+static enum fsck_msg_type fsck_msg_type(enum fsck_msg_id msg_id,
 	struct fsck_options *options)
 {
-	int msg_type;
-
 	assert(msg_id >= 0 && msg_id < FSCK_MSG_MAX);
 
-	if (options->msg_type)
-		msg_type = options->msg_type[msg_id];
-	else {
-		msg_type = msg_id_info[msg_id].msg_type;
+	if (!options->msg_type) {
+		enum fsck_msg_type msg_type = msg_id_info[msg_id].msg_type;
+
 		if (options->strict && msg_type == FSCK_WARN)
 			msg_type = FSCK_ERROR;
+		return msg_type;
 	}
 
-	return msg_type;
+	return options->msg_type[msg_id];
 }
 
-static int parse_msg_type(const char *str)
+static enum fsck_msg_type parse_msg_type(const char *str)
 {
 	if (!strcmp(str, "error"))
 		return FSCK_ERROR;
@@ -202,28 +129,35 @@
 	return 1;
 }
 
-void fsck_set_msg_type(struct fsck_options *options,
-		const char *msg_id, const char *msg_type)
+void fsck_set_msg_type_from_ids(struct fsck_options *options,
+				enum fsck_msg_id msg_id,
+				enum fsck_msg_type msg_type)
 {
-	int id = parse_msg_id(msg_id), type;
-
-	if (id < 0)
-		die("Unhandled message id: %s", msg_id);
-	type = parse_msg_type(msg_type);
-
-	if (type != FSCK_ERROR && msg_id_info[id].msg_type == FSCK_FATAL)
-		die("Cannot demote %s to %s", msg_id, msg_type);
-
 	if (!options->msg_type) {
 		int i;
-		int *msg_type;
-		ALLOC_ARRAY(msg_type, FSCK_MSG_MAX);
+		enum fsck_msg_type *severity;
+		ALLOC_ARRAY(severity, FSCK_MSG_MAX);
 		for (i = 0; i < FSCK_MSG_MAX; i++)
-			msg_type[i] = fsck_msg_type(i, options);
-		options->msg_type = msg_type;
+			severity[i] = fsck_msg_type(i, options);
+		options->msg_type = severity;
 	}
 
-	options->msg_type[id] = type;
+	options->msg_type[msg_id] = msg_type;
+}
+
+void fsck_set_msg_type(struct fsck_options *options,
+		       const char *msg_id_str, const char *msg_type_str)
+{
+	int msg_id = parse_msg_id(msg_id_str);
+	enum fsck_msg_type msg_type = parse_msg_type(msg_type_str);
+
+	if (msg_id < 0)
+		die("Unhandled message id: %s", msg_id_str);
+
+	if (msg_type != FSCK_ERROR && msg_id_info[msg_id].msg_type == FSCK_FATAL)
+		die("Cannot demote %s to %s", msg_id_str, msg_type_str);
+
+	fsck_set_msg_type_from_ids(options, msg_id, msg_type);
 }
 
 void fsck_set_msg_types(struct fsck_options *options, const char *values)
@@ -264,24 +198,6 @@
 	free(to_free);
 }
 
-static void append_msg_id(struct strbuf *sb, const char *msg_id)
-{
-	for (;;) {
-		char c = *(msg_id)++;
-
-		if (!c)
-			break;
-		if (c != '_')
-			strbuf_addch(sb, tolower(c));
-		else {
-			assert(*msg_id);
-			strbuf_addch(sb, *(msg_id)++);
-		}
-	}
-
-	strbuf_addstr(sb, ": ");
-}
-
 static int object_on_skiplist(struct fsck_options *opts,
 			      const struct object_id *oid)
 {
@@ -291,11 +207,12 @@
 __attribute__((format (printf, 5, 6)))
 static int report(struct fsck_options *options,
 		  const struct object_id *oid, enum object_type object_type,
-		  enum fsck_msg_id id, const char *fmt, ...)
+		  enum fsck_msg_id msg_id, const char *fmt, ...)
 {
 	va_list ap;
 	struct strbuf sb = STRBUF_INIT;
-	int msg_type = fsck_msg_type(id, options), result;
+	enum fsck_msg_type msg_type = fsck_msg_type(msg_id, options);
+	int result;
 
 	if (msg_type == FSCK_IGNORE)
 		return 0;
@@ -308,12 +225,13 @@
 	else if (msg_type == FSCK_INFO)
 		msg_type = FSCK_WARN;
 
-	append_msg_id(&sb, msg_id_info[id].id_string);
+	prepare_msg_ids();
+	strbuf_addf(&sb, "%s: ", msg_id_info[msg_id].camelcased);
 
 	va_start(ap, fmt);
 	strbuf_vaddf(&sb, fmt, ap);
 	result = options->error_func(options, oid, object_type,
-				     msg_type, sb.buf);
+				     msg_type, msg_id, sb.buf);
 	strbuf_release(&sb);
 	va_end(ap);
 
@@ -640,7 +558,7 @@
 	return c1 < c2 ? 0 : TREE_UNORDERED;
 }
 
-static int fsck_tree(const struct object_id *oid,
+static int fsck_tree(const struct object_id *tree_oid,
 		     const char *buffer, unsigned long size,
 		     struct fsck_options *options)
 {
@@ -661,7 +579,9 @@
 	struct name_stack df_dup_candidates = { NULL };
 
 	if (init_tree_desc_gently(&desc, buffer, size)) {
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_BAD_TREE, "cannot be parsed as a tree");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_BAD_TREE,
+				 "cannot be parsed as a tree");
 		return retval;
 	}
 
@@ -671,11 +591,11 @@
 	while (desc.size) {
 		unsigned short mode;
 		const char *name, *backslash;
-		const struct object_id *oid;
+		const struct object_id *entry_oid;
 
-		oid = tree_entry_extract(&desc, &name, &mode);
+		entry_oid = tree_entry_extract(&desc, &name, &mode);
 
-		has_null_sha1 |= is_null_oid(oid);
+		has_null_sha1 |= is_null_oid(entry_oid);
 		has_full_path |= !!strchr(name, '/');
 		has_empty_name |= !*name;
 		has_dot |= !strcmp(name, ".");
@@ -685,23 +605,43 @@
 
 		if (is_hfs_dotgitmodules(name) || is_ntfs_dotgitmodules(name)) {
 			if (!S_ISLNK(mode))
-				oidset_insert(&gitmodules_found, oid);
+				oidset_insert(&options->gitmodules_found,
+					      entry_oid);
 			else
 				retval += report(options,
-						 oid, OBJ_TREE,
+						 tree_oid, OBJ_TREE,
 						 FSCK_MSG_GITMODULES_SYMLINK,
 						 ".gitmodules is a symbolic link");
 		}
 
+		if (S_ISLNK(mode)) {
+			if (is_hfs_dotgitignore(name) ||
+			    is_ntfs_dotgitignore(name))
+				retval += report(options, tree_oid, OBJ_TREE,
+						 FSCK_MSG_GITIGNORE_SYMLINK,
+						 ".gitignore is a symlink");
+			if (is_hfs_dotgitattributes(name) ||
+			    is_ntfs_dotgitattributes(name))
+				retval += report(options, tree_oid, OBJ_TREE,
+						 FSCK_MSG_GITATTRIBUTES_SYMLINK,
+						 ".gitattributes is a symlink");
+			if (is_hfs_dotmailmap(name) ||
+			    is_ntfs_dotmailmap(name))
+				retval += report(options, tree_oid, OBJ_TREE,
+						 FSCK_MSG_MAILMAP_SYMLINK,
+						 ".mailmap is a symlink");
+		}
+
 		if ((backslash = strchr(name, '\\'))) {
 			while (backslash) {
 				backslash++;
 				has_dotgit |= is_ntfs_dotgit(backslash);
 				if (is_ntfs_dotgitmodules(backslash)) {
 					if (!S_ISLNK(mode))
-						oidset_insert(&gitmodules_found, oid);
+						oidset_insert(&options->gitmodules_found,
+							      entry_oid);
 					else
-						retval += report(options, oid, OBJ_TREE,
+						retval += report(options, tree_oid, OBJ_TREE,
 								 FSCK_MSG_GITMODULES_SYMLINK,
 								 ".gitmodules is a symbolic link");
 				}
@@ -710,7 +650,9 @@
 		}
 
 		if (update_tree_entry_gently(&desc)) {
-			retval += report(options, oid, OBJ_TREE, FSCK_MSG_BAD_TREE, "cannot be parsed as a tree");
+			retval += report(options, tree_oid, OBJ_TREE,
+					 FSCK_MSG_BAD_TREE,
+					 "cannot be parsed as a tree");
 			break;
 		}
 
@@ -758,25 +700,45 @@
 	name_stack_clear(&df_dup_candidates);
 
 	if (has_null_sha1)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_NULL_SHA1, "contains entries pointing to null sha1");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_NULL_SHA1,
+				 "contains entries pointing to null sha1");
 	if (has_full_path)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_FULL_PATHNAME, "contains full pathnames");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_FULL_PATHNAME,
+				 "contains full pathnames");
 	if (has_empty_name)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_EMPTY_NAME, "contains empty pathname");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_EMPTY_NAME,
+				 "contains empty pathname");
 	if (has_dot)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_HAS_DOT, "contains '.'");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_HAS_DOT,
+				 "contains '.'");
 	if (has_dotdot)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_HAS_DOTDOT, "contains '..'");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_HAS_DOTDOT,
+				 "contains '..'");
 	if (has_dotgit)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_HAS_DOTGIT, "contains '.git'");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_HAS_DOTGIT,
+				 "contains '.git'");
 	if (has_zero_pad)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_ZERO_PADDED_FILEMODE, "contains zero-padded file modes");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_ZERO_PADDED_FILEMODE,
+				 "contains zero-padded file modes");
 	if (has_bad_modes)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_BAD_FILEMODE, "contains bad file modes");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_BAD_FILEMODE,
+				 "contains bad file modes");
 	if (has_dup_entries)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_DUPLICATE_ENTRIES, "contains duplicate file entries");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_DUPLICATE_ENTRIES,
+				 "contains duplicate file entries");
 	if (not_properly_sorted)
-		retval += report(options, oid, OBJ_TREE, FSCK_MSG_TREE_NOT_SORTED, "not properly sorted");
+		retval += report(options, tree_oid, OBJ_TREE,
+				 FSCK_MSG_TREE_NOT_SORTED,
+				 "not properly sorted");
 	return retval;
 }
 
@@ -1211,9 +1173,9 @@
 	struct fsck_gitmodules_data data;
 	struct config_options config_opts = { 0 };
 
-	if (!oidset_contains(&gitmodules_found, oid))
+	if (!oidset_contains(&options->gitmodules_found, oid))
 		return 0;
-	oidset_insert(&gitmodules_done, oid);
+	oidset_insert(&options->gitmodules_done, oid);
 
 	if (object_on_skiplist(options, oid))
 		return 0;
@@ -1266,7 +1228,9 @@
 int fsck_error_function(struct fsck_options *o,
 			const struct object_id *oid,
 			enum object_type object_type,
-			int msg_type, const char *message)
+			enum fsck_msg_type msg_type,
+			enum fsck_msg_id msg_id,
+			const char *message)
 {
 	if (msg_type == FSCK_WARN) {
 		warning("object %s: %s", fsck_describe_object(o, oid), message);
@@ -1282,13 +1246,13 @@
 	struct oidset_iter iter;
 	const struct object_id *oid;
 
-	oidset_iter_init(&gitmodules_found, &iter);
+	oidset_iter_init(&options->gitmodules_found, &iter);
 	while ((oid = oidset_iter_next(&iter))) {
 		enum object_type type;
 		unsigned long size;
 		char *buf;
 
-		if (oidset_contains(&gitmodules_done, oid))
+		if (oidset_contains(&options->gitmodules_done, oid))
 			continue;
 
 		buf = read_object_file(oid, &type, &size);
@@ -1313,14 +1277,14 @@
 	}
 
 
-	oidset_clear(&gitmodules_found);
-	oidset_clear(&gitmodules_done);
+	oidset_clear(&options->gitmodules_found);
+	oidset_clear(&options->gitmodules_done);
 	return ret;
 }
 
-int fsck_config_internal(const char *var, const char *value, void *cb,
-			 struct fsck_options *options)
+int git_fsck_config(const char *var, const char *value, void *cb)
 {
+	struct fsck_options *options = cb;
 	if (strcmp(var, "fsck.skiplist") == 0) {
 		const char *path;
 		struct strbuf sb = STRBUF_INIT;
@@ -1341,3 +1305,21 @@
 
 	return git_default_config(var, value, cb);
 }
+
+/*
+ * Custom error callbacks that are used in more than one place.
+ */
+
+int fsck_error_cb_print_missing_gitmodules(struct fsck_options *o,
+					   const struct object_id *oid,
+					   enum object_type object_type,
+					   enum fsck_msg_type msg_type,
+					   enum fsck_msg_id msg_id,
+					   const char *message)
+{
+	if (msg_id == FSCK_MSG_GITMODULES_MISSING) {
+		puts(oid_to_hex(oid));
+		return 0;
+	}
+	return fsck_error_function(o, oid, object_type, msg_type, msg_id, message);
+}
diff --git a/fsck.h b/fsck.h
index 423c467..d07f7a2 100644
--- a/fsck.h
+++ b/fsck.h
@@ -3,15 +3,93 @@
 
 #include "oidset.h"
 
-#define FSCK_ERROR 1
-#define FSCK_WARN 2
-#define FSCK_IGNORE 3
+enum fsck_msg_type {
+	/* for internal use only */
+	FSCK_IGNORE,
+	FSCK_INFO,
+	FSCK_FATAL,
+	/* "public", fed to e.g. error_func callbacks */
+	FSCK_ERROR,
+	FSCK_WARN,
+};
+
+#define FOREACH_FSCK_MSG_ID(FUNC) \
+	/* fatal errors */ \
+	FUNC(NUL_IN_HEADER, FATAL) \
+	FUNC(UNTERMINATED_HEADER, FATAL) \
+	/* errors */ \
+	FUNC(BAD_DATE, ERROR) \
+	FUNC(BAD_DATE_OVERFLOW, ERROR) \
+	FUNC(BAD_EMAIL, ERROR) \
+	FUNC(BAD_NAME, ERROR) \
+	FUNC(BAD_OBJECT_SHA1, ERROR) \
+	FUNC(BAD_PARENT_SHA1, ERROR) \
+	FUNC(BAD_TAG_OBJECT, ERROR) \
+	FUNC(BAD_TIMEZONE, ERROR) \
+	FUNC(BAD_TREE, ERROR) \
+	FUNC(BAD_TREE_SHA1, ERROR) \
+	FUNC(BAD_TYPE, ERROR) \
+	FUNC(DUPLICATE_ENTRIES, ERROR) \
+	FUNC(MISSING_AUTHOR, ERROR) \
+	FUNC(MISSING_COMMITTER, ERROR) \
+	FUNC(MISSING_EMAIL, ERROR) \
+	FUNC(MISSING_NAME_BEFORE_EMAIL, ERROR) \
+	FUNC(MISSING_OBJECT, ERROR) \
+	FUNC(MISSING_SPACE_BEFORE_DATE, ERROR) \
+	FUNC(MISSING_SPACE_BEFORE_EMAIL, ERROR) \
+	FUNC(MISSING_TAG, ERROR) \
+	FUNC(MISSING_TAG_ENTRY, ERROR) \
+	FUNC(MISSING_TREE, ERROR) \
+	FUNC(MISSING_TREE_OBJECT, ERROR) \
+	FUNC(MISSING_TYPE, ERROR) \
+	FUNC(MISSING_TYPE_ENTRY, ERROR) \
+	FUNC(MULTIPLE_AUTHORS, ERROR) \
+	FUNC(TREE_NOT_SORTED, ERROR) \
+	FUNC(UNKNOWN_TYPE, ERROR) \
+	FUNC(ZERO_PADDED_DATE, ERROR) \
+	FUNC(GITMODULES_MISSING, ERROR) \
+	FUNC(GITMODULES_BLOB, ERROR) \
+	FUNC(GITMODULES_LARGE, ERROR) \
+	FUNC(GITMODULES_NAME, ERROR) \
+	FUNC(GITMODULES_SYMLINK, ERROR) \
+	FUNC(GITMODULES_URL, ERROR) \
+	FUNC(GITMODULES_PATH, ERROR) \
+	FUNC(GITMODULES_UPDATE, ERROR) \
+	/* warnings */ \
+	FUNC(BAD_FILEMODE, WARN) \
+	FUNC(EMPTY_NAME, WARN) \
+	FUNC(FULL_PATHNAME, WARN) \
+	FUNC(HAS_DOT, WARN) \
+	FUNC(HAS_DOTDOT, WARN) \
+	FUNC(HAS_DOTGIT, WARN) \
+	FUNC(NULL_SHA1, WARN) \
+	FUNC(ZERO_PADDED_FILEMODE, WARN) \
+	FUNC(NUL_IN_COMMIT, WARN) \
+	/* infos (reported as warnings, but ignored by default) */ \
+	FUNC(GITMODULES_PARSE, INFO) \
+	FUNC(GITIGNORE_SYMLINK, INFO) \
+	FUNC(GITATTRIBUTES_SYMLINK, INFO) \
+	FUNC(MAILMAP_SYMLINK, INFO) \
+	FUNC(BAD_TAG_NAME, INFO) \
+	FUNC(MISSING_TAGGER_ENTRY, INFO) \
+	/* ignored (elevated when requested) */ \
+	FUNC(EXTRA_HEADER_ENTRY, IGNORE)
+
+#define MSG_ID(id, msg_type) FSCK_MSG_##id,
+enum fsck_msg_id {
+	FOREACH_FSCK_MSG_ID(MSG_ID)
+	FSCK_MSG_MAX
+};
+#undef MSG_ID
 
 struct fsck_options;
 struct object;
 
+void fsck_set_msg_type_from_ids(struct fsck_options *options,
+				enum fsck_msg_id msg_id,
+				enum fsck_msg_type msg_type);
 void fsck_set_msg_type(struct fsck_options *options,
-		const char *msg_id, const char *msg_type);
+		       const char *msg_id, const char *msg_type);
 void fsck_set_msg_types(struct fsck_options *options, const char *values);
 int is_valid_msg_type(const char *msg_id, const char *msg_type);
 
@@ -23,28 +101,55 @@
  *     <0	error signaled and abort
  *     >0	error signaled and do not abort
  */
-typedef int (*fsck_walk_func)(struct object *obj, int type, void *data, struct fsck_options *options);
+typedef int (*fsck_walk_func)(struct object *obj, enum object_type object_type,
+			      void *data, struct fsck_options *options);
 
 /* callback for fsck_object, type is FSCK_ERROR or FSCK_WARN */
 typedef int (*fsck_error)(struct fsck_options *o,
 			  const struct object_id *oid, enum object_type object_type,
-			  int msg_type, const char *message);
+			  enum fsck_msg_type msg_type, enum fsck_msg_id msg_id,
+			  const char *message);
 
 int fsck_error_function(struct fsck_options *o,
 			const struct object_id *oid, enum object_type object_type,
-			int msg_type, const char *message);
+			enum fsck_msg_type msg_type, enum fsck_msg_id msg_id,
+			const char *message);
+int fsck_error_cb_print_missing_gitmodules(struct fsck_options *o,
+					   const struct object_id *oid,
+					   enum object_type object_type,
+					   enum fsck_msg_type msg_type,
+					   enum fsck_msg_id msg_id,
+					   const char *message);
 
 struct fsck_options {
 	fsck_walk_func walk;
 	fsck_error error_func;
 	unsigned strict:1;
-	int *msg_type;
+	enum fsck_msg_type *msg_type;
 	struct oidset skiplist;
+	struct oidset gitmodules_found;
+	struct oidset gitmodules_done;
 	kh_oid_map_t *object_names;
 };
 
-#define FSCK_OPTIONS_DEFAULT { NULL, fsck_error_function, 0, NULL, OIDSET_INIT }
-#define FSCK_OPTIONS_STRICT { NULL, fsck_error_function, 1, NULL, OIDSET_INIT }
+#define FSCK_OPTIONS_DEFAULT { \
+	.skiplist = OIDSET_INIT, \
+	.gitmodules_found = OIDSET_INIT, \
+	.gitmodules_done = OIDSET_INIT, \
+	.error_func = fsck_error_function \
+}
+#define FSCK_OPTIONS_STRICT { \
+	.strict = 1, \
+	.gitmodules_found = OIDSET_INIT, \
+	.gitmodules_done = OIDSET_INIT, \
+	.error_func = fsck_error_function, \
+}
+#define FSCK_OPTIONS_MISSING_GITMODULES { \
+	.strict = 1, \
+	.gitmodules_found = OIDSET_INIT, \
+	.gitmodules_done = OIDSET_INIT, \
+	.error_func = fsck_error_cb_print_missing_gitmodules, \
+}
 
 /* descend in all linked child objects
  * the return value is:
@@ -107,7 +212,6 @@
  * git_config() callback for use by fsck-y tools that want to support
  * fsck.<msg> fsck.skipList etc.
  */
-int fsck_config_internal(const char *var, const char *value, void *cb,
-			 struct fsck_options *options);
+int git_fsck_config(const char *var, const char *value, void *cb);
 
 #endif
diff --git a/fsmonitor.c b/fsmonitor.c
index fe9e9d7..ab9bfc6 100644
--- a/fsmonitor.c
+++ b/fsmonitor.c
@@ -90,7 +90,11 @@
 	if (!istate->split_index)
 		assert_index_minimum(istate, istate->fsmonitor_dirty->bit_size);
 
-	trace_printf_key(&trace_fsmonitor, "read fsmonitor extension successful");
+	trace2_data_string("index", NULL, "extension/fsmn/read/token",
+			   istate->fsmonitor_last_update);
+	trace_printf_key(&trace_fsmonitor,
+			 "read fsmonitor extension successful '%s'",
+			 istate->fsmonitor_last_update);
 	return 0;
 }
 
@@ -134,7 +138,11 @@
 	put_be32(&ewah_size, sb->len - ewah_start);
 	memcpy(sb->buf + fixup, &ewah_size, sizeof(uint32_t));
 
-	trace_printf_key(&trace_fsmonitor, "write fsmonitor extension successful");
+	trace2_data_string("index", NULL, "extension/fsmn/write/token",
+			   istate->fsmonitor_last_update);
+	trace_printf_key(&trace_fsmonitor,
+			 "write fsmonitor extension successful '%s'",
+			 istate->fsmonitor_last_update);
 }
 
 /*
@@ -143,6 +151,7 @@
 static int query_fsmonitor(int version, const char *last_update, struct strbuf *query_result)
 {
 	struct child_process cp = CHILD_PROCESS_INIT;
+	int result;
 
 	if (!core_fsmonitor)
 		return -1;
@@ -153,16 +162,63 @@
 	cp.use_shell = 1;
 	cp.dir = get_git_work_tree();
 
-	return capture_command(&cp, query_result, 1024);
+	trace2_region_enter("fsm_hook", "query", NULL);
+
+	result = capture_command(&cp, query_result, 1024);
+
+	if (result)
+		trace2_data_intmax("fsm_hook", NULL, "query/failed", result);
+	else {
+		trace2_data_intmax("fsm_hook", NULL, "query/response-length",
+				   query_result->len);
+
+		if (fsmonitor_is_trivial_response(query_result))
+			trace2_data_intmax("fsm_hook", NULL,
+					   "query/trivial-response", 1);
+	}
+
+	trace2_region_leave("fsm_hook", "query", NULL);
+
+	return result;
 }
 
-static void fsmonitor_refresh_callback(struct index_state *istate, const char *name)
+int fsmonitor_is_trivial_response(const struct strbuf *query_result)
 {
-	int pos = index_name_pos(istate, name, strlen(name));
+	static char trivial_response[3] = { '\0', '/', '\0' };
 
-	if (pos >= 0) {
-		struct cache_entry *ce = istate->cache[pos];
-		ce->ce_flags &= ~CE_FSMONITOR_VALID;
+	return query_result->len >= 3 &&
+		!memcmp(trivial_response,
+			&query_result->buf[query_result->len - 3], 3);
+}
+
+static void fsmonitor_refresh_callback(struct index_state *istate, char *name)
+{
+	int i, len = strlen(name);
+	if (name[len - 1] == '/') {
+
+		/*
+		 * TODO We should binary search to find the first path with
+		 * TODO this directory prefix.  Then linearly update entries
+		 * TODO while the prefix matches.  Taking care to search without
+		 * TODO the trailing slash -- because '/' sorts after a few
+		 * TODO interesting special chars, like '.' and ' '.
+		 */
+
+		/* Mark all entries for the folder invalid */
+		for (i = 0; i < istate->cache_nr; i++) {
+			if (istate->cache[i]->ce_flags & CE_FSMONITOR_VALID &&
+			    starts_with(istate->cache[i]->name, name))
+				istate->cache[i]->ce_flags &= ~CE_FSMONITOR_VALID;
+		}
+		/* Need to remove the / from the path for the untracked cache */
+		name[len - 1] = '\0';
+	} else {
+		int pos = index_name_pos(istate, name, strlen(name));
+
+		if (pos >= 0) {
+			struct cache_entry *ce = istate->cache[pos];
+			ce->ce_flags &= ~CE_FSMONITOR_VALID;
+		}
 	}
 
 	/*
@@ -288,16 +344,45 @@
 	istate->fsmonitor_last_update = strbuf_detach(&last_update_token, NULL);
 }
 
+/*
+ * The caller wants to turn on FSMonitor.  And when the caller writes
+ * the index to disk, a FSMonitor extension should be included.  This
+ * requires that `istate->fsmonitor_last_update` not be NULL.  But we
+ * have not actually talked to a FSMonitor process yet, so we don't
+ * have an initial value for this field.
+ *
+ * For a protocol V1 FSMonitor process, this field is a formatted
+ * "nanoseconds since epoch" field.  However, for a protocol V2
+ * FSMonitor process, this field is an opaque token.
+ *
+ * Historically, `add_fsmonitor()` has initialized this field to the
+ * current time for protocol V1 processes.  There are lots of race
+ * conditions here, but that code has shipped...
+ *
+ * The only true solution is to use a V2 FSMonitor and get a current
+ * or default token value (that it understands), but we cannot do that
+ * until we have actually talked to an instance of the FSMonitor process
+ * (but the protocol requires that we send a token first...).
+ *
+ * For simplicity, just initialize like we have a V1 process and require
+ * that V2 processes adapt.
+ */
+static void initialize_fsmonitor_last_update(struct index_state *istate)
+{
+	struct strbuf last_update = STRBUF_INIT;
+
+	strbuf_addf(&last_update, "%"PRIu64"", getnanotime());
+	istate->fsmonitor_last_update = strbuf_detach(&last_update, NULL);
+}
+
 void add_fsmonitor(struct index_state *istate)
 {
 	unsigned int i;
-	struct strbuf last_update = STRBUF_INIT;
 
 	if (!istate->fsmonitor_last_update) {
 		trace_printf_key(&trace_fsmonitor, "add fsmonitor");
 		istate->cache_changed |= FSMONITOR_CHANGED;
-		strbuf_addf(&last_update, "%"PRIu64"", getnanotime());
-		istate->fsmonitor_last_update = strbuf_detach(&last_update, NULL);
+		initialize_fsmonitor_last_update(istate);
 
 		/* reset the fsmonitor state */
 		for (i = 0; i < istate->cache_nr; i++)
diff --git a/fsmonitor.h b/fsmonitor.h
index 739318a..f20d726 100644
--- a/fsmonitor.h
+++ b/fsmonitor.h
@@ -45,6 +45,22 @@
 void refresh_fsmonitor(struct index_state *istate);
 
 /*
+ * Does the received result contain the "trivial" response?
+ */
+int fsmonitor_is_trivial_response(const struct strbuf *query_result);
+
+/*
+ * Check if refresh_fsmonitor has been called at least once.
+ * refresh_fsmonitor is idempotent. Returns true if fsmonitor is
+ * not enabled (since the state will be "fresh" w/ CE_FSMONITOR_VALID unset)
+ * This version is useful for assertions
+ */
+static inline int is_fsmonitor_refreshed(const struct index_state *istate)
+{
+	return !core_fsmonitor || istate->fsmonitor_has_run_once;
+}
+
+/*
  * Set the given cache entries CE_FSMONITOR_VALID bit. This should be
  * called any time the cache entry has been updated to reflect the
  * current state of the file on disk.
diff --git a/gettext.c b/gettext.c
index af2413b..bb5ba1f 100644
--- a/gettext.c
+++ b/gettext.c
@@ -66,6 +66,7 @@
 }
 
 #ifndef NO_GETTEXT
+__attribute__((format (printf, 1, 2)))
 static int test_vsnprintf(const char *fmt, ...)
 {
 	char buf[26];
diff --git a/git-compat-util.h b/git-compat-util.h
index 8382462..b466053 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -256,6 +256,11 @@
 {
 	return prefix;
 }
+static inline const char *precompose_string_if_needed(const char *in)
+{
+	return in;
+}
+
 #define probe_utf8_pathname_composition()
 #endif
 
@@ -349,6 +354,11 @@
 #define platform_core_config noop_core_config
 #endif
 
+int lstat_cache_aware_rmdir(const char *path);
+#if !defined(__MINGW32__) && !defined(_MSC_VER)
+#define rmdir lstat_cache_aware_rmdir
+#endif
+
 #ifndef has_dos_drive_prefix
 static inline int git_has_dos_drive_prefix(const char *path)
 {
@@ -788,6 +798,12 @@
 		  const char *format, va_list ap);
 #endif
 
+#ifdef OPEN_RETURNS_EINTR
+#undef open
+#define open git_open_with_retry
+int git_open_with_retry(const char *path, int flag, ...);
+#endif
+
 #ifdef __GLIBC_PREREQ
 #if __GLIBC_PREREQ(2, 1)
 #define HAVE_STRCHRNUL
@@ -860,6 +876,7 @@
 void *xrealloc(void *ptr, size_t size);
 void *xcalloc(size_t nmemb, size_t size);
 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);
 int xopen(const char *path, int flags, ...);
 ssize_t xread(int fd, void *buf, size_t len);
@@ -887,7 +904,7 @@
 #define FREE_AND_NULL(p) do { free(p); (p) = NULL; } while (0)
 
 #define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
-#define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)));
+#define CALLOC_ARRAY(x, alloc) (x) = xcalloc((alloc), sizeof(*(x)))
 #define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
 
 #define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \
@@ -970,11 +987,9 @@
 
 static inline size_t xsize_t(off_t len)
 {
-	size_t size = (size_t) len;
-
-	if (len != (off_t) size)
+	if (len < 0 || (uintmax_t) len > SIZE_MAX)
 		die("Cannot handle files this big");
-	return size;
+	return (size_t) len;
 }
 
 __attribute__((format (printf, 3, 4)))
@@ -1231,6 +1246,13 @@
 /* Warn on an inaccessible file if errno indicates this is an error */
 int warn_on_fopen_errors(const char *path);
 
+/*
+ * Open with O_NOFOLLOW, or equivalent. Note that the fallback equivalent
+ * may be racy. Do not use this as protection against an attacker who can
+ * simultaneously create paths.
+ */
+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
@@ -1345,7 +1367,7 @@
 	(type *)container_of_or_null_offset(ptr, offsetof(type, member))
 
 /*
- * like offsetof(), but takes a pointer to a a variable of type which
+ * like offsetof(), but takes a pointer to a variable of type which
  * contains @member, instead of a specified type.
  * @ptr is subject to multiple evaluation since we can't rely on __typeof__
  * everywhere.
diff --git a/git-cvsserver.perl b/git-cvsserver.perl
index f6f3fc1..ed035f3 100755
--- a/git-cvsserver.perl
+++ b/git-cvsserver.perl
@@ -2149,7 +2149,7 @@
                    ( $meta2->{revision} or "workingcopy" ));
 
         # TODO: Use --label instead of -L because -L is no longer
-        #  documented and may go away someday.  Not sure if there there are
+        #  documented and may go away someday.  Not sure if there are
         #  versions that only support -L, which would make this change risky?
         #  http://osdir.com/ml/bug-gnu-utils-gnu/2010-12/msg00060.html
         #    ("man diff" should actually document the best migration strategy,
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index fea7964..cb89372 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -492,14 +492,12 @@
 		sha1=$(git rev-parse "$ref"^0)
 		test -f "$workdir"/../map/$sha1 && continue
 		ancestor=$(git rev-list --simplify-merges -1 "$ref" "$@")
-		test "$ancestor" && echo $(map $ancestor) >> "$workdir"/../map/$sha1
+		test "$ancestor" && echo $(map $ancestor) >"$workdir"/../map/$sha1
 	done < "$tempdir"/heads
 fi
 
 # Finally update the refs
 
-_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"
 echo
 while read ref
 do
@@ -519,7 +517,7 @@
 		git update-ref -m "filter-branch: delete" -d "$ref" $sha1 ||
 			die "Could not delete $ref"
 	;;
-	$_x40)
+	*)
 		echo "Ref '$ref' was rewritten"
 		if ! git update-ref -m "filter-branch: rewrite" \
 					"$ref" $rewritten $sha1 2>/dev/null; then
@@ -533,16 +531,6 @@
 			fi
 		fi
 	;;
-	*)
-		# NEEDSWORK: possibly add -Werror, making this an error
-		warn "WARNING: '$ref' was rewritten into multiple commits:"
-		warn "$rewritten"
-		warn "WARNING: Ref '$ref' points to the first one now."
-		rewritten=$(echo "$rewritten" | head -n 1)
-		git update-ref -m "filter-branch: rewrite to first" \
-				"$ref" $rewritten $sha1 ||
-			die "Could not rewrite $ref"
-	;;
 	esac
 	git update-ref -m "filter-branch: backup" "$orig_namespace$ref" $sha1 ||
 		 exit
diff --git a/git-gui/po/ru.po b/git-gui/po/ru.po
index 161ee1a..7aebaf8 100644
--- a/git-gui/po/ru.po
+++ b/git-gui/po/ru.po
@@ -331,7 +331,7 @@
 
 #: git-gui.sh:2936
 msgid "Unstage From Commit"
-msgstr "Убрать из издекса"
+msgstr "Убрать из индекса"
 
 #: git-gui.sh:2942 lib/index.tcl:521
 msgid "Revert Changes"
diff --git a/git-mergetool.sh b/git-mergetool.sh
index 911470a..f751d9c 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -358,13 +358,8 @@
 		    enabled=false
 		fi
 	else
-		# The user does not have a preference. Ask the tool.
-		if hide_resolved_enabled
-		then
-		    enabled=true
-		else
-		    enabled=false
-		fi
+		# The user does not have a preference. Default to disabled.
+		enabled=false
 	fi
 
 	if test "$enabled" = true
diff --git a/git-p4.py b/git-p4.py
index 09c9e93..2b45002 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1977,8 +1977,11 @@
                 newdiff += "+%s\n" % os.readlink(newFile)
             else:
                 f = open(newFile, "r")
-                for line in f.readlines():
-                    newdiff += "+" + line
+                try:
+                    for line in f.readlines():
+                        newdiff += "+" + line
+                except UnicodeDecodeError:
+                    pass # Found non-text data and skip, since diff description should only include text
                 f.close()
 
         return (diff + newdiff).replace('\r\n', '\n')
@@ -3600,19 +3603,18 @@
         return True
 
     def searchParent(self, parent, branch, target):
-        parentFound = False
-        for blob in read_pipe_lines(["git", "rev-list", "--reverse",
+        targetTree = read_pipe(["git", "rev-parse",
+                                "{}^{{tree}}".format(target)]).strip()
+        for line in read_pipe_lines(["git", "rev-list", "--format=%H %T",
                                      "--no-merges", parent]):
-            blob = blob.strip()
-            if len(read_pipe(["git", "diff-tree", blob, target])) == 0:
-                parentFound = True
+            if line.startswith("commit "):
+                continue
+            commit, tree = line.strip().split(" ")
+            if tree == targetTree:
                 if self.verbose:
-                    print("Found parent of %s in commit %s" % (branch, blob))
-                break
-        if parentFound:
-            return blob
-        else:
-            return None
+                    print("Found parent of %s in commit %s" % (branch, commit))
+                return commit
+        return None
 
     def importChanges(self, changes, origin_revision=0):
         cnt = 1
diff --git a/git-send-email.perl b/git-send-email.perl
index 1f425c0..e65d969 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -18,21 +18,11 @@
 
 use 5.008;
 use strict;
-use warnings;
-use POSIX qw/strftime/;
-use Term::ReadLine;
+use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : ();
 use Getopt::Long;
-use Text::ParseWords;
-use Term::ANSIColor;
-use File::Temp qw/ tempdir tempfile /;
-use File::Spec::Functions qw(catdir catfile);
 use Git::LoadCPAN::Error qw(:try);
-use Cwd qw(abs_path cwd);
 use Git;
 use Git::I18N;
-use Net::Domain ();
-use Net::SMTP ();
-use Git::LoadCPAN::Mail::Address;
 
 Getopt::Long::Configure qw/ pass_through /;
 
@@ -70,6 +60,7 @@
 
   Sending:
     --envelope-sender       <str>  * Email envelope sender.
+    --sendmail-cmd          <str>  * Command to run to send email.
     --smtp-server       <str:int>  * Outgoing SMTP server to use. The port
                                      is optional. Default 'localhost'.
     --smtp-server-option    <str>  * Outgoing SMTP server option to use.
@@ -166,7 +157,6 @@
 		       );
 }
 
-my $have_email_valid = eval { require Email::Valid; 1 };
 my $smtp;
 my $auth;
 my $num_sent = 0;
@@ -192,14 +182,6 @@
 
 my $repo = eval { Git->repository() };
 my @repo = $repo ? ($repo) : ();
-my $term = eval {
-	$ENV{"GIT_SEND_EMAIL_NOTTY"}
-		? new Term::ReadLine 'git-send-email', \*STDIN, \*STDOUT
-		: new Term::ReadLine 'git-send-email';
-};
-if ($@) {
-	$term = new FakeTerm "$@: going non-interactive";
-}
 
 # Behavior modification variables
 my ($quiet, $dry_run) = (0, 0);
@@ -212,22 +194,41 @@
 my $multiedit;
 my $editor;
 
+sub system_or_msg {
+	my ($args, $msg) = @_;
+	system(@$args);
+	my $signalled = $? & 127;
+	my $exit_code = $? >> 8;
+	return unless $signalled or $exit_code;
+
+	my @sprintf_args = ($args->[0], $exit_code);
+	if (defined $msg) {
+		# Quiet the 'redundant' warning category, except we
+		# need to support down to Perl 5.8, so we can't do a
+		# "no warnings 'redundant'", since that category was
+		# introduced in perl 5.22, and asking for it will die
+		# on older perls.
+		no warnings;
+		return sprintf($msg, @sprintf_args);
+	}
+	return sprintf(__("fatal: command '%s' died with exit code %d"),
+		       @sprintf_args);
+}
+
+sub system_or_die {
+	my $msg = system_or_msg(@_);
+	die $msg if $msg;
+}
+
 sub do_edit {
 	if (!defined($editor)) {
 		$editor = Git::command_oneline('var', 'GIT_EDITOR');
 	}
+	my $die_msg = __("the editor exited uncleanly, aborting everything");
 	if (defined($multiedit) && !$multiedit) {
-		map {
-			system('sh', '-c', $editor.' "$@"', $editor, $_);
-			if (($? & 127) || ($? >> 8)) {
-				die(__("the editor exited uncleanly, aborting everything"));
-			}
-		} @_;
+		system_or_die(['sh', '-c', $editor.' "$@"', $editor, $_], $die_msg) for @_;
 	} else {
-		system('sh', '-c', $editor.' "$@"', $editor, @_);
-		if (($? & 127) || ($? >> 8)) {
-			die(__("the editor exited uncleanly, aborting everything"));
-		}
+		system_or_die(['sh', '-c', $editor.' "$@"', $editor, @_], $die_msg);
 	}
 }
 
@@ -243,6 +244,7 @@
 my (@suppress_cc);
 my ($auto_8bit_encoding);
 my ($compose_encoding);
+my ($sendmail_cmd);
 # Variables with corresponding config settings & hardcoded defaults
 my ($debug_net_smtp) = 0;		# Net::SMTP, see send_message()
 my $thread = 1;
@@ -268,6 +270,7 @@
 );
 
 my %config_settings = (
+    "smtpencryption" => \$smtp_encryption,
     "smtpserver" => \$smtp_server,
     "smtpserverport" => \$smtp_server_port,
     "smtpserveroption" => \@smtp_server_options,
@@ -290,6 +293,7 @@
     "assume8bitencoding" => \$auto_8bit_encoding,
     "composeencoding" => \$compose_encoding,
     "transferencoding" => \$target_xfer_encoding,
+    "sendmailcmd" => \$sendmail_cmd,
 );
 
 my %config_path_settings = (
@@ -299,9 +303,9 @@
 
 # Handle Uncouth Termination
 sub signal_handler {
-
 	# Make text normal
-	print color("reset"), "\n";
+	require Term::ANSIColor;
+	print Term::ANSIColor::color("reset"), "\n";
 
 	# SMTP password masked
 	system "stty echo";
@@ -327,11 +331,17 @@
 
 # Read our sendemail.* config
 sub read_config {
-	my ($configured, $prefix) = @_;
+	my ($known_keys, $configured, $prefix) = @_;
 
 	foreach my $setting (keys %config_bool_settings) {
 		my $target = $config_bool_settings{$setting};
-		my $v = Git::config_bool(@repo, "$prefix.$setting");
+		my $key = "$prefix.$setting";
+		next unless exists $known_keys->{$key};
+		my $v = (@{$known_keys->{$key}} == 1 &&
+			 (defined $known_keys->{$key}->[0] &&
+			  $known_keys->{$key}->[0] =~ /^(?:true|false)$/s))
+			? $known_keys->{$key}->[0] eq 'true'
+			: Git::config_bool(@repo, $key);
 		next unless defined $v;
 		next if $configured->{$setting}++;
 		$$target = $v;
@@ -339,8 +349,10 @@
 
 	foreach my $setting (keys %config_path_settings) {
 		my $target = $config_path_settings{$setting};
+		my $key = "$prefix.$setting";
+		next unless exists $known_keys->{$key};
 		if (ref($target) eq "ARRAY") {
-			my @values = Git::config_path(@repo, "$prefix.$setting");
+			my @values = Git::config_path(@repo, $key);
 			next unless @values;
 			next if $configured->{$setting}++;
 			@$target = @values;
@@ -355,36 +367,64 @@
 
 	foreach my $setting (keys %config_settings) {
 		my $target = $config_settings{$setting};
+		my $key = "$prefix.$setting";
+		next unless exists $known_keys->{$key};
 		if (ref($target) eq "ARRAY") {
-			my @values = Git::config(@repo, "$prefix.$setting");
-			next unless @values;
+			my @values = @{$known_keys->{$key}};
+			@values = grep { defined } @values;
 			next if $configured->{$setting}++;
 			@$target = @values;
 		}
 		else {
-			my $v = Git::config(@repo, "$prefix.$setting");
+			my $v = $known_keys->{$key}->[0];
 			next unless defined $v;
 			next if $configured->{$setting}++;
 			$$target = $v;
 		}
 	}
+}
 
-	if (!defined $smtp_encryption) {
-		my $setting = "$prefix.smtpencryption";
-		my $enc = Git::config(@repo, $setting);
-		return unless defined $enc;
-		return if $configured->{$setting}++;
-		if (defined $enc) {
-			$smtp_encryption = $enc;
-		} elsif (Git::config_bool(@repo, "$prefix.smtpssl")) {
-			$smtp_encryption = 'ssl';
-		}
+sub config_regexp {
+	my ($regex) = @_;
+	my @ret;
+	eval {
+		my $ret = Git::command(
+			'config',
+			'--null',
+			'--get-regexp',
+			$regex,
+		);
+		@ret = map {
+			# We must always return ($k, $v) here, since
+			# empty config values will be just "key\0",
+			# not "key\nvalue\0".
+			my ($k, $v) = split /\n/, $_, 2;
+			($k, $v);
+		} split /\0/, $ret;
+		1;
+	} or do {
+		# If we have no keys we're OK, otherwise re-throw
+		die $@ if $@->value != 1;
+	};
+	return @ret;
+}
+
+# Save ourselves a lot of work of shelling out to 'git config' (it
+# parses 'bool' etc.) by only doing so for config keys that exist.
+my %known_config_keys;
+{
+	my @kv = config_regexp("^sende?mail[.]");
+	while (my ($k, $v) = splice @kv, 0, 2) {
+		push @{$known_config_keys{$k}} => $v;
 	}
 }
 
 # sendemail.identity yields to --identity. We must parse this
 # special-case first before the rest of the config is read.
-$identity = Git::config(@repo, "sendemail.identity");
+{
+	my $key = "sendemail.identity";
+	$identity = Git::config(@repo, $key) if exists $known_config_keys{$key};
+}
 my $rc = GetOptions(
 	"identity=s" => \$identity,
 	"no-identity" => \$no_identity,
@@ -395,8 +435,8 @@
 # Now we know enough to read the config
 {
     my %configured;
-    read_config(\%configured, "sendemail.$identity") if defined $identity;
-    read_config(\%configured, "sendemail");
+    read_config(\%known_config_keys, \%configured, "sendemail.$identity") if defined $identity;
+    read_config(\%known_config_keys, \%configured, "sendemail");
 }
 
 # Begin by accumulating all the variables (defined above), that we will end up
@@ -423,6 +463,7 @@
 		    "no-bcc" => \$no_bcc,
 		    "chain-reply-to!" => \$chain_reply_to,
 		    "no-chain-reply-to" => sub {$chain_reply_to = 0},
+		    "sendmail-cmd=s" => \$sendmail_cmd,
 		    "smtp-server=s" => \$smtp_server,
 		    "smtp-server-option=s" => \@smtp_server_options,
 		    "smtp-server-port=s" => \$smtp_server_port,
@@ -480,7 +521,7 @@
     usage();
 }
 
-if ($forbid_sendmail_variables && (scalar Git::config_regexp("^sendmail[.]")) != 0) {
+if ($forbid_sendmail_variables && grep { /^sendmail/s } keys %known_config_keys) {
 	die __("fatal: found configuration options for 'sendmail'\n" .
 		"git-send-email is configured with the sendemail.* options - note the 'e'.\n" .
 		"Set sendemail.forbidSendmailVariables to false to disable this check.\n");
@@ -545,15 +586,27 @@
 }
 
 my ($repoauthor, $repocommitter);
-($repoauthor) = Git::ident_person(@repo, 'author');
-($repocommitter) = Git::ident_person(@repo, 'committer');
+{
+	my %cache;
+	my ($author, $committer);
+	my $common = sub {
+		my ($what) = @_;
+		return $cache{$what} if exists $cache{$what};
+		($cache{$what}) = Git::ident_person(@repo, $what);
+		return $cache{$what};
+	};
+	$repoauthor = sub { $common->('author') };
+	$repocommitter = sub { $common->('committer') };
+}
 
 sub parse_address_line {
+	require Git::LoadCPAN::Mail::Address;
 	return map { $_->format } Mail::Address->parse($_[0]);
 }
 
 sub split_addrs {
-	return quotewords('\s*,\s*', 1, @_);
+	require Text::ParseWords;
+	return Text::ParseWords::quotewords('\s*,\s*', 1, @_);
 }
 
 my %aliases;
@@ -602,10 +655,11 @@
 			s/\\"/"/g foreach @addr;
 			$aliases{$alias} = \@addr
 		}}},
-	mailrc => sub { my $fh = shift; while (<$fh>) {
+	mailrc => sub {	my $fh = shift; while (<$fh>) {
 		if (/^alias\s+(\S+)\s+(.*?)\s*$/) {
+			require Text::ParseWords;
 			# spaces delimit multiple addresses
-			$aliases{$1} = [ quotewords('\s+', 0, $2) ];
+			$aliases{$1} = [ Text::ParseWords::quotewords('\s+', 0, $2) ];
 		}}},
 	pine => sub { my $fh = shift; my $f='\t[^\t]*';
 	        for (my $x = ''; defined($x); $x = $_) {
@@ -653,7 +707,7 @@
 		if (defined($format_patch)) {
 			return $format_patch;
 		}
-		die sprintf(__ <<EOF, $f, $f);
+		die sprintf(__(<<EOF), $f, $f);
 File '%s' exists but it could also be the range of commits
 to produce patches for.  Please disambiguate by...
 
@@ -677,7 +731,8 @@
 		opendir my $dh, $f
 			or die sprintf(__("Failed to opendir %s: %s"), $f, $!);
 
-		push @files, grep { -f $_ } map { catfile($f, $_) }
+		require File::Spec;
+		push @files, grep { -f $_ } map { File::Spec->catfile($f, $_) }
 				sort readdir $dh;
 		closedir $dh;
 	} elsif ((-f $f or -p $f) and !is_format_patch_arg($f)) {
@@ -690,7 +745,8 @@
 if (@rev_list_opts) {
 	die __("Cannot run git format-patch from outside a repository\n")
 		unless $repo;
-	push @files, $repo->command('format-patch', '-o', tempdir(CLEANUP => 1), @rev_list_opts);
+	require File::Temp;
+	push @files, $repo->command('format-patch', '-o', File::Temp::tempdir(CLEANUP => 1), @rev_list_opts);
 }
 
 @files = handle_backup_files(@files);
@@ -698,9 +754,7 @@
 if ($validate) {
 	foreach my $f (@files) {
 		unless (-p $f) {
-			my $error = validate_patch($f, $target_xfer_encoding);
-			$error and die sprintf(__("fatal: %s: %s\nwarning: no patches were sent\n"),
-						  $f, $error);
+			validate_patch($f, $target_xfer_encoding);
 		}
 	}
 }
@@ -729,19 +783,20 @@
 if ($compose) {
 	# Note that this does not need to be secure, but we will make a small
 	# effort to have it be unique
+	require File::Temp;
 	$compose_filename = ($repo ?
-		tempfile(".gitsendemail.msg.XXXXXX", DIR => $repo->repo_path()) :
-		tempfile(".gitsendemail.msg.XXXXXX", DIR => "."))[1];
+		File::Temp::tempfile(".gitsendemail.msg.XXXXXX", DIR => $repo->repo_path()) :
+		File::Temp::tempfile(".gitsendemail.msg.XXXXXX", DIR => "."))[1];
 	open my $c, ">", $compose_filename
 		or die sprintf(__("Failed to open for writing %s: %s"), $compose_filename, $!);
 
 
-	my $tpl_sender = $sender || $repoauthor || $repocommitter || '';
+	my $tpl_sender = $sender || $repoauthor->() || $repocommitter->() || '';
 	my $tpl_subject = $initial_subject || '';
 	my $tpl_in_reply_to = $initial_in_reply_to || '';
 	my $tpl_reply_to = $reply_to || '';
 
-	print $c <<EOT1, Git::prefix_lines("GIT: ", __ <<EOT2), <<EOT3;
+	print $c <<EOT1, Git::prefix_lines("GIT: ", __(<<EOT2)), <<EOT3;
 From $tpl_sender # This line is ignored.
 EOT1
 Lines beginning in "GIT:" will be removed.
@@ -838,6 +893,19 @@
 	do_edit(@files);
 }
 
+sub term {
+	my $term = eval {
+		require Term::ReadLine;
+		$ENV{"GIT_SEND_EMAIL_NOTTY"}
+			? Term::ReadLine->new('git-send-email', \*STDIN, \*STDOUT)
+			: Term::ReadLine->new('git-send-email');
+	};
+	if ($@) {
+		$term = FakeTerm->new("$@: going non-interactive");
+	}
+	return $term;
+}
+
 sub ask {
 	my ($prompt, %arg) = @_;
 	my $valid_re = $arg{valid_re};
@@ -845,6 +913,7 @@
 	my $confirm_only = $arg{confirm_only};
 	my $resp;
 	my $i = 0;
+	my $term = term();
 	return defined $default ? $default : undef
 		unless defined $term->IN and defined fileno($term->IN) and
 		       defined $term->OUT and defined fileno($term->OUT);
@@ -942,7 +1011,7 @@
 	$sender =~ s/^\s+|\s+$//g;
 	($sender) = expand_aliases($sender);
 } else {
-	$sender = $repoauthor || $repocommitter || '';
+	$sender = $repoauthor->() || $repocommitter->() || '';
 }
 
 # $sender could be an already sanitized address
@@ -996,16 +1065,19 @@
 	$reply_to = sanitize_address($reply_to);
 }
 
-if (!defined $smtp_server) {
+if (!defined $sendmail_cmd && !defined $smtp_server) {
 	my @sendmail_paths = qw( /usr/sbin/sendmail /usr/lib/sendmail );
 	push @sendmail_paths, map {"$_/sendmail"} split /:/, $ENV{PATH};
 	foreach (@sendmail_paths) {
 		if (-x $_) {
-			$smtp_server = $_;
+			$sendmail_cmd = $_;
 			last;
 		}
 	}
-	$smtp_server ||= 'localhost'; # could be 127.0.0.1, too... *shrug*
+
+	if (!defined $sendmail_cmd) {
+		$smtp_server = 'localhost'; # could be 127.0.0.1, too... *shrug*
+	}
 }
 
 if ($compose && $compose > 0) {
@@ -1025,6 +1097,7 @@
 	return $address if ($address =~ /^($local_part_regexp)$/);
 
 	$address =~ s/^\s*<(.*)>\s*$/$1/;
+	my $have_email_valid = eval { require Email::Valid; 1 };
 	if ($have_email_valid) {
 		return scalar Email::Valid->address($address);
 	}
@@ -1084,14 +1157,15 @@
 sub make_message_id {
 	my $uniq;
 	if (!defined $message_id_stamp) {
-		$message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time));
+		require POSIX;
+		$message_id_stamp = POSIX::strftime("%Y%m%d%H%M%S.$$", gmtime(time));
 		$message_id_serial = 0;
 	}
 	$message_id_serial++;
 	$uniq = "$message_id_stamp-$message_id_serial";
 
 	my $du_part;
-	for ($sender, $repocommitter, $repoauthor) {
+	for ($sender, $repocommitter->(), $repoauthor->()) {
 		$du_part = extract_valid_address(sanitize_address($_));
 		last if (defined $du_part and $du_part ne '');
 	}
@@ -1254,6 +1328,7 @@
 sub maildomain_net {
 	my $maildomain;
 
+	require Net::Domain;
 	my $domain = Net::Domain::domainname();
 	$maildomain = $domain if valid_fqdn($domain);
 
@@ -1264,6 +1339,7 @@
 	my $maildomain;
 
 	for my $host (qw(mailhost localhost)) {
+		require Net::SMTP;
 		my $smtp = Net::SMTP->new($host);
 		if (defined $smtp) {
 			my $domain = $smtp->domain;
@@ -1485,11 +1561,17 @@
 
 	if ($dry_run) {
 		# We don't want to send the email.
-	} elsif (file_name_is_absolute($smtp_server)) {
+	} elsif (defined $sendmail_cmd || file_name_is_absolute($smtp_server)) {
 		my $pid = open my $sm, '|-';
 		defined $pid or die $!;
 		if (!$pid) {
-			exec($smtp_server, @sendmail_parameters) or die $!;
+			if (defined $sendmail_cmd) {
+				exec ("sh", "-c", "$sendmail_cmd \"\$@\"", "-", @sendmail_parameters)
+					or die $!;
+			} else {
+				exec ($smtp_server, @sendmail_parameters)
+					or die $!;
+			}
 		}
 		print $sm "$header\n$message";
 		close $sm or die $!;
@@ -1585,14 +1667,21 @@
 		printf($dry_run ? __("Dry-Sent %s\n") : __("Sent %s\n"), $subject);
 	} else {
 		print($dry_run ? __("Dry-OK. Log says:\n") : __("OK. Log says:\n"));
-		if (!file_name_is_absolute($smtp_server)) {
+		if (!defined $sendmail_cmd && !file_name_is_absolute($smtp_server)) {
 			print "Server: $smtp_server\n";
 			print "MAIL FROM:<$raw_from>\n";
 			foreach my $entry (@recipients) {
 			    print "RCPT TO:<$entry>\n";
 			}
 		} else {
-			print "Sendmail: $smtp_server ".join(' ',@sendmail_parameters)."\n";
+			my $sm;
+			if (defined $sendmail_cmd) {
+				$sm = $sendmail_cmd;
+			} else {
+				$sm = $smtp_server;
+			}
+
+			print "Sendmail: $sm ".join(' ',@sendmail_parameters)."\n";
 		}
 		print $header, "\n";
 		if ($smtp) {
@@ -1942,21 +2031,27 @@
 	my ($fn, $xfer_encoding) = @_;
 
 	if ($repo) {
-		my $validate_hook = catfile(catdir($repo->repo_path(), 'hooks'),
+		my $hooks_path = $repo->command_oneline('rev-parse', '--git-path', 'hooks');
+		require File::Spec;
+		my $validate_hook = File::Spec->catfile($hooks_path,
 					    'sendemail-validate');
 		my $hook_error;
 		if (-x $validate_hook) {
-			my $target = abs_path($fn);
+			require Cwd;
+			my $target = Cwd::abs_path($fn);
 			# The hook needs a correct cwd and GIT_DIR.
-			my $cwd_save = cwd();
+			my $cwd_save = Cwd::getcwd();
 			chdir($repo->wc_path() or $repo->repo_path())
 				or die("chdir: $!");
 			local $ENV{"GIT_DIR"} = $repo->repo_path();
-			$hook_error = "rejected by sendemail-validate hook"
-				if system($validate_hook, $target);
+			$hook_error = system_or_msg([$validate_hook, $target]);
 			chdir($cwd_save) or die("chdir: $!");
 		}
-		return $hook_error if $hook_error;
+		if ($hook_error) {
+			die sprintf(__("fatal: %s: rejected by sendemail-validate hook\n" .
+				       "%s\n" .
+				       "warning: no patches were sent\n"), $fn, $hook_error);
+		}
 	}
 
 	# Any long lines will be automatically fixed if we use a suitable transfer
@@ -1966,7 +2061,8 @@
 			or die sprintf(__("unable to open %s: %s\n"), $fn, $!);
 		while (my $line = <$fh>) {
 			if (length($line) > 998) {
-				return sprintf(__("%s: patch contains a line longer than 998 characters"), $.);
+				die sprintf(__("fatal: %s:%d is longer than 998 characters\n" .
+					       "warning: no patches were sent\n"), $fn, $.);
 			}
 		}
 	}
diff --git a/git-submodule.sh b/git-submodule.sh
index eb90f18..cb06aa0 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -335,7 +335,7 @@
 		shift
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper foreach ${GIT_QUIET:+--quiet} ${recursive:+--recursive} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper foreach ${GIT_QUIET:+--quiet} ${recursive:+--recursive} -- "$@"
 }
 
 #
@@ -402,7 +402,7 @@
 		shift
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${prefix:+--prefix "$prefix"} ${force:+--force} ${deinit_all:+--all} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${force:+--force} ${deinit_all:+--all} -- "$@"
 }
 
 is_tip_reachable () (
@@ -420,9 +420,9 @@
 	cd "$1" &&
 	if test $# -eq 3
 	then
-		echo "$3" | git fetch --stdin ${2:+"$2"}
+		echo "$3" | git fetch ${GIT_QUIET:+--quiet} --stdin ${2:+"$2"}
 	else
-		git fetch ${2:+"$2"}
+		git fetch ${GIT_QUIET:+--quiet} ${2:+"$2"}
 	fi
 )
 
@@ -726,7 +726,7 @@
 		shift
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper set-branch ${GIT_QUIET:+--quiet} ${branch:+--branch "$branch"} ${default:+--default} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-branch ${GIT_QUIET:+--quiet} ${branch:+--branch "$branch"} ${default:+--default} -- "$@"
 }
 
 #
@@ -755,7 +755,7 @@
 		shift
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper set-url ${GIT_QUIET:+--quiet} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-url ${GIT_QUIET:+--quiet} -- "$@"
 }
 
 #
@@ -807,7 +807,7 @@
 		shift
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper summary ${prefix:+--prefix "$prefix"} ${files:+--files} ${cached:+--cached} ${for_status:+--for-status} ${summary_limit:+-n $summary_limit} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper summary ${files:+--files} ${cached:+--cached} ${for_status:+--for-status} ${summary_limit:+-n $summary_limit} -- "$@"
 }
 #
 # List all submodules, prefixed with:
@@ -848,7 +848,7 @@
 		shift
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper status ${GIT_QUIET:+--quiet} ${cached:+--cached} ${recursive:+--recursive} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper status ${GIT_QUIET:+--quiet} ${cached:+--cached} ${recursive:+--recursive} -- "$@"
 }
 #
 # Sync remote urls for submodules
@@ -881,7 +881,7 @@
 		esac
 	done
 
-	git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper sync ${GIT_QUIET:+--quiet} ${recursive:+--recursive} -- "$@"
+	git ${wt_prefix:+-C "$wt_prefix"} submodule--helper sync ${GIT_QUIET:+--quiet} ${recursive:+--recursive} -- "$@"
 }
 
 cmd_absorbgitdirs()
diff --git a/git.c b/git.c
index 9bc077a..18bed9a 100644
--- a/git.c
+++ b/git.c
@@ -255,6 +255,14 @@
 			git_config_push_parameter((*argv)[1]);
 			(*argv)++;
 			(*argc)--;
+		} else if (!strcmp(cmd, "--config-env")) {
+			if (*argc < 2) {
+				fprintf(stderr, _("no config key given for --config-env\n" ));
+				usage(git_usage_string);
+			}
+			git_config_push_env((*argv)[1]);
+			(*argv)++;
+			(*argc)--;
 		} else if (skip_prefix(cmd, "--config-env=", &cmd)) {
 			git_config_push_env(cmd);
 		} else if (!strcmp(cmd, "--literal-pathspecs")) {
@@ -423,7 +431,7 @@
 			int nongit_ok;
 			prefix = setup_git_directory_gently(&nongit_ok);
 		}
-		prefix = precompose_argv_prefix(argc, argv, prefix);
+		precompose_argv_prefix(argc, argv, NULL);
 		if (use_pager == -1 && p->option & (RUN_SETUP | RUN_SETUP_GENTLY) &&
 		    !(p->option & DELAY_PAGER_CONFIG))
 			use_pager = check_pager_config(p->cmd);
@@ -490,6 +498,8 @@
 	{ "check-mailmap", cmd_check_mailmap, RUN_SETUP },
 	{ "check-ref-format", cmd_check_ref_format, NO_PARSEOPT  },
 	{ "checkout", cmd_checkout, RUN_SETUP | NEED_WORK_TREE },
+	{ "checkout--worker", cmd_checkout__worker,
+		RUN_SETUP | NEED_WORK_TREE | SUPPORT_SUPER_PREFIX },
 	{ "checkout-index", cmd_checkout_index,
 		RUN_SETUP | NEED_WORK_TREE},
 	{ "cherry", cmd_cherry, RUN_SETUP },
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 0959a78..e09e024 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -569,6 +569,15 @@
 		'sub' => \&feature_extra_branch_refs,
 		'override' => 0,
 		'default' => []},
+
+	# Redact e-mail addresses.
+
+	# To enable system wide have in $GITWEB_CONFIG
+	# $feature{'email-privacy'}{'default'} = [1];
+	'email-privacy' => {
+		'sub' => sub { feature_bool('email-privacy', @_) },
+		'override' => 1,
+		'default' => [0]},
 );
 
 sub gitweb_get_feature {
@@ -3449,6 +3458,13 @@
 	return %date;
 }
 
+sub hide_mailaddrs_if_private {
+	my $line = shift;
+	return $line unless gitweb_check_feature('email-privacy');
+	$line =~ s/<[^@>]+@[^>]+>/<redacted>/g;
+	return $line;
+}
+
 sub parse_tag {
 	my $tag_id = shift;
 	my %tag;
@@ -3465,7 +3481,7 @@
 		} elsif ($line =~ m/^tag (.+)$/) {
 			$tag{'name'} = $1;
 		} elsif ($line =~ m/^tagger (.*) ([0-9]+) (.*)$/) {
-			$tag{'author'} = $1;
+			$tag{'author'} = hide_mailaddrs_if_private($1);
 			$tag{'author_epoch'} = $2;
 			$tag{'author_tz'} = $3;
 			if ($tag{'author'} =~ m/^([^<]+) <([^>]*)>/) {
@@ -3513,7 +3529,7 @@
 		} elsif ((!defined $withparents) && ($line =~ m/^parent ($oid_regex)$/)) {
 			push @parents, $1;
 		} elsif ($line =~ m/^author (.*) ([0-9]+) (.*)$/) {
-			$co{'author'} = to_utf8($1);
+			$co{'author'} = hide_mailaddrs_if_private(to_utf8($1));
 			$co{'author_epoch'} = $2;
 			$co{'author_tz'} = $3;
 			if ($co{'author'} =~ m/^([^<]+) <([^>]*)>/) {
@@ -3523,7 +3539,7 @@
 				$co{'author_name'} = $co{'author'};
 			}
 		} elsif ($line =~ m/^committer (.*) ([0-9]+) (.*)$/) {
-			$co{'committer'} = to_utf8($1);
+			$co{'committer'} = hide_mailaddrs_if_private(to_utf8($1));
 			$co{'committer_epoch'} = $2;
 			$co{'committer_tz'} = $3;
 			if ($co{'committer'} =~ m/^([^<]+) <([^>]*)>/) {
@@ -3568,9 +3584,10 @@
 	if (! defined $co{'title'} || $co{'title'} eq "") {
 		$co{'title'} = $co{'title_short'} = '(no commit message)';
 	}
-	# remove added spaces
+	# remove added spaces, redact e-mail addresses if applicable.
 	foreach my $line (@commit_lines) {
 		$line =~ s/^    //;
+		$line = hide_mailaddrs_if_private($line);
 	}
 	$co{'comment'} = \@commit_lines;
 
@@ -7489,7 +7506,8 @@
 			         -accesskey => "n", -title => "Alt-n"}, "next");
 	}
 	my $patch_max = gitweb_get_feature('patches');
-	if ($patch_max && !defined $file_name) {
+	if ($patch_max && !defined $file_name &&
+		!gitweb_check_feature('email-privacy')) {
 		if ($patch_max < 0 || @commitlist <= $patch_max) {
 			$paging_nav .= " &sdot; " .
 				$cgi->a({-href => href(action=>"patches", -replay=>1)},
@@ -7550,7 +7568,8 @@
 			} @$parents ) .
 			')';
 	}
-	if (gitweb_check_feature('patches') && @$parents <= 1) {
+	if (gitweb_check_feature('patches') && @$parents <= 1 &&
+		!gitweb_check_feature('email-privacy')) {
 		$formats_nav .= " | " .
 			$cgi->a({-href => href(action=>"patch", -replay=>1)},
 				"patch");
@@ -7863,7 +7882,8 @@
 		$formats_nav =
 			$cgi->a({-href => href(action=>"commitdiff_plain", -replay=>1)},
 			        "raw");
-		if ($patch_max && @{$co{'parents'}} <= 1) {
+		if ($patch_max && @{$co{'parents'}} <= 1 &&
+			!gitweb_check_feature('email-privacy')) {
 			$formats_nav .= " | " .
 				$cgi->a({-href => href(action=>"patch", -replay=>1)},
 					"patch");
diff --git a/graph.c b/graph.c
index c128ad0..e3828eb 100644
--- a/graph.c
+++ b/graph.c
@@ -95,7 +95,7 @@
 		if (!color_parse_mem(start, comma - start, color))
 			strvec_push(colors, color);
 		else
-			warning(_("ignore invalid color '%.*s' in log.graphColors"),
+			warning(_("ignored invalid color '%.*s' in log.graphColors"),
 				(int)(comma - start), start);
 		start = comma + 1;
 	}
diff --git a/grep.c b/grep.c
index aabfaaa..424a395 100644
--- a/grep.c
+++ b/grep.c
@@ -40,20 +40,6 @@
 	.output = std_output,
 };
 
-#ifdef USE_LIBPCRE2
-static pcre2_general_context *pcre2_global_context;
-
-static void *pcre2_malloc(PCRE2_SIZE size, MAYBE_UNUSED void *memory_data)
-{
-	return malloc(size);
-}
-
-static void pcre2_free(void *pointer, MAYBE_UNUSED void *memory_data)
-{
-	free(pointer);
-}
-#endif
-
 static const char *color_grep_slots[] = {
 	[GREP_COLOR_CONTEXT]	    = "context",
 	[GREP_COLOR_FILENAME]	    = "filename",
@@ -152,20 +138,9 @@
  * Initialize one instance of grep_opt and copy the
  * default values from the template we read the configuration
  * information in an earlier call to git_config(grep_config).
- *
- * If using PCRE, make sure that the library is configured
- * to use the same allocator as Git (e.g. nedmalloc on Windows).
- *
- * Any allocated memory needs to be released in grep_destroy().
  */
 void grep_init(struct grep_opt *opt, struct repository *repo, const char *prefix)
 {
-#if defined(USE_LIBPCRE2)
-	if (!pcre2_global_context)
-		pcre2_global_context = pcre2_general_context_create(
-					pcre2_malloc, pcre2_free, NULL);
-#endif
-
 	*opt = grep_defaults;
 
 	opt->repo = repo;
@@ -175,13 +150,6 @@
 	opt->header_tail = &opt->header_list;
 }
 
-void grep_destroy(void)
-{
-#ifdef USE_LIBPCRE2
-	pcre2_general_context_free(pcre2_global_context);
-#endif
-}
-
 static void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, struct grep_opt *opt)
 {
 	/*
@@ -363,6 +331,28 @@
 }
 
 #ifdef USE_LIBPCRE2
+#define GREP_PCRE2_DEBUG_MALLOC 0
+
+static void *pcre2_malloc(PCRE2_SIZE size, MAYBE_UNUSED void *memory_data)
+{
+	void *pointer = malloc(size);
+#if GREP_PCRE2_DEBUG_MALLOC
+	static int count = 1;
+	fprintf(stderr, "PCRE2:%p -> #%02d: alloc(%lu)\n", pointer, count++, size);
+#endif
+	return pointer;
+}
+
+static void pcre2_free(void *pointer, MAYBE_UNUSED void *memory_data)
+{
+#if GREP_PCRE2_DEBUG_MALLOC
+	static int count = 1;
+	if (pointer)
+		fprintf(stderr, "PCRE2:%p -> #%02d: free()\n", pointer, count++);
+#endif
+	free(pointer);
+}
+
 static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt)
 {
 	int error;
@@ -373,17 +363,20 @@
 	int patinforet;
 	size_t jitsizearg;
 
-	assert(opt->pcre2);
+	/*
+	 * Call pcre2_general_context_create() before calling any
+	 * other pcre2_*(). It sets up our malloc()/free() functions
+	 * with which everything else is allocated.
+	 */
+	p->pcre2_general_context = pcre2_general_context_create(
+		pcre2_malloc, pcre2_free, NULL);
+	if (!p->pcre2_general_context)
+		die("Couldn't allocate PCRE2 general context");
 
-	p->pcre2_compile_context = NULL;
-
-	/* pcre2_global_context is initialized in append_grep_pattern */
 	if (opt->ignore_case) {
 		if (!opt->ignore_locale && has_non_ascii(p->pattern)) {
-			if (!pcre2_global_context)
-				BUG("pcre2_global_context uninitialized");
-			p->pcre2_tables = pcre2_maketables(pcre2_global_context);
-			p->pcre2_compile_context = pcre2_compile_context_create(NULL);
+			p->pcre2_tables = pcre2_maketables(p->pcre2_general_context);
+			p->pcre2_compile_context = pcre2_compile_context_create(p->pcre2_general_context);
 			pcre2_set_character_tables(p->pcre2_compile_context,
 							p->pcre2_tables);
 		}
@@ -393,28 +386,18 @@
 	    !(!opt->ignore_case && (p->fixed || p->is_fixed)))
 		options |= (PCRE2_UTF | PCRE2_MATCH_INVALID_UTF);
 
+#ifdef GIT_PCRE2_VERSION_10_36_OR_HIGHER
 	/* Work around https://bugs.exim.org/show_bug.cgi?id=2642 fixed in 10.36 */
-	if (PCRE2_MATCH_INVALID_UTF && options & (PCRE2_UTF | PCRE2_CASELESS)) {
-		struct strbuf buf;
-		int len;
-		int err;
-
-		if ((len = pcre2_config(PCRE2_CONFIG_VERSION, NULL)) < 0)
-			BUG("pcre2_config(..., NULL) failed: %d", len);
-		strbuf_init(&buf, len + 1);
-		if ((err = pcre2_config(PCRE2_CONFIG_VERSION, buf.buf)) < 0)
-			BUG("pcre2_config(..., buf.buf) failed: %d", err);
-		if (versioncmp(buf.buf, "10.36") < 0)
-			options |= PCRE2_NO_START_OPTIMIZE;
-		strbuf_release(&buf);
-	}
+	if (PCRE2_MATCH_INVALID_UTF && options & (PCRE2_UTF | PCRE2_CASELESS))
+		options |= PCRE2_NO_START_OPTIMIZE;
+#endif
 
 	p->pcre2_pattern = pcre2_compile((PCRE2_SPTR)p->pattern,
 					 p->patternlen, options, &error, &erroffset,
 					 p->pcre2_compile_context);
 
 	if (p->pcre2_pattern) {
-		p->pcre2_match_data = pcre2_match_data_create_from_pattern(p->pcre2_pattern, NULL);
+		p->pcre2_match_data = pcre2_match_data_create_from_pattern(p->pcre2_pattern, p->pcre2_general_context);
 		if (!p->pcre2_match_data)
 			die("Couldn't allocate PCRE2 match data");
 	} else {
@@ -493,7 +476,12 @@
 	pcre2_compile_context_free(p->pcre2_compile_context);
 	pcre2_code_free(p->pcre2_pattern);
 	pcre2_match_data_free(p->pcre2_match_data);
+#ifdef GIT_PCRE2_VERSION_10_34_OR_HIGHER
+	pcre2_maketables_free(p->pcre2_general_context, p->pcre2_tables);
+#else
 	free((void *)p->pcre2_tables);
+#endif
+	pcre2_general_context_free(p->pcre2_general_context);
 }
 #else /* !USE_LIBPCRE2 */
 static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt)
@@ -555,7 +543,6 @@
 #endif
 	if (p->fixed || p->is_fixed) {
 #ifdef USE_LIBPCRE2
-		opt->pcre2 = 1;
 		if (p->is_fixed) {
 			compile_pcre2_pattern(p, opt);
 		} else {
@@ -621,7 +608,7 @@
 	case GREP_PATTERN: /* atom */
 	case GREP_PATTERN_HEAD:
 	case GREP_PATTERN_BODY:
-		x = xcalloc(1, sizeof (struct grep_expr));
+		CALLOC_ARRAY(x, 1);
 		x->node = GREP_NODE_ATOM;
 		x->u.atom = p;
 		*list = p->next;
@@ -651,7 +638,7 @@
 		if (!p->next)
 			die("--not not followed by pattern expression");
 		*list = p->next;
-		x = xcalloc(1, sizeof (struct grep_expr));
+		CALLOC_ARRAY(x, 1);
 		x->node = GREP_NODE_NOT;
 		x->u.unary = compile_pattern_not(list);
 		if (!x->u.unary)
@@ -670,13 +657,15 @@
 	x = compile_pattern_not(list);
 	p = *list;
 	if (p && p->token == GREP_AND) {
+		if (!x)
+			die("--and not preceded by pattern expression");
 		if (!p->next)
 			die("--and not followed by pattern expression");
 		*list = p->next;
 		y = compile_pattern_and(list);
 		if (!y)
 			die("--and not followed by pattern expression");
-		z = xcalloc(1, sizeof (struct grep_expr));
+		CALLOC_ARRAY(z, 1);
 		z->node = GREP_NODE_AND;
 		z->u.binary.left = x;
 		z->u.binary.right = y;
@@ -696,7 +685,7 @@
 		y = compile_pattern_or(list);
 		if (!y)
 			die("not a pattern expression %s", p->pattern);
-		z = xcalloc(1, sizeof (struct grep_expr));
+		CALLOC_ARRAY(z, 1);
 		z->node = GREP_NODE_OR;
 		z->u.binary.left = x;
 		z->u.binary.right = y;
@@ -1507,7 +1496,7 @@
 		fill_filespec(df, gs->identifier, 1, 0100644);
 		break;
 	case GREP_SOURCE_FILE:
-		fill_filespec(df, &null_oid, 0, 0100644);
+		fill_filespec(df, null_oid(), 0, 0100644);
 		break;
 	default:
 		BUG("attempt to textconv something without a path?");
diff --git a/grep.h b/grep.h
index ae89d62..72f82b1 100644
--- a/grep.h
+++ b/grep.h
@@ -4,10 +4,17 @@
 #ifdef USE_LIBPCRE2
 #define PCRE2_CODE_UNIT_WIDTH 8
 #include <pcre2.h>
+#if (PCRE2_MAJOR >= 10 && PCRE2_MINOR >= 36) || PCRE2_MAJOR >= 11
+#define GIT_PCRE2_VERSION_10_36_OR_HIGHER
+#endif
+#if (PCRE2_MAJOR >= 10 && PCRE2_MINOR >= 34) || PCRE2_MAJOR >= 11
+#define GIT_PCRE2_VERSION_10_34_OR_HIGHER
+#endif
 #else
 typedef int pcre2_code;
 typedef int pcre2_match_data;
 typedef int pcre2_compile_context;
+typedef int pcre2_general_context;
 #endif
 #ifndef PCRE2_MATCH_INVALID_UTF
 /* PCRE2_MATCH_* dummy also with !USE_LIBPCRE2, for test-pcre2-config.c */
@@ -69,6 +76,7 @@
 	pcre2_code *pcre2_pattern;
 	pcre2_match_data *pcre2_match_data;
 	pcre2_compile_context *pcre2_compile_context;
+	pcre2_general_context *pcre2_general_context;
 	const uint8_t *pcre2_tables;
 	uint32_t pcre2_jit_on;
 	unsigned fixed:1;
@@ -161,7 +169,6 @@
 
 int grep_config(const char *var, const char *value, void *);
 void grep_init(struct grep_opt *, struct repository *repo, const char *prefix);
-void grep_destroy(void);
 void grep_commit_pattern_type(enum grep_pattern_type, struct grep_opt *opt);
 
 void append_grep_pat(struct grep_opt *opt, const char *pat, size_t patlen, const char *origin, int no, enum grep_pat_token t);
diff --git a/hash.h b/hash.h
index 3fb0c3d..27a1802 100644
--- a/hash.h
+++ b/hash.h
@@ -95,6 +95,29 @@
 /* Number of algorithms supported (including unknown). */
 #define GIT_HASH_NALGOS (GIT_HASH_SHA256 + 1)
 
+/* The length in bytes and in hex digits of an object name (SHA-1 value). */
+#define GIT_SHA1_RAWSZ 20
+#define GIT_SHA1_HEXSZ (2 * GIT_SHA1_RAWSZ)
+/* The block size of SHA-1. */
+#define GIT_SHA1_BLKSZ 64
+
+/* The length in bytes and in hex digits of an object name (SHA-256 value). */
+#define GIT_SHA256_RAWSZ 32
+#define GIT_SHA256_HEXSZ (2 * GIT_SHA256_RAWSZ)
+/* The block size of SHA-256. */
+#define GIT_SHA256_BLKSZ 64
+
+/* The length in byte and in hex digits of the largest possible hash value. */
+#define GIT_MAX_RAWSZ GIT_SHA256_RAWSZ
+#define GIT_MAX_HEXSZ GIT_SHA256_HEXSZ
+/* The largest possible block size for any supported hash. */
+#define GIT_MAX_BLKSZ GIT_SHA256_BLKSZ
+
+struct object_id {
+	unsigned char hash[GIT_MAX_RAWSZ];
+	int algo;
+};
+
 /* A suitably aligned type for stack allocations of hash contexts. */
 union git_hash_ctx {
 	git_SHA_CTX sha1;
@@ -106,6 +129,7 @@
 typedef void (*git_hash_clone_fn)(git_hash_ctx *dst, const git_hash_ctx *src);
 typedef void (*git_hash_update_fn)(git_hash_ctx *ctx, const void *in, size_t len);
 typedef void (*git_hash_final_fn)(unsigned char *hash, git_hash_ctx *ctx);
+typedef void (*git_hash_final_oid_fn)(struct object_id *oid, git_hash_ctx *ctx);
 
 struct git_hash_algo {
 	/*
@@ -138,11 +162,17 @@
 	/* The hash finalization function. */
 	git_hash_final_fn final_fn;
 
+	/* The hash finalization function for object IDs. */
+	git_hash_final_oid_fn final_oid_fn;
+
 	/* The OID of the empty tree. */
 	const struct object_id *empty_tree;
 
 	/* The OID of the empty blob. */
 	const struct object_id *empty_blob;
+
+	/* The all-zeros OID. */
+	const struct object_id *null_oid;
 };
 extern const struct git_hash_algo hash_algos[GIT_HASH_NALGOS];
 
@@ -161,67 +191,65 @@
 	return p - hash_algos;
 }
 
-/* The length in bytes and in hex digits of an object name (SHA-1 value). */
-#define GIT_SHA1_RAWSZ 20
-#define GIT_SHA1_HEXSZ (2 * GIT_SHA1_RAWSZ)
-/* The block size of SHA-1. */
-#define GIT_SHA1_BLKSZ 64
-
-/* The length in bytes and in hex digits of an object name (SHA-256 value). */
-#define GIT_SHA256_RAWSZ 32
-#define GIT_SHA256_HEXSZ (2 * GIT_SHA256_RAWSZ)
-/* The block size of SHA-256. */
-#define GIT_SHA256_BLKSZ 64
-
-/* The length in byte and in hex digits of the largest possible hash value. */
-#define GIT_MAX_RAWSZ GIT_SHA256_RAWSZ
-#define GIT_MAX_HEXSZ GIT_SHA256_HEXSZ
-/* The largest possible block size for any supported hash. */
-#define GIT_MAX_BLKSZ GIT_SHA256_BLKSZ
-
-struct object_id {
-	unsigned char hash[GIT_MAX_RAWSZ];
-};
-
 #define the_hash_algo the_repository->hash_algo
 
-extern const struct object_id null_oid;
+const struct object_id *null_oid(void);
 
-static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
+static inline int hashcmp_algop(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop)
 {
 	/*
 	 * Teach the compiler that there are only two possibilities of hash size
 	 * here, so that it can optimize for this case as much as possible.
 	 */
-	if (the_hash_algo->rawsz == GIT_MAX_RAWSZ)
+	if (algop->rawsz == GIT_MAX_RAWSZ)
 		return memcmp(sha1, sha2, GIT_MAX_RAWSZ);
 	return memcmp(sha1, sha2, GIT_SHA1_RAWSZ);
 }
 
-static inline int oidcmp(const struct object_id *oid1, const struct object_id *oid2)
+static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
 {
-	return hashcmp(oid1->hash, oid2->hash);
+	return hashcmp_algop(sha1, sha2, the_hash_algo);
 }
 
-static inline int hasheq(const unsigned char *sha1, const unsigned char *sha2)
+static inline int oidcmp(const struct object_id *oid1, const struct object_id *oid2)
+{
+	const struct git_hash_algo *algop;
+	if (!oid1->algo)
+		algop = the_hash_algo;
+	else
+		algop = &hash_algos[oid1->algo];
+	return hashcmp_algop(oid1->hash, oid2->hash, algop);
+}
+
+static inline int hasheq_algop(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop)
 {
 	/*
 	 * We write this here instead of deferring to hashcmp so that the
 	 * compiler can properly inline it and avoid calling memcmp.
 	 */
-	if (the_hash_algo->rawsz == GIT_MAX_RAWSZ)
+	if (algop->rawsz == GIT_MAX_RAWSZ)
 		return !memcmp(sha1, sha2, GIT_MAX_RAWSZ);
 	return !memcmp(sha1, sha2, GIT_SHA1_RAWSZ);
 }
 
+static inline int hasheq(const unsigned char *sha1, const unsigned char *sha2)
+{
+	return hasheq_algop(sha1, sha2, the_hash_algo);
+}
+
 static inline int oideq(const struct object_id *oid1, const struct object_id *oid2)
 {
-	return hasheq(oid1->hash, oid2->hash);
+	const struct git_hash_algo *algop;
+	if (!oid1->algo)
+		algop = the_hash_algo;
+	else
+		algop = &hash_algos[oid1->algo];
+	return hasheq_algop(oid1->hash, oid2->hash, algop);
 }
 
 static inline int is_null_oid(const struct object_id *oid)
 {
-	return oideq(oid, &null_oid);
+	return oideq(oid, null_oid());
 }
 
 static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src)
@@ -232,6 +260,23 @@
 static inline void oidcpy(struct object_id *dst, const struct object_id *src)
 {
 	memcpy(dst->hash, src->hash, GIT_MAX_RAWSZ);
+	dst->algo = src->algo;
+}
+
+/* Like oidcpy() but zero-pads the unused bytes in dst's hash array. */
+static inline void oidcpy_with_padding(struct object_id *dst,
+				       const struct object_id *src)
+{
+	size_t hashsz;
+
+	if (!src->algo)
+		hashsz = the_hash_algo->rawsz;
+	else
+		hashsz = hash_algos[src->algo].rawsz;
+
+	memcpy(dst->hash, src->hash, hashsz);
+	memset(dst->hash + hashsz, 0, GIT_MAX_RAWSZ - hashsz);
+	dst->algo = src->algo;
 }
 
 static inline struct object_id *oiddup(const struct object_id *src)
@@ -249,11 +294,13 @@
 static inline void oidclr(struct object_id *oid)
 {
 	memset(oid->hash, 0, GIT_MAX_RAWSZ);
+	oid->algo = hash_algo_by_ptr(the_hash_algo);
 }
 
 static inline void oidread(struct object_id *oid, const unsigned char *hash)
 {
 	memcpy(oid->hash, hash, the_hash_algo->rawsz);
+	oid->algo = hash_algo_by_ptr(the_hash_algo);
 }
 
 static inline int is_empty_blob_sha1(const unsigned char *sha1)
@@ -276,6 +323,11 @@
 	return oideq(oid, the_hash_algo->empty_tree);
 }
 
+static inline void oid_set_algo(struct object_id *oid, const struct git_hash_algo *algop)
+{
+	oid->algo = hash_algo_by_ptr(algop);
+}
+
 const char *empty_tree_oid_hex(void);
 const char *empty_blob_oid_hex(void);
 
diff --git a/hashmap.c b/hashmap.c
index 5009471..134d2ee 100644
--- a/hashmap.c
+++ b/hashmap.c
@@ -76,7 +76,7 @@
 static void alloc_table(struct hashmap *map, unsigned int size)
 {
 	map->tablesize = size;
-	map->table = xcalloc(size, sizeof(struct hashmap_entry *));
+	CALLOC_ARRAY(map->table, size);
 
 	/* calculate resize thresholds for new size */
 	map->grow_at = (unsigned int) ((uint64_t) size * HASHMAP_LOAD_FACTOR / 100);
diff --git a/hex.c b/hex.c
index da51e64..4f64d34 100644
--- a/hex.c
+++ b/hex.c
@@ -69,7 +69,10 @@
 int get_oid_hex_algop(const char *hex, struct object_id *oid,
 		      const struct git_hash_algo *algop)
 {
-	return get_hash_hex_algop(hex, oid->hash, algop);
+	int ret = get_hash_hex_algop(hex, oid->hash, algop);
+	if (!ret)
+		oid_set_algo(oid, algop);
+	return ret;
 }
 
 /*
@@ -80,7 +83,7 @@
 {
 	int i;
 	for (i = GIT_HASH_NALGOS - 1; i > 0; i--) {
-		if (!get_hash_hex_algop(hex, oid->hash, &hash_algos[i]))
+		if (!get_oid_hex_algop(hex, oid, &hash_algos[i]))
 			return i;
 	}
 	return GIT_HASH_UNKNOWN;
@@ -95,7 +98,7 @@
 			const char **end,
 			const struct git_hash_algo *algop)
 {
-	int ret = get_hash_hex_algop(hex, oid->hash, algop);
+	int ret = get_oid_hex_algop(hex, oid, algop);
 	if (!ret)
 		*end = hex + algop->hexsz;
 	return ret;
@@ -121,6 +124,13 @@
 	char *buf = buffer;
 	int i;
 
+	/*
+	 * Our struct object_id has been memset to 0, so default to printing
+	 * using the default hash.
+	 */
+	if (algop == &hash_algos[0])
+		algop = the_hash_algo;
+
 	for (i = 0; i < algop->rawsz; i++) {
 		unsigned int val = *hash++;
 		*buf++ = hex[val >> 4];
@@ -133,7 +143,7 @@
 
 char *oid_to_hex_r(char *buffer, const struct object_id *oid)
 {
-	return hash_to_hex_algop_r(buffer, oid->hash, the_hash_algo);
+	return hash_to_hex_algop_r(buffer, oid->hash, &hash_algos[oid->algo]);
 }
 
 char *hash_to_hex_algop(const unsigned char *hash, const struct git_hash_algo *algop)
@@ -151,5 +161,5 @@
 
 char *oid_to_hex(const struct object_id *oid)
 {
-	return hash_to_hex_algop(oid->hash, the_hash_algo);
+	return hash_to_hex_algop(oid->hash, &hash_algos[oid->algo]);
 }
diff --git a/http-backend.c b/http-backend.c
index a03b4ba..b329bf6 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -39,7 +39,7 @@
 	if (!query_params) {
 		const char *query = getenv("QUERY_STRING");
 
-		query_params = xcalloc(1, sizeof(*query_params));
+		CALLOC_ARRAY(query_params, 1);
 		while (query && *query) {
 			char *name = url_decode_parameter_name(&query);
 			char *value = url_decode_parameter_value(&query);
diff --git a/http-fetch.c b/http-fetch.c
index c4ccc5f..fa64246 100644
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -3,6 +3,7 @@
 #include "exec-cmd.h"
 #include "http.h"
 #include "walker.h"
+#include "strvec.h"
 
 static const char http_fetch_usage[] = "git http-fetch "
 "[-c] [-t] [-a] [-v] [--recover] [-w ref] [--stdin | --packfile=hash | commit-id] url";
@@ -44,7 +45,8 @@
 }
 
 static void fetch_single_packfile(struct object_id *packfile_hash,
-				  const char *url) {
+				  const char *url,
+				  const char **index_pack_args) {
 	struct http_pack_request *preq;
 	struct slot_results results;
 	int ret;
@@ -55,7 +57,8 @@
 	if (preq == NULL)
 		die("couldn't create http pack request");
 	preq->slot->results = &results;
-	preq->generate_keep = 1;
+	preq->index_pack_args = index_pack_args;
+	preq->preserve_index_pack_stdout = 1;
 
 	if (start_active_slot(preq->slot)) {
 		run_active_slot(preq->slot);
@@ -86,6 +89,7 @@
 	int packfile = 0;
 	int nongit;
 	struct object_id packfile_hash;
+	struct strvec index_pack_args = STRVEC_INIT;
 
 	setup_git_directory_gently(&nongit);
 
@@ -112,6 +116,8 @@
 			packfile = 1;
 			if (parse_oid_hex(p, &packfile_hash, &end) || *end)
 				die(_("argument to --packfile must be a valid hash (got '%s')"), p);
+		} else if (skip_prefix(argv[arg], "--index-pack-arg=", &p)) {
+			strvec_push(&index_pack_args, p);
 		}
 		arg++;
 	}
@@ -124,10 +130,18 @@
 	git_config(git_default_config, NULL);
 
 	if (packfile) {
-		fetch_single_packfile(&packfile_hash, argv[arg]);
+		if (!index_pack_args.nr)
+			die(_("--packfile requires --index-pack-args"));
+
+		fetch_single_packfile(&packfile_hash, argv[arg],
+				      index_pack_args.v);
+
 		return 0;
 	}
 
+	if (index_pack_args.nr)
+		die(_("--index-pack-args can only be used with --packfile"));
+
 	if (commits_on_stdin) {
 		commits = walker_targets_stdin(&commit_id, &write_ref);
 	} else {
diff --git a/http-push.c b/http-push.c
index 6a4a43e..d7cb167 100644
--- a/http-push.c
+++ b/http-push.c
@@ -896,7 +896,7 @@
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, dav_headers);
 	curl_easy_setopt(slot->curl, CURLOPT_FILE, &in_buffer);
 
-	lock = xcalloc(1, sizeof(*lock));
+	CALLOC_ARRAY(lock, 1);
 	lock->timeout = -1;
 
 	if (start_active_slot(slot)) {
@@ -1022,6 +1022,8 @@
 /* extract hex from sharded "xx/x{38}" filename */
 static int get_oid_hex_from_objpath(const char *path, struct object_id *oid)
 {
+	oid->algo = hash_algo_by_ptr(the_hash_algo);
+
 	if (strlen(path) != the_hash_algo->hexsz + 1)
 		return -1;
 
@@ -1436,7 +1438,7 @@
 	 * may be required for updating server info later.
 	 */
 	if (repo->can_update_info_refs && !has_object_file(&ref->old_oid)) {
-		obj = lookup_unknown_object(&ref->old_oid);
+		obj = lookup_unknown_object(the_repository, &ref->old_oid);
 		fprintf(stderr,	"  fetch %s for %s\n",
 			oid_to_hex(&ref->old_oid), refname);
 		add_fetch_request(obj);
@@ -1713,7 +1715,7 @@
 	int new_refs;
 	struct ref *ref, *local_refs;
 
-	repo = xcalloc(1, sizeof(*repo));
+	CALLOC_ARRAY(repo, 1);
 
 	argv++;
 	for (i = 1; i < argc; i++, argv++) {
diff --git a/http-walker.c b/http-walker.c
index 4fb1235..90d8ecb 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -155,7 +155,7 @@
 
 	newreq = xmalloc(sizeof(*newreq));
 	newreq->walker = walker;
-	hashcpy(newreq->oid.hash, sha1);
+	oidread(&newreq->oid, sha1);
 	newreq->repo = data->alt;
 	newreq->state = WAITING;
 	newreq->req = NULL;
diff --git a/http.c b/http.c
index 8b23a54..8119247 100644
--- a/http.c
+++ b/http.c
@@ -1635,9 +1635,18 @@
 
 	if (results->curl_result == CURLE_OK) {
 		credential_approve(&http_auth);
-		if (proxy_auth.password)
-			credential_approve(&proxy_auth);
+		credential_approve(&proxy_auth);
+		credential_approve(&cert_auth);
 		return HTTP_OK;
+	} else if (results->curl_result == CURLE_SSL_CERTPROBLEM) {
+		/*
+		 * We can't tell from here whether it's a bad path, bad
+		 * certificate, bad password, or something else wrong
+		 * with the certificate.  So we reject the credential to
+		 * avoid caching or saving a bad password.
+		 */
+		credential_reject(&cert_auth);
+		return HTTP_NOAUTH;
 	} else if (missing_target(results))
 		return HTTP_MISSING_TARGET;
 	else if (results->http_code == 401) {
@@ -2259,6 +2268,9 @@
 	free(preq);
 }
 
+static const char *default_index_pack_args[] =
+	{"index-pack", "--stdin", NULL};
+
 int finish_http_pack_request(struct http_pack_request *preq)
 {
 	struct child_process ip = CHILD_PROCESS_INIT;
@@ -2270,17 +2282,15 @@
 
 	tmpfile_fd = xopen(preq->tmpfile.buf, O_RDONLY);
 
-	strvec_push(&ip.args, "index-pack");
-	strvec_push(&ip.args, "--stdin");
 	ip.git_cmd = 1;
 	ip.in = tmpfile_fd;
-	if (preq->generate_keep) {
-		strvec_pushf(&ip.args, "--keep=git %"PRIuMAX,
-			     (uintmax_t)getpid());
+	ip.argv = preq->index_pack_args ? preq->index_pack_args
+					: default_index_pack_args;
+
+	if (preq->preserve_index_pack_stdout)
 		ip.out = 0;
-	} else {
+	else
 		ip.no_stdout = 1;
-	}
 
 	if (run_command(&ip)) {
 		ret = -1;
@@ -2323,7 +2333,7 @@
 	off_t prev_posn = 0;
 	struct http_pack_request *preq;
 
-	preq = xcalloc(1, sizeof(*preq));
+	CALLOC_ARRAY(preq, 1);
 	strbuf_init(&preq->tmpfile, 0);
 
 	preq->url = url;
@@ -2418,7 +2428,7 @@
 	off_t prev_posn = 0;
 	struct http_object_request *freq;
 
-	freq = xcalloc(1, sizeof(*freq));
+	CALLOC_ARRAY(freq, 1);
 	strbuf_init(&freq->tmpfile, 0);
 	oidcpy(&freq->oid, oid);
 	freq->localfile = -1;
@@ -2565,7 +2575,7 @@
 	}
 
 	git_inflate_end(&freq->stream);
-	the_hash_algo->final_fn(freq->real_oid.hash, &freq->c);
+	the_hash_algo->final_oid_fn(&freq->real_oid, &freq->c);
 	if (freq->zret != Z_STREAM_END) {
 		unlink_or_warn(freq->tmpfile.buf);
 		return -1;
diff --git a/http.h b/http.h
index 5de792e..bf3d127 100644
--- a/http.h
+++ b/http.h
@@ -218,12 +218,12 @@
 	char *url;
 
 	/*
-	 * If this is true, finish_http_pack_request() will pass "--keep" to
-	 * index-pack, resulting in the creation of a keep file, and will not
-	 * suppress its stdout (that is, the "keep\t<hash>\n" line will be
-	 * printed to stdout).
+	 * index-pack command to run. Must be terminated by NULL.
+	 *
+	 * If NULL, defaults to	{"index-pack", "--stdin", NULL}.
 	 */
-	unsigned generate_keep : 1;
+	const char **index_pack_args;
+	unsigned preserve_index_pack_stdout : 1;
 
 	FILE *packfile;
 	struct strbuf tmpfile;
diff --git a/imap-send.c b/imap-send.c
index d0b94f9..a0540ba 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -451,6 +451,7 @@
 	/* not reached */
 }
 
+__attribute__((format (printf, 1, 2)))
 static void imap_info(const char *msg, ...)
 {
 	va_list va;
@@ -463,6 +464,7 @@
 	}
 }
 
+__attribute__((format (printf, 1, 2)))
 static void imap_warn(const char *msg, ...)
 {
 	va_list va;
@@ -504,6 +506,7 @@
 	return ret;
 }
 
+__attribute__((format (printf, 3, 4)))
 static int nfsnprintf(char *buf, int blen, const char *fmt, ...)
 {
 	int ret;
@@ -963,9 +966,9 @@
 	char *arg, *rsp;
 	int s = -1, preauth;
 
-	ctx = xcalloc(1, sizeof(*ctx));
+	CALLOC_ARRAY(ctx, 1);
 
-	ctx->imap = imap = xcalloc(1, sizeof(*imap));
+	ctx->imap = CALLOC_ARRAY(imap, 1);
 	imap->buf.sock.fd[0] = imap->buf.sock.fd[1] = -1;
 	imap->in_progress_append = &imap->in_progress;
 
@@ -1266,18 +1269,6 @@
 	*msg = buf;
 }
 
-#define CHUNKSIZE 0x1000
-
-static int read_message(FILE *f, struct strbuf *all_msgs)
-{
-	do {
-		if (strbuf_fread(all_msgs, CHUNKSIZE, f) <= 0)
-			break;
-	} while (!feof(f));
-
-	return ferror(f) ? -1 : 0;
-}
-
 static int count_messages(struct strbuf *all_msgs)
 {
 	int count = 0;
@@ -1582,8 +1573,8 @@
 	}
 
 	/* read the messages */
-	if (read_message(stdin, &all_msgs)) {
-		fprintf(stderr, "error reading input\n");
+	if (strbuf_read(&all_msgs, 0, 0) < 0) {
+		error_errno(_("could not read from stdin"));
 		return 1;
 	}
 
diff --git a/json-writer.c b/json-writer.c
index aadb9db..f1cfd8f 100644
--- a/json-writer.c
+++ b/json-writer.c
@@ -3,10 +3,8 @@
 
 void jw_init(struct json_writer *jw)
 {
-	strbuf_init(&jw->json, 0);
-	strbuf_init(&jw->open_stack, 0);
-	jw->need_comma = 0;
-	jw->pretty = 0;
+	struct json_writer blank = JSON_WRITER_INIT;
+	memcpy(jw, &blank, sizeof(*jw));;
 }
 
 void jw_release(struct json_writer *jw)
diff --git a/json-writer.h b/json-writer.h
index 83906b0..209355e 100644
--- a/json-writer.h
+++ b/json-writer.h
@@ -64,7 +64,10 @@
 	unsigned int pretty:1;
 };
 
-#define JSON_WRITER_INIT { STRBUF_INIT, STRBUF_INIT, 0, 0 }
+#define JSON_WRITER_INIT { \
+	.json = STRBUF_INIT, \
+	.open_stack = STRBUF_INIT, \
+}
 
 void jw_init(struct json_writer *jw);
 void jw_release(struct json_writer *jw);
diff --git a/khash.h b/khash.h
index 21c2095..cb79bf8 100644
--- a/khash.h
+++ b/khash.h
@@ -74,7 +74,7 @@
 	void kh_destroy_##name(kh_##name##_t *h);					\
 	void kh_clear_##name(kh_##name##_t *h);						\
 	khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \
-	int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
+	void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
 	khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \
 	void kh_del_##name(kh_##name##_t *h, khint_t x);
 
@@ -116,7 +116,7 @@
 			return __ac_iseither(h->flags, i)? h->n_buckets : i;		\
 		} else return 0;												\
 	}																	\
-	SCOPE int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \
+	SCOPE void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \
 	{ /* This function uses 0.25*n_buckets bytes of working space instead of [sizeof(key_t+val_t)+.25]*n_buckets. */ \
 		khint32_t *new_flags = NULL;										\
 		khint_t j = 1;													\
@@ -126,7 +126,6 @@
 			if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0;	/* requested size is too small */ \
 			else { /* hash table size to be changed (shrink or expand); rehash */ \
 				ALLOC_ARRAY(new_flags, __ac_fsize(new_n_buckets)); \
-				if (!new_flags) return -1;								\
 				memset(new_flags, 0xaa, __ac_fsize(new_n_buckets) * sizeof(khint32_t)); \
 				if (h->n_buckets < new_n_buckets) {	/* expand */		\
 					REALLOC_ARRAY(h->keys, new_n_buckets); \
@@ -173,18 +172,15 @@
 			h->n_occupied = h->size;									\
 			h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \
 		}																\
-		return 0;														\
 	}																	\
 	SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) \
 	{																	\
 		khint_t x;														\
 		if (h->n_occupied >= h->upper_bound) { /* update the hash table */ \
 			if (h->n_buckets > (h->size<<1)) {							\
-				if (kh_resize_##name(h, h->n_buckets - 1) < 0) { /* clear "deleted" elements */ \
-					*ret = -1; return h->n_buckets;						\
-				}														\
-			} else if (kh_resize_##name(h, h->n_buckets + 1) < 0) { /* expand the hash table */ \
-				*ret = -1; return h->n_buckets;							\
+				kh_resize_##name(h, h->n_buckets - 1); /* clear "deleted" elements */ \
+			} else { \
+				kh_resize_##name(h, h->n_buckets + 1); /* expand the hash table */ \
 			}															\
 		} /* TODO: to implement automatically shrinking; resize() already support shrinking */ \
 		{																\
diff --git a/line-log.c b/line-log.c
index 75c8b1a..51d9331 100644
--- a/line-log.c
+++ b/line-log.c
@@ -296,7 +296,7 @@
 		return;
 	}
 
-	p = xcalloc(1, sizeof(struct line_log_data));
+	CALLOC_ARRAY(p, 1);
 	p->path = path;
 	range_set_append(&p->ranges, begin, end);
 	if (ip) {
diff --git a/line-range.c b/line-range.c
index 9b50583..955a8a9 100644
--- a/line-range.c
+++ b/line-range.c
@@ -202,7 +202,7 @@
 	drv = userdiff_find_by_path(istate, path);
 	if (drv && drv->funcname.pattern) {
 		const struct userdiff_funcname *pe = &drv->funcname;
-		xecfg = xcalloc(1, sizeof(*xecfg));
+		CALLOC_ARRAY(xecfg, 1);
 		xdiff_set_find_func(xecfg, pe->pattern, pe->cflags);
 	}
 
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c
index d2d1c81..fd8d59f 100644
--- a/list-objects-filter-options.c
+++ b/list-objects-filter-options.c
@@ -29,6 +29,8 @@
 		return "tree";
 	case LOFC_SPARSE_OID:
 		return "sparse:oid";
+	case LOFC_OBJECT_TYPE:
+		return "object:type";
 	case LOFC_COMBINE:
 		return "combine";
 	case LOFC__COUNT:
@@ -97,6 +99,19 @@
 		}
 		return 1;
 
+	} else if (skip_prefix(arg, "object:type=", &v0)) {
+		int type = type_from_string_gently(v0, strlen(v0), 1);
+		if (type < 0) {
+			strbuf_addf(errbuf, _("'%s' for 'object:type=<type>' is "
+					      "not a valid object type"), v0);
+			return 1;
+		}
+
+		filter_options->object_type = type;
+		filter_options->choice = LOFC_OBJECT_TYPE;
+
+		return 0;
+
 	} else if (skip_prefix(arg, "combine:", &v0)) {
 		return parse_combine_filter(filter_options, v0, errbuf);
 
diff --git a/list-objects-filter-options.h b/list-objects-filter-options.h
index 01767c3..da5b673 100644
--- a/list-objects-filter-options.h
+++ b/list-objects-filter-options.h
@@ -1,6 +1,7 @@
 #ifndef LIST_OBJECTS_FILTER_OPTIONS_H
 #define LIST_OBJECTS_FILTER_OPTIONS_H
 
+#include "cache.h"
 #include "parse-options.h"
 #include "string-list.h"
 
@@ -13,6 +14,7 @@
 	LOFC_BLOB_LIMIT,
 	LOFC_TREE_DEPTH,
 	LOFC_SPARSE_OID,
+	LOFC_OBJECT_TYPE,
 	LOFC_COMBINE,
 	LOFC__COUNT /* must be last */
 };
@@ -54,6 +56,7 @@
 	char *sparse_oid_name;
 	unsigned long blob_limit_value;
 	unsigned long tree_exclude_depth;
+	enum object_type object_type;
 
 	/* LOFC_COMBINE values */
 
diff --git a/list-objects-filter.c b/list-objects-filter.c
index 4ec0041..1c1ee3d 100644
--- a/list-objects-filter.c
+++ b/list-objects-filter.c
@@ -82,6 +82,16 @@
 	default:
 		BUG("unknown filter_situation: %d", filter_situation);
 
+	case LOFS_TAG:
+		assert(obj->type == OBJ_TAG);
+		/* always include all tag objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+	case LOFS_COMMIT:
+		assert(obj->type == OBJ_COMMIT);
+		/* always include all commit objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
 	case LOFS_BEGIN_TREE:
 		assert(obj->type == OBJ_TREE);
 		/* always include all tree objects */
@@ -173,6 +183,16 @@
 	default:
 		BUG("unknown filter_situation: %d", filter_situation);
 
+	case LOFS_TAG:
+		assert(obj->type == OBJ_TAG);
+		/* always include all tag objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+	case LOFS_COMMIT:
+		assert(obj->type == OBJ_COMMIT);
+		/* always include all commit objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
 	case LOFS_END_TREE:
 		assert(obj->type == OBJ_TREE);
 		filter_data->current_depth--;
@@ -186,7 +206,7 @@
 		seen_info = oidmap_get(
 			&filter_data->seen_at_depth, &obj->oid);
 		if (!seen_info) {
-			seen_info = xcalloc(1, sizeof(*seen_info));
+			CALLOC_ARRAY(seen_info, 1);
 			oidcpy(&seen_info->base.oid, &obj->oid);
 			seen_info->depth = filter_data->current_depth;
 			oidmap_put(&filter_data->seen_at_depth, seen_info);
@@ -267,6 +287,16 @@
 	default:
 		BUG("unknown filter_situation: %d", filter_situation);
 
+	case LOFS_TAG:
+		assert(obj->type == OBJ_TAG);
+		/* always include all tag objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+	case LOFS_COMMIT:
+		assert(obj->type == OBJ_COMMIT);
+		/* always include all commit objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
 	case LOFS_BEGIN_TREE:
 		assert(obj->type == OBJ_TREE);
 		/* always include all tree objects */
@@ -371,6 +401,16 @@
 	default:
 		BUG("unknown filter_situation: %d", filter_situation);
 
+	case LOFS_TAG:
+		assert(obj->type == OBJ_TAG);
+		/* always include all tag objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+	case LOFS_COMMIT:
+		assert(obj->type == OBJ_COMMIT);
+		/* always include all commit objects */
+		return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
 	case LOFS_BEGIN_TREE:
 		assert(obj->type == OBJ_TREE);
 		dtype = DT_DIR;
@@ -505,6 +545,81 @@
 	filter->free_fn = filter_sparse_free;
 }
 
+/*
+ * A filter for list-objects to omit large blobs.
+ * And to OPTIONALLY collect a list of the omitted OIDs.
+ */
+struct filter_object_type_data {
+	enum object_type object_type;
+};
+
+static enum list_objects_filter_result filter_object_type(
+	struct repository *r,
+	enum list_objects_filter_situation filter_situation,
+	struct object *obj,
+	const char *pathname,
+	const char *filename,
+	struct oidset *omits,
+	void *filter_data_)
+{
+	struct filter_object_type_data *filter_data = filter_data_;
+
+	switch (filter_situation) {
+	default:
+		BUG("unknown filter_situation: %d", filter_situation);
+
+	case LOFS_TAG:
+		assert(obj->type == OBJ_TAG);
+		if (filter_data->object_type == OBJ_TAG)
+			return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+		return LOFR_MARK_SEEN;
+
+	case LOFS_COMMIT:
+		assert(obj->type == OBJ_COMMIT);
+		if (filter_data->object_type == OBJ_COMMIT)
+			return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+		return LOFR_MARK_SEEN;
+
+	case LOFS_BEGIN_TREE:
+		assert(obj->type == OBJ_TREE);
+
+		/*
+		 * If we only want to show commits or tags, then there is no
+		 * need to walk down trees.
+		 */
+		if (filter_data->object_type == OBJ_COMMIT ||
+		    filter_data->object_type == OBJ_TAG)
+			return LOFR_SKIP_TREE;
+
+		if (filter_data->object_type == OBJ_TREE)
+			return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+
+		return LOFR_MARK_SEEN;
+
+	case LOFS_BLOB:
+		assert(obj->type == OBJ_BLOB);
+
+		if (filter_data->object_type == OBJ_BLOB)
+			return LOFR_MARK_SEEN | LOFR_DO_SHOW;
+		return LOFR_MARK_SEEN;
+
+	case LOFS_END_TREE:
+		return LOFR_ZERO;
+	}
+}
+
+static void filter_object_type__init(
+	struct list_objects_filter_options *filter_options,
+	struct filter *filter)
+{
+	struct filter_object_type_data *d = xcalloc(1, sizeof(*d));
+	d->object_type = filter_options->object_type;
+
+	filter->filter_data = d;
+	filter->filter_object_fn = filter_object_type;
+	filter->free_fn = free;
+}
+
 /* A filter which only shows objects shown by all sub-filters. */
 struct combine_filter_data {
 	struct subfilter *sub;
@@ -626,7 +741,7 @@
 	size_t sub;
 
 	d->nr = filter_options->sub_nr;
-	d->sub = xcalloc(d->nr, sizeof(*d->sub));
+	CALLOC_ARRAY(d->sub, d->nr);
 	for (sub = 0; sub < d->nr; sub++)
 		d->sub[sub].filter = list_objects_filter__init(
 			filter->omits ? &d->sub[sub].omits : NULL,
@@ -651,6 +766,7 @@
 	filter_blobs_limit__init,
 	filter_trees_depth__init,
 	filter_sparse_oid__init,
+	filter_object_type__init,
 	filter_combine__init,
 };
 
@@ -674,7 +790,7 @@
 	if (!init_fn)
 		return NULL;
 
-	filter = xcalloc(1, sizeof(*filter));
+	CALLOC_ARRAY(filter, 1);
 	filter->omits = omitted;
 	init_fn(filter_options, filter);
 	return filter;
diff --git a/list-objects-filter.h b/list-objects-filter.h
index cfd784e..9e98814 100644
--- a/list-objects-filter.h
+++ b/list-objects-filter.h
@@ -55,6 +55,8 @@
 };
 
 enum list_objects_filter_situation {
+	LOFS_COMMIT,
+	LOFS_TAG,
 	LOFS_BEGIN_TREE,
 	LOFS_END_TREE,
 	LOFS_BLOB
diff --git a/list-objects.c b/list-objects.c
index e19589b..473a332 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -164,6 +164,9 @@
 		die("bad tree object");
 	if (obj->flags & (UNINTERESTING | SEEN))
 		return;
+	if (revs->include_check_obj &&
+	    !revs->include_check_obj(&tree->object, revs->include_check_data))
+		return;
 
 	failed_parse = parse_tree_gently(tree, 1);
 	if (failed_parse) {
@@ -213,6 +216,21 @@
 	free_tree_buffer(tree);
 }
 
+static void process_tag(struct traversal_context *ctx,
+			struct tag *tag,
+			const char *name)
+{
+	enum list_objects_filter_result r;
+
+	r = list_objects_filter__filter_object(ctx->revs->repo, LOFS_TAG,
+					       &tag->object, NULL, NULL,
+					       ctx->filter);
+	if (r & LOFR_MARK_SEEN)
+		tag->object.flags |= SEEN;
+	if (r & LOFR_DO_SHOW)
+		ctx->show_object(&tag->object, name, ctx->show_data);
+}
+
 static void mark_edge_parents_uninteresting(struct commit *commit,
 					    struct rev_info *revs,
 					    show_edge_fn show_edge)
@@ -334,8 +352,7 @@
 		if (obj->flags & (UNINTERESTING | SEEN))
 			continue;
 		if (obj->type == OBJ_TAG) {
-			obj->flags |= SEEN;
-			ctx->show_object(obj, name, ctx->show_data);
+			process_tag(ctx, (struct tag *)obj, name);
 			continue;
 		}
 		if (!path)
@@ -361,6 +378,12 @@
 	strbuf_init(&csp, PATH_MAX);
 
 	while ((commit = get_revision(ctx->revs)) != NULL) {
+		enum list_objects_filter_result r;
+
+		r = list_objects_filter__filter_object(ctx->revs->repo,
+				LOFS_COMMIT, &commit->object,
+				NULL, NULL, ctx->filter);
+
 		/*
 		 * an uninteresting boundary commit may not have its tree
 		 * parsed yet, but we are not going to show them anyway
@@ -375,7 +398,11 @@
 			die(_("unable to load root tree for commit %s"),
 			      oid_to_hex(&commit->object.oid));
 		}
-		ctx->show_commit(commit, ctx->show_data);
+
+		if (r & LOFR_MARK_SEEN)
+			commit->object.flags |= SEEN;
+		if (r & LOFR_DO_SHOW)
+			ctx->show_commit(commit, ctx->show_data);
 
 		if (ctx->revs->tree_blobs_in_commit_order)
 			/*
diff --git a/ll-merge.c b/ll-merge.c
index 1ec0b95..2616575 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -91,7 +91,9 @@
 	 * With -Xtheirs or -Xours, we have cleanly merged;
 	 * otherwise we got a conflict.
 	 */
-	return (opts->variant ? 0 : 1);
+	return opts->variant == XDL_MERGE_FAVOR_OURS ||
+	       opts->variant == XDL_MERGE_FAVOR_THEIRS ?
+	       0 : 1;
 }
 
 static int ll_xdl_merge(const struct ll_merge_driver *drv_unused,
@@ -136,7 +138,7 @@
 
 static int ll_union_merge(const struct ll_merge_driver *drv_unused,
 			  mmbuffer_t *result,
-			  const char *path_unused,
+			  const char *path,
 			  mmfile_t *orig, const char *orig_name,
 			  mmfile_t *src1, const char *name1,
 			  mmfile_t *src2, const char *name2,
@@ -148,8 +150,8 @@
 	assert(opts);
 	o = *opts;
 	o.variant = XDL_MERGE_FAVOR_UNION;
-	return ll_xdl_merge(drv_unused, result, path_unused,
-			    orig, NULL, src1, NULL, src2, NULL,
+	return ll_xdl_merge(drv_unused, result, path,
+			    orig, orig_name, src1, name1, src2, name2,
 			    &o, marker_size);
 }
 
@@ -268,7 +270,7 @@
 		if (!strncmp(fn->name, name, namelen) && !fn->name[namelen])
 			break;
 	if (!fn) {
-		fn = xcalloc(1, sizeof(struct ll_merge_driver));
+		CALLOC_ARRAY(fn, 1);
 		fn->name = xmemdupz(name, namelen);
 		fn->fn = ll_ext_merge;
 		*ll_user_merge_tail = fn;
diff --git a/log-tree.c b/log-tree.c
index 4531ceb..6dc4412 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -134,7 +134,8 @@
 			      int flags, void *cb_data)
 {
 	struct object *obj;
-	enum decoration_type type = DECORATION_NONE;
+	enum object_type objtype;
+	enum decoration_type deco_type = DECORATION_NONE;
 	struct decoration_filter *filter = (struct decoration_filter *)cb_data;
 
 	if (filter && !ref_filter_match(refname, filter))
@@ -155,28 +156,29 @@
 		return 0;
 	}
 
-	obj = parse_object(the_repository, oid);
-	if (!obj)
+	objtype = oid_object_info(the_repository, oid, NULL);
+	if (objtype < 0)
 		return 0;
+	obj = lookup_object_by_type(the_repository, oid, objtype);
 
 	if (starts_with(refname, "refs/heads/"))
-		type = DECORATION_REF_LOCAL;
+		deco_type = DECORATION_REF_LOCAL;
 	else if (starts_with(refname, "refs/remotes/"))
-		type = DECORATION_REF_REMOTE;
+		deco_type = DECORATION_REF_REMOTE;
 	else if (starts_with(refname, "refs/tags/"))
-		type = DECORATION_REF_TAG;
+		deco_type = DECORATION_REF_TAG;
 	else if (!strcmp(refname, "refs/stash"))
-		type = DECORATION_REF_STASH;
+		deco_type = DECORATION_REF_STASH;
 	else if (!strcmp(refname, "HEAD"))
-		type = DECORATION_REF_HEAD;
+		deco_type = DECORATION_REF_HEAD;
 
-	add_name_decoration(type, refname, obj);
+	add_name_decoration(deco_type, refname, obj);
 	while (obj->type == OBJ_TAG) {
+		if (!obj->parsed)
+			parse_object(the_repository, &obj->oid);
 		obj = ((struct tag *)obj)->tagged;
 		if (!obj)
 			break;
-		if (!obj->parsed)
-			parse_object(the_repository, &obj->oid);
 		add_name_decoration(DECORATION_REF_TAG, refname, obj);
 	}
 	return 0;
@@ -369,8 +371,14 @@
 	int start_len = filename->len;
 	int max_len = start_len + info->patch_name_max - (strlen(suffix) + 1);
 
-	if (0 < info->reroll_count)
-		strbuf_addf(filename, "v%d-", info->reroll_count);
+	if (info->reroll_count) {
+		struct strbuf temp = STRBUF_INIT;
+
+		strbuf_addf(&temp, "v%s", info->reroll_count);
+		format_sanitized_subject(filename, temp.buf, temp.len);
+		strbuf_addstr(filename, "-");
+		strbuf_release(&temp);
+	}
 	strbuf_addf(filename, "%04d-%s", nr, subject);
 
 	if (max_len < filename->len)
@@ -413,7 +421,7 @@
 {
 	const char *extra_headers = opt->extra_headers;
 	const char *name = oid_to_hex(opt->zero_commit ?
-				      &null_oid : &commit->object.oid);
+				      null_oid() : &commit->object.oid);
 
 	*need_8bit_cte_p = 0; /* unknown */
 
diff --git a/mailinfo.c b/mailinfo.c
index 5681d91..02f6f95 100644
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -19,7 +19,7 @@
 static void get_sane_name(struct strbuf *out, struct strbuf *name, struct strbuf *email)
 {
 	struct strbuf *src = name;
-	if (name->len < 3 || 60 < name->len || strpbrk(name->buf, "@<>"))
+	if (!name->len || 60 < name->len || strpbrk(name->buf, "@<>"))
 		src = email;
 	else if (name == out)
 		return;
@@ -705,8 +705,8 @@
 			perforation++;
 			continue;
 		}
-		if ((!memcmp(c, ">8", 2) || !memcmp(c, "8<", 2) ||
-		     !memcmp(c, ">%", 2) || !memcmp(c, "%<", 2))) {
+		if (starts_with(c, ">8") || starts_with(c, "8<") ||
+		    starts_with(c, ">%") || starts_with(c, "%<")) {
 			in_perforation = 1;
 			perforation += 2;
 			scissors += 2;
@@ -821,7 +821,7 @@
 		for (i = 0; header[i]; i++) {
 			if (mi->s_hdr_data[i])
 				strbuf_release(mi->s_hdr_data[i]);
-			mi->s_hdr_data[i] = NULL;
+			FREE_AND_NULL(mi->s_hdr_data[i]);
 		}
 		return 0;
 	}
@@ -994,6 +994,16 @@
 	const char *rest;
 
 	if (!mi->format_flowed) {
+		if (len >= 2 &&
+		    line->buf[len - 2] == '\r' &&
+		    line->buf[len - 1] == '\n') {
+			mi->have_quoted_cr = 1;
+			if (mi->quoted_cr == quoted_cr_strip) {
+				strbuf_setlen(line, len - 2);
+				strbuf_addch(line, '\n');
+				len--;
+			}
+		}
 		handle_filter(mi, line);
 		return;
 	}
@@ -1033,6 +1043,13 @@
 	handle_filter(mi, line);
 }
 
+static void summarize_quoted_cr(struct mailinfo *mi)
+{
+	if (mi->have_quoted_cr &&
+	    mi->quoted_cr == quoted_cr_warn)
+		warning(_("quoted CRLF detected"));
+}
+
 static void handle_body(struct mailinfo *mi, struct strbuf *line)
 {
 	struct strbuf prev = STRBUF_INIT;
@@ -1051,6 +1068,8 @@
 				handle_filter(mi, &prev);
 				strbuf_reset(&prev);
 			}
+			summarize_quoted_cr(mi);
+			mi->have_quoted_cr = 0;
 			if (!handle_boundary(mi, line))
 				goto handle_body_out;
 		}
@@ -1100,6 +1119,7 @@
 
 	if (prev.len)
 		handle_filter(mi, &prev);
+	summarize_quoted_cr(mi);
 
 	flush_inbody_header_accum(mi);
 
@@ -1206,6 +1226,19 @@
 	return mi->input_error;
 }
 
+int mailinfo_parse_quoted_cr_action(const char *actionstr, int *action)
+{
+	if (!strcmp(actionstr, "nowarn"))
+		*action = quoted_cr_nowarn;
+	else if (!strcmp(actionstr, "warn"))
+		*action = quoted_cr_warn;
+	else if (!strcmp(actionstr, "strip"))
+		*action = quoted_cr_strip;
+	else
+		return -1;
+	return 0;
+}
+
 static int git_mailinfo_config(const char *var, const char *value, void *mi_)
 {
 	struct mailinfo *mi = mi_;
@@ -1216,6 +1249,11 @@
 		mi->use_scissors = git_config_bool(var, value);
 		return 0;
 	}
+	if (!strcmp(var, "mailinfo.quotedcr")) {
+		if (mailinfo_parse_quoted_cr_action(value, &mi->quoted_cr) != 0)
+			return error(_("bad action '%s' for '%s'"), value, var);
+		return 0;
+	}
 	/* perhaps others here */
 	return 0;
 }
@@ -1228,6 +1266,7 @@
 	strbuf_init(&mi->charset, 0);
 	strbuf_init(&mi->log_message, 0);
 	strbuf_init(&mi->inbody_header_accum, 0);
+	mi->quoted_cr = quoted_cr_warn;
 	mi->header_stage = 1;
 	mi->use_inbody_headers = 1;
 	mi->content_top = mi->content;
@@ -1236,22 +1275,14 @@
 
 void clear_mailinfo(struct mailinfo *mi)
 {
-	int i;
-
 	strbuf_release(&mi->name);
 	strbuf_release(&mi->email);
 	strbuf_release(&mi->charset);
 	strbuf_release(&mi->inbody_header_accum);
 	free(mi->message_id);
 
-	if (mi->p_hdr_data)
-		for (i = 0; mi->p_hdr_data[i]; i++)
-			strbuf_release(mi->p_hdr_data[i]);
-	free(mi->p_hdr_data);
-	if (mi->s_hdr_data)
-		for (i = 0; mi->s_hdr_data[i]; i++)
-			strbuf_release(mi->s_hdr_data[i]);
-	free(mi->s_hdr_data);
+	strbuf_list_free(mi->p_hdr_data);
+	strbuf_list_free(mi->s_hdr_data);
 
 	while (mi->content < mi->content_top) {
 		free(*(mi->content_top));
diff --git a/mailinfo.h b/mailinfo.h
index 79b1d67..f2ffd03 100644
--- a/mailinfo.h
+++ b/mailinfo.h
@@ -5,6 +5,13 @@
 
 #define MAX_BOUNDARIES 5
 
+enum quoted_cr_action {
+	quoted_cr_unset = -1,
+	quoted_cr_nowarn,
+	quoted_cr_warn,
+	quoted_cr_strip,
+};
+
 struct mailinfo {
 	FILE *input;
 	FILE *output;
@@ -14,6 +21,7 @@
 	struct strbuf email;
 	int keep_subject;
 	int keep_non_patch_brackets_in_subject;
+	int quoted_cr; /* enum quoted_cr_action */
 	int add_message_id;
 	int use_scissors;
 	int use_inbody_headers;
@@ -24,6 +32,7 @@
 	struct strbuf charset;
 	unsigned int format_flowed:1;
 	unsigned int delsp:1;
+	unsigned int have_quoted_cr:1;
 	char *message_id;
 	enum  {
 		TE_DONTCARE, TE_QP, TE_BASE64
@@ -39,6 +48,7 @@
 	int input_error;
 };
 
+int mailinfo_parse_quoted_cr_action(const char *actionstr, int *action);
 void setup_mailinfo(struct mailinfo *);
 int mailinfo(struct mailinfo *, const char *msg, const char *patch);
 void clear_mailinfo(struct mailinfo *);
diff --git a/mailmap.c b/mailmap.c
index 9bb9cf8..462b395 100644
--- a/mailmap.c
+++ b/mailmap.c
@@ -8,6 +8,7 @@
 #define debug_mm(...) fprintf(stderr, __VA_ARGS__)
 #define debug_str(X) ((X) ? (X) : "(none)")
 #else
+__attribute__((format (printf, 1, 2)))
 static inline void debug_mm(const char *format, ...) {}
 static inline const char *debug_str(const char *s) { return s; }
 #endif
@@ -83,7 +84,7 @@
 	if (item->util) {
 		me = (struct mailmap_entry *)item->util;
 	} else {
-		me = xcalloc(1, sizeof(struct mailmap_entry));
+		CALLOC_ARRAY(me, 1);
 		me->namemap.strdup_strings = 1;
 		me->namemap.cmp = namemap_cmp;
 		item->util = me;
@@ -157,20 +158,30 @@
 		add_mapping(map, name1, email1, name2, email2);
 }
 
-static int read_mailmap_file(struct string_list *map, const char *filename)
+/* Flags for read_mailmap_file() */
+#define MAILMAP_NOFOLLOW (1<<0)
+
+static int read_mailmap_file(struct string_list *map, const char *filename,
+			     unsigned flags)
 {
 	char buffer[1024];
 	FILE *f;
+	int fd;
 
 	if (!filename)
 		return 0;
 
-	f = fopen(filename, "r");
-	if (!f) {
+	if (flags & MAILMAP_NOFOLLOW)
+		fd = open_nofollow(filename, O_RDONLY);
+	else
+		fd = open(filename, O_RDONLY);
+
+	if (fd < 0) {
 		if (errno == ENOENT)
 			return 0;
 		return error_errno("unable to open mailmap at %s", filename);
 	}
+	f = xfdopen(fd, "r");
 
 	while (fgets(buffer, sizeof(buffer), f) != NULL)
 		read_mailmap_line(map, buffer);
@@ -226,10 +237,12 @@
 		git_mailmap_blob = "HEAD:.mailmap";
 
 	if (!startup_info->have_repository || !is_bare_repository())
-		err |= read_mailmap_file(map, ".mailmap");
+		err |= read_mailmap_file(map, ".mailmap",
+					 startup_info->have_repository ?
+					 MAILMAP_NOFOLLOW : 0);
 	if (startup_info->have_repository)
 		err |= read_mailmap_blob(map, git_mailmap_blob);
-	err |= read_mailmap_file(map, git_mailmap_file);
+	err |= read_mailmap_file(map, git_mailmap_file, 0);
 	return err;
 }
 
diff --git a/match-trees.c b/match-trees.c
index f6c194c..df41398 100644
--- a/match-trees.c
+++ b/match-trees.c
@@ -226,7 +226,7 @@
 		    oid_to_hex(oid1));
 	if (*subpath) {
 		struct object_id tree_oid;
-		hashcpy(tree_oid.hash, rewrite_here);
+		oidread(&tree_oid, rewrite_here);
 		status = splice_tree(&tree_oid, subpath, oid2, &subtree);
 		if (status)
 			return status;
diff --git a/mem-pool.c b/mem-pool.c
index 8401761..ccdcad2 100644
--- a/mem-pool.c
+++ b/mem-pool.c
@@ -5,7 +5,7 @@
 #include "cache.h"
 #include "mem-pool.h"
 
-#define BLOCK_GROWTH_SIZE 1024*1024 - sizeof(struct mp_block);
+#define BLOCK_GROWTH_SIZE (1024 * 1024 - sizeof(struct mp_block))
 
 /*
  * Allocate a new mp_block and insert it after the block specified in
diff --git a/merge-ort-wrappers.c b/merge-ort-wrappers.c
index 7eec25f..ad04106 100644
--- a/merge-ort-wrappers.c
+++ b/merge-ort-wrappers.c
@@ -30,7 +30,7 @@
 		return -1;
 
 	if (oideq(&merge_base->object.oid, &merge->object.oid)) {
-		printf(_("Already up to date!"));
+		printf_ln(_("Already up to date."));
 		return 1;
 	}
 
diff --git a/merge-ort.c b/merge-ort.c
index 931b914..ec0c590 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -18,6 +18,7 @@
 #include "merge-ort.h"
 
 #include "alloc.h"
+#include "attr.h"
 #include "blob.h"
 #include "cache-tree.h"
 #include "commit.h"
@@ -25,8 +26,10 @@
 #include "diff.h"
 #include "diffcore.h"
 #include "dir.h"
+#include "entry.h"
 #include "ll-merge.h"
 #include "object-store.h"
+#include "promisor-remote.h"
 #include "revision.h"
 #include "strmap.h"
 #include "submodule.h"
@@ -51,6 +54,14 @@
 	MERGE_SIDE2 = 2
 };
 
+static unsigned RESULT_INITIALIZED = 0x1abe11ed; /* unlikely accidental value */
+
+struct traversal_callback_data {
+	unsigned long mask;
+	unsigned long dirmask;
+	struct name_entry names[3];
+};
+
 struct rename_info {
 	/*
 	 * All variables that are arrays of size 3 correspond to data tracked
@@ -67,8 +78,12 @@
 
 	/*
 	 * dirs_removed: directories removed on a given side of history.
+	 *
+	 * The keys of dirs_removed[side] are the directories that were removed
+	 * on the given side of history.  The value of the strintmap for each
+	 * directory is a value from enum dir_rename_relevance.
 	 */
-	struct strset dirs_removed[3];
+	struct strintmap dirs_removed[3];
 
 	/*
 	 * dir_rename_count: tracking where parts of a directory were renamed to
@@ -89,6 +104,112 @@
 	struct strmap dir_renames[3];
 
 	/*
+	 * relevant_sources: deleted paths wanted in rename detection, and why
+	 *
+	 * relevant_sources is a set of deleted paths on each side of
+	 * history for which we need rename detection.  If a path is deleted
+	 * on one side of history, we need to detect if it is part of a
+	 * rename if either
+	 *    * the file is modified/deleted on the other side of history
+	 *    * we need to detect renames for an ancestor directory
+	 * If neither of those are true, we can skip rename detection for
+	 * that path.  The reason is stored as a value from enum
+	 * file_rename_relevance, as the reason can inform the algorithm in
+	 * diffcore_rename_extended().
+	 */
+	struct strintmap relevant_sources[3];
+
+	/*
+	 * dir_rename_mask:
+	 *   0: optimization removing unmodified potential rename source okay
+	 *   2 or 4: optimization okay, but must check for files added to dir
+	 *   7: optimization forbidden; need rename source in case of dir rename
+	 */
+	unsigned dir_rename_mask:3;
+
+	/*
+	 * callback_data_*: supporting data structures for alternate traversal
+	 *
+	 * We sometimes need to be able to traverse through all the files
+	 * in a given tree before all immediate subdirectories within that
+	 * tree.  Since traverse_trees() doesn't do that naturally, we have
+	 * a traverse_trees_wrapper() that stores any immediate
+	 * subdirectories while traversing files, then traverses the
+	 * immediate subdirectories later.  These callback_data* variables
+	 * store the information for the subdirectories so that we can do
+	 * that traversal order.
+	 */
+	struct traversal_callback_data *callback_data;
+	int callback_data_nr, callback_data_alloc;
+	char *callback_data_traverse_path;
+
+	/*
+	 * merge_trees: trees passed to the merge algorithm for the merge
+	 *
+	 * merge_trees records the trees passed to the merge algorithm.  But,
+	 * this data also is stored in merge_result->priv.  If a sequence of
+	 * merges are being done (such as when cherry-picking or rebasing),
+	 * the next merge can look at this and re-use information from
+	 * previous merges under certain circumstances.
+	 *
+	 * See also all the cached_* variables.
+	 */
+	struct tree *merge_trees[3];
+
+	/*
+	 * cached_pairs_valid_side: which side's cached info can be reused
+	 *
+	 * See the description for merge_trees.  For repeated merges, at most
+	 * only one side's cached information can be used.  Valid values:
+	 *   MERGE_SIDE2: cached data from side2 can be reused
+	 *   MERGE_SIDE1: cached data from side1 can be reused
+	 *   0:           no cached data can be reused
+	 */
+	int cached_pairs_valid_side;
+
+	/*
+	 * cached_pairs: Caching of renames and deletions.
+	 *
+	 * These are mappings recording renames and deletions of individual
+	 * files (not directories).  They are thus a map from an old
+	 * filename to either NULL (for deletions) or a new filename (for
+	 * renames).
+	 */
+	struct strmap cached_pairs[3];
+
+	/*
+	 * cached_target_names: just the destinations from cached_pairs
+	 *
+	 * We sometimes want a fast lookup to determine if a given filename
+	 * is one of the destinations in cached_pairs.  cached_target_names
+	 * is thus duplicative information, but it provides a fast lookup.
+	 */
+	struct strset cached_target_names[3];
+
+	/*
+	 * cached_irrelevant: Caching of rename_sources that aren't relevant.
+	 *
+	 * If we try to detect a rename for a source path and succeed, it's
+	 * part of a rename.  If we try to detect a rename for a source path
+	 * and fail, then it's a delete.  If we do not try to detect a rename
+	 * for a path, then we don't know if it's a rename or a delete.  If
+	 * merge-ort doesn't think the path is relevant, then we just won't
+	 * cache anything for that path.  But there's a slight problem in
+	 * that merge-ort can think a path is RELEVANT_LOCATION, but due to
+	 * commit 9bd342137e ("diffcore-rename: determine which
+	 * relevant_sources are no longer relevant", 2021-03-13),
+	 * diffcore-rename can downgrade the path to RELEVANT_NO_MORE.  To
+	 * avoid excessive calls to diffcore_rename_extended() we still need
+	 * to cache such paths, though we cannot record them as either
+	 * renames or deletes.  So we cache them here as a "turned out to be
+	 * irrelevant *for this commit*" as they are often also irrelevant
+	 * for subsequent commits, though we will have to do some extra
+	 * checking to see whether such paths become relevant for rename
+	 * detection when cherry-picking/rebasing subsequent commits.
+	 */
+	struct strset cached_irrelevant[3];
+
+	/*
 	 * needed_limit: value needed for inexact rename detection to run
 	 *
 	 * If the current rename limit wasn't high enough for inexact
@@ -171,6 +292,16 @@
 	struct rename_info renames;
 
 	/*
+	 * attr_index: hacky minimal index used for renormalization
+	 *
+	 * renormalization code _requires_ an index, though it only needs to
+	 * find a .gitattributes file within the index.  So, when
+	 * renormalization is important, we create a special index with just
+	 * that one file.
+	 */
+	struct index_state attr_index;
+
+	/*
 	 * current_dir_name, toplevel_dir: temporary vars
 	 *
 	 * These are used in collect_merge_info_callback(), and will set the
@@ -318,6 +449,8 @@
 	int i;
 	void (*strmap_func)(struct strmap *, int) =
 		reinitialize ? strmap_partial_clear : strmap_clear;
+	void (*strintmap_func)(struct strintmap *) =
+		reinitialize ? strintmap_partial_clear : strintmap_clear;
 	void (*strset_func)(struct strset *) =
 		reinitialize ? strset_partial_clear : strset_clear;
 
@@ -349,22 +482,27 @@
 	string_list_clear(&opti->paths_to_free, 0);
 	opti->paths_to_free.strdup_strings = 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) {
-		struct hashmap_iter iter;
-		struct strmap_entry *entry;
-
-		strset_func(&renames->dirs_removed[i]);
-
-		strmap_for_each_entry(&renames->dir_rename_count[i],
-				      &iter, entry) {
-			struct strintmap *counts = entry->value;
-			strintmap_clear(counts);
-		}
-		strmap_func(&renames->dir_rename_count[i], 1);
-
+		strintmap_func(&renames->dirs_removed[i]);
 		strmap_func(&renames->dir_renames[i], 0);
+		strintmap_func(&renames->relevant_sources[i]);
+		if (!reinitialize)
+			assert(renames->cached_pairs_valid_side == 0);
+		if (i != 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]);
+			partial_clear_dir_rename_count(&renames->dir_rename_count[i]);
+			if (!reinitialize)
+				strmap_clear(&renames->dir_rename_count[i], 1);
+		}
 	}
+	renames->cached_pairs_valid_side = 0;
+	renames->dir_rename_mask = 0;
 
 	if (!reinitialize) {
 		struct hashmap_iter iter;
@@ -386,8 +524,13 @@
 		}
 		strmap_clear(&opti->output, 0);
 	}
+
+	/* Clean out callback_data as well. */
+	FREE_AND_NULL(renames->callback_data);
+	renames->callback_data_nr = renames->callback_data_alloc = 0;
 }
 
+__attribute__((format (printf, 2, 3)))
 static int err(struct merge_options *opt, const char *err, ...)
 {
 	va_list params;
@@ -476,6 +619,82 @@
 
 /*** Function Grouping: functions related to collect_merge_info() ***/
 
+static int traverse_trees_wrapper_callback(int n,
+					   unsigned long mask,
+					   unsigned long dirmask,
+					   struct name_entry *names,
+					   struct traverse_info *info)
+{
+	struct merge_options *opt = info->data;
+	struct rename_info *renames = &opt->priv->renames;
+	unsigned filemask = mask & ~dirmask;
+
+	assert(n==3);
+
+	if (!renames->callback_data_traverse_path)
+		renames->callback_data_traverse_path = xstrdup(info->traverse_path);
+
+	if (filemask && filemask == renames->dir_rename_mask)
+		renames->dir_rename_mask = 0x07;
+
+	ALLOC_GROW(renames->callback_data, renames->callback_data_nr + 1,
+		   renames->callback_data_alloc);
+	renames->callback_data[renames->callback_data_nr].mask = mask;
+	renames->callback_data[renames->callback_data_nr].dirmask = dirmask;
+	COPY_ARRAY(renames->callback_data[renames->callback_data_nr].names,
+		   names, 3);
+	renames->callback_data_nr++;
+
+	return mask;
+}
+
+/*
+ * Much like traverse_trees(), BUT:
+ *   - read all the tree entries FIRST, saving them
+ *   - note that the above step provides an opportunity to compute necessary
+ *     additional details before the "real" traversal
+ *   - loop through the saved entries and call the original callback on them
+ */
+static int traverse_trees_wrapper(struct index_state *istate,
+				  int n,
+				  struct tree_desc *t,
+				  struct traverse_info *info)
+{
+	int ret, i, old_offset;
+	traverse_callback_t old_fn;
+	char *old_callback_data_traverse_path;
+	struct merge_options *opt = info->data;
+	struct rename_info *renames = &opt->priv->renames;
+
+	assert(renames->dir_rename_mask == 2 || renames->dir_rename_mask == 4);
+
+	old_callback_data_traverse_path = renames->callback_data_traverse_path;
+	old_fn = info->fn;
+	old_offset = renames->callback_data_nr;
+
+	renames->callback_data_traverse_path = NULL;
+	info->fn = traverse_trees_wrapper_callback;
+	ret = traverse_trees(istate, n, t, info);
+	if (ret < 0)
+		return ret;
+
+	info->traverse_path = renames->callback_data_traverse_path;
+	info->fn = old_fn;
+	for (i = old_offset; i < renames->callback_data_nr; ++i) {
+		info->fn(n,
+			 renames->callback_data[i].mask,
+			 renames->callback_data[i].dirmask,
+			 renames->callback_data[i].names,
+			 info);
+	}
+
+	renames->callback_data_nr = old_offset;
+	free(renames->callback_data_traverse_path);
+	renames->callback_data_traverse_path = old_callback_data_traverse_path;
+	info->traverse_path = NULL;
+	return 0;
+}
+
 static void setup_path_info(struct merge_options *opt,
 			    struct string_list_item *result,
 			    const char *current_dir_name,
@@ -535,6 +754,72 @@
 	result->util = mi;
 }
 
+static void add_pair(struct merge_options *opt,
+		     struct name_entry *names,
+		     const char *pathname,
+		     unsigned side,
+		     unsigned is_add /* if false, is_delete */,
+		     unsigned match_mask,
+		     unsigned dir_rename_mask)
+{
+	struct diff_filespec *one, *two;
+	struct rename_info *renames = &opt->priv->renames;
+	int names_idx = is_add ? side : 0;
+
+	if (is_add) {
+		assert(match_mask == 0 || match_mask == 6);
+		if (strset_contains(&renames->cached_target_names[side],
+				    pathname))
+			return;
+	} else {
+		unsigned content_relevant = (match_mask == 0);
+		unsigned location_relevant = (dir_rename_mask == 0x07);
+
+		assert(match_mask == 0 || match_mask == 3 || match_mask == 5);
+
+		/*
+		 * If pathname is found in cached_irrelevant[side] due to
+		 * previous pick but for this commit content is relevant,
+		 * then we need to remove it from cached_irrelevant.
+		 */
+		if (content_relevant)
+			/* strset_remove is no-op if strset doesn't have key */
+			strset_remove(&renames->cached_irrelevant[side],
+				      pathname);
+
+		/*
+		 * We do not need to re-detect renames for paths that we already
+		 * know the pairing, i.e. for cached_pairs (or
+		 * cached_irrelevant).  However, handle_deferred_entries() needs
+		 * to loop over the union of keys from relevant_sources[side] and
+		 * cached_pairs[side], so for simplicity we set relevant_sources
+		 * for all the cached_pairs too and then strip them back out in
+		 * prune_cached_from_relevant() at the beginning of
+		 * detect_regular_renames().
+		 */
+		if (content_relevant || location_relevant) {
+			/* content_relevant trumps location_relevant */
+			strintmap_set(&renames->relevant_sources[side], pathname,
+				      content_relevant ? RELEVANT_CONTENT : RELEVANT_LOCATION);
+		}
+
+		/*
+		 * Avoid creating pair if we've already cached rename results.
+		 * Note that we do this after setting relevant_sources[side]
+		 * as noted in the comment above.
+		 */
+		if (strmap_contains(&renames->cached_pairs[side], pathname) ||
+		    strset_contains(&renames->cached_irrelevant[side], pathname))
+			return;
+	}
+
+	one = alloc_filespec(pathname);
+	two = alloc_filespec(pathname);
+	fill_filespec(is_add ? two : one,
+		      &names[names_idx].oid, 1, names[names_idx].mode);
+	diff_queue(&renames->pairs[side], one, two);
+}
+
 static void collect_rename_info(struct merge_options *opt,
 				struct name_entry *names,
 				const char *dirname,
@@ -544,15 +829,96 @@
 				unsigned match_mask)
 {
 	struct rename_info *renames = &opt->priv->renames;
+	unsigned side;
+
+	/*
+	 * Update dir_rename_mask (determines ignore-rename-source validity)
+	 *
+	 * dir_rename_mask helps us keep track of when directory rename
+	 * detection may be relevant.  Basically, whenver a directory is
+	 * removed on one side of history, and a file is added to that
+	 * directory on the other side of history, directory rename
+	 * detection is relevant (meaning we have to detect renames for all
+	 * files within that directory to deduce where the directory
+	 * moved).  Also, whenever a directory needs directory rename
+	 * detection, due to the "majority rules" choice for where to move
+	 * it (see t6423 testcase 1f), we also need to detect renames for
+	 * all files within subdirectories of that directory as well.
+	 *
+	 * Here we haven't looked at files within the directory yet, we are
+	 * just looking at the directory itself.  So, if we aren't yet in
+	 * a case where a parent directory needed directory rename detection
+	 * (i.e. dir_rename_mask != 0x07), and if the directory was removed
+	 * on one side of history, record the mask of the other side of
+	 * history in dir_rename_mask.
+	 */
+	if (renames->dir_rename_mask != 0x07 &&
+	    (dirmask == 3 || dirmask == 5)) {
+		/* simple sanity check */
+		assert(renames->dir_rename_mask == 0 ||
+		       renames->dir_rename_mask == (dirmask & ~1));
+		/* update dir_rename_mask; have it record mask of new side */
+		renames->dir_rename_mask = (dirmask & ~1);
+	}
 
 	/* Update dirs_removed, as needed */
 	if (dirmask == 1 || dirmask == 3 || dirmask == 5) {
 		/* absent_mask = 0x07 - dirmask; sides = absent_mask/2 */
 		unsigned sides = (0x07 - dirmask)/2;
+		unsigned relevance = (renames->dir_rename_mask == 0x07) ?
+					RELEVANT_FOR_ANCESTOR : NOT_RELEVANT;
+		/*
+		 * Record relevance of this directory.  However, note that
+		 * when collect_merge_info_callback() recurses into this
+		 * directory and calls collect_rename_info() on paths
+		 * within that directory, if we find a path that was added
+		 * to this directory on the other side of history, we will
+		 * upgrade this value to RELEVANT_FOR_SELF; see below.
+		 */
 		if (sides & 1)
-			strset_add(&renames->dirs_removed[1], fullname);
+			strintmap_set(&renames->dirs_removed[1], fullname,
+				      relevance);
 		if (sides & 2)
-			strset_add(&renames->dirs_removed[2], fullname);
+			strintmap_set(&renames->dirs_removed[2], fullname,
+				      relevance);
+	}
+
+	/*
+	 * Here's the block that potentially upgrades to RELEVANT_FOR_SELF.
+	 * When we run across a file added to a directory.  In such a case,
+	 * find the directory of the file and upgrade its relevance.
+	 */
+	if (renames->dir_rename_mask == 0x07 &&
+	    (filemask == 2 || filemask == 4)) {
+		/*
+		 * Need directory rename for parent directory on other side
+		 * of history from added file.  Thus
+		 *    side = (~filemask & 0x06) >> 1
+		 * or
+		 *    side = 3 - (filemask/2).
+		 */
+		unsigned side = 3 - (filemask >> 1);
+		strintmap_set(&renames->dirs_removed[side], dirname,
+			      RELEVANT_FOR_SELF);
+	}
+
+	if (filemask == 0 || filemask == 7)
+		return;
+
+	for (side = MERGE_SIDE1; side <= MERGE_SIDE2; ++side) {
+		unsigned side_mask = (1 << side);
+
+		/* Check for deletion on side */
+		if ((filemask & 1) && !(filemask & side_mask))
+			add_pair(opt, names, fullname, side, 0 /* delete */,
+				 match_mask & filemask,
+				 renames->dir_rename_mask);
+
+		/* Check for addition on side */
+		if (!(filemask & 1) && (filemask & side_mask))
+			add_pair(opt, names, fullname, side, 1 /* add */,
+				 match_mask & filemask,
+				 renames->dir_rename_mask);
 	}
 }
 
@@ -570,12 +936,14 @@
 	 */
 	struct merge_options *opt = info->data;
 	struct merge_options_internal *opti = opt->priv;
+	struct rename_info *renames = &opt->priv->renames;
 	struct string_list_item pi;  /* Path Info */
 	struct conflict_info *ci; /* typed alias to pi.util (which is void*) */
 	struct name_entry *p;
 	size_t len;
 	char *fullpath;
 	const char *dirname = opti->current_dir_name;
+	unsigned prev_dir_rename_mask = renames->dir_rename_mask;
 	unsigned filemask = mask & ~dirmask;
 	unsigned match_mask = 0; /* will be updated below */
 	unsigned mbase_null = !(mask & 1);
@@ -716,8 +1084,13 @@
 
 		original_dir_name = opti->current_dir_name;
 		opti->current_dir_name = pi.string;
-		ret = traverse_trees(NULL, 3, t, &newinfo);
+		if (renames->dir_rename_mask == 0 ||
+		    renames->dir_rename_mask == 0x07)
+			ret = traverse_trees(NULL, 3, t, &newinfo);
+		else
+			ret = traverse_trees_wrapper(NULL, 3, t, &newinfo);
 		opti->current_dir_name = original_dir_name;
+		renames->dir_rename_mask = prev_dir_rename_mask;
 
 		for (i = MERGE_BASE; i <= MERGE_SIDE2; i++)
 			free(buf[i]);
@@ -941,6 +1314,63 @@
 	return 0;
 }
 
+static void initialize_attr_index(struct merge_options *opt)
+{
+	/*
+	 * The renormalize_buffer() functions require attributes, and
+	 * annoyingly those can only be read from the working tree or from
+	 * an index_state.  merge-ort doesn't have an index_state, so we
+	 * generate a fake one containing only attribute information.
+	 */
+	struct merged_info *mi;
+	struct index_state *attr_index = &opt->priv->attr_index;
+	struct cache_entry *ce;
+
+	attr_index->initialized = 1;
+
+	if (!opt->renormalize)
+		return;
+
+	mi = strmap_get(&opt->priv->paths, GITATTRIBUTES_FILE);
+	if (!mi)
+		return;
+
+	if (mi->clean) {
+		int len = strlen(GITATTRIBUTES_FILE);
+		ce = make_empty_cache_entry(attr_index, len);
+		ce->ce_mode = create_ce_mode(mi->result.mode);
+		ce->ce_flags = create_ce_flags(0);
+		ce->ce_namelen = len;
+		oidcpy(&ce->oid, &mi->result.oid);
+		memcpy(ce->name, GITATTRIBUTES_FILE, len);
+		add_index_entry(attr_index, ce,
+				ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
+		get_stream_filter(attr_index, GITATTRIBUTES_FILE, &ce->oid);
+	} else {
+		int stage, len;
+		struct conflict_info *ci;
+
+		ASSIGN_AND_VERIFY_CI(ci, mi);
+		for (stage = 0; stage < 3; stage++) {
+			unsigned stage_mask = (1 << stage);
+
+			if (!(ci->filemask & stage_mask))
+				continue;
+			len = strlen(GITATTRIBUTES_FILE);
+			ce = make_empty_cache_entry(attr_index, len);
+			ce->ce_mode = create_ce_mode(ci->stages[stage].mode);
+			ce->ce_flags = create_ce_flags(stage);
+			ce->ce_namelen = len;
+			oidcpy(&ce->oid, &ci->stages[stage].oid);
+			memcpy(ce->name, GITATTRIBUTES_FILE, len);
+			add_index_entry(attr_index, ce,
+					ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
+			get_stream_filter(attr_index, GITATTRIBUTES_FILE,
+					  &ce->oid);
+		}
+	}
+}
+
 static int merge_3way(struct merge_options *opt,
 		      const char *path,
 		      const struct object_id *o,
@@ -955,6 +1385,9 @@
 	char *base, *name1, *name2;
 	int merge_status;
 
+	if (!opt->priv->attr_index.initialized)
+		initialize_attr_index(opt);
+
 	ll_opts.renormalize = opt->renormalize;
 	ll_opts.extra_marker_size = extra_marker_size;
 	ll_opts.xdl_opts = opt->xdl_opts;
@@ -993,7 +1426,7 @@
 
 	merge_status = ll_merge(result_buf, path, &orig, base,
 				&src1, name1, &src2, name2,
-				opt->repo->index, &ll_opts);
+				&opt->priv->attr_index, &ll_opts);
 
 	free(base);
 	free(name1);
@@ -1085,7 +1518,7 @@
 		two_way = ((S_IFMT & o->mode) != (S_IFMT & a->mode));
 
 		merge_status = merge_3way(opt, path,
-					  two_way ? &null_oid : &o->oid,
+					  two_way ? null_oid() : &o->oid,
 					  &a->oid, &b->oid,
 					  pathnames, extra_marker_size,
 					  &result_buf);
@@ -1107,7 +1540,7 @@
 	} else if (S_ISGITLINK(a->mode)) {
 		int two_way = ((S_IFMT & o->mode) != (S_IFMT & a->mode));
 		clean = merge_submodule(opt, pathnames[0],
-					two_way ? &null_oid : &o->oid,
+					two_way ? null_oid() : &o->oid,
 					&a->oid, &b->oid, &result->oid);
 		if (opt->priv->call_depth && two_way && !clean) {
 			result->mode = o->mode;
@@ -1269,131 +1702,6 @@
 	return new_path;
 }
 
-static void dirname_munge(char *filename)
-{
-	char *slash = strrchr(filename, '/');
-	if (!slash)
-		slash = filename;
-	*slash = '\0';
-}
-
-static void increment_count(struct strmap *dir_rename_count,
-			    char *old_dir,
-			    char *new_dir)
-{
-	struct strintmap *counts;
-	struct strmap_entry *e;
-
-	/* Get the {new_dirs -> counts} mapping using old_dir */
-	e = strmap_get_entry(dir_rename_count, old_dir);
-	if (e) {
-		counts = e->value;
-	} else {
-		counts = xmalloc(sizeof(*counts));
-		strintmap_init_with_options(counts, 0, NULL, 1);
-		strmap_put(dir_rename_count, old_dir, counts);
-	}
-
-	/* Increment the count for new_dir */
-	strintmap_incr(counts, new_dir, 1);
-}
-
-static void update_dir_rename_counts(struct strmap *dir_rename_count,
-				     struct strset *dirs_removed,
-				     const char *oldname,
-				     const char *newname)
-{
-	char *old_dir = xstrdup(oldname);
-	char *new_dir = xstrdup(newname);
-	char new_dir_first_char = new_dir[0];
-	int first_time_in_loop = 1;
-
-	while (1) {
-		dirname_munge(old_dir);
-		dirname_munge(new_dir);
-
-		/*
-		 * When renaming
-		 *   "a/b/c/d/e/foo.c" -> "a/b/some/thing/else/e/foo.c"
-		 * then this suggests that both
-		 *   a/b/c/d/e/ => a/b/some/thing/else/e/
-		 *   a/b/c/d/   => a/b/some/thing/else/
-		 * so we want to increment counters for both.  We do NOT,
-		 * however, also want to suggest that there was the following
-		 * rename:
-		 *   a/b/c/ => a/b/some/thing/
-		 * so we need to quit at that point.
-		 *
-		 * Note the when first_time_in_loop, we only strip off the
-		 * basename, and we don't care if that's different.
-		 */
-		if (!first_time_in_loop) {
-			char *old_sub_dir = strchr(old_dir, '\0')+1;
-			char *new_sub_dir = strchr(new_dir, '\0')+1;
-			if (!*new_dir) {
-				/*
-				 * Special case when renaming to root directory,
-				 * i.e. when new_dir == "".  In this case, we had
-				 * something like
-				 *    a/b/subdir => subdir
-				 * and so dirname_munge() sets things up so that
-				 *    old_dir = "a/b\0subdir\0"
-				 *    new_dir = "\0ubdir\0"
-				 * We didn't have a '/' to overwrite a '\0' onto
-				 * in new_dir, so we have to compare differently.
-				 */
-				if (new_dir_first_char != old_sub_dir[0] ||
-				    strcmp(old_sub_dir+1, new_sub_dir))
-					break;
-			} else {
-				if (strcmp(old_sub_dir, new_sub_dir))
-					break;
-			}
-		}
-
-		if (strset_contains(dirs_removed, old_dir))
-			increment_count(dir_rename_count, old_dir, new_dir);
-		else
-			break;
-
-		/* If we hit toplevel directory ("") for old or new dir, quit */
-		if (!*old_dir || !*new_dir)
-			break;
-
-		first_time_in_loop = 0;
-	}
-
-	/* Free resources we don't need anymore */
-	free(old_dir);
-	free(new_dir);
-}
-
-static void compute_rename_counts(struct diff_queue_struct *pairs,
-				  struct strmap *dir_rename_count,
-				  struct strset *dirs_removed)
-{
-	int i;
-
-	for (i = 0; i < pairs->nr; ++i) {
-		struct diff_filepair *pair = pairs->queue[i];
-
-		/* File not part of directory rename if it wasn't renamed */
-		if (pair->status != 'R')
-			continue;
-
-		/*
-		 * Make dir_rename_count contain a map of a map:
-		 *   old_directory -> {new_directory -> count}
-		 * In other words, for every pair look at the directories for
-		 * the old filename and the new filename and count how many
-		 * times that pairing occurs.
-		 */
-		update_dir_rename_counts(dir_rename_count, dirs_removed,
-					 pair->one->path,
-					 pair->two->path);
-	}
-}
-
 static void get_provisional_directory_renames(struct merge_options *opt,
 					      unsigned side,
 					      int *clean)
@@ -1402,9 +1710,6 @@
 	struct strmap_entry *entry;
 	struct rename_info *renames = &opt->priv->renames;
 
-	compute_rename_counts(&renames->pairs[side],
-			      &renames->dir_rename_count[side],
-			      &renames->dirs_removed[side]);
 	/*
 	 * Collapse
 	 *    dir_rename_count: old_directory -> {new_directory -> count}
@@ -1433,6 +1738,9 @@
 			}
 		}
 
+		if (max == 0)
+			continue;
+
 		if (bad_max == max) {
 			path_msg(opt, source_dir, 0,
 			       _("CONFLICT (directory rename split): "
@@ -1441,18 +1749,7 @@
 				 "no destination getting a majority of the "
 				 "files."),
 			       source_dir);
-			/*
-			 * We should mark this as unclean IF something attempts
-			 * to use this rename.  We do not yet have the logic
-			 * in place to detect if this directory rename is being
-			 * used, and optimizations that reduce the number of
-			 * renames cause this to falsely trigger.  For now,
-			 * just disable it, causing t6423 testcase 2a to break.
-			 * We'll later fix the detection, and when we do we
-			 * will re-enable setting *clean to 0 (and thereby fix
-			 * t6423 testcase 2a).
-			 */
-			/*   *clean = 0;   */
+			*clean = 0;
 		} else {
 			strmap_put(&renames->dir_renames[side],
 				   source_dir, (void*)best);
@@ -1543,9 +1840,8 @@
 		if (collision_info) {
 			free(new_path);
 		} else {
-			collision_info = xcalloc(1,
-						 sizeof(struct collision_info));
-			string_list_init(&collision_info->source_files, 0);
+			CALLOC_ARRAY(collision_info, 1);
+			string_list_init_nodup(&collision_info->source_files);
 			strmap_put(collisions, new_path, collision_info);
 		}
 		string_list_insert(&collision_info->source_files,
@@ -1685,7 +1981,7 @@
 		struct conflict_info *dir_ci;
 		char *cur_dir = dirs_to_insert.items[i].string;
 
-		dir_ci = xcalloc(1, sizeof(*dir_ci));
+		CALLOC_ARRAY(dir_ci, 1);
 
 		dir_ci->merged.directory_name = parent_name;
 		len = strlen(parent_name);
@@ -1853,6 +2149,9 @@
 			VERIFY_CI(side2);
 
 			if (!strcmp(pathnames[1], pathnames[2])) {
+				struct rename_info *ri = &opt->priv->renames;
+				int j;
+
 				/* Both sides renamed the same way */
 				assert(side1 == side2);
 				memcpy(&side1->stages[0], &base->stages[0],
@@ -1862,6 +2161,16 @@
 				base->merged.is_null = 1;
 				base->merged.clean = 1;
 
+				/*
+				 * Disable remembering renames optimization;
+				 * rename/rename(1to1) is incredibly rare, and
+				 * just disabling the optimization is easier
+				 * than purging cached_pairs,
+				 * cached_target_names, and dir_rename_counts.
+				 */
+				for (j = 0; j < 3; j++)
+					ri->merge_trees[j] = NULL;
+
 				/* We handled both renames, i.e. i+1 handled */
 				i++;
 				/* Move to next rename */
@@ -2046,7 +2355,7 @@
 			if (type_changed) {
 				/* rename vs. typechange */
 				/* Mark the original as resolved by removal */
-				memcpy(&oldinfo->stages[0].oid, &null_oid,
+				memcpy(&oldinfo->stages[0].oid, null_oid(),
 				       sizeof(oldinfo->stages[0].oid));
 				oldinfo->stages[0].mode = 0;
 				oldinfo->filemask &= 0x06;
@@ -2079,6 +2388,148 @@
 	return clean_merge;
 }
 
+static inline int possible_side_renames(struct rename_info *renames,
+					unsigned side_index)
+{
+	return renames->pairs[side_index].nr > 0 &&
+	       !strintmap_empty(&renames->relevant_sources[side_index]);
+}
+
+static inline int possible_renames(struct rename_info *renames)
+{
+	return possible_side_renames(renames, 1) ||
+	       possible_side_renames(renames, 2) ||
+	       !strmap_empty(&renames->cached_pairs[1]) ||
+	       !strmap_empty(&renames->cached_pairs[2]);
+}
+
+static void resolve_diffpair_statuses(struct diff_queue_struct *q)
+{
+	/*
+	 * A simplified version of diff_resolve_rename_copy(); would probably
+	 * just use that function but it's static...
+	 */
+	int i;
+	struct diff_filepair *p;
+
+	for (i = 0; i < q->nr; ++i) {
+		p = q->queue[i];
+		p->status = 0; /* undecided */
+		if (!DIFF_FILE_VALID(p->one))
+			p->status = DIFF_STATUS_ADDED;
+		else if (!DIFF_FILE_VALID(p->two))
+			p->status = DIFF_STATUS_DELETED;
+		else if (DIFF_PAIR_RENAME(p))
+			p->status = DIFF_STATUS_RENAMED;
+	}
+}
+
+static void prune_cached_from_relevant(struct rename_info *renames,
+				       unsigned side)
+{
+	/* Reason for this function described in add_pair() */
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+
+	/* Remove from relevant_sources all entries in cached_pairs[side] */
+	strmap_for_each_entry(&renames->cached_pairs[side], &iter, entry) {
+		strintmap_remove(&renames->relevant_sources[side],
+				 entry->key);
+	}
+	/* Remove from relevant_sources all entries in cached_irrelevant[side] */
+	strset_for_each_entry(&renames->cached_irrelevant[side], &iter, entry) {
+		strintmap_remove(&renames->relevant_sources[side],
+				 entry->key);
+	}
+}
+
+static void use_cached_pairs(struct merge_options *opt,
+			     struct strmap *cached_pairs,
+			     struct diff_queue_struct *pairs)
+{
+	struct hashmap_iter iter;
+	struct strmap_entry *entry;
+
+	/*
+	 * Add to side_pairs all entries from renames->cached_pairs[side_index].
+	 * (Info in cached_irrelevant[side_index] is not relevant here.)
+	 */
+	strmap_for_each_entry(cached_pairs, &iter, entry) {
+		struct diff_filespec *one, *two;
+		const char *old_name = entry->key;
+		const char *new_name = entry->value;
+		if (!new_name)
+			new_name = old_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);
+		pairs->queue[pairs->nr-1]->status = entry->value ? 'R' : 'D';
+	}
+}
+
+static void cache_new_pair(struct rename_info *renames,
+			   int side,
+			   char *old_path,
+			   char *new_path,
+			   int free_old_value)
+{
+	char *old_value;
+	new_path = xstrdup(new_path);
+	old_value = strmap_put(&renames->cached_pairs[side],
+			       old_path, new_path);
+	strset_add(&renames->cached_target_names[side], new_path);
+	if (free_old_value)
+		free(old_value);
+	else
+		assert(!old_value);
+}
+
+static void possibly_cache_new_pair(struct rename_info *renames,
+				    struct diff_filepair *p,
+				    unsigned side,
+				    char *new_path)
+{
+	int dir_renamed_side = 0;
+
+	if (new_path) {
+		/*
+		 * Directory renames happen on the other side of history from
+		 * the side that adds new files to the old directory.
+		 */
+		dir_renamed_side = 3 - side;
+	} else {
+		int val = strintmap_get(&renames->relevant_sources[side],
+					p->one->path);
+		if (val == RELEVANT_NO_MORE) {
+			assert(p->status == 'D');
+			strset_add(&renames->cached_irrelevant[side],
+				   p->one->path);
+		}
+		if (val <= 0)
+			return;
+	}
+
+	if (p->status == 'D') {
+		/*
+		 * If we already had this delete, we'll just set it's value
+		 * to NULL again, so no harm.
+		 */
+		strmap_put(&renames->cached_pairs[side], p->one->path, NULL);
+	} else if (p->status == 'R') {
+		if (!new_path)
+			new_path = p->two->path;
+		else
+			cache_new_pair(renames, dir_renamed_side,
+				       p->two->path, new_path, 0);
+		cache_new_pair(renames, side, p->one->path, new_path, 1);
+	} else if (p->status == 'A' && new_path) {
+		cache_new_pair(renames, dir_renamed_side,
+			       p->two->path, new_path, 0);
+	}
+}
+
 static int compare_pairs(const void *a_, const void *b_)
 {
 	const struct diff_filepair *a = *((const struct diff_filepair **)a_);
@@ -2087,32 +2538,46 @@
 	return strcmp(a->one->path, b->one->path);
 }
 
-/* Call diffcore_rename() to compute which files have changed on given side */
+/* Call diffcore_rename() to update deleted/added pairs into rename pairs */
 static void detect_regular_renames(struct merge_options *opt,
-				   struct tree *merge_base,
-				   struct tree *side,
 				   unsigned side_index)
 {
 	struct diff_options diff_opts;
 	struct rename_info *renames = &opt->priv->renames;
 
+	prune_cached_from_relevant(renames, side_index);
+	if (!possible_side_renames(renames, side_index)) {
+		/*
+		 * No rename detection needed for this side, but we still need
+		 * to make sure 'adds' are marked correctly in case the other
+		 * side had directory renames.
+		 */
+		resolve_diffpair_statuses(&renames->pairs[side_index]);
+		return;
+	}
+
+	partial_clear_dir_rename_count(&renames->dir_rename_count[side_index]);
 	repo_diff_setup(opt->repo, &diff_opts);
 	diff_opts.flags.recursive = 1;
 	diff_opts.flags.rename_empty = 0;
 	diff_opts.detect_rename = DIFF_DETECT_RENAME;
 	diff_opts.rename_limit = opt->rename_limit;
 	if (opt->rename_limit <= 0)
-		diff_opts.rename_limit = 1000;
+		diff_opts.rename_limit = 7000;
 	diff_opts.rename_score = opt->rename_score;
 	diff_opts.show_rename_progress = opt->show_rename_progress;
 	diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
 	diff_setup_done(&diff_opts);
 
+	diff_queued_diff = renames->pairs[side_index];
 	trace2_region_enter("diff", "diffcore_rename", opt->repo);
-	diff_tree_oid(&merge_base->object.oid, &side->object.oid, "",
-		      &diff_opts);
-	diffcore_std(&diff_opts);
+	diffcore_rename_extended(&diff_opts,
+				 &renames->relevant_sources[side_index],
+				 &renames->dirs_removed[side_index],
+				 &renames->dir_rename_count[side_index],
+				 &renames->cached_pairs[side_index]);
 	trace2_region_leave("diff", "diffcore_rename", opt->repo);
+	resolve_diffpair_statuses(&diff_queued_diff);
 
 	if (diff_opts.needed_rename_limit > renames->needed_limit)
 		renames->needed_limit = diff_opts.needed_rename_limit;
@@ -2126,8 +2591,10 @@
 }
 
 /*
- * Get information of all renames which occurred in 'side_pairs', discarding
- * non-renames.
+ * Get information of all renames which occurred in 'side_pairs', making use
+ * of any implicit directory renames in side_dir_renames (also making use of
+ * implicit directory renames rename_exclusions as needed by
+ * check_for_directory_rename()).  Add all (updated) renames into result.
  */
 static int collect_renames(struct merge_options *opt,
 			   struct diff_queue_struct *result,
@@ -2150,6 +2617,7 @@
 		char *new_path; /* non-NULL only with directory renames */
 
 		if (p->status != 'A' && p->status != 'R') {
+			possibly_cache_new_pair(renames, p, side_index, NULL);
 			diff_free_filepair(p);
 			continue;
 		}
@@ -2161,6 +2629,7 @@
 						      &collisions,
 						      &clean);
 
+		possibly_cache_new_pair(renames, p, side_index, new_path);
 		if (p->status != 'R' && !new_path) {
 			diff_free_filepair(p);
 			continue;
@@ -2210,10 +2679,14 @@
 	int need_dir_renames, s, clean = 1;
 
 	memset(&combined, 0, sizeof(combined));
+	if (!possible_renames(renames))
+		goto cleanup;
 
 	trace2_region_enter("merge", "regular renames", opt->repo);
-	detect_regular_renames(opt, merge_base, side1, MERGE_SIDE1);
-	detect_regular_renames(opt, merge_base, side2, MERGE_SIDE2);
+	detect_regular_renames(opt, MERGE_SIDE1);
+	detect_regular_renames(opt, MERGE_SIDE2);
+	use_cached_pairs(opt, &renames->cached_pairs[1], &renames->pairs[1]);
+	use_cached_pairs(opt, &renames->cached_pairs[2], &renames->pairs[2]);
 	trace2_region_leave("merge", "regular renames", opt->repo);
 
 	trace2_region_enter("merge", "directory renames", opt->repo);
@@ -2237,13 +2710,32 @@
 	clean &= collect_renames(opt, &combined, MERGE_SIDE2,
 				 &renames->dir_renames[1],
 				 &renames->dir_renames[2]);
-	QSORT(combined.queue, combined.nr, compare_pairs);
+	STABLE_QSORT(combined.queue, combined.nr, compare_pairs);
 	trace2_region_leave("merge", "directory renames", opt->repo);
 
 	trace2_region_enter("merge", "process renames", opt->repo);
 	clean &= process_renames(opt, &combined);
 	trace2_region_leave("merge", "process renames", opt->repo);
 
+	goto simple_cleanup; /* collect_renames() handles some of cleanup */
+
+cleanup:
+	/*
+	 * Free now unneeded filepairs, which would have been handled
+	 * in collect_renames() normally but we skipped that code.
+	 */
+	for (s = MERGE_SIDE1; s <= MERGE_SIDE2; s++) {
+		struct diff_queue_struct *side_pairs;
+		int i;
+
+		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);
+		}
+	}
+
+simple_cleanup:
 	/* Free memory for renames->pairs[] and combined */
 	for (s = MERGE_SIDE1; s <= MERGE_SIDE2; s++) {
 		free(renames->pairs[s].queue);
@@ -2261,31 +2753,113 @@
 
 /*** Function Grouping: functions related to process_entries() ***/
 
-static int string_list_df_name_compare(const char *one, const char *two)
+static int sort_dirs_next_to_their_children(const char *one, const char *two)
 {
-	int onelen = strlen(one);
-	int twolen = strlen(two);
+	unsigned char c1, c2;
+
 	/*
-	 * Here we only care that entries for D/F conflicts are
-	 * adjacent, in particular with the file of the D/F conflict
-	 * appearing before files below the corresponding directory.
-	 * The order of the rest of the list is irrelevant for us.
+	 * Here we only care that entries for directories appear adjacent
+	 * to and before files underneath the directory.  We can achieve
+	 * that by pretending to add a trailing slash to every file and
+	 * then sorting.  In other words, we do not want the natural
+	 * sorting of
+	 *     foo
+	 *     foo.txt
+	 *     foo/bar
+	 * Instead, we want "foo" to sort as though it were "foo/", so that
+	 * we instead get
+	 *     foo.txt
+	 *     foo
+	 *     foo/bar
+	 * To achieve this, we basically implement our own strcmp, except that
+	 * if we get to the end of either string instead of comparing NUL to
+	 * another character, we compare '/' to it.
 	 *
-	 * To achieve this, we sort with df_name_compare and provide
-	 * the mode S_IFDIR so that D/F conflicts will sort correctly.
-	 * We use the mode S_IFDIR for everything else for simplicity,
-	 * since in other cases any changes in their order due to
-	 * sorting cause no problems for us.
+	 * If this unusual "sort as though '/' were appended" perplexes
+	 * you, perhaps it will help to note that this is not the final
+	 * sort.  write_tree() will sort again without the trailing slash
+	 * magic, but just on paths immediately under a given tree.
+	 *
+	 * The reason to not use df_name_compare directly was that it was
+	 * just too expensive (we don't have the string lengths handy), so
+	 * it was reimplemented.
 	 */
-	int cmp = df_name_compare(one, onelen, S_IFDIR,
-				  two, twolen, S_IFDIR);
+
 	/*
-	 * Now that 'foo' and 'foo/bar' compare equal, we have to make sure
-	 * that 'foo' comes before 'foo/bar'.
+	 * NOTE: This function will never be called with two equal strings,
+	 * because it is used to sort the keys of a strmap, and strmaps have
+	 * unique keys by construction.  That simplifies our c1==c2 handling
+	 * below.
 	 */
-	if (cmp)
-		return cmp;
-	return onelen - twolen;
+
+	while (*one && (*one == *two)) {
+		one++;
+		two++;
+	}
+
+	c1 = *one ? *one : '/';
+	c2 = *two ? *two : '/';
+
+	if (c1 == c2) {
+		/* Getting here means one is a leading directory of the other */
+		return (*one) ? 1 : -1;
+	} else
+		return c1 - c2;
+}
+
+static int read_oid_strbuf(struct merge_options *opt,
+			   const struct object_id *oid,
+			   struct strbuf *dst)
+{
+	void *buf;
+	enum object_type type;
+	unsigned long size;
+	buf = read_object_file(oid, &type, &size);
+	if (!buf)
+		return err(opt, _("cannot read object %s"), oid_to_hex(oid));
+	if (type != OBJ_BLOB) {
+		free(buf);
+		return err(opt, _("object %s is not a blob"), oid_to_hex(oid));
+	}
+	strbuf_attach(dst, buf, size, size + 1);
+	return 0;
+}
+
+static int blob_unchanged(struct merge_options *opt,
+			  const struct version_info *base,
+			  const struct version_info *side,
+			  const char *path)
+{
+	struct strbuf basebuf = STRBUF_INIT;
+	struct strbuf sidebuf = STRBUF_INIT;
+	int ret = 0; /* assume changed for safety */
+	struct index_state *idx = &opt->priv->attr_index;
+
+	if (!idx->initialized)
+		initialize_attr_index(opt);
+
+	if (base->mode != side->mode)
+		return 0;
+	if (oideq(&base->oid, &side->oid))
+		return 1;
+
+	if (read_oid_strbuf(opt, &base->oid, &basebuf) ||
+	    read_oid_strbuf(opt, &side->oid, &sidebuf))
+		goto error_return;
+	/*
+	 * Note: binary | is used so that both renormalizations are
+	 * performed.  Comparison can be skipped if both files are
+	 * unchanged since their sha1s have already been compared.
+	 */
+	if (renormalize_buffer(idx, path, basebuf.buf, basebuf.len, &basebuf) |
+	    renormalize_buffer(idx, path, sidebuf.buf, sidebuf.len, &sidebuf))
+		ret = (basebuf.len == sidebuf.len &&
+		       !memcmp(basebuf.buf, sidebuf.buf, basebuf.len));
+
+error_return:
+	strbuf_release(&basebuf);
+	strbuf_release(&sidebuf);
+	return ret;
 }
 
 struct directory_versions {
@@ -2348,22 +2922,15 @@
 		       size_t hash_size)
 {
 	size_t maxlen = 0, extra;
-	unsigned int nr = versions->nr - offset;
+	unsigned int nr;
 	struct strbuf buf = STRBUF_INIT;
-	struct string_list relevant_entries = STRING_LIST_INIT_NODUP;
 	int i;
 
-	/*
-	 * We want to sort the last (versions->nr-offset) entries in versions.
-	 * Do so by abusing the string_list API a bit: make another string_list
-	 * that contains just those entries and then sort them.
-	 *
-	 * We won't use relevant_entries again and will let it just pop off the
-	 * stack, so there won't be allocation worries or anything.
-	 */
-	relevant_entries.items = versions->items + offset;
-	relevant_entries.nr = versions->nr - offset;
-	QSORT(relevant_entries.items, relevant_entries.nr, tree_entry_order);
+	assert(offset <= versions->nr);
+	nr = versions->nr - offset;
+	if (versions->nr)
+		/* No need for STABLE_QSORT -- filenames must be unique */
+		QSORT(versions->items + offset, nr, tree_entry_order);
 
 	/* Pre-allocate some space in buf */
 	extra = hash_size + 8; /* 8: 6 for mode, 1 for space, 1 for NUL char */
@@ -2619,7 +3186,7 @@
 			if (ci->filemask & (1 << i))
 				continue;
 			ci->stages[i].mode = 0;
-			oidcpy(&ci->stages[i].oid, &null_oid);
+			oidcpy(&ci->stages[i].oid, null_oid());
 		}
 	} else if (ci->df_conflict && ci->merged.result.mode != 0) {
 		/*
@@ -2651,7 +3218,7 @@
 		 * the directory to remain here, so we need to move this
 		 * path to some new location.
 		 */
-		new_ci = xcalloc(1, sizeof(*new_ci));
+		CALLOC_ARRAY(new_ci, 1);
 		/* 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
@@ -2665,7 +3232,7 @@
 				continue;
 			/* zero out any entries related to directories */
 			new_ci->stages[i].mode = 0;
-			oidcpy(&new_ci->stages[i].oid, &null_oid);
+			oidcpy(&new_ci->stages[i].oid, null_oid());
 		}
 
 		/*
@@ -2704,7 +3271,7 @@
 	 *       above.
 	 */
 	if (ci->match_mask) {
-		ci->merged.clean = 1;
+		ci->merged.clean = !ci->df_conflict && !ci->path_conflict;
 		if (ci->match_mask == 6) {
 			/* stages[1] == stages[2] */
 			ci->merged.result.mode = ci->stages[1].mode;
@@ -2716,6 +3283,8 @@
 
 			ci->merged.result.mode = ci->stages[side].mode;
 			ci->merged.is_null = !ci->merged.result.mode;
+			if (ci->merged.is_null)
+				ci->merged.clean = 1;
 			oidcpy(&ci->merged.result.oid, &ci->stages[side].oid);
 
 			assert(othermask == 2 || othermask == 4);
@@ -2752,12 +3321,21 @@
 				rename_b = 1;
 			}
 
-			path_msg(opt, path, 0,
-				 _("CONFLICT (distinct types): %s had different "
-				   "types on each side; renamed %s of them so "
-				   "each can be recorded somewhere."),
-				 path,
-				 (rename_a && rename_b) ? _("both") : _("one"));
+			if (rename_a && rename_b) {
+				path_msg(opt, path, 0,
+					 _("CONFLICT (distinct types): %s had "
+					   "different types on each side; "
+					   "renamed both of them so each can "
+					   "be recorded somewhere."),
+					 path);
+			} else {
+				path_msg(opt, path, 0,
+					 _("CONFLICT (distinct types): %s had "
+					   "different types on each side; "
+					   "renamed one of them so each can be "
+					   "recorded somewhere."),
+					 path);
+			}
 
 			ci->merged.clean = 0;
 			memcpy(new_ci, ci, sizeof(*new_ci));
@@ -2766,11 +3344,11 @@
 			new_ci->merged.result.mode = ci->stages[2].mode;
 			oidcpy(&new_ci->merged.result.oid, &ci->stages[2].oid);
 			new_ci->stages[1].mode = 0;
-			oidcpy(&new_ci->stages[1].oid, &null_oid);
+			oidcpy(&new_ci->stages[1].oid, null_oid());
 			new_ci->filemask = 5;
 			if ((S_IFMT & b_mode) != (S_IFMT & o_mode)) {
 				new_ci->stages[0].mode = 0;
-				oidcpy(&new_ci->stages[0].oid, &null_oid);
+				oidcpy(&new_ci->stages[0].oid, null_oid());
 				new_ci->filemask = 4;
 			}
 
@@ -2778,11 +3356,11 @@
 			ci->merged.result.mode = ci->stages[1].mode;
 			oidcpy(&ci->merged.result.oid, &ci->stages[1].oid);
 			ci->stages[2].mode = 0;
-			oidcpy(&ci->stages[2].oid, &null_oid);
+			oidcpy(&ci->stages[2].oid, null_oid());
 			ci->filemask = 3;
 			if ((S_IFMT & a_mode) != (S_IFMT & o_mode)) {
 				ci->stages[0].mode = 0;
-				oidcpy(&ci->stages[0].oid, &null_oid);
+				oidcpy(&ci->stages[0].oid, null_oid());
 				ci->filemask = 2;
 			}
 
@@ -2874,8 +3452,14 @@
 		modify_branch = (side == 1) ? opt->branch1 : opt->branch2;
 		delete_branch = (side == 1) ? opt->branch2 : opt->branch1;
 
-		if (ci->path_conflict &&
-		    oideq(&ci->stages[0].oid, &ci->stages[side].oid)) {
+		if (opt->renormalize &&
+		    blob_unchanged(opt, &ci->stages[0], &ci->stages[side],
+				   path)) {
+			ci->merged.is_null = 1;
+			ci->merged.clean = 1;
+			assert(!ci->df_conflict && !ci->path_conflict);
+		} else if (ci->path_conflict &&
+			   oideq(&ci->stages[0].oid, &ci->stages[side].oid)) {
 			/*
 			 * This came from a rename/delete; no action to take,
 			 * but avoid printing "modify/delete" conflict notice
@@ -2899,7 +3483,8 @@
 		/* Deleted on both sides */
 		ci->merged.is_null = 1;
 		ci->merged.result.mode = 0;
-		oidcpy(&ci->merged.result.oid, &null_oid);
+		oidcpy(&ci->merged.result.oid, null_oid());
+		assert(!ci->df_conflict);
 		ci->merged.clean = !ci->path_conflict;
 	}
 
@@ -2910,9 +3495,59 @@
 	 */
 	if (!ci->merged.clean)
 		strmap_put(&opt->priv->conflicted, path, ci);
+
+	/* Record metadata for ci->merged in dir_metadata */
 	record_entry_for_tree(dir_metadata, path, &ci->merged);
 }
 
+static void prefetch_for_content_merges(struct merge_options *opt,
+					struct string_list *plist)
+{
+	struct string_list_item *e;
+	struct oid_array to_fetch = OID_ARRAY_INIT;
+
+	if (opt->repo != the_repository || !has_promisor_remote())
+		return;
+
+	for (e = &plist->items[plist->nr-1]; e >= plist->items; --e) {
+		/* char *path = e->string; */
+		struct conflict_info *ci = e->util;
+		int i;
+
+		/* Ignore clean entries */
+		if (ci->merged.clean)
+			continue;
+
+		/* Ignore entries that don't need a content merge */
+		if (ci->match_mask || ci->filemask < 6 ||
+		    !S_ISREG(ci->stages[1].mode) ||
+		    !S_ISREG(ci->stages[2].mode) ||
+		    oideq(&ci->stages[1].oid, &ci->stages[2].oid))
+			continue;
+
+		/* Also don't need content merge if base matches either side */
+		if (ci->filemask == 7 &&
+		    S_ISREG(ci->stages[0].mode) &&
+		    (oideq(&ci->stages[0].oid, &ci->stages[1].oid) ||
+		     oideq(&ci->stages[0].oid, &ci->stages[2].oid)))
+			continue;
+
+		for (i = 0; i < 3; i++) {
+			unsigned side_mask = (1 << i);
+			struct version_info *vi = &ci->stages[i];
+
+			if ((ci->filemask & side_mask) &&
+			    S_ISREG(vi->mode) &&
+			    oid_object_info_extended(opt->repo, &vi->oid, NULL,
+						     OBJECT_INFO_FOR_PREFETCH))
+				oid_array_append(&to_fetch, &vi->oid);
+		}
+	}
+
+	promisor_remote_get_direct(opt->repo, to_fetch.oid, to_fetch.nr);
+	oid_array_clear(&to_fetch);
+}
+
 static void process_entries(struct merge_options *opt,
 			    struct object_id *result_oid)
 {
@@ -2943,7 +3578,7 @@
 	trace2_region_leave("merge", "plist copy", opt->repo);
 
 	trace2_region_enter("merge", "plist special sort", opt->repo);
-	plist.cmp = string_list_df_name_compare;
+	plist.cmp = sort_dirs_next_to_their_children;
 	string_list_sort(&plist);
 	trace2_region_leave("merge", "plist special sort", opt->repo);
 
@@ -2959,6 +3594,7 @@
 	 * the way when it is time to process the file at the same path).
 	 */
 	trace2_region_enter("merge", "processing", opt->repo);
+	prefetch_for_content_merges(opt, &plist);
 	for (entry = &plist.items[plist.nr-1]; entry >= plist.items; --entry) {
 		char *path = entry->string;
 		/*
@@ -3031,7 +3667,7 @@
 	unpack_opts.verbose_update = (opt->verbosity > 2);
 	unpack_opts.fn = twoway_merge;
 	if (1/* FIXME: opts->overwrite_ignore*/) {
-		unpack_opts.dir = xcalloc(1, sizeof(*unpack_opts.dir));
+		CALLOC_ARRAY(unpack_opts.dir, 1);
 		unpack_opts.dir->flags |= DIR_SHOW_IGNORED;
 		setup_standard_excludes(unpack_opts.dir);
 	}
@@ -3047,23 +3683,27 @@
 	return ret;
 }
 
-static int record_conflicted_index_entries(struct merge_options *opt,
-					   struct index_state *index,
-					   struct strmap *paths,
-					   struct strmap *conflicted)
+static int record_conflicted_index_entries(struct merge_options *opt)
 {
 	struct hashmap_iter iter;
 	struct strmap_entry *e;
+	struct index_state *index = opt->repo->index;
+	struct checkout state = CHECKOUT_INIT;
 	int errs = 0;
 	int original_cache_nr;
 
-	if (strmap_empty(conflicted))
+	if (strmap_empty(&opt->priv->conflicted))
 		return 0;
 
+	/* If any entries have skip_worktree set, we'll have to check 'em out */
+	state.force = 1;
+	state.quiet = 1;
+	state.refresh_cache = 1;
+	state.istate = index;
 	original_cache_nr = index->cache_nr;
 
 	/* Put every entry from paths into plist, then sort */
-	strmap_for_each_entry(conflicted, &iter, e) {
+	strmap_for_each_entry(&opt->priv->conflicted, &iter, e) {
 		const char *path = e->key;
 		struct conflict_info *ci = e->value;
 		int pos;
@@ -3104,9 +3744,23 @@
 			 * the higher order stages.  Thus, we need override
 			 * the CE_SKIP_WORKTREE bit and manually write those
 			 * files to the working disk here.
-			 *
-			 * TODO: Implement this CE_SKIP_WORKTREE fixup.
 			 */
+			if (ce_skip_worktree(ce)) {
+				struct stat st;
+
+				if (!lstat(path, &st)) {
+					char *new_name = unique_path(&opt->priv->paths,
+								     path,
+								     "cruft");
+
+					path_msg(opt, path, 1,
+						 _("Note: %s not up to date and in way of checking out conflicted version; old copy renamed to %s"),
+						 path, new_name);
+					errs |= rename(path, new_name);
+					free(new_name);
+				}
+				errs |= checkout_entry(ce, &state, NULL, NULL);
+			}
 
 			/*
 			 * Mark this cache entry for removal and instead add
@@ -3138,6 +3792,11 @@
 	 * entries we added to the end into their right locations.
 	 */
 	remove_marked_cache_entries(index, 1);
+	/*
+	 * No need for STABLE_QSORT -- cmp_cache_name_compare sorts primarily
+	 * on filename and secondarily on stage, and (name, stage #) are a
+	 * unique tuple.
+	 */
 	QSORT(index->cache, index->cache_nr, cmp_cache_name_compare);
 
 	return errs;
@@ -3151,7 +3810,8 @@
 {
 	assert(opt->priv == NULL);
 	if (result->clean >= 0 && update_worktree_and_index) {
-		struct merge_options_internal *opti = result->priv;
+		const char *filename;
+		FILE *fp;
 
 		trace2_region_enter("merge", "checkout", opt->repo);
 		if (checkout(opt, head, result->tree)) {
@@ -3162,14 +3822,22 @@
 		trace2_region_leave("merge", "checkout", opt->repo);
 
 		trace2_region_enter("merge", "record_conflicted", opt->repo);
-		if (record_conflicted_index_entries(opt, opt->repo->index,
-						    &opti->paths,
-						    &opti->conflicted)) {
+		opt->priv = result->priv;
+		if (record_conflicted_index_entries(opt)) {
 			/* failure to function */
+			opt->priv = NULL;
 			result->clean = -1;
 			return;
 		}
+		opt->priv = NULL;
 		trace2_region_leave("merge", "record_conflicted", opt->repo);
+
+		trace2_region_enter("merge", "write_auto_merge", opt->repo);
+		filename = git_path_auto_merge(opt->repo);
+		fp = xfopen(filename, "w");
+		fprintf(fp, "%s\n", oid_to_hex(&result->tree->object.oid));
+		fclose(fp);
+		trace2_region_leave("merge", "write_auto_merge", opt->repo);
 	}
 
 	if (display_update_msgs) {
@@ -3214,6 +3882,8 @@
 {
 	struct merge_options_internal *opti = result->priv;
 
+	if (opt->renormalize)
+		git_attr_set_direction(GIT_ATTR_CHECKIN);
 	assert(opt->priv == NULL);
 
 	clear_or_reinit_internal_opts(opti, 0);
@@ -3222,6 +3892,23 @@
 
 /*** Function Grouping: helper functions for merge_incore_*() ***/
 
+static struct tree *shift_tree_object(struct repository *repo,
+				      struct tree *one, struct tree *two,
+				      const char *subtree_shift)
+{
+	struct object_id shifted;
+
+	if (!*subtree_shift) {
+		shift_tree(repo, &one->object.oid, &two->object.oid, &shifted, 0);
+	} else {
+		shift_tree_by(repo, &one->object.oid, &two->object.oid, &shifted,
+			      subtree_shift);
+	}
+	if (oideq(&two->object.oid, &shifted))
+		return two;
+	return lookup_tree(repo, &shifted);
+}
+
 static inline void set_commit_tree(struct commit *c, struct tree *t)
 {
 	c->maybe_tree = t;
@@ -3272,6 +3959,10 @@
 	assert(opt->obuf.len == 0);
 
 	assert(opt->priv == NULL);
+	if (result->_properly_initialized != 0 &&
+	    result->_properly_initialized != RESULT_INITIALIZED)
+		BUG("struct merge_result passed to merge_incore_*recursive() must be zeroed or filled with values from a previous run");
+	assert(!!result->priv == !!result->_properly_initialized);
 	if (result->priv) {
 		opt->priv = result->priv;
 		result->priv = NULL;
@@ -3289,6 +3980,10 @@
 	/* Default to histogram diff.  Actually, just hardcode it...for now. */
 	opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
 
+	/* Handle attr direction stuff for renormalization */
+	if (opt->renormalize)
+		git_attr_set_direction(GIT_ATTR_CHECKOUT);
+
 	/* Initialization of opt->priv, our internal merge data */
 	trace2_region_enter("merge", "allocate/init", opt->repo);
 	if (opt->priv) {
@@ -3301,12 +3996,28 @@
 	/* Initialization of various renames fields */
 	renames = &opt->priv->renames;
 	for (i = MERGE_SIDE1; i <= MERGE_SIDE2; i++) {
-		strset_init_with_options(&renames->dirs_removed[i],
-					 NULL, 0);
+		strintmap_init_with_options(&renames->dirs_removed[i],
+					    NOT_RELEVANT, NULL, 0);
 		strmap_init_with_options(&renames->dir_rename_count[i],
 					 NULL, 1);
 		strmap_init_with_options(&renames->dir_renames[i],
 					 NULL, 0);
+		/*
+		 * relevant_sources uses -1 for the default, because we need
+		 * to be able to distinguish not-in-strintmap from valid
+		 * relevant_source values from enum file_rename_relevance.
+		 * In particular, possibly_cache_new_pair() expects a negative
+		 * value for not-found entries.
+		 */
+		strintmap_init_with_options(&renames->relevant_sources[i],
+					    -1 /* explicitly invalid */,
+					    NULL, 0);
+		strmap_init_with_options(&renames->cached_pairs[i],
+					 NULL, 1);
+		strset_init_with_options(&renames->cached_irrelevant[i],
+					 NULL, 1);
+		strset_init_with_options(&renames->cached_target_names[i],
+					 NULL, 0);
 	}
 
 	/*
@@ -3320,7 +4031,7 @@
 	 */
 	strmap_init_with_options(&opt->priv->paths, NULL, 0);
 	strmap_init_with_options(&opt->priv->conflicted, NULL, 0);
-	string_list_init(&opt->priv->paths_to_free, 0);
+	string_list_init_nodup(&opt->priv->paths_to_free);
 
 	/*
 	 * keys & strbufs in output will sometimes need to outlive "paths",
@@ -3332,6 +4043,50 @@
 	trace2_region_leave("merge", "allocate/init", opt->repo);
 }
 
+static void merge_check_renames_reusable(struct merge_options *opt,
+					 struct merge_result *result,
+					 struct tree *merge_base,
+					 struct tree *side1,
+					 struct tree *side2)
+{
+	struct rename_info *renames;
+	struct tree **merge_trees;
+	struct merge_options_internal *opti = result->priv;
+
+	if (!opti)
+		return;
+
+	renames = &opti->renames;
+	merge_trees = renames->merge_trees;
+
+	/*
+	 * Handle case where previous merge operation did not want cache to
+	 * take effect, e.g. because rename/rename(1to1) makes it invalid.
+	 */
+	if (!merge_trees[0]) {
+		assert(!merge_trees[0] && !merge_trees[1] && !merge_trees[2]);
+		renames->cached_pairs_valid_side = 0; /* neither side valid */
+		return;
+	}
+
+	/*
+	 * Handle other cases; note that merge_trees[0..2] will only
+	 * be NULL if opti is, or if all three were manually set to
+	 * NULL by e.g. rename/rename(1to1) handling.
+	 */
+	assert(merge_trees[0] && merge_trees[1] && merge_trees[2]);
+
+	/* Check if we meet a condition for re-using cached_pairs */
+	if (oideq(&merge_base->object.oid, &merge_trees[2]->object.oid) &&
+	    oideq(&side1->object.oid, &result->tree->object.oid))
+		renames->cached_pairs_valid_side = MERGE_SIDE1;
+	else if (oideq(&merge_base->object.oid, &merge_trees[1]->object.oid) &&
+		 oideq(&side2->object.oid, &result->tree->object.oid))
+		renames->cached_pairs_valid_side = MERGE_SIDE2;
+	else
+		renames->cached_pairs_valid_side = 0; /* neither side valid */
+}
+
 /*** Function Grouping: merge_incore_*() and their internal variants ***/
 
 /*
@@ -3345,6 +4100,13 @@
 {
 	struct object_id working_tree_oid;
 
+	if (opt->subtree_shift) {
+		side2 = shift_tree_object(opt->repo, side1, side2,
+					  opt->subtree_shift);
+		merge_base = shift_tree_object(opt->repo, side1, merge_base,
+					       opt->subtree_shift);
+	}
+
 	trace2_region_enter("merge", "collect_merge_info", opt->repo);
 	if (collect_merge_info(opt, merge_base, side1, side2) != 0) {
 		/*
@@ -3375,6 +4137,7 @@
 	result->clean &= strmap_empty(&opt->priv->conflicted);
 	if (!opt->priv->call_depth) {
 		result->priv = opt->priv;
+		result->_properly_initialized = RESULT_INITIALIZED;
 		opt->priv = NULL;
 	}
 }
@@ -3472,7 +4235,16 @@
 
 	trace2_region_enter("merge", "merge_start", opt->repo);
 	assert(opt->ancestor != NULL);
+	merge_check_renames_reusable(opt, result, merge_base, side1, side2);
 	merge_start(opt, result);
+	/*
+	 * Record the trees used in this merge, so if there's a next merge in
+	 * a cherry-pick or rebase sequence it might be able to take advantage
+	 * of the cached_pairs in that next merge.
+	 */
+	opt->priv->renames.merge_trees[0] = merge_base;
+	opt->priv->renames.merge_trees[1] = side1;
+	opt->priv->renames.merge_trees[2] = side2;
 	trace2_region_leave("merge", "merge_start", opt->repo);
 
 	merge_ort_nonrecursive_internal(opt, merge_base, side1, side2, result);
diff --git a/merge-ort.h b/merge-ort.h
index d53a0a3..c011864 100644
--- a/merge-ort.h
+++ b/merge-ort.h
@@ -29,6 +29,8 @@
 	 * !clean) and to print "CONFLICT" messages.  Not for external use.
 	 */
 	void *priv;
+	/* Also private */
+	unsigned _properly_initialized;
 };
 
 /*
diff --git a/merge-recursive.c b/merge-recursive.c
index b052974..7008a90 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -121,7 +121,7 @@
 	entry->dir = directory;
 	entry->non_unique_new_dir = 0;
 	strbuf_init(&entry->new_dir, 0);
-	string_list_init(&entry->possible_new_dirs, 0);
+	string_list_init_nodup(&entry->possible_new_dirs);
 }
 
 struct collision_entry {
@@ -167,6 +167,7 @@
 	}
 }
 
+__attribute__((format (printf, 2, 3)))
 static int err(struct merge_options *opt, const char *err, ...)
 {
 	va_list params;
@@ -303,7 +304,7 @@
 		return;
 	}
 
-	ci = xcalloc(1, sizeof(struct rename_conflict_info));
+	CALLOC_ARRAY(ci, 1);
 	ci->rename_type = rename_type;
 	ci->ren1 = ren1;
 	ci->ren2 = ren2;
@@ -453,7 +454,7 @@
 
 static int save_files_dirs(const struct object_id *oid,
 			   struct strbuf *base, const char *path,
-			   unsigned int mode, int stage, void *context)
+			   unsigned int mode, void *context)
 {
 	struct path_hashmap_entry *entry;
 	int baselen = base->len;
@@ -473,8 +474,8 @@
 {
 	struct pathspec match_all;
 	memset(&match_all, 0, sizeof(match_all));
-	read_tree_recursive(opt->repo, tree, "", 0, 0,
-			    &match_all, save_files_dirs, opt);
+	read_tree(opt->repo, tree,
+		  &match_all, save_files_dirs, opt);
 }
 
 static int get_tree_entry_if_blob(struct repository *r,
@@ -486,7 +487,7 @@
 
 	ret = get_tree_entry(r, tree, path, &dfs->oid, &dfs->mode);
 	if (S_ISDIR(dfs->mode)) {
-		oidcpy(&dfs->oid, &null_oid);
+		oidcpy(&dfs->oid, null_oid());
 		dfs->mode = 0;
 	}
 	return ret;
@@ -522,6 +523,8 @@
 
 	unmerged->strdup_strings = 1;
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(istate);
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct string_list_item *item;
 		struct stage_data *e;
@@ -1075,6 +1078,11 @@
 	read_mmblob(&src1, &a->oid);
 	read_mmblob(&src2, &b->oid);
 
+	/*
+	 * FIXME: Using a->path for normalization rules in ll_merge could be
+	 * wrong if we renamed from a->path to b->path.  We should use the
+	 * target path for where the file will be written.
+	 */
 	merge_status = ll_merge(result_buf, a->path, &orig, base,
 				&src1, name1, &src2, name2,
 				opt->repo->index, &ll_opts);
@@ -1154,6 +1162,8 @@
 	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);
 	fprintf(stderr, "%s\n", sb.buf);
 	strbuf_release(&sb);
@@ -1177,6 +1187,11 @@
 	int search = !opt->priv->call_depth;
 
 	/* store a in result in case we fail */
+	/* FIXME: This is the WRONG resolution for the recursive case when
+	 * we need to be careful to avoid accidentally matching either side.
+	 * Should probably use o instead there, much like we do for merging
+	 * binaries.
+	 */
 	oidcpy(result, a);
 
 	/* we can not handle deletion conflicts */
@@ -1301,6 +1316,13 @@
 
 	if ((S_IFMT & a->mode) != (S_IFMT & b->mode)) {
 		result->clean = 0;
+		/*
+		 * FIXME: This is a bad resolution for recursive case; for
+		 * the recursive case we want something that is unlikely to
+		 * accidentally match either side.  Also, while it makes
+		 * sense to prefer regular files over symlinks, it doesn't
+		 * make sense to prefer regular files over submodules.
+		 */
 		if (S_ISREG(a->mode)) {
 			result->blob.mode = a->mode;
 			oidcpy(&result->blob.oid, &a->oid);
@@ -1349,6 +1371,7 @@
 			free(result_buf.ptr);
 			if (ret)
 				return ret;
+			/* FIXME: bug, what if modes didn't match? */
 			result->clean = (merge_status == 0);
 		} else if (S_ISGITLINK(a->mode)) {
 			result->clean = merge_submodule(opt, &result->blob.oid,
@@ -1604,7 +1627,7 @@
 
 	/* Store things in diff_filespecs for functions that need it */
 	null.path = (char *)collide_path;
-	oidcpy(&null.oid, &null_oid);
+	oidcpy(&null.oid, null_oid());
 	null.mode = 0;
 
 	if (merge_mode_and_contents(opt, &null, a, b, collide_path,
@@ -1857,7 +1880,7 @@
 	 */
 	if (opts.detect_rename > DIFF_DETECT_RENAME)
 		opts.detect_rename = DIFF_DETECT_RENAME;
-	opts.rename_limit = (opt->rename_limit >= 0) ? opt->rename_limit : 1000;
+	opts.rename_limit = (opt->rename_limit >= 0) ? opt->rename_limit : 7000;
 	opts.rename_score = opt->rename_score;
 	opts.show_rename_progress = opt->show_rename_progress;
 	opts.output_format = DIFF_FORMAT_NO_OUTPUT;
@@ -2130,7 +2153,7 @@
  *      implicit renaming of files that should be left in place.  (See
  *      testcase 6b in t6043 for details.)
  *   2. Prune directory renames if there are still files left in the
- *      the original directory.  These represent a partial directory rename,
+ *      original directory.  These represent a partial directory rename,
  *      i.e. a rename where only some of the files within the directory
  *      were renamed elsewhere.  (Technically, this could be done earlier
  *      in get_directory_renames(), except that would prevent us from
@@ -2389,8 +2412,7 @@
 			continue;
 		collision_ent = collision_find_entry(collisions, new_path);
 		if (!collision_ent) {
-			collision_ent = xcalloc(1,
-						sizeof(struct collision_entry));
+			CALLOC_ARRAY(collision_ent, 1);
 			hashmap_entry_init(&collision_ent->ent,
 						strhash(new_path));
 			hashmap_put(collisions, &collision_ent->ent);
@@ -2594,7 +2616,7 @@
 	struct string_list *renames;
 
 	compute_collisions(&collisions, dir_renames, pairs);
-	renames = xcalloc(1, sizeof(struct string_list));
+	CALLOC_ARRAY(renames, 1);
 
 	for (i = 0; i < pairs->nr; ++i) {
 		struct string_list_item *item;
@@ -2664,6 +2686,14 @@
 	struct string_list b_by_dst = STRING_LIST_INIT_NODUP;
 	const struct rename *sre;
 
+	/*
+	 * FIXME: As string-list.h notes, it's O(n^2) to build a sorted
+	 * string_list one-by-one, but O(n log n) to build it unsorted and
+	 * then sort it.  Note that as we build the list, we do not need to
+	 * check if the existing destination path is already in the list,
+	 * because the structure of diffcore_rename guarantees we won't
+	 * have duplicates.
+	 */
 	for (i = 0; i < a_renames->nr; i++) {
 		sre = a_renames->items[i].util;
 		string_list_insert(&a_by_dst, sre->pair->two->path)->util
@@ -2775,12 +2805,19 @@
 			int renamed_stage = a_renames == renames1 ? 2 : 3;
 			int other_stage =   a_renames == renames1 ? 3 : 2;
 
+			/*
+			 * Directory renames have a funny corner case...
+			 */
+			int renamed_to_self = !strcmp(ren1_src, ren1_dst);
+
 			/* BUG: We should only remove ren1_src in the base
 			 * stage and in other_stage (think of rename +
 			 * add-source case).
 			 */
-			remove_file(opt, 1, ren1_src,
-				    renamed_stage == 2 || !was_tracked(opt, ren1_src));
+			if (!renamed_to_self)
+				remove_file(opt, 1, ren1_src,
+					    renamed_stage == 2 ||
+					    !was_tracked(opt, ren1_src));
 
 			oidcpy(&src_other.oid,
 			       &ren1->src_entry->stages[other_stage].oid);
@@ -2790,11 +2827,14 @@
 			dst_other.mode = ren1->dst_entry->stages[other_stage].mode;
 			try_merge = 0;
 
-			if (oideq(&src_other.oid, &null_oid) &&
+			if (oideq(&src_other.oid, null_oid()) &&
 			    ren1->dir_rename_original_type == 'A') {
 				setup_rename_conflict_info(RENAME_VIA_DIR,
 							   opt, ren1, NULL);
-			} else if (oideq(&src_other.oid, &null_oid)) {
+			} else if (renamed_to_self) {
+				setup_rename_conflict_info(RENAME_NORMAL,
+							   opt, ren1, NULL);
+			} else if (oideq(&src_other.oid, null_oid())) {
 				setup_rename_conflict_info(RENAME_DELETE,
 							   opt, ren1, NULL);
 			} else if ((dst_other.mode == ren1->pair->two->mode) &&
@@ -2813,7 +2853,7 @@
 						      1, /* update_cache */
 						      0  /* update_wd    */))
 					clean_merge = -1;
-			} else if (!oideq(&dst_other.oid, &null_oid)) {
+			} else if (!oideq(&dst_other.oid, null_oid())) {
 				/*
 				 * Probably not a clean merge, but it's
 				 * premature to set clean_merge to 0 here,
@@ -2987,7 +3027,7 @@
 	struct strbuf obuf = STRBUF_INIT;
 	struct strbuf abuf = STRBUF_INIT;
 	int ret = 0; /* assume changed for safety */
-	const struct index_state *idx = opt->repo->index;
+	struct index_state *idx = opt->repo->index;
 
 	if (a->mode != o->mode)
 		return 0;
@@ -3151,7 +3191,6 @@
 	struct rename *ren = ci->ren1;
 	struct merge_file_info mfi;
 	int clean;
-	int side = (ren->branch == opt->branch1 ? 2 : 3);
 
 	/* Merge the content and write it out */
 	clean = handle_content_merge(&mfi, opt, path, was_dirty(opt, path),
@@ -3161,9 +3200,7 @@
 	    opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_CONFLICT &&
 	    ren->dir_rename_original_dest) {
 		if (update_stages(opt, path,
-				  NULL,
-				  side == 2 ? &mfi.blob : NULL,
-				  side == 2 ? NULL : &mfi.blob))
+				  &mfi.blob, &mfi.blob, &mfi.blob))
 			return -1;
 		clean = 0; /* not clean, but conflicted */
 	}
@@ -3433,7 +3470,7 @@
 	}
 
 	if (oideq(&merge_base->object.oid, &merge->object.oid)) {
-		output(opt, 0, _("Already up to date!"));
+		output(opt, 0, _("Already up to date."));
 		*result = head;
 		return 1;
 	}
@@ -3602,6 +3639,15 @@
 			return err(opt, _("merge returned no commit"));
 	}
 
+	/*
+	 * FIXME: Since merge_recursive_internal() is only ever called by
+	 * places that ensure the index is loaded first
+	 * (e.g. builtin/merge.c, rebase/sequencer, etc.), in the common
+	 * case where the merge base was unique that means when we get here
+	 * we immediately discard the index and re-read it, which is a
+	 * complete waste of time.  We should only be discarding and
+	 * re-reading if we were forced to recurse.
+	 */
 	discard_index(opt->repo->index);
 	if (!opt->priv->call_depth)
 		repo_read_index(opt->repo);
@@ -3664,8 +3710,8 @@
 		return -1;
 	}
 
-	opt->priv = xcalloc(1, sizeof(*opt->priv));
-	string_list_init(&opt->priv->df_conflict_file_set, 1);
+	CALLOC_ARRAY(opt->priv, 1);
+	string_list_init_dup(&opt->priv->df_conflict_file_set);
 	return 0;
 }
 
diff --git a/merge.c b/merge.c
index 5fb88af..6e73688 100644
--- a/merge.c
+++ b/merge.c
@@ -53,7 +53,7 @@
 	struct unpack_trees_options opts;
 	struct tree_desc t[MAX_UNPACK_TREES];
 	int i, nr_trees = 0;
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 	struct lock_file lock_file = LOCK_INIT;
 
 	refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL);
@@ -80,7 +80,6 @@
 	}
 
 	memset(&opts, 0, sizeof(opts));
-	dir_init(&dir);
 	if (overwrite_ignore) {
 		dir.flags |= DIR_SHOW_IGNORED;
 		setup_standard_excludes(&dir);
diff --git a/mergetools/kdiff3 b/mergetools/kdiff3
index 0264ed5..520cb91 100644
--- a/mergetools/kdiff3
+++ b/mergetools/kdiff3
@@ -25,3 +25,12 @@
 exit_code_trustable () {
 	true
 }
+
+translate_merge_tool_path() {
+	if type kdiff3 >/dev/null 2>/dev/null
+	then
+		echo kdiff3
+	else
+		mergetool_find_win32_cmd "kdiff3.exe" "Kdiff3"
+	fi
+}
diff --git a/mergetools/vimdiff b/mergetools/vimdiff
index abc8ce4..96f6209 100644
--- a/mergetools/vimdiff
+++ b/mergetools/vimdiff
@@ -15,6 +15,17 @@
 				"$LOCAL" "$MERGED" "$REMOTE"
 		fi
 		;;
+	*vimdiff1)
+		"$merge_tool_path" -f -d \
+			-c 'echon "Resolve conflicts leftward then save. Use :cq to abort."' \
+			"$LOCAL" "$REMOTE"
+		ret="$?"
+		if test "$ret" -eq 0
+		then
+			cp -- "$LOCAL" "$MERGED"
+		fi
+		return "$ret"
+		;;
 	*vimdiff2)
 		"$merge_tool_path" -f -d -c 'wincmd l' \
 			"$LOCAL" "$MERGED" "$REMOTE"
@@ -52,7 +63,7 @@
 
 list_tool_variants () {
 	for prefix in '' g n; do
-		for suffix in '' 2 3; do
+		for suffix in '' 1 2 3; do
 			echo "${prefix}vimdiff${suffix}"
 		done
 	done
diff --git a/midx.c b/midx.c
index b4ab84c..321c6fd 100644
--- a/midx.c
+++ b/midx.c
@@ -157,8 +157,8 @@
 
 	m->num_objects = ntohl(m->chunk_oid_fanout[255]);
 
-	m->pack_names = xcalloc(m->num_packs, sizeof(*m->pack_names));
-	m->packs = xcalloc(m->num_packs, sizeof(*m->packs));
+	CALLOC_ARRAY(m->pack_names, m->num_packs);
+	CALLOC_ARRAY(m->packs, m->num_packs);
 
 	cur_pack_name = (const char *)m->chunk_pack_names;
 	for (i = 0; i < m->num_packs; i++) {
@@ -247,7 +247,7 @@
 	if (n >= m->num_objects)
 		return NULL;
 
-	hashcpy(oid->hash, m->chunk_oid_lookup + m->hash_len * n);
+	oidread(oid, m->chunk_oid_lookup + m->hash_len * n);
 	return oid;
 }
 
@@ -885,6 +885,11 @@
 static void clear_midx_files_ext(struct repository *r, const char *ext,
 				 unsigned char *keep_hash);
 
+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,
 			       struct string_list *packs_to_drop,
 			       const char *preferred_pack_name,
@@ -911,6 +916,11 @@
 	else
 		ctx.m = load_multi_pack_index(object_dir, 1);
 
+	if (ctx.m && !midx_checksum_valid(ctx.m)) {
+		warning(_("ignoring existing multi-pack-index; checksum mismatch"));
+		ctx.m = NULL;
+	}
+
 	ctx.nr = 0;
 	ctx.alloc = ctx.m ? ctx.m->num_packs : 16;
 	ctx.info = NULL;
@@ -1162,6 +1172,7 @@
 
 static int verify_midx_error;
 
+__attribute__((format (printf, 1, 2)))
 static void midx_report(const char *fmt, ...)
 {
 	va_list ap;
@@ -1218,6 +1229,9 @@
 		return result;
 	}
 
+	if (!midx_checksum_valid(m))
+		midx_report(_("incorrect checksum"));
+
 	if (flags & MIDX_PROGRESS)
 		progress = start_delayed_progress(_("Looking for referenced packfiles"),
 					  m->num_packs);
@@ -1337,7 +1351,7 @@
 	if (!m)
 		return 0;
 
-	count = xcalloc(m->num_packs, sizeof(uint32_t));
+	CALLOC_ARRAY(count, m->num_packs);
 
 	if (flags & MIDX_PROGRESS)
 		progress = start_delayed_progress(_("Counting referenced objects"),
@@ -1508,7 +1522,7 @@
 	if (!m)
 		return 0;
 
-	include_pack = xcalloc(m->num_packs, sizeof(unsigned char));
+	CALLOC_ARRAY(include_pack, m->num_packs);
 
 	if (batch_size) {
 		if (fill_included_packs_batch(r, m, include_pack, batch_size))
diff --git a/name-hash.c b/name-hash.c
index 4e03fac..7487d33 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -8,6 +8,7 @@
 #include "cache.h"
 #include "thread-utils.h"
 #include "trace2.h"
+#include "sparse-index.h"
 
 struct dir_entry {
 	struct hashmap_entry ent;
@@ -109,8 +110,11 @@
 	if (ce->ce_flags & CE_HASHED)
 		return;
 	ce->ce_flags |= CE_HASHED;
-	hashmap_entry_init(&ce->ent, memihash(ce->name, ce_namelen(ce)));
-	hashmap_add(&istate->name_hash, &ce->ent);
+
+	if (!S_ISSPARSEDIR(ce->ce_mode)) {
+		hashmap_entry_init(&ce->ent, memihash(ce->name, ce_namelen(ce)));
+		hashmap_add(&istate->name_hash, &ce->ent);
+	}
 
 	if (ignore_case)
 		add_dir_entry(istate, ce);
@@ -225,7 +229,7 @@
 {
 	int j;
 
-	lazy_dir_mutex_array = xcalloc(LAZY_MAX_MUTEX, sizeof(pthread_mutex_t));
+	CALLOC_ARRAY(lazy_dir_mutex_array, LAZY_MAX_MUTEX);
 
 	for (j = 0; j < LAZY_MAX_MUTEX; j++)
 		init_recursive_mutex(&lazy_dir_mutex_array[j]);
@@ -514,9 +518,9 @@
 	k_start = 0;
 	nr_each = DIV_ROUND_UP(istate->cache_nr, lazy_nr_dir_threads);
 
-	lazy_entries = xcalloc(istate->cache_nr, sizeof(struct lazy_entry));
-	td_dir = xcalloc(lazy_nr_dir_threads, sizeof(struct lazy_dir_thread_data));
-	td_name = xcalloc(1, sizeof(struct lazy_name_thread_data));
+	CALLOC_ARRAY(lazy_entries, istate->cache_nr);
+	CALLOC_ARRAY(td_dir, lazy_nr_dir_threads);
+	CALLOC_ARRAY(td_name, 1);
 
 	init_dir_mutex();
 
@@ -680,6 +684,7 @@
 	struct dir_entry *dir;
 
 	lazy_init_name_hash(istate);
+	expand_to_path(istate, name, namelen, 0);
 	dir = find_dir_entry(istate, name, namelen);
 	return dir && dir->nr;
 }
@@ -690,6 +695,7 @@
 	const char *ptr = startPtr;
 
 	lazy_init_name_hash(istate);
+	expand_to_path(istate, name, strlen(name), 0);
 	while (*ptr) {
 		while (*ptr && *ptr != '/')
 			ptr++;
@@ -713,6 +719,7 @@
 	unsigned int hash = memihash(name, namelen);
 
 	lazy_init_name_hash(istate);
+	expand_to_path(istate, name, namelen, icase);
 
 	ce = hashmap_get_entry_from_hash(&istate->name_hash, hash, NULL,
 					 struct cache_entry, ent);
diff --git a/negotiator/default.c b/negotiator/default.c
index 4b78f6b..434189a 100644
--- a/negotiator/default.c
+++ b/negotiator/default.c
@@ -167,7 +167,7 @@
 	negotiator->next = next;
 	negotiator->ack = ack;
 	negotiator->release = release;
-	negotiator->data = ns = xcalloc(1, sizeof(*ns));
+	negotiator->data = CALLOC_ARRAY(ns, 1);
 	ns->rev_list.compare = compare_commits_by_commit_date;
 
 	if (marked)
diff --git a/negotiator/skipping.c b/negotiator/skipping.c
index dffbc76..1236e79 100644
--- a/negotiator/skipping.c
+++ b/negotiator/skipping.c
@@ -62,7 +62,7 @@
 	struct entry *entry;
 	commit->object.flags |= mark | SEEN;
 
-	entry = xcalloc(1, sizeof(*entry));
+	CALLOC_ARRAY(entry, 1);
 	entry->commit = commit;
 	prio_queue_put(&data->rev_list, entry);
 
@@ -241,7 +241,7 @@
 	negotiator->next = next;
 	negotiator->ack = ack;
 	negotiator->release = release;
-	negotiator->data = data = xcalloc(1, sizeof(*data));
+	negotiator->data = CALLOC_ARRAY(data, 1);
 	data->rev_list.compare = compare;
 
 	if (marked)
diff --git a/notes-merge.c b/notes-merge.c
index 2fe724f..46c1f7c 100644
--- a/notes-merge.c
+++ b/notes-merge.c
@@ -136,7 +136,7 @@
 	diff_tree_oid(base, remote, "", &opt);
 	diffcore_std(&opt);
 
-	changes = xcalloc(diff_queued_diff.nr, sizeof(struct notes_merge_pair));
+	CALLOC_ARRAY(changes, diff_queued_diff.nr);
 
 	for (i = 0; i < diff_queued_diff.nr; i++) {
 		struct diff_filepair *p = diff_queued_diff.queue[i];
@@ -600,7 +600,7 @@
 	/* Find merge bases */
 	bases = get_merge_bases(local, remote);
 	if (!bases) {
-		base_oid = &null_oid;
+		base_oid = null_oid();
 		base_tree_oid = the_hash_algo->empty_tree;
 		if (o->verbosity >= 4)
 			printf("No merge base found; doing history-less merge\n");
@@ -628,7 +628,7 @@
 	if (oideq(&remote->object.oid, base_oid)) {
 		/* Already merged; result == local commit */
 		if (o->verbosity >= 2)
-			printf("Already up to date!\n");
+			printf_ln("Already up to date.");
 		oidcpy(result_oid, &local->object.oid);
 		goto found_result;
 	}
@@ -695,13 +695,10 @@
 
 	strbuf_addch(&path, '/');
 	baselen = path.len;
-	while ((e = readdir(dir)) != NULL) {
+	while ((e = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 		struct stat st;
 		struct object_id obj_oid, blob_oid;
 
-		if (is_dot_or_dotdot(e->d_name))
-			continue;
-
 		if (get_oid_hex(e->d_name, &obj_oid)) {
 			if (o->verbosity >= 3)
 				printf("Skipping non-SHA1 entry '%s%s'\n",
diff --git a/notes-utils.c b/notes-utils.c
index 4bf4888..d7d18e3 100644
--- a/notes-utils.c
+++ b/notes-utils.c
@@ -129,7 +129,7 @@
 	c->cmd = cmd;
 	c->enabled = 1;
 	c->combine = combine_notes_concatenate;
-	c->refs = xcalloc(1, sizeof(struct string_list));
+	CALLOC_ARRAY(c->refs, 1);
 	c->refs->strdup_strings = 1;
 	c->refs_from_env = 0;
 	c->mode_from_env = 0;
diff --git a/notes.c b/notes.c
index d5ac081..f87dac4 100644
--- a/notes.c
+++ b/notes.c
@@ -352,7 +352,7 @@
 	n->next = NULL;
 	n->path = path;
 	n->mode = mode;
-	hashcpy(n->oid.hash, sha1);
+	oidread(&n->oid, sha1);
 	t->prev_non_note = n;
 
 	if (!t->first_non_note) {
@@ -452,9 +452,11 @@
 			goto handle_non_note;
 		}
 
-		l = xcalloc(1, sizeof(*l));
+		CALLOC_ARRAY(l, 1);
 		oidcpy(&l->key_oid, &object_oid);
 		oidcpy(&l->val_oid, &entry.oid);
+		oid_set_algo(&l->key_oid, the_hash_algo);
+		oid_set_algo(&l->val_oid, the_hash_algo);
 		if (note_tree_insert(t, node, n, l, type,
 				     combine_notes_concatenate))
 			die("Failed to load %s %s into notes tree "
@@ -484,6 +486,7 @@
 				strbuf_addch(&non_note_path, '/');
 			}
 			strbuf_addstr(&non_note_path, entry.path);
+			oid_set_algo(&entry.oid, the_hash_algo);
 			add_non_note(t, strbuf_detach(&non_note_path, NULL),
 				     entry.mode, entry.oid.hash);
 		}
@@ -1134,7 +1137,7 @@
 	if (!t)
 		t = &default_notes_tree;
 	assert(t->initialized);
-	hashcpy(l.key_oid.hash, object_sha1);
+	oidread(&l.key_oid, object_sha1);
 	oidclr(&l.val_oid);
 	note_tree_remove(t, t->root, 0, &l);
 	if (is_null_oid(&l.val_oid)) /* no note was removed */
@@ -1324,7 +1327,7 @@
 	if (note)
 		return add_note(t, to_obj, note, combine_notes);
 	else if (existing_note)
-		return add_note(t, to_obj, &null_oid, combine_notes);
+		return add_note(t, to_obj, null_oid(), combine_notes);
 
 	return 0;
 }
diff --git a/object-file.c b/object-file.c
index 5bcfde8..3d27dc8 100644
--- a/object-file.c
+++ b/object-file.c
@@ -55,18 +55,29 @@
 	"\x6f\xe1\x41\xf7\x74\x91\x20\xa3\x03\x72" \
 	"\x18\x13"
 
-const struct object_id null_oid;
 static const struct object_id empty_tree_oid = {
-	EMPTY_TREE_SHA1_BIN_LITERAL
+	.hash = EMPTY_TREE_SHA1_BIN_LITERAL,
+	.algo = GIT_HASH_SHA1,
 };
 static const struct object_id empty_blob_oid = {
-	EMPTY_BLOB_SHA1_BIN_LITERAL
+	.hash = EMPTY_BLOB_SHA1_BIN_LITERAL,
+	.algo = GIT_HASH_SHA1,
+};
+static const struct object_id null_oid_sha1 = {
+	.hash = {0},
+	.algo = GIT_HASH_SHA1,
 };
 static const struct object_id empty_tree_oid_sha256 = {
-	EMPTY_TREE_SHA256_BIN_LITERAL
+	.hash = EMPTY_TREE_SHA256_BIN_LITERAL,
+	.algo = GIT_HASH_SHA256,
 };
 static const struct object_id empty_blob_oid_sha256 = {
-	EMPTY_BLOB_SHA256_BIN_LITERAL
+	.hash = EMPTY_BLOB_SHA256_BIN_LITERAL,
+	.algo = GIT_HASH_SHA256,
+};
+static const struct object_id null_oid_sha256 = {
+	.hash = {0},
+	.algo = GIT_HASH_SHA256,
 };
 
 static void git_hash_sha1_init(git_hash_ctx *ctx)
@@ -89,6 +100,13 @@
 	git_SHA1_Final(hash, &ctx->sha1);
 }
 
+static void git_hash_sha1_final_oid(struct object_id *oid, git_hash_ctx *ctx)
+{
+	git_SHA1_Final(oid->hash, &ctx->sha1);
+	memset(oid->hash + GIT_SHA1_RAWSZ, 0, GIT_MAX_RAWSZ - GIT_SHA1_RAWSZ);
+	oid->algo = GIT_HASH_SHA1;
+}
+
 
 static void git_hash_sha256_init(git_hash_ctx *ctx)
 {
@@ -110,6 +128,17 @@
 	git_SHA256_Final(hash, &ctx->sha256);
 }
 
+static void git_hash_sha256_final_oid(struct object_id *oid, git_hash_ctx *ctx)
+{
+	git_SHA256_Final(oid->hash, &ctx->sha256);
+	/*
+	 * This currently does nothing, so the compiler should optimize it out,
+	 * but keep it in case we extend the hash size again.
+	 */
+	memset(oid->hash + GIT_SHA256_RAWSZ, 0, GIT_MAX_RAWSZ - GIT_SHA256_RAWSZ);
+	oid->algo = GIT_HASH_SHA256;
+}
+
 static void git_hash_unknown_init(git_hash_ctx *ctx)
 {
 	BUG("trying to init unknown hash");
@@ -130,6 +159,12 @@
 	BUG("trying to finalize unknown hash");
 }
 
+static void git_hash_unknown_final_oid(struct object_id *oid, git_hash_ctx *ctx)
+{
+	BUG("trying to finalize unknown hash");
+}
+
+
 const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = {
 	{
 		NULL,
@@ -141,6 +176,8 @@
 		git_hash_unknown_clone,
 		git_hash_unknown_update,
 		git_hash_unknown_final,
+		git_hash_unknown_final_oid,
+		NULL,
 		NULL,
 		NULL,
 	},
@@ -155,8 +192,10 @@
 		git_hash_sha1_clone,
 		git_hash_sha1_update,
 		git_hash_sha1_final,
+		git_hash_sha1_final_oid,
 		&empty_tree_oid,
 		&empty_blob_oid,
+		&null_oid_sha1,
 	},
 	{
 		"sha256",
@@ -169,11 +208,18 @@
 		git_hash_sha256_clone,
 		git_hash_sha256_update,
 		git_hash_sha256_final,
+		git_hash_sha256_final_oid,
 		&empty_tree_oid_sha256,
 		&empty_blob_oid_sha256,
+		&null_oid_sha256,
 	}
 };
 
+const struct object_id *null_oid(void)
+{
+	return the_hash_algo->null_oid;
+}
+
 const char *empty_tree_oid_hex(void)
 {
 	static char buf[GIT_MAX_HEXSZ + 1];
@@ -471,9 +517,9 @@
  */
 static int alt_odb_usable(struct raw_object_store *o,
 			  struct strbuf *path,
-			  const char *normalized_objdir)
+			  const char *normalized_objdir, khiter_t *pos)
 {
-	struct object_directory *odb;
+	int r;
 
 	/* Detect cases where alternate disappeared */
 	if (!is_directory(path->buf)) {
@@ -487,14 +533,20 @@
 	 * Prevent the common mistake of listing the same
 	 * thing twice, or object directory itself.
 	 */
-	for (odb = o->odb; odb; odb = odb->next) {
-		if (!fspathcmp(path->buf, odb->path))
-			return 0;
-	}
-	if (!fspathcmp(path->buf, normalized_objdir))
-		return 0;
+	if (!o->odb_by_path) {
+		khiter_t p;
 
-	return 1;
+		o->odb_by_path = kh_init_odb_path_map();
+		assert(!o->odb->next);
+		p = kh_put_odb_path_map(o->odb_by_path, o->odb->path, &r);
+		assert(r == 1); /* never used */
+		kh_value(o->odb_by_path, p) = o->odb;
+	}
+	if (fspatheq(path->buf, normalized_objdir))
+		return 0;
+	*pos = kh_put_odb_path_map(o->odb_by_path, path->buf, &r);
+	/* r: 0 = exists, 1 = never used, 2 = deleted */
+	return r == 0 ? 0 : 1;
 }
 
 /*
@@ -515,17 +567,18 @@
 static void read_info_alternates(struct repository *r,
 				 const char *relative_base,
 				 int depth);
-static int link_alt_odb_entry(struct repository *r, const char *entry,
+static int link_alt_odb_entry(struct repository *r, const struct strbuf *entry,
 	const char *relative_base, int depth, const char *normalized_objdir)
 {
 	struct object_directory *ent;
 	struct strbuf pathbuf = STRBUF_INIT;
+	khiter_t pos;
 
-	if (!is_absolute_path(entry) && relative_base) {
+	if (!is_absolute_path(entry->buf) && relative_base) {
 		strbuf_realpath(&pathbuf, relative_base, 1);
 		strbuf_addch(&pathbuf, '/');
 	}
-	strbuf_addstr(&pathbuf, entry);
+	strbuf_addbuf(&pathbuf, entry);
 
 	if (strbuf_normalize_path(&pathbuf) < 0 && relative_base) {
 		error(_("unable to normalize alternate object path: %s"),
@@ -541,23 +594,25 @@
 	while (pathbuf.len && pathbuf.buf[pathbuf.len - 1] == '/')
 		strbuf_setlen(&pathbuf, pathbuf.len - 1);
 
-	if (!alt_odb_usable(r->objects, &pathbuf, normalized_objdir)) {
+	if (!alt_odb_usable(r->objects, &pathbuf, normalized_objdir, &pos)) {
 		strbuf_release(&pathbuf);
 		return -1;
 	}
 
-	ent = xcalloc(1, sizeof(*ent));
-	ent->path = xstrdup(pathbuf.buf);
+	CALLOC_ARRAY(ent, 1);
+	/* pathbuf.buf is already in r->objects->odb_by_path */
+	ent->path = strbuf_detach(&pathbuf, NULL);
 
 	/* add the alternate entry */
 	*r->objects->odb_tail = ent;
 	r->objects->odb_tail = &(ent->next);
 	ent->next = NULL;
+	assert(r->objects->odb_by_path);
+	kh_value(r->objects->odb_by_path, pos) = ent;
 
 	/* recursively add alternates */
-	read_info_alternates(r, pathbuf.buf, depth + 1);
+	read_info_alternates(r, ent->path, depth + 1);
 
-	strbuf_release(&pathbuf);
 	return 0;
 }
 
@@ -614,7 +669,7 @@
 		alt = parse_alt_odb_entry(alt, sep, &entry);
 		if (!entry.len)
 			continue;
-		link_alt_odb_entry(r, entry.buf,
+		link_alt_odb_entry(r, &entry,
 				   relative_base, depth, objdirbuf.buf);
 	}
 	strbuf_release(&entry);
@@ -977,12 +1032,26 @@
 	return ret;
 }
 
+const char *mmap_os_err(void)
+{
+	static const char blank[] = "";
+#if defined(__linux__)
+	if (errno == ENOMEM) {
+		/* this continues an existing error message: */
+		static const char enomem[] =
+", check sys.vm.max_map_count and/or RLIMIT_DATA";
+		return enomem;
+	}
+#endif /* OS-specific bits */
+	return blank;
+}
+
 void *xmmap(void *start, size_t length,
 	int prot, int flags, int fd, off_t offset)
 {
 	void *ret = xmmap_gently(start, length, prot, flags, fd, offset);
 	if (ret == MAP_FAILED)
-		die_errno(_("mmap failed"));
+		die_errno(_("mmap failed%s"), mmap_os_err());
 	return ret;
 }
 
@@ -1029,7 +1098,7 @@
 			break;
 		r->hash_algo->update_fn(&c, buf, readlen);
 	}
-	r->hash_algo->final_fn(real_oid.hash, &c);
+	r->hash_algo->final_oid_fn(&real_oid, &c);
 	close_istream(st);
 	return !oideq(oid, &real_oid) ? -1 : 0;
 }
@@ -1118,7 +1187,7 @@
 
 	prepare_alt_odb(r);
 	for (odb = r->objects->odb; odb; odb = odb->next) {
-		if (oid_array_lookup(odb_loose_cache(odb, oid), oid) >= 0)
+		if (oidtree_contains(odb_loose_cache(odb, oid), oid))
 			return 1;
 	}
 	return 0;
@@ -1524,15 +1593,12 @@
 		}
 
 		/* Check if it is a missing object */
-		if (fetch_if_missing && has_promisor_remote() &&
-		    !already_retried && r == the_repository &&
+		if (fetch_if_missing && repo_has_promisor_remote(r) &&
+		    !already_retried &&
 		    !(flags & OBJECT_INFO_SKIP_FETCH_OBJECT)) {
 			/*
 			 * TODO Investigate checking promisor_remote_get_direct()
 			 * TODO return value and stopping on error here.
-			 * TODO Pass a repository struct through
-			 * promisor_remote_get_direct(), such that arbitrary
-			 * repositories work.
 			 */
 			promisor_remote_get_direct(r, real, 1);
 			already_retried = 1;
@@ -1730,7 +1796,7 @@
 	algo->init_fn(&c);
 	algo->update_fn(&c, hdr, *hdrlen);
 	algo->update_fn(&c, buf, len);
-	algo->final_fn(oid->hash, &c);
+	algo->final_oid_fn(oid, &c);
 }
 
 /*
@@ -1902,7 +1968,7 @@
 	if (ret != Z_OK)
 		die(_("deflateEnd on object %s failed (%d)"), oid_to_hex(oid),
 		    ret);
-	the_hash_algo->final_fn(parano_oid.hash, &c);
+	the_hash_algo->final_oid_fn(&parano_oid, &c);
 	if (!oideq(oid, &parano_oid))
 		die(_("confused by unstable object source data for %s"),
 		    oid_to_hex(oid));
@@ -2304,10 +2370,8 @@
 	strbuf_addch(path, '/');
 	baselen = path->len;
 
-	while ((de = readdir(dir))) {
+	while ((de = readdir_skip_dot_and_dotdot(dir))) {
 		size_t namelen;
-		if (is_dot_or_dotdot(de->d_name))
-			continue;
 
 		namelen = strlen(de->d_name);
 		strbuf_setlen(path, baselen);
@@ -2315,6 +2379,7 @@
 		if (namelen == the_hash_algo->hexsz - 2 &&
 		    !hex_to_bytes(oid.hash + 1, de->d_name,
 				  the_hash_algo->rawsz - 1)) {
+			oid_set_algo(&oid, the_hash_algo);
 			if (obj_cb) {
 				r = obj_cb(&oid, path->buf, data);
 				if (r)
@@ -2398,39 +2463,45 @@
 static int append_loose_object(const struct object_id *oid, const char *path,
 			       void *data)
 {
-	oid_array_append(data, oid);
+	oidtree_insert(data, oid);
 	return 0;
 }
 
-struct oid_array *odb_loose_cache(struct object_directory *odb,
+struct oidtree *odb_loose_cache(struct object_directory *odb,
 				  const struct object_id *oid)
 {
 	int subdir_nr = oid->hash[0];
 	struct strbuf buf = STRBUF_INIT;
+	size_t word_bits = bitsizeof(odb->loose_objects_subdir_seen[0]);
+	size_t word_index = subdir_nr / word_bits;
+	size_t mask = 1 << (subdir_nr % word_bits);
+	uint32_t *bitmap;
 
 	if (subdir_nr < 0 ||
-	    subdir_nr >= ARRAY_SIZE(odb->loose_objects_subdir_seen))
+	    subdir_nr >= bitsizeof(odb->loose_objects_subdir_seen))
 		BUG("subdir_nr out of range");
 
-	if (odb->loose_objects_subdir_seen[subdir_nr])
-		return &odb->loose_objects_cache[subdir_nr];
-
+	bitmap = &odb->loose_objects_subdir_seen[word_index];
+	if (*bitmap & mask)
+		return odb->loose_objects_cache;
+	if (!odb->loose_objects_cache) {
+		ALLOC_ARRAY(odb->loose_objects_cache, 1);
+		oidtree_init(odb->loose_objects_cache);
+	}
 	strbuf_addstr(&buf, odb->path);
 	for_each_file_in_obj_subdir(subdir_nr, &buf,
 				    append_loose_object,
 				    NULL, NULL,
-				    &odb->loose_objects_cache[subdir_nr]);
-	odb->loose_objects_subdir_seen[subdir_nr] = 1;
+				    odb->loose_objects_cache);
+	*bitmap |= mask;
 	strbuf_release(&buf);
-	return &odb->loose_objects_cache[subdir_nr];
+	return odb->loose_objects_cache;
 }
 
 void odb_clear_loose_cache(struct object_directory *odb)
 {
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(odb->loose_objects_cache); i++)
-		oid_array_clear(&odb->loose_objects_cache[i]);
+	oidtree_clear(odb->loose_objects_cache);
+	FREE_AND_NULL(odb->loose_objects_cache);
 	memset(&odb->loose_objects_subdir_seen, 0,
 	       sizeof(odb->loose_objects_subdir_seen));
 }
@@ -2483,7 +2554,7 @@
 		return -1;
 	}
 
-	the_hash_algo->final_fn(real_oid.hash, &c);
+	the_hash_algo->final_oid_fn(&real_oid, &c);
 	if (!oideq(expected_oid, &real_oid)) {
 		error(_("hash mismatch for %s (expected %s)"), path,
 		      oid_to_hex(expected_oid));
diff --git a/object-name.c b/object-name.c
index 64202de..3263c19 100644
--- a/object-name.c
+++ b/object-name.c
@@ -87,27 +87,21 @@
 
 static int match_hash(unsigned, const unsigned char *, const unsigned char *);
 
+static enum cb_next match_prefix(const struct object_id *oid, void *arg)
+{
+	struct disambiguate_state *ds = arg;
+	/* no need to call match_hash, oidtree_each did prefix match */
+	update_candidates(ds, oid);
+	return ds->ambiguous ? CB_BREAK : CB_CONTINUE;
+}
+
 static void find_short_object_filename(struct disambiguate_state *ds)
 {
 	struct object_directory *odb;
 
-	for (odb = ds->repo->objects->odb; odb && !ds->ambiguous; odb = odb->next) {
-		int pos;
-		struct oid_array *loose_objects;
-
-		loose_objects = odb_loose_cache(odb, &ds->bin_pfx);
-		pos = oid_array_lookup(loose_objects, &ds->bin_pfx);
-		if (pos < 0)
-			pos = -1 - pos;
-		while (!ds->ambiguous && pos < loose_objects->nr) {
-			const struct object_id *oid;
-			oid = loose_objects->oid + pos;
-			if (!match_hash(ds->len, ds->bin_pfx.hash, oid->hash))
-				break;
-			update_candidates(ds, oid);
-			pos++;
-		}
-	}
+	for (odb = ds->repo->objects->odb; odb && !ds->ambiguous; odb = odb->next)
+		oidtree_each(odb_loose_cache(odb, &ds->bin_pfx),
+				&ds->bin_pfx, ds->len, match_prefix, ds);
 }
 
 static int match_hash(unsigned len, const unsigned char *a, const unsigned char *b)
diff --git a/object-store.h b/object-store.h
index 541dab0..e679acc 100644
--- a/object-store.h
+++ b/object-store.h
@@ -7,6 +7,9 @@
 #include "oid-array.h"
 #include "strbuf.h"
 #include "thread-utils.h"
+#include "khash.h"
+#include "dir.h"
+#include "oidtree.h"
 
 struct object_directory {
 	struct object_directory *next;
@@ -20,8 +23,8 @@
 	 *
 	 * Be sure to call odb_load_loose_cache() before using.
 	 */
-	char loose_objects_subdir_seen[256];
-	struct oid_array loose_objects_cache[256];
+	uint32_t loose_objects_subdir_seen[8]; /* 256 bits */
+	struct oidtree *loose_objects_cache;
 
 	/*
 	 * Path to the alternative object store. If this is a relative path,
@@ -30,6 +33,9 @@
 	char *path;
 };
 
+KHASH_INIT(odb_path_map, const char * /* key: odb_path */,
+	struct object_directory *, 1, fspathhash, fspatheq);
+
 void prepare_alt_odb(struct repository *r);
 char *compute_alternate_path(const char *path, struct strbuf *err);
 typedef int alt_odb_fn(struct object_directory *, void *);
@@ -54,7 +60,7 @@
  * Populate and return the loose object cache array corresponding to the
  * given object ID.
  */
-struct oid_array *odb_loose_cache(struct object_directory *odb,
+struct oidtree *odb_loose_cache(struct object_directory *odb,
 				  const struct object_id *oid);
 
 /* Empty the loose object cache for the specified object directory. */
@@ -116,6 +122,8 @@
 	 */
 	struct object_directory *odb;
 	struct object_directory **odb_tail;
+	kh_odb_path_map_t *odb_by_path;
+
 	int loaded_alternates;
 
 	/*
@@ -153,6 +161,11 @@
 	/* A most-recently-used ordered version of the packed_git list. */
 	struct list_head packed_git_mru;
 
+	struct {
+		struct packed_git **packs;
+		unsigned flags;
+	} kept_pack_cache;
+
 	/*
 	 * A map of packfiles to packed_git structs for tracking which
 	 * packs have been loaded already.
diff --git a/object.c b/object.c
index 98017be..4e85955 100644
--- a/object.c
+++ b/object.c
@@ -127,7 +127,7 @@
 	int new_hash_size = r->parsed_objects->obj_hash_size < 32 ? 32 : 2 * r->parsed_objects->obj_hash_size;
 	struct object **new_hash;
 
-	new_hash = xcalloc(new_hash_size, sizeof(struct object *));
+	CALLOC_ARRAY(new_hash, new_hash_size);
 	for (i = 0; i < r->parsed_objects->obj_hash_size; i++) {
 		struct object *obj = r->parsed_objects->obj_hash[i];
 
@@ -177,15 +177,32 @@
 	}
 }
 
-struct object *lookup_unknown_object(const struct object_id *oid)
+struct object *lookup_unknown_object(struct repository *r, const struct object_id *oid)
 {
-	struct object *obj = lookup_object(the_repository, oid);
+	struct object *obj = lookup_object(r, oid);
 	if (!obj)
-		obj = create_object(the_repository, oid,
-				    alloc_object_node(the_repository));
+		obj = create_object(r, oid, alloc_object_node(r));
 	return obj;
 }
 
+struct object *lookup_object_by_type(struct repository *r,
+			    const struct object_id *oid,
+			    enum object_type type)
+{
+	switch (type) {
+	case OBJ_COMMIT:
+		return (struct object *)lookup_commit(r, oid);
+	case OBJ_TREE:
+		return (struct object *)lookup_tree(r, oid);
+	case OBJ_TAG:
+		return (struct object *)lookup_tag(r, oid);
+	case OBJ_BLOB:
+		return (struct object *)lookup_blob(r, oid);
+	default:
+		die("BUG: unknown object type %d", type);
+	}
+}
+
 struct object *parse_object_buffer(struct repository *r, const struct object_id *oid, enum object_type type, unsigned long size, void *buffer, int *eaten_p)
 {
 	struct object *obj;
@@ -478,7 +495,7 @@
 	o->object_state = allocate_alloc_state();
 
 	o->is_shallow = -1;
-	o->shallow_stat = xcalloc(1, sizeof(*o->shallow_stat));
+	CALLOC_ARRAY(o->shallow_stat, 1);
 
 	o->buffer_slab = allocate_commit_buffer_slab();
 
@@ -512,6 +529,8 @@
 		free_object_directory(o->odb);
 		o->odb = next;
 	}
+	kh_destroy_odb_path_map(o->odb_by_path);
+	o->odb_by_path = NULL;
 }
 
 void raw_object_store_clear(struct raw_object_store *o)
diff --git a/object.h b/object.h
index 59daadc..3b38c9c 100644
--- a/object.h
+++ b/object.h
@@ -60,7 +60,7 @@
 /*
  * object flag allocation:
  * revision.h:               0---------10         15             23------26
- * fetch-pack.c:             01
+ * fetch-pack.c:             01    67
  * negotiator/default.c:       2--5
  * walker.c:                 0-2
  * upload-pack.c:                4       11-----14  16-----19
@@ -144,8 +144,26 @@
  */
 struct object *parse_object_buffer(struct repository *r, const struct object_id *oid, enum object_type type, unsigned long size, void *buffer, int *eaten_p);
 
-/** Returns the object, with potentially excess memory allocated. **/
-struct object *lookup_unknown_object(const struct object_id *oid);
+/*
+ * Allocate and return an object struct, even if you do not know the type of
+ * the object. The returned object may have its "type" field set to a real type
+ * (if somebody previously called lookup_blob(), etc), or it may be set to
+ * OBJ_NONE. In the latter case, subsequent calls to lookup_blob(), etc, will
+ * set the type field as appropriate.
+ *
+ * Use this when you do not know the expected type of an object and want to
+ * avoid parsing it for efficiency reasons. Try to avoid it otherwise; it
+ * may allocate excess memory, since the returned object must be as large as
+ * the maximum struct of any type.
+ */
+struct object *lookup_unknown_object(struct repository *r, const struct object_id *oid);
+
+/*
+ * Dispatch to the appropriate lookup_blob(), lookup_commit(), etc, based on
+ * "type".
+ */
+struct object *lookup_object_by_type(struct repository *r, const struct object_id *oid,
+				     enum object_type type);
 
 struct object_list *object_list_insert(struct object *item,
 				       struct object_list **list_p);
diff --git a/oidtree.c b/oidtree.c
new file mode 100644
index 0000000..7eb0e9b
--- /dev/null
+++ b/oidtree.c
@@ -0,0 +1,104 @@
+/*
+ * A wrapper around cbtree which stores oids
+ * May be used to replace oid-array for prefix (abbreviation) matches
+ */
+#include "oidtree.h"
+#include "alloc.h"
+#include "hash.h"
+
+struct oidtree_node {
+	/* n.k[] is used to store "struct object_id" */
+	struct cb_node n;
+};
+
+struct oidtree_iter_data {
+	oidtree_iter fn;
+	void *arg;
+	size_t *last_nibble_at;
+	int algo;
+	uint8_t last_byte;
+};
+
+void oidtree_init(struct oidtree *ot)
+{
+	cb_init(&ot->tree);
+	mem_pool_init(&ot->mem_pool, 0);
+}
+
+void oidtree_clear(struct oidtree *ot)
+{
+	if (ot) {
+		mem_pool_discard(&ot->mem_pool, 0);
+		oidtree_init(ot);
+	}
+}
+
+void oidtree_insert(struct oidtree *ot, const struct object_id *oid)
+{
+	struct oidtree_node *on;
+
+	if (!oid->algo)
+		BUG("oidtree_insert requires oid->algo");
+
+	on = mem_pool_alloc(&ot->mem_pool, sizeof(*on) + sizeof(*oid));
+	oidcpy_with_padding((struct object_id *)on->n.k, oid);
+
+	/*
+	 * n.b. Current callers won't get us duplicates, here.  If a
+	 * future caller causes duplicates, there'll be a a small leak
+	 * that won't be freed until oidtree_clear.  Currently it's not
+	 * worth maintaining a free list
+	 */
+	cb_insert(&ot->tree, &on->n, sizeof(*oid));
+}
+
+
+int oidtree_contains(struct oidtree *ot, const struct object_id *oid)
+{
+	struct object_id k;
+	size_t klen = sizeof(k);
+
+	oidcpy_with_padding(&k, oid);
+
+	if (oid->algo == GIT_HASH_UNKNOWN)
+		klen -= sizeof(oid->algo);
+
+	/* cb_lookup relies on memcmp on the struct, so order matters: */
+	klen += BUILD_ASSERT_OR_ZERO(offsetof(struct object_id, hash) <
+				offsetof(struct object_id, algo));
+
+	return cb_lookup(&ot->tree, (const uint8_t *)&k, klen) ? 1 : 0;
+}
+
+static enum cb_next iter(struct cb_node *n, void *arg)
+{
+	struct oidtree_iter_data *x = arg;
+	const struct object_id *oid = (const struct object_id *)n->k;
+
+	if (x->algo != GIT_HASH_UNKNOWN && x->algo != oid->algo)
+		return CB_CONTINUE;
+
+	if (x->last_nibble_at) {
+		if ((oid->hash[*x->last_nibble_at] ^ x->last_byte) & 0xf0)
+			return CB_CONTINUE;
+	}
+
+	return x->fn(oid, x->arg);
+}
+
+void oidtree_each(struct oidtree *ot, const struct object_id *oid,
+			size_t oidhexsz, oidtree_iter fn, void *arg)
+{
+	size_t klen = oidhexsz / 2;
+	struct oidtree_iter_data x = { 0 };
+	assert(oidhexsz <= GIT_MAX_HEXSZ);
+
+	x.fn = fn;
+	x.arg = arg;
+	x.algo = oid->algo;
+	if (oidhexsz & 1) {
+		x.last_byte = oid->hash[klen];
+		x.last_nibble_at = &klen;
+	}
+	cb_each(&ot->tree, (const uint8_t *)oid, klen, iter, &x);
+}
diff --git a/oidtree.h b/oidtree.h
new file mode 100644
index 0000000..77898f5
--- /dev/null
+++ b/oidtree.h
@@ -0,0 +1,22 @@
+#ifndef OIDTREE_H
+#define OIDTREE_H
+
+#include "cbtree.h"
+#include "hash.h"
+#include "mem-pool.h"
+
+struct oidtree {
+	struct cb_tree tree;
+	struct mem_pool mem_pool;
+};
+
+void oidtree_init(struct oidtree *);
+void oidtree_clear(struct oidtree *);
+void oidtree_insert(struct oidtree *, const struct object_id *);
+int oidtree_contains(struct oidtree *, const struct object_id *);
+
+typedef enum cb_next (*oidtree_iter)(const struct object_id *, void *data);
+void oidtree_each(struct oidtree *, const struct object_id *,
+			size_t oidhexsz, oidtree_iter, void *data);
+
+#endif /* OIDTREE_H */
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 60fe20f..bfc1014 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 "config.h"
 
 /*
  * An entry on the bitmap index, representing the bitmap for a given
@@ -524,6 +525,22 @@
 	return 1;
 }
 
+static int should_include_obj(struct object *obj, void *_data)
+{
+	struct include_data *data = _data;
+	int bitmap_pos;
+
+	bitmap_pos = bitmap_position(data->bitmap_git, &obj->oid);
+	if (bitmap_pos < 0)
+		return 1;
+	if ((data->seen && bitmap_get(data->seen, bitmap_pos)) ||
+	     bitmap_get(data->base, bitmap_pos)) {
+		obj->flags |= SEEN;
+		return 0;
+	}
+	return 1;
+}
+
 static int add_commit_to_bitmap(struct bitmap_index *bitmap_git,
 				struct bitmap **base,
 				struct commit *commit)
@@ -619,6 +636,7 @@
 		incdata.seen = seen;
 
 		revs->include_check = should_include;
+		revs->include_check_obj = should_include_obj;
 		revs->include_check_data = &incdata;
 
 		if (prepare_revision_walk(revs))
@@ -630,6 +648,10 @@
 		traverse_commit_list_filtered(filter, revs,
 					      show_commit, show_object,
 					      &show_data, NULL);
+
+		revs->include_check = NULL;
+		revs->include_check_obj = NULL;
+		revs->include_check_data = NULL;
 	}
 
 	return base;
@@ -779,9 +801,6 @@
 	eword_t mask;
 	uint32_t i;
 
-	if (type != OBJ_BLOB && type != OBJ_TREE)
-		BUG("filter_bitmap_exclude_type: unsupported type '%d'", type);
-
 	/*
 	 * The non-bitmap version of this filter never removes
 	 * objects which the other side specifically asked for,
@@ -911,6 +930,24 @@
 				   OBJ_BLOB);
 }
 
+static void filter_bitmap_object_type(struct bitmap_index *bitmap_git,
+				      struct object_list *tip_objects,
+				      struct bitmap *to_filter,
+				      enum object_type object_type)
+{
+	if (object_type < OBJ_COMMIT || object_type > OBJ_TAG)
+		BUG("filter_bitmap_object_type given invalid object");
+
+	if (object_type != OBJ_TAG)
+		filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, OBJ_TAG);
+	if (object_type != OBJ_COMMIT)
+		filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, OBJ_COMMIT);
+	if (object_type != OBJ_TREE)
+		filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, OBJ_TREE);
+	if (object_type != OBJ_BLOB)
+		filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, OBJ_BLOB);
+}
+
 static int filter_bitmap(struct bitmap_index *bitmap_git,
 			 struct object_list *tip_objects,
 			 struct bitmap *to_filter,
@@ -943,6 +980,24 @@
 		return 0;
 	}
 
+	if (filter->choice == LOFC_OBJECT_TYPE) {
+		if (bitmap_git)
+			filter_bitmap_object_type(bitmap_git, tip_objects,
+						  to_filter,
+						  filter->object_type);
+		return 0;
+	}
+
+	if (filter->choice == LOFC_COMBINE) {
+		int i;
+		for (i = 0; i < filter->sub_nr; i++) {
+			if (filter_bitmap(bitmap_git, tip_objects, to_filter,
+					  &filter->sub[i]) < 0)
+				return -1;
+		}
+		return 0;
+	}
+
 	/* filter choice not handled */
 	return -1;
 }
@@ -953,7 +1008,8 @@
 }
 
 struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
-					 struct list_objects_filter_options *filter)
+					 struct list_objects_filter_options *filter,
+					 int filter_provided_objects)
 {
 	unsigned int i;
 
@@ -978,7 +1034,7 @@
 
 	/* try to open a bitmapped pack, but don't parse it yet
 	 * because we may not need to use it */
-	bitmap_git = xcalloc(1, sizeof(*bitmap_git));
+	CALLOC_ARRAY(bitmap_git, 1);
 	if (open_pack_bitmap(revs->repo, bitmap_git) < 0)
 		goto cleanup;
 
@@ -997,6 +1053,7 @@
 				object_list_insert(object, &wants);
 
 			object = parse_object_or_die(get_tagged_oid(tag), NULL);
+			object->flags |= (tag->object.flags & UNINTERESTING);
 		}
 
 		if (object->flags & UNINTERESTING)
@@ -1047,7 +1104,8 @@
 	if (haves_bitmap)
 		bitmap_and_not(wants_bitmap, haves_bitmap);
 
-	filter_bitmap(bitmap_git, wants, wants_bitmap, filter);
+	filter_bitmap(bitmap_git, (filter && filter_provided_objects) ? NULL : wants,
+		      wants_bitmap, filter);
 
 	bitmap_git->result = wants_bitmap;
 	bitmap_git->haves = haves_bitmap;
@@ -1350,6 +1408,24 @@
 	free_bitmap_index(bitmap_git);
 }
 
+int test_bitmap_commits(struct repository *r)
+{
+	struct bitmap_index *bitmap_git = prepare_bitmap_git(r);
+	struct object_id oid;
+	MAYBE_UNUSED void *value;
+
+	if (!bitmap_git)
+		die("failed to load bitmap indexes");
+
+	kh_foreach(bitmap_git->bitmaps, oid, value, {
+		printf("%s\n", oid_to_hex(&oid));
+	});
+
+	free_bitmap_index(bitmap_git);
+
+	return 0;
+}
+
 int rebuild_bitmap(const uint32_t *reposition,
 		   struct ewah_bitmap *source,
 		   struct bitmap *dest)
@@ -1388,7 +1464,7 @@
 	uint32_t *reposition;
 
 	num_objects = bitmap_git->pack->num_objects;
-	reposition = xcalloc(num_objects, sizeof(uint32_t));
+	CALLOC_ARRAY(reposition, num_objects);
 
 	for (i = 0; i < num_objects; ++i) {
 		struct object_id oid;
@@ -1430,3 +1506,89 @@
 	return bitmap_git &&
 		bitmap_walk_contains(bitmap_git, bitmap_git->haves, oid);
 }
+
+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;
+	size_t i;
+
+	init_type_iterator(&it, bitmap_git, object_type);
+	for (i = 0; i < result->word_alloc &&
+			ewah_iterator_next(&filter, &it); i++) {
+		eword_t word = result->words[i] & filter;
+		size_t base = (i * BITS_IN_EWORD);
+		unsigned offset;
+
+		if (!word)
+			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);
+		}
+	}
+
+	return total;
+}
+
+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;
+	off_t object_size;
+	size_t i;
+
+	oi.disk_sizep = &object_size;
+
+	for (i = 0; i < eindex->count; i++) {
+		struct object *obj = eindex->objects[i];
+
+		if (!bitmap_get(result, pack->num_objects + i))
+			continue;
+
+		if (oid_object_info_extended(the_repository, &obj->oid, &oi, 0) < 0)
+			die(_("unable to get disk usage of %s"),
+			    oid_to_hex(&obj->oid));
+
+		total += object_size;
+	}
+	return total;
+}
+
+off_t get_disk_usage_from_bitmap(struct bitmap_index *bitmap_git,
+				 struct rev_info *revs)
+{
+	off_t total = 0;
+
+	total += get_disk_usage_for_type(bitmap_git, OBJ_COMMIT);
+	if (revs->tree_objects)
+		total += get_disk_usage_for_type(bitmap_git, OBJ_TREE);
+	if (revs->blob_objects)
+		total += get_disk_usage_for_type(bitmap_git, OBJ_BLOB);
+	if (revs->tag_objects)
+		total += get_disk_usage_for_type(bitmap_git, OBJ_TAG);
+
+	total += get_disk_usage_for_extended(bitmap_git);
+
+	return total;
+}
+
+const struct string_list *bitmap_preferred_tips(struct repository *r)
+{
+	return repo_config_get_value_multi(r, "pack.preferbitmaptips");
+}
diff --git a/pack-bitmap.h b/pack-bitmap.h
index 25dfcf5..99d733e 100644
--- a/pack-bitmap.h
+++ b/pack-bitmap.h
@@ -5,6 +5,7 @@
 #include "khash.h"
 #include "pack.h"
 #include "pack-objects.h"
+#include "string-list.h"
 
 struct commit;
 struct repository;
@@ -49,8 +50,10 @@
 				 struct rev_info *revs,
 				 show_reachable_fn show_reachable);
 void test_bitmap_walk(struct rev_info *revs);
+int test_bitmap_commits(struct repository *r);
 struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
-					 struct list_objects_filter_options *filter);
+					 struct list_objects_filter_options *filter,
+					 int filter_provided_objects);
 int reuse_partial_packfile_from_bitmap(struct bitmap_index *,
 				       struct packed_git **packfile,
 				       uint32_t *entries,
@@ -68,6 +71,8 @@
  */
 int bitmap_has_oid_in_uninteresting(struct bitmap_index *, const struct object_id *oid);
 
+off_t get_disk_usage_from_bitmap(struct bitmap_index *, struct rev_info *);
+
 void bitmap_writer_show_progress(int show);
 void bitmap_writer_set_checksum(unsigned char *sha1);
 void bitmap_writer_build_type_index(struct packing_data *to_pack,
@@ -88,4 +93,6 @@
 			  const char *filename,
 			  uint16_t options);
 
+const struct string_list *bitmap_preferred_tips(struct repository *r);
+
 #endif
diff --git a/pack-check.c b/pack-check.c
index 4b089fe..c8e560d 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -164,22 +164,13 @@
 
 int verify_pack_index(struct packed_git *p)
 {
-	size_t len;
-	const unsigned char *index_base;
-	git_hash_ctx ctx;
-	unsigned char hash[GIT_MAX_RAWSZ];
 	int err = 0;
 
 	if (open_pack_index(p))
 		return error("packfile %s index not opened", p->pack_name);
-	index_base = p->index_data;
-	len = p->index_size - the_hash_algo->rawsz;
 
 	/* Verify SHA1 sum of the index file */
-	the_hash_algo->init_fn(&ctx);
-	the_hash_algo->update_fn(&ctx, index_base, len);
-	the_hash_algo->final_fn(hash, &ctx);
-	if (!hasheq(hash, index_base + len))
+	if (!hashfile_checksum_valid(p->index_data, p->index_size))
 		err = error("Packfile index for %s hash mismatch",
 			    p->pack_name);
 	return err;
diff --git a/pack-objects.c b/pack-objects.c
index f2a4338..fe2a4ea 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -49,7 +49,7 @@
 		pdata->index_size = 1024;
 
 	free(pdata->index);
-	pdata->index = xcalloc(pdata->index_size, sizeof(*pdata->index));
+	CALLOC_ARRAY(pdata->index, pdata->index_size);
 
 	entry = pdata->objects;
 
diff --git a/pack-objects.h b/pack-objects.h
index 9d88e3e..dca2351 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -268,152 +268,10 @@
 	pack->in_pack[e - pack->objects] = p;
 }
 
-static inline struct object_entry *oe_delta(
-		const struct packing_data *pack,
-		const struct object_entry *e)
-{
-	if (!e->delta_idx)
-		return NULL;
-	if (e->ext_base)
-		return &pack->ext_bases[e->delta_idx - 1];
-	else
-		return &pack->objects[e->delta_idx - 1];
-}
-
-static inline void oe_set_delta(struct packing_data *pack,
-				struct object_entry *e,
-				struct object_entry *delta)
-{
-	if (delta)
-		e->delta_idx = (delta - pack->objects) + 1;
-	else
-		e->delta_idx = 0;
-}
-
 void oe_set_delta_ext(struct packing_data *pack,
 		      struct object_entry *e,
 		      const struct object_id *oid);
 
-static inline struct object_entry *oe_delta_child(
-		const struct packing_data *pack,
-		const struct object_entry *e)
-{
-	if (e->delta_child_idx)
-		return &pack->objects[e->delta_child_idx - 1];
-	return NULL;
-}
-
-static inline void oe_set_delta_child(struct packing_data *pack,
-				      struct object_entry *e,
-				      struct object_entry *delta)
-{
-	if (delta)
-		e->delta_child_idx = (delta - pack->objects) + 1;
-	else
-		e->delta_child_idx = 0;
-}
-
-static inline struct object_entry *oe_delta_sibling(
-		const struct packing_data *pack,
-		const struct object_entry *e)
-{
-	if (e->delta_sibling_idx)
-		return &pack->objects[e->delta_sibling_idx - 1];
-	return NULL;
-}
-
-static inline void oe_set_delta_sibling(struct packing_data *pack,
-					struct object_entry *e,
-					struct object_entry *delta)
-{
-	if (delta)
-		e->delta_sibling_idx = (delta - pack->objects) + 1;
-	else
-		e->delta_sibling_idx = 0;
-}
-
-unsigned long oe_get_size_slow(struct packing_data *pack,
-			       const struct object_entry *e);
-static inline unsigned long oe_size(struct packing_data *pack,
-				    const struct object_entry *e)
-{
-	if (e->size_valid)
-		return e->size_;
-
-	return oe_get_size_slow(pack, e);
-}
-
-static inline int oe_size_less_than(struct packing_data *pack,
-				    const struct object_entry *lhs,
-				    unsigned long rhs)
-{
-	if (lhs->size_valid)
-		return lhs->size_ < rhs;
-	if (rhs < pack->oe_size_limit) /* rhs < 2^x <= lhs ? */
-		return 0;
-	return oe_get_size_slow(pack, lhs) < rhs;
-}
-
-static inline int oe_size_greater_than(struct packing_data *pack,
-				       const struct object_entry *lhs,
-				       unsigned long rhs)
-{
-	if (lhs->size_valid)
-		return lhs->size_ > rhs;
-	if (rhs < pack->oe_size_limit) /* rhs < 2^x <= lhs ? */
-		return 1;
-	return oe_get_size_slow(pack, lhs) > rhs;
-}
-
-static inline void oe_set_size(struct packing_data *pack,
-			       struct object_entry *e,
-			       unsigned long size)
-{
-	if (size < pack->oe_size_limit) {
-		e->size_ = size;
-		e->size_valid = 1;
-	} else {
-		e->size_valid = 0;
-		if (oe_get_size_slow(pack, e) != size)
-			BUG("'size' is supposed to be the object size!");
-	}
-}
-
-static inline unsigned long oe_delta_size(struct packing_data *pack,
-					  const struct object_entry *e)
-{
-	if (e->delta_size_valid)
-		return e->delta_size_;
-
-	/*
-	 * pack->delta_size[] can't be NULL because oe_set_delta_size()
-	 * must have been called when a new delta is saved with
-	 * oe_set_delta().
-	 * If oe_delta() returns NULL (i.e. default state, which means
-	 * delta_size_valid is also false), then the caller must never
-	 * call oe_delta_size().
-	 */
-	return pack->delta_size[e - pack->objects];
-}
-
-static inline void oe_set_delta_size(struct packing_data *pack,
-				     struct object_entry *e,
-				     unsigned long size)
-{
-	if (size < pack->oe_delta_size_limit) {
-		e->delta_size_ = size;
-		e->delta_size_valid = 1;
-	} else {
-		packing_data_lock(pack);
-		if (!pack->delta_size)
-			ALLOC_ARRAY(pack->delta_size, pack->nr_alloc);
-		packing_data_unlock(pack);
-
-		pack->delta_size[e - pack->objects] = size;
-		e->delta_size_valid = 0;
-	}
-}
-
 static inline unsigned int oe_tree_depth(struct packing_data *pack,
 					 struct object_entry *e)
 {
@@ -422,23 +280,6 @@
 	return pack->tree_depth[e - pack->objects];
 }
 
-static inline void oe_set_tree_depth(struct packing_data *pack,
-				     struct object_entry *e,
-				     unsigned int tree_depth)
-{
-	if (!pack->tree_depth)
-		CALLOC_ARRAY(pack->tree_depth, pack->nr_alloc);
-	pack->tree_depth[e - pack->objects] = tree_depth;
-}
-
-static inline unsigned char oe_layer(struct packing_data *pack,
-				     struct object_entry *e)
-{
-	if (!pack->layer)
-		return 0;
-	return pack->layer[e - pack->objects];
-}
-
 static inline void oe_set_layer(struct packing_data *pack,
 				struct object_entry *e,
 				unsigned char layer)
diff --git a/pack-revindex.c b/pack-revindex.c
index b705891..0e4a31d 100644
--- a/pack-revindex.c
+++ b/pack-revindex.c
@@ -254,7 +254,8 @@
 		*data_p = (const uint32_t *)data;
 	}
 
-	close(fd);
+	if (fd >= 0)
+		close(fd);
 	return ret;
 }
 
diff --git a/pack-write.c b/pack-write.c
index 279770f..f1fc3ec 100644
--- a/pack-write.c
+++ b/pack-write.c
@@ -394,7 +394,7 @@
 	fsync_or_die(pack_fd, pack_name);
 }
 
-char *index_pack_lockfile(int ip_out)
+char *index_pack_lockfile(int ip_out, int *is_well_formed)
 {
 	char packname[GIT_MAX_HEXSZ + 6];
 	const int len = the_hash_algo->hexsz + 6;
@@ -408,11 +408,17 @@
 	 */
 	if (read_in_full(ip_out, packname, len) == len && packname[len-1] == '\n') {
 		const char *name;
+
+		if (is_well_formed)
+			*is_well_formed = 1;
 		packname[len-1] = 0;
 		if (skip_prefix(packname, "keep\t", &name))
 			return xstrfmt("%s/pack/pack-%s.keep",
 				       get_object_directory(), name);
+		return NULL;
 	}
+	if (is_well_formed)
+		*is_well_formed = 0;
 	return NULL;
 }
 
diff --git a/pack.h b/pack.h
index 09c2a7d..fa13954 100644
--- a/pack.h
+++ b/pack.h
@@ -87,7 +87,7 @@
 int verify_pack(struct repository *, struct packed_git *, verify_fn fn, struct progress *, uint32_t);
 off_t write_pack_header(struct hashfile *f, uint32_t);
 void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
-char *index_pack_lockfile(int fd);
+char *index_pack_lockfile(int fd, int *is_well_formed);
 
 struct ref;
 
diff --git a/packfile.c b/packfile.c
index 82623e0..9ef6d98 100644
--- a/packfile.c
+++ b/packfile.c
@@ -638,7 +638,7 @@
 			if (p->pack_fd == -1 && open_packed_git(p))
 				die("packfile %s cannot be accessed", p->pack_name);
 
-			win = xcalloc(1, sizeof(*win));
+			CALLOC_ARRAY(win, 1);
 			win->offset = (offset / window_align) * window_align;
 			len = p->pack_size - win->offset;
 			if (len > packed_git_window_size)
@@ -652,8 +652,8 @@
 				PROT_READ, MAP_PRIVATE,
 				p->pack_fd, win->offset);
 			if (win->base == MAP_FAILED)
-				die_errno("packfile %s cannot be mapped",
-					  p->pack_name);
+				die_errno(_("packfile %s cannot be mapped%s"),
+					  p->pack_name, mmap_os_err());
 			if (!win->offset && win->len == p->pack_size
 				&& !p->do_not_close)
 				close_pack_fd(p);
@@ -813,10 +813,7 @@
 	}
 	strbuf_addch(&path, '/');
 	dirnamelen = path.len;
-	while ((de = readdir(dir)) != NULL) {
-		if (is_dot_or_dotdot(de->d_name))
-			continue;
-
+	while ((de = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 		strbuf_setlen(&path, dirnamelen);
 		strbuf_addstr(&path, de->d_name);
 
@@ -2069,12 +2066,79 @@
 	return 0;
 }
 
+static void maybe_invalidate_kept_pack_cache(struct repository *r,
+					     unsigned flags)
+{
+	if (!r->objects->kept_pack_cache.packs)
+		return;
+	if (r->objects->kept_pack_cache.flags == flags)
+		return;
+	FREE_AND_NULL(r->objects->kept_pack_cache.packs);
+	r->objects->kept_pack_cache.flags = 0;
+}
+
+static struct packed_git **kept_pack_cache(struct repository *r, unsigned flags)
+{
+	maybe_invalidate_kept_pack_cache(r, flags);
+
+	if (!r->objects->kept_pack_cache.packs) {
+		struct packed_git **packs = NULL;
+		size_t nr = 0, alloc = 0;
+		struct packed_git *p;
+
+		/*
+		 * We want "all" packs here, because we need to cover ones that
+		 * are used by a midx, as well. We need to look in every one of
+		 * them (instead of the midx itself) to cover duplicates. It's
+		 * possible that an object is found in two packs that the midx
+		 * covers, one kept and one not kept, but the midx returns only
+		 * the non-kept version.
+		 */
+		for (p = get_all_packs(r); p; p = p->next) {
+			if ((p->pack_keep && (flags & ON_DISK_KEEP_PACKS)) ||
+			    (p->pack_keep_in_core && (flags & IN_CORE_KEEP_PACKS))) {
+				ALLOC_GROW(packs, nr + 1, alloc);
+				packs[nr++] = p;
+			}
+		}
+		ALLOC_GROW(packs, nr + 1, alloc);
+		packs[nr] = NULL;
+
+		r->objects->kept_pack_cache.packs = packs;
+		r->objects->kept_pack_cache.flags = flags;
+	}
+
+	return r->objects->kept_pack_cache.packs;
+}
+
+int find_kept_pack_entry(struct repository *r,
+			 const struct object_id *oid,
+			 unsigned flags,
+			 struct pack_entry *e)
+{
+	struct packed_git **cache;
+
+	for (cache = kept_pack_cache(r, flags); *cache; cache++) {
+		struct packed_git *p = *cache;
+		if (fill_pack_entry(oid, e, p))
+			return 1;
+	}
+
+	return 0;
+}
+
 int has_object_pack(const struct object_id *oid)
 {
 	struct pack_entry e;
 	return find_pack_entry(the_repository, oid, &e);
 }
 
+int has_object_kept_pack(const struct object_id *oid, unsigned flags)
+{
+	struct pack_entry e;
+	return find_kept_pack_entry(the_repository, oid, flags, &e);
+}
+
 int has_pack_index(const unsigned char *sha1)
 {
 	struct stat st;
@@ -2180,6 +2244,7 @@
 			return 0;
 		while (tree_entry_gently(&desc, &entry))
 			oidset_insert(set, &entry.oid);
+		free_tree_buffer(tree);
 	} else if (obj->type == OBJ_COMMIT) {
 		struct commit *commit = (struct commit *) obj;
 		struct commit_list *parents = commit->parents;
diff --git a/packfile.h b/packfile.h
index 4cfec9e..3ae117a 100644
--- a/packfile.h
+++ b/packfile.h
@@ -162,13 +162,18 @@
 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);
 
+#define ON_DISK_KEEP_PACKS 1
+#define IN_CORE_KEEP_PACKS 2
+
 /*
  * Iff a pack file in the given repository contains the object named by sha1,
  * return true and store its location to e.
  */
 int find_pack_entry(struct repository *r, const struct object_id *oid, struct pack_entry *e);
+int find_kept_pack_entry(struct repository *r, const struct object_id *oid, unsigned flags, struct pack_entry *e);
 
 int has_object_pack(const struct object_id *oid);
+int has_object_kept_pack(const struct object_id *oid, unsigned flags);
 
 int has_pack_index(const unsigned char *sha1);
 
diff --git a/pager.c b/pager.c
index 3d37dd7..52f27a6 100644
--- a/pager.c
+++ b/pager.c
@@ -11,6 +11,10 @@
 static struct child_process pager_process = CHILD_PROCESS_INIT;
 static const char *pager_program;
 
+/* Is the value coming back from term_columns() just a guess? */
+static int term_columns_guessed;
+
+
 static void close_pager_fds(void)
 {
 	/* signal EOF to pager */
@@ -114,7 +118,8 @@
 	{
 		char buf[64];
 		xsnprintf(buf, sizeof(buf), "%d", term_columns());
-		setenv("COLUMNS", buf, 0);
+		if (!term_columns_guessed)
+			setenv("COLUMNS", buf, 0);
 	}
 
 	setenv("GIT_PAGER_IN_USE", "true", 1);
@@ -158,15 +163,20 @@
 		return term_columns_at_startup;
 
 	term_columns_at_startup = 80;
+	term_columns_guessed = 1;
 
 	col_string = getenv("COLUMNS");
-	if (col_string && (n_cols = atoi(col_string)) > 0)
+	if (col_string && (n_cols = atoi(col_string)) > 0) {
 		term_columns_at_startup = n_cols;
+		term_columns_guessed = 0;
+	}
 #ifdef TIOCGWINSZ
 	else {
 		struct winsize ws;
-		if (!ioctl(1, TIOCGWINSZ, &ws) && ws.ws_col)
+		if (!ioctl(1, TIOCGWINSZ, &ws) && ws.ws_col) {
 			term_columns_at_startup = ws.ws_col;
+			term_columns_guessed = 0;
+		}
 	}
 #endif
 
diff --git a/parallel-checkout.c b/parallel-checkout.c
new file mode 100644
index 0000000..ddc0ff3
--- /dev/null
+++ b/parallel-checkout.c
@@ -0,0 +1,672 @@
+#include "cache.h"
+#include "config.h"
+#include "entry.h"
+#include "parallel-checkout.h"
+#include "pkt-line.h"
+#include "progress.h"
+#include "run-command.h"
+#include "sigchain.h"
+#include "streaming.h"
+#include "thread-utils.h"
+#include "trace2.h"
+
+struct pc_worker {
+	struct child_process cp;
+	size_t next_item_to_complete, nr_items_to_complete;
+};
+
+struct parallel_checkout {
+	enum pc_status status;
+	struct parallel_checkout_item *items; /* The parallel checkout queue. */
+	size_t nr, alloc;
+	struct progress *progress;
+	unsigned int *progress_cnt;
+};
+
+static struct parallel_checkout parallel_checkout;
+
+enum pc_status parallel_checkout_status(void)
+{
+	return parallel_checkout.status;
+}
+
+static const int DEFAULT_THRESHOLD_FOR_PARALLELISM = 100;
+static const int DEFAULT_NUM_WORKERS = 1;
+
+void get_parallel_checkout_configs(int *num_workers, int *threshold)
+{
+	char *env_workers = getenv("GIT_TEST_CHECKOUT_WORKERS");
+
+	if (env_workers && *env_workers) {
+		if (strtol_i(env_workers, 10, num_workers)) {
+			die("invalid value for GIT_TEST_CHECKOUT_WORKERS: '%s'",
+			    env_workers);
+		}
+		if (*num_workers < 1)
+			*num_workers = online_cpus();
+
+		*threshold = 0;
+		return;
+	}
+
+	if (git_config_get_int("checkout.workers", num_workers))
+		*num_workers = DEFAULT_NUM_WORKERS;
+	else if (*num_workers < 1)
+		*num_workers = online_cpus();
+
+	if (git_config_get_int("checkout.thresholdForParallelism", threshold))
+		*threshold = DEFAULT_THRESHOLD_FOR_PARALLELISM;
+}
+
+void init_parallel_checkout(void)
+{
+	if (parallel_checkout.status != PC_UNINITIALIZED)
+		BUG("parallel checkout already initialized");
+
+	parallel_checkout.status = PC_ACCEPTING_ENTRIES;
+}
+
+static void finish_parallel_checkout(void)
+{
+	if (parallel_checkout.status == PC_UNINITIALIZED)
+		BUG("cannot finish parallel checkout: not initialized yet");
+
+	free(parallel_checkout.items);
+	memset(&parallel_checkout, 0, sizeof(parallel_checkout));
+}
+
+static int is_eligible_for_parallel_checkout(const struct cache_entry *ce,
+					     const struct conv_attrs *ca)
+{
+	enum conv_attrs_classification c;
+	size_t packed_item_size;
+
+	/*
+	 * Symlinks cannot be checked out in parallel as, in case of path
+	 * collision, they could racily replace leading directories of other
+	 * entries being checked out. Submodules are checked out in child
+	 * processes, which have their own parallel checkout queues.
+	 */
+	if (!S_ISREG(ce->ce_mode))
+		return 0;
+
+	packed_item_size = sizeof(struct pc_item_fixed_portion) + ce->ce_namelen +
+		(ca->working_tree_encoding ? strlen(ca->working_tree_encoding) : 0);
+
+	/*
+	 * The amount of data we send to the workers per checkout item is
+	 * typically small (75~300B). So unless we find an insanely huge path
+	 * of 64KB, we should never reach the 65KB limit of one pkt-line. If
+	 * that does happen, we let the sequential code handle the item.
+	 */
+	if (packed_item_size > LARGE_PACKET_DATA_MAX)
+		return 0;
+
+	c = classify_conv_attrs(ca);
+	switch (c) {
+	case CA_CLASS_INCORE:
+		return 1;
+
+	case CA_CLASS_INCORE_FILTER:
+		/*
+		 * It would be safe to allow concurrent instances of
+		 * single-file smudge filters, like rot13, but we should not
+		 * assume that all filters are parallel-process safe. So we
+		 * don't allow this.
+		 */
+		return 0;
+
+	case CA_CLASS_INCORE_PROCESS:
+		/*
+		 * The parallel queue and the delayed queue are not compatible,
+		 * so they must be kept completely separated. And we can't tell
+		 * if a long-running process will delay its response without
+		 * actually asking it to perform the filtering. Therefore, this
+		 * type of filter is not allowed in parallel checkout.
+		 *
+		 * Furthermore, there should only be one instance of the
+		 * long-running process filter as we don't know how it is
+		 * managing its own concurrency. So, spreading the entries that
+		 * requisite such a filter among the parallel workers would
+		 * require a lot more inter-process communication. We would
+		 * probably have to designate a single process to interact with
+		 * the filter and send all the necessary data to it, for each
+		 * entry.
+		 */
+		return 0;
+
+	case CA_CLASS_STREAMABLE:
+		return 1;
+
+	default:
+		BUG("unsupported conv_attrs classification '%d'", c);
+	}
+}
+
+int enqueue_checkout(struct cache_entry *ce, struct conv_attrs *ca)
+{
+	struct parallel_checkout_item *pc_item;
+
+	if (parallel_checkout.status != PC_ACCEPTING_ENTRIES ||
+	    !is_eligible_for_parallel_checkout(ce, ca))
+		return -1;
+
+	ALLOC_GROW(parallel_checkout.items, parallel_checkout.nr + 1,
+		   parallel_checkout.alloc);
+
+	pc_item = &parallel_checkout.items[parallel_checkout.nr];
+	pc_item->ce = ce;
+	memcpy(&pc_item->ca, ca, sizeof(pc_item->ca));
+	pc_item->status = PC_ITEM_PENDING;
+	pc_item->id = parallel_checkout.nr;
+	parallel_checkout.nr++;
+
+	return 0;
+}
+
+size_t pc_queue_size(void)
+{
+	return parallel_checkout.nr;
+}
+
+static void advance_progress_meter(void)
+{
+	if (parallel_checkout.progress) {
+		(*parallel_checkout.progress_cnt)++;
+		display_progress(parallel_checkout.progress,
+				 *parallel_checkout.progress_cnt);
+	}
+}
+
+static int handle_results(struct checkout *state)
+{
+	int ret = 0;
+	size_t i;
+	int have_pending = 0;
+
+	/*
+	 * We first update the successfully written entries with the collected
+	 * stat() data, so that they can be found by mark_colliding_entries(),
+	 * in the next loop, when necessary.
+	 */
+	for (i = 0; i < parallel_checkout.nr; i++) {
+		struct parallel_checkout_item *pc_item = &parallel_checkout.items[i];
+		if (pc_item->status == PC_ITEM_WRITTEN)
+			update_ce_after_write(state, pc_item->ce, &pc_item->st);
+	}
+
+	for (i = 0; i < parallel_checkout.nr; i++) {
+		struct parallel_checkout_item *pc_item = &parallel_checkout.items[i];
+
+		switch(pc_item->status) {
+		case PC_ITEM_WRITTEN:
+			/* Already handled */
+			break;
+		case PC_ITEM_COLLIDED:
+			/*
+			 * The entry could not be checked out due to a path
+			 * collision with another entry. Since there can only
+			 * be one entry of each colliding group on the disk, we
+			 * could skip trying to check out this one and move on.
+			 * However, this would leave the unwritten entries with
+			 * null stat() fields on the index, which could
+			 * potentially slow down subsequent operations that
+			 * require refreshing it: git would not be able to
+			 * trust st_size and would have to go to the filesystem
+			 * to see if the contents match (see ie_modified()).
+			 *
+			 * Instead, let's pay the overhead only once, now, and
+			 * call checkout_entry_ca() again for this file, to
+			 * have its stat() data stored in the index. This also
+			 * has the benefit of adding this entry and its
+			 * colliding pair to the collision report message.
+			 * Additionally, this overwriting behavior is consistent
+			 * with what the sequential checkout does, so it doesn't
+			 * add any extra overhead.
+			 */
+			ret |= checkout_entry_ca(pc_item->ce, &pc_item->ca,
+						 state, NULL, NULL);
+			advance_progress_meter();
+			break;
+		case PC_ITEM_PENDING:
+			have_pending = 1;
+			/* fall through */
+		case PC_ITEM_FAILED:
+			ret = -1;
+			break;
+		default:
+			BUG("unknown checkout item status in parallel checkout");
+		}
+	}
+
+	if (have_pending)
+		error("parallel checkout finished with pending entries");
+
+	return ret;
+}
+
+static int reset_fd(int fd, const char *path)
+{
+	if (lseek(fd, 0, SEEK_SET) != 0)
+		return error_errno("failed to rewind descriptor of '%s'", path);
+	if (ftruncate(fd, 0))
+		return error_errno("failed to truncate file '%s'", path);
+	return 0;
+}
+
+static int write_pc_item_to_fd(struct parallel_checkout_item *pc_item, int fd,
+			       const char *path)
+{
+	int ret;
+	struct stream_filter *filter;
+	struct strbuf buf = STRBUF_INIT;
+	char *blob;
+	unsigned long size;
+	ssize_t wrote;
+
+	/* Sanity check */
+	assert(is_eligible_for_parallel_checkout(pc_item->ce, &pc_item->ca));
+
+	filter = get_stream_filter_ca(&pc_item->ca, &pc_item->ce->oid);
+	if (filter) {
+		if (stream_blob_to_fd(fd, &pc_item->ce->oid, filter, 1)) {
+			/* On error, reset fd to try writing without streaming */
+			if (reset_fd(fd, path))
+				return -1;
+		} else {
+			return 0;
+		}
+	}
+
+	blob = read_blob_entry(pc_item->ce, &size);
+	if (!blob)
+		return error("cannot read object %s '%s'",
+			     oid_to_hex(&pc_item->ce->oid), pc_item->ce->name);
+
+	/*
+	 * checkout metadata is used to give context for external process
+	 * filters. Files requiring such filters are not eligible for parallel
+	 * checkout, so pass NULL. Note: if that changes, the metadata must also
+	 * be passed from the main process to the workers.
+	 */
+	ret = convert_to_working_tree_ca(&pc_item->ca, pc_item->ce->name,
+					 blob, size, &buf, NULL);
+
+	if (ret) {
+		size_t newsize;
+		free(blob);
+		blob = strbuf_detach(&buf, &newsize);
+		size = newsize;
+	}
+
+	wrote = write_in_full(fd, blob, size);
+	free(blob);
+	if (wrote < 0)
+		return error("unable to write file '%s'", path);
+
+	return 0;
+}
+
+static int close_and_clear(int *fd)
+{
+	int ret = 0;
+
+	if (*fd >= 0) {
+		ret = close(*fd);
+		*fd = -1;
+	}
+
+	return ret;
+}
+
+void write_pc_item(struct parallel_checkout_item *pc_item,
+		   struct checkout *state)
+{
+	unsigned int mode = (pc_item->ce->ce_mode & 0100) ? 0777 : 0666;
+	int fd = -1, fstat_done = 0;
+	struct strbuf path = STRBUF_INIT;
+	const char *dir_sep;
+
+	strbuf_add(&path, state->base_dir, state->base_dir_len);
+	strbuf_add(&path, pc_item->ce->name, pc_item->ce->ce_namelen);
+
+	dir_sep = find_last_dir_sep(path.buf);
+
+	/*
+	 * The leading dirs should have been already created by now. But, in
+	 * case of path collisions, one of the dirs could have been replaced by
+	 * a symlink (checked out after we enqueued this entry for parallel
+	 * checkout). Thus, we must check the leading dirs again.
+	 */
+	if (dir_sep && !has_dirs_only_path(path.buf, dir_sep - path.buf,
+					   state->base_dir_len)) {
+		pc_item->status = PC_ITEM_COLLIDED;
+		trace2_data_string("pcheckout", NULL, "collision/dirname", path.buf);
+		goto out;
+	}
+
+	fd = open(path.buf, O_WRONLY | O_CREAT | O_EXCL, mode);
+
+	if (fd < 0) {
+		if (errno == EEXIST || errno == EISDIR) {
+			/*
+			 * Errors which probably represent a path collision.
+			 * Suppress the error message and mark the item to be
+			 * retried later, sequentially. ENOTDIR and ENOENT are
+			 * also interesting, but the above has_dirs_only_path()
+			 * call should have already caught these cases.
+			 */
+			pc_item->status = PC_ITEM_COLLIDED;
+			trace2_data_string("pcheckout", NULL,
+					   "collision/basename", path.buf);
+		} else {
+			error_errno("failed to open file '%s'", path.buf);
+			pc_item->status = PC_ITEM_FAILED;
+		}
+		goto out;
+	}
+
+	if (write_pc_item_to_fd(pc_item, fd, path.buf)) {
+		/* Error was already reported. */
+		pc_item->status = PC_ITEM_FAILED;
+		close_and_clear(&fd);
+		unlink(path.buf);
+		goto out;
+	}
+
+	fstat_done = fstat_checkout_output(fd, state, &pc_item->st);
+
+	if (close_and_clear(&fd)) {
+		error_errno("unable to close file '%s'", path.buf);
+		pc_item->status = PC_ITEM_FAILED;
+		goto out;
+	}
+
+	if (state->refresh_cache && !fstat_done && lstat(path.buf, &pc_item->st) < 0) {
+		error_errno("unable to stat just-written file '%s'",  path.buf);
+		pc_item->status = PC_ITEM_FAILED;
+		goto out;
+	}
+
+	pc_item->status = PC_ITEM_WRITTEN;
+
+out:
+	strbuf_release(&path);
+}
+
+static void send_one_item(int fd, struct parallel_checkout_item *pc_item)
+{
+	size_t len_data;
+	char *data, *variant;
+	struct pc_item_fixed_portion *fixed_portion;
+	const char *working_tree_encoding = pc_item->ca.working_tree_encoding;
+	size_t name_len = pc_item->ce->ce_namelen;
+	size_t working_tree_encoding_len = working_tree_encoding ?
+					   strlen(working_tree_encoding) : 0;
+
+	/*
+	 * Any changes in the calculation of the message size must also be made
+	 * in is_eligible_for_parallel_checkout().
+	 */
+	len_data = sizeof(struct pc_item_fixed_portion) + name_len +
+		   working_tree_encoding_len;
+
+	data = xmalloc(len_data);
+
+	fixed_portion = (struct pc_item_fixed_portion *)data;
+	fixed_portion->id = pc_item->id;
+	fixed_portion->ce_mode = pc_item->ce->ce_mode;
+	fixed_portion->crlf_action = pc_item->ca.crlf_action;
+	fixed_portion->ident = pc_item->ca.ident;
+	fixed_portion->name_len = name_len;
+	fixed_portion->working_tree_encoding_len = working_tree_encoding_len;
+	/*
+	 * We pad the unused bytes in the hash array because, otherwise,
+	 * Valgrind would complain about passing uninitialized bytes to a
+	 * write() syscall. The warning doesn't represent any real risk here,
+	 * but it could hinder the detection of actual errors.
+	 */
+	oidcpy_with_padding(&fixed_portion->oid, &pc_item->ce->oid);
+
+	variant = data + sizeof(*fixed_portion);
+	if (working_tree_encoding_len) {
+		memcpy(variant, working_tree_encoding, working_tree_encoding_len);
+		variant += working_tree_encoding_len;
+	}
+	memcpy(variant, pc_item->ce->name, name_len);
+
+	packet_write(fd, data, len_data);
+
+	free(data);
+}
+
+static void send_batch(int fd, size_t start, size_t nr)
+{
+	size_t i;
+	sigchain_push(SIGPIPE, SIG_IGN);
+	for (i = 0; i < nr; i++)
+		send_one_item(fd, &parallel_checkout.items[start + i]);
+	packet_flush(fd);
+	sigchain_pop(SIGPIPE);
+}
+
+static struct pc_worker *setup_workers(struct checkout *state, int num_workers)
+{
+	struct pc_worker *workers;
+	int i, workers_with_one_extra_item;
+	size_t base_batch_size, batch_beginning = 0;
+
+	ALLOC_ARRAY(workers, num_workers);
+
+	for (i = 0; i < num_workers; i++) {
+		struct child_process *cp = &workers[i].cp;
+
+		child_process_init(cp);
+		cp->git_cmd = 1;
+		cp->in = -1;
+		cp->out = -1;
+		cp->clean_on_exit = 1;
+		strvec_push(&cp->args, "checkout--worker");
+		if (state->base_dir_len)
+			strvec_pushf(&cp->args, "--prefix=%s", state->base_dir);
+		if (start_command(cp))
+			die("failed to spawn checkout worker");
+	}
+
+	base_batch_size = parallel_checkout.nr / num_workers;
+	workers_with_one_extra_item = parallel_checkout.nr % num_workers;
+
+	for (i = 0; i < num_workers; i++) {
+		struct pc_worker *worker = &workers[i];
+		size_t batch_size = base_batch_size;
+
+		/* distribute the extra work evenly */
+		if (i < workers_with_one_extra_item)
+			batch_size++;
+
+		send_batch(worker->cp.in, batch_beginning, batch_size);
+		worker->next_item_to_complete = batch_beginning;
+		worker->nr_items_to_complete = batch_size;
+
+		batch_beginning += batch_size;
+	}
+
+	return workers;
+}
+
+static void finish_workers(struct pc_worker *workers, int num_workers)
+{
+	int i;
+
+	/*
+	 * Close pipes before calling finish_command() to let the workers
+	 * exit asynchronously and avoid spending extra time on wait().
+	 */
+	for (i = 0; i < num_workers; i++) {
+		struct child_process *cp = &workers[i].cp;
+		if (cp->in >= 0)
+			close(cp->in);
+		if (cp->out >= 0)
+			close(cp->out);
+	}
+
+	for (i = 0; i < num_workers; i++) {
+		int rc = finish_command(&workers[i].cp);
+		if (rc > 128) {
+			/*
+			 * For a normal non-zero exit, the worker should have
+			 * already printed something useful to stderr. But a
+			 * death by signal should be mentioned to the user.
+			 */
+			error("checkout worker %d died of signal %d", i, rc - 128);
+		}
+	}
+
+	free(workers);
+}
+
+static inline void assert_pc_item_result_size(int got, int exp)
+{
+	if (got != exp)
+		BUG("wrong result size from checkout worker (got %dB, exp %dB)",
+		    got, exp);
+}
+
+static void parse_and_save_result(const char *buffer, int len,
+				  struct pc_worker *worker)
+{
+	struct pc_item_result *res;
+	struct parallel_checkout_item *pc_item;
+	struct stat *st = NULL;
+
+	if (len < PC_ITEM_RESULT_BASE_SIZE)
+		BUG("too short result from checkout worker (got %dB, exp >=%dB)",
+		    len, (int)PC_ITEM_RESULT_BASE_SIZE);
+
+	res = (struct pc_item_result *)buffer;
+
+	/*
+	 * Worker should send either the full result struct on success, or
+	 * just the base (i.e. no stat data), otherwise.
+	 */
+	if (res->status == PC_ITEM_WRITTEN) {
+		assert_pc_item_result_size(len, (int)sizeof(struct pc_item_result));
+		st = &res->st;
+	} else {
+		assert_pc_item_result_size(len, (int)PC_ITEM_RESULT_BASE_SIZE);
+	}
+
+	if (!worker->nr_items_to_complete)
+		BUG("received result from supposedly finished checkout worker");
+	if (res->id != worker->next_item_to_complete)
+		BUG("unexpected item id from checkout worker (got %"PRIuMAX", exp %"PRIuMAX")",
+		    (uintmax_t)res->id, (uintmax_t)worker->next_item_to_complete);
+
+	worker->next_item_to_complete++;
+	worker->nr_items_to_complete--;
+
+	pc_item = &parallel_checkout.items[res->id];
+	pc_item->status = res->status;
+	if (st)
+		pc_item->st = *st;
+
+	if (res->status != PC_ITEM_COLLIDED)
+		advance_progress_meter();
+}
+
+static void gather_results_from_workers(struct pc_worker *workers,
+					int num_workers)
+{
+	int i, active_workers = num_workers;
+	struct pollfd *pfds;
+
+	CALLOC_ARRAY(pfds, num_workers);
+	for (i = 0; i < num_workers; i++) {
+		pfds[i].fd = workers[i].cp.out;
+		pfds[i].events = POLLIN;
+	}
+
+	while (active_workers) {
+		int nr = poll(pfds, num_workers, -1);
+
+		if (nr < 0) {
+			if (errno == EINTR)
+				continue;
+			die_errno("failed to poll checkout workers");
+		}
+
+		for (i = 0; i < num_workers && nr > 0; i++) {
+			struct pc_worker *worker = &workers[i];
+			struct pollfd *pfd = &pfds[i];
+
+			if (!pfd->revents)
+				continue;
+
+			if (pfd->revents & POLLIN) {
+				int len = packet_read(pfd->fd, NULL, NULL,
+						      packet_buffer,
+						      sizeof(packet_buffer), 0);
+
+				if (len < 0) {
+					BUG("packet_read() returned negative value");
+				} else if (!len) {
+					pfd->fd = -1;
+					active_workers--;
+				} else {
+					parse_and_save_result(packet_buffer,
+							      len, worker);
+				}
+			} else if (pfd->revents & POLLHUP) {
+				pfd->fd = -1;
+				active_workers--;
+			} else if (pfd->revents & (POLLNVAL | POLLERR)) {
+				die("error polling from checkout worker");
+			}
+
+			nr--;
+		}
+	}
+
+	free(pfds);
+}
+
+static void write_items_sequentially(struct checkout *state)
+{
+	size_t i;
+
+	for (i = 0; i < parallel_checkout.nr; i++) {
+		struct parallel_checkout_item *pc_item = &parallel_checkout.items[i];
+		write_pc_item(pc_item, state);
+		if (pc_item->status != PC_ITEM_COLLIDED)
+			advance_progress_meter();
+	}
+}
+
+int run_parallel_checkout(struct checkout *state, int num_workers, int threshold,
+			  struct progress *progress, unsigned int *progress_cnt)
+{
+	int ret;
+
+	if (parallel_checkout.status != PC_ACCEPTING_ENTRIES)
+		BUG("cannot run parallel checkout: uninitialized or already running");
+
+	parallel_checkout.status = PC_RUNNING;
+	parallel_checkout.progress = progress;
+	parallel_checkout.progress_cnt = progress_cnt;
+
+	if (parallel_checkout.nr < num_workers)
+		num_workers = parallel_checkout.nr;
+
+	if (num_workers <= 1 || parallel_checkout.nr < threshold) {
+		write_items_sequentially(state);
+	} else {
+		struct pc_worker *workers = setup_workers(state, num_workers);
+		gather_results_from_workers(workers, num_workers);
+		finish_workers(workers, num_workers);
+	}
+
+	ret = handle_results(state);
+
+	finish_parallel_checkout();
+	return ret;
+}
diff --git a/parallel-checkout.h b/parallel-checkout.h
new file mode 100644
index 0000000..80f539b
--- /dev/null
+++ b/parallel-checkout.h
@@ -0,0 +1,111 @@
+#ifndef PARALLEL_CHECKOUT_H
+#define PARALLEL_CHECKOUT_H
+
+#include "convert.h"
+
+struct cache_entry;
+struct checkout;
+struct progress;
+
+/****************************************************************
+ * Users of parallel checkout
+ ****************************************************************/
+
+enum pc_status {
+	PC_UNINITIALIZED = 0,
+	PC_ACCEPTING_ENTRIES,
+	PC_RUNNING,
+};
+
+enum pc_status parallel_checkout_status(void);
+void get_parallel_checkout_configs(int *num_workers, int *threshold);
+
+/*
+ * Put parallel checkout into the PC_ACCEPTING_ENTRIES state. Should be used
+ * only when in the PC_UNINITIALIZED state.
+ */
+void init_parallel_checkout(void);
+
+/*
+ * Return -1 if parallel checkout is currently not accepting entries or if the
+ * entry is not eligible for parallel checkout. Otherwise, enqueue the entry
+ * for later write and return 0.
+ */
+int enqueue_checkout(struct cache_entry *ce, struct conv_attrs *ca);
+size_t pc_queue_size(void);
+
+/*
+ * Write all the queued entries, returning 0 on success. If the number of
+ * entries is smaller than the specified threshold, the operation is performed
+ * sequentially.
+ */
+int run_parallel_checkout(struct checkout *state, int num_workers, int threshold,
+			  struct progress *progress, unsigned int *progress_cnt);
+
+/****************************************************************
+ * Interface with checkout--worker
+ ****************************************************************/
+
+enum pc_item_status {
+	PC_ITEM_PENDING = 0,
+	PC_ITEM_WRITTEN,
+	/*
+	 * The entry could not be written because there was another file
+	 * already present in its path or leading directories. Since
+	 * checkout_entry_ca() removes such files from the working tree before
+	 * enqueueing the entry for parallel checkout, it means that there was
+	 * a path collision among the entries being written.
+	 */
+	PC_ITEM_COLLIDED,
+	PC_ITEM_FAILED,
+};
+
+struct parallel_checkout_item {
+	/*
+	 * In main process ce points to a istate->cache[] entry. Thus, it's not
+	 * owned by us. In workers they own the memory, which *must be* released.
+	 */
+	struct cache_entry *ce;
+	struct conv_attrs ca;
+	size_t id; /* position in parallel_checkout.items[] of main process */
+
+	/* Output fields, sent from workers. */
+	enum pc_item_status status;
+	struct stat st;
+};
+
+/*
+ * The fixed-size portion of `struct parallel_checkout_item` that is sent to the
+ * workers. Following this will be 2 strings: ca.working_tree_encoding and
+ * ce.name; These are NOT null terminated, since we have the size in the fixed
+ * portion.
+ *
+ * Note that not all fields of conv_attrs and cache_entry are passed, only the
+ * ones that will be required by the workers to smudge and write the entry.
+ */
+struct pc_item_fixed_portion {
+	size_t id;
+	struct object_id oid;
+	unsigned int ce_mode;
+	enum convert_crlf_action crlf_action;
+	int ident;
+	size_t working_tree_encoding_len;
+	size_t name_len;
+};
+
+/*
+ * The fields of `struct parallel_checkout_item` that are returned by the
+ * workers. Note: `st` must be the last one, as it is omitted on error.
+ */
+struct pc_item_result {
+	size_t id;
+	enum pc_item_status status;
+	struct stat st;
+};
+
+#define PC_ITEM_RESULT_BASE_SIZE offsetof(struct pc_item_result, st)
+
+void write_pc_item(struct parallel_checkout_item *pc_item,
+		   struct checkout *state);
+
+#endif /* PARALLEL_CHECKOUT_H */
diff --git a/parse-options-cb.c b/parse-options-cb.c
index 4542d4d..3c811e1 100644
--- a/parse-options-cb.c
+++ b/parse-options-cb.c
@@ -140,7 +140,7 @@
 	struct object_id *target = opt->value;
 
 	if (unset) {
-		*target = null_oid;
+		oidcpy(target, null_oid());
 		return 0;
 	}
 	if (!arg)
diff --git a/parse-options.c b/parse-options.c
index fbea16e..2abff13 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -585,7 +585,7 @@
 		if (!opts->long_name)
 			continue;
 		if (!show_all &&
-			(opts->flags & (PARSE_OPT_HIDDEN | PARSE_OPT_NOCOMPLETE)))
+			(opts->flags & (PARSE_OPT_HIDDEN | PARSE_OPT_NOCOMPLETE | PARSE_OPT_FROM_ALIAS)))
 			continue;
 
 		switch (opts->type) {
@@ -625,6 +625,8 @@
  *
  * Right now this is only used to preprocess and substitute
  * OPTION_ALIAS.
+ *
+ * The returned options should be freed using free_preprocessed_options.
  */
 static struct option *preprocess_options(struct parse_opt_ctx_t *ctx,
 					 const struct option *options)
@@ -678,6 +680,7 @@
 			newopt[i].short_name = short_name;
 			newopt[i].long_name = long_name;
 			newopt[i].help = strbuf_detach(&help, NULL);
+			newopt[i].flags |= PARSE_OPT_FROM_ALIAS;
 			break;
 		}
 
@@ -693,6 +696,20 @@
 	return newopt;
 }
 
+static void free_preprocessed_options(struct option *options)
+{
+	int i;
+
+	if (!options)
+		return;
+
+	for (i = 0; options[i].type != OPTION_END; i++) {
+		if (options[i].flags & PARSE_OPT_FROM_ALIAS)
+			free((void *)options[i].help);
+	}
+	free(options);
+}
+
 static int usage_with_options_internal(struct parse_opt_ctx_t *,
 				       const char * const *,
 				       const struct option *, int, int);
@@ -870,7 +887,7 @@
 	}
 
 	precompose_argv_prefix(argc, argv, NULL);
-	free(real_options);
+	free_preprocessed_options(real_options);
 	free(ctx.alias_groups);
 	return parse_options_end(&ctx);
 }
diff --git a/parse-options.h b/parse-options.h
index ff6506a..a845a9d 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -28,26 +28,27 @@
 };
 
 enum parse_opt_flags {
-	PARSE_OPT_KEEP_DASHDASH = 1,
-	PARSE_OPT_STOP_AT_NON_OPTION = 2,
-	PARSE_OPT_KEEP_ARGV0 = 4,
-	PARSE_OPT_KEEP_UNKNOWN = 8,
-	PARSE_OPT_NO_INTERNAL_HELP = 16,
-	PARSE_OPT_ONE_SHOT = 32
+	PARSE_OPT_KEEP_DASHDASH = 1 << 0,
+	PARSE_OPT_STOP_AT_NON_OPTION = 1 << 1,
+	PARSE_OPT_KEEP_ARGV0 = 1 << 2,
+	PARSE_OPT_KEEP_UNKNOWN = 1 << 3,
+	PARSE_OPT_NO_INTERNAL_HELP = 1 << 4,
+	PARSE_OPT_ONE_SHOT = 1 << 5,
 };
 
 enum parse_opt_option_flags {
-	PARSE_OPT_OPTARG  = 1,
-	PARSE_OPT_NOARG   = 2,
-	PARSE_OPT_NONEG   = 4,
-	PARSE_OPT_HIDDEN  = 8,
-	PARSE_OPT_LASTARG_DEFAULT = 16,
-	PARSE_OPT_NODASH = 32,
-	PARSE_OPT_LITERAL_ARGHELP = 64,
-	PARSE_OPT_SHELL_EVAL = 256,
-	PARSE_OPT_NOCOMPLETE = 512,
-	PARSE_OPT_COMP_ARG = 1024,
-	PARSE_OPT_CMDMODE = 2048
+	PARSE_OPT_OPTARG  = 1 << 0,
+	PARSE_OPT_NOARG   = 1 << 1,
+	PARSE_OPT_NONEG   = 1 << 2,
+	PARSE_OPT_HIDDEN  = 1 << 3,
+	PARSE_OPT_LASTARG_DEFAULT = 1 << 4,
+	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,
 };
 
 enum parse_opt_result {
diff --git a/patch-ids.c b/patch-ids.c
index 3f404e4..8bf4255 100644
--- a/patch-ids.c
+++ b/patch-ids.c
@@ -124,7 +124,7 @@
 	if (!patch_id_defined(commit))
 		return NULL;
 
-	key = xcalloc(1, sizeof(*key));
+	CALLOC_ARRAY(key, 1);
 	if (init_patch_id_entry(key, commit, ids)) {
 		free(key);
 		return NULL;
diff --git a/path.c b/path.c
index 7b385e5..7bccd83 100644
--- a/path.c
+++ b/path.c
@@ -1493,6 +1493,11 @@
 	return is_ntfs_dot_str(name, "gitattributes", "gi7d29");
 }
 
+int is_ntfs_dotmailmap(const char *name)
+{
+	return is_ntfs_dot_str(name, "mailmap", "maba30");
+}
+
 int looks_like_command_line_option(const char *str)
 {
 	return str && str[0] == '-';
@@ -1534,5 +1539,6 @@
 REPO_GIT_PATH_FUNC(merge_mode, "MERGE_MODE")
 REPO_GIT_PATH_FUNC(merge_head, "MERGE_HEAD")
 REPO_GIT_PATH_FUNC(merge_autostash, "MERGE_AUTOSTASH")
+REPO_GIT_PATH_FUNC(auto_merge, "AUTO_MERGE")
 REPO_GIT_PATH_FUNC(fetch_head, "FETCH_HEAD")
 REPO_GIT_PATH_FUNC(shallow, "shallow")
diff --git a/path.h b/path.h
index e7e77da..251c78d 100644
--- a/path.h
+++ b/path.h
@@ -176,6 +176,7 @@
 	const char *merge_mode;
 	const char *merge_head;
 	const char *merge_autostash;
+	const char *auto_merge;
 	const char *fetch_head;
 	const char *shallow;
 };
@@ -191,6 +192,7 @@
 const char *git_path_merge_mode(struct repository *r);
 const char *git_path_merge_head(struct repository *r);
 const char *git_path_merge_autostash(struct repository *r);
+const char *git_path_auto_merge(struct repository *r);
 const char *git_path_fetch_head(struct repository *r);
 const char *git_path_shallow(struct repository *r);
 
diff --git a/pathspec.c b/pathspec.c
index 7a229d8..08f8d3e 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -20,8 +20,9 @@
  * to use find_pathspecs_matching_against_index() instead.
  */
 void add_pathspec_matches_against_index(const struct pathspec *pathspec,
-					const struct index_state *istate,
-					char *seen)
+					struct index_state *istate,
+					char *seen,
+					enum ps_skip_worktree_action sw_action)
 {
 	int num_unmatched = 0, i;
 
@@ -36,8 +37,12 @@
 			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))
+			continue;
 		ce_path_match(istate, ce, pathspec, seen);
 	}
 }
@@ -51,10 +56,26 @@
  * given pathspecs achieves against all items in the index.
  */
 char *find_pathspecs_matching_against_index(const struct pathspec *pathspec,
-					    const struct index_state *istate)
+					    struct index_state *istate,
+					    enum ps_skip_worktree_action sw_action)
 {
 	char *seen = xcalloc(pathspec->nr, 1);
-	add_pathspec_matches_against_index(pathspec, istate, seen);
+	add_pathspec_matches_against_index(pathspec, istate, seen, sw_action);
+	return seen;
+}
+
+char *find_pathspecs_matching_skip_worktree(const struct pathspec *pathspec)
+{
+	struct index_state *istate = the_repository->index;
+	char *seen = xcalloc(pathspec->nr, 1);
+	int i;
+
+	for (i = 0; i < istate->cache_nr; i++) {
+		struct cache_entry *ce = istate->cache[i];
+		if (ce_skip_worktree(ce))
+		    ce_path_match(istate, ce, pathspec, seen);
+	}
+
 	return seen;
 }
 
@@ -154,7 +175,7 @@
 	string_list_remove_empty_items(&list, 0);
 
 	item->attr_check = attr_check_alloc();
-	item->attr_match = xcalloc(list.nr, sizeof(struct attr_match));
+	CALLOC_ARRAY(item->attr_match, list.nr);
 
 	for_each_string_list_item(si, &list) {
 		size_t attr_len;
@@ -561,7 +582,7 @@
 		if (!(flags & PATHSPEC_PREFER_CWD))
 			BUG("PATHSPEC_PREFER_CWD requires arguments");
 
-		pathspec->items = item = xcalloc(1, sizeof(*item));
+		pathspec->items = CALLOC_ARRAY(item, 1);
 		item->match = xstrdup(prefix);
 		item->original = xstrdup(prefix);
 		item->nowildcard_len = item->len = strlen(prefix);
@@ -702,7 +723,7 @@
 	pathspec->nr = 0;
 }
 
-int match_pathspec_attrs(const struct index_state *istate,
+int match_pathspec_attrs(struct index_state *istate,
 			 const char *name, int namelen,
 			 const struct pathspec_item *item)
 {
diff --git a/pathspec.h b/pathspec.h
index 454ce36..2341dc9 100644
--- a/pathspec.h
+++ b/pathspec.h
@@ -108,7 +108,7 @@
  *
  * A similar process is applied when a new pathspec magic is added. The designer
  * lifts the GUARD_PATHSPEC restriction in the functions that support the new
- * magic. At the same time (s)he has to make sure this new feature will be
+ * magic while at the same time making sure this new feature will be
  * caught at parse_pathspec() in commands that cannot handle the new magic in
  * some cases. grepping parse_pathspec() should help.
  */
@@ -149,12 +149,26 @@
 		return strcmp(s1, s2);
 }
 
+enum ps_skip_worktree_action {
+  PS_HEED_SKIP_WORKTREE = 0,
+  PS_IGNORE_SKIP_WORKTREE = 1
+};
 void add_pathspec_matches_against_index(const struct pathspec *pathspec,
-					const struct index_state *istate,
-					char *seen);
+					struct index_state *istate,
+					char *seen,
+					enum ps_skip_worktree_action sw_action);
 char *find_pathspecs_matching_against_index(const struct pathspec *pathspec,
-					    const struct index_state *istate);
-int match_pathspec_attrs(const struct index_state *istate,
+					    struct index_state *istate,
+					    enum ps_skip_worktree_action sw_action);
+char *find_pathspecs_matching_skip_worktree(const struct pathspec *pathspec);
+static inline int matches_skip_worktree(const struct pathspec *pathspec,
+					int item, char **seen_ptr)
+{
+	if (!*seen_ptr)
+		*seen_ptr = find_pathspecs_matching_skip_worktree(pathspec);
+	return (*seen_ptr)[item];
+}
+int match_pathspec_attrs(struct index_state *istate,
 			 const char *name, int namelen,
 			 const struct pathspec_item *item);
 
diff --git a/perl/Git.pm b/perl/Git.pm
index 02eacef..090a7df 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -11,9 +11,6 @@
 use strict;
 use warnings $ENV{GIT_PERL_FATAL_WARNINGS} ? qw(FATAL all) : ();
 
-use File::Temp ();
-use File::Spec ();
-
 BEGIN {
 
 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK);
@@ -103,12 +100,9 @@
 =cut
 
 
-use Carp qw(carp croak); # but croak is bad - throw instead
+sub carp { require Carp; goto &Carp::carp }
+sub croak { require Carp; goto &Carp::croak }
 use Git::LoadCPAN::Error qw(:try);
-use Cwd qw(abs_path cwd);
-use IPC::Open2 qw(open2);
-use Fcntl qw(SEEK_SET SEEK_CUR);
-use Time::Local qw(timegm);
 }
 
 
@@ -191,13 +185,15 @@
 			$dir = undef;
 		};
 
+		require Cwd;
 		if ($dir) {
+			require File::Spec;
 			File::Spec->file_name_is_absolute($dir) or $dir = $opts{Directory} . '/' . $dir;
-			$opts{Repository} = abs_path($dir);
+			$opts{Repository} = Cwd::abs_path($dir);
 
 			# If --git-dir went ok, this shouldn't die either.
 			my $prefix = $search->command_oneline('rev-parse', '--show-prefix');
-			$dir = abs_path($opts{Directory}) . '/';
+			$dir = Cwd::abs_path($opts{Directory}) . '/';
 			if ($prefix) {
 				if (substr($dir, -length($prefix)) ne $prefix) {
 					throw Error::Simple("rev-parse confused me - $dir does not have trailing $prefix");
@@ -223,7 +219,7 @@
 				throw Error::Simple("fatal: Not a git repository: $dir");
 			}
 
-			$opts{Repository} = abs_path($dir);
+			$opts{Repository} = Cwd::abs_path($dir);
 		}
 
 		delete $opts{Directory};
@@ -408,10 +404,12 @@
 	my $cwd_save = undef;
 	if ($self) {
 		shift;
-		$cwd_save = cwd();
+		require Cwd;
+		$cwd_save = Cwd::getcwd();
 		_setup_git_cmd_env($self);
 	}
-	$pid = open2($in, $out, 'git', @_);
+	require IPC::Open2;
+	$pid = IPC::Open2::open2($in, $out, 'git', @_);
 	chdir($cwd_save) if $cwd_save;
 	return ($pid, $in, $out, join(' ', @_));
 }
@@ -538,7 +536,8 @@
 	my $t = shift || time;
 	my @t = localtime($t);
 	$t[5] += 1900;
-	my $gm = timegm(@t);
+	require Time::Local;
+	my $gm = Time::Local::timegm(@t);
 	my $sign = qw( + + - )[ $gm <=> $t ];
 	return sprintf("%s%02d%02d", $sign, (gmtime(abs($t - $gm)))[2,1]);
 }
@@ -1340,6 +1339,7 @@
 		my $n = $name;
 		$n =~ s/\W/_/g; # no strange chars
 
+		require File::Temp;
 		($$temp_fd, $fname) = File::Temp::tempfile(
 			"Git_${n}_XXXXXX", UNLINK => 1, DIR => $tmpdir,
 			) or throw Error::Simple("couldn't open new temp file");
@@ -1362,9 +1362,9 @@
 
 	truncate $temp_fd, 0
 		or throw Error::Simple("couldn't truncate file");
-	sysseek($temp_fd, 0, SEEK_SET) and seek($temp_fd, 0, SEEK_SET)
+	sysseek($temp_fd, 0, Fcntl::SEEK_SET()) and seek($temp_fd, 0, Fcntl::SEEK_SET())
 		or throw Error::Simple("couldn't seek to beginning of file");
-	sysseek($temp_fd, 0, SEEK_CUR) == 0 and tell($temp_fd) == 0
+	sysseek($temp_fd, 0, Fcntl::SEEK_CUR()) == 0 and tell($temp_fd) == 0
 		or throw Error::Simple("expected file position to be reset");
 }
 
diff --git a/perl/Git/I18N.pm b/perl/Git/I18N.pm
index 2037f38..895e759 100644
--- a/perl/Git/I18N.pm
+++ b/perl/Git/I18N.pm
@@ -16,9 +16,19 @@
 our @EXPORT = qw(__ __n N__);
 our @EXPORT_OK = @EXPORT;
 
+# See Git::LoadCPAN's NO_PERL_CPAN_FALLBACKS_STR for a description of
+# this "'@@' [...] '@@'" pattern.
+use constant NO_GETTEXT_STR => '@@' . 'NO_GETTEXT' . '@@';
+use constant NO_GETTEXT => (
+	q[@@NO_GETTEXT@@] ne ''
+	and
+	q[@@NO_GETTEXT@@] ne NO_GETTEXT_STR
+);
+
 sub __bootstrap_locale_messages {
 	our $TEXTDOMAIN = 'git';
 	our $TEXTDOMAINDIR ||= $ENV{GIT_TEXTDOMAINDIR} || '@@LOCALEDIR@@';
+	die "NO_GETTEXT=" . NO_GETTEXT_STR if NO_GETTEXT;
 
 	require POSIX;
 	POSIX->import(qw(setlocale));
diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm
index f6f1dc0..35ff5a6 100644
--- a/perl/Git/SVN.pm
+++ b/perl/Git/SVN.pm
@@ -1636,7 +1636,7 @@
 	my $commit = shift;
 
 	my @revs = split / /, command_oneline(
-		qw(rev-list --parents -1 -m), $commit);
+		qw(rev-list --parents -1), $commit);
 
 	# Commits with no parents, e.g. the start of a partial branch,
 	# have changes by definition.
diff --git a/pkt-line.c b/pkt-line.c
index d633005..9f63eae 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -103,7 +103,7 @@
 {
 	packet_trace("0002", 4, 1);
 	if (write_in_full(fd, "0002", 4) < 0)
-		die_errno(_("unable to write stateless separator packet"));
+		die_errno(_("unable to write response end packet"));
 }
 
 int packet_flush_gently(int fd)
@@ -194,27 +194,53 @@
 	return status;
 }
 
-static int packet_write_gently(const int fd_out, const char *buf, size_t size)
+static int do_packet_write(const int fd_out, const char *buf, size_t size,
+			   struct strbuf *err)
 {
-	static char packet_write_buffer[LARGE_PACKET_MAX];
+	char header[4];
 	size_t packet_size;
 
-	if (size > sizeof(packet_write_buffer) - 4)
-		return error(_("packet write failed - data exceeds max packet size"));
+	if (size > LARGE_PACKET_DATA_MAX) {
+		strbuf_addstr(err, _("packet write failed - data exceeds max packet size"));
+		return -1;
+	}
 
 	packet_trace(buf, size, 1);
 	packet_size = size + 4;
-	set_packet_header(packet_write_buffer, packet_size);
-	memcpy(packet_write_buffer + 4, buf, size);
-	if (write_in_full(fd_out, packet_write_buffer, packet_size) < 0)
-		return error(_("packet write failed"));
+
+	set_packet_header(header, packet_size);
+
+	/*
+	 * Write the header and the buffer in 2 parts so that we do
+	 * not need to allocate a buffer or rely on a static buffer.
+	 * This also avoids putting a large buffer on the stack which
+	 * might have multi-threading issues.
+	 */
+
+	if (write_in_full(fd_out, header, 4) < 0 ||
+	    write_in_full(fd_out, buf, size) < 0) {
+		strbuf_addf(err, _("packet write failed: %s"), strerror(errno));
+		return -1;
+	}
+	return 0;
+}
+
+static int packet_write_gently(const int fd_out, const char *buf, size_t size)
+{
+	struct strbuf err = STRBUF_INIT;
+	if (do_packet_write(fd_out, buf, size, &err)) {
+		error("%s", err.buf);
+		strbuf_release(&err);
+		return -1;
+	}
 	return 0;
 }
 
 void packet_write(int fd_out, const char *buf, size_t size)
 {
-	if (packet_write_gently(fd_out, buf, size))
-		die_errno(_("packet write failed"));
+	struct strbuf err = STRBUF_INIT;
+	if (do_packet_write(fd_out, buf, size, &err))
+		die("%s", err.buf);
 }
 
 void packet_buf_write(struct strbuf *buf, const char *fmt, ...)
@@ -242,26 +268,27 @@
 	packet_trace(data, len, 1);
 }
 
-int write_packetized_from_fd(int fd_in, int fd_out)
+int write_packetized_from_fd_no_flush(int fd_in, int fd_out)
 {
-	static char buf[LARGE_PACKET_DATA_MAX];
+	char *buf = xmalloc(LARGE_PACKET_DATA_MAX);
 	int err = 0;
 	ssize_t bytes_to_write;
 
 	while (!err) {
-		bytes_to_write = xread(fd_in, buf, sizeof(buf));
-		if (bytes_to_write < 0)
+		bytes_to_write = xread(fd_in, buf, LARGE_PACKET_DATA_MAX);
+		if (bytes_to_write < 0) {
+			free(buf);
 			return COPY_READ_ERROR;
+		}
 		if (bytes_to_write == 0)
 			break;
 		err = packet_write_gently(fd_out, buf, bytes_to_write);
 	}
-	if (!err)
-		err = packet_flush_gently(fd_out);
+	free(buf);
 	return err;
 }
 
-int write_packetized_from_buf(const char *src_in, size_t len, int fd_out)
+int write_packetized_from_buf_no_flush(const char *src_in, size_t len, int fd_out)
 {
 	int err = 0;
 	size_t bytes_written = 0;
@@ -277,8 +304,6 @@
 		err = packet_write_gently(fd_out, src_in + bytes_written, bytes_to_write);
 		bytes_written += bytes_to_write;
 	}
-	if (!err)
-		err = packet_flush_gently(fd_out);
 	return err;
 }
 
@@ -298,8 +323,11 @@
 		*src_size -= ret;
 	} else {
 		ret = read_in_full(fd, dst, size);
-		if (ret < 0)
+		if (ret < 0) {
+			if (options & PACKET_READ_GENTLE_ON_READ_ERROR)
+				return error_errno(_("read error"));
 			die_errno(_("read error"));
+		}
 	}
 
 	/* And complain if we didn't get enough bytes to satisfy the read. */
@@ -307,6 +335,8 @@
 		if (options & PACKET_READ_GENTLE_ON_EOF)
 			return -1;
 
+		if (options & PACKET_READ_GENTLE_ON_READ_ERROR)
+			return error(_("the remote end hung up unexpectedly"));
 		die(_("the remote end hung up unexpectedly"));
 	}
 
@@ -335,6 +365,9 @@
 	len = packet_length(linelen);
 
 	if (len < 0) {
+		if (options & PACKET_READ_GENTLE_ON_READ_ERROR)
+			return error(_("protocol error: bad line length "
+				       "character: %.4s"), linelen);
 		die(_("protocol error: bad line length character: %.4s"), linelen);
 	} else if (!len) {
 		packet_trace("0000", 4, 0);
@@ -349,12 +382,19 @@
 		*pktlen = 0;
 		return PACKET_READ_RESPONSE_END;
 	} else if (len < 4) {
+		if (options & PACKET_READ_GENTLE_ON_READ_ERROR)
+			return error(_("protocol error: bad line length %d"),
+				     len);
 		die(_("protocol error: bad line length %d"), len);
 	}
 
 	len -= 4;
-	if ((unsigned)len >= size)
+	if ((unsigned)len >= size) {
+		if (options & PACKET_READ_GENTLE_ON_READ_ERROR)
+			return error(_("protocol error: bad line length %d"),
+				     len);
 		die(_("protocol error: bad line length %d"), len);
+	}
 
 	if (get_packet_data(fd, src_buffer, src_len, buffer, len, options) < 0) {
 		*pktlen = -1;
@@ -421,7 +461,7 @@
 	return packet_read_line_generic(-1, src, src_len, dst_len);
 }
 
-ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out)
+ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options)
 {
 	int packet_len;
 
@@ -437,7 +477,7 @@
 			 * that there is already room for the extra byte.
 			 */
 			sb_out->buf + sb_out->len, LARGE_PACKET_DATA_MAX+1,
-			PACKET_READ_GENTLE_ON_EOF);
+			options);
 		if (packet_len <= 0)
 			break;
 		sb_out->len += packet_len;
diff --git a/pkt-line.h b/pkt-line.h
index 8c90daa..5af5f45 100644
--- a/pkt-line.h
+++ b/pkt-line.h
@@ -32,8 +32,8 @@
 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(int fd_in, int fd_out);
-int write_packetized_from_buf(const char *src_in, size_t len, int fd_out);
+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);
 
 /*
  * Read a packetized line into the buffer, which must be at least size bytes
@@ -68,10 +68,15 @@
  *
  * If options contains PACKET_READ_DIE_ON_ERR_PACKET, it dies when it sees an
  * ERR packet.
+ *
+ * If options contains PACKET_READ_GENTLE_ON_READ_ERROR, we will not die
+ * on read errors, but instead return -1.  However, we may still die on an
+ * ERR packet (if requested).
  */
-#define PACKET_READ_GENTLE_ON_EOF     (1u<<0)
-#define PACKET_READ_CHOMP_NEWLINE     (1u<<1)
-#define PACKET_READ_DIE_ON_ERR_PACKET (1u<<2)
+#define PACKET_READ_GENTLE_ON_EOF        (1u<<0)
+#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);
 
@@ -131,7 +136,7 @@
 /*
  * 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);
+ssize_t read_packetized_to_strbuf(int fd_in, struct strbuf *sb_out, int options);
 
 /*
  * Receive multiplexed output stream over git native protocol.
diff --git a/po/README b/po/README.md
similarity index 72%
rename from po/README
rename to po/README.md
index efd5baa..2fd92cc 100644
--- a/po/README
+++ b/po/README.md
@@ -40,6 +40,30 @@
 person per language.
 
 
+Core translation
+----------------
+The core translation is the smallest set of work that must be completed
+for a new language translation. Because there are more than 5000 messages
+in the template message file "po/git.pot" that need to be translated,
+this is not a piece of cake for the contributor for a new language.
+
+The core template message file which contains a small set of messages
+will be generated in "po-core/core.pot" automatically by running a helper
+program named "git-po-helper" (described later).
+
+    git-po-helper init --core XX.po
+
+After translating the generated "po-core/XX.po", you can merge it to
+"po/XX.po" using the following commands:
+
+    msgcat po-core/XX.po po/XX.po -s -o /tmp/XX.po
+    mv /tmp/XX.po po/XX.po
+    git-po-helper update XX.po
+
+Edit "po/XX.po" by hand to fix "fuzzy" messages, which may have misplaced
+translated messages and duplicate messages.
+
+
 Translation Process Flow
 ------------------------
 The overall data-flow looks like this:
@@ -135,6 +159,18 @@
 Once you are done testing the translation (see below), commit the result
 and ask the l10n coordinator to pull from you.
 
+Fuzzy translation
+-----------------
+
+Fuzzy translation is a translation marked by comment "fuzzy" to let you
+know that the translation is out of date because the "msgid" has been
+changed. A fuzzy translation will be ignored when compiling using "msgfmt".
+Fuzzy translation can be marked by hands, but for most cases they are
+marked automatically when running "msgmerge" to update your "XX.po" file.
+
+After fixing the corresponding translation, you must remove the "fuzzy"
+tag in the comment.
+
 
 Testing your changes
 --------------------
@@ -286,3 +322,80 @@
 
 Git's tests are run under LANG=C LC_ALL=C. So the tests do not need be
 changed to account for translations as they're added.
+
+
+PO helper
+---------
+
+To make the maintenance of XX.po easier, the l10n coordinator and l10n
+team leaders can use a helper program named "git-po-helper". It is a
+wrapper to gettext suite, specifically written for the purpose of Git
+l10n workflow.
+
+To build and install the helper program from source, see
+[git-po-helper/README][].
+
+Usage for git-po-helper:
+
+  - To start a new language translation:
+
+        git-po-helper init XX.po
+
+  - To update your XX.po file:
+
+        git-po-helper update XX.po
+
+  - To check commit log and syntax of XX.po:
+
+        git-po-helper check-po XX.po
+        git-po-helper check-commits
+
+Run "git-po-helper" without arguments to show usage.
+
+
+Conventions
+-----------
+
+There are some conventions that l10n contributors must follow:
+
+1. The subject of each l10n commit should be prefixed with "l10n: ".
+2. Do not use non-ASCII characters in the subject of a commit.
+3. The length of commit subject (first line of the commit log) should
+   be less than 50 characters, and the length of other lines of the
+   commit log should be no more than 72 characters.
+4. Add "Signed-off-by" trailer to your commit log, like other commits
+   in Git. You can automatically add the trailer by committing with
+   the following command:
+
+        git commit -s
+
+5. Check syntax with "msgfmt" or the following command before creating
+   your commit:
+
+        git-po-helper check-po <XX.po>
+
+6. Squash trivial commits to make history clear.
+7. DO NOT edit files outside "po/" directory.
+8. Other subsystems ("git-gui", "gitk", and Git itself) have their
+   own workflow. See [Documentation/SubmittingPatches][] for
+   instructions on how to contribute patches to these subsystems.
+
+To contribute for a new l10n language, contributor should follow
+additional conventions:
+
+1. Initialize proper filename of the "XX.po" file conforming to
+   iso-639 and iso-3166.
+2. Must complete a minimal translation based on the "po-core/core.pot"
+   template. Using the following command to initialize the minimal
+   "po-core/XX.po" file:
+
+        git-po-helper init --core <your-language>
+
+3. Add a new entry in the "po/TEAMS" file with proper format, and check
+   the syntax of "po/TEAMS" by runnning the following command:
+
+        git-po-helper team --check
+
+
+[git-po-helper/README]: https://github.com/git-l10n/git-po-helper#readme
+[Documentation/SubmittingPatches]: Documentation/SubmittingPatches
diff --git a/po/TEAMS b/po/TEAMS
index 677cece..bf52d3a 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -29,6 +29,10 @@
 Leader:		Jean-Noël Avila <jn.avila@free.fr>
 Members:	Sébastien Helleu <flashcode@flashtux.org>
 
+Language:	id (Indonesian)
+Repository:	https://github.com/bagasme/git-po
+Leader:		Bagas Sanjaya <bagasdotme@gmail.com>
+
 Language:	is (Icelandic)
 Leader:		Ævar Arnfjörð Bjarmason <avarab@gmail.com>
 
@@ -76,6 +80,6 @@
 		Fangyi Zhou <me AT fangyi.io>
 
 Language:	zh_TW (Traditional Chinese)
-Respository:	https://github.com/l10n-tw/git-po
-Leader: 	Yi-Jyun Pan <pan93412 AT gmail.com>
+Repository:	https://github.com/l10n-tw/git-po
+Leader:		Yi-Jyun Pan <pan93412 AT gmail.com>
 Members:	Franklin Weng <franklin AT goodhorse.idv.tw>
diff --git a/po/bg.po b/po/bg.po
index d73e84c..212f7ac 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,7 +1,7 @@
 # Bulgarian translation of git po-file.
-# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020 Alexander Shopov <ash@kambanaria.org>.
+# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Alexander Shopov <ash@kambanaria.org>.
 # This file is distributed under the same license as the git package.
-# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
 #
 # ========================
 # DICTIONARY TO MERGE IN GIT GUI
@@ -32,12 +32,14 @@
 # working directory/tree — винаги работно дърво, git следи цялото дърво, а не директории, работна директория за cwd
 # switch to branch преминавам към клон
 # sparse entry/blob частично изтеглена директория/път/обект-BLOB
+# sparse index частичен индекс
 # revision range диапазон на версиите
 # cover letter придружаващо писмо
 # reference repository еталонно хранилище
 # graft присадка
 # grafted repository хранилище с присаждане
 # replace refs заместващи указатели
+# replace objects заместващи обекти
 # embedded repository вградено/вътрешно хранилище (добавянето му е грешка)
 # thin pack съкратен пакет
 # pack file пакетен файл
@@ -149,6 +151,14 @@
 # identity самоличност, информация за
 # boundary commit гранично подаване
 # integrate (changes) внасяне (на промени)
+# overflow data данни за отместването
+# reverse index обратен индекс (а не обърнат, за да не се бърка с reverse key index)
+# preferred предпочитан
+# expired остарял
+# reroll-count номер на редакция
+# Nth re-roll N-та поредна редакция
+# fetch доставам
+# prefetch предварително доставяне
 # ------------------------
 # „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
 # ------------------------
@@ -165,10 +175,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.30\n"
+"Project-Id-Version: git 2.31\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-22 17:48+0100\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-28 17:44+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
 "Language: bg\n"
@@ -182,9 +192,9 @@
 msgid "Huh (%s)?"
 msgstr "Неуспешен анализ — „%s“."
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "индексът не може да бъде прочетен"
 
@@ -212,7 +222,7 @@
 msgid "could not stage '%s'"
 msgstr "неуспешно добавяне в индекса на „%s“"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "индексът не може да бъде записан"
 
@@ -228,7 +238,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "БЕЛЕЖКА: „%s“ вече не се следи.\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -368,12 +378,12 @@
 msgid "unstaged"
 msgstr "извън индекса"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "път"
@@ -819,7 +829,7 @@
 
 #: add-patch.c:1289
 msgid "The selected hunks do not apply to the index!"
-msgstr "Избраните парчета не могат да се добавят в индекса!"
+msgstr "Избраните парчета не може да се добавят в индекса!"
 
 #: add-patch.c:1290 git-add--interactive.perl:1346
 msgid "Apply them to the worktree anyway? "
@@ -917,7 +927,7 @@
 msgid "'git apply' failed"
 msgstr "неуспешно изпълнение на „git apply“"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -927,37 +937,37 @@
 "За да изключите това предупреждение, изпълнете:\n"
 "    git config advice.%s false"
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sподсказка: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Отбирането на подавания е блокирано от неслети файлове."
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Подаването е блокирано от неслети файлове."
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Сливането е блокирано от неслети файлове."
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Издърпването е блокирано от неслети файлове."
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Отмяната е блокирана от неслети файлове."
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "Действието „%s“ е блокирано от неслети файлове."
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -965,23 +975,40 @@
 "Редактирайте ги в работното дърво, и тогава ползвайте „git add/rm ФАЙЛ“,\n"
 "за да отбележите коригирането им.  След това извършете подаването."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Изход от програмата заради некоригиран конфликт."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Промените трябва да се подадат преди сливане."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Изход от програмата заради незавършено сливане."
 
-#: advice.c:290
+#: 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 ""
+"Следните пътища не съвпадат с никой от настроените, но съвпадат с обекти\n"
+"в индекса, които са извън текущото частично изтегляне:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+"Изключете или променете правилата за частичност, ако искате до обновявате "
+"такива обекти."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -1010,7 +1037,7 @@
 "бъдат\n"
 "забравени и никой клон няма да се промени.\n"
 "\n"
-"Ако искате да създадете нов клон, за да запазите подаванията си, можете да\n"
+"Ако искате да създадете нов клон, за да запазите подаванията си, може да\n"
 "направите това като зададете име на клон към опцията „-c“ на командата\n"
 "„switch“.  Например:\n"
 "\n"
@@ -1032,90 +1059,86 @@
 msgid "unclosed quote"
 msgstr "кавичка без еш"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "непозната опция за знаците за интервали „%s“"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "непозната опция за игнориране на знаците за интервали „%s“"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "опциите „--reject“ и „--3way“ са несъвместими"
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "опциите „--cached“ и „--3way“ са несъвместими"
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "като „--3way“, но извън хранилище"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "като „--index“, но извън хранилище"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "като „--cached“, но извън хранилище"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Регулярният израз за времето „%s“ не може за бъде компилиран"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "Регулярният израз върна %d при подадена последователност „%s“ на входа"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "Липсва име на файл на ред %d от кръпката"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %2$d се очакваше „/dev/"
 "null“, а бе получен „%1$s“"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %d бе получено "
 "неправилно име на нов файл"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %d бе получено "
 "неправилно име на стар файл"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr ""
 "git apply: лош изход от командата „git-diff“ — на ред %d се очакваше „/dev/"
 "null“"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "грешен режим на ред №%d: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "несъвместими заглавни части на редове №%d и №%d"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1130,81 +1153,81 @@
 "След съкращаването на първите %d части от компонентите на пътя, в заглавната "
 "част на „git diff“ липсва информация за име на файл (ред: %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "в заглавната част на „git diff“ липсва информация за име на файл (ред: %d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "при повторното преброяване бе получен неочакван ред: „%.*s“"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "част от кръпка без заглавна част на ред %d: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "новият файл зависи от старото съдържание на файла"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "изтритият файл не е празен"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "грешка в кръпката на ред %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "новият файл „%s“ зависи от старото съдържание на файла"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "изтритият файл „%s“ не е празен"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "● предупреждение: файлът „%s“ вече е празен, но не е изтрит"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "грешка в двоичната кръпка на ред %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "неразпозната двоичната кръпка на ред %d"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "кръпката е с изцяло повредени данни на ред %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "символната връзка „%s“ не може да бъде прочетена"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "файлът „%s“ не може да бъде отворен или прочетен"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "неправилно начало на ред: „%c“"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1213,13 +1236,13 @@
 msgstr[1] ""
 "%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 "Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1228,312 +1251,316 @@
 "при търсене за:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "липсват данните за двоичната кръпка за „%s“"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "двоичната кръпка не може да се приложи в обратна посока, когато обратното "
 "парче за „%s“ липсва"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 "необходимият резултат след операцията  — „%s“ за „%s“ не може да бъде "
 "прочетен"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
 "бе получено: „%s“)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "„%s“ не може да се изтегли"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "изчитане на „%s“ след проследяване на символна връзка"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "обектът с път „%s“ е преименуван или изтрит"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "„%s“ не съществува в индекса"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "„%s“ не съответства на индекса"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr ""
-"в хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
-"сливане."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "в хранилището липсват необходимите обекти-BLOB, за тройно сливане."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "Преминаване към тройно сливане…\n"
+msgid "Performing three-way merge...\n"
+msgstr "Тройно сливане…\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "текущото съдържание на „%s“ не може да бъде прочетено"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "Неуспешно преминаване към тройно сливане…\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "Неуспешно тройно сливане…\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Конфликти при прилагането на кръпката към „%s“.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Кръпката бе приложена чисто към „%s“.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Преминаване към пряко прилагане…\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "изтриващата кръпка оставя файла непразен"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "„%s“: неправилен вид"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "неправилен път: „%s“"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "„%s“: вече съществува в индекса"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "„%s“: вече съществува в работното дърво"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)"
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "засегнатият файл „%s“ е след символна връзка"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "Кръпката „%s“ не може да бъде приложена"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Проверяване на кръпката „%s“…"
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 "информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)."
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "„%s“ не може да се добави към временния индекс"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "временният индекс не може да се запази в „%s“"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "„%s“ не може да се извади от индекса"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "повредена кръпка за модула „%s“"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 "не може да се получи информация чрез „stat“ за новосъздадения файл „%s“"
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "не може да се за създаде мястото за съхранение на новосъздадения файл „%s“"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "не може да се добави запис в кеша за „%s“"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "затваряне на файла „%s“"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Кръпката „%s“ бе приложена чисто."
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "вътрешна грешка"
 
-#: apply.c:4557
+#: apply.c:4559
 #, 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:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "„%s“ не може да бъде отворен"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "%d-то парче бе успешно приложено."
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "%d-то парче бе отхвърлено."
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Пропусната кръпка: „%s“"
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "непознат вход"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "индексът не може да бъде записан"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "кръпката „%s“ не може да бъде отворена: %s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
 msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ред добавя грешки в знаците за интервали."
 msgstr[1] "%d реда добавят грешки в знаците за интервали."
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1542,135 +1569,138 @@
 msgstr[1] ""
 "Добавени са %d реда след корекцията на грешките в знаците за интервали."
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "Новият индекс не може да бъде записан"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "без прилагане на промените напасващи на дадения път"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "прилагане на промените напасващи на дадения път"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "БРОЙ"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "игнориране на редовете добавени от тази кръпка"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "извеждане на статистика на промените без прилагане на кръпката"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "извеждане на броя на добавените и изтритите редове"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "прилагане на кръпката без промяна на работното дърво"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "кръпката да бъде приложена.  Опцията се комбинира с „--check“/„--stat“/„--"
 "summary“"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr ""
+"пробване с тройно сливане, ако това не сработи — стандартно прилагане на "
+"кръпка"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "създаване на временен индекс на база на включената информация за индекса"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "разделяне на пътищата с нулевия знак „NUL“"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "действие"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 "игнориране на промените в знаците за интервали при откриване на контекста"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "прилагане на кръпката в обратна посока"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "без изискване на дори и един ред контекст"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "позволяване на застъпващи се парчета"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "повече подробности"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
 
@@ -1737,141 +1767,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote ХРАНИЛИЩЕ [--exec КОМАНДА] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "пътят „%s“ не съвпада с никой файл"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "такъв указател няма: %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "неправилно име на обект: „%s“"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "не е обект-дърво: %s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "текущата работна директория не е следена"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Файлът „%s“ липсва"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "„%s“ не е обикновен файл"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "ФОРМАТ"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "ФОРМАТ на архива"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "ПРЕФИКС"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "ФАЙЛ"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "добавяне на неследените файлове към архива"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "запазване на архива в този ФАЙЛ"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "изчитане на „.gitattributes“ в работната директория"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "извеждане на архивираните файлове на стандартната грешка"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "задаване на нивото на компресиране"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "извеждане на списъка с поддържаните формати"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "хранилище"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "получаване на архива от отдалеченото ХРАНИЛИЩЕ"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "команда"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "път към отдалечената команда „git-upload-archive“"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Неочаквана опция „--remote“"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
-msgstr "Опцията „--exec“ изисква „--remote“"
+msgstr "опцията „--exec“ изисква „--remote“"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Неочаквана опция „--output“"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
-msgstr "Опциите „--add-file“ и „--remote“ са несъвместими"
+msgstr "опциите „--add-file“ и „--remote“ са несъвместими"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Непознат формат на архив: „%s“"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Аргументът не се поддържа за форма̀та „%s“: -%d"
@@ -1881,12 +1911,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "„%.*s“ е неправилно име за атрибут"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s: командата не е позволена: „%s:%d“"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1968,12 +1998,12 @@
 msgid "a %s revision is needed"
 msgstr "необходима е версия „%s“"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "файлът „%s“ не може да бъде създаден"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
@@ -1991,7 +2021,7 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Липсва подходящо за тестване подаване.\n"
 "Проверете параметрите за пътищата.\n"
@@ -2013,41 +2043,41 @@
 msgstr[0] "Двоично търсене: остава %d версия след тази %s\n"
 msgstr[1] "Двоично търсене: остават %d версии след тази %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
-msgstr "Опциите „--contents“ и „--reverse“ са несъвместими"
+msgstr "опциите „--contents“ и „--reverse“ са несъвместими"
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
-msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване"
+msgstr "опцията „--contents“ е несъвместима с име на обект от крайно подаване"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на крайно подаване"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "неуспешно настройване на обхождането на версиите"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
 "указването на диапазон по веригата на първите наследници"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "няма път на име „%s“ в „%s“"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "обектът-BLOB „%s“ в пътя %s не може да бъде прочетен"
@@ -2061,7 +2091,7 @@
 "\"git branch --set-upstream-to=%s%s%s\"."
 msgstr ""
 "\n"
-"След корекция на грешката, можете да обновите\n"
+"След корекция на грешката, може да обновите\n"
 "информацията за следения клон чрез:\n"
 "git branch --set-upstream-to=%s%s%s"
 
@@ -2115,7 +2145,7 @@
 
 #: branch.c:119
 msgid "Unable to write upstream branch configuration"
-msgstr "Настройките за следения клон не могат да бъдат записани"
+msgstr "Настройките за следения клон не може да бъдат записани"
 
 #: branch.c:156
 #, c-format
@@ -2180,12 +2210,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Неправилно място за начало на клон: „%s“"
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "„%s“ вече е изтеглен в „%s“"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "Указателят „HEAD“ на работното дърво „%s“ не е обновен"
@@ -2210,8 +2240,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "непозната заглавна част: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "„%s“ не може да се отвори"
@@ -2254,286 +2284,301 @@
 msgid "pack-objects died"
 msgstr "Командата „git pack-objects“ не завърши успешно"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "Командата „git rev-list“ не завърши успешно"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr ""
 "указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "неподдържана версия на индекса %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "пратка %d не може да се запише с алгоритъм %s"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "непознат аргумент: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Създаването на празна пратка е невъзможно."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
-msgstr "Файлът „%s“ не може да бъде създаден"
+msgstr "файлът „%s“ не може да бъде създаден"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
-msgstr "Командата „git index-pack“ не завърши успешно"
+msgstr "командата „git index-pack“ не завърши успешно"
+
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "идентификаторът за краен откъс се явява по-рано от очакваното"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "неправилно отместване на откъс/и %<PRIx64> и %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "повтарящ се идентификатор на откъс %<PRIx32>"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "ненулев идентификатор за краен откъс %<PRIx32>"
 
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "неправилна стойност за цвят: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "неправилна версия на контролна сума"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
-msgstr "файлът с гра̀фа на подаванията е твърде малък"
+msgstr "файлът за гра̀фа с подаванията е твърде малък"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "отпечатъкът на гра̀фа с подаванията %X не съвпада с %X"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "версията на гра̀фа с подаванията %X не съвпада с %X"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "версията на контролната сума на гра̀фа с подаванията %X не съвпада с %X"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "файлът с гра̀фа на подаванията е твърде малък, за да съдържа %u откъси"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "неправилно отместване на откъс: %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "откъсът %08x се явява многократно"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "базовият откъс липсва в гра̀фа с подаванията"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "веригата на гра̀фа с подаванията не съвпада"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 "грешка във веригата на гра̀фа с подаванията: ред „%s“ не е контролна сума"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
-msgstr "някои файлове на гра̀фа с подаванията не могат да бъдат открити"
+msgstr "някои файлове на гра̀фа с подаванията не може да бъдат открити"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "неправилна позиция на подаването.  Вероятно графът с подаванията е повреден"
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "подаването „%s“ не може да бъде открито"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+"графът с подаванията изисква генериране на данни за отместването, но такива "
+"липсват"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "подаването не може да бъде анализирано: %s"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "видът на обекта „%s“ не може да бъде определен"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "Разширяване на достижимите подавания в гра̀фа"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "Изчисляване на топологичните нива в гра̀фа с подаванията"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Изчисляване на филтрите на Блум на пътищата с промяна при подаването"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Събиране на свързаните подавания"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, 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:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "грешка при добавяне на пакетен файл „%s“"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "грешка при отваряне на индекса на „%s“"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "Откриване на още върхове в гра̀фа с подаванията"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "правилният брой на базовите идентификатори не може да се запише"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
-msgstr "родителските директории на „%s“ не могат да бъдат създадени"
+msgstr "родителските директории на „%s“ не може да бъдат създадени"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "не може да бъде създаден временен слой за гра̀фа с подаванията"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
-msgstr "правата за споделен достъп до „%s“ не могат да бъдат зададени"
+msgstr "правата за споделен достъп до „%s“ не може да бъдат зададени"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, 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:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "файлът с веригата на гра̀фа с подаванията не може да се отвори"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "основният файл на гра̀фа с подаванията не може да бъде преименуван"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "временният файл на гра̀фа с подаванията не може да бъде преименуван"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Търсене на подаванията със сливания"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "Сливане на гра̀фа с подаванията"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "опит за запис на гра̀фа с подаванията, но настройката „core.commitGraph“ е "
 "изключена"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "прекалено много подавания за записване на гра̀фа"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 "неправилна подредба на обектите по идентификатор в гра̀фа с подаванията: „%s“ "
 "е преди „%s“, а не трябва"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "неправилна стойност за откъс в гра̀фа с подаванията: fanout[%d] = %u, а "
 "трябва да е %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "подаване „%s“ в гра̀фа с подаванията не може да се анализира"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "Проверка на подаванията в гра̀фа"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "подаване „%s“ в базата от данни към гра̀фа с подаванията не може да се "
 "анализира"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "идентификаторът на обект за кореновото дърво за подаване „%s“ в гра̀фа с "
 "подаванията е „%s“, а трябва да е „%s“"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено дълъг"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "родителят на „%s“ в гра̀фа с подаванията е „%s“, а трябва да е „%s“"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "списъкът с родители на „%s“ в гра̀фа с подаванията е прекалено къс"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2541,7 +2586,7 @@
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията е 0, а другаде "
 "не е"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2549,22 +2594,22 @@
 "номерът на поколението на подаване „%s“ в гра̀фа с подаванията не е 0, а "
 "другаде е"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
-"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %u, а "
-"другаде е %u"
+"номерът на поколението на подаване „%s“ в гра̀фа с подаванията е %<PRIuMAX> < "
+"%<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "датата на подаване на „%s“ в гра̀фа с подаванията е %<PRIuMAX>, а трябва да е "
 "%<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "„%s“ не може да се анализира"
@@ -2597,29 +2642,29 @@
 "\n"
 "    git config advice.graftFileDeprecated false"
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Подаването „%s“ е без подпис от GPG."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2633,7 +2678,7 @@
 msgid "memory exhausted"
 msgstr "паметта свърши"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2648,162 +2693,206 @@
 "    %s\n"
 "Това може да се дължи на зацикляне при вмъкването."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "пътят за вмъкване „%s“не може да бъде разширен"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "относителните вмъквания на конфигурации трябва да идват от файлове"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "относителните условни изрази за вмъкване трябва да идват от файлове"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "неправилен формат на настройка: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "липсва име на променлива на средата за настройката „%.*s“"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "липсва променлива на средата „%s“ за настройката „%.*s“"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "ключът не съдържа раздел: „%s“"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "ключът не съдържа име на променлива: „%s“"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "неправилен ключ: „%s“"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "неправилен ключ (нов ред): „%s“"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "празен ключ за настройка"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "неправилен конфигурационен параметър: „%s“"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "неправилен формат в „%s“"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "неправилен брой в „%s“"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "прекалено много записи в „%s“"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "ключът за настройка „%s“ липсва"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "стойността за настройка „%s“ липсва"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "неправилен ред за настройки %d в BLOB „%s“"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "неправилен ред за настройки %d във файла „%s“"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "неправилен ред за настройки %d на стандартния вход"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "неправилен ред за настройки %d в BLOB за подмодул „%s“"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "неправилен ред за настройки %d на командния ред „%s“"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "неправилен ред за настройки %d в „%s“"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "извън диапазона"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "неправилна мерна единица"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "неправилна числова стойност „%s“ за „%s“: %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB „%s“: %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ във файла „%s“: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ на стандартния вход: %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB от подмодул „%s“: %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ на командния ред „%s“: %s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "неправилна числова стойност „%s“ за „%s“ в %s: %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "неправилна булева стойност „%s“ за „%s“"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "домашната папка на потребителя не може да бъде открита: „%s“"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "„%s“ не е правилна стойност за време за „%s“"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "дължината на съкращаване е извън интервала ([4; 40]): %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "неправилно ниво на компресиране: %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "настройката „core.commentChar“ трябва да е само един знак"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "неправилен режим за създаването на обекти: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "неправилна стойност за „%s“"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "неправилна стойност за „%s“: „%s“"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "трябва да е една от следните стойности: „nothing“ (без изтласкване при липса "
@@ -2811,132 +2900,132 @@
 "„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
 "от който се издърпва) или „current“ (клонът със същото име)"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "неправилно ниво на компресиране при пакетиране: %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "указателят „%s“ не сочи към обект-BLOB"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "„%s“ не може да бъде анализиран"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "неправилни настройки от командния ред"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Неправилен %s: „%s“"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
 "%d"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "неразпозната стойност „%s“ от командния ред"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "неправилно име на раздел: „%s“"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "зададени са няколко стойности за „%s“"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде заключен"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "отваряне на „%s“"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "неправилен шаблон: %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "неправилен конфигурационен файл: „%s“"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "конфигурационният файл „%s“ не може да бъде записан"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "„%s“ не може да се зададе да е „%s“"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "„%s“ не може да се премахне"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "неправилно име на раздел: %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "липсва стойност за „%s“"
@@ -2999,45 +3088,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "протоколна грешка: неочаквано „%s“"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "сървърът указа непознат формат на обект: „%s“"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "неправилен отговор на „ls-refs“: „%s“"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "след изброяването на указателите се очаква изчистване на буферите"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "след изброяването на указателите се очаква пакет за край"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "протокол „%s“ не се поддържа"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "неуспешно задаване на „SO_KEEPALIVE“ на гнездо"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Търсене на „%s“… "
 
-#: connect.c:735
+#: connect.c:761
 #, 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:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -3046,7 +3135,7 @@
 "готово.\n"
 "Свързване към „%s“ (порт %s)…"
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -3056,65 +3145,71 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "действието завърши."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "„%s“ не може да се открие (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "непознат порт „%s“"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "необичайното име на хост „%s“ е блокирано"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "необичайният порт „%s“ е блокиран"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "посредникът „%s“ не може да се стартира"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "не е указан път. Проверете синтаксиса с командата:\n"
 "\n"
 "    git help pull"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr ""
+"знакът за нов ред не е позволен в адресите и в пътищата до хранилищата "
+"„git://“"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-4“"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-6“"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 "вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "необичайният път „%s“ е блокиран"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "неуспешно създаване на процес"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Проверка на свързаността"
 
@@ -3130,17 +3225,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "неправилно действие за край на ред: %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "Всяка последователност от знаци „CRLF“ ще бъдe заменена с „LF“ в „%s“."
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -3150,13 +3245,13 @@
 "Файлът ще остане с първоначалните знаци за край на ред в работната ви "
 "директория."
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr ""
 "Всеки знак „LF“ ще бъдe заменен с последователността от знаци „CRLF“ в „%s“."
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -3167,14 +3262,14 @@
 "Файлът ще остане с първоначалните знаци за край на ред в работната ви "
 "директория."
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr ""
 "„%s“ не трябва да съдържа маркер за поредността на байтовете (BOM) при "
 "кодиране „%s“"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -3183,14 +3278,14 @@
 "Файлът „%s“ съдържа маркер за поредността на байтовете (BOM).  Използвайте "
 "„UTF-%.*s“ като кодиране за работното дърво."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr ""
 "„%s“ трябва да съдържа маркер за поредността на байтовете (BOM) при кодиране "
 "„%s“"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -3200,50 +3295,50 @@
 "на работното дърво използвайте UTF-%sBE или UTF-%sLE (в зависимост от "
 "поредността на байтовете)."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "неуспешно прекодиране на „%s“ от „%s“ към „%s“"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "Прекодирането на „%s“ от „%s“ към „%s“ и обратно променя файла"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "неуспешно създаване на процес за външен филтър „%s“"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "входът не може да бъде подаден на външния филтър „%s“"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "неуспешно изпълнение на външния филтър „%s“: %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "неуспешно четене от външния филтър „%s“"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "неуспешно изпълнение на външния филтър „%s“"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "неочакван вид филтър"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "пътят е прекалено дълъг за външен филтър"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -3252,17 +3347,17 @@
 "външният филтър „%s“ вече не е наличен, въпреки че не всички пътища са "
 "филтрирани"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr ""
 "„true“/„false“ (истина/лъжа̀) не може да са кодирания на работното дърво"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: неуспешно изпълнение на декодиращ филтър „%s“"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: неуспешно изпълнение на кодиращ филтър „%s“"
@@ -3389,23 +3484,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "Отбелязани са %d групи, работата приключи.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "непозната стойност за опцията „--diff-merges“: „%s“"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "опцията „--merge-base“ не работи с диапазони"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "опцията „--merge-base“ работи само с подавания"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "Указателят „HEAD“ не може да бъде получен"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "липсва база за сливане"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "много бази за сливане"
 
@@ -3477,38 +3577,38 @@
 "Грешки в настройката „diff.dirstat“:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 "външната програма за разлики завърши неуспешно.  Спиране на работата при „%s“"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
-"Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
+"опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
 "една с друга"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
-msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
+msgstr "опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
-msgstr "Опцията „--follow“ изисква точно един път"
+msgstr "опцията „--follow“ изисква точно един път"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "неправилна стойност за „--stat“: %s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "опцията „%s“ очаква число за аргумент"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3517,44 +3617,44 @@
 "Неразпознат параметър към опцията „--dirstat/-X“:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "непознат вид промяна: „%c“ в „--diff-filter=%s“"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "непозната стойност след „ws-error-highlight=%.*s“"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "„%s“ не може да се открие"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 "опцията „%s“ изисква стойности за МИНИМАЛЕН_%%_ПРОМЯНА_ЗА_ИЗТОЧНИК_/"
 "МАКСИМАЛЕН_%%_ПРОМЯНА_ЗА_ЗАМЯНА от"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "опцията „%s“ изисква знак, а не: „%s“"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "неправилен аргумент за „--color-moved“: „%s“"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "неправилен режим „%s“ за „ --color-moved-ws“"
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3563,158 +3663,158 @@
 "Майерс), „minimal“ (минимизиране на разликите), „patience“ (пасианс) и "
 "„histogram“ (хистограмен)"
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "неправилен аргумент към „%s“"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "неправилен регулярен израз подаден към „-I“: „%s“"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "неразпознат параметър към опцията „--submodule“: „%s“"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "неправилен аргумент към „--word-diff“: „%s“"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Формат на изхода за разликите"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "създаване на кръпки"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "без извеждане на разликите"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "БРОЙ"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "файловете с разлики да са с контекст с такъв БРОЙ редове"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "файловете с разлики да са в суров формат"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "псевдоним на „-p --stat“"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "псевдоним на „-p --stat“"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "„--stat“ във формат за четене от програма"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "извеждане само на последния ред на „--stat“"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "ПАРАМЕТЪР_1, ПАРАМЕТЪР_2, …"
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "извеждане на разпределението на промените за всяка поддиректория"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "псевдоним на „--dirstat=cumulative“"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "псевдоним на „--dirstat=ФАЙЛОВЕ,ПАРАМЕТЪР_1,ПАРАМЕТЪР_2,…“"
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "предупреждаване, ако промените водят до маркери за конфликт или грешки в "
 "празните знаци"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "съкратено резюме на създадените, преименуваните и файловете с промяна на "
 "режима на достъп"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "извеждане само на имената на променените файлове"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "извеждане само на имената и статистиката за променените файлове"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "ШИРОЧИНА[,ИМЕ-ШИРОЧИНА[,БРОЙ]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "извеждане на статистика за промените"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "ШИРОЧИНА"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "статистика с такава ШИРОЧИНА за промените"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "статистика за промените с такава ШИРОЧИНА на имената"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "статистика за промените с такава ШИРОЧИНА на гра̀фа"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "БРОЙ"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "ограничаване на БРОя на редовете в статистиката за промените"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "кратко резюме в статистиката за промените"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "извеждане на двоична разлика във вид за прилагане"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "показване на пълните имена на обекти в редовете за индекса при вариантите "
 "преди и след промяната"
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "разлики в цвят"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "ВИД"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3722,7 +3822,7 @@
 "грешките в празните знаци да се указват в редовете за контекста, вариантите "
 "преди и след разликата,"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3730,261 +3830,261 @@
 "без преименуване на пътищата.  Да се използват нулеви байтове за разделители "
 "на полета в изхода при ползване на опцията „--raw“ или „--numstat“"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "ПРЕФИКС"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "префикс вместо „a/“ за източник"
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "префикс вместо „b/“ за цел"
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "добавяне на допълнителен префикс за всеки ред на изхода"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "без префикс за източника и целта"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "извеждане на контекст между последователните парчета с разлики от указания "
 "БРОЙ редове"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "ЗНАК"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "знак вместо „+“ за нов вариант на ред"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "знак вместо „-“ за стар вариант на ред"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "знак вместо „ “ за контекст"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Настройки за разлики с преименуване"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "МИНИМАЛЕН_%_ПРОМЯНА_ЗА_ИЗТОЧНИК[/МАКСИМАЛEН_%_ПРОМЯНА_ЗА_ЗАМЯНА]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "заместване на пълните промени с последователност от изтриване и създаване"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "засичане на преименуванията"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "без предварителен вариант при изтриване"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "засичане на копиранията"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "търсене на копирано и от непроменените файлове"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "без търсене на преименувания"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "празни обекти като източник при преименувания"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 "продължаване на извеждането на историята — без отрязването при преименувания "
 "на файл"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 "без засичане на преименувания/копирания, ако броят им надвишава тази стойност"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Опции към алгоритъма за разлики"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "търсене на възможно най-малка разлика"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "без промени в празните знаци при сравняване на редове"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "без промени в празните знаци"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "без промени в празните знаци в края на редовете"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "без промени в знаците за край на ред"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "без промени в редовете, които са изцяло от празни знаци"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "РЕГУЛЯРЕН_ИЗРАЗ"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "без промени в редовете, които напасват РЕГУЛЯРНия_ИЗРАЗ"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "евристика за преместване на границите на парчетата за улесняване на четенето"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "разлика чрез алгоритъм за подредба като пасианс"
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "разлика по хистограмния алгоритъм"
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "АЛГОРИТЪМ"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "избор на АЛГОРИТЪМа за разлики"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "ТЕКСТ"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "разлика чрез алгоритъма със закотвяне"
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "РЕЖИМ"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "разлика по думи, като се ползва този РЕЖИМ за отделянето на променените думи"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "РЕГУЛЯРЕН_ИЗРАЗ за разделяне по думи"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "псевдоним на „--word-diff=color --word-diff-regex=РЕГУЛЯРЕН_ИЗРАЗ“"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "различен цвят за извеждане на преместените редове"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 "режим за прескачането на празните знаци при задаването на „--color-moved“"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Други опции за разлики"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "при изпълнение от поддиректория да се пренебрегват разликите извън нея и да "
 "се ползват относителни пътища"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "обработка на всички файлове като текстови"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "размяна на двата входа — обръщане на разликата"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 "завършване с код за състояние 1 при наличието на разлики, а в противен "
 "случай — с 0"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "без всякакъв изход от програмата"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "позволяване на изпълнение на външна помощна програма за разлики"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "изпълнение на външни програми-филтри при сравнението на двоични файлове"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "КОГА"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "игнориране на промените в подмодулите при извеждането на разликите"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "ФОРМАТ"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "начин за извеждане на промените в подмодулите"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "без включване в индекса на записите, добавени с „git add -N“"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "включване в индекса на записите, добавени с „git add -N“"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "НИЗ"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "търсене на разлики, които променят броя на поява на указаните низове"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3992,57 +4092,69 @@
 "търсене на разлики, които променят броя на поява на низовете, които напасват "
 "на регулярния израз"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "извеждане на всички промени с „-G“/„-S“"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "НИЗът към „-S“ да се тълкува като разширен регулярен израз по POSIX"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "управление на подредбата на файловете в изхода"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "ПЪТ"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "първо извеждане на промяната в указания път"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "прескачане на изхода към указания път"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "ИДЕНТИФИКАТОР_НА_ОБЕКТ"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "търсене на разлики, които променят броя на поява на указания обект"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "избор на файловете по вид разлика"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "ФАЙЛ"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Изход към указания файл"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "търсенето на преименувания на обекти съчетани с промени се прескача поради "
 "многото файлове."
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "установени са само точните копия на променените пътища поради многото "
 "файлове."
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4053,10 +4165,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Търсене на преименувания на обекти съчетани с промени"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Няма път на име „%s“ в разликата"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -4083,36 +4200,36 @@
 msgid "disabling cone pattern matching"
 msgstr "изключване на пътеводното напасване"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "директорията „%s“ не може да бъде отворена"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "името и версията на ядрото не бяха получени"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "кешът за неследените файлове е изключен на тази система или местоположение"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "файлът с индекса е повреден в хранилището „%s“"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "директориите за „%s“ не може да бъдат създадени"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
@@ -4122,21 +4239,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "Подсказка: чака се редакторът ви да затвори файла …%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Филтриране на съдържанието"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "неправилен път към пространства от имена „%s“"
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "GIT_DIR не може да се зададе да е „%s“"
@@ -4146,263 +4263,275 @@
 msgid "too many args to run %s"
 msgstr "прекалено много аргументи за изпълнение „%s“"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: очаква се плитък списък"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr ""
 "git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "невъзможно писане към отдалечено хранилище"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "опцията „--stateless-rpc“ изисква  „multi_ack_detailed“"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "неправилен плитък ред: „%s“"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "неправилен неплитък ред: „%s“"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "обектът „%s“ липсва"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "грешка в обекта: „%s“"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "не е открит плитък обект: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "очаква се плитък или не обект, а бе получено: „%s“"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "получено бе %s %d %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "неправилно подаване: „%s“"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "преустановяване"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "действието завърши"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "получено бе %s (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Отбелязване на „%s“ като пълно"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "вече има „%s“ (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "протоколна грешка: неправилна заглавна част на пакет"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: не може да се създаде процес за „%s“"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: неправилен изход от командата „index-pack“"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "грешка в демултиплексора"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Версията на сървъра е: %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "Сървърът поддържа „%s“"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "Сървърът не поддържа плитки клиенти"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "Сървърът не поддържа опцията „--shallow-since“"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "Сървърът не поддържа опцията „--deepen“"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "Сървърът не поддържа форма̀та на обектите на това хранилище"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "няма общи подавания"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "клонираното хранилище е плитко, затова няма да се клонира."
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: неуспешно доставяне."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "различни алгоритми — на клиента: „%s“, на сървъра: „%s“"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "сървърът не поддържа алгоритъм „%s“"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "Сървърът не поддържа плитки заявки"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "Сървърът поддържа филтри"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "невъзможно писане към отдалечено хранилище"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "грешка при прочитане на заглавната част на раздел „%s“"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "очаква се „%s“, а бе получено „%s“"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "неочакван ред за потвърждение: „%s“"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "грешка при обработка на потвържденията: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 "очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "очакваше се след липса на отговор за готовност (ready) да не се се пращат "
 "други раздели"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "очаква се искан указател, а бе получено: „%s“"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "неочакван искан указател: „%s“"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "грешка при обработката на исканите указатели: %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: очаква се пакет за край на отговора"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "неочаквано състояние за готовност от отдалечено хранилище"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "такъв отдалечен указател няма: %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Сървърът не позволява заявка за необявен обект „%s“"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "не може да се създаде временен файл"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "Програмата не успя да запише самостоятелния подпис в „%s“"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "Програмата „gpg“ не подписа данните."
 
@@ -4411,7 +4540,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4419,18 +4548,18 @@
 "зададеният шаблон съдържа нулев знак (идва от -f „ФАЙЛ“).  Това се поддържа "
 "в комбинация с „-P“ само при ползването на „PCRE v2“"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
@@ -4500,7 +4629,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "Това са най-често използваните команди на Git:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "неподдържан списък от команди „%s“"
@@ -4661,49 +4790,54 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "името съдържа само непозволени знаци: „%s“"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "неправилен формат на дата: %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "очаква се „tree:ДЪЛБОЧИНА“"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "поддръжката на филтри със „sparse:path“ е премахната"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "„%s“ не е правилна стойност за вид на обект в „object:type=ВИД“"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "неправилен филтър: „%s“"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "знак за екраниране в подфилтър: „%c“"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "добавете нещо след комбинирането:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "не може да комбинирате множество филтри"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 "не може да се извърши частично клониране, защото форматът на хранилището не "
 "може да се обнови"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "няма достъп до частично изтегления обект-BLOB в „%s“"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr ""
@@ -4719,7 +4853,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "обект „%s“ в дървото „%s“ е отбелязан като BLOB, но не е"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "кореновото дърво за подаване „%s“ не може да се зареди"
@@ -4748,11 +4882,280 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "Файлът-ключалка „%s.lock“ не може да бъде създаден: %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "неправилна стойност „%s“ за „lsrefs.unborn“"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "след аргументите към „ls-refs“ се очаква изчистване на буферите"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "цитирани знаци CRLF"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr "неправилно действие „%s“ за „%s“"
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr ""
+"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
+"подаванията)"
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Бележка: Превъртане на подмодула „%s“ към „%s“"
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Неуспешно сливане на подмодула „%s“"
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Неуспешно сливане на подмодула „%s“, но е открито възможно решение:\n"
+"%s\n"
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Ако това е така, добавете го към индекса с команда като следната:\n"
+"\n"
+"    git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"Това приема предложеното.\n"
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Неуспешно сливане на подмодула „%s“, но са открити множество решения:\n"
+"%s"
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr "Неуспешно вътрешно сливане"
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "„%s“ не може да се добави в базата с данни"
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr "Автоматично сливане на „%s“"
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
+"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"КОНФЛИКТ (косвено преименуване на директория): повече от един път "
+"съответства на „%s“.  Косвено преименуване на директория води до поставянето "
+"на тези пътища там: %s."
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"КОНФЛИКТ (раздвояване при преименуване на директория): Не е ясно как и къде "
+"да се преименува „%s“, защото е преместен в няколко нови директории, без "
+"никоя от тях да е по-честа цел."
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
+"„%s“ също е с променено име."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
+"„%s“.  Обектът се мести в „%s“."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
+"преименувана в „%s“.  Обектът се мести в „%s“."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
+"преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
+"която е преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
+
+#: merge-ort.c:2103
+#, 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:2198
+#, 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."
+msgstr ""
+"КОНФЛИКТ (има и преименуване в промените): „%s“ е преименуван на „%s“, но "
+"има и промени в съдържанието, а и има съвпадение на пътя.  Може да се "
+"получат вложени маркери за конфликт."
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
+"е изтрит в „%s“."
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "обектът „%s“ не може да се прочете"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "обектът „%s“ не е BLOB"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"КОНФЛИКТ (файл/директория): директория на мястото на „%s“ от „%s“, вместо "
+"това се извършва преместване в „%s“."
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"КОНФЛИКТ (различни видове): „%s“ е различен вид обект в двата варианта.  И "
+"двата се преименуват, за да може всичко да е отразено."
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"КОНФЛИКТ (различни видове): „%s“ е различен вид обект в двата варианта.  "
+"Извършва се преименуване в единия, за да може всичко да е отразено."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "съдържание"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "добавяне/добавяне"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "ПОДМОДУЛ"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"КОНФЛИКТ (промяна/изтриване): „%s“ е изтрит в %s, а е променен в %s.  Версия "
+"%s на „%s“ е оставена в дървото."
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+"Бележка: „%s“ не е актуален и пречи за преминаването към версията с "
+"конфликт.  Старият вариант е преименуван на „%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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "неуспешно събиране на информацията за сливането на „%s“, „%s“ и „%s“"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4761,10 +5164,9 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "    %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Вече е обновено!"
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Вече е обновено."
 
 #: merge-recursive.c:356
 msgid "(bad commit)\n"
@@ -4784,138 +5186,91 @@
 "неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“.  "
 "Сливането е преустановено."
 
-#: merge-recursive.c:874
+#: merge-recursive.c:876
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "грешка при създаването на пътя „%s“%s"
 
-#: merge-recursive.c:885
+#: merge-recursive.c:887
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
 
-#: merge-recursive.c:899 merge-recursive.c:918
+#: merge-recursive.c:901 merge-recursive.c:920
 msgid ": perhaps a D/F conflict?"
 msgstr ": възможно е да има конфликт директория/файл."
 
-#: merge-recursive.c:908
+#: merge-recursive.c:910
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 "преустановяване на действието, за да не се изтрие неследеният файл „%s“"
 
-#: merge-recursive.c:949 builtin/cat-file.c:41
+#: merge-recursive.c:951 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "обектът „%s“ (%s) не може да бъде прочетен"
 
-#: merge-recursive.c:954
+#: merge-recursive.c:956
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
 
-#: merge-recursive.c:979
+#: merge-recursive.c:981
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "„%s“ не може да се отвори: %s"
 
-#: merge-recursive.c:990
+#: merge-recursive.c:992
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "неуспешно създаване на символната връзка „%s“: %s"
 
-#: merge-recursive.c:995
+#: merge-recursive.c:997
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 "не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr ""
-"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
-"подаванията)"
-
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1227 merge-recursive.c:1239
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Превъртане на подмодула „%s“ до следното подаване:"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1230 merge-recursive.c:1242
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Превъртане на подмодула „%s“"
 
-#: merge-recursive.c:1251
+#: merge-recursive.c:1265
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Неуспешно сливане на подмодула „%s“ (липсва сливането, което се предшества "
 "от подаванията)"
 
-#: merge-recursive.c:1255
+#: merge-recursive.c:1269
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Неуспешно сливане на подмодула „%s“ (не е превъртане)"
 
-#: merge-recursive.c:1256
+#: merge-recursive.c:1270
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 "Открито е сливане, което може да решава проблема със сливането на "
 "подмодула:\n"
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Ако това е така, добавете го към индекса с команда като следната:\n"
-"\n"
-"    git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"Това приема предложеното.\n"
-
-#: merge-recursive.c:1268
+#: merge-recursive.c:1282
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Неуспешно вътрешно сливане"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "„%s“ не може да се добави в базата с данни"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "Автоматично сливане на „%s“"
-
-#: merge-recursive.c:1402
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4924,7 +5279,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото."
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4933,7 +5288,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4942,7 +5297,7 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s.  Версия %s на „%s“ "
 "е оставена в дървото: %s."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4951,45 +5306,45 @@
 "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
 "%s.  Версия %s на „%s“ е оставена в дървото: %s."
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "преименуване"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "преименуван"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
 "„%s“ е добавен в „%s“"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Преустановяване на действието, за да не се изгуби неследеният файл „%s“.  "
 "Вместо него се добавя „%s“"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4998,18 +5353,18 @@
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (некоригиран конфликт)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, 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:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5020,26 +5375,7 @@
 "постави „%s“, защото няколко нови директории поделят съдържанието на "
 "директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
-"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"КОНФЛИКТ (косвено преименуване на директория): повече от един път "
-"съответства на „%s“.  Косвено преименуване на директория води до поставянето "
-"на тези пътища там: %s."
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5048,152 +5384,81 @@
 "КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
 "„%s“, а „%s“ е преименуван на „%s“ в „%s“"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
-"„%s“ също е с променено име."
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "обектът „%s“ не може да се прочете"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "обектът „%s“ не е BLOB"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "промяна"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "променен"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "съдържание"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "добавяне/добавяне"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "ПОДМОДУЛ"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Добавяне като „%s“"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Обновен път: „%s“ е добавен в „%s“ в директория, която е преименувана в "
-"„%s“.  Обектът се мести в „%s“."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"КОНФЛИКТ (места на файлове): „%s“ е добавен в „%s“ в директория, която е "
-"преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Обновен път: „%s“ е преименуван на „%s“ в „%s“ в директория, която е "
-"преименувана в „%s“.  Обектът се мести в „%s“."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"КОНФЛИКТ (места на файлове): „%s“ е преименуван на „%s“ в „%s“ в директория, "
-"която е преименувана в „%s“.  Предложението е да преместите обекта в „%s“."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "Изтриване на „%s“"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "файл/директория"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "директория/файл"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, 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:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "Добавяне на „%s“"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "КОНФЛИКТ (добавяне/добавяне): Конфликт при сливане на „%s“"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Сливане:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "открит е %u общ предшественик:"
 msgstr[1] "открити са %u общи предшественици:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "сливането не върна подаване"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Неуспешен анализ на обекта „%s“"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "Индексът не може да бъде прочетен"
 
@@ -5201,125 +5466,134 @@
 msgid "failed to read the cache"
 msgstr "кешът не може да бъде прочетен"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "неуспешно записване на новия индекс"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "неправилен размер на откъс (OID fanout) на индекса за множество пакети"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "непозната версия на индекс за множество пакети — %d"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 "версията на контролната сума на индекса за множество пакети %u не съвпада с "
 "%u"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "неправилно (прекалено голямо) отместване на откъс"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr ""
-"идентификаторът за краен откъс на индекс за множество пакети се явява по-"
-"рано от очакваното"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "липсва откъс (pack-name) от индекс за множество пакети"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
 "преди „%s“"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 "неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
 "„off_t“ е недостатъчен"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "пакетният файл „%s“ не може да бъде добавен"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "индексът за пакети „%s“ не може да бъде отворен"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "обект %d в пакетния файл липсва"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "файлът за индекса не може да бъде съхранен"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Добавяне на пакетни файлове към индекс за множество пакети"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "пакетният файл за триене „%s“ не може да се открие"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "непознат предпочитан пакет: %s"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "предпочитаният пакет „%s“ е остарял"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "няма пакетни файлове за индексиране"
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Запис на откъси към индекс за множество пакети"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "файлът „%s“ не може да бъде изтрит"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "файлът с индекса за множество пакети, но не може да бъде анализиран"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Търсене на указаните пакетни файлове"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5327,72 +5601,72 @@
 "неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
 "%<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "във файла с индекса за множество пакети няма идентификатори на обекти"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr ""
 "Проверка на подредбата на идентификатори на обекти във файл с индекс към "
 "множество пакетни файлове"
 
-#: midx.c:1162
+#: midx.c:1260
 #, 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:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Подредба на обектите по пакетни файлове"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Проверка на отместването на обекти"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "индексът на пакета „%s“ не може да бъде зареден"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Преброяване на свързаните обекти"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Търсене и изтриване на несвързаните пакетни файлове"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "командата „pack-objects“ не може да бъде стартирана"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "командата „pack-objects“ не може да бъде завършена"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "не може да се създаде нишка за директории: %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "не може да се създаде нишка за имена: %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "не може да се изчака нишка за имена: %s"
@@ -5445,6 +5719,368 @@
 msgid "Bad %s value: '%s'"
 msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+"директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
+"alternates“"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr ""
+"%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
+"дълбоко влагане"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "файлът с алтернативите не може да бъде прочетен"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "пътят „%s“ не съществува."
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "еталонното хранилище „%s“ не е локално"
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "еталонното хранилище „%s“ е плитко"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "еталонното хранилище „%s“ е с присаждане"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr ""
+"неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "неуспешно изпълнение на „mmap“"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "файлът с обектите „%s“ е празен"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "непакетираният обект „%s“ е повреден"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "грешни данни в края на непакетирания обект „%s“"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "неправилен вид обект"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr ""
+"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
+"type“"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr ""
+"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "заглавната част на „%s“ не може да бъде анализирана"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "обектът „%s“ не може да бъде прочетен"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "файлът „%s“ не може да бъде записан"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "правата за достъп до „%s“ не може да бъдат зададени"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "грешка при запис на файл"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "грешка при затварянето на файла с непакетиран обект"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"няма права за добавяне на обект към базата от данни на хранилището „%s“"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "не може да бъде създаден временен файл"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "грешка при записа на файла с непакетиран обект"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "грешка поради нестабилния източник данни за обектите „%s“"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "обектът за „%s“ не може да се прочете"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "повредено подаване"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "повреден етикет"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "грешка при четене по време на индексиране на „%s“"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "непълно прочитане по време на индексиране на „%s“"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "„%s“ не може да се вмъкне в базата от данни"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "неподдържан вид файл: „%s“"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "„%s“ е неправилен обект"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "„%s“ е неправилен обект от вид „%s“"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "обектът „%s“ не може да бъде отворен"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "заглавната част на „%s“ не може да бъде анализирана"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "късият идентификатор на обект „%s“ не е еднозначен"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Възможностите са:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"При нормална работа Git никога не създава указатели, които завършват\n"
+"с 40 шестнадесетични знака, защото стандартно те ще бъдат прескачани.\n"
+"Възможно е такива указатели да са създадени случайно.  Например:\n"
+"\n"
+"    git switch -c $BRANCH $(git rev-parse …)\n"
+"\n"
+"където стойността на променливата на средата BRANCH е празна, при което\n"
+"се създава подобен указател.  Прегледайте тези указатели и ги изтрийте.\n"
+"За да изключите това съобщение, изпълнете:\n"
+"\n"
+"    git config advice.objectNameWarning false"
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "журналът за „%.*s“ стига само до „%s“"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "журналът за „%.*s“ съдържа само %d записа"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "пътят „%s“ съществува на диска, но не и в „%.*s“"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"пътят „%s“ съществува на диска, но не е в „%s“\n"
+"Пробвайте с „%.*s:%s“, което е същото като „%.*s:./%s“."
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "пътят „%s“ не съществува в „%.*s“"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"пътят „%s“ е в индекса, но не версия %d\n"
+"Пробвайте с „%d:%s“."
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"пътят „%s“ е в индекса, но не в „%s“\n"
+"Пробвайте с „%d:%s“, което е същото като „%d:./%s“."
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "пътят „%s“ съществува на диска, но не е в индекса"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "пътят „%s“ не съществува нито на диска, нито в индекса"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "относителен път не може да се ползва извън работното дърво"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "неправилно име на обект: „%.*s“"
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5455,39 +6091,90 @@
 msgid "object %s is a %s, not a %s"
 msgstr "обектът „%s“ е %s, а не %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "обектът „%s“ е непознат вид: %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "обектът „%s“ не може да бъде анализиран"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "разлика в контролната сума: „%s“"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "размерът на „%s“ не може да бъде получен"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "използваното място за „%s“ не може да бъде получено"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "файлът с обратния индекс „%s“ е твърде малък"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "файлът с обратния индекс „%s“ е повреден"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "непознат подпис за файла на обратния индекс „%s“"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "версия %2$<PRIu32> на файла с обратен индекс „%1$s“ не се поддържа"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr ""
+"идентификатор на контролна сума %2$<PRIu32> на файла с обратен индекс „%1$s“ "
+"не се поддържа"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "обратният индекс не може едновременно да се записва и да се проверява"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "не може да се получи информация чрез „stat“ за „%s“"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "не може да се дадат права за четене на „%s“"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "гарантиращият файл „%s“ не може да се запише"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr ""
 "отместване преди края на пакетния файл (възможно е индексът да е повреден)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
 "индексът да е повреден)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -5557,31 +6244,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "„--%s“ (с 2 тирета) ли имахте предвид?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "псевдоним на „--%s“"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "непозната опция: „%s“"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "непознат флаг „%c“"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "непозната стойност извън „ascii“ в низа: „%s“"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "употреба: %s"
@@ -5589,48 +6276,48 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "     или: %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-ЧИСЛО"
 
 #: path.c:915
 #, c-format
 msgid "Could not make %s writable by group"
-msgstr "Не могат да се дадат права за запис в директорията „%s“ на групата"
+msgstr "Не може да се дадат права за запис в директорията „%s“ на групата"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr ""
 "Екраниращият знак „\\“не може да е последен знак в стойността на атрибут"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Позволено е само едно указване на „attr:“."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "„attr:“ трябва да указва стойност"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "неправилно име на атрибут: „%s“"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr "глобалните настройки за пътища „glob“ и „noglob“ са несъвместими"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5638,51 +6325,51 @@
 "глобалната настройка за дословни пътища „literal“ е несъвместима с всички "
 "други глобални настройки за пътища"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "неправилен параметър за опцията за магически пътища „prefix“"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Неправилна стойност за опцията за магически пътища „%.*s“ в „%s“"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Знакът „)“ липсва в опцията за магически пътища в „%s“"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Магическите пътища „%c“ са без реализация за „%s“"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: опциите „literal“ и „glob“ са несъвместими"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: „%s“ е извън хранилището при „%s“"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "„%s“ (клавиш: „%c“)"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: магическите пътища не се поддържат от командата „%s“"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "пътят „%s“ е след символна връзка"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "неправилно цитиран ред: %s"
@@ -5703,7 +6390,7 @@
 msgid "flush packet write failed"
 msgstr "неуспешно изчистване на буферите при запис на пакет"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "протоколна грешка: прекалено дълъг ред"
 
@@ -5711,49 +6398,50 @@
 msgid "packet write with format failed"
 msgstr "неуспешен запис на пакет с формат"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 "неуспешен запис на пакетен файл — данните надвишават максималният размер на "
 "пакет"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "неуспешен запис на пакет"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "неуспешен запис на пакет: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "грешка при четене"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "отдалеченото хранилище неочаквано прекъсна връзката"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "протоколна грешка: неправилeн знак за дължина на ред: %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "протоколна грешка: неправилна дължина на ред: %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "отдалечена грешка: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "Обновяване на индекса"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "аргументът към опцията „--pretty“ не може да се анализира"
 
@@ -5777,25 +6465,29 @@
 msgstr ""
 "името отдалеченото хранилище-гарант не може за започва със знака „/“: %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info: след аргументите се очаква изчистване на буферите"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Изтриване на повтарящите се обекти"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "командата за журнала с подавания „log“ не може да се стартира"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr ""
 "изходът от командата за журнала с подавания „log“ не може да се прочете"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "подаването „%s“ не може да бъде анализирано"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5804,67 +6496,71 @@
 "първият ред от изхода на командата „log“ не може да се анализира, защото не "
 "започва с „commit “: „%s“"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "заглавната част на git „%.*s“ не може да се анализира"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "неуспешно търсене на разлика"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "опциите „--left-only“ и „--right-only“ са несъвместими"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "журналът с подаванията на „%s“ не може да бъде анализиран"
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 "няма да бъде добавен псевдоним за файл „%s“ („%s“ вече съществува в индекса)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "в базата от данни за обектите не може да се създаде празен обект-BLOB"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: може да добавяте само обикновени файлове, символни връзки и директории "
 "на git"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "не е изтеглено подаване в „%s“"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "файлът „%s“ не може да бъде индексиран"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "„%s“ не може да се добави в индекса"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "„stat“ не може да се изпълни върху „%s“"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "„%s“ съществува и като файл, и като директория"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Обновяване на индекса"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5873,7 +6569,7 @@
 "Зададена е неправилна стойност на настройката „index.version“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5883,142 +6579,146 @@
 "„GIT_INDEX_VERSION“.\n"
 "Ще се ползва версия %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "неправилен подпис: „0x%08x“"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "неправилна версия на индекса %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 "индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "игнориране на разширението „%.4s“"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "непознат формат на запис в индекса: „0x%08x“"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "неправилно име на поле в индекса близо до пътя „%s“"
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "неподредени записи в индекса"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "множество записи за слетия файл „%s“"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "неподредени записи за „%s“"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "файлът с индекса е повреден"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: неуспешно отваряне на файла на индекса"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: файлът на индекса е по-малък от очакваното"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: неуспешно заделяне на съответстваща памет чрез „mmap“ на индекса"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 "не може да се създаде нишка за зареждане на разширенията на индекса: %s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 "не може да се създаде нишка за зареждане на разширенията на индекса: %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "споделеният индекс „%s“ не може да се обнови"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "„%s“ не може да се затвори"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "индексът не може да бъде превърнат в частичен"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "неуспешно изпълнение на „stat“ върху „%s“"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "не може да се отвори директорията на git: %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "неуспешно изтриване на „%s“"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
-msgstr "правата за достъп до „%s“ не могат да бъдат поправени"
+msgstr "правата за достъп до „%s“ не може да бъдат поправени"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: не може да се премине към етап №0"
@@ -6049,7 +6749,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -6058,19 +6761,21 @@
 "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"
+".       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"
+" r, reword ПОДАВАНЕ — прилагане на подаването, но промяна на съобщението му\n"
 " e, edit ПОДАВАНЕ   — прилагане на подаването и спиране при него за още "
 "промени\n"
 " s, squash ПОДАВАНЕ — вкарване на подаването в предходното му\n"
-" f, fixup ПОДАВАНЕ  — вкарване на подаването в предходното му, без смяна на\n"
-"                      съобщението\n"
+" f, fixup [-C | -c] ПОДАВАНЕ\n"
+"                    — вкарване на подаването в предходното му, без смяна на\n"
+"                      съобщението.  С „-C“ се използва само съобщението на\n"
+"                      настоящото, а с „-c“ освен това се отваря редакторът\n"
 " x, exec ПОДАВАНЕ   — изпълнение на команда към обвивката: останалата част "
 "на\n"
 "                      реда\n"
@@ -6088,23 +6793,22 @@
 "Може да променяте последователността на редовете — те се изпълняват\n"
 "последователно отгоре-надолу.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Пребазиране на „%s“ върху „%s“ (%d команди)"
 msgstr[1] "Пребазиране на „%s“ върху „%s“ (%d команда)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 "\n"
-"Не изтривайте редове.  Подаванията могат да се прескачат с командата "
-"„drop“.\n"
+"Не изтривайте редове.  Подаванията може да се прескачат с командата „drop“.\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -6112,7 +6816,7 @@
 "\n"
 "Ако изтриете ред, съответстващото му подаване ще бъде ИЗТРИТО.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6127,7 +6831,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -6137,19 +6841,19 @@
 "Ако изтриете всичко, пребазирането ще бъде преустановено.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "„%s“ не може да се запише"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "„%s“ не може да се запише."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -6158,7 +6862,7 @@
 "Предупреждение: някои подавания може да са пропуснати.\n"
 "Пропуснати подавания (новите са най-отгоре):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -6175,14 +6879,14 @@
 "предупреждение)\n"
 "или „error“ (считане за грешка).\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "от „%s“ не може да се чете."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "изтрит"
 
@@ -6201,232 +6905,247 @@
 msgid "ahead %d, behind %d"
 msgstr "напред с %d, назад с %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "очакван формат: %%(color:ЦВЯТ)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "непознат цвят: %%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "очаква се цяло число за „refname:lstrip=%s“"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "очаква се цяло число за „refname:rstrip=%s“"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "непознат аргумент за „%%(%s)“: %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) не приема аргументи"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "непознат аргумент за %%(objectsize): %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) не приема аргументи"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) не приема аргументи"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "непознат аргумент за %%(subject): %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "очаква се %%(trailers:КЛЮЧ=СТОЙНОСТ)"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "непознат аргумент „%%(trailers)“: %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "очаква се положителна стойност за „contents:lines=%s“"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "непознат аргумент за %%(contents): %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "очаква се положителна стойност за „%s“ в %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "непознат аргумент „%s“ в %%(%s)"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "непозната опция за е-поща: %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "непозната позиция: %s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "непозната широчина: %s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "непознат аргумент за %%(align): %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "очаква се положителна широчина с лексемата „%%(align)“"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "непознат аргумент за „%%(if)“: %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "неправилно име на обект: „%.*s“"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "непознато име на обект: „%.*s“"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "формат: лексемата %%(then) е използвана повече от един път"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "формат: лексемата %%(then) е използвана след %%(else)"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "формат: лексемата %%(else) е използвана повече от един път"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "неправилен форматиращ низ „%s“"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "извън клон, пребазиране на „%s“"
+msgid "(no branch, rebasing %s)"
+msgstr "(извън клон, пребазиране на „%s“)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "извън клон, пребазиране на несвързан указател „HEAD“ при „%s“"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "извън клон, двоично търсене от „%s“"
+msgid "(no branch, bisect started on %s)"
+msgstr "(извън клон, двоично търсене от „%s“)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "извън клон"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(указателят „HEAD“ не е свързан и е при „%s“)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(указателят „HEAD“ не е свързан и е отделѐн от „%s“)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(извън клон)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "обектът „%s“ липсва за „%s“"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "обект със сгрешен формат при „%s“"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "игнориране на указателя с грешно име „%s“"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "игнориране на повредения указател „%s“"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "грешка във форма̀та: липсва лексемата %%(end)"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "неправилно име на обект „%s“"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "опцията „%s“ не сочи към подаване"
@@ -6450,7 +7169,7 @@
 "\n"
 "\tgit branch -m <name>\n"
 msgstr ""
-"Първоначалният клон ще се казва „%s“.  Това може да се промени.  Можете да "
+"Първоначалният клон ще се казва „%s“.  Това може да се промени.  Може да "
 "зададете\n"
 "настройката и да спрете това съобщение.  За това изпълнете:\n"
 "\n"
@@ -6476,50 +7195,50 @@
 msgid "ignoring dangling symref %s"
 msgstr "игнориране на указател на обект извън клон „%s“"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "има пропуски в журнала с подаванията за указателя „%s“ след „%s“"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "журналът с подаванията за указателя „%s“ свършва неочаквано след „%s“"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "журналът с подаванията за указателя „%s“ е празен"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "указател не може да се обнови с грешно име „%s“"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "неуспешно обновяване на указателя „%s“: %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "не са позволени повече от една промени на указателя „%s“"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "обновяванията на указатели са забранени в среди под карантина"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "обновяванията на указатели са преустановени от кука"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "„%s“ съществува, не може да се създаде „%s“"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
@@ -6584,12 +7303,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "стойност „%s“ на шаблона не съдържа „*“"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "указателят на версия-източник „%s“ не съвпада с никой обект"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "указателят на версия-източник „%s“ съвпада с повече от един обект"
@@ -6598,7 +7317,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6622,7 +7341,7 @@
 "Никой от вариантите не сработи.  Трябва сами да укажете пълното име на\n"
 "указателя."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6633,7 +7352,7 @@
 "като\n"
 "изтласкате към „%s:refs/heads/%s“?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6644,7 +7363,7 @@
 "като\n"
 "изтласкате към „%s:refs/tags/%s“?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6654,7 +7373,7 @@
 "ИЗТОЧНИКът е обект-дърво.  Не целите ли всъщност да създадете нов клон като\n"
 "изтласкате към „%s:refs/tags/%s“?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6664,118 +7383,118 @@
 "ИЗТОЧНИКът е обект-BLOB.  Не целите ли всъщност да създадете нов клон като\n"
 "изтласкате към „%s:refs/tags/%s“?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "не е открит клон съответстващ на „%s“"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "„%s“ не може да се изтрие: отдалечения указател не съществува"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "указателят на версия-цел „%s“ съвпада с повече от един обект"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 "указателят на версия-цел „%s“ съответства и ще получава от повече от един "
 "източник"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "Указателят „HEAD“ не сочи към клон"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "няма клон на име „%s“"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "не е зададен клон-източник за клона „%s“"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "клонът-източник „%s“ не е съхранен като следящ клон"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "липсва локален следящ клон за местоположението за изтласкване „%s“ в "
 "хранилището „%s“"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "няма информация клонът „%s“ да следи някой друг"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "указателят за изтласкване на „%s“ не включва „%s“"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "простото (simple) изтласкване не съответства на една цел"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "отдалеченият указател „%s“ не може да бъде открит"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "• прескачане на неочаквания локален указател „%s“"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Клонът е обновен към „%s“.\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (за повече информация ползвайте „%s“)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Клонът ви е с %2$d подаване пред „%1$s“.\n"
 msgstr[1] "Клонът ви е с %2$d подавания пред „%1$s“.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (публикувайте локалните си промени чрез „git push“)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6783,11 +7502,11 @@
 msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
 msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (обновете локалния си клон чрез „git pull“)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6802,11 +7521,11 @@
 "Текущият клон се е отделил от „%s“,\n"
 "двата имат съответно по %d и %d несъвпадащи подавания.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (слейте отдалечения клон в локалния чрез „git pull“)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "очакваното име на обект „%s“ не може да бъде анализирано"
@@ -6826,99 +7545,99 @@
 msgid "replace depth too high for object %s"
 msgstr "дълбочината на замяна е прекалено голяма за обекта: „%s“"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "повреден „MERGE_RR“ (запис за коригиране на конфликт)"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "приложеното коригиране на конфликт не може да бъде записано"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "грешки при записването на „%s“ (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "грешка при изчистването на буферите при записването на „%s“"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "парчетата с конфликти в „%s“ не може да се анализират"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "неуспешен запис на „%s“"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr ""
 "„%s“ е добавен към индекса с преизползване на запазена корекция при сливане"
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Корекцията на конфликта при сливане на „%s“ е запазена."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr ""
 "Конфликтът при сливане на „%s“ е коригиран с преизползване на предишна "
 "корекция."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "излишният обект „%s“ не може да се изтрие"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Предварителният вариант на „%s“ е запазен"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "Директорията „%s“ не може да бъде създадена"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "конфликтът в „%s“ не може да се обнови"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "липсва запазена корекция на конфликт при „%s“"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "„%s“ не може да се изтрие"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Предварителният вариант на „%s“ е обновен"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Запазената корекция на конфликт при „%s“ е премахната\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "директорията „rr-cache“ не може да се отвори"
 
@@ -6926,45 +7645,40 @@
 msgid "could not determine HEAD revision"
 msgstr "не може да се определи към какво да сочи указателят „HEAD“"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "дървото, сочено от „%s“, не може да бъде открито"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "опцията „--unpacked=ПАКЕТЕН_ФАЙЛ“ вече не се поддържа"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "непозната стойност за опцията „--diff-merges“: „%s“"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "Текущият клон е повреден"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Текущият клон „%s“ е без подавания "
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 "опцията „-L“ поддържа единствено форматирането на разликите според опциите „-"
 "p“ и „-s“"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "неуспешно отваряне на „/dev/null“"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "не може да се създаде асинхронна нишка: %s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6974,37 +7688,45 @@
 "За да изключите това предупреждение, изпълнете:\n"
 "    git config advice.ignoredHook false"
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "неочакван изчистващ пакет „flush“ при изчитане на състоянието от "
 "отдалеченото разпакетиране"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr ""
 "състоянието от отдалеченото разпакетиране не може да бъде анализирано: %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "неуспешно отдалечено разпакетиране: %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "сертификатът за изтласкване не може да бъде подписан"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack: неуспешно създаване на процес"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "неуспешно договаряне на изтласкване, но се продължава с изтласкването"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr ""
 "отсрещната страна не поддържа алгоритъма за контролни суми на това хранилище"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -7012,47 +7734,47 @@
 "отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
 "използва сертификат"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "отсрещната страна не поддържа опции при изтласкване"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "„%s“ не може да бъде изтрит"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "отмяна"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "отбиране"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "пребазиране"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "неизвестно действие: %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -7060,7 +7782,7 @@
 "след коригирането на конфликтите, отбележете съответните\n"
 "пътища с „git add ПЪТ…“ или „git rm ПЪТ…“."
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -7070,43 +7792,43 @@
 "пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
 "подайте резултата с командата „git commit'“."
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "„%s“ не може да се заключи"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "в „%s“ не може да се пише"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "краят на ред не може да се запише в „%s“"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "„%s“ не може да се завърши"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "локалните ви промени ще бъдат презаписани при %s."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "подайте или скатайте промените, за да продължите"
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: превъртане"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Несъществуващ режим на изчистване „%s“"
@@ -7114,65 +7836,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: новият индекс не може да бъде запазен"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "дървото на кеша не може да бъде обновено"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "в „%.*s“ няма ключове"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "цитирането на стойността на „%s“ не може да бъде изчистено"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "файлът не може да бъде прочетен: „%s“"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "непозната променлива „%s“"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7201,13 +7923,13 @@
 "\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr ""
 "неуспешно изпълнение на куката при промяна на съобщението при подаване "
 "(prepare-commit-msg)"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7222,8 +7944,7 @@
 "    git commit --amend --reset-author\n"
 msgstr ""
 "Името и адресът за е-поща са настроени автоматично на базата на името на\n"
-"потребителя и името на машината.  Проверете дали са верни.  Можете да "
-"спрете\n"
+"потребителя и името на машината.  Проверете дали са верни.  Може да спрете\n"
 "това съобщение като изрично зададете стойностите.  Изпълнете следната "
 "команда\n"
 "и следвайте инструкциите в текстовия ви редактор, за да редактирате\n"
@@ -7231,12 +7952,12 @@
 "\n"
 "    git config --global --edit\n"
 "\n"
-"След като направите това, можете да коригирате информацията за автора на\n"
+"След като направите това, може да коригирате информацията за автора на\n"
 "текущото подаване чрез:\n"
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7250,363 +7971,366 @@
 "    git commit --amend --reset-author\n"
 msgstr ""
 "Името и адресът за е-поща са настроени автоматично на базата на името на\n"
-"потребителя и името на машината.  Проверете дали са верни.  Можете да "
-"спрете\n"
+"потребителя и името на машината.  Проверете дали са верни.  Може да спрете\n"
 "това съобщение като изрично зададете стойностите:\n"
 "\n"
 "    git config --global user.name \"Вашето Име\"\n"
 "    git config --global user.email пенчо@example.com\n"
 "\n"
-"След като направите това, можете да коригирате информацията за автора на\n"
+"След като направите това, може да коригирате информацията за автора на\n"
 "текущото подаване чрез:\n"
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "току що създаденото подаване не може да бъде открито"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "току що създаденото подаване не може да бъде анализирано"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr ""
 "състоянието сочено от указателя „HEAD“ не може да бъде открито след "
 "подаването"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "несвързан връх „HEAD“"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (начално подаване)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "указателят „HEAD“ не може да бъде анализиран"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "авторът на подаването не може да бъде анализиран"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "неправилна самоличност за автор: „%s“"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "повредена информация за автор: липсва дата"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "обектът за подаването не може да бъде записан"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "„%s“ не може да се обнови"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "подаването „%s“ не може да бъде анализирано"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "родителското подаване „%s“ не може да бъде анализирано"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "непозната команда: %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Това е обединение от %d подавания"
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "указателят „HEAD“ не може да се прочете"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr ""
-"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "„%s“ не може да се запази"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Това е 1-то съобщение при подаване:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Това е съобщение при подаване №%d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "Съобщението при подаване №1 ще бъде прескочено:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
-msgstr "Съобщение при подаване №%d ще бъде прескочено:"
+msgstr "Съобщението при подаване №%d ще бъде прескочено:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Това е обединение от %d подавания"
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "„%s“ не може да се запази"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "указателят „HEAD“ не може да се прочете"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr ""
+"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "индексът не е слят."
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "началното подаване не може да се вкара в предходното му"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "подаването „%s“ няма родител %d"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, 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:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: неразпозната стойност за родителското подаване „%s“"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "„%s“ не може да се преименува на „%s“"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "подаването „%s“… не може да бъде отменено: „%s“"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "подаването „%s“… не може да бъде приложено: „%s“"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "прескачане на %s %s — кръпката вече е приложена\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: неуспешно изчитане на индекса"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: неуспешно обновяване на индекса"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "„%s“ не приема аргументи: „%s“"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "„%s“ изисква аргументи"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "„%s“ не може да се анализира"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "неправилен ред %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "Без предишно подаване не може да се изпълни „%s“"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "преустановяване на извършваното в момента отбиране на подавания"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "преустановяване на извършваното в момента отмяна на подаване"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "коригирайте това чрез „git rebase --edit-todo“."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "никое от подаванията не може да се разпознае."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr ""
 "по време на отмяна на подаване не може да се извърши отбиране на подаване."
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "по време на отбиране не може да се извърши отмяна на подаване."
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "неправилна стойност за „%s“: „%s“"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "подаването, в което другите да се вкарат, не може да се използва"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "неправилен файл с опции: „%s“"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "зададено е празно множество от подавания"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "в момента вече се извършва отмяна на подавания"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "в момента вече се извършва отбиране на подавания"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "използвайте „git cherry-pick (--continue | %s--abort | --quit)“"
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr ""
 "директорията за определянето на последователността „%s“ не може да бъде "
 "създадена"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "указателят „HEAD“ не може да се заключи"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 "в момента не се извършва отбиране на подавания или пребазиране на клона"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 "действието не може да бъде преустановено, когато сте на клон, който тепърва "
 "предстои да бъде създаден"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "„%s“ не може да бъде отворен"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "„%s“ не може да бъде прочетен: %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "неочакван край на файл"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 "запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
 "повреден"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Изглежда указателят „HEAD“ е променен.  Проверете към какво сочи.\n"
 "Не се правят промени."
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "в момента не тече пребазиране"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "в момента не се извършва отбиране на подавания"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "неуспешно прескачане на подаването"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "няма какво да се прескочи"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7616,16 +8340,16 @@
 "\n"
 "    git %s --continue"
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "указателят „HEAD“ не може да бъде прочетен"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира като „%s“"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7644,27 +8368,27 @@
 "\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Невъзможно сливане на „%.*s“"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира като „%s“"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "В момента се изпълнява: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7679,11 +8403,11 @@
 "    git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "и променѝ индекса и/или работното дърво\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7700,90 +8424,90 @@
 "    git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "неправилно име на етикет: „%.*s“"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "запазване на фалшиво начално подаване"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "запазване на подаването, в което другите да се вкарат"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "„%s“ не може да бъде открит"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "без текущо подаване не може да се слива"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "„%.*s“ не може да се анализира"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "няма нищо за сливане: „%.*s“"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "върху начално подаване не може да се извърши множествено сливане"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "съобщението за подаване към „%s“ не може да бъде получено"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "сливането на „%.*s“ не може даже да започне"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "сливане: новият индекс не може да бъде запазен"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "Не може да се скатае автоматично"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Неочакван резултат при скатаване: „%s“"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Директорията за „%s“ не може да бъде създадена"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Автоматично скатано: „%s“\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "неуспешно изпълнение на „git reset --hard“"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Автоматично скатаното е приложено.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "„%s“ не може да бъде запазен"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7791,33 +8515,33 @@
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
 "%s\n"
-"Промените ви са надеждно скатани.  Можете да пробвате да ги приложите чрез\n"
+"Промените ви са надеждно скатани.  Може да пробвате да ги приложите чрез\n"
 "„git stash pop“ или да ги изхвърлите чрез „git stash drop“, когато "
 "поискате.\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "Конфликти при прилагането на автоматично скатаното."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Вече има запис за автоматично скатано, затова се създава нов запис."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "указателят „HEAD“ не може да се отдели"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Бе спряно при „HEAD“\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Бе спряно при „%s“\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7840,58 +8564,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Пребазиране (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Спиране при „%s“…  %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "непозната команда %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "указателят за „orig-head“ не може да се прочете"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "указателят за „onto“ не може да се прочете"
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "„HEAD“ не може да бъде обновен до „%s“"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Успешно пребазиране и обновяване на „%s“.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "не може да пребазирате, защото има промени, които не са в индекса."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "несъществуващо подаване не може да се поправи"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "неправилен файл: „%s“"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "неправилно съдържание: „%s“"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7901,50 +8625,50 @@
 "В работното дърво има неподадени промени.  Първо ги подайте, а след това\n"
 "отново изпълнете „git rebase --continue“."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "файлът „%s“ не може да бъде записан"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
-msgstr "промените в индекса не могат да бъдат подадени."
+msgstr "промените в индекса не може да бъдат подадени."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: не може да се отбере „%s“"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: неправилна версия"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "първоначалното подаване не може да бъде отменено"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: неподдържани опции"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: грешка при подготовката на версии"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "няма какво да се прави"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "излишните команди за отбиране не бяха прескочени"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "скриптът вече е преподреден."
 
@@ -8097,7 +8821,7 @@
 "Git работи в рамките на една файлова система, защото променливата на средата "
 "„GIT_DISCOVERY_ACROSS_FILESYSTEM“ не е зададена."
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8107,418 +8831,69 @@
 "(0%.3o).\n"
 "Собственикът на файла трябва да има права за писане и четене."
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "неуспешно създаване на процес чрез „fork“"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "неуспешно изпълнение на „setsid“"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "опит за ползване на частичен индекс без пътеводен режим"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "дървото на кеша не може да бъде обновено и остава пълно"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-"директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
-"alternates“"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr ""
-"%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
-"дълбоко влагане"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "файлът с алтернативите не може да бъде прочетен"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "пътят „%s“ не съществува."
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "еталонното хранилище „%s“ не е локално"
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "еталонното хранилище „%s“ е плитко"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "еталонното хранилище „%s“ е с присаждане"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr ""
-"неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "неуспешно изпълнение на „mmap“"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "файлът с обектите „%s“ е празен"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "непакетираният обект „%s“ е повреден"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "грешни данни в края на непакетирания обект „%s“"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "неправилен вид обект"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
-"type“"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr ""
-"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "заглавната част на „%s“ не може да бъде анализирана"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "обектът „%s“ не може да бъде прочетен"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "файлът „%s“ не може да бъде записан"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "правата за достъп до „%s“ не могат да бъдат зададени"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "грешка при запис на файл"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "грешка при затварянето на файла с непакетиран обект"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"няма права за добавяне на обект към базата от данни на хранилището „%s“"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "не може да бъде създаден временен файл"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "грешка при записа на файла с непакетиран обект"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "грешка поради нестабилния източник данни за обектите „%s“"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "обектът за „%s“ не може да се прочете"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "повредено подаване"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "повреден етикет"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "грешка при четене по време на индексиране на „%s“"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "непълно прочитане по време на индексиране на „%s“"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "„%s“ не може да се вмъкне в базата от данни"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "неподдържан вид файл: „%s“"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "„%s“ е неправилен обект"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "„%s“ е неправилен обект от вид „%s“"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "обектът „%s“ не може да бъде отворен"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "заглавната част на „%s“ не може да бъде анализирана"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "късият SHA1 „%s“ не е еднозначен"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Възможностите са:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"При нормална работа Git никога не създава указатели, които завършват\n"
-"с 40 шестнадесетични знака, защото стандартно те ще бъдат прескачани.\n"
-"Възможно е такива указатели да са създадени случайно.  Например:\n"
-"\n"
-"    git switch -c $BRANCH $(git rev-parse …)\n"
-"\n"
-"където стойността на променливата на средата BRANCH е празна, при което\n"
-"се създава подобен указател.  Прегледайте тези указатели и ги изтрийте.\n"
-"За да изключите това съобщение, изпълнете:\n"
-"\n"
-"    git config advice.objectNameWarning false"
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "журналът за „%.*s“ стига само до „%s“"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "журналът за „%.*s“ съдържа само %d записа"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "пътят „%s“ съществува на диска, но не и в „%.*s“"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"пътят „%s“ съществува на диска, но не е в „%s“\n"
-"Пробвайте с „%.*s:%s“, което е същото като „%.*s:./%s“."
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "пътят „%s“ не съществува в „%.*s“"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"пътят „%s“ е в индекса, но не версия %d\n"
-"Пробвайте с „%d:%s“."
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"пътят „%s“ е в индекса, но не в „%s“\n"
-"Пробвайте с „%d:%s“, което е същото като „%d:./%s“."
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "пътят „%s“ съществува на диска, но не е в индекса"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "пътят „%s“ не съществува нито на диска, нито в индекса"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "относителен път не може да се ползва извън работното дърво"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "неправилно име на обект: „%.*s“"
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "обектът в индекса е директория, но не частично изтеглена (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8526,20 +8901,20 @@
 msgstr[1] "%u байта"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u байт/сек."
 msgstr[1] "%u байта/сек."
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "„%s“ не може да бъде отворен за запис"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "„%s“ не може да се редактира"
@@ -8573,7 +8948,7 @@
 #: submodule.c:114 submodule.c:143
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
-"Неслетите файлове „.gitmodules“ не могат да бъдат променяни.  Първо "
+"Неслетите файлове „.gitmodules“ не може да бъдат променяни.  Първо "
 "коригирайте конфликтите"
 
 #: submodule.c:118 submodule.c:147
@@ -8590,22 +8965,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "неуспешно добавяне на променения файл „.gitmodules“ в индекса"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "в неподготвения подмодул „%s“"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Пътят „%s“ е в подмодула „%.*s“"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "неправилен аргумент за „--ignore-submodules“: „%s“"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8614,12 +8989,12 @@
 "Подмодулът при подаване %s на пътя „%s“ е различен от другия модул със "
 "същото име, затова първият се прескача."
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8628,36 +9003,36 @@
 "Командата „git rev-list ПОДАВАНИЯ --not --remotes -n 1“ не може да се "
 "изпълни в подмодула „%s“"
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "процесът за подмодула „%s“ завърши неуспешно"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Не може да се открие към какво сочи указателят „HEAD“"
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Изтласкване на подмодула „%s“\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Подмодулът „%s“ не може да бъде изтласкан\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Доставяне на подмодула „%s%s“\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Подмодулът „%s“ не може да бъде достъпен\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8666,63 +9041,63 @@
 "Грешки при доставяне на подмодул:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "„%s“ не е хранилище на git"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr ""
 "Командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr ""
 "командата „git status --porcelain=2“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Настройката „core.worktree“ не може да се изтрие в подмодула „%s“"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "неуспешно зануляване на индекса на подмодула"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "индексът на подмодула „%s“ не е чист"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Подмодулът „%s“ не може да се обнови."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "„%s“ (директория на подмодул) е в директорията на git: „%.*s“"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8730,17 +9105,17 @@
 "не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
 "работно дърво"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "името на подмодула „%s“ не може да бъде намерено"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "„%s“ не може да се премести в съществуваща директория на git"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8751,65 +9126,71 @@
 "„%s“ към\n"
 "„%s“\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "„ls-stat“ не може да се стартира в „..“"
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "не може да бъде получена информация чрез „lstat“ за „%s“"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "неуспешно изпълнение на завършващата команда „%s“"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "непозната стойност „%s“ за настройката „%s“"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "стойността „%s“ се повтаря в настройките"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "празна завършваща лексема в епилога „%.*s“"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "входният файл „%s“ не може да бъде прочетен"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "от стандартния вход не може да се чете"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "Не може да се получи информация чрез „stat“ за „%s“"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "„%s“ не е обикновен файл"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "„%s“: няма права за записване на файла"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "временният файл не може да се отвори"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "временният файл не може да се преименува на „%s“"
@@ -8862,7 +9243,7 @@
 msgid "error while running fast-import"
 msgstr "грешка при изпълнението на бързо внасяне"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "указателят „%s“ не може да се прочете"
@@ -8880,7 +9261,7 @@
 msgid "invalid remote service path"
 msgstr "неправилен път на отдалечената услуга"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "опцията не се поддържа от протокола"
 
@@ -8889,73 +9270,77 @@
 msgid "can't connect to subservice %s"
 msgstr "неуспешно свързване към подуслугата „%s“"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "опцията „--negotiate-only“ изисква версия 2 на протокола"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "опция без съответстваща директива за успех или грешка"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 "очаква се или успех, или грешка, но насрещната помощна програма върна „%s“"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "насрещната помощна програма завърши с неочакван изходен код: „%s“"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "насрещната помощна програма „%s“ не поддържа проби „dry-run“"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „--signed“"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 "насрещната помощна програма „%s“ не поддържа опцията „--signed=if-asked“"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „--atomic“"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "насрещната помощна програма „%s“ не поддържа опцията „%s“"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "насрещната помощна програма „%s“ не поддържа опции за изтласкване"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "насрещната помощна програма не поддържа изтласкване.  Необходимо е "
 "изброяване на указателите"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr ""
 "насрещната помощна програма не поддържа „%s“ поддържа опцията „--force“"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "не може да се извърши бързо изнасяне"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "грешка при изпълнението на командата за бързо изнасяне"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8964,52 +9349,52 @@
 "Няма общи указатели, не са указани никакви указатели —\n"
 "нищо няма да бъде направено.  Пробвайте да укажете клон.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "обект с неподдържан формат „%s“"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "неправилен отговор в списъка с указатели: „%s“"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "неуспешно четене на „%s“"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "неуспешен запис в „%s“"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "неуспешно изпълнение на нишката „%s“"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "неуспешно изпълнение на „%s“"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "неуспешно стартиране на нишка за копиране на данните"
 
@@ -9028,38 +9413,42 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: неправилна опция за дълбочина: %s"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 "За повече информация вижте раздела „protocol.version“ в „git help config“"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "опциите на сървъра изискват поне версия 2 на протокола"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "сървърът не поддържа „wait-for-done“"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "стойността на настройката „transport.color.*“ не може да се разпознае"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "протокол версия 2 все още не се поддържа"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "непозната стойност за настройката „%s“: „%s“"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "преносът по „%s“ не е позволен"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "командата „git-over-rsync“ вече не се поддържа"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9068,7 +9457,7 @@
 "Следните пътища за подмодули съдържат промени,\n"
 "които липсват от всички отдалечени хранилища:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -9093,31 +9482,31 @@
 "    git push\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "Преустановяване на действието."
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "неуспешно изтласкване на всички необходими подмодули"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "прекалено кратък обект-дърво"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "неправилни права за достъп в запис в дърво"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "празно име на файл в запис в дърво"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "прекалено кратък файл-дърво"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -9126,7 +9515,7 @@
 "Изтеглянето ще презапише локалните промени на тези файлове:\n"
 "%%sПодайте или скатайте промените, за да преминете към нов клон."
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -9135,7 +9524,7 @@
 "Изтеглянето ще презапише локалните промени на тези файлове:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -9144,7 +9533,7 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "%%sПодайте или скатайте промените, за да слеете."
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -9153,7 +9542,7 @@
 "Сливането ще презапише локалните промени на тези файлове:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -9162,7 +9551,7 @@
 "„%s“ ще презапише локалните промени на тези файлове:\n"
 "%%sПодайте или скатайте промените, за да извършите „%s“."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -9171,7 +9560,7 @@
 "„%s“ ще презапише локалните промени на тези файлове:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -9180,7 +9569,7 @@
 "Обновяването на следните директории ще изтрие неследените файлове в тях:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -9189,7 +9578,7 @@
 "Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да преминете на друг клон."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -9198,7 +9587,7 @@
 "Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -9207,7 +9596,7 @@
 "Сливането ще изтрие тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да слеете."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -9216,7 +9605,7 @@
 "Сливането ще изтрие тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -9225,7 +9614,7 @@
 "„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да извършите „%s“."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -9234,7 +9623,7 @@
 "„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -9244,7 +9633,7 @@
 "Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да смените клон."
 
-#: unpack-trees.c:154
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -9254,7 +9643,7 @@
 "Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -9263,7 +9652,7 @@
 "Сливането ще презапише тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да слеете."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -9272,7 +9661,7 @@
 "Сливането ще презапише тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -9281,7 +9670,7 @@
 "„%s“ ще презапише тези неследени файлове в работното дърво:\n"
 "%%sПреместете ги или ги изтрийте, за да извършите „%s“."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -9290,12 +9679,12 @@
 "„%s“ ще презапише тези неследени файлове в работното дърво:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Записът за „%s“ съвпада с този за „%s“.  Не може да се присвои."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9304,7 +9693,7 @@
 "Подмодулът не може да бъде обновен:\n"
 "„%s“"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -9315,7 +9704,7 @@
 "изтегляне:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -9325,7 +9714,7 @@
 "изтегляне:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -9336,12 +9725,12 @@
 "частично изтегляне:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "Преустановяване на действието\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -9352,11 +9741,11 @@
 "\n"
 "    git sparse-checkout reapply\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Обновяване на файлове"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -9366,11 +9755,17 @@
 "във файлови системи, които не различават главни от малки букви)\n"
 "и само един от участниците в конфликта е в работното дърво:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "Обновяване на флаговете на индекса"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+"работното дърво и неследеното подаване съдържат повтарящи се обекти: %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "след аргументите на „fetch“ се очаква изчистване на буферите"
 
@@ -9389,7 +9784,7 @@
 
 #: urlmatch.c:232
 msgid "a 'file:' URL may not have a port number"
-msgstr "при схема „file:“ не можете да указвате номер на порт"
+msgstr "при схема „file:“ не може да указвате номер на порт"
 
 #: urlmatch.c:247
 msgid "invalid characters in host name"
@@ -9407,73 +9802,105 @@
 msgid "Fetching objects"
 msgstr "Доставяне на обектите"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "„%s“ не може да бъде прочетен"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "„%s“ в основното работно дърво не е директорията на хранилището"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "файлът „%s“ не съдържа абсолютния път към местоположението на работното дърво"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "„%s“ не съществува."
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "„%s“ не е файл на .git, код за грешка: %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "„%s“ не сочи към обратно към „%s“"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "не е директория"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr "„.git“ не е файл"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr "„.git“ е повреден"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr "„.git“ е неправилен"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "неправилен път"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "не може да се открие хранилище: „.git“ не е файл"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "не може да се открие хранилище: файлът „.git“ не сочи към хранилище"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "не може да се открие хранилище: „.git“ е повреден"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "директорията „gitdir“ не може да се прочете"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "неправилна директория „gitdir“"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "не е валидна директория"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "файлът „gitdir“ не съществува"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "файлът „gitdir“ не може да бъде прочетен (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr ""
+"изчитането върна по-малко байтове от очакваното (очаквани: %<PRIuMAX> байта, "
+"получени: %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "неправилен файл „gitdir“"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "файлът „gitdir“ сочи несъществуващо местоположение"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9525,11 +9952,11 @@
 msgstr ""
 "  (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Промени, които ще бъдат подадени:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Промени, които не са в индекса за подаване:"
 
@@ -9634,22 +10061,22 @@
 msgid "untracked content, "
 msgstr "неследено съдържание, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Има %d скатаване."
 msgstr[1] "Има %d скатавания."
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Подмодулите са променени, но не са обновени:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Промени в подмодулите за подаване:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9657,7 +10084,7 @@
 "Не променяйте и не изтривайте горния ред.\n"
 "Всичко отдолу ще бъде изтрито."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9668,263 +10095,271 @@
 "Изчисляването на броя различаващи се подавания отне %.2f сек.\n"
 "За да избегнете това, ползвайте „--no-ahead-behind“.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Някои пътища не са слети."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (коригирайте конфликтите и изпълнете „git commit“)"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (използвайте „git merge --abort“, за да преустановите сливането)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Всички конфликти са решени, но продължавате сливането."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (използвайте „git commit“, за да завършите сливането)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "В момента прилагате поредица от кръпки чрез „git am“."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "Текущата кръпка е празна."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (коригирайте конфликтите и изпълнете „git am --continue“)"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (използвайте „git am --skip“, за да пропуснете тази кръпка)"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr ""
 "  (използвайте „git am --abort“, за да възстановите първоначалния клон)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "„git-rebase-todo“ липсва."
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "Не са изпълнени команди."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Последно изпълнена команда (изпълнена е общо %d команда):"
 msgstr[1] "Последно изпълнени команди (изпълнени са общо %d команди):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (повече информация има във файла „%s“)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "Не остават повече команди."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Следваща команда за изпълнение (остава още %d команда):"
 msgstr[1] "Следващи команди за изпълнение (остават още %d команди):"
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr ""
 "  (използвайте „git rebase --edit-todo“, за да разгледате и редактирате)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "В момента пребазирате клона „%s“ върху „%s“."
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "В момента пребазирате."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (коригирайте конфликтите и използвайте „git rebase --continue“)"
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (използвайте „git rebase --skip“, за да пропуснете тази кръпка)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 "  (използвайте „git rebase --abort“, за да възстановите първоначалния клон)"
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (всички конфликти са коригирани: изпълнете „git rebase --continue“)"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“."
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "В момента разделяте подаване докато пребазирате."
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (След като работното ви дърво стане чисто, използвайте „git rebase --"
 "continue“)"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“."
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "В момента редактирате подаване докато пребазирате."
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 "  (използвайте „git commit --amend“, за да редактирате текущото подаване)"
 
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (използвайте „git rebase --continue“, след като завършите промените си)"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "В момента се извършва отбиране на подавания."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "В момента отбирате подаването „%s“."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (за да продължите, изпълнете „git cherry-pick --continue“)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)"
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (използвайте „git cherry-pick --skip“, за да пропуснете тази кръпка)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (използвайте „git cherry-pick --abort“, за да отмените всички действия с "
 "отбиране)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "В момента тече отмяна на подаване."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "В момента отменяте подаване „%s“."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (коригирайте конфликтите и изпълнете „git revert --continue“)"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (за да продължите, изпълнете „git revert --continue“)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (всички конфликти са коригирани, изпълнете „git revert --continue“)"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (използвайте „git revert --skip“, за да пропуснете тази кръпка)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 "  (използвайте „git revert --abort“, за да преустановите отмяната на "
 "подаване)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "В момента търсите двоично, като сте стартирали от клон „%s“."
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "В момента търсите двоично."
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (използвайте „git bisect reset“, за да се върнете към първоначалното "
 "състояние и клон)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Намирате се в частично изтеглено хранилище с %d%% налични, следени файла."
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "На клон "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "извършвате интерактивно пребазиране върху "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "извършвате пребазиране върху "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "Указателят „HEAD“ не е свързан и е при "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Извън всички клони."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Първоначално подаване"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "Все още липсват подавания"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Неследени файлове"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Игнорирани файлове"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9936,32 +10371,32 @@
 "изпълнението, но ще трябва да добавяте новите файлове ръчно.\n"
 "За повече подробности погледнете „git status help“."
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Неследените файлове не са изведени%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Няма промени"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "към индекса за подаване не са добавени промени (използвайте „git add“ и/или "
 "„git commit -a“)\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "към индекса за подаване не са добавени промени\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9970,71 +10405,89 @@
 "към индекса за подаване не са добавени промени, но има нови файлове "
 "(използвайте „git add“, за да започне тяхното следене)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "липсват каквито и да е промени (създайте или копирайте файлове и използвайте "
 "„git add“, за да започне тяхното следене)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "липсват каквито и да е промени\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и "
 "неследените файлове)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "липсват каквито и да е промени, работното дърво е чисто\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "Все още липсват подавания в "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (извън клон)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "различен"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "назад с "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "напред с "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "не може да извършите „%s“, защото има промени, които не са в индекса."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "освен това в индекса има неподадени промени."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "командата за комуникация между процеси не може да бъде пратена"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "отговорът за комуникацията между процеси не може да бъде прочетен"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "неуспешно изпълнение на „accept_thread“ върху нишката „%s“"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "не може да се стартира нишката worker[0] за „%s“"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "неуспешно изтриване на „%s“"
@@ -10043,132 +10496,136 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "правата на „%2$s“ не може да се зададат да са %1$cx"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "неочакван изходен код при генериране на разлика: %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "неуспешно обновяване на файловете"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "изтриване на „%s“\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "Индексът не може да бъде прочетен"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Файлът „%s“ не може да бъде отворен за запис."
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "Кръпката не може да бъде записана"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "неуспешно редактиране на кръпка"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Не може да се получи информация чрез „stat“ за файла „%s“"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Празна кръпка, преустановяване на действието."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Кръпката „%s“ не може да бъде приложена"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "пробно изпълнение"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "интерактивно отбиране на промени"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "интерактивен избор на парчета код"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "редактиране на текущата разлика и прилагане"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "добавяне и на иначе игнорираните файлове"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "обновяване на следените файлове"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "уеднаквяване на знаците за край на файл (включва опцията „-u“)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "отбелязване само на факта, че пътят ще бъде добавен по-късно"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "добавяне на всички промени в следените и неследените файлове"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "игнориране на пътищата, които са изтрити от работното дърво (същото като „--"
 "no-all“)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "без добавяне на нови файлове, само обновяване на индекса"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
-msgstr ""
-"прескачане на файловете, които не могат да бъдат добавени поради грешки"
+msgstr "прескачане на файловете, които не може да бъдат добавени поради грешки"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
 "игнорират"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "предупреждаване при добавяне на вградено хранилище"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "реализация на „git stash -p“"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10199,12 +10656,12 @@
 "\n"
 "За повече информация погледнете „git help submodule“."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "добавяне на вградено хранилище: %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10215,50 +10672,56 @@
 "\n"
 "    git config advice.addIgnoredFile false"
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "неуспешно добавяне на файлове"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr ""
+"опцията „--dry-run“ е несъвместима с всяка от опциите „--interactive“/„--"
+"patch“"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr ""
 "опцията „--pathspec-from-file“ е несъвместима с всяка от опциите „--"
 "interactive“/„--patch“"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "опциите „--pathspec-from-file“ и „--edit“ са несъвместими"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "опциите „-A“ и „-u“ са несъвместими"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr "Опцията „--ignore-missing“ изисква „--dry-run“"
+msgstr "опцията „--ignore-missing“ изисква „--dry-run“"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "параметърът към „--chmod“ — „%s“ може да е или „-x“, или „+x“"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr ""
 "опцията „--pathspec-from-file“ е несъвместима с аргументи, указващи пътища"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "опцията „--pathspec-file-nul“ изисква опция „--pathspec-from-file“"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Нищо не е зададено и нищо не е добавено.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10269,110 +10732,110 @@
 "\n"
 "    git config advice.addEmptyPathspec false"
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "скриптът за автор не може да се анализира"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "„%s“ бе изтрит от куката „applypatch-msg“"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Даденият входен ред е с неправилен формат: „%s“."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Бележката не може да се копира от „%s“ към „%s“"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "неуспешно изпълнение на „fseek“"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "кръпката „%s“ не може да се анализира"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr ""
 "Само една поредица от кръпки от „StGIT“ може да бъде прилагана в даден момент"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "неправилна стойност за време"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "неправилен ред за дата „Date“"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "неправилно отместване на часовия пояс"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Форматът на кръпката не може да бъде определен."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
-msgstr "Кръпките не могат да бъдат разделени."
+msgstr "Кръпките не може да бъдат разделени."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "След коригирането на този проблем изпълнете „%s --continue“."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Кръпката е пратена с форматиране „format=flowed“.  Празните знаци в края на "
 "редовете може да се загубят."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "Кръпката е празна."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "липсва ред за авторство в подаването „%s“"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "грешен ред с идентичност: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "В хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
 "сливане."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Базовото дърво се реконструира от информацията в индекса…"
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10380,24 +10843,24 @@
 "Кръпката не може да се приложи към обектите-BLOB в индекса.\n"
 "Да не би да сте я редактирали на ръка?"
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Неуспешно сливане на промените."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "прилагане върху празна история"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "не може да се продължи — „%s“ не съществува."
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "Тялото на кръпката за прилагане е:"
 
@@ -10405,45 +10868,45 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, 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:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "индексът не може да бъде записан"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr ""
-"Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)"
+"Индексът не е чист: кръпките не може да бъдат приложени (замърсени са: %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Прилагане: %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Без промени — кръпката вече е приложена."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "За да видите неуспешно приложени кръпки, използвайте:\n"
 "\n"
 "    git am --show-current-patch=diff"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10453,7 +10916,7 @@
 "Ако няма друга промяна за включване в индекса, най-вероятно някоя друга\n"
 "кръпка е довела до същите промени и в такъв случай просто пропуснете тази."
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10464,17 +10927,17 @@
 "След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
 "За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "„%s“ не е разпознат като обект."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "индексът не може да бъде изчистен"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10485,162 +10948,166 @@
 "сочи към\n"
 "„ORIG_HEAD“"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Неправилна стойност за „--patch-format“: „%s“"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Неправилна стойност за „--show-current-patch“: „%s“"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, 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:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "интерактивна работа"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "да се преминава към тройно сливане при нужда."
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "без извеждане на информация"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "добавяне на епилог за подпис „Signed-off-by“ в съобщението за подаване"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "прекодиране в UTF-8 (стандартно)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr ""
 "подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
 "от „am.keepcr“"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "пропускане на всичко преди реда за отрязване"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "прекарване през „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
 msgid "pass it through git-apply"
 msgstr "прекарване през „git-apply“"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "БРОЙ"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "ФОРМАТ"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "формат на кръпките"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "псевдоними на „--continue“"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "прескачане на текущата кръпка"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
 msgstr ""
 "възстановяване на първоначалното състояние на клона и преустановяване на "
-"прилагането на кръпката."
+"прилагането на кръпката"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
 msgstr ""
-"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“."
+"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "показване на прилаганата кръпка"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "дата за подаване различна от първоначалната"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "използване на текущото време като това за автор"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "подписване на подаванията с GPG"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(ползва се вътрешно за „git-rebase“)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10648,31 +11115,31 @@
 "Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
 "ще бъдат премахнати в бъдеще.  Не ги ползвайте."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "неуспешно изчитане на индекса"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "предишната директория за пребазиране „%s“ все още съществува, а е зададен "
 "файл „mbox“."
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
 "Use \"git am --abort\" to remove it."
 msgstr ""
 "Открита е излишна директория „%s“.\n"
-"Можете да я изтриете с командата „git am --abort“."
+"Може да я изтриете с командата „git am --abort“."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "В момента не тече операция по коригиране и няма как да се продължи."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "интерактивният режим изисква кръпки на командния ред"
 
@@ -10716,23 +11183,10 @@
 msgstr "git bisect--helper --bisect-reset [ПОДАВАНЕ]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] СЪСТОЯНИЕ ВЕРСИЯ ДОБРО ЛОШО"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr "git bisect--helper --bisect-check-and-set-terms КОМАНДА ДОБРО"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr "git bisect--helper --bisect-next-check ЛОШО ДОБРО УПРАВЛЯВАЩА_ДУМА"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10740,7 +11194,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10749,62 +11203,66 @@
 "git bisect--helper --bisect-start [--term-{new,bad}=ЛОШО --term-{old,good}"
 "=ДОБРО] [--no-checkout] [--first-parent] [ЛОШО [ДОБРО…]] [--] [ПЪТ…]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-reset (ЛОШО) [ВЕРСИЯ]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-reset (ДОБРО) [ВЕРСИЯ…]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-next ИМЕ_НА_ФАЙЛ"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-reset [(ВЕРСИЯ|ДИАПАЗОН)…]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "файлът „%s“ не може да се отвори в режим „%s“"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "във файла „%s“ не може да се пише"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "„%s“ е неправилна управляваща дума"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "„%s“ е вградена команда и не може да се използва като управляваща дума"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "не може да смените значението на управляващата дума „%s“"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "използвайте две различни управляващи думи"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "В момента не се извършва двоично търсене.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "„%s“ не е подаване"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10812,27 +11270,27 @@
 "първоначално указаното „%s“ в указателя „HEAD“ не може да бъде\n"
 "изтеглено.  Пробвайте да изпълните командата „git bisect reset ПОДАВАНЕ“."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Неправилен аргумент на функцията „bisect_write“: „%s“"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "идентификаторът на обект на версия „%s“ не може да бъде получен"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "файлът „%s“ не може да бъде отворен"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Неправилна команда: в момента се изпълнява двоично търсене по %s/%s."
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10841,7 +11299,7 @@
 "Трябва да зададете поне една „%s“ и една „%s“ версия.  (Това може да се\n"
 "направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10852,7 +11310,7 @@
 "Трябва да зададете поне една „%s“ и една „%s“ версия.  (Това може да се\n"
 "направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "двоично търсене само по „%s“ подаване."
@@ -10861,15 +11319,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Да се продължи ли? „Y“ —  ДА, „n“ — не"
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "не са указани управляващи думи"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10878,7 +11336,7 @@
 "Текущите управляващи думи са: %s за старото състояние\n"
 "и %s за новото състояние.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10887,56 +11345,56 @@
 "на „git bisect terms“ е подаден неправилен аргумент „%s“\n"
 "Поддържат се опциите „--term-good“/„--term-old“ и „--term-bad„/„--term-new“."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "неуспешно настройване на обхождането на версиите\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "файлът „%s“ не може да се отвори за добавяне"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "„“ е неправилна управляваща дума"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "непозната опция: %s"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "„%s“ не изглежда като указател към версия"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "Неправилен указател „HEAD“"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "Неуспешно преминаване към „%s“.  Изпълнете командата „git bisect start "
 "СЪЩЕСТВУВАЩ_КЛОН“."
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr ""
 "не може да се търси двоично, когато е изпълнена командата „cg-seek“ от "
 "„cogito“"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "Неправилен указател „HEAD“ — необичаен символен указател"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "неправилен указател: „%s“"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Започнете като изпълните командата „git bisect start“\n"
 
@@ -10944,94 +11402,110 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Да се извърши ли автоматично? „Y“ —  ДА, „n“ — не"
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
-msgstr "Опцията „--bisect-state“ изисква поне един аргумент"
+msgstr "опцията „--bisect-state“ изисква поне един аргумент"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "Командата „git bisect %s“ приема само един аргумент."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Неправилна версия: „%s“"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Неправилна версия (не е подаване): „%s“"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "В момента не се извършва двоично търсене."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr ""
+"Непозната команда „%s“.  Възможностите са: „start“, „skip“, „good“, „bad“ (и "
+"вариантите им)"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr ""
+"файлът „%s“ не може да бъде прочетен, за да се изпълнят командите от него "
+"наново"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "изчистване на състоянието на двоичното търсене"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "запис на състоянието на двоичното търсене в „BISECT_LOG“"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr ""
-"проверка и задаване на управляващи думи към състоянието на двоичното търсене"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "проверка дали съществуват одобряващи/отхвърлящи управляващи думи"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "извеждане на управляващите думи"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "начало на двоично търсене"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "откриване на следващото подаване при двоично търсене"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"проверка на следващото състояние и преминаване към следващото подаване при "
-"двоично търсене"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "задаване на състоянието на указателя/ите"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "извеждане на стъпките на двоичното търсене досега"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "наново изпълнение на двоичното търсене чрез дадения файл"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "прескачане на някои подавания при изтегляне"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "липсва запис за „BISECT_WRITE“"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "опцията „--bisect-reset“ изисква или 0 аргументи, или 1 — подаване"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "опцията „--bisect-write“ изисква 4 или 5 аргумента"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "опцията „--check-and-set-terms“ изисква 3 аргумента"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "опцията „--bisect-next-check“ изисква 2 или 3 аргумента"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "опцията „--bisect-terms“ изисква 0 или 1 аргумента"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "опцията „--bisect-next“ не приема аргументи"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "опцията „--bisect-auto-next“ не приема аргументи"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "опцията „--bisect-log“ не приема аргументи"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "не е зададен журнален файл"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -11050,155 +11524,158 @@
 msgid "must end with a color"
 msgstr "трябва да завършва с цвят"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "неправилен цвят „%s“ в „color.blame.repeatedLines“"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "неправилна стойност за „blame.coloring“"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "версията за прескачане „%s“ не може да бъде открита"
 
-#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Извеждане на авторството с намирането му, последователно"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "извеждане на авторството с намирането му, последователно"
 
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
-"Без извеждане на имената на обектите за граничните подавания (стандартно "
+"без извеждане на имената на обектите за граничните подавания (стандартно "
 "опцията е изключена)"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
-"Началните подавания да не се считат за гранични (стандартно опцията е "
+"началните подавания да не се считат за гранични (стандартно опцията е "
 "изключена)"
 
+#: builtin/blame.c:870
+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:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "извеждане на напредъка"
+
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "Извеждане на статистика за извършените действия"
+msgid "show output score for blame entries"
+msgstr "извеждане на допълнителна информация за определянето на авторството"
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Принудително извеждане на напредъка"
+msgid "show original filename (Default: auto)"
+msgstr ""
+"извеждане на първоначалното име на файл (стандартно това е автоматично)"
 
 #: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "Извеждане на допълнителна информация за определянето на авторството"
+msgid "show original linenumber (Default: off)"
+msgstr ""
+"извеждане на първоначалния номер на ред (стандартно опцията е изключена)"
 
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr ""
-"Извеждане на първоначалното име на файл (стандартно това е автоматично)"
+msgid "show in a format designed for machine consumption"
+msgstr "извеждане във формат за по-нататъшна обработка"
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+msgid "show porcelain format with per-line commit information"
 msgstr ""
-"Извеждане на първоначалният номер на ред (стандартно опцията е изключена)"
-
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "Извеждане във формат за по-нататъшна обработка"
-
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr ""
-"Извеждане във формат за команди от потребителско ниво с информация на всеки "
+"извеждане във формат за команди от потребителско ниво с информация на всеки "
 "ред"
 
-#: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
-"Използване на същия формат като „git-annotate“ (стандартно опцията е "
+"използване на същия формат като „git-annotate“ (стандартно опцията е "
 "изключена)"
 
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr "извеждане на неформатирани времена (стандартно опцията е изключена)"
+
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr "извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
+
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "без име на автор и време на промяна (стандартно опцията е изключена)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
-
-#: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Без име на автор и време на промяна (стандартно опцията е изключена)"
-
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
+msgid "show author email instead of name (Default: off)"
 msgstr ""
-"Извеждане на е-пощата на автора, а не името му (стандартно опцията е "
+"извеждане на е-пощата на автора, а не името му (стандартно опцията е "
 "изключена)"
 
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Без разлики в знаците за интервали"
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
+msgstr "без разлики в знаците за интервали"
 
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "ВЕРС"
 
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "прескачане на ВЕРСията при извеждане на авторството"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "прескачане на версиите указани във ФАЙЛа"
+
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "Прескачане на ВЕРСията при извеждане на авторството"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "Прескачане на версиите указани във ФАЙЛа при извеждане на авторството"
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 "оцветяване на повтарящите се метаданни от предишния ред в различен цвят"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "оцветяване на редовете по възраст"
 
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "допълнителни изчисления за по-добри резултати"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "изчитане на версиите от ФАЙЛа, а не чрез изпълнение на „git-rev-list“"
+
 #: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Допълнителни изчисления за по-добри резултати"
+msgid "use <file>'s contents as the final image"
+msgstr "използване на съдържанието на ФАЙЛа като крайно положение"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "Използване на съдържанието на ФАЙЛа като крайно положение"
-
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "напасване на редовете"
 
-#: builtin/blame.c:892
-msgid "Find line copies within and across files"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
 msgstr ""
-"Търсене на копирани редове както в рамките на един файл, така и от един файл "
+"търсене на копирани редове както в рамките на един файл, така и от един файл "
 "към друг"
 
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
 msgstr ""
-"Търсене на преместени редове както в рамките на един файл, така и от един "
+"търсене на преместени редове както в рамките на един файл, така и от един "
 "файл към друг"
 
-#: builtin/blame.c:894
+#: builtin/blame.c:892
 msgid "range"
 msgstr "диапазон"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
-"Информация само за редовете в диапазона НАЧАЛО,КРАЙ или само на :ФУНКЦИЯта"
+"информация само за редовете в диапазона НАЧАЛО,КРАЙ или само на :ФУНКЦИЯта"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -11212,18 +11689,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "преди 4 години и 11 месеца"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, 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:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Редове с авторство"
 
@@ -11291,118 +11768,108 @@
 msgid "Update of config-file failed"
 msgstr "Неуспешно обновяване на конфигурационния файл"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
-msgstr "Опцията „-a“ е несъвместима с опцията „-d“"
+msgstr "опциите „-a“ и „-d“ са несъвместими"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Обектът-подаване, сочен от указателя „HEAD“, не може да бъде открит"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
-msgstr "Не можете да изтриете клона „%s“, който е изтеглен в пътя „%s“"
+msgstr "Не може да изтриете клона „%s“, който е изтеглен в пътя „%s“"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "следящият клон „%s“ не може да бъде открит."
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "клонът „%s“ не може да бъде открит."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Грешка при изтриването на следящия клон „%s“"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Грешка при изтриването на клона „%s“"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Изтрит следящ клон „%s“ (той сочеше към „%s“).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Изтрит клон „%s“ (той сочеше към „%s“).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "форматиращият низ не може да бъде анализиран: %s"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "подаването, сочено от указателя „HEAD“, не може да се установи"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "„HEAD“ (%s) сочи извън директорията „refs/heads“"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Клонът „%s“ се пребазира върху „%s“"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Търси се двоично в клона „%s“ при „%s“"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
-msgstr "не можете да копирате текущия клон, защото сте извън който и да е клон"
-
-#: builtin/branch.c:504
-msgid "cannot rename the current branch while not on any."
-msgstr ""
-"не можете да преименувате текущия клон, защото сте извън който и да е клон"
+msgstr "не може да копирате текущия клон, защото сте извън който и да е клон"
 
 #: builtin/branch.c:515
+msgid "cannot rename the current branch while not on any."
+msgstr ""
+"не може да преименувате текущия клон, защото сте извън който и да е клон"
+
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Неправилно име на клон: „%s“"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Неуспешно преименуване на клон"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Неуспешно копиране на клон"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Клонът с неправилно име „%s“ е копиран"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Клонът с неправилно име „%s“ е преименуван"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Клонът е преименуван на „%s“, но указателят „HEAD“ не е обновен"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Клонът е преименуван, но конфигурационният файл не е обновен"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Клонът е копиран, но конфигурационният файл не е обновен"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11413,183 +11880,183 @@
 "    %s\n"
 "Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Общи настройки"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr ""
 "извеждане на контролната сума и темата.  Повтарянето на опцията прибавя "
 "отдалечените клони"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "без информационни съобщения"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "задаване на режима на следене (виж git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "да не се ползва"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "клон-източник"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "смяна на клона-източник"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "изчистване на информацията за клон-източник"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "цветен изход"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "действие върху следящите клони"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "извеждане само на клоните, които съдържат това ПОДАВАНЕ"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "извеждане само на клоните, които не съдържат това ПОДАВАНЕ"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Специални действия на „git-branch“:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "извеждане както на следящите, така и на локалните клони"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "изтриване на клони, които са напълно слети"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "изтриване и на клони, които не са напълно слети"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr ""
 "преместване/преименуване на клон и принадлежащият му журнал на указателите"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "копиране на клон и принадлежащия му журнал на указателите"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "копиране на клон, дори ако има вече клон с такова име"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "извеждане на имената на клоните"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "извеждане на името на текущия клон"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "създаване на журнала на указателите на клона"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "редактиране на описанието на клона"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "принудително създаване, преместване, преименуване, изтриване"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "извеждане само на слетите клони"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "извеждане само на неслетите клони"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "извеждане по колони"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "ОБЕКТ"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "извеждане само на клоните на ОБЕКТА"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "подредбата и филтрирането третират еднакво малките и главните букви"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "ФОРМАТ за изхода"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
-msgstr "Опциите „--column“ и „--verbose“ са несъвместими"
+msgstr "опциите „--column“ и „--verbose“ са несъвместими"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "Необходимо е име на клон"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "Не може да зададете описание на несвързан „HEAD“"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "Не може да редактирате описанието на повече от един клон едновременно"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "В клона „%s“ все още няма подавания."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Липсва клон на име „%s“."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "прекалено много клони за копиране"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "прекалено много аргументи към командата за преименуване"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "прекалено много аргументи към командата за следене"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11597,44 +12064,44 @@
 "Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към "
 "никой клон."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "Няма клон на име „%s“."
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "Не съществува клон на име „%s“."
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "прекалено много аргументи към командата за спиране на следене"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Няма информация клонът „%s“ да следи някой друг"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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 ""
-"Опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон.\n"
+"опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон.\n"
 "Пробвайте с: „-a|-r --list ШАБЛОН“"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
 msgstr ""
-"Опцията „--set-upstream“ вече не се поддържа.  Използвайте „--track“ или „--"
+"опцията „--set-upstream“ вече не се поддържа.  Използвайте „--track“ или „--"
 "set-upstream-to“"
 
 #: builtin/bugreport.c:15
@@ -11698,38 +12165,38 @@
 "Разгледайте останалата част от доклада за грешка по-долу.\n"
 "Може да изтриете редовете, които не искате да споделите.\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "укажете файла, в който да се запази докладът за грешка"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "укажете суфикса на файла във формат за „strftime“"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
-msgstr "родителските директории на „%s“ не могат да бъдат създадени"
+msgstr "родителските директории на „%s“ не може да бъдат създадени"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "Информация за системата"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "Включени куки"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "новият файл „%s“ не може да бъде създаден"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "в „%s“ не може да се пише"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Новият доклад е създаден в „%s“.\n"
@@ -11750,19 +12217,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle ФАЙЛ [ИМЕ_НА_УКАЗАТЕЛ…]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "без извеждане на напредъка"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "извеждане на напредъка"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "извеждане на напредъка във фазата на запазване на обектите"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 "същото действие като опцията „--all-progress“ при извеждането на напредъка"
@@ -11913,8 +12380,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "без показване на напредъка"
 
@@ -11926,27 +12393,27 @@
 msgid "ignore index when checking"
 msgstr "прескачане на индекса при проверката"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "опцията „--stdin“ е несъвместима с имена на пътища"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "опцията „-z“ изисква „--stdin“"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "не е зададен път"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "опцията „--quiet“ изисква да е подаден точно един път"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "опциите „--quiet“ и „--verbose“ са несъвместими"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "опцията „--non-matching“ изисква „--verbose“"
 
@@ -11967,166 +12434,170 @@
 msgid "no contacts specified"
 msgstr "не са указани контакти"
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
-msgstr "git checkout-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [ОПЦИЯ…]"
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr "етапът трябва да е „1“, „2“, „3“ или „all“ (всички)"
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr "изтегляне на всички файлове в индекса"
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr "презаписване на файловете, дори и да съществуват"
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr "без предупреждения при липсващи файлове и файлове не в индекса"
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr "без изтегляне на нови файлове"
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr "обновяване на информацията получена чрез „stat“ за файловете в индекса"
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr "изчитане на пътищата от стандартния вход"
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr "записване на съдържанието във временни файлове"
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr "НИЗ"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr "при създаването на нови файлове да се добавя префикса НИЗ"
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr "git checkout-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr "етапът трябва да е „1“, „2“, „3“ или „all“ (всички)"
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr "изтегляне на всички файлове в индекса"
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr "презаписване на файловете, дори и да съществуват"
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr "без предупреждения при липсващи файлове и файлове не в индекса"
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr "без изтегляне на нови файлове"
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr "обновяване на информацията получена чрез „stat“ за файловете в индекса"
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr "изчитане на пътищата от стандартния вход"
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr "записване на съдържанието във временни файлове"
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "копиране на файловете от това състояние на сливане"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [ОПЦИЯ…] КЛОН"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [ОПЦИЯ…] [КЛОН] -- ФАЙЛ…"
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [ОПЦИЯ…] КЛОН"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [ОПЦИЯ…] [--source=КЛОН] ФАЙЛ…"
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "вашата версия липсва в пътя „%s“"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "чуждата версия липсва в пътя „%s“"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "някоя от необходимите версии липсва в пътя „%s“"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "някоя от необходимите версии липсва в пътя „%s“"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "пътят „%s“ не може да бъде слян"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Резултатът за „%s“ не може да бъде слян"
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Пресъздаден е %d конфликт при сливане"
 msgstr[1] "Пресъздадени са %d конфликта при сливане"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, 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:408
+#: builtin/checkout.c:426
 #, 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:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "опцията „%s“ е несъвместима с обновяването на пътища"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
-msgstr "опцията „%s“ е несъвместима с „%s“"
+msgstr "опциите „%s“ и „%s“ са несъвместими"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "не е указано нито „%s“, нито „%s“"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "опцията „%s“ е задължителна, когато „%s“ не е зададена"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "опцията „%3$s“ е несъвместима както с „%1$s“, така и с „%2$s“"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "пътят „%s“ не е слят"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "първо трябва да коригирате индекса си"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12136,50 +12607,50 @@
 "индекса:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "Указателят „HEAD“ в момента сочи към"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "Указателят „HEAD“ не може да бъде обновен"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Зануляване на клона „%s“\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Вече сте на „%s“\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Преминахте към новия клон „%s“\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Преминахте към клона „%s“\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr "… и още %d.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12201,7 +12672,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12228,19 +12699,19 @@
 "    git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "вътрешна грешка при обхождането на версиите"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "Преди това „HEAD“ сочеше към"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "В момента сте на клон, който все още не е създаден"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12249,7 +12720,7 @@
 "„%s“ може да е както локален файл, така и следящ клон.  За уточняване\n"
 "ползвайте разделителя „--“ (и евентуално опцията „--no-guess“)"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -12271,51 +12742,51 @@
 "\n"
 "    checkout.defaultRemote=origin"
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "„%s“ напасва с множество (%d) отдалечени клони"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "очаква се само един указател"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "очаква се един указател, а сте подали %d."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "неправилен указател: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "указателят не сочи към обект-дърво: %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "очаква се клон, а не етикет — „%s“"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "очаква се локален, а не отдалечен клон — „%s“"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "очаква се клон, а не „%s“"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "очаква се клон, а не подаване — „%s“"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12323,7 +12794,7 @@
 "по време на сливане не може да преминете към друг клон.\n"
 "Пробвайте с „git merge --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12332,7 +12803,7 @@
 "клон.\n"
 "Пробвайте с „git am --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12340,7 +12811,7 @@
 "по време на пребазиране не може да преминете към друг клон.\n"
 "Пробвайте с „git rebase --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12348,7 +12819,7 @@
 "по време на отбиране на подавания не може да преминете към друг клон.\n"
 "Пробвайте с „git cherry-pick --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12356,146 +12827,139 @@
 "по време на отмяна на подавания не може да преминете към друг клон.\n"
 "Пробвайте с „git revert --quit“ или „git worktree add“."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr "преминаване към друг клон по време на двоично търсене"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "опцията „%s“ е несъвместима с „%s“"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "опцията „%s“ е несъвместима със задаването на НАЧАЛО"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr ""
 "За да преминете към клон, подайте указател, който сочи към подаване.  „%s“ "
 "не е такъв"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "липсва аргумент — клон или подаване"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "извеждане на напредъка"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "извършване на тройно сливане с новия клон"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "СТИЛ"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "действие при конфликт (сливане или тройна разлика)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "отделяне на указателя „HEAD“ към указаното подаване"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "задаване на кой клон бива следен при създаването на новия клон"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "НОВ_КЛОН"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "нов клон без родител"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "обновяване на игнорираните файлове (стандартно)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr "без проверка дали друго работно дърво държи указателя"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "изтегляне на вашата версия на неслетите файлове"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "изтегляне на чуждата версия на неслетите файлове"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "без ограничаване на изброените пътища само до частично изтеглените"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
-msgstr "Опциите „-%c“, „-%c“ и „--orphan“ са несъвместими една с друга"
+msgstr "опциите „-%c“, „-%c“ и „--orphan“ са несъвместими една с друга"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "опциите „-p“ и „--overlay“ са несъвместими"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "опцията „--track“ изисква име на клон"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "липсва име на клон, използвайте опцията „-%c“"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "„%s“ не може да бъде открит"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "указан е неправилен път"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "опциите „--pathspec-from-file“ и „--detach“ са несъвместими"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "опциите „--pathspec-from-file“ и „--patch“ са несъвместими"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12503,74 +12967,74 @@
 "git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“\n"
 "са несъвместими с изтегляне от индекса."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "трябва да укажете поне един път за възстановяване"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "клон"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "създаване и преминаване към нов клон"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "създаване/зануляване на клон и преминаване към него"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "създаване на журнал на указателите за нов клон"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr ""
 "опит за отгатване на име на клон след неуспешен опит с „git checkout "
 "НЕСЪЩЕСТВУВАЩ_КЛОН“ (стандартно)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "използване на припокриващ режим (стандартно)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "създаване и преминаване към нов клон"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "създаване/зануляване на клон и преминаване към него"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr ""
 "опит за отгатване на име на клон след неуспешен опит с „git switch "
 "НЕСЪЩЕСТВУВАЩ_КЛОН“"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "зануляване на локалните промени"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "към кой указател към дърво да се премине"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "възстановяване на индекса"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "възстановяване на работното дърво (стандартно)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "пренебрегване на неслетите елементи"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "използване на припокриващ режим"
 
@@ -12599,11 +13063,6 @@
 msgid "Would skip repository %s\n"
 msgstr "Хранилището „%s“ ще бъде прескочено\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "файлът „%s“ не може да бъде изтрит"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12714,8 +13173,8 @@
 msgstr "изтриване на цели директории"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "ШАБЛОН"
@@ -12757,168 +13216,173 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "без клониране на плитко хранилище"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "без създаване на работно дърво"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "създаване на голо хранилище"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr ""
 "създаване на хранилище-огледало (включва опцията „--bare“ за голо хранилище)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "клониране от локално хранилище"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "без твърди връзки, файловете винаги да се копират"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "настройване за споделено хранилище"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "път"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "инициализиране на подмодулите при това клониране"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "брой подмодули, клонирани паралелно"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "директория с шаблони"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "директория, която съдържа шаблоните, които да се ползват"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "еталонно хранилище"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "опцията „--reference“ може да се използва само при клониране"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "ИМЕ"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "използване на това ИМЕ вместо „origin“ при проследяване на клони"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "изтегляне на този КЛОН, а не соченият от отдалечения указател „HEAD“"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "ДЪЛБОЧИНА"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "плитко клониране до тази ДЪЛБОЧИНА"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "ВРЕМЕ"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "плитко клониране до момент във времето"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "ВЕРСИЯ"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 "клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично "
 "зададения с „--branch“"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "без клониране на етикети, като последващите доставяния няма да ги следят"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "всички клонирани подмодули ще са плитки"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "КЛЮЧ=СТОЙНОСТ"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "задаване на настройките на новото хранилище"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "специфични за сървъра"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "опция за пренос"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "само адреси IPv4"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "само адреси IPv6"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "всички клонирани подмодули ще ползват следящите си клони"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "инициализиране на файла за частично изтегляне („.git/info/sparse-checkout“) "
 "да съдържа само файловете в основната директория"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12926,207 +13390,207 @@
 "Името на директорията не може да бъде отгатнато.\n"
 "Задайте директорията изрично на командния ред"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "„%s“ съществува и не е директория"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "неуспешно итериране по „%s“"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "връзката „%s“ не може да бъде създадена"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "файлът не може да бъде копиран като „%s“"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "неуспешно итериране по „%s“"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "действието завърши.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
 "and retry with 'git restore --source=HEAD :/'\n"
 msgstr ""
 "Клонирането бе успешно за разлика от подготовката на работното дърво\n"
-"за определен клон.  Все пак можете да проверите кои файлове и от кой\n"
-"клон в момента са изтеглени с командата „git status“.  Можете да\n"
+"за определен клон.  Все пак може да проверите кои файлове и от кой\n"
+"клон в момента са изтеглени с командата „git status“.  Може да\n"
 "завършите изтеглянето на клона с командата:\n"
 "\n"
 "    git restore --source=HEAD :/\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 "Клонът „%s“ от отдалеченото хранилище, което клонирате,\n"
 "и който следва да бъде изтеглен, не съществува."
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "обектът „%s“ не може да бъде обновен"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "частичното изтегляне не може да се инициализира"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
 "което не съществува.  Не може да се изтегли определен клон.\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "работното дърво не може да бъде подготвено"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
-msgstr "настройките не могат да бъдат записани в конфигурационния файл"
+msgstr "настройките не може да бъдат записани в конфигурационния файл"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "не може да се извърши пакетиране за изчистване на файловете"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Прекалено много аргументи."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Трябва да укажете кое хранилище искате да клонирате."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "не съществува хранилище „%s“"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "целевият път „%s“ съществува и не е празна директория."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "пътят в хранилището „%s“ съществува и не е празна директория."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "в „%s“ вече съществува работно дърво."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
-msgstr "родителските директории на „%s“ не могат да бъдат създадени"
+msgstr "родителските директории на „%s“ не може да бъдат създадени"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "работното дърво в „%s“ не може да бъде създадено."
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Клониране и създаване на хранилище в „%s“…\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
-"Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
+"опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
 "if-able“"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "„%s“ е неправилно име за отдалечено хранилище"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--depth“ се прескача.  Ползвайте схемата "
 "„file://“."
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--shallow-since“ се прескача.  Ползвайте "
 "схемата „file://“."
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--shallow-exclude“ се прескача.  Ползвайте "
 "схемата „file://“."
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "При локално клониране опцията „--filter“ се прескача.  Ползвайте схемата "
 "„file://“."
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "опцията „--local“ се прескача"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Изглежда клонирахте празно хранилище."
 
@@ -13143,20 +13607,20 @@
 msgstr "как да се подреди резултата"
 
 #: builtin/column.c:30
-msgid "Maximum width"
-msgstr "Максимална широчина"
+msgid "maximum width"
+msgstr "максимална широчина"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
-msgstr "Поле в знаци отляво"
+msgid "padding space on left border"
+msgstr "поле в знаци отляво"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
-msgstr "Поле в знаци отдясно"
+msgid "padding space on right border"
+msgstr "поле в знаци отдясно"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "Поле в знаци между колоните"
+msgid "padding space between columns"
+msgstr "поле в знаци между колоните"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
@@ -13185,13 +13649,13 @@
 msgstr "директорията с обекти, която отговаря на „%s“, не може да бъде открита"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "директория"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+msgid "the object directory to store the graph"
 msgstr "ДИРекторията_с_ОБЕКТИ за запазване на гра̀фа"
 
 #: builtin/commit-graph.c:83
@@ -13285,7 +13749,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "прескачане на повтарящ се родител: „%s“"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "неправилно име на обект: „%s“"
@@ -13313,13 +13777,13 @@
 msgid "id of a parent commit object"
 msgstr "ИДЕНТИФИКАТОР на обекта за подаването-родител"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "СЪОБЩЕНИЕ"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "СЪОБЩЕНИЕ при подаване"
 
@@ -13327,7 +13791,7 @@
 msgid "read commit log message from file"
 msgstr "изчитане на съобщението за подаване от ФАЙЛ"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "подписване на подаването с GPG"
@@ -13355,7 +13819,7 @@
 "remove the commit entirely with \"git reset HEAD^\".\n"
 msgstr ""
 "Поискахте да поправите последното си подаване.  Това действие ще превърне\n"
-"подаването в празно.  Можете или да го повторите като разрешите такива "
+"подаването в празно.  Може или да го повторите като разрешите такива "
 "подавания\n"
 "с опцията „--allow-empty“, или да го изтриете от историята с командата:\n"
 "„git reset HEAD^“.\n"
@@ -13411,73 +13875,73 @@
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "върховото дърво (HEAD tree object) не може да бъде извадено от пакет"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "опциите „-a“ и „--pathspec-from-file“ са несъвместими"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
-msgstr "Опциите „--include“ и „--only“ изискват аргументи."
+msgstr "опциите „--include“ и „--only“ изискват аргументи."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "временният индекс не може да бъде създаден"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "неуспешно интерактивно добавяне"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "временният индекс не може да бъде обновен"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Дървото на основния кеш не може да бъде обновено"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "новият индекс не може да бъде записан"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "по време на сливане не може да се извърши частично подаване."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "по време на отбиране не може да се извърши частично подаване."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "по време на пребазиране не може да се извърши частично подаване."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "индексът не може да бъде прочетен"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "временният индекс не може да бъде записан"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "заглавната част за автор в подаването „%s“ липсва"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "заглавната част за автор в подаването „%s“ е неправилна"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "неправилен параметър към опцията „--author“"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13485,38 +13949,43 @@
 "не може да се избере знак за коментар — в текущото съобщение за подаване са "
 "използвани всички подобни знаци"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "следното подаване не може да бъде открито: %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "съобщението за подаване не бе прочетено стандартния вход"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "опциите „-m“ и „--fixup“ са несъвместими:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "съобщението за вкарване SQUASH_MSG не може да бъде прочетено"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "шаблонът за подаване не може да бъде запазен"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13531,7 +14000,7 @@
 "    git update-ref -d MERGE_HEAD\n"
 "и опитайте отново.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13546,7 +14015,7 @@
 "    git update-ref -d CHERRY_PICK_HEAD\n"
 "и опитайте отново.\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13555,7 +14024,7 @@
 "Въведете съобщението за подаване на промените.  Редовете, които започват\n"
 "с „%c“, ще бъдат пропуснати, а празно съобщение преустановява подаването.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13566,151 +14035,186 @@
 "с „%c“, също ще бъдат включени — може да ги изтриете вие.  Празно \n"
 "съобщение преустановява подаването.\n"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sАвтор:   %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sДата:    %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sПодаващ: %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "Индексът не може да бъде прочетен"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "епилогът не може да се подаде на „--trailers“"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Грешка при изграждане на дърветата"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
-"Опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
+"опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
 "никой автор"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Неправилен режим за игнорираните файлове: „%s“"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Неправилен режим за неследените файлове: „%s“"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
-msgstr "Опциите „--long“ и „-z“ са несъвместими."
+msgstr "опциите „--long“ и „-z“ са несъвместими."
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr ""
+"В момента се извършва сливане, не може да промените съобщение при подаване."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr ""
+"В момента се извършва отбиране на подаване, не може да промените съобщение "
+"при подаване."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr ""
+"опцията за промяна на съобщението на „--fixup“ и указването на път „%s“ са "
+"несъвместими"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"опцията за промяна на съобщението на „--fixup“ и „--patch“/„--interactive“/"
+"„--all“/„--include“/„--only“ са несъвместими"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
-msgstr "Опциите „--reset-author“ и „--author“ са несъвместими."
+msgstr "опциите „--reset-author“ и „--author“ са несъвместими."
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "Няма какво да бъде поправено."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
-msgstr "В момента се извършва сливане, не можете да поправяте."
+msgstr "В момента се извършва сливане, не може да поправяте."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
-msgstr "В момента се извършва отбиране на подаване, не можете да поправяте."
+msgstr "В момента се извършва отбиране на подаване, не може да поправяте."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
-msgstr "В момента се извършва пребазиране, не можете да поправяте."
+msgstr "В момента се извършва пребазиране, не може да поправяте."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
-msgstr "Опциите „--squash“ и „--fixup“ са несъвместими."
+msgstr "опциите „--squash“ и „--fixup“ са несъвместими."
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
+msgstr "опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "Опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
+msgstr "опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
-"Опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
+"опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
 "„--amend“."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
-"Опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
+"опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
 "несъвместими."
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "непозната опция: --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "опцията „-a“ е несъвместима със задаването на пътища: „%s…“"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "кратка информация за състоянието"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "информация за клоните"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "информация за скатаното"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "изчисляване на точните стойности напред/назад"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "версия"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "формат на изхода за четене от програма"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "подробна информация за състоянието (стандартно)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "разделяне на елементите с нулевия знак „NUL“"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "РЕЖИМ"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "извеждане на неследените файлове.  Възможните РЕЖИМи са „all“ (подробна "
 "информация), „normal“ (кратка информация), „no“ (без неследените файлове).  "
 "Стандартният РЕЖИМ е: „all“."
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13719,11 +14223,11 @@
 "„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
 "файлове).  Стандартният РЕЖИМ е: „traditional“."
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "КОГА"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13732,176 +14236,197 @@
 "една от „all“ (всички), „dirty“ (тези с неподадени промени), "
 "„untracked“ (неследени)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "извеждане на неследените файлове в колони"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "без засичане на преименуванията"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "засичане на преименуванията, може да се зададе коефициент на прилика"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "Неподдържана комбинация от аргументи за игнорирани и неследени файлове"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "без информация след успешно подаване"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "добавяне на разликата към шаблона за съобщението при подаване"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Опции за съобщението при подаване"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "взимане на съобщението от ФАЙЛ"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "АВТОР"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "задаване на АВТОР за подаването"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "ДАТА"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "задаване на ДАТА за подаването"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "ПОДАВАНЕ"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "преизползване на съобщението от указаното ПОДАВАНЕ"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]подаване"
+
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
-"предходното без следа"
+"предходното без следа или за промяна на подаването или съобщението"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
 "предното"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "епилог"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "добовяне на друг епилог"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "добавяне на епилог за подпис „Signed-off-by“"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "използване на указания шаблонен ФАЙЛ"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "редактиране на подаване"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "вмъкване на състоянието в шаблона за съобщението при подаване"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Опции за избор на файлове при подаване"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "подаване на всички променени файлове"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "добавяне на указаните файлове към индекса за подаване"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "интерактивно добавяне на файлове"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "интерактивно добавяне на промени"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "подаване само на указаните файлове"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr ""
 "без изпълнение на куките преди подаване и при промяна на съобщението за "
 "подаване (pre-commit и commit-msg)"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "отпечатване на това, което би било подадено"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "поправяне на предишното подаване"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "без изпълнение на куката след презаписване (post-rewrite)"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "позволяване на празни подавания"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "позволяване на подавания с празни съобщения"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "съобщението за подаване не може да бъде прочетено: %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Неизвършване на подаване поради празно съобщение.\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Неизвършване на подаване поради нередактирано съобщение.\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "Неизвършване на подаване поради празно съобщение.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14239,7 +14764,7 @@
 "cannot overwrite multiple values with a single value\n"
 "       Use a regexp, --add or --replace-all to change %s."
 msgstr ""
-"множество стойности не могат да се заменят с една.\n"
+"множество стойности не може да се замени с една.\n"
 "За да промените „%s“, ползвайте регулярен израз или опциите „--add“ и „--"
 "replace-all“."
 
@@ -14256,7 +14781,7 @@
 msgid "print sizes in human readable format"
 msgstr "извеждане на размерите на обектите във формат лесно четим от хора"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -14266,16 +14791,16 @@
 msgstr ""
 "Правата за достъп до директорията за програмните гнезда са прекалено "
 "свободни —\n"
-"другите потребители могат да получат достъп до кешираните ви пароли.  За да\n"
+"другите потребители може да получат достъп до кешираните ви пароли.  За да\n"
 "коригирате това, изпълнете:\n"
 "\n"
 "    chmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "извеждане на съобщенията за трасиране на стандартната грешка"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
 "демонът за кеша с идентификациите е недостъпен — липсва поддръжка на гнезда "
@@ -14446,7 +14971,7 @@
 
 #: builtin/describe.c:593
 msgid "--long is incompatible with --abbrev=0"
-msgstr "Опциите „--long“ и „--abbrev=0“ са несъвместими"
+msgstr "опциите „--long“ и „--abbrev=0“ са несъвместими"
 
 #: builtin/describe.c:622
 msgid "No names found, cannot describe anything."
@@ -14468,70 +14993,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "опцията „--merge-base“ изисква точно две подавания"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "„%s“: не е нито обикновен файл, нито символна връзка"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "неправилна опция: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "„%s..%s“: липсва база за сливане"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "Не е хранилище на Git"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "зададен е неправилен обект „%s“."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "зададени са повече от 2 обекта-BLOB: „%s“"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "зададен е неподдържан обект „%s“."
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: много бази за сливане, ще се ползва „%s“"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [ОПЦИЯ…] [ПОДАВАНЕ [ПОДАВАНЕ]] [[--] ПЪТ…]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "неуспешно действие с изходен код: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "символната връзка „%s“ не може да бъде прочетена"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "файлът, сочен от символната връзка „%s“, не може да бъде прочетен"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "обектът „%s“ за символната връзка „%s“ не може да бъде прочетен"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14539,55 +15064,55 @@
 "комбинираните формати на разликите („-c“ и „--cc“) не се поддържат\n"
 "в режима за разлики върху директории („-d“ и „--dir-diff“)."
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "и двата файла са променени: „%s“ и „%s“."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "работното дърво е изоставено."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "в „%s“ има временни файлове."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "възможно е да ги изчистите или възстановите"
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "използвайте „diff.guitool“ вместо „diff.tool“"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "разлика по директории"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "стартиране на ПРОГРАМАта за разлики без предупреждение"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "следване на символните връзки при разлика по директории"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "ПРОГРАМА"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "използване на указаната ПРОГРАМА"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "извеждане на списък с всички ПРОГРАМи, които може да се ползват с опцията „--"
 "tool“"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -14595,31 +15120,31 @@
 "„git-difftool“ да спре работа, когато стартираната ПРОГРАМА завърши с "
 "ненулев код"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "команда за разглеждане на разлики"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "подава се към „diff“"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "„git-difftool“ изисква работно дърво или опцията „--no-index“"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "опциите „--dir-diff“ и „--no-index“ са несъвместими"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "опциите „--gui“, „--tool“ и „--extcmd“ са несъвместими една с друга"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "не е зададена програма за „--tool=ПРОГРАМА“"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "не е зададена команда за „--extcmd=КОМАНДА“"
 
@@ -14686,40 +15211,41 @@
 "как да се обработват съобщенията за подаване, които са в друго кодиране"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "Запазване на маркерите в този ФАЙЛ"
+msgid "dump marks to this file"
+msgstr "запазване на маркерите в този ФАЙЛ"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
-msgstr "Внасяне на маркерите от този ФАЙЛ"
+msgid "import marks from this file"
+msgstr "внасяне на маркерите от този ФАЙЛ"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "Внасяне на маркерите от този ФАЙЛ, ако съществува"
+msgid "import marks from this file if it exists"
+msgstr "внасяне на маркерите от този ФАЙЛ, ако съществува"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "Да се използва изкуствено име на човек при липса на задаващ етикета"
+msgid "fake a tagger when tags lack one"
+msgstr ""
+"да се използва изкуствено име на човек при липса на създател на етикета"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "Извеждане на цялото дърво за всяко подаване"
+msgid "output full tree for each commit"
+msgstr "извеждане на цялото дърво за всяко подаване"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "Използване на маркер за завършване на потока"
+msgid "use the done feature to terminate the stream"
+msgstr "използване на маркер за завършване на потока"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "Без извеждане на съдържанието на обектите-BLOB"
+msgid "skip output of blob data"
+msgstr "без извеждане на съдържанието на обектите-BLOB"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "УКАЗАТЕЛ_НА_ВЕРСИЯ"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "Прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
+msgid "apply refspec to exported refs"
+msgstr "прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към изнесените указатели"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14734,18 +15260,18 @@
 msgstr "заместване ОТ със КЪМ в анонимизирания изход"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
-"Указване на родителите, които не са в потока на бързо изнасяне, с "
+"указване на родителите, които не са в потока на бързо изнасяне, с "
 "идентификатор на обект"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "Извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
+msgid "show original object ids of blobs/commits"
+msgstr "извеждане на първоначалните идентификатори на обектите BLOB/подавяния"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "Задаване на идентификатори на маркери на етикетите"
+msgid "label tags with mark ids"
+msgstr "задаване на идентификатори на маркери на етикетите"
 
 #: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
@@ -14777,14 +15303,14 @@
 
 #: builtin/fast-import.c:3322
 msgid "Expected format name:filename for submodule rewrite option"
-msgstr "Опцията за презапис на подмодул изисква формат: име:име_на_файл"
+msgstr "опцията за презапис на подмодул изисква формат: име:име_на_файл"
 
 #: builtin/fast-import.c:3377
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "„%s“ изисква изричното задаване на опцията „--allow-unsafe-features“"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Заключващият файл е създаден, но не е докладван: „%s“"
@@ -14805,94 +15331,104 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [ОПЦИЯ…]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "опцията „fetch.parallel“ трябва да е неотрицателна"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "доставяне от всички отдалечени хранилища"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "задаване на клон за следене за издърпване/доставяне"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "изискване на атомарни операции за обновяване на указателите"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "отдалечен път, където да се качи пакетът"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "принудително презаписване на локален указател"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "доставяне от множество отдалечени хранилища"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "доставяне на всички етикети и принадлежащи обекти"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "без доставянето на всички етикети „--no-tags“"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "брой подмодули доставени паралелно"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+"промяна на указателя, така че и той, както останалите, да бъде в „refs/"
+"prefetch/“"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "окастряне на локалните етикети, които вече не съществуват в отдалеченото "
 "хранилище и презаписване на променените"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "ПРИ НУЖДА"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "управление на рекурсивното доставяне на подмодулите"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "запазване на доставените указатели във файла „FETCH_HEAD“"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "запазване на изтеглените пакети с обекти"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "позволяване на обновяването на указателя „HEAD“"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "задълбочаване на историята на плитко хранилище"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "задълбочаване на историята на плитко хранилище до определено време"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "превръщане в пълно хранилище"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "добавяне на това пред пътя на подмодула"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14900,98 +15436,104 @@
 "стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
 "приоритет)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "приемане на указатели, които обновяват „.git/shallow“"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "КАРТА_С_УКАЗАТЕЛИ"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
-msgstr "докладване, че всички обекти могат са достижими при започване от този"
+msgstr "докладване, че всички обекти може са достижими при започване от този"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+"без доставяне на пакетни файлове, вместо това да се извеждат предшественици "
+"на договорните върхове"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "изпълняване на „maintenance --auto“ след доставяне"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "проверка за принудителни обновявания на всички клони"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "запазване на гра̀фа с подаванията след доставяне"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "четене на указателите от стандартния вход"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "обектът „%s“ липсва"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[актуален]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[отхвърлен]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "в текущия клон не може да се доставя"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[обновяване на етикетите]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "локален указател не може да бъде обновен"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "съществуващ етикет ще бъде презаписан"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[нов етикет]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[нов клон]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[нов указател]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "принудително обновяване"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "същинско сливане"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -15002,7 +15544,7 @@
 "\n"
 "    git config fetch.showForcedUpdates true"
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -15016,84 +15558,84 @@
 "\n"
 "    git config fetch.showForcedUpdates false\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
-"отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат "
+"отхвърляне на върха „%s“, защото плитките хранилища не може да бъдат "
 "обновявани"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "От %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
-"някои локални указатели не могат да бъдат обновени.  Изпълнете командата\n"
+"някои локални указатели не може да бъдат обновени.  Изпълнете командата\n"
 "„git remote prune %s“, за да премахнете остарелите клони, които\n"
 "предизвикват конфликта"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (обектът „%s“ ще се окаже извън клон)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (обектът „%s“ вече е извън клон)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[изтрит]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(нищо)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
-msgstr "Опцията „%s“ се прескача при „%s“\n"
+msgstr "опцията „%s“ се прескача при „%s“\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr ""
 "засечени са множество клони, това е несъвместимо с опцията „--set-upstream“"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "не може да указвате клон за следене на отдалечен етикет"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "не може да указвате клон за следене на отдалечен етикет"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "непознат вид клон"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -15101,22 +15643,22 @@
 "не е открит клон за следене.\n"
 "Трябва изрично да зададете един клон с опцията „--set-upstream option“."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Доставяне на „%s“\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "„%s“ не може да се достави"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "„%s“ не може да се достави (изходният код е: %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -15124,45 +15666,52 @@
 "Не сте указали отдалечено хранилище.  Задайте или адрес, или име\n"
 "на отдалечено хранилище, откъдето да се доставят новите версии."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Трябва да укажете име на етикет."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "опциите „--deepen“ и „--depth“ са несъвместими"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
-msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище"
+msgstr "не може да използвате опцията „--unshallow“ върху пълно хранилище"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
-msgstr "към „git fetch --all“ не можете да добавите аргумент — хранилище"
+msgstr "към „git fetch --all“ не може да добавите аргумент-хранилище"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
-msgstr ""
-"към „git fetch --all“ не можете да добавите аргумент — указател на версия"
+msgstr "към „git fetch --all“ не може да добавите аргумент-указател на версия"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Указването на група и указването на версия са несъвместими"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "опцията „--negotiate-only“ изисква хранилище"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Протоколът не поддържа опцията „--negotiate-only“, изход от прогамата."
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15170,7 +15719,12 @@
 "опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
 "настройката „extensions.partialClone“"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr ""
+"опцията „--atomic“ поддържа доставяне само от едно отдалечено хранилище"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "опцията „--stdin“ поддържа доставяне само от едно отдалечено хранилище"
 
@@ -15218,47 +15772,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [ПОДАВАНЕ]] [--no-contains [ПОДАВАНЕ]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "цитиране подходящо за командни интерпретатори на обвивката"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "цитиране подходящо за perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "цитиране подходящо за python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "цитиране подходящо за tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "извеждане само на този БРОЙ напаснати указатели"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "спазване на цветовете на форма̀та"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "извеждане само на указателите, сочещи към ОБЕКТА"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "извеждане само на слетите указатели"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "извеждане само на неслетите указатели"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "извеждане само на указателите, които съдържат това ПОДАВАНЕ"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "извеждане само на указателите, които не съдържат това ПОДАВАНЕ"
 
@@ -15278,32 +15832,32 @@
 msgid "missing --config=<config>"
 msgstr "липсва --config=НАСТРОЙКА"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "непознат"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "грешка в %s „%s“: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "предупреждение за %s „%s“: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "скъсана връзка от %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "неправилен вид обект във връзката"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -15312,212 +15866,212 @@
 "скъсана връзка от %7s %s\n"
 "              към %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "липсващ обект: %s „%s“"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "недостижим обект: %s „%s“"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "извън клон: %s „%s“"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "„lost-found“ не може да се създаде"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "„%s“ не може да се завърши"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "Проверка на „%s“"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Проверка на свързаността (%d обекта)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "Проверяване на %s „%s“"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "скъсани връзки"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "начална директория „%s“"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "приложен етикет „%s“ върху „%s“ (%s) в „%s“"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: липсващ или повреден обект"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: неправилен запис в журнала за указатели „%s“"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Проверка на журнала на указателите: „%s“ до „%s“"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "„%s“: неправилен указател за SHA1: „%s“"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: не е подаване!"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "внимание: няма указатели по подразбиране"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "„%s“: липсващ обект: „%s“"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "„%s“: не може да се анализира: „%s“"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "неправилен ред с контролна сума по SHA1: „%s“"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Проверка на директория с обекти"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Проверка на директориите с обекти"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "Проверка на връзките на „%s“"
 
 #
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "неправилен указател „%s“"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "„%s“ сочи към нещо необичайно (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: несвързаният връх „HEAD“ не сочи към нищо"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "предупреждение: „%s“ сочи към все още несъществуващ клон (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Проверка на дървото на кеша"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "„%s“: неправилен указател за SHA1 в дървото на кеша"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "в дървото на кеша има нещо, което не е дърво"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "показване на недостижимите обекти"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "показване на обектите извън клоните"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "показване на етикетите"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "показване на кореновите възли"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "задаване на обекти от индекса да са коренови"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "проследяване и на указателите от журнала с указателите (стандартно)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "допълнително да се проверяват пакетите и алтернативните обекти"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "проверка само на връзката"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "по-строги проверки"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "запазване на обектите извън клоните в директорията „.git/lost-found“"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "показване на напредъка"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "показване на подробни имена на достижимите обекти"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Проверка на обектите"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "„%s“: липсващ обект"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "неправилен параметър: очаква се SHA1, а бе получено: „%s“"
@@ -15526,27 +16080,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [ОПЦИЯ…]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Неуспешно изпълнение на „fstat“ върху „%s“: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "стойността на „%s“ — „%s“ не може да се анализира"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "не може да се получи информация чрез „stat“ за директорията „%s“"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "файлът „%s“ не може да бъде прочетен"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15563,58 +16117,58 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "окастряне на обектите, към които нищо не сочи"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "изчерпателно търсене на боклука (за сметка на повече време работа)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "включване на автоматичното събиране на боклука (auto-gc)"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 "изрично стартиране на събирането на боклука, дори и ако вече работи друго "
 "събиране"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "препакетиране на всичко без най-големия пакет"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "неразпозната стойност на „gc.logexpiry“ %s"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "неразпозната стойност на периода за окастряне: %s"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Автоматично пакетиране на заден фон на хранилището за по-добра "
 "производителност.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Автоматично пакетиране на хранилището за по-добра производителност.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr ""
 "Погледнете ръководството за повече информация как да изпълните „git help "
 "gc“.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15623,148 +16177,175 @@
 "процеса: %<PRIuMAX> (ако сте сигурни, че това не е вярно, това използвайте\n"
 "опцията „--force“)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Има прекалено много недостижими, непакетирани обекти.\n"
 "Използвайте „git prune“, за да ги окастрите."
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=ЗАДАЧА] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "опцията „--no-schedule“ не е позволена"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "непознат аргумент към „--schedule“: %s"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "графът с подаванията не може да бъде записан"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "неуспешно попълване на следящите клони"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "неуспешно предварително доставяне на отдалечените клони"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "процесът за командата „git pack-objects“ не може да бъде стартиран"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "процесът за командата „git pack-objects“ не може да завърши"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "индексът за множество пакети не може да бъде записан"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "неуспешно изпълнение на „git multi-pack-index expire“"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "неуспешно изпълнение на „git multi-pack-index repack“"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 "задачата „incremental-repack“ се прескача, защото настройката „core."
 "multiPackIndex“ е изключена"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "заключващият файл „%s“ съществува.  Действието се прескача"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "неуспешно изпълнение на задачата „%s“"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "„%s“ не е правилна задача"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "задачата „%s“ не може да се избере повече от веднъж"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "изпълняване на задачи според състоянието на хранилището"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "честота"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "изпълняване на задачи по график"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "без извеждане на напредъка и друга информация на стандартния изход"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "задача"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "изпълнение на определена задача"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr ""
 "може да се указва максимум една от опциите „--auto“ и „--schedule=ЧЕСТОТА“"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "неуспешно изпълнение на „git config“"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "друг процес задава поддръжката на заден фон"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "грешка при заместването на пътя „%s“"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "неуспешно стартиране на „launchctl“."
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "директориите за „%s“ не може да бъдат създадени"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "услугата „%s“ не може се настрои първоначално"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "неуспешно създаване на временен файл за xml"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "задачите за периодично изпълнение не може да се стартират"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 "неуспешно изпълнение на „crontab -l“.  Системата ви може да не поддържа "
 "„cron“"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr ""
 "неуспешно изпълнение на „crontab“.  Системата ви може да не поддържа „cron“"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "стандартният вход на „crontab“ не може да се отвори"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "процесът на „crontab“ умря"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "друг процес задава поддръжката на заден фон"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "неуспешно добавяне на хранилище към файла с глобални настройки"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance ПОДКОМАНДА [ОПЦИЯ…]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "неправилна подкоманда: „%s“"
@@ -15773,12 +16354,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [ОПЦИЯ…] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: неуспешно създаване на нишка: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "зададен е неправилен брой нишки (%d) за %s"
@@ -15787,212 +16368,208 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "липсва поддръжка за нишки.  „%s“ ще се пренебрегне"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "дървото не може да бъде прочетено (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "не може да се изпълни „grep“ от обект от вида %s"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "опцията „%c“ очаква число за аргумент"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "търсене в индекса, а не в работното дърво"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "търсене и във файловете, които не са под управлението на git"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "търсене и в следените, и в неследените файлове"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "игнориране на файловете указани в „.gitignore“"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "рекурсивно търсене във всички подмодули"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "извеждане на редовете, които не съвпадат"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "без значение на регистъра на буквите (главни/малки)"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "напасване на шаблоните само по границите на думите"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "обработване на двоичните файлове като текстови"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "прескачане на двоичните файлове"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr ""
 "обработване на двоичните файлове чрез филтри за преобразуване към текст"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "търсене в поддиректориите (стандартно)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "разширени регулярни изрази по POSIX"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "основни регулярни изрази по POSIX (стандартно)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "шаблоните са дословни низове"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "регулярни изрази на Perl"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "извеждане на номерата на редовете"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "извеждане на номера на колоната на първото напасване"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "без извеждане на имената на файловете"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "извеждане на имената на файловете"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr ""
 "извеждане на относителните имена на файловете спрямо основната директория на "
 "хранилището"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "извеждане само на имената на файловете без напасващите редове"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "псевдоним на „--files-with-matches“"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr ""
 "извеждане само на имената на файловете, които не съдържат ред, напасващ на "
 "шаблона"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "извеждане само на частите на редовете, които съвпадат"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "извеждане на броя на съвпаденията вместо напасващите редове"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "оцветяване на напасванията"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "извеждане на празен ред между напасванията от различни файлове"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr ""
 "извеждане на името на файла само веднъж за всички напасвания от този файл"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "извеждане на такъв БРОЙ редове преди и след напасванията"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "извеждане на такъв БРОЙ редове преди напасванията"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "извеждане на такъв БРОЙ редове след напасванията"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "използване на такъв БРОЙ работещи нишки"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "псевдоним на „-C БРОЙ“"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "извеждане на обхващащата функция"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "изчитане на шаблоните от ФАЙЛ"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "напасване на ШАБЛОН"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "комбиниране на шаблоните указани с опцията „-e“"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr ""
 "без извеждане на стандартния изход.  Изходният код указва наличието на "
 "напасване"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "извеждане на редове само от файловете, които напасват на всички шаблони"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "извеждане на дървото за анализ на регулярния израз"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "програма за преглед по страници"
@@ -16028,11 +16605,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "неправилна комбинация от опции, „--threads“ ще се пренебрегне"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "липсва поддръжка за нишки.  „--threads“ ще се пренебрегне"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "зададен е неправилен брой нишки: %d"
@@ -16045,13 +16622,17 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "опциите „--untracked“ и „--cached“ са несъвместими"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени "
 "файлове"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "опцията „--cached“ е несъвместима със задаване на дърво"
 
@@ -16186,12 +16767,12 @@
 "никоя програма за преглед на информационните страници не успя да обработи "
 "заявката"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "„%s“ е псевдоним на „%s“"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "неправилен низ за настройката „alias.%s“: „%s“"
@@ -16205,404 +16786,404 @@
 msgid "'git help config' for more information"
 msgstr "За повече информация изпълнете „git help config“"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "неправилен вид на обекта „%s“"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "очакваният обект „%s“ не бе получен"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "неправилен вид на обекта „%s“: очакваше се „%s“, а бе получен „%s“"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "не може да се запълни %d байт"
 msgstr[1] "не може да се запълнят %d байта"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "неочакван край на файл"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "грешка при четене на входните данни"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "използвани са повече от наличните байтове"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "пакетният файл е прекалено голям за текущата стойност на типа „off_t“"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "пакетният файл надвишава максималния възможен размер"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "пакетният файл „%s“ не може да бъде създаден"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "пакетният файл „%s“ не може да бъде отворен"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "несъответствие в подписа към пакетния файл"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "не се поддържа пакетиране вeрсия „%<PRIu32>“"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "повреден обект в пакетния файл при отместване %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "декомпресирането с „inflate“ върна %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "стойността на отместването за обекта-разлика води до препълване"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "стойността на отместването за обекта-разлика е извън диапазона"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "непознат вид обект %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "пакетният файл не може да бъде прочетен"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, 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:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "сериозна грешка при декомпресиране с „inflate“"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr ""
 "СЪВПАДЕНИЕ НА СТОЙНОСТИТЕ ЗА СУМИТЕ ЗА SHA1: „%s“ НА ДВА РАЗЛИЧНИ ОБЕКТА!"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "обектът „%s“ не може да бъде прочетен"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "съществуващият обект в „%s“ не може да бъде прочетен"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "съществуващият обект „%s“ не може да бъде прочетен"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "неправилен обект-BLOB „%s“"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "грешка при проверката на пакетирани обекти"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
-msgstr "Някои обекти, наследници на „%s“, не могат да бъдат достигнати"
+msgstr "Някои обекти, наследници на „%s“, не може да бъдат достигнати"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "разликата не може да бъде приложена"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Получаване на обекти"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Индексиране на обекти"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "пакетният файл е повреден (нееднакви суми по SHA1)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "не може да се получи информация за пакетния файл с „fstat“"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "в края на пакетния файл има повредени данни"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr ""
 "фатална грешка във функцията „parse_pack_objects“.  Това е грешка в Git, "
 "докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger."
 "kernel.org“."
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Откриване на съответните разлики"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "не може да се създаде нишка: %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr ""
 "фатална грешка във функцията „conclude_pack“.  Това е грешка в Git, "
 "докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger."
 "kernel.org“."
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, 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:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr ""
 "Неочаквана последваща сума за грешки за „%s“ (причината може да е грешка в "
 "диска)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, 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:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "добавеният обект не може да се компресира с „deflate“: %d"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "локалният обект „%s“ е повреден"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "името на пакетния файл „%s“ не завършва на „.pack“"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "името на пакетния файл „%s“ не завършва с „%s“"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "грешка при запис на файла „%s“ „%s“"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "грешка при затварянето на записания файл „%s“ „%s“"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "грешка при затварянето на пакетния файл"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "пакетният файл не може да бъде запазен"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "файлът за индекса не може да бъде съхранен"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%<PRIu32>“"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Съществуващият пакетен файл „%s“ не може да бъде отворен"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Съществуващият индекс за пакетния файл „%s“ не може да бъде отворен"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "%d обект не е разлика"
 msgstr[1] "%d обекта не са разлика"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, 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:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "Процесът не може да се върне към предишната работна директория"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "неправилна стойност „%s“"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "непознат алгоритъм за контролни суми „%s“"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "опцията „--fix-thin“ изисква „--stdin“"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "„--stdin“ изисква хранилище на git"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "опцията „--object-format“ и „--stdin“ са несъвместими"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "опцията „--verify“ изисква име на пакетен файл"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "грешка при проверка с „fsck“ на пакетните обекти"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "не може да се получи информация чрез „stat“ за шаблона „%s“"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "директорията „%s“ не може да бъде отворена"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "връзката „%s“ не може да бъде прочетена"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "не може да се създаде символна връзка „%s“ в „%s“"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "„%s“ не може да се копира в „%s“"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "игнориране на шаблона „%s“"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "няма шаблони в „%s“"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "шаблоните няма да бъдат копирани от „%s“: „%s“"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "неправилно име на първоначалния клон: „%s“"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "файлове от вид %d не се поддържат"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "„%s“ не може да се премести в „%s“"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr ""
 "опит за повторно задаване на първото подаване в хранилището с различна "
 "контролна сума"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "Директорията „%s“ вече съществува"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init: „--initial-branch=%s“ се пропуска"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr ""
 "Инициализиране наново на съществуващо, споделено хранилище на Git в „%s%s“\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Инициализиране наново на съществуващо хранилище на Git в „%s%s“\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Инициализиране на празно, споделено хранилище на Git в „%s%s“\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Инициализиране на празно хранилище на Git в „%s%s“\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -16610,43 +17191,43 @@
 "git init [-q | --quiet] [--bare] [--template=ДИРЕКТОРИЯ_С_ШАБЛОНИ] [--"
 "shared[=ПРАВА]] [ДИРЕКТОРИЯ]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "права"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr ""
 "указване, че хранилището на Git ще бъде споделено от повече от един "
 "потребител"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "задаване на името на първоначалния клон"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "алгоритъм"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "указване на алгоритъм за контролна сума"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "опциите „--separate-git-dir“ и „--bare“ са несъвместими"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "не може да се влезе в директорията „%s“"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -16655,12 +17236,12 @@
 "%s (или --work-tree=ДИРЕКТОРИЯ) изисква указването на %s (или --git-"
 "dir=ДИРЕКТОРИЯ)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Работното дърво в „%s“ е недостъпно"
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "опцията „--separate-git-dir“ е несъвместима с голо хранилище"
 
@@ -16712,10 +17293,6 @@
 msgid "do not treat --- specially"
 msgstr "„---“ няма специално значение"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "епилог"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "епилози за добавяне"
@@ -16728,132 +17305,132 @@
 msgid "no input file given for in-place editing"
 msgstr "не е зададен входен файл за редактиране на място"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [ОПЦИЯ…] [ДИАПАЗОН_НА_ВЕРСИИТЕ] [[--] ПЪТ…]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [ОПЦИЯ…] ОБЕКТ…"
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "неправилна опция „--decorate“: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "извеждане на изходния код"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
 msgstr ""
-"Използване на файл за съответствията на имената и адресите на е-поща („."
+"използване на файл за съответствията на имената и адресите на е-поща („."
 "mailmap“)"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "специален формат само на указателите напасващи на ШАБЛОНа"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "без специален формат на указателите напасващи на ШАБЛОНа"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "настройки на форма̀та на извежданата информация"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
-"Проследяване на еволюцията на диапазона от редове НАЧАЛО,КРАЙ или :ФУНКЦИЯта "
+"проследяване на еволюцията на диапазона от редове НАЧАЛО,КРАЙ или :ФУНКЦИЯта "
 "във ФАЙЛа"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "опцията „-LДИАПАЗОН:ФАЙЛ“ не може да се ползва с път"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Резултат: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: повреден файл"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "обектът не може да бъде прочетен: %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "неизвестен вид: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: неправилно придружаващо писмо от режима на описание"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "не е зададена стойност на „format.headers“"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "файлът-кръпка „%s“ не може да бъде отворен"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "трябва да зададете точно един диапазон"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "не е диапазон"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "придружаващото писмо трябва да е форматирано като е-писмо"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "неуспешно създаване на придружаващо писмо"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "неправилен формат на заглавната част за отговор „in-reply-to“: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [ОПЦИЯ…] [ОТ | ДИАПАЗОН_НА_ВЕРСИИТЕ]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "може да укажете максимум една директория за изход"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "непознато подаване: „%s“"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "„%s“ не е указател или не сочи към нищо"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "точната база за сливане не може да бъде открита"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16861,305 +17438,310 @@
 msgstr ""
 "следеният клон не може да бъде установен.  Ако искате ръчно да го\n"
 "зададете, използвайте „git branch --set-upstream-to“.\n"
-"Можете ръчно да зададете базово подаване чрез „--base=<base-commit-id>“."
+"Може ръчно да зададете базово подаване чрез „--"
+"base=<ИДЕНТИФИКАТОР_НА_БАЗОВО_ПОДАВАНЕ>“."
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "точната база при сливане не може да бъде открита"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "базовото подаване трябва да е предшественикът на списъка с версиите"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "базовото подаване не може да е в списъка с версиите"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "идентификаторът на кръпката не може да бъде получен"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 "неуспешно определяне на началото на диапазонната разлика на текущата поредица"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 "„%s“ се ползва като началото на диапазонната разлика на текущата поредица"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "номерация „[PATCH n/m]“ дори и при единствена кръпка"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "номерация „[PATCH]“ дори и при множество кръпки"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "извеждане на кръпките на стандартния изход"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "създаване на придружаващо писмо"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "проста числова последователност за имената на файловете-кръпки"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "ЗНАЦИ"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "използване на тези ЗНАЦИ за суфикс вместо „.patch“"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "номерирането на кръпките да започва от този БРОЙ, а не с 1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "номер на редакция"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "отбелязване, че това е N-тата поредна редакция на поредицата от кръпки"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "максимална дължина на име на всеки пакетен файл"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Използване на „[RFC PATCH]“ вместо „[PATCH]“"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "използване на „[RFC PATCH]“ вместо „[PATCH]“"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "режим-придружаващо-писмо-по-описание"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "генериране на частите на придружаващото писмо на базата на описанието на "
 "клона"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Използване на този „[ПРЕФИКС]“ вместо „[PATCH]“"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "използване на този „[ПРЕФИКС]“ вместо „[PATCH]“"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "запазване на изходните файлове в тази ДИРЕКТОРИЯ"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "без добавяне/махане на префикса „[PATCH]“"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "без извеждане на разлики между двоични файлове"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "в заглавната част „From:“ (от) контролната сума да е само от нули"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "без кръпки, които присъстват в следения клон"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "извеждане във формат за кръпки, а на в стандартния (кръпка и статистика)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "Опции при изпращане"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "ЗАГЛАВНА_ЧАСТ"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "добавяне на тази ЗАГЛАВНА_ЧАСТ"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "Е-ПОЩА"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "добавяне на заглавна част „To:“ (до)"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "добавяне на заглавна част „Cc:“ (и до)"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "ИДЕНТИЧНОСТ"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "задаване на адреса в заглавната част „From“ (от) да е тази ИДЕНТИЧНОСТ.  Ако "
 "не е зададена такава, се взима адреса на подаващия"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr ""
 "първото съобщение да е в отговор на е-писмото с този "
 "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "граница"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "прикрепяне на кръпката"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "включване на кръпката в текста на писмата"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 "използване на нишки за съобщенията.  СТИЛът е „shallow“ (плитък) или "
 "„deep“ (дълбок)"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "подпис"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "добавяне на поле за подпис"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "БАЗОВО_ПОДАВАНЕ"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "добавяне на необходимото БАЗово дърво към поредицата от кръпки"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "добавяне на подпис от файл"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "без извеждане на имената на кръпките"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "извеждане на напредъка във фазата на създаване на кръпките"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "показване на промените спрямо ВЕРСията в придружаващото писмо или единствена "
 "кръпка"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "показване на промените спрямо указателя на ВЕРСията в придружаващото писмо "
 "или единствена кръпка"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "процент за претегляне при оценка на създаването"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "грешна идентичност: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "опциите „-n“ и „-k“ са несъвместими"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "опцията „--name-only“ е несъвместима с генерирането на кръпки"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "опцията „--name-status“ е несъвместима с генерирането на кръпки"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "опцията „--check“ е несъвместима с генерирането на кръпки"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr ""
-"Опциите „--stdout“, „--output“ и „--output-directory“ са несъвместими една с "
+"опциите „--stdout“, „--output“ и „--output-directory“ са несъвместими една с "
 "друга"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 "опцията „--interdiff“ изисква опция „--cover-letter“ или единствена кръпка"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Разлика в разликите:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Разлика в разликите спрямо v%d:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "опцията „--creation-factor“ изисква опция „--range-diff“"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 "опцията „--range-diff“ изисква опция „--cover-letter“ или единствена кръпка"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Диапазонна разлика:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Диапазонна разлика спрямо v%d:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "файлът „%s“ с подпис не може да бъде прочетен"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Създаване на кръпки"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "неуспешно създаване на изходни файлове"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [ОТДАЛЕЧЕН_КЛОН [ВРЪХ [ПРЕДЕЛ]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17167,112 +17749,116 @@
 "Следеният отдалечен клон не бе открит, затова изрично задайте "
 "ОТДАЛЕЧЕН_КЛОН.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [ОПЦИЯ…] [ФАЙЛ…]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "извеждане на състоянието на файловете с еднобуквени флагове"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "малки букви за файловете, които да се счетат за непроменени"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "малки букви за файловете за командата „fsmonitor clean“"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "извеждане на кешираните файлове (стандартно)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "извеждане на изтритите файлове"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "извеждане на променените файлове"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "извеждане на другите файлове"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "извеждане на игнорираните файлове"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "извеждане на името на обекта за съдържанието на индекса"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "извеждане на файловете, които трябва да бъдат изтрити"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "извеждане само на името на другите (неследените) директории"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "извеждане на знаците за край на ред във файловете"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "без извеждане на празните директории"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "извеждане на неслетите файлове"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "извеждане на информацията за отмяна на разрешените подавания"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "прескачане на файловете напасващи ШАБЛОНа"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "шаблоните за игнориране да се прочетат от този ФАЙЛ"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr ""
 "изчитане на допълнителните шаблони за игнориране по директория от този ФАЙЛ"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "добавяне на стандартно игнорираните от Git файлове"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "пътищата да са относителни спрямо основната директория на проекта"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "рекурсивно обхождане подмодулите"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "грешка, ако някой от тези ФАЙЛове не е в индекса"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "УКАЗАТЕЛ_КЪМ_ДЪРВО"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 "считане, че пътищата изтрити след УКАЗАТЕЛя_КЪМ_ДЪРВО все още съществуват"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "извеждане на информацията за изчистване на грешки"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "без повтаряне на записите"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -17283,39 +17869,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "без извеждане на адресите на отдалечените хранилища"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "КОМАНДА"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "път към командата „git-upload-pack“ на отдалечената машина"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "само етикетите"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "само върховете"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "без проследяване на непреките етикети"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "взимане предвид на „url.БАЗА.insteadOf“"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "изход с код 2, ако не се открият съвпадащи указатели"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "извеждане на указателя заедно с обекта сочен от него"
 
@@ -17357,6 +17943,60 @@
 "извеждане на цялото дърво, не само на текущата директория (включва опцията "
 "„--full-name“)"
 
+#. 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  ПЪТ ПЪТ"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "запазване на темата"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "запазване на допълнителните квадратни скоби в темата"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr ""
+"копиране на идентификатора на съобщение „Message-ID“ в края на съобщението "
+"при подаване"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr ""
+"прекодиране на метаданните към зададеното в „i18n.commitEncoding“ кодиране"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "без прекодиране на метаданните"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "кодиране"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "прекодиране на метаданните към това кодиране"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "ножици"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "ДЕЙСТВИЕ"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "ДЕЙСТВИЕ при намирането на цитиран знак за нов ред"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "заглавни части в тялото на писмото"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -17474,196 +18114,196 @@
 msgid "Merging %s with %s\n"
 msgstr "Сливане на „%s“ с „%s“\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [ОПЦИЯ…] [ПОДАВАНЕ…]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "опцията „-m“ изисква стойност"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "опцията „%s“ изисква стойност"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Няма такава стратегия за сливане: „%s“.\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Наличните стратегии са:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Допълнителните стратегии са:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "без извеждане на статистиката след завършване на сливане"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "извеждане на статистиката след завършване на сливане"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(псевдоним на „--stat“)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението "
 "за подаване"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "създаване на едно подаване вместо извършване на сливане"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "извършване на подаване при успешно сливане (стандартно действие)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "редактиране на съобщението преди подаване"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "позволяване на превъртане (стандартно действие)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "преустановяване, ако превъртането е невъзможно"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "проверка, че указаното подаване е с правилен подпис на GPG"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "СТРАТЕГИЯ"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "СТРАТЕГИЯ за сливане, която да се ползва"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "ОПЦИЯ=СТОЙНОСТ"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "ОПЦИЯ за избраната стратегия за сливане"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "СЪОБЩЕНИЕ при подаването със сливане (при същински сливания)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "преустановяване на текущото сливане"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "преустановяване без промяна на индекса и работното дърво"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "продължаване на текущото сливане"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "позволяване на сливане на независими истории"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr ""
 "без изпълнение на куките преди подаване и сливане и при промяна на "
 "съобщението за подаване (pre-merge-commit и commit-msg)"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "не може да се извърши скатаване"
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "неуспешно скатаване"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "неправилен обект: „%s“"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "неуспешно прочитане на обект-дърво"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (няма какво да се вкара)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Вече е обновено (няма какво да се вкара)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Вкарано подаване — указателят „HEAD“ няма да бъде обновен\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr ""
 "Липсва съобщение при подаване — указателят „HEAD“ няма да бъде обновен\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "„%s“ не сочи към подаване"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "Поддържа се само сливане на точно две истории."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "„%s“ не може да бъде записан"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "От „%s“ не може да се чете"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Сливането няма да бъде подадено.  За завършването му и подаването му "
 "използвайте командата „git commit“.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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"
@@ -17672,11 +18312,11 @@
 "В съобщението при подаване добавете информация за причината за\n"
 "сливането, особено ако сливате обновен отдалечен клон в тематичен клон.\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Празно съобщение предотвратява подаването.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17685,76 +18325,76 @@
 "Редовете, които започват с „%c“, ще бъдат пропуснати, а празно\n"
 "съобщение преустановява подаването.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Празно съобщение при подаване."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Първият етап на сливането завърши.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Неуспешно автоматично сливане — коригирайте конфликтите и подайте "
 "резултата.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "Няма текущ клон."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "Текущият клон не следи никой."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "Текущият клон не следи никой клон."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Никой клон не следи клона „%s“ от хранилището „%s“"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Неправилна стойност „%s“ в средата „%s“"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "не може да се слее в „%s“: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "не може да се слее"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "опцията „--abort“ не приема аргументи"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Не може да преустановите сливане, защото в момента не се извършва такова "
 "(липсва указател „MERGE_HEAD“)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "опцията „--quit“ не приема аргументи"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "опцията „--continue“ не приема аргументи"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17762,7 +18402,7 @@
 "Не сте завършили сливане.  (Указателят „MERGE_HEAD“ съществува).\n"
 "Подайте промените си, преди да започнете ново сливане."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17770,109 +18410,142 @@
 "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
 "съществува).  Подайте промените си, преди да започнете ново сливане."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n"
 "съществува)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
-msgstr "Опцията „--squash“ е несъвместима с „--no-ff“."
+msgstr "опциите „--squash“ и „--no-ff“ са несъвместими."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
-msgstr "Опцията „--squash“ е несъвместима с „--commit“."
+msgstr "опциите „--squash“ и „--commit“ са несъвместими."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "Вкарване на подаване във връх без история все още не се поддържа"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Понеже върхът е без история, всички сливания са превъртания, не може да се "
 "извърши същинско сливане изисквано от опцията „--no-ff“"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "„%s“ — не е нещо, което може да се слее"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
-msgstr "Можете да слеете точно едно подаване във връх без история"
+msgstr "Може да слеете точно едно подаване във връх без история"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "независими истории не може да се слеят"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Вече е обновено."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Обновяване „%s..%s“\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Проба със сливане в рамките на индекса…\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Неуспешно сливане.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Вече е обновено!"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "Не може да се извърши превъртане, преустановяване на действието."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Привеждане на дървото към първоначалното…\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Пробване със стратегията за сливане „%s“…\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Никоя стратегия за сливане не може да извърши сливането.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Неуспешно сливане със стратегия „%s“.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr ""
 "Ползва се стратегията „%s“, която ще подготви дървото за коригиране на "
 "ръка.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Автоматичното сливане завърши успешно.  Самото подаване не е извършено, "
 "защото бе зададена опцията „--no-commit“.\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "ПРЕДУПРЕЖДЕНИЕ: аргументът-етикет не минава проверка с „fsck“: %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "ГРЕШКА: аргументът-етикет не минава проверка с „fsck“: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) никога не трябва да задейства тази функция"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "обектът с етикет не може да бъде прочетен: %s"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "обектът „%s“ е с етикет за %s, но е %s"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "етикетът на стандартния вход не преминава строгата проверка с „fsck“"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "етикетът на стандартния вход не сочи към правилен обект"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "файлът за етикета не може да бъде запазен"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17889,21 +18562,38 @@
 msgid "allow creation of more than one tree"
 msgstr "разрешаване на създаването на повече от едно дърво"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [ОПЦИЯ…] (write|verify|expire|repack --batch-"
-"size=РАЗМЕР)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [ОПЦИЯ…] write [--preferred-pack=ПАКЕТ]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [ОПЦИЯ…] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [ОПЦИЯ…] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [ОПЦИЯ…] repack [--batch-size=РАЗМЕР]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 "ДИРекторията_с_ОБЕКТи съдържа множество двойки пакетни файлове със "
 "съответния им индекс"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "предпочитан_пакет"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr ""
+"пакет, който да се преизползва при изчисляване на многопакетна битовата маска"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
@@ -17911,15 +18601,7 @@
 "при препакетиране пакетните файлове, които са с по-малък от този размер, да "
 "се обединяват в пакети с по-голям от този размер"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "прекалено много аргументи"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "опцията „--batch-size“ изисква подкомандата „repack“"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "непозната подкоманда: %s"
@@ -18017,7 +18699,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "Преименуване на „%s“ на „%s“\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "неуспешно преименуване на „%s“"
@@ -18053,7 +18735,7 @@
 #: builtin/name-rev.c:531
 msgid "list all commits reachable from all refs"
 msgstr ""
-"извеждане на всички подавания, които могат да бъдат достигнати от всички "
+"извеждане на всички подавания, които може да бъдат достигнати от всички "
 "указатели"
 
 #: builtin/name-rev.c:532
@@ -18211,7 +18893,7 @@
 msgid "the note contents have been left in %s"
 msgstr "съдържанието на бележката е във файла „%s“"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "файлът „%s“ не може да бъде отворен или прочетен"
@@ -18257,8 +18939,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "прекалено много параметри"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "прекалено много аргументи"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -18319,8 +19002,8 @@
 "опцията „--stdin“)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "прекалено малко параметри"
+msgid "too few arguments"
+msgstr "прекалено малко аргументи"
 
 #: builtin/notes.c:538
 #, c-format
@@ -18452,7 +19135,7 @@
 "резултата с „git notes merge --commit“ или преустановете сливането с "
 "командата „git notes merge --abort“.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Не може да се открие към какво сочи „%s“."
@@ -18470,7 +19153,7 @@
 msgid "read object names from the standard input"
 msgstr "изчитане на имената на обектите от стандартния вход"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "само извеждане без действително окастряне"
 
@@ -18486,7 +19169,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "да се използва бележката сочена от този УКАЗАТЕЛ_ЗА_БЕЛЕЖКА"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "непозната подкоманда: %s"
@@ -18504,107 +19187,121 @@
 "git pack-objects [ОПЦИЯ…] ПРЕФИКС_НА_ИМЕТО [< СПИСЪК_С_УКАЗАТЕЛИ | < "
 "СПИСЪК_С_ОБЕКТИ]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: „%s“ не може да се открие, а се очакваше при отместване "
+"%<PRIuMAX> в пакетния файл „%s“"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "лоша контролна сума за пакетирания обект „%s“"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "пакетиран обект с грешки за „%s“"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "рекурсивна разлика за обект „%s“"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "подредени бяха %u обекта, а се очакваха %<PRIu32>"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "очаква се обект при отместване %<PRIuMAX> в пакетния файл „%s“"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "изключване на записването на битовата маска, пакетите са разделени поради "
 "стойността на „pack.packSizeLimit“"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Записване на обектите"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "бяха записани %<PRIu32> обекти, а се очакваха %<PRIu32>"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "изключване на записването на битовата маска, защото някои обекти няма да се "
 "пакетират"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "прекалено далечно начало на отместването за обектите-разлика за „%s“"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "недостижимо начало на отместването за обектите-разлика за „%s“"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Преброяване на обектите"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "заглавната част на „%s“ не може да бъде анализирана"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "обектът „%s“ не може да се прочете"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "обектът „%s“ е с неправилна дължина (%<PRIuMAX>, а не %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "неоптимизиран пакет — паметта свърши"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Делта компресията ще използва до %d нишки"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
-"обектите, които могат да бъдат достигнати от етикета „%s“, не може да бъдат "
+"обектите, които може да бъдат достигнати от етикета „%s“, не може да бъдат "
 "пакетирани"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Компресиране на обектите"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "неправилен брой разлики"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18613,7 +19310,7 @@
 "стойността на „uploadpack.blobpackfileuri“ трябва да е във формат "
 "„СУМА_НА_ОБЕКТ СУМА_НА_ПАКЕТ АДРЕС“ (получена е „%s“)"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18621,7 +19318,17 @@
 "вече има настройка за обекта в друг ред „uploadpack."
 "blobpackfileuri“ (получена е „%s“)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "видът на обекта „%s“ в пакет „%s“ не може да бъде определен"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "пакетът „%s“ не може да се открие"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18630,7 +19337,7 @@
 "очаква се идентификатор на краен обект, а не:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18639,253 +19346,264 @@
 "очаква се идентификатор на обект, а не:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "неправилна стойност за „--missing“"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "индексът на пакетния файл не може да бъде отворен"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "непакетираният обект в „%s“ не може да бъде анализиран"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "оставането на обекта непакетиран не може да бъде наложено"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "„%s“ не е версия"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "неправилна версия „%s“"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
-msgstr "скорошните обекти не могат да бъдат добавени"
+msgstr "скорошните обекти не може да бъдат добавени"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "неподдържана версия на индекса „%s“"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "неправилна версия на индекса „%s“"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "запазване на индекса на пакетните файлове във форма̀та с указаната версия"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "максимален размер на всеки пакетен файл"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "игнориране на обектите заети от други хранилища на обекти"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "игнориране на пакетираните обекти"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "ограничаване на прозореца за пакетиране по брой обекти"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "ограничаване на прозореца за пакетиране и по памет освен по брой обекти"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "максимална дължина на веригата от разлики, която е позволена в пакетния файл"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "преизползване на съществуващите разлики"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "преизползване на съществуващите обекти"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "използване на обекти „OFS_DELTA“"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "стартиране на нишки за претърсване на най-добрите съвпадения на разликите"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "без създаване на празен пакетен файл"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "изчитане на версиите от стандартния вход"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "ограничаване до все още непакетираните обекти"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr ""
-"включване на всички обекти, които могат да се достигнат от произволен "
-"указател"
+"включване на всички обекти, които може да се достигнат от произволен указател"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "включване и на обектите сочени от записите в журнала на указателите"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "включване и на обектите сочени от индекса"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "изчитане на пакетите от стандартния вход"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "извеждане на пакета на стандартния изход"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 "включване и на обектите-етикети, които сочат към обектите, които ще бъдат "
 "пакетирани"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "запазване на недостижимите обекти"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "пакетиране и на недостижимите обекти"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "разпакетиране на недостижимите обекти, които са по-нови от това ВРЕМЕ"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "използване на алгоритъм за частична достижимост"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "създаване на съкратени пакети"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "пакетиране подходящо за плитко доставяне"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "игнориране на пакетите, които са придружени от файл „.keep“"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "пропускане на този пакет"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "ниво на компресиране при пакетиране"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr ""
 "извеждане на всички родители — дори и тези, които нормално са скрити при "
 "присажданията"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "използване на съществуващи индекси на база битови маски за ускоряване на "
 "преброяването на обектите"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
-msgstr ""
-"запазване и на индекс на база побитова маска, заедно с индекса за пакета"
+msgstr "запазване и на индекс на база битова маска, заедно с индекса за пакета"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "записване на индекси на база битови маски при възможност"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "как да се обработват липсващите обекти"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "без пакетиране на обекти в гарантиращи пакети"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "без промяна на групите при делта компресия"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "протокол"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "без ползване на настройки „uploadpack.blobpackfileuri“ с този протокол"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "веригата с разлики е прекалено дълбока — %d, ще се ползва %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 "Стойността на настройката „pack.deltaCacheLimit“ е прекалено голяма.  Ще се "
 "ползва %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "опцията „--max-pack-size“ не може да се използва за създаване на пакетни "
 "файлове за пренос"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "минималният размер на пакетите е 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 "опцията „--thin“не може да се използва за създаване на пакетни файлове с "
 "индекс"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "опциите „--keep-unreachable“ и „--unpack-unreachable“ са несъвместими"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "опцията „-filter“ изисква „-stdout“"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "опциите „-filter“ и „--stdin-packs“ са несъвместими"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr ""
+"вътрешният списък на указатели и опцията „--stdin-packs“ са несъвместими"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Изброяване на обектите"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18894,6 +19612,20 @@
 "Общо: %<PRIu32> (разлики: %<PRIu32>), преизползвани: %<PRIu32> (разлики: "
 "%<PRIu32>), преизползвани при пакетиране: %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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“ е остаряла и предстои\n"
+"пълното ѝ премахване.  Ако все още я ползвате, добавете\n"
+"опцията „--i-still-use-this“ на командния ред и молим да\n"
+"ни известите с е-писмо до пощенския списък:\n"
+"<git@vger.kernel.org>.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [ОПЦИЯ…]"
@@ -18951,11 +19683,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "внасяне на промените чрез пребазиране, а не чрез сливане"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "позволяване на превъртания"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "автоматично скатаване/прилагане на скатаното преди и след пребазиране"
 
@@ -18976,7 +19708,95 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Неправилна стойност за „pull.ff“: „%s“"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Между указателите, които току що доставихте, няма подходящ кандидат, върху "
+"който да пребазирате."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Между указателите, които току що доставихте, няма подходящ кандидат, който "
+"да слеете."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
+"отдалеченото хранилище."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Заявихте издърпване от отдалеченото хранилище „%s“, но не указахте клон.\n"
+"Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
+"да укажете отдалечения клон на командния ред."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Извън всички клони."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Укажете върху кой клон искате да пребазирате."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Укажете кой клон искате да слеете."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+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
+msgid "<remote>"
+msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "КЛОН"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Текущият клон не следи никой."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Ако искате да зададете информация за следен клон, може да направите това с "
+"командата:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"За сливане е указан отдалеченият указател „%s“,\n"
+"но такъв не е доставен."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "недостъпно подаване: %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "без „--verify-signatures“ при пребазиране"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -19005,107 +19825,19 @@
 "използвайте опциите „--rebase“, „--no-rebase“, „--ff-only“.  Те са с\n"
 "приоритет пред настройките.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Между указателите, които току що доставихте, няма подходящ кандидат, върху "
-"който да пребазирате."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Между указателите, които току що доставихте, няма подходящ кандидат, който "
-"да слеете."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Най вероятно сте подали шаблон за указатели, който не е напаснал с нищо в "
-"отдалеченото хранилище."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Заявихте издърпване от отдалеченото хранилище „%s“, но не указахте клон.\n"
-"Понеже това не е хранилището по подразбиране на текущия клон, трябва\n"
-"да укажете отдалечения клон на командния ред."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Извън всички клони."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "Укажете върху кой клон искате да пребазирате."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Укажете кой клон искате да слеете."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "За повече информация погледнете ръководството „git-pull(1)“"
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "ОТДАЛЕЧЕНО_ХРАНИЛИЩЕ"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "КЛОН"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Текущият клон не следи никой."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Ако искате да зададете информация за следен клон, можете да направите това с "
-"командата:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"За сливане е указан отдалеченият указател „%s“,\n"
-"но такъв не е доставен."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "недостъпно подаване: %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "без „--verify-signatures“ при пребазиране"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Обновяване на все още несъздаден клон с промените от индекса"
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "издърпване с пребазиране"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "трябва да подадете или скатаете промените."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19115,7 +19847,7 @@
 "доставянето обнови върха на текущия клон.  Работното\n"
 "ви копие бе превъртяно от подаване „%s“."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19132,15 +19864,15 @@
 "    git reset --hard\n"
 "за връщане към нормално състояние."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Не може да сливате множество клони в празен върхов указател."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Не може да пребазирате върху повече от един клон."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "пребазирането е невъзможно заради локално записаните промени по подмодулите"
@@ -19223,7 +19955,7 @@
 #, c-format
 msgid "The current branch %s has multiple upstream branches, refusing to push."
 msgstr ""
-"Текущият клон „%s“ следи няколко отдалечени клона, не можете просто да "
+"Текущият клон „%s“ следи няколко отдалечени клона, не може просто да "
 "изтласкате."
 
 #: builtin/push.c:205
@@ -19466,44 +20198,48 @@
 msgid "push options must not have new line characters"
 msgstr "опциите за изтласкване не трябва да съдържат знак за нов ред"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr "git range-diff [ОПЦИЯ…] СТАРА_БАЗА..СТАР_ВРЪХ НОВА_БАЗА..НОВ_ВРЪХ"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [ОПЦИЯ…] СТАР_ВРЪХ...НОВ_ВРЪХ"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [ОПЦИЯ…] БАЗА СТАР_ВРЪХ НОВ_ВРЪХ"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "Процент за оценка на създаването"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "използване на прости цветове за разликите"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "бележки"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "подава се на командата „git log“"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "„..“ липсва в диапазона „%s“"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "извеждане само на информацията за първия диапазон"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "извеждане само на информацията за втория диапазон"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "не е диапазон с подавания: „%s“"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "вариантът с единствен аргумент изисква симетричен диапазон"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "необходими са два диапазона с подавания"
 
@@ -19608,197 +20344,197 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "не може да се създаде временна директория „%s“"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "невъзможно задаване на интерактивна работа"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "файлът с командите не може да се генерира"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "опциите „--upstream“ и „--onto“ изискват базово подаване"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [ОПЦИЯ…]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "запазванe на първоначално празните подавания"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "позволяване на празни съобщения при подаване"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "пребазиране на подаванията със сливания"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr ""
 "запазване на първоначалните точки на разклоняване на сестринските клони"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "преместване на подаванията, които започват със „squash!“/“fixup!“"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "подписване на подаванията"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "извеждане на статистика с промените в следения клон"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "продължаване на пребазирането"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "прескачане на подаване"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "редактиране на списъка с команди за изпълнение"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "извеждане на текущата кръпка"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "съкратени идентификатори в списъка за изпълнение"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "пълни идентификатори в списъка за изпълнение"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "проверка на списъка за изпълнение"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr ""
 "преподреждане на редовете за вкарване на подаванията подаванията в "
 "предходните им със и без смени на съобщението"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "вмъкване на командите за изпълнение в списъка за изпълнение"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "върху"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "ограничена версия"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "ограничена версия"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "подаване, в което другите да се вкарат"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "подаване, в което другите да се вкарат"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "подаване на източника"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "име на върха"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "име на върха"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "стратегия на пребазиране"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "опции на стратегията"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "опции на стратегията"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "преминаване към"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "клонът, към който да се премине"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "име на база"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "име на база"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "команда"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "команда за изпълнение"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 "автоматично подаване за повторно изпълнение на командите завършили с неуспех"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "опциите „--[no-]rebase-cousins“ изискват опцията „--rebase-merges“"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "„%s“ изисква пребазиране"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "не може да се премине към новата база, зададена с „onto“: „%s“"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "неправилен указател към първоначален връх „orig-head“: „%s“"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "неправилната стойност на „allow_rerere_autoupdate“ се прескача: „%s“"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19812,7 +20548,7 @@
 "За да откажете пребазирането и да се върнете към първоначалното състояние,\n"
 "изпълнете „git rebase --abort“."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19828,9 +20564,9 @@
 "\n"
 "    %s\n"
 "\n"
-"В резултат те не могат да се пребазират."
+"В резултат те не може да се пребазират."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19839,7 +20575,7 @@
 "неправилна стойност „%s“: вариантите са „drop“ (прескачане), "
 "„keep“ (запазване) и „ask“ (питане)"
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19856,7 +20592,7 @@
 "    git rebase КЛОН\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19864,205 +20600,197 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 msgstr ""
-"Ако искате да зададете информация за следен клон, можете да направите това с "
+"Ако искате да зададете информация за следен клон, може да направите това с "
 "командата:\n"
 "\n"
 "    git branch --set-upstream-to=%s/КЛОН %s\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "командите за изпълнение не може да съдържат нови редове"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "празна команда за изпълнение"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "пребазиране върху зададения, а не следения клон"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "за текуща база да се ползва базата за сливане на клона и следеното"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "позволяване на куката преди пребазиране да се изпълни"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "без извеждане на информация.  Включва опцията „--no-stat“"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "без извеждане на статистика с промените в следения клон"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "добавяне на епилог за подпис „Signed-off-by“ към всяко подаване"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "датата на подаващия да отговаря на датата на автора"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "да се ползва днешна дата, а не тази на автора"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "псевдоним на „--reset-author-date“"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "подава се на командата „git apply“"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "без промени в празните знаци"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "отбиране на всички подавания дори да няма промени"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "продължаване"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "прескачане на текущата кръпка и продължаване"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "преустановяване и възстановяване на първоначалния клон"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "преустановяване без промяна към какво сочи „HEAD“"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "редактиране на файла с команди при интерактивно пребазиране"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "показване на кръпката, която се прилага или слива"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "при пребазиране да се ползва стратегия с прилагане"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "при пребазиране да се ползва стратегия със сливане"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 "позволяване на потребителя да редактира списъка с подавания за пребазиране"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(ОСТАРЯЛО) пресъздаване на сливанията вместо да се прескачат"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "как да се обработват оказалите се празни подавания"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 "преместване на подаванията, които започват със „squash!“/“fixup!“ при „-i“"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 "добавяне на редове с команди за изпълнение след всяко подаване в "
 "редактирания списък"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "позволяване на пребазиране на подавания с празни съобщения"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "опит за пребазиране на сливанията вместо те да се прескачат"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 "за доуточняването на следения клон, използвайте:\n"
 "\n"
 "    git merge-base --fork-point"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "използване на зададената стратегията на сливане"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "опция"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "аргументът да се подаде на стратегията за сливане"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "пребазиране на всички достижими подавания до началното им подаване"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr "прилагане на всички промени, дори и наличните вече в следеното"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"поддръжката на „rebase.useBuiltin“ е премахната.\n"
-"За повече информация вижте „git help config“."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 "Изглежда, че сега се прилагат кръпки чрез командата „git-am“.  Не може да "
 "пребазирате в момента."
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "Опцията „--preserve-merges“ е остаряла.  Ползвайте „--rebase-merges“ вместо "
 "нея."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "опциите „--keep-base“ и „--onto“ са несъвместими"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "опциите „--keep-base“ и „--root“ са несъвместими"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "опциите „--root“ и „--fork-point“ са несъвместими"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "Изглежда в момента не тече пребазиране"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Опцията „--edit-todo“ е достъпна само по време на интерактивно пребазиране."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Указателят „HEAD“ не може да бъде прочетен"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20070,16 +20798,16 @@
 "Трябва да редактирате всички конфликти при сливането.  След това\n"
 "отбележете коригирането им чрез командата „git add“"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
-msgstr "промените в работното дърво не могат да бъдат занулени"
+msgstr "промените в работното дърво не може да бъдат занулени"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "връщането към „%s“ е невъзможно"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20100,138 +20828,138 @@
 "за\n"
 "да не загубите случайно промени.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "опцията „C“ очаква число за аргумент"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Неизвестна стратегия: „%s“"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 "опцията „--strategy“ изисква някоя от опциите „--merge“ или „--interactive“"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "опциите за „apply“ са несъвместими с опциите за сливане"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Непозната реализация на пребазиране: %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 "опцията „--reschedule-failed-exec“ изисква някоя от опциите „--exec“ или „--"
 "interactive“"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "опциите „--preserve-merges“ и „--rebase-merges“ са несъвместими"
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "ГРЕШКА: опциите „--preserve-merges“ и „--reschedule-failed-exec“ са "
 "несъвместими"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "неправилен следен клон: „%s“"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "Не може да се създаде ново начално подаване"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "„%s“: изисква се точно една база за сливане с клона"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "„%s“: изисква се точно една база за пребазиране"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Указателят „%s“ не сочи към подаване"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "ФАТАЛНА ГРЕШКА: не съществува клон „%s“"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "Такъв указател няма: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "Подаването, сочено от указателя „HEAD“, не може да бъде открито"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Промените трябва или да се подадат, или да се скатаят."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "не може да се премине към „%s“"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "Указателят „HEAD“ е напълно актуален."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Текущият клон „%s“ е напълно актуален.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "Указателят „HEAD“ е напълно актуален — принудително пребазиране"
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Текущият клон „%s“ е напълно актуален — принудително пребазиране\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Куката за изпълнение преди пребазиране отхвърли пребазирането."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Промените в „%s“:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Промените от „%s“ към „%s“:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Първо, указателят „HEAD“ започва да сочи към базата, върху която "
 "пребазирате…\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "Указателят „HEAD“ не може да се отделѝ"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Превъртане на „%s“ към „%s“.\n"
@@ -20294,11 +21022,11 @@
 "За да заглушите това съобщение, задайте настройката\n"
 "„receive.denyDeleteCurrent“ да е „refuse“ (отказ)."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "без извеждане на информация"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Трябва да укажете директория."
 
@@ -20328,36 +21056,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "„%s“ не е правилна стойност за време"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Отбелязване на достижимите обекти…"
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "„%s“ не сочи наникъде!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "не е указан журнал с подавания за изтриване"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "„%s“ не е журнал с подавания"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "липсва журнал с подаванията за „%s“"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "неправилен формат на указател: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -20464,7 +21192,7 @@
 
 #: builtin/remote.c:164
 msgid "fetch the remote branches"
-msgstr "отдалечените клони не могат да бъдат доставени"
+msgstr "отдалечените клони не може да бъдат доставени"
 
 #: builtin/remote.c:166
 msgid "import all tags and associated objects when fetching"
@@ -20511,7 +21239,7 @@
 #: builtin/remote.c:355
 #, c-format
 msgid "Could not get fetch map for refspec %s"
-msgstr "Обектите за доставяне за указателя „%s“ не могат да бъдат получени"
+msgstr "Обектите за доставяне за указателя „%s“ не може да бъдат получени"
 
 #: builtin/remote.c:454 builtin/remote.c:462
 msgid "(matching)"
@@ -20537,7 +21265,7 @@
 "    %s:%d\n"
 "използва отдалечено хранилище, което вече не съществува: „%s“"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Няма отдалечено хранилище на име „%s“"
@@ -20881,11 +21609,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "Никой от адресите, които не са за изтласкване, няма да се изтрие"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [ОПЦИЯ…]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20894,131 +21622,154 @@
 "Ползвайте опцията --no-write-bitmap-index или изключете настройката\n"
 "„pack.writebitmaps“."
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "командата „pack-objects“ не може да се стартира за препакетирането на "
 "гарантиращите обекти"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: от „pack-objects“ се изискват редове само с пълни шестнайсетични "
 "указатели."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "командата „pack-objects“ не може да завърши за препакетирането на "
 "гарантиращите обекти"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "грешка при отваряне на индекса за „%s“"
+
+#: builtin/repack.c:368
+#, 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
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "пакет „%s“ е твърде голям за свиване"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "пакетиране на всичко в пакет"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 "същото като опцията „-a“.  Допълнително — недостижимите обекти да станат "
 "непакетирани"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 "премахване на ненужните пакетирани файлове и изпълнение на командата „git-"
 "prune-packed“"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "подаване на опцията „--no-reuse-delta“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 "подаване на опцията „--no-reuse-object“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "без изпълнение на командата „git-update-server-info“"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "подаване на опцията „--local“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "създаване и записване на индекси на база битови маски"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "подаване на опцията „--delta-islands“ на командата „git-pack-objects“"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "евристична дата"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 "при комбинирането с опцията „-A“ — без разпакетиране на обектите по стари от "
 "това"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "с „-a“ — препакетиране на недостижимите обекти"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "размер на прозореца за делта компресията"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "байтове"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "същото като горната опция, но ограничението да е по размер на паметта, а не "
 "по броя на обектите"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "ограничаване на максималната дълбочина на делтата"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "ограничаване на максималния брой нишки"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "максимален размер на всеки пакет"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "препакетиране на обектите в пакети белязани с „.keep“"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "без препакетиране на този пакет"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "откриване на геометрична прогресия с частно <N>"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "пакетите в хранилище с важни обекти не може да се трият"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
-msgstr "Опциите „--keep-unreachable“ и „-A“ са несъвместими"
+msgstr "опциите „--keep-unreachable“ и „-A“ са несъвместими"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "опциите „--geometric“ и „-A“/„-a“ са несъвместими"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Нищо ново за пакетиране"
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "липсва задължителния файл „%s“"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "неуспешно изтриване на „%s“"
@@ -21200,7 +21951,7 @@
 "could not convert the following graft(s):\n"
 "%s"
 msgstr ""
-"следните присадки не могат да се преобразуват:\n"
+"следните присадки не може да се преобразуват:\n"
 "%s"
 
 #: builtin/replace.c:548
@@ -21352,8 +22103,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Не може да се извърши %s зануляване по време на сливане."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "по-малко подробности, да се извеждат само грешките"
 
@@ -21412,7 +22163,7 @@
 
 #: builtin/reset.c:392
 msgid "-N can only be used with --mixed"
-msgstr "Опцията „-N“ изисква опцията „--mixed“"
+msgstr "опцията „-N“ изисква опцията „--mixed“"
 
 #: builtin/reset.c:413
 msgid "Unstaged changes after reset:"
@@ -21440,19 +22191,19 @@
 msgid "Could not write new index file."
 msgstr "Новият индекс не може да бъде записан."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "опциите „--exclude-promisor-objects“ и „--missing“ и са несъвместими"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "филтрирането на обекти изисква опцията „--objects“"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "командата „rev-list“ не поддържа извеждането на бележки"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "опцията „--objects“ е несъвместима с изброяването"
 
@@ -21565,19 +22316,19 @@
 msgid "keep redundant, empty commits"
 msgstr "запазване на излишните, празни подавания"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "неуспешна отмяна"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "неуспешно отбиране"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [ОПЦИЯ…] [--] ФАЙЛ…"
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -21593,7 +22344,7 @@
 "съдържание и\n"
 "различно от съответстващото на HEAD:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -21601,13 +22352,13 @@
 "\n"
 "(за принудително изтриване използвайте опцията „-f“)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "следният файл е с променено съдържание в индекса:"
 msgstr[1] "следните файлове са с променено съдържание в индекса:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -21616,50 +22367,50 @@
 "(за запазване на файла използвайте опцията „--cached“, а за принудително\n"
 "изтриване — „-f“)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "следният файл е с променено съдържание"
 msgstr[1] "следните файлове са с променено съдържание"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "да не се извеждат изтритите файлове"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "изтриване само от индекса"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "въпреки проверката за актуалността на съдържанието"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "рекурсивно изтриване"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr ""
 "изходният код да е 0, дори ако никой файл нe e напаснал с шаблона за "
 "изтриване"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "Не са зададени пътища.  Кои файлове да се изтрият?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "за да продължите, или вкарайте промените по файла „.gitmodules“ в индекса,\n"
 "или ги скатайте"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "без използването на опцията „-r“ „%s“ няма да се изтрие рекурсивно"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: „%s“ не може да се изтрие"
@@ -21699,54 +22450,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [ОПЦИЯ…]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "повече от една опции „--group“ са несъвместими със стандартния вход"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "опцията „--group=trailer“ е несъвместима със стандартния вход"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "неизвестен вид група: %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Групиране по подаващ, а не по автор"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "групиране по подаващ, а не по автор"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "подредба на подаванията по броя подавания от автор"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Без описания на подаванията — да се показва само броя подавания"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "без описания на подаванията — да се показва само броя подавания"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Извеждане на адреса на е-поща за всеки автор"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "извеждане на адреса на е-поща за всеки автор"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<ШИРОЧИНА>[,<ОТСТЪП_1>[,<ОТСТЪП_2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr ""
-"Пренасяне на редовете до тази обща ШИРОЧИНА (76), с ОТСТЪП_1 (6) за първия "
-"ред и ОТСТЪП_2 (9) за останалите"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "пренасяне на редовете"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "поле"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Групиране по поле"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "групиране по поле"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "прекалено много аргументи извън хранилище"
 
@@ -21828,7 +22577,7 @@
 
 #: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
-msgstr "извеждане на сливанията, които могат да се достигнат само от един връх"
+msgstr "извеждане на сливанията, които може да се достигнат само от един връх"
 
 #: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
@@ -21944,105 +22693,113 @@
 "извеждане на указателите приети от стандартния вход, които липсват в "
 "локалното хранилище"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) ОПЦИЯ…"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "това не е частично работно дърво (вероятно липсва файл „sparse-checkout“)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "директорията за частично изтегляне „%s“ не може да бъде създадена"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
 "настройката „worktreeConfig“ не може да се включи, защото форматът на "
 "хранилището не може да се обнови"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "неуспешно задаване на настройката „extensions.worktreeConfig“"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "инициализиране на частичното изтегляне в пътеводен режим"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "превключване на ползването на частичен индекс"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "настройките на частичния индекс не може да се променят"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "„%s“ не може да се отвори"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "пътят „%s“  не може да се нормализира"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | ШАБЛОН…)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "цитирането на низ, форматиран за C — „%s“ не може да бъде изчистено"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
-msgstr "шаблоните за частично изтегляне не могат да се заредят"
+msgstr "шаблоните за частично изтегляне не може да се заредят"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "изчитане на шаблоните от стандартния вход"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "грешка при обновяване на работната директория"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [ОПЦИЯ…]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [ОПЦИЯ…] [СКАТАНО]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [СКАТАНО]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [СКАТАНО]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch КЛОН [СКАТАНО]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -22054,7 +22811,7 @@
 "          [--pathspec-from-file=ФАЙЛ [--pathspec-file-nul]]\n"
 "          [--] [ПЪТ…]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -22062,19 +22819,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [СЪОБЩЕНИЕ]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [СКАТАНО]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [СКАТАНО]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message СЪОБЩЕНИЕ] [-q|--quiet] ПОДАВАНЕ"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -22084,175 +22841,202 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message СЪОБЩЕНИЕ]\n"
 "          [--] [ПЪТ…]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "„%s“ не е подаване, приличащо на нещо скатано"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Указани са прекалено много версии:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "Не е открито нищо скатано."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "„%s“ е неправилно име за указател"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
 msgstr "командата „git stash clear“ не поддържа аргументи"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"ПРЕДУПРЕЖДЕНИЕ: Неследен файл на мястото на следен!  Преименуване\n"
+"            „%s“ на „%s“\n"
+"         за да се направи място.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "по време на сливане не може да приложите нещо скатано"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "файлът с разликите „%s^!“ не може да се генерира"
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr ""
 "в индекса има конфликти.  Пробвайте да изпълните командата без опцията „--"
 "index“."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "дървото сочено от индекса не може да бъде запазено"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
-msgstr "неследени файлове не могат да се възстановят от скатаното"
+msgstr "неследени файлове не може да се възстановят от скатаното"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Сливане на „%s“ с „%s“"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "Индексът не е изваден от скатаното."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "опит за повторно създаване на индекса"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Изтрито: „%s“ (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "Скатаното „%s“ не може да бъде изтрито"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "„%s“ не е указател към нещо скатано"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "Скатаното е запазено в случай, че ви потрябва отново."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Не е указано име на клон"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "дървото не може да бъде анализирано"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "дървото не може да бъде разпакетирано"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "скатаване и на неследените файлове"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "извеждане само на неследените файлове в скатаното"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Указателят „%s“ не може да бъде обновен да сочи към „%s“"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "съобщение при скатаване"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "командата „git stash store“ изисква точно един аргумент-ПОДАВАНЕ"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Не са избрани никакви промени"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Все още липсва първоначално подаване"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "Състоянието на текущия индекс не може да бъде запазено"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
-msgstr "Неследените файлове не могат да се запазят"
+msgstr "Неследените файлове не може да се запазят"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "Състоянието на работното дърво не може да бъде запазено"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "Състоянието на работното дърво не може да бъде запазено"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
-msgstr "Опцията „--patch“ е несъвместима с „--include-untracked“ и „--all“"
+msgstr "опцията „--patch“ е несъвместима с „--include-untracked“ и „--all“"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "Пробвайте да използвате „git add“"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "Няма никакви локални промени за скатаване"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "Скатаването не може да стартира"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "Текущото състояние не може да бъде запазено"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Състоянието на работната директория и индекса e запазено: „%s“"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
-msgstr "Промените в работното дърво не могат да бъдат занулени"
+msgstr "Промените в работното дърво не може да бъдат занулени"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "запазване на индекса"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "скатаване в режим за кръпки"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "без извеждане на информация"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "скатаване и на неследените файлове"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "скатаване и на игнорираните файлове"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -22276,7 +23060,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "добавяне на „# “ в началото на всеки ред"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Очаква се пълно име на указател, а не „%s“"
@@ -22291,7 +23075,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "не може да се махне компонент от адреса „%s“"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "директория за определянето на относителните пътища"
 
@@ -22299,18 +23083,18 @@
 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
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Във файла „.gitmodules“ не е открит адрес за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Влизане в „%s“\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22319,7 +23103,7 @@
 "изпълнената команда завърши с ненулев изход за „%s“\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22330,19 +23114,20 @@
 "вложени в „%s“\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Без извеждане на изход при въвеждането на всяка команда за подмодули"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "без извеждане на изход при въвеждането на всяка команда за подмодули"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Рекурсивно обхождане на подмодулите"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "рекурсивно обхождане на подмодулите"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] КОМАНДА"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22351,160 +23136,156 @@
 "настройката „%s“ липсва.  Приема се, че това хранилище е правилният източник "
 "за себе си."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Неуспешно регистриране на адрес за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, 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:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: препоръчва се режим на обновяване за подмодула „%s“\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "Неуспешно регистриране на режима на обновяване за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Без извеждане на информация при инициализирането на подмодул"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "без извеждане на информация при инициализирането на подмодул"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 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:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "Във файла „.gitmodules“ липсва информация за пътя „%s“"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, 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:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "неуспешно рекурсивно обхождане на подмодула „%s“"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Без изход за състоянието на подмодула"
-
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
-msgstr ""
-"Използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
-"подмодула"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "без изход за състоянието на подмодула"
 
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "рекурсивно обхождане на подмодулите"
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
+msgstr ""
+"използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
+"подмодула"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [ПЪТ…]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name ПЪТ"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "● %s %s(обект-BLOB)→%s(подмодул)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "● %s %s(подмодул)→%s(обект-BLOB)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "неуспешно изчисляване на контролната сума на обект от „%s“"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "неочакван режим „%o“\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "използване на подаването указано в индекса, а не това от указателя „HEAD“ на "
 "подмодула"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 "за сравнение на подаването указано в индекса с това от указателя „HEAD“ на "
 "подмодула"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "прескачане на подмодули, чиято настройка „ignore_config“ е „all“"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "ограничаване на размера на обобщението"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [ОПЦИЯ…] [ПОДАВАНЕ] -- [ПЪТ]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "не може да се достави версия за „HEAD“"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "опциите „--cached“ и „--files“ са несъвместими"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Синхронизиране на адреса на подмодул за „%s“\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "неуспешно регистриране на адрес за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде получен"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "отдалеченият адрес на подмодула „%s“ не може да бъде променен"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Без извеждане на информация при синхронизирането на подмодул"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "без извеждане на информация при синхронизирането на подмодул"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [ПЪТ]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -22513,56 +23294,56 @@
 "Работното дърво на подмодул „%s“ съдържа директория „.git“.\n"
 "(ако искате да ги изтриете заедно с цялата им история, използвайте „rm -rf“)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr ""
-"Работното дърво на подмодул „%s“ съдържа локални промени.  Можете да ги "
+"Работното дърво на подмодул „%s“ съдържа локални промени.  Може да ги "
 "отхвърлите с опцията „-f“"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Директорията „%s“ е изчистена\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr ""
 "Директорията към работното дърво на подмодула „%s“ не може да бъде изтрита\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "празната директория за подмодула „%s“ не може да бъде създадена"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Регистрацията на подмодула „%s“ (%s) за пътя „%s“ е премахната\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
+#: builtin/submodule--helper.c:1625
+msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
-"Изтриване на работните дървета на подмодулите, дори когато те съдържат "
+"изтриване на работните дървета на подмодулите, дори когато те съдържат "
 "локални промени"
 
-#: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Премахване на регистрациите на всички подмодули"
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "премахване на регистрациите на всички подмодули"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1631
 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:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Използвайте „--all“, за да премахнете всички подмодули"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -22574,47 +23355,47 @@
 "задайте настройката „submodule.alternateErrorStrategy“ да е „info“ или\n"
 "при клониране ползвайте опцията „--reference-if-able“ вместо „--reference“."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "към подмодула „%s“ не може да се добави алтернативен източник: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr ""
 "Непозната стойност „%s“ за настройката „submodule.alternateErrorStrategy“"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Непозната стойност „%s“ за настройката „submodule.alternateLocation“"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "къде да се клонира новият подмодул"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "име на новия подмодул"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "адрес, от който да се клонира новият подмодул"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "дълбочина на плитките хранилища"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "извеждане на напредъка на клонирането"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "предотвратяване на клониране в непразна история"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -22623,108 +23404,108 @@
 "git submodule--helper clone [--prefix=ПЪТ] [--quiet] [--reference ХРАНИЛИЩЕ] "
 "[--name ИМЕ] [--depth ДЪЛБОЧИНА] [--single-branch] --url АДРЕС --path ПЪТ"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "„%s“ не може нито да се създаде, нито да се ползва в директорията на git на "
 "друг подмодул"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "Неуспешно клониране на адреса „%s“ в пътя „%s“ като подмодул"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "директорията не е празна: „%s“"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "директорията на подмодула „%s“ не може да бъде получена"
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Неправилен режим на обновяване „%s“ за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Настроен е неправилен режим на обновяване „%s“ за пътя към подмодул „%s“"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Пътят на подмодула „%s“ не е инициализиран"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Вероятно искахте да използвате „update --init“?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Прескачане на неслетия подмодул „%s“"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Прескачане на подмодула „%s“"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Неуспешен опит за клониране на „%s“.  Насрочен е втори опит"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, 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:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "път към работното дърво"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "път към работното дърво, през границите на вложените подмодули"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr ""
 "„rebase“ (пребазиране), „merge“ (сливане), „checkout“ (изтегляне) или "
 "„none“ (нищо да не се прави)"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Плитко клониране, отрязано до указания брой версии"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "извършване на плитко клониране, отрязано до указания брой версии"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "брой паралелни процеси"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "дали първоначалното клониране да е плитко, както се препоръчва"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "без извеждане на напредъка на клонирането"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 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:2371
 msgid "bad value for update parameter"
 msgstr "неправилен параметър към опцията „--update“"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -22733,83 +23514,83 @@
 "Клонът на подмодула „%s“ е настроен да наследява клона от обхващащия проект, "
 "но той не е на никой клон"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "не може да се получи връзка към хранилище за подмодула „%s“"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "рекурсивно обхождане подмодулите"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 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:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "проверка дали писането във файла „.gitmodules“ е безопасно"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "изтриване на настройка във файла „.gitmodules“"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config ИМЕ [СТОЙНОСТ]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset ИМЕ"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "файлът „.gitmodules“ трябва да е в работното дърво"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Без извеждане на информация при задаването на адреса на подмодул"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "без извеждане на информация при задаването на адреса на подмодул"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 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:2719
 msgid "set the default tracking branch to master"
 msgstr "задаване на стандартния следящ клон да е „master“"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "задаване на стандартния следящ клон"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 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:2726
 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:2733
 msgid "--branch or --default required"
 msgstr "необходимо е една от опциите „--branch“ и „--default“"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "опциите „--branch“ и „--default“ са несъвместими"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "„%s“ не поддържа опцията „--super-prefix“"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "„%s“ не е подкоманда на „submodule--helper“"
@@ -22822,23 +23603,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] ИМЕ"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "без извеждане на грешка за несвързани (несимволни) указатели"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "изтриване на символен указател"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "кратка информация за указателя"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "причина"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "причина за обновяването"
 
@@ -22869,17 +23650,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=ФОРМАТ] ЕТИКЕТ…"
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "етикетът „%s“ не е открит."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Изтрит е етикетът „%s“ (бе „%s“)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22892,7 +23673,7 @@
 "    %s\n"
 "Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -22907,15 +23688,11 @@
 "Редовете, които започват с „%c“, също ще бъдат включени — може да ги "
 "изтриете вие.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "етикетът не може да бъде подписан"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "файлът за етикета не може да бъде запазен"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22929,143 +23706,139 @@
 "\n"
 "    git tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "неправилен вид обект."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "липсва съобщение за етикета"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Съобщението за етикета е запазено във файла „%s“\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "извеждане на имената на етикетите"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "извеждане на този БРОЙ редове от всяко съобщение за етикет"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "изтриване на етикети"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "проверка на етикети"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Опции при създаването на етикети"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "анотирането на етикети изисква съобщение"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "СЪОБЩЕНИЕ за етикет"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "принудително редактиране на съобщение за етикет"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "анотиран етикет с подпис по GPG"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "използване на друг ключ за подписването на етикет"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "замяна на етикета, ако съществува"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "създаване на журнал на указателите"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Опции за извеждането на етикети"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "извеждане на списъка на етикетите по колони"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "извеждане само на етикетите, които съдържат подаването"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "извеждане само на етикетите, които не съдържат подаването"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "извеждане само на слетите етикети"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "извеждане само на неслетите етикети"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "извеждане само на етикетите на ОБЕКТА"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
-msgstr "Опциите „--column“ и „-n“ са несъвместими"
+msgstr "опциите „--column“ и „-n“ са несъвместими"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
-msgstr "Опцията „-n“ изисква режим на списък."
+msgstr "опцията „-n“ изисква режим на списък."
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
-msgstr "Опцията „-contains“ изисква режим на списък."
+msgstr "опцията „-contains“ изисква режим на списък."
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
-msgstr "Опцията „-contains“ изисква  режим на списък."
+msgstr "опцията „-contains“ изисква  режим на списък."
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
-msgstr "Опцията „-points-at“ изисква режим на списък."
+msgstr "опцията „-points-at“ изисква режим на списък."
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
-msgstr "Опциите „--merged“ и „--no-merged“ изискват режим на списък."
+msgstr "опциите „--merged“ и „--no-merged“ изискват режим на списък."
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
-msgstr "Опциите „-F“ и „-m“ са несъвместими."
+msgstr "опциите „-F“ и „-m“ са несъвместими."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "Прекалено много аргументи"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "„%s“ е неправилно име за етикет."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "етикетът „%s“ вече съществува"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Обновен етикет „%s“ (бе „%s“)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Разпакетиране на обектите"
 
@@ -23138,153 +23911,153 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr ""
 "продължаване с обновяването, дори когато индексът трябва да бъде обновен"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "подмодулите да се игнорират при обновяването"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "новите файлове да не се игнорират"
 
-#: builtin/update-index.c:982
-msgid "let files replace directories and vice-versa"
-msgstr "файлове да могат да заменят директории и обратно"
-
 #: builtin/update-index.c:984
+msgid "let files replace directories and vice-versa"
+msgstr "файлове да може да заменят директории и обратно"
+
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "предупреждаване при липсващи в работното дърво файлове"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "обновяване дори и индексът да съдържа неслети обекти"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "обновяване на информацията от функцията „stat“"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 "като опцията „--refresh“, но да се проверят и обектите, които са били приети "
 "за непроменени"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "РЕЖИМ,ОБЕКТ,ПЪТ"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "добавяне на изброените обекти към индекса"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "задаване на флаг, че файлът не се променя"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "изчистване на флага, че файлът не се променя"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "задаване на флаг, че файловете са само за индекса"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "изчистване на флага, че файловете са само за индекса"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "без промяна на файловете само за индекса"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr "добавяне само към индекса без добавяне към базата от данни за обектите"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr "изтриване на указаните пътища, дори и да съществуват в работното дърво"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 "при комбиниране с опцията „--stdin“ — входните редове са разделени с нулевия "
 "байт"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "изчитане на списъка с пътища за обновяване от стандартния вход"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "добавяне на елементите от стандартния вход към индекса"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 "възстановяване на състоянието преди сливане или нужда от обновяване за "
 "изброените пътища"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "добавяне само на съдържанието, което се различава от това в „HEAD“"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "игнориране на файловете, които липсват в работното дърво"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "извеждане на действията на стандартния изход"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 "забравяне на записаната информация за неразрешени конфликти — за командите "
 "от потребителско ниво"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "записване на индекса в този формат"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "включване или изключване на разделянето на индекса"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "включване/изключване на кеша за неследените файлове"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "проверка дали файловата система поддържа кеш за неследени файлове"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 "включване на кеша за неследените файлове без проверка на файловата система"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "запис на индекса, дори да не е отбелязан като променен"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "включване или изключване на наблюдението на файловата система"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
-msgstr "отбелязване на файловете, че могат да се следят чрез файловата система"
+msgstr "отбелязване на файловете, че може да се следят чрез файловата система"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "изчистване на флага за следенето чрез файловата система"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -23292,7 +24065,7 @@
 "Настройката „core.splitIndex“ е зададена на „false“ (лъжа̀).  Сменете я или я "
 "изтрийте, за да включите разделянето на индекса"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -23300,7 +24073,7 @@
 "Настройката „core.splitIndex“ е зададена на „true“ (истина).  Сменете я или "
 "я изтрийте, за да изключите разделянето на индекса."
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23308,11 +24081,11 @@
 "Настройката „core.untrackedCache“ е зададена на „true“ (истина).  Сменете я "
 "или я изтрийте, за да изключите кеша за неследените файлове"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "Кешът за неследените файлове е изключен"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23320,29 +24093,29 @@
 "Настройката „core.untrackedCache“ е зададена на „false“ (лъжа̀).  Сменете я "
 "или я изтрийте, за да включите кеша за неследените файлове"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Кешът за неследените файлове е включен за „%s“"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "Настройката „core.fsmonitor“ не е зададена.  Задайте я, за да включите "
 "следенето чрез файловата система."
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "следенето чрез файловата система е включено"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "Настройката „core.fsmonitor“ е зададена.  Изтрийте я, за да изключите "
 "следенето чрез файловата система."
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "следенето чрез файловата система е изключено"
 
@@ -23437,91 +24210,63 @@
 msgid "print tag contents"
 msgstr "извеждане на съдържанието на ЕТИКЕТи"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [ОПЦИЯ…] ПЪТ [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [ОПЦИЯ…]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [ОПЦИЯ…] [ПЪТ]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move [ДЪРВО] [НОВ_ПЪТ]"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [ОПЦИЯ…]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [ОПЦИЯ…] [ДЪРВО]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock [ПЪТ]"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "неуспешно изтриване на „%s“"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "не е валидна директория"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "файлът „gitdir“ не съществува"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "файлът „gitdir“ не може да бъде прочетен (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr ""
-"изчитането върна по-малко байтове от очакваното (очаквани: %<PRIuMAX> байта, "
-"получени: %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "неправилен файл „gitdir“"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "файлът „gitdir“ сочи несъществуващо местоположение"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Изтриване на „%s/%s“: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "докладване на окастрените работни дървета"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "обявяване на работните копия по-стари от това ВРЕМЕ за остарели"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "„%s“ вече съществува"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "целта не може да се ползва за работно дърво: „%s“"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -23531,7 +24276,7 @@
 "За изрично задаване ползвайте „%s -f -f“, а за изчистване —\n"
 "„unlock“, „prune“ или „remove“"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23541,120 +24286,133 @@
 "За изрично задаване ползвайте „%s -f“, а за изчистване —\n"
 "„prune“ или „remove“"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "директорията „%s“ не може да бъде създадена"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Приготвяне на работното дърво (нов клон „%s“)"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 "Приготвяне на работното дърво (зануляване на клона „%s“, който сочеше към "
 "„%s“)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Приготвяне на работното дърво (изтегляне на „%s“)"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Подготвяне на работно дърво (указателят „HEAD“ не свързан: %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "Изтегляне КЛОНа, дори и да е изтеглен в друго работно дърво"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "създаване на нов клон"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "създаване или зануляване на клони"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "подготвяне на новото работно дърво"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "новото работно дърво да остане заключено"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "задаване на режима на следене (виж git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "опит за напасване на името на новия клон с това на следящ клон"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
-msgstr "Опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
+msgstr "опциите „-b“, „-B“ и „--detach“ са несъвместими една с друга"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "„--[no-]track“ може да се използва само при създаването на нов клон"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "извеждане на подробни анотации и обяснения, ако такива са налични"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"добавяне на анотация за окастряне на работните копия по-стари от това ВРЕМЕ"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "опциите „--verbose“ и „--porcelain“ са несъвместими"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "причина за заключване"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "„%s“ не е работно дърво"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Основното дърво не може да се отключи или заключи"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "„%s“ вече е заключено, защото „%s“"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "„%s“ вече е заключено"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "„%s“ не е заключено"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "не може да местите или изтривате работни дървета, в които има подмодули"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "принудително преместване, дори работното дърво да не е чисто или да е "
 "заключено"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "„%s“ е основно работно дърво"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "името на целта не може да се определи от „%s“"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -23663,7 +24421,7 @@
 "не може да преместите заключено работно дърво, причина за заключването: %s\n"
 "или го отключете, или го преместете принудително с „move -f -f“"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23671,41 +24429,41 @@
 "не може да преместите заключено работно дърво:\n"
 "или го отключете, или го преместете принудително с „move -f -f“"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 "проверките са неуспешни, работното дърво не може да бъде преместено: %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "„%s“ не може да се премести в „%s“"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "неуспешно изпълнение на „git status“ върху „%s“"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "„%s“ съдържа променени или нови файлове, за принудително изтриване е "
 "необходима опцията „--force“"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 "командата „git status“ не може да се изпълни за „%s“, код за грешка: %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "принудително изтриване, дори работното дърво да не е чисто или да е заключено"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23714,7 +24472,7 @@
 "не може да изтриете заключено работно дърво, причина за заключването: %s\n"
 "или го отключете, или го изтрийте принудително с „remove -f -f“"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23722,17 +24480,17 @@
 "не може да изтриете заключено работно дърво:\n"
 "или го отключете, или го изтрийте принудително с „remove -f -f“"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "проверките са неуспешни, работното дърво не може да бъде изтрито: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "поправяне: %s: „%s“"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "грешка: %s: „%s“"
@@ -23753,15 +24511,162 @@
 msgid "only useful for debugging"
 msgstr "само за изчистване на грешки"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C ПЪТ] [-c ИМЕ=СТОЙНОСТ]\n"
+"           [--exec-path[=ПЪТ]] [--html-path] [--man-path] [--info-path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=ПЪТ] [--work-tree=ПЪТ] [--namespace=ИМЕ]\n"
+"           [--super-prefix=ПЪТ] [--config-env=ИМЕ=ПРОМЕНЛИВА_НА_СРЕДАТА]\n"
+"           КОМАНДА [АРГ…]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"„git help -a“ извежда наличните подкоманди, а „git help -g“ извежда "
+"наличните\n"
+"въведения.  За помощ за специфична КОМАНДА ползвайте „git help КОМАНДА“, а "
+"за\n"
+"някое определено ПОНЯТИЕ използвайте „git help ПОНЯТИЕ“.  За преглед на\n"
+"системата за помощ използвайте „git help git“."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "опцията „--git-dir“ изисква директория\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "опцията „--namespace“ изисква име\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "опцията „--work-tree“ изисква директория\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "опцията „--super-prefix“ изисква префикс\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "опцията „-c“ изисква низ за настройка\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "опцията „--config-env“ изисква ключ\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "опцията „-C“ изисква директория\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "непозната опция: „%s“\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "при заместването на псевдоним „%s“: „%s“"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"псевдонимът „%s“ променя променливи на средата.\n"
+"За това може да ползвате „!git“ в псевдонима"
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "празен псевдоним за „%s“"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "зациклен псевдоним: „%s“"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "грешка при запис на стандартния изход"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "неизвестна грешка при запис на стандартния изход"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "грешка при затваряне на стандартния изход"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "зацикляне в псевдонимите: заместванията на „%s“ не приключват:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "„%s“ не може да се обработи като вградена команда"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"употреба: %s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr ""
+"неуспешно заместване на псевдонима „%s“ — резултатът „%s“ не е команда на "
+"git\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "командата „%s“ не може да се изпълни: %s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "опцията „--packfile“ изисква валидна контролна сума (а не „%s“)"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "не е хранилище на Git"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "опцията „--packfile“ изисква опция „--index-pack-args“"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "опцията „--index-pack-args“ изисква опция „--packfile“"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "неподдържани опции"
@@ -23787,136 +24692,111 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "изход след първоначалната обява на възможностите"
 
-#: git.c:28
+#: 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
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active    [ИМЕ] [ОПЦИЯ…]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [ИМЕ] [НИШКИ]"
+
+#: t/helper/test-simple-ipc.c:684
+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
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [ИМЕ] [ИЗЧАКВАНЕ]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [ИМЕ] [ЛЕКСЕМА]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [ИМЕ] [БРОЙ_БАЙТОВЕ] [РАЗМЕР]"
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
-"git [--version] [--help] [-C ПЪТ] [-c ИМЕ=СТОЙНОСТ]\n"
-"           [--exec-path[=ПЪТ]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]\n"
-"           [--git-dir=ПЪТ] [--work-tree=ПЪТ] [--namespace=ИМЕ]\n"
-"           КОМАНДА [АРГ…]"
+"test-helper simple-ipc multiple     [ИМЕ] [НИШКИ] [БРОЙ_БАЙТОВЕ] "
+"[РАЗМЕР_НА_ПАКЕТА]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"„git help -a“ извежда наличните подкоманди, а „git help -g“ извежда "
-"наличните\n"
-"въведения.  За помощ за специфична КОМАНДА ползвайте „git help КОМАНДА“, а "
-"за\n"
-"някое определено ПОНЯТИЕ използвайте „git help ПОНЯТИЕ“.  За преглед на\n"
-"системата за помощ използвайте „git help git“."
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "име или път за гнездото на Unix"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "опцията „--git-dir“ изисква директория\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "име на именован канал"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "опцията „--namespace“ изисква име\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "брой нишки в запаса нишки"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "опцията „--work-tree“ изисква директория\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "секунди изчакване на демона да стартира или спре"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "опцията „--super-prefix“ изисква префикс\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "брой байтове"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "опцията „-c“ изисква низ за настройка\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "брой заявки на нишка"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "опцията „-C“ изисква директория\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "байта"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "непозната опция: „%s“\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "знаци за пращане"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "при заместването на псевдоним „%s“: „%s“"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "лексема"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"псевдонимът „%s“ променя променливи на средата.\n"
-"За това може да ползвате „!git“ в псевдонима"
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "празен псевдоним за „%s“"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "зациклен псевдоним: „%s“"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "грешка при запис на стандартния изход"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "неизвестна грешка при запис на стандартния изход"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "грешка при затваряне на стандартния изход"
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "зацикляне в псевдонимите: заместванията на „%s“ не приключват:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "„%s“ не може да се обработи като вградена команда"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"употреба: %s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr ""
-"неуспешно заместване на псевдонима „%s“ — резултатът „%s“ не е команда на "
-"git\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "командата „%s“ не може да се изпълни: %s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "командна лексема за пращане"
 
 #: http.c:399
 #, c-format
@@ -23959,7 +24839,7 @@
 "Реализацията на SSL не може да се зададе да е „%s“, защото вече е зададена "
 "друга"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -24024,7 +24904,7 @@
 #: remote-curl.c:724
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
-"данните за POST не могат да се прочетат наново, пробвайте да увеличите "
+"данните за POST не може да се прочетат наново, пробвайте да увеличите "
 "настройката „http.postBuffer“"
 
 #: remote-curl.c:754
@@ -24119,54 +24999,54 @@
 msgid "no libc information available\n"
 msgstr "липсва информация за библиотеката на C\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "АРГУМЕНТИ"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "филтриране по вид на обекта"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "период на валидност/запазване"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "нулева операция (за съвместимост с предишни версии)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "повече подробности"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "по-малко подробности"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "да се показват такъв БРОЙ цифри от имената на обектите"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "кои празни знаци и #коментари да се махат от съобщенията"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "изчитане на пътищата от ФАЙЛ"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 "при ползването на „--pathspec-from-file“, пътищата са разделени с нулевия "
 "знак „NUL“"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "КЛЮЧ"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "име на полето, по което да е подредбата"
 
@@ -24176,14 +25056,6 @@
 "при възможност преизползване на решението на конфликта за обновяване на "
 "индекса"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "Указателят „HEAD“ не е свързан и е при "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Добавяне на съдържанието на файла към индекса"
@@ -24529,8 +25401,8 @@
 msgstr "Запис и проверка на индексите за множество пакети"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Създаване на обект-етикет"
+msgid "Creates a tag object with extra validation"
+msgstr "Създаване на обект-етикет с допълнителни проверки"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24838,72 +25710,55 @@
 msgstr "Указване на неследени файлове, които да бъдат нарочно пренебрегвани"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Съответствия на имена на автор/подаващ и/или адреси на е-поща"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Дефиниране на свойствата на подмодулите"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Пространства от имена на Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Помощни програми за работа с отдалечените хранилища"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Устройство на хранилището на Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Указване на версии и диапазони в Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Монтиране на едно хранилище в друго"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Въвеждащ урок за Git: втора част"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Въвеждащ урок за Git"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Общ преглед на препоръчваните начини за работа с Git"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Неправилна версия: „${arg}“"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Не е зададен журнален файл"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr ""
-"Журналният файл „${file}“ не може да бъде прочетен, за да се изпълнят "
-"командите от него наново"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr ""
-"Непозната команда.  Възможните варианти са: „start“, „good“, „bad“, „skip“"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "неуспешно двоично търсене, не е зададена команда."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "изпълнение на командата „${command}“"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24913,11 +25768,11 @@
 "изходният код от командата „${command}“ е ${res} — това е извън интервала "
 "[0, 128)"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "двоичното търсене не може да продължи"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24926,14 +25781,10 @@
 "неуспешно двоично търсене:\n"
 "функцията „bisect-state ${state}“ завърши с код за грешка ${res}"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "успешно двоично търсене"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "В момента не се извършва двоично търсене."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25159,7 +26010,7 @@
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
 "Прилагането на автоматично скатаното доведе до конфликти.  Промените ви са\n"
-"надеждно скатани.  Можете да пробвате да ги приложите чрез „git stash pop“\n"
+"надеждно скатани.  Може да пробвате да ги приложите чрез „git stash pop“\n"
 "или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
 
 #: git-rebase--preserve-merges.sh:191
@@ -25190,7 +26041,7 @@
 "\n"
 "Команди:\n"
 " p, pick ПОДАВАНЕ   — прилагане на подаването\n"
-" r, reword ПОДАВАНЕ — прилагане на подаването, но смяна на съобщението му\n"
+" r, reword ПОДАВАНЕ — прилагане на подаването, но промяна на съобщението му\n"
 " e, edit ПОДАВАНЕ   — прилагане на подаването и спиране при него за още "
 "промени\n"
 " s, squash ПОДАВАНЕ — вкарване на подаването в предходното му\n"
@@ -25321,7 +26172,7 @@
 "изпълнение\n"
 "на куката преди подаване.  Ако имате проблем с куката, ще трябва да го "
 "коригирате,\n"
-"преди да можете да промените подаването."
+"преди да може да промените съобщението на подаването."
 
 #: git-rebase--preserve-merges.sh:616
 #, sh-format
@@ -25435,7 +26286,7 @@
 
 #: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
 msgid "Could not commit staged changes."
-msgstr "Промените в индекса не могат да бъдат подадени."
+msgstr "Промените в индекса не може да бъдат подадени."
 
 #: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
 msgid "Could not execute editor"
@@ -25505,14 +26356,14 @@
 #: git-sh-setup.sh:227
 msgid "Cannot pull with rebase: You have unstaged changes."
 msgstr ""
-"Не можете да издърпвате при това пребазиране, защото има промени, които не "
-"са в индекса."
+"Не може да издърпвате при това пребазиране, защото има промени, които не са "
+"в индекса."
 
 #: git-sh-setup.sh:230
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr ""
-"Не можете да изпълните „$action“, защото има промени, които не са в индекса."
+"Не може да изпълните „$action“, защото има промени, които не са в индекса."
 
 #: git-sh-setup.sh:243
 msgid "Cannot rebase: Your index contains uncommitted changes."
@@ -25521,14 +26372,14 @@
 #: git-sh-setup.sh:246
 msgid "Cannot pull with rebase: Your index contains uncommitted changes."
 msgstr ""
-"Не можете да издърпвате при това пребазиране, защото в индекса има "
-"неподадени промени."
+"Не може да издърпвате при това пребазиране, защото в индекса има неподадени "
+"промени."
 
 #: git-sh-setup.sh:249
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
-"Не можете да изпълните „$action“, защото в индекса има неподадени промени."
+"Не може да изпълните „$action“, защото в индекса има неподадени промени."
 
 #: git-sh-setup.sh:253
 msgid "Additionally, your index contains uncommitted changes."
@@ -25773,7 +26624,7 @@
 
 #: git-add--interactive.perl:1345
 msgid "The selected hunks do not apply to the index!\n"
-msgstr "Избраните парчета не могат да се добавят в индекса!\n"
+msgstr "Избраните парчета не може да се добавят в индекса!\n"
 
 #: git-add--interactive.perl:1360
 #, perl-format
@@ -25904,27 +26755,32 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "разликата между местния часовия пояс и GMT е 24 часа или повече\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "ФАТАЛНА ГРЕШКА: „%s“ не завърши успешно, а с код %d"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr ""
 "текстовият редактор приключи работата с грешка, всичко се преустановява"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "„%s“ съдържа временна версия на подготвяното е-писмо.\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "„%s.final“ съдържа подготвеното е-писмо.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "опцията „--dump-aliases“ е несъвместима с другите опции\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -25935,11 +26791,11 @@
 "забележете знака „e“.  За да изключите тази проверка, задайте\n"
 "настройката „sendemail.forbidSendmailVariables“ да е „false“ (лъжа̀).\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "Командата „git format-patch“ не може да се изпълни извън хранилище\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
@@ -25947,40 +26803,40 @@
 "„batch-size“ и „relogin“ трябва да се указват заедно (или чрез командния "
 "ред, или чрез настройките)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Непознато поле за опцията „--suppress-cc“: „%s“\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Непозната стойност за „--confirm“: %s\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: псевдоними за sendmail съдържащи кавички („\"“) не се "
 "поддържат: %s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: „:include:“ не се поддържа: %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr ""
 "ПРЕДУПРЕЖДЕНИЕ: пренасочвания „/file“ или „|pipe“ не се поддържат: %s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: редът за „sendmail“ не е разпознат: %s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25995,21 +26851,12 @@
 "    ● укажете „./%s“ за файл;\n"
 "    ● използвате опцията „--format-patch“ за диапазон.\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Директорията „%s“ не може да се отвори: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"ФАТАЛНА ГРЕШКА: %s: %s\n"
-"ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -26019,17 +26866,17 @@
 "Не са указани кръпки!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "В „%s“ липсва тема"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "„%s“ не може да се отвори за запис: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -26044,27 +26891,27 @@
 "\n"
 "Изтрийте всичко, ако не искате да изпратите обобщаващо писмо.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "„%s“ не може да се отвори: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "„%s.final“ не може да се отвори: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "Обобщаващото писмо е празно и се прескача\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Сигурни ли сте, че искате да ползвате „%s“ [y/N]? "
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -26072,11 +26919,11 @@
 "Следните файлове са 8 битови, но не са с обявена заглавна част „Content-"
 "Transfer-Encoding“.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Кое 8 битово кодиране се ползва [стандартно: UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -26089,22 +26936,22 @@
 "все още е с шаблонното заглавие „*** SUBJECT HERE ***“.  Ползвайте опцията\n"
 "„--force“, ако сте сигурни, че точно това искате да изпратите.\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "На кой да се пратят е-писмата (незадължително поле)"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "ФАТАЛНА ГРЕШКА: „%s“ е псевдоним на себе си\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 "Идентификатор на съобщение „Message-ID“, което да се използва за обявяването "
 "на отговор „In-Reply-To“ (незадължително поле)"
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "ГРЕШКА: не може да се извлече адрес от „%s“\n"
@@ -26112,18 +26959,18 @@
 #. 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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr ""
 "Какво да се направи с този адрес? „q“ (спиране), „d“ (изтриване), "
 "„e“ (редактиране): "
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "Пътят към сертификат „%s“ не съществува."
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -26139,7 +26986,7 @@
 "    Към списъка с получателите („Cc“) са добавени и другите\n"
 "    адреси на е-поща, които са упоменати в съобщението за\n"
 "    подаване на кръпката.  Стандартно командата „send-email“\n"
-"    пита за това преди изпращане.  Можете да премените това\n"
+"    пита за това преди изпращане.  Може да премените това\n"
 "    поведение чрез настройката „sendemail.confirm“.\n"
 "\n"
 "    Командата „git send-email --help“ предоставя още\n"
@@ -26151,132 +26998,147 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr ""
 "Изпращане на е-писмото? „y“ (да), „n“ (не), „e“ (редактиране), „q“ (изход), "
 "„a“ (всичко): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Изискване на отговор към това е-писмо"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "Сървърът за SMTP не е настроен правилно."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Сървърът не поддържа „STARTTLS“! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "Неуспешно изпълнение на STARTTLS! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
 "Подсистемата за SMTP не може да се инициализира.  Проверете настройките и "
 "използвайте опцията: „--smtp-debug“."
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "„%s“ не може да бъде изпратен\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Проба за изпращане на „%s“\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Изпращане на „%s“\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Успех при пробата.  От журнала:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "Успех.  От журнала:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Резултат: "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Резултат: успех\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "файлът „%s“ не може да бъде отворен"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Добавяне на „як: %s“ от ред „%s“\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Добавяне на „до: %s“ от ред „%s“\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(не-mbox) Добавяне на „як: %s“ от ред „%s“\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(тяло) Добавяне на „як: %s“ от ред „%s“\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Не може да бъде се изпълни „%s“"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Добавяне на „%s: %s“ от: „%s“\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) програмният канал не може да се затвори за изпълнението на „%s“"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "съобщението не може да се изпрати чрез 7 битови знаци"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "неправилно кодиране за пренос"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"ФАТАЛНА ГРЕШКА: %s: отхвърлено от куката „sendemail-validate“\n"
+"%s\n"
+"ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "„%s“ не може да се отвори: %s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "„%s“: кръпката съдържа ред с над 988 знака"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"ФАТАЛНА ГРЕШКА: %s: %d е повече от 998 знака\n"
+"ПРЕДУПРЕЖДЕНИЕ: не са пратени никакви кръпки\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, 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:1990
+#: git-send-email.perl:2001
 #, 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 2131ed7..4c45170 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -1,7 +1,7 @@
 # Catalan translations for Git.
 # This file is distributed under the same license as the Git package.
 # Alex Henrie <alexhenrie24@gmail.com>, 2014-2016.
-# Jordi Mas i Hernàndez <jmas@softcatala.org>, 2016-2020
+# Jordi Mas i Hernàndez <jmas@softcatala.org>, 2016-2021
 #
 # Terminologia i criteris utilitzats
 #
@@ -14,7 +14,8 @@
 #   chunk            |  fragment
 #   delta            |  diferència
 #   deprecated       |  en desús
-#   dry              |  simulació
+#   detached         |  separat
+#   dry-run          |  fer una prova
 #   fatal            |  fatal
 #   flush            |  buidar / buidatge
 #   hook             |  lligam
@@ -51,9 +52,9 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-15 16:27+0800\n"
-"PO-Revision-Date: 2020-05-28 18:14+0200\n"
-"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-14 10:22-0600\n"
+"Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n"
 "Language-Team: Catalan\n"
 "Language: ca\n"
 "MIME-Version: 1.0\n"
@@ -67,9 +68,9 @@
 msgid "Huh (%s)?"
 msgstr "Perdó (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "no s'ha pogut llegir l'índex"
 
@@ -97,7 +98,7 @@
 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:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "no s'ha pogut escriure l'índex"
 
@@ -113,7 +114,7 @@
 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:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -253,12 +254,12 @@
 msgid "unstaged"
 msgstr "unstaged"
 
-#: add-interactive.c:1144 apply.c:4989 apply.c:4992 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "camí"
@@ -294,11 +295,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 ""
@@ -336,8 +337,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»."
@@ -378,11 +379,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 ""
@@ -420,8 +421,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."
@@ -466,11 +467,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 ""
@@ -490,14 +491,13 @@
 #, 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
@@ -534,8 +534,7 @@
 #: 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
@@ -674,6 +673,7 @@
 #. 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.
@@ -682,8 +682,7 @@
 #. of the word "no" does not start with n.
 #: add-patch.c:1246 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]? "
@@ -788,7 +787,7 @@
 msgid "'git apply' failed"
 msgstr "«git apply» ha fallat"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -797,37 +796,37 @@
 "\n"
 "Desactiva aquest missatge amb «git config advice.%s false»"
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%spista: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 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:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Cometre no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Fusionar no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Baixar no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Revertir no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:260
+#: advice.c:262
 #, 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:268
+#: advice.c:270
 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."
@@ -836,23 +835,36 @@
 "«git add/rm <fitxer>» segons sigui apropiat per a marcar la\n"
 "resolució i feu una comissió."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "S'està sortint a causa d'un conflicte no resolt."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "No heu conclòs la vostra fusió (MERGE_HEAD existeix)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Cometeu els vostres canvis abans de fusionar."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "S'està sortint a causa d'una fusió no terminada."
 
-#: advice.c:290
+#: 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:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -870,7 +882,8 @@
 "\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"
@@ -888,7 +901,8 @@
 "\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
@@ -899,95 +913,91 @@
 msgid "unclosed quote"
 msgstr "cita no tancada"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "opció d'espai en blanc «%s» no reconeguda"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "opció ignora l'espai en blanc «%s» no reconeguda"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject i --3way no es poden usar junts."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached i --3way no es poden usar junts."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way fora d'un dipòsit"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index fora d'un dipòsit"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached fora d'un dipòsit"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "No es pot preparar l'expressió regular de marca de temps %s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec ha retornat %d per l'entrada: %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "no s'ha pogut trobar el nom de fitxer en el pedaç a la línia %d"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: git-diff incorrecte - s'esperava /dev/null, s'ha rebut %s en la "
 "línia %d"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: git-diff incorrecte - nom de fitxer nou inconsistent en la línia "
 "%d"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: git-diff incorrecte - nom de fitxer antic inconsistent en la "
 "línia %d"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff incorrecte - s'esperava /dev/null en la línia %d"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "mode no vàlid en la línia %d: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "línies de capçalera %d i %d inconsistents"
 
-#: apply.c:1372
+#: 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)"
@@ -995,93 +1005,93 @@
 "a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
 "%d components de nom de camí inicial (línia %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "a la capçalera de git diff li manca informació de nom de fitxer (línia %d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recompte: línia inesperada: %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "fragment de pedaç sense capçalera a la línia %d: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "el fitxer nou depèn dels continguts antics"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "el fitxer suprimit encara té continguts"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "pedaç malmès a la línia %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "el fitxer nou %s depèn dels continguts antics"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "el fitxer suprimit %s encara té continguts"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** advertència: el fitxer %s queda buit però no se suprimeix"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "pedaç binari malmès a la línia %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "pedaç binari no reconegut a la línia %d"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "pedaç amb només escombraries a la línia %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "no s'ha pogut obrir o llegir %s"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "inici de línia no vàlid: «%c»"
 
-#: apply.c:3057
+#: apply.c:3056
 #, 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:3069
+#: apply.c:3068
 #, 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:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1090,23 +1100,23 @@
 "tot cercant:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "manquen les dades de pedaç binari de «%s»"
 
-#: apply.c:3105
+#: apply.c:3104
 #, 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:3152
+#: apply.c:3151
 #, 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:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1114,115 +1124,121 @@
 "el pedaç s'aplica a «%s» (%s), el qual no coincideix amb els continguts "
 "actuals."
 
-#: apply.c:3171
+#: apply.c:3170
 #, 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:3189
+#: apply.c:3188
 #, 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:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "el pedaç binari no s'aplica a «%s»"
 
-#: apply.c:3209
+#: apply.c:3208
 #, 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:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "el pedaç ha fallat: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "no es pot agafar %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 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:3413
+#: apply.c:3412
 #, 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:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "el camí %s s'ha canviat de nom / s'ha suprimit"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: no existeix en l'índex"
 
-#: apply.c:3537 apply.c:3708 apply.c:3953
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: no coincideix amb l'índex"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
+#: apply.c:3571
+#, fuzzy
+msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
-"al dipòsit li manca el blob necessari per a retrocedir a una fusió de 3 "
-"vies."
+"al dipòsit li manca el blob necessari per a retrocedir a una fusió de 3 vies."
 
-#: apply.c:3575
-#, c-format
-msgid "Falling back to three-way merge...\n"
+#: apply.c:3574
+#, fuzzy, c-format
+msgid "Performing three-way merge...\n"
 msgstr "S'està retrocedint a una fusió de 3 vies...\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "no es poden llegir els continguts actuals de «%s»"
 
-#: apply.c:3607
-#, c-format
-msgid "Failed to fall back on three-way merge...\n"
+#: apply.c:3606
+#, fuzzy, c-format
+msgid "Failed to perform three-way merge...\n"
 msgstr "S'ha produït un error en retrocedir a una fusió de 3 vies...\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "S'ha aplicat el pedaç a «%s» amb conflictes.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "S'ha aplicat el pedaç a «%s» netament.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, fuzzy, c-format
+msgid "Falling back to direct application...\n"
+msgstr "S'està retrocedint a una fusió de 3 vies...\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "el pedaç d'eliminació deixa els continguts dels fitxers"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipus erroni"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s és del tipus %o, s'esperava %o"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "camí no vàlid: «%s»"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: ja existeix en l'índex"
@@ -1301,7 +1317,7 @@
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
-"no s'ha pogut crear un magatzem de recolzament per al fitxer novament creat "
+"no s'ha pogut crear un magatzem de suport per al fitxer novament creat "
 "%s"
 
 #: apply.c:4333 apply.c:4478
@@ -1309,7 +1325,7 @@
 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:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "no s'ha pogut escriure a «%s»"
@@ -1345,7 +1361,7 @@
 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:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "no es pot obrir %s"
@@ -1360,39 +1376,39 @@
 msgid "Rejected hunk #%d."
 msgstr "S'ha rebutjat el tros #%d."
 
-#: apply.c:4720
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "S'ha omès el pedaç «%s»."
 
-#: apply.c:4728
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "entrada no reconeguda"
 
-#: apply.c:4748
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "no es pot llegir el fitxer d'índex"
 
-#: apply.c:4905
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "no es pot obrir el pedaç «%s»: %s"
 
-#: apply.c:4932
+#: apply.c:4937
 #, 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:4938 apply.c:4953
+#: apply.c:4943 apply.c:4958
 #, 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:4946
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1401,137 +1417,137 @@
 msgstr[1] ""
 "S'han aplicat %d línies després d'arreglar els errors d'espai en blanc."
 
-#: apply.c:4962 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "No s'ha pogut escriure un fitxer d'índex nou"
 
-#: apply.c:4990
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "no apliquis els canvis que coincideixin amb el camí donat"
 
-#: apply.c:4993
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "aplica els canvis que coincideixin amb el camí donat"
 
-#: apply.c:4995 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "número"
 
-#: apply.c:4996
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "elimina <nombre> barres obliqües inicials dels camins de diferència "
 "tradicionals"
 
-#: apply.c:4999
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "ignora afegiments fets pel pedaç"
 
-#: apply.c:5001
+#: apply.c:5006
 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:5005
+#: apply.c:5010
 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:5007
+#: apply.c:5012
 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:5009
+#: apply.c:5014
 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:5011
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
 
-#: apply.c:5013
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marca els fitxers nous amb «git add --intent-to-add»"
 
-#: apply.c:5015
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "aplica un pedaç sense tocar l'arbre de treball"
 
-#: apply.c:5017
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
 
-#: apply.c:5020
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
 
-#: apply.c:5022
-msgid "attempt three-way merge if a patch does not apply"
+#: apply.c:5027
+#, fuzzy
+msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr "intenta una fusió de tres vies si el pedaç no s'aplica"
 
-#: apply.c:5024
+#: apply.c:5029
 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:5027 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "els camins se separen amb el caràcter NUL"
 
-#: apply.c:5029
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "assegura't que almenys <n> línies de context coincideixin"
 
-#: apply.c:5030 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "acció"
 
-#: apply.c:5031
+#: apply.c:5036
 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:5034 apply.c:5037
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignora els canvis d'espai en blanc en cercar context"
 
-#: apply.c:5040
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "aplica el pedaç al revés"
 
-#: apply.c:5042
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "no esperis almenys una línia de context"
 
-#: apply.c:5044
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "deixa els trossos rebutjats en fitxers *.rej corresponents"
 
-#: apply.c:5046
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "permet trossos encavalcants"
 
-#: apply.c:5047 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "sigues detallat"
 
-#: apply.c:5049
+#: apply.c:5054
 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:5052
+#: apply.c:5057
 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:5054 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "arrel"
 
-#: apply.c:5055
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "anteposa <arrel> a tots els noms de fitxer"
 
@@ -1589,8 +1605,7 @@
 
 #: 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 <dipòsit> [--exec <ordre>] [<opcions>] <arbre> "
 "[<camí>...]"
@@ -1599,141 +1614,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <dipòsit> [--exec <ordre>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "no es pot llegir «%s»"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "no s'ha pogut llegir «%s»"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "l'especificació de camí «%s» no ha coincidit amb cap fitxer"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "no existeix la referència: %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "no és un nom d'objecte vàlid: %s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "no és un objecte d'arbre: %s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "no se segueix el directori de treball actual"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Fitxer no trobat: %s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "No és un fitxer normal: %s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "format"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "format d'arxiu"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "prefix"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1208 builtin/fast-export.c:1210
-#: builtin/fast-export.c:1214 builtin/grep.c:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "fitxer"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "inclou els fitxers no seguits a l'arxiu"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "escriu l'arxiu a aquest fitxer"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "llegeix .gitattributes en el directori de treball"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "informa de fitxers arxivats en stderr"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "estableix el nivell de compressió"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "llista els formats d'arxiu admesos"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "dipòsit"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "recupera l'arxiu del dipòsit remot <dipòsit>"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "ordre"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "camí a l'ordre git-upload-archive remota"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Opció inesperada --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "L'opció --exec només es pot usar juntament amb --remote"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Opció inesperada --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "Les opcions --add-file i --remote no es poden usar juntes"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Format d'arxiu desconegut «%s»"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument no admès per al format «%s»: -%d"
@@ -1743,12 +1758,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s no és un nom d'atribut vàlid"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s no està permès: %s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1817,7 +1832,8 @@
 "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
@@ -1830,12 +1846,12 @@
 msgid "a %s revision is needed"
 msgstr "es necessita una revisió %s"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "no s'ha pogut crear el fitxer «%s»"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "no s'ha pogut llegir el fitxer «%s»"
@@ -1850,10 +1866,10 @@
 msgstr "%s era ambdós %s i %s\n"
 
 #: bisect.c:1066
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "No s'ha trobat cap comissió comprovable.\n"
 "Potser heu començat amb paràmetres de camí incorrectes?\n"
@@ -1867,6 +1883,7 @@
 
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
+#.
 #: bisect.c:1101
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
@@ -1874,41 +1891,41 @@
 msgstr[0] "Bisecant: manca %d revisió a provar després d'aquesta %s\n"
 msgstr[1] "Bisecant: manquen %d revisions a provar després d'aquesta %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents i --reverse no funcionen bé juntes."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "no es pot usar --contents amb el nom d'objecte de la comissió final"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse i --first-parent-together requereixen una última comissió "
 "especificada"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "la configuració del passeig per revisions ha fallat"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent junts requereixen un rang de la cadena de mares "
 "primeres"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "no hi ha tal camí %s en %s"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "no es pot llegir el blob %s per al camí %s"
@@ -1979,8 +1996,7 @@
 #: 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"
@@ -2007,8 +2023,7 @@
 
 #: 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."
@@ -2054,12 +2069,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "No és un punt de ramificació vàlid: «%s»."
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "«%s» ja s'ha agafat a «%s»"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD de l'arbre de treball %s no està actualitzat"
@@ -2084,8 +2099,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "capçalera no reconeguda: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "no s'ha pogut obrir «%s»"
@@ -2128,339 +2143,343 @@
 msgid "pack-objects died"
 msgstr "El pack-objects s'ha mort"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "El rev-list s'ha mort"
-
-#: bundle.c:428
+#: bundle.c:386
 #, 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:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "versió del farcell no compatible %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, 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:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argument no reconegut: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "S'està refusant crear un farcell buit."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "no es pot crear «%s»"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "L'index-pack s'ha mort"
 
+#: chunk-format.c:113
+#, fuzzy
+msgid "terminating chunk id appears earlier than expected"
+msgstr ""
+"s'ha acabat l'identificador de fragment multi-index apareix abans del que "
+"s'esperava"
+
+#: chunk-format.c:122
+#, fuzzy, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr ""
+"desplaçament incorrecte de l'objecte per a oid[%d] =%s%<PRIx64> !=%<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr ""
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr ""
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "valor de color no vàlid: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "especificació de hash no vàlida"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "el fitxer del graf de comissions és massa petit"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr ""
 "la signatura del graf de comissions %X no coincideix amb la signatura %X"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "la versió del graf de comissions %X no coincideix amb la versió %X"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr ""
 "la versió del hash del graf de comissions %X no coincideix amb la versió %X"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr ""
 "el fitxer del graf de comissions és massa petit per guardar %u fragments"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "desplaçament %08x%08x del fragment del graf de comissions incorrecte"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr ""
-"el fragment amb id %08x del graf de comissions apareix múltiples vegades"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "el fragment del graf de comissions no té grafs de base"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "la cadena del graf de comissions no coincideix"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 "la cadena del graf de comissions no és vàlida: la línia «%s» no és un hash"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "no es poden trobar tots els fitxers del graf de comissions"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 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:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "no s'ha pogut trobar la comissió %s"
 
-#: commit-graph.c:1042 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "no s'ha pogut analitzar la comissió %s"
 
-#: commit-graph.c:1265 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, 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:1301
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "S'estan carregant comissions conegudes al graf de comissions"
 
-#: commit-graph.c:1318
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "S'estan expandint les comissions abastables al graf de comissions"
 
-#: commit-graph.c:1338
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "S'estan esborrant les marques de comissions al graf de comissions"
 
-#: commit-graph.c:1357
+#: commit-graph.c:1424
+#, fuzzy
+msgid "Computing commit graph topological levels"
+msgstr "S'estan calculant els nombres de generació del graf de comissions"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "S'estan calculant els nombres de generació del graf de comissions"
 
-#: commit-graph.c:1424
+#: commit-graph.c:1558
 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:1501
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "S'estan recollint els objectes referenciats"
 
-#: commit-graph.c:1526
+#: commit-graph.c:1660
 #, 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:1539
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "error en afegir paquet %s"
 
-#: commit-graph.c:1543
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "s'ha produït un error en obrir l'índex per «%s»"
 
-#: commit-graph.c:1582
+#: commit-graph.c:1714
 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:1597
-msgid "Counting distinct commits in commit graph"
-msgstr "S'estan comptant les comissions diferents al graf de comissions"
-
-#: commit-graph.c:1629
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "S'estan cercant les vores addicionals al graf de comissions"
 
-#: commit-graph.c:1678
+#: commit-graph.c:1781
 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:1720 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: commit-graph.c:1733
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "no s'ha pogut crear una capa de graf temporal"
 
-#: commit-graph.c:1738
+#: commit-graph.c:1830
 #, 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:1808
+#: commit-graph.c:1887
 #, 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:1853
+#: commit-graph.c:1923
 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:1869
+#: commit-graph.c:1939
 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:1889
+#: commit-graph.c:1959
 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:2015
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "S'estan escanejant les comissions fusionades"
 
-#: commit-graph.c:2059
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "S'està fusionant el graf de comissions"
 
-#: commit-graph.c:2165
+#: commit-graph.c:2244
 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:2274
-#, c-format
-msgid "the commit graph format cannot write %d commits"
-msgstr "el format del graf de comissions no pot escriure %d comissions"
-
-#: commit-graph.c:2285
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "massa comissions per escriure un graf"
 
-#: commit-graph.c:2378
+#: commit-graph.c:2450
 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:2388
+#: commit-graph.c:2460
 #, 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:2398 commit-graph.c:2413
+#: commit-graph.c:2470 commit-graph.c:2485
 #, 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:2405
+#: commit-graph.c:2477
 #, 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:2423
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "S'estan verificant les comissions al graf de comissions"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2510
 #, 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:2445
+#: commit-graph.c:2517
 #, 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:2455
+#: commit-graph.c:2527
 #, 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:2464
+#: commit-graph.c:2536
 #, 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:2478
+#: commit-graph.c:2550
 #, 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:2483
+#: commit-graph.c:2555
 #, 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:2487
+#: commit-graph.c:2559
 #, 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:2503
-#, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
+#: commit-graph.c:2576
+#, fuzzy, c-format
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr "La generació del graf de comissions per la comissió %s és %u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2582
 #, 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:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "no s'ha pogut analitzar %s"
@@ -2485,30 +2504,31 @@
 "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:1172
+#: commit.c:1237
 #, 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:1176
+#: commit.c:1241
 #, 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:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "La comissió %s no té signatura GPG."
 
-#: commit.c:1182
+#: commit.c:1247
 #, 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:1436
+#: commit.c:1501
 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"
@@ -2523,7 +2543,7 @@
 msgid "memory exhausted"
 msgstr "memòria esgotada"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2538,301 +2558,341 @@
 "\t%s\n"
 "Això pot ser degut a inclusions circulars."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "no s'ha pogut expandir el camí d'inclusió «%s»"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "les inclusions de configuració relatives han de venir de fitxers"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "els condicionals d'inclusió de configuració relatius han de venir de fitxers"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "format de configuració no vàlid: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr ""
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr ""
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "la clau no conté una secció: «%s»"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "la clau no conté un nom de variable: «%s»"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "clau no vàlida: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "clau no vàlida (línia nova): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "clau de configuració buida"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "paràmetre de configuració erroni: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "format erroni a %s"
 
-#: config.c:836
+#: config.c:622
+#, fuzzy, c-format
+msgid "bogus count in %s"
+msgstr "format erroni a %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "hi ha massa arguments a %s"
+
+#: config.c:636
+#, fuzzy, c-format
+msgid "missing config key %s"
+msgstr "fitxer de configuració no vàlid %s"
+
+#: config.c:644
+#, fuzzy, c-format
+msgid "missing config value %s"
+msgstr "falta el valor per «%s»"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "línia de configuració %d errònia en el blob %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "línia de configuració %d errònia en el fitxer %s"
 
-#: config.c:844
+#: config.c:1003
 #, 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:848
+#: config.c:1007
 #, 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:852
+#: config.c:1011
 #, 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:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "línia de configuració %d errònia en %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "fora de rang"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "unitat no vàlida"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "valor de configuració numèric erroni «%s» per «%s»: %s"
 
-#: config.c:1013
+#: config.c:1163
 #, 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:1016
+#: config.c:1166
 #, 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:1019
+#: config.c:1169
 #, 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:1022
+#: config.c:1172
 #, 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:1025
+#: config.c:1175
 #, 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:1028
+#: config.c:1178
 #, 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:1123
+#: config.c:1257
+#, fuzzy, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "valor de configuració numèric erroni «%s» per «%s»: %s"
+
+#: config.c:1275
 #, 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:1132
+#: config.c:1284
 #, 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:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "la longitud d'«abbrev» està fora de rang: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "nivell de compressió de zlib incorrecte %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar només hauria de ser un caràcter"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "mode de creació d'objecte no vàlid: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "valor no vàlid per a %s"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valor no vàlid per a %s: %s"
 
-#: config.c:1472
+#: config.c:1626
 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:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "nivell de compressió de paquet %d erroni"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "no s'ha pogut carregar l'objecte blob de configuració «%s»"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "la referència «%s» no assenyala a un blob"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "no s'ha pogut resoldre el blob de configuració: «%s»"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "s'ha produït un error en analitzar %s"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
 
-#: config.c:2122
+#: config.c:2293
 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:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s no vàlid: «%s»"
 
-#: config.c:2341
+#: config.c:2512
 #, 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:2387
+#: config.c:2558
 #, 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:2389
+#: config.c:2560
 #, 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:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nom de secció no vàlid «%s»"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s té múltiples valors"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "no es pot escriure un nou fitxer de configuració %s"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "no s'ha pogut blocar el fitxer de configuració %s"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "s'està obrint %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "patró no vàlid: %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "fitxer de configuració no vàlid %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "ha fallat «fstat» a %s"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "no s'ha pogut fer «mmap» «%s»"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "ha fallat chmod a %s"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "no s'ha pogut escriure el fitxer de configuració «%s»"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "no s'ha pogut establir «%s» a «%s»"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855
-#: builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "no s'ha pogut desassignar «%s»"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nom de secció no vàlida: %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "falta el valor per «%s»"
@@ -2895,45 +2955,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "s'ha produït un error de protocol: no s'esperava «%s»"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "format d'objecte «%s» especificat pel servidor desconegut"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "resposta de ls-refs no vàlida: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "s'esperava una neteja després del llistat de referències"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "s'esperava un final de resposta després del llistat de referències"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "el protocol «%s» no és compatible"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "no s'ha pogut establir SO_KEEPALIVE al sòcol"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "S'està cercant %s..."
 
-#: connect.c:735
+#: connect.c:761
 #, 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:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2942,7 +3002,7 @@
 "fet.\n"
 "S'està connectant a %s (port %s) ... "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2952,63 +3012,67 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "fet."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "no s'ha pogut trobar %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "port desconegut %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "s'ha bloquejat el nom estrany d'amfitrió «%s»"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "s'ha bloquejat el port estrany «%s»"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "no s'ha pogut iniciar servidor intermediari «%s»"
 
-#: connect.c:1024
+#: connect.c:1050
 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:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr ""
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "la variant «simple» de ssh no és compatible amb -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "la variant «simple» de ssh no és compatible amb -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "la variant «simple» de ssh no permet definir el port"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "s'ha bloquejat el nom de fitxer estrany «%s»"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "no s'ha pogut bifurcar"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "S'està comprovant la connectivitat"
 
@@ -3024,130 +3088,131 @@
 msgid "failed to close rev-list's stdin"
 msgstr "s'ha produït un error en tancar l'stdin del rev-list"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action %d il·legal"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF es reemplaçà per LF en %s"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 "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:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF es reemplaçà per CRLF en %s"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 "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:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM està prohibida a «%s» si està codificada com a %s"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "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:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "La BOM és necessària en «%s» si està codificada com a %s"
 
-#: convert.c:306
+#: 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:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "s'ha produït un error en codificar «%s» des de %s a %s"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "codificar «%s» des de %s a %s i cap enrere no és el mateix"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "no es pot bifurcar per a executar el filtre extern «%s»"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "no es pot alimentar l'entrada al filtre extern «%s»"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "el filtre extern «%s» ha fallat %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "la lectura del filtre extern «%s» ha fallat"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "el filtre extern «%s» ha fallat"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "tipus de filtre inesperat"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "el nom del camí és massa gran per al filtre extern"
 
-#: convert.c:940
+#: convert.c:934
 #, 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:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "cert/fals no són codificacions d'arbre de treball vàlides"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: el filtre de netejat «%s» ha fallat"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: ha fallat el filtre smudge %s"
@@ -3277,23 +3342,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "Marcades %d illes, fet.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "valor desconegut per a --diff-merges: %s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base no funciona amb intervals"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base només funciona amb comissions"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "no s'ha pogut obtenir HEAD"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "no s'ha trobat una base de fusió"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "s'han trobat múltiples bases de fusió"
 
@@ -3332,8 +3402,8 @@
 #: diff.c:325
 #, 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-"
@@ -3344,8 +3414,8 @@
 "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
 #, c-format
@@ -3362,35 +3432,35 @@
 "S'han trobat errors en la variable de configuració «diff.dirstat»:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "el diff external s'ha mort, s'està aturant a %s"
 
-#: diff.c:4625
+#: diff.c:4630
 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:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S and --find-object són mútuament excloents"
 
-#: diff.c:4706
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow requereix exactament una especificació de camí"
 
-#: diff.c:4754
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor --stat no vàlid: %s"
 
-#: diff.c:4759 diff.c:4764 diff.c:4769 diff.c:4774 diff.c:5302
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s espera un valor numèric"
 
-#: diff.c:4791
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3399,199 +3469,200 @@
 "S'ha produït un error en analitzar el paràmetre d'opció de --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4876
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de canvi «%c» desconeguda a --diff-filter=%s"
 
-#: diff.c:4900
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valor desconegut després de ws-error-highlight=%.*s"
 
-#: diff.c:4914
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "no s'ha pogut resoldre «%s»"
 
-#: diff.c:4964 diff.c:4970
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s espera una forma <n>/<m>"
 
-#: diff.c:4982
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s esperava un caràcter, s'ha rebut «%s»"
 
-#: diff.c:5003
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "argument --color-moved incorrecte: %s"
 
-#: diff.c:5022
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode «%s» no vàlid en --color-moved-ws"
 
-#: diff.c:5062
-msgid "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and \"histogram\""
+#: diff.c:5068
+msgid ""
+"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
+"\"histogram\""
 msgstr ""
 "l'opció diff-algorithm accepta «myers», «minimal», «patience» i «histogram»"
 
-#: diff.c:5098 diff.c:5118
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argument no vàlid a %s"
 
-#: diff.c:5222
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "expressió regular donada a -I: no vàlida: «%s»"
 
-#: diff.c:5271
+#: diff.c:5277
 #, 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:5327
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "argument --word-diff incorrecte: %s"
 
-#: diff.c:5350
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Opcions del format de sortida del diff"
 
-#: diff.c:5352 diff.c:5358
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "generant pedaç"
 
-#: diff.c:5355 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "omet la sortida de diferències"
 
-#: diff.c:5360 diff.c:5474 diff.c:5481
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5361 diff.c:5364
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "genera diffs amb <n> línies de context"
 
-#: diff.c:5366
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "genera el diff en format cru"
 
-#: diff.c:5369
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "sinònim de «-p --raw»"
 
-#: diff.c:5373
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "sinònim de «-p --stat»"
 
-#: diff.c:5377
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "llegible per màquina --stat"
 
-#: diff.c:5380
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "mostra només l'última línia de --stat"
 
-#: diff.c:5382 diff.c:5390
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5383
+#: diff.c:5402
 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:5387
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinònim de --dirstat=cumulative"
 
-#: diff.c:5391
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinònim de --dirstat=files,param1,param2..."
 
-#: diff.c:5395
+#: diff.c:5414
 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:5398
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "resum condensat com ara creacions, canvis de nom i mode"
 
-#: diff.c:5401
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "mostra només els noms de fitxers canviats"
 
-#: diff.c:5404
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "mostra només els noms i l'estat dels fitxers canviats"
 
-#: diff.c:5406
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<amplada>[<amplada-nom>[,<recompte>]]"
 
-#: diff.c:5407
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "genera diffstat"
 
-#: diff.c:5409 diff.c:5412 diff.c:5415
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<amplada>"
 
-#: diff.c:5410
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "genera diffstat amb una amplada donada"
 
-#: diff.c:5413
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "genera diffstat amb un nom d'amplada donat"
 
-#: diff.c:5416
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "genera diffstat amb una amplada de graf donada"
 
-#: diff.c:5418
+#: diff.c:5437
 msgid "<count>"
 msgstr "<comptador>"
 
-#: diff.c:5419
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "genera diffstat amb línies limitades"
 
-#: diff.c:5422
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "genera un resum compacte a diffstat"
 
-#: diff.c:5425
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "diff amb sortida binària que pot ser aplicada"
 
-#: diff.c:5428
+#: diff.c:5447
 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:5430
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "mostra un diff amb colors"
 
-#: diff.c:5431
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<kind>"
 
-#: diff.c:5432
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3599,7 +3670,7 @@
 "ressalta els errors d'espai en blanc a les línies «context», «old» o «new» "
 "al diff"
 
-#: diff.c:5435
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3607,255 +3678,255 @@
 "no consolidis els noms de camí i utilitza NULs com a terminadors de camp de "
 "sortida en --raw o --numstat"
 
-#: diff.c:5438 diff.c:5441 diff.c:5444 diff.c:5553
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<prefix>"
 
-#: diff.c:5439
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "mostra el prefix d'origen donat en lloc de «a/»"
 
-#: diff.c:5442
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "mostra el prefix de destinació indicat en lloc de «b/»"
 
-#: diff.c:5445
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "afegir un prefix addicional per a cada línia de sortida"
 
-#: diff.c:5448
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "no mostris cap prefix d'origen o destí"
 
-#: diff.c:5451
+#: diff.c:5470
 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:5455 diff.c:5460 diff.c:5465
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<char>"
 
-#: diff.c:5456
+#: diff.c:5475
 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:5461
+#: diff.c:5480
 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:5466
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "especifiqueu el caràcter per a indicar context en comptes de « »"
 
-#: diff.c:5469
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Opcions de canvi de nom del diff"
 
-#: diff.c:5470
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5471
+#: diff.c:5490
 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:5475
+#: diff.c:5494
 msgid "detect renames"
 msgstr "detecta els canvis de noms"
 
-#: diff.c:5479
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "omet les preimatges per les supressions"
 
-#: diff.c:5482
+#: diff.c:5501
 msgid "detect copies"
 msgstr "detecta còpies"
 
-#: diff.c:5486
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "usa els fitxers no modificats com a font per trobar còpies"
 
-#: diff.c:5488
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "inhabilita la detecció de canvis de nom"
 
-#: diff.c:5491
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "usa els blobs buits com a font de canvi de nom"
 
-#: diff.c:5493
+#: diff.c:5512
 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:5496
+#: diff.c:5515
 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:5498
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Opcions de l'algorisme Diff"
 
-#: diff.c:5500
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "produeix el diff més petit possible"
 
-#: diff.c:5503
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "ignora els espais en blanc en comparar línies"
 
-#: diff.c:5506
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "ignora els canvis en la quantitat d'espai en blanc"
 
-#: diff.c:5509
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignora els canvis d'espai en blanc al final de la línia"
 
-#: diff.c:5512
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "ignora els retorns de línia al final de la línia"
 
-#: diff.c:5515
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora els canvis en línies que estan en blanc"
 
-#: diff.c:5517 diff.c:5539 diff.c:5542 diff.c:5587
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5518
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignora els canvis en les línies que coincideixen amb <regex>"
 
-#: diff.c:5521
+#: diff.c:5540
 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:5524
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "genera diff usant l'algorisme «patience diff»"
 
-#: diff.c:5528
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "genera diff usant l'algorisme «histogram diff»"
 
-#: diff.c:5530
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<algorisme>"
 
-#: diff.c:5531
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "trieu un algorisme per al diff"
 
-#: diff.c:5533
+#: diff.c:5552
 msgid "<text>"
 msgstr "<text>"
 
-#: diff.c:5534
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "genera diff usant l'algorisme «anchored diff»"
 
-#: diff.c:5536 diff.c:5545 diff.c:5548
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5537
+#: diff.c:5556
 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:5540
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "utilitza <regex> per a decidir què és una paraula"
 
-#: diff.c:5543
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "equivalent a --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5546
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "les línies de codi que s'ha mogut s'acoloreixen diferent"
 
-#: diff.c:5549
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "com s'ignoren els espais en blanc a --color-moved"
 
-#: diff.c:5552
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Altres opcions diff"
 
-#: diff.c:5554
+#: diff.c:5573
 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:5558
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "tracta tots els fitxers com a text"
 
-#: diff.c:5560
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "intercanvia les dues entrades, inverteix el diff"
 
-#: diff.c:5562
+#: diff.c:5581
 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:5564
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "inhabilita totes les sortides del programa"
 
-#: diff.c:5566
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "permet executar un ajudant de diff extern"
 
-#: diff.c:5568
+#: diff.c:5587
 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:5570
+#: diff.c:5589
 msgid "<when>"
 msgstr "<quan>"
 
-#: diff.c:5571
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignora els canvis als submòduls en la generació del diff"
 
-#: diff.c:5574
+#: diff.c:5593
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5575
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "especifiqueu com es mostren els canvis als submòduls"
 
-#: diff.c:5579
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "amaga les entrades «git add -N» de l'índex"
 
-#: diff.c:5582
+#: diff.c:5601
 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:5584
+#: diff.c:5603
 msgid "<string>"
 msgstr "<cadena>"
 
-#: diff.c:5585
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3863,7 +3934,7 @@
 "cerca les diferències que canvien el nombre d'ocurrències de la cadena "
 "especificada"
 
-#: diff.c:5588
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3871,23 +3942,40 @@
 "cerca les diferències que canvien el nombre d'ocurrències de l'expressió "
 "regular especificada"
 
-#: diff.c:5591
+#: diff.c:5610
 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:5594
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tracta <cadena> a -S com a expressió regular POSIX ampliada"
 
-#: diff.c:5597
+#: diff.c:5616
 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:5598
+#: diff.c:5617 diff.c:5620
+#, fuzzy
+msgid "<path>"
+msgstr "camí"
+
+#: diff.c:5618
+#, fuzzy
+msgid "show the change in the specified path first"
+msgstr ""
+"escriu el fitxer d'índex de paquet en la versió de format d'índex "
+"especificada"
+
+#: diff.c:5621
+#, fuzzy
+msgid "skip the output to the specified path"
+msgstr "Restableix la HEAD actual a l'estat especificat"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<id de l'objecte>"
 
-#: diff.c:5599
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3895,49 +3983,54 @@
 "cerca les diferències que canvien el nombre d'ocurrències de l'objecte "
 "especificat"
 
-#: diff.c:5601
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5602
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "seleccioneu els fitxers per tipus de diff"
 
-#: diff.c:5604
+#: diff.c:5629
 msgid "<file>"
 msgstr "<fitxer>"
 
-#: diff.c:5605
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Sortida a un fitxer específic"
 
-#: diff.c:6262
+#: diff.c:6287
 msgid "inexact 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."
 
-#: diff.c:6265
+#: diff.c:6290
 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."
 
-#: diff.c:6268
+#: diff.c:6293
 #, 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:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "S'està realitzant una detecció inexacta de canvis de nom"
 
+#: diffcore-rotate.c:29
+#, fuzzy, c-format
+msgid "No such path '%s' in the diff"
+msgstr "no hi ha tal camí %s en %s"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3965,36 +4058,36 @@
 msgid "disabling cone pattern matching"
 msgstr "inhabilita la coincidència de patrons «cone»"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "no es pot usar %s com a fitxer d'exclusió"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "no s'ha pogut obrir el directori «%s»"
 
-#: dir.c:2605
+#: dir.c:2614
 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:2729
+#: dir.c:2738
 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:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "el fitxer d'índex al dipòsit %s és malmès"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "no s'han pogut crear directoris per %s"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "no s'ha pogut migrar el directori de «%s» a «%s»"
@@ -4004,21 +4097,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "pista: s'està esperant que el vostre editor tanqui el fitxer...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "S'està filtrant el contingut"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "camí d'espai de noms git incorrecte «%s»"
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "no s'ha pogut establir GIT_DIR a «%s»"
@@ -4028,262 +4121,274 @@
 msgid "too many args to run %s"
 msgstr "hi ha massa arguments per a executar %s"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: llista shallow esperada"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 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:191
+#: fetch-pack.c:196
 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:211
+#: fetch-pack.c:216
 #, 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:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "no s'ha pogut escriure al remot"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc requereix multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "línia de shallow no vàlida: %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "línia d'unshallow no vàlida: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "objecte no trobat: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "error en objecte: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "no s'ha trobat cap shallow: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "s'esperava shallow/unshallow, s'ha rebut %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "s'ha rebut %s %d %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "comissió no vàlida %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "s'abandona"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "fet"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "s'ha rebut %s (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "S'està marcant %s com a complet"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "ja es té %s (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 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:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "error de protocol: capçalera de paquet errònia"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: no es pot bifurcar de %s"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr ""
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s ha fallat"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "error en desmultiplexor de banda lateral"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La versió del servidor és %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "El servidor accepta %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "El servidor no permet clients superficials"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "El servidor no admet --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "El servidor no admet --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "El servidor no admet --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "El servidor no és compatible amb el format d'objecte d'aquest dipòsit"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "cap comissió en comú"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+#, fuzzy
+msgid "source repository is shallow, reject to clone."
+msgstr "el dipòsit font és superficial, s'està ignorant --local"
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: l'obtenció ha fallat."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "algoritmes no coincidents: client %s; servidor %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "el servidor no és compatible amb l'algorisme «%s»"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "El servidor no permet sol·licituds superficials"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "El servidor accepta filtratge"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "no s'ha pogut escriure la sol·licitud al remot"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "error en llegir la capçalera de la secció «%s»"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "s'esperava «%s», s'ha rebut «%s»"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "línia de confirmació inesperada: «%s»"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "s'ha produït un error en processar els acks: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "s'esperava l'enviament del fitxer de paquet després de «ready»"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 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:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "s'ha produït un error en processar la informació superficial: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "s'esperava wanted-ref, s'ha rebut «%s»"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inesperat: «%s»"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, 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:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: s'esperava un paquet de final de resposta"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "no hi ha cap HEAD remot coincident"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "el remot no ha enviat tots els objectes necessaris"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+#, fuzzy
+msgid "unexpected 'ready' from remote"
+msgstr "final de fitxer inesperat"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "no existeix la referència remota %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, 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:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "no s'ha pogut crear el fitxer temporal"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, 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:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg ha fallat en signar les dades"
 
@@ -4292,26 +4397,26 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignora el color no vàlid «%.*s» en log.graphColors"
 
-#: grep.c:640
+#: 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:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "«%s»: no s'ha pogut llegir %s"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 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:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "«%s»: lectura curta"
@@ -4382,7 +4487,7 @@
 msgstr ""
 "Aquestes són ordres del Git habitualment usades en diverses situacions:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "tipus de llistat de l'ordre no compatible «%s»"
@@ -4541,49 +4646,54 @@
 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:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "format de data no vàlid: %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "s'esperava «tree:<profunditat>»"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse: s'ha eliminat la implementació de filtres de camí sparse"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, fuzzy, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "«%s» per a «%s» no és una marca de temps vàlida"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "filtre d'especificació no vàlid: «%s»"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "cal escapar el caràcter en el sub-filter-spec «%c»"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "s'esperava alguna cosa després de combinar:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "no es poden combinar múltiples especificacions de filtratge"
 
-#: list-objects-filter-options.c:361
+#: 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 dipòsit perquè sigui compatible amb "
 "un clonatge parcial"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "no s'ha pogut accedir a un blob dispers en «%s»"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "no s'han pogut analitzar les dades disperses filtrades %s"
@@ -4598,7 +4708,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:375
+#: list-objects.c:395
 #, 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"
@@ -4628,129 +4738,61 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "No s'ha pogut crear «%s.lock»: %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, fuzzy, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "valor no vàlid per a «blame.coloring»"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "s'esperava una neteja després dels arguments ls-refs"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
 msgstr ""
-"Els canvis locals als fitxers següents se sobreescriuran per la fusió:\n"
-"  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Ja està al dia!"
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, fuzzy, c-format
+msgid "bad action '%s' for '%s'"
+msgstr "no es pot copiar «%s» a «%s»"
 
-#: merge-recursive.c:356
-msgid "(bad commit)\n"
-msgstr "(comissió errònia)\n"
-
-#: merge-recursive.c:379
-#, c-format
-msgid "add_cacheinfo failed for path '%s'; merge aborting."
-msgstr "addinfo_cache ha fallat per al camí «%s»; interrompent la fusió."
-
-#: merge-recursive.c:388
-#, c-format
-msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
-msgstr ""
-"addinfo_cache ha fallat al refrescar el camí «%s»; interrompent la fusió."
-
-#: merge-recursive.c:874
-#, 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:885
-#, 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:899 merge-recursive.c:918
-msgid ": perhaps a D/F conflict?"
-msgstr ": potser un conflicte D/F?"
-
-#: merge-recursive.c:908
-#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "s'està refusant perdre el fitxer no seguit a «%s»"
-
-#: merge-recursive.c:949 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:954
-#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "blob esperat per a %s «%s»"
-
-#: merge-recursive.c:979
-#, c-format
-msgid "failed to open '%s': %s"
-msgstr "s'ha produït un error en obrir «%s»: %s"
-
-#: merge-recursive.c:990
-#, 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:995
-#, 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:1191
+#: merge-ort.c:1116 merge-recursive.c:1205
 #, 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-recursive.c:1198
+#: merge-ort.c:1125 merge-recursive.c:1212
 #, 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-recursive.c:1205
+#: merge-ort.c:1134 merge-recursive.c:1219
 #, 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-recursive.c:1213 merge-recursive.c:1225
-#, 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:1216 merge-recursive.c:1228
-#, c-format
-msgid "Fast-forwarding submodule %s"
+#: merge-ort.c:1144 merge-ort.c:1151
+#, fuzzy, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Avançament ràpid al submòdul %s"
 
-#: merge-recursive.c:1251
-#, c-format
-msgid "Failed to merge submodule %s (merge following commits not found)"
+#: merge-ort.c:1172
+#, fuzzy, c-format
+msgid "Failed to merge submodule %s"
+msgstr "s'ha produït un error en cercar recursivament al submòdul «%s»"
+
+#: merge-ort.c:1179
+#, fuzzy, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
 msgstr ""
-"Ha fallat en fusionar el submòdul %s (no s'ha trobat les comissions "
-"següents)"
+"S'ha produït un error en fusionar el submòdul %s (s'han trobat múltiples "
+"fusions)"
 
-#: merge-recursive.c:1255
-#, 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:1256
-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:1259
+#: merge-ort.c:1183 merge-recursive.c:1273
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4767,169 +4809,61 @@
 "\n"
 "que acceptarà aquest suggeriment.\n"
 
-#: merge-recursive.c:1268
-#, c-format
-msgid "Failed to merge submodule %s (multiple merges found)"
+#: merge-ort.c:1196
+#, fuzzy, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (s'han trobat múltiples "
 "fusions)"
 
-#: merge-recursive.c:1341
+#: merge-ort.c:1415 merge-recursive.c:1362
 msgid "Failed to execute internal merge"
 msgstr "S'ha produït un error en executar la fusió interna"
 
-#: merge-recursive.c:1346
+#: merge-ort.c:1420 merge-recursive.c:1367
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "No s'ha pogut afegir %s a la base de dades"
 
-#: merge-recursive.c:1378
+#: merge-ort.c:1427 merge-recursive.c:1400
 #, c-format
 msgid "Auto-merging %s"
 msgstr "S'està autofusionant %s"
 
-#: merge-recursive.c:1402
-#, 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:1474
-#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree."
-msgstr ""
-"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:1479
-#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
-"left in tree."
-msgstr ""
-"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:1486
-#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree at %s."
-msgstr ""
-"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:1491
-#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
-"left in tree at %s."
-msgstr ""
-"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:1526
-msgid "rename"
-msgstr "canvi de nom"
-
-#: merge-recursive.c:1526
-msgid "renamed"
-msgstr "canviat de nom"
-
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
-#, c-format
-msgid "Refusing to lose dirty file at %s"
-msgstr "S'està refusant a perdre el fitxer brut a %s"
-
-#: merge-recursive.c:1587
-#, 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:1645
-#, 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:1676
-#, 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:1681
-#, 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:1708
-#, c-format
-msgid ""
-"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:1713
-msgid " (left unresolved)"
-msgstr " (deixat sense resolució)"
-
-#: merge-recursive.c:1805
-#, 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:2068
-#, c-format
-msgid ""
-"CONFLICT (directory rename split): Unclear where to place %s because "
-"directory %s was renamed to multiple other directories, with no destination "
-"getting a majority of the files."
-msgstr ""
-"CONFLICTE (divisió de canvi de nom de directori): no està clar on col·locar %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:2100
+#: merge-ort.c:1566 merge-recursive.c:2122
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
 "implicit directory rename(s) putting the following path(s) there: %s."
 msgstr ""
-"CONFLICTE (canvi del nom del directori implícit): el fitxer o directori existent a %s en forma de"
-" canvi del nom del directori implícit, posant-hi els camins següents a: %s."
+"CONFLICTE (canvi del nom del directori implícit): el fitxer o directori "
+"existent a %s en forma de canvi del nom del directori implícit, posant-hi "
+"els camins següents a: %s."
 
-#: merge-recursive.c:2110
+#: merge-ort.c:1576 merge-recursive.c:2132
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
 "implicit directory renames tried to put these paths there: %s"
 msgstr ""
-"CONFLICT (canvi del nom del directori implícit) no es pot assignar més d'un camí a "
-"%s; els canvis del nom del directori implícits han intentat posar aquests camins a: %s"
-" segons"
+"CONFLICT (canvi del nom del directori implícit) no es pot assignar més d'un "
+"camí a %s; els canvis del nom del directori implícits han intentat posar "
+"aquests camins a: %s segons"
 
-#: merge-recursive.c:2202
-#, c-format
+#: merge-ort.c:1634
+#, fuzzy, c-format
 msgid ""
-"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory "
-"%s->%s in %s"
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
 msgstr ""
-"CONFLICTE (canvi de nom/canvi de nom): canvi de nom %s->%s en %s. Canvi de "
-"nom de directori %s->%s en %s"
+"CONFLICTE (divisió de canvi de nom de directori): no està clar on col·locar "
+"%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:2447
+#: merge-ort.c:1788 merge-recursive.c:2468
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4938,52 +4872,7 @@
 "AVÍS: S'està evitant aplicar el canvi de nom %s -> %s a %s, perquè %s ell "
 "mateix ja havia canviat de nom."
 
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "no es pot llegir l'objecte %s"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "l'objecte %s no és un blob"
-
-#: merge-recursive.c:3040
-msgid "modify"
-msgstr "modificació"
-
-#: merge-recursive.c:3040
-msgid "modified"
-msgstr "modificat"
-
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "contingut"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "afegiment/afegiment"
-
-#: merge-recursive.c:3079
-#, 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:3101
-msgid "submodule"
-msgstr "submòdul"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
-
-#: merge-recursive.c:3132
-#, c-format
-msgid "Adding as %s instead"
-msgstr "S'està afegint com a %s en lloc d'això"
-
-#: merge-recursive.c:3215
+#: merge-ort.c:1932 merge-recursive.c:3244
 #, fuzzy, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4992,27 +4881,27 @@
 "La ruta va actualitzar els percentatges afegits dins d'un directori que va "
 "ser rebatejat en percentatges; es va traslladar a percentatges."
 
-#: merge-recursive.c:3218
+#: merge-ort.c:1939 merge-recursive.c:3251
 #, fuzzy, c-format
 msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed"
-" in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"CONFLICT (ubicació de l'arxiu) els percentatges afegits dins d'un directori "
-"que va ser rebatejat en percentatges suggerint que potser hauria de ser "
-"traslladat als percentatges."
-
-#: merge-recursive.c:3222
-#, fuzzy, 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 ""
 "El camí va actualitzar els percentatges de canvi de nom a percentatges "
 "d'incens dins d'un directori que es va canviar de nom en percentatges, "
 "passant-lo a percentatges."
 
-#: merge-recursive.c:3225
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, fuzzy, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"CONFLICT (ubicació de l'arxiu) els percentatges afegits dins d'un directori "
+"que va ser rebatejat en percentatges suggerint que potser hauria de ser "
+"traslladat als percentatges."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
 #, fuzzy, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -5022,63 +4911,400 @@
 "directori que va ser rebatejat en percentatges, suggerint que potser hauria "
 "de canviar-se a percentatges."
 
-#: merge-recursive.c:3339
+#: merge-ort.c:2103
+#, 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."
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, 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"
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "no es pot llegir l'objecte %s"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "l'objecte %s no és un blob"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "contingut"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "afegiment/afegiment"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "submòdul"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
+
+#: merge-ort.c:3198
+#, 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."
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+
+#. 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
+#, 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"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+"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
+msgid "Already up to date."
+msgstr "Ja està al dia."
+
+#: merge-recursive.c:356
+msgid "(bad commit)\n"
+msgstr "(comissió errònia)\n"
+
+#: merge-recursive.c:379
+#, c-format
+msgid "add_cacheinfo failed for path '%s'; merge aborting."
+msgstr "addinfo_cache ha fallat per al camí «%s»; interrompent la fusió."
+
+#: merge-recursive.c:388
+#, c-format
+msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
+msgstr ""
+"addinfo_cache ha fallat al refrescar el camí «%s»; interrompent la fusió."
+
+#: merge-recursive.c:876
+#, 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
+#, 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
+msgid ": perhaps a D/F conflict?"
+msgstr ": potser un conflicte D/F?"
+
+#: merge-recursive.c:910
+#, 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
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr "no es pot llegir l'objecte %s «%s»"
+
+#: merge-recursive.c:956
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr "blob esperat per a %s «%s»"
+
+#: merge-recursive.c:981
+#, c-format
+msgid "failed to open '%s': %s"
+msgstr "s'ha produït un error en obrir «%s»: %s"
+
+#: merge-recursive.c:992
+#, 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
+#, 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
+#, 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
+#, c-format
+msgid "Fast-forwarding submodule %s"
+msgstr "Avançament ràpid al submòdul %s"
+
+#: merge-recursive.c:1265
+#, 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)"
+
+#: merge-recursive.c:1269
+#, 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
+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
+#, 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
+#, 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
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree."
+msgstr ""
+"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
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
+"left in tree."
+msgstr ""
+"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
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree at %s."
+msgstr ""
+"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
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
+"left in tree at %s."
+msgstr ""
+"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
+msgid "rename"
+msgstr "canvi de nom"
+
+#: merge-recursive.c:1548
+msgid "renamed"
+msgstr "canviat de nom"
+
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
+#, 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
+#, 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
+#, 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
+#, 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
+#, 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
+#, c-format
+msgid ""
+"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
+msgid " (left unresolved)"
+msgstr " (deixat sense resolució)"
+
+#: merge-recursive.c:1827
+#, 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
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to place %s because "
+"directory %s was renamed to multiple other directories, with no destination "
+"getting a majority of the files."
+msgstr ""
+"CONFLICTE (divisió de canvi de nom de directori): no està clar on col·locar "
+"%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
+#, c-format
+msgid ""
+"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
+msgid "modify"
+msgstr "modificació"
+
+#: merge-recursive.c:3069
+msgid "modified"
+msgstr "modificat"
+
+#: merge-recursive.c:3108
+#, 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
+#, c-format
+msgid "Adding as %s instead"
+msgstr "S'està afegint com a %s en lloc d'això"
+
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "S'està eliminant %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "fitxer/directori"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "directori/fitxer"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, 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:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "S'està afegint %s"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLICTE (afegiment/afegiment): Conflicte de fusió en %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "la fusió dels arbres %s i %s ha fallat"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "S'està fusionant:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, 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:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "la fusió no ha retornat cap comissió"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "No s'ha pogut analitzar l'objecte «%s»"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "No s'ha pogut escriure l'índex."
 
@@ -5086,199 +5312,207 @@
 msgid "failed to read the cache"
 msgstr "s'ha produït un error en llegir la memòria cau"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "no s'ha pogut escriure un fitxer d'índex nou"
 
-#: midx.c:80
+#: midx.c:74
+#, fuzzy
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "multi-index no reconegut"
+
+#: midx.c:105
 #, fuzzy, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "l'índex múltiple és massa petit"
 
-#: midx.c:96
+#: midx.c:121
 #, fuzzy, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "signatura d'índex múltiple 0x%08x no coincideix amb la signatura 0x%08x"
 
-#: midx.c:101
+#: midx.c:126
 #, fuzzy, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-index no reconegut"
 
-#: midx.c:106
+#: midx.c:131
 #, fuzzy, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 "la versió del hash del graf de comissions %X no coincideix amb la versió %X"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "desplaçament del fragment no vàlid (massa gran)"
-
-#: midx.c:147
-#, fuzzy
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr ""
-"s'ha acabat l'identificador de fragment multi-index apareix abans del que "
-"s'esperava"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "Falta un fragment de nom de paquet necessari al multi-index"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "falta un fragment «fanout» OID necessari al multi-pack-index"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "falta un fragment de cerca «fanout» OID necessari al multi-pack-index"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "falta un fragment necessari dels desplaçaments al multi-pack-index"
 
-#: midx.c:180
+#: midx.c:170
 #, fuzzy, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "noms de paquet d'índex múltiple fora de l'ordre «%s» abans de «%s»"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id: %u incorrecte (%u paquets en total)"
 
-#: midx.c:273
+#: midx.c:264
 #, fuzzy
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "multi-index emmagatzema un desplaçament de 64 bits però deft és massa petit"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "no s'ha pogut obrir l'índex del paquet «%s»"
 
-#: midx.c:546
+#: midx.c:564
 #, 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:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "no es pot emmagatzemar el fitxer d'índex invers"
+
+#: midx.c:933
 #, fuzzy
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Afegint fitxers de paquets a multi-index"
 
-#: midx.c:879
+#: midx.c:979
 #, fuzzy, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "no s'han vist caure els paquets del fitxer"
 
-#: midx.c:931
+#: midx.c:1024
+#, fuzzy, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "Rebase de system%s desconegut"
+
+#: midx.c:1029
+#, fuzzy, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "el dipòsit de referència «%s» és empeltat"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "no hi ha fitxers empaquetats a indexar."
 
-#: midx.c:982
-#, fuzzy
-msgid "Writing chunks to multi-pack-index"
-msgstr "Escrivint trossos a multi-index"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "s'ha produït un error en eliminar %s"
 
-#: midx.c:1060
+#: midx.c:1156
 #, fuzzy, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "no s'han pogut netejar els percentatges multi-paquet"
 
-#: midx.c:1116
+#: midx.c:1214
 #, fuzzy
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "l'índex múltiple és massa petit"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "S'estan cercant fitxers empaquetats referenciats"
 
-#: midx.c:1139
+#: midx.c:1237
 #, fuzzy, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "od fanout fora de l'ordre fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 #, fuzzy
 msgid "the midx contains no oid"
 msgstr "el midx no conté cap oide"
 
-#: midx.c:1153
+#: midx.c:1251
 #, fuzzy
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Verificant l'ordre OID en multi-index"
 
-#: midx.c:1162
+#: midx.c:1260
 #, fuzzy, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid lookup fora d'ordre oid[%d] = per cents >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "S'estan ordenant els objectes per fitxer de paquet"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "S'estan verificant els desplaçaments dels objectes"
 
-#: midx.c:1205
+#: midx.c:1303
 #, fuzzy, 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] = percentatges"
 
-#: midx.c:1211
+#: midx.c:1309
 #, fuzzy, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer de paquet %s"
 
-#: midx.c:1220
+#: midx.c:1318
 #, fuzzy, 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>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "S'estan comptant els objectes referenciats"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "S'estan cercant i suprimint els fitxers de paquets no referenciats"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "no s'ha pogut iniciar el pack-objects"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "no s'ha pogut finalitzar el pack-objects"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, fuzzy, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "no s'ha pogut crear el fil per cent mandrós"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, fuzzy, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "no s'ha pogut crear un fil percent"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, fuzzy, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "no s'ha pogut unir als fil per cents de nom mandrós"
@@ -5287,10 +5521,12 @@
 #, 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
@@ -5314,11 +5550,373 @@
 #. 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
+#, 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"
+
+#: object-file.c:577
+#, 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
+#, fuzzy, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr ""
+"percentatges ignorant botigues alternatives d'objectes imbricació massa "
+"profunda"
+
+#: object-file.c:656
+#, 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
+#, fuzzy
+msgid "unable to fdopen alternates lockfile"
+msgstr "no s'ha pogut obrir el fitxer de bloqueig alternatiu «fdopen»"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "no es pot llegir el fitxer «alternates»"
+
+#: object-file.c:724
+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
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "el camí «%s» no existeix"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"encara no s'admet el dipòsit de referència «%s» com a agafament enllaçat."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "el dipòsit de referència «%s» no és un dipòsit local."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "el dipòsit de referència «%s» és superficial"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "el dipòsit de referència «%s» és empeltat"
+
+#: object-file.c:860
+#, 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
+#, 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:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "el tipus d'objecte %s és buit"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "objecte solt corrupte «%s»"
+
+#: object-file.c:1332 object-file.c:2528
+#, 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
+#, c-format
+msgid "unable to parse %s header"
+msgstr "no s'ha pogut analitzar la capçalera %s"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "s'ha produït un error en llegir l'objecte %s"
+
+#: object-file.c:1701
+#, 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
+#, 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
+#, 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
+#, c-format
+msgid "unable to write file %s"
+msgstr "no s'ha pogut escriure al fitxer %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "no s'ha pogut establir el permís a «%s»"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "s'ha produït un error en escriure al fitxer"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "error en tancar el fitxer d'objecte solt"
+
+#: object-file.c:1913
+#, 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 dipòsit "
+"%s"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "no s'ha pogut crear un fitxer temporal"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "no s'ha pogut escriure el fitxer d'objecte solt"
+
+#: object-file.c:1945
+#, 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
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "ha fallat deflateEnd a l'objecte %s(%d)"
+
+#: object-file.c:1953
+#, 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
+#, c-format
+msgid "failed utime() on %s"
+msgstr "ha fallat utime() a %s"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "no es pot llegir l'objecte per a %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "comissió corrupta"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "etiqueta corrupta"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "error de lectura mentre s'indexava %s"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "lectura curta mentre s'indexa %s"
+
+#: object-file.c:2275 object-file.c:2285
+#, 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
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: tipus de fitxer no suportat"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s no és un objecte vàlid"
+
+#: object-file.c:2317
+#, 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
+#, c-format
+msgid "unable to open %s"
+msgstr "no s'ha pogut obrir %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "no coincideix la suma per a %s (s'esperava %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "no s'ha pogut fer «mmap» %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "no s'ha pogut desempaquetar la capçalera de %s"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "no s'ha pogut analitzar la capçalera de %s"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "no s'han pogut desempaquetar els continguts de %s"
+
+#: object-name.c:486
+#, fuzzy, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "l'SHA1 %s curt és ambigu"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Els candidats són:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git normalment mai crea una referència que acabi amb 40 caràcters\n"
+"hexadecimals perquè s'ignorarà quan només especifiqueu 40 caràcters\n"
+"hexadecimals. Aquestes referències es poden crear per error. Per\n"
+"exemple,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"on «$br» és buida per algun motiu i es crea una referència de 40 caràcters\n"
+"hexadecimals. Examineu aquestes referències i potser\n"
+"suprimiu-les. Desactiveu aquest missatge executant\n"
+"«git config advice.objectNameWarning false»"
+
+#: object-name.c:916
+#, 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
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "registre per a «%.*s» només té %d entrades"
+
+#: object-name.c:1702
+#, 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
+#, fuzzy, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"path '%s' existeix però no insinuacions '%s' vol dir '%.*s%s' aka '%.*s./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "el camí «%s» no existeix en «%.*s»"
+
+#: object-name.c:1745
+#, fuzzy, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"La ruta \"%s\" està en l'índex però no en la indicació de l'etapa per cent."
+
+#: object-name.c:1761
+#, fuzzy, 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à en l'índex però no en la indicació '%s' vol dir '%ds' aka "
+"'%d./%s'?"
+
+#: object-name.c:1769
+#, fuzzy, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "el camí «%» existeix al disc però no a l'índex"
+
+#: object-name.c:1771
+#, fuzzy, 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
+#, fuzzy
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+"la sintaxi relativa del camí no es pot utilitzar fora de l'arbre de treball"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "nom d'objecte no vàlid «%.*s»."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5329,37 +5927,86 @@
 msgid "object %s is a %s, not a %s"
 msgstr "l'objecte %s és %s, no pas %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "l'objecte %s té un identificador de tipus %d desconegut"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "no s'ha pogut analitzar l'objecte: %s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "el resum no coincideix %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "no s'ha pogut obtenir la mida de %s"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 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"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "el fitxer d'índex invers %s és massa petit"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "el fitxer d'índex invers %s està malmès"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "el fitxer d'índex invers %s té una signatura desconeguda"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr ""
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr ""
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "no es pot escriure i verificar l'índex invers"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "no s'ha pogut fer stat a: %s"
+
+#: pack-write.c:283
+#, fuzzy, c-format
+msgid "failed to make %s readable"
+msgstr "s'ha produït un error en analitzar %s"
+
+#: pack-write.c:522
+#, fuzzy, c-format
+msgid "could not write '%s' promisor file"
+msgstr "no s'ha pogut escriure «%s»"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "desplaçament abans de la fi del fitxer de paquet (.idx trencat?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, 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:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -5425,48 +6072,49 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "voleu dir «--%s» (amb dos traços)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "àlies de --%s"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "opció desconeguda «%s»"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "«switch» «%c» desconegut"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "opció no ascii desconeguda en la cadena: «%s»"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "ús: %s"
 
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
-#: parse-options.c:915
+#.
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "   o: %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-NUM"
 
@@ -5475,32 +6123,32 @@
 msgid "Could not make %s writable by group"
 msgstr "No s'ha pogut fer %s escrivible pel grup"
 
-#: pathspec.c:130
+#: pathspec.c:151
 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:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Només es permet una especificació «attr:»."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "una especificació d'atribut no pot estar buida"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "nom d'atribut no vàlid %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 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:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5508,52 +6156,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:306
+#: pathspec.c:327
 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:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Màgia d'especificació de camí no vàlida «%.*s» en «%s»"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, 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:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Màgia d'especificació de camí no implementada «%c» en «%s»"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: «literal» i «glob» són incompatibles"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: «%s» està fora del dipòsit en «%s»"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "«%s» (mnemònic: «%c»)"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, 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:598
+#: pathspec.c:619
 #, 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:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "la línia està mal citada: %s"
@@ -5575,7 +6223,7 @@
 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:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "error de protocol: longitud de línia impossible"
 
@@ -5583,49 +6231,50 @@
 msgid "packet write with format failed"
 msgstr "ha fallat l'escriptura del paquet amb format"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 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 "
 "paquet"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "no s'ha pogut escriure el paquet"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "no s'ha pogut escriure el paquet: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "error de lectura"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "el remot ha penjat inesperadament"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, 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:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "error de protocol: longitud de línia errònia %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "error remot: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "S'està actualitzant l'índex"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "no s'han pogut crear lstat amb fils %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "no s'ha pogut analitzar el format --pretty"
 
@@ -5646,91 +6295,101 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "el nom remot «promisor» no pot començar amb «/»: %s"
 
+#: protocol-caps.c:103
+#, fuzzy
+msgid "object-info: expected flush after arguments"
+msgstr "s'esperava una neteja després de les capacitats"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "S'estan eliminant objectes duplicats"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "no s'ha pogut iniciar «log»"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "no s'ha pogut llegir la sortida de «log»"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "no s'ha pogut analitzar la comissió «%s»"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, fuzzy, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr ""
-"no s'ha pogut analitzar la primera línia de la sortida `log` no s'ha iniciat"
-" amb 'commit '%s'"
+"no s'ha pogut analitzar la primera línia de la sortida `log` no s'ha iniciat "
+"amb 'commit '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, 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:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "s'ha produït un error en generar el diff"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+#, fuzzy
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "-p i --overlay són mútuament excloents"
+
+#: range-diff.c:561 range-diff.c:563
 #, 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:682
+#: read-cache.c:708
 #, 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:698
+#: read-cache.c:724
 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:720
+#: read-cache.c:746
 #, 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:725
+#: read-cache.c:751
 #, fuzzy, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "\"%s\" no té una comissió comprovada"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "no es pot llegir indexar el fitxer «%s»"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "no s'ha pogut afegir «%s» a l'índex"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "no s'ha pogut fer «stat» a «%s»"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, 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:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Actualitza l'índex"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5739,7 +6398,7 @@
 "index.version està establerta, però el valor no és vàlid.\n"
 "S'està usant la versió %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5748,150 +6407,157 @@
 "GIT_INDEX_VERSION està establerta, però el valor no és vàlid.\n"
 "S'està usant la versió %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "signatura malmesa 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "versió d'índex incorrecta %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "signatura sha1 malmesa al fitxer d'índex"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, 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:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "s'està ignorant l'extensió %.4s"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "format d'entrada d'índex desconeguda «0x%08x»"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, 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:1859
+#: read-cache.c:1924
 #, fuzzy
 msgid "unordered stage entries in index"
 msgstr "entrades d'escenari no ordenades en l'índex"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, fuzzy, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "múltiples entrades d'etapa per al fitxer fusionat «%s»"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, fuzzy, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entrades d'etapa no ordenades per «%s»"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "fitxer d'índex malmès"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, 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:2128
+#: read-cache.c:2193
 #, 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:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: ha fallat l'obertura del fitxer d'índex"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: no es pot fer «stat» a l'índex obert"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: fitxer d'índex més petit que s'esperava"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: no es pot mapar el fitxer d'índex"
 
-#: read-cache.c:2215
-#, fuzzy, c-format
+#: read-cache.c:2280
+#,c-format
 msgid "unable to create load_index_extensions thread: %s"
-msgstr "no s'ha pogut crear loadindexextensions fil%s"
+msgstr "no s'ha pogut crear un fil «load_index_extensions»: %s"
 
-#: read-cache.c:2242
-#, fuzzy, c-format
+#: read-cache.c:2307
+#, c-format
 msgid "unable to join load_index_extensions thread: %s"
-msgstr "no s'ha pogut unir a loadindexextensions fil%s"
+msgstr "no s'ha pogut unir un fil «load_index_extensions»: %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "no s'ha pogut refrescar l'índex compartit «%s»"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, 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:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "no s'ha pogut tancar «%s»"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+#, fuzzy
+msgid "failed to convert to a sparse-index"
+msgstr "s'ha produït un error en netejar l'índex"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "no s'ha pogut fer stat a «%s»"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "no s'ha pogut obrir el directori git: %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "no s'ha pogut desenllaçar: %s"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "no s'han pogut corregir els bits de permisos en «%s»"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, fuzzy, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "els percentatges no poden descendir a l'escenari #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
@@ -5910,7 +6576,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5919,7 +6588,7 @@
 "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"
+".       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 ""
@@ -5928,36 +6597,45 @@
 "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"
-"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"
-"b, break = atura't aquí (continua fent «rebase» després amb «git rebase --continue»)\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"
 "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"
 
-#: rebase-interactive.c:63
-#, c-format, fuzzy
+#: rebase-interactive.c:66
+#, fuzzy, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Rebase %s en un 1% (ordre<unk>d)"
 msgstr[1] "Rebase de percentatges sobre els percentatges (ordres<unk>d)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 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:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5965,7 +6643,7 @@
 "\n"
 "Si elimineu una línia aquí, ES PERDRÀ AQUELLA COMISSIÓ.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5979,7 +6657,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5989,49 +6667,53 @@
 "No obstant, si elimineu tot, s'avortarà el «rebase».\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "no s'ha pogut escriure «%s»"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "no s'ha pogut escriure a «%s»."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "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:200
+#: rebase-interactive.c:203
 #, c-format
 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:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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»."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "no hi és"
 
@@ -6050,127 +6732,132 @@
 msgid "ahead %d, behind %d"
 msgstr "davant per %d, darrere per %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "format esperat: %%(color:<color>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "color no reconegut: %%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Valor enter esperat pel nom de referència:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valor enter esperat pel nom de referència:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argument %%(%s) desconegut: %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) no accepta arguments"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "argument %%(objectsize) no reconegut: %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) no accepta arguments"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) no accepta arguments"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "argument %%(subject) no reconegut: %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr ""
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "argument %%(trailers) desconegut: %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valor positiu esperat conté:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argument %%(contents) no reconegut: %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "valor positiu esperat «%s» a %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "argument no reconegut «%s» a %%(%s)"
 
-#: ref-filter.c:398
-#, fuzzy, c-format
+#: ref-filter.c:402
+#, c-format
 msgid "unrecognized email option: %s"
-msgstr "opció no reconeguda: «%s»"
+msgstr "opció del correu electrònic no reconeguda: «%s»"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "format esperat: %%(align:<amplada>,<posició>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "posició no reconeguda:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "amplada no reconeguda:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argument %%(align) no reconegut: %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "amplada positiva esperada amb l'àtom %%(align)"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argument %%(if) no reconegut: %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nom de camp mal format: %.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nom de camp desconegut: %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
@@ -6178,106 +6865,116 @@
 "no és un dipòsit, git però el camp «%.*s» requereix accés a les dades de "
 "l'objecte"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, 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:802
+#: ref-filter.c:807
 #, 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:804
+#: ref-filter.c:809
 #, 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:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: s'ha usat l'àtom %%(then) després de %%(else)"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, 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:836
+#: ref-filter.c:841
 #, 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:838
+#: ref-filter.c:843
 #, 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:853
+#: ref-filter.c:858
 #, 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:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "cadena de format mal format %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "sense branca, s'està fent «rebase» %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(sense branca, s'està fent «rebase» %s)"
 
-#: ref-filter.c:1552
-#, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "sense branca, s'està fent «rebase» d'un «HEAD» %s no adjuntat"
+#: ref-filter.c:1559
+#,  c-format
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(sense branca, s'està fent «rebase» d'un «HEAD» separat %s)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
+msgid "(no branch, bisect started on %s)"
 msgstr "(sense branca, bisecció començada en %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "sense branca"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD separat a %s)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD separat des de %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(sense branca)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "manca l'objecte %s per a %s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, 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:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objecte mal format a «%s»"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "s'està ignorant la referència amb nom malmès %s"
 
-#: ref-filter.c:2156 refs.c:660
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "s'està ignorant la referència trencada %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: manca l'àtom %%(end)"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "nom d'objecte %s mal format"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'opció «%s» ha d'apuntar a una comissió"
@@ -6287,66 +6984,81 @@
 msgid "%s does not point to a valid object!"
 msgstr "%s no apunta a un objecte vàlid"
 
-#: refs.c:575
+#: refs.c:566
+#, 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"
+"of your new repositories, which will suppress this warning, call:\n"
+"\n"
+"\tgit config --global init.defaultBranch <name>\n"
+"\n"
+"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
+"'development'. The just-created branch can be renamed via this command:\n"
+"\n"
+"\tgit branch -m <name>\n"
+msgstr ""
+
+#: refs.c:588
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "no s'ha pogut recuperar «%s»"
 
-#: refs.c:582
+#: refs.c:598
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "nom de branca no vàlida: %s = %s"
 
-#: refs.c:658
+#: refs.c:674
 #, fuzzy, c-format
 msgid "ignoring dangling symref %s"
 msgstr "ignorant symref per sota"
 
-#: refs.c:895
+#: refs.c:922
 #, fuzzy, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "registre per a ref %s have gap després de percentatges"
 
-#: refs.c:901
+#: refs.c:929
 #, fuzzy, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "registre per als ref%s inesperadament ha acabat en percentatges"
 
-#: refs.c:960
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "el registre per a %s és buit"
 
-#: refs.c:1052
+#: refs.c:1086
 #, 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:1123
+#: refs.c:1157
 #, fuzzy, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "ha fallat updateref per al ref '%s'%s"
 
-#: refs.c:1947
+#: refs.c:2051
 #, 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:2027
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "no està permès actualitzar les referències en un entorn de quarantena"
 
-#: refs.c:2038
+#: refs.c:2142
 #, fuzzy
 msgid "ref updates aborted by hook"
 msgstr "les actualitzacions de referències s'han avortat per ganxo"
 
-#: refs.c:2138 refs.c:2168
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "«%s» existeix; no es pot crear «%s»"
 
-#: refs.c:2144 refs.c:2179
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "no es poden processar «%s» i «%s» a la vegada"
@@ -6410,12 +7122,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "el valor «%s» del patró no té «*»"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "l'especificació de referència src %s no coincideix amb cap"
 
-#: remote.c:1078
+#: 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'un"
@@ -6423,7 +7135,8 @@
 #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
-#: remote.c:1093
+#.
+#: remote.c:1103
 #, fuzzy, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6438,11 +7151,11 @@
 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:1113
+#: remote.c:1123
 #, fuzzy, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6452,7 +7165,7 @@
 "La part <src> de l'especificació de referència és un objecte de comissió. "
 "Voleu crear una branca nova empenyent a '%srefs/heads/%s'?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, fuzzy, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6462,7 +7175,7 @@
 "La part <src> de l'especificació de referència és un objecte d'etiqueta. "
 "Voleu crear una etiqueta nova empenyent a '%srefs/tags/%s'?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, fuzzy, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6472,7 +7185,7 @@
 "La part <src> de l'especificació de referència és un objecte d'arbre. Voleu "
 "marcar un nou arbre empenyent a '%srefs/tags/%s'?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, fuzzy, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6482,116 +7195,115 @@
 "La part <src> de l'especificació de referència és un objecte blob. Voleu "
 "marcar un nou blob empenyent a '%srefs/tags/%s'?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "«%s» no es pot resoldre a una branca"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "no s'ha pogut suprimir «%s»: la referència remota no existeix"
 
-#: remote.c:1187
+#: remote.c:1197
 #, fuzzy, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "dst les especificacions de rendiment coincideixen més d'un"
 
-#: remote.c:1194
+#: remote.c:1204
 #, fuzzy, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "dst ref%s rep de més d'un src"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD no assenyala cap branca"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "no existeix la branca: «%s»"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "cap font configurada per a la branca «%s»"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la branca font «%s» no s'emmagatzema com a branca amb seguiment remot"
 
-#: remote.c:1747
+#: remote.c:1757
 #, 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:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la branca «%s» no té cap remot al qual pujar"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "les especificacions de referència de «%s» no inclouen «%s»"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "push no té destí (push.default és «nothing»)"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "no es pot resoldre una pujada «simple» a un sol destí"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "no s'ha pogut trobar la referència remota %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* S'estan ignorant les referències «%s» localment"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "La vostra branca està basada en «%s», però la font no hi és.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (useu «git branch --unset-upstream» per a arreglar-ho)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "La vostra branca està al dia amb «%s».\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "La vostra branca i «%s» es refereixen a diferents comissions.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (useu «%s» per a detalls)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "La vostra branca està %2$d comissió per davant de «%1$s».\n"
 msgstr[1] "La vostra branca està %2$d comissions per davant de «%1$s».\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (useu «git push» per a publicar les vostres comissions locals)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6603,11 +7315,11 @@
 "La vostra branca està %2$d comissions per darrere de «%1$s», i pot avançar-"
 "se ràpidament.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (useu «git pull» per a actualitzar la vostra branca local)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6622,11 +7334,11 @@
 "La vostra branca i «%s» han divergit,\n"
 "i tenen %d i %d comissions distintes cada una, respectivament.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (useu «git pull» per a fusionar la branca remota amb la vostra)\n"
 
-#: remote.c:2348
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "no es pot analitzar el nom de l'objecte esperat «%s»"
@@ -6646,96 +7358,96 @@
 msgid "replace depth too high for object %s"
 msgstr "la profunditat de reemplaçament és massa alta per l'objecte %s"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "MERGE_RR corrupte"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "no s'ha pogut escriure el registre «rerere»"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "s'han produït errors en escriure «%s» (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "no s'ha pogut buidar «%s»"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "no s'han pogut analitzar els pedaços en conflicte a «%s»"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "s'ha produït un error en fer «failed utime()» a «%s»"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "s'ha produït un error en escriure «%s»"
 
-#: rerere.c:714
+#: rerere.c:698
 #, fuzzy, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "Fased '%s' utilitzant resolució anterior."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Es recorda la resolució per a «%s»."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "S'ha resolt «%s» usant una resolució anterior."
 
-#: rerere.c:803
+#: rerere.c:787
 #, fuzzy, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "no es pot desenllaçar «%s» extraviats"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Imatge prèvia registrada per a «%s»"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "no s'ha pogut crear el directori «%s»"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "ha fallat en actualitzar l'estat en conflicte a «%s»"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "no hi ha cap resolució recordada per a «%s»"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "no es pot fer «unlink» de «%s»"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Imatge prèvia actualitzada per a «%s»"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "S'ha oblidat la resolució per a «%s»\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "no s'ha pogut obrir el directori rr-cache"
 
@@ -6743,43 +7455,38 @@
 msgid "could not determine HEAD revision"
 msgstr "no s'ha pogut determinar la revisió de HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "s'ha produït un error en cercar l'arbre de %s"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<packfile> ja no s'ha admet"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "valor desconegut per a --diff-merges: %s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "la vostra branca actual sembla malmesa"
 
-#: revision.c:2697
+#: revision.c:2686
 #, 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:2907
+#: revision.c:2892
 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:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "s'ha produït un error en obrir /dev/null"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "no s'ha pogut crear fil «async»: %s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, fuzzy, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6788,84 +7495,93 @@
 "El ganxo «%s» s'ha ignorat perquè no s'ha establert com a executable. Podeu "
 "desactivar aquest avís amb `git config aconsell.ignoredHook false`."
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "paquet de buidatge no esperat quan estava llegint l'estat del "
 "desempaquetament remot"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "no s'ha pogut analitzar l'estat del desempaquetament remot: %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "s'ha produït un error en el desempaquetament remot: %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "s'ha produït un error en signar el certificat de pujada"
 
-#: send-pack.c:467
+#: send-pack.c:433
+#, fuzzy
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "promisor-remote no es pot bifurcar obtenint el subprocés"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr ""
+
+#: send-pack.c:520
 #, fuzzy
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "el destí receptor no admet opcions de pujada"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "el destí receptor no admet pujar --signed"
 
-#: send-pack.c:478
+#: send-pack.c:531
 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:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "el destí receptor no admet pujar --atomic"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "el destí receptor no admet opcions de pujada"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "mode de neteja «%s» no vàlid en la comissió del missatge"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "no s'ha pogut suprimir «%s»"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "no s'ha pogut eliminar «%s»"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "revertir"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "acció desconeguda: %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6873,7 +7589,7 @@
 "després de resoldre els conflictes, marqueu els camins\n"
 "corregits amb «git add <camins>» o «git rm <camins>»"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6883,108 +7599,109 @@
 "corregits amb «git add <camins>» o «git rm <camins>»\n"
 "i cometeu el resultat amb «git commit»"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "no s'ha pogut bloquejar «%s»"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "no s'ha pogut escriure a «%s»"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "no s'ha pogut escriure el terminador de línia a «%s»"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "s'ha produït un error en finalitzar «%s»"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "els vostres canvis locals se sobreescriurien per %s."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "cometeu els vostres canvis o feu un «stash» per a procedir."
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: avanç ràpid"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, 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:670
+#.
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: No s'ha pogut escriure un fitxer d'índex nou"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "no s'ha pogut actualitzar l'arbre cau"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "no s'ha pogut resoldre la comissió HEAD"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "no hi ha una clau a «%.*s»"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, fuzzy, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "no s'ha pogut delinear el valor de cometes de «%s»"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "no s'ha pogut obrir «%s» per a lectura"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "Ja s'ha donat «GIT_AUTHOR_NAME»"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "Ja s'ha donat «GIT_AUTHOR_EMAIL»"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "Ja s'ha donat «GIT_AUTHOR_DATE»"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variable «%s» desconeguda"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "falta «GIT_AUTHOR_NAME»"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "falta «GIT_AUTHOR_EMAIL»"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "falta «GIT_AUTHOR_DATE»"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7001,7 +7718,8 @@
 "  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"
@@ -7013,11 +7731,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "el lligam «prepare-commit-msg» ha fallat"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7044,7 +7762,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7070,356 +7788,362 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "no s'ha pogut trobar la comissió novament creada"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "no s'ha pogut analitzar la comissió novament creada"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "no s'ha pogut resoldre HEAD després de crear la comissió"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "HEAD separat"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (comissió arrel)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "no s'ha pogut analitzar HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s no és una comissió!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "no s'ha pogut analitzar la comissió HEAD"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "no s'ha pogut analitzar l'autor de la comissió"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree ha fallat en escriure un arbre"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, 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:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "identitat d'autor no vàlida: «%s»"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "autor malmès: falta la informació de la data"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678
-#: builtin/merge.c:904 builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "s'ha produït un error en escriure l'objecte de comissió"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "no s'ha pogut actualitzar %s"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "no s'ha pogut analitzar la comissió %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "no s'ha pogut analitzar la comissió pare %s"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "ordre desconeguda: %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Això és una combinació de %d comissions."
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "cal un HEAD per reparar-ho"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "no s'ha pogut llegir HEAD"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "no s'ha pogut llegir el missatge de comissió de HEAD"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "no es pot escriure «%s»"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Aquest és el 1r missatge de comissió:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "no s'ha pogut llegir el missatge de comissió: %s"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Aquest és el missatge de comissió #%d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+#, fuzzy
+msgid "The 1st commit message will be skipped:"
+msgstr "El missatge de comissió núm. #%d s'ometrà:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "El missatge de comissió núm. #%d s'ometrà:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Això és una combinació de %d comissions."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "no es pot escriure «%s»"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "cal un HEAD per reparar-ho"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "no s'ha pogut llegir HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "no s'ha pogut llegir el missatge de comissió de HEAD"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "no s'ha pogut llegir el missatge de comissió: %s"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "el vostre fitxer d'índex està sense fusionar."
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "no es pot arreglar la comissió arrel"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, 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:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "la comissió %s no té pare %d"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, 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:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: no es pot analitzar la comissió pare %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "no s'ha pogut canviar el nom «%s» a «%s»"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "no s'ha pogut revertir %s... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "no s'ha pogut aplicar %s... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, fuzzy, 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"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, 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:2157
+#: sequencer.c:2352
 #, 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:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s no accepta arguments: «%s»"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "falten els arguments per a %s"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "no s'ha pogut analitzar «%s»"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "línia no vàlida %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "no es pot «%s» sense una comissió prèvia"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "s'està cancel·lant un «cherry pick» en curs"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "s'està cancel·lant la reversió en curs"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "corregiu-ho usant «git rebase --edit-todo»."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "full d'instruccions inusable: «%s»"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "no s'ha analitzat cap comissió."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "no es pot fer «cherry pick» durant una reversió."
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "no es pot revertir durant un «cherry pick»."
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valor no vàlid per a %s: %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "«squash-onto» no usable"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "full d'opcions mal format: «%s»"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "conjunt de comissions buit passat"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "una reversió ja està en curs"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "intenteu «git revert (--continue | %s--abort | --quit)»"
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "un «cherry pick» ja està en curs"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "intenteu «git cherry-pick (--continue | %s--abort | --quit)»"
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "no s'ha pogut crear el directori de seqüenciador «%s»"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "no s'ha pogut bloquejar HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "ni hi ha cap «cherry pick» ni cap reversió en curs"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "no es pot resoldre HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 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:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "no es pot obrir «%s»"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "no es pot llegir «%s»: %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "final de fitxer inesperat"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, 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:2970
+#: sequencer.c:3179
 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:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "no hi ha cap reversió en curs"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "ni hi ha cap «cherry pick» en curs"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "s'ha produït un error en ometre la comissió"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "no hi ha res a ometre"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
-msgstr "heu fet ja una comissió?\n"
+msgstr ""
+"heu fet ja una comissió?\n"
 "proveu «git %s --continue»"
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "no es pot llegir HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "no s'ha pogut copiar «%s» a «%s»"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7438,27 +8162,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "No s'ha pogut aplicar %s... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "No s'ha pogut fusionar %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "no s'ha pogut copiar «%s» a «%s»"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "S'està executant: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7473,11 +8197,11 @@
 " git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 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:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7493,92 +8217,92 @@
 "\n"
 " git rebase --continue\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nom d'etiqueta no permès: «%.*s»"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "s'està escrivint una comissió arrel falsa"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "s'està escrivint «squash-onto»"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "no s'ha pogut resoldre «%s»"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "no es pot fusionar sense una revisió actual"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "no s'ha pogut analitzar «%.*s»"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "no hi ha res per fusionar «%.*s»"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 #, 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:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "no s'ha pogut llegir el missatge de comissió de «%s»"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "no s'ha pogut fusionar «%.*s»"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "fusió: no s'ha pogut escriure un fitxer d'índex nou"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "no es pot fer un «stash» automàticament"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Resposta de «stash» inesperada: «%s»"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "No s'ha pogut crear el directori per a «%s»"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "S'ha creat un «stash» automàticament: %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "no s'ha pogut fer reset --hard"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "S'ha aplicat el «stash» automàticament.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "no es pot emmagatzemar %s"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7589,29 +8313,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:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "L'aplicació del «stash» automàticament ha donat conflictes."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
-msgstr "El «stash» automàtic ja existeix; s'està creant una entrada «stash» nova."
+msgstr ""
+"El «stash» automàtic ja existeix; s'està creant una entrada «stash» nova."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "no s'ha pogut separar HEAD"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Aturat a HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Aturat a %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, fuzzy, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7627,58 +8352,58 @@
 "editar l'ordre abans de continuar editeu primer la llista de tasques "
 "pendents git rebase --edit-todo git rebase --continue"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, fuzzy, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "S'estan reubicant (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Aturat a %s...  %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "ordre %d desconeguda"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "no s'ha pogut llegir orig-head"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "no s'ha pogut llegir «onto»"
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "no s'ha pogut actualitzar HEAD a %s"
 
-#: sequencer.c:4350
-#,  c-format
+#: sequencer.c:4560
+#, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "S'ha fet «rebase» i actualitzat %s amb èxit.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "No es pot fer «rebase»: teniu canvis «unstaged»."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "no es pot esmenar una comissió no existent"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "fitxer no vàlid: «%s»"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contingut no vàlid: «%s»"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7688,50 +8413,50 @@
 "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:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "no s'ha pogut escriure el fitxer: «%s»"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "No s'ha pogut eliminar CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "no s'han pogut cometre els canvis «staged»."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: no es pot fer «cherry pick» a %s"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisió incorrecta"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "no es pot revertir com a comissió inicial"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: opcions no gestionades"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: s'ha produït un error en preparar les revisions"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "res a fer"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "no s'han pogut ometre les ordres «picks» no necessàries"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "l'script ja estava endreçat."
 
@@ -7747,7 +8472,8 @@
 "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
@@ -7756,7 +8482,8 @@
 "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>...]»"
 
@@ -7875,430 +8602,84 @@
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
 "no és un dipòsit 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:1362
+#: setup.c:1370
 #, 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:1409
+#: 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:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "el «fork» ha fallat"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "«setsid» ha fallat"
 
-#: sha1-file.c:480
-#, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
 msgstr ""
-"no existeix el directori d'objecte %s; comproveu "
-".git/objects/info/alternates"
 
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "no s'ha pogut normalitzar el camí a l'objecte alternatiu: %s"
-
-#: sha1-file.c:603
-#, fuzzy, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr ""
-"percentatges ignorant botigues alternatives d'objectes imbricació massa "
-"profunda"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "no s'ha pogut normalitzar el directori de l'objecte: %s"
-
-#: sha1-file.c:653
+#: sparse-index.c:156
 #, fuzzy
-msgid "unable to fdopen alternates lockfile"
-msgstr "no s'ha pogut obrir el fitxer de bloqueig alternatiu «fdopen»"
+msgid "unable to update cache-tree, staying full"
+msgstr "no s'ha pogut actualitzar l'arbre cau"
 
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "no es pot llegir el fitxer «alternates»"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "no s'ha pogut moure el nou fitxer «alternates» al lloc"
-
-#: sha1-file.c:713
+#: sparse-index.c:239
 #, c-format
-msgid "path '%s' does not exist"
-msgstr "el camí «%s» no existeix"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgid "index entry is a directory, but not sparse (%08x)"
 msgstr ""
-"encara no s'admet el dipòsit de referència «%s» com a agafament enllaçat."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "el dipòsit de referència «%s» no és un dipòsit local."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "el dipòsit de referència «%s» és superficial"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "el dipòsit de referència «%s» és empeltat"
-
-#: sha1-file.c:814
-#, 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"
-
-#: sha1-file.c:964
-#, fuzzy, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "intentar mmap %<PRIuMAX> més del límit <PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap ha fallat"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "el tipus d'objecte %s és buit"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "objecte solt corrupte «%s»"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "brossa al final de l'objecte solt «%s»"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "tipus d'objecte és incorrecte"
-
-#: sha1-file.c:1412
-#, 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"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "no s'ha pogut desempaquetar la capçalera %s"
-
-#: sha1-file.c:1421
-#, 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"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "no s'ha pogut analitzar la capçalera %s"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "s'ha produït un error en llegir l'objecte %s"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "no s'ha trobat el reemplaçament %s per a %s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "l'objecte solt %s (emmagatzemat a %s) és corrupte"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "l'objecte empaquetat %s (emmagatzemat a %s) és corrupte"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "no s'ha pogut escriure al fitxer %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "no s'ha pogut establir el permís a «%s»"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "s'ha produït un error en escriure al fitxer"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "error en tancar el fitxer d'objecte solt"
-
-#: sha1-file.c:1867
-#, 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 dipòsit"
-" %s"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "no s'ha pogut crear un fitxer temporal"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "no s'ha pogut escriure el fitxer d'objecte solt"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "no s'ha pogut desinflar l'object nou %s (%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "ha fallat deflateEnd a l'objecte %s(%d)"
-
-#: sha1-file.c:1907
-#, 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"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "ha fallat utime() a %s"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "no es pot llegir l'objecte per a %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "comissió corrupta"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "etiqueta corrupta"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "error de lectura mentre s'indexava %s"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "lectura curta mentre s'indexa %s"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: no s'han pogut inserir a la base de dades"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: tipus de fitxer no suportat"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s no és un objecte vàlid"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s no és un objecte de «%s» vàlid"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "no s'ha pogut obrir %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "no coincideix la suma per a %s (s'esperava %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "no s'ha pogut fer «mmap» %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "no s'ha pogut desempaquetar la capçalera de %s"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "no s'ha pogut analitzar la capçalera de %s"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "no s'han pogut desempaquetar els continguts de %s"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "l'SHA1 %s curt és ambigu"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Els candidats són:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git normalment mai crea una referència que acabi amb 40 caràcters\n"
-"hexadecimals perquè s'ignorarà quan només especifiqueu 40 caràcters\n"
-"hexadecimals. Aquestes referències es poden crear per error. Per\n"
-"exemple,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"on «$br» és buida per algun motiu i es crea una referència de 40 caràcters\n"
-"hexadecimals. Examineu aquestes referències i potser\n"
-"suprimiu-les. Desactiveu aquest missatge executant\n"
-"«git config advice.objectNameWarning false»"
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "registre per a «%.*s» només retorna a %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "registre per a «%.*s» només té %d entrades"
-
-#: sha1-name.c:1702
-#, fuzzy, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "el camí «%s» existeix al disc però no a «%.*s»"
-
-#: sha1-name.c:1708
-#, fuzzy, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"path '%s' existeix però no insinuacions '%s' vol dir '%.*s%s' aka "
-"'%.*s./%s'?"
-
-#: sha1-name.c:1717
-#, fuzzy, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "el camí «%s» no existeix en «%.*s»"
-
-#: sha1-name.c:1745
-#, fuzzy, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"La ruta \"%s\" està en l'índex però no en la indicació de l'etapa per cent."
-
-#: sha1-name.c:1761
-#, fuzzy, 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à en l'índex però no en la indicació '%s' vol dir '%ds' aka "
-"'%d./%s'?"
-
-#: sha1-name.c:1769
-#, fuzzy, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "el camí «%» existeix al disc però no a l'índex"
-
-#: sha1-name.c:1771
-#, fuzzy, 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)"
-
-#: sha1-name.c:1784
-#, fuzzy
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-"la sintaxi relativa del camí no es pot utilitzar fora de l'arbre de treball"
-
-#: sha1-name.c:1922
-#, fuzzy, c-format
-msgid "invalid object name '%.*s'."
-msgstr "nom d'objecte no vàlid «%.*s»."
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8306,20 +8687,20 @@
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "no s'ha pogut obrir «%s» per a escriptura"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "no s'ha pogut editar «%s»"
@@ -8337,8 +8718,8 @@
 #, fuzzy, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
-"ignorant \"%s\" que poden interpretar-se com una opció de línia d'ordres per"
-" cent"
+"ignorant \"%s\" que poden interpretar-se com una opció de línia d'ordres per "
+"cent"
 
 #: submodule-config.c:499
 #, c-format
@@ -8370,22 +8751,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "l'allistament del .gitmodules actualitzat ha fallat"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "al submòdul sense popular «%s»"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "L'especificació «%s» és en el submòdul «%.*s»"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "argument incorrecte --ignore-submodules: %s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, fuzzy, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8394,50 +8775,50 @@
 "El submòdul en «commit%s» al camí «%s» col·lideix amb un submòdul anomenat "
 "el mateix. Ometent-lo."
 
-#: submodule.c:919
+#: submodule.c:921
 #, 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:1004
+#: submodule.c:1006
 #, 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:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "ha fallat el procés per al submòdul «%s»"
 
-#: submodule.c:1156 builtin/branch.c:678 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 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:1167
+#: submodule.c:1169
 #, fuzzy, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Subjecting submodule '%s'"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, fuzzy, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "No s'ha pogut prémer el submòdul «%s»"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "S'està obtenint el submòdul %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "No s'ha pogut accedir al submòdul «%s»\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8446,62 +8827,61 @@
 "Errors durant l'obtenció de submòduls:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "«%s» no reconegut com un dipòsit git"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, 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:1729
+#: submodule.c:1736
 #, 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:1804
+#: submodule.c:1811
 #, 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:1817
+#: submodule.c:1824
 #, 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:1832
+#: submodule.c:1839
 #, fuzzy, 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»"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
-msgstr ""
-"s'ha produït un error en cercar recursivament al camí de submòdul «%s»"
+msgstr "s'ha produït un error en cercar recursivament al camí de submòdul «%s»"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "no s'ha pogut restablir l'índex del submòdul"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "el submòdul «%s» té l'índex brut"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "No s'ha pogut actualitzar el submòdul «%s»."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "submodule git dir «%s» està dins git dir «%.*s»"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8509,17 +8889,17 @@
 "no està admès relocate_gitdir per al submòdul «%s» amb més d'un arbre de "
 "treball"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "no s'ha trobat el nom pel submòdul «%s»"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, 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:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8530,65 +8910,71 @@
 "«%s» a\n"
 "«%s»\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "no s'ha pogut iniciar ls-files a .."
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree ha retornat un codi de retorn %d no esperat"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, fuzzy, c-format
+msgid "failed to lstat '%s'"
+msgstr "s'ha produït un error en fer stat a «%s»"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "l'execució de l'ordre de remolc «%s» ha fallat"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "valor desconegut «%s» per a la clau «%s»"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "més d'un %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "testimoni de remolc buit en el remolc «%.*s»"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "no s'ha pogut llegir el fitxer d'entrada «%s»"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "no s'ha pogut llegir des de stdin"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "no s'ha pogut fer stat a %s"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "el fitxer %s no és un fitxer regular"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "el fitxer %s no és gravable per l'usuari"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "no s'ha pogut obrir el fitxer temporal"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "no s'ha pogut canviar el nom del fitxer temporal a %s"
@@ -8640,7 +9026,7 @@
 msgid "error while running fast-import"
 msgstr "error en executar la importació ràpida"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "no s'ha pogut llegir la referència %s"
@@ -8660,7 +9046,7 @@
 msgid "invalid remote service path"
 msgstr "el camí del servei remot no és vàlid"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "opció no admesa pel protocol"
 
@@ -8669,73 +9055,77 @@
 msgid "can't connect to subservice %s"
 msgstr "no es pot connectar al subservei %s"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr ""
+
+#: transport-helper.c:755
 #, fuzzy
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' sense una directiva 'ok/error' coincident"
 
-#: transport-helper.c:788
+#: 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:845
+#: transport-helper.c:855
 #, fuzzy, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'ajudant ha informat d'un estat inesperat dels percentatges"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, fuzzy, c-format
 msgid "helper %s does not support dry-run"
 msgstr "els ajudants no donen suport a l'execució seca"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, fuzzy, c-format
 msgid "helper %s does not support --signed"
 msgstr "els ajudants per cents no són compatibles --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, 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:939
+#: transport-helper.c:949
 #, fuzzy, c-format
 msgid "helper %s does not support --atomic"
 msgstr "els ajudants no admeten --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, fuzzy, c-format
 msgid "helper %s does not support --%s"
 msgstr "els ajudants per cents no són compatibles --signed"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, fuzzy, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "els ajudants no donen suport a «push-option»"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 #, 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:1055
+#: transport-helper.c:1065
 #, fuzzy, c-format
 msgid "helper %s does not support 'force'"
 msgstr "els ajudants no donen suport a «force»"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 #, fuzzy
 msgid "couldn't run fast-export"
 msgstr "no s'ha pogut executar «fast-export»"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 #, fuzzy
 msgid "error while running fast-export"
 msgstr "error en executar l'exportació ràpida"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, fuzzy, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8744,52 +9134,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:1213
+#: transport-helper.c:1224
 #, fuzzy, c-format
 msgid "unsupported object format '%s'"
 msgstr "objecte mal format a «%s»"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, fuzzy, c-format
 msgid "malformed response in ref list: %s"
 msgstr "resposta mal formada en la llista de referències"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, fuzzy, c-format
 msgid "read(%s) failed"
 msgstr "ha fallat read(%)"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, fuzzy, c-format
 msgid "write(%s) failed"
 msgstr "ha fallat write(%)"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, fuzzy, c-format
 msgid "%s thread failed"
 msgstr "ha fallat el fil per cents"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, 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:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, 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:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "el procés %s no ha pogut esperar"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "el procés %s ha fallat"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "no es pot iniciar el fil per copiar dades"
 
@@ -8808,42 +9198,47 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: opció de profunditat no vàlida «%s»"
 
-#: transport.c:269
+#: transport.c:272
 #, fuzzy
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "vegeu protocol.version a «git help config» per a més detalls"
 
-#: transport.c:270
+#: transport.c:273
 #, fuzzy
 msgid "server options require protocol version 2 or later"
 msgstr "les opcions del servidor requereixen el protocol versió 2 o posterior"
 
-#: transport.c:727
+#: transport.c:400
+#, fuzzy
+msgid "server does not support wait-for-done"
+msgstr "El servidor no admet --deepen"
+
+#: transport.c:751
 #, fuzzy
 msgid "could not parse transport.color.* config"
 msgstr "no s'ha pogut analitzar la configuració de transport.color.*"
 
-#: transport.c:802
+#: transport.c:826
 #, fuzzy
 msgid "support for protocol v2 not implemented yet"
 msgstr "encara no s'ha implementat la implementació del protocol v2"
 
-#: transport.c:936
+#: transport.c:960
 #, fuzzy, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valor desconegut per config «%s»%s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "no es permet el transport «%s»"
 
-#: transport.c:1055
+#: transport.c:1079
 #, fuzzy
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync ja no és compatible"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8852,7 +9247,7 @@
 "Els camins de submòdul següents contenen canvis que no\n"
 "es poden trobar en cap remot:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8878,68 +9273,72 @@
 "\n"
 "per a pujar-los a un remot.\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "S'està avortant."
 
-#: transport.c:1315
+#: transport.c:1340
 #, fuzzy
 msgid "failed to push all needed submodules"
 msgstr "no s'ha pogut prémer tots els submòduls necessaris"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "objecte d'arbre massa curt"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "mode mal format en entrada d'arbre"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "nom de fitxer buit en una entrada d'arbre"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "fitxer d'arbre massa curt"
 
-#: unpack-trees.c:113
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%sPlease commit your changes or stash them before you switch branches."
-msgstr ""
-"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:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
-"%%s"
+"%%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"
-"%%s"
+"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:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%sPlease commit your changes or stash them before you merge."
+"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 fusionar:\n"
-"%%sCometeu els vostres canvis o feu «stash» abans de fusionar."
+"Els vostres canvis locals als fitxers següents se sobreescriurien per "
+"agafar:\n"
+"%%s"
 
 #: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
+"%%sPlease commit your changes or stash them before you merge."
+msgstr ""
+"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
+#, c-format
+msgid ""
+"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:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8948,7 +9347,7 @@
 "Els vostres canvis locals als fitxers següents se sobreescriurien per %s:\n"
 "%%sCometeu els vostres canvis o feu «stash» abans de %s."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8957,7 +9356,7 @@
 "Els vostres canvis locals als fitxers següents se sobreescriurien per %s:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8966,120 +9365,132 @@
 "En actualitzar els directoris següents perdria fitxers no seguits en el:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
-"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:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "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 per "
+"agafar:\n"
 "%%s"
 
-#: unpack-trees.c:139
-#, c-format
-msgid ""
-"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"
-"%%sMoveu-los o elimineu-los abans de fusionar."
-
 #: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
-"%%s"
+"%%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"
-"%%s"
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
+"fusionar:\n"
+"%%sMoveu-los o elimineu-los abans de fusionar."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%sPlease move or remove them before you %s."
+"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 %s:\n"
-"%%sMoveu-los o elimineu-los abans de %s."
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per "
+"fusionar:\n"
+"%%s"
 
 #: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+"Els següents fitxers no seguits en l'arbre de treball s'eliminarien per %s:\n"
+"%%sMoveu-los o elimineu-los abans de %s."
+
+#: unpack-trees.c:148
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
 "%%s"
 msgstr ""
 "Els següents fitxers no seguits en l'arbre de treball s'eliminarien per %s:\n"
 "%%s"
 
-#: unpack-trees.c:152
-#, c-format
-msgid ""
-"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"
-"%%sMoveu-los o elimineu-los abans de canviar de branca."
-
 #: unpack-trees.c:154
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by checkout:\n"
-"%%s"
+"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"
-"%%s"
+"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:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%sPlease move or remove them before you merge."
+"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 fusionar:\n"
-"%%sMoveu-los o elimineu-los abans de fusionar."
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"agafar:\n"
+"%%s"
 
 #: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
-"%%s"
+"%%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"
-"%%s"
+"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:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%sPlease move or remove them before you %s."
+"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 %s:\n"
-"%%sMoveu-los o elimineu-los abans de %s."
+"Els següents fitxers no seguits en l'arbre de treball se sobreescriurien per "
+"fusionar:\n"
+"%%s"
 
 #: unpack-trees.c:164
 #, c-format
 msgid ""
 "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"
+"%%sMoveu-los o elimineu-los abans de %s."
+
+#: unpack-trees.c:166
+#, c-format
+msgid ""
+"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:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "L'entrada «%s» encavalca amb «%s».  No es pot vincular."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9088,37 +9499,40 @@
 "No es pot actualitzar el submòdul:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: 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 "
 "dispersat els percentatges"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, fuzzy, c-format
 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:182
+#: 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 "
 "malgrat els patrons escassos."
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "S'està avortant\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, fuzzy, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -9127,11 +9541,11 @@
 "Després de corregir els camins anteriors és possible que vulgueu executar "
 "`git sparse-checkout reapply`."
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "S'estan actualitzant els fitxers"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 #, fuzzy
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
@@ -9143,12 +9557,17 @@
 "minúscules) i només un del mateix grup de col·lisió es troba a l'arbre de "
 "treball"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 #, fuzzy
 msgid "Updating index flags"
 msgstr "Actualitzant els indicadors d’índex"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+
+#: upload-pack.c:1548
 #, fuzzy
 msgid "expected flush after fetch arguments"
 msgstr "s'esperava una neteja després de les capacitats"
@@ -9186,74 +9605,113 @@
 msgid "Fetching objects"
 msgstr "S'estan obtenint objectes"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "s'ha produït un error en llegir «%s»"
 
-#: worktree.c:283
+#: worktree.c:304
 #, fuzzy, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "'%s' a l'arbre de treball principal no és el directori del repositori"
 
-#: worktree.c:294
+#: worktree.c:315
 #, fuzzy, 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:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "«%s» no existeix"
 
-#: worktree.c:312
+#: worktree.c:333
 #, 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:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "«%s» no assenyala de tornada a «%s»"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "no és en un directori"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git no és un fitxer"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr "fitxer .git malmès"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr "fitxer .git malmès"
 
-#: worktree.c:670
+#: worktree.c:727
 #, fuzzy
 msgid "not a valid path"
 msgstr "no és un camí vàlid"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "no s'ha pogut trobar el dipòsit; .git no és un fitxer"
 
-#: worktree.c:679
+#: worktree.c:737
+#, fuzzy
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "no s'ha pogut trobar el dipòsit; .git no és un fitxer"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "no s'ha pogut trobar el dipòsit; el fitxer .git està malmès"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "gitdir illegible"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "gitdir incorrecte"
 
+#: worktree.c:776
+#, fuzzy
+msgid "not a valid directory"
+msgstr "no és en un directori git"
+
+#: worktree.c:782
+#, fuzzy
+msgid "gitdir file does not exist"
+msgstr "Eliminació de worktrees/%s: el fitxer gitdir no existeix"
+
+#: worktree.c:787 worktree.c:796
+#, fuzzy, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "no s'ha pogut llegir l'arbre (%s)"
+
+#: worktree.c:806
+#, fuzzy, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr ""
+"S'estan eliminant els arbres de treball/%s: lectura curta (s'esperaven "
+"%<PRIuMAX> bytes, se n'han llegit %<PRIuMAX>)"
+
+#: worktree.c:814
+#, fuzzy
+msgid "invalid gitdir file"
+msgstr "fitxer de configuració no vàlid %s"
+
+#: worktree.c:822
+#, fuzzy
+msgid "gitdir file points to non-existent location"
+msgstr ""
+"Eliminació de worktrees/%s: el fitxer gitdir es refereix a una ubicació no "
+"existent"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9300,11 +9758,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:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Canvis a cometre:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Canvis no «staged» per a cometre:"
 
@@ -9318,7 +9776,8 @@
 
 #: wt-status.c:241
 #, fuzzy
-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 descartar els canvis en el directori de "
 "treball)"
@@ -9405,22 +9864,22 @@
 msgid "untracked content, "
 msgstr "contingut no seguit, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, 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:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Submòduls canviats però no actualitzats:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Canvis de submòdul a cometre:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9428,119 +9887,118 @@
 "No modifiqueu ni elimineu la línia de dalt.\n"
 "Tot el que hi ha a sota s'ignorarà."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, fuzzy, c-format
 msgid ""
 "\n"
 "It took %.2f seconds to compute the branch ahead/behind values.\n"
 "You can use '--no-ahead-behind' to avoid this.\n"
 msgstr ""
-"S'ha trigat un 2%f segons a calcular la branca endavant/darrere dels valors."
-" Podeu utilitzar «--no-perhead-behind» per evitar-ho."
+"S'ha trigat un 2%f segons a calcular la branca endavant/darrere dels valors. "
+"Podeu utilitzar «--no-perhead-behind» per evitar-ho."
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Teniu camins sense fusionar."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (arregleu els conflictes i executeu «git commit»)"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (useu «git merge --abort» per a avortar la fusió)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tots els conflictes estan arreglats però encara esteu fusionant."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (useu «git commit» per a concloure la fusió)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Esteu enmig d'una sessió am."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "El pedaç actual està buit."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (arregleu els conflictes i després executeu «git am --continue»)"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (useu «git am --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (useu «git am --abort» per a restaurar la branca original)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "Manca git-rebase-todo."
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "No s'ha fet cap ordre."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, 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:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (vegeu més en el fitxer %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "No manca cap ordre."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, 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:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (useu «git rebase --edit-todo» per a veure i editar)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, 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:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Actualment esteu fent «rebase»."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 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:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (useu «git rebase --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 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:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git rebase --continue»)"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9548,152 +10006,160 @@
 "Actualment esteu dividint una comissió mentre es fa «rebase» de la branca "
 "«%s» en «%s»."
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Actualment esteu dividint una comissió durant un «rebase»."
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 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:1394
+#: wt-status.c:1399
 #, 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:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "Actualment esteu editant una comissió durant un «rebase»."
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (useu «git commit --amend» per a esmenar la comissió actual)"
 
-#: wt-status.c:1404
-msgid "  (use \"git rebase --continue\" once you are satisfied with your changes)"
+#: wt-status.c:1409
+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:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Hi ha «cherry pick» actualment en curs."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Actualment esteu fent «cherry pick» a la comissió %s."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (arregleu els conflictes i executeu «git cherry-pick --continue»)"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (executeu «git cherry-pick --continue» per a continuar)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 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:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (useu «git cherry-pick --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 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:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Una reversió està actualment en curs."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Actualment esteu revertint la comissió %s."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (arregleu els conflictes i executeu «git revert --continue»)"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (executeu «git revert --continue» per a continuar)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git revert --continue»)"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (useu «git revert --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 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:1474
+#: wt-status.c:1479
 #, 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:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Actualment esteu bisecant."
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 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:1492
+#: wt-status.c:1497
 #, 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:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "En la branca "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "«rebase» interactiu en curs; sobre "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "«rebase» en curs; sobre "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD separat a "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD separat des de "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Actualment no s'és en cap branca."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Comissió inicial"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "No s'ha fet cap comissió encara"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Fitxers no seguits"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Fitxers ignorats"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9705,30 +10171,30 @@
 "oblidar-vos d'afegir fitxers nous vosaltres mateixos (vegeu\n"
 "«git help status»)."
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Els fitxers no seguits no estan llistats%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (useu l'opció -u per a mostrar els fitxers no seguits)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Sense canvis"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, 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:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "no hi ha canvis afegits a cometre\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9737,69 +10203,88 @@
 "no hi ha res afegit a cometre però hi ha fitxers no seguits (useu «git add» "
 "per a seguir-los)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, 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:1823
+#: wt-status.c:1828
 #, 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:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "no hi ha res a cometre\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, 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:1835
+#: wt-status.c:1840
 #, 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:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "No s'ha fet cap comissió encara a "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (sense branca)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "diferent"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "darrere "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "davant per "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "no es pot %s: Teniu canvis «unstaged»."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "addicionalment, el vostre índex conté canvis sense cometre."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "no es pot %s: El vostre índex conté canvis sense cometre."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "no s'ha pogut enviar l'ordre IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "no s'ha pogut llegir la resposta IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, 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
+#, 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
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "s'ha produït un error en desenllaçar «%s»"
@@ -9808,131 +10293,137 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, fuzzy, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "no es pot canviar de directori a «%s»"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "estat de diff inesperat %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "s'ha produït un error en actualitzar els fitxers"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "elimina «%s»\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Canvis «unstaged» després d'actualitzar l'índex:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "No s'ha pogut llegir l'índex"
 
-#: builtin/add.c:283
+#: 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:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "No s'ha pogut escriure el pedaç"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "l'edició del pedaç ha fallat"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "No s'ha pogut fer stat a «%s»"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "El pedaç és buit. S'ha avortat."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "No s'ha pogut aplicar «%s»"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 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:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
-msgstr "marxa en sec"
+msgstr "fer una prova"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "recull interactiu"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "selecciona els trossos interactivament"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "edita la diferència actual i aplica-la"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "permet afegir fitxers que d'altra manera s'ignoren"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "actualitza els fitxers seguits"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 #, fuzzy
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "torna a normalitzar EOL dels fitxers seguits (implica -u)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 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:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "afegeix els canvis de tots els fitxers seguits i no seguits"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 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:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "no afegeixis, només actualitza l'índex"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 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:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
-"comproveu si els fitxers - fins i tot els absents - s'ignoren en marxa en "
-"sec"
+"comproveu si els fitxers, fins i tot els absents, s'ignoren en fer una "
+"prova"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "passa per alt el bit executable dels fitxers llistats"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "avisa'm quan s'afegeixi un dipòsit incrustat"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 #, fuzzy
 msgid "backend for `git stash -p`"
 msgstr "backend per a «git stash -p»"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9963,181 +10454,180 @@
 "\n"
 "Vegeu «git help submodule» per a més informació."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "s'està afegint un dipòsit incrustat: %s"
 
-#: builtin/add.c:416
-#, fuzzy
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
 "\"git config advice.addIgnoredFile false\""
 msgstr ""
-"Utilitzeu -f si realment voleu afegir-los. Desactiveu aquest missatge "
-"executant «git config aconsell.addIgnoredFile false»"
+"Utilitzeu -f si realment voleu afegir-los.\n"
+"Desactiveu aquest missatge executant\n"
+"«git config advice.addIgnoredFile false»"
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "l'afegiment de fitxers ha fallat"
 
-#: builtin/add.c:453 builtin/commit.c:345
-#, fuzzy
-msgid "--pathspec-from-file is incompatible with --interactive/--patch"
-msgstr "--pathspec-from-file és incompatible amb --interactive/-patch"
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run és incompatible amb --interactive/--patch"
 
-#: builtin/add.c:470
-#, fuzzy
+#: builtin/add.c:490 builtin/commit.c:357
+msgid "--pathspec-from-file is incompatible with --interactive/--patch"
+msgstr "--pathspec-from-file és incompatible amb --interactive/--patch"
+
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file és incompatible amb --edit"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A i -u són mútuament incompatibles"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 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:489
+#: builtin/add.c:526
 #, 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:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
-#, fuzzy
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file és incompatible amb els arguments de «pathspec»"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
-#, fuzzy
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul requereix --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "No s'ha especificat res, no s'ha afegit res.\n"
 
-#: builtin/add.c:520
-#, fuzzy
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
 "\"git config advice.addEmptyPathspec false\""
 msgstr ""
-"Potser voleu dir «git add .»? Voleu desactivar aquest missatge executant "
-"«git config aconsell.addEmptyPathspec false»"
+"Potser voleu dir «git add .»?\n"
+"Desactiveu aquest missatge executant\n"
+"«git config advice.addEmptyPathspec false»"
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "no s'ha pogut analitzar l'script d'autor"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "s'ha suprimit «%s» pel lligam applypatch-msg"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Línia d'entrada mal formada: «%s»."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, 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:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "fseek ha fallat"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "no s'ha pogut analitzar el pedaç «%s»"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 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:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "marca de temps no vàlida"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "línia Date no vàlida"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "desplaçament del fus horari no vàlid"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "La detecció de format de pedaç ha fallat."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "s'ha produït un error en crear el directori «%s»"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "S'ha produït un error en dividir els pedaços."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, 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:1090
+#: builtin/am.c:1126
 #, 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:1091
+#: builtin/am.c:1127
 #, 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:1174
+#: builtin/am.c:1222
 #, fuzzy
-msgid ""
-"Patch sent with format=flowed; space at the end of lines might be lost."
+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."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "El pedaç està buit."
 
-#: builtin/am.c:1267
-#, fuzzy, c-format
+#: builtin/am.c:1315
+#, c-format
 msgid "missing author line in commit %s"
-msgstr "manca la línia d'autor a les comissions"
+msgstr "manca la línia d'autor en la comissió %s"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "línia d'identitat no vàlida: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
-"Al dipòsit li manquen els blobs necessaris per a retrocedir a una fusió de 3"
-" vies."
+"Al dipòsit li manquen els blobs necessaris per a retrocedir a una fusió de 3 "
+"vies."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 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:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10145,67 +10635,67 @@
 "Heu editat el vostre pedaç a mà?\n"
 "No s'aplica als blobs recordats en el seu índex."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 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:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "S'ha produït un error en fusionar els canvis."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "s'està aplicant a una història buida"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "no es pot reprendre: %s no existeix."
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 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:1658
+#.
+#: builtin/am.c:1706
 #, 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:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "no s'ha pogut escriure el fitxer d'índex"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Índex brut: no es poden aplicar pedaços (bruts: %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "S'està aplicant: %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "El pedaç ha fallat a %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 #, fuzzy
 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 "Utilitzeu 'git am --show-current-patch=diff' per veure el pedaç fallit"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10215,27 +10705,30 @@
 "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:1826
+#: builtin/am.c:1874
 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:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "No s'ha pogut analitzar l'objecte «%s»."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "s'ha produït un error en netejar l'índex"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10243,159 +10736,165 @@
 "Sembla que heu mogut HEAD després de l'última fallada de «am».\n"
 "No s'està rebobinant a ORIG_HEAD"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valor no vàlid per a --patch-format: %s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, fuzzy, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Valor no vàlid per --show-current-patch%s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, fuzzy, 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:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opcions>] [(<bústia> | <directori-de-correu>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opcions>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "executa interactivament"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "opció històrica -- no-op"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
 
-#: builtin/am.c:2225 builtin/init-db.c:558 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "silenciós"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 #, fuzzy
 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:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "recodifica en utf8 (per defecte)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "passa l'indicador -k a git-mailinfo"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "passa l'indicador -b a git-mailinfo"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "passa l'indicador -m a git-mailinfo"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 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:2241
+#: builtin/am.c:2289
 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:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "elimina tot abans d'una línia de tisores"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+#, fuzzy
+msgid "pass it through git-mailinfo"
+msgstr "passa-ho a través de git-apply"
+
+#: 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
 msgid "pass it through git-apply"
 msgstr "passa-ho a través de git-apply"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:659 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "el format en el qual estan els pedaços"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 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:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "segueix aplicant pedaços després de resoldre un conflicte"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "sinònims de --continue"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "omet el pedaç actual"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
+#: 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:2290
+#: builtin/am.c:2341
 #, fuzzy
-msgid "abort the patching operation but keep HEAD where it is."
+msgid "abort the patching operation but keep HEAD where it is"
 msgstr "avorta l'operació de pedaç però manté HEAD on és."
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 #, fuzzy
 msgid "show the patch being applied"
 msgstr "mostra el pedaç que s'està aplicant"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "menteix sobre la data del comitent"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "usa el marc de temps actual per la data d'autor"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "ID de clau"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "signa les comissions amb GPG"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(ús intern per a git-rebase)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10403,18 +10902,18 @@
 "Fa molt que l'opció -b/--binary no ha fet res, i\n"
 "s'eliminarà. No l'useu més."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "S'ha produït un error en llegir l'índex"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, 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:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10423,11 +10922,11 @@
 "S'ha trobat un directori %s extraviat.\n"
 "Useu «git am --abort» per a eliminar-lo."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Una operació de resolució no està en curs; no reprenem."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 #, fuzzy
 msgid "interactive mode requires patches on the command line"
 msgstr "el mode interactiu requereix pedaços a la línia d'ordres"
@@ -10472,106 +10971,93 @@
 
 #: builtin/bisect--helper.c:24
 #, fuzzy
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <goodterm> "
-"<badterm>"
+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-check-and-set-terms <command> <good_term> "
-"<bad_term>"
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
+"term-new]"
 msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <command> <goodterm> "
-"<badterm>"
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
+"term-bad | --term-new]"
 
 #: builtin/bisect--helper.c:26
 #, 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:27
-#, fuzzy
 msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
-"--term-new]"
+"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-terms [--term-good | --term-old | --term-bad | "
-"--term-bad | --term-new]"
+"git bisect--helper --bisect-start [---term-{oldgood}=<term> --term-{newbad}"
+"=<term>][--no-checkout] [<bad> [<good>]] [-] [<paths>]"
 
 #: builtin/bisect--helper.c:28
 #, fuzzy
-msgid ""
-"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>]"
-
-#: builtin/bisect--helper.c:30
-#, fuzzy
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-clean-state"
 
-#: builtin/bisect--helper.c:31
-#, fuzzy
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-clean-state"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 #, fuzzy
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-reset [<comissió>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 #, fuzzy
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-reset [<comissió>]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+#, fuzzy
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-clean-state"
+
+#: builtin/bisect--helper.c:32
+#, fuzzy
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-reset [<comissió>]"
+
+#: builtin/bisect--helper.c:107
 #, fuzzy, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "no es pot copiar «%s» a «%s»"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, fuzzy, c-format
 msgid "could not write to file '%s'"
 msgstr "no s'ha pogut escriure el fitxer: «%s»"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "«%s» no és un terme vàlid"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, 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:168
+#: builtin/bisect--helper.c:167
 #, 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:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "useu dos termes distintes"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, fuzzy, c-format
 msgid "We are not bisecting.\n"
 msgstr "No estem bisecant."
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "«%s» no és una comissió vàlida"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, fuzzy, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10579,27 +11065,27 @@
 "no s'ha pogut comprovar l'original HEAD «%s». Proveu «git bisect reset "
 "<commit>»."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, fuzzy, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Arguments de bisectriu incorrectes"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, 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:272
+#: builtin/bisect--helper.c:271
 #, fuzzy, c-format
 msgid "couldn't open the file '%s'"
 msgstr "no s'ha pogut obrir el fitxer «%s»"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, 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:325
+#: builtin/bisect--helper.c:324
 #, fuzzy, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10608,7 +11094,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:329
+#: builtin/bisect--helper.c:328
 #, fuzzy, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10616,9 +11102,10 @@
 "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:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "bisecant amb només una comissió %s"
@@ -10626,15 +11113,16 @@
 #. 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:357
+#.
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "N'esteu segur [Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "cap terme definit"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, fuzzy, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10643,7 +11131,7 @@
 "Els seus actuals termes són percentatges per al vell Estat i percentatges "
 "per al nou Estat."
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10652,56 +11140,56 @@
 "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:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 #, fuzzy
 msgid "revision walk setup failed\n"
 msgstr "la configuració del passeig per revisions ha fallat"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, fuzzy, c-format
 msgid "could not open '%s' for appending"
 msgstr "no s'ha pogut obrir «%s» per a lectura"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 #, fuzzy
 msgid "'' is not a valid term"
 msgstr "«%s» no és un terme vàlid"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "opció no reconeguda: «%s»"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, 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:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "HEAD incorrecte - Cal un HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, 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:733
+#: builtin/bisect--helper.c:732
 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:736
+#: builtin/bisect--helper.c:735
 #, fuzzy
 msgid "bad HEAD - strange symbolic ref"
 msgstr "HEAD incorrecte - referència simbòlica estranya"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, fuzzy, c-format
 msgid "invalid ref: '%s'"
 msgstr "ref '%s' no és vàlid"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 #, fuzzy
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Cal començar per «git bisect start»"
@@ -10709,108 +11197,120 @@
 #. 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:825
+#.
+#: builtin/bisect--helper.c:824
 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:843
+#: builtin/bisect--helper.c:842
 #, fuzzy
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Si us plau crideu `--bisect-state` amb almenys un argument"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, fuzzy, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "«git bisect $TERM_BAD» pot acceptar només un argument."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, fuzzy, c-format
 msgid "Bad rev input: %s"
 msgstr "Introducció de revisió errònia: $arg"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, fuzzy, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Introducció de revisió errònia: $arg"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "No estem bisecant."
+
+#: builtin/bisect--helper.c:969
+#, fuzzy, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "?? de què parleu?"
+
+#: builtin/bisect--helper.c:981
+#, fuzzy, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "no es pot llegir $file per a reproducció"
+
+#: builtin/bisect--helper.c:1054
 #, fuzzy
 msgid "reset the bisection state"
 msgstr "restableix l'estat de la bisecció"
 
-#: builtin/bisect--helper.c:926
-#, fuzzy
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "escriu l'estat de la bisecció a BISECTLOG"
-
-#: builtin/bisect--helper.c:928
-#, fuzzy
-msgid "check and set terms in a bisection state"
-msgstr "comprova i defineix els termes en un estat de bisecció"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 #, fuzzy
 msgid "check whether bad or good terms exist"
 msgstr "comprova si existeixen termes incorrectes o bons"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 #, fuzzy
 msgid "print out the bisect terms"
 msgstr "imprimeix els termes de la bisectriu"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 #, fuzzy
 msgid "start the bisect session"
 msgstr "inicia la sessió bisect"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 #, fuzzy
 msgid "find the next bisection commit"
 msgstr "no es pot esmenar una comissió no existent"
 
-#: builtin/bisect--helper.c:938
-#, fuzzy
-msgid ""
-"verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"Verifica el següent estat de bisecció després agafa la següent comissió de "
-"bisecció"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 #, fuzzy
 msgid "mark the state of ref (or refs)"
 msgstr "marca l'estat de ref (o refs)"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+#, fuzzy
+msgid "list the bisection steps so far"
+msgstr "restableix l'estat de la bisecció"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr ""
+
+#: builtin/bisect--helper.c:1070
+#, fuzzy
+msgid "skip some commits for checkout"
+msgstr "la branca o entrega a agafar"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "no hi ha registre per a BISECT_WRITE"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 #, 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:961
-#, fuzzy
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write requereix 4 o 5 arguments"
-
-#: builtin/bisect--helper.c:967
-#, fuzzy
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms requereix 3 arguments"
-
-#: builtin/bisect--helper.c:973
+#: 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:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms requereix 0 o 1 argument"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next no requereix cap argument"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next no requereix cap argument"
+#: builtin/bisect--helper.c:1118
+#, fuzzy
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-next no requereix cap argument"
+
+#: builtin/bisect--helper.c:1123
+#, fuzzy
+msgid "no logfile given"
+msgstr "Cap fitxer de registre donat"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10829,149 +11329,171 @@
 msgid "must end with a color"
 msgstr "ha d'acabar amb un color"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "color «%s» no vàlid en «color.blame.repeatedLines»"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "valor no vàlid per a «blame.coloring»"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "no s'ha pogut trobar la revisió %s per ignorar"
 
-#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
+#: builtin/blame.c:867
+#, fuzzy
+msgid "show blame entries as we find them, incrementally"
 msgstr "Mostra les entrades «blame» mentre les trobem, incrementalment"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:868
 #, fuzzy
-msgid "Do not show object names of boundary commits (Default: off)"
+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:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+#: builtin/blame.c:869
+#, 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:872
-msgid "Show work cost statistics"
+#: builtin/blame.c:870
+#, fuzzy
+msgid "show work cost statistics"
 msgstr "Mostra les estadístiques de preu de treball"
 
-#: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Força l'informe de progrés"
+#: 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
+msgid "force progress reporting"
+msgstr "força l'informe de progrés"
 
-#: builtin/blame.c:874
-msgid "Show output score for blame entries"
+#: builtin/blame.c:872
+#, fuzzy
+msgid "show output score for blame entries"
 msgstr "Mostra la puntuació de sortida de les entrades «blame»"
 
-#: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
+#: builtin/blame.c:873
+#, fuzzy
+msgid "show original filename (Default: auto)"
 msgstr "Mostra el nom de fitxer original (Per defecte: automàtic)"
 
-#: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+#: builtin/blame.c:874
+#, fuzzy
+msgid "show original linenumber (Default: off)"
 msgstr "Mostra el número de línia original (Per defecte: desactivat)"
 
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
+#: builtin/blame.c:875
+#, fuzzy
+msgid "show in a format designed for machine consumption"
 msgstr "Presenta en un format dissenyat per consumpció per màquina"
 
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
+#: builtin/blame.c:876
+#, 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:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+#, 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:880
-msgid "Show raw timestamp (Default: off)"
+#: builtin/blame.c:878
+#, fuzzy
+msgid "show raw timestamp (Default: off)"
 msgstr "Mostra la marca de temps crua (Per defecte: desactivat)"
 
-#: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
+#: builtin/blame.c:879
+#, fuzzy
+msgid "show long commit SHA1 (Default: off)"
 msgstr "Mostra l'SHA1 de comissió llarg (Per defecte: desactivat)"
 
-#: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
+#: builtin/blame.c:880
+#, 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:883
-msgid "Show author email instead of name (Default: off)"
+#: builtin/blame.c:881
+#, 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:884
-msgid "Ignore whitespace differences"
+#: builtin/blame.c:882
+#, fuzzy
+msgid "ignore whitespace differences"
 msgstr "Ignora les diferències d'espai en blanc"
 
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:883
 #, fuzzy
-msgid "Ignore <rev> when blaming"
+msgid "ignore <rev> when blaming"
 msgstr "Ignora <rev> en culpar"
 
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
+#: builtin/blame.c:884
+#, fuzzy
+msgid "ignore revisions from <file>"
 msgstr "Ignora les revisions de <file>"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:885
 #, 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:888
+#: builtin/blame.c:886
 #, fuzzy
 msgid "color lines by age"
 msgstr "coloreja les línies per edat"
 
-#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
+#: builtin/blame.c:887
+#, fuzzy
+msgid "spend extra cycles to find better match"
 msgstr "Gasta cicles extres per a trobar una coincidència millor"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
+#: builtin/blame.c:888
+#, fuzzy
+msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "Usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
 
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
+#: builtin/blame.c:889
+#, fuzzy
+msgid "use <file>'s contents as the final image"
 msgstr "Usa els continguts de <fitxer> com a la imatge final"
 
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "puntuació"
 
-#: builtin/blame.c:892
-msgid "Find line copies within and across files"
+#: builtin/blame.c:890
+#, fuzzy
+msgid "find line copies within and across files"
 msgstr "Troba còpies de línia dins i a través dels fitxers"
 
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
+#: builtin/blame.c:891
+#, fuzzy
+msgid "find line movements within and across files"
 msgstr "Troba moviments de línia dins i a través dels fitxers"
 
-#: builtin/blame.c:894
+#: builtin/blame.c:892
 msgid "range"
 msgstr "rang"
 
-#: builtin/blame.c:895
+#: builtin/blame.c:893
 #, fuzzy
-msgid "Process only line range <start>,<end> or function :<funcname>"
+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:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "no es pot usar --progress amb els formats --incremental o de porcellana"
@@ -10983,18 +11505,19 @@
 #. among various forms of relative timestamps, but
 #. your language may need more or fewer display
 #. columns.
-#: builtin/blame.c:998
+#.
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "fa 4 anys i 11 mesos"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, 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:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "S'està fent un «blame»"
 
@@ -11064,121 +11587,111 @@
 msgid "Update of config-file failed"
 msgstr "L'actualització del fitxer de configuració ha fallat"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "no es pot usar -a amb -d"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "No s'ha pogut trobar l'objecte de comissió de HEAD"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "No es pot suprimir la branca «%s» agafada a «%s»"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "no s'ha trobat la branca amb seguiment remot «%s»."
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "no s'ha trobat la branca «%s»."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Error en suprimir la branca amb seguiment remot «%s»"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Error en suprimir la branca «%s»"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "S'ha suprimit la branca amb seguiment remot %s (era %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "S'ha suprimit la branca %s (era %s).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "no s'ha pogut analitzar la cadena de format"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "no s'ha pogut resoldre HEAD"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) apunta fora de refs/heads/"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "S'està fent «rebase» en la branca %s a %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "La branca %s s'està bisecant a %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 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:504
+#: builtin/branch.c:515
 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:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nom de branca no vàlid: «%s»"
 
-#: builtin/branch.c:542
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "El canvi de nom de branca ha fallat"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "La còpia de la branca ha fallat"
 
-#: builtin/branch.c:548
+#: builtin/branch.c:561
 #, 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:551
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "S'ha canviat el nom de la branca mal anomenada «%s»"
 
-#: builtin/branch.c:557
+#: builtin/branch.c:570
 #, 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:566
+#: builtin/branch.c:579
 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:568
+#: builtin/branch.c:581
 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:584
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11189,222 +11702,221 @@
 "  %s\n"
 "S'eliminaran les línies que comencin amb «%c».\n"
 
-#: builtin/branch.c:618
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Opcions genèriques"
 
-#: builtin/branch.c:620
+#: 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:621
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "omet els missatges informatius"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "configura el mode de seguiment (vegeu git-pull(1))"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "no usar"
 
-#: builtin/branch.c:626 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "font"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "canvia la informació de font"
 
-#: builtin/branch.c:627
+#: builtin/branch.c:640
 #, fuzzy
 msgid "unset the upstream info"
 msgstr "treu la informació de la font"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "usa sortida colorada"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "actua en branques amb seguiment remot"
 
-#: builtin/branch.c:631 builtin/branch.c:633
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "imprimeix només les branques que continguin la comissió"
 
-#: builtin/branch.c:632 builtin/branch.c:634
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "imprimeix només les branques que no continguin la comissió"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Accions de git-branch específiques:"
 
-#: builtin/branch.c:638
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "llista les branques amb seguiment remot i les locals"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "suprimeix la branca si està completament fusionada"
 
-#: builtin/branch.c:641
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "suprimeix la branca (encara que no estigui fusionada)"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:655
 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:643
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "mou/canvia de nom una branca, encara que el destí existeixi"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "copia una branca i el seu registre de referència"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "copia una branca, encara que el destí existeixi"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "llista els noms de branca"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "mostra el nom de la branca actual"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "crea el registre de referència de la branca"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "edita la descripció de la branca"
 
-#: builtin/branch.c:651
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "força creació, moviment/canvi de nom, supressió"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "imprimeix només les branques que s'han fusionat"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "imprimeix només les branques que no s'han fusionat"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "llista les branques en columnes"
 
-#: builtin/branch.c:656 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "objecte"
 
-#: builtin/branch.c:657
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "imprimeix només les branques de l'objecte"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "l'ordenació i el filtratge distingeixen entre majúscules i minúscules"
 
-#: builtin/branch.c:659 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format a usar en la sortida"
 
-#: builtin/branch.c:682 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD no trobat sota refs/heads!"
 
-#: builtin/branch.c:706
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column i --verbose són incompatibles"
 
-#: builtin/branch.c:721 builtin/branch.c:775 builtin/branch.c:784
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "cal el nom de branca"
 
-#: builtin/branch.c:751
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "No es pot donar descripció a un HEAD separat"
 
-#: builtin/branch.c:756
+#: builtin/branch.c:771
 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:763
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Encara no hi ha cap comissió en la branca «%s»."
 
-#: builtin/branch.c:766
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "No hi ha cap branca amb nom «%s»."
 
-#: builtin/branch.c:781
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "hi ha massa branques per a una operació de còpia"
 
-#: builtin/branch.c:790
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "hi ha massa arguments per a una operació de canvi de nom"
 
-#: builtin/branch.c:795
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "hi ha massa arguments per a establir una nova font"
 
-#: builtin/branch.c:799
+#: builtin/branch.c:814
 #, 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:802 builtin/branch.c:825
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "no existeix la branca «%s»"
 
-#: builtin/branch.c:806
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "la branca «%s» no existeix"
 
-#: builtin/branch.c:819
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "hi ha massa arguments per a desassignar la font"
 
-#: builtin/branch.c:823
+#: builtin/branch.c:838
 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:829
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "La branca «%s» no té informació de font"
 
-#: builtin/branch.c:839
+#: builtin/branch.c:854
 #, 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:843
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11462,43 +11974,43 @@
 "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:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "especifiqueu una destinació per al fitxer d'informe d'error"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 #, 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:159
+#: builtin/bugreport.c:160
 #, 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:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "Informació del sistema"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 #, fuzzy
 msgid "Enabled Hooks"
 msgstr "no s'ha pogut bifurcar"
 
-#: builtin/bugreport.c:176
+#: 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:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "no s'ha pogut escriure a %s"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, fuzzy, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "S'ha netejat el directori «%s»\n"
@@ -11523,19 +12035,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle <file> [<refname>]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "no mostris l'indicador de progrés"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "mostra l'indicador de progrés"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 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:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similar a --all-progress quan l'indicador de progrés es mostra"
 
@@ -11573,11 +12085,11 @@
 
 #: builtin/cat-file.c:598
 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
@@ -11585,8 +12097,8 @@
 "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 | --batch-check) [--follow-symlinks] [--textconv | --"
+"filters]"
 
 #: builtin/cat-file.c:620
 #, fuzzy
@@ -11615,8 +12127,7 @@
 
 #: builtin/cat-file.c:645
 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
 msgid "for blob objects, run filters on object's content"
@@ -11651,8 +12162,7 @@
 #: builtin/cat-file.c:662
 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
 msgid "show all objects with --batch or --batch-check"
@@ -11687,8 +12197,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:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "omet els informes de progrés"
 
@@ -11700,27 +12210,27 @@
 msgid "ignore index when checking"
 msgstr "ignora l'índex en comprovar"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "no es poden especificar noms de camí amb --stdin"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z només té sentit amb --stdin"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "cap camí especificat"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet només és vàlid amb un sol nom de camí"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "no es poden especificar --quiet i --verbose alhora"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching és vàlid només amb --verbose"
 
@@ -11741,167 +12251,172 @@
 msgid "no contacts specified"
 msgstr "no hi ha contactes especificats"
 
-#: builtin/checkout-index.c:139
+#: builtin/checkout--worker.c:110
+#, fuzzy
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout [<opcions>] <branca>"
+
+#: 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
+msgid "string"
+msgstr "cadena"
+
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+msgid "when creating files, prepend <string>"
+msgstr "en crear fitxers, anteposa <cadena>"
+
+#: builtin/checkout-index.c:152
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<opcions>] [--] [<fitxer>...]"
 
-#: builtin/checkout-index.c:156
+#: builtin/checkout-index.c:169
 msgid "stage should be between 1 and 3 or all"
 msgstr "«stage» ha de ser entre 1 i 3 o all"
 
-#: builtin/checkout-index.c:173
+#: builtin/checkout-index.c:187
 msgid "check out all files in the index"
 msgstr "agafa tots els fitxers en l'índex"
 
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:188
 msgid "force overwrite of existing files"
 msgstr "força la sobreescriptura de fitxers existents"
 
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:190
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "cap advertència per a fitxers existents i fitxers que no siguin a l'índex"
 
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:192
 msgid "don't checkout new files"
 msgstr "no agafis fitxers nous"
 
-#: builtin/checkout-index.c:180
+#: builtin/checkout-index.c:194
 msgid "update stat information in the index file"
 msgstr "actualitza la informació d'estadístiques en el fitxer d'índex"
 
-#: builtin/checkout-index.c:184
+#: builtin/checkout-index.c:198
 msgid "read list of paths from the standard input"
 msgstr "llegeix la llista de camins des de l'entrada estàndard"
 
-#: builtin/checkout-index.c:186
+#: builtin/checkout-index.c:200
 msgid "write the content to temporary files"
 msgstr "escriu el contingut a fitxers temporals"
 
-#: builtin/checkout-index.c:187 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:757
-msgid "string"
-msgstr "cadena"
-
-#: builtin/checkout-index.c:188
-msgid "when creating files, prepend <string>"
-msgstr "en crear fitxers, anteposa <cadena>"
-
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "copia els fitxers des de «stage» amb nom"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<opcions>] <branca>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<opcions>] [<branca>] -- <fitxer>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<options>] [<branch>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opcions>] [--source=<branca>] <fitxer>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "el camí «%s» no té la nostra versió"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "el camí «%s» no té la seva versió"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "el camí «%s» no té totes les versions necessàries"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "el camí «%s» no té les versions necessàries"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "camí «%s»: no es pot fusionar"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "No s'ha pogut afegir el resultat de fusió per a «%s»"
 
-#: builtin/checkout.c:396
-#, c-format, fuzzy
+#: builtin/checkout.c:414
+#, fuzzy, 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%"
 
-#: builtin/checkout.c:401
-#, c-format, fuzzy
+#: builtin/checkout.c:419
+#, fuzzy, 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%"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, 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:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "«%s» no es pot usar amb actualització de camins"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "«%s» no es pot usar amb %s"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, 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:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "no s'ha especificat ni «%s» ni «%s»"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, fuzzy, 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:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "«%s» o «%s» no poden utilitzar-se amb %s"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "el camí «%s» està sense fusionar"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "heu de primer resoldre el vostre índex actual"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, fuzzy, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11910,50 +12425,50 @@
 "no es poden continuar amb els canvis «staged» als fitxers següents "
 "percentatges"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, 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:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD ara és a"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "no s'ha pogut actualitzar HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Restableix la branca «%s»\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Ja esteu en «%s»\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "S'ha canviat i restablert a la branca «%s»\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "S'ha canviat a la branca nova «%s»\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "S'ha canviat a la branca «%s»\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... i %d més.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11976,7 +12491,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12003,19 +12518,19 @@
 " git branch <nom-de-branca-nova> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "error intern en el passeig per revisions"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "La posició de HEAD anterior era"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Sou en una branca que encara ha de néixer"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, fuzzy, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12024,7 +12539,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:1171
+#: builtin/checkout.c:1191
 #, fuzzy
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
@@ -12037,56 +12552,56 @@
 "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:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "«%s» coincideixen múltiples (%d) branques de seguiment remotes"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "només s'esperava una referència"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "s'esperava només una referència, s'han donat %d."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referència no vàlida: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la referència no és un arbre: %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "s'espera una branca, s'ha obtingut l'etiqueta «%s»"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, 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:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "s'espera una branca, s'ha obtingut «%s»"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "s'espera una branca, s'ha obtingut la comissió «%s»"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 #, fuzzy
 msgid ""
 "cannot switch branch while merging\n"
@@ -12095,25 +12610,25 @@
 "no es pot canviar de branca mentre es fusiona «git merge --quit» o «git "
 "worktree add»."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 #, 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:1400
+#: builtin/checkout.c:1420
 #, 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:1404
+#: builtin/checkout.c:1424
 #, fuzzy
 msgid ""
 "cannot switch branch while cherry-picking\n"
@@ -12122,7 +12637,7 @@
 "no es pot canviar de branca mentre «cherry pick» considera «git cherry-pick "
 "--quit» o «git worktree add»."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12130,147 +12645,140 @@
 "no es pot canviar de branca mentre s'està revertint\n"
 "Considereu «git revert --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 #, fuzzy
 msgid "you are switching branch while bisecting"
 msgstr "s'està canviant la branca mentre es bisect"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "els camins no es poden usar amb canvi de branca"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "«%s» no es pot usar amb canvi de branca"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "«%s» no es pot usar amb «%s»"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "«%s» no pot prendre <start-point>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, 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:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "manca branca o argument de comissió"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "força l'informe de progrés"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "realitza una fusió de 3 vies amb la branca nova"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "estil"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "estil de conflicte (fusió o diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "separa HEAD a la comissió anomenada"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "estableix la informació de font de la branca nova"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "agafa a la força (descarta qualsevol modificació local)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "branca-nova"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "branca òrfena nova"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "actualitza els fitxers ignorats (per defecte)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 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:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "agafa la versió nostra dels fitxers sense fusionar"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "agafa la versió seva dels fitxers sense fusionar"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "no limitis les especificacions de camí només a entrades disperses"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c i --orphan són mútuament excloents"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p i --overlay són mútuament excloents"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track necessita un nom de branca"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "falta el nom de la branca; proveu -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "no es pot resoldre %s"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "especificació de camí no vàlida"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, 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:1709
+#: builtin/checkout.c:1729
 #, 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:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file és incompatible amb --detach"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file és incompatible amb --patch"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12278,73 +12786,73 @@
 "git checkout: --ours/--theirs, --force i --merge són incompatibles en\n"
 "agafar de l'índex."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "heu d'especificar el camí o camins a restaurar"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719
-#: builtin/worktree.c:554 builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "branca"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "crea i agafa una branca nova"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "crea/restableix i agafa una branca"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "crea un registre de referència per a la branca nova"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 #, fuzzy
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "segon conjectura «git checkout <no-such-branch>» (per defecte)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "utilitza el mode de superposició (per defecte)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "crea i canvia a una branca nova"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "crea/restableix i canvia a una branca"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 #, fuzzy
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "segon conjectura «git switch <no-such-branch>»"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "descarta les modificacions locals"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 #, fuzzy
 msgid "which tree-ish to checkout from"
 msgstr "de quin arbre agafar"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "restaura l'índex"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "restaura l'arbre de treball (per defecte)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "ignora les entrades sense fusionar"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "utilitza el mode de superposició"
 
@@ -12374,11 +12882,6 @@
 msgid "Would skip repository %s\n"
 msgstr "Ometria el dipòsit %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "s'ha produït un error en eliminar %s"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12489,8 +12992,8 @@
 msgstr "elimina directoris sencers"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "patró"
@@ -12509,8 +13012,8 @@
 
 #: builtin/clean.c:929
 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"
@@ -12531,166 +13034,171 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opcions>] [--] <dipòsit> [<directori>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+#, fuzzy
+msgid "don't clone shallow repository"
+msgstr "per a clonar des d'un dipòsit local"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "no facis cap agafament"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:553
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "crea un dipòsit nu"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "crea un dipòsit mirall (implica bare)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "per a clonar des d'un dipòsit local"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "no usis enllaços durs locals, sempre copia"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "configura com a dipòsit compartit"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "especificació de camí"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "inicialitza els submòduls en el clon"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "nombre de submòduls clonats en paral·lel"
 
-#: builtin/clone.c:112 builtin/init-db.c:550
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "directori-de-plantilla"
 
-#: builtin/clone.c:113 builtin/init-db.c:551
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "directori des del qual s'usaran les plantilles"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "dipòsit de referència"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "usa --reference només en clonar"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:561
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "nom"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "usa <nom> en lloc d'«origin» per a seguir la font"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "agafa <branca> en lloc de la HEAD del remot"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "camí a git-upload-pack en el remot"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "profunditat"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "crea un clon superficial de tal profunditat"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "hora"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "crea un clon superficial des d'una hora específica"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "revisió"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "aprofundeix la història d'un clon superficial, excloent una revisió"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clona només una branca, HEAD o --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "no cloneu cap etiqueta, i feu que els «fetch» següents no els segueixen"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "qualsevol submòdul clonat serà superficial"
 
-#: builtin/clone.c:138 builtin/init-db.c:559
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "directori de git"
 
-#: builtin/clone.c:139 builtin/init-db.c:560
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "separa el directori de git de l'arbre de treball"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "clau=valor"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "estableix la configuració dins del dipòsit nou"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "específic al servidor"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "opció a transmetre"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "usa només adreces IPv4"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "usa només adreces IPv6"
 
-#: builtin/clone.c:150
+#: 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:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "inicialitza el fitxer «sparse-checkout» per a incloure només els fitxers a "
 "l'arrel"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12698,42 +13206,42 @@
 "No s'ha pogut endevinar cap nom de directori.\n"
 "Especifiqueu un directori en la línia d'ordres"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, 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:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existeix i no és directori"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, 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:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "s'ha produït un error en crear l'enllaç «%s»"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, 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:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "no s'ha pogut iterar sobre «%s»"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "fet.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 #, fuzzy
 msgid ""
 "Clone succeeded, but checkout failed.\n"
@@ -12741,153 +13249,153 @@
 "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:590
+#: builtin/clone.c:594
 #, 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:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "no s'ha pogut actualitzar %s"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "no s'ha pogut inicialitzar «sparse-checkout»"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 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:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "no s'ha pogut agafar l'arbre de treball"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "no s'han pogut escriure els paràmetres al fitxer de configuració"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "no es pot reempaquetar per a netejar"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "no es pot desenllaçar el fitxer d'alternatives temporal"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Hi ha massa arguments."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Heu d'especificar un dipòsit per a clonar."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "les opcions --bare i --origin %s són incompatibles."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare i --separate-git-dir són incompatibles."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "el dipòsit «%s» no existeix"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profunditat %s no és un nombre positiu"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, 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:1045
+#: builtin/clone.c:1055
 #, 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:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "l'arbre de treball «%s» ja existeix."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, 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:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "S'està clonant al dipòsit nu «%s»...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "S'està clonant a «%s»...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 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:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "«%s» no és un nom de remot vàlid"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 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:1212
+#: builtin/clone.c:1231
 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:1214
+#: builtin/clone.c:1233
 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:1216
+#: builtin/clone.c:1235
 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:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "el dipòsit font és superficial, s'està ignorant --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local s'ignora"
 
-#: builtin/clone.c:1308 builtin/clone.c:1316
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, 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:1319
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Sembla que heu clonat un dipòsit buit."
 
@@ -12904,19 +13412,23 @@
 msgstr "disposició a usar"
 
 #: builtin/column.c:30
-msgid "Maximum width"
+#, fuzzy
+msgid "maximum width"
 msgstr "Amplada màxima"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
+#, fuzzy
+msgid "padding space on left border"
 msgstr "Espai d'encoixinada en el marge esquerre"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
+#, fuzzy
+msgid "padding space on right border"
 msgstr "Espai d'encoixinada en el marge dret"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
+#, fuzzy
+msgid "padding space between columns"
 msgstr "Espai d'encoixinada entre columnes"
 
 #: builtin/column.c:51
@@ -12925,23 +13437,19 @@
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:22
 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
 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
@@ -12949,13 +13457,14 @@
 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:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "directori"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+#, fuzzy
+msgid "the object directory to store the graph"
 msgstr "El directori d'objectes per a emmagatzemar el gràfic"
 
 #: builtin/commit-graph.c:83
@@ -13051,7 +13560,7 @@
 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:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "no és un nom d'objecte vàlid %s"
@@ -13079,13 +13588,13 @@
 msgid "id of a parent commit object"
 msgstr "id d'un objecte de comissió pare"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "missatge"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "missatge de comissió"
 
@@ -13093,7 +13602,7 @@
 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:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "signa la comissió amb GPG"
@@ -13132,7 +13641,8 @@
 "    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"
@@ -13160,76 +13670,76 @@
 "\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"
+"comissions restants. Si voleu ometre aquesta publicació utilitzeu git cherry-"
+"pick --skip"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file amb -a no té sentit"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "--include/--only no té sentit sense camí."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "no s'ha pogut crear un índex temporal"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "l'afegiment interactiu ha fallat"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "no s'ha pogut actualitzar l'índex temporal"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 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:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "no s'ha pogut escriure el fitxer new_index"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "no es pot fer una comissió parcial durant una fusió."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 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:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "no es pot fer una comissió parcial durant un «rebase»."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "no es pot llegir l'índex"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "no s'ha pogut escriure un fitxer d'índex temporal"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "a la comissió «%s» li manca la capçalera d'autor"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "la comissió «%s» té una línia d'autor mal formada"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "paràmetre --author mal format"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13237,38 +13747,43 @@
 "no es pot seleccionar un caràcter de comentari que\n"
 "no sigui usat en el missatge de comissió actual"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "no s'ha pogut cercar la comissió %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, 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:731
+#: builtin/commit.c:760
 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:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "no s'ha pogut llegir el fitxer de registre «%s»"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, fuzzy, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "no es pot combinar «--keep-base» amb «--root»"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "no s'ha pogut llegir SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "no s'ha pogut llegir MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "no s'ha pogut escriure la plantilla de comissió"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13282,7 +13797,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "i intenteu-ho de nou.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13296,17 +13811,17 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "i intenteu-ho de nou.\n"
 
-#: builtin/commit.c:868
+#: 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», i un missatge de\n"
+"S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
 "comissió buit avorta la comissió.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13314,150 +13829,182 @@
 "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"
+"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:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:    %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sData:      %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sComitent: %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "No es pot llegir l'índex"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+#, fuzzy
+msgid "unable to pass trailers to --trailers"
+msgstr "no s'ha pogut analitzar la capçalera de %s"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Error en construir arbres"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, 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:1055
+#: builtin/commit.c:1116
 #, 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:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
-msgstr "Mode ignorat no vàlid «%s»"
+msgstr "Mode d'ignorància no vàlid «%s»"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode de fitxers no seguits no vàlid «%s»"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long i -z són incompatibles"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+#, 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
+#, 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
+#, 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
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+
+#: builtin/commit.c:1245
 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:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "No teniu res a esmenar."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 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:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Esteu enmig d'un «rebase» -- no es pot esmenar."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Les opcions --squash i --fixup no es poden usar juntes"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 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:1202
+#: builtin/commit.c:1276
 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:1211
+#: builtin/commit.c:1285
 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:1229
+#: builtin/commit.c:1303
 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:1235
+#: builtin/commit.c:1331
+#, fuzzy, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "opció desconeguda: %s\n"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "els camins «%s ...» amb -a no tenen sentit"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "mostra l'estat concisament"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "mostra la informació de branca"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "mostra la informació de «stash»"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 #, fuzzy
 msgid "compute full ahead/behind values"
 msgstr "calcula els valors complets endavant/darrere"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "versió"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "sortida llegible per màquina"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "mostra l'estat en format llarg (per defecte)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "acaba les entrades amb NUL"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
-#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
-#: builtin/fast-export.c:1205 builtin/rebase.c:1406 parse-options.h:336
+#: 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
 msgid "mode"
 msgstr "mode"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 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:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13465,11 +14012,11 @@
 "mostra els fitxers ignorats, modes opcionals: traditional, matching, no. "
 "(Per defecte: traditional, matching, no.)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "quan"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13477,176 +14024,198 @@
 "ignora els canvis als submòduls, opcional quan: all, dirty, untracked. (Per "
 "defecte: all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "mostra els fitxers no seguits en columnes"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "no detectis canvis de noms"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 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:1415
-#, fuzzy
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
-msgstr "Combinació d'arguments ignorats i no seguits"
+msgstr ""
+"No s'admet la combinació d'arguments d'ignorància i de fitxers no seguits"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "omet el resum després d'una comissió reeixida"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "mostra la diferència en la plantilla de missatge de comissió"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Opcions de missatge de comissió"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "llegiu el missatge des d'un fitxer"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "autor"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "autor corregit de la comissió"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "data"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "data corregida de la comissió"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "comissió"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "reusa i edita el missatge de la comissió especificada"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "reusa el missatge de la comissió especificada"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+#, fuzzy
+msgid "[(amend|reword):]commit"
+msgstr "esmena la comissió anterior"
+
+#: builtin/commit.c:1621
+#, fuzzy
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "usa el missatge formatat de «squash» automàtic per a corregir la comissió "
 "especificada"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1622
 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:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
-msgstr "l'autor de la comissió ja sóc jo (s'usa amb -C/-c/--amend)"
+msgstr "l'autor de la comissió soc jo ara (s'usa amb -C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "remolc"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr ""
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 #, fuzzy
 msgid "add a Signed-off-by trailer"
 msgstr "afegeix Signed-off-by:"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "usa el fitxer de plantilla especificat"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "força l'edició de la comissió"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "inclou l'estat en la plantilla de missatge de comissió"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Opcions dels continguts de les comissions"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "comet tots els fitxers canviats"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "afegeix els fitxers especificats a l'índex per a cometre"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "afegeix els fitxers interactivament"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "afegeix els canvis interactivament"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "comet només els fitxers especificats"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "evita els lligams de precomissió i missatge de comissió"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "mostra què es cometria"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "esmena la comissió anterior"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "evita el lligam de post escriptura"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "està bé registrar un canvi buit"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "està bé registrar un canvi amb missatge buit"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Fitxer MERGE_HEAD malmès (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "no s'ha pogut llegir MERGE_MODE"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "no s'ha pogut llegir el missatge de comissió: %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, 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:1662
+#: builtin/commit.c:1777
 #, 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:1696
+#: builtin/commit.c:1788
+#, 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
 #, fuzzy
 msgid ""
 "repository has been updated, but unable to write\n"
@@ -13654,8 +14223,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>]"
@@ -13724,7 +14293,8 @@
 
 #: builtin/config.c:142
 msgid "replace all matching variables: name value [value-pattern]"
-msgstr "reemplaça totes les variables que coincideixen: nom valor [value-pattern]"
+msgstr ""
+"reemplaça totes les variables que coincideixen: nom valor [value-pattern]"
 
 #: builtin/config.c:143
 msgid "add a new variable: name value"
@@ -13752,7 +14322,9 @@
 
 #: builtin/config.c:149
 msgid "use string equality when comparing values to 'value-pattern'"
-msgstr "usa la igualtat de les cadenes quan es comparen els valors amb «value-pattern»"
+msgstr ""
+"usa la igualtat de les cadenes quan es comparen els valors amb «value-"
+"pattern»"
 
 #: builtin/config.c:150
 msgid "open an editor"
@@ -13855,8 +14427,7 @@
 #, 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
@@ -13941,8 +14512,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"
 
@@ -13999,7 +14570,7 @@
 msgid "print sizes in human readable format"
 msgstr "imprimeix les mides en un format llegible pels humans"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -14013,11 +14584,11 @@
 "\n"
 "\tchmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "imprimeix els missatges de depuració a stderr"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 #, fuzzy
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
@@ -14073,8 +14644,8 @@
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr ""
-"No hi ha cap coincidència exacta en la cerca de referències o etiquetes per a "
-"descriure\n"
+"No hi ha cap coincidència exacta en la cerca de referències o etiquetes per "
+"a descriure\n"
 
 #: builtin/describe.c:397
 #, c-format
@@ -14210,70 +14781,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base només funciona amb dues comissions"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "«%s»: no és ni fitxer regular ni enllaç simbòlic"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "opció no vàlida: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: sense una base de fusió"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "No és un dipòsit de git"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "s'ha donat un objecte no vàlid «%s»."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "s'ha donat més de dos blobs: «%s»"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "s'ha donat l'objecte no gestionat «%s»."
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: múltiples bases de fusió, utilitzant %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<opcions>] [<commit> [<commit>]] [--] [<camí>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "ha fallat: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, 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:312
+#: builtin/difftool.c:313
 #, 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:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14281,86 +14852,86 @@
 "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:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "s'han modificat ambdós fitxers: «%s» i «%s»."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "s'ha deixat un fitxer de l'arbre de treball."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "existeix un fitxer temporal a «%s»."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "podeu netejar o recuperar-los."
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "usa «diff.guitool» en lloc de «diff.tool»"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "fes un diff de tot el directori"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "no preguntis abans d'executar l'eina diff"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "utilitza enllaços simbòlics en mode dir-diff"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "eina"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "utilitza l'eina de diff especificada"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 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:712
+#: builtin/difftool.c:716
 msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit"
-" code"
+"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:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "especifiqueu una ordre personalitzada per veure diffs"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "passa-ho a «diff»"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool requereix worktree o --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff és incompatible amb --no-index"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool and --extcmd són mútuament excloents"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "no s'ha proporcionat l'<eina> per a --tool=<eina>"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "no s'ha proporcionat l'<ordre> per a --extcmd=<ordre>"
 
@@ -14384,15 +14955,14 @@
 
 #: 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`"
 
@@ -14404,105 +14974,113 @@
 #, fuzzy
 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 niades a menys que s'especifiqui --"
+"mark-tags."
 
-#: builtin/fast-export.c:1178
+#: builtin/fast-export.c:1177
 #, fuzzy
 msgid "--anonymize-map token cannot be empty"
 msgstr "--anonymize-map token no pot estar buit"
 
-#: builtin/fast-export.c:1198
+#: builtin/fast-export.c:1197
 msgid "show progress after <n> objects"
 msgstr "mostra el progrés després de <n> objectes"
 
-#: builtin/fast-export.c:1200
+#: builtin/fast-export.c:1199
 msgid "select handling of signed tags"
 msgstr "selecciona la gestió de les etiquetes signades"
 
-#: builtin/fast-export.c:1203
+#: builtin/fast-export.c:1202
 msgid "select handling of tags that tag filtered objects"
 msgstr "selecciona la gestió de les etiquetes que etiquetin objectes filtrats"
 
-#: builtin/fast-export.c:1206
+#: builtin/fast-export.c:1205
 #, fuzzy
 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:1209
-msgid "Dump marks to this file"
+#: builtin/fast-export.c:1208
+#, fuzzy
+msgid "dump marks to this file"
 msgstr "Bolca les marques a aquest fitxer"
 
-#: builtin/fast-export.c:1211
-msgid "Import marks from this file"
+#: builtin/fast-export.c:1210
+#, fuzzy
+msgid "import marks from this file"
 msgstr "Importa les marques d'aquest fitxer"
 
-#: builtin/fast-export.c:1215
-msgid "Import marks from this file if it exists"
+#: builtin/fast-export.c:1214
+#, fuzzy
+msgid "import marks from this file if it exists"
 msgstr "Importa marques d'aquest fitxer si existeix"
 
-#: builtin/fast-export.c:1217
-msgid "Fake a tagger when tags lack one"
+#: builtin/fast-export.c:1216
+#, 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:1219
-msgid "Output full tree for each commit"
+#: builtin/fast-export.c:1218
+#, fuzzy
+msgid "output full tree for each commit"
 msgstr "Imprimeix l'arbre complet de cada comissió"
 
-#: builtin/fast-export.c:1221
-msgid "Use the done feature to terminate the stream"
+#: builtin/fast-export.c:1220
+#, 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:1222
-msgid "Skip output of blob data"
+#: builtin/fast-export.c:1221
+#, fuzzy
+msgid "skip output of blob data"
 msgstr "Omet l'emissió de dades de blob"
 
-#: builtin/fast-export.c:1223 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "especificació de referència"
 
-#: builtin/fast-export.c:1224
-msgid "Apply refspec to exported refs"
+#: 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:1225
+#: builtin/fast-export.c:1224
 msgid "anonymize output"
 msgstr "anonimitza la sortida"
 
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1225
 #, fuzzy
 msgid "from:to"
 msgstr "des de"
 
-#: builtin/fast-export.c:1227
+#: builtin/fast-export.c:1226
 msgid "convert <from> to <to> in anonymized output"
 msgstr "converteix <from> a <to> en una sortida anònima"
 
-#: builtin/fast-export.c:1230
+#: builtin/fast-export.c:1229
 #, fuzzy
-msgid "Reference parents which are not in fast-export stream by object id"
+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:1232
+#: builtin/fast-export.c:1231
 #, fuzzy
-msgid "Show original object ids of blobs/commits"
+msgid "show original object ids of blobs/commits"
 msgstr "Mostra els ID dels objectes originals dels blobs/commits"
 
-#: builtin/fast-export.c:1234
+#: builtin/fast-export.c:1233
 #, fuzzy
-msgid "Label tags with mark ids"
+msgid "label tags with mark ids"
 msgstr "Etiquetes amb els identificadors de marca"
 
-#: builtin/fast-export.c:1257
+#: builtin/fast-export.c:1256
 #, fuzzy
 msgid "--anonymize-map without --anonymize does not make sense"
 msgstr "--trailer amb --only-input no té sentit"
 
-#: builtin/fast-export.c:1272
+#: builtin/fast-export.c:1271
 #, fuzzy
 msgid "Cannot pass both --import-marks and --import-marks-if-exists"
 msgstr "No es poden passar tant --import-marks com --import-marks-if-exists"
@@ -14540,7 +15118,7 @@
 msgstr ""
 "característica «%s» prohibida a l'entrada sense --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, fuzzy, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Submòduls canviats però no actualitzats:"
@@ -14561,202 +15139,214 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opcions>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.paral·lelisme no pot ser negatiu"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "obtén de tots els remots"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: 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"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "annexa a .git/FETCH_HEAD en lloc de sobreescriure"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+#, fuzzy
+msgid "use atomic transaction to update references"
+msgstr "demana una transacció atòmica al costat remot"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "camí al qual pujar el paquet al costat remot"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "força la sobreescriptura de la referència local"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "obtén de múltiples remots"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "obtén totes les etiquetes i tots els objectes associats"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "no obtinguis les etiquetes (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "nombre de submòduls obtinguts en paral·lel"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "poda les branques amb seguiment remot que ja no estiguin en el remot"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 #, fuzzy
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "poda les etiquetes locals ja no a les remotes i el «clobber» ha canviat les "
 "etiquetes"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "sota demanda"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "controla l'obtenció recursiva de submòduls"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 #, fuzzy
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "escriu l'arxiu a aquest fitxer"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "retén el paquet baixat"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "permet l'actualització de la referència HEAD"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "aprofundeix la història d'un clon superficial"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: 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"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "converteix en un dipòsit complet"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "anteposa això a la sortida de camí del submòdul"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "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:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "accepta les referències que actualitzin .git/shallow"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "mapa de referències"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "específica l'obtenció del mapa de referències"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: 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:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 #, fuzzy
 msgid "run 'maintenance --auto' after fetching"
 msgstr "executa «gc --auto» després d'obtenir"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: 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:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "escriu el graf de comissions després de recollir"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 #, fuzzy
 msgid "accept refspecs from stdin"
 msgstr "llegeix les referències des de stdin"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "No s'ha pogut trobar la referència HEAD remota"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, 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:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "objecte %s no trobat"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[al dia]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[rebutjat]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "no es pot obtenir en la branca actual"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[actualització d'etiqueta]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "no s'ha pogut actualitzar la referència local"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 #, fuzzy
 msgid "would clobber existing tag"
 msgstr "es tancaria l'etiqueta existent"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[etiqueta nova]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[branca nova]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[referència nova]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "actualització forçada"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "sense avanç ràpid"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 #, fuzzy
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
@@ -14765,37 +15355,38 @@
 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»."
+"utilitzeu l'indicador «--show-forced-updates» o executeu «git config fetch."
+"showForcedUpdates true»."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, fuzzy, 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ó."
+"utilitzar «--no-show-forced-updates» o executar «git config fetch."
+"showForcedUpdates false» per evitar aquesta comprovació."
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s no ha enviat tots els objectes necessaris\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %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:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "De %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14805,57 +15396,57 @@
 " intenteu executar «git remote prune %s» per a eliminar\n"
 " qualsevol branca antiga o conflictiva"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s es tornarà penjant)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s s'ha tornat penjant)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[suprimit]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(cap)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, 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 dipòsit no nu"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, 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:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "S'ignora l'opció «%s» per a %s\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "s'han detectat múltiples branques, incompatible amb --set-upstream"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 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:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "no s'està configurant la font d'una etiqueta remota"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "tipus de branca desconegut"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14863,22 +15454,22 @@
 "no s'ha trobat cap branca d'origen.\n"
 "Heu d'especificar exactament una branca amb l'opció --set-upstream."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "S'està obtenint %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "No s'ha pogut obtenir %s"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, 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:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14886,52 +15477,65 @@
 "Cap dipòsit remot especificat. Especifiqueu un URL o\n"
 "un nom remot del qual es deuen obtenir les revisions noves."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Necessiteu especificar un nom d'etiqueta."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "No s'admet una profunditat negativa en --deepen"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen i --depth són mútuament excloents"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth i --unshallow no es poden usar junts"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow en un dipòsit complet no té sentit"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all no accepta un argument de dipòsit"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all no té sentit amb especificacions de referència"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "No existeix un remot ni un grup remot: %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 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:1887
-msgid ""
-"--filter can only be used with the remote configured in "
-"extensions.partialclone"
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
 msgstr ""
-"--filter només es pot utilitzar amb el remot configurat en "
-"extensions.partialclone"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr ""
+
+#: builtin/fetch.c:2079
+msgid ""
+"--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"
+
+#: builtin/fetch.c:2083
+#, 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
 #, fuzzy
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "L'opció --exec només es pot usar juntament amb --remote"
@@ -14980,48 +15584,48 @@
 msgstr ""
 "git for-each-ref [--contains [<comissió>]] [--no-contains [<comissió>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr ""
 "posa els marcadors de posició de forma adequada per a intèrprets d'ordres"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "posa els marcadors de posició entre cometes adequades per al perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "posa els marcadors de posició entre cometes adequades per al python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "posa els marcadors de posició entre cometes adequades per al Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "mostra només <n> referències coincidents"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "respecta els colors del format"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "imprimeix només les referències que assenyalin l'objecte donat"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "imprimeix només les referències que s'han fusionat"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "imprimeix només les referències que no s'han fusionat"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "imprimeix només les referències que continguin la comissió"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "imprimeix només les referències que no continguin la comissió"
 
@@ -15042,246 +15646,245 @@
 msgid "missing --config=<config>"
 msgstr "falta --config=<config>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "desconegut"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "error en %s %s: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "avís en %s %s: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "enllaç trencat de %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "tipus d'objecte incorrecte en l'enllaç"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, fuzzy, c-format
 msgid ""
 "broken link from %7s %s\n"
 "              to %7s %s"
 msgstr "enllaç trencat del 7% al 7%"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "manca %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "inabastable %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, fuzzy, c-format
 msgid "dangling %s %s"
 msgstr "per cent"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 #, fuzzy
 msgid "could not create lost-found"
 msgstr "no s'ha pogut crear el trobat perdut"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "no s'ha pogut finalitzar «%s»"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "S'està comprovant %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "S'està comprovant la connectivitat (%d objectes)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "S'està comprovant %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "enllaços trencats"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "arrel %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, fuzzy, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "percentatges marcats"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: objecte corrupte o no trobat"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: entrada de referència no vàlida %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "S'està comprovant reflog %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: punter %s sha1 no vàlid"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: no és una comissió"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "avís: no hi ha referències per defecte"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: objecte corrupte o no trobat: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: no s'ha pogut analitzar l'objecte: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "fitxer sha1 malmès: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "S'està comprovant el directori d'objecte"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "S'estan comprovant els directoris d'objecte"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "S'està comprovant l'enllaç %s"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "%s no vàlid"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s apunta a una cosa estranya (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: el HEAD separat no apunta a res"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, 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:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "S'està comprovant l'arbre de la memòria cau"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, 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:739
+#: builtin/fsck.c:719
 #, fuzzy
 msgid "non-tree in cache-tree"
 msgstr "no arbre en l'arbre de la memòria cau"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<opcions>] [<objecte>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "mostra els objectes inabastables"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "mostra els objectes penjants"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "informa de les etiquetes"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "informa dels nodes d'arrel"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "fes els objectes d'índex nodes de cap"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 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:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "també considera els paquets i els objectes alternatius"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "comprova només la connectivitat"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "habilita la comprovació més estricta"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "escriu objectes penjants a .git/lost-found"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "mostra el progrés"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "mostra els noms detallats dels objectes abastables"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "S'estan comprovant els objectes"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: falta l'objecte"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "paràmetre no vàlid: s'esperava sha1, s'ha obtingut «%s»"
@@ -15290,27 +15893,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<opcions>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "S'ha produït un error en fer fstat %s: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "no s'ha pogut analitzar «%s» valor «%s»"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "no es pot fer stat en «%s»"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "no es pot llegir «%s»"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15325,222 +15928,250 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "poda objectes sense referència"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "sigues més exhaustiu (el temps d'execució augmenta)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "habilita el mode de recollida d'escombraries automàtica"
 
-#: builtin/gc.c:549
+#: 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:552
+#: 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:569
+#: builtin/gc.c:576
 #, fuzzy, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "no s'ha pogut analitzar el valor de gc.logexpiry dels percentatges"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, fuzzy, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "no s'ha pogut analitzar el valor de venciment de la poda per cent"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "S'està empaquetant el dipòsit automàticament en el rerefons per a un "
 "rendiment òptim.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr ""
 "S'està empaquetant automàticament el dipòsit per a un rendiment òptim.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Vegeu «git help gc» per a neteja manual.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 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:698
+#: 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:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
-msgstr 
+msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule no està permès"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "argument --schedule no reconegut, «%s»"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 #, fuzzy
 msgid "failed to write commit-graph"
 msgstr "s'ha produït un error en escriure l'objecte de comissió"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
+#: builtin/gc.c:905
+#, fuzzy
+msgid "failed to prefetch remotes"
 msgstr "s'ha produït un error en omplir els remots"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 #, fuzzy
 msgid "failed to start 'git pack-objects' process"
 msgstr "no s'ha pogut iniciar el pack-objects"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 #, fuzzy
 msgid "failed to finish 'git pack-objects' process"
 msgstr "no s'ha pogut finalitzar el pack-objects"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 #, fuzzy
 msgid "failed to write multi-pack-index"
 msgstr "no s'han pogut netejar els percentatges multi-paquet"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 #, fuzzy
 msgid "'git multi-pack-index expire' failed"
 msgstr "l'índex múltiple és massa petit"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 #, 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:1181
+#: builtin/gc.c:1179
 #, 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:1279
+#: builtin/gc.c:1283
 #, fuzzy, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "el fitxer de bloqueig «%s» existeix s'omet el manteniment"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "la tasca «%s» ha fallat"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, fuzzy, c-format
 msgid "'%s' is not a valid task"
 msgstr "«%s» no és un terme vàlid"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, fuzzy, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "«%s» no es pot usar amb %s"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 #, fuzzy
 msgid "run tasks based on the state of the repository"
 msgstr "executa les tasques basades en l'estat del dipòsit"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "freqüència"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "executa les tasques basant-se en freqüència"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 #, 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:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "tasca"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "executa una tasca específica"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 #, 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:1467
+#: builtin/gc.c:1482
 #, fuzzy
 msgid "failed to run 'git config'"
 msgstr "no s'ha pogut executar «git status» a «%s»"
 
-#: builtin/gc.c:1512
-#, fuzzy
-msgid "another process is scheduling background maintenance"
-msgstr "un altre procés és planificar el manteniment en segon pla"
+#: builtin/gc.c:1547
+#, 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:1525
+#: builtin/gc.c:1576
+#, 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
+#, 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
+#, fuzzy, c-format
+msgid "failed to bootstrap service %s"
+msgstr "s'ha produït un error en eliminar %s"
+
+#: builtin/gc.c:1745
+#, fuzzy
+msgid "failed to create temp xml file"
+msgstr "no s'han pogut crear els fitxers de sortida"
+
+#: builtin/gc.c:1835
+#, fuzzy
+msgid "failed to start schtasks"
+msgstr "s'ha produït un error en fer stat a %s"
+
+#: builtin/gc.c:1879
 #, 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:1544
+#: builtin/gc.c:1896
 #, 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:1550
+#: builtin/gc.c:1900
 #, fuzzy
 msgid "failed to open stdin of 'crontab'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "«crontab» ha mort"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+#, fuzzy
+msgid "another process is scheduling background maintenance"
+msgstr "un altre procés és planificar el manteniment en segon pla"
+
+#: builtin/gc.c:2000
 #, fuzzy
 msgid "failed to add repo to global config"
 msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <subcommand> [<options>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, fuzzy, c-format
 msgid "invalid subcommand: %s"
 msgstr "comissió no vàlida %s"
@@ -15549,12 +16180,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opcions>] [-e] <patró> [<revisió>...] [[--] <camí>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: s'ha produït un error en crear fil: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, 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"
@@ -15562,207 +16193,204 @@
 #. TRANSLATORS: %s is the configuration
 #. variable for tweaking threads, currently
 #. grep.threads
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#.
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "no s'admeten fils, s'ignorarà %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "no s'ha pogut llegir l'arbre (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, 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:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "l'opció «%c» espera un valor numèric"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 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:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "cerca en continguts no gestionats per git"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "cerca tant en fitxers seguits com en no seguits"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignora els fitxers especificats mitjançant «.gitignore»"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "cerca recursivament a cada submòdul"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "mostra les línies no coincidents"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "coincidència insensible a majúscula i minúscula"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "coincideix amb els patrons només als límits de paraula"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "processa els fitxers binaris com a text"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "no coincideixis amb els patrons en els fitxers binaris"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "processa els fitxers binaris amb filtres de textconv"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "cerca als subdirectoris (per defecte)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "descendeix com a màxim <profunditat> nivells"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "usa les expressions regulars POSIX ampliades"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usa les expressions regulars POSIX bàsiques (per defecte)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "interpreta els patrons com a cadenes fixes"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "usa les expressions regulars compatibles amb Perl"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "mostra els números de línia"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "mostra el nombre de columna de la primera coincidència"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "no mostris els noms de fitxer"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "mostra els noms de fitxer"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "mostra els noms de fitxer relatius al directori superior"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 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:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "sinònim de --files-with-matches"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "mostra només els noms dels fitxers sense coincidència"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "imprimeix NUL després dels noms de fitxer"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "mostra només les parts de coincidents de la línia"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 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:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "ressalta les coincidències"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "imprimeix una línia buida entre coincidències de fitxers distints"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 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:904
+#: builtin/grep.c:907
 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:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "mostra <n> línies de context abans d'una coincidència"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "mostra <n> línies de context després d'una coincidència"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "usa <n> fils de treball"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "drecera per -C NUM"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 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:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "mostra la funció circumdant"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "llegeix els patrons des d'un fitxer"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "coincideix amb <patró>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "combina els patrons especificats amb -e"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "indica coincidència amb estat de sortida sense sortida textual"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 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:940
-msgid "show parse tree for grep expression"
-msgstr "mostra l'arbre d'anàlisi de l'expressió grep"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "paginador"
@@ -15796,11 +16424,11 @@
 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:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "no s'admeten fils, s'ignorarà --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
@@ -15813,13 +16441,17 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached o --untracked no es pot usar amb --no-index"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+#, fuzzy
+msgid "--untracked cannot be used with --cached"
+msgstr "--cached o --untracked no es pot usar amb --no-index"
+
+#: builtin/grep.c:1167
 #, fuzzy
 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:1172
+#: builtin/grep.c:1175
 #, fuzzy
 msgid "both --cached and trees are given"
 msgstr "es donen ambdós --cached i arbres"
@@ -15829,8 +16461,8 @@
 "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
 msgid "git hash-object  --stdin-paths"
@@ -15953,12 +16585,12 @@
 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:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "«%s» és un àlies de «%s»"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, fuzzy, c-format
 msgid "bad alias.%s string: %s"
 msgstr "àlies incorrecte.%s string%s"
@@ -15973,96 +16605,96 @@
 msgid "'git help config' for more information"
 msgstr "'git help config' per a més informació"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "hi ha una discordança de tipus d'objecte a %s"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "no s'ha rebut l'objecte esperat %s"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, 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:294
+#: builtin/index-pack.c:295
 #, 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"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "EOF prematur"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "error de lectura d'entrada"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "s'han usat més octets que hi havia disponibles"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 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:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "el paquet supera la mida màxima permesa"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "no s'ha pogut crear «%s»"
 
-#: builtin/index-pack.c:348
+#: 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:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "hi ha una discordança de signatura de paquet"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "la versió de paquet %<PRIu32> no és compatible"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, 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:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "la inflació ha retornat %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 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:545
+#: builtin/index-pack.c:546
 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:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "tipus d'objecte desconegut %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "no es pot fer pread en el fitxer empaquetat"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
@@ -16070,341 +16702,341 @@
 msgstr[1] ""
 "el final del fitxer empaquetat és prematur, manquen %<PRIuMAX> octets"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "hi ha una inconsistència seriosa d'inflació"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "S'HA TROBAT UNA COL·LISIÓ SHA1 AMB %s !"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "no s'ha pogut llegir %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "no es pot llegir la informació d'objecte existent %s"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "no es pot llegir l'objecte existent %s"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objecte de blob no vàlid %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "fsck error en un objecte empaquetat"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, 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:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "s'ha produït un error en aplicar la diferència"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "S'estan rebent objectes"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "S'estan indexant objectes"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "el paquet és malmès (discordança SHA1)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "no es pot fer fstat en el fitxer de paquet"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "el paquet té brossa al seu final"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "confusió més enllà de la bogeria en parse_pack_objects()"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "S'estan resolent les diferències"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "no s'ha pogut crear fil: %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "confusió més enllà de la bogeria"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, 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:1300
+#: builtin/index-pack.c:1301
 #, 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:1304
+#: builtin/index-pack.c:1305
 #, 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:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "no s'ha pogut desinflar l'objecte annexat (%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "l'objecte local %s és malmès"
 
-#: builtin/index-pack.c:1444
-#, c-format
-msgid "packfile name '%s' does not end with '.pack'"
+#: builtin/index-pack.c:1446
+#, 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:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "no es pot escriure «%s» al fitxer «%s»"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, 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:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "error en tancar el fitxer empaquetat"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "no es pot emmagatzemar el fitxer empaquetat"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "no es pot emmagatzemar el fitxer d'índex"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "pack.indexversion=%<PRIu32> incorrecte"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "No es pot obrir el fitxer empaquetat existent «%s»"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, 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:1681
+#: builtin/index-pack.c:1701
 #, 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:1688
+#: builtin/index-pack.c:1708
 #, 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:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "No es pot tornar al directori de treball actual"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "%s incorrecte"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:391 builtin/init-db.c:623
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algorisme hash desconegut «%s»"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin no es pot usar sense --stdin"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin requereix un dipòsit git"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format no es pot usar sense --stdin"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "s'ha donat --verify sense nom de fitxer de paquet"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "error fsck als objectes del paquet"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "no es pot fer stat en la plantilla «%s»"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "no es pot fer opendir en el directori «%s»"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "no es pot fer readlink en «%s»"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "no es pot fer symlink en «%s» «%s»"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "no es pot copiar «%s» a «%s»"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "s'està ignorant la plantilla %s"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "plantilles no trobades a %s"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "no s'estan copiant plantilles de «%s»: %s"
 
-#: builtin/init-db.c:274
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "nom de branca inicial no vàlid: «%s»"
 
-#: builtin/init-db.c:366
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "no s'ha pogut gestionar el tipus de fitxer %d"
 
-#: builtin/init-db.c:369
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "no s'ha pogut moure %s a %s"
 
-#: builtin/init-db.c:385
+#: builtin/init-db.c:372
 #, fuzzy
 msgid "attempt to reinitialize repository with different hash"
 msgstr "s'ha intentat reinicialitzar el dipòsit amb un hash diferent"
 
-#: builtin/init-db.c:409 builtin/init-db.c:412
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s ja existeix"
 
-#: builtin/init-db.c:443
+#: builtin/init-db.c:431
 #, fuzzy, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "reinicialització ignorada --initial-branch=%"
 
-#: builtin/init-db.c:474
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "S'ha reinicialitzat el dipòsit compartit existent del Git en %s%s\n"
 
-#: builtin/init-db.c:475
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "S'ha reinicialitzat el dipòsit existent del Git en %s%s\n"
 
-#: builtin/init-db.c:479
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "S'ha inicialitzat un dipòsit compartit buit del Git en %s%s\n"
 
-#: builtin/init-db.c:480
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "S'ha inicialitzat un dipòsit buit del Git en %s%s\n"
 
-#: builtin/init-db.c:529
+#: builtin/init-db.c:517
 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:555
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "permisos"
 
-#: builtin/init-db.c:556
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "especifica que el dipòsit de git es compartirà entre diversos usuaris"
 
-#: builtin/init-db.c:562
+#: builtin/init-db.c:550
 #, fuzzy
 msgid "override the name of the initial branch"
 msgstr "passa per alt el bit executable dels fitxers llistats"
 
-#: builtin/init-db.c:563 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "hash"
 
-#: builtin/init-db.c:564 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 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:571
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir i --bare són mútuament excloents"
 
-#: builtin/init-db.c:600 builtin/init-db.c:605
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "no es pot mkdir %s"
 
-#: builtin/init-db.c:609 builtin/init-db.c:664
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "no es pot canviar de directori a %s"
 
-#: builtin/init-db.c:636
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -16413,12 +17045,12 @@
 "no es permet %s (o --work-tree=<directori>) sense especificar %s (o --git-"
 "dir=<directori>)"
 
-#: builtin/init-db.c:688
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "No es pot accedir a l'arbre de treball «%s»"
 
-#: builtin/init-db.c:693
+#: builtin/init-db.c:683
 #, fuzzy
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir és incompatible amb --bisect"
@@ -16471,10 +17103,6 @@
 msgid "do not treat --- specially"
 msgstr "no tractis --- especialment"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "remolc"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "remolcs a afegir"
@@ -16487,134 +17115,135 @@
 msgid "no input file given for in-place editing"
 msgstr "no s'ha donat cap fitxer d'entrada per a edició in situ"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opcions>] [<rang-de-revisions>] [[--] <camí>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opcions>] <objecte>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "opció --decorate no vàlida: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "mostra la font"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+#, fuzzy
+msgid "use mail map file"
 msgstr "Usa el fitxer de mapa de correu"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "només decora les referències que coincideixin amb <patró>"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "no decoris les referències que coincideixen amb <patró>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "opcions de decoració"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 #, fuzzy
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
 "Traça l'evolució del rang de línia <start>,<end> or funcions :<funcname> in "
 "{8771193"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 #, fuzzy
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "%s: %s no es pot usar amb %s"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Sortida final: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: fitxer incorrecte"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "no s'ha pogut llegir l'objecte %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipus desconegut: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: cobertura no vàlida des del mode descripció"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers sense valor"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "no s'ha pogut obrir el fitxer de pedaç %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "necessita exactament un interval"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "no és un interval"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 #, fuzzy
 msgid "cover letter needs email format"
 msgstr "la lletra de la portada necessita un format de correu electrònic"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 #, fuzzy
 msgid "failed to create cover-letter file"
 msgstr "no s'ha pogut crear el fitxer de portada"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to boig: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opcions>] [<des-de> | <rang-de-revisions>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "dos directoris de sortida?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "comissió desconeguda %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 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:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "no s'ha pogut trobar la base exacta de la fusió"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 #, fuzzy
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
@@ -16623,417 +17252,426 @@
 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:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "no s'ha pogut trobar la base exacta de la fusió"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 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:1578
+#: builtin/log.c:1579
 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:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "no es pot obtenir l'id del pedaç"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 #, fuzzy
 msgid "failed to infer range-diff origin of current series"
 msgstr "no s'ha pogut inferir l'interval-diferències"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, 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:1739
+#: builtin/log.c:1746
 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:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "usa [PATCH] fins i tot amb múltiples pedaços"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "imprimeix els pedaços a la sortida estàndard"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "genera una carta de presentació"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 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:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "sufix"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "usa <sufix> en lloc de «.patch»"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 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:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr ""
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "marca la sèrie com a l'enèsima llançada"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 #, fuzzy
 msgid "max length of output filename"
 msgstr "mida màxima de cada fitxer empaquetat de sortida"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
+#: builtin/log.c:1767
+#, fuzzy
+msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "Usa [RFC PATCH] en lloc de [PATCH]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 #, fuzzy
 msgid "cover-from-description-mode"
 msgstr "preferences-from-description-mode"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 #, fuzzy
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "genera parts d'una lletra de portada basant-se en la descripció d'una branca"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
+#: builtin/log.c:1773
+#, fuzzy
+msgid "use [<prefix>] instead of [PATCH]"
 msgstr "Usa [<prefix>] en lloc de [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "emmagatzema els fitxers resultants a <directori>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "no despullis/afegeixis [PATCH]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "no emetis diferències binàries"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "emet un hash de tots zeros en la capçalera From"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 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:1781
+#: builtin/log.c:1788
 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:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "Missatgeria"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "capçalera"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "afegeix una capçalera de correu electrònic"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "correu electrònic"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "afegeix la capçalera To:"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "afegeix la capçalera Cc:"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "identitat"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 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:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "ID de missatge"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 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:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "límit"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "adjunta el pedaç"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "posa el pedaç en el cos"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "habilita l'enfilada de missatges, estils: shallow, deep"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "signatura"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "afegeix una signatura"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "comissió base"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 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:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "afegeix una signatura des d'un fitxer"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "no imprimeixis els noms de fitxer del pedaç"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "mostra el progrés durant la generació de pedaços"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 #, fuzzy
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "mostra els canvis contra <rev> a la lletra de la portada o a un sol pedaç"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 #, 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:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 #, fuzzy
 msgid "percentage by which creation is weighted"
 msgstr "percentatge pel qual la creació és ponderada"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "línia d'identitat no vàlida: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n i -k són mútuament excloents"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc i -k són mútuament excloents"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only no té sentit"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status no té sentit"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check no té sentit"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 #, fuzzy
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "-b, -B i --detach són mútuament excloents"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requereix --cover-letter o un sol pedaç"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contra v%d:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor requereix --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requereix --cover-letter o un sol pedaç"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 #, fuzzy
 msgid "Range-diff:"
 msgstr "Diferència-interval"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, fuzzy, c-format
 msgid "Range-diff against v%d:"
 msgstr "Diferència de l'interval contra el v%d"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "no s'ha pogut llegir el fitxer de signatura «%s»"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "S'estan generant els pedaços"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 #, fuzzy
 msgid "failed to create output files"
 msgstr "no s'han pogut crear els fitxers de sortida"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<font> [<cap> [<límit>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, 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:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<opcions>] [<fitxer>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "identifica l'estat de fitxer amb etiquetes"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "usa lletres minúscules per als fitxers «assume unchanged»"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "usa lletres minúscules per als fitxers «fsmonitor clean»"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 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:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "mostra en la sortida els fitxers suprimits"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "mostra en la sortida els fitxers modificats"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "mostra en la sortida els altres fitxers"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "mostra en la sortida els fitxers ignorats"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 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:546
+#: builtin/ls-files.c:638
 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:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "mostra només els noms dels directoris «other»"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "mostra els terminadors de línia dels fitxers"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "no mostris els directoris buits"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "mostra en la sortida els fitxers sense fusionar"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "mostra la informació de resolució de desfet"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "omet els fitxers coincidents amb el patró"
 
-#: builtin/ls-files.c:562
+#: 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:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "llegeix els patrons addicionals d'exclusió per directori en <fitxer>"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "afegeix les exclusions estàndards de git"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 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:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "inclou recursivament als submòduls"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 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:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "arbre"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 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:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "mostra les dades de depuració"
 
+#: builtin/ls-files.c:674
+#, fuzzy
+msgid "suppress duplicate entries"
+msgstr "omet anomenar cadenes"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -17045,39 +17683,39 @@
 "                     [--exit-code] [--get-url] [--symref]\n"
 "                     [<dipòsit> [<referències>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "no imprimeixis l'URL remot"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "executable"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "camí a git-upload-pack en la màquina remota"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "limita a etiquetes"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "limita a caps"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "no mostris les etiquetes pelades"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "tingues en compte url.<base>.insteadOf"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "surt amb codi de sortida 2 si no es troba cap referència coincident"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "mostra la referència subjacent a més de l'objecte que assenyali"
 
@@ -17118,6 +17756,59 @@
 msgstr ""
 "llista l'arbre sencer; no només el directori actual (implica --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+#, fuzzy
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git diff --no-index [<opcions>] <camí> <camí>"
+
+#: builtin/mailinfo.c:58
+#, fuzzy
+msgid "keep subject"
+msgstr "retén els objectes inabastables"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr ""
+
+#: builtin/mailinfo.c:62
+#, fuzzy
+msgid "copy Message-ID to the end of commit message"
+msgstr "edita el missatge de comissió"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr ""
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr ""
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr ""
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr ""
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr ""
+
+#: builtin/mailinfo.c:73
+#, fuzzy
+msgid "<action>"
+msgstr "acció"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr ""
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr ""
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -17162,16 +17853,15 @@
 #: 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"
@@ -17236,193 +17926,194 @@
 msgid "Merging %s with %s\n"
 msgstr "S'està fusionant %s amb %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<opcions>] [<comissió>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "l'opció «m» requereix un valor"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "l'opció «%s» requereix un valor"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, 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:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Les estratègies disponibles són:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Les estratègies personalitzades disponibles són:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 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:258 builtin/pull.c:136
+#: builtin/merge.c:259 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:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(sinònim de --stat)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 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:264 builtin/pull.c:148
+#: builtin/merge.c:265 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:266 builtin/pull.c:151
+#: builtin/merge.c:267 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:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "edita el missatge abans de cometre"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "permet l'avanç ràpid (per defecte)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 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:276 builtin/pull.c:164
+#: builtin/merge.c:277 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:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "estratègia"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "estratègia de fusió a usar"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "opció=valor"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "opció per a l'estratègia de fusió seleccionada"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 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:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "avorta la fusió en curs actual"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort però deixa l'índex i l'arbre de treball intactes"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "continua la fusió en curs actual"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "permet fusionar històries no relacionades"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 #, fuzzy
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "evita els ganxos pre-combinació i missatge de comissió"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "no s'ha pogut executar «stash»."
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "l'«stash» ha fallat"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "no és un objecte vàlid: %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree ha fallat"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
+#: builtin/merge.c:400
+#, fuzzy
+msgid "Already up to date. (nothing to squash)"
 msgstr " (res a fer «squash»)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Comissió «squash» -- no s'està actualitzant HEAD\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Cap missatge de fusió -- no s'està actualitzant HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "«%s» no assenyala una comissió"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Cadena branch.%s.mergeoptions incorrecta: %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 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:736
+#: 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:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "no s'ha pogut escriure %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "No s'ha pogut llegir de «%s»"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, 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:822
+#: builtin/merge.c:827
 #, fuzzy
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
@@ -17433,11 +18124,11 @@
 "necessària especialment si fusiona una font actualitzada en una branca de "
 "tema."
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Un missatge buit interromp la comissió.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17446,74 +18137,74 @@
 "Les línies que comencen amb «%c» seran ignorades i un missatge buit "
 "interromp la comissió.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "El missatge de comissió és buit."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Meravellós.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, 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:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "No hi ha cap branca actual."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "No hi ha cap remot per a la branca actual."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 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:1007
+#: builtin/merge.c:1012
 #, 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:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor incorrecte «%s» en l'entorn «%s»"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "no és quelcom que puguem fusionar en %s: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "no és quelcom que puguem fusionar"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort no espera cap argument"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "No hi ha fusió a avortar (manca MERGE_HEAD)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit no espera cap argument"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue no espera cap argument"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "No hi ha cap fusió en curs (manca MERGE_HEAD)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17521,7 +18212,7 @@
 "No heu conclòs la vostra fusió (MERGE_HEAD existeix).\n"
 "Cometeu els vostres canvis abans de fusionar."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17529,104 +18220,138 @@
 "No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix).\n"
 "Cometeu els vostres canvis abans de fusionar."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 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:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "No podeu combinar --squash amb --no-ff."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "No podeu combinar --squash amb --commit."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 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:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "Una comissió «squash» a un HEAD buit encara no es permet"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 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:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - no és una cosa que puguem fusionar"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 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:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "s'està refusant fusionar històries no relacionades"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Ja està al dia."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "S'estan actualitzant %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, 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:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "No.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Ja està al dia. Estupend!"
-
-#: builtin/merge.c:1618
+#: 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:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "S'està rebobinant l'arbre a la pristina...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "S'està intentant l'estratègia de fusió %s...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Cap estratègia de fusió ha gestionat la fusió.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "L'estratègia de fusió %s ha fallat.\n"
 
-#: builtin/merge.c:1713
+#: 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:1727
+#: builtin/merge.c:1732
 #, 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
+msgid "git mktag"
+msgstr ""
+
+#: builtin/mktag.c:27
+#, fuzzy, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "avís: «:include:» no s'admet: %s\n"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr ""
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr ""
+
+#: builtin/mktag.c:56
+#, fuzzy, c-format
+msgid "could not read tagged object '%s'"
+msgstr "no s'ha pogut llegir l'objecte %s"
+
+#: builtin/mktag.c:59
+#, fuzzy, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "l'objecte %s és %s, no pas %s"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+
+#: builtin/mktag.c:100
+#, 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
+msgid "unable to write tag file"
+msgstr "no s'ha pogut escriure el fitxer d'etiqueta"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17643,21 +18368,45 @@
 msgid "allow creation of more than one tree"
 msgstr "permet la creació de més d'un arbre"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
+#: builtin/multi-pack-index.c:10
+#, fuzzy
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
 msgstr ""
 "git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
 "size=<size>)"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+#, fuzzy
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git upload-pack [<opcions>] <directori>"
+
+#: builtin/multi-pack-index.c:16
+#, fuzzy
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git upload-pack [<opcions>] <directori>"
+
+#: builtin/multi-pack-index.c:19
+#, fuzzy
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr ""
+"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
+"size=<size>)"
+
+#: builtin/multi-pack-index.c:54
 #, 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:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr ""
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr ""
+
+#: builtin/multi-pack-index.c:128
 #, fuzzy
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
@@ -17666,15 +18415,7 @@
 "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:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "hi ha massa arguments"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "--batch-size l'opció només és per a la subordre «repack»"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, fuzzy, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "subcomandes no reconeguts"
@@ -17772,7 +18513,7 @@
 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:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "el canvi del nom de «%s» ha fallat"
@@ -17828,8 +18569,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>]"
@@ -17841,8 +18582,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>]"
@@ -17967,7 +18708,7 @@
 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:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "no s'ha pogut obrir o llegir «%s»"
@@ -18001,6 +18742,7 @@
 
 #. TRANSLATORS: the first %s will be replaced by a git
 #. notes command: 'add', 'merge', 'remove', etc.
+#.
 #: builtin/notes.c:356
 #, c-format
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
@@ -18009,8 +18751,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "massa paràmetres"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "hi ha massa arguments"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -18070,14 +18813,15 @@
 "carrega la configuració de reescriptura per a <ordre> (implica --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "hi ha massa pocs paràmetres"
+#, fuzzy
+msgid "too few arguments"
+msgstr "hi ha massa arguments"
 
 #: builtin/notes.c:538
 #, 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"
@@ -18144,11 +18888,11 @@
 
 #: builtin/notes.c:788
 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
 msgid "Committing unmerged notes"
@@ -18194,15 +18938,15 @@
 #: builtin/notes.c:878
 #, 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:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, 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."
@@ -18220,7 +18964,7 @@
 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:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "no eliminis, només mostra"
 
@@ -18236,7 +18980,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "usa les notes de <referència-de-notes>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subordre desconeguda: %s"
@@ -18255,119 +18999,130 @@
 "git pack-objects [<opcions>...] <nom-base> [< <llista-de-referències> | < "
 "<llista-de-objectes>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:448
 #, fuzzy, c-format
 msgid "bad packed object CRC for %s"
 msgstr "objecte CRC mal empaquetat per a percentatges"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, fuzzy, c-format
 msgid "corrupt packed object for %s"
 msgstr "objecte empaquetat corrupte durant els percentatges"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, fuzzy, c-format
 msgid "recursive delta detected for object %s"
 msgstr "delta recursiu detectat per a objectes percentuals"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, fuzzy, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "s'esperava un objecte d'un 1% <PRIu32>"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, 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
 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:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "S'estan escrivint els objectes"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 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:1131
+#: 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>"
+msgstr "va escriure%<PRIu32> objectes mentre s'esperava un percentatge<PRIu32>"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 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:1796
+#: builtin/pack-objects.c:1831
 #, 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:1805
+#: builtin/pack-objects.c:1840
 #, 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:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "S'estan comptant els objectes"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, 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:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, fuzzy, c-format
 msgid "object %s cannot be read"
 msgstr "no es poden llegir els objectes percentuals"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, 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:2341
+#: builtin/pack-objects.c:2376
 #, fuzzy
 msgid "suboptimal pack - out of memory"
 msgstr "paquet subòptim - sense memòria"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, fuzzy, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compressió delta usant fils de fins a un 1%"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, fuzzy, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 "no s'han pogut empaquetar els objectes abastables des de les etiquetes per "
 "cent"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "S'estan comprimint els objectes"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 #, fuzzy
 msgid "inconsistency with delta count"
 msgstr "inconsistència amb el comptador de diferències"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, 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:2964
+#: builtin/pack-objects.c:3004
 #, fuzzy, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18375,7 +19130,17 @@
 "l'objecte ja està configurat en un altre uploadpack.blobpackfileuri (gotat "
 "'%')"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, 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
+#, fuzzy, c-format
+msgid "could not find pack '%s'"
+msgstr "no s'ha pogut finalitzar «%s»"
+
+#: builtin/pack-objects.c:3218
 #, fuzzy, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18384,279 +19149,300 @@
 "s'esperava un identificador d'objecte de vora amb brossa s'han obtingut "
 "percentatges d'escombraries"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
-msgstr  ""
+msgstr ""
 "s'esperava un ID d'objecte, s'ha rebut brossa:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "valor no vàlid per a --missing"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 #, fuzzy
 msgid "cannot open pack index"
 msgstr "no s'ha pogut obrir l'índex del paquet"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, 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:3272
+#: builtin/pack-objects.c:3498
 #, fuzzy
 msgid "unable to force loose object"
 msgstr "no s'ha pogut forçar l'objecte solt"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, fuzzy, c-format
 msgid "not a rev '%s'"
 msgstr "no és una revisió \"%s\""
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "revisió incorrecte «%s»"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "no s'han pogut afegir els objectes recents"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "versió d'índex no compatible %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "versió d'índex incorrecta «%s»"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<versió>[,<desplaçament>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 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:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "mida màxima de cada fitxer empaquetat de sortida"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 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:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "ignora els objectes empaquetats"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "limita la finestra d'empaquetament per objectes"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 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:3502
+#: builtin/pack-objects.c:3769
 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:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "reusa les diferències existents"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "reusa els objectes existents"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "usa objectes OFS_DELTA"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 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:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "no creïs una emissió de paquet buida"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "llegeix els arguments de revisió des de l'entrada estàndard"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 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:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "inclou els objectes abastables de qualsevol referència"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 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:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "inclou els objectes als quals faci referència l'índex"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+#, fuzzy
+msgid "read packs from stdin"
+msgstr "llegeix les actualitzacions des de stdin"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "emet el paquet a stdout"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 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:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "retén els objectes inabastables"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "empaqueta els objectes inabastables solts"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "desempaqueta els objectes inabastables més nous que <hora>"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 #, fuzzy
 msgid "use the sparse reachability algorithm"
 msgstr "utilitza l'algorisme d'accessibilitat dispers"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "crea paquets prims"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "crea paquets adequats per a les obtencions superficials"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "ignora els paquets que tinguin un fitxer .keep corresponent"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 #, fuzzy
 msgid "ignore this pack"
 msgstr "ignora aquest paquet"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "nivell de compressió de paquet"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "no amaguis les comissions per empelt"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 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:3555
+#: builtin/pack-objects.c:3824
 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:3559
+#: builtin/pack-objects.c:3828
 #, fuzzy
 msgid "write a bitmap index if possible"
 msgstr "escriu un índex de mapa de bits si és possible"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "gestió dels objectes absents"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 #, fuzzy
 msgid "do not pack objects in promisor packfiles"
 msgstr "no empaqueta els objectes als fitxers del paquet promisor"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 #, fuzzy
 msgid "respect islands during delta compression"
 msgstr "respecta les illes durant la compressió delta"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 #, fuzzy
 msgid "protocol"
 msgstr "protocol"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 #, 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:3600
+#: builtin/pack-objects.c:3873
 #, 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:3605
+#: builtin/pack-objects.c:3878
 #, 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:3659
+#: builtin/pack-objects.c:3934
 #, 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:3661
+#: builtin/pack-objects.c:3936
 #, 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:3666
+#: builtin/pack-objects.c:3941
 #, 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:3669
+#: builtin/pack-objects.c:3944
 #, fuzzy
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable i --unpack-unreachable són incompatibles"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 #, fuzzy
 msgid "cannot use --filter without --stdout"
 msgstr "no es pot utilitzar --filter sense --stdout"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+#, fuzzy
+msgid "cannot use --filter with --stdin-packs"
+msgstr "no es pot utilitzar --filter sense --stdout"
+
+#: builtin/pack-objects.c:3956
+#, 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
 msgid "Enumerating objects"
 msgstr "S'estan enumerant els objectes"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, fuzzy, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
 "reused %<PRIu32>"
 msgstr ""
-"Total%<PRIu32> (delta %<PRIu32>) reutilitzat%<PRIu32> (delta %<PRIu32>) "
-"pack-reutilitzat%<PRIu32>"
+"Total%<PRIu32> (delta %<PRIu32>) reutilitzat%<PRIu32> (delta %<PRIu32>) pack-"
+"reutilitzat%<PRIu32>"
+
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>.  Thanks.\n"
+msgstr ""
 
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
@@ -18716,11 +19502,11 @@
 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:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "permet l'avanç ràpid"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 #, fuzzy
 msgid "automatically stash/stash pop before and after"
 msgstr "«stash»/«stash» automàticament abans i després"
@@ -18742,35 +19528,7 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Valor no vàlid per a pull.ff: %s"
 
-#: builtin/pull.c:348
-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"
-"\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"
-"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"
-msgstr ""
-"Baixar sense especificar com conciliar branques divergents està\n"
-"desaconsellat. Podeu desactivar aquest missatge executant una de les següents\n"
-"comandes abans de la propera baixada:\n"
-"\n"
-"  git config pull.rebase false  # merge (estratègia per defecte)\n"
-"  git config pull.rebase true   # rebase\n"
-"  git config pull.ff only       # només fast-forward\n"
-"\n"
-"Podeu reemplaçar «git config» per «git config --global» per a establir una preferència\n"
-"per defecte per a tots els dipòsits. Podeu també usar -rebase, --no-rebase,\n"
-"o --ff-only en la línia d'ordres per sobreescriure el valor per defecte configuratW\n"
-"en aquesta execució.\n"
-
-#: builtin/pull.c:458
+#: builtin/pull.c:445
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
@@ -18778,14 +19536,13 @@
 "No hi ha cap candidat sobre el qual fer «rebase» entre les referències que "
 "acabeu d'obtenir."
 
-#: builtin/pull.c:460
+#: builtin/pull.c:447
 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:461
+#: builtin/pull.c:448
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -18793,7 +19550,7 @@
 "Generalment això vol dir que heu proveït una especificació de\n"
 "referència de comodí que no tenia cap coincidència en el costat remot."
 
-#: builtin/pull.c:464
+#: builtin/pull.c:451
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -18804,43 +19561,43 @@
 "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:469 builtin/rebase.c:1246
+#: builtin/pull.c:456 builtin/rebase.c:1248
 msgid "You are not currently on a branch."
 msgstr "Actualment no sou en cap branca."
 
-#: builtin/pull.c:471 builtin/pull.c:486
+#: builtin/pull.c:458 builtin/pull.c:473
 msgid "Please specify which branch you want to rebase against."
 msgstr "Especifiqueu sobre quina branca voleu fer «rebase»."
 
-#: builtin/pull.c:473 builtin/pull.c:488
+#: builtin/pull.c:460 builtin/pull.c:475
 msgid "Please specify which branch you want to merge with."
 msgstr "Especifiqueu amb quina branca voleu fusionar."
 
-#: builtin/pull.c:474 builtin/pull.c:489
+#: builtin/pull.c:461 builtin/pull.c:476
 msgid "See git-pull(1) for details."
 msgstr "Vegeu git-pull(1) per a més informació."
 
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
 msgid "<remote>"
 msgstr "<remot>"
 
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
 msgid "<branch>"
 msgstr "<branca>"
 
-#: builtin/pull.c:484 builtin/rebase.c:1244
+#: builtin/pull.c:471 builtin/rebase.c:1246
 msgid "There is no tracking information for the current branch."
 msgstr "No hi ha cap informació de seguiment per a la branca actual."
 
-#: builtin/pull.c:493
+#: builtin/pull.c:480
 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:498
+#: builtin/pull.c:485
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
@@ -18849,29 +19606,58 @@
 "La vostra configuració especifica fusionar amb la referència «%s»\n"
 "del remot, però no s'ha obtingut tal referència."
 
-#: builtin/pull.c:609
+#: builtin/pull.c:596
 #, c-format
 msgid "unable to access commit %s"
 msgstr "no s'ha pogut accedir a la comissió %s"
 
-#: builtin/pull.c:915
+#: builtin/pull.c:902
 msgid "ignoring --verify-signatures for rebase"
 msgstr "s'està ignorant --verify-signatures en fer «rebase»"
 
-#: builtin/pull.c:972
+#: builtin/pull.c:930
+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"
+"\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"
+"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"
+msgstr ""
+"Baixar sense especificar com conciliar branques divergents està\n"
+"desaconsellat. Podeu desactivar aquest missatge executant una de les\n"
+"següents ordres abans de la propera baixada:\n"
+"\n"
+"  git config pull.rebase false  # merge (estratègia per defecte)\n"
+"  git config pull.rebase true   # rebase\n"
+"  git config pull.ff only       # només fast-forward\n"
+"\n"
+"Podeu reemplaçar «git config» per «git config --global» per a establir una\n"
+"preferència per defecte per a tots els dipòsits. Podeu també usar --rebase,\n"
+"--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
 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:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "baixar fent «rebase»"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "cometeu-los o emmagatzemeu-los."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18882,7 +19668,7 @@
 "s'està avançant ràpidament el vostre arbre de treball des de\n"
 "la comissió %s."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18893,21 +19679,22 @@
 "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:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "No es poden fusionar múltiples branques a un HEAD buit."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "No es pot fer «rebase» sobre múltiples branques."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "no es pot fer «rebase» amb modificacions als submòduls enregistrades "
@@ -18931,7 +19718,8 @@
 "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
@@ -18988,8 +19776,7 @@
 
 #: builtin/push.c:202
 #, 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."
 
@@ -19005,7 +19792,8 @@
 "quina branca remota."
 
 #: builtin/push.c:260
-msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"."
+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»."
@@ -19020,7 +19808,8 @@
 "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
 msgid ""
@@ -19033,7 +19822,8 @@
 "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
 msgid ""
@@ -19048,13 +19838,13 @@
 "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
 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
 msgid ""
@@ -19078,7 +19868,8 @@
 "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
 #, c-format
@@ -19180,7 +19971,8 @@
 #: builtin/push.c:624
 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"
@@ -19189,7 +19981,8 @@
 "    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 dipòsit remot fent servir\n"
+"Especifiqueu l'URL des de la línia d'ordres o bé configureu un dipòsit remot "
+"fent servir\n"
 "\n"
 "    git remote add <nom> <url>\n"
 "\n"
@@ -19221,64 +20014,69 @@
 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:8
+#: 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>."
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 #, fuzzy
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<opcions>] <old-tip><new-tip>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 #, fuzzy
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<opcions>] <base> <old-tip> <new-tip>"
 
-#: builtin/range-diff.c:22
-#, fuzzy
-msgid "Percentage by which creation is weighted"
-msgstr "Percentatge pel qual es pondera la creació"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "utilitza colors simples de diff"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 #, fuzzy
 msgid "notes"
 msgstr "notes"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 #, fuzzy
 msgid "passed to 'git log'"
 msgstr "passa a 'git log'"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
+#: builtin/range-diff.c:35
+#, fuzzy
+msgid "only emit output related to the first range"
+msgstr "mostra només les comissions que no siguin en la primera branca"
+
+#: builtin/range-diff.c:37
+#, fuzzy
+msgid "only emit output related to the second range"
+msgstr "fes que la sortida sigui relativa al directori superior del projecte"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, fuzzy, c-format
+msgid "not a commit range: '%s'"
 msgstr "cap .. en rang: «%s»"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "el format de l'argument únic ha de ser de rang simètric"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "calen dos rangs de comissió"
 
 #: 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>]])"
+"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>]])"
 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
 msgid "write resulting index to <file>"
@@ -19366,238 +20164,239 @@
 #: 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:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: 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:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "no s'ha pogut crear el fitxer temporal %s"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "no s'ha pogut marcar com a interactiu"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "no s'ha pogut generar la llista per a fer"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 #, 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:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<opcions>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: 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:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "permet les comissions amb missatges buits"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "fes «rebase» de les comissions de fusió"
 
-#: builtin/rebase.c:501
+#: 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:503
+#: 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:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "signa les comissions"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 #, fuzzy
 msgid "display a diffstat of what changed upstream"
 msgstr "mostra un «diffstat» de la font que ha canviat"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "continua el «rebase»"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "omet la comissió"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "edita la llista a fer"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "mostra el pedaç actual"
 
-#: builtin/rebase.c:516
+#: 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:518
+#: 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:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "comprova la llista a fer"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "reorganitza les línies «fixup/pick»"
 
-#: builtin/rebase.c:524
+#: 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:525
+#: builtin/rebase.c:526
 #, fuzzy
 msgid "onto"
 msgstr "sobre"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 #, fuzzy
 msgid "restrict-revision"
 msgstr "revisió restringida"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 #, fuzzy
 msgid "restrict revision"
 msgstr "restringeix la revisió"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 #, fuzzy
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 #, fuzzy
 msgid "squash onto"
 msgstr "carabassa a"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 #, fuzzy
 msgid "the upstream commit"
 msgstr "la comissió principal"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 #, fuzzy
 msgid "head-name"
 msgstr "nom-cap"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 #, fuzzy
 msgid "head name"
 msgstr "nom del cap"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 #, fuzzy
 msgid "rebase strategy"
 msgstr "estratègia de rebase"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 #, fuzzy
 msgid "strategy-opts"
 msgstr "opcions estratègiques"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 #, fuzzy
 msgid "strategy options"
 msgstr "opcions d'estratègia"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 #, fuzzy
 msgid "switch-to"
 msgstr "canvia a"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 #, fuzzy
 msgid "the branch or commit to checkout"
 msgstr "la branca o entrega a agafar"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 #, fuzzy
 msgid "onto-name"
 msgstr "ont-name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 #, fuzzy
 msgid "onto name"
 msgstr "al nom"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 #, fuzzy
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "l'ordre a executar"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: 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:565
+#: 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:581
+#: builtin/rebase.c:582
 #, fuzzy, c-format
 msgid "%s requires the merge backend"
 msgstr "%s requereix un «rebase» interactiu"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, fuzzy, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "no s'ha pogut obtenir «onto» «%s»"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, fuzzy, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head '%s' no és vàlid"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, fuzzy, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "s'ignorarà allowrerereautoupdate «%s» no vàlid"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
 "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"
 "Podeu en comptes 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:894
+#: builtin/rebase.c:896
 #, fuzzy, c-format
 msgid ""
 "\n"
@@ -19611,14 +20410,16 @@
 "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:1220
+#: builtin/rebase.c:1222
 #, 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:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19635,7 +20436,7 @@
 "    git rebase '<branca>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19643,212 +20444,202 @@
 "    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:1284
+#: builtin/rebase.c:1286
 #, fuzzy
 msgid "exec commands cannot contain newlines"
 msgstr "les ordres exec no poden contenir línies noves"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "ordre exec buida"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "fes un «rebase» en la branca donada en comptes de la font"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 #, 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:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "permet al lligam pre-rebase executar-se"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "silenciós. Implica --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 #, fuzzy
 msgid "do not show diffstat of what changed upstream"
 msgstr "no mostris «diffstat» de quina font ha canviat"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 #, fuzzy
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "afegeix una línia signada per cada entrega"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 #, fuzzy
 msgid "make committer date match author date"
 msgstr "Agrupa per «comitter» en comptes de per autor"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "ignora la data de l'autor i utilitza la data actual"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "sinònim de --reset-author-date"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "passa-ho a «git-apply»"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "ignora els canvis d'espais en blanc"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "«cherry pick» totes les comissions, inclús les no canviades"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "continua"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "omet el pedaç actual i continua"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "interromp i agafa la branca original"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "interromp però manté HEAD on és"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "edita la llista de coses a fer durant un «rebase» interactiu"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "mostra el pedaç que s'està aplicant o fusionant"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "utilitza estratègies d'aplicació per fer «rebase»"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "utilitza estratègies de fusió per fer «rebase»"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 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:1380
+#: builtin/rebase.c:1381
 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:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "com gestionar les comissions que queden buides"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 #, fuzzy
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "mou les comissions que comencen amb squash!/fixup! sota -i"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 #, 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:1403
+#: builtin/rebase.c:1404
 #, fuzzy
 msgid "allow rebasing commits with empty messages"
 msgstr "permet tornar a basar les comissions amb missatges buits"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 #, fuzzy
 msgid "try to rebase merges instead of skipping them"
 msgstr "intenta fer «rebase» de les fusions en lloc d'omissió"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 #, fuzzy
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "usa «merge-base --fork-point» per refinar la font"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "utilitza l'estratègia de fusió donada"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "opció"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "passa l'argument a l'estratègia de fusió"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 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:1423
+#: builtin/rebase.c:1424
 #, 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"
+msgstr "aplica tots els canvis fins i tot els que ja estan a la font principal"
 
-#: builtin/rebase.c:1440
-#, fuzzy
-msgid ""
-"the rebase.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»."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 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:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges està en desús. Utilitzeu --rebase-merges en "
 "lloc seu."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 #, fuzzy
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "no es pot combinar «--keep-base» amb «--onto»"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 #, fuzzy
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "no es pot combinar «--keep-base» amb «--root»"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 #, fuzzy
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "no es pot combinar «--keep-base» amb «--root»"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "No hi ha un «rebase» en curs?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 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:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "No es pot llegir HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19856,16 +20647,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:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "no s'han pogut descartar els canvis de l'arbre de treball"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "no s'ha pogut tornar a %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, fuzzy, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19881,139 +20672,139 @@
 "d'un altre rebase. Si és així, si us plau, provi-ho si no és així, si us "
 "plau inciti-me."
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "«switch» «c» espera un valor numèric"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Mode desconegut: %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requereix --merge o --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 #, fuzzy
 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:1776
+#: builtin/rebase.c:1772
 #, fuzzy, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Rebase de system%s desconegut"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 #, fuzzy
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedulo-failed-exec requereix --exec o --interactive"
 
-#: builtin/rebase.c:1826
+#: 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:1830
+#: 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:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "font no vàlida: «%s»"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "No s'ha pogut crear una comissió arrel nova"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, 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:1889
+#: builtin/rebase.c:1885
 #, fuzzy, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s' necessita exactament una base de fusió"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, fuzzy, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "No apunta a una comissió vàlida «%s»"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, fuzzy, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal no existeix aquesta branca/commit «%s»"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "No hi ha tal referència: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 #, fuzzy
 msgid "Could not resolve HEAD to a revision"
 msgstr "No s'ha pogut resoldre HEAD a una revisió"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Cometeu-los o emmagatzemeu-los."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "no s'ha pogut commutar a %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD està al dia."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La branca actual %s està al dia.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "La branca actual està al dia, «rebase» forçat."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, 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:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "El lligam pre-«rebase» ha refusat a fer «rebase»."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Canvis a %s:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Canvis de %s a %s:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, 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:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "No s'ha pogut separar HEAD"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avanç ràpid %s a %s.\n"
@@ -20075,23 +20866,23 @@
 "\n"
 "Per a silenciar aquest missatge, podeu establir-la a «refuse»."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "silenciós"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 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 ""
@@ -20110,37 +20901,37 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "«%s» no és una marca de temps vàlida"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "S'estan marcant els objectes abastables..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, fuzzy, c-format
 msgid "%s points nowhere!"
 msgstr "els percentatges no apunten enlloc!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 #, fuzzy
 msgid "no reflog specified to delete"
 msgstr "no s'ha especificat cap registre de referència per suprimir"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, fuzzy, c-format
 msgid "not a reflog: %s"
 msgstr "no és un registre de referència"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, fuzzy, c-format
 msgid "no reflog for '%s'"
 msgstr "cap registre de referència per a «%s»"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "format de referència no vàlid: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -20150,11 +20941,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>"
@@ -20317,7 +21108,7 @@
 "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:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "No existeix el remot «%s»"
@@ -20334,7 +21125,8 @@
 "\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."
 
@@ -20359,7 +21151,8 @@
 "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
@@ -20480,6 +21273,7 @@
 #. TRANSLATORS: the colon ':' should align
 #. with the one in " Fetch URL: %s"
 #. translation.
+#.
 #: builtin/remote.c:1255 builtin/remote.c:1257
 #, c-format
 msgid "  Push  URL: %s"
@@ -20500,7 +21294,8 @@
 
 #: builtin/remote.c:1265
 #, 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"
 
@@ -20653,142 +21448,168 @@
 msgid "Will not delete all non-push URLs"
 msgstr "No se suprimiran tots els URL no de pujada"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<opcions>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 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:197
+#: builtin/repack.c:198
 #, 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:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 #, 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:295
+#: builtin/repack.c:294
 #, 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:323
+#: builtin/repack.c:309
+#, 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
+msgid "pack %s too large to consider in geometric progression"
+msgstr ""
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr ""
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "empaqueta-ho tot en un únic paquet"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "el mateix que -a, i solta els objectes inabastables"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "elimina els paquets redundants, i executeu git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passa --no-reuse-delta a git-pack-objects"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passa --no-reuse-object a git-pack-objects"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "no executis git-update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "passa --local a git-pack-objects"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "escriu índex de mapa de bits"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 #, fuzzy
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passa --delta-illes a git-pack-objects"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "data aproximada"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 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:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "amb -a, reempaqueta els objectes inabastables"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 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:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "octets"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 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:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "limita la profunditat màxima de les diferències"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "limita el nombre màxim de fils"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "mida màxima de cada fitxer de paquet"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "reempaqueta els objectes en paquets marcats amb .keep"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 #, fuzzy
 msgid "do not repack this pack"
 msgstr "no reempaqueta aquest paquet"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr ""
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "no es poden suprimir paquets en un dipòsit d'objectes preciosos"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable i -A són incompatibles"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+#, fuzzy
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--long és incompatible amb --abbrev=0"
+
+#: builtin/repack.c:639
 #, fuzzy
 msgid "Nothing new to pack."
 msgstr "Res nou per empaquetar."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, fuzzy, c-format
 msgid "missing required file: %s"
 msgstr "falten els arguments per a %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, fuzzy, c-format
 msgid "could not unlink: %s"
 msgstr "no s'ha pogut bloquejar «%s»"
@@ -20854,8 +21675,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
@@ -21052,8 +21873,7 @@
 
 #: 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
 msgid "register clean resolutions in index"
@@ -21135,8 +21955,8 @@
 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:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "sigues silenciós, només informa d'errors"
 
@@ -21206,8 +22026,8 @@
 "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
@@ -21219,19 +22039,19 @@
 msgid "Could not write new index file."
 msgstr "No s'ha pogut escriure el fitxer d'índex nou."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "no es pot combinar --exclude-promisor-objects i --missing"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "el filtratge d'objectes requereix --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "el rev-list no permet mostrar notes"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 #, fuzzy
 msgid "marked counting is incompatible with --objects"
 msgstr "el recompte marcat és incompatible amb --objects"
@@ -21264,7 +22084,8 @@
 "   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/revert.c:24
 msgid "git revert [<options>] <commit-ish>..."
@@ -21344,19 +22165,19 @@
 msgid "keep redundant, empty commits"
 msgstr "retén les comissions redundants i buides"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "la reversió ha fallat"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "el «cherry pick» ha fallat"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<opcions>] [--] <fitxer>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -21370,7 +22191,7 @@
 "els fitxers següents tenen contingut «stage» diferent d'ambdós\n"
 "el fitxer i la HEAD:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -21378,13 +22199,13 @@
 "\n"
 "(useu -f per a forçar l'eliminació)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "el fitxer següent té canvis «staged» en l'índex:"
 msgstr[1] "els fitxers següents tenen canvis «staged» en l'índex:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -21392,60 +22213,64 @@
 "\n"
 "(useu --cached per a mantenir el fitxer, o -f per a forçar l'eliminació)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "el fitxer següent té modificacions locals:"
 msgstr[1] "els fitxers següents tenen modificacions locals:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "no llistis els fitxers eliminats"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "només elimina de l'índex"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "passa per alt la comprovació d'actualitat"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "permet l'eliminació recursiva"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "surt amb estat zero encara que res hagi coincidit"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 #, 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:305
+#: builtin/rm.c:310
 #, 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:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "no s'eliminarà «%s» recursivament sense -r"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: no s'ha pogut eliminar %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"
+"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."
 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
@@ -21472,57 +22297,61 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<opcions>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 #, fuzzy
 msgid "using multiple --group options with stdin is not supported"
 msgstr "no s'admet escriure a stdin"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 #, fuzzy
 msgid "using --group=trailer with stdin is not supported"
 msgstr "no s'admet escriure a stdin"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, fuzzy, c-format
 msgid "unknown group type: %s"
 msgstr "tipus desconegut"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
+#: builtin/shortlog.c:351
+#, fuzzy
+msgid "group by committer rather than author"
 msgstr "Agrupa per «comitter» en comptes de per autor"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "ordena la sortida segons el nombre de comissions per autor"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
+#: builtin/shortlog.c:356
+#, fuzzy
+msgid "suppress commit descriptions, only provides commit count"
 msgstr ""
 "Omet les descripcions de comissió, només proveeix el recompte de comissions"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
+#: builtin/shortlog.c:358
+#, fuzzy
+msgid "show the email address of each author"
 msgstr "Mostra l'adreça electrònica de cada autor"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
+#: builtin/shortlog.c:360
+#, fuzzy
+msgid "linewrap output"
 msgstr "Ajusta les línies de la sortida"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 #, fuzzy
 msgid "field"
 msgstr "camp"
 
-#: builtin/shortlog.c:375
+#: builtin/shortlog.c:363
 #, fuzzy
-msgid "Group by field"
+msgid "group by field"
 msgstr "Agrupa per camp"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "hi ha massa arguments donats fora del dipòsit"
 
@@ -21540,8 +22369,7 @@
 
 #: 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
@@ -21621,8 +22449,7 @@
 
 #: builtin/show-branch.c:711
 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"
 
@@ -21675,11 +22502,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>]"
@@ -21719,118 +22546,128 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "mostra les referències de stdin que no siguin en el dipòsit local"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 #, fuzzy
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|disable) <opcions>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 #, fuzzy
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 #, 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:228
+#: builtin/sparse-checkout.c:227
 #, 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:269
+#: builtin/sparse-checkout.c:268
 #, fuzzy
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
 "no s'ha pogut actualitzar el format del dipòsit per habilitar worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 #, fuzzy
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "no s'ha pogut establir el paràmetre extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+#, fuzzy
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 #, fuzzy
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "inicialitza el «sparse-checkout» en mode con"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr ""
+
+#: builtin/sparse-checkout.c:340
+#, 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
 #, c-format
 msgid "failed to open '%s'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, fuzzy, c-format
 msgid "could not normalize path %s"
 msgstr "no s'ha pogut normalitzar el camí"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 #, fuzzy
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <patrons>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, 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:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 #, 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:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "llegeix els patrons de l'entrada estàndard"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 #, fuzzy
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 #, fuzzy
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "s'ha produït un error en actualitzar el directori de treball"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<opcions>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<opcions>] [<stash>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 #, fuzzy
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 #, fuzzy
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <nom-de-branca> [<stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 #, fuzzy
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
@@ -21838,11 +22675,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:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21850,19 +22687,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<missatge>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <missatge>] [-q|--quiet] <commit>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21872,182 +22709,211 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <missatge>]\n"
 "          [--] [<pathspec>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "«%s» no és una comissió de tipus «stash»"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "S'han especificat massa revisions:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "No s'ha trobat cap «stash»."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "«%s» no és una referència vàlida"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+#: builtin/stash.c:227
+#, fuzzy
+msgid "git stash clear with arguments is unimplemented"
 msgstr "git stash clear amb paràmetres no està implementat"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+
+#: builtin/stash.c:492
 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:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "no s'ha pogut generar diff %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 #, fuzzy
 msgid "conflicts in index. Try without --index."
 msgstr "hi ha conflictes en l'índex. Proveu-ho sense --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "no s'ha pogut desar l'arbre d'índex"
 
-#: builtin/stash.c:437
+#: 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:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "S'està fusionant %s amb %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "L'índex no estava «unstashed»."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "intenta tornar a crear l'índex"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Descartat %s (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: no s'ha pogut descartar l'entrada «stash»"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "«%s» no és una referència «stash»"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 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:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Cap nom de branca especificat"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+#, fuzzy
+msgid "failed to parse tree"
+msgstr "s'ha produït un error en analitzar %s"
+
+#: builtin/stash.c:819
+#, fuzzy
+msgid "failed to unpack trees"
+msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
+
+#: builtin/stash.c:839
+#, fuzzy
+msgid "include untracked files in the stash"
+msgstr "inclou els fitxers no seguits a «stash»"
+
+#: builtin/stash.c:842
+#, 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
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "No es pot actualitzar %s amb %s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "missatge «stash»"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "«git stash store» requereix un argument <comissió>"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "No hi ha canvis seleccionats"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Encara no teniu la comissió inicial"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "No es pot desar l'estat d'índex actual"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "No es poden desar els fitxers no seguits"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "No es pot desar l'estat d'arbre de treball actual"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "No es pot registrar l'estat de l'arbre de treball"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 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:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "Heu oblidat de fer «git add»?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "No hi ha canvis locals a desar"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "No es pot inicialitzar el magatzem"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "No es pot desar l'estat actual"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, 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:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "No es poden eliminar els canvis de l'arbre de treball"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "mantén l'índex"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 #, fuzzy
 msgid "stash in patch mode"
 msgstr "stash en mode pedaç"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "mode silenciós"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "inclou els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "inclou els fitxers ignorats"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 #, 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]"
@@ -22066,7 +22932,7 @@
 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:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "S'espera un nom de referència ple, s'ha rebut %s"
@@ -22080,7 +22946,7 @@
 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:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "àncora alternativa per als camins relatius"
 
@@ -22088,18 +22954,18 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<camí>] [<camí>...]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, 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:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "S'està entrant a «%s»\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, fuzzy, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22107,28 +22973,31 @@
 msgstr ""
 "runcommand ha retornat un estat diferent de zero per als percentatges ."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, 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:565
-msgid "Suppress output of entering each submodule command"
+#: builtin/submodule--helper.c:566
+#, 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:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Inclou recursivament els submòduls imbricats"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "inclou recursivament els submòduls imbricats"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <ordre>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22137,173 +23006,171 @@
 "no s'ha pogut trobar la configuració «%s». S'assumeix que aquest dipòsit és "
 "el seu dipòsit font autoritzat."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, 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:670
+#: builtin/submodule--helper.c:671
 #, 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:680
+#: builtin/submodule--helper.c:681
 #, 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:687
+#: builtin/submodule--helper.c:688
 #, 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:709
-msgid "Suppress output for initializing a submodule"
+#: builtin/submodule--helper.c:710
+#, fuzzy
+msgid "suppress output for initializing a submodule"
 msgstr "Omet la sortida d'inicialitzar un submòdul"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<opcions>] [<camí>]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, 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:835
+#: builtin/submodule--helper.c:836
 #, 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:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, 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:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+#, fuzzy
+msgid "suppress submodule status output"
 msgstr "Suprimeix la sortida de l'estat del submòdul"
 
-#: builtin/submodule--helper.c:887
+#: builtin/submodule--helper.c:888
 #, fuzzy
 msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored 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:888
-msgid "recurse into nested submodules"
-msgstr "inclou recursivament els submòduls imbricats"
-
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<camí>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <camí>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, fuzzy, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* el %s(blob)->%s(submòdul)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, fuzzy, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* un %s per cents(submòdul)->%s(blob)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, fuzzy, c-format
 msgid "%s"
 msgstr "percentatges"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, fuzzy, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "no s'ha pogut analitzar l'objecte «%s»"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, fuzzy, c-format
 msgid "unexpected mode %o\n"
 msgstr "mode inesperat $mod_dst"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 #, 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:1302
+#: builtin/submodule--helper.c:1303
 #, fuzzy
 msgid "to 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:1304
+#: builtin/submodule--helper.c:1305
 #, 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:1306
+#: builtin/submodule--helper.c:1307
 #, fuzzy
 msgid "limit the summary size"
 msgstr "limita a caps"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 #, fuzzy
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper init [<opcions>] [<camí>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 #, fuzzy
 msgid "could not fetch a revision for HEAD"
 msgstr "no s'ha pogut separar HEAD"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 #, fuzzy
 msgid "--cached and --files are mutually exclusive"
 msgstr "-n i -k són mútuament excloents"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, 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:1413
+#: builtin/submodule--helper.c:1414
 #, 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:1427
+#: builtin/submodule--helper.c:1428
 #, 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:1438
+#: builtin/submodule--helper.c:1439
 #, 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:1485
-msgid "Suppress output of synchronizing submodule url"
+#: builtin/submodule--helper.c:1486
+#, 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:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -22312,7 +23179,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:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -22321,47 +23188,49 @@
 "L'arbre de treball del submòdul «%s» conté modificacions locals; useu «-f» "
 "per a descartar-les"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "S'ha esborrat el directori «%s»\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, 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:1579
+#: builtin/submodule--helper.c:1580
 #, 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:1595
+#: builtin/submodule--helper.c:1596
 #, 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:1624
-msgid "Remove submodule working trees even if they contain local changes"
+#: builtin/submodule--helper.c:1625
+#, 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:1625
-msgid "Unregister all submodules"
+#: builtin/submodule--helper.c:1626
+#, fuzzy
+msgid "unregister all submodules"
 msgstr "Desregistra recursivament tots els submòduls"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<camí>...]]"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1645
 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:1713
+#: builtin/submodule--helper.c:1714
 #, fuzzy
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
@@ -22370,50 +23239,50 @@
 "'--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:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "el submòdul «%s» no pot afegir un alternatiu: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, 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:1798
+#: builtin/submodule--helper.c:1799
 #, 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:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "a on es clonarà el submòdul nou"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "nom del submòdul nou"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "url del qual clonar el submòdul"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "profunditat dels clons superficials"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "força el progrés del clonatge"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "no permetis clonar en un directori no buit"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 #, fuzzy
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
@@ -22421,106 +23290,107 @@
 "<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:1873
+#: 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:1884
+#: 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:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "directori no buit: «%s»"
 
-#: builtin/submodule--helper.c:1900
+#: 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:1936
+#: builtin/submodule--helper.c:1937
 #, 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:1940
+#: builtin/submodule--helper.c:1941
 #, 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:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "El camí de submòdul «%s» no està inicialitzat"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Potser voleu usar «update --init»?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "S'està ometent el submòdul no fusionat %s"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "S'està ometent el submòdul «%s»"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, 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:2265
+#: builtin/submodule--helper.c:2266
 #, 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:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "camí a l'arbre de treball"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 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:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout o none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
+#: builtin/submodule--helper.c:2341
+#, 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:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "tasques paral·leles"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 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:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "no imprimeixis el progrés del clonatge"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<camí>] [<camí>...]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "valor incorrecte per al paràmetre update"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -22529,94 +23399,94 @@
 "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:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "no s'ha pogut obtenir el gestor del dipòsit pel submòdul «%s»"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "inclou recursivament als submòduls"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<opcions>] [<camí>...]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 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:2639
+#: builtin/submodule--helper.c:2640
 #, fuzzy
 msgid "unset the config in the .gitmodules file"
 msgstr "no s'ha definit la configuració al fitxer .gitmodules"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 #, fuzzy
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <name> [<value>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 #, fuzzy
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <name>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, fuzzy, sh-format
 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:2681
+#: builtin/submodule--helper.c:2682
 #, fuzzy
-msgid "Suppress output for setting url of a submodule"
+msgid "suppress output for setting url of a submodule"
 msgstr "Omet la sortida d'inicialitzar un submòdul"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 #, fuzzy
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 #, fuzzy
 msgid "set the default tracking branch to master"
 msgstr "mostra les branques amb seguiment remot"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 #, fuzzy
 msgid "set the default tracking branch"
 msgstr "mostra les branques amb seguiment remot"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 #, fuzzy
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 #, 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:2732
+#: builtin/submodule--helper.c:2733
 #, fuzzy
 msgid "--branch or --default required"
 msgstr "cal el nom de branca"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 #, fuzzy
 msgid "--branch and --default are mutually exclusive"
 msgstr "--deepen i --depth són mútuament excloents"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s no admet --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "«%s» no és una subordre vàlida de submodule--helper"
@@ -22629,23 +23499,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <nom>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "omet el missatge d'error de referències no simbòliques (separades)"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "suprimeix la referència simbòlica"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "escurça la sortida de referències"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "raó"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "raó de l'actualització"
 
@@ -22665,27 +23535,30 @@
 #: 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"
+"\t\t[--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
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<format>] <nom-d'etiqueta>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "no s'ha trobat l'etiqueta «%s»."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "S'ha suprimit l'etiqueta «%s» (era %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22698,28 +23571,26 @@
 "  %s\n"
 "Les línies que comencin amb «%c» s'ignoraran.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\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:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "no s'ha pogut signar l'etiqueta"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "no s'ha pogut escriure el fitxer d'etiqueta"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, fuzzy, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22727,147 +23598,143 @@
 "\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:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "el tipus d'objecte és incorrecte."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "no hi ha cap missatge d'etiqueta?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, 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:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "llista els noms d'etiqueta"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "imprimeix <n> línies de cada missatge d'etiqueta"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "suprimeix les etiquetes"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "verifica les etiquetes"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Opcions de creació d'etiquetes"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "etiqueta anotada, necessita un missatge"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "missatge d'etiqueta"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "força l'edició del missatge de l'etiqueta"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "etiqueta anotada i signada per GPG"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "usa una altra clau per a signar l'etiqueta"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "reemplaça l'etiqueta si existeix"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "crea un registre de referències"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Opcions de llistat d'etiquetes"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "mostra la llista d'etiquetes en columnes"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "imprimeix només les etiquetes que continguin la comissió"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "imprimeix només les etiquetes que no continguin la comissió"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "imprimeix només les etiquetes que s'han fusionat"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "imprimeix només les etiquetes que no s'han fusionat"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "imprimeix només les etiquetes de l'objecte"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column i -n són incompatibles"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "es permet l'opció -n només amb mode llista"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "es permet l'opció --contains només amb mode llista"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 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:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "es permet --points-at option només amb mode llista"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 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:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "només es permet una opció -F o -m."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "massa paràmetres"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "«%s» no és un nom d'etiqueta vàlid."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "l'etiqueta «%s» ja existeix"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Etiqueta «%s» actualitzada (era %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "S'estan desempaquetant els objectes"
 
@@ -22926,8 +23793,7 @@
 #: builtin/update-index.c:215
 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
 msgid " OK"
@@ -22937,166 +23803,166 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opcions>] [--] [<fitxer>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr ""
 "continua l'actualització encara que l'índex necessiti una actualització"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "actualitza: ignora els submòduls"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "no ignoris els fitxers nous"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "deixa que els fitxers reemplacin els directoris i viceversa"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "tingues en compte els fitxers absents de l'arbre de treball"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "actualitza encara que l'índex contingui entrades no fusionades"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "actualitza la informació d'estadístiques"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "com --refresh, però ignora el paràmetre assume-unchanged"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>,<objecte>,<camí>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "afegeix l'entrada especificada a l'índex"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "marca els fitxers com a «no canviant»"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "esborra el bit assumed-unchanged"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "marca els fitxers com a «només índex»"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "esborra el bit skip-worktree"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 #, fuzzy
 msgid "do not touch index-only entries"
 msgstr "no toquis entrades de només índex"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 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:1024
+#: builtin/update-index.c:1026
 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:1026
+#: builtin/update-index.c:1028
 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:1028
+#: builtin/update-index.c:1030
 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:1032
+#: builtin/update-index.c:1034
 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:1036
+#: builtin/update-index.c:1038
 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:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "només actualitza les entrades que difereixin de HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "ignora els fitxers absents de l'arbre de treball"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "informa de les accions en la sortida estàndard"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(per a porcellanes) oblida't dels conflictes no resolts ni desats"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "escriu l'índex en aquest format"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "habilita o inhabilita l'índex dividit"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "habilita/inhabilita la memòria cau no seguida"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 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:1061
+#: builtin/update-index.c:1063
 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:1063
+#: builtin/update-index.c:1065
 #, 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:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "habilita o inhabilita el monitor del sistema de fitxers"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "marca els fitxers com a vàlids pel fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "esborra el bit de validesa del fsmonitor"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 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:1182
+#: builtin/update-index.c:1184
 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:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23104,41 +23970,41 @@
 "core.untrackedCache està establert a cert; elimineu-lo o canvieu-lo, si "
 "realment voleu inhabilitar el cau no seguit"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "La memòria cau no seguida està inhabilitada"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 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:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "La memòria cau no seguida està habilitada per a «%s»"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 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:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor habilitat"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 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:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor inhabilitat"
 
@@ -23149,8 +24015,7 @@
 #: 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]"
@@ -23233,106 +24098,72 @@
 msgid "print tag contents"
 msgstr "imprimeix els continguts de l'etiqueta"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opcions>] <camí> [<commit-ish>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opcions>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opcions>] <camí>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <arbre de treball> <camí-nou>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opcions>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opcions>] <arbre de treball>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <camí>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: 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:85
-#, fuzzy
-msgid "not a valid directory"
-msgstr "no és en un directori git"
-
-#: builtin/worktree.c:91
-#, fuzzy
-msgid "gitdir file does not exist"
-msgstr "Eliminació de worktrees/%s: el fitxer gitdir no existeix"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, fuzzy, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "no s'ha pogut llegir l'arbre (%s)"
-
-#: builtin/worktree.c:115
-#, fuzzy, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr ""
-"S'estan eliminant els arbres de treball/%s: lectura curta (s'esperaven "
-"%<PRIuMAX> bytes, se n'han llegit %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-#, fuzzy
-msgid "invalid gitdir file"
-msgstr "fitxer de configuració no vàlid %s"
-
-#: builtin/worktree.c:131
-#, fuzzy
-msgid "gitdir file points to non-existent location"
-msgstr ""
-"Eliminació de worktrees/%s: el fitxer gitdir es refereix a una ubicació no "
-"existent"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, fuzzy, c-format
 msgid "Removing %s/%s: %s"
 msgstr "S'està eliminant %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "informa dels arbres de treball podats"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "fes caducar els arbres de treball més vells que <hora>"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "«%s» ja existeix"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, fuzzy, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "no s'ha pogut fer «stat» a «%s»"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, 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:309
+#: builtin/worktree.c:237
 #, fuzzy, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23341,130 +24172,144 @@
 "'%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:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "no s'ha pogut crear directori de «%s»"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "S'està preparant l'arbre de treball (branca nova «%s»)"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, 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:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "S'està preparant l'arbre de treball (s'està agafant «%s»)"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "S'està preparant l'arbre de treball (HEAD %s separat)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 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:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "crea una branca nova"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "crea o restableix una branca"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "emplena l'arbre de treball nou"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "mantén l'arbre de treball nou bloquejat"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "configura el mode de seguiment (vegeu git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 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:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B i --detach són mútuament excloents"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 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:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr ""
+
+#: builtin/worktree.c:684
+#, 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
+#, 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:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "«%s» no és un arbre de treball"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 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:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "«%s» ja està bloquejat, raó: «%s»"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "«%s» ja està bloquejat"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "«%s» no està bloquejat"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 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:856
+#: builtin/worktree.c:818
 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:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "«%s» és un arbre de treball principal"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, 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:897
+#: builtin/worktree.c:859
 #, 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:899
+#: builtin/worktree.c:861
 #, fuzzy
 msgid ""
 "cannot move a locked working tree;\n"
@@ -23473,38 +24318,38 @@
 "no es pot moure un arbre de treball bloquejat; useu primer «move -f -f» per "
 "sobreescriure o desbloquejar"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, 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:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "s'ha produït un error en moure «%s» a «%s»"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "no s'ha pogut executar «git status» a «%s»"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, 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:962
+#: builtin/worktree.c:924
 #, 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:985
+#: builtin/worktree.c:947
 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:1008
+#: builtin/worktree.c:970
 #, fuzzy, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23513,28 +24358,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:1010
+#: builtin/worktree.c:972
 #, 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:1013
+#: builtin/worktree.c:975
 #, 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:1037
+#: builtin/worktree.c:999
 #, fuzzy, c-format
 msgid "repair: %s: %s"
 msgstr "%s no vàlid: «%s»"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, fuzzy, c-format
 msgid "error: %s: %s"
 msgstr "error en %s %s: %s"
@@ -23555,16 +24400,158 @@
 msgid "only useful for debugging"
 msgstr "només útil per a la depuració"
 
-#: http-fetch.c:114
+#: git.c:28
+#, fuzzy
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-"
+"path[=<path>]] [---html-path] [---info-path] [--paginate | -P | --no-pager] "
+"[-git-dir=<-name]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"«git help -a» i «git help -g» llisten subordres disponibles i\n"
+"algunes guies de concepte. Vegeu «git help <ordre>» o\n"
+"«git help <concepte>» per a llegir sobre una subordre o concepte específic.\n"
+"Vegeu «git help git» per a una visió general del sistema."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "no s'ha especificat un directori per --git-dir\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "no s'ha especificat un nom d'espai per --namespace\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "no s'ha especificat un directori per --work-tree\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "no s'ha especificat cap prefix per a --super-prefix\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "-c espera una cadena de configuració\n"
+
+#: git.c:260
+#, fuzzy, c-format
+msgid "no config key given for --config-env\n"
+msgstr "no s'ha especificat un directori per --work-tree\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "no s'ha especificat un directori per -C\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "opció desconeguda: %s\n"
+
+#: git.c:375
+#, fuzzy, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "en expandir l'àlies '%s' '%s'"
+
+#: git.c:384
+#, c-format
+msgid ""
+"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"
+
+#: git.c:391
+#, fuzzy, c-format
+msgid "empty alias for %s"
+msgstr "àlies buit per a percentatges"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "àlies recursiu: %s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "fallada d'escriptura en la sortida estàndard"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "fallada d'escriptura desconeguda en la sortida estàndard"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "ha fallat el tancament en la sortida estàndard"
+
+#: git.c:833
+#, 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
+#, fuzzy, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "no es poden gestionar els percentatges com a integrat"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"ús: %s\n"
+"\n"
+
+#: git.c:916
+#, 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
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "s'ha produït un error en executar l'ordre «%s»: %s\n"
+
+#: http-fetch.c:118
 #, fuzzy, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "l'argument a --packfile ha de ser un hash vàlid (té '%')"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 #, fuzzy
 msgid "not a git repository"
 msgstr "No és un dipòsit de git"
 
+#: http-fetch.c:134
+#, fuzzy
+msgid "--packfile requires --index-pack-args"
+msgstr "--pathspec-file-nul requereix --pathspec-from-file"
+
+#: http-fetch.c:143
+#, fuzzy
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "-N només es pot usar amb --mixed"
+
 #: t/helper/test-fast-rebase.c:141
 #, fuzzy
 msgid "unhandled options"
@@ -23592,130 +24579,114 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "surt immediatament després d'anunciar les funcionalitats"
 
-#: git.c:28
+#: 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
 #, fuzzy
-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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+msgid "waitpid failed"
+msgstr "«setsid» ha fallat"
+
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
 msgstr ""
-"git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-"
-"path[=<path>]] [---html-path] [---info-path] [--paginate | -P | --no-pager] "
-"[-git-dir=<-name]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
+#: 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 ""
-"«git help -a» i «git help -g» llisten subordres disponibles i\n"
-"algunes guies de concepte. Vegeu «git help <ordre>» o\n"
-"«git help <concepte>» per a llegir sobre una subordre o concepte específic.\n"
-"Vegeu «git help git» per a una visió general del sistema."
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "no s'ha especificat un directori per --git-dir\n"
-
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "no s'ha especificat un nom d'espai per --namespace\n"
-
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "no s'ha especificat un directori per --work-tree\n"
-
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "no s'ha especificat cap prefix per a --super-prefix\n"
-
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "-c espera una cadena de configuració\n"
-
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "no s'ha especificat un directori per -C\n"
-
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "opció desconeguda: %s\n"
-
-#: git.c:364
-#, fuzzy, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "en expandir l'àlies '%s' '%s'"
-
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
 msgstr ""
-"àlies «%s» canvia variables d'entorn. Podeu utilitzar «!git» a l'àlies per a"
-" fer-ho"
 
-#: git.c:380
-#, fuzzy, c-format
-msgid "empty alias for %s"
-msgstr "àlies buit per a percentatges"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "àlies recursiu: %s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "fallada d'escriptura en la sortida estàndard"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "fallada d'escriptura desconeguda en la sortida estàndard"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "ha fallat el tancament en la sortida estàndard"
-
-#: git.c:820
-#, 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:870
-#, fuzzy, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "no es poden gestionar els percentatges com a integrat"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
 msgstr ""
-"ús: %s\n"
-"\n"
 
-#: git.c:903
-#, 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"
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr ""
 
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "s'ha produït un error en executar l'ordre «%s»: %s\n"
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:688
+msgid ""
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:703
+#, fuzzy
+msgid "number of bytes"
+msgstr "nombre incorrecte d'arguments"
+
+#: t/helper/test-simple-ipc.c:704
+#, fuzzy
+msgid "number of requests per thread"
+msgstr "no s'ha pogut crear fil: %s"
+
+#: t/helper/test-simple-ipc.c:706
+#, fuzzy
+msgid "byte"
+msgstr "octets"
+
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr ""
 
 #: http.c:399
 #, c-format
@@ -23757,7 +24728,7 @@
 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:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23926,58 +24897,57 @@
 msgid "no libc information available\n"
 msgstr "mostra la informació de branca"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "arguments"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "filtratge d'objecte"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "data-de-caducitat"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "operació nul·la (per a compatibilitat amb versions anteriors)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "sigues més detallat"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "sigues més discret"
 
-#: parse-options.h:317
+#: parse-options.h:318
 #, fuzzy
 msgid "use <n> digits to display object names"
 msgstr "usa <n> xifres per presentar els SHA-1"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "com suprimir els espais i #comentaris del missatge"
 
-#: parse-options.h:337
+#: parse-options.h:338
 #, fuzzy
 msgid "read pathspec from file"
 msgstr "llegeix l'especificació del camí del fitxer"
 
-#: parse-options.h:338
+#: parse-options.h:339
 #, 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:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "clau"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "nom del camp en el qual ordenar"
 
@@ -23986,14 +24956,6 @@
 msgstr ""
 "actualitza l'índex amb la resolució de conflictes reusada si és possible"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD separat a "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD separat de "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Afegeix els continguts dels fitxers a l'índex"
@@ -24045,8 +25007,7 @@
 #: 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 "
-"dipòsit"
+"Proveeix contingut o informació del tipus i mida per als objectes del dipòsit"
 
 #: command-list.h:62
 msgid "Display gitattributes information"
@@ -24262,8 +25223,7 @@
 #, 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
@@ -24360,7 +25320,8 @@
 msgstr "Escriu i verifica els multi-índexs"
 
 #: command-list.h:132
-msgid "Creates a tag object"
+#, fuzzy
+msgid "Creates a tag object with extra validation"
 msgstr "Crea un objecte etiqueta"
 
 #: command-list.h:133
@@ -24592,14 +25553,12 @@
 #: 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"
@@ -24686,69 +25645,55 @@
 msgstr "Especifica els fitxers intencionalment no seguits a ignorar"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr ""
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "La definició de les propietats de submòduls"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Espais de noms del Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Programes d'ajuda per a interactuar amb dipòsits remots"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Disposició del dipòsit del Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "L'especificació de revisions i rangs per al Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Muntant un dipòsit dins un altre"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Un tutorial d'introducció al Git: segona part"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Un tutorial d'introducció al Git"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Una visió de conjunt de fluxos de treball recomanats amb Git"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Introducció de revisió errònia: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Cap fitxer de registre donat"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "no es pot llegir $file per a reproducció"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? de què parleu?"
-
-#: git-bisect.sh:115
+#: 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:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "s'està executant $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24757,11 +25702,11 @@
 "el pas de bisecció ha fallat:\n"
 "el codi de sortida $res de «$command» és < 0 o bé >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "el pas de bisecció no pot continuar més"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, fuzzy, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24770,21 +25715,17 @@
 "el pas de bisecció ha fallat:\n"
 "«bisect_state $state» ha sortit amb el codi d'error $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "pas de bisecció reeixit"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "No estem bisecant."
-
 #: 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."
@@ -24866,13 +25807,17 @@
 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."
+"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 dipòsit correcte\n"
-"o no esteu segur de què vol dir això, trieu un altre nom amb l'opció «--name»."
+"useu l'opció «--force». Si el directori de git local no és el dipòsit "
+"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
@@ -24930,8 +25875,8 @@
 "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."
+"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
@@ -25032,16 +25977,21 @@
 " 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"
+" 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"
+".       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"
 
@@ -25145,10 +26095,12 @@
 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"
+"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"
+"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"
@@ -25671,14 +26623,17 @@
 "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
@@ -25705,25 +26660,31 @@
 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:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr ""
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "l'editor no ha sortit correctament, avortant-ho tot"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, 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:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "«%s.final» conté el correu redactat.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases és incompatible amb altres opcions\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 #, fuzzy
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
@@ -25731,15 +26692,14 @@
 "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:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "No es pot executar git format-patch des de fora del dipòsit\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 #, fuzzy
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
@@ -25748,37 +26708,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:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Camp --suppress-cc desconegut: «%s»\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Paràmetre --confirm desconegut: «%s»\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, 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:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "avís: «:include:» no s'admet: %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, 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:573
+#: git-send-email.perl:582
 #, 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:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25793,21 +26753,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:678
+#: git-send-email.perl:687
 #, 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:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"fatal: %s: %s\n"
-"avís: no s'han enviat pedaços\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -25817,17 +26768,17 @@
 "No s'han especificat fitxers de pedaç\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Sense assumpte a %s?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, 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:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25841,27 +26792,27 @@
 "\n"
 "Esborreu el contingut del cos si no voleu enviar cap resum.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "S'ha produït un error en obrir %s: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, 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:831
+#: git-send-email.perl:838
 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:866
+#: git-send-email.perl:873
 #, 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:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -25869,38 +26820,40 @@
 "Els fitxers següents són 8bit, però no declaren un Content-Transfer-"
 "Encoding.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Quina codificació de 8 bits hauria de declarar [UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, 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:953
+#: git-send-email.perl:960
 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:971
+#: git-send-email.perl:978
 #, 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:983
+#: git-send-email.perl:990
 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:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, 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"
@@ -25908,16 +26861,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:1053
+#: git-send-email.perl:1060
 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:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "el camí CA «%s» no existeix"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25944,131 +26897,147 @@
 #. 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:1468
+#: git-send-email.perl:1475
 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:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Requereix resposta en enviar el correu"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "El servidor SMTP requerit no està correctament definit."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "El servidor no admet STARTTLS! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS ha fallat! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 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:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "S'ha produït un error en enviar %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Simulació d'enviament %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Enviat %s\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Simulació de correcte. El registre diu:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "Correcte. El registre diu: \n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Resultat: "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Resultat: correcte\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "no es pot obrir el fitxer %s"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, 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:1673
+#: git-send-email.perl:1680
 #, 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:1730
+#: git-send-email.perl:1737
 #, 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:1765
+#: git-send-email.perl:1772
 #, 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:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) no s'ha pogut executar «%s»"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, 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:1887
+#: git-send-email.perl:1894
 #, 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:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "no es pot enviar el missatge en 7 bits"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "codificació de transferència no vàlida"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, fuzzy, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"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
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "no s'ha pogut obrir %s: %s\n"
 
-#: git-send-email.perl:1969
-#, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s: el pedaç conté una línia més gran de 998 caràcters"
+#: git-send-email.perl:1979
+#, fuzzy, perl-format
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal: %s: %s\n"
+"avís: no s'han enviat pedaços\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, 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:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Esteu segur que voleu enviar %s? [y|N]: "
+
+
diff --git a/po/de.po b/po/de.po
index e1f4149..20d720b 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: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-19 14:01+0100\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-23 18:32+0200\n"
 "Last-Translator: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language-Team: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language: de\n"
@@ -17,15 +17,16 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 2.4.3\n"
 
 #: add-interactive.c:376
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Wie bitte (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "Index konnte nicht gelesen werden"
 
@@ -53,9 +54,9 @@
 msgid "could not stage '%s'"
 msgstr "Konnte '%s' nicht zum Commit vormerken."
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
-msgstr "Konnte Index nicht schreiben."
+msgstr "konnte Index nicht schreiben"
 
 #: add-interactive.c:706 git-add--interactive.perl:626
 #, c-format, perl-format
@@ -69,7 +70,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "Hinweis: %s ist nun unversioniert.\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -97,7 +98,7 @@
 
 #: add-interactive.c:868 git-add--interactive.perl:687
 msgid "Add untracked"
-msgstr "unversionierte Dateien hinzufügen"
+msgstr "Unversionierte Dateien hinzufügen"
 
 #: add-interactive.c:895 git-add--interactive.perl:623
 #, c-format, perl-format
@@ -209,12 +210,12 @@
 msgid "unstaged"
 msgstr "aus Staging-Area entfernt"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "Pfad"
@@ -760,7 +761,7 @@
 msgid "'git apply' failed"
 msgstr "'git apply' schlug fehl"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -769,43 +770,43 @@
 "\n"
 "Deaktivieren Sie diese Nachricht mit \"git config advice.%s false\""
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sHinweis: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 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:252
+#: advice.c:254
 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:254
+#: advice.c:256
 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:256
+#: advice.c:258
 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:258
+#: advice.c:260
 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:260
+#: advice.c:262
 #, 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:268
+#: advice.c:270
 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."
@@ -814,23 +815,40 @@
 "dann 'git add/rm <Datei>', um die Auflösung entsprechend zu markieren\n"
 "und zu committen."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Beende wegen unaufgelöstem Konflikt."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Bitte committen Sie Ihre Änderungen, bevor Sie mergen."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Beende wegen nicht abgeschlossenem Merge."
 
-#: advice.c:290
+#: 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 ""
+"Die folgenden Pfadspezifikationen entsprachen keinem geeigneten Pfad, aber\n"
+"entsprechen Index-Einträgen außerhalb des aktuellen partiellen Checkouts:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+"Deaktivieren oder verändern Sie die Regeln für partielle Checkouts, wenn Sie "
+"solche Einträge aktualisieren möchten."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -881,89 +899,82 @@
 msgid "unclosed quote"
 msgstr "Nicht geschlossene Anführungszeichen."
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "Nicht erkannte Whitespace-Option: '%s'"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "nicht erkannte Option zum Ignorieren von Whitespace: '%s'"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject und --3way können nicht gemeinsam verwendet werden."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached und --3way können nicht gemeinsam verwendet werden."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
-msgstr ""
-"Die Option --3way kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--3way kann nicht außerhalb eines Repositories verwendet werden"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
-msgstr ""
-"Die Option --index kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--index kann nicht außerhalb eines Repositories verwendet werden"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
-msgstr ""
-"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden."
+msgstr "--cached kann nicht außerhalb eines Repositories verwendet werden"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Kann regulären Ausdruck für Zeitstempel %s nicht verarbeiten"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "Ausführung des regulären Ausdrucks gab %d zurück. Eingabe: %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
-msgstr "Konnte keinen Dateinamen in Zeile %d des Patches finden."
+msgstr "konnte keinen Dateinamen in Zeile %d des Patches finden"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: ungültiges 'git-diff' - erwartete /dev/null, erhielt %s in Zeile "
 "%d"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: ungültiges 'git-diff' - Inkonsistenter neuer Dateiname in Zeile %d"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: ungültiges 'git-diff' - Inkonsistenter alter Dateiname in Zeile %d"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: ungültiges 'git-diff' - erwartete /dev/null in Zeile %d"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "Ungültiger Modus in Zeile %d: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "Inkonsistente Kopfzeilen %d und %d."
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -978,82 +989,82 @@
 "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
 "%d vorangestellte Teile des Pfades entfernt werden (Zeile %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen (Zeile "
 "%d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: unerwartete Zeile: %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "Patch-Fragment ohne Kopfbereich bei Zeile %d: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "neue Datei hängt von alten Inhalten ab"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "entfernte Datei hat noch Inhalte"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "fehlerhafter Patch bei Zeile %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "neue Datei %s hängt von alten Inhalten ab"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "entfernte Datei %s hat noch Inhalte"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** Warnung: Datei %s wird leer, aber nicht entfernt."
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "fehlerhafter Binär-Patch bei Zeile %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "nicht erkannter Binär-Patch bei Zeile %d"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "Patch mit nutzlosen Informationen bei Zeile %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "konnte symbolische Verknüpfung %s nicht lesen"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "konnte %s nicht öffnen oder lesen"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "Ungültiger Zeilenanfang: '%c'"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1061,12 +1072,12 @@
 msgstr[1] ""
 "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
 
-#: apply.c:3069
+#: apply.c:3068
 #, 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:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1075,25 +1086,25 @@
 "bei der Suche nach:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "keine Daten in Binär-Patch für '%s'"
 
-#: apply.c:3105
+#: apply.c:3104
 #, 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:3152
+#: apply.c:3151
 #, 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:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1101,427 +1112,433 @@
 "der Patch wird angewendet auf '%s' (%s), was nicht den aktuellen Inhalten\n"
 "entspricht"
 
-#: apply.c:3171
+#: apply.c:3170
 #, 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:3189
+#: apply.c:3188
 #, 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:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
 
-#: apply.c:3209
+#: apply.c:3208
 #, 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:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kann %s nicht auschecken"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "Fehler beim Lesen von %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "Pfad %s wurde umbenannt/gelöscht"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s ist nicht im Index"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s entspricht nicht der Version im Index"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
-"Dem Repository fehlt der notwendige Blob, um auf einen 3-Wege-Merge\n"
-"zurückzufallen."
+"Dem Repository fehlt der notwendige Blob, um einen 3-Wege-Merge "
+"durchzuführen."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "Falle zurück auf 3-Wege-Merge ...\n"
+msgid "Performing three-way merge...\n"
+msgstr "Führe 3-Wege-Merge durch...\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kann aktuelle Inhalte von '%s' nicht lesen"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "Fehler beim Zurückfallen auf 3-Wege-Merge...\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "Fehler beim Durchführen des 3-Wege-Merges...\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch auf '%s' mit Konflikten angewendet.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch auf '%s' sauber angewendet.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Ausweichen auf direkte Anwendung...\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "Lösch-Patch hinterlässt Dateiinhalte"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: falscher Typ"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s ist vom Typ %o, erwartete %o"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "Ungültiger Pfad '%s'"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s ist bereits bereitgestellt"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s existiert bereits im Arbeitsverzeichnis"
 
-#: apply.c:3974
+#: apply.c:3976
 #, 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:3979
+#: apply.c:3981
 #, 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:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: Patch konnte nicht angewendet werden"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Prüfe Patch %s ..."
 
-#: apply.c:4110
+#: apply.c:4112
 #, 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:4117
+#: apply.c:4119
 #, 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:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "SHA-1 Information fehlt oder ist unbrauchbar (%s)."
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "konnte %s nicht zum temporären Index hinzufügen"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "konnte temporären Index nicht nach %s schreiben"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "konnte %s nicht aus dem Index entfernen"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "fehlerhafter Patch für Submodul %s"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "konnte neu erstellte Datei '%s' nicht lesen"
 
-#: apply.c:4325
+#: apply.c:4327
 #, 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:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "Fehler beim Schreiben nach '%s'"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "schließe Datei '%s'"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s sauber angewendet"
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "interner Fehler"
 
-#: apply.c:4557
+#: apply.c:4559
 #, 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:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "kann '%s' nicht öffnen"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Patch-Bereich #%d sauber angewendet."
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Patch-Block #%d zurückgewiesen."
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Patch '%s' ausgelassen."
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "nicht erkannte Eingabe"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "Konnte Index-Datei nicht lesen"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kann Patch '%s' nicht öffnen: %s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, 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:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, 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:4944
+#: apply.c:4951
 #, 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:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "keine Änderungen im angegebenen Pfad anwenden"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "Änderungen nur im angegebenen Pfad anwenden"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "Anzahl"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
 "entfernen"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "hinzugefügte Zeilen des Patches ignorieren"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
-"anstatt der Anwendung des Patches, den \"diffstat\" für die Eingabe "
-"ausgegeben"
+"statt den Patch anzuwenden, den \"diffstat\" für die Eingabe ausgegeben"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
-"anstatt der Anwendung des Patches, eine Zusammenfassung für die Eingabe "
-"ausgeben"
+"statt den Patch anzuwenden, eine Zusammenfassung für die Eingabe ausgeben"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
-"anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann"
+"statt den Patch anzuwenden, anzeigen ob der Patch angewendet werden kann"
 
-#: apply.c:5009
+#: apply.c:5016
 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:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "neue Dateien mit `git add --intent-to-add` markieren"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 "Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "versuche 3-Wege-Merge, wenn der Patch nicht angewendet werden konnte"
+#: apply.c:5027
+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:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "einen temporären Index, basierend auf den integrierten Index-Informationen, "
 "erstellen"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "Pfade sind getrennt durch NUL Zeichen"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr ""
 "sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "Aktion"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "den Patch in umgekehrter Reihenfolge anwenden"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "keinen Kontext erwarten"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 "zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "sich überlappende Patch-Blöcke erlauben"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "erweiterte Ausgaben"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "Wurzelverzeichnis"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
 
@@ -1588,142 +1605,142 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <Repository> [--exec <Programm>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "Kann %s nicht lesen."
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "Konnte '%s' nicht lesen"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
-msgstr "Keine solche Referenz: %.*s"
+msgstr "Referenz nicht gefunden: %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "Kein gültiger Objektname: %s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "Kein Tree-Objekt: %s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "Aktuelles Arbeitsverzeichnis ist unversioniert."
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Datei nicht gefunden: %s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "Keine reguläre Datei: %s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "Format"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "Archivformat"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "Präfix"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "Datei"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "unversionierte Datei zum Archiv hinzufügen"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "das Archiv in diese Datei schreiben"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr ".gitattributes aus dem Arbeitsverzeichnis lesen"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "archivierte Dateien in der Standard-Fehlerausgabe ausgeben"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "Komprimierungsgrad setzen"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "unterstützte Archivformate auflisten"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "Repository"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "Archiv vom Remote-Repository <Repository> abrufen"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "Programm"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Unerwartete Option --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
-msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden."
+msgstr "Die Option --exec kann nur zusammen mit --remote verwendet werden"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Unerwartete Option --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr ""
-"Die Optionen --add-file und --remote können nicht gemeinsam verwendet werden."
+"Die Optionen --add-file und --remote können nicht gemeinsam verwendet werden"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Unbekanntes Archivformat '%s'"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument für Format '%s' nicht unterstützt: -%d"
@@ -1733,12 +1750,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s ist kein gültiger Attributname"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s nicht erlaubt: %s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1821,12 +1838,12 @@
 msgid "a %s revision is needed"
 msgstr "ein %s Commit wird benötigt"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "konnte Datei '%s' nicht erstellen"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "Konnte Datei '%s' nicht lesen"
@@ -1844,10 +1861,10 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Kein testbarer Commit gefunden.\n"
-"Vielleicht starteten Sie mit falschen Pfad-Parametern?\n"
+"Vielleicht starteten Sie mit schlechten Pfad-Argumenten?\n"
 
 #: bisect.c:1095
 #, c-format
@@ -1866,43 +1883,43 @@
 msgstr[0] "binäre Suche: danach noch %d Commit zum Testen übrig %s\n"
 msgstr[1] "binäre Suche: danach noch %d Commits zum Testen übrig %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents und --reverse funktionieren gemeinsam nicht."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr ""
 "kann --contents nicht mit endgültigem Namen des Commit-Objektes benutzen"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse und --first-parent zusammen erfordern die Angabe eines "
 "endgültigen\n"
 "Commits"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse und --first-parent zusammen erfordern einen Bereich entlang der\n"
 "\"first-parent\"-Kette"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
-msgstr "Pfad %s nicht in %s"
+msgstr "Pfad %s nicht in %s gefunden"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "kann Blob %s für Pfad '%s' nicht lesen"
@@ -2039,12 +2056,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Ungültiger Branchpunkt: '%s'"
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' ist bereits in '%s' ausgecheckt"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD des Arbeitsverzeichnisses %s ist nicht aktualisiert."
@@ -2069,8 +2086,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "Konnte '%s' nicht öffnen"
@@ -2113,279 +2130,292 @@
 msgid "pack-objects died"
 msgstr "Erstellung der Paketobjekte abgebrochen"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "\"rev-list\" abgebrochen"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "nicht unterstützte Paket-Version %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "kann Paket-Version %d nicht mit Algorithmus %s schreiben"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "nicht erkanntes Argument: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Erstellung eines leeren Pakets zurückgewiesen."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "kann '%s' nicht erstellen"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "Erstellung der Paketindexdatei abgebrochen"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "abschließende Chunk-ID erscheint eher als erwartet"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "unzulässige(r) Chunk-Offset(s) %<PRIx64> und %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "doppelte Chunk-ID %<PRIx32> gefunden"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "letzter Chunk hat nicht-Null ID %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "Ungültiger Farbwert: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "ungültige Hash-Version"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
-msgstr "Commit-Graph-Datei ist zu klein."
+msgstr "Commit-Graph-Datei ist zu klein"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "Commit-Graph-Signatur %X stimmt nicht mit Signatur %X überein."
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "Commit-Graph-Version %X stimmt nicht mit Version %X überein."
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "Hash-Version des Commit-Graph %X stimmt nicht mit Version %X überein."
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "Commit-Graph-Datei ist zu klein, um %u Chunks zu enthalten"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "Unzulässiger Commit-Graph Chunk-Offset %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "Commit-Graph Chunk-Id %08x kommt mehrfach vor."
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "Commit-Graph hat keinen Basis-Graph-Chunk"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "Commit-Graph Verkettung stimmt nicht überein."
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "Ungültige Commit-Graph Verkettung: Zeile '%s' ist kein Hash"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "Konnte nicht alle Commit-Graph-Dateien finden."
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "Ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt."
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "Konnte Commit %s nicht finden."
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+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:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "Konnte Commit '%s' nicht parsen."
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "Konnte Art von Objekt '%s' nicht bestimmen."
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "Lade bekannte Commits in Commit-Graph"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "Erweitere erreichbare Commits in Commit-Graph"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "Lösche Commit-Markierungen in Commit-Graph"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "Topologische Ebenen des Commit-Graph werden berechnet"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "Commit-Graph Generationsnummern berechnen"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Berechnung der Bloom-Filter für veränderte Pfade des Commits"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Sammle referenzierte Commits"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Suche Commits für Commit-Graph in %d Paket"
 msgstr[1] "Suche Commits für Commit-Graph in %d Paketen"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "Fehler beim Hinzufügen von Paket %s."
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "Fehler beim Öffnen des Index für %s."
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Suche Commits für Commit-Graph in gepackten Objekten"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "Suche zusätzliche Ränder in Commit-Graph"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "Fehler beim Schreiben der korrekten Anzahl von Basis-Graph-IDs."
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "konnte temporäre Graphen-Schicht nicht erstellen"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "konnte geteilte Zugriffsberechtigungen für '%s' nicht ändern"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Schreibe Commit-Graph in %d Durchgang"
 msgstr[1] "Schreibe Commit-Graph in %d Durchgängen"
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "konnte Commit-Graph Chain-Datei nicht öffnen"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "konnte Basis-Commit-Graph-Datei nicht umbenennen"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "konnte temporäre Commit-Graph-Datei nicht umbenennen"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Durchsuche zusammengeführte Commits"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "Zusammenführen von Commit-Graph"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "versuche einen Commit-Graph zu schreiben, aber 'core.commitGraph' ist "
 "deaktiviert"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "zu viele Commits zum Schreiben des Graphen"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "die Commit-Graph-Datei hat eine falsche Prüfsumme und ist wahrscheinlich "
 "beschädigt"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "Commit-Graph hat fehlerhafte OID-Reihenfolge: %s dann %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "Commit-Graph hat fehlerhaften Fanout-Wert: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "konnte Commit %s von Commit-Graph nicht parsen"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "Commit in Commit-Graph überprüfen"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "Fehler beim Parsen des Commits %s von Objekt-Datenbank für Commit-Graph"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID des Wurzelverzeichnisses für Commit %s in Commit-Graph ist %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "Commit-Graph Vorgänger-Liste für Commit %s ist zu lang"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "Commit-Graph-Vorgänger für %s ist %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "Commit-Graph Vorgänger-Liste für Commit %s endet zu früh"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2393,7 +2423,7 @@
 "Commit-Graph hat Generationsnummer null für Commit %s, aber sonst ungleich "
 "null"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2401,19 +2431,19 @@
 "Commit-Graph hat Generationsnummer ungleich null für Commit %s, aber sonst "
 "null"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "Commit-Graph Erstellung für Commit %s ist %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "Commit-Graph Erstellung für Commit %s ist %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "Commit-Datum für Commit %s in Commit-Graph ist %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "konnte %s nicht parsen"
@@ -2444,28 +2474,28 @@
 "Sie können diese Meldung unterdrücken, indem Sie\n"
 "\"git config advice.graftFileDeprecated false\" ausführen."
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Commit %s hat keine GPG-Signatur."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2481,7 +2511,7 @@
 msgid "memory exhausted"
 msgstr "Speicher verbraucht"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2497,306 +2527,350 @@
 "überschritten.\n"
 "Das könnte durch zirkulare Includes entstanden sein."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "Konnte Include-Pfad '%s' nicht erweitern."
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "Relative Includes von Konfigurationen müssen aus Dateien kommen."
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "Bedingungen für das Einbinden von Konfigurationen aus relativen Pfaden "
 "müssen\n"
 "aus Dateien kommen."
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "ungültiges Konfigurationsformat: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "fehlender Name der Umgebungsvariable für Konfiguration '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "fehlende Umgebungsvariable '%s' für Konfiguration '%.*s'"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "Schlüssel enthält keine Sektion: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "Schlüssel enthält keinen Variablennamen: %s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "Ungültiger Schlüssel: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "Ungültiger Schlüssel (neue Zeile): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "leerer Konfigurationsschlüssel"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "Fehlerhafter Konfigurationsparameter: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "Fehlerhaftes Format in %s"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "falsche Zählung in %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "zu viele Einträge in %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "fehlender Konfigurationsschlüssel %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "fehlender Konfigurationswert %s"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "Ungültige Konfigurationszeile %d in Blob %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "Ungültige Konfigurationszeile %d in Datei %s"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "Ungültige Konfigurationszeile %d in Standard-Eingabe"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "Ungültige Konfigurationszeile %d in Submodul-Blob %s"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "Ungültige Konfigurationszeile %d in Kommandozeile %s"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "Ungültige Konfigurationszeile %d in %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "Außerhalb des Bereichs"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "Ungültige Einheit"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s': %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Blob %s: %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Datei %s: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Standard-Eingabe: "
 "%s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Submodul-Blob %s: "
 "%s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Befehlszeile %s: "
 "%s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s: %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "ungültiger boolescher Konfigurationswert '%s' für '%s'"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' ist kein gültiger Zeitstempel für '%s'"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "Länge für Abkürzung von Commit-IDs außerhalb des Bereichs: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "ungültiger zlib Komprimierungsgrad %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar sollte nur ein Zeichen sein"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "Ungültiger Modus für Objekterstellung: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "Ungültiger Wert für %s."
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "Ungültiger Wert für %s: %s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "Muss einer von diesen sein: nothing, matching, simple, upstream, current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "ungültiger Komprimierungsgrad (%d) für Paketierung"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "Konnte Blob-Objekt '%s' für Konfiguration nicht laden."
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "Referenz '%s' zeigt auf keinen Blob."
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "Konnte Blob '%s' für Konfiguration nicht auflösen."
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "Fehler beim Parsen von %s."
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr ""
 "Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Ungültiger %s: '%s'"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "Der Wert '%d' von splitIndex.maxPercentChange sollte zwischen 0 und 100 "
 "liegen."
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 "Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
 "nicht parsen."
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "Ungültiger Sektionsname '%s'"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s hat mehrere Werte"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "Konnte neue Konfigurationsdatei '%s' nicht schreiben."
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "Konnte Konfigurationsdatei '%s' nicht sperren."
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "Öffne %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "Ungültiges Muster: %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "Ungültige Konfigurationsdatei %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat auf %s fehlgeschlagen"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "mmap für '%s' fehlgeschlagen"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod auf %s fehlgeschlagen"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "Konnte Konfigurationsdatei %s nicht schreiben."
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "Konnte '%s' nicht zu '%s' setzen."
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "Konnte '%s' nicht aufheben."
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "Ungültiger Sektionsname: %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "Fehlender Wert für '%s'"
@@ -2861,45 +2935,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "Protokollfehler: unerwartetes '%s'"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "unbekanntes Objekt-Format '%s' vom Server angegeben"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "ungültige ls-refs Antwort: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "Flush nach Auflistung der Referenzen erwartet"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "Antwort-Endpaket nach Auflistung der Referenzen erwartet"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "Protokoll '%s' wird nicht unterstützt"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "kann SO_KEEPALIVE bei Socket nicht setzen"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Suche nach %s ..."
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "Fehler bei Suche nach %s (Port %s) (%s)."
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2908,7 +2982,7 @@
 "Fertig.\n"
 "Verbinde nach %s (Port %s) ... "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2918,62 +2992,65 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "Fertig."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "Fehler bei der Suche nach %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "Unbekannter Port %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "Merkwürdigen Hostnamen '%s' blockiert."
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "Merkwürdigen Port '%s' blockiert."
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "Kann Proxy %s nicht starten."
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
-msgstr ""
-"Kein Pfad angegeben; siehe 'git help pull' für eine gültige URL-Syntax."
+msgstr "kein Pfad angegeben; siehe 'git help pull' für eine gültige URL-Syntax"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "Zeilenumbruch ist in git:// Hosts und Repository-Pfaden verboten"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
-msgstr "SSH-Variante 'simple' unterstützt kein -4."
+msgstr "SSH-Variante 'simple' unterstützt kein -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
-msgstr "SSH-Variante 'simple' unterstützt kein -6."
+msgstr "SSH-Variante 'simple' unterstützt kein -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
-msgstr "SSH-Variante 'simple' unterstützt nicht das Setzen eines Ports."
+msgstr "SSH-Variante 'simple' unterstützt nicht das Setzen eines Ports"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
-msgstr "Merkwürdigen Pfadnamen '%s' blockiert."
+msgstr "Merkwürdigen Pfadnamen '%s' blockiert"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
-msgstr "Kann Prozess nicht starten."
+msgstr "kann Prozess nicht starten"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Prüfe Konnektivität"
 
@@ -2989,17 +3066,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "Fehler beim Schließen von rev-lists Standard-Eingabe"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "Unerlaubte crlf_action %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
-msgstr "CRLF würde in %s durch LF ersetzt werden."
+msgstr "CRLF würde in %s durch LF ersetzt werden"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -3009,12 +3086,12 @@
 "Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis "
 "behalten."
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
-msgstr "LF würde in %s durch CRLF ersetzt werden."
+msgstr "LF würde in %s durch CRLF ersetzt werden"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -3024,12 +3101,12 @@
 "Die Datei wird ihre ursprünglichen Zeilenenden im Arbeitsverzeichnis "
 "behalten."
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
-msgstr "BOM ist in '%s' unzulässig, wenn als %s codiert."
+msgstr "BOM ist in '%s' unzulässig, wenn als %s codiert"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -3038,12 +3115,12 @@
 "Die Datei '%s' enthält ein Byte-Order-Mark (BOM). Bitte benutzen Sie\n"
 "UTF-%.*s als Codierung im Arbeitsverzeichnis."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
-msgstr "BOM ist erforderlich in '%s', wenn als %s codiert."
+msgstr "BOM ist erforderlich in '%s', wenn als %s codiert"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -3053,70 +3130,71 @@
 "oder UTF-%sLE (abhängig von der Byte-Reihenfolge) als Codierung im\n"
 "Arbeitsverzeichnis."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
-msgstr "Fehler beim Codieren von '%s' von %s nach %s."
+msgstr "Fehler beim Codieren von '%s' von %s nach %s"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
-msgstr "Die Codierung '%s' von %s nach %s und zurück ist nicht dasselbe."
+msgstr "Codierung von '%s' von %s nach %s und zurück ist nicht dasselbe"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
-msgstr "Kann externen Filter '%s' nicht starten."
+msgstr "kann externen Filter '%s' nicht starten"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
-msgstr "Kann Eingaben nicht an externen Filter '%s' übergeben."
+msgstr "kann Eingaben nicht an externen Filter '%s' übergeben"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
-msgstr "Externer Filter '%s' fehlgeschlagen %d"
+msgstr "externer Filter '%s' fehlgeschlagen %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
-msgstr "Lesen von externem Filter '%s' fehlgeschlagen."
+msgstr "Lesen von externem Filter '%s' fehlgeschlagen"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
-msgstr "Externer Filter '%s' fehlgeschlagen."
+msgstr "externer Filter '%s' fehlgeschlagen"
+
+#: convert.c:826
+msgid "unexpected filter type"
+msgstr "unerwartete Filterart"
 
 #: convert.c:837
-msgid "unexpected filter type"
-msgstr "Unerwartete Filterart."
-
-#: convert.c:848
 msgid "path name too long for external filter"
-msgstr "Pfadname zu lang für externen Filter."
+msgstr "Pfadname zu lang für externen Filter"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr ""
-"Externer Filter '%s' nicht mehr verfügbar. Nicht alle Pfade wurden gefiltert."
+"externer Filter '%s' nicht mehr verfügbar, obwohl nicht alle Pfade gefiltert "
+"wurden"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
-msgstr "true/false sind keine gültigen Codierungen im Arbeitsverzeichnis."
+msgstr "true/false sind keine gültigen Codierungen im Arbeitsverzeichnis"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
-msgstr "%s: clean-Filter '%s' fehlgeschlagen."
+msgstr "%s: clean-Filter '%s' fehlgeschlagen"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
-msgstr "%s: smudge-Filter '%s' fehlgeschlagen."
+msgstr "%s: smudge-Filter '%s' fehlgeschlagen"
 
 #: credential.c:96
 #, c-format
@@ -3241,23 +3319,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "%d Delta-Islands markiert, fertig.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "unbekannter Wert für --diff-merges: %s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base funktioniert nicht mit Bereichen"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base funktioniert nur mit Commits"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "konnte HEAD nicht bekommen"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "keine Merge-Basis gefunden"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "mehrere Merge-Basen gefunden"
 
@@ -3323,36 +3406,36 @@
 "Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "externes Diff-Programm unerwartet beendet, angehalten bei %s"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 "--name-only, --name-status, --check und -s schließen sich gegenseitig aus"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S und --find-object schließen sich gegenseitig aus"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow erfordert genau eine Pfadspezifikation"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "Ungültiger --stat Wert: %s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s erwartet einen numerischen Wert."
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3361,42 +3444,42 @@
 "Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "unbekannte Änderungsklasse '%c' in --diff-filter=%s"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "unbekannter Wert nach ws-error-highlight=%.*s"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "konnte '%s' nicht auflösen"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s erwartet die Form <n>/<m>"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s erwartet ein Zeichen, '%s' bekommen"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "ungültiges --color-moved Argument: %s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "ungültiger Modus '%s' in --color-moved-ws"
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3404,157 +3487,157 @@
 "Option diff-algorithm akzeptiert: \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "ungültiges Argument für %s"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "ungültiger regulärer Ausdruck für -I gegeben: '%s'"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "ungültiges --word-diff Argument: %s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Diff-Optionen zu Ausgabeformaten"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "Patch erzeugen"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "Ausgabe der Unterschiede unterdrücken"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "Unterschiede mit <n> Zeilen des Kontextes erstellen"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "Unterschiede im Rohformat erstellen"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "Synonym für '-p --raw'"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "Synonym für '-p --stat'"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "maschinenlesbare Ausgabe von --stat"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "nur die letzte Zeile von --stat ausgeben"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<Parameter1,Parameter2>..."
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "die Verteilung des relativen Umfangs der Änderungen für jedes "
 "Unterverzeichnis ausgeben"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "Synonym für --dirstat=cumulative"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "Synonym für --dirstat=files,Parameter1,Parameter2..."
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "warnen, wenn Änderungen Konfliktmarker oder Whitespace-Fehler einbringen"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "gekürzte Zusammenfassung, wie z.B. Erstellungen, Umbenennungen und "
 "Änderungen der Datei-Rechte"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "nur Dateinamen der geänderten Dateien anzeigen"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "nur Dateinamen und Status der geänderten Dateien anzeigen"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<Breite>[,<Namens-Breite>[,<Anzahl>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "Zusammenfassung der Unterschiede erzeugen"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<Breite>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "Zusammenfassung der Unterschiede mit gegebener Breite erzeugen"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "Zusammenfassung der Unterschiede mit gegebener Namens-Breite erzeugen"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "Zusammenfassung der Unterschiede mit gegebener Graph-Breite erzeugen"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<Anzahl>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "Zusammenfassung der Unterschiede mit begrenzten Zeilen erzeugen"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "kompakte Zusammenstellung in Zusammenfassung der Unterschiede erzeugen"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "eine binäre Differenz ausgeben, dass angewendet werden kann"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "vollständige Objekt-Namen in den \"index\"-Zeilen anzeigen"
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "farbige Unterschiede anzeigen"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<Art>"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3562,7 +3645,7 @@
 "Whitespace-Fehler in den Zeilen 'context', 'old' oder 'new' bei den "
 "Unterschieden hervorheben"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3570,91 +3653,91 @@
 "die Pfadnamen nicht verschleiern und NUL-Zeichen als Schlusszeichen in "
 "Ausgabefeldern bei --raw oder --numstat nutzen"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<Präfix>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "den gegebenen Quell-Präfix statt \"a/\" anzeigen"
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "den gegebenen Ziel-Präfix statt \"b/\" anzeigen"
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "einen zusätzlichen Präfix bei jeder Ausgabezeile voranstellen"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "keine Quell- oder Ziel-Präfixe anzeigen"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "Kontext zwischen Unterschied-Blöcken bis zur angegebenen Anzahl von Zeilen "
 "anzeigen"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<Zeichen>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "das Zeichen festlegen, das eine neue Zeile kennzeichnet (statt '+')"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "das Zeichen festlegen, das eine alte Zeile kennzeichnet (statt '-')"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "das Zeichen festlegen, das den Kontext kennzeichnet (statt ' ')"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Diff-Optionen zur Umbenennung"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "teile komplette Rewrite-Änderungen in Änderungen mit \"löschen\" und "
 "\"erstellen\""
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "Umbenennungen erkennen"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "Preimage für Löschungen weglassen"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "Kopien erkennen"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "ungeänderte Dateien als Quelle zum Finden von Kopien nutzen"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "Erkennung von Umbenennungen deaktivieren"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "leere Blobs als Quelle von Umbenennungen nutzen"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "Auflistung der Historie einer Datei nach Umbenennung fortführen"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3662,164 +3745,164 @@
 "Erkennung von Umbenennungen und Kopien verhindern, wenn die Anzahl der Ziele "
 "für Umbenennungen und Kopien das gegebene Limit überschreitet"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Diff Algorithmus-Optionen"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "die kleinstmöglichen Änderungen erzeugen"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "Whitespace-Änderungen beim Vergleich von Zeilen ignorieren"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "Änderungen bei der Anzahl von Whitespace ignorieren"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "Whitespace-Änderungen am Zeilenende ignorieren"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "den Zeilenumbruch am Ende der Zeile ignorieren"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "Änderungen in leeren Zeilen ignorieren"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<Regex>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr ""
 "Änderungen ignorieren, bei denen alle Zeilen mit <Regex> übereinstimmen"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "Heuristik, um Grenzen der Änderungsblöcke für bessere Lesbarkeit zu "
 "verschieben"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "Änderungen durch Nutzung des Algorithmus \"Patience Diff\" erzeugen"
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "Änderungen durch Nutzung des Algorithmus \"Histogram Diff\" erzeugen"
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<Algorithmus>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "einen Algorithmus für Änderungen wählen"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<Text>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "Änderungen durch Nutzung des Algorithmus \"Anchored Diff\" erzeugen"
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<Modus>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "Wort-Änderungen zeigen, nutze <Modus>, um Wörter abzugrenzen"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "<Regex> nutzen, um zu entscheiden, was ein Wort ist"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "entsprechend wie --word-diff=color --word-diff-regex=<Regex>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "verschobene Codezeilen sind andersfarbig"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "wie Whitespaces in --color-moved ignoriert werden"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Andere Diff-Optionen"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "wenn vom Unterverzeichnis aufgerufen, schließe Änderungen außerhalb aus und "
 "zeige relative Pfade an"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "alle Dateien als Text behandeln"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "die beiden Eingaben vertauschen und die Änderungen umkehren"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 "mit Exit-Status 1 beenden, wenn Änderungen vorhanden sind, andernfalls mit 0"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "alle Ausgaben vom Programm deaktivieren"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "erlaube die Ausführung eines externes Programms für Änderungen"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "Führe externe Text-Konvertierungsfilter aus, wenn binäre Dateien vergleicht "
 "werden"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<wann>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 "Änderungen in Submodulen während der Erstellung der Unterschiede ignorieren"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<Format>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "angeben, wie Unterschiede in Submodulen gezeigt werden"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "'git add -N' Einträge vom Index verstecken"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "'git add -N' Einträge im Index als echt behandeln"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<Zeichenkette>"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3827,7 +3910,7 @@
 "nach Unterschieden suchen, welche die Anzahl des Vorkommens der angegebenen "
 "Zeichenkette verändern"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3835,25 +3918,37 @@
 "nach Unterschieden suchen, welche die Anzahl des Vorkommens des angegebenen "
 "regulären Ausdrucks verändern"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "alle Änderungen im Changeset mit -S oder -G anzeigen"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "<Zeichenkette> bei -S als erweiterten POSIX regulären Ausdruck behandeln"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr ""
 "die Reihenfolge kontrollieren, in der die Dateien in der Ausgabe erscheinen"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<Pfad>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "die Änderung des angegebenen Pfades zuerst anzeigen"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "überspringe die Ausgabe bis zum angegebenen Pfad"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<Objekt-ID>"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3861,33 +3956,33 @@
 "nach Unterschieden suchen, welche die Anzahl des Vorkommens des angegebenen "
 "Objektes verändern"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "Dateien anhand der Art der Änderung wählen"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<Datei>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Ausgabe zu einer bestimmten Datei"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "ungenaue Erkennung für Umbenennungen wurde aufgrund zu vieler Dateien\n"
 "übersprungen."
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr "nur Kopien von geänderten Pfaden, aufgrund zu vieler Dateien, gefunden"
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3900,10 +3995,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "Fehler beim Lesen der Reihenfolgedatei '%s'"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Führe Erkennung für ungenaue Umbenennung aus"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Pfad '%s' nicht im Diff gefunden"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3930,37 +4030,37 @@
 msgid "disabling cone pattern matching"
 msgstr "deaktiviere Cone-Muster-Übereinstimmung"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "kann %s nicht als exclude-Filter benutzen"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "konnte Verzeichnis '%s' nicht öffnen"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "Fehler beim Sammeln von Namen und Informationen zum Kernel"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "Cache für unversionierte Dateien ist auf diesem System oder\n"
 "für dieses Verzeichnis deaktiviert"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "Index-Datei in Repository %s beschädigt"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "Konnte Verzeichnisse für '%s' nicht erstellen"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "Konnte Git-Verzeichnis nicht von '%s' nach '%s' migrieren"
@@ -3970,21 +4070,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "Hinweis: Warte auf das Schließen der Datei durch Ihren Editor...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Filtere Inhalt"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "konnte Datei '%s' nicht lesen"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "ungültiger Git-Namespace-Pfad \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "konnte GIT_DIR nicht zu '%s' setzen"
@@ -3994,259 +4094,273 @@
 msgid "too many args to run %s"
 msgstr "zu viele Argumente angegeben, um %s auszuführen"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: erwartete shallow-Liste"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: erwartete ein Flush-Paket nach der shallow-Liste"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: ACK/NAK erwartet, Flush-Paket bekommen"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: ACK/NAK erwartet, '%s' bekommen"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "konnte nicht zum Remote schreiben"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc benötigt multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ungültige shallow-Zeile: %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ungültige unshallow-Zeile: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "Objekt nicht gefunden: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "Fehler in Objekt: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "kein shallow-Objekt gefunden: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "shallow/unshallow erwartet, %s bekommen"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "%s %d %s bekommen"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "ungültiger Commit %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "gebe auf"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "fertig"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s (%d) %s bekommen"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Markiere %s als vollständig"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "habe %s (%s) bereits"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: Fehler beim Starten des sideband demultiplexer"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "Protokollfehler: ungültiger Pack-Header"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: konnte %s nicht starten"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: ungültige index-pack Ausgabe"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s fehlgeschlagen"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "Fehler in sideband demultiplexer"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Server-Version ist %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "Server unterstützt %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "Server unterstützt keine shallow-Clients"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "Server unterstützt kein --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "Server unterstützt kein --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "Server unterstützt kein --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "Server unterstützt das Objekt-Format dieses Repositories nicht"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "keine gemeinsamen Commits"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr ""
+"Quelle ist ein Repository mit unvollständiger Historie (shallow), Klonen "
+"zurückgewiesen."
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: Abholen fehlgeschlagen."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "Algorithmen stimmen nicht überein: Client %s; Server %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "der Server unterstützt Algorithmus '%s' nicht"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "Server unterstützt keine shallow-Anfragen"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "Server unterstützt Filter"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "konnte Anfrage nicht zum Remote schreiben"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "Fehler beim Lesen von Sektionskopf '%s'."
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' erwartet, '%s' empfangen"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "Unerwartete Acknowledgment-Zeile: '%s'"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "Fehler beim Verarbeiten von ACKS: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "Erwartete Versand einer Packdatei nach 'ready'."
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "Erwartete keinen Versand einer anderen Sektion ohne 'ready'."
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "Fehler beim Verarbeiten von Shallow-Informationen: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref erwartet, '%s' bekommen"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "unerwartetes wanted-ref: '%s'"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "Fehler beim Verarbeiten von wanted-refs: %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: Antwort-Endpaket erwartet"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "kein übereinstimmender Remote-Branch"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "unerwartetes 'ready' von Remote-Repository"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
-msgstr "keine solche Remote-Referenz %s"
+msgstr "Remote-Referenz %s nicht gefunden"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Der Server lehnt Anfrage nach nicht angebotenem Objekt %s ab."
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "konnte temporäre Datei nicht erstellen"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "Fehler beim Schreiben der losgelösten Signatur nach '%s'"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg beim Signieren der Daten fehlgeschlagen"
 
@@ -4255,7 +4369,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "Ignoriere ungültige Farbe '%.*s' in log.graphColors"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4263,18 +4377,18 @@
 "Angegebenes Muster enthält NULL Byte (über -f <Datei>). Das wird nur mit -"
 "Punter PCRE v2 unterstützt."
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': konnte %s nicht lesen"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "Konnte '%s' nicht lesen"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': read() zu kurz"
@@ -4344,7 +4458,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "Allgemeine Git-Befehle, verwendet in verschiedenen Situationen:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "Nicht unterstützte Art zur Befehlsauflistung '%s'."
@@ -4500,49 +4614,54 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "Name besteht nur aus nicht erlaubten Zeichen: %s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "Ungültiges Datumsformat: %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "'tree:<Tiefe>' erwartet"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "Keine Unterstützung für sparse:path Filter mehr"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "'%s' für 'object:type=<Typ>' ist kein gültiger Objekttyp"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "Ungültige filter-spec '%s'"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "Zeichen in sub-filter-spec muss maskiert werden: '%c'"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "erwartete etwas nach 'combine:'"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "mehrere filter-specs können nicht kombiniert werden"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 "Repository-Format konnte nicht erweitert werden, um partielles Klonen zu "
 "unterstützen"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "konnte nicht auf partiellen Blob '%s' zugreifen"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "konnte partielle Filter-Daten in %s nicht parsen"
@@ -4558,7 +4677,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "Eintrag '%s' im Tree-Objekt %s hat Blob-Modus, aber ist kein Blob"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "Konnte Root-Tree-Objekt für Commit %s nicht laden."
@@ -4588,11 +4707,286 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "Konnte '%s.lock' nicht erstellen: %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "ungültiger Wert '%s' für lsrefs.unborn"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "erwartete Flush nach Argumenten für die Auflistung der Referenzen"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "angeführtes CRLF entdeckt"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr "ungültige Aktion '%s' für '%s'"
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Fehler beim Merge von Submodul %s (Commits nicht vorhanden)."
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr "Fehler beim Merge von Submodul %s (Commits folgen keiner Merge-Basis)"
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Hinweis: Spule Submodul %s vor zu %s"
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Fehler beim Zusammenführen von Submodul %s"
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Fehler beim Zusammenführen von Submodul %s, aber es ist eine mögliche "
+"Auflösung des Merges vorhanden:\n"
+"%s\n"
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Falls das korrekt ist, fügen Sie es einfach der Staging-Area, zum Beispiel "
+"mit:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"hinzu, um diesen Vorschlag zu akzeptieren.\n"
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Fehler beim Zusammenführen von Submodul %s, aber mehrere mögliche Merges "
+"sind vorhanden:\n"
+"%s"
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr "Fehler bei Ausführung des internen Merges"
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "Konnte %s nicht zur Datenbank hinzufügen"
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr "automatischer Merge von %s"
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"KONFLIKT (implizite Verzeichnisumbenennung): Existierende Datei/Pfad bei %s "
+"im\n"
+"Weg von impliziter Verzeichnisumbenennung, die versucht, einen oder mehrere\n"
+"Pfade dahin zu setzen: %s."
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"KONFLIKT (implizite Verzeichnisumbenennung): Kann nicht mehr als ein Pfad "
+"zu\n"
+"%s mappen; implizite Verzeichnisumbenennungen versuchten diese Pfade dahin\n"
+"zu setzen: %s"
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"KONFLIKT (Aufteilung Verzeichnisumbenennung): Unklar, wo %s zu platzieren "
+"ist; es wurde zu mehreren anderen Verzeichnissen umbenannt, ohne dass ein "
+"Ziel die Mehrheit der Dateien erhält."
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"WARNUNG: Vermeide Umbenennung %s -> %s von %s, weil %s selbst umbenannt "
+"wurde."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Pfad aktualisiert: %s hinzugefügt in %s innerhalb eines Verzeichnisses, das "
+"umbenannt wurde in %s; Verschiebe es nach %s."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Pfad aktualisiert: %s umbenannt nach %s in %s, innerhalb eines "
+"Verzeichnisses, das umbenannt wurde in %s; Verschiebe es nach %s."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"KONFLIKT (Speicherort): %s hinzugefügt in %s innerhalb eines Verzeichnisses, "
+"das umbenannt wurde in %s, es sollte vielleicht nach %s verschoben werden."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"KONFLIKT (Speicherort): %s umbenannt nach %s in %s, innerhalb eines "
+"Verzeichnisses, das umbenannt wurde in %s, es sollte vielleicht nach %s "
+"verschoben werden."
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"KONFLIKT (umbenennen/umbenennen): %s zu %s in %s umbenannt und zu %s in %s."
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"KONFLIKT (Umbenennung in Kollision beteiligt): Umbenennung von %s -> %s hat "
+"Inhaltskonflikte UND kollidiert mit einem anderen Pfad; dies kann zu "
+"verschachtelten Konfliktmarkierungen führen."
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"KONFLIKT (umbenennen/löschen): %s zu %s in %s umbenannt, aber in %s gelöscht."
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "kann Objekt %s nicht lesen"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "Objekt %s ist kein Blob"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"KONFLIKT (Datei/Verzeichnis): Verzeichnis im Weg von %s aus %s; stattdessen "
+"nach %s verschieben."
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"KONFLIKT (verschiedene Typen): %s hatte unterschiedliche Typen auf jeder "
+"Seite; beide wurden umbenannt, damit jeder irgendwo aufgezeichnet werden "
+"kann."
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"KONFLIKT (verschiedene Typen): %s hatte unterschiedliche Typen auf jeder "
+"Seite; eines der beiden wurde umbenannt, damit jeder irgendwo aufgezeichnet "
+"werden kann."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "Inhalt"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "hinzufügen/hinzufügen"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "Submodul"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"KONFLIKT (ändern/löschen): %s gelöscht in %s und geändert in %s. Stand %s "
+"von %s wurde im Arbeitsbereich gelassen."
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+"Hinweis: %s nicht aktuell und konfliktbehaftete Version während des "
+"Auscheckens; alte Kopie zu %s umbenannt"
+
+#. 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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr ""
+"Sammeln von Merge-Informationen für die Referenzen %s, %s, %s fehlgeschlagen"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4602,10 +4996,9 @@
 "überschrieben werden:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Bereits aktuell!"
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Bereits aktuell."
 
 #: merge-recursive.c:356
 msgid "(bad commit)\n"
@@ -4623,135 +5016,89 @@
 "add_cacheinfo zur Aktualisierung für Pfad '%s' fehlgeschlagen;\n"
 "Merge wird abgebrochen."
 
-#: merge-recursive.c:874
+#: merge-recursive.c:876
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "Fehler beim Erstellen des Pfades '%s'%s"
 
-#: merge-recursive.c:885
+#: merge-recursive.c:887
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Entferne %s, um Platz für Unterverzeichnis zu schaffen\n"
 
-#: merge-recursive.c:899 merge-recursive.c:918
+#: merge-recursive.c:901 merge-recursive.c:920
 msgid ": perhaps a D/F conflict?"
 msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?"
 
-#: merge-recursive.c:908
+#: merge-recursive.c:910
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "verweigere, da unversionierte Dateien in '%s' verloren gehen würden"
 
-#: merge-recursive.c:949 builtin/cat-file.c:41
+#: merge-recursive.c:951 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "kann Objekt %s '%s' nicht lesen"
 
-#: merge-recursive.c:954
+#: merge-recursive.c:956
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "Blob erwartet für %s '%s'"
 
-#: merge-recursive.c:979
+#: merge-recursive.c:981
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "Fehler beim Öffnen von '%s': %s"
 
-#: merge-recursive.c:990
+#: merge-recursive.c:992
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s': %s"
 
-#: merge-recursive.c:995
+#: merge-recursive.c:997
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "weiß nicht was mit %06o %s '%s' zu machen ist"
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Fehler beim Merge von Submodul %s (Commits nicht vorhanden)."
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr "Fehler beim Merge von Submodul %s (Commits folgen keiner Merge-Basis)"
-
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1227 merge-recursive.c:1239
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Spule Submodul %s zu dem folgenden Commit vor:"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1230 merge-recursive.c:1242
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Spule Submodul %s vor"
 
-#: merge-recursive.c:1251
+#: merge-recursive.c:1265
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Fehler beim Merge von Submodule %s (dem Merge nachfolgende Commits nicht "
 "gefunden)"
 
-#: merge-recursive.c:1255
+#: merge-recursive.c:1269
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Fehler beim Merge von Submodul %s (kein Vorspulen)"
 
-#: merge-recursive.c:1256
+#: merge-recursive.c:1270
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Mögliche Auflösung des Merges für Submodul gefunden:\n"
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Falls das korrekt ist, fügen Sie es einfach der Staging-Area, zum Beispiel "
-"mit:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"hinzu, um diesen Vorschlag zu akzeptieren.\n"
-
-#: merge-recursive.c:1268
+#: merge-recursive.c:1282
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Fehler beim Merge von Submodul %s (mehrere Merges gefunden)"
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Fehler bei Ausführung des internen Merges"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "Konnte %s nicht zur Datenbank hinzufügen"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "automatischer Merge von %s"
-
-#: merge-recursive.c:1402
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Fehler: Verweigere unversionierte Datei bei %s zu verlieren;\n"
 "schreibe stattdessen nach %s."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4760,7 +5107,7 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
 "im Arbeitsbereich gelassen."
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4769,7 +5116,7 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s nach %s in %s. Stand %s von "
 "%s wurde im Arbeitsbereich gelassen."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4778,7 +5125,7 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
 "im Arbeitsbereich bei %s gelassen."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4787,46 +5134,46 @@
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s nach %s in %s. Stand %s von "
 "%s wurde im Arbeitsbereich bei %s gelassen."
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "umbenennen"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "umbenannt"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Verweigere geänderte Datei bei %s zu verlieren."
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Verweigere unversionierte Datei bei %s zu verlieren, auch wenn diese im Weg "
 "ist."
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in "
 "%s"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Verweigere unversionierte Datei bei %s zu verlieren; füge stattdessen %s "
 "hinzu"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4835,18 +5182,18 @@
 "KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" "
 "und \"%s\"->\"%s\" in Branch \"%s\"%s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (bleibt unaufgelöst)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s "
 "in %s"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4859,29 +5206,7 @@
 "wobei\n"
 "keines dieser Ziele die Mehrheit der Dateien erhielt."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"KONFLIKT (implizite Verzeichnisumbenennung): Existierende Datei/Pfad bei %s "
-"im\n"
-"Weg von impliziter Verzeichnisumbenennung, die versucht, einen oder mehrere\n"
-"Pfade dahin zu setzen: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"KONFLIKT (implizite Verzeichnisumbenennung): Kann nicht mehr als ein Pfad "
-"zu\n"
-"%s mappen; implizite Verzeichnisumbenennungen versuchten diese Pfade dahin\n"
-"zu setzen: %s"
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4890,153 +5215,81 @@
 "KONFLIKT (umbenennen/umbenennen): Benenne Verzeichnis um %s->%s in %s.\n"
 "Benenne Verzeichnis um %s->%s in %s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"WARNUNG: Vermeide Umbenennung %s -> %s von %s, weil %s selbst umbenannt "
-"wurde."
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "kann Objekt %s nicht lesen"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "Objekt %s ist kein Blob"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "ändern"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "geändert"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "Inhalt"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "hinzufügen/hinzufügen"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "Submodul"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Füge stattdessen als %s hinzu"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Pfad aktualisiert: %s hinzugefügt in %s innerhalb eines Verzeichnisses, das "
-"umbenannt wurde in %s; Verschiebe es nach %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"KONFLIKT (Speicherort): %s hinzugefügt in %s innerhalb eines Verzeichnisses, "
-"das umbenannt wurde in %s, es sollte vielleicht nach %s verschoben werden."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Pfad aktualisiert: %s umbenannt nach %s in %s, innerhalb eines "
-"Verzeichnisses, das umbenannt wurde in %s; Verschiebe es nach %s."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"KONFLIKT (Speicherort): %s umbenannt nach %s in %s, innerhalb eines "
-"Verzeichnisses, das umbenannt wurde in %s, es sollte vielleicht nach %s "
-"verschoben werden."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "Entferne %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "Datei/Verzeichnis"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "Verzeichnis/Datei"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s "
 "hinzu."
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "Füge %s hinzu"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "KONFLIKT (hinzufügen/hinzufügen): Merge-Konflikt in %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Merge:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
 msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "Merge hat keinen Commit zurückgegeben"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "Konnte Index nicht schreiben."
 
@@ -5044,118 +5297,129 @@
 msgid "failed to read the cache"
 msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "multi-pack-index OID fanout hat die falsche Größe"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-index-Datei %s ist zu klein."
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "multi-pack-index-Signatur 0x%08x stimmt nicht mit Signatur 0x%08x überein."
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index-Version %d nicht erkannt."
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index Hash-Version %u stimmt nicht mit Version %u überein"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "Ungültiger Chunk-Offset (zu groß)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "Abschließende multi-pack-index Chunk-Id erscheint eher als erwartet."
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
-msgstr "multi-pack-index fehlt erforderlicher pack-name Chunk."
+msgstr "multi-pack-index fehlt erforderlicher Pack-Namen Chunk"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
-msgstr "multi-pack-index fehlt erforderlicher OID fanout Chunk."
+msgstr "multi-pack-index fehlt erforderlicher OID fanout Chunk"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
-msgstr "multi-pack-index fehlt erforderlicher OID lookup Chunk."
+msgstr "multi-pack-index fehlt erforderlicher OID lookup Chunk"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
-msgstr "multi-pack-index fehlt erforderlicher object offset Chunk."
+msgstr "multi-pack-index fehlt erforderlicher Objekt offset Chunk"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "Falsche Reihenfolge bei multi-pack-index Pack-Namen: '%s' vor '%s'"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "Ungültige pack-int-id: %u (%u Pakete insgesamt)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
-"multi-pack-index speichert einen 64-Bit Offset, aber off_t ist zu klein."
+"multi-pack-index speichert einen 64-Bit Offset, aber off_t ist zu klein"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
-msgstr "Fehler beim Hinzufügen von Packdatei '%s'."
+msgstr "Fehler beim Hinzufügen von Packdatei '%s'"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "Fehler beim Öffnen von pack-index '%s'"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
-msgstr "Fehler beim Lokalisieren von Objekt %d in Packdatei."
+msgstr "Fehler beim Lokalisieren von Objekt %d in Packdatei"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "kann Reverse-Index-Datei nicht speichern"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Packdateien zum multi-pack-index hinzufügen"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "Pack-Datei %s zum Weglassen nicht gefunden"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "unbekanntes bevorzugtes Paket: '%s'"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "bevorzugtes Paket '%s' ist abgelaufen"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "keine Packdateien zum Indizieren."
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Chunks zum multi-pack-index schreiben"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "Fehler beim Löschen von %s"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "Fehler beim Löschen des multi-pack-index bei %s"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "multi-pack-index-Datei existiert, aber das Parsen schlug fehl"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Suche nach referenzierten Pack-Dateien"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5163,69 +5427,69 @@
 "Ungültige oid fanout Reihenfolge: fanout[%d] = %<PRIx32> > %<PRIx32> = "
 "fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "das midx enthält keine oid"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Verifiziere OID-Reihenfolge im multi-pack-index"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "Ungültige oid lookup Reihenfolge: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Sortiere Objekte nach Pack-Datei"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Überprüfe Objekt-Offsets"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "Fehler beim Laden des Pack-Eintrags für oid[%d] = %s"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "Fehler beim Laden des Pack-Index für Packdatei %s"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "Falscher Objekt-Offset für oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Referenzierte Objekte zählen"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Suchen und Löschen von unreferenzierten Pack-Dateien"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "Konnte 'pack-objects' nicht ausführen"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "Konnte 'pack-objects' nicht beenden"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "Kann lazy_dir Thread nicht erzeugen: %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "Kann lazy_name Thread nicht erzeugen: %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "Kann lazy_name Thread nicht beitreten: %s"
@@ -5275,6 +5539,370 @@
 msgid "Bad %s value: '%s'"
 msgstr "Ungültiger %s Wert: '%s'"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+"Objektverzeichnis %s existiert nicht; prüfe .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "Konnte alternativen Objektpfad '%s' nicht normalisieren."
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: ignoriere alternative Objektspeicher - Verschachtelung zu tief"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "Konnte Objektverzeichnis '%s' nicht normalisieren."
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "Konnte fdopen nicht auf Lock-Datei für \"alternates\" aufrufen."
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "Konnte \"alternates\"-Datei nicht lesen."
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "Konnte neue \"alternates\"-Datei nicht übernehmen."
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "Pfad '%s' existiert nicht"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
+"Arbeitsverzeichnis unterstützt."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+"Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+"Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
+"eingehängt."
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "Ungültige Zeile beim Parsen alternativer Referenzen: %s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "Versuche mmap %<PRIuMAX> über Limit %<PRIuMAX>."
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap fehlgeschlagen"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "Objektdatei %s ist leer."
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "Fehlerhaftes loses Objekt '%s'."
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "Nutzlose Daten am Ende von losem Objekt '%s'."
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "ungültiger Objekt-Typ"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "Konnte %s Kopfbereich nicht mit --allow-unknown-type entpacken."
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "Konnte %s Kopfbereich nicht entpacken."
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "Konnte %s Kopfbereich mit --allow-unknown-type nicht parsen."
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "Konnte %s Kopfbereich nicht parsen."
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "Konnte Objekt %s nicht lesen."
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "Ersetzung %s für %s nicht gefunden."
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "Loses Objekt %s (gespeichert in %s) ist beschädigt."
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "Gepacktes Objekt %s (gespeichert in %s) ist beschädigt."
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "Konnte Datei %s nicht schreiben."
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "Fehler beim Schreiben einer Datei."
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "Fehler beim Schließen der Datei für lose Objekte."
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-"
+"Datenbank %s"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "Konnte temporäre Datei nicht erstellen."
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "Fehler beim Schreiben der Datei für lose Objekte."
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "Konnte neues Objekt %s (%d) nicht komprimieren."
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "deflateEnd auf Objekt %s fehlgeschlagen (%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "Fehler wegen instabilen Objektquelldaten für %s"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "Fehler beim Aufruf von utime() auf '%s'."
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "Kann Objekt für %s nicht lesen."
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "fehlerhafter Commit"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "fehlerhaftes Tag"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "Lesefehler beim Indizieren von '%s'."
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "read() zu kurz beim Indizieren von '%s'."
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: Fehler beim Einfügen in die Datenbank"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: nicht unterstützte Dateiart"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s ist kein gültiges Objekt"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s ist kein gültiges '%s' Objekt"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "kann %s nicht öffnen"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "Hash für %s stimmt nicht überein (%s erwartet)."
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "Konnte mmap nicht auf %s ausführen."
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "Konnte Kopfbereich von %s nicht entpacken."
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "Konnte Kopfbereich von %s nicht parsen."
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "Konnte Inhalt von %s nicht entpacken."
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "kurze Objekt-ID %s ist mehrdeutig"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Die Kandidaten sind:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git erzeugt normalerweise keine Referenzen die mit\n"
+"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
+"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
+"erzeugt worden sein. Zum Beispiel,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
+"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
+"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
+"indem Sie \"git config advice.objectNameWarning false\"\n"
+"ausführen."
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "Log für '%.*s' geht nur bis %s zurück"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "Log für '%.*s' hat nur %d Einträge"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "Pfad '%s' befindet sich im Dateisystem, aber nicht in '%.*s'"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"Pfad '%s' existiert, aber nicht '%s'\n"
+"Hinweis: Meinten Sie '%.*s:%s' auch bekannt als '%.*s:./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "Pfad '%s' existiert nicht in '%.*s'"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"Pfad '%s' ist im Index, aber nicht in Stufe %d\n"
+"Hinweis: Meinten Sie ':%d:%s'?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"Pfad '%s' ist im Index, aber nicht '%s'\n"
+"Hinweis: Meinten Sie ':%d:%s' auch bekannt als ':%d:./%s'?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "Pfad '%s' existiert im Dateisystem, aber nicht im Index"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "Pfad '%s' existiert nicht (weder im Dateisystem noch im Index)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+"Die Syntax für relative Pfade kann nicht außerhalb des Arbeitsverzeichnisses "
+"benutzt werden."
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "ungültiger Objektname '%.*s'."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5285,36 +5913,86 @@
 msgid "object %s is a %s, not a %s"
 msgstr "Objekt %s ist ein %s, kein %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "Objekt %s hat eine unbekannte Typ-Identifikation %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "Hash stimmt nicht mit %s überein."
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "Konnte Größe von %s nicht bestimmen."
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "konnte Festplattennutzung von %s nicht bekommen"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "Reverse-Index-Datei %s ist zu klein"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "Reverse-Index-Datei %s ist beschädigt"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "Reverse-Index-Datei %s hat eine unbekannte Signatur"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "Reverse-Index-Datei %s hat nicht unterstützte Version %<PRIu32>"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "Reverse-Index-Datei %s hat nicht unterstützte Hash-ID %<PRIu32>"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr ""
+"Reverse-Index kann nicht gleichzeitig geschrieben und verifiziert werden"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "konnte nicht lesen: %s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "Fehler beim lesbar machen von %s"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "konnte Promisor-Datei '%s' nicht schreiben"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "Offset vor Ende der Packdatei (fehlerhafte Indexdatei?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "Offset vor Beginn des Pack-Index für %s (beschädigter Index?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "Offset hinter Ende des Pack-Index für %s (abgeschnittener Index?)"
@@ -5381,31 +6059,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "Meinten Sie `--%s` (mit zwei Strichen)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "Alias für --%s"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "Unbekannte Option: `%s'"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "Unbekannter Schalter `%c'"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "Unbekannte nicht-Ascii Option in String: `%s'"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "Verwendung: %s"
@@ -5413,17 +6091,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "      oder: %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-NUM"
 
@@ -5432,30 +6110,30 @@
 msgid "Could not make %s writable by group"
 msgstr "Konnte Gruppenschreibrecht für %s nicht setzen."
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "Escape-Zeichen '\\' als letztes Zeichen in Attributwert nicht erlaubt"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Es ist nur eine Angabe von 'attr:' erlaubt."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "Angabe von 'attr:' darf nicht leer sein"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "Ungültiger Attributname %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 "Globale Einstellungen zur Pfadspezifikation 'glob' und 'noglob' sind "
 "inkompatibel."
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5463,52 +6141,52 @@
 "Globale Einstellung zur Pfadspezifikation 'literal' ist inkompatibel\n"
 "mit allen anderen Optionen."
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "ungültiger Parameter für Pfadspezifikationsangabe 'prefix'"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "ungültige Pfadspezifikationsangabe '%.*s' in '%s'"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Fehlendes ')' am Ende der Pfadspezifikationsangabe in '%s'"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "nicht unterstützte Pfadspezifikationsangabe '%c' in '%s'"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: 'literal' und 'glob' sind inkompatibel"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: '%s' liegt außerhalb des Repositories von '%s'"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s' (Kürzel: '%c')"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr ""
 "%s: Pfadspezifikationsangabe wird von diesem Befehl nicht unterstützt: %s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "Pfadspezifikation '%s' ist hinter einer symbolischen Verknüpfung"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "Zeile enthält falsche Anführungszeichen: %s"
@@ -5529,7 +6207,7 @@
 msgid "flush packet write failed"
 msgstr "Flush beim Schreiben des Pakets fehlgeschlagen."
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "Protokollfehler: unmöglich lange Zeile"
 
@@ -5537,48 +6215,49 @@
 msgid "packet write with format failed"
 msgstr "Schreiben des Pakets mit Format fehlgeschlagen."
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 "Schreiben des Pakets fehlgeschlagen - Daten überschreiten maximale Paketgröße"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "Schreiben des Pakets fehlgeschlagen."
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "Schreiben des Pakets fehlgeschlagen: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "Lesefehler"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "Die Gegenseite hat unerwartet abgebrochen."
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "Protokollfehler: ungültiges Zeichen für Zeilenlänge: %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "Protokollfehler: ungültige Zeilenlänge %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "Fehler am anderen Ende: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "Aktualisiere Index"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "Kann Thread für lstat nicht erzeugen: %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "Konnte --pretty Format nicht parsen."
 
@@ -5601,24 +6280,28 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "Promisor-Remote-Name kann nicht mit '/' beginnen: %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info: erwartete Flush nach Argumenten"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Lösche doppelte Objekte"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "Konnte `log` nicht starten."
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "Konnte Ausgabe von `log` nicht lesen."
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "Konnte Commit '%s' nicht parsen."
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5627,67 +6310,71 @@
 "konnte erste Zeile der Ausgabe von `log` nicht parsen: fängt nicht mit "
 "'commit ' an: '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "Konnte Git-Header '%.*s' nicht parsen."
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "Fehler beim Generieren des Diffs."
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only und --right-only schließen sich gegenseitig aus"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "Konnte Log für '%s' nicht parsen."
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 "Dateialias '%s' wird nicht hinzugefügt ('%s' existiert bereits im Index)."
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "Kann keinen leeren Blob in die Objektdatenbank schreiben."
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: Kann nur reguläre Dateien, symbolische Links oder Git-Verzeichnisse "
 "hinzufügen."
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' hat keinen Commit ausgecheckt"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "Konnte Datei '%s' nicht indizieren."
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "Konnte '%s' nicht dem Index hinzufügen."
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
-msgstr "Konnte '%s' nicht lesen."
+msgstr "konnte '%s' nicht lesen"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
-msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein."
+msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Aktualisiere Index"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5696,7 +6383,7 @@
 "index.version gesetzt, aber Wert ungültig.\n"
 "Verwende Version %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5705,139 +6392,143 @@
 "GIT_INDEX_VERSION gesetzt, aber Wert ungültig.\n"
 "Verwende Version %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "Ungültige Signatur 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "Ungültige Index-Version %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "Ungültige SHA1-Signatur der Index-Datei."
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "Index verwendet Erweiterung %.4s, welche wir nicht unterstützen."
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "Ignoriere Erweiterung %.4s"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "Unbekanntes Format für Index-Eintrag 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "Ungültiges Namensfeld im Index, in der Nähe von Pfad '%s'."
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "Ungeordnete Stage-Einträge im Index."
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "Mehrere Stage-Einträge für zusammengeführte Datei '%s'."
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "Ungeordnete Stage-Einträge für '%s'."
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "Index-Datei beschädigt"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: Öffnen der Index-Datei fehlgeschlagen."
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: Kann geöffneten Index nicht lesen."
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: Index-Datei ist kleiner als erwartet."
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: Konnte Index-Datei nicht einlesen."
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "Kann Thread für load_index_extensions nicht erzeugen: %s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "Kann Thread für load_index_extensions nicht beitreten: %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "Konnte geteilten Index '%s' nicht aktualisieren."
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "Fehlerhafter Index. Erwartete %s in %s, erhielt %s."
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "Konnte '%s' nicht schließen."
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "Konvertierung zu einem Sparse-Index fehlgeschlagen"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "Konnte '%s' nicht lesen."
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "konnte Git-Verzeichnis nicht öffnen: %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "Konnte '%s' nicht entfernen."
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: Kann nicht auf Stufe #0 wechseln."
@@ -5868,7 +6559,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5877,7 +6571,7 @@
 "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"
+".       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 ""
@@ -5887,8 +6581,11 @@
 "r, reword <Commit> = Commit verwenden, aber Commit-Beschreibung bearbeiten\n"
 "e, edit <Commit> = Commit verwenden, aber zum Nachbessern anhalten\n"
 "s, squash <Commit> = Commit verwenden, aber mit vorherigem Commit vereinen\n"
-"f, fixup <Commit> = wie \"squash\", aber diese Commit-Beschreibung "
-"verwerfen\n"
+"f, fixup [-C | -c] <Commit> = wie \"squash\", aber nur die vorherige\n"
+"                   Commit-Beschreibung behalten, außer -C wird verwendet,\n"
+"                   in diesem Fall wird nur diese Commit-Beschreibung "
+"behalten;\n"
+"                   -c ist das Gleiche wie -C, aber ein Editor wird geöffnet\n"
 "x, exec <Commit> = Befehl (Rest der Zeile) mittels Shell ausführen\n"
 "b, break = hier anhalten (Rebase später mit 'git rebase --continue' "
 "fortsetzen)\n"
@@ -5905,14 +6602,14 @@
 "Diese Zeilen können umsortiert werden; Sie werden von oben nach unten\n"
 "ausgeführt.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Rebase von %s auf %s (%d Kommando)"
 msgstr[1] "Rebase von %s auf %s (%d Kommandos)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5921,7 +6618,7 @@
 "Keine Zeile entfernen. Benutzen Sie 'drop', um explizit einen Commit zu\n"
 "entfernen.\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5929,7 +6626,7 @@
 "\n"
 "Wenn Sie hier eine Zeile entfernen, wird DIESER COMMIT VERLOREN GEHEN.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5943,7 +6640,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5953,19 +6650,19 @@
 "Wenn Sie jedoch alles löschen, wird der Rebase abgebrochen.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "Konnte '%s' nicht schreiben."
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "Konnte '%s' nicht schreiben."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5974,7 +6671,7 @@
 "Warnung: Einige Commits könnten aus Versehen entfernt worden sein.\n"
 "Entfernte Commits (neu zu alt):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5991,14 +6688,14 @@
 "Warnungen zu ändern.\n"
 "Die möglichen Verhaltensweisen sind: ignore, warn, error.\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "Konnte '%s' nicht lesen."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "entfernt"
 
@@ -6017,233 +6714,248 @@
 msgid "ahead %d, behind %d"
 msgstr "%d voraus, %d hinterher"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "Erwartetes Format: %%(color:<Farbe>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "nicht erkannte Farbe: %%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Positiver Wert erwartet refname:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Positiver Wert erwartet refname:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "nicht erkanntes %%(%s) Argument: %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) akzeptiert keine Argumente"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "nicht erkanntes %%(objectsize) Argument: %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) akzeptiert keine Argumente"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) akzeptiert keine Argumente"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "nicht erkanntes %%(subject) Argument: %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "%%(trailers:key=<Wert>) erwartet"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "unbekanntes %%(trailers) Argument: %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "Positiver Wert erwartet contents:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "nicht erkanntes %%(contents) Argument: %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "positiver Wert erwartet '%s' in %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "nicht erkanntes Argument '%s' in %%(%s)"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "nicht erkannte E-Mail Option: %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "erwartetes Format: %%(align:<Breite>,<Position>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "nicht erkannte Position:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "nicht erkannte Breite:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "nicht erkanntes %%(align) Argument: %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "Positive Breitenangabe für %%(align) erwartet"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "nicht erkanntes %%(if) Argument: %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "Fehlerhafter Feldname: %.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "Unbekannter Feldname: %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "Kein Git-Repository, aber das Feld '%.*s' erfordert Zugriff auf Objektdaten."
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format: %%(if) Atom ohne ein %%(then) Atom verwendet"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format: %%(then) Atom ohne ein %%(if) Atom verwendet"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format: %%(then) Atom mehr als einmal verwendet"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: %%(then) Atom nach %%(else) verwendet"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format: %%(else) Atom ohne ein %%(if) Atom verwendet"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "Format: %%(else) Atom ohne ein %%(then) Atom verwendet"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "Format: %%(end) Atom mehr als einmal verwendet"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "Format: %%(end) Atom ohne zugehöriges Atom verwendet"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "Fehlerhafter Formatierungsstring %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "kein Branch, Rebase von %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(kein Branch, Rebase von %s)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "kein Branch, Rebase von losgelöstem HEAD %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(kein Branch, Rebase von losgelöstem HEAD %s)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "kein Branch, binäre Suche begonnen bei %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(kein Branch, binäre Suche begonnen bei %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "kein Branch"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD losgelöst bei %s)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD losgelöst von %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(kein Branch)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "Objekt %s fehlt für %s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer bei %s für %s fehlgeschlagen"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "fehlerhaftes Objekt bei '%s'"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "Ignoriere Referenz mit fehlerhaftem Namen %s"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "Ignoriere fehlerhafte Referenz %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "Format: %%(end) Atom fehlt"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "missgebildeter Objektname %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "die Option `%s' muss auf einen Commit zeigen"
@@ -6295,52 +7007,52 @@
 msgid "ignoring dangling symref %s"
 msgstr "Ignoriere unreferenzierte symbolische Referenz %s"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "Log für Referenz %s hat eine Lücke nach %s."
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "Log für Referenz %s unerwartet bei %s beendet."
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "Log für %s ist leer."
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "verweigere Aktualisierung einer Referenz mit fehlerhaftem Namen '%s'"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref für Referenz '%s' fehlgeschlagen: %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "mehrere Aktualisierungen für Referenz '%s' nicht erlaubt"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 "Aktualisierungen von Referenzen ist innerhalb der Quarantäne-Umgebung "
 "verboten"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "Aktualisierungen von Referenzen durch Hook abgebrochen"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existiert; kann '%s' nicht erstellen"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "kann '%s' und '%s' nicht zur selben Zeit verarbeiten"
@@ -6406,12 +7118,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "Wert '%s' des Musters hat kein '*'."
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "Src-Refspec %s entspricht keiner Referenz."
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "Src-Refspec %s entspricht mehr als einer Referenz."
@@ -6420,7 +7132,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6447,7 +7159,7 @@
 "Keines hat funktioniert, sodass wir aufgegeben haben. Sie müssen die\n"
 "Referenz mit vollqualifizierten Namen angeben."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6458,7 +7170,7 @@
 "Meinten Sie, einen neuen Branch mittels Push nach\n"
 "'%s:refs/heads/%s' zu erstellen?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6469,7 +7181,7 @@
 "Meinten Sie, einen neuen Tag mittels Push nach\n"
 "'%s:refs/tags/%s' zu erstellen?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6480,7 +7192,7 @@
 "Meinten Sie, einen Tag für ein neues Tree-Objekt\n"
 "mittels Push nach '%s:refs/tags/'%s' zu erstellen?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6491,117 +7203,117 @@
 "Meinten Sie, einen Tag für ein neues Blob-Objekt\n"
 "mittels Push nach '%s:refs/tags/%s' zu erstellen?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s kann nicht zu Branch aufgelöst werden."
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "Konnte '%s' nicht löschen: Remote-Referenz existiert nicht."
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "Dst-Refspec %s entspricht mehr als einer Referenz."
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "Dst-Referenz %s empfängt von mehr als einer Quelle"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD zeigt auf keinen Branch"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
-msgstr "Kein solcher Branch: '%s'"
+msgstr "Branch nicht gefunden: '%s'"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "Upstream-Branch '%s' nicht als Remote-Tracking-Branch gespeichert"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "Ziel für \"push\" '%s' auf Remote-Repository '%s' hat keinen lokal gefolgten "
 "Branch"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "Push-Refspecs für '%s' beinhalten nicht '%s'"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "kein Ziel für \"push\" (push.default ist 'nothing')"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "kann einzelnes Ziel für \"push\" im Modus 'simple' nicht auflösen"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "Konnte Remote-Referenz %s nicht finden."
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignoriere sonderbare Referenz '%s' lokal"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 "Ihr Branch basiert auf '%s', aber der Upstream-Branch wurde entfernt.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Ihr Branch ist auf demselben Stand wie '%s'.\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Ihr Branch und '%s' zeigen auf unterschiedliche Commits.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (benutzen Sie \"%s\" für Details)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Ihr Branch ist %2$d Commit vor '%1$s'.\n"
 msgstr[1] "Ihr Branch ist %2$d Commits vor '%1$s'.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6611,12 +7323,12 @@
 msgstr[1] ""
 "Ihr Branch ist %2$d Commits hinter '%1$s', und kann vorgespult werden.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 "  (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6631,13 +7343,13 @@
 "Ihr Branch und '%s' sind divergiert,\n"
 "und haben jeweils %d und %d unterschiedliche Commits.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (benutzen Sie \"git pull\", um Ihren Branch mit dem Remote-Branch "
 "zusammenzuführen)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "Kann erwarteten Objektnamen '%s' nicht parsen."
@@ -6657,96 +7369,96 @@
 msgid "replace depth too high for object %s"
 msgstr "Ersetzungstiefe zu hoch für Objekt %s"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "Fehlerhaftes MERGE_RR"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "Konnte Rerere-Eintrag nicht schreiben."
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "Fehler beim Schreiben von '%s' (%s)."
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "Flush bei '%s' fehlgeschlagen."
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "Konnte Konflikt-Blöcke in '%s' nicht parsen."
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "Fehler beim Aufruf von utime() auf '%s'."
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "Schreiben von '%s' fehlgeschlagen."
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' mit vorheriger Konfliktauflösung zum Commit vorgemerkt."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Konfliktauflösung für '%s' aufgezeichnet."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Konflikte in '%s' mit vorheriger Konfliktauflösung beseitigt."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "Kann '%s' nicht löschen."
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Preimage für '%s' aufgezeichnet."
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht erstellen."
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "Fehler beim Aktualisieren des Konflikt-Status in '%s'."
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "Keine aufgezeichnete Konfliktauflösung für '%s'."
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "Kann '%s' nicht löschen."
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Preimage für '%s' aktualisiert."
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Aufgezeichnete Konfliktauflösung für '%s' gelöscht.\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "Konnte rr-cache Verzeichnis nicht öffnen."
 
@@ -6754,43 +7466,38 @@
 msgid "could not determine HEAD revision"
 msgstr "Konnte HEAD-Commit nicht bestimmen."
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s."
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<Pack-Datei> wird nicht länger unterstützt"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "unbekannter Wert für --diff-merges: %s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "Ihr aktueller Branch scheint fehlerhaft zu sein."
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Ihr aktueller Branch '%s' hat noch keine Commits."
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L unterstützt noch keine anderen Diff-Formate außer -p und -s"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "Öffnen von /dev/null fehlgeschlagen"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "Konnte Thread für async nicht erzeugen: %s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6800,35 +7507,43 @@
 "Sie können diese Warnung mit `git config advice.ignoredHook false` "
 "deaktivieren."
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "Unerwartetes Flush-Paket beim Lesen des Remote-Unpack-Status."
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "Konnte Status des Entpackens der Gegenseite nicht parsen: %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "Entpacken auf der Gegenseite fehlgeschlagen: %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "Fehler beim Signieren des \"push\"-Zertifikates"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack: konnte Fetch-Subprozess nicht abspalten"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "Push-Verhandlung fehlgeschlagen; fahre trotzdem mit dem Push fort"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr ""
 "die Gegenseite unterstützt nicht den Hash-Algorithmus dieses Repositories"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr ""
 "die Gegenseite unterstützt keinen signierten Versand (\"--signed push\")"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -6836,47 +7551,47 @@
 "kein Versand des \"push\"-Zertifikates, da die Gegenseite keinen signierten\n"
 "Versand (\"--signed push\") unterstützt"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "die Gegenseite unterstützt keinen atomaren Versand (\"--atomic push\")"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "die Gegenseite unterstützt keine Push-Optionen"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "Ungültiger \"cleanup\"-Modus '%s' für Commit-Beschreibungen."
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "Konnte '%s' nicht löschen."
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "Konnte '%s' nicht löschen"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "Revert"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "Cherry-Pick"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "Rebase"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "Unbekannte Aktion: %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6884,7 +7599,7 @@
 "nach Auflösung der Konflikte markieren Sie die korrigierten Pfade\n"
 "mit 'git add <Pfade>' oder 'git rm <Pfade>'"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6894,44 +7609,44 @@
 "mit 'git add <Pfade>' oder 'git rm <Pfade>' und tragen Sie das Ergebnis mit\n"
 "'git commit' ein"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "Konnte '%s' nicht sperren"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "Konnte nicht nach '%s' schreiben."
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "Konnte EOL nicht nach '%s' schreiben."
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "Fehler beim Fertigstellen von '%s'."
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "Ihre lokalen Änderungen würden durch den %s überschrieben werden."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr ""
 "Committen Sie Ihre Änderungen oder benutzen Sie \"stash\", um fortzufahren."
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: Vorspulen"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Ungültiger \"cleanup\" Modus %s"
@@ -6939,65 +7654,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Konnte neue Index-Datei nicht schreiben"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "Konnte Cache-Verzeichnis nicht aktualisieren."
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "Konnte HEAD-Commit nicht auflösen."
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "Kein Schlüssel in '%.*s' vorhanden."
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "Konnte Anführungszeichen von '%s' nicht entfernen."
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "Konnte '%s' nicht zum Lesen öffnen."
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' bereits angegeben."
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' bereits angegeben."
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' bereits angegeben."
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "Unbekannte Variable '%s'"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "'GIT_AUTHOR_NAME' fehlt."
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "'GIT_AUTHOR_EMAIL' fehlt."
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "'GIT_AUTHOR_DATE' fehlt."
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7028,11 +7743,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "'prepare-commit-msg' Hook fehlgeschlagen."
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7060,7 +7775,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7086,340 +7801,344 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "Konnte neu erstellten Commit nicht nachschlagen."
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "Konnte neu erstellten Commit nicht analysieren."
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "Konnte HEAD nicht auflösen, nachdem der Commit erstellt wurde."
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "losgelöster HEAD"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (Root-Commit)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "Konnte HEAD nicht parsen."
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s ist kein Commit!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "Konnte Commit von HEAD nicht analysieren."
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "Konnte Commit-Autor nicht parsen."
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "Konnte Commit-Beschreibung von '%s' nicht lesen."
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "ungültige Autor-Identität '%s'"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "unbrauchbarer Autor: Datumsinformationen fehlen"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "Fehler beim Schreiben des Commit-Objektes."
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "Konnte %s nicht aktualisieren."
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "Konnte Commit %s nicht parsen."
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "Konnte Eltern-Commit %s nicht parsen."
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "Unbekannter Befehl: %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Das ist eine Kombination aus %d Commits."
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "benötige HEAD für fixup"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "Konnte HEAD nicht lesen"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "Konnte Commit-Beschreibung von HEAD nicht lesen"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "kann '%s' nicht schreiben"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Das ist die erste Commit-Beschreibung:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "Konnte Commit-Beschreibung von %s nicht lesen."
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Das ist Commit-Beschreibung #%d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "Die erste Commit-Beschreibung wird übersprungen:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Die Commit-Beschreibung #%d wird ausgelassen:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Das ist eine Kombination aus %d Commits."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "kann '%s' nicht schreiben"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "benötige HEAD für fixup"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "Konnte HEAD nicht lesen"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "Konnte Commit-Beschreibung von HEAD nicht lesen"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "Konnte Commit-Beschreibung von %s nicht lesen."
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "Ihre Index-Datei ist nicht zusammengeführt."
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "kann fixup nicht auf Root-Commit anwenden"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben."
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "Commit %s hat keinen Eltern-Commit %d"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "Kann keine Commit-Beschreibung für %s bekommen."
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: kann Eltern-Commit %s nicht parsen"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "Konnte '%s' nicht zu '%s' umbenennen."
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "Konnte %s... (%s) nicht anwenden"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "Weglassen von %s %s -- Patch-Inhalte sind bereits im Upstream-Branch\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: Fehler beim Lesen des Index"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: Fehler beim Aktualisieren des Index"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s akzeptiert keine Argumente: '%s'"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "Fehlende Argumente für %s."
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "Konnte '%s' nicht parsen."
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "Ungültige Zeile %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "Kann '%s' nicht ohne vorherigen Commit ausführen"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "Abbrechen eines laufenden \"cherry-pick\""
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "Abbrechen eines laufenden \"revert\""
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr ""
 "Bitte beheben Sie dieses, indem Sie 'git rebase --edit-todo' ausführen."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "Unbenutzbares Instruktionsblatt: '%s'"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "Keine Commits geparst."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "Kann Cherry-Pick nicht während eines Reverts ausführen."
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "Kann Revert nicht während eines Cherry-Picks ausführen."
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
-msgstr "Ungültiger Wert für %s: %s"
+msgstr "ungültiger Wert für %s: %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
-msgstr "Unbenutzbares squash-onto."
+msgstr "unbenutzbares squash-onto"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
-msgstr "Fehlerhaftes Optionsblatt: '%s'"
+msgstr "fehlerhaftes Optionsblatt: '%s'"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "leere Menge von Commits übergeben"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "\"revert\" ist bereits im Gange"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
-msgstr "Versuchen Sie \"git revert (--continue | %s--abort | --quit)\""
+msgstr "versuchen Sie \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "\"cherry-pick\" wird bereits durchgeführt"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
-msgstr "Versuchen Sie \"git cherry-pick (--continue | %s--abort | --quit)\""
+msgstr "versuchen Sie \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
-msgstr "Konnte \"sequencer\"-Verzeichnis '%s' nicht erstellen."
+msgstr "konnte \"sequencer\"-Verzeichnis '%s' nicht erstellen"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
-msgstr "Konnte HEAD nicht sperren"
+msgstr "konnte HEAD nicht sperren"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "kein \"cherry-pick\" oder \"revert\" im Gange"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "kann HEAD nicht auflösen"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "kann nicht abbrechen: bin auf einem Branch, der noch nicht geboren ist"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kann '%s' nicht öffnen"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
-msgstr "Kann '%s' nicht lesen: %s"
+msgstr "kann '%s' nicht lesen: %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
-msgstr "Unerwartetes Dateiende"
+msgstr "unerwartetes Dateiende"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Sie scheinen HEAD verändert zu haben. Keine Rückspulung, prüfen Sie HEAD."
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
-msgstr "Kein Revert im Gange"
+msgstr "kein Revert im Gange"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "kein \"cherry-pick\" im Gange"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "Überspringen des Commits fehlgeschlagen"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
-msgstr "Nichts zum Überspringen vorhanden"
+msgstr "nichts zum Überspringen vorhanden"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7428,16 +8147,16 @@
 "Haben Sie bereits committet?\n"
 "Versuchen Sie \"git %s --continue\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
-msgstr "Kann HEAD nicht lesen"
+msgstr "kann HEAD nicht lesen"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
-msgstr "Konnte '%s' nicht nach '%s' kopieren."
+msgstr "konnte '%s' nicht nach '%s' kopieren"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7456,27 +8175,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Konnte %s... (%.*s) nicht anwenden"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
-msgstr "Konnte \"%.*s\" nicht zusammenführen."
+msgstr "Konnte \"%.*s\" nicht zusammenführen"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
-msgstr "Konnte '%s' nicht nach '%s' kopieren."
+msgstr "konnte '%s' nicht nach '%s' kopieren"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Führe aus: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7492,11 +8211,11 @@
 "\n"
 "ausführen.\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert.\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7514,91 +8233,91 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
-msgstr "Unerlaubter Beschriftungsname: '%.*s'"
+msgstr "unerlaubter Beschriftungsname: '%.*s'"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "unechten Root-Commit schreiben"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "squash-onto schreiben"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
-msgstr "Konnte '%s' nicht auflösen."
+msgstr "konnte '%s' nicht auflösen"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
-msgstr "Kann nicht ohne einen aktuellen Commit mergen."
+msgstr "kann nicht ohne einen aktuellen Commit mergen"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
-msgstr "Konnte '%.*s' nicht parsen."
+msgstr "konnte '%.*s' nicht parsen"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
-msgstr "Nichts zum Zusammenführen: '%.*s'"
+msgstr "nichts zum Zusammenführen: '%.*s'"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
-"Oktopus-Merge kann nicht auf Basis von [neuem Root-Commit] ausgeführt werden."
+"Oktopus-Merge kann nicht auf Basis von [neuem Root-Commit] ausgeführt werden"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
-msgstr "Konnte keine Commit-Beschreibung von '%s' bekommen."
+msgstr "konnte keine Commit-Beschreibung von '%s' bekommen"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
-msgstr "Konnte nicht einmal versuchen '%.*s' zu mergen."
+msgstr "konnte nicht einmal versuchen '%.*s' zu mergen"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "merge: Konnte neue Index-Datei nicht schreiben."
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
-msgstr "Kann automatischen Stash nicht erzeugen."
+msgstr "Kann automatischen Stash nicht erzeugen"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Unerwartete 'stash'-Antwort: '%s'"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
-msgstr "Konnte Verzeichnis für '%s' nicht erstellen."
+msgstr "Konnte Verzeichnis für '%s' nicht erstellen"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Automatischen Stash erzeugt: %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
-msgstr "Konnte 'reset --hard' nicht ausführen."
+msgstr "konnte 'reset --hard' nicht ausführen"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Automatischen Stash angewendet.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "kann %s nicht speichern"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7609,29 +8328,29 @@
 "Ihre Änderungen sind im Stash sicher.\n"
 "Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "Beim Anwenden des automatischen Stash traten Konflikte auf."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Automatischer Stash existiert; ein neuer Stash-Eintrag wird erstellt."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
-msgstr "Konnte HEAD nicht loslösen"
+msgstr "konnte HEAD nicht loslösen"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Angehalten bei HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Angehalten bei %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7653,60 +8372,60 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Rebase (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Angehalten bei %s... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "Unbekannter Befehl %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "Konnte orig-head nicht lesen."
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "Konnte 'onto' nicht lesen."
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "Konnte HEAD nicht auf %s aktualisieren."
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Erfolgreich Rebase ausgeführt und %s aktualisiert.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 "Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit\n"
 "vorgemerkt sind."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "Kann nicht existierenden Commit nicht nachbessern."
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "Ungültige Datei: '%s'"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "Ungültige Inhalte: '%s'"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7717,50 +8436,50 @@
 "committen Sie diese zuerst und führen Sie dann 'git rebase --continue'\n"
 "erneut aus."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "Konnte Datei nicht schreiben: '%s'"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "Konnte CHERRY_PICK_HEAD nicht löschen."
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "Konnte Änderungen aus der Staging-Area nicht committen."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: ungültiger Commit"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: unbehandelte Optionen"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: Fehler beim Vorbereiten der Commits"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "Nichts zu tun."
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "Konnte unnötige \"pick\"-Befehle nicht auslassen."
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "Das Script wurde bereits umgeordnet."
 
@@ -7775,7 +8494,7 @@
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
-"%s: kein solcher Pfad im Arbeitsverzeichnis.\n"
+"%s: Pfad nicht im Arbeitsverzeichnis gefunden.\n"
 "Benutzen Sie 'git <Befehl> -- <Pfad>...' zur Angabe von Pfaden, die lokal\n"
 "nicht existieren."
 
@@ -7908,7 +8627,7 @@
 "%s)\n"
 "Stoppe bei Dateisystemgrenze (GIT_DISCOVERY_ACROSS_FILESYSTEM nicht gesetzt)."
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7917,420 +8636,69 @@
 "Problem mit Wert für Dateimodus (0%.3o) von core.sharedRepository.\n"
 "Der Besitzer der Dateien muss immer Lese- und Schreibrechte haben."
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "Öffnen von /dev/null oder dup fehlgeschlagen."
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "fork fehlgeschlagen"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "setsid fehlgeschlagen"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "versuche partiellen Index ohne Cone-Modus zu benutzen"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "konnte Cache-Verzeichnis nicht aktualisieren, bleibt voll"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-"Objektverzeichnis %s existiert nicht; prüfe .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "Konnte alternativen Objektpfad '%s' nicht normalisieren."
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: ignoriere alternative Objektspeicher - Verschachtelung zu tief"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "Konnte Objektverzeichnis '%s' nicht normalisieren."
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "Konnte fdopen nicht auf Lock-Datei für \"alternates\" aufrufen."
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "Konnte \"alternates\"-Datei nicht lesen."
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "Konnte neue \"alternates\"-Datei nicht übernehmen."
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "Pfad '%s' existiert nicht"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
-"Arbeitsverzeichnis unterstützt."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr ""
-"Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr ""
-"Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
-"eingehängt."
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "Ungültige Zeile beim Parsen alternativer Referenzen: %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "Versuche mmap %<PRIuMAX> über Limit %<PRIuMAX>."
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap fehlgeschlagen"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "Objektdatei %s ist leer."
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "Fehlerhaftes loses Objekt '%s'."
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "Nutzlose Daten am Ende von losem Objekt '%s'."
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "ungültiger Objekt-Typ"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "Konnte %s Kopfbereich nicht mit --allow-unknown-type entpacken."
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "Konnte %s Kopfbereich nicht entpacken."
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "Konnte %s Kopfbereich mit --allow-unknown-type nicht parsen."
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "Konnte %s Kopfbereich nicht parsen."
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "Konnte Objekt %s nicht lesen."
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "Ersetzung %s für %s nicht gefunden."
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "Loses Objekt %s (gespeichert in %s) ist beschädigt."
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "Gepacktes Objekt %s (gespeichert in %s) ist beschädigt."
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "Konnte Datei %s nicht schreiben."
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "Fehler beim Schreiben einer Datei."
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "Fehler beim Schließen der Datei für lose Objekte."
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-"
-"Datenbank %s"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "Konnte temporäre Datei nicht erstellen."
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "Fehler beim Schreiben der Datei für lose Objekte."
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "Konnte neues Objekt %s (%d) nicht komprimieren."
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "deflateEnd auf Objekt %s fehlgeschlagen (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "Fehler wegen instabilen Objektquelldaten für %s"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "Fehler beim Aufruf von utime() auf '%s'."
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "Kann Objekt für %s nicht lesen."
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "fehlerhafter Commit"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "fehlerhaftes Tag"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "Lesefehler beim Indizieren von '%s'."
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "read() zu kurz beim Indizieren von '%s'."
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: Fehler beim Einfügen in die Datenbank"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: nicht unterstützte Dateiart"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s ist kein gültiges Objekt"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s ist kein gültiges '%s' Objekt"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "kann %s nicht öffnen"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "Hash für %s stimmt nicht überein (%s erwartet)."
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "Konnte mmap nicht auf %s ausführen."
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "Konnte Kopfbereich von %s nicht entpacken."
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "Konnte Kopfbereich von %s nicht parsen."
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "Konnte Inhalt von %s nicht entpacken."
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "Kurzer SHA-1 %s ist mehrdeutig."
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Die Kandidaten sind:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git erzeugt normalerweise keine Referenzen die mit\n"
-"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n"
-"Sie diese angeben. Diese Referenzen könnten aus Versehen\n"
-"erzeugt worden sein. Zum Beispiel,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n"
-"wurde. Bitte prüfen Sie diese Referenzen und löschen\n"
-"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n"
-"indem Sie \"git config advice.objectNameWarning false\"\n"
-"ausführen."
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "Log für '%.*s' geht nur bis %s zurück"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "Log für '%.*s' hat nur %d Einträge"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "Pfad '%s' befindet sich im Dateisystem, aber nicht in '%.*s'"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"Pfad '%s' existiert, aber nicht '%s'\n"
-"Hinweis: Meinten Sie '%.*s:%s' auch bekannt als '%.*s:./%s'?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "Pfad '%s' existiert nicht in '%.*s'"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"Pfad '%s' ist im Index, aber nicht in Stufe %d\n"
-"Hinweis: Meinten Sie ':%d:%s'?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"Pfad '%s' ist im Index, aber nicht '%s'\n"
-"Hinweis: Meinten Sie ':%d:%s' auch bekannt als ':%d:./%s'?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "Pfad '%s' existiert im Dateisystem, aber nicht im Index"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "Pfad '%s' existiert nicht (weder im Dateisystem noch im Index)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-"Die Syntax für relative Pfade kann nicht außerhalb des Arbeitsverzeichnisses "
-"benutzt werden."
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "ungültiger Objektname '%.*s'."
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "Index-Eintrag ist ein Verzeichnis, aber nicht partiell (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8338,20 +8706,20 @@
 msgstr[1] "%u Bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u Byte/s"
 msgstr[1] "%u Bytes/s"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "Konnte '%s' nicht zum Schreiben öffnen."
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "Konnte '%s' nicht editieren."
@@ -8402,22 +8770,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "Konnte aktualisierte .gitmodules-Datei nicht zum Commit vormerken"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "In nicht ausgechecktem Submodul '%s'."
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "ungültiges --ignore-submodules Argument: %s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8426,12 +8794,12 @@
 "Submodul in Commit %s beim Pfad: '%s' hat den gleichen Namen wie ein "
 "Submodul. Wird übersprungen."
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "Submodul-Eintrag '%s' (%s) ist ein %s, kein Commit."
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8440,36 +8808,36 @@
 "Konnte 'git rev-list <Commits> --not --remotes -n 1' nicht in Submodul '%s' "
 "ausführen."
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "Prozess für Submodul '%s' fehlgeschlagen"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Konnte HEAD nicht als gültige Referenz auflösen."
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Pushe Submodul '%s'\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Kann Push für Submodul '%s' nicht ausführen\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Anfordern des Submoduls %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Konnte nicht auf Submodul '%s' zugreifen\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8478,62 +8846,62 @@
 "Fehler während des Anforderns der Submodule:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' nicht als Git-Repository erkannt"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Konnte 'git status --porcelain=2' nicht in Submodul %s ausführen"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --porcelain=2' ist in Submodul %s fehlgeschlagen"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "Konnte 'git status' in Submodul '%s' nicht starten."
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "Konnte 'git status' in Submodul '%s' nicht ausführen."
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Konnte core.worktree Einstellung in Submodul '%s' nicht aufheben."
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "Fehler bei Rekursion in Submodul-Pfad '%s'"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "konnte Index des Submoduls nicht zurücksetzen"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "Submodul '%s' hat einen geänderten Index."
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Submodule '%s' konnte nicht aktualisiert werden."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr ""
 "Git-Verzeichnis des Submoduls '%s' ist im Git-Verzeichnis '%.*s' enthalten."
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8541,17 +8909,17 @@
 "relocate_gitdir für Submodul '%s' mit mehr als einem Arbeitsverzeichnis\n"
 "wird nicht unterstützt"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "Konnte Name für Submodul '%s' nicht nachschlagen."
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "Verschieben von '%s' in ein existierendes Git-Verzeichnis verweigert."
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8562,65 +8930,71 @@
 "'%s' nach\n"
 "'%s'\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "Konnte 'ls-files' nicht in .. starten"
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree mit unerwartetem Rückgabewert %d beendet"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "'lstat' für '%s' fehlgeschlagen"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "Ausführen des Anhang-Befehls '%s' fehlgeschlagen"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "unbekannter Wert '%s' für Schlüssel %s"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "mehr als ein %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "leerer Anhang-Token in Anhang '%.*s'"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "Konnte Eingabe-Datei '%s' nicht lesen"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "konnte nicht von der Standard-Eingabe lesen"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "Konnte '%s' nicht lesen"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "Datei '%s' ist keine reguläre Datei"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "Datei %s ist vom Benutzer nicht beschreibbar."
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "konnte temporäre Datei '%s' nicht öffnen"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "konnte temporäre Datei nicht zu %s umbenennen"
@@ -8671,7 +9045,7 @@
 msgid "error while running fast-import"
 msgstr "Fehler beim Ausführen von 'fast-import'."
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "konnte Referenz %s nicht lesen"
@@ -8690,7 +9064,7 @@
 msgid "invalid remote service path"
 msgstr "ungültiger Remote-Service Pfad."
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "die Operation wird von dem Protokoll nicht unterstützt"
 
@@ -8699,68 +9073,72 @@
 msgid "can't connect to subservice %s"
 msgstr "kann keine Verbindung zu Subservice %s herstellen"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only benötigt Protokoll v2"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' ohne passende 'ok/error' Direktive"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "erwartete ok/error, Remote-Helper gab '%s' aus"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "Remote-Helper meldete unerwarteten Status von %s"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "Remote-Helper %s unterstützt kein Trockenlauf"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "Remote-Helper %s unterstützt kein --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "Remote-Helper %s unterstützt kein --signed=if-asked"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "Remote-Helper %s unterstützt kein --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "Remote-Helper %s unterstützt kein --%s"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "Remote-Helper %s unterstützt nicht 'push-option'"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "Remote-Helper unterstützt kein Push; Refspec benötigt"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "Remote-Helper %s unterstützt kein 'force'."
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "Konnte \"fast-export\" nicht ausführen."
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "Fehler beim Ausführen von \"fast-export\"."
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8769,52 +9147,52 @@
 "Keine gemeinsamen Referenzen und nichts spezifiziert; keine Ausführung.\n"
 "Vielleicht sollten Sie einen Branch angeben.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "nicht unterstütztes Objekt-Format '%s'"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "Ungültige Antwort in Referenzliste: %s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "Lesen von %s fehlgeschlagen."
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "Schreiben von %s fehlgeschlagen."
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "Thread %s fehlgeschlagen."
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "Fehler beim Beitreten zu Thread %s: %s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "Kann Thread zum Kopieren von Daten nicht starten: %s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "Fehler beim Warten von Prozess %s."
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "Prozess %s fehlgeschlagen"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "Kann Thread zum Kopieren von Daten nicht starten."
 
@@ -8833,37 +9211,41 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: ungültige --depth Option '%s'"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "Siehe protocol.version in 'git help config' für weitere Informationen"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "Server-Optionen benötigen Protokoll-Version 2 oder höher"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "Server unterstützt nicht 'wait-for-done'"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "Konnte transport.color.* Konfiguration nicht parsen."
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "Unterstützung für Protokoll v2 noch nicht implementiert."
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "Unbekannter Wert für Konfiguration '%s': %s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "Übertragungsart '%s' nicht erlaubt."
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync wird nicht länger unterstützt."
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8872,7 +9254,7 @@
 "Die folgenden Submodul-Pfade enthalten Änderungen, die in keinem\n"
 "Remote-Repository gefunden wurden:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8899,31 +9281,31 @@
 "zum Versenden zu einem Remote-Repository.\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "Abbruch."
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "Fehler beim Versand aller erforderlichen Submodule."
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "zu kurzes Tree-Objekt"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "fehlerhafter Modus in Tree-Eintrag"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "leerer Dateiname in Tree-Eintrag"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "zu kurze Tree-Datei"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8934,7 +9316,7 @@
 "%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie Branches\n"
 "wechseln."
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8944,7 +9326,7 @@
 "überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8954,7 +9336,7 @@
 "überschrieben werden:\n"
 "%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie mergen."
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8964,7 +9346,7 @@
 "überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8974,7 +9356,7 @@
 "überschrieben werden:\n"
 "%%sBitte committen oder stashen Sie Ihre Änderungen, bevor Sie %s ausführen."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8983,7 +9365,7 @@
 "Ihre lokalen Änderungen würden durch %s überschrieben werden.\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8993,7 +9375,7 @@
 "Dateien in diesen Verzeichnissen verloren gehen:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -9003,7 +9385,7 @@
 "den Checkout entfernt werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -9014,7 +9396,7 @@
 "Checkout entfernt werden:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -9024,7 +9406,7 @@
 "den Merge entfernt werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor sie mergen."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -9035,7 +9417,7 @@
 "Merge entfernt werden:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -9045,7 +9427,7 @@
 "den %s entfernt werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -9055,7 +9437,7 @@
 "den %s entfernt werden:\n"
 "%%s"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -9066,7 +9448,7 @@
 "den Checkout überschrieben werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor Sie Branches wechseln."
 
-#: unpack-trees.c:154
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -9078,7 +9460,7 @@
 "Checkout überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -9088,7 +9470,7 @@
 "den Merge überschrieben werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor Sie mergen."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -9098,7 +9480,7 @@
 "den Merge überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -9108,7 +9490,7 @@
 "den %s überschrieben werden:\n"
 "%%sBitte verschieben oder entfernen Sie diese, bevor sie %s ausführen."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -9119,12 +9501,12 @@
 "%s überschrieben werden:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Eintrag '%s' überschneidet sich mit '%s'. Kann nicht verbinden."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9133,7 +9515,7 @@
 "Kann Submodul nicht aktualisieren:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -9144,7 +9526,7 @@
 "übrig gelassen:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -9154,7 +9536,7 @@
 "partieller Muster übrig gelassen:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -9165,12 +9547,12 @@
 "partieller Muster nicht aktualisiert:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "Abbruch\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -9179,11 +9561,11 @@
 "Nachdem die obigen Pfade behoben sind, können Sie `git sparse-checkout "
 "reapply` ausführen.\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Aktualisiere Dateien"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -9193,11 +9575,17 @@
 "auf einem case-insensitiven Dateisystem) und nur einer von der\n"
 "selben Kollissionsgruppe ist im Arbeitsverzeichnis:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "Aktualisiere Index-Markierungen"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+"Arbeitsverzeichnis und unversionierter Commit haben doppelte Einträge: %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "erwartete Flush nach Abrufen der Argumente"
 
@@ -9234,72 +9622,103 @@
 msgid "Fetching objects"
 msgstr "Anfordern der Objekte"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "Fehler beim Lesen von '%s'"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "'%s' im Hauptarbeitsverzeichnis ist nicht das Repository-Verzeichnis."
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "'%s' Datei enthält nicht den absoluten Pfad zum Arbeitsverzeichnis."
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' existiert nicht."
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' ist keine .git-Datei, Fehlercode %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' zeigt nicht zurück auf '%s'"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "kein Verzeichnis"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git ist keine Datei"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr ".git-Datei kaputt"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr ".git-Datei fehlerhaft"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "kein gültiger Pfad"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "Konnte Repository nicht finden; .git ist keine Datei"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr ""
+"konnte Repository nicht finden; .git-Datei referenziert kein Repository"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "Konnte Repository nicht finden; .git-Datei ist kaputt"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "gitdir nicht lesbar"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "gitdir fehlerhaft"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "kein gültiges Verzeichnis"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "gitdir-Datei existiert nicht"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "konnte gitdir-Datei nicht lesen (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "read() zu kurz (%<PRIuMAX> Bytes erwartet, %<PRIuMAX> gelesen)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "ungültige gitdir-Datei"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "gitdir-Datei verweist auf nicht existierenden Ort"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9353,11 +9772,11 @@
 msgstr ""
 "  (benutzen Sie \"git add/rm <Datei>...\", um die Auflösung zu markieren)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Zum Commit vorgemerkte Änderungen:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:"
 
@@ -9465,22 +9884,22 @@
 msgid "untracked content, "
 msgstr "unversionierter Inhalt, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Ihr Stash hat gerade %d Eintrag"
 msgstr[1] "Ihr Stash hat gerade %d Einträge"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Submodule geändert, aber nicht aktualisiert:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Änderungen in Submodul zum Committen:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9488,7 +9907,7 @@
 "Ändern oder entfernen Sie nicht die obige Zeile.\n"
 "Alles unterhalb von ihr wird ignoriert."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9500,114 +9919,114 @@
 "berechnen.\n"
 "Sie können '--no-ahead-behind' benutzen, um das zu verhindern.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Sie haben nicht zusammengeführte Pfade."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (beheben Sie die Konflikte und führen Sie \"git commit\" aus)"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (benutzen Sie \"git merge --abort\", um den Merge abzubrechen)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (benutzen Sie \"git commit\", um den Merge abzuschließen)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Eine \"am\"-Sitzung ist im Gange."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "Der aktuelle Patch ist leer."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (benutzen Sie \"git am --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr ""
 "  (benutzen Sie \"git am --abort\", um den ursprünglichen Branch "
 "wiederherzustellen)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo fehlt."
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "Keine Befehle ausgeführt."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Zuletzt ausgeführter Befehl (%d Befehl ausgeführt):"
 msgstr[1] "Zuletzt ausgeführte Befehle (%d Befehle ausgeführt):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (mehr Informationen in Datei %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "Keine Befehle verbleibend."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Nächster auszuführender Befehl (%d Befehle verbleibend):"
 msgstr[1] "Nächste auszuführende Befehle (%d Befehle verbleibend):"
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (benutzen Sie \"git rebase --edit-todo\" zum Ansehen und Bearbeiten)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'."
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Sie sind gerade beim Rebase."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git rebase --continue\" "
 "aus)"
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (benutzen Sie \"git rebase --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 "  (benutzen Sie \"git rebase --abort\", um den ursprünglichen Branch "
 "auszuchecken)"
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9615,162 +10034,170 @@
 "Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf "
 "'%s' im Gange ist."
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Sie teilen gerade einen Commit während eines Rebase auf."
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Sobald Ihr Arbeitsverzeichnis unverändert ist, führen Sie \"git rebase --"
 "continue\" aus)"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf "
 "'%s'."
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "Sie editieren gerade einen Commit während eines Rebase."
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 "  (benutzen Sie \"git commit --amend\", um den aktuellen Commit "
 "nachzubessern)"
 
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (benutzen Sie \"git rebase --continue\" sobald Ihre Änderungen "
 "abgeschlossen sind)"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick zurzeit im Gange."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Sie führen gerade \"cherry-pick\" von Commit %s aus."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue"
 "\" aus)"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (Führen Sie \"git cherry-pick --continue\" aus, um weiterzumachen)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr ""
 "  (benutzen Sie \"git cherry-pick --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (benutzen Sie \"git cherry-pick --abort\", um die Cherry-Pick-Operation "
 "abzubrechen)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Revert zurzeit im Gange."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Sie sind gerade beim Revert von Commit '%s'."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
 "aus)"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (Führen Sie \"git revert --continue\", um weiterzumachen)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (benutzen Sie \"git revert --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 "  (benutzen Sie \"git revert --abort\", um die Revert-Operation abzubrechen)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Sie sind gerade bei einer binären Suche."
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (benutzen Sie \"git bisect reset\", um zum ursprünglichen Branch "
 "zurückzukehren)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Sie sind in einem partiellen Checkout mit %d%% vorhandenen versionierten "
 "Dateien."
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "Auf Branch "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "interaktives Rebase im Gange; auf "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "Rebase im Gange; auf "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD losgelöst bei "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD losgelöst von "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Im Moment auf keinem Branch."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Initialer Commit"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "Noch keine Commits"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Unversionierte Dateien"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Ignorierte Dateien"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9781,32 +10208,32 @@
 "'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
 "neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Unversionierte Dateien nicht aufgelistet%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Keine Änderungen"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "keine Änderungen zum Commit vorgemerkt\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9815,73 +10242,91 @@
 "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
 "(benutzen Sie \"git add\" zum Versionieren)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "nichts zu committen (erstellen/kopieren Sie Dateien und benutzen\n"
 "Sie \"git add\" zum Versionieren)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "nichts zu committen\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
 "anzuzeigen)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "Noch keine Commits in "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (kein Branch)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "unterschiedlich"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "hinterher "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "voraus "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr ""
 "%s nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt sind."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "Zusätzlich enthält die Staging-Area nicht committete Änderungen."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 "%s nicht möglich: Die Staging-Area enthält nicht committete Änderungen."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "konnte IPC-Befehl nicht senden"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "konnte IPC-Antwort nicht lesen"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "konnte accept_thread nicht für '%s' starten"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "konnte worker[0] nicht für '%s' starten"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "Konnte '%s' nicht entfernen."
@@ -9890,134 +10335,139 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<Optionen>] [--] <Pfadspezifikation>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "kann chmod %cx '%s' nicht ausführen"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "unerwarteter Differenz-Status %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "Aktualisierung der Dateien fehlgeschlagen"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "lösche '%s'\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 "Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "Konnte den Index nicht lesen"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Konnte '%s' nicht zum Schreiben öffnen."
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "Konnte Patch nicht schreiben"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "Bearbeitung des Patches fehlgeschlagen"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht lesen"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Leerer Patch. Abgebrochen."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Konnte '%s' nicht anwenden."
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
 "ignoriert:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "Probelauf"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "interaktives Auswählen"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "Blöcke interaktiv auswählen"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "aktuelle Unterschiede editieren und anwenden"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "das Hinzufügen andernfalls ignorierter Dateien erlauben"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "versionierte Dateien aktualisieren"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr ""
 "erneutes Normalisieren der Zeilenenden von versionierten Dateien (impliziert "
 "-u)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "nur speichern, dass der Pfad später hinzugefügt werden soll"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr ""
 "Änderungen von allen versionierten und unversionierten Dateien hinzufügen"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "gelöschte Pfade im Arbeitsverzeichnis ignorieren (genau wie --no-all)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "nichts hinzufügen, nur den Index aktualisieren"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr ""
 "Dateien überspringen, die aufgrund von Fehlern nicht hinzugefügt werden "
 "konnten"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "prüfen ob - auch fehlende - Dateien im Probelauf ignoriert werden"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "das \"ausführbar\"-Bit der aufgelisteten Dateien überschreiben"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "warnen wenn eingebettetes Repository hinzugefügt wird"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "Backend für `git stash -p`"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10051,12 +10501,12 @@
 "\n"
 "Siehe \"git help submodule\" für weitere Informationen."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "Füge eingebettetes Repository hinzu: %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10066,52 +10516,52 @@
 "Um diese Meldung abzuschalten, führen Sie folgenden Befehl aus:\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "Hinzufügen von Dateien fehlgeschlagen"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run und --interactive/--patch sind inkompatibel"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
-msgstr ""
-"Die Optionen --pathspec-from-file und --interactive/--patch sind "
-"inkompatibel."
+msgstr "--pathspec-from-file und --interactive/--patch sind inkompatibel"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
-msgstr "Die Optionen --pathspec-from-file und --edit sind inkompatibel."
+msgstr "--pathspec-from-file und --edit sind inkompatibel"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
-msgstr "Die Optionen -A und -u sind zueinander inkompatibel."
+msgstr "-A und -u sind zueinander inkompatibel"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr ""
-"Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden."
+"Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod Parameter '%s' muss entweder -x oder +x sein"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
-msgstr ""
-"Die Option --pathspec-from-file ist inkompatibel mit\n"
-"Pfadspezifikation-Argumenten."
+msgstr "--pathspec-from-file ist inkompatibel mit Pfadspezifikation-Argumenten"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
-msgstr "Die Option --pathspec-file-nul benötigt --pathspec-from-file"
+msgstr "--pathspec-file-nul benötigt --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Nichts spezifiziert, nichts hinzugefügt.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10121,116 +10571,116 @@
 "Um diese Meldung abzuschalten, führen Sie folgenden Befehl aus:\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "konnte Autor-Skript nicht parsen"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' wurde durch den applypatch-msg Hook entfernt"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Fehlerhafte Eingabezeile: '%s'."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "\"fseek\" fehlgeschlagen"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "konnte Patch '%s' nicht parsen"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Es kann nur eine StGIT Patch-Serie auf einmal angewendet werden."
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "ungültiger Zeitstempel"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "Ungültige \"Date\"-Zeile"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "Ungültiger Offset in der Zeitzone"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Patch-Formaterkennung fehlgeschlagen."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "Fehler beim Erstellen von Verzeichnis '%s'"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "Fehler beim Aufteilen der Patches."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr ""
 "Wenn Sie das Problem aufgelöst haben, führen Sie \"%s --continue\" aus."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"%s --skip"
 "\" aus."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Um den ursprünglichen Branch wiederherzustellen und die Anwendung der "
 "Patches abzubrechen, führen Sie \"%s --abort\" aus."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch mit format=flowed versendet; Leerzeichen am Ende von Zeilen könnte "
 "verloren gehen."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "Patch ist leer."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "Autor-Zeile fehlt in Commit %s"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "Ungültige Identifikationszeile: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge "
 "zurückzufallen."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Verwende Informationen aus der Staging-Area, um ein Basisverzeichnis "
 "nachzustellen ..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10238,24 +10688,24 @@
 "Haben Sie den Patch per Hand editiert?\n"
 "Er kann nicht auf die Blobs in seiner 'index' Zeile angewendet werden."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Falle zurück zum Patchen der Basis und zum 3-Wege-Merge ..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Merge der Änderungen fehlgeschlagen."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "auf leere Historie anwenden"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "Kann nicht fortsetzen: %s existiert nicht"
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "Commit-Beschreibung ist:"
 
@@ -10263,41 +10713,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 
-#: builtin/am.c:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "Konnte Index-Datei nicht schreiben."
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Geänderter Index: kann Patches nicht anwenden (geändert: %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Wende an: %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Keine Änderungen -- Patches bereits angewendet."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Anwendung des Patches fehlgeschlagen bei %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Benutzen Sie 'git am --show-current-patch=diff', um den\n"
 "fehlgeschlagenen Patch zu sehen"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10308,7 +10758,7 @@
 "diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n"
 "auslassen."
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10321,17 +10771,17 @@
 "Sie können 'git rm' auf Dateien ausführen, um \"von denen gelöscht\" für\n"
 "diese zu akzeptieren."
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "Fehler beim Bereinigen des Index"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10339,156 +10789,160 @@
 "Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n"
 "Keine Zurücksetzung zu ORIG_HEAD."
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Ungültiger Wert für --patch-format: %s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Ungültiger Wert für --show-current-patch: %s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s ist inkombatibel mit --show-current-patch=%s"
 
-#: builtin/am.c:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<Optionen>] [(<mbox> | <E-Mail-Verzeichnis>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<Optionen>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "interaktiv ausführen"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "historische Option -- kein Effekt"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "erlaube, falls notwendig, das Zurückfallen auf einen 3-Wege-Merge"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "weniger Ausgaben"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "eine Signed-off-by Zeile der Commit-Beschreibung hinzufügen"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "nach UTF-8 umkodieren (Standard)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "-k an git-mailinfo übergeben"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "-b an git-mailinfo übergeben"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "-m an git-mailinfo übergeben"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "--keep-cr an git-mailsplit für mbox-Format übergeben"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "kein --keep-cr an git-mailsplit übergeben, unabhängig von am.keepcr"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "alles vor einer Scheren-Zeile entfernen"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "an git-mailinfo weitergeben"
+
+#: 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
 msgid "pass it through git-apply"
 msgstr "an git-apply übergeben"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "Anzahl"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "Format"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "Patch-Format"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "Meldung bei fehlerhafter Patch-Anwendung überschreiben"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "Anwendung der Patches nach Auflösung eines Konfliktes fortsetzen"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "Synonyme für --continue"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "den aktuellen Patch auslassen"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
 msgstr ""
 "ursprünglichen Branch wiederherstellen und Anwendung der Patches abbrechen"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
 msgstr "Patch-Operation abbrechen, aber HEAD an aktueller Stelle belassen"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "den Patch, der gerade angewendet wird, anzeigen"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "Autor-Datum als Commit-Datum verwenden"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "aktuellen Zeitstempel als Autor-Datum verwenden"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "GPG-Schlüsselkennung"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "Commits mit GPG signieren"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(intern für git-rebase verwendet)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10496,16 +10950,16 @@
 "Die -b/--binary Option hat seit Langem keinen Effekt und wird\n"
 "entfernt. Bitte verwenden Sie diese nicht mehr."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "Fehler beim Lesen des Index"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "Vorheriges Rebase-Verzeichnis %s existiert noch, aber mbox gegeben."
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10514,11 +10968,11 @@
 "Stray %s Verzeichnis gefunden.\n"
 "Benutzen Sie \"git am --abort\", um es zu entfernen."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "Interaktiver Modus benötigt Patches über die Kommandozeile"
 
@@ -10561,28 +11015,12 @@
 msgstr "git bisect--helper --bisect-reset [<Commit>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <Zustand> <Revision> "
-"<Begriff_gut> <Begriff_schlecht>"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <Befehl> <Begriff_gut> "
-"<Begriff_schlecht>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 "git bisect--helper --bisect-next-check <Begriff_gut> <Begriff_schlecht> "
 "[<Begriff>]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10590,7 +11028,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10600,62 +11038,66 @@
 "good}=<Begriff>] [--no-checkout] [--first-parent] [<schlecht> [<gut>...]] "
 "[--] [<Pfade>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<Commit>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-state (good|old) [<Commit>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <Dateiname>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<Commit>|<Bereich>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "kann Datei '%s' nicht im Modus '%s' öffnen"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "konnte nicht in Datei '%s' schreiben"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' ist kein gültiger Begriff"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "kann den eingebauten Befehl '%s' nicht als Begriff verwenden"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "kann die Bedeutung von dem Begriff '%s' nicht ändern"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "bitte verwenden Sie zwei verschiedene Begriffe"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "Keine binäre Suche im Gange.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' ist kein gültiger Commit"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10663,27 +11105,27 @@
 "Konnte den ursprünglichen HEAD '%s' nicht auschecken.\n"
 "Versuchen Sie 'git bisect reset <Commit>'."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Ungültiges \"bisect_write\" Argument: %s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
-msgstr "Konnte die OID der Revision '%s' nicht erhalten."
+msgstr "konnte die OID der Revision '%s' nicht erhalten"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
-msgstr "Konnte die Datei '%s' nicht öffnen."
+msgstr "konnte die Datei '%s' nicht öffnen"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
-msgstr "Ungültiger Befehl: Sie sind gerade bei einer binären %s/%s Suche."
+msgstr "Ungültiger Befehl: Sie sind gerade innerhalb einer binären %s/%s Suche"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10692,7 +11134,7 @@
 "Sie müssen mindestens einen \"%s\" und einen \"%s\" Commit angeben.\n"
 "Sie können dafür \"git bisect %s\" und \"git bisect %s\" benutzen."
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10703,24 +11145,24 @@
 "Danach müssen Sie mindestens einen \"%s\" und einen \"%s\" Commit angeben.\n"
 "Sie können dafür \"git bisect %s\" und \"git bisect %s\" benutzen."
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
-msgstr "Binäre Suche nur mit einem %s Commit."
+msgstr "binäre Suche nur mit einem %s Commit"
 
 #. 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:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Sind Sie sicher [Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
-msgstr "Keine Begriffe definiert."
+msgstr "keine Begriffe definiert"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10729,7 +11171,7 @@
 "Ihre aktuellen Begriffe sind %s für den alten Zustand\n"
 "und %s für den neuen Zustand.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10738,55 +11180,55 @@
 "Ungültiges Argument %s für 'git bisect terms'.\n"
 "Unterstützte Optionen sind: --term-good|--term-old und --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "Einrichtung des Revisionsgangs fehlgeschlagen\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "konnte '%s' nicht zum Anhängen öffnen"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "'' ist kein gültiger Begriff"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "nicht erkannte Option: '%s'"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' scheint kein gültiger Commit zu sein"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "ungültiger HEAD - HEAD wird benötigt"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "Auschecken von '%s' fehlgeschlagen. Versuchen Sie 'git bisect start "
 "<gültiger-Branch>'."
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr ""
 "binäre Suche auf einem durch 'cg-seek' geändertem Verzeichnis nicht möglich"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "ungültiger HEAD - merkwürdige symbolische Referenz"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "ungültige Referenz: '%s'"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Sie müssen mit \"git bisect start\" beginnen\n"
 
@@ -10794,93 +11236,106 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Wollen Sie, dass ich es für Sie mache [Y/n]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Bitte führen Sie `--bisect-state` mit mindestens einem Argument aus"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "'git bisect %s' kann nur ein Argument entgegennehmen."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Ungültige Referenz-Eingabe: %s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Ungültige Referenz-Eingabe (kein Commit): %s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "Keine binäre Suche im Gange."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? Was reden Sie da?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "kann Datei '%s' nicht für die Wiederholung lesen"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "den Zustand der binären Suche zurücksetzen"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "den Zustand der binären Suche nach BISECT_LOG schreiben"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "Begriffe innerhalb einer binären Suche prüfen und setzen"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "prüfen, ob Begriffe für gute und schlechte Commits existieren"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "die Begriffe für die binäre Suche ausgeben"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "Sitzung für binäre Suche starten"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "nächsten Commit für die binäre Suche finden"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"überprüfe den nächsten Zustand der binären Suche, checke dann den nächsten "
-"Commit der binären Suche aus"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "den Status der Referenz(en) markieren"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "die bisherigen Schritte der binären Suche auflisten"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "binäre Suche aus der angegebenen Datei wiederholen"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "einige Commits für das Auschecken überspringen"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "kein Log für BISECT_WRITE"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset benötigt entweder kein Argument oder ein Commit"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write benötigt entweder 4 oder 5 Argumente"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms benötigt 3 Argumente"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check benötigt 2 oder 3 Argumente"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms benötigt 0 oder 1 Argument"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next benötigt 0 Argumente"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next benötigt 0 Argumente"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log benötigt 0 Argumente"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "keine Log-Datei angegeben"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10899,142 +11354,146 @@
 msgid "must end with a color"
 msgstr "muss mit einer Farbe enden"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "ungültige Farbe '%s' in color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "ungültiger Wert für blame.coloring"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "konnte Commit %s zum Ignorieren nicht finden"
 
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie finden"
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "keine Objektnamen für Grenz-Commits anzeigen (Standard: aus)"
+
 #: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie generieren"
-
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
-msgstr "Zeige keine Objektnamen für Grenz-Commits an (Standard: aus)"
-
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "Root-Commits nicht als Grenzen behandeln (Standard: aus)"
 
-#: builtin/blame.c:872
-msgid "Show work cost statistics"
+#: builtin/blame.c:870
+msgid "show work cost statistics"
 msgstr "Statistiken zum Arbeitsaufwand anzeigen"
 
-#: builtin/blame.c:873
-msgid "Force progress reporting"
+#: 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
+msgid "force progress reporting"
 msgstr "Fortschrittsanzeige erzwingen"
 
-#: builtin/blame.c:874
-msgid "Show output score for blame entries"
+#: builtin/blame.c:872
+msgid "show output score for blame entries"
 msgstr "Ausgabebewertung für \"blame\"-Einträge anzeigen"
 
-#: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
 msgstr "ursprünglichen Dateinamen anzeigen (Standard: auto)"
 
-#: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
 msgstr "ursprüngliche Zeilennummer anzeigen (Standard: aus)"
 
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
 msgstr "Anzeige in einem Format für maschinelle Auswertung"
 
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
 msgstr ""
 "Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile"
 
-#: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
-"Den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
+"den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
+
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr "unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
+
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr "langen Commit-SHA1 anzeigen (Standard: aus)"
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Langen Commit-SHA1 anzeigen (Standard: aus)"
+msgid "show author email instead of name (Default: off)"
+msgstr ""
+"statt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
+msgid "ignore whitespace differences"
+msgstr "Whitespace-Unterschiede ignorieren"
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr ""
-"Anstatt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Unterschiede im Whitespace ignorieren"
-
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "Commit"
 
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "ignoriere <Commit> beim Ausführen von 'blame'"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "ignoriere Commits aus <Datei>"
+
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "Ignoriere <Commit> beim Ausführen von 'blame'"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "Ignoriere Commits aus <Datei>"
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr "redundante Metadaten der vorherigen Zeile unterschiedlich einfärben"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "Zeilen nach Alter einfärben"
 
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr ""
+"mehr Arbeitsschritte ausführen, um eine bessere Übereinstimmung zu finden"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "Commits von <Datei> benutzen, statt \"git-rev-list\" aufzurufen"
+
 #: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Länger arbeiten, um bessere Übereinstimmungen zu finden"
-
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Commits von <Datei> benutzen, anstatt \"git-rev-list\" aufzurufen"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
+msgid "use <file>'s contents as the final image"
 msgstr "Inhalte der <Datei>en als endgültiges Abbild benutzen"
 
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "Bewertung"
 
-#: builtin/blame.c:892
-msgid "Find line copies within and across files"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
 msgstr "kopierte Zeilen innerhalb oder zwischen Dateien finden"
 
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
 msgstr "verschobene Zeilen innerhalb oder zwischen Dateien finden"
 
-#: builtin/blame.c:894
+#: builtin/blame.c:892
 msgid "range"
 msgstr "Bereich"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
-"Nur Zeilen im Bereich <Start>,<Ende> oder Funktion :<Funktionsname> "
+"nur Zeilen im Bereich <Start>,<Ende> oder Funktion :<Funktionsname> "
 "verarbeiten"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress kann nicht mit --incremental oder Formaten für Fremdprogramme\n"
@@ -11048,18 +11507,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "vor 4 Jahren und 11 Monaten"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "Datei %s hat nur %lu Zeile"
 msgstr[1] "Datei %s hat nur %lu Zeilen"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Verarbeite Zeilen"
 
@@ -11128,124 +11587,114 @@
 msgid "Update of config-file failed"
 msgstr "Aktualisierung der Konfigurationsdatei fehlgeschlagen."
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "kann -a nicht mit -d benutzen"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Konnte Commit-Objekt für HEAD nicht nachschlagen."
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Kann Branch '%s' nicht entfernen, ausgecheckt in '%s'."
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "Remote-Tracking-Branch '%s' nicht gefunden"
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "Branch '%s' nicht gefunden."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Fehler beim Entfernen des Remote-Tracking-Branches '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Fehler beim Entfernen des Branches '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Remote-Tracking-Branch %s entfernt (war %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Branch %s entfernt (war %s).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "Konnte Formatierungsstring nicht parsen."
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "Konnte HEAD-Commit nicht auflösen."
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) wurde nicht unter \"refs/heads/\" gefunden!"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Branch %s wird auf %s umgesetzt"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Binäre Suche von Branch %s zu %s im Gange"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr ""
 "Kann den aktuellen Branch nicht kopieren, solange Sie sich auf keinem "
 "befinden."
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 "Kann aktuellen Branch nicht umbenennen, solange Sie sich auf keinem befinden."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Ungültiger Branchname: '%s'"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Umbenennung des Branches fehlgeschlagen"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Kopie des Branches fehlgeschlagen"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Kopie eines falsch benannten Branches '%s' erstellt."
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "falsch benannten Branch '%s' umbenannt"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Branch umbenannt zu %s, aber HEAD ist nicht aktualisiert!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "Branch ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist "
 "fehlgeschlagen."
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "Branch wurde kopiert, aber die Aktualisierung der Konfigurationsdatei ist\n"
 "fehlgeschlagen."
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11256,181 +11705,181 @@
 "  %s\n"
 "Zeilen, die mit '%c' beginnen, werden entfernt.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Allgemeine Optionen"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "Hash und Betreff anzeigen; -vv: zusätzlich Upstream-Branch"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "Informationsmeldungen unterdrücken"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "Modus zum Folgen von Branches einstellen (siehe git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "nicht verwenden"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "Upstream"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "Informationen zum Upstream-Branch ändern"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "Informationen zum Upstream-Branch entfernen"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "farbige Ausgaben verwenden"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "auf Remote-Tracking-Branches wirken"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "nur Branches ausgeben, die diesen Commit enthalten"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "nur Branches ausgeben, die diesen Commit nicht enthalten"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "spezifische Aktionen für \"git-branch\":"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "Remote-Tracking und lokale Branches auflisten"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "vollständig zusammengeführten Branch entfernen"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "Branch löschen (auch wenn nicht zusammengeführt)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "einen Branch und dessen Reflog verschieben/umbenennen"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr ""
 "einen Branch verschieben/umbenennen, auch wenn das Ziel bereits existiert"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "einen Branch und dessen Reflog kopieren"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "einen Branch kopieren, auch wenn das Ziel bereits existiert"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "Branchnamen auflisten"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "Zeige aktuellen Branch-Namen."
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "das Reflog des Branches erzeugen"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "die Beschreibung für den Branch bearbeiten"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "Erstellung, Verschiebung/Umbenennung oder Löschung erzwingen"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "nur zusammengeführte Branches ausgeben"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "nur nicht zusammengeführte Branches ausgeben"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "Branches in Spalten auflisten"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "Objekt"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "nur Branches von diesem Objekt ausgeben"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "Sortierung und Filterung sind unabhängig von Groß- und Kleinschreibung"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "für die Ausgabe zu verwendendes Format"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
-msgstr "Die Optionen --column und --verbose sind inkompatibel."
+msgstr "--column und --verbose sind inkompatibel"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "Branchname erforderlich"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "zu losgelöstem HEAD kann keine Beschreibung hinterlegt werden"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "Beschreibung von mehr als einem Branch kann nicht bearbeitet werden"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Noch kein Commit in Branch '%s'."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Branch '%s' nicht vorhanden."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "zu viele Branches für eine Kopieroperation angegeben"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "zu viele Argumente für eine Umbenennen-Operation angegeben"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "zu viele Argumente angegeben, um Upstream-Branch zu setzen"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11438,34 +11887,34 @@
 "Konnte keinen neuen Upstream-Branch von HEAD zu %s setzen, da dieser auf\n"
 "keinen Branch zeigt."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
-msgstr "Kein solcher Branch '%s'"
+msgstr "Branch '%s' nicht gefunden"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "Branch '%s' existiert nicht"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr ""
 "zu viele Argumente angegeben, um Konfiguration zu Upstream-Branch zu "
 "entfernen"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "Konnte Konfiguration zu Upstream-Branch von HEAD nicht entfernen, da dieser\n"
 "auf keinen Branch zeigt."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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>?"
@@ -11474,7 +11923,7 @@
 "verwendet werden.\n"
 "Wollten Sie -a|-r --list <Muster> benutzen?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11544,38 +11993,38 @@
 "Bitte überprüfen Sie den restlichen Teil des Fehlerberichts unten.\n"
 "Sie können jede Zeile löschen, die Sie nicht mitteilen möchten.\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "Speicherort für die Datei des Fehlerberichts angeben"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "Dateiendung im strftime-Format für den Dateinamen angeben"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "konnte vorangehende Verzeichnisse für '%s' nicht erstellen"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "System Info"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "Aktivierte Hooks"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "konnte keine neue Datei unter '%s' erstellen"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "konnte nicht nach %s schreiben"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Neuer Bericht unter '%s' erstellt.\n"
@@ -11596,19 +12045,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <Datei> [<Referenzname>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "keine Fortschrittsanzeige anzeigen"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "Fortschrittsanzeige anzeigen"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "Forschrittsanzeige während des Schreibens von Objekten anzeigen"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "ähnlich zu --all-progress wenn Fortschrittsanzeige darstellt wird"
 
@@ -11755,8 +12204,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "Einträge von Ein- und Ausgabe mit NUL-Zeichen abschließen"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "Fortschrittsanzeige unterdrücken"
 
@@ -11768,28 +12217,27 @@
 msgid "ignore index when checking"
 msgstr "Index bei der Prüfung ignorieren"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "Angabe von Pfadnamen kann nicht gemeinsam mit --stdin verwendet werden"
 
-#: builtin/check-ignore.c:166
-msgid "-z only makes sense with --stdin"
-msgstr "Die Option -z kann nur mit --stdin verwendet werden."
-
 #: builtin/check-ignore.c:168
+msgid "-z only makes sense with --stdin"
+msgstr "-z kann nur mit --stdin verwendet werden"
+
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "kein Pfad angegeben"
 
-#: builtin/check-ignore.c:172
-msgid "--quiet is only valid with a single pathname"
-msgstr "Die Option --quiet ist nur mit einem einzelnen Pfadnamen gültig."
-
 #: builtin/check-ignore.c:174
-msgid "cannot have both --quiet and --verbose"
-msgstr ""
-"Die Optionen --quiet und --verbose können nicht gemeinsam verwendet werden."
+msgid "--quiet is only valid with a single pathname"
+msgstr "--quiet ist nur mit einem einzelnen Pfadnamen gültig"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:176
+msgid "cannot have both --quiet and --verbose"
+msgstr "--quiet und --verbose können nicht gemeinsam verwendet werden"
+
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching ist nur mit --verbose zulässig"
 
@@ -11810,169 +12258,173 @@
 msgid "no contacts specified"
 msgstr "keine Kontakte angegeben"
 
-#: builtin/checkout-index.c:139
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<Optionen>]"
+
+#: 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
+msgid "string"
+msgstr "Zeichenkette"
+
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+msgid "when creating files, prepend <string>"
+msgstr ""
+"wenn Dateien erzeugt werden, stelle <Zeichenkette> dem Dateinamen voran"
+
+#: builtin/checkout-index.c:152
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<Optionen>] [--] [<Datei>...]"
 
-#: builtin/checkout-index.c:156
+#: builtin/checkout-index.c:169
 msgid "stage should be between 1 and 3 or all"
 msgstr "--stage sollte zwischen 1 und 3 oder 'all' sein"
 
-#: builtin/checkout-index.c:173
+#: builtin/checkout-index.c:187
 msgid "check out all files in the index"
 msgstr "alle Dateien im Index auschecken"
 
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:188
 msgid "force overwrite of existing files"
 msgstr "das Überschreiben bereits existierender Dateien erzwingen"
 
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:190
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "keine Warnung für existierende Dateien, und Dateien, die sich nicht im Index "
 "befinden"
 
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:192
 msgid "don't checkout new files"
 msgstr "keine neuen Dateien auschecken"
 
-#: builtin/checkout-index.c:180
+#: builtin/checkout-index.c:194
 msgid "update stat information in the index file"
 msgstr "Dateiinformationen in der Index-Datei aktualisieren"
 
-#: builtin/checkout-index.c:184
+#: builtin/checkout-index.c:198
 msgid "read list of paths from the standard input"
 msgstr "eine Liste von Pfaden von der Standard-Eingabe lesen"
 
-#: builtin/checkout-index.c:186
+#: builtin/checkout-index.c:200
 msgid "write the content to temporary files"
 msgstr "den Inhalt in temporäre Dateien schreiben"
 
-#: builtin/checkout-index.c:187 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:757
-msgid "string"
-msgstr "Zeichenkette"
-
-#: builtin/checkout-index.c:188
-msgid "when creating files, prepend <string>"
-msgstr ""
-"wenn Dateien erzeugt werden, stelle <Zeichenkette> dem Dateinamen voran"
-
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "Dateien von dem benannten Stand kopieren"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<Optionen>] <Branch>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<Optionen>] [<Branch>] -- <Datei>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<Optionen>] [<Branch>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<Optionen>] [--source=<Branch>] <Datei>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "Pfad '%s' hat nicht unsere Version."
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "Pfad '%s' hat nicht deren Version."
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "Pfad '%s' hat nicht alle notwendigen Versionen."
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "Pfad '%s' hat nicht die notwendigen Versionen."
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "Pfad '%s': kann nicht zusammenführen"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Konnte Merge-Ergebnis von '%s' nicht hinzufügen."
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d Merge-Konflikt wieder erstellt"
 msgstr[1] "%d Merge-Konflikte wieder erstellt"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d Pfad von %s aktualisiert"
 msgstr[1] "%d Pfade von %s aktualisiert"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d Pfad vom Index aktualisiert"
 msgstr[1] "%d Pfade vom Index aktualisiert"
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' kann nicht mit der Aktualisierung von Pfaden verwendet werden"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' kann nicht mit '%s' verwendet werden"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln"
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "Weder '%s' noch '%s' ist angegeben"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' kann nur genutzt werden, wenn '%s' nicht verwendet wird"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' oder '%s' kann nicht mit %s verwendet werden"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "Pfad '%s' ist nicht zusammengeführt."
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "Sie müssen zuerst die Konflikte in Ihrem aktuellen Index auflösen."
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11981,50 +12433,50 @@
 "Kann nicht mit vorgemerkten Änderungen in folgenden Dateien fortsetzen:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Kann \"reflog\" für '%s' nicht durchführen: %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD ist jetzt bei"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "Konnte HEAD nicht aktualisieren."
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Setze Branch '%s' neu\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Bereits auf '%s'\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Zu umgesetztem Branch '%s' gewechselt\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Zu neuem Branch '%s' gewechselt\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Zu Branch '%s' gewechselt\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... und %d weitere.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12047,7 +12499,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12074,19 +12526,19 @@
 " git branch <neuer-Branchname> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "interner Fehler im Revisionsgang"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "Vorherige Position von HEAD war"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Sie sind auf einem Branch, der noch nicht geboren ist"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12096,7 +12548,7 @@
 "Bitte benutzen Sie -- (und optional --no-guess), um diese\n"
 "eindeutig voneinander zu unterscheiden."
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -12119,51 +12571,51 @@
 "bevorzugen möchten, z.B. 'origin', können Sie die Einstellung\n"
 "checkout.defaultRemote=origin in Ihrer Konfiguration setzen."
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' entspricht mehreren (%d) Remote-Tracking-Branches"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "nur eine Referenz erwartet"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "nur eine Referenz erwartet, %d gegeben."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "Ungültige Referenz: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "Referenz ist kein \"Tree\"-Objekt: %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "Ein Branch wird erwartet, Tag '%s' bekommen"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "Ein Branch wird erwartet, Remote-Branch '%s' bekommen"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "Ein Branch wird erwartet, '%s' bekommen"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "Ein Branch wird erwartet, Commit '%s' bekommen"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12171,7 +12623,7 @@
 "Der Branch kann nicht während eines Merges gewechselt werden.\n"
 "Ziehen Sie \"git merge --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12180,7 +12632,7 @@
 "werden.\n"
 "Ziehen Sie \"git am --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12189,7 +12641,7 @@
 "werden.\n"
 "Ziehen Sie \"git rebase --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12198,7 +12650,7 @@
 "gewechselt werden.\n"
 "Ziehen Sie \"git cherry-pick --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12207,147 +12659,140 @@
 "werden.\n"
 "Ziehen Sie \"git revert --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr "Sie wechseln den Branch während einer binären Suche"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "Pfade können nicht beim Wechseln von Branches verwendet werden"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' kann nicht beim Wechseln von Branches verwendet werden"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' kann nicht mit '%s' verwendet werden"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' kann nicht <Startpunkt> bekommen"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "Branch- oder Commit-Argument fehlt"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "Fortschrittsanzeige erzwingen"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "einen 3-Wege-Merge mit dem neuen Branch ausführen"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "Stil"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "Konfliktstil (merge oder diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "HEAD bei benanntem Commit loslösen"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "Informationen zum Upstream-Branch für den neuen Branch setzen"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "Auschecken erzwingen (verwirft lokale Änderungen)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "neuer Branch"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "neuer Branch ohne Eltern-Commit"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "ignorierte Dateien aktualisieren (Standard)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "Prüfung, ob die Referenz bereits in einem anderen Arbeitsverzeichnis "
 "ausgecheckt wurde, deaktivieren"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "unsere Variante für nicht zusammengeführte Dateien auschecken"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "ihre Variante für nicht zusammengeführte Dateien auschecken"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "keine Einschränkung bei Pfadspezifikationen zum partiellen Auschecken"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
-msgstr "die Optionen -%c, -%c und --orphan schließen sich gegenseitig aus"
+msgstr "-%c, -%c und --orphan schließen sich gegenseitig aus"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
-msgstr "-p und --overlay schließen sich gegenseitig aus."
+msgstr "-p und --overlay schließen sich gegenseitig aus"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
-msgstr "Bei der Option --track muss ein Branchname angegeben werden."
+msgstr "--track benötigt ein Branchname"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "kein Branchname; versuchen Sie -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
-msgstr "Konnte %s nicht auflösen."
+msgstr "konnte %s nicht auflösen"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "ungültige Pfadspezifikation"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "'%s' ist kein Commit und es kann kein Branch '%s' aus diesem erstellt werden."
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach nimmt kein Pfad-Argument '%s'"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
-msgstr "Die Optionen --pathspec-from-file und --detach sind inkompatibel."
+msgstr "--pathspec-from-file und --detach sind inkompatibel"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
-msgstr "Die Optionen --pathspec-from-file und --patch sind inkompatibel."
+msgstr "--pathspec-from-file und --patch sind inkompatibel"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12355,70 +12800,70 @@
 "git checkout: --ours/--theirs, --force und --merge sind inkompatibel wenn\n"
 "Sie aus dem Index auschecken."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "Sie müssen Pfad(e) zur Wiederherstellung angeben."
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "Branch"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "einen neuen Branch erzeugen und auschecken"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "einen Branch erstellen/umsetzen und auschecken"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "das Reflog für den neuen Branch erzeugen"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "Zweite Vermutung 'git checkout <kein-solcher-Branch>' (Standard)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "benutze Overlay-Modus (Standard)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "einen neuen Branch erzeugen und dahin wechseln"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "einen Branch erstellen/umsetzen und dahin wechseln"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "Zweite Vermutung 'git switch <kein-solcher-Branch>'"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "lokale Änderungen verwerfen"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "Von welcher Commit-Referenz ausgecheckt werden soll"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "Index wiederherstellen"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "das Arbeitsverzeichnis wiederherstellen (Standard)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "ignoriere nicht zusammengeführte Einträge"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "benutze Overlay-Modus"
 
@@ -12448,11 +12893,6 @@
 msgid "Would skip repository %s\n"
 msgstr "Würde Repository %s überspringen\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "Fehler beim Löschen von %s"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12563,8 +13003,8 @@
 msgstr "ganze Verzeichnisse löschen"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "Muster"
@@ -12599,176 +13039,181 @@
 
 #: builtin/clean.c:944
 msgid "-x and -X cannot be used together"
-msgstr "Die Optionen -x und -X können nicht gemeinsam verwendet werden."
+msgstr "-x und -X können nicht gemeinsam verwendet werden"
 
 #: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<Optionen>] [--] <Repository> [<Verzeichnis>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "Repository mit unvollständiger Historie nicht klonen"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "kein Auschecken"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "ein Bare-Repository erstellen"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "ein Spiegelarchiv erstellen (impliziert --bare)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "von einem lokalen Repository klonen"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "lokal keine harten Verweise verwenden, immer Kopien"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "als verteiltes Repository einrichten"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "Pfadspezifikation"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "Submodule im Klon initialisieren"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "Anzahl der parallel zu klonenden Submodule"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "Vorlagenverzeichnis"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "Verzeichnis, von welchem die Vorlagen verwendet werden"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "Repository referenzieren"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "--reference nur während des Klonens benutzen"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "Name"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "<Name> statt 'origin' für Upstream-Repository verwenden"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "<Branch> auschecken, anstatt HEAD des Remote-Repositories"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "Tiefe"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) in dieser Tiefe erstellen"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "Zeit"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) seit einer bestimmten "
 "Zeit\n"
 "erstellen"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "Commit"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
 "Ausschluss eines Commits vertiefen"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "nur einen Branch klonen, HEAD oder --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "keine Tags klonen, und auch bei späteren Abrufen nicht beachten"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "jedes geklonte Submodul mit unvollständiger Historie (shallow)"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr ".git-Verzeichnis"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "Git-Verzeichnis vom Arbeitsverzeichnis separieren"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "Schlüssel=Wert"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "Konfiguration innerhalb des neuen Repositories setzen"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "serverspezifisch"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "Option übertragen"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "nur IPv4-Adressen benutzen"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "nur IPv6-Adressen benutzen"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "jedes geklonte Submodul nutzt seinen Remote-Tracking-Branch"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "Initialisiere Datei für partiellen Checkout, um nur Dateien im\n"
 "Root-Verzeichnis einzubeziehen"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12776,42 +13221,42 @@
 "Konnte keinen Verzeichnisnamen erraten.\n"
 "Bitte geben Sie ein Verzeichnis auf der Befehlszeile an."
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Konnte Alternative für '%s' nicht hinzufügen: %s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existiert und ist kein Verzeichnis"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "Fehler beim Starten der Iteration über '%s'"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "Konnte Verweis '%s' nicht erstellen"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "Konnte Datei nicht nach '%s' kopieren"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "Fehler beim Iterieren über '%s'"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "Fertig.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12821,107 +13266,107 @@
 "Sie können mit 'git status' prüfen, was ausgecheckt worden ist\n"
 "und das Auschecken mit 'git restore --source=HEAD :/' erneut versuchen.\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Konnte zu klonenden Remote-Branch %s nicht finden."
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "kann %s nicht aktualisieren"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "Fehler beim Initialisieren vom partiellen Checkout."
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "Externer HEAD bezieht sich auf eine nicht existierende Referenz und kann "
 "nicht ausgecheckt werden.\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "konnte Parameter nicht in Konfigurationsdatei schreiben"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "Kann \"repack\" zum Aufräumen nicht aufrufen"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "Kann temporäre \"alternates\"-Datei nicht entfernen"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Zu viele Argumente."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Sie müssen ein Repository zum Klonen angeben."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
-msgstr "Die Optionen --bare und --origin %s sind inkompatibel."
+msgstr "--bare und --origin %s sind inkompatibel."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
-msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel."
+msgstr "--bare und --separate-git-dir sind inkompatibel."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
-msgstr "Repository '%s' existiert nicht."
+msgstr "Repository '%s' existiert nicht"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "Tiefe %s ist keine positive Zahl"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr ""
 "Pfad des Repositories '%s' existiert bereits und ist kein leeres Verzeichnis."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "Arbeitsverzeichnis '%s' existiert bereits."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klone in Bare-Repository '%s' ...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klone nach '%s' ...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -12929,50 +13374,51 @@
 "'clone --recursive' ist nicht kompatibel mit --reference und --reference-if-"
 "able"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' ist kein gültiger Name für ein Remote-Repository"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
-"Die Option --depth wird in lokalen Klonen ignoriert; benutzen Sie "
-"stattdessen file://"
+"--depth wird in lokalen Klonen ignoriert; benutzen Sie stattdessen \"file://"
+"\"."
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
-"file://"
+"\"file://\"."
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
-"file://"
+"\"file://\"."
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
-"--filter wird in lokalen Klonen ignoriert; benutzen Sie stattdessen file://"
+"--filter wird in lokalen Klonen ignoriert; benutzen Sie stattdessen \"file://"
+"\"."
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 "Quelle ist ein Repository mit unvollständiger Historie (shallow),\n"
 "ignoriere --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local wird ignoriert"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Sie scheinen ein leeres Repository geklont zu haben."
 
@@ -12989,24 +13435,24 @@
 msgstr "zu verwendende Anordnung"
 
 #: builtin/column.c:30
-msgid "Maximum width"
+msgid "maximum width"
 msgstr "maximale Breite"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
-msgstr "Abstand zum linken Rand"
+msgid "padding space on left border"
+msgstr "Abstand zum linken Rand auffüllen"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
-msgstr "Abstand zum rechten Rand"
+msgid "padding space on right border"
+msgstr "Abstand zum rechten Rand auffüllen"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "Abstand zwischen Spalten"
+msgid "padding space between columns"
+msgstr "Abstand zwischen Spalten auffüllen"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
-msgstr "Die Option --command muss an erster Stelle stehen."
+msgstr "--command muss an erster Stelle stehen"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:22
 msgid ""
@@ -13031,14 +13477,14 @@
 msgstr "konnte Objekt-Verzeichnis nicht finden, dass '%s' entsprechen soll"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "Verzeichnis"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
-msgstr "Das Objektverzeichnis zum Speichern des Graphen."
+msgid "the object directory to store the graph"
+msgstr "das Objektverzeichnis zum Speichern des Graphen"
 
 #: builtin/commit-graph.c:83
 msgid "if the commit-graph is split, only verify the tip file"
@@ -13132,7 +13578,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "doppelter Vorgänger %s ignoriert"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "Kein gültiger Objektname: %s"
@@ -13160,13 +13606,13 @@
 msgid "id of a parent commit object"
 msgstr "ID eines Eltern-Commit-Objektes."
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "Beschreibung"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "Commit-Beschreibung"
 
@@ -13174,7 +13620,7 @@
 msgid "read commit log message from file"
 msgstr "Commit-Beschreibung von Datei lesen"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Commit mit GPG signieren"
@@ -13250,74 +13696,74 @@
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "Fehler beim Entpacken des Tree-Objektes von HEAD."
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "Option --pathspec-from-file mit -a ist nicht sinnvoll."
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "Keine Pfade mit der Option --include/--only ist nicht sinnvoll."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "Konnte temporären Index nicht erstellen."
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "interaktives Hinzufügen fehlgeschlagen"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "Konnte temporären Index nicht aktualisieren."
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Konnte Haupt-Cache-Verzeichnis nicht aktualisieren"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "Konnte new_index Datei nicht schreiben"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "Kann keinen Teil-Commit durchführen, während ein Merge im Gange ist."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 "Kann keinen Teil-Commit durchführen, während \"cherry-pick\" im Gange ist."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "kann keinen Teil-Commit durchführen, während ein Rebase im Gange ist."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "Kann Index nicht lesen"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "Konnte temporäre Index-Datei nicht schreiben."
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "Commit '%s' fehlt Autor-Kopfbereich"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "Commit '%s' hat fehlerhafte Autor-Zeile"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "Fehlerhafter --author Parameter"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13325,38 +13771,43 @@
 "Konnte kein Kommentar-Zeichen auswählen, das nicht in\n"
 "der aktuellen Commit-Beschreibung verwendet wird."
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "Konnte Commit %s nicht nachschlagen"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(lese Log-Nachricht von Standard-Eingabe)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "Konnte Log nicht von Standard-Eingabe lesen."
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "Konnte Log-Datei '%s' nicht lesen"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "-m kann nicht mit --fixup:%s kombiniert werden"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "Konnte SQUASH_MSG nicht lesen"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "Konnte MERGE_MSG nicht lesen"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "Konnte Commit-Vorlage nicht schreiben"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13370,7 +13821,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "aus und versuchen Sie es erneut.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13384,7 +13835,7 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "aus und versuchen Sie es erneut.\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13394,7 +13845,7 @@
 "die mit '%c' beginnen, werden ignoriert, und eine leere Beschreibung\n"
 "bricht den Commit ab.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13407,153 +13858,182 @@
 "entfernen.\n"
 "Eine leere Beschreibung bricht den Commit ab.\n"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:           %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sDatum:            %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sCommit-Ersteller: %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "Kann Index nicht lesen"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "konnte Anhänge nicht an --trailers weitergeben"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Fehler beim Erzeugen der \"Tree\"-Objekte"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr ""
 "Bitte liefern Sie eine Beschreibung entweder mit der Option -m oder -F.\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' ist nicht im Format 'Name <E-Mail>' und stimmt mit keinem "
 "vorhandenen Autor überein"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Ungültiger ignored-Modus '%s'."
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Ungültiger Modus '%s' für unversionierte Dateien"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
-msgstr "Die Optionen --long und -z sind inkompatibel."
+msgstr "--long und -z sind inkompatibel"
 
-#: builtin/commit.c:1171
-msgid "Using both --reset-author and --author does not make sense"
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "Ein Merge ist im Gange -- kann Umformulierung nicht durchführen."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "\"cherry-pick\" ist im Gange -- kann Umformulierung nicht durchführen."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
 msgstr ""
-"Die Optionen --reset-author und --author können nicht gemeinsam verwendet "
-"werden."
+"Option für Umformulierung bei --fixup kann nicht mit Pfad '%s' kombiniert "
+"werden"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"Umformulierungsoption von --fixup und --patch/--interactive/--all/--"
+"include/--only schließen sich gegenseitig aus"
+
+#: builtin/commit.c:1245
+msgid "Using both --reset-author and --author does not make sense"
+msgstr "--reset-author und --author können nicht gemeinsam verwendet werden"
+
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "Sie haben nichts für \"--amend\"."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Ein Merge ist im Gange -- kann \"--amend\" nicht ausführen."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "\"cherry-pick\" ist im Gange -- kann \"--amend\" nicht ausführen."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Ein Rebase ist im Gange -- kann \"--amend\" nicht ausführen."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr ""
-"Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden."
+"Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Es kann nur eine Option von -c/-C/-F/--fixup verwendet werden."
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "Die Option -m kann nicht mit -c/-C/-F kombiniert werden."
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
-msgstr ""
-"Die Option --reset--author kann nur mit -C, -c oder --amend verwendet werden."
+msgstr "--reset--author kann nur mit -C, -c oder --amend verwendet werden"
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "Es kann nur eine Option von --include/--only/--all/--interactive/--patch "
 "verwendet werden."
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "unbekannte Option: --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "Pfade '%s ...' mit -a sind nicht sinnvoll"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "Status im Kurzformat anzeigen"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "Branchinformationen anzeigen"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "Stashinformationen anzeigen"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "voraus/hinterher-Werte berechnen"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "Version"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "maschinenlesbare Ausgabe"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "Status im Langformat anzeigen (Standard)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "Einträge mit NUL-Zeichen abschließen"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "Modus"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "unversionierte Dateien anzeigen, optionale Modi: all, normal, no. (Standard: "
 "all)"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13561,11 +14041,11 @@
 "ignorierte Dateien anzeigen, optionale Modi: traditional, matching, no. "
 "(Standard: traditional)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "wann"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13573,174 +14053,195 @@
 "Änderungen in Submodulen ignorieren, optional wenn: all, dirty, untracked. "
 "(Standard: all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "unversionierte Dateien in Spalten auflisten"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "keine Umbenennungen ermitteln"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "Umbenennungen erkennen, optional Index für Gleichheit setzen"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Nicht unterstützte Kombination von ignored und untracked-files Argumenten."
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "Zusammenfassung nach erfolgreichem Commit unterdrücken"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "Unterschiede in Commit-Beschreibungsvorlage anzeigen"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Optionen für Commit-Beschreibung"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "Beschreibung von Datei lesen"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "Autor"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "Autor eines Commits überschreiben"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "Datum"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "Datum eines Commits überschreiben"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "Commit"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "Beschreibung des angegebenen Commits wiederverwenden und editieren"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "Beschreibung des angegebenen Commits wiederverwenden"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]Commit"
+
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
-"eine automatisch zusammengesetzte Beschreibung zum Nachbessern des "
+"eine autosquash-formatierte Beschreibung zum Nachbessern/Umformulieren des "
 "angegebenen Commits verwenden"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
-"eine automatisch zusammengesetzte Beschreibung beim \"squash\" des "
-"angegebenen Commits verwenden"
+"eine autosquash-formatierte Beschreibung beim \"squash\" des angegebenen "
+"Commits verwenden"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "Sie als Autor des Commits setzen (verwendet mit -C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "Anhang"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "benutzerdefinierte Anhänge hinzufügen"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "eine Signed-off-by Zeile hinzufügen"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "angegebene Vorlagendatei verwenden"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "Bearbeitung des Commits erzwingen"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "Status in die Commit-Beschreibungsvorlage einfügen"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Optionen für Commit-Inhalt"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "alle geänderten Dateien committen"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "die angegebenen Dateien zusätzlich zum Commit vormerken"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "interaktives Hinzufügen von Dateien"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "interaktives Hinzufügen von Änderungen"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "nur die angegebenen Dateien committen"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "Hooks pre-commit und commit-msg umgehen"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "anzeigen, was committet werden würde"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "vorherigen Commit ändern"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "\"post-rewrite hook\" umgehen"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "Aufzeichnung einer leeren Änderung erlauben"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "Aufzeichnung einer Änderung mit einer leeren Beschreibung erlauben"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Beschädigte MERGE_HEAD-Datei (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "Konnte MERGE_MODE nicht lesen"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "Konnte Commit-Beschreibung nicht lesen: %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Commit aufgrund leerer Beschreibung abgebrochen.\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Commit abgebrochen; Sie haben die Beschreibung nicht editiert.\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "Commit aufgrund leerer Commit-Beschreibung abgebrochen.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14079,7 +14580,7 @@
 #: builtin/config.c:943 builtin/config.c:954
 #, c-format
 msgid "no such section: %s"
-msgstr "Keine solche Sektion: %s"
+msgstr "Sektion nicht gefunden: %s"
 
 #: builtin/count-objects.c:90
 msgid "git count-objects [-v] [-H | --human-readable]"
@@ -14089,7 +14590,7 @@
 msgid "print sizes in human readable format"
 msgstr "gibt Größenangaben in menschenlesbaren Format aus"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -14105,11 +14606,11 @@
 "\n"
 "auszuführen."
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "Meldungen zur Fehlersuche in Standard-Fehlerausgabe ausgeben"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
 "credential-cache--daemon nicht verfügbar; Unix-Socket wird nicht unterstützt"
@@ -14278,7 +14779,7 @@
 
 #: builtin/describe.c:593
 msgid "--long is incompatible with --abbrev=0"
-msgstr "Die Optionen --long und --abbrev=0 sind inkompatibel."
+msgstr "--long und --abbrev=0 sind inkompatibel"
 
 #: builtin/describe.c:622
 msgid "No names found, cannot describe anything."
@@ -14286,11 +14787,11 @@
 
 #: builtin/describe.c:673
 msgid "--dirty is incompatible with commit-ishes"
-msgstr "Die Option --dirty kann nicht mit Commits verwendet werden."
+msgstr "--dirty kann nicht mit Commits verwendet werden"
 
 #: builtin/describe.c:675
 msgid "--broken is incompatible with commit-ishes"
-msgstr "Die Option --broken kann nicht mit Commits verwendet werden."
+msgstr "--broken kann nicht mit Commits verwendet werden"
 
 #: builtin/diff-tree.c:155
 msgid "--stdin and --merge-base are mutually exclusive"
@@ -14300,70 +14801,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base funktioniert nur mit zwei Commits"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s': keine reguläre Datei oder symbolische Verknüpfung"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "Ungültige Option: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: keine Merge-Basis"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "Kein Git-Repository"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "Objekt '%s' ist ungültig."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "Mehr als zwei Blobs angegeben: '%s'"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "unbehandeltes Objekt '%s' angegeben"
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: mehrere Merge-Basen, nutze %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<Optionen>] [<Commit> [<Commit>]] [--] [<Pfad>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "fehlgeschlagen: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "konnte symbolische Verknüpfung %s nicht lesen"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "Konnte Datei von symbolischer Verknüpfung '%s' nicht lesen."
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "Konnte Objekt '%s' für symbolische Verknüpfung '%s' nicht lesen."
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14371,54 +14872,54 @@
 "Kombinierte Diff-Formate('-c' und '--cc') werden im Verzeichnis-\n"
 "Diff-Modus('-d' und '--dir-diff') nicht unterstützt."
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "beide Dateien geändert: '%s' und '%s'."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "Datei im Arbeitsverzeichnis belassen."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "Es existieren temporäre Dateien in '%s'."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "Sie könnten diese aufräumen oder wiederherstellen."
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
-msgstr "`diff.guitool` anstatt `diff.tool` benutzen"
+msgstr "`diff.guitool` statt `diff.tool` benutzen"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "Diff über ganzes Verzeichnis ausführen"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "keine Eingabeaufforderung vor Ausführung eines Diff-Tools"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "symbolische Verknüpfungen im dir-diff Modus verwenden"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "Tool"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "das angegebene Diff-Tool benutzen"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "eine Liste mit Diff-Tools darstellen, die mit `--tool` benutzt werden können"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -14427,31 +14928,31 @@
 "Rückkehrwert\n"
 "verschieden 0 ausgeführt wurde"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "eigenen Befehl zur Anzeige von Unterschieden angeben"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "an 'diff' übergeben"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool benötigt Arbeitsverzeichnis oder --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff kann nicht mit --no-index verwendet werden"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool und --extcmd schließen sich gegenseitig aus"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "kein <Tool> für --tool=<Tool> angegeben"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "kein <Programm> für --extcmd=<Programm> angegeben"
 
@@ -14519,39 +15020,39 @@
 "Auswählen der Behandlung von Commit-Beschreibungen bei wechselndem Encoding"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
+msgid "dump marks to this file"
 msgstr "Markierungen in diese Datei schreiben"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
 msgstr "Markierungen von dieser Datei importieren"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
+msgid "import marks from this file if it exists"
 msgstr "Markierungen von dieser Datei importieren, wenn diese existiert"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "künstlich einen Tag-Ersteller erzeugen, wenn das Tag keinen hat"
+msgid "fake a tagger when tags lack one"
+msgstr "einen Tag-Ersteller vortäuschen, wenn das Tag keinen hat"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
+msgid "output full tree for each commit"
 msgstr "für jeden Commit das gesamte Verzeichnis ausgeben"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
+msgid "use the done feature to terminate the stream"
 msgstr "die \"done\"-Funktion benutzen, um den Datenstrom abzuschließen"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
+msgid "skip output of blob data"
 msgstr "Ausgabe von Blob-Daten überspringen"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "Refspec"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
+msgid "apply refspec to exported refs"
 msgstr "Refspec auf exportierte Referenzen anwenden"
 
 #: builtin/fast-export.c:1224
@@ -14567,17 +15068,17 @@
 msgstr "konvertiere <von> zu <nach> in anonymisierter Ausgabe"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
 "Eltern, die nicht im Fast-Export-Stream sind, anhand ihrer Objekt-ID "
 "referenzieren"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
+msgid "show original object ids of blobs/commits"
 msgstr "originale Objekt-IDs von Blobs/Commits anzeigen"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
+msgid "label tags with mark ids"
 msgstr "Tags mit Markierungs-IDs beschriften"
 
 #: builtin/fast-export.c:1256
@@ -14619,7 +15120,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "Feature '%s' verboten in Eingabe ohne Option --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Lock-Datei erstellt, aber nicht gemeldet: %s"
@@ -14640,100 +15141,110 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<Optionen>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel kann nicht negativ sein"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "fordert von allen Remote-Repositories an"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "Upstream für \"git pull/fetch\" setzen"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
-msgstr "an .git/FETCH_HEAD anhängen, anstatt zu überschreiben"
+msgstr "an .git/FETCH_HEAD anhängen statt zu überschreiben"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "atomare Transaktionen nutzen, um Referenzen zu aktualisieren"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "das Überschreiben einer lokalen Referenz erzwingen"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "von mehreren Remote-Repositories anfordern"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "alle Tags und verbundene Objekte anfordern"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "nicht alle Tags anfordern (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "Anzahl der parallel anzufordernden Submodule"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+"Refspec verändern, damit alle Referenzen unter refs/prefetch/ platziert "
+"werden"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "Remote-Tracking-Branches entfernen, die sich nicht mehr im Remote-Repository "
 "befinden"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "lokale Tags entfernen, die sich nicht mehr im Remote-Repository befinden, "
 "und geänderte Tags aktualisieren"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "bei-Bedarf"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "rekursive Anforderungen von Submodulen kontrollieren"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "schreibe angeforderte Referenzen in die FETCH_HEAD-Datei"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "heruntergeladenes Paket behalten"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "Aktualisierung der \"HEAD\"-Referenz erlauben"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) vertiefen"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) auf "
 "Zeitbasis\n"
 "vertiefen"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "zu einem vollständigen Repository konvertieren"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "dies an die Ausgabe der Submodul-Pfade voranstellen"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14741,100 +15252,106 @@
 "Standard für die rekursive Anforderung von Submodulen (geringere Priorität\n"
 "als Konfigurationsdateien)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "Referenzen, die .git/shallow aktualisieren, akzeptieren"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "Refmap"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "Refmap für 'fetch' angeben"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "ausgeben, dass wir nur Objekte haben, die von diesem Objekt aus erreichbar "
 "sind"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+"keine Packdatei anfordern; stattdessen die Vorgänger der Verhandlungstipps "
+"anzeigen"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "führe 'maintenance --auto' nach \"fetch\" aus"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "Prüfe auf erzwungene Aktualisierungen in allen aktualisierten Branches"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "Schreibe den Commit-Graph nach \"fetch\""
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "akzeptiere Refspecs von der Standard-Eingabe"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "Konnte Remote-Referenz von HEAD nicht finden."
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "Konfiguration fetch.output enthält ungültigen Wert %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "Objekt %s nicht gefunden"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[aktuell]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[zurückgewiesen]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "kann \"fetch\" im aktuellen Branch nicht ausführen"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[Tag Aktualisierung]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "kann lokale Referenz nicht aktualisieren"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "würde bestehende Tags verändern"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[neues Tag]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[neuer Branch]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[neue Referenz]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "Aktualisierung erzwungen"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "kein Vorspulen"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14845,7 +15362,7 @@
 "aktivieren, nutzen Sie die Option '--show-forced-updated' oder führen\n"
 "Sie 'git config fetch.showForcedUpdates true' aus."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14858,12 +15375,12 @@
 "'git config fetch.showForcedUpdates false' ausführen, um diese Überprüfung\n"
 "zu umgehen.\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
@@ -14871,12 +15388,12 @@
 "unvollständiger\n"
 "Historie (shallow) nicht aktualisiert werden dürfen."
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "Von %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14885,58 +15402,58 @@
 "Einige lokale Referenzen konnten nicht aktualisiert werden; versuchen Sie\n"
 "'git remote prune %s', um jeden älteren, widersprüchlichen Branch zu löschen."
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s wird unreferenziert)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s wurde unreferenziert)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[gelöscht]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(nichts)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 "Der \"fetch\" in den aktuellen Branch %s von einem Nicht-Bare-Repository "
 "wurde verweigert."
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Option \"%s\" wird ignoriert für %s\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "Mehrere Branches erkannt, inkompatibel mit --set-upstream"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "Setze keinen Upstream für einen entfernten Remote-Tracking-Branch."
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "Setze keinen Upstream für einen Tag eines Remote-Repositories."
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "Unbekannter Branch-Typ"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14944,22 +15461,22 @@
 "Keinen Quell-Branch gefunden.\n"
 "Sie müssen bei der Option --set-upstream genau einen Branch angeben."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Fordere an von %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Konnte nicht von %s anfordern"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "Konnte '%s' nicht anfordern (Exit-Code: %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14968,49 +15485,56 @@
 "oder den Namen des Remote-Repositories an, von welchem neue\n"
 "Commits angefordert werden sollen."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Sie müssen den Namen des Tags angeben."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "Negative Tiefe wird von --deepen nicht unterstützt."
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen und --depth schließen sich gegenseitig aus"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
-msgstr ""
-"Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden."
+msgstr "--depth und --unshallow können nicht gemeinsam verwendet werden"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr ""
-"Die Option --unshallow kann nicht in einem Repository mit vollständiger "
-"Historie verwendet werden."
+"--unshallow kann nicht in einem Repository mit vollständiger Historie "
+"verwendet werden"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all akzeptiert kein Repository als Argument"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
-msgstr "fetch --all kann nicht mit Refspecs verwendet werden."
+msgstr "fetch --all kann nicht mit Refspecs verwendet werden"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
-msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s"
+msgstr "Remote-Repository (einzeln oder Gruppe) nicht gefunden: %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "Das Abholen einer Gruppe von Remote-Repositories kann nicht mit der Angabe\n"
 "von Refspecs verwendet werden."
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "Remote wird benötigt, wenn --negotiate-only benutzt wird"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Protokoll unterstützt --negotiate-only nicht, beende."
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15018,11 +15542,17 @@
 "--filter kann nur mit den Remote-Repositories verwendet werden,\n"
 "die in extensions.partialclone konfiguriert sind"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr ""
+"--atomic kann nur verwendet werden, wenn nur von einem Remote-Repository "
+"abgefragt wird"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
-"die Option --stdin kann nur verwendet werden, wenn nur von einem Remote-\n"
-"Repository abgefragt wird"
+"--stdin kann nur verwendet werden, wenn nur von einem Remote-Repository "
+"abgefragt wird"
 
 #: builtin/fmt-merge-msg.c:7
 msgid ""
@@ -15067,47 +15597,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<Objekt>]] [--no-contains [<Commit>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "Platzhalter als Shell-String formatieren"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "Platzhalter als Perl-String formatieren"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "Platzhalter als Python-String formatieren"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "Platzhalter als Tcl-String formatieren"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "nur <n> passende Referenzen anzeigen"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "Formatfarben beachten"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "nur auf dieses Objekt zeigende Referenzen ausgeben"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "nur zusammengeführte Referenzen ausgeben"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "nur nicht zusammengeführte Referenzen ausgeben"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "nur Referenzen ausgeben, die diesen Commit enthalten"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "nur Referenzen ausgeben, die diesen Commit nicht enthalten"
 
@@ -15127,32 +15657,32 @@
 msgid "missing --config=<config>"
 msgstr "Option --config=<Konfiguration> fehlt"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "unbekannt"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "Fehler in %s %s: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "Warnung in %s %s: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "fehlerhafte Verknüpfung von %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "falscher Objekttyp in Verknüpfung"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -15161,211 +15691,211 @@
 "fehlerhafte Verknüpfung von %7s %s\n"
 "                       nach %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "%s %s fehlt"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "%s %s nicht erreichbar"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "%s %s unreferenziert"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "Konnte lost-found nicht erstellen."
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "Konnte '%s' nicht abschließen."
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "Prüfe %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Prüfe Konnektivität (%d Objekte)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "Prüfe %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "Fehlerhafte Verknüpfungen"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "Wurzel %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "%s %s (%s) in %s getaggt"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: Objekt fehlerhaft oder nicht vorhanden"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: Ungültiger Reflog-Eintrag %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Prüfe Reflog %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: Ungültiger SHA1-Zeiger %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: kein Commit"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "Notiz: Keine Standardreferenzen"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: Objekt fehlerhaft oder nicht vorhanden: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: Objekt konnte nicht geparst werden: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "Ungültige SHA1-Datei: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Prüfe Objekt-Verzeichnis"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Prüfe Objekt-Verzeichnisse"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "Prüfe %s Verknüpfung"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "Ungültiger Objekt-Typ %s"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s zeigt auf etwas seltsames (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: losgelöster HEAD zeigt auf nichts"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "Notiz: %s zeigt auf einen ungeborenen Branch (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Prüfe Cache-Verzeichnis"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: Ungültiger SHA1-Zeiger in Cache-Verzeichnis"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "non-tree in Cache-Verzeichnis"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<Optionen>] [<Objekt>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "unerreichbare Objekte anzeigen"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "unreferenzierte Objekte anzeigen"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "Tags melden"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "Hauptwurzeln melden"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "Index-Objekte in Erreichbarkeitsprüfung einbeziehen"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "Reflogs in Erreichbarkeitsprüfung einbeziehen (Standard)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "ebenso Pakete und alternative Objekte betrachten"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "nur Konnektivität prüfen"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "genauere Prüfung aktivieren"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "unreferenzierte Objekte nach .git/lost-found schreiben"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "Fortschrittsanzeige anzeigen"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "ausführliche Namen für erreichbare Objekte anzeigen"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Prüfe Objekte"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: Objekt nicht vorhanden"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "Ungültiger Parameter: SHA-1 erwartet, '%s' bekommen"
@@ -15374,27 +15904,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<Optionen>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Konnte '%s' nicht lesen: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "Fehler beim Parsen von '%s' mit dem Wert '%s'"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "Kann '%s' nicht lesen"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "kann '%s' nicht lesen"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15410,58 +15940,58 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "unreferenzierte Objekte entfernen"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "mehr Gründlichkeit (erhöht Laufzeit)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "\"auto-gc\" Modus aktivieren"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 "Ausführung von \"git gc\" erzwingen, selbst wenn ein anderes\n"
 "\"git gc\" bereits ausgeführt wird"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "alle anderen Pakete, außer das größte Paket, neu packen"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "Fehler beim Parsen des Wertes '%s' von gc.logexpiry."
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "Fehler beim Parsen des \"prune expiry\" Wertes %s"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Die Datenbank des Repositories wird für eine optimale Performance im\n"
 "Hintergrund komprimiert.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr ""
 "Die Datenbank des Projektarchivs wird für eine optimale Performance "
 "komprimiert.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Siehe \"git help gc\" für manuelles Aufräumen.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15469,149 +15999,176 @@
 "\"git gc\" wird bereits auf Maschine '%s' pid %<PRIuMAX> ausgeführt\n"
 "(benutzen Sie --force falls nicht)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Es gibt zu viele unerreichbare lose Objekte; führen Sie 'git prune' aus, um "
 "diese zu löschen."
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<Aufgabe>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule ist nicht erlaubt"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "nicht erkanntes --schedule Argument '%s'"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "Fehler beim Schreiben des Commit-Graph"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "Fehler beim Eintragen der Remote-Repositories"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "Vorabruf der Remote-Repositories fehlgeschlagen"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "konnte 'git pack-objects' Prozess nicht starten"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "konnte 'git pack-objects' Prozess nicht beenden"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "Fehler beim Schreiben des multi-pack-index"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "Fehler beim Ausführen von 'git multi-pack-index expire'"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "Fehler beim Ausführen von 'git multi-pack-index repack'"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 "Überspringen der Aufgabe 'incremental-repack', weil core.multiPackIndex "
 "deaktiviert ist"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "Sperrdatei '%s' existiert, Wartung wird übersprungen"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "Aufgabe '%s' fehlgeschlagen"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' ist keine gültige Aufgabe"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "Aufgabe '%s' kann nicht mehrfach ausgewählt werden"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "Aufgaben abhängig vom Zustand des Repositories ausführen"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "Häufigkeit"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "Aufgaben abhängig von der Häufigkeit ausführen"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "zeige keinen Fortschritt oder andere Informationen über stderr"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "Aufgabe"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "eine bestimmte Aufgabe ausführen"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr ""
 "nutzen Sie höchstens eine der Optionen --auto oder --schedule=<Häufigkeit>"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "Fehler beim Ausführen von 'git config'"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "ein anderer Prozess plant die Hintergrundwartung"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "Fehler beim Erweitern des Pfades '%s'"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "konnte launchctl nicht starten"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "Fehler beim Erstellen von Verzeichnissen für '%s'"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "Fehler beim Laden des Services %s"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "Fehler beim Erstellen der temporären XML-Datei"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "Fehler beim Starten von schtasks"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 "Fehler beim Ausführen von 'crontab -l'; Ihr System unterstützt eventuell "
 "'cron' nicht"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr ""
 "Fehler beim Ausführen von 'crontab'; Ihr System unterstützt eventuell 'cron' "
 "nicht"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "Fehler beim Öffnen der Standard-Eingabe von 'crontab'"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "'crontab' abgebrochen"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "ein anderer Prozess plant die Hintergrundwartung"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "Repository konnte nicht zur globalen Konfiguration hinzugefügt werden"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <Unterbefehl> [<Optionen>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "ungültiger Unterbefehl: %s"
@@ -15620,12 +16177,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<Optionen>] [-e] <Muster> [<Commit>...] [[--] <Pfad>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: Fehler beim Erzeugen eines Thread: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "ungültige Anzahl von Threads (%d) für %s angegeben"
@@ -15634,207 +16191,203 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "keine Unterstützung von Threads, '%s' wird ignoriert"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "Schalter '%c' erwartet einen numerischen Wert"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
-msgstr "im Index anstatt im Arbeitsverzeichnis suchen"
+msgstr "im Index statt im Arbeitsverzeichnis suchen"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "auch in Inhalten finden, die nicht von Git verwaltet werden"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "in versionierten und unversionierten Dateien suchen"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "Dateien, die über '.gitignore' angegeben sind, ignorieren"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "rekursive Suche in jedem Submodul"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "Zeilen ohne Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "Übereinstimmungen unabhängig von Groß- und Kleinschreibung finden"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "nur ganze Wörter suchen"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "binäre Dateien als Text verarbeiten"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "keine Muster in Binärdateien finden"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "binäre Dateien mit \"textconv\"-Filtern verarbeiten"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "in Unterverzeichnissen suchen (Standard)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "höchstens <Tiefe> Ebenen durchlaufen"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "erweiterte reguläre Ausdrücke aus POSIX verwenden"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "grundlegende reguläre Ausdrücke aus POSIX verwenden (Standard)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "Muster als feste Zeichenketten interpretieren"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "Perl-kompatible reguläre Ausdrücke verwenden"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "Zeilennummern anzeigen"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "Nummer der Spalte des ersten Treffers anzeigen"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "keine Dateinamen anzeigen"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "Dateinamen anzeigen"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "Dateinamen relativ zum Projektverzeichnis anzeigen"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "nur Dateinamen anzeigen anstatt übereinstimmende Zeilen"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "Synonym für --files-with-matches"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "nur die Dateinamen ohne Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "NUL-Zeichen nach Dateinamen ausgeben"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "nur übereinstimmende Teile der Zeile anzeigen"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen anzeigen"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "Übereinstimmungen hervorheben"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr ""
 "eine Leerzeile zwischen Übereinstimmungen in verschiedenen Dateien ausgeben"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr ""
 "den Dateinamen nur einmal oberhalb der Übereinstimmungen aus dieser Datei "
 "anzeigen"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "<n> Zeilen vor und nach den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "<n> Zeilen vor den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "<n> Zeilen nach den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "<n> Threads benutzen"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "Kurzform für -C NUM"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "eine Zeile mit dem Funktionsnamen vor Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "die umgebende Funktion anzeigen"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "Muster von einer Datei lesen"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "<Muster> finden"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "Muster kombinieren, die mit -e angegeben wurden"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "Übereinstimmungen nur durch Beendigungsstatus anzeigen"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "nur Übereinstimmungen von Dateien anzeigen, die allen Mustern entsprechen"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "geparstes Verzeichnis für \"grep\"-Ausdruck anzeigen"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "Anzeigeprogramm"
@@ -15868,11 +16421,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "Ungültige Kombination von Optionen, --threads wird ignoriert."
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "Keine Unterstützung für Threads, --threads wird ignoriert."
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "ungültige Anzahl von Threads angegeben (%d)"
@@ -15880,20 +16433,24 @@
 #: builtin/grep.c:1132
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
-"Die Option --open-files-in-pager kann nur innerhalb des "
-"Arbeitsverzeichnisses verwendet werden."
+"--open-files-in-pager kann nur innerhalb des Arbeitsverzeichnisses verwendet "
+"werden"
 
 #: builtin/grep.c:1158
 msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached und --untracked können nicht mit --no-index verwendet werden."
+msgstr "--cached und --untracked können nicht mit --no-index verwendet werden"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked kann nicht mit --cached verwendet werden"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "--[no-]exclude-standard kann nicht mit versionierten Inhalten verwendet "
-"werden."
+"werden"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "--cached und \"Tree\"-Objekte angegeben"
 
@@ -16026,12 +16583,12 @@
 msgid "no info viewer handled the request"
 msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "Für '%s' wurde der Alias '%s' angelegt."
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "Ungültiger alias.%s String: %s"
@@ -16045,393 +16602,393 @@
 msgid "'git help config' for more information"
 msgstr "'git help config' für weitere Informationen"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "Objekt-Typen passen bei %s nicht zusammen"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "konnte erwartetes Objekt %s nicht empfangen"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "Objekt %s: erwarteter Typ %s, %s gefunden"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "kann %d Byte nicht lesen"
 msgstr[1] "kann %d Bytes nicht lesen"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "zu frühes Dateiende"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "Fehler beim Lesen der Eingabe"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "verwendete mehr Bytes als verfügbar waren"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "Paket ist zu groß für die aktuelle Definition von off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "Paket überschreitet die maximal erlaubte Größe"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "konnte '%s' nicht erstellen"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "Kann Paketdatei '%s' nicht öffnen"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "Paketsignatur stimmt nicht überein"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "Paketversion %<PRIu32> nicht unterstützt"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "Paket hat ein ungültiges Objekt bei Versatz %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "Dekomprimierung gab %d zurück"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "Wert für Versatz bei Differenzobjekt übergelaufen"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr ""
 "Wert für Versatz bei Differenzobjekt liegt außerhalb des gültigen Bereichs"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "Unbekannter Objekt-Typ %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "Kann Paketdatei %s nicht lesen"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "frühzeitiges Ende der Paketdatei, vermisse %<PRIuMAX> Byte"
 msgstr[1] "frühzeitiges Ende der Paketdatei, vermisse %<PRIuMAX> Bytes"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "ernsthafte Inkonsistenz nach Dekomprimierung"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SHA1 KOLLISION MIT %s GEFUNDEN !"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "kann %s nicht lesen"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "Kann existierende Informationen zu Objekt %s nicht lesen."
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "Kann existierendes Objekt %s nicht lesen."
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "ungültiges Blob-Objekt %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "fsck Fehler in gepacktem Objekt"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Nicht alle Kind-Objekte von %s sind erreichbar"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "Konnte Dateiunterschied nicht anwenden"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Empfange Objekte"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Indiziere Objekte"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "Paket ist beschädigt (SHA1 unterschiedlich)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "kann Paketdatei nicht lesen"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "Paketende enthält nicht verwendbaren Inhalt"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "Fehler beim Ausführen von \"parse_pack_objects()\""
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Löse Unterschiede auf"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "kann Thread nicht erzeugen: %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "Fehler beim Auflösen der Unterschiede"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "abgeschlossen mit %d lokalem Objekt"
 msgstr[1] "abgeschlossen mit %d lokalen Objekten"
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "unerwartete Prüfsumme für %s (Festplattenfehler?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "Paket hat %d unaufgelösten Unterschied"
 msgstr[1] "Paket hat %d unaufgelöste Unterschiede"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "Konnte angehängtes Objekt (%d) nicht komprimieren"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "lokales Objekt %s ist beschädigt"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "Name der Paketdatei '%s' endet nicht mit '.pack'"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "Name der Paketdatei '%s' endet nicht mit '.%s'"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "Kann %s Datei '%s' nicht schreiben."
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "Kann eben geschriebene %s Datei '%s' nicht schließen."
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "Fehler beim Schließen der Paketdatei"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "Kann Paketdatei nicht speichern"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "Kann Indexdatei nicht speichern"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Kann existierende Paketdatei '%s' nicht öffnen"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Kann existierende Indexdatei für Paket '%s' nicht öffnen"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "kein Unterschied: %d Objekt"
 msgstr[1] "kein Unterschied: %d Objekte"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "Länge der Objekt-Liste = %d: %lu Objekt"
 msgstr[1] "Länge der Objekt-Liste = %d: %lu Objekte"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "Kann nicht zurück zum Arbeitsverzeichnis wechseln"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "%s ist ungültig"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "unbekannter Hash-Algorithmus '%s'"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
-msgstr "Die Option --fix-thin kann nicht ohne --stdin verwendet werden."
+msgstr "--fix-thin kann nicht ohne --stdin verwendet werden"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin erfordert ein Git-Repository"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
-msgstr "Die Option --object-format kann nicht mit --stdin verwendet werden."
+msgstr "--object-format kann nicht mit --stdin verwendet werden"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
-msgstr "Die Option --verify wurde ohne Namen der Paketdatei angegeben."
+msgstr "--verify wurde ohne Namen der Paketdatei angegeben"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "fsck Fehler beim Packen von Objekten"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "kann Vorlage '%s' nicht lesen"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "kann Verzeichnis '%s' nicht öffnen"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "kann Verweis '%s' nicht lesen"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "kann symbolische Verknüpfung '%s' auf '%s' nicht erstellen"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "kann '%s' nicht nach '%s' kopieren"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "ignoriere Vorlage %s"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "Keine Vorlagen in %s gefunden."
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "kopiere keine Vorlagen von '%s': %s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "ungültiger initialer Branchname: '%s'"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "kann nicht mit Dateityp %d umgehen"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "Konnte %s nicht nach %s verschieben"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "Versuch, das Repository mit einem anderen Hash zu reinitialisieren"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s existiert bereits"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "Neu-Initialisierung: --initial-branch=%s ignoriert"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "Bestehendes verteiltes Git-Repository in %s%s neuinitialisiert\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Bestehendes Git-Repository in %s%s neuinitialisiert\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Leeres verteiltes Git-Repository in %s%s initialisiert\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Leeres Git-Repository in %s%s initialisiert\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -16439,41 +16996,41 @@
 "git init [-q | --quiet] [--bare] [--template=<Vorlagenverzeichnis>] [--"
 "shared[=<Berechtigungen>]] [<Verzeichnis>]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "Berechtigungen"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "angeben, dass das Git-Repository mit mehreren Benutzern geteilt wird"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "den Namen des initialen Branches überschreiben"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "Hash"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "den zu verwendenen Hash-Algorithmus angeben"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir und --bare schließen sich gegenseitig aus"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "kann Verzeichnis %s nicht erstellen"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "kann nicht in Verzeichnis %s wechseln"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -16482,12 +17039,12 @@
 "%s (oder --work-tree=<Verzeichnis>) nicht erlaubt ohne Spezifizierung von %s "
 "(oder --git-dir=<Verzeichnis>)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Kann nicht auf Arbeitsverzeichnis '%s' zugreifen."
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir nicht kompatibel mit Bare-Repository"
 
@@ -16539,149 +17096,143 @@
 msgid "do not treat --- specially"
 msgstr "--- nicht speziell behandeln"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "Anhang"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "Anhang/Anhänge hinzufügen"
 
 #: builtin/interpret-trailers.c:123
 msgid "--trailer with --only-input does not make sense"
-msgstr ""
-"Die Optionen --trailer und --only-input können nicht gemeinsam verwendet "
-"werden."
+msgstr "--trailer und --only-input können nicht gemeinsam verwendet werden"
 
 #: builtin/interpret-trailers.c:133
 msgid "no input file given for in-place editing"
 msgstr "keine Datei zur direkten Bearbeitung angegeben"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<Optionen>] [<Commitbereich>] [[--] <Pfad>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<Optionen>] <Objekt>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "Ungültige Option für --decorate: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "Quelle anzeigen"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
 msgstr "\"mailmap\"-Datei verwenden"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "\"decorate\" nur bei Referenzen anwenden, die <Muster> entsprechen"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "\"decorate\" nicht bei Referenzen anwenden, die <Muster> entsprechen"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "decorate-Optionen"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
 "Entwicklung der Zeilen vom Bereich <Start>,<Ende> oder Funktion :"
 "<Funktionsname> in <Datei> verfolgen"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<Bereich>:<Datei> kann nicht mit Pfadspezifikation verwendet werden"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "letzte Ausgabe: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: ungültige Datei"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "Konnte Objekt %s nicht lesen."
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "Unbekannter Typ: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr ""
 "%s: Ungültiger Modus für Erstellung des Deckblattes aus der Beschreibung"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers ohne Wert"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "Kann Patch-Datei %s nicht öffnen"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "Brauche genau einen Commit-Bereich."
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "Kein Commit-Bereich."
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "Anschreiben benötigt E-Mail-Format"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "Fehler beim Erstellen der Datei für das Anschreiben."
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "ungültiges in-reply-to: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<Optionen>] [<seit> | <Commitbereich>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "Zwei Ausgabeverzeichnisse?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "Unbekannter Commit %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "Konnte keine exakte Merge-Basis finden."
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16692,291 +17243,295 @@
 "'git branch --set-upstream-to', um einem Remote-Branch zu folgen.\n"
 "Oder geben Sie den Basis-Commit mit '--base=<Basis-Commit-Id>' manuell an."
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "Fehler beim Finden einer exakten Merge-Basis."
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "Basis-Commit sollte der Vorgänger der Revisionsliste sein."
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "Basis-Commit sollte nicht in der Revisionsliste enthalten sein."
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "kann Patch-Id nicht lesen"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr "Fehler beim Ableiten des range-diff Ursprungs der aktuellen Serie"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "nutze '%s' als range-diff Ursprung der aktuellen Serie"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "[PATCH n/m] auch mit einzelnem Patch verwenden"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "[PATCH] auch mit mehreren Patches verwenden"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "Ausgabe der Patches in Standard-Ausgabe"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "ein Deckblatt erzeugen"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "einfache Nummernfolge für die Namen der Ausgabedateien verwenden"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "Dateiendung"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
-msgstr "<Dateiendung> anstatt '.patch' verwenden"
+msgstr "<Dateiendung> statt '.patch' verwenden"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
-msgstr "die Nummerierung der Patches bei <n> anstatt bei 1 beginnen"
+msgstr "die Nummerierung der Patches bei <n> statt bei 1 beginnen"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "Reroll-Anzahl"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "die Serie als n-te Fassung kennzeichnen"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "maximale Länge des Dateinamens für die Ausgabe"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "[RFC PATCH] anstatt [PATCH] verwenden"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "[RFC PATCH] statt [PATCH] verwenden"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "Modus für Erstellung des Deckblattes aus der Beschreibung"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "Erzeuge Teile des Deckblattes basierend auf der Beschreibung des Branches"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Nutze [<Präfix>] statt [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "nutze [<Präfix>] statt [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "erzeugte Dateien in <Verzeichnis> speichern"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "[PATCH] nicht entfernen/hinzufügen"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "keine binären Unterschiede ausgeben"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "Hash mit Nullen in \"From\"-Header ausgeben"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 "keine Patches einschließen, die einem Commit im Upstream-Branch entsprechen"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "Patchformat anstatt des Standards anzeigen (Patch + Zusammenfassung)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "E-Mail-Einstellungen"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "Header"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "E-Mail-Header hinzufügen"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "E-Mail"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "\"To:\"-Header hinzufügen"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "\"Cc:\"-Header hinzufügen"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "Ident"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "\"From\"-Adresse auf <Ident> setzen (oder Ident des Commit-Erstellers, wenn "
 "fehlend)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "aus erster E-Mail eine Antwort zu <message-id> machen"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "Grenze"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "den Patch anhängen"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "den Patch direkt in die Nachricht einfügen"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "Nachrichtenverkettung aktivieren, Stile: shallow, deep"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "Signatur"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "eine Signatur hinzufügen"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "Basis-Commit"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "erforderliche Revisions-Informationen der Patch-Serie hinzufügen"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "eine Signatur aus einer Datei hinzufügen"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "keine Dateinamen der Patches anzeigen"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "Forschrittsanzeige während der Erzeugung der Patches"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "Änderungen gegenüber <Commit> im Deckblatt oder einzelnem Patch anzeigen"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "Änderungen gegenüber <Refspec> im Deckblatt oder einzelnem Patch anzeigen"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "Prozentsatz mit welchem Erzeugung gewichtet wird"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "Ungültige Identifikationszeile: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n und -k schließen sich gegenseitig aus"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc und -k schließen sich gegenseitig aus"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
-msgstr "die Option --name-only kann nicht verwendet werden"
+msgstr "--name-only kann nicht verwendet werden"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
-msgstr "die Option --name-status kann nicht verwendet werden"
+msgstr "--name-status kann nicht verwendet werden"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
-msgstr "die Option --check kann nicht verwendet werden"
+msgstr "--check kann nicht verwendet werden"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr ""
 "--stdout, --output und --output-directory schließen sich gegenseitig aus"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff erfordert --cover-letter oder einzelnen Patch"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff gegen v%d:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor erfordert --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff erfordert --cover-letter oder einzelnen Patch."
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Range-Diff:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-Diff gegen v%d:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "Konnte Signatur-Datei '%s' nicht lesen"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Erzeuge Patches"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "Fehler beim Erstellen der Ausgabedateien."
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16984,115 +17539,119 @@
 "Konnte gefolgten Remote-Branch nicht finden, bitte geben Sie <Upstream> "
 "manuell an.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<Optionen>] [<Datei>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "den Dateistatus mit Tags anzeigen"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr ""
 "Kleinbuchstaben für Dateien mit 'assume unchanged' Markierung verwenden"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "Kleinbuchstaben für 'fsmonitor clean' Dateien verwenden"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "zwischengespeicherte Dateien in der Ausgabe anzeigen (Standard)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "entfernte Dateien in der Ausgabe anzeigen"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "geänderte Dateien in der Ausgabe anzeigen"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "sonstige Dateien in der Ausgabe anzeigen"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "ignorierte Dateien in der Ausgabe anzeigen"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr ""
 "Objektnamen von Inhalten, die zum Commit vorgemerkt sind, in der Ausgabe "
 "anzeigen"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "Dateien im Dateisystem, die gelöscht werden müssen, anzeigen"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "nur Namen von 'sonstigen' Verzeichnissen anzeigen"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "Zeilenenden von Dateien anzeigen"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "keine leeren Verzeichnisse anzeigen"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "nicht zusammengeführte Dateien in der Ausgabe anzeigen"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "'resolve-undo' Informationen anzeigen"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "Dateien auslassen, die einem Muster entsprechen"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "Muster, gelesen von <Datei>, ausschließen"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "zusätzliche pro-Verzeichnis Auschlussmuster aus <Datei> auslesen"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "die standardmäßigen Git-Ausschlüsse hinzufügen"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "Ausgabe relativ zum Projektverzeichnis"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "Rekursion in Submodulen durchführen"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "als Fehler behandeln, wenn sich eine <Datei> nicht im Index befindet"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "Commit-Referenz"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 "vorgeben, dass Pfade, die seit <Commit-Referenz> gelöscht wurden, immer noch "
 "vorhanden sind"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "Ausgaben zur Fehlersuche anzeigen"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "doppelte Einträge unterdrücken"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -17103,41 +17662,41 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<Repository> [<Referenzen>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "URL des Remote-Repositories nicht ausgeben"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "Programm"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "auf Tags einschränken"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "auf Branches einschränken"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "keine Tags anzeigen, die andere Tags enthalten"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "url.<Basis>.insteadOf berücksichtigen"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr ""
 "mit Exit-Code 2 beenden, wenn keine übereinstimmenden Referenzen\n"
 "gefunden wurden"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "zusätzlich zum Objekt die darauf verweisenden Referenzen anzeigen"
 
@@ -17179,6 +17738,55 @@
 "das gesamte Verzeichnis auflisten; nicht nur das aktuelle Verzeichnis "
 "(impliziert --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<Optionen>] <Nachricht> <Patch> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "Betreff beibehalten"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "behalte Klammern im Betreff, die nicht zum Patch gehören"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "Message-ID an das Ende der Commit-Beschreibung kopieren"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "Neukodierung der Metadaten nach 'i18n.commitEncoding'"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "Zeichen-Neukodierung der Metadaten deaktivieren"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "Encoding"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "Neukodierung der Metadaten zu diesem Encoding"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "nutze Scherenmarkierungen"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<Aktion>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "Aktion, wenn ein angeführtes CR gefunden wird"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "nutze Header im Inhalt der Nachricht"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -17295,194 +17903,194 @@
 msgid "Merging %s with %s\n"
 msgstr "Führe %s mit %s zusammen\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<Optionen>] [<Commit>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "Schalter 'm' erfordert einen Wert."
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "Option `%s' erfordert einen Wert."
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Konnte Merge-Strategie '%s' nicht finden.\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Verfügbare Strategien sind:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Verfügbare benutzerdefinierte Strategien sind:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "keine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "eine Zusammenfassung der Unterschiede am Schluss des Merges anzeigen"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(Synonym für --stat)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "(höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-Commits "
 "hinzufügen"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
-msgstr "einen einzelnen Commit anstatt eines Merges erzeugen"
+msgstr "einen einzelnen Commit erzeugen statt einen Merge durchzuführen"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "einen Commit durchführen, wenn der Merge erfolgreich war (Standard)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "Bearbeitung der Beschreibung vor dem Commit"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "Vorspulen erlauben (Standard)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "abbrechen, wenn kein Vorspulen möglich ist"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "den genannten Commit auf eine gültige GPG-Signatur überprüfen"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "Strategie"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "zu verwendende Merge-Strategie"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "Option=Wert"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "Option für ausgewählte Merge-Strategie"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr ""
 "Commit-Beschreibung zusammenführen (für einen Merge, der kein Vorspulen war)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "den sich im Gange befindlichen Merge abbrechen"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort, aber Index und Arbeitsverzeichnis unverändert lassen"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "den sich im Gange befindlichen Merge fortsetzen"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "erlaube das Zusammenführen von nicht zusammenhängenden Historien"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "Hooks pre-merge-commit und commit-msg umgehen"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "Konnte \"stash\" nicht ausführen."
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "\"stash\" fehlgeschlagen"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "kein gültiges Objekt: %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree fehlgeschlagen"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (nichts zu quetschen)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Bereits auf dem neuesten Stand. (nichts für Squash-Merge vorhanden)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
-msgstr "Quetsche Commit -- HEAD wird nicht aktualisiert\n"
+msgstr "Squash Commit -- HEAD wird nicht aktualisiert\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Keine Merge-Commit-Beschreibung -- HEAD wird nicht aktualisiert\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' zeigt auf keinen Commit"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Ungültiger branch.%s.mergeoptions String: %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "Es wird nur der Merge von zwei Branches behandelt."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Unbekannte Option für merge-recursive: -X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "konnte %s nicht schreiben"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "konnte nicht von '%s' lesen"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Merge wurde nicht committet; benutzen Sie 'git commit', um den Merge "
 "abzuschließen.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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"
@@ -17493,11 +18101,11 @@
 "Upstream-Branch mit einem Thema-Branch zusammenführt.\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Eine leere Commit-Beschreibung bricht den Commit ab.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17506,75 +18114,75 @@
 "Zeilen, die mit '%c' beginnen, werden ignoriert,\n"
 "und eine leere Beschreibung bricht den Commit ab.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Leere Commit-Beschreibung"
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Wunderbar.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen "
 "Sie dann das Ergebnis.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "Sie befinden sich auf keinem Branch."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "Kein Remote-Repository für den aktuellen Branch."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr ""
 "Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Kein Remote-Tracking-Branch für %s von %s"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Fehlerhafter Wert '%s' in Umgebungsvariable '%s'"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "nichts was wir in %s zusammenführen können: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "nichts was wir zusammenführen können"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort akzeptiert keine Argumente"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Es gibt keinen Merge abzubrechen (MERGE_HEAD fehlt)"
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit erwartet keine Argumente"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue erwartet keine Argumente"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Es ist kein Merge im Gange (MERGE_HEAD fehlt)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17582,7 +18190,7 @@
 "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n"
 "Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17590,105 +18198,139 @@
 "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n"
 "Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Sie können --squash nicht mit --no-ff kombinieren."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "Sie können --squash nicht mit --commit kombinieren."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
-"Bin auf einem Commit, der noch geboren wird; kann \"squash\" nicht ausführen."
+"Squash-Merge auf einen leeren Branch wird noch nicht unterstützt"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet "
 "werden."
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - nichts was wir zusammenführen können"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
-msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen."
+msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
-msgstr "Verweigere den Merge von nicht zusammenhängenden Historien."
+msgstr "verweigere den Merge von nicht zusammenhängenden Historien"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Bereits aktuell."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Aktualisiere %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Probiere wirklich trivialen \"in-index\"-Merge ...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Nein.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Bereits aktuell."
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "Vorspulen nicht möglich, breche ab."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Rücklauf des Verzeichnisses bis zum Ursprung ...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Probiere Merge-Strategie %s ...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Keine Merge-Strategie behandelt diesen Merge.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Merge mit Strategie %s fehlgeschlagen.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Benutzen Sie \"%s\", um die Auflösung per Hand vorzubereiten.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Automatischer Merge abgeschlossen; halte, wie gewünscht, vor dem Commit an\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "Warnung: Tag-Eingabe ungültig für fsck: %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "Fehler: Tag-Eingabe ungültig für fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) sollte diesen Aufruf niemals auslösen"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "konnte getaggtes Objekt '%s' nicht lesen"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "Objekt '%s' als '%s' getaggt, aber ist ein '%s' Typ"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+"Tag von der Standardeingabe für unsere strenge Überprüfung bei fsck ungültig"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "Tag von der Standard-Eingabe verweiste nicht auf gültiges Objekt"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "konnte Tag-Datei nicht schreiben"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17705,20 +18347,37 @@
 msgid "allow creation of more than one tree"
 msgstr "die Erstellung von mehr als einem \"Tree\"-Objekt erlauben"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<Optionen>] (write|verify|expire|repack --batch-"
-"size=<Größe>)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<Optionen>] write [--preferred-pack=<Paket>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<Optionen>] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<Optionen>] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<Optionen>] repack [--batch-size=<Größe>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 "Objekt-Verzeichnis, welches Paare von Packdateien und pack-index enthält"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "bevorzugtes Paket"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr ""
+"Paket für die Wiederbenutzung, wenn eine Multi-Pack Bitmap berechnet wird"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
@@ -17726,15 +18385,7 @@
 "Während des Umpackens, sammle Paket-Dateien von geringerer Größe in "
 "einenStapel, welcher größer ist als diese Größe"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "Zu viele Argumente."
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "Option --batch-size ist nur für den Unterbefehl 'repack'"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "Nicht erkannter Unterbefehl: %s"
@@ -17833,7 +18484,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "Benenne %s nach %s um\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "Umbenennung von '%s' fehlgeschlagen"
@@ -18026,7 +18677,7 @@
 msgid "the note contents have been left in %s"
 msgstr "Die Notiz-Inhalte wurden in %s belassen."
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "konnte '%s' nicht öffnen oder lesen"
@@ -18071,8 +18722,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "zu viele Parameter"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "Zu viele Argumente."
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -18133,8 +18785,8 @@
 "stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "zu wenig Parameter"
+msgid "too few arguments"
+msgstr "zu wenige Argumente"
 
 #: builtin/notes.c:538
 #, c-format
@@ -18266,7 +18918,7 @@
 "commit',\n"
 "oder brechen Sie den Merge mit 'git notes merge --abort' ab.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
@@ -18284,7 +18936,7 @@
 msgid "read object names from the standard input"
 msgstr "Objektnamen von der Standard-Eingabe lesen"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "nicht löschen, nur anzeigen"
 
@@ -18300,7 +18952,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "Notizen von <Notiz-Referenz> verwenden"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "Unbekannter Unterbefehl: %s"
@@ -18319,106 +18971,120 @@
 "git pack-objects [<Optionen>...] <Basis-Name> [< <Referenzliste> | < "
 "<Objektliste>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: konnte %s nicht finden, erwartet bei Offset %<PRIuMAX> "
+"in Paket %s"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "Ungültiges CRC für gepacktes Objekt %s."
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "Fehlerhaftes gepacktes Objekt für %s."
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "Rekursiver Unterschied für Objekt %s festgestellt."
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u Objekte geordnet, %<PRIu32> erwartet."
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "Objekt beim Offset %<PRIuMAX> in Paket %s erwartet"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "Deaktiviere Schreiben der Bitmap, Pakete wurden durch pack.packSizeLimit\n"
 "aufgetrennt."
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Schreibe Objekte"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "Konnte '%s' nicht lesen"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "Schrieb %<PRIu32> Objekte während %<PRIu32> erwartet waren."
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "Deaktiviere Schreiben der Bitmap, da einige Objekte nicht in eine Pack-"
 "Datei\n"
 "geschrieben wurden."
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "\"delta base offset\" Überlauf in Paket für %s"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "\"delta base offset\" liegt außerhalb des gültigen Bereichs für %s"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Zähle Objekte"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "Konnte Kopfbereich von Objekt '%s' nicht parsen."
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "Objekt %s kann nicht gelesen werden."
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "Inkonsistente Objektlänge bei Objekt %s (%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "ungünstiges Packet - Speicher voll"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Delta-Kompression verwendet bis zu %d Threads."
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "Konnte keine Objekte packen, die von Tag %s erreichbar sind."
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Komprimiere Objekte"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "Inkonsistenz mit der Anzahl von Deltas"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18427,7 +19093,7 @@
 "Wert für uploadpack.blobpackfileuri muss in der Form '<Objekt-Hash> <Pack-"
 "Hash> <URI>' vorliegen ('%s' erhalten)"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18435,7 +19101,17 @@
 "Objekt bereits in einem anderen uploadpack.blobpackfileuri konfiguriert "
 "('%s' erhalten)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "konnte Typ von Objekt %s in Paket %s nicht bestimmen"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "Konnte Paket '%s' nicht finden"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18444,7 +19120,7 @@
 "erwartete Randobjekt-ID, erhielt nutzlose Daten:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18453,250 +19129,263 @@
 "erwartete Objekt-ID, erhielt nutzlose Daten:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "ungültiger Wert für --missing"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "kann Paketindex nicht öffnen"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "loses Objekt bei %s konnte nicht untersucht werden"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "konnte loses Objekt nicht erzwingen"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' ist kein Commit"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "ungültiger Commit '%s'"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "konnte neuere Objekte nicht hinzufügen"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "nicht unterstützte Index-Version %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "ungültige Index-Version '%s'"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<Version>[,<Offset>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "die Index-Datei des Paketes in der angegebenen Indexformat-Version schreiben"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "maximale Größe für jede ausgegebene Paketdatei"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "geliehene Objekte von alternativem Objektspeicher ignorieren"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "gepackte Objekte ignorieren"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "Paketfenster durch Objekte begrenzen"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "Paketfenster, zusätzlich zur Objektbegrenzung, durch Speicher begrenzen"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "maximale Länge der erlaubten Differenzverkettung im resultierenden Paket"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "existierende Unterschiede wiederverwenden"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "existierende Objekte wiederverwenden"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "OFS_DELTA Objekte verwenden"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "Threads bei der Suche nach den besten Übereinstimmungen bei Unterschieden "
 "verwenden"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "keine leeren Pakete erzeugen"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "Argumente bezüglich Commits von der Standard-Eingabe lesen"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "die Objekte zu solchen, die noch nicht gepackt wurden, begrenzen"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "Objekte einschließen, die von jeder Referenz erreichbar sind"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr ""
 "Objekte einschließen, die von Einträgen des Reflogs referenziert werden"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "Objekte einschließen, die vom Index referenziert werden"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "Pakete von der Standard-Eingabe lesen"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "Paket in die Standard-Ausgabe schreiben"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "Tag-Objekte einschließen, die auf gepackte Objekte referenzieren"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "nicht erreichbare Objekte behalten"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "nicht erreichbare lose Objekte packen"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "nicht erreichbare Objekte entpacken, die neuer als <Zeit> sind"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "den \"sparse\" Algorithmus zur Bestimmung der Erreichbarkeit benutzen"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "dünnere Pakete erzeugen"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 "Pakete geeignet für Abholung mit unvollständiger Historie (shallow) erzeugen"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "Pakete ignorieren, die .keep Dateien haben"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "dieses Paket ignorieren"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "Komprimierungsgrad für Paketierung"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "keine künstlichen Vorgänger-Commits (\"grafts\") verbergen"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "Bitmap-Index (falls verfügbar) zur Optimierung der Objektzählung benutzen"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "Bitmap-Index zusammen mit Pack-Index schreiben"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "Bitmap-Index schreiben, wenn möglich"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "Behandlung für fehlende Objekte"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 "keine Objekte aus Packdateien von partiell geklonten Remote-Repositories "
 "packen"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "Delta-Islands bei Delta-Kompression beachten"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "Protokoll"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "jegliche konfigurierte uploadpack.blobpackfileuri für dieses Protkoll "
 "ausschließen"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "Tiefe für Verkettung von Unterschieden %d ist zu tief, erzwinge %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit ist zu hoch, erzwinge %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size kann nicht für die Erstellung eines Pakets für eine "
 "Übertragung\n"
 "benutzt werden."
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "Minimales Limit für die Paketgröße ist 1 MiB."
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 "--thin kann nicht benutzt werden, um ein indizierbares Paket zu erstellen."
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable und --unpack-unreachable sind inkompatibel"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "Kann --filter nicht ohne --stdout benutzen."
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "kann --filter nicht mit --stdin-packs benutzen"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr ""
+"interne Commit-Liste kann nicht gemeinsam mit --stdin-packs verwendet werden"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Objekte aufzählen"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18705,6 +19394,21 @@
 "Gesamt %<PRIu32> (Delta %<PRIu32>), Wiederverwendet %<PRIu32> (Delta "
 "%<PRIu32>), Pack wiederverwendet %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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' ist für die Entfernung vorgesehen.\n"
+"Wenn Sie diesen Befehl weiterhin verwenden, fügen Sie\n"
+"bitte eine zusätzliche Option '--i-still-use-this' in\n"
+"der Befehlszeile hinzu und lassen Sie uns wissen, dass\n"
+"Sie es immer noch verwenden, indem Sie eine E-Mail an\n"
+"<git@vger.kernel.org> senden. Danke.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<Optionen>]"
@@ -18764,11 +19468,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "Integration von Änderungen durch Rebase statt Merge"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "Vorspulen erlauben"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "automatischer Stash/Stash-Pop davor und danach"
 
@@ -18789,7 +19493,100 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Ungültiger Wert für pull.ff: %s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Es gibt keinen Kandidaten für Rebase innerhalb der Referenzen, die eben "
+"angefordert wurden."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Es gibt keine Kandidaten für Merge innerhalb der Referenzen, die eben "
+"angefordert wurden."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Im Allgemeinen bedeutet das, dass Sie einen Refspec mit Wildcards angegeben\n"
+"haben, der auf der Gegenseite mit keinen Referenzen übereinstimmt."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Sie führten \"pull\" von Remote-Repository '%s' aus, ohne einen\n"
+"Branch anzugeben. Da das nicht das konfigurierte Standard-Remote-\n"
+"Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
+"der Befehlszeile angeben."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Im Moment auf keinem Branch."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr ""
+"Bitte geben Sie den Branch an, gegen welchen Sie \"rebase\" ausführen "
+"möchten."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Bitte geben Sie den Branch an, welchen Sie zusammenführen möchten."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Siehe git-pull(1) für weitere Details."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<Remote-Repository>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<Branch>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Wenn Sie Tracking-Informationen für diesen Branch setzen möchten, können "
+"Sie\n"
+"dies tun mit:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Ihre Konfiguration gibt an, den Merge mit Referenz '%s'\n"
+"des Remote-Repositories durchzuführen, aber diese Referenz\n"
+"wurde nicht angefordert."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "Konnte nicht auf Commit '%s' zugreifen."
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "Ignoriere --verify-signatures für Rebase"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18819,114 +19616,21 @@
 "Option --rebase, --no-rebase oder --ff-only auf der Kommandozeile nutzen,\n"
 "um das konfigurierte Standardverhalten pro Aufruf zu überschreiben.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Es gibt keinen Kandidaten für Rebase innerhalb der Referenzen, die eben "
-"angefordert wurden."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Es gibt keine Kandidaten für Merge innerhalb der Referenzen, die eben "
-"angefordert wurden."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Im Allgemeinen bedeutet das, dass Sie einen Refspec mit Wildcards angegeben\n"
-"haben, der auf der Gegenseite mit keinen Referenzen übereinstimmt."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Sie führten \"pull\" von Remote-Repository '%s' aus, ohne einen\n"
-"Branch anzugeben. Da das nicht das konfigurierte Standard-Remote-\n"
-"Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
-"der Befehlszeile angeben."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Im Moment auf keinem Branch."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr ""
-"Bitte geben Sie den Branch an, gegen welchen Sie \"rebase\" ausführen "
-"möchten."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Bitte geben Sie den Branch an, welchen Sie zusammenführen möchten."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Siehe git-pull(1) für weitere Details."
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<Remote-Repository>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<Branch>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Wenn Sie Tracking-Informationen für diesen Branch setzen möchten, können "
-"Sie\n"
-"dies tun mit:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Ihre Konfiguration gibt an, den Merge mit Referenz '%s'\n"
-"des Remote-Repositories durchzuführen, aber diese Referenz\n"
-"wurde nicht angefordert."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "Konnte nicht auf Commit '%s' zugreifen."
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "Ignoriere --verify-signatures für Rebase"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit "
 "vorgemerkt sind."
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "Pull mit Rebase"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18936,7 +19640,7 @@
 "\"fetch\" aktualisierte die Spitze des aktuellen Branches.\n"
 "Spule Ihr Arbeitsverzeichnis von Commit %s vor."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18953,15 +19657,15 @@
 "$ git reset --hard\n"
 "zur Wiederherstellung aus."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Kann nicht mehrere Branches in einen leeren Branch zusammenführen."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Kann Rebase nicht auf mehrere Branches ausführen."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "Kann Rebase nicht mit lokal aufgezeichneten Änderungen in Submodulen "
@@ -18977,7 +19681,7 @@
 
 #: builtin/push.c:119
 msgid "--delete only accepts plain target ref names"
-msgstr "Die Option --delete akzeptiert nur reine Referenznamen als Ziel."
+msgstr "--delete akzeptiert nur reine Referenznamen als Ziel"
 
 #: builtin/push.c:164
 msgid ""
@@ -19227,11 +19931,11 @@
 
 #: builtin/push.c:601
 msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags."
+msgstr "--delete ist inkompatibel mit --all, --mirror und --tags"
 
 #: builtin/push.c:603
 msgid "--delete doesn't make sense without any refs"
-msgstr "Die Option --delete kann nur mit Referenzen verwendet werden."
+msgstr "--delete kann nur mit Referenzen verwendet werden"
 
 #: builtin/push.c:623
 #, c-format
@@ -19262,68 +19966,72 @@
 
 #: builtin/push.c:639
 msgid "--all and --tags are incompatible"
-msgstr "Die Optionen --all und --tags sind inkompatibel."
+msgstr "--all und --tags sind inkompatibel"
 
 #: builtin/push.c:641
 msgid "--all can't be combined with refspecs"
-msgstr "Die Option --all kann nicht mit Refspecs kombiniert werden."
+msgstr "--all kann nicht mit Refspecs kombiniert werden"
 
 #: builtin/push.c:645
 msgid "--mirror and --tags are incompatible"
-msgstr "Die Optionen --mirror und --tags sind inkompatibel."
+msgstr "--mirror und --tags sind inkompatibel"
 
 #: builtin/push.c:647
 msgid "--mirror can't be combined with refspecs"
-msgstr "Die Option --mirror kann nicht mit Refspecs kombiniert werden."
+msgstr "--mirror kann nicht mit Refspecs kombiniert werden"
 
 #: builtin/push.c:650
 msgid "--all and --mirror are incompatible"
-msgstr "Die Optionen --all und --mirror sind inkompatibel."
+msgstr "--all und --mirror sind inkompatibel"
 
 #: builtin/push.c:657
 msgid "push options must not have new line characters"
 msgstr "Push-Optionen dürfen keine Zeilenvorschubzeichen haben"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 "git range-diff [<Optionen>] <alte-Basis>..<alte-Spitze> <neue-Basis>..<neue-"
 "Spitze>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<Optionen>] <alte-Spitze>...<neue-Spitze>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<Optionen>] <Basis> <alte-Spitze> <neue-Spitze>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "Prozentsatz mit welchem Erzeugung gewichtet wird"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "einfache Diff-Farben benutzen"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "Notizen"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "an 'git log' übergeben"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "Kein .. im Bereich: '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "nur Ausgaben anzeigen, die sich auf den ersten Bereich beziehen"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "nur Ausgaben anzeigen, die sich auf den zweiten Bereich beziehen"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "kein Commit-Bereich: '%s'"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "Format mit einfachem Argument muss symmetrischer Bereich sein."
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "Benötige zwei Commit-Bereiche."
 
@@ -19429,194 +20137,194 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "Unbenutzbare TODO-Liste: '%s'"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "Konnte temporäres Verzeichnis '%s' nicht erstellen."
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "Markierung auf interaktiven Rebase fehlgeschlagen."
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "Konnte TODO-Liste nicht erzeugen."
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "Ein Basis-Commit muss mit --upstream oder --onto angegeben werden."
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<Optionen>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "behalte Commits, die leer beginnen"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "Commits mit leerer Beschreibung erlauben"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "Rebase auf Merge-Commits ausführen"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "originale Branch-Punkte der Cousins behalten"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "Commits verschieben, die mit squash!/fixup! beginnen"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "Commits signieren"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 "Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch anzeigen"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "Rebase fortsetzen"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "Commit auslassen"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "die TODO-Liste bearbeiten"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "den aktuellen Patch anzeigen"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "Commit-IDs in der TODO-Liste verkürzen"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "Commit-IDs in der TODO-Liste erweitern"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "die TODO-Liste prüfen"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "fixup/squash-Zeilen umordnen"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "\"exec\"-Befehle in TODO-Liste einfügen"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "auf"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "Begrenzungscommit"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "Begrenzungscommit"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "squash onto"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "der Upstream-Commit"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "head-Name"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "head-Name"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "Rebase-Strategie"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "Strategie-Optionen"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "Strategie-Optionen"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "wechseln zu"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "der Branch oder Commit zum Auschecken"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "onto-Name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "onto-Name"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "Befehl"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "auszuführender Befehl"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "jeden fehlgeschlagenen `exec`-Befehl neu ansetzen"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins hat ohne --rebase-merges keine Auswirkung"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s erfordert das Merge-Backend"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "Konnte 'onto' nicht bestimmen: '%s'"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "Ungültiges orig-head: '%s'"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "Ignoriere ungültiges allow_rerere_autoupdate: '%s'"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19632,7 +20340,7 @@
 "Um abzubrechen und zurück zum Zustand vor \"git rebase\" zu gelangen,\n"
 "führen Sie \"git rebase --abort\" aus."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19652,7 +20360,7 @@
 "Infolge dessen kann Git auf diesen Revisionen Rebase nicht\n"
 "ausführen."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19661,7 +20369,7 @@
 "nicht erkannter leerer Typ '%s'; Gültige Werte sind \"drop\", \"keep\", und "
 "\"ask\"."
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19679,7 +20387,7 @@
 "    git rebase '<Branch>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19693,199 +20401,189 @@
 "    git branch --set-upstream-to=%s/<Branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "\"exec\"-Befehle können keine neuen Zeilen enthalten"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "Leerer \"exec\"-Befehl."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "Rebase auf angegebenen Branch anstelle des Upstream-Branches ausführen"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "Nutze die Merge-Basis von Upstream und Branch als die aktuelle Basis"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "Ausführung des pre-rebase-Hooks erlauben"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "weniger Ausgaben (impliziert --no-stat)"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 "Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch verbergen"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "eine Signed-off-by Zeile zu jedem Commit hinzufügen"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "Datum des Commit-Erstellers soll mit Datum des Autors übereinstimmen"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "ignoriere Autor-Datum und nutze aktuelles Datum"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "Synonym für --reset-author-date"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "an 'git apply' übergeben"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "Whitespace-Änderungen ignorieren"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 "Cherry-Pick auf alle Commits ausführen, auch wenn diese unverändert sind"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "fortsetzen"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "den aktuellen Patch auslassen und fortfahren"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "abbrechen und den ursprünglichen Branch auschecken"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "abbrechen, aber HEAD an aktueller Stelle belassen"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "TODO-Liste während eines interaktiven Rebase bearbeiten"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "den Patch, der gerade angewendet oder zusammengeführt wird, anzeigen"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "Strategien von 'git am' bei Rebase verwenden"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "Merge-Strategien beim Rebase verwenden"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "den Benutzer die Liste der Commits für den Rebase bearbeiten lassen"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
-msgstr ""
-"(VERALTET) Versuche, Merges wiederherzustellen anstatt sie zu ignorieren"
+msgstr "(VERALTET) Versuche, Merges wiederherzustellen statt sie zu ignorieren"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "wie sollen Commits behandelt werden, die leer werden"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "bei -i Commits verschieben, die mit squash!/fixup! beginnen"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "exec-Zeilen nach jedem Commit der editierbaren Liste hinzufügen"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "Rebase von Commits mit leerer Beschreibung erlauben"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
-msgstr ""
-"versuchen, Rebase mit Merges auszuführen, anstatt diese zu überspringen"
+msgstr "versuchen, Rebase mit Merges auszuführen, statt diese zu überspringen"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 "'git merge-base --fork-point' benutzen, um Upstream-Branch zu bestimmen"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "angegebene Merge-Strategie verwenden"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "Option"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "Argument zur Merge-Strategie durchreichen"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "Rebase auf alle erreichbaren Commits bis zum Root-Commit ausführen"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 "alle Änderungen anwenden, auch jene, die bereits im Upstream-Branch "
 "vorhanden sind"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"Die Unterstützung für rebase.useBuiltin wurde entfernt!\n"
-"Siehe dessen Eintrag in 'git help config' für Details."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "'git-am' scheint im Gange zu sein. Kann Rebase nicht durchführen."
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "'git rebase --preserve-merges' ist veraltet. Benutzen Sie stattdessen '--"
 "rebase-merges'."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "'--keep-base' kann nicht mit '--onto' kombiniert werden"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "'--keep-base' kann nicht mit '--root' kombiniert werden"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "'--root' kann nicht mit '--fork-point' kombiniert werden"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "Kein Rebase im Gange?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet "
 "werden."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Kann HEAD nicht lesen"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19893,16 +20591,16 @@
 "Sie müssen alle Merge-Konflikte editieren und diese dann\n"
 "mittels \"git add\" als aufgelöst markieren"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "Konnte Änderungen im Arbeitsverzeichnis nicht verwerfen."
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "Konnte nicht zu %s zurückgehen."
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19923,138 +20621,138 @@
 "und führen Sie diesen Befehl nochmal aus. Es wird angehalten, falls noch\n"
 "etwas Schützenswertes vorhanden ist.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "Schalter `C' erwartet einen numerischen Wert."
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Unbekannter Modus: %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy erfordert --merge oder --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr ""
 "Optionen für \"am\" können nicht mit Optionen für \"merge\" kombiniert "
 "werden."
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Unbekanntes Rebase-Backend: %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec erfordert --exec oder --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr ""
 "'--preserve-merges' kann nicht mit '--rebase-merges' kombiniert werden."
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "Fehler: '--preserve-merges' kann nicht mit '--reschedule-failed-exec' "
 "kombiniert werden."
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "Ungültiger Upstream '%s'"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "Konnte neuen Root-Commit nicht erstellen."
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': benötige genau eine Merge-Basis mit dem Branch"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': benötige genau eine Merge-Basis"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "'%s' zeigt auf keinen gültigen Commit."
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal: Branch/Commit '%s' nicht gefunden"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "Referenz nicht gefunden: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "Konnte HEAD zu keinem Commit auflösen."
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "Konnte nicht zu %s wechseln."
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD ist aktuell."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Aktueller Branch %s ist auf dem neuesten Stand.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD ist aktuell, Rebase erzwungen."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Aktueller Branch %s ist auf dem neuesten Stand, Rebase erzwungen.\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Änderungen zu %s:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Änderungen von %s zu %s:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Zunächst wird der Branch zurückgespult, um Ihre Änderungen darauf neu "
 "anzuwenden...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "Konnte HEAD nicht loslösen."
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Spule %s vor zu %s.\n"
@@ -20116,11 +20814,11 @@
 "\n"
 "Um diese Meldung zu unterdrücken, setzen Sie die Variable auf 'refuse'."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "weniger Ausgaben"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Sie müssen ein Repository angeben."
 
@@ -20151,36 +20849,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "'%s' ist kein gültiger Zeitstempel"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Markiere nicht erreichbare Objekte..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s zeigt auf nichts!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "Kein Reflog zum Löschen angegeben."
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "Kein Reflog: %s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "Kein Reflog für '%s'."
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "Ungültiges Format für Referenzen: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -20313,19 +21011,18 @@
 #: builtin/remote.c:186
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr ""
-"Die Option --mirror kann nicht mit der Angabe eines Hauptbranches verwendet "
-"werden."
+"--mirror kann nicht mit der Angabe eines Hauptbranches verwendet werden"
 
 #: builtin/remote.c:188
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr ""
-"Die Angabe von zu folgenden Branches kann nur mit dem Anfordern von "
-"Spiegelarchiven verwendet werden."
+"die Angabe von zu folgenden Branches kann nur mit dem Anfordern von "
+"Spiegelarchiven verwendet werden"
 
 #: builtin/remote.c:195 builtin/remote.c:700
 #, c-format
 msgid "remote %s already exists."
-msgstr "externes Repository %s existiert bereits"
+msgstr "externes Repository %s existiert bereits."
 
 #: builtin/remote.c:240
 #, c-format
@@ -20361,10 +21058,10 @@
 "\t%s:%d\n"
 "benennt jetzt das nicht existierende Remote-Repository '%s'"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
-msgstr "Kein solches Remote-Repository: '%s'"
+msgstr "Remote-Repository nicht gefunden: '%s'"
 
 #: builtin/remote.c:710
 #, c-format
@@ -20651,7 +21348,7 @@
 #: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
 #, c-format
 msgid "No such remote '%s'"
-msgstr "Kein solches Remote-Repository '%s'"
+msgstr "Remote-Repository '%s' nicht gefunden"
 
 #: builtin/remote.c:1539
 msgid "add branch"
@@ -20688,8 +21385,7 @@
 
 #: builtin/remote.c:1632
 msgid "--add --delete doesn't make sense"
-msgstr ""
-"Die Optionen --add und --delete können nicht gemeinsam verwendet werden."
+msgstr "--add und --delete können nicht gemeinsam verwendet werden"
 
 #: builtin/remote.c:1673
 #, c-format
@@ -20699,17 +21395,17 @@
 #: builtin/remote.c:1681
 #, c-format
 msgid "No such URL found: %s"
-msgstr "Keine solche URL gefunden: %s"
+msgstr "URL nicht gefunden: %s"
 
 #: builtin/remote.c:1683
 msgid "Will not delete all non-push URLs"
 msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<Optionen>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20718,124 +21414,148 @@
 "--no-write-bitmap-index oder deaktivieren Sie die pack.writebitmaps\n"
 "Konfiguration."
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
 "Remote-Repositories nicht starten."
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Erwarte Zeilen mit vollständiger Hex-Objekt-ID nur von pack-objects."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
 "Remote-Repositories nicht abschließen."
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "konnte Index für %s nicht öffnen"
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr ""
+"Paket %s zu groß, um es bei der geometrischen Progression zu berücksichtigen"
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "Paket %s zu groß zum Aufrollen"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "alles in eine einzige Pack-Datei packen"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "genau wie -a, unerreichbare Objekte werden aber nicht gelöscht"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "redundante Pakete entfernen und \"git-prune-packed\" ausführen"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "--no-reuse-delta an git-pack-objects übergeben"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "--no-reuse-object an git-pack-objects übergeben"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "git-update-server-info nicht ausführen"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "--local an git-pack-objects übergeben"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "Bitmap-Index schreiben"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "--delta-islands an git-pack-objects übergeben"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "Datumsangabe"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "mit -A, keine Objekte älter als dieses Datum löschen"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "mit -a, nicht erreichbare Objekte neu packen"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "Größe des Fensters für die Delta-Kompression"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "Bytes"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
-"gleiches wie oben, aber die Speichergröße anstatt der\n"
-"Anzahl der Einträge limitieren"
+"gleiches wie oben, aber die Speichergröße statt der Anzahl der Einträge "
+"limitieren"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "die maximale Delta-Tiefe limitieren"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "maximale Anzahl von Threads limitieren"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "maximale Größe für jede Paketdatei"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 "Objekte umpacken, die sich in mit .keep markierten Pack-Dateien befinden"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "dieses Paket nicht neu packen"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "eine geometrische Progression mit Faktor <N> finden"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "kann Pack-Dateien in precious-objects Repository nicht löschen"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable und -A sind inkompatibel"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric ist inkompatibel mit -A, -a"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Nichts Neues zum Packen."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "benötigte Datei fehlt: %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "konnte nicht löschen: %s"
@@ -20908,66 +21628,66 @@
 #: builtin/replace.c:229
 #, c-format
 msgid "unable to open %s for writing"
-msgstr "Konnte '%s' nicht zum Schreiben öffnen."
+msgstr "konnte '%s' nicht zum Schreiben öffnen"
 
 #: builtin/replace.c:242
 msgid "cat-file reported failure"
-msgstr "cat-file meldete Fehler."
+msgstr "cat-file meldete Fehler"
 
 #: builtin/replace.c:258
 #, c-format
 msgid "unable to open %s for reading"
-msgstr "Konnte '%s' nicht zum Lesen öffnen."
+msgstr "konnte '%s' nicht zum Lesen öffnen"
 
 #: builtin/replace.c:272
 msgid "unable to spawn mktree"
-msgstr "Konnte mktree nicht ausführen."
+msgstr "konnte mktree nicht ausführen"
 
 #: builtin/replace.c:276
 msgid "unable to read from mktree"
-msgstr "Konnte nicht von mktree lesen."
+msgstr "konnte nicht von mktree lesen"
 
 #: builtin/replace.c:285
 msgid "mktree reported failure"
-msgstr "mktree meldete Fehler."
+msgstr "mktree meldete Fehler"
 
 #: builtin/replace.c:289
 msgid "mktree did not return an object name"
-msgstr "mktree lieferte keinen Objektnamen zurück."
+msgstr "mktree lieferte keinen Objektnamen zurück"
 
 #: builtin/replace.c:298
 #, c-format
 msgid "unable to fstat %s"
-msgstr "Kann fstat auf %s nicht ausführen."
+msgstr "kann fstat auf %s nicht ausführen"
 
 #: builtin/replace.c:303
 msgid "unable to write object to database"
-msgstr "Konnte Objekt nicht in Datenbank schreiben."
+msgstr "konnte Objekt nicht in Datenbank schreiben"
 
 #: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:424
 #: builtin/replace.c:454
 #, c-format
 msgid "not a valid object name: '%s'"
-msgstr "Kein gültiger Objektname: '%s'"
+msgstr "kein gültiger Objektname: '%s'"
 
 #: builtin/replace.c:326
 #, c-format
 msgid "unable to get object type for %s"
-msgstr "Konnte Objektart von %s nicht bestimmten."
+msgstr "konnte Objektart von %s nicht bestimmten"
 
 #: builtin/replace.c:342
 msgid "editing object file failed"
-msgstr "Bearbeiten von Objektdatei fehlgeschlagen."
+msgstr "bearbeiten von Objektdatei fehlgeschlagen"
 
 #: builtin/replace.c:351
 #, c-format
 msgid "new object is the same as the old one: '%s'"
-msgstr "Neues Objekt ist dasselbe wie das alte: '%s'"
+msgstr "neues Objekt ist dasselbe wie das alte: '%s'"
 
 #: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
-msgstr "Konnte nicht %s als Commit parsen."
+msgstr "konnte %s nicht als Commit parsen"
 
 #: builtin/replace.c:416
 #, c-format
@@ -20986,31 +21706,31 @@
 "instead of --graft"
 msgstr ""
 "Der ursprüngliche Commit '%s' enthält Merge-Tag '%s', der verworfen\n"
-"wird; benutzen Sie --edit anstatt --graft"
+"wird; benutzen Sie --edit statt --graft"
 
 #: builtin/replace.c:469
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
-msgstr "Der originale Commit '%s' hat eine GPG-Signatur."
+msgstr "der originale Commit '%s' hat eine GPG-Signatur"
 
 #: builtin/replace.c:470
 msgid "the signature will be removed in the replacement commit!"
-msgstr "Die Signatur wird in dem Ersetzungs-Commit entfernt!"
+msgstr "die Signatur wird in dem Ersetzungs-Commit entfernt!"
 
 #: builtin/replace.c:480
 #, c-format
 msgid "could not write replacement commit for: '%s'"
-msgstr "Konnte Ersetzungs-Commit für '%s' nicht schreiben"
+msgstr "konnte Ersetzungs-Commit für '%s' nicht schreiben"
 
 #: builtin/replace.c:488
 #, c-format
 msgid "graft for '%s' unnecessary"
-msgstr "Künstlicher Vorgänger (\"graft\") für '%s' nicht notwendig."
+msgstr "künstlicher Vorgänger (\"graft\") für '%s' nicht notwendig"
 
 #: builtin/replace.c:492
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
-msgstr "Neuer Commit ist derselbe wie der alte: '%s'"
+msgstr "neuer Commit ist derselbe wie der alte: '%s'"
 
 #: builtin/replace.c:527
 #, c-format
@@ -21018,7 +21738,7 @@
 "could not convert the following graft(s):\n"
 "%s"
 msgstr ""
-"Konnte die folgenden künstlichen Vorgänger (\"grafts\") nicht konvertieren:\n"
+"konnte die folgenden künstlichen Vorgänger (\"grafts\") nicht konvertieren:\n"
 "%s"
 
 #: builtin/replace.c:548
@@ -21055,31 +21775,31 @@
 
 #: builtin/replace.c:569
 msgid "--format cannot be used when not listing"
-msgstr "--format kann nicht beim Auflisten verwendet werden."
+msgstr "--format kann nicht beim Auflisten verwendet werden"
 
 #: builtin/replace.c:577
 msgid "-f only makes sense when writing a replacement"
-msgstr "-f macht nur beim Schreiben einer Ersetzung Sinn."
+msgstr "-f macht nur beim Schreiben einer Ersetzung Sinn"
 
 #: builtin/replace.c:581
 msgid "--raw only makes sense with --edit"
-msgstr "--raw macht nur mit --edit Sinn."
+msgstr "--raw macht nur mit --edit Sinn"
 
 #: builtin/replace.c:587
 msgid "-d needs at least one argument"
-msgstr "-d benötigt mindestens ein Argument."
+msgstr "-d benötigt mindestens ein Argument"
 
 #: builtin/replace.c:593
 msgid "bad number of arguments"
-msgstr "Ungültige Anzahl von Argumenten."
+msgstr "Ungültige Anzahl von Argumenten"
 
 #: builtin/replace.c:599
 msgid "-e needs exactly one argument"
-msgstr "-e benötigt genau ein Argument."
+msgstr "-e benötigt genau ein Argument"
 
 #: builtin/replace.c:605
 msgid "-g needs at least one argument"
-msgstr "-g benötigt mindestens ein Argument."
+msgstr "-g benötigt mindestens ein Argument"
 
 #: builtin/replace.c:611
 msgid "--convert-graft-file takes no argument"
@@ -21087,7 +21807,7 @@
 
 #: builtin/replace.c:617
 msgid "only one pattern can be given with -l"
-msgstr "Mit -l kann nur ein Muster angegeben werden."
+msgstr "Mit -l kann nur ein Muster angegeben werden"
 
 #: builtin/rerere.c:13
 msgid "git rerere [clear | forget <path>... | status | remaining | diff | gc]"
@@ -21099,12 +21819,12 @@
 
 #: builtin/rerere.c:79
 msgid "'git rerere forget' without paths is deprecated"
-msgstr "'git rerere forget' ohne Pfade ist veraltet."
+msgstr "'git rerere forget' ohne Pfade ist veraltet"
 
 #: builtin/rerere.c:113
 #, c-format
 msgid "unable to generate diff for '%s'"
-msgstr "Konnte kein Diff für '%s' generieren."
+msgstr "konnte kein Diff für '%s' generieren"
 
 #: builtin/reset.c:32
 msgid ""
@@ -21170,8 +21890,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Kann keinen '%s'-Reset durchführen, während ein Merge im Gange ist."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "weniger Ausgaben, nur Fehler melden"
 
@@ -21256,20 +21976,20 @@
 msgid "Could not write new index file."
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr ""
 "--exclude-promisor-objects und --missing können nicht kombiniert werden."
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "Das Filtern von Objekten erfordert --objects."
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list unterstützt keine Anzeige von Notizen"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "markiertes Zählen ist inkompatibel mit der Option --objects"
 
@@ -21383,19 +22103,19 @@
 msgid "keep redundant, empty commits"
 msgstr "redundante, leere Commits behalten"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "\"revert\" fehlgeschlagen"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "\"cherry-pick\" fehlgeschlagen"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<Optionen>] [--] <Datei>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -21410,7 +22130,7 @@
 "unterschiedlich\n"
 "zu der Datei und HEAD:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -21418,13 +22138,13 @@
 "\n"
 "(benutzen Sie -f, um die Löschung zu erzwingen)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "die folgende Datei hat zum Commit vorgemerkte Änderungen:"
 msgstr[1] "die folgenden Dateien haben zum Commit vorgemerkte Änderungen:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -21433,50 +22153,50 @@
 "(benutzen Sie --cached, um die Datei zu behalten, oder -f, um das Entfernen "
 "zu erzwingen)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "die folgende Datei hat lokale Änderungen:"
 msgstr[1] "die folgenden Dateien haben lokale Änderungen:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "keine gelöschten Dateien auflisten"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "nur aus dem Index entfernen"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "die \"up-to-date\" Prüfung überschreiben"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "rekursives Entfernen erlauben"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "mit Rückgabewert 0 beenden, wenn keine Übereinstimmung gefunden wurde"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr ""
 "Es wurde keine Pfadspezifikation angegeben. Welche Dateien sollen entfernt "
 "werden?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "Bitte merken Sie Ihre Änderungen in .gitmodules zum Commit vor oder\n"
 "benutzen Sie \"stash\", um fortzufahren."
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "'%s' wird nicht ohne -r rekursiv entfernt"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: konnte %s nicht löschen"
@@ -21518,53 +22238,53 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<Optionen>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "mehrere Optionen --group mit Standard-Eingabe wird nicht unterstützt"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr ""
 "Nutzung von --group=trailer mit Standard-Eingabe wird nicht unterstützt"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "unbekannter Gruppen-Typ: %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "über Commit-Ersteller anstatt Autor gruppieren"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "nach Commit-Ersteller statt Autor gruppieren"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "die Ausgabe entsprechend der Anzahl von Commits pro Autor sortieren"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
 msgstr "Commit-Beschreibungen unterdrücken, nur Anzahl der Commits liefern"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "die E-Mail-Adresse von jedem Autor anzeigen"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "die E-Mail-Adresse jedes Autors anzeigen"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
 msgstr "Ausgabe mit Zeilenumbrüchen"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "Feld"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Gruppieren über Feld"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "Gruppieren nach Feld"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "zu viele Argumente außerhalb des Repositories angegeben"
 
@@ -21674,14 +22394,14 @@
 
 #: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
-msgstr "Die Option --reflog benötigt einen Branchnamen."
+msgstr "die Option --reflog benötigt einen Branchnamen"
 
 #: builtin/show-branch.c:741
 #, 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] "nur %d Eintrag kann zur selben Zeit angezeigt werden"
-msgstr[1] "nur %d Einträge können zur selben Zeit angezeigt werden"
+msgstr[0] "nur %d Eintrag kann zur selben Zeit angezeigt werden."
+msgstr[1] "nur %d Einträge können zur selben Zeit angezeigt werden."
 
 #: builtin/show-branch.c:745
 #, c-format
@@ -21761,108 +22481,116 @@
 "Referenzen von der Standard-Eingabe anzeigen, die sich nicht im lokalen "
 "Repository befinden"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <Optionen>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "dieses Arbeitsverzeichnis ist nicht partiell (Datei für partieller Checkout "
 "existiert eventuell nicht)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr ""
 "Fehler beim Erstellen eines Verzeichnisses für Datei eines partiellen "
 "Checkouts"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
 "Repository-Format konnte nicht erweitert werden, um worktreeConfig zu "
 "aktivieren"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "Einstellung für extensions.worktreeConfig konnte nicht gesetzt werden"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "initialisiere den partiellen Checkout im Cone-Modus"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "die Nutzung des Sparse-Index umschalten"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "Verändern der Konfiguration für Sparse-Index fehlgeschlagen"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "Fehler beim Öffnen von '%s'"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "konnte Pfad '%s' nicht normalisieren"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <Muster>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "konnte Anführungszeichen von C-Style Zeichenkette '%s' nicht entfernen"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "konnte die existierenden Muster des partiellen Checkouts nicht laden"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "Muster von der Standard-Eingabe lesen"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "Fehler während der Aktualisierung des Arbeitsverzeichnisses."
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<Optionen>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<Optionen>] [<Stash>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<Stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<Stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <Branch> [<Stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21874,7 +22602,7 @@
 "          [--pathspec-from-file=<Datei> [--pathspec-file-nul]]\n"
 "          [--] [<Pfadspezifikation>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21882,19 +22610,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<Nachricht>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<Stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<Stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <Nachricht>] [-q|--quiet] <Commit>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21904,176 +22632,204 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <Nachricht>]\n"
 "          [--] [<Pfadspezifikation>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "'%s' ist kein \"stash\"-artiger Commit"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Zu viele Commits angegeben:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "Keine Stash-Einträge gefunden."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "'%s' ist kein gültiger Referenzname."
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
 msgstr "git stash clear mit Parametern ist nicht implementiert"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"WARNUNG: Nicht versionierte Datei im Weg von versionierter Datei! "
+"Umbenennung\n"
+"            %s -> %s\n"
+"         um Platz zu schaffen.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "Kann Stash nicht anwenden, solange ein Merge im Gange ist"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "Konnte keinen Diff erzeugen %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "Konflikte im Index. Versuchen Sie es ohne --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "Konnte Index-Verzeichnis nicht speichern"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "Konnte unversionierte Dateien vom Stash nicht wiederherstellen."
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Führe %s mit %s zusammen"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "Index wurde nicht aus dem Stash zurückgeladen."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "Versuche Index wiederherzustellen."
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s (%s) gelöscht"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Konnte Stash-Eintrag nicht löschen"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' ist keine Stash-Referenz"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 "Der Stash-Eintrag wird für den Fall behalten, dass Sie diesen nochmal "
 "benötigen."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Kein Branchname spezifiziert"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "Parsen der Tree-Objekte fehlgeschlagen"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "Entpacken der Tree-Objekte fehlgeschlagen"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "unversionierte Dateien in Stash einbeziehen"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "nur unversionierte Dateien im Stash anzeigen"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Kann nicht %s mit %s aktualisieren."
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "Stash-Beschreibung"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" erwartet ein Argument <Commit>"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Keine Änderungen ausgewählt"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Sie haben bisher noch keinen initialen Commit"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "Kann den aktuellen Zustand des Index nicht speichern"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "Kann die unversionierten Dateien nicht speichern"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "Kann Zustand des Arbeitsverzeichnisses nicht aufzeichnen"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Kann nicht gleichzeitig --patch und --include-untracked oder --all verwenden"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "Haben Sie vielleicht 'git add' vergessen?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "Keine lokalen Änderungen zum Speichern"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "Kann \"stash\" nicht initialisieren"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "Kann den aktuellen Status nicht speichern"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Arbeitsverzeichnis und Index-Status %s gespeichert."
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "behalte Index"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "Stash in Patch-Modus"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "weniger Ausgaben"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "unversionierte Dateien in Stash einbeziehen"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "ignorierte Dateien einbeziehen"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -22099,7 +22855,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "Kommentarzeichen mit Leerzeichen an jede Zeile voranstellen"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Vollständiger Referenzname erwartet, %s erhalten"
@@ -22113,7 +22869,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "Kann eine Komponente von URL '%s' nicht extrahieren"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "Alternativer Anker für relative Pfade"
 
@@ -22121,18 +22877,18 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<Pfad>] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Keine URL für Submodul-Pfad '%s' in .gitmodules gefunden"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Betrete '%s'\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22141,7 +22897,7 @@
 "run_command gab nicht-Null Status für '%s' zurück.\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22153,21 +22909,20 @@
 "nicht-Null Status zurück.\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr ""
-"Ausgaben beim Betreten und der Befehlsausführung in einem Submodul "
-"unterdrücken"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "Ausgaben beim Betreten eines Submodul-Befehls unterdrücken"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
 msgstr "Rekursion in verschachtelte Submodule durchführen"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <Befehl>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22176,159 +22931,155 @@
 "Konnte Konfiguration '%s' nicht nachschlagen. Nehme an, dass dieses\n"
 "Repository sein eigenes verbindliches Upstream-Repository ist."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr ""
 "Fehler beim Eintragen der URL für Submodul-Pfad '%s' in die Konfiguration."
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Submodul '%s' (%s) für Pfad '%s' in die Konfiguration eingetragen.\n"
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "Warnung: 'update'-Modus für Submodul '%s' vorgeschlagen\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "Fehler bei Änderung des Aktualisierungsmodus für Submodul-Pfad '%s' in der\n"
 "Konfiguration."
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
 msgstr "Ausgaben bei Initialisierung eines Submoduls unterdrücken"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<Optionen>] [<Pfad>]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "Keine Submodul-Zuordnung in .gitmodules für Pfad '%s' gefunden"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "Konnte HEAD-Referenz nicht innerhalb des Submodul-Pfads '%s' auflösen."
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "Fehler bei Rekursion in Submodul '%s'."
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Ausgabe über Submodul-Status unterdrücken"
-
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
-msgstr ""
-"Benutze den Commit, der im Index gespeichert ist, statt den im Submodul HEAD"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "Ausgabe des Submodul-Status unterdrücken"
 
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "Rekursion in verschachtelte Submodule durchführen"
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
+msgstr ""
+"den Commit benutzen, der im Index gespeichert ist, statt den im Submodul HEAD"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <Pfad>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "Hash eines Objektes von '%s' konnte nicht erzeugt werden"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "unerwarteter Modus %o\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "benutze den Commit, der im Index gespeichert ist, statt vom Submodul HEAD"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr "um den Commit aus dem Index mit dem im Submodul HEAD zu vergleichen"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 "überspringe Submodule, wo der 'ignore_config' Wert auf 'all' gesetzt ist"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "Größe der Zusammenfassung begrenzen"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<Optionen>] [<Commit>] [--] [<Pfad>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "konnte keinen Commit für HEAD holen"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "--cached und --files schließen sich gegenseitig aus"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Synchronisiere Submodul-URL für '%s'\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "Fehler beim Registrieren der URL für Submodul-Pfad '%s'"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "Fehler beim Lesen des Standard-Remote-Repositories für Submodul '%s'"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "Fehler beim Aktualisieren des Remote-Repositories für Submodul '%s'"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
 msgstr "Ausgaben bei der Synchronisierung der Submodul-URLs unterdrücken"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<Pfad>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -22338,7 +23089,7 @@
 "(benutzen Sie 'rm -rf', wenn Sie dieses wirklich mitsamt seiner Historie\n"
 "löschen möchten)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -22347,49 +23098,49 @@
 "Arbeitsverzeichnis von Submodul in '%s' enthält lokale Änderungen;\n"
 "verwenden Sie '-f', um diese zu verwerfen."
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Verzeichnis '%s' bereinigt.\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Konnte Arbeitsverzeichnis des Submoduls in '%s' nicht löschen.\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "Konnte kein leeres Verzeichnis für Submodul in '%s' erstellen."
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Submodul '%s' (%s) für Pfad '%s' ausgetragen.\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
+#: builtin/submodule--helper.c:1625
+msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "Arbeitsverzeichnisse von Submodulen löschen, auch wenn lokale Änderungen "
 "vorliegen"
 
-#: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
 msgstr "alle Submodule austragen"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<Pfad>...]]"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 "Verwenden Sie '--all', wenn Sie wirklich alle Submodule deinitialisieren\n"
 "möchten."
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -22402,46 +23153,46 @@
 "submodule.alternateErrorStrategy auf 'info' oder klone mit der Option\n"
 "'--reference-if-able' statt '--reference'."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "Submodul '%s' kann Alternative nicht hinzufügen: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Wert '%s' für submodule.alternateErrorStrategy wird nicht erkannt"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Wert '%s' für submodule.alternateLocation wird nicht erkannt."
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "Pfad für neues Submodul"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "Name des neuen Submoduls"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "URL von der das Submodul geklont wird"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "Tiefe des Klons mit unvollständiger Historie (shallow)"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "Fortschrittsanzeige beim Klonen erzwingen"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "Klonen in ein nicht leeres Verzeichnis verbieten"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -22451,111 +23202,110 @@
 "<Repository>] [--name <Name>] [--depth <Tiefe>] [--single-branch] --url "
 "<URL> --path <Pfad>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "Erstellung/Benutzung von '%s' in einem anderen Submodul-Git-Verzeichnis\n"
 "verweigert."
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "Klonen von '%s' in Submodul-Pfad '%s' fehlgeschlagen."
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "Verzeichnis ist nicht leer: '%s'"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "Konnte Submodul-Verzeichnis '%s' nicht finden."
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Ungültiger Aktualisierungsmodus '%s' für Submodul-Pfad '%s'."
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Ungültiger Aktualisierungsmodus '%s' für Submodul-Pfad '%s' konfiguriert."
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Submodul-Pfad '%s' nicht initialisiert"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Meinten Sie vielleicht 'update --init'?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Überspringe nicht zusammengeführtes Submodul %s"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Überspringe Submodul '%s'"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Fehler beim Klonen von '%s'. Weiterer Versuch geplant"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Zweiter Versuch '%s' zu klonen fehlgeschlagen, breche ab."
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "Pfad zum Arbeitsverzeichnis"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
 "Pfad zum Arbeitsverzeichnis, über verschachtelte Submodul-Grenzen hinweg"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout oder none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr ""
-"Erstellung eines Klons mit unvollständiger Historie (shallow), abgeschnitten "
-"bei\n"
-"der angegebenen Anzahl von Commits."
+"einen Klon mit unvollständiger Historie (shallow) erstellen, abgeschnitten "
+"bei der angegebenen Anzahl von Commits"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "Parallele Ausführungen"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr ""
 "ob das initiale Klonen den Empfehlungen für eine unvollständige\n"
 "Historie (shallow) folgen soll"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "keine Fortschrittsanzeige beim Klonen"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<Pfad>] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "Fehlerhafter Wert für --update Parameter"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -22564,86 +23314,86 @@
 "Branch von Submodul (%s) ist konfiguriert, den Branch des Hauptprojektes\n"
 "zu erben, aber das Hauptprojekt befindet sich auf keinem Branch."
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "Konnte kein Repository-Handle für Submodul '%s' erhalten."
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "Rekursion in Submodule durchführen"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<Optionen>] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "prüfen, ob es sicher ist, in die Datei .gitmodules zu schreiben"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "Konfiguration in der .gitmodules-Datei entfernen"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <name> [<Wert>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <Name>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 "Bitte stellen Sie sicher, dass sich die Datei .gitmodules im "
 "Arbeitsverzeichnis befindet."
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
 msgstr "Ausgaben beim Setzen der URL eines Submoduls unterdrücken"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <Pfad> <neue URL>"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "Standard-Tracking-Branch auf master setzen"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "Standard-Tracking-Branch setzen"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) [<Pfad>]"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <Branch> <Pfad>"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "Option --branch oder --default erforderlich"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch und --default schließen sich gegenseitig aus"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s unterstützt kein --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' ist kein gültiger Unterbefehl von submodule--helper"
@@ -22656,24 +23406,24 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <Name>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr ""
 "Fehlermeldungen für nicht-symbolische (losgelöste) Referenzen unterdrücken"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "symbolische Referenzen löschen"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "verkürzte Ausgabe der Referenzen"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "Grund"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "Grund für die Aktualisierung"
 
@@ -22705,17 +23455,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<Format>] <Tagname>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "Tag '%s' nicht gefunden."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Tag '%s' gelöscht (war %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22728,7 +23478,7 @@
 "  %s\n"
 "ein. Zeilen, die mit '%c' beginnen, werden ignoriert.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -22743,15 +23493,11 @@
 "ein. Zeilen, die mit '%c' beginnen, werden behalten; Sie dürfen diese\n"
 "selbst entfernen wenn Sie möchten.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "konnte Tag nicht signieren"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "konnte Tag-Datei nicht schreiben"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22765,143 +23511,139 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "ungültiger Objekt-Typ"
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "keine Tag-Beschreibung?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Die Tag-Beschreibung wurde in %s gelassen\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "Tagnamen auflisten"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "<n> Zeilen jeder Tag-Beschreibung anzeigen"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "Tags löschen"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "Tags überprüfen"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Optionen für Erstellung von Tags"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "annotiertes Tag, benötigt eine Beschreibung"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "Tag-Beschreibung"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "Bearbeitung der Tag-Beschreibung erzwingen"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "annotiertes und GPG-signiertes Tag"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "einen anderen Schlüssel verwenden, um das Tag zu signieren"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "das Tag ersetzen, wenn es existiert"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "Reflog erstellen"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Optionen für Auflistung der Tags"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "Liste der Tags in Spalten anzeigen"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "nur Tags ausgeben, die diesen Commit beinhalten"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "nur Tags ausgeben, die diesen Commit nicht enthalten"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "nur Tags ausgeben, die gemerged wurden"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "nur Tags ausgeben, die nicht gemerged wurden"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "nur Tags von dem Objekt ausgeben"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column und -n sind inkompatibel"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
-msgstr "Die Option -n ist nur im Listenmodus erlaubt."
+msgstr "die Option -n ist nur im Listenmodus erlaubt"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
-msgstr "Die Option --contains ist nur im Listenmodus erlaubt."
+msgstr "--contains ist nur im Listenmodus erlaubt"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
-msgstr "Die Option --no-contains ist nur im Listenmodus erlaubt."
+msgstr "--no-contains ist nur im Listenmodus erlaubt"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
-msgstr "Die Option --points-at ist nur im Listenmodus erlaubt."
+msgstr "--points-at ist nur im Listenmodus erlaubt"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
-msgstr "Die Optionen --merged und --no-merged sind nur im Listenmodus erlaubt."
+msgstr "--merged und --no-merged sind nur im Listenmodus erlaubt"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "nur eine -F oder -m Option ist erlaubt."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "zu viele Parameter"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' ist kein gültiger Tagname."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "Tag '%s' existiert bereits"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Tag '%s' aktualisiert (war %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Entpacke Objekte"
 
@@ -22973,212 +23715,212 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<Optionen>] [--] [<Datei>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr ""
 "Aktualisierung fortsetzen, auch wenn der Index aktualisiert werden muss"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "Aktualisierung: ignoriert Submodule"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "keine neuen Dateien ignorieren"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "Dateien Verzeichnisse ersetzen lassen, und umgedreht"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "fehlende Dateien im Arbeitsverzeichnis beachten"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "aktualisieren, auch wenn der Index nicht zusammengeführte Einträge beinhaltet"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "Dateiinformationen aktualisieren"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "wie --refresh, ignoriert aber \"assume-unchanged\" Einstellung"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<Modus>,<Objekt>,<Pfad>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "den angegebenen Eintrag zum Commit vormerken"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "diese Datei immer als unverändert betrachten"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "\"assumed-unchanged\"-Bit löschen"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "Dateien als \"index-only\" markieren"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "\"skip-worktree\"-Bit löschen"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "\"index-only\" Einträge überspringen"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "die Änderungen nur zum Commit vormerken; Inhalt wird nicht der Objekt-"
 "Datenbank hinzugefügt"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "benannte Pfade löschen, auch wenn sie sich im Arbeitsverzeichnis befinden"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "mit --stdin: eingegebene Zeilen sind durch NUL-Bytes abgeschlossen"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "Liste der zu aktualisierenden Pfade von der Standard-Eingabe lesen"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "Einträge von der Standard-Eingabe zum Commit vormerken"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 "wiederholtes Einpflegen der Zustände #2 und #3 für die aufgelisteten Pfade"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "nur Einträge aktualisieren, die unterschiedlich zu HEAD sind"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "fehlende Dateien im Arbeitsverzeichnis ignorieren"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "die Aktionen in der Standard-Ausgabe ausgeben"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(für Fremdprogramme) keine gespeicherten, nicht aufgelöste Konflikte"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "Index-Datei in diesem Format schreiben"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "Splitting des Index aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "Cache für unversionierte Dateien aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr ""
 "prüfen, ob das Dateisystem einen Cache für unversionierte Dateien unterstützt"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 "Cache für unversionierte Dateien ohne Prüfung des Dateisystems aktivieren"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "Index rausschreiben, auch wenn dieser nicht als geändert markiert ist"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "Dateisystem-Monitor aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "Dateien als \"fsmonitor valid\" markieren"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "\"fsmonitor valid\"-Bit löschen"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
-"core.splitIndex ist auf 'false' gesetzt. Entfernen oder ändern Sie dies,\n"
-"wenn sie wirklich das Splitting des Index aktivieren möchten."
+"core.splitIndex ist auf 'false' gesetzt; entfernen oder ändern Sie dies,\n"
+"wenn sie wirklich das Splitting des Index aktivieren möchten"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
-"core.splitIndex ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
-"wenn Sie wirklich das Splitting des Index deaktivieren möchten."
+"core.splitIndex ist auf 'true' gesetzt; entfernen oder ändern Sie dies,\n"
+"wenn Sie wirklich das Splitting des Index deaktivieren möchten"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
 msgstr ""
-"core.untrackedCache ist auf 'true' gesetzt. Entfernen oder ändern Sie dies,\n"
-"wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten."
+"core.untrackedCache ist auf 'true' gesetzt; entfernen oder ändern Sie dies,\n"
+"wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "Cache für unversionierte Dateien deaktiviert"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
 msgstr ""
-"core.untrackedCache ist auf 'false' gesetzt. Entfernen oder ändern Sie "
+"core.untrackedCache ist auf 'false' gesetzt; entfernen oder ändern Sie "
 "dies,\n"
-"wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten."
+"wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Cache für unversionierte Dateien für '%s' aktiviert"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
-"core.fsmonitor nicht gesetzt. Setzen Sie es, wenn Sie den Dateisystem-"
+"core.fsmonitor nicht gesetzt; setzen Sie es, wenn Sie den Dateisystem-"
 "Monitor\n"
-"wirklich aktivieren möchten."
+"wirklich aktivieren möchten"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "Dateisystem-Monitor aktiviert"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
-"core.fsmonitor ist gesetzt. Löschen Sie es, wenn Sie den Dateisystem-"
+"core.fsmonitor ist gesetzt; löschen Sie es, wenn Sie den Dateisystem-"
 "Monitor\n"
 "wirklich deaktivieren möchten."
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "Dateisystem-Monitor deaktiviert"
 
@@ -23273,89 +24015,63 @@
 msgid "print tag contents"
 msgstr "Tag-Inhalte ausgeben"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<Optionen>] <Pfad> [<Commit-Angabe>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<Optionen>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<Optionen>] <Pfad>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <Arbeitsverzeichnis> <neuer-Pfad>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<Optionen>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<Optionen>] <Arbeitsverzeichnis>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <Pfad>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "Fehler beim Löschen von '%s'"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "kein gültiges Verzeichnis"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "gitdir-Datei existiert nicht"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "konnte gitdir-Datei nicht lesen (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "read() zu kurz (%<PRIuMAX> Bytes erwartet, %<PRIuMAX> gelesen)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "ungültige gitdir-Datei"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "gitdir-Datei verweist auf nicht existierenden Ort"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Entferne %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "entfernte Arbeitsverzeichnisse ausgeben"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "Arbeitsverzeichnisse älter als <Zeit> verfallen lassen"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' existiert bereits"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "nicht nutzbares Ziel des Arbeitsverzeichnisses '%s'"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -23365,7 +24081,7 @@
 "Benutzen Sie '%s -f -f' zum Überschreiben, oder 'unlock' und 'prune'\n"
 "oder 'remove' zum Löschen."
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23375,124 +24091,137 @@
 "Benutzen Sie '%s -f' zum Überschreiben, oder 'prune' oder 'remove' zum\n"
 "Löschen."
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht erstellen."
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Bereite Arbeitsverzeichnis vor (neuer Branch '%s')"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Bereite Arbeitsverzeichnis vor (setze Branch '%s' um; war bei %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Bereite Arbeitsverzeichnis vor (checke '%s' aus)"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Bereite Arbeitsverzeichnis vor (losgelöster HEAD %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "<Branch> auschecken, auch wenn dieser bereits in einem anderen "
 "Arbeitsverzeichnis ausgecheckt ist"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "neuen Branch erstellen"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "Branch erstellen oder umsetzen"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "das neue Arbeitsverzeichnis auschecken"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "das neue Arbeitsverzeichnis gesperrt lassen"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "Modus zum Folgen von Branches einstellen (siehe git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "versuchen, eine Übereinstimmung des Branch-Namens mit einem\n"
 "Remote-Tracking-Branch herzustellen"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B und --detach schließen sich gegenseitig aus"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 "--[no]-track kann nur verwendet werden, wenn ein neuer Branch erstellt wird."
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "erweiterte Anmerkungen und Gründe anzeigen, falls vorhanden"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"'prunable'-Anmerkung zu Arbeitsverzeichnissen älter als <Zeit> hinzufügen"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose und --porcelain schließen sich gegenseitig aus"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "Sperrgrund"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' ist kein Arbeitsverzeichnis"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Das Hauptarbeitsverzeichnis kann nicht gesperrt oder entsperrt werden."
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' ist bereits gesperrt, Grund: %s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' ist bereits gesperrt"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' ist nicht gesperrt"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "Arbeitsverzeichnisse, die Submodule enthalten, können nicht verschoben oder\n"
 "entfernt werden."
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "Verschieben erzwingen, auch wenn das Arbeitsverzeichnis geändert oder "
 "gesperrt ist"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' ist ein Hauptarbeitsverzeichnis"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "Konnte Zielname aus '%s' nicht bestimmen."
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -23502,7 +24231,7 @@
 "Benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23511,40 +24240,40 @@
 "Benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "Validierung fehlgeschlagen, kann Arbeitszeichnis nicht verschieben: %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "Fehler beim Verschieben von '%s' nach '%s'"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "Fehler beim Ausführen von 'git status' auf '%s'"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' enthält geänderte oder nicht versionierte Dateien, benutzen Sie --force "
 "zum Löschen"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "Fehler beim Ausführen von 'git status' auf '%s'. Code: %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "Löschen erzwingen, auch wenn das Arbeitsverzeichnis geändert oder gesperrt "
 "ist"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23554,7 +24283,7 @@
 "Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23563,17 +24292,17 @@
 "Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "Validierung fehlgeschlagen, kann Arbeitsverzeichnis nicht löschen: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "repariere: %s: %s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "Fehler: %s: %s"
@@ -23594,15 +24323,159 @@
 msgid "only useful for debugging"
 msgstr "nur nützlich für Fehlersuche"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <Pfad>] [-c <Name>=<Wert>]\n"
+"           [--exec-path[=<Pfad>]] [--html-path] [--man-path] [--info-path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=<Pfad>] [--work-tree=<Pfad>] [--namespace=<Name>]\n"
+"           [--super-prefix=<Pfad>] [--config-env=<Name>=<Variable>]\n"
+"           <Befehl> [<Argumente>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"'git help -a' und 'git help -g' listet verfügbare Unterbefehle und\n"
+"einige Anleitungen zu Git-Konzepten auf. Benutzen Sie 'git help <Befehl>'\n"
+"oder 'git help <Konzept>', um mehr über einen spezifischen Befehl oder\n"
+"Konzept zu erfahren.\n"
+"Benutzen Sie 'git help git' für einen Überblick des Systems."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "Kein Verzeichnis für --git-dir angegeben.\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "Kein Namespace für --namespace angegeben.\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "Kein Verzeichnis für --work-tree angegeben.\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "Kein Präfix für --super-prefix angegeben.\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "-c erwartet einen Konfigurationsstring.\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "kein Konfigurationsschlüssel für --config-env angegeben\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "Kein Verzeichnis für -C angegeben.\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "Unbekannte Option: %s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "beim Erweitern von Alias '%s': '%s'"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"Alias '%s' ändert Umgebungsvariablen.\n"
+"Sie können '!git' im Alias benutzen, um dies zu tun."
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "leerer Alias für %s"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "rekursiver Alias: %s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "Fehler beim Schreiben in die Standard-Ausgabe."
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "Unbekannter Fehler beim Schreiben in die Standard-Ausgabe."
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "Fehler beim Schließen der Standard-Ausgabe."
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "Alias-Schleife erkannt: Erweiterung von '%s' schließt nicht ab:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "Kann %s nicht als eingebauten Befehl behandeln."
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"Verwendung: %s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr "Erweiterung von Alias '%s' fehlgeschlagen; '%s' ist kein Git-Befehl\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "Fehler beim Ausführen von Befehl '%s': %s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "Argument für --packfile muss ein gültiger Hash sein ('%s' erhalten)"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "kein Git-Repository"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile benötigt --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args kann nur mit --packfile benutzt werden"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "unbehandelte Optionen"
@@ -23628,134 +24501,111 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "direkt nach Anzeige der angebotenen Fähigkeiten beenden"
 
-#: git.c:28
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr "Socket/Pipe bereits in Benutzung: '%s'"
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr "konnte Server nicht starten auf: '%s'"
+
+#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
+msgid "could not spawn daemon in the background"
+msgstr "Daemon konnte nicht im Hintergrund erzeugt werden"
+
+#: t/helper/test-simple-ipc.c:356
+msgid "waitpid failed"
+msgstr "waitpid fehlgeschlagen"
+
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
+msgstr "Daemon ist noch nicht online"
+
+#: t/helper/test-simple-ipc.c:406
+msgid "daemon failed to start"
+msgstr "Fehler beim Starten des Daemons"
+
+#: t/helper/test-simple-ipc.c:410
+msgid "waitpid is confused"
+msgstr "waitpid ist verwirrt"
+
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
+msgstr "Daemon ist noch nicht heruntergefahren"
+
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active    [<Name>] [<Optionen>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<Name>] [<Threads>]"
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr "test-helper simple-ipc start-daemon [<Name>] [<Threads>] [<max-wait>]"
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<Name>] [<max-wait>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<Name>] [<Token>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<Name>] [<bytecount>] [<Byte>]"
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
-"git [--version] [--help] [-C <Pfad>] [-c <Name>=<Wert>]\n"
-"           [--exec-path[=<Pfad>]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=<Pfad>] [--work-tree=<Pfad>] [--namespace=<Name>]\n"
-"           <Befehl> [<Argumente>]"
+"test-helper simple-ipc multiple     [<Name>] [<Threads>] [<bytecount>] "
+"[<batchsize>]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"'git help -a' und 'git help -g' listet verfügbare Unterbefehle und\n"
-"einige Anleitungen zu Git-Konzepten auf. Benutzen Sie 'git help <Befehl>'\n"
-"oder 'git help <Konzept>', um mehr über einen spezifischen Befehl oder\n"
-"Konzept zu erfahren.\n"
-"Benutzen Sie 'git help git' für einen Überblick des Systems."
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "Name oder Pfadname des UNIX-Domain-Sockets"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "Kein Verzeichnis für --git-dir angegeben.\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "Name der benannten Pipe"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "Kein Namespace für --namespace angegeben.\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "Anzahl der Threads im Thread-Pool des Servers"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "Kein Verzeichnis für --work-tree angegeben.\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "Sekunden, um auf Starten oder Stoppen des Daemons zu warten"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "Kein Präfix für --super-prefix angegeben.\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "Anzahl von Bytes"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "-c erwartet einen Konfigurationsstring.\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "Anzahl der Anfragen pro Thread"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "Kein Verzeichnis für -C angegeben.\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "Byte"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "Unbekannte Option: %s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "Ballast-Zeichen"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "beim Erweitern von Alias '%s': '%s'"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "Token"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"Alias '%s' ändert Umgebungsvariablen.\n"
-"Sie können '!git' im Alias benutzen, um dies zu tun."
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "leerer Alias für %s"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "rekursiver Alias: %s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "Fehler beim Schreiben in die Standard-Ausgabe."
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "Unbekannter Fehler beim Schreiben in die Standard-Ausgabe."
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "Fehler beim Schließen der Standard-Ausgabe."
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "Alias-Schleife erkannt: Erweiterung von '%s' schließt nicht ab:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "Kann %s nicht als eingebauten Befehl behandeln."
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"Verwendung: %s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr "Erweiterung von Alias '%s' fehlgeschlagen; '%s' ist kein Git-Befehl.\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "Fehler beim Ausführen von Befehl '%s': %s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "Befehlstoken, der an den Server gesendet werden soll"
 
 #: http.c:399
 #, c-format
@@ -23796,7 +24646,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Konnte SSL-Backend nicht zu '%s' setzen: bereits gesetzt"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23819,17 +24669,17 @@
 
 #: remote-curl.c:408
 msgid "invalid server response; expected service, got flush packet"
-msgstr "Ungültige Antwort des Servers. Service erwartet, Flush-Paket bekommen"
+msgstr "ungültige Antwort des Servers; Service erwartet, Flush-Paket bekommen"
 
 #: remote-curl.c:439
 #, c-format
 msgid "invalid server response; got '%s'"
-msgstr "Ungültige Serverantwort; '%s' bekommen"
+msgstr "ungültige Serverantwort; '%s' bekommen"
 
 #: remote-curl.c:499
 #, c-format
 msgid "repository '%s' not found"
-msgstr "Repository '%s' nicht gefunden."
+msgstr "Repository '%s' nicht gefunden"
 
 #: remote-curl.c:503
 #, c-format
@@ -23949,54 +24799,54 @@
 msgid "no libc information available\n"
 msgstr "keine libc Informationen verfügbar\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "Argumente"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "Filtern nach Objekten"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "Verfallsdatum"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "Kein Effekt (Rückwärtskompatibilität)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "erweiterte Ausgaben"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "weniger Ausgaben"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "benutze <Anzahl> Ziffern zur Anzeige von Objektnamen"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 "wie Leerzeichen und #Kommentare von der Beschreibung getrennt werden sollen"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "Pfadspezifikation aus einer Datei lesen"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 "Mit der Option --pathspec-from-file sind Pfade durch NUL-Zeichen getrennt"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "Schüssel"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "sortiere nach diesem Feld"
 
@@ -24005,14 +24855,6 @@
 msgstr ""
 "Index, wenn möglich, mit wiederverwendeter Konfliktauflösung aktualisieren"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD losgelöst bei "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD losgelöst von "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Dateiinhalte zum Commit vormerken"
@@ -24365,8 +25207,8 @@
 msgstr "multi-pack-indexes schreiben und überprüfen"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "ein Tag-Objekt erstellen"
+msgid "Creates a tag object with extra validation"
+msgstr "Erstellt ein Tag-Objekt mit zusätzlicher Validierung"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24683,69 +25525,55 @@
 msgstr "Spezifikation von bewusst ignorierten, unversionierten Dateien"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Autor/Commit-Ersteller und/oder E-Mail-Adressen zuordnen"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Definition von Submodul-Eigenschaften"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git Namensbereiche"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Hilfsprogramme zur Interaktion mit Remote-Repositories"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git Repository Aufbau"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Spezifikation von Commits und Bereichen für Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Einbinden eines Repositories in ein anderes"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "eine einführende Anleitung zu Git: Teil zwei"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "eine einführende Anleitung zu Git"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Eine Übersicht über empfohlene Arbeitsabläufe mit Git"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Ungültige Referenz-Eingabe: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Keine Log-Datei gegeben"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "kann $file nicht für das Abspielen lesen"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? Was reden Sie da?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "'bisect run' fehlgeschlagen: kein Befehl angegeben."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "führe $command aus"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24754,11 +25582,11 @@
 "'bisect run' fehlgeschlagen:\n"
 "Exit-Code $res von '$command' ist < 0 oder >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "'bisect run' kann nicht mehr fortgesetzt werden"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24767,14 +25595,10 @@
 "'bisect run' fehlgeschlagen:\n"
 "'bisect-state $state' wurde mit Fehlerwert $res beendet"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "'bisect run' erfolgreich ausgeführt"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "Keine binäre Suche im Gange."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25750,27 +26574,32 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "lokaler Zeit-Offset größer oder gleich 24 Stunden\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "fatal: Befehl '%s' mit Exit-Code %d beendet"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "Der Editor wurde unsauber beendet, breche alles ab."
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr ""
 "'%s' enthält eine Zwischenversion der E-Mail, die Sie gerade verfassen.\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' enthält die verfasste E-Mail.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases ist mit anderen Optionen inkompatibel\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -25782,12 +26611,12 @@
 "Setzen Sie sendemail.forbidSendmailVariables auf 'false', um diese Prüfung "
 "zu deaktivieren.\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr ""
 "Kann 'git format-patch' nicht außerhalb eines Repositories ausführen.\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
@@ -25796,38 +26625,38 @@
 "Kommandozeile\n"
 "oder Konfigurationsoption)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Unbekanntes --suppress-cc Feld: '%s'\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Unbekannte --confirm Einstellung: '%s'\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr ""
 "Warnung: sendemail-Alias mit Anführungszeichen wird nicht unterstützt: %s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "Warnung: `:include:` wird nicht unterstützt: %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "Warnung: `/file` oder `|pipe` Umleitung wird nicht unterstützt: %s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "Warnung: sendmail Zeile wird nicht erkannt: %s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25842,43 +26671,34 @@
 "\n"
 "    * \"./%s\" angeben, wenn Sie eine Datei meinen, oder\n"
 "    * die Option --format-patch angeben, wenn Sie einen Commit-Bereich "
-"meinen\n"
+"meinen.\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Fehler beim Öffnen von %s: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"fatal: %s: %s\n"
-"Warnung: Es wurden keine Patches versendet.\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
 "\n"
 msgstr ""
 "\n"
-"keine Patch-Dateien angegeben!\n"
+"Keine Patch-Dateien angegeben!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Keine Betreffzeile in %s?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Fehler beim Öffnen von '%s' zum Schreiben: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25893,27 +26713,27 @@
 "Leeren Sie den Inhalt des Bodys, wenn Sie keine Zusammenfassung senden "
 "möchten.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Fehler beim Öffnen von %s: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Fehler beim Öffnen von %s.final: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "E-Mail mit Zusammenfassung ist leer, wird ausgelassen\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Sind Sie sich sicher, <%s> zu benutzen [y/N]? "
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -25921,11 +26741,11 @@
 "Die folgenden Dateien sind 8-Bit, aber deklarieren kein\n"
 "Content-Transfer-Encoding.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Welches 8-Bit-Encoding soll deklariert werden [UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -25939,22 +26759,22 @@
 "an,\n"
 "wenn Sie den Patch wirklich versenden wollen.\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "An wen sollen die E-Mails versendet werden (wenn überhaupt jemand)?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "fatal: Alias '%s' erweitert sich zu sich selbst\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 "Message-ID zur Verwendung als In-Reply-To für die erste E-Mail (wenn eine "
 "existiert)? "
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "Fehler: konnte keine gültige Adresse aus %s extrahieren\n"
@@ -25962,18 +26782,18 @@
 #. 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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr ""
 "Was soll mit dieser Adresse geschehen? (Beenden [q]|Löschen [d]|Bearbeiten "
 "[e]): "
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "CA Pfad \"%s\" existiert nicht"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -26002,133 +26822,148 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr ""
 "Diese E-Mail versenden? (Ja [y]|Nein [n]|Bearbeiten [e]|Beenden [q]|Alle "
 "[a]): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Zum Versenden dieser E-Mail ist eine Antwort erforderlich."
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "Der erforderliche SMTP-Server ist nicht korrekt definiert."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Server unterstützt kein STARTTLS! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS fehlgeschlagen! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
 "Konnte SMTP nicht korrekt initialisieren. Bitte prüfen Sie Ihre "
 "Konfiguration\n"
 "und benutzen Sie --smtp-debug."
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "Fehler beim Senden %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Probeversand %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "%s gesendet\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Probeversand OK. Log enthält:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK. Log enthält:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Ergebnis: "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Ergebnis: OK\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "Kann Datei %s nicht öffnen"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Füge cc: hinzu: %s von Zeile '%s'\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Füge to: hinzu: %s von Zeile '%s'\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Füge cc: hinzu: %s von Zeile '%s'\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) Füge cc: hinzu: %s von Zeile '%s'\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Konnte '%s' nicht ausführen"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Füge %s: %s hinzu von: '%s'\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) Fehler beim Schließen der Pipe nach '%s'"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "Kann Nachricht nicht als 7bit versenden."
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "Ungültiges Transfer-Encoding"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal: %s: zurückgewiesen durch 'sendemail-validate' Hook\n"
+"%s\n"
+"Warnung: Es wurden keine Patches gesendet\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "konnte %s nicht öffnen: %s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s: Patch enthält eine Zeile, die länger als 998 Zeichen ist"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal: %s:%d ist länger als 998 Zeichen\n"
+"Warnung: Es wurden keine Patches gesendet\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "Lasse %s mit Backup-Suffix '%s' aus.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Wollen Sie %s wirklich versenden? [y|N]: "
diff --git a/po/es.po b/po/es.po
index 41a72ca..c1c2613 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-07-10 09:53+0800\n"
-"PO-Revision-Date: 2020-07-26 10:11-0500\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-06-05 19:31-0500\n"
 "Last-Translator: christopher.diaz.riv@gmail.com\n"
 "Language-Team: CodeLabora <codelabora@gmail.com>\n"
 "Language: es\n"
@@ -16,235 +16,235 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.3\n"
 
-#: add-interactive.c:368
+#: add-interactive.c:376
 #, c-format
 msgid "Huh (%s)?"
 msgstr "¿Ahh (%s)?"
 
-#: add-interactive.c:521 add-interactive.c:822 reset.c:65 sequencer.c:3142
-#: sequencer.c:3581 sequencer.c:3723 builtin/rebase.c:1518
-#: builtin/rebase.c:1919
+#: 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
 msgid "could not read index"
 msgstr "no se pudo leer índice"
 
-#: add-interactive.c:576 git-add--interactive.perl:269
+#: add-interactive.c:584 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binario"
 
-#: add-interactive.c:634 git-add--interactive.perl:278
+#: add-interactive.c:642 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "nada"
 
-#: add-interactive.c:635 git-add--interactive.perl:314
+#: add-interactive.c:643 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "sin cambios"
 
-#: add-interactive.c:672 git-add--interactive.perl:643
+#: add-interactive.c:680 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Actualizar"
 
-#: add-interactive.c:689 add-interactive.c:877
+#: add-interactive.c:697 add-interactive.c:885
 #, c-format
 msgid "could not stage '%s'"
 msgstr "no se pudo poner en stage '%s'"
 
-#: add-interactive.c:695 add-interactive.c:884 reset.c:89 sequencer.c:3336
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "no se pudo escribir índice"
 
-#: add-interactive.c:698 git-add--interactive.perl:628
+#: add-interactive.c:706 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "actualizada %d ruta\n"
 msgstr[1] "actualizadas %d rutas\n"
 
-#: add-interactive.c:716 git-add--interactive.perl:678
+#: add-interactive.c:724 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "nota: %s no es rastreado ahora.\n"
 
-#: add-interactive.c:721 apply.c:4110 builtin/checkout.c:294
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry falló para la ruta '%s'"
 
-#: add-interactive.c:751 git-add--interactive.perl:655
+#: add-interactive.c:759 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Revertir"
 
-#: add-interactive.c:767
+#: add-interactive.c:775
 msgid "Could not parse HEAD^{tree}"
-msgstr "no se pudo analizar HEAD^{tree}"
+msgstr "No se pudo analizar HEAD^{tree}"
 
-#: add-interactive.c:805 git-add--interactive.perl:631
+#: add-interactive.c:813 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "revertida %d ruta\n"
 msgstr[1] "revertidas %d rutas\n"
 
-#: add-interactive.c:856 git-add--interactive.perl:695
+#: add-interactive.c:864 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "No hay archivos sin rastrear.\n"
 
-#: add-interactive.c:860 git-add--interactive.perl:689
+#: add-interactive.c:868 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Agregar no rastreados"
 
-#: add-interactive.c:887 git-add--interactive.perl:625
+#: add-interactive.c:895 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "agregada %d ruta\n"
 msgstr[1] "agregadas %d rutas\n"
 
-#: add-interactive.c:917
+#: add-interactive.c:925
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "ignorando lo no fusionado: %s"
 
-#: add-interactive.c:929 add-patch.c:1691 git-add--interactive.perl:1368
+#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Solo cambiaron archivos binarios.\n"
 
-#: add-interactive.c:931 add-patch.c:1689 git-add--interactive.perl:1370
+#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
 #, c-format
 msgid "No changes.\n"
 msgstr "Sin cambios.\n"
 
-#: add-interactive.c:935 git-add--interactive.perl:1378
+#: add-interactive.c:943 git-add--interactive.perl:1379
 msgid "Patch update"
 msgstr "Actualización del parche"
 
-#: add-interactive.c:974 git-add--interactive.perl:1771
+#: add-interactive.c:982 git-add--interactive.perl:1792
 msgid "Review diff"
-msgstr "Revisión de  diff"
+msgstr "Revisión de diff"
 
-#: add-interactive.c:1002
+#: add-interactive.c:1010
 msgid "show paths with changes"
 msgstr "mostrar rutas con cambios"
 
-#: add-interactive.c:1004
+#: add-interactive.c:1012
 msgid "add working tree state to the staged set of changes"
 msgstr "agregar estado del árbol de trabajo al conjunto de cambios en stage"
 
-#: add-interactive.c:1006
+#: add-interactive.c:1014
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "revertir conjunto de cambios en stage a la versión de HEAD"
 
-#: add-interactive.c:1008
+#: add-interactive.c:1016
 msgid "pick hunks and update selectively"
 msgstr "elegir hunks y actualizar de forma selectiva"
 
-#: add-interactive.c:1010
+#: add-interactive.c:1018
 msgid "view diff between HEAD and index"
 msgstr "ver diff entre HEAD e index"
 
-#: add-interactive.c:1012
+#: add-interactive.c:1020
 msgid "add contents of untracked files to the staged set of changes"
 msgstr ""
 "agregar contenidos de archivos sin rastrear al conjunto de cambios de stage"
 
-#: add-interactive.c:1020 add-interactive.c:1069
+#: add-interactive.c:1028 add-interactive.c:1077
 msgid "Prompt help:"
 msgstr "Mostrar ayuda:"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1030
 msgid "select a single item"
 msgstr "selecciona un único objeto"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1032
 msgid "select a range of items"
 msgstr "selecciona un rango de objetos"
 
-#: add-interactive.c:1026
+#: add-interactive.c:1034
 msgid "select multiple ranges"
 msgstr "selecciona multiples rangos"
 
-#: add-interactive.c:1028 add-interactive.c:1073
+#: add-interactive.c:1036 add-interactive.c:1081
 msgid "select item based on unique prefix"
 msgstr "seleccionar objeto basado en prefijo único"
 
-#: add-interactive.c:1030
+#: add-interactive.c:1038
 msgid "unselect specified items"
 msgstr "quitar objetos especificados"
 
-#: add-interactive.c:1032
+#: add-interactive.c:1040
 msgid "choose all items"
 msgstr "escoger todos los objetos"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1042
 msgid "(empty) finish selecting"
 msgstr "(vacío) finalizar selección"
 
-#: add-interactive.c:1071
+#: add-interactive.c:1079
 msgid "select a numbered item"
 msgstr "selecciona un objeto numerado"
 
-#: add-interactive.c:1075
+#: add-interactive.c:1083
 msgid "(empty) select nothing"
 msgstr "(vacío) selecciona nada"
 
-#: add-interactive.c:1083 builtin/clean.c:816 git-add--interactive.perl:1868
+#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
 msgid "*** Commands ***"
 msgstr "*** Comandos ***"
 
-#: add-interactive.c:1084 builtin/clean.c:817 git-add--interactive.perl:1865
+#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
 msgid "What now"
 msgstr "Ahora que"
 
-#: add-interactive.c:1136 git-add--interactive.perl:213
+#: add-interactive.c:1144 git-add--interactive.perl:213
 msgid "staged"
 msgstr "rastreado"
 
-#: add-interactive.c:1136 git-add--interactive.perl:213
+#: add-interactive.c:1144 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "no rastreado"
 
-#: add-interactive.c:1136 apply.c:4967 apply.c:4970 builtin/am.c:2250
-#: builtin/am.c:2253 builtin/clone.c:123 builtin/fetch.c:145
-#: builtin/merge.c:276 builtin/pull.c:190 builtin/submodule--helper.c:409
-#: builtin/submodule--helper.c:1394 builtin/submodule--helper.c:1397
-#: builtin/submodule--helper.c:1902 builtin/submodule--helper.c:1905
-#: builtin/submodule--helper.c:2148 bugreport.c:135
+#: 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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "ruta"
 
-#: add-interactive.c:1143
+#: add-interactive.c:1151
 msgid "could not refresh index"
 msgstr "no se pudo refrescar el index"
 
-#: add-interactive.c:1157 builtin/clean.c:781 git-add--interactive.perl:1782
+#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
 #, c-format
 msgid "Bye.\n"
 msgstr "Adiós.\n"
 
-#: add-patch.c:34 git-add--interactive.perl:1430
+#: add-patch.c:34 git-add--interactive.perl:1431
 #, c-format, perl-format
 msgid "Stage mode change [y,n,q,a,d%s,?]? "
 msgstr "¿Cambio de modo de stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:35 git-add--interactive.perl:1431
+#: add-patch.c:35 git-add--interactive.perl:1432
 #, c-format, perl-format
 msgid "Stage deletion [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar stage al borrado [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:36 git-add--interactive.perl:1432
+#: add-patch.c:36 git-add--interactive.perl:1433
 #, c-format, perl-format
 msgid "Stage addition [y,n,q,a,d%s,?]? "
 msgstr "¿Agregar al stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:37 git-add--interactive.perl:1433
+#: add-patch.c:37 git-add--interactive.perl:1434
 #, c-format, perl-format
 msgid "Stage this hunk [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar stage a este hunk [y,n,q,a,d%s,?]? "
@@ -254,7 +254,7 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "staging."
 msgstr ""
-"Si el parche aplica limpiamente, el hunk editado sera marcado inmediatamente "
+"Si el parche aplica limpiamente, el hunk editado será marcado inmediatamente "
 "para el área de stage."
 
 #: add-patch.c:42
@@ -267,27 +267,27 @@
 msgstr ""
 "y - aplicar stage a este hunk\n"
 "n - no aplicar stage a este hunk\n"
-"q - quit; no aplicar stage a este hunk o ninguno de los restantes\n"
-"a - aplicar stage a este hunk y a todos los posteriores en el archivo \n"
+"q - quit; no aplicar stage a este hunk ni ninguno de los restantes\n"
+"a - aplicar stage a este hunk y a todos los posteriores en el archivo\n"
 "d - no aplicar stage a este hunk o a ninguno de los posteriores en este "
 "archivo\n"
 
-#: add-patch.c:56 git-add--interactive.perl:1436
+#: add-patch.c:56 git-add--interactive.perl:1437
 #, c-format, perl-format
 msgid "Stash mode change [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar stash al cambio de modo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:57 git-add--interactive.perl:1437
+#: add-patch.c:57 git-add--interactive.perl:1438
 #, c-format, perl-format
 msgid "Stash deletion [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar stash al borrado [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:58 git-add--interactive.perl:1438
+#: add-patch.c:58 git-add--interactive.perl:1439
 #, c-format, perl-format
 msgid "Stash addition [y,n,q,a,d%s,?]? "
 msgstr "¿Agregar al stash [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:59 git-add--interactive.perl:1439
+#: add-patch.c:59 git-add--interactive.perl:1440
 #, c-format, perl-format
 msgid "Stash this hunk [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar stash a este hunk [y,n,q,a,d%s,?]? "
@@ -297,7 +297,7 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "stashing."
 msgstr ""
-"Si el parche aplica limpiamente, el hunk editado sera marcado inmediatamente "
+"Si el parche aplica limpiamente, el hunk editado será marcado inmediatamente "
 "para aplicar stash."
 
 #: add-patch.c:64
@@ -312,24 +312,24 @@
 "n - no aplicar stash a este hunk\n"
 "q - quit; no aplicar stash a este hunk o a ninguno de los restantes\n"
 "a - aplicar stash a este hunk y a todos los posteriores en el archivo\n"
-"d - no aplicar stash a este hunk o ninguno de los posteriores en el archivo\n"
+"d - no aplicar stash a este hunk ni ninguno de los posteriores en el archivo\n"
 
-#: add-patch.c:80 git-add--interactive.perl:1442
+#: add-patch.c:80 git-add--interactive.perl:1443
 #, c-format, perl-format
 msgid "Unstage mode change [y,n,q,a,d%s,?]? "
 msgstr "¿Sacar cambio de modo del stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:81 git-add--interactive.perl:1443
+#: add-patch.c:81 git-add--interactive.perl:1444
 #, c-format, perl-format
 msgid "Unstage deletion [y,n,q,a,d%s,?]? "
 msgstr "¿Sacar borrado del stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:82 git-add--interactive.perl:1444
+#: add-patch.c:82 git-add--interactive.perl:1445
 #, c-format, perl-format
 msgid "Unstage addition [y,n,q,a,d%s,?]? "
 msgstr "¿Quitar adición al stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:83 git-add--interactive.perl:1445
+#: add-patch.c:83 git-add--interactive.perl:1446
 #, c-format, perl-format
 msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
 msgstr "¿Sacar este hunk del stage [y,n,q,a,d%s,?]? "
@@ -339,7 +339,7 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "unstaging."
 msgstr ""
-"Si el parche aplica limpiamente, el hunk editado sera marcado inmediatamente "
+"Si el parche aplica limpiamente, el hunk editado será marcado inmediatamente "
 "para sacar del área de stage."
 
 #: add-patch.c:88
@@ -352,27 +352,27 @@
 msgstr ""
 "y - sacar desde hunk del área de stage\n"
 "n - no sacar este hunk del area de stage\n"
-"q - quit; no sacar del area de stage este hunk o ninguno de los restantes\n"
+"q - quit; no sacar del area de stage este hunk ni ninguno de los restantes\n"
 "a - sacar del area de stage este hunk y todos los posteriores en el archivo\n"
-"d - no sacar del area de stage este hunk o ninguno de los posteriores en el "
+"d - no sacar del area de stage este hunk ni ninguno de los posteriores en el "
 "archivo\n"
 
-#: add-patch.c:103 git-add--interactive.perl:1448
+#: add-patch.c:103 git-add--interactive.perl:1449
 #, c-format, perl-format
 msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar cambio de modo al índice [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:104 git-add--interactive.perl:1449
+#: add-patch.c:104 git-add--interactive.perl:1450
 #, c-format, perl-format
 msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar borrado al índice [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:105 git-add--interactive.perl:1450
+#: add-patch.c:105 git-add--interactive.perl:1451
 #, c-format, perl-format
 msgid "Apply addition to index [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar adición al índice [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:106 git-add--interactive.perl:1451
+#: add-patch.c:106 git-add--interactive.perl:1452
 #, c-format, perl-format
 msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar este hunk al índice [y,n,q,a,d%s,?]? "
@@ -382,7 +382,7 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "applying."
 msgstr ""
-"Si el parche aplica de forma limpia, el hunk editado sera marcado "
+"Si el parche aplica de forma limpia, el hunk editado será marcado "
 "inmediatamente para aplicar."
 
 #: add-patch.c:111
@@ -395,30 +395,30 @@
 msgstr ""
 "y - aplicar este hunk al índice\n"
 "n - no aplicar este hunk al índice\n"
-"q - quit; no aplicar este hunk o ninguno de los restantes\n"
+"q - quit; no aplicar este hunk ni ninguno de los restantes\n"
 "a - aplicar este hunk y todos los posteriores en el archivo\n"
 "d - no aplicar este hunko ninguno de los posteriores en el archivo\n"
 
-#: add-patch.c:126 git-add--interactive.perl:1454
-#: git-add--interactive.perl:1472
+#: add-patch.c:126 git-add--interactive.perl:1455
+#: git-add--interactive.perl:1473
 #, c-format, perl-format
 msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Descartar cambio de modo del árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:127 git-add--interactive.perl:1455
-#: git-add--interactive.perl:1473
+#: add-patch.c:127 git-add--interactive.perl:1456
+#: git-add--interactive.perl:1474
 #, c-format, perl-format
 msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Descartar borrado del árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:128 git-add--interactive.perl:1456
-#: git-add--interactive.perl:1474
+#: add-patch.c:128 git-add--interactive.perl:1457
+#: git-add--interactive.perl:1475
 #, c-format, perl-format
 msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Descartar adición del árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:129 git-add--interactive.perl:1457
-#: git-add--interactive.perl:1475
+#: add-patch.c:129 git-add--interactive.perl:1458
+#: git-add--interactive.perl:1476
 #, c-format, perl-format
 msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Descartar este hunk del árbol de trabajo [y,n,q,a,d%s,?]? "
@@ -428,7 +428,7 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "discarding."
 msgstr ""
-"Si el parche aplica de forma limpia, el hunk editado sera marcado "
+"Si el parche aplica de forma limpia, el hunk editado será marcado "
 "inmediatamente para descarte."
 
 #: add-patch.c:134 add-patch.c:202
@@ -441,27 +441,27 @@
 msgstr ""
 "y - descartar este hunk del árbol de trabajo\n"
 "n - no descartar este hunk del árbol de trabajo\n"
-"q - quit; no descartar este hunk o ninguno de los que restantes\n"
+"q - quit; no descartar este hunk ni ninguno de los que restantes\n"
 "a - descartar este hunk y todos los posteriores en este archivo\n"
-"d - no descartar este hunk o ninguno de los posteriores en el archivo\n"
+"d - no descartar este hunk ni ninguno de los posteriores en el archivo\n"
 
-#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1460
+#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
 #, c-format, perl-format
 msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
 "¿Descartar cambio de modo del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1461
+#: 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 "¿Descartar borrado del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1462
+#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
 #, c-format, perl-format
 msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Descartar adición del índice y el árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1463
+#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
 #, c-format, perl-format
 msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
@@ -477,28 +477,28 @@
 msgstr ""
 "y - descartar este hunk del índice y el árbol de trabajo\n"
 "n - no descartar este hunk del índice ni el árbol de trabajo\n"
-"q - quit; no descartar este hunk o ninguno de los que quedan\n"
+"q - quit; no descartar este hunk ni ninguno de los que queden\n"
 "a - descartar este hunk y todos los posteriores en este archivo\n"
-"d - no descartar este hunk o ninguno posterior en el archivo\n"
+"d - no descartar este hunk ni ninguno posterior en el archivo\n"
 
-#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1466
+#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
 #, c-format, perl-format
 msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
 "¿Aplicar cambio de modo para el índice y el árbol de trabajo [y,n,q,a,d"
 "%s,?]? "
 
-#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1467
+#: 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 "¿Aplicar borrado al índice y al árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1468
+#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
 #, c-format, perl-format
 msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar adición al índice y al árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1469
+#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
 #, c-format, perl-format
 msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar este hunk al índice y árbol de trabajo [y,n,q,a,d,/%s,?]? "
@@ -513,9 +513,9 @@
 msgstr ""
 "y - aplicar este hunk al índice y al árbol de trabajo\n"
 "n - no aplicar este hunk al índice y al árbol de trabajo\n"
-"q - quit;  no aplicar este hunk o ninguno de los restantes\n"
+"q - quit;  no aplicar este hunk ni ninguno de los restantes\n"
 "a - aplicar este hunk y todos los posteriores en el archivo\n"
-"d - no aplicar este hunk o ninguno de los siguientes en este archivo\n"
+"d - no aplicar este hunk ni ninguno de los siguientes en este archivo\n"
 
 #: add-patch.c:224
 msgid ""
@@ -527,38 +527,38 @@
 msgstr ""
 "y - aplicar este hunk al índice y al árbol de trabajo\n"
 "n - no aplicar este hunk al índice y al árbol de trabajo\n"
-"q - quit;  no aplicar este hunk o ninguno de los restantes\n"
+"q - quit;  no aplicar este hunk ni ninguno de los restantes\n"
 "a - aplicar este hunk y todos los posteriores en el archivo\n"
-"d - no aplicar este hunk o ninguno de los siguientes en este archivo\n"
+"d - no aplicar este hunk ni ninguno de los siguientes en este archivo\n"
 
-#: add-patch.c:328
+#: add-patch.c:342
 #, c-format
 msgid "could not parse hunk header '%.*s'"
 msgstr "no se puede analizar hunk header '%.*s'"
 
-#: add-patch.c:347 add-patch.c:351
+#: add-patch.c:361 add-patch.c:365
 #, c-format
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "no se puede analizar hunk header '%.*s'"
 
-#: add-patch.c:405
+#: add-patch.c:419
 msgid "could not parse diff"
 msgstr "no se puede analizar diff"
 
-#: add-patch.c:424
+#: add-patch.c:438
 msgid "could not parse colored diff"
 msgstr "no se pudo analizar diff a colores"
 
-#: add-patch.c:438
+#: add-patch.c:452
 #, c-format
 msgid "failed to run '%s'"
 msgstr "falló al ejecutar '%s'"
 
-#: add-patch.c:602
+#: add-patch.c:611
 msgid "mismatched output from interactive.diffFilter"
 msgstr "output de interactive.diffFilter no concuerda"
 
-#: add-patch.c:603
+#: add-patch.c:612
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -566,7 +566,7 @@
 "Tu filtro tiene que mantener correspondencia de uno a uno\n"
 "entre las líneas de entrada y salida."
 
-#: add-patch.c:776
+#: add-patch.c:790
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -575,7 +575,7 @@
 "se esperaba línea de contexto #%d en\n"
 "%.*s"
 
-#: add-patch.c:791
+#: add-patch.c:805
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -588,11 +588,11 @@
 "\tno acaba con:\n"
 "%.*s"
 
-#: add-patch.c:1067 git-add--interactive.perl:1114
+#: add-patch.c:1081 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "Modo de edición manual de hunk -- vea abajo para una guía rápida.\n"
 
-#: add-patch.c:1071
+#: add-patch.c:1085
 #, c-format
 msgid ""
 "---\n"
@@ -603,24 +603,24 @@
 "---\n"
 "Para eliminar '%c' líneas, haga de ellas líneas  ' '  (contexto).\n"
 "Para eliminar '%c' líneas, bórrelas.\n"
-"Lineas comenzando con  %c serán eliminadas.\n"
+"Lineas comenzando con %c serán eliminadas.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1085 git-add--interactive.perl:1128
+#: add-patch.c:1099 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"
 "aborted and the hunk is left unchanged.\n"
 msgstr ""
-"Si esto no aplica de manera limpia, se te da la oportunidad de \n"
-"editar nuevamente. Si todas las líneas del hunk son eliminadas, entonces \n"
+"Si esto no aplica de manera limpia, se te da la oportunidad de\n"
+"editar nuevamente. Si todas las líneas del hunk son eliminadas, entonces\n"
 "la edición es abortada y el hunk queda sin cambios.\n"
 
-#: add-patch.c:1118
+#: add-patch.c:1132
 msgid "could not parse hunk header"
 msgstr "no se puede analizar hunk header"
 
-#: add-patch.c:1163
+#: add-patch.c:1177
 msgid "'git apply --cached' failed"
 msgstr "falló 'git apply --cached'"
 
@@ -636,26 +636,26 @@
 #. 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:1232 git-add--interactive.perl:1241
+#: add-patch.c:1246 git-add--interactive.perl:1242
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Tu hunk editado no aplica. ¿Editar nuevamente (¡decir \"no\" descarta!) [y/"
 "n]? "
 
-#: add-patch.c:1275
+#: add-patch.c:1289
 msgid "The selected hunks do not apply to the index!"
 msgstr "¡Los hunks seleccionados no aplican al índice!"
 
-#: add-patch.c:1276 git-add--interactive.perl:1345
+#: add-patch.c:1290 git-add--interactive.perl:1346
 msgid "Apply them to the worktree anyway? "
 msgstr "¿Aplicarlos al árbol de trabajo de todas maneras? "
 
-#: add-patch.c:1283 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1349
 msgid "Nothing was applied.\n"
 msgstr "Nada fue aplicado.\n"
 
-#: add-patch.c:1340
+#: add-patch.c:1354
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -677,73 +677,73 @@
 "e - editar manualmente el hunk actual\n"
 "? - imprimir ayuda\n"
 
-#: add-patch.c:1463 add-patch.c:1473
+#: add-patch.c:1516 add-patch.c:1526
 msgid "No previous hunk"
-msgstr "No el anterior hunk"
+msgstr "No hay hunk anterior"
 
-#: add-patch.c:1468 add-patch.c:1478
+#: add-patch.c:1521 add-patch.c:1531
 msgid "No next hunk"
-msgstr "No el siguiente hunk"
+msgstr "No hay hunk siguiente"
 
-#: add-patch.c:1484
+#: add-patch.c:1537
 msgid "No other hunks to goto"
-msgstr "No hay más pedazos para el ir"
+msgstr "No hay más pedazos a que ir"
 
-#: add-patch.c:1495 git-add--interactive.perl:1594
+#: add-patch.c:1548 git-add--interactive.perl:1606
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "¿a que hunk ir (<enter> para ver más)? "
 
-#: add-patch.c:1496 git-add--interactive.perl:1596
+#: add-patch.c:1549 git-add--interactive.perl:1608
 msgid "go to which hunk? "
 msgstr "¿a que hunk ir? "
 
-#: add-patch.c:1507
+#: add-patch.c:1560
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Numero inválido: '%s'"
 
-#: add-patch.c:1512
+#: add-patch.c:1565
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Lo siento, solo %d hunk disponible."
 msgstr[1] "Lo siento, solo %d hunks disponibles."
 
-#: add-patch.c:1521
+#: add-patch.c:1574
 msgid "No other hunks to search"
 msgstr "No hay más pedazos para buscar"
 
-#: add-patch.c:1527 git-add--interactive.perl:1640
+#: add-patch.c:1580 git-add--interactive.perl:1661
 msgid "search for regex? "
 msgstr "¿buscar para regexp? "
 
-#: add-patch.c:1542
+#: add-patch.c:1595
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Regexp para la búsqueda mal formado %s: %s"
 
-#: add-patch.c:1559
+#: add-patch.c:1612
 msgid "No hunk matches the given pattern"
-msgstr "No hay hunks que concuerden con el patrón entregado."
+msgstr "No hay hunks que concuerden con el patrón entregado"
 
-#: add-patch.c:1566
+#: add-patch.c:1619
 msgid "Sorry, cannot split this hunk"
 msgstr "Perdón, no se puede dividir este pedazo"
 
-#: add-patch.c:1570
+#: add-patch.c:1623
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Cortar en %d hunk."
 
-#: add-patch.c:1574
+#: add-patch.c:1627
 msgid "Sorry, cannot edit this hunk"
 msgstr "Perdón, no se puede editar este pedazo"
 
-#: add-patch.c:1625
+#: add-patch.c:1679
 msgid "'git apply' failed"
 msgstr "falló 'git apply'"
 
-#: advice.c:140
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -752,38 +752,38 @@
 "\n"
 "Desactivar este mensaje con \"git config advice.%s false\""
 
-#: advice.c:156
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sayuda: %.*s%s\n"
 
-#: advice.c:247
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "No es posible ejecutar cherry-picking porque tienes archivos sin fusionar."
 
-#: advice.c:249
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "No es posible realizar un commit porque tienes archivos sin fusionar."
 
-#: advice.c:251
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "No es posible hacer merge porque tienes archivos sin fusionar."
 
-#: advice.c:253
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "No es posible hacer pull porque tienes archivos sin fusionar."
 
-#: advice.c:255
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "No es posible revertir porque tienes archivos sin fusionar."
 
-#: advice.c:257
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "No es posible %s porque tienes archivos sin fusionar."
 
-#: advice.c:265
+#: advice.c:270
 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."
@@ -791,23 +791,41 @@
 "Corrígelos en el árbol de trabajo y entonces usa 'git add/rm <archivo>',\n"
 "como sea apropiado, para marcar la resolución y realizar un commit."
 
-#: advice.c:273
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Saliendo porque existe un conflicto sin resolver."
 
-#: advice.c:278 builtin/merge.c:1353
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "No has concluido tu fusión (MERGE_HEAD existe)."
 
-#: advice.c:280
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Por favor, realiza un commit antes de fusionar."
 
-#: advice.c:281
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Saliendo por una fusión inconclusa."
 
-#: advice.c:287
+#: 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 ""
+"El siguiente pathspecs no concuerda con ninguna ruta elegible, pero "
+"concuerda con\n"
+"entradas del índice fuera del checkout sparse actual:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+"Deshabilitar  o modificar las reglas de escasez si intenta actualizar dichas "
+"entradas."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -858,89 +876,85 @@
 msgid "unclosed quote"
 msgstr "comillas incompletas"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "opción de espacios en blanco no reconocida '%s'"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "opción de ignorar espacios en blanco no reconocida '%s'"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject y --3way no se pueden utilizar juntas."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached y --3way no se pueden utilizar juntas."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way está fuera de un repositorio"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index está fuera de un repositorio"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached está fuera de un repositorio"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "No se puede preparar una marca de tiempo para la expresión regular %s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec devolvió %d para la entrada: %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr ""
 "no se puede encontrar el nombre del archivo en el parche en la línea %d"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
-"git apply: git-diff erróneo - se esperaba /dev/null, se encontró %s en "
-"lalínea %d"
+"git apply: git-diff erróneo - se esperaba /dev/null, se encontró %s en la"
+"línea %d"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
-"git apply: git-diff erróneo - nuevo nombre de archivo inconsistente en "
-"lalínea %d"
+"git apply: git-diff erróneo - nuevo nombre de archivo inconsistente en la"
+"línea %d"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
-"git apply: git-diff erróneo - viejo nombre de archivo inconsistente en "
-"lalínea %d"
+"git apply: git-diff erróneo - viejo nombre de archivo inconsistente en la"
+"línea %d"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff erróneo - se esperaba /dev/null en la línea %d"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "modo inválido en la línea %d: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "header inconsistente en las líneas %d y %d"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -949,125 +963,125 @@
 "git diff header lacks filename information when removing %d leading pathname "
 "components (line %d)"
 msgstr[0] ""
-"al header de git diff carece de información del nombre del archivo %d cuando "
-"lo elimina de la ruta principal componente (línea %d)"
+"el header de git diff carece de información del nombre del archivo cuando"
+"se elimina %d componente principal de la ruta (línea %d)"
 msgstr[1] ""
-"los headers de git diff carecen de información de los nombres de los "
-"archivos %d cuando los eliminan de la ruta principal componentes (línea %d)"
+"los headers de git diff carecen de información del  nombre del archivo cuando"
+"se eliminan %d componentes principales (línea %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "la cabecera de git diff carece de información del nombre del archivo (línea "
 "%d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: línea inesperada: %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "fragmento de parche sin header en la línea %d: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "el nuevo archivo depende de contenidos viejos"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "el archivo eliminado todavía tiene contenido"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "parche corrupto en la línea %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "nuevo archivo %s depende en contenidos viejos"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "el archivo borrado %s todavía tiene contenido"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** peligro: el archivo %s está vacío pero no es borrado"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "parche binario corrupto en la línea %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "parche binario no reconocido en la línea %d"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "parche que solo contiene basura en la línea %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "no es posible leer el enlace simbólico %s"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "no es posible abrir o leer %s"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "comienzo inválido de línea: '%c'"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Hunk #%d tuvo éxito en %d (%d línea compensada)."
 msgstr[1] "Hunk #%d tuvo éxito en %d (%d líneas compensadas)."
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contexto reducido a (%ld/%ld) para aplicar el fragmento en %d"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
 "%.*s"
 msgstr ""
-"mientras se busca:\n"
+"mientras se buscaba:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "data perdida en parche binario para '%s'"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "no se puede revertir-aplicar un parche binario sin el hunk revertido a '%s'"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "no se puede aplicar el parche binario a '%s' sin un índice completo"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1075,284 +1089,289 @@
 "el parche aplica a '%s' (%s), lo cual no concuerda con los contenidos "
 "actuales."
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "el parche aplica a un '%s' vacío, pero este no lo esta"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "la postimagen necesaria %s para '%s' no se puede leer"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "el parche binario no aplica para '%s'"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
-"el parche binario para '%s' crea un resultado incorrecto (saliendo %s, se "
+"el parche binario para '%s' crea un resultado incorrecto (esperando %s, se "
 "obtuvo %s)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "el parche falló: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "no se puede hacer checkout a %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:61 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "no se pudo leer %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "leyendo de '%s' tras un enlace simbólico"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "la ruta %s ha sido renombrada/suprimida"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: no existe en el índice"
 
-#: apply.c:3537 apply.c:3708
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: no concuerda con el índice"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
-"el repositorio carece del blob necesario para regresar en un merge de tres-"
-"vías."
+"el repositorio carece del blob necesario para realizar un merge de tres vías."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "Retrocediendo en un merge de tres-vías...\n"
+msgid "Performing three-way merge...\n"
+msgstr "Realizando un merge de tres vías...\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "no se pueden leer los contenidos actuales de '%s'"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "Falló el merge en retroceso de tres-vías...\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "Falló en realizar fusión de tres vías...\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Parche aplicado a '%s' con conflictos.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Parche aplicado a '%s' limpiamente\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Retrocediendo a la aplicación...\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "parche de eliminación deja contenidos en el archivo"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipo incorrecto"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s tiene tipo %o, se esperaba %o"
 
-#: apply.c:3878 apply.c:3880 read-cache.c:830 read-cache.c:856
-#: read-cache.c:1325
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "ruta inválida '%s'"
 
-#: apply.c:3936
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: ya existe en el índice"
 
-#: apply.c:3939
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: ya existe en el directorio de trabajo"
 
-#: apply.c:3959
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "nuevo modo (%o) de %s no concuerda con el viejo modo (%o)"
 
-#: apply.c:3964
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "nuevo modo (%o) de %s no concuerda con el viejo modo (%o) de %s"
 
-#: apply.c:3984
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "archivo afectado '%s' está tras un enlace simbólico"
 
-#: apply.c:3988
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: el parche no aplica"
 
-#: apply.c:4003
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Revisando el parche %s..."
 
-#: apply.c:4095
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "falta información del sha1 o es inútil para el submódulo %s"
 
-#: apply.c:4102
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "modo cambiado para %s, el cual no se encuentra en el HEAD actual"
 
-#: apply.c:4105
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "falta información sha1 o es inútil (%s)."
 
-#: apply.c:4114
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "no se pudo añadir %s al índice temporal"
 
-#: apply.c:4124
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "no se pudo escribir un índice temporal para %s"
 
-#: apply.c:4262
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "no se puede eliminar %s del índice"
 
-#: apply.c:4296
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "parche corrupto para el submódulo %s"
 
-#: apply.c:4302
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
-msgstr "no es posible establecer el archivo recién creado '%s'"
+msgstr "no es posible hacer stat en el archivo recién creado '%s'"
 
-#: apply.c:4310
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "no es posible crear una copia de seguridad para el archivo recién creado %s"
 
-#: apply.c:4316 apply.c:4461
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "no es posible agregar una entrada en el cache para %s"
 
-#: apply.c:4359
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
-msgstr "falló escribir para '%s'"
+msgstr "falló escribir a '%s'"
 
-#: apply.c:4363
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "cerrando archivo '%s'"
 
-#: apply.c:4433
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "no es posible escribir el archivo '%s' modo %o"
 
-#: apply.c:4531
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Parche %s aplicado limpiamente."
 
-#: apply.c:4539
+#: apply.c:4556
 msgid "internal error"
 msgstr "error interno"
 
-#: apply.c:4542
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Aplicando parche %%s con %d rechazo..."
 msgstr[1] "Aplicando parche %%s con %d rechazos..."
 
-#: apply.c:4553
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "truncando el nombre de archivo .rej a %.*s.rej"
 
-#: apply.c:4561 builtin/fetch.c:902 builtin/fetch.c:1195
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "no se puede abrir %s"
 
-#: apply.c:4575
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Hunk #%d aplicado limpiamente."
 
-#: apply.c:4579
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Hunk #%d rechazado."
 
-#: apply.c:4698
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Parche '%s' saltado."
 
-#: apply.c:4706
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "input no reconocido"
 
-#: apply.c:4726
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "no es posible leer el archivo índice"
 
-#: apply.c:4883
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "no se puede abrir el parche '%s': %s"
 
-#: apply.c:4910
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
-msgstr[0] "%d error de espacios en blanco aplastado"
-msgstr[1] "%d errores de espacios en blanco aplastados"
+msgstr[0] "%d error de espacios en blanco silenciado"
+msgstr[1] "%d errores de espacios en blanco silenciados"
 
-#: apply.c:4916 apply.c:4931
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d línea agrega errores de espacios en blanco."
 msgstr[1] "%d líneas agregan errores de espacios en blanco."
 
-#: apply.c:4924
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1361,188 +1380,185 @@
 msgstr[1] ""
 "%d líneas aplicadas después de arreglar los errores de espacios en blanco."
 
-#: apply.c:4940 builtin/add.c:612 builtin/mv.c:301 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "No es posible escribir el archivo índice"
 
-#: apply.c:4968
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "no aplicar cambios que concuerden con la ruta suministrada"
 
-#: apply.c:4971
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "aplicar cambios que concuerden con la ruta suministrada"
 
-#: apply.c:4973 builtin/am.c:2259
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "num"
 
-#: apply.c:4974
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "eliminar <num> slashes iniciales de las rutas diff tradicionales"
 
-#: apply.c:4977
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "ignorar adiciones hechas por el parche"
 
-#: apply.c:4979
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "en lugar de aplicar el parche, mostrar diffstat para la entrada"
 
-#: apply.c:4983
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "mostrar el numero de líneas agregadas y eliminadas en notación decimal"
 
-#: apply.c:4985
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "en lugar de aplicar el parche, mostrar un resumen para la entrada"
 
-#: apply.c:4987
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "en lugar de aplicar el parche, ver si el parche es aplicable"
 
-#: apply.c:4989
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "asegurar que el parche es aplicable al índice actual"
 
-#: apply.c:4991
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marca los nuevos archivos con `git add --intent-to-add`"
 
-#: apply.c:4993
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "aplicar un parche sin tocar el árbol de trabajo"
 
-#: apply.c:4995
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
-msgstr "aceptar un parche que toca fuera del área de trabajo"
+msgstr "aceptar un parche que toque fuera del área de trabajo"
 
-#: apply.c:4998
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
-msgstr "también aplicar el parche ( usar con --stat/--summary/--check"
+msgstr "también aplicar el parche (usar con --stat/--summary/--check"
 
-#: apply.c:5000
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "intentar merge de tres-vías si el parche no aplica"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr ""
+"intentar merge de tres vías, regresar al parche normal si el parche no aplica"
 
-#: apply.c:5002
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr ""
-"construir un índice temporal basado en la información del índice incrustado"
+"construir un índice temporal basado en la información de índice incrustada"
 
-#: apply.c:5005 builtin/checkout-index.c:173 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "rutas están separadas con un carácter NULL"
 
-#: apply.c:5007
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "asegurar que al menos concuerden <n> líneas del contexto concuerden"
 
-#: apply.c:5008 builtin/am.c:2238 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3530 builtin/rebase.c:1332
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "acción"
 
-#: apply.c:5009
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 "detectar líneas nuevas o modificadas que contienen errores de espacios en "
 "blanco"
 
-#: apply.c:5012 apply.c:5015
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 "ignorar cambios en los espacios en blanco cuando se encuentra el contexto"
 
-#: apply.c:5018
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "aplicar el parche en reversa"
 
-#: apply.c:5020
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "no espera al menos una línea del contexto"
 
-#: apply.c:5022
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "dejar los hunks rechazados en los archivos *.rej correspontientes"
 
-#: apply.c:5024
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "permitir solapamiento de hunks"
 
-#: apply.c:5025 builtin/add.c:323 builtin/check-ignore.c:22
-#: builtin/commit.c:1366 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2186 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "ser verboso"
 
-#: apply.c:5027
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "tolerar nuevas líneas faltantes detectadas incorrectamente al final del "
 "archivo"
 
-#: apply.c:5030
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "no confiar en el conteo de líneas en los headers del hunk"
 
-#: apply.c:5032 builtin/am.c:2247
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "raíz"
 
-#: apply.c:5033
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "anteponer <root> a todos los nombres de archivos"
 
-#: archive-tar.c:125 archive-zip.c:351
+#: archive-tar.c:125 archive-zip.c:345
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "no se puede transmitir el blob %s"
 
-#: archive-tar.c:266 archive-zip.c:369
+#: archive-tar.c:265 archive-zip.c:358
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "modo de archivo no soportado: 0%o (SHA1: %s)"
 
-#: archive-tar.c:293 archive-zip.c:359
-#, c-format
-msgid "cannot read %s"
-msgstr "no se puede leer %s"
-
-#: archive-tar.c:465
+#: archive-tar.c:450
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "no se puede comenzar filtro '%s'"
 
-#: archive-tar.c:468
+#: archive-tar.c:453
 msgid "unable to redirect descriptor"
 msgstr "incapaz de redirigir descriptor"
 
-#: archive-tar.c:475
+#: archive-tar.c:460
 #, c-format
 msgid "'%s' filter reported error"
 msgstr "filtro '%s' reportó un error"
 
-#: archive-zip.c:319
+#: archive-zip.c:318
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "ruta no válida UTF-8: %s"
 
-#: archive-zip.c:323
+#: archive-zip.c:322
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
-msgstr "ruta muy larga (%d chars, SHA1: %s): %s"
+msgstr "ruta demasiado larga (%d chars, SHA1: %s): %s"
 
-#: archive-zip.c:480 builtin/pack-objects.c:243 builtin/pack-objects.c:246
+#: archive-zip.c:469 builtin/pack-objects.c:244 builtin/pack-objects.c:247
 #, c-format
 msgid "deflate error (%d)"
 msgstr "error al desinflar (%d)"
 
-#: archive-zip.c:615
+#: archive-zip.c:603
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
-msgstr "timestamp muy largo para este sistema: %<PRIuMAX>"
+msgstr "timestamp demasiado largo para este sistema: %<PRIuMAX>"
 
 #: archive.c:14
 msgid "git archive [<options>] <tree-ish> [<path>...]"
@@ -1563,134 +1579,156 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <repo> [--exec <comando>] --list"
 
-#: archive.c:377 builtin/add.c:181 builtin/add.c:588 builtin/rm.c:315
+#: archive.c:188
+#, c-format
+msgid "cannot read %s"
+msgstr "no se puede leer %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
+#, c-format
+msgid "could not read '%s'"
+msgstr "no se pudo leer '%s'"
+
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
-msgstr "ruta especificada '%s' no concordó con ninguna carpeta"
+msgstr "ruta especificada '%s' no concordó con ningun archivo"
 
-#: archive.c:401
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "no existe el ref: %.*s"
 
-#: archive.c:407
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "nombre de objeto no válido: %s"
 
-#: archive.c:420
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "no es un objeto tree: %s"
 
-#: archive.c:432
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "directorio de trabajo actual no rastreado"
 
-#: archive.c:464
+#: archive.c:523
+#, c-format
+msgid "File not found: %s"
+msgstr "Archivo no encontrado: %s"
+
+#: archive.c:525
+#, c-format
+msgid "Not a regular file: %s"
+msgstr "No es un archivo regular: %s"
+
+#: archive.c:552
 msgid "fmt"
 msgstr "fmt"
 
-#: archive.c:464
+#: archive.c:552
 msgid "archive format"
-msgstr "formato del archivo"
+msgstr "formato de crónica"
 
-#: archive.c:465 builtin/log.c:1674
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "prefijo"
 
-#: archive.c:466
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
-msgstr "anteponer prefijo a cada ruta en el archivo"
+msgstr "anteponer prefijo a cada ruta en el crónica"
 
-#: archive.c:467 builtin/blame.c:861 builtin/blame.c:865 builtin/blame.c:866
-#: builtin/commit-tree.c:117 builtin/config.c:130 builtin/fast-export.c:1208
-#: builtin/fast-export.c:1210 builtin/fast-export.c:1214 builtin/grep.c:907
-#: builtin/hash-object.c:105 builtin/ls-files.c:561 builtin/ls-files.c:564
-#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
-#: parse-options.h:190
+#: 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
 msgid "file"
-msgstr "carpeta"
+msgstr "archivo"
 
-#: archive.c:468 builtin/archive.c:90
+#: archive.c:556
+msgid "add untracked file to archive"
+msgstr "incluir archivos sin seguimiento a la crónica"
+
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
-msgstr "escribe el archivo en esta carpeta"
+msgstr "escribe la crónica en este archivo"
 
-#: archive.c:470
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "leer .gitattributes en el directorio de trabajo"
 
-#: archive.c:471
+#: archive.c:562
 msgid "report archived files on stderr"
-msgstr "reportar archivos archivados por stderr"
+msgstr "reportar archivos en la crónica por stderr"
 
-#: archive.c:472
-msgid "store only"
-msgstr "solo guardar"
+#: archive.c:564
+msgid "set compression level"
+msgstr "configurar nivel de compresión"
 
-#: archive.c:473
-msgid "compress faster"
-msgstr "comprimir más rápido"
-
-#: archive.c:481
-msgid "compress better"
-msgstr "comprimir mejor"
-
-#: archive.c:484
+#: archive.c:567
 msgid "list supported archive formats"
-msgstr "listar los formatos de carpeta soportados"
+msgstr "listar los formatos de crónica soportados"
 
-#: archive.c:486 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
-#: builtin/submodule--helper.c:1406 builtin/submodule--helper.c:1911
+#: 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
 msgid "repo"
 msgstr "repo"
 
-#: archive.c:487 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
-msgstr "obtener la carpeta del repositorio remoto <repo>"
+msgstr "obtener la crónica del repositorio remoto <repo>"
 
-#: archive.c:488 builtin/archive.c:93 builtin/difftool.c:715
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "comando"
 
-#: archive.c:489 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
-msgstr "ruta para el comando git-upload-archivo remoto"
+msgstr "ruta para el comando git-upload-archive remoto"
 
-#: archive.c:496
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Opción inesperada --remote"
 
-#: archive.c:498
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "Opción --exec solo puede ser utilizada con --remote"
 
-#: archive.c:500
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Opción inesperada --output"
 
-#: archive.c:522
+#: archive.c:585
+msgid "Options --add-file and --remote cannot be used together"
+msgstr "Opciones --add-file y --remote no pueden ser usadas juntas"
+
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
-msgstr "Formato de carpeta desconocido '%s'"
+msgstr "Formato de crónica desconocido '%s'"
 
-#: archive.c:529
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argumento no soportado para formato '%s': -%d"
 
-#: attr.c:212
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s no es un nombre de atributo válido"
 
-#: attr.c:369
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s no permitido: %s:%d"
 
-#: attr.c:409
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1698,40 +1736,40 @@
 "Los patrones negativos son ignorados en los atributos de git\n"
 "Usa '\\!' para comenzar literalmente con exclamación."
 
-#: bisect.c:468
+#: bisect.c:489
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Revisa las comillas en el archivo '%s': %s"
 
-#: bisect.c:678
+#: bisect.c:699
 #, c-format
 msgid "We cannot bisect more!\n"
 msgstr "¡No podemos biseccionar más!\n"
 
-#: bisect.c:745
+#: bisect.c:766
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "No es un nombre de commit válido %s"
 
-#: bisect.c:770
+#: bisect.c:791
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
 "This means the bug has been fixed between %s and [%s].\n"
 msgstr ""
-"La base de fisión %s está mal.\n"
+"La base de fusión %s está mal.\n"
 "Esto quiere decir que el bug ha sido arreglado entre %s y [%s].\n"
 
-#: bisect.c:775
+#: bisect.c:796
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
 "The property has changed between %s and [%s].\n"
 msgstr ""
-"La base de fisión %s es nueva.\n"
+"La base de fusión %s es nueva.\n"
 "Esta propiedad ha cambiado entre %s y [%s].\n"
 
-#: bisect.c:780
+#: bisect.c:801
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1740,7 +1778,7 @@
 "La base de fisión %s es %s.\n"
 "Esto quiere decir que el primer '%s' commit está entre %s y [%s].\n"
 
-#: bisect.c:788
+#: bisect.c:809
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1749,9 +1787,9 @@
 msgstr ""
 "Algunas %s revisiones no son ancestros de la revisión %s.\n"
 "git bisect no puede trabajar bien en este caso.\n"
-"¿Tal vez confundiste la revisión %s y %s?\n"
+"¿Tal vez confundiste las revisiones %s y %s?\n"
 
-#: bisect.c:801
+#: bisect.c:822
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1762,45 +1800,45 @@
 "Así que no podemos estar seguros que el primer %s commit está entre%s y %s.\n"
 "Vamos a continuar de todas maneras."
 
-#: bisect.c:840
+#: bisect.c:861
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Biseccionando: una base de fisión debe ser probada\n"
 
-#: bisect.c:890
+#: bisect.c:911
 #, c-format
 msgid "a %s revision is needed"
 msgstr "una %s revisión es necesaria"
 
-#: bisect.c:920 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "no se pudo crear el archivo '%s'"
 
-#: bisect.c:966 builtin/merge.c:151
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "no se pudo leer el archivo '%s'"
 
-#: bisect.c:997
+#: bisect.c:1027
 msgid "reading bisect refs failed"
 msgstr "falló leer las refs de bisect"
 
-#: bisect.c:1019
+#: bisect.c:1057
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s fue tanto %s como %s\n"
 
-#: bisect.c:1028
+#: bisect.c:1066
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "No se encontró commit que se pueda probar.\n"
 "¿Quizás iniciaste con parámetros de rutas incorrectos?\n"
 
-#: bisect.c:1057
+#: bisect.c:1095
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1810,47 +1848,47 @@
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1063
+#: bisect.c:1101
 #, 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"
 msgstr[0] "Biseccionando: falta %d revisión por probar después de esto %s\n"
 msgstr[1] "Biseccionando: faltan %d revisiones por probar después de esto %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents y --reverse no se mezclan bien."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "no se puede usar --contents con el nombre de objeto commit final"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse y --first-parent juntos requieren especificar el último commit"
 
-#: blame.c:2821 bundle.c:187 ref-filter.c:2200 remote.c:1924 sequencer.c:2018
-#: sequencer.c:4466 submodule.c:847 builtin/commit.c:1047 builtin/log.c:405
-#: builtin/log.c:1012 builtin/log.c:1541 builtin/log.c:1945 builtin/log.c:2235
-#: builtin/merge.c:415 builtin/pack-objects.c:3348 builtin/pack-objects.c:3363
-#: builtin/shortlog.c:192
+#: 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
 msgid "revision walk setup failed"
 msgstr "falló la configuración del camino de revisión"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent juntos requieren un rango a lo largo de la cadena "
 "del primer padre"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "no hay una ruta %s en %s"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "no se puede leer el blob %s para la ruta %s"
@@ -1994,376 +2032,394 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Punto de rama no válido: '%s'."
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' ya ha sido marcado en '%s'"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD del árbol de trabajo %s no está actualizada"
 
-#: bundle.c:47
+#: bundle.c:41
 #, c-format
-msgid "'%s' does not look like a v2 bundle file"
-msgstr "'%s' no se ve como un archivo bundle v2"
+msgid "unrecognized bundle hash algorithm: %s"
+msgstr "algoritmo bundle hash desconocido %s"
 
-#: bundle.c:69
-msgid "unknown hash algorithm length"
-msgstr "largo del algoritmo hash desconocido"
+#: bundle.c:45
+#, c-format
+msgid "unknown capability '%s'"
+msgstr "capacidad desconocida '%s'"
 
-#: bundle.c:84
+#: bundle.c:71
+#, c-format
+msgid "'%s' does not look like a v2 or v3 bundle file"
+msgstr "'%s' no se ve como un archivo bundle v2 o v3"
+
+#: bundle.c:110
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "header no reconocido %s%s (%d)"
 
-#: bundle.c:110 rerere.c:480 rerere.c:690 sequencer.c:2270 sequencer.c:3034
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "no se pudo abrir '%s'"
 
-#: bundle.c:163
+#: bundle.c:189
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Al repositorio le falta estos commits prerrequisito:"
 
-#: bundle.c:166
+#: bundle.c:192
 msgid "need a repository to verify a bundle"
 msgstr "se necesita un repositorio para verificar un bundle"
 
-#: bundle.c:217
+#: bundle.c:243
 #, c-format
 msgid "The bundle contains this ref:"
 msgid_plural "The bundle contains these %d refs:"
 msgstr[0] "El bundle contiene esta referencia:"
 msgstr[1] "El bundle contiene estas %d referencias:"
 
-#: bundle.c:224
+#: bundle.c:250
 msgid "The bundle records a complete history."
 msgstr "El bundle registra una historia completa."
 
-#: bundle.c:226
+#: bundle.c:252
 #, c-format
 msgid "The bundle requires this ref:"
 msgid_plural "The bundle requires these %d refs:"
 msgstr[0] "El bundle requiere esta referencia:"
 msgstr[1] "El bundle requiere estas %d referencias:"
 
-#: bundle.c:293
+#: bundle.c:319
 msgid "unable to dup bundle descriptor"
 msgstr "incapaz de duplicar bundle descriptor"
 
-#: bundle.c:300
+#: bundle.c:326
 msgid "Could not spawn pack-objects"
 msgstr "No se pudo crear los pack-objetcts"
 
-#: bundle.c:311
+#: bundle.c:337
 msgid "pack-objects died"
 msgstr "pack-objects murió"
 
-#: bundle.c:353
-msgid "rev-list died"
-msgstr "rev-list murió"
-
-#: bundle.c:402
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referencia '%s' es excluida por las opciones de rev-list"
 
-#: bundle.c:481 builtin/log.c:208 builtin/log.c:1834 builtin/shortlog.c:306
+#: bundle.c:490
+#, c-format
+msgid "unsupported bundle version %d"
+msgstr "versión de bundle no soportada %d"
+
+#: bundle.c:492
+#, c-format
+msgid "cannot write bundle version %d with algorithm %s"
+msgstr "no se puede escribir la versión de paquete %d con el algoritmo %s"
+
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argumento no reconocido: %s"
 
-#: bundle.c:489
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Rechazando crear un bundle vacío."
 
-#: bundle.c:499
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "no se puede crear '%s'"
 
-#: bundle.c:524
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "index-pack murió"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "terminando porque el id del chunk aparece antes de lo esperado"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "offset para chunk incorrecto %<PRIx64> y %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "se encontró ID de chuck %<PRIx32> duplicado"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "chunk final tiene un id distinto de cero %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "color inválido: %.*s"
 
-#: commit-graph.c:238
+#: commit-graph.c:204 midx.c:47
+msgid "invalid hash version"
+msgstr "versión de hash inválida"
+
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "archivo commit-graph es muy pequeño"
 
-#: commit-graph.c:303
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "firma %X en commit-graph no concuerda con firma %X"
 
-#: commit-graph.c:310
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "versión de commit-graph %X no concuerda con versión %X"
 
-#: commit-graph.c:317
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "versión de hash de commit-graph %X no concuerda con versión %X"
 
-#: commit-graph.c:339
-msgid "commit-graph chunk lookup table entry missing; file may be incomplete"
-msgstr ""
-"falta tabla de lookup del chunk en commit-graph; el archivo puede estar "
-"incompleto"
-
-#: commit-graph.c:349
+#: commit-graph.c:386
 #, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "offset del chunk de commit-graph inapropiado %08x%08x"
+msgid "commit-graph file is too small to hold %u chunks"
+msgstr "commit-graph file es demasiado pequeño para almacenar %u chunks"
 
-#: commit-graph.c:417
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "id de chunk de commit-graph %08x parece tener múltiples tiempos"
-
-#: commit-graph.c:491
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "commit-graph no tiene una chunk base de graphs"
 
-#: commit-graph.c:501
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "cadena commit-graph no concuerda"
 
-#: commit-graph.c:549
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "cadena de commit-graph inválida: línea '%s' no es un hash"
 
-#: commit-graph.c:573
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "no es posible encontrar los archivos commit-graph"
 
-#: commit-graph.c:706 commit-graph.c:770
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "posición de commit inválida. commit-graph está probablemente corrupto"
 
-#: commit-graph.c:727
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "no se pudo encontrar commit %s"
 
-#: commit-graph.c:1009 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+"commit-graph requiere datos de generación de desbordamiento pero no tiene "
+"ninguno"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "no es posible analizar el commit %s"
 
-#: commit-graph.c:1157
-msgid "Writing changed paths Bloom filters index"
-msgstr "Escribiendo cambios de ruta del índice de filtros Bloom"
-
-#: commit-graph.c:1182
-msgid "Writing changed paths Bloom filters data"
-msgstr "Escribiendo cambios de ruta de datos de filtros Bloom"
-
-#: commit-graph.c:1221 builtin/pack-objects.c:2832
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "incapaz de obtener el tipo de objeto: %s"
 
-#: commit-graph.c:1257
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "Cargando commits conocidos en commit graph"
 
-#: commit-graph.c:1274
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expandiendo commits alcanzables en commit graph"
 
-#: commit-graph.c:1294
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "Limpiando marcas de commits en commit graph"
 
-#: commit-graph.c:1313
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "Calculando niveles topológicos de commit graph"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "Calculando números de generación de commit graph"
 
-#: commit-graph.c:1367
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Calculando números de generación de commit graph"
 
-#: commit-graph.c:1423
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Recolectando commits referenciados"
 
-#: commit-graph.c:1447
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Encontrando commits para commit graph en %d pack"
 msgstr[1] "Encontrando commits para commit graph en %d packs"
 
-#: commit-graph.c:1460
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "error agregando pack %s"
 
-#: commit-graph.c:1464
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "error abriendo index para %s"
 
-#: commit-graph.c:1503
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Encontrando commits para commit graph entre los objetos empaquetados"
 
-#: commit-graph.c:1518
-msgid "Counting distinct commits in commit graph"
-msgstr "Contando commits distintos en commit graph"
-
-#: commit-graph.c:1550
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "Encontrando esquinas extra en commit graph"
 
-#: commit-graph.c:1599
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "falló al escribir el número correcto de ids de base graph"
 
-#: commit-graph.c:1633 midx.c:812
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "no se pudo crear directorios principales para %s"
 
-#: commit-graph.c:1646
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "no es posible crear un una capa de gráfico temporal"
 
-#: commit-graph.c:1651
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "no se pudo poner permisos a '%s'"
 
-#: commit-graph.c:1728
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Escribiendo commit graph en %d paso"
 msgstr[1] "Escribiendo commit graph en %d pasos"
 
-#: commit-graph.c:1773
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "no se pudo abrir la cadena de archivos commit-graph"
 
-#: commit-graph.c:1789
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "no se pudo renombrar el archivo base commit-graph"
 
-#: commit-graph.c:1809
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "falló al renombrar el archivo temporal commit-graph"
 
-#: commit-graph.c:1935
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Escaneando commits fusionados"
 
-#: commit-graph.c:1946
-#, c-format
-msgid "unexpected duplicate commit id %s"
-msgstr "id de commit duplicado inesperado %s"
-
-#: commit-graph.c:1969
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "Fusionando commit-graph"
 
-#: commit-graph.c:2156
-#, c-format
-msgid "the commit graph format cannot write %d commits"
-msgstr "el formato de gráficos de commit no pudede escribir %d commits"
+#: commit-graph.c:2244
+msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
+msgstr ""
+"intentando escribir un commit-graph, pero 'core.commitGraph' está "
+"deshabilitado"
 
-#: commit-graph.c:2167
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "demasiados commits para escribir el gráfico"
 
-#: commit-graph.c:2260
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "el archivo de commit-graph tiene checksums incorrectos y probablemente está "
 "corrupto"
 
-#: commit-graph.c:2270
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "commit-graph tiene un orden de OID incorrecto: %s luego %s"
 
-#: commit-graph.c:2280 commit-graph.c:2295
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "commit-graph tiene un valor fanout incorrecto: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2287
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "falló al analizar commit %s para commit-graph"
 
-#: commit-graph.c:2305
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "Verificando commits en commit graph"
 
-#: commit-graph.c:2320
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "falló al analizar el commit %s de la base de datos de objetos para commit-"
 "graph"
 
-#: commit-graph.c:2327
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "árbol raíz OID para commit %s en commit-graph es %s != %s"
 
-#: commit-graph.c:2337
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "lista padre de commit-graph para commit %s es muy larga"
 
-#: commit-graph.c:2346
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "padre de commit-graph para %s es %s != %s"
 
-#: commit-graph.c:2360
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "lista padre de commit-graph para commit %s termina antes"
 
-#: commit-graph.c:2365
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 "commit-graph ha generado número cero para %s, pero no-cero para los demás"
 
-#: commit-graph.c:2369
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 "commit-graph tiene generación no-cero para %s, pero cero para los demás"
 
-#: commit-graph.c:2385
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "generación commit-graph para commit %s es %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "generación commit-graph para commit %s es %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2391
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "fecha de commit para commit %s en commit-graph es %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2739 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2013 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "no se puede analizar %s"
@@ -2393,27 +2449,27 @@
 "Apapa este mensaje ejecutando\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "Commit %s tiene una firma GPG no confiable, pretendidamente por %s."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Commit %s tiene una mala firma GPG pretendidamente por %s."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Commit %s no tiene una firma GPG."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "El Commit %s tiene una buena firma GPG por %s\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2428,7 +2484,7 @@
 msgid "memory exhausted"
 msgstr "memoria agotada"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2443,293 +2499,337 @@
 "\t%s\n"
 "Esto puede ser causado por inclusiones circulares."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "no se pudo expandir rutas de inclusión '%s'"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "inclusiones de configuración relativas tienen que venir de archivos"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "la configuración relativa incluye condicionales que deben venir de archivos"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "formato config inválido: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "falta el nombre de la variable de entorno para la configuración '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "Falta la variable de entorno '%s' para la configuración '%.*s'"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "llave no contiene una sección: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "llave no contiene el nombre de variable: %s"
 
-#: config.c:408 sequencer.c:2456
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "llave inválida: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "llave inválida (nueva línea): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "clave de config vacía"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "parámetro de configuración malogrado: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "formato malogrado en %s"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "conteo malogrado en %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "demasiadas entradas en %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "llave de configuración faltante %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "valor de config faltante para %s"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "mala línea de config %d en el blob %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "mala línea de config %d en el archivo %s"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "mala línea de config %d en la entrada standard"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "mala línea de config %d en el submódulo-blob %s"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "mala línea de config %d en la línea de comando %s"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "mala línea de config %d en %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "fuera de rango"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "unidad inválida"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "mal valor de config numérica '%s' para '%s': %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "mal valor de config numérica '%s' para '%s' en el blob %s: %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "mal valor de config numérica '%s' para '%s' en el archivo %s: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "mal valor de config numérica '%s' para '%s' en la entrada standard: %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "mal valor de config numérica '%s' para '%s' en el submódulo-blob %s: %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "mal valor de config numérica '%s' para '%s' en la línea de comando %s: %s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "mal valor de config numérica '%s' para '%s' en %s: %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "mal valor de config booleana '%s' para '%s'"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "falló al expandir el directorio de usuario en: '%s'"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' para '%s' no es una marca de tiempo válida"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "largo de abreviatura fuera de rango: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "nivel de compresión de zlib erróneo %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar debería tener solo un caracter"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "modo inválido de creación de objetos: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "valor malformado para %s"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valor malformado para %s: %s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "debe ser uno de nothing, matching, simple, upstream o current"
 
-#: config.c:1533 builtin/pack-objects.c:3617
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "nivel de compresión de pack erróneo %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "incapaz de cargar configuración de objeto blob '%s'"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referencia '%s' no apunta a un blob"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "no se posible resolver configuración de blob '%s'"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "no se pudo analizar %s"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "no es posible analizar la configuración de la línea de comando"
 
-#: config.c:2113
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "error desconocido ocurrió mientras se leían los archivos de configuración"
 
-#: config.c:2283
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Inválido %s: '%s'"
 
-#: config.c:2328
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "valor splitIndex.maxPercentChange '%d' debe estar entre 0 y 100"
 
-#: config.c:2374
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "no es posible analizar '%s' de la configuración de la línea de comando"
 
-#: config.c:2376
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "mala variable de config '%s' en el archivo '%s' en la línea %d"
 
-#: config.c:2457
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nombre de sección inválido '%s'"
 
-#: config.c:2489
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s tiene múltiples valores"
 
-#: config.c:2518
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "falló al escribir nuevo archivo de configuración %s"
 
-#: config.c:2770 config.c:3094
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "no se pudo bloquear archivo de configuración %s"
 
-#: config.c:2781
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "abriendo %s"
 
-#: config.c:2816 builtin/config.c:344
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "patrón inválido: %s"
 
-#: config.c:2841
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "archivo de configuración inválido: %s"
 
-#: config.c:2854 config.c:3107
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat en %s falló"
 
-#: config.c:2865
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "no es posible hacer mmap '%s'"
 
-#: config.c:2874 config.c:3112
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod en %s falló"
 
-#: config.c:2959 config.c:3209
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "no se pudo escribir el archivo de configuración %s"
 
-#: config.c:2993
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "no se pudo configurar '%s' a '%s'"
 
-#: config.c:2995 builtin/remote.c:655 builtin/remote.c:849 builtin/remote.c:857
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "no se pudo desactivar '%s'"
 
-#: config.c:3085
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "sección de nombre inválida: %s"
 
-#: config.c:3252
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "valor faltante para '%s'"
@@ -2791,45 +2891,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "error de protocolo: '%s' inesperado"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "formato de objeto desconocido '%s' ha sido provisto por el servidor"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "respuesta de referencias ls-refs inválida: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "flush esperado tras listado de refs"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "se esperaba un paquete final luego del ref listing"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "protocolo '%s' no es soportado"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "no es posible configurar SO_KEEPALIVE en el socket"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Revisando %s... "
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "no se puede revisar %s (puerto %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2838,7 +2938,7 @@
 "hecho.\n"
 "Conectando a %s (puerto %s) ... "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2848,88 +2948,92 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "hecho."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "no es posible revisar %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "puerto desconocido %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "hostname extraño '%s' bloqueado"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "puerto extraño '%s' bloqueado"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "no se puede comenzar proxy %s"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "no hay ruta especificada; vea 'git help pull' para sintaxis de url válidas"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "la nueva línea está prohibida en git://hosts y rutas de repositorio"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "variante 'simple' de ssh no soporta -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "variante 'simple' de ssh no soporta -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "variante ssh 'simple' no soporta configurar puerto"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "ruta extraña '%s' bloqueada"
 
-#: connect.c:1407
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "no es posible hacer fork"
 
-#: connected.c:109 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Verificando conectividad"
 
-#: connected.c:121
+#: connected.c:120
 msgid "Could not run 'git rev-list'"
 msgstr "No se pudo correr 'git rev-list'"
 
-#: connected.c:141
+#: connected.c:144
 msgid "failed write to rev-list"
 msgstr "falló escribir a rev-list"
 
-#: connected.c:148
+#: connected.c:149
 msgid "failed to close rev-list's stdin"
 msgstr "falló al cerrar la entrada standard de rev-list"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action %d ilegal"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF será reemplazado por LF en %s"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2938,12 +3042,12 @@
 "CRLF será remplazado por LF en %s.\n"
 "El archivo tendrá sus finales de línea originales en tu directorio de trabajo"
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF será reemplazado por CRLF en %s"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2952,12 +3056,12 @@
 "LF será reemplazado por CRLF en %s.\n"
 "El archivo tendrá sus finales de línea originales en tu directorio de trabajo"
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM está prohibido en '%s' si es codificado como %s"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -2966,12 +3070,12 @@
 "El archivo '%s' contiene una marca de byte (BOM). Por favor usa UTF-%.*s "
 "como working-tree-encoding."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM es requerido en '%s' si es codificado como %s"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2980,50 +3084,50 @@
 "Al archivo '%s' le falta una marca de byte (BOM). Por favor usa UTF-%sBE o "
 "UTF-%sLE (dependiendo en el orden de byte) como working-tree-encoding."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "falló al codificar '%s' de %s a %s"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "codificación '%s' de %s a %s y de vuelta no son iguales"
 
-#: convert.c:668
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "no se puede hacer fork para ejecutar filtros externos '%s'"
 
-#: convert.c:688
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "no se pueden alimentar de input a los filtros externos '%s'"
 
-#: convert.c:695
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "filtro externo '%s' falló %d"
 
-#: convert.c:730 convert.c:733
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "lectura de filtro externo '%s' falló"
 
-#: convert.c:736 convert.c:791
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "filtro externo '%s' falló"
 
-#: convert.c:840
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "tipo de filtro inesperado"
 
-#: convert.c:851
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "nombre de ruta muy largo para filtro externo"
 
-#: convert.c:943
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -3032,16 +3136,16 @@
 "filtro externo '%s' ya no está disponible aunque no todas las rutas han sido "
 "filtradas"
 
-#: convert.c:1243
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false no son working-tree-encodings válidos"
 
-#: convert.c:1431 convert.c:1465
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: falló al limpiar filtro '%s'"
 
-#: convert.c:1511
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: filtro smudge %s falló"
@@ -3059,17 +3163,17 @@
 msgid "refusing to work with credential missing protocol field"
 msgstr "rehusando trabajar con credenciales faltantes en el campo protocolo"
 
-#: credential.c:396
+#: credential.c:394
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "url contiene un espace de línea en su componente %s: %s"
 
-#: credential.c:440
+#: credential.c:438
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "url no tiene scheme: %s"
 
-#: credential.c:513
+#: credential.c:511
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "url credencial no puede ser analizada: %s"
@@ -3166,6 +3270,31 @@
 msgid "Marked %d islands, done.\n"
 msgstr "%d islas marcadas, listo.\n"
 
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "valor desconocido para --diff-merges: %s"
+
+#: diff-lib.c:538
+msgid "--merge-base does not work with ranges"
+msgstr "--merge-base no funciona con rangos"
+
+#: diff-lib.c:540
+msgid "--merge-base only works with commits"
+msgstr "--merge-base solo funciona con confirmaciones"
+
+#: diff-lib.c:557
+msgid "unable to get HEAD"
+msgstr "no es posible obtener HEAD"
+
+#: diff-lib.c:564
+msgid "no merge base found"
+msgstr "no se encontró base de fusión"
+
+#: diff-lib.c:566
+msgid "multiple merge bases found"
+msgstr "múltiples bases de fusión encontradas"
+
 #: diff-no-index.c:238
 msgid "git diff --no-index [<options>] <path> <path>"
 msgstr "git diff --no-index [<opciones>] <path> <path>"
@@ -3229,35 +3358,35 @@
 "Errores en la variable de config 'diff.dirstat' encontrados:\n"
 "%s"
 
-#: diff.c:4243
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "diff externo murió, deteniendo en %s"
 
-#: diff.c:4589
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check y -s son mutuamente exclusivas"
 
-#: diff.c:4592
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S y --find-object son mutuamente exclusivas"
 
-#: diff.c:4670
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow requiere exactamente un pathspec"
 
-#: diff.c:4718
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor --stat inválido: %s"
 
-#: diff.c:4723 diff.c:4728 diff.c:4733 diff.c:4738 diff.c:5250
-#: parse-options.c:197 parse-options.c:201
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s espera un valor numérico"
 
-#: diff.c:4755
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3266,42 +3395,42 @@
 "Falló al analizar parámetro de opción --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4840
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "cambio de clase desconocido '%c' en --diff-filter=%s"
 
-#: diff.c:4864
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valor desconocido luego de ws-error-highlight=%.*s"
 
-#: diff.c:4878
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "no se puede resolver '%s'"
 
-#: diff.c:4928 diff.c:4934
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s espera forma <n>/<m>"
 
-#: diff.c:4946
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s esperaba un char, se obtuvo '%s'"
 
-#: diff.c:4967
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "mal argumento --color-moved: %s"
 
-#: diff.c:4986
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "modo inválido '%s' en --color-moved-ws"
 
-#: diff.c:5026
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3309,154 +3438,159 @@
 "opción diff-algorithm acepta \"myers\", \"minimal\", \"patience\" e "
 "\"histogram\""
 
-#: diff.c:5062 diff.c:5082
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argumento inválido para %s"
 
-#: diff.c:5219
+#: diff.c:5228
+#, c-format
+msgid "invalid regex given to -I: '%s'"
+msgstr "regex inválido para -I: '%s'"
+
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "falló al analizar parámetro de opción --submodule: '%s'"
 
-#: diff.c:5275
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "mal argumento --word-diff: %s"
 
-#: diff.c:5298
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Opciones de formato de salida para diff"
 
-#: diff.c:5300 diff.c:5306
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "generar parche"
 
-#: diff.c:5303 builtin/log.c:177
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "suprimir salida de diff"
 
-#: diff.c:5308 diff.c:5422 diff.c:5429
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5309 diff.c:5312
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "genera diffs con <n> líneas de contexto"
 
-#: diff.c:5314
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "genera el diff en formato raw"
 
-#: diff.c:5317
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "sinónimo para '-p --stat'"
 
-#: diff.c:5321
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "sinónimo para '-p --stat'"
 
-#: diff.c:5325
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "--stat amigable para máquina"
 
-#: diff.c:5328
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "mostrar solo la última línea para --stat"
 
-#: diff.c:5330 diff.c:5338
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5331
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "muestra la distribución de cantidades de cambios relativa para cada "
 "subdirectorio"
 
-#: diff.c:5335
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinónimo para --dirstat=cumulative"
 
-#: diff.c:5339
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinonimo para --dirstat=archivos,param1,param2..."
 
-#: diff.c:5343
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "advierte si cambios introducen conflictos de markers o errores de espacios "
 "en blanco"
 
-#: diff.c:5346
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "resumen condensado de creaciones, cambios de nombres y cambios de modos"
 
-#: diff.c:5349
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "mostrar solo nombres de archivos cambiados"
 
-#: diff.c:5352
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "mostrar solo nombres y estados de archivos cambiados"
 
-#: diff.c:5354
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<ancho>[,<nombre-ancho>[,<cantidad>]]"
 
-#: diff.c:5355
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "generar diffstat"
 
-#: diff.c:5357 diff.c:5360 diff.c:5363
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<ancho>"
 
-#: diff.c:5358
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "genera diffstat con un ancho dado"
 
-#: diff.c:5361
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "genera diffstat con un nombre de ancho dado"
 
-#: diff.c:5364
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "genera diffstat con un ancho de graph dado"
 
-#: diff.c:5366
+#: diff.c:5437
 msgid "<count>"
 msgstr "<cantidad>"
 
-#: diff.c:5367
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "genera diffstat con líneas limitadas"
 
-#: diff.c:5370
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "genera un resumen compacto de diffstat"
 
-#: diff.c:5373
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "muestra un diff binario que puede ser aplicado"
 
-#: diff.c:5376
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "mostrar todo un pre- y post-image de nombres de objetos en las líneas \"index"
 "\""
 
-#: diff.c:5378
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "mostrar diff colorido"
 
-#: diff.c:5379
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<tipo>"
 
-#: diff.c:5380
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3464,7 +3598,7 @@
 "resaltar errores de espacios en blanco en las líneas 'context', 'old' o "
 "'new' del diff"
 
-#: diff.c:5383
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3472,89 +3606,89 @@
 "no consolidar los pathnames y usar NULs como terminadores de campos en --raw "
 "o --numstat"
 
-#: diff.c:5386 diff.c:5389 diff.c:5392 diff.c:5498
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<prefijo>"
 
-#: diff.c:5387
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "mostrar el prefijo de fuente dado en lugar de \"a/\""
 
-#: diff.c:5390
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "mostrar el prefijo de destino en lugar de \"b/\""
 
-#: diff.c:5393
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "anteponer un prefijo adicional a cada línea mostrada"
 
-#: diff.c:5396
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "no mostrar ningún prefijo de fuente o destino"
 
-#: diff.c:5399
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "muestra el contexto entre hunks de diff hasta el número especificado de "
 "líneas"
 
-#: diff.c:5403 diff.c:5408 diff.c:5413
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<char>"
 
-#: diff.c:5404
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "especifica el char para indicar una nueva línea en lugar de '+'"
 
-#: diff.c:5409
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "especifica el char para indicar una línea vieja en lugar de '-'"
 
-#: diff.c:5414
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "especifica el char para indicar un contexto en lugar de ' '"
 
-#: diff.c:5417
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Opciones de diff rename"
 
-#: diff.c:5418
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5419
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "descomponer los cambios de reescritura en pares de borrar y crear"
 
-#: diff.c:5423
+#: diff.c:5494
 msgid "detect renames"
 msgstr "detectar renombrados"
 
-#: diff.c:5427
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "omite la preimage para borrados"
 
-#: diff.c:5430
+#: diff.c:5501
 msgid "detect copies"
 msgstr "detectar copias"
 
-#: diff.c:5434
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "usa archivos no modificados como fuente para encontrar copias"
 
-#: diff.c:5436
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "deshabilita detección de renombres"
 
-#: diff.c:5439
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "usa blobs vacíos como fuente de renombre"
 
-#: diff.c:5441
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "continua listando el historial de un archivo más allá de renombres"
 
-#: diff.c:5444
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3562,155 +3696,159 @@
 "previene detección de renombre/copias si el número de objetivos para "
 "renombres/copias excede el límite dado"
 
-#: diff.c:5446
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Opciones de algoritmos de diff"
 
-#: diff.c:5448
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "produce el diff más pequeño posible"
 
-#: diff.c:5451
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorar espacios en blanco cuando comparando líneas"
 
-#: diff.c:5454
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorar cambios en la cantidad de líneas en blanco"
 
-#: diff.c:5457
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorar cambios en espacios en blanco en EOL"
 
-#: diff.c:5460
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "ignora carrier-return al final de la línea"
 
-#: diff.c:5463
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora cambios cuyas líneas son todas en blanco"
 
-#: diff.c:5466
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
+msgid "<regex>"
+msgstr "<regex>"
+
+#: diff.c:5537
+msgid "ignore changes whose all lines match <regex>"
+msgstr "ignora cambios cuyas líneas concuerdan con <regex>"
+
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heurística para cambiar los límites de hunk para una fácil lectura"
 
-#: diff.c:5469
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "genera un diff usando algoritmo \"patience diff\""
 
-#: diff.c:5473
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "genera un diff usando algoritmo \"histogram diff\""
 
-#: diff.c:5475
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<algoritmo>"
 
-#: diff.c:5476
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "escoge un algoritmo para diff"
 
-#: diff.c:5478
+#: diff.c:5552
 msgid "<text>"
 msgstr "<texto>"
 
-#: diff.c:5479
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "genera un diff usando algoritmo \"anchored diff\""
 
-#: diff.c:5481 diff.c:5490 diff.c:5493
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<modo>"
 
-#: diff.c:5482
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "muestra diff por palabras usando <modo> para delimitar las palabras cambiadas"
 
-#: diff.c:5484 diff.c:5487 diff.c:5532
-msgid "<regex>"
-msgstr "<regex>"
-
-#: diff.c:5485
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "usa <regex> para decidir que palabra es"
 
-#: diff.c:5488
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "equivalente a --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5491
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "líneas movidas de código están coloreadas diferente"
 
-#: diff.c:5494
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "como espacios en blanco son ignorados en --color-moved"
 
-#: diff.c:5497
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Otras opciones de diff"
 
-#: diff.c:5499
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "cuando ejecutado desde un subdir, excluye cambios del exterior y muestra "
 "paths relativos"
 
-#: diff.c:5503
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "tratar todos los archivos como texto"
 
-#: diff.c:5505
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "cambia dos inputs, invierte el diff"
 
-#: diff.c:5507
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "termina con 1 si hubieron diferencias, de lo contrario con 0"
 
-#: diff.c:5509
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "deshabilita todo el output del programa"
 
-#: diff.c:5511
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "permite la ejecución de un diff helper externo"
 
-#: diff.c:5513
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "ejecuta filtros de conversión de texto externos cuando comparando binarios"
 
-#: diff.c:5515
+#: diff.c:5589
 msgid "<when>"
 msgstr "<cuando>"
 
-#: diff.c:5516
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignorar cambios a submódulos en la generación de diff"
 
-#: diff.c:5519
+#: diff.c:5593
 msgid "<format>"
 msgstr "<formato>"
 
-#: diff.c:5520
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "especifica como son mostradas las diferencias en submódulos"
 
-#: diff.c:5524
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "ocultar entradas 'git add -N' del index"
 
-#: diff.c:5527
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "trata entradas 'git add -N' como reales en el index"
 
-#: diff.c:5529
+#: diff.c:5603
 msgid "<string>"
 msgstr "<string>"
 
-#: diff.c:5530
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3718,7 +3856,7 @@
 "busca por diferencias que cambien el número de ocurrencias para el string "
 "especificado"
 
-#: diff.c:5533
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3726,23 +3864,35 @@
 "busca por diferencias que cambien el número de ocurrencias para el regex "
 "especificado"
 
-#: diff.c:5536
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "mostrar todos los cambios en el changeset con -S o -G"
 
-#: diff.c:5539
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tratar <string> en -S como una expresión regular extendida de POSIX"
 
-#: diff.c:5542
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "controlar el orden en el que los archivos aparecen en la salida"
 
-#: diff.c:5543
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<ruta>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "mostrar el cambio en la ruta especificada primero"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "saltar el output de la ruta especificada"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<id-objeto>"
 
-#: diff.c:5544
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3750,33 +3900,33 @@
 "busca por diferencias que cambien el número de ocurrencias para el objeto "
 "especificado"
 
-#: diff.c:5546
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5547
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "selecciona archivos por tipo de diff"
 
-#: diff.c:5549
+#: diff.c:5629
 msgid "<file>"
 msgstr "<archivo>"
 
-#: diff.c:5550
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Output a un archivo específico"
 
-#: diff.c:6205
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "detección de cambio de nombre inexacta fue saltada por haber muchos archivos."
 
-#: diff.c:6208
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "solo se encontraron copias de rutas modificadas por haber muchos archivos."
 
-#: diff.c:6211
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3789,65 +3939,70 @@
 msgid "failed to read orderfile '%s'"
 msgstr "falló al leer orden de archivos '%s'"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Realizando una detección de cambios de nombre inexacta"
 
-#: dir.c:573
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "No hay ruta '%s' en el diff"
+
+#: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 "ruta especificada '%s' no concordó con ningún archivo(s) conocido por git"
 
-#: dir.c:713 dir.c:742 dir.c:755
+#: dir.c:718 dir.c:747 dir.c:760
 #, c-format
 msgid "unrecognized pattern: '%s'"
 msgstr "patrón desconocido: '%s'"
 
-#: dir.c:772 dir.c:786
+#: dir.c:777 dir.c:791
 #, c-format
 msgid "unrecognized negative pattern: '%s'"
 msgstr "patrón negativo no reconocido: '%s'"
 
-#: dir.c:804
+#: dir.c:809
 #, c-format
 msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
 msgstr ""
 "tu archivo sparse-checkout tal vez tenga errores: patrón '%s' está repetido"
 
-#: dir.c:814
+#: dir.c:819
 msgid "disabling cone pattern matching"
 msgstr "deshabilitar coincidencia de patrónes cono"
 
-#: dir.c:1191
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "no se puede usar %s como archivo de exclusión"
 
-#: dir.c:2296
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "no se pudo abrir el directorio '%s'"
 
-#: dir.c:2596
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "falló al conseguir la información y nombre del kernel"
 
-#: dir.c:2720
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr "untracked cache está desactivado en este sistema o ubicación"
 
-#: dir.c:3502
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "archivo índice corrompido en repositorio %s"
 
-#: dir.c:3547 dir.c:3552
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "no se pudo crear directorios para %s"
 
-#: dir.c:3581
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "no se pudo migrar el directorio git de '%s' a '%s'"
@@ -3857,21 +4012,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "ayuda: Esperando que tu editor cierre el archivo ...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Filtrando contenido"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "no se pudo establecer el archivo '%s'"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "ruta de namespace de git mala \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "no se pudo configurar GIT_DIR a '%s'"
@@ -3881,260 +4036,272 @@
 msgid "too many args to run %s"
 msgstr "demasiados argumentos para correr %s"
 
-#: fetch-pack.c:152
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: lista poco profunda esperada"
 
-#: fetch-pack.c:155
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
 "git fetch-pack: se esperaba un flush packet luego de la lista superficial"
 
-#: fetch-pack.c:166
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: se esperaba ACK/NAK, se obtuvo un flush packet"
 
-#: fetch-pack.c:186
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: se esperaba ACK/NAK, se obtuvo '%s'"
 
-#: fetch-pack.c:197
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "no se puede escribir al remoto"
 
-#: fetch-pack.c:259
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc requiere multi_ack_detailed"
 
-#: fetch-pack.c:358 fetch-pack.c:1408
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "línea poco profunda inválida: %s"
 
-#: fetch-pack.c:364 fetch-pack.c:1414
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "línea superficial inválida: %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1416
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "objeto no encontrado: %s"
 
-#: fetch-pack.c:369 fetch-pack.c:1419
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "error en objeto: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1421
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "superficie no encontrada: %s"
 
-#: fetch-pack.c:374 fetch-pack.c:1425
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "se esperaba shallow/unshallow, se obtuvo %s"
 
-#: fetch-pack.c:416
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "se obtuvo %s %d %s"
 
-#: fetch-pack.c:433
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit inválido %s"
 
-#: fetch-pack.c:464
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "rindiéndose"
 
-#: fetch-pack.c:477 progress.c:336
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "listo"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "se obtuvo %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Marcando %s como completa"
 
-#: fetch-pack.c:756
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "ya se tiene %s (%s)"
 
-#: fetch-pack.c:821
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: no se puede extraer un demultiplexor de banda lateral"
 
-#: fetch-pack.c:829
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "error de protocolo: paquete de header erróneo"
 
-#: fetch-pack.c:910
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: no se puede quitar %s"
 
-#: fetch-pack.c:927
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: salida de paquete de índice no válida"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s falló"
 
-#: fetch-pack.c:929
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "error en demultiplexor de banda lateral"
 
-#: fetch-pack.c:976
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Versión de servidor es %.*s"
 
-#: fetch-pack.c:981 fetch-pack.c:987 fetch-pack.c:990 fetch-pack.c:996
-#: fetch-pack.c:1000 fetch-pack.c:1004 fetch-pack.c:1008 fetch-pack.c:1012
-#: fetch-pack.c:1016 fetch-pack.c:1020 fetch-pack.c:1024 fetch-pack.c:1028
-#: fetch-pack.c:1034 fetch-pack.c:1040 fetch-pack.c:1045 fetch-pack.c:1050
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "El servidor soporta %s"
 
-#: fetch-pack.c:983
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "El servidor no soporta clientes superficiales"
 
-#: fetch-pack.c:1043
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "El servidor no soporta --shalow-since"
 
-#: fetch-pack.c:1048
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "El servidor no soporta --shalow-exclude"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "El servidor no soporta --deepen"
 
-#: fetch-pack.c:1054
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "El servidor no soporta el formato de objetos de este repositorio"
 
-#: fetch-pack.c:1071
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "no hay commits comunes"
 
-#: fetch-pack.c:1083 fetch-pack.c:1639
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "el repositorio fuente es superficial, rechazando clonado."
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: fetch falló."
 
-#: fetch-pack.c:1211
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "algoritmos no compatibles: cliente %s; servidor %s"
 
-#: fetch-pack.c:1215
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "servidor no soporta el algoritmo '%s'"
 
-#: fetch-pack.c:1235
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "El servidor no soporta peticiones superficiales"
 
-#: fetch-pack.c:1242
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "El servidor soporta filtro"
 
-#: fetch-pack.c:1286
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "no se puede escribir request al remoto"
 
-#: fetch-pack.c:1304
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "error leyendo sección header '%s'"
 
-#: fetch-pack.c:1310
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "se esperaba '%s', se recibió '%s'"
 
-#: fetch-pack.c:1371
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "línea de confirmación inesperada: '%s'"
 
-#: fetch-pack.c:1376
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "error procesando acks: %d"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "espere que el packfile sea mandado luego del 'listo'"
 
-#: fetch-pack.c:1388
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "espere que ninguna otra sección sea enviada luego del 'listo'"
 
-#: fetch-pack.c:1430
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "error procesando información superficial: %d"
 
-#: fetch-pack.c:1477
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "se esperaba wanted-ref, se obtuvo '%s'"
 
-#: fetch-pack.c:1482
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inesperado: '%s'"
 
-#: fetch-pack.c:1487
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "error procesando refs deseadas: %d"
 
-#: fetch-pack.c:1517
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: se espera un paquete final de respuesta"
 
-#: fetch-pack.c:1921
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "no concuerda el head remoto"
 
-#: fetch-pack.c:1944 builtin/clone.c:692
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "remoto no mando todos los objetos necesarios"
 
-#: fetch-pack.c:1971
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "'listo' inesperado del remoto"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "no existe ref remota %s"
 
-#: fetch-pack.c:1974
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "El servidor no permite solicitudes de objetos inadvertidos %s"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "no se pudo crear archivo temporal"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "falló al escribir la firma separada para '%s'"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg falló al firmar la data"
 
@@ -4143,7 +4310,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignora color inválido '%.*s' en log.graphColors"
 
-#: grep.c:668
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4151,18 +4318,18 @@
 "el patrón provisto contiene bytes NULL (via -f <archivo>). Esto solo es "
 "soportado con -P bajo PCRE v2"
 
-#: grep.c:2128
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': no es posible leer %s"
 
-#: grep.c:2145 setup.c:176 builtin/clone.c:411 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "falló al marcar '%s'"
 
-#: grep.c:2156
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': lectura corta"
@@ -4219,41 +4386,41 @@
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Comandos de bajo nivel / Auxiliares internos"
 
-#: help.c:298
+#: help.c:300
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "comandos disponibles de git en '%s'"
 
-#: help.c:305
+#: help.c:307
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "comandos disponibles de git desde otro lugar en tu $PATH"
 
-#: help.c:314
+#: help.c:316
 msgid "These are common Git commands used in various situations:"
 msgstr "Estos son comandos comunes de Git usados en varias situaciones:"
 
-#: help.c:363 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "comando de listado de tipos no soportado '%s'"
 
-#: help.c:403
-msgid "The common Git guides are:"
-msgstr "Las guías comunes de Git son:"
+#: help.c:405
+msgid "The Git concept guides are:"
+msgstr "Las guías de conceptos de Git son:"
 
-#: help.c:427
+#: help.c:429
 msgid "See 'git help <command>' to read about a specific subcommand"
 msgstr "Vea 'git help <comando>' para leer sobre los subcomandos específicos"
 
-#: help.c:432
+#: help.c:434
 msgid "External commands"
 msgstr "Comandos externos"
 
-#: help.c:447
+#: help.c:449
 msgid "Command aliases"
 msgstr "Aliases de comando"
 
-#: help.c:511
+#: help.c:527
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4262,31 +4429,31 @@
 "'%s' parece ser un comando de git, pero no hemos\n"
 "podido ejecutarlo. ¿Tal vez git-%s se ha roto?"
 
-#: help.c:570
-msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Oh oh. Tu sistema no reporta ningún comando de Git."
-
-#: help.c:592
-#, c-format
-msgid "WARNING: You called a Git command named '%s', which does not exist."
-msgstr "PELIGRO: Has llamado a un comando de Git '%s', el cual no existe."
-
-#: help.c:597
-#, c-format
-msgid "Continuing under the assumption that you meant '%s'."
-msgstr "Continuando asumiendo que quisiste decir '%s'."
-
-#: help.c:602
-#, c-format
-msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
-msgstr "Continuando en %0.1f segundos, asumiendo que tu dijiste '%s'."
-
-#: help.c:610
+#: help.c:543 help.c:631
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: '%s'no es un comando de git. Mira 'git --help'."
 
-#: help.c:614
+#: help.c:591
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Oh oh. Tu sistema no reporta ningún comando de Git."
+
+#: help.c:613
+#, c-format
+msgid "WARNING: You called a Git command named '%s', which does not exist."
+msgstr "PELIGRO: Has llamado a un comando de Git '%s', el cual no existe."
+
+#: help.c:618
+#, c-format
+msgid "Continuing under the assumption that you meant '%s'."
+msgstr "Continuando asumiendo que quisiste decir '%s'."
+
+#: help.c:623
+#, c-format
+msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
+msgstr "Continuando en %0.1f segundos, asumiendo que tu dijiste '%s'."
+
+#: help.c:635
 msgid ""
 "\n"
 "The most similar command is"
@@ -4300,16 +4467,16 @@
 "\n"
 "Los comandos más similares son"
 
-#: help.c:654
+#: help.c:675
 msgid "git version [<options>]"
 msgstr "git versión [<opciones>]"
 
-#: help.c:709
+#: help.c:730
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:713
+#: help.c:734
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4323,7 +4490,15 @@
 "\n"
 "¿Quisiste decir alguno de estos?"
 
-#: ident.c:349
+#: ident.c:353
+msgid "Author identity unknown\n"
+msgstr "Identidad del autor desconocido\n"
+
+#: ident.c:356
+msgid "Committer identity unknown\n"
+msgstr "Se desconoce la identidad del autor\n"
+
+#: ident.c:362
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4338,7 +4513,7 @@
 "\n"
 msgstr ""
 "\n"
-"*** Por favor cuéntame quien eres.\n"
+"*** Por favor cuéntame quién eres.\n"
 "\n"
 "Corre\n"
 "\n"
@@ -4349,77 +4524,82 @@
 "Omite --global para configurar tu identidad solo en este repositorio.\n"
 "\n"
 
-#: ident.c:379
+#: ident.c:397
 msgid "no email was given and auto-detection is disabled"
 msgstr "no se entrego ningún email y la detección automática está desactivada"
 
-#: ident.c:384
+#: ident.c:402
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "no es posible auto-detectar la dirección de correo (se obtuvo '%s')"
 
-#: ident.c:401
+#: ident.c:419
 msgid "no name was given and auto-detection is disabled"
 msgstr "no se entrego ningún nombre y la detección automática está desactivada"
 
-#: ident.c:407
+#: ident.c:425
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "no es posible auto-detectar el nombre (se obtuvo '%s')"
 
-#: ident.c:415
+#: ident.c:433
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "no se puede tener un nombre vacío (para <%s>)"
 
-#: ident.c:421
+#: ident.c:439
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "el nombre consiste solo de caracteres no permitidos: %s"
 
-#: ident.c:436 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "formato de fecha inválido: %s"
 
-#: list-objects-filter-options.c:58
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "se esperaba 'tree:<depth>'"
 
-#: list-objects-filter-options.c:73
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "soporte para filtros sparse:path ha sido discontinuado"
 
-#: list-objects-filter-options.c:86
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "'%s' para 'object:type=<type>' no es un objeto válido"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "filtro -spec inválido '%s'"
 
-#: list-objects-filter-options.c:102
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "tienes que escapar el caracter en sub-filter-spec: '%c'"
 
-#: list-objects-filter-options.c:144
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "se espera algo luego de combine:"
 
-#: list-objects-filter-options.c:226
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "no se pueden combinar múltiples tipos de especificaciones de filtro"
 
-#: list-objects-filter-options.c:330
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 "no es posible actualizar el formato del repositorio para soportar clonado "
 "parcial"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "no es posible acceder al blob en '%s'"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "incapaz de analizar filtro de data en %s"
@@ -4434,7 +4614,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "entrada '%s' en árbol %s tiene modo blob, pero no es uno"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "no se puede cargar árbol raíz para commit %s"
@@ -4464,109 +4644,60 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "No se pudo crear '%s.lock': %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "valor inválido '%s' para lsrefs.unborn"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "se esperaba un flush luego de argumentos ls-refs"
 
-#: merge-recursive.c:356
-msgid "(bad commit)\n"
-msgstr "(commit erróneo)\n"
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "CRLF con comillas detectado"
 
-#: merge-recursive.c:379
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
 #, c-format
-msgid "add_cacheinfo failed for path '%s'; merge aborting."
-msgstr "add_cacheinfo falló para la ruta '%s'; abortando fusión."
+msgid "bad action '%s' for '%s'"
+msgstr "mala acción '%s' para '%s'"
 
-#: merge-recursive.c:388
-#, c-format
-msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
-msgstr "add_cacheinfo falló para refrescar la ruta '%s'; abortando fusión."
-
-#: merge-recursive.c:874
-#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "falló al crear la ruta '%s'%s"
-
-#: merge-recursive.c:885
-#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "Removiendo %s para hacer espacio para un subdirectorio\n"
-
-#: merge-recursive.c:899 merge-recursive.c:918
-msgid ": perhaps a D/F conflict?"
-msgstr ": ¿tal vez un conflicto D/F?"
-
-#: merge-recursive.c:908
-#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "rehusando perder el archivo rastreado en '%s'"
-
-#: merge-recursive.c:949 builtin/cat-file.c:41
-#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "no se puede leer el objeto %s '%s'"
-
-#: merge-recursive.c:954
-#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "se esperaba blob para %s '%s'"
-
-#: merge-recursive.c:979
-#, c-format
-msgid "failed to open '%s': %s"
-msgstr "falló al abrir '%s': %s"
-
-#: merge-recursive.c:990
-#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "falló al crear el enlace simbólico '%s': %s"
-
-#: merge-recursive.c:995
-#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "no se que hacer con %06o %s '%s'"
-
-#: merge-recursive.c:1191
+#: merge-ort.c:1116 merge-recursive.c:1205
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Falló al fusionar el submódulo %s (no revisado)"
 
-#: merge-recursive.c:1198
+#: merge-ort.c:1125 merge-recursive.c:1212
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Falló al fusionar el submódulo %s (commits no presentes)"
 
-#: merge-recursive.c:1205
+#: merge-ort.c:1134 merge-recursive.c:1219
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "Falló el fusionar submódulo %s (commits no siguen la fusión base)"
 
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-ort.c:1144 merge-ort.c:1151
 #, c-format
-msgid "Fast-forwarding submodule %s to the following commit:"
-msgstr "Haciendo fast-forward a submódulo %s para el siguiente commit:"
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Nota: Fast-forward de submódulo %s a %s"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-ort.c:1172
 #, c-format
-msgid "Fast-forwarding submodule %s"
-msgstr "Avance rápido en submódulo %s"
+msgid "Failed to merge submodule %s"
+msgstr "falló al fusionar el submódulo %s"
 
-#: merge-recursive.c:1251
+#: merge-ort.c:1179
 #, c-format
-msgid "Failed to merge submodule %s (merge following commits not found)"
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
 msgstr ""
-"Falló al fusionar submódulo %s (los siguentes commits no fueron encontrados)"
+"Falló al fusionar el submódulo %s, pero existen posibles soluciones de "
+"fusión:\n"
+"%s\n"
 
-#: merge-recursive.c:1255
-#, c-format
-msgid "Failed to merge submodule %s (not fast-forward)"
-msgstr "Falló al fusionar el submódulo %s (no es posible avance rápido)"
-
-#: merge-recursive.c:1256
-msgid "Found a possible merge resolution for the submodule:\n"
-msgstr "Se encontró una posible solución de fusión para el submódulo:\n"
-
-#: merge-recursive.c:1259
+#: merge-ort.c:1183 merge-recursive.c:1273
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4583,33 +4714,322 @@
 "\n"
 "el cual aceptará esta sugerencia.\n"
 
-#: merge-recursive.c:1268
+#: merge-ort.c:1196
 #, c-format
-msgid "Failed to merge submodule %s (multiple merges found)"
-msgstr "Falló al fusionar el submódulo %s (fusiones múltiples encontradas)"
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Falló al fusionar el submódulo %s, pero existen múltipes fusiones posibles:\n"
+"%s"
 
-#: merge-recursive.c:1341
+#: merge-ort.c:1415 merge-recursive.c:1362
 msgid "Failed to execute internal merge"
 msgstr "Falló al ejecutar la fusión interna"
 
-#: merge-recursive.c:1346
+#: merge-ort.c:1420 merge-recursive.c:1367
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "No es posible agregar %s a la base de datos"
 
-#: merge-recursive.c:1378
+#: merge-ort.c:1427 merge-recursive.c:1400
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Auto-fusionando %s"
 
-#: merge-recursive.c:1402
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"CONFLICTO (cambio de nombre de directorio implícito): Archivo/directorio "
+"existente en %s se interpone con el cambio de nombres implícito, poniendo "
+"la(s) siguiente(s) ruta(s) aquí: %s."
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"CONFLICTO (cambio de nombre implícito): No se puede mapear más de una ruta "
+"para %s; cambio de nombre implícito intentó poner estas rutas: %s"
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"CONFLICTO (división de cambio de nombre de directorio): No está claro dónde "
+"cambiar el nombre de %s; se le cambió el nombre a varios otros directorios, "
+"sin que ningún destino obtenga la mayoría de los archivos."
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"PELIGRO: Evitando aplicar %s -> %s renombrado a %s, porque %s mismo fue "
+"renombrado."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Path actualizado: %s agregado en %s dentro de un directorio que fue "
+"renombrado en %s; moviéndolo a %s."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Path actualizado: %s renombrado a %s en %s, dentro de un directorio que fue "
+"renombrado en %s; moviéndolo a %s."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"CONFLICTO (ubicación de archivo): %s agregado en %s dentro de un directorio "
+"que fue renombrado en %s, sugerimos que debería ser movido a %s."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"CONFLICTO (ubicación de archivo): %s renombrado a %s en %s, dentro de un "
+"directorio que fue renombrado en %s, sugiriendo que tal vez debería ser "
+"movido a %s."
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"CONFLICTO (renombrar / renombrar): %s renombrado a %s en %s y %s en %s."
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"CONFLICTO (cambio de nombre involucrado en colisión): cambio de nombre de%s -"
+">%s tiene conflictos de contenido Y colisiona con otra ruta; esto puede "
+"resultar en marcadores de conflicto anidados."
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"CONFLICTO (renombrar / eliminar): %s renombrado a %s en %s, pero eliminado "
+"en %s."
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "no se pudo leer el objeto %s"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "objeto %s no es un blob"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"CONFLICTO (archivo / directorio): directorio en el camino de%s de%s; "
+"moviéndolo a%s en su lugar."
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"CONFLICTO (tipos distintos):%s tenía tipos diferentes en cada lado; "
+"renombrado ambos para que cada uno pueda ser grabado en algún lugar "
+"diferente."
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"CONFLICTO (tipos distintos):%s tenía tipos diferentes en cada lado; "
+"renombrado uno de ellos para que cada uno pueda ser grabado en algún lugar "
+"diferente."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "contenido"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "agregar/agregar"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "submódulo"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "CONFLICTO (%s): Conflicto de fusión en %s"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"CONFLICTO (modificar / eliminar): %s eliminado en %s y modificado en %s. "
+"Versión %s de %s restante en el árbol."
+
+#: merge-ort.c:3433
+#, 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á actualizado y en conflicto con la versión; la copia antigua "
+"fue renombrada 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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr ""
+"La recopilación de información de fusión falló para los árboles %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+"Los cambios locales de los siguientes archivos serán sobreescritos por "
+"merge:\n"
+"  %s"
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Ya está actualizado."
+
+#: merge-recursive.c:356
+msgid "(bad commit)\n"
+msgstr "(commit erróneo)\n"
+
+#: merge-recursive.c:379
+#, c-format
+msgid "add_cacheinfo failed for path '%s'; merge aborting."
+msgstr "add_cacheinfo falló para la ruta '%s'; abortando fusión."
+
+#: merge-recursive.c:388
+#, c-format
+msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
+msgstr "add_cacheinfo falló para refrescar la ruta '%s'; abortando fusión."
+
+#: merge-recursive.c:876
+#, c-format
+msgid "failed to create path '%s'%s"
+msgstr "falló al crear la ruta '%s'%s"
+
+#: merge-recursive.c:887
+#, c-format
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "Removiendo %s para hacer espacio para un subdirectorio\n"
+
+#: merge-recursive.c:901 merge-recursive.c:920
+msgid ": perhaps a D/F conflict?"
+msgstr ": ¿tal vez un conflicto D/F?"
+
+#: merge-recursive.c:910
+#, c-format
+msgid "refusing to lose untracked file at '%s'"
+msgstr "rehusando perder el archivo rastreado en '%s'"
+
+#: merge-recursive.c:951 builtin/cat-file.c:41
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr "no se puede leer el objeto %s '%s'"
+
+#: merge-recursive.c:956
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr "se esperaba blob para %s '%s'"
+
+#: merge-recursive.c:981
+#, c-format
+msgid "failed to open '%s': %s"
+msgstr "falló al abrir '%s': %s"
+
+#: merge-recursive.c:992
+#, c-format
+msgid "failed to symlink '%s': %s"
+msgstr "falló al crear el enlace simbólico '%s': %s"
+
+#: merge-recursive.c:997
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "no se que hacer con %06o %s '%s'"
+
+#: merge-recursive.c:1227 merge-recursive.c:1239
+#, c-format
+msgid "Fast-forwarding submodule %s to the following commit:"
+msgstr "Haciendo fast-forward a submódulo %s para el siguiente commit:"
+
+#: merge-recursive.c:1230 merge-recursive.c:1242
+#, c-format
+msgid "Fast-forwarding submodule %s"
+msgstr "Avance rápido en submódulo %s"
+
+#: merge-recursive.c:1265
+#, c-format
+msgid "Failed to merge submodule %s (merge following commits not found)"
+msgstr ""
+"Falló al fusionar submódulo %s (los siguentes commits no fueron encontrados)"
+
+#: merge-recursive.c:1269
+#, c-format
+msgid "Failed to merge submodule %s (not fast-forward)"
+msgstr "Falló al fusionar el submódulo %s (no es posible avance rápido)"
+
+#: merge-recursive.c:1270
+msgid "Found a possible merge resolution for the submodule:\n"
+msgstr "Se encontró una posible solución de fusión para el submódulo:\n"
+
+#: merge-recursive.c:1282
+#, c-format
+msgid "Failed to merge submodule %s (multiple merges found)"
+msgstr "Falló al fusionar el submódulo %s (fusiones múltiples encontradas)"
+
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Error: Rehusando perder el archivo no rastreado en %s; escribiéndolo a %s en "
 "cambio."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4618,7 +5038,7 @@
 "CONFLICTO (%s/borrar): %s borrado en %s y %s en %s. Falta versión %s de %s "
 "en el árbol."
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4627,7 +5047,7 @@
 "CONFLICTO (%s/borrar): %s borrado en %s y %s para %s en %s. Versión %s de %s "
 "permanece en el árbol."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4636,7 +5056,7 @@
 "CONFLICTO (%s/eliminar): %s eliminado en %s y %s en %s. Versión %s de %s "
 "dejada en el árbol, en %s."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4645,44 +5065,44 @@
 "CONFLICTO (%s/borrar): %s borrado en %s y %s para %s en %s. Versión %s de %s "
 "permanece en el árbol en %s."
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "renombrar"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "renombrado"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Rehusando perder el archivo sucio en %s"
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Rehusando perder el archivo no rastreado en %s, incluso aunque se está "
 "interponiendo."
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLICTO (renombrar/agregar): Renombrar %s->%s en %s.  %s agregado en %s"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s es un directorio en %s agregando como %s más bien"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Rehusando perder el archivo no rastreado en %s; agregándolo como %s en cambio"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4691,18 +5111,18 @@
 "CONFLICTO (renombrar/renombrar): Renombrar \"%s\"->\"%s\" en la rama \"%s\" "
 "renombrar \"%s\"->\"%s\" en \"%s\"%s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (dejado sin resolver)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLICTO (renombrar/renombrar): Renombrar %s->%s en %s. Renombrar %s->%s en "
 "%s"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4713,26 +5133,7 @@
 "colocar %s porque el directorio %s fue renombrado a otros múltiples "
 "directorios, sin ningún que contenga la mayoría de archivos."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"CONFLICTO (cambio de nombre de directorio implícito): Archivo/directorio "
-"existente en %s se interpone con el cambio de nombres implícito, poniendo "
-"la(s) siguiente(s) ruta(s) aquí: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"CONFLICTO (cambio de nombre implícito): No se puede mapear más de una ruta "
-"para %s; cambio de nombre implícito intentó poner estas rutas: %s"
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4741,167 +5142,81 @@
 "CONFLICTO (renombrar/renombrar): Renombrar directorio %s->%s en %s. "
 "Renombrar directorio %s->%s en %s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"PELIGRO: Evitando aplicar %s -> %s renombrado a %s, porque %s mismo fue "
-"renombrado."
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "no se pudo leer el objeto %s"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "objeto %s no es un blob"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "modificar"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "modificado"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "contenido"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "agregar/agregar"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Saltado %s (fusionado como existente)"
 
-#: merge-recursive.c:3101 git-submodule.sh:959
-msgid "submodule"
-msgstr "submódulo"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "CONFLICTO (%s): Conflicto de fusión en %s"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Agregando más bien como %s"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Path actualizado: %s agregado en %s dentro de un directorio que fue "
-"renombrado en %s; moviéndolo a %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"CONFLICTO (ubicación de archivo): %s agregado en %s dentro de un directorio "
-"que fue renombrado en %s, sugerimos que debería ser movido a %s."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Path actualizado: %s renombrado a %s en %s, dentro de un directorio que fue "
-"renombrado en %s; moviéndolo a %s."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"CONFLICTO (ubicación de archivo): %s renombrado a %s en %s, dentro de un "
-"directorio que fue renombrado en %s, sugiriendo que tal vez debería ser "
-"movido a %s."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "Eliminando %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "archivo/directorio"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "directorio/archivo"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "CONFLICTO (%s): Hay un directorio con el nombre %s en %s. Agregando %s como "
 "%s"
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "Agregando %s"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLICTO (add/add): Conflicto de merge en %s"
 
-#: merge-recursive.c:3436
-msgid "Already up to date!"
-msgstr "¡Ya está actualizado!"
-
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "falló la fusión de los árboles %s y %s"
 
-#: merge-recursive.c:3549
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Fusionando:"
 
-#: merge-recursive.c:3562
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "se encontró %u ancestro común:"
 msgstr[1] "se encontraron %u ancestros comunes:"
 
-#: merge-recursive.c:3612
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "la fusión no devolvió ningún commit"
 
-#: merge-recursive.c:3671
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-"Los cambios locales de los siguientes archivos serán sobreescritos por "
-"merge:\n"
-"  %s"
-
-#: merge-recursive.c:3768
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "No se pudo analizar el objeto '%s'"
 
-#: merge-recursive.c:3786 builtin/merge.c:705 builtin/merge.c:885
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "Incapaz de escribir el índice."
 
@@ -4909,187 +5224,200 @@
 msgid "failed to read the cache"
 msgstr "falló al leer la cache"
 
-#: merge.c:108 rerere.c:720 builtin/am.c:1878 builtin/am.c:1912
-#: builtin/checkout.c:559 builtin/checkout.c:822 builtin/clone.c:816
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "no es posible escribir el archivo índice"
 
-#: midx.c:68
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr ""
+"El abanico de OID de índice de paquetes múltiples es del tamaño incorrecto"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "archivo multi-pack-index %s es muy pequeño"
 
-#: midx.c:84
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "firma de multi-pack-index 0x%08x no concuerda con firma 0x%08x"
 
-#: midx.c:89
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "versión %d de multi-pack-index no reconocida"
 
-#: midx.c:94
+#: midx.c:131
 #, c-format
-msgid "hash version %u does not match"
-msgstr "versión de hash %u no concuerda"
-
-#: midx.c:108
-msgid "invalid chunk offset (too large)"
-msgstr "offset inválido del conjunto (muy grande)"
-
-#: midx.c:132
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
+msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
-"terminando multi-pack-index porque el id del conjunto aparece antes de lo "
-"esperado"
+"La versión de hash de índice de paquetes múltiples %u no coincide con la "
+"versión %u"
 
-#: midx.c:145
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index le falta el conjunto pack-name requerido"
 
-#: midx.c:147
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index le falta el conjunto OID fanout requerido"
 
-#: midx.c:149
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index le falta el conjunto OID fanout requerido"
 
-#: midx.c:151
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index le falta el conjunto de offset del objeto requerido"
 
-#: midx.c:165
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index nombres de paquete fuera de orden:'%s' antes '%s'"
 
-#: midx.c:208
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "mal pack-int-id: %u (%u paquetes totales)"
 
-#: midx.c:258
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index guarda un offset de 64-bit, pero off_t es muy pequeño"
 
-#: midx.c:286
-msgid "error preparing packfile from multi-pack-index"
-msgstr "error preparando packfile de multi-pack-index"
-
-#: midx.c:470
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "falló al agregar packfile '%s'"
 
-#: midx.c:476
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "falló al abrir pack-index '%s'"
 
-#: midx.c:536
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "falló al ubicar objeto %d en packfile"
 
-#: midx.c:840
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "no se puede almacenar el archivo de índice inverso"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Agregando packfiles a multi-pack-index"
 
-#: midx.c:873
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "no se vió pack-file %s caer"
 
-#: midx.c:925
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "pack preferido desconocido: '%s'"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "pack de referencia '% s' ha expirado"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "no hay archivos pack para indexar."
 
-#: midx.c:977
-msgid "Writing chunks to multi-pack-index"
-msgstr "Escribiendo chunks a multi-pack-index"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "falló al borrar %s"
 
-#: midx.c:1056
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "falló al limpiar multi-pack-index en %s"
 
-#: midx.c:1112
+#: midx.c:1214
+msgid "multi-pack-index file exists, but failed to parse"
+msgstr ""
+"El archivo de índice de paquetes múltiples existe, pero no se pudo analizar"
+
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Buscando por packfiles referidos"
 
-#: midx.c:1127
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid fanout fuera de orden: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1132
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "el midx no contiene oid"
 
-#: midx.c:1141
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Verificando orden de OID en multi-pack-index"
 
-#: midx.c:1150
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid lookup fuera de orden: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1170
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Ordenando objetos por packfile"
 
-#: midx.c:1177
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Verificando offsets de objetos"
 
-#: midx.c:1193
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "fallo al cargar entrada pack para oid[%d] = %s"
 
-#: midx.c:1199
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "falló al cargar el pack-index para packfile %s"
 
-#: midx.c:1208
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "offset para objeto incorrecto oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1233
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Contando objetos no referenciados"
 
-#: midx.c:1243
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Encontrando y borrando packfiles sin referencias"
 
-#: midx.c:1433
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "no se pudo empezar los pack-objetcts"
 
-#: midx.c:1452
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "no se pudo finalizar pack-objetcts"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "no es posible crear hilo lazy_dir: %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "no es posible crear hilo lazy_name: %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "no es posible unir hilo lazy_name: %s"
@@ -5136,6 +5464,363 @@
 msgid "Bad %s value: '%s'"
 msgstr "Valor erróneo para %s: '%s'"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "objeto directorio %s no existe; revisa .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "incapaz de normalizar la ruta de objeto alterno: %s"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: ignorando espacios de objetos alternos, anidado muy profundo"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "incapaz de normalizar directorio de objeto: %s"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "no es posible hacer fdopen en lockfile alternos"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "no es posible leer archivos alternos"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "no es posible mover archivos alternos en el lugar"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "ruta '%s' no existe"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"repositorio de referencia '%s' como un checkout vinculado no es soportado "
+"todavía."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "repositorio de referencia '%s' no es un repositorio local."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "repositorio de referencia '%s' es superficial (shallow)"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "repositorio de referencia '% s' está injertado"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "línea inválida mientras se analizaban refs alternas: %s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "intentando usar mmap %<PRIuMAX> sobre límite %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap falló"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "archivo de objeto %s está vacío"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "objeto perdido corrupto '%s'"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "basura al final del objeto perdido '%s'"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "tipo de objeto inválido"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "no es posible desempacar header %s con --allow-unknown-type"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "incapaz de desempaquetar header %s"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "no es posible analizar header %s con --allow-unknown-type"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "incapaz de analizar header %s"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "falló al leer objeto %s"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "reemplazo %s no encontrado para %s"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "objeto perdido %s (guardado en %s) está corrompido"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "paquete de objeto %s (guardado en %s) está corrompido"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "no es posible escribir archivo %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "no se pudo poner permisos a '%s'"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "falló de escritura"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "error cerrando el archivo de objeto suelto"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"permisos insuficientes para agregar un objeto a la base de datos del "
+"repositorio %s"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "no es posible crear un archivo temporal"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "no es posible escribir el archivo de objeto suelto"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "no es posible desinflar el objeto nuevo %s (%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "deflateEnd en objeto %s falló (%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "confundido por fuente de data de objetos inestable para %s"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "falló utime() en %s"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "no se pudo leer el objeto para %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "commit corrupto"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "tag corrupto"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "error leyendo al indexar %s"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "lectura corta al indexar %s"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: falló al insertar en la base de datos"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: tipo de archivo no soportado"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s no es objeto válido"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s no es un objeto '%s' válido"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "no es posible abrir %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "hash no concuerda para %s (se esperaba %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "no es posible hacer mmap a %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "incapaz de desempaquetar header de %s"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "incapaz de analizar header de %s"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "no es posible desempaquetar contenidos de %s"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "El ID de objeto corto %s es ambiguo"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Los candidatos son:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git normalmente nunca crea una ref que termine con 40 caracteres hex\n"
+"porque esto sería ignorado cuando solo se especifiquen 40-hex. Estas refs\n"
+"tal vez sean creadas por error. Por ejemplo,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"donde \"$br\" está de alguna manera vacía y una ref de 40-hex es creada. Por "
+"favor\n"
+"examina estas refs y tal vez bórralas. Silencia este mensaje\n"
+"ejecutando \"git config advice.objectNameWarning false\""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "log para '%.*s' solo va hasta %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "log para '%.*s' solo tiene %d entradas"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "la ruta '%s' existe en disco, pero no en '%.*s'"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"ruta '%s' existe, pero no '%s'\n"
+"ayuda: ¿Quisiste decir '%.*s:%s' o '%.*s:./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "ruta '%s' no existe en '%.*s'"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"ruta '%s' está en el index, pero no en stage %d\n"
+"ayuda:¿Quisiste decir: '%d:%s'?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"ruta '%s' está en el index, pero no '%s'\n"
+"ayuda:¿Quisiste decir ':%d:%s' o ':%d:./%s'?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "ruta '%s' existe en el disco, pero no en el index"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "ruta '%s' no existe (ni en disco ni en el index)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+"la sintaxis de ruta relativa no se puede usar fuera del directorio de trabajo"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "nombre de objeto no válido: '%.*s'."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5146,37 +5831,86 @@
 msgid "object %s is a %s, not a %s"
 msgstr "objeto %s es un %s, no un %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "el objeto %s tiene un id de tipo desconocido %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "incapaz de analizar objeto: %s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "hash no concuerda %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2184
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "no se pudo obtener el tamaño de %s"
 
-#: packfile.c:630
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "no se puede obtener el uso de disco de %s"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "El archivo de índice inverso %s es demasiado pequeño"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "El archivo de índice inverso %s está dañado"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "El archivo de índice inverso %s tiene una firma desconocida"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "archivo reverse-index %s tiene una versión no soportada %<PRIu32>"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "archivo reverse-index %s tiene un id de hash no soportado %<PRIu32>"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "no puede escribir y verificar el índice inverso"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "no se pudo estad: %s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "no pudo hacer %s legible"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "no se pudo escribir el archivo promisor '%s'"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset antes del final del paquete (broken .idx?)"
 
-#: packfile.c:1900
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 "offset antes del comienzo del índice del paquete para %s (¿índice corrupto?)"
 
-#: packfile.c:1904
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -5197,7 +5931,7 @@
 msgid "option `%s' expects \"always\", \"auto\", or \"never\""
 msgstr "opción `%s' puede usar \"always\", \"auto\", o \"never\""
 
-#: parse-options-cb.c:130 parse-options-cb.c:147
+#: parse-options-cb.c:132 parse-options-cb.c:149
 #, c-format
 msgid "malformed object name '%s'"
 msgstr "nombre de objeto mal formado '%s'"
@@ -5242,31 +5976,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "¿quisiste decir `--%s` (con dos guiones)?"
 
-#: parse-options.c:663 parse-options.c:963
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "alias de --%s"
 
-#: parse-options.c:854
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "opción `%s' desconocida"
 
-#: parse-options.c:856
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "switch desconocido `%c'"
 
-#: parse-options.c:858
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "opción desconocida en string no ascii: `%s'"
 
-#: parse-options.c:882
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:901
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "uso: %s"
@@ -5274,17 +6008,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:907
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "   o: %s"
 
-#: parse-options.c:910
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:949
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-NUM"
 
@@ -5293,30 +6027,30 @@
 msgid "Could not make %s writable by group"
 msgstr "No se pudo hacer que %s fuera escribible por el grupo"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr ""
 "Carácter de escape '\\' no permitido como último carácter en el valor attr"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Solo una especificación 'attr' es permitida."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "especificación attr no puede estar vacía"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "nombre de atributo %s inválido"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 "configuraciones globales de pathspec 'glob' y 'noglob' son incompatibles"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5324,51 +6058,51 @@
 "la configuración global de 'literal' para patrones de ruta es incompatible "
 "con las demás configuraciones globales de patrones de ruta"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "parámetro no válido para el prefijo 'magic pathspec'"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Magic pathspec inválido '%.*s' en '%s'"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Falta ')' al final del magic pathspec en '%s'"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Magic pathspec '%c' no implementado en '%s'"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: 'literal' y 'glob' son incompatibles"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: '%s' está fuera del repositorio en '%s'"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s' (nemotécnico: '%c')"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: magic pathspec no soportado por este comando: %s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "el patrón de ruta '%s' está detrás de un enlace simbólico"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "la línea está mál citada: %s"
@@ -5389,7 +6123,7 @@
 msgid "flush packet write failed"
 msgstr "limpieza de escritura de paquetes falló"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "error de protocolo: línea imposiblemente larga"
 
@@ -5397,77 +6131,90 @@
 msgid "packet write with format failed"
 msgstr "escritura de paquetes con formato falló"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr "fallo al escribir paquete - la data excede al tamaño máximo de paquete"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "escritura de paquetes falló"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "escritura de paquetes falló: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "error de lectura"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "el remoto se colgó de manera inesperada"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "error de protocolo: mal caracter de largo de línea: %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "error de protocolo: mal largo de línea %d"
 
-#: pkt-line.c:373
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "error remoto: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "Refrescando index"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "no es posible crear lstat hilado: %s"
 
-#: pretty.c:982
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "incapaz de analizar el formato --pretty"
 
-#: promisor-remote.c:23
-msgid "Remote with no URL"
-msgstr "Remoto sin URL"
+#: promisor-remote.c:30
+msgid "promisor-remote: unable to fork off fetch subprocess"
+msgstr "promisor-remote: no se puede bifurcar el subproceso de recuperación"
 
-#: promisor-remote.c:58
+#: promisor-remote.c:35 promisor-remote.c:37
+msgid "promisor-remote: could not write to fetch subprocess"
+msgstr "proiso-remote: no se pudo escribir para recuperar el subproceso"
+
+#: promisor-remote.c:41
+msgid "promisor-remote: could not close stdin to fetch subprocess"
+msgstr "promisor-remote: no se pudo cerrar stdin para recuperar el subproceso"
+
+#: promisor-remote.c:53
 #, c-format
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "nombre remoto promisor no puede comenzar con '/': %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "info de objeto: se espera flush tras argumentos"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Removiendo objetos duplicados"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "no se pudo comenzar `log`"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "no se pudo leer output de `log`"
 
-#: range-diff.c:98 sequencer.c:5143
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "no se pudo analizar commit '%s'"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5476,65 +6223,69 @@
 "no se pudo leer la primera línea de salida `log`: no comienza con 'commit ': "
 "'%s'"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "no se puede analizar git header '%.*s'"
 
-#: range-diff.c:301
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "falló al generar diff"
 
-#: range-diff.c:534 range-diff.c:536
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only y --right-only son mutuamente exclusivas"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "no se pudo leer el log para '%s'"
 
-#: read-cache.c:680
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "no agregará alias de archivo '%s' ('%s' ya existe en el index)"
 
-#: read-cache.c:696
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "no se puede crear un blob vacío en la base de datos de objetos"
 
-#: read-cache.c:718
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: solo puede agregar archivos regulares, symbolic links o git-directories"
 
-#: read-cache.c:723
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' no tiene un commit checked out"
 
-#: read-cache.c:775
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "no es posible indexar archivo '%s'"
 
-#: read-cache.c:794
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "no es posible agregar '%s' al index"
 
-#: read-cache.c:805
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "incapaz de correr stat en '%s'"
 
-#: read-cache.c:1330
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' parece ser un directorio y un archivo a la vez"
 
-#: read-cache.c:1536
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Refrescar index"
 
-#: read-cache.c:1651
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5543,7 +6294,7 @@
 "index.version configurado, pero el valor no es válido.\n"
 "Usando versión %i"
 
-#: read-cache.c:1661
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5552,139 +6303,143 @@
 "GIT_INDEX_VERSION configurado, pero el valor no es válido.\n"
 "Usando versión %i"
 
-#: read-cache.c:1717
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "mala firma 0x%08x"
 
-#: read-cache.c:1720
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "mala versión del índice %d"
 
-#: read-cache.c:1729
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "mala firma sha1 del archivo index"
 
-#: read-cache.c:1759
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "index usa %.4s extensiones, cosa que no entendemos"
 
-#: read-cache.c:1761
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "ignorando extensión %.4s"
 
-#: read-cache.c:1798
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "formato de index desconocido 0x%08x"
 
-#: read-cache.c:1814
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "campo nombre malformado en el index, cerca a ruta '%s'"
 
-#: read-cache.c:1871
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "entradas en stage desordenadas en index"
 
-#: read-cache.c:1874
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "múltiples entradas extrañas para archivo fusionado '%s'"
 
-#: read-cache.c:1877
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entradas de stage desordenadas para '%s'"
 
-#: read-cache.c:1983 read-cache.c:2271 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1619 builtin/add.c:532 builtin/check-ignore.c:181
-#: builtin/checkout.c:488 builtin/checkout.c:674 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:121 builtin/grep.c:507
-#: builtin/mv.c:145 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "archivo índice corrompido"
 
-#: read-cache.c:2124
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "no es posible crear hilo load_cache_entries: %s"
 
-#: read-cache.c:2137
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "no es posible unir hilo load_cache_entires: %s"
 
-#: read-cache.c:2170
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: falló al abrir el archivo index"
 
-#: read-cache.c:2174
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: no se puede hacer stat del index abierto"
 
-#: read-cache.c:2178
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: archivo index más pequeño de lo esperado"
 
-#: read-cache.c:2182
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: no se pudo mapear el archivo index"
 
-#: read-cache.c:2224
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "no es posible crear hilo load_index_extensions: %s"
 
-#: read-cache.c:2251
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "no es posible unir hilo load_index_extensions: %s"
 
-#: read-cache.c:2283
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "no se pudo refrescar el index compartido '%s'"
 
-#: read-cache.c:2330
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "index roto, se esperaba %s en %s, se obtuvo %s"
 
-#: read-cache.c:3026 strbuf.c:1171 wrapper.c:630 builtin/merge.c:1130
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "no se pudo cerrar '%s'"
 
-#: read-cache.c:3129 sequencer.c:2355 sequencer.c:4066
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "falló al convertir a un índice sparse"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "no se pudo definir '%s'"
 
-#: read-cache.c:3142
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "no es posible abrir el directorio de git: %s"
 
-#: read-cache.c:3154
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "no es posible eliminar el vinculo: %s"
 
-#: read-cache.c:3179
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "no se pudo arreglar bits de permisos en '%s'"
 
-#: read-cache.c:3328
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: no se puede eliminar a stage #0"
@@ -5714,7 +6469,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5723,7 +6481,7 @@
 "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"
+".       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 ""
@@ -5735,11 +6493,14 @@
 "s, squash <commit> = usar commit, pero fusionarlo en el commit previo\n"
 "f, fixup <commit> = como \"squash\", pero descarta el mensaje del log de "
 "este commit\n"
+"\t, a menos que se use -C, en cuyo caso\n"
+"\tmantiene solo el mensaje del commit; -c es lo mismo que -C\n"
+"\tpero abre el editor\n"
 "x, exec <commit> = ejecuta comando ( el resto de la línea) usando un shell\n"
 "b, break = parar aquí (continuar rebase luego con 'git rebase --continue')\n"
 "d, drop <commit> = eliminar commit\n"
 "l, label <label> = poner label al HEAD actual con un nombre\n"
-"t, reset <label> = reiniciar HEAD a el label\n"
+"t, reset <label> = reiniciar HEAD al label\n"
 "m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
 ".       crea un commit de fusión usando el mensaje original de\n"
 ".       fusión (o la línea de oneline, si no se especifica un mensaje\n"
@@ -5748,22 +6509,22 @@
 "Estas líneas pueden ser reordenadas; son ejecutadas desde arriba hacia "
 "abajo.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Rebase %s en %s (%d comando)"
 msgstr[1] "Rebase %s en %s (%d comandos)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:228
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 "\n"
-"No eliminar ninguna línea. Usa 'drop' explícitamente para borrar un commit \n"
+"No eliminar ninguna línea. Usa 'drop' explícitamente para borrar un commit\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:232
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5771,7 +6532,7 @@
 "\n"
 "Si eliminas una línea aquí EL COMMIT SE PERDERÁ.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:871
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5785,7 +6546,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:948
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5795,19 +6556,19 @@
 "Como sea, si quieres borrar todo, el rebase será abortado.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3463
-#: sequencer.c:3489 sequencer.c:5248 builtin/fsck.c:347 builtin/rebase.c:258
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "no se pudo escribir '%s'"
 
-#: rebase-interactive.c:116 builtin/rebase.c:190 builtin/rebase.c:216
-#: builtin/rebase.c:240
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "no se pudo escribir '%s'."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5816,7 +6577,7 @@
 "Peligro: algunos commits pueden haber sido botados de forma accidental.\n"
 "Commits botados (empezando con el más nuevo):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5834,14 +6595,14 @@
 "Los posibles comportamientos son: ignore,warn,error.\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2274
-#: builtin/rebase.c:176 builtin/rebase.c:201 builtin/rebase.c:227
-#: builtin/rebase.c:252
+#: 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 se puede leer '%s'."
 
-#: ref-filter.c:42 wt-status.c:1977
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "desaparecido"
 
@@ -5860,238 +6621,248 @@
 msgid "ahead %d, behind %d"
 msgstr "delante %d, detrás %d"
 
-#: ref-filter.c:165
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "formato esperado: %%(color:<color>)"
 
-#: ref-filter.c:167
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "color no reconocido: %%(color:%s)"
 
-#: ref-filter.c:189
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Valor entero esperado refname:lstrip=%s"
 
-#: ref-filter.c:193
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valor entero esperado refname:rstrip=%s"
 
-#: ref-filter.c:195
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argumento: %s no reconocido %%(%s)"
 
-#: ref-filter.c:250
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) no toma ningún argumento"
 
-#: ref-filter.c:272
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "%%(objectsize) no reconocido argumento: %s"
 
-#: ref-filter.c:280
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) no toma argumentos"
 
-#: ref-filter.c:292
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) no toma ningún argumento"
 
-#: ref-filter.c:301
+#: ref-filter.c:315
 #, c-format
-msgid "%%(subject) does not take arguments"
-msgstr "%%(subject) no toma ningún argumento"
+msgid "unrecognized %%(subject) argument: %s"
+msgstr "argumento %%(sujeto) no reconocido: %s"
 
-#: ref-filter.c:323
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "se esperaba %%(trailers:key=<value>)"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "%%(trailers) desconocidos, argumento: %s"
 
-#: ref-filter.c:352
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valor positivo esperado contents:lines=%s"
 
-#: ref-filter.c:354
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argumento %s no reconocido %%(contents)"
 
-#: ref-filter.c:369
+#: ref-filter.c:384
 #, c-format
-msgid "positive value expected objectname:short=%s"
-msgstr "valor positivo esperado objectname:short=%s"
+msgid "positive value expected '%s' in %%(%s)"
+msgstr "valor positivo esperado '%s' en %% (%s)"
 
-#: ref-filter.c:373
+#: ref-filter.c:388
 #, c-format
-msgid "unrecognized %%(objectname) argument: %s"
-msgstr "argumento: %s no reconocido %%(objectname)"
+msgid "unrecognized argument '%s' in %%(%s)"
+msgstr "argumento no reconocido:'%s' en %%(%s)"
 
-#: ref-filter.c:403
+#: ref-filter.c:402
+#, c-format
+msgid "unrecognized email option: %s"
+msgstr "opción de email desconocida: %s"
+
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "formato esperado: %%(align:<ancho>,<posición>)"
 
-#: ref-filter.c:415
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "posición desconocida: %s"
 
-#: ref-filter.c:422
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "ancho desconocido: %s"
 
-#: ref-filter.c:431
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argumento no reconocido para %%(align): %s"
 
-#: ref-filter.c:439
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "se esperaba un ancho positivo con el átomo %%(align)"
 
-#: ref-filter.c:457
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argumento: %s no reconocido %%(if)"
 
-#: ref-filter.c:559
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nombre mal formado de campo: %.*s"
 
-#: ref-filter.c:586
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nombre de campo desconocido: %.*s"
 
-#: ref-filter.c:590
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "no es un repositorio git, pero el campo '%.*s' requiere acceso al objeto data"
 
-#: ref-filter.c:714
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "formato: átomo %%(if) usado sin un átomo %%(then)"
 
-#: ref-filter.c:777
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "formato: átomo %%(then) usado sin átomo %%(if)"
 
-#: ref-filter.c:779
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "formato: átomo %%(then) usado más de una vez"
 
-#: ref-filter.c:781
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "formato: átomo %%(then) usado después de %%(else)"
 
-#: ref-filter.c:809
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "formato: átomo %%(else) usado sin un átomo %%(if)"
 
-#: ref-filter.c:811
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "formato: átomo %%(else) usado sin un átomo %%(then)"
 
-#: ref-filter.c:813
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "formato: átomo %%(else) usado más de una vez"
 
-#: ref-filter.c:828
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "formato: átomo %%(end) usado sin átomo correspondiente"
 
-#: ref-filter.c:885
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "formato de cadena mal formado %s"
 
-#: ref-filter.c:1486
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "no hay rama, rebasando %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(no hay rama, rebasando %s)"
 
-#: ref-filter.c:1489
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "(o hay rama, rebasando con HEAD desacoplado %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(no una rama, rebasando con HEAD desacoplado %s)"
 
-#: ref-filter.c:1492
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "no hay rama, comenzando biseccón en  %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(no hay rama, comenzando biseccón en %s)"
 
-#: ref-filter.c:1502
-msgid "no branch"
-msgstr "sin rama"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD desacoplado en %s)"
 
-#: ref-filter.c:1538 ref-filter.c:1747
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD desacoplado de %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(sin rama)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "falta objeto %s para %s"
 
-#: ref-filter.c:1548
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer falló en %s para %s"
 
-#: ref-filter.c:2001
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objeto mal formado en '%s'"
 
-#: ref-filter.c:2090
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorando referencia con nombre roto %s"
 
-#: ref-filter.c:2095 refs.c:657
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignorando referencia rota %s"
 
-#: ref-filter.c:2395
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "formato: falta átomo %%(end)"
 
-#: ref-filter.c:2495
-#, c-format
-msgid "option `%s' is incompatible with --merged"
-msgstr "opción `%s' es incompatible con --merged"
-
-#: ref-filter.c:2498
-#, c-format
-msgid "option `%s' is incompatible with --no-merged"
-msgstr "opción `%s' es incompatible con --no-merged"
-
-#: ref-filter.c:2508
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "nombre de objeto mal formado %s"
 
-#: ref-filter.c:2513
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "opción '%s' debe apuntar a un commit"
@@ -6101,172 +6872,163 @@
 msgid "%s does not point to a valid object!"
 msgstr "¡%s no apunta a ningún objeto válido!"
 
-#: refs.c:572
+#: refs.c:566
+#, 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"
+"of your new repositories, which will suppress this warning, call:\n"
+"\n"
+"\tgit config --global init.defaultBranch <name>\n"
+"\n"
+"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
+"'development'. The just-created branch can be renamed via this command:\n"
+"\n"
+"\tgit branch -m <name>\n"
+msgstr ""
+"Usando '%s' como el nombre de la rama inicial. Este nombre de rama "
+"predeterminado\n"
+"está sujeto a cambios. Para configurar el nombre de la rama inicial para "
+"usar en todos\n"
+"de sus nuevos repositorios, que suprimirán esta advertencia, llame a:\n"
+"\n"
+"\tgit config --global init.defaultBranch <nombre>\n"
+"\n"
+"Los nombres comúnmente elegidos en lugar de 'maestro' son 'principal', "
+"'troncal' y\n"
+"'desarrollo'. Se puede cambiar el nombre de la rama recién creada mediante "
+"este comando:\n"
+"\n"
+"\tgit branch -m <nombre>\n"
+
+#: refs.c:588
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "no se pudo recibir `%s`"
 
-#: refs.c:579
+#: refs.c:598
 #, c-format
 msgid "invalid branch name: %s = %s"
-msgstr "Nombre de rama inválido: %s = %s"
+msgstr "nombre de rama inválido: %s = %s"
 
-#: refs.c:655
+#: refs.c:674
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "ignorando referencia rota %s"
 
-#: refs.c:792
-#, c-format
-msgid "could not open '%s' for writing: %s"
-msgstr "no se pudo abrir '%s' para escritura: %s"
-
-#: refs.c:802 refs.c:853
-#, c-format
-msgid "could not read ref '%s'"
-msgstr "no se pudo leer la referencia '%s'"
-
-#: refs.c:808
-#, c-format
-msgid "ref '%s' already exists"
-msgstr "ref '%s' ya existe"
-
-#: refs.c:813
-#, c-format
-msgid "unexpected object ID when writing '%s'"
-msgstr "ID de objecto inesperado al escribir '%s'"
-
-#: refs.c:821 sequencer.c:408 sequencer.c:2721 sequencer.c:2925
-#: sequencer.c:2939 sequencer.c:3195 sequencer.c:5159 strbuf.c:1168
-#: wrapper.c:628
-#, c-format
-msgid "could not write to '%s'"
-msgstr "no se pudo escribir en '%s'"
-
-#: refs.c:848 strbuf.c:1166 wrapper.c:196 wrapper.c:366 builtin/am.c:719
-#: builtin/rebase.c:852
-#, c-format
-msgid "could not open '%s' for writing"
-msgstr "no se pudo abrir '%s' para escritura"
-
-#: refs.c:855
-#, c-format
-msgid "unexpected object ID when deleting '%s'"
-msgstr "ID de objecto inesperado al borrar '%s'"
-
-#: refs.c:986
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "log de ref %s tiene un vacío tras %s"
 
-#: refs.c:992
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "log de ref %s finalizado inesperadamente en %s"
 
-#: refs.c:1051
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "log de %s está vacío"
 
-#: refs.c:1143
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "rehusando actualizar ref con mal nombre '%s'"
 
-#: refs.c:1219
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref falló para ref '%s': %s"
 
-#: refs.c:2011
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "múltiples actualizaciones para ref '%s' no permitidas"
 
-#: refs.c:2098
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "actualizaciones de ref prohibidas dentro de ambiente de cuarentena"
 
-#: refs.c:2109
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "ref update abortado por el hook"
 
-#: refs.c:2209 refs.c:2239
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existe; no se puede crear '%s'"
 
-#: refs.c:2215 refs.c:2250
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "no se puede procesar '%s' y '%s' al mismo tiempo"
 
-#: refs/files-backend.c:1233
+#: refs/files-backend.c:1228
 #, c-format
 msgid "could not remove reference %s"
 msgstr "no se pudo eliminar la referencia %s"
 
-#: refs/files-backend.c:1247 refs/packed-backend.c:1541
-#: refs/packed-backend.c:1551
+#: refs/files-backend.c:1242 refs/packed-backend.c:1542
+#: refs/packed-backend.c:1552
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "no se pudo eliminar la referencia %s: %s"
 
-#: refs/files-backend.c:1250 refs/packed-backend.c:1554
+#: refs/files-backend.c:1245 refs/packed-backend.c:1555
 #, c-format
 msgid "could not delete references: %s"
 msgstr "no se pudo eliminar la referencia: %s"
 
-#: refspec.c:137
+#: refspec.c:170
 #, c-format
 msgid "invalid refspec '%s'"
 msgstr "refspec inválido: '%s'"
 
-#: remote.c:355
+#: remote.c:351
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr "config remote shorthand no puede comenzar con '/': %s"
 
-#: remote.c:403
+#: remote.c:399
 msgid "more than one receivepack given, using the first"
 msgstr "más de un receivepack dado, usando el primero"
 
-#: remote.c:411
+#: remote.c:407
 msgid "more than one uploadpack given, using the first"
 msgstr "más de un uploadpack dado, usando el primero"
 
-#: remote.c:594
+#: remote.c:590
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "No se pueden traer ambos %s y %s a %s"
 
-#: remote.c:598
+#: remote.c:594
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s por lo general hace seguimiento a %s, no a %s"
 
-#: remote.c:602
+#: remote.c:598
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s hace seguimiento tanto a %s como a %s"
 
-#: remote.c:670
+#: remote.c:666
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "llave '%s' de patrón no tuvo '*'"
 
-#: remote.c:680
+#: remote.c:676
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "valor '%s' del patrón no tiene '*'"
 
-#: remote.c:986
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "src refsoec %s: no concuerda con ninguno"
 
-#: remote.c:991
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "src refspec %s concuerda con más de uno"
@@ -6275,7 +7037,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1006
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6299,7 +7061,7 @@
 "Ninguno funcionó así que nos dimos por vencidos. Tienes que especificar el "
 "full ref."
 
-#: remote.c:1026
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6310,7 +7072,7 @@
 "¿Quisiste crear un branch nuevo mediante un push a\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1031
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6321,7 +7083,7 @@
 "Did you mean to create a new tag by pushing to\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1036
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6332,7 +7094,7 @@
 "¿Quisiste crear un tag nuevo mediante un push a\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1041
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6343,115 +7105,115 @@
 "¿Quisiste crear un tag nuevo mediante un push a\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1077
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s no puede ser resolver a un branch"
 
-#: remote.c:1088
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "no es posible borrar '%s': ref remoto no existe"
 
-#: remote.c:1100
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "dst refspec %s concuerda con más de uno"
 
-#: remote.c:1107
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "dst ref %s recibe de más de un src"
 
-#: remote.c:1610 remote.c:1711
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD no apunta a ninguna rama"
 
-#: remote.c:1619
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "no existe tal rama: '%s'"
 
-#: remote.c:1622
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "no se ha configurado upstream para la rama '%s'"
 
-#: remote.c:1628
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la rama '%s' de upstream no es guardad como rama de rastreo remoto"
 
-#: remote.c:1643
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "destino de push '%s' en el remoto '%s' no tiene una rama de rastreo local"
 
-#: remote.c:1655
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la rama '%s' no tiene remoto para enviar"
 
-#: remote.c:1665
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "refspecs del push para '%s' no incluyen '%s'"
 
-#: remote.c:1678
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "push no tiene destino (push.default es 'nada')"
 
-#: remote.c:1700
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "no se puede resolver push 'simple' para un destino único"
 
-#: remote.c:1826
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "no se puedo encontrar ref remota %s"
 
-#: remote.c:1839
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignorando ref graciosa '%s' localmente"
 
-#: remote.c:2002
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Tu rama está basada en '%s', pero upstream ha desaparecido.\n"
 
-#: remote.c:2006
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (usa \"git branch --unset-upstream\" para arreglar)\n"
 
-#: remote.c:2009
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Tu rama está actualizada con '%s'.\n"
 
-#: remote.c:2013
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Tu rama y '%s' refieren a commits diferentes.\n"
 
-#: remote.c:2016
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (usa \"%s\" para detalles)\n"
 
-#: remote.c:2020
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Tu rama está adelantada a '%s' por %d commit.\n"
 msgstr[1] "Tu rama está adelantada a '%s' por %d commits.\n"
 
-#: remote.c:2026
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (usa \"git push\" para publicar tus commits locales)\n"
 
-#: remote.c:2029
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6461,11 +7223,11 @@
 msgstr[1] ""
 "Tu rama está detrás de '%s' por %d commits, y puede ser avanzada rápido.\n"
 
-#: remote.c:2037
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (usa \"git pull\" para actualizar tu rama local)\n"
 
-#: remote.c:2040
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6480,11 +7242,11 @@
 "Tu rama y '%s' han divergido,\n"
 "y tienen %d y %d commits diferentes cada una respectivamente.\n"
 
-#: remote.c:2050
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (usa \"git pull\" para fusionar la rama remota en la tuya)\n"
 
-#: remote.c:2241
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "no se puede leer el nombre de objeto '%s'"
@@ -6504,101 +7266,96 @@
 msgid "replace depth too high for object %s"
 msgstr "remplazar profundiad muy elevada para objeto %s"
 
-#: repository.c:94 builtin/init-db.c:188
-#, c-format
-msgid "The hash algorithm %s is not supported in this build."
-msgstr "El algoritmo hash %s no está soportado en este build."
-
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "MERGE_RR corrupto"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "incapaz de escribir entrada rerere"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "hubieron errores mientras se escribía '%s' (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "falló al hacer flush '%s'"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "no se pudo analizar hunks en conflicto en '%s'"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "falló utime() en '%s'"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "escribiendo '%s' falló"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' puesto en stage usando resolución previa."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Resolución guardada para '%s'."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "'%s' resuelto usando resolución previa."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "no se puede desvincular stray '%s'"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Resolución precargada para '%s'"
 
-#: rerere.c:881 submodule.c:2078 builtin/log.c:1891
-#: builtin/submodule--helper.c:1454 builtin/submodule--helper.c:1466
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "no se pudo crear el directorio '%s'"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "falló al actualizar estado conflictivo en '%s'"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "resolución para '%s' no recordada"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "no se puede desvincular '%s'"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Actualizada preimagen para '%s'"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Se olvidó resolución para '%s'\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "no es posible abrir directorio rr-cache"
 
@@ -6606,38 +7363,38 @@
 msgid "could not determine HEAD revision"
 msgstr "no se pudo determinar revisión HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3318
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "falló al encontrar árbol de %s"
 
-#: revision.c:2661
+#: revision.c:2343
+msgid "--unpacked=<packfile> no longer supported"
+msgstr "--unpacked=<packfile>  ya no es soportado"
+
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "tu rama actual parece estar rota"
 
-#: revision.c:2664
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "tu rama actual '%s' no tiene ningún commit todavía"
 
-#: revision.c:2873
-msgid "--first-parent is incompatible with --bisect"
-msgstr "--first-parent es incompatible con --bisect"
-
-#: revision.c:2877
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L no soporta todavía formatos de diff fuera de -p y -s"
 
-#: run-command.c:763
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "falló al abrir /dev/null"
 
-#: run-command.c:1269
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "no es posible crear hilo async: %s"
 
-#: run-command.c:1333
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6647,34 +7404,43 @@
 "Puedes desactivar esta advertencias con `git config advice.ignoredHook "
 "false`."
 
-#: send-pack.c:145
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "flush packet inesperado mientras se leía estatus de desempaquetado remoto"
 
-#: send-pack.c:147
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "no es posible analizar el estado de desempaquetado remoto: %s"
 
-#: send-pack.c:149
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "desempaquetado remoto falló: %s"
 
-#: send-pack.c:308
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "falló al firmar el certificado de push"
 
-#: send-pack.c:394
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr ""
+"send-pack: no es posible bifurcar el proceso de búsqueda en un subproceso"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "negociación push falló; procediendo con el push de todas formas"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "el destino no soporta el algoritmo de hash de este repositorio"
 
-#: send-pack.c:403
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "el final receptor no soporta --signed push"
 
-#: send-pack.c:405
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -6682,47 +7448,47 @@
 "no se manda un certificado de push ya que el destino no soporta push firmado "
 "(--signed )"
 
-#: send-pack.c:417
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "el destino no soporta push atómicos (--atomic)"
 
-#: send-pack.c:422
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "el destino no soporta opciones de push"
 
-#: sequencer.c:192
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "mensaje de commit inválido, modo cleanup '%s'"
 
-#: sequencer.c:297
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "no se pudo borrar '%s'"
 
-#: sequencer.c:316 builtin/rebase.c:743 builtin/rebase.c:1582 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "no se pudo eliminar'%s'"
 
-#: sequencer.c:326
+#: sequencer.c:354
 msgid "revert"
 msgstr "revertir"
 
-#: sequencer.c:328
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:330
+#: sequencer.c:358
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:332
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "acción desconocida: %d"
 
-#: sequencer.c:390
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6730,7 +7496,7 @@
 "después de resolver los conflictos, marca las rutas corregidas\n"
 "con 'git add <rutas>' o 'git rm <rutas>'"
 
-#: sequencer.c:393
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6740,43 +7506,43 @@
 "con 'git add <rutas>' o 'git rm <rutas>'\n"
 "y haz un commit del resultado con 'git commit'"
 
-#: sequencer.c:406 sequencer.c:2921
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "no se pudo bloquear '%s'"
 
-#: sequencer.c:413
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
+#, c-format
+msgid "could not write to '%s'"
+msgstr "no se pudo escribir en '%s'"
+
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "no se pudo escribir EOL en '%s'"
 
-#: sequencer.c:418 sequencer.c:2726 sequencer.c:2927 sequencer.c:2941
-#: sequencer.c:3203
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "falló al finalizar '%s'"
 
-#: sequencer.c:431 sequencer.c:1620 sequencer.c:2746 sequencer.c:3185
-#: sequencer.c:3294 builtin/am.c:249 builtin/commit.c:786 builtin/merge.c:1128
-#, c-format
-msgid "could not read '%s'"
-msgstr "no se pudo leer '%s'"
-
-#: sequencer.c:457
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "tus cambios locales serán sobreescritos por %s."
 
-#: sequencer.c:461
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "realiza un commit con tus cambios o aplica un stash para proceder."
 
-#: sequencer.c:493
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: avance rápido"
 
-#: sequencer.c:532 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Modo cleanup inválido %s"
@@ -6784,65 +7550,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:626
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Incapaz de escribir el nuevo archivo índice"
 
-#: sequencer.c:643
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "no es posible actualizar el árbol de la caché"
 
-#: sequencer.c:657
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "no se pudo resolver el commit de HEAD"
 
-#: sequencer.c:737
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "no hay llave presente en '%.*s'"
 
-#: sequencer.c:748
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "no es posible dequote para '%s'"
 
-#: sequencer.c:785 wrapper.c:198 wrapper.c:368 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1125 builtin/rebase.c:896
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "no se pudo abrir '%s' para lectura"
 
-#: sequencer.c:795
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' ya proporcionado"
 
-#: sequencer.c:800
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' ya proporcionado"
 
-#: sequencer.c:805
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' ya proporcionado"
 
-#: sequencer.c:809
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variable desconocida '%s'"
 
-#: sequencer.c:814
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "falta 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:816
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "falta 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:818
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "falta 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:867
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6872,11 +7638,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1141
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "hook 'prepare-commit-msg' falló"
 
-#: sequencer.c:1147
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6893,7 +7659,7 @@
 "Tu nombre y correo fueron configurados automáticamente basados\n"
 "en tu usuario y nombre de host. Por favor verifica que son correctos.\n"
 "Tu puedes suprimir este mensaje configurándolos de forma explicita. Ejecuta "
-"el \n"
+"el\n"
 "siguiente comando y sigue las instrucciones de tu editor\n"
 " para modificar tu archivo de configuración:\n"
 "\n"
@@ -6903,7 +7669,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1160
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6918,7 +7684,7 @@
 msgstr ""
 "Tu nombre y correo fueron configurados automáticamente basados\n"
 "en tu usuario y nombre de host. Por favor verifica que son correctos.\n"
-"Tu puedes suprimir este mensaje configurándolos de forma explicita: \n"
+"Tu puedes suprimir este mensaje configurándolos de forma explicita:\n"
 "\n"
 "    git config --global user.name \"Tu nombre\"\n"
 "    git config --global user.email you@example.com\n"
@@ -6927,329 +7693,342 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1202
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "no se pudo revisar el commit recién creado"
 
-#: sequencer.c:1204
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "no se pudo analizar el commit recién creado"
 
-#: sequencer.c:1250
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "no se pudo resolver HEAD tras crear el commit"
 
-#: sequencer.c:1252
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "HEAD desacoplado"
 
-#: sequencer.c:1256
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (commit-raíz)"
 
-#: sequencer.c:1277
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "no se pudo analizar HEAD"
 
-#: sequencer.c:1279
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "¡HEAD %s no es un commit!"
 
-#: sequencer.c:1283 sequencer.c:1357 builtin/commit.c:1579
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "no se pudo analizar el commit de HEAD"
 
-#: sequencer.c:1335 sequencer.c:1980
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "no es posible analizar el autor del commit"
 
-#: sequencer.c:1346 builtin/am.c:1566 builtin/merge.c:695
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree falló al escribir el árbol"
 
-#: sequencer.c:1379 sequencer.c:1450
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "no se puede leer el mensaje del commit de '%s'"
 
-#: sequencer.c:1406 builtin/am.c:1588 builtin/commit.c:1680 builtin/merge.c:894
-#: builtin/merge.c:919
+#: sequencer.c:1485 sequencer.c:1517
+#, c-format
+msgid "invalid author identity '%s'"
+msgstr "identidad de autor inválida '%s'"
+
+#: sequencer.c:1491
+msgid "corrupt author: missing date information"
+msgstr "autor corrupto: falta información"
+
+#: 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
 msgid "failed to write commit object"
 msgstr "falló al escribir el objeto commit"
 
-#: sequencer.c:1433 sequencer.c:4118
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "no se puede actualizar %s"
 
-#: sequencer.c:1481
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "no se pudo analizar commit %s"
 
-#: sequencer.c:1486
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "no se pudo analizar el commit padre %s"
 
-#: sequencer.c:1569 sequencer.c:1680
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "comando desconocido: %d"
 
-#: sequencer.c:1627 sequencer.c:1652
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Esta es una combinación de %d commits."
-
-#: sequencer.c:1637
-msgid "need a HEAD to fixup"
-msgstr "se necesita un HEAD para arreglar"
-
-#: sequencer.c:1639 sequencer.c:3230
-msgid "could not read HEAD"
-msgstr "no se pudo leer HEAD"
-
-#: sequencer.c:1641
-msgid "could not read HEAD's commit message"
-msgstr "no se pudo leer el mensaje de commit de HEAD"
-
-#: sequencer.c:1647
-#, c-format
-msgid "cannot write '%s'"
-msgstr "no se puede escribir '%s'"
-
-#: sequencer.c:1654 git-rebase--preserve-merges.sh:496
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Este es el mensaje del 1er commit:"
 
-#: sequencer.c:1662
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "no se puede leer el mensaje del commit de %s"
-
-#: sequencer.c:1669
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Este es el mensaje del commit #%d:"
 
-#: sequencer.c:1675
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "El mensaje del 1er commit será saltado:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "El mensaje del commit #%d será saltado:"
 
-#: sequencer.c:1763
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Esta es una combinación de %d commits."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "no se puede escribir '%s'"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "se necesita un HEAD para arreglar"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "no se pudo leer HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "no se pudo leer el mensaje de commit de HEAD"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "no se puede leer el mensaje del commit de %s"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "tu archivo índice no está fusionado."
 
-#: sequencer.c:1770
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "no se puede arreglar el commit raíz"
 
-#: sequencer.c:1789
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "el commit %s es una fusión pero no se proporcionó la opción -m."
 
-#: sequencer.c:1797 sequencer.c:1805
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "el commit %s no tiene un padre %d"
 
-#: sequencer.c:1811
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "no se puede obtener el mensaje de commit para %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1830
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: no se puede analizar el commit padre %s"
 
-#: sequencer.c:1895
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "no se puede renombrar '%s' a '%s'"
 
-#: sequencer.c:1952
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "no se pudo revertir %s... %s"
 
-#: sequencer.c:1953
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "no se pudo aplicar %s... %s"
 
-#: sequencer.c:1972
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "botando $%s %s -- contenidos del parche ya están en upstream\n"
 
-#: sequencer.c:2030
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: falló al leer el índice"
 
-#: sequencer.c:2037
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: falló al refrescar el índice"
 
-#: sequencer.c:2114
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s no acepta los argumentos: '%s'"
 
-#: sequencer.c:2123
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "faltan argumentos para para %s"
 
-#: sequencer.c:2154
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "no se puede analizar '%s'"
 
-#: sequencer.c:2215
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "línea inválida %d: %.*s"
 
-#: sequencer.c:2226
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "no se puede  '%s' sin un commit previo"
 
-#: sequencer.c:2310
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "cancelando cherry-pick en progreso"
 
-#: sequencer.c:2317
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "cancelando revert en progreso"
 
-#: sequencer.c:2361
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "por favor arregle esto usando 'git rebase --edit-todo'."
 
-#: sequencer.c:2363
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "hoja de instrucciones inutilizable: '%s'"
 
-#: sequencer.c:2368
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "ningún commit analizado."
 
-#: sequencer.c:2379
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "no se puede realizar cherry-pick durante un revert."
 
-#: sequencer.c:2381
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "no se puede realizar un revert durante un cherry-pick."
 
-#: sequencer.c:2459
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valor inválido para %s: %s"
 
-#: sequencer.c:2556
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "squash-onto inservible"
 
-#: sequencer.c:2576
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "hoja de opciones mal formada: '%s'"
 
-#: sequencer.c:2664 sequencer.c:4469
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "conjunto de commits vacío entregado"
 
-#: sequencer.c:2680
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "revert ya está en progreso"
 
-#: sequencer.c:2682
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "intenta \"git revert (--continue | --quit | %s --abort)\""
 
-#: sequencer.c:2685
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "cherry-pick ya está en progreso"
 
-#: sequencer.c:2687
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "intenta \"git cherry-pick (--continue | --quit | %s --abort)\""
 
-#: sequencer.c:2701
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "no se pudo crear un directorio secuenciador '%s'"
 
-#: sequencer.c:2716
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "no se pudo bloquear HEAD"
 
-#: sequencer.c:2776 sequencer.c:4206
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "ningún cherry-pick o revert en progreso"
 
-#: sequencer.c:2778 sequencer.c:2789
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "no se puede resolver HEAD"
 
-#: sequencer.c:2780 sequencer.c:2824
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "no se puede abortar de una rama por nacer"
 
-#: sequencer.c:2810 builtin/grep.c:744
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "no se puede abrir '%s'"
 
-#: sequencer.c:2812
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "no se puede leer '%s': %s"
 
-#: sequencer.c:2813
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "final de archivo inesperado"
 
-#: sequencer.c:2819
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "archivo HEAD de pre-cherry-pick guardado '%s' está corrupto"
 
-#: sequencer.c:2830
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "Parece que se ha movido HEAD. No se hace rebobinado, ¡revisa tu HEAD!"
 
-#: sequencer.c:2871
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "no hay revert en progreso"
 
-#: sequencer.c:2879
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "ningún cherry-pick en progreso"
 
-#: sequencer.c:2889
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "falló al escribir el commit"
 
-#: sequencer.c:2896
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "no hay nada que saltar"
 
-#: sequencer.c:2899
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7258,16 +8037,16 @@
 "¿ya has hecho el commit?\n"
 "intenta \"git %s --continue\""
 
-#: sequencer.c:3060 sequencer.c:4098
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "no se puede leer HEAD"
 
-#: sequencer.c:3077
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "no se pudo copiar '%s' a '%s'"
 
-#: sequencer.c:3085
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7286,27 +8065,27 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3095
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "No se pudo aplicar %s... %.*s"
 
-#: sequencer.c:3102
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "No se pudo fusionar %.*s"
 
-#: sequencer.c:3116 sequencer.c:3120 builtin/difftool.c:641
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "no se pudo copiar '%s' a '%s'"
 
-#: sequencer.c:3132
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Ejecutando: %s\n"
 
-#: sequencer.c:3147
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7321,11 +8100,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3153
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "y se hicieron cambios al índice y/o árbol de trabajo\n"
 
-#: sequencer.c:3159
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7342,90 +8121,90 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3220
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nombre de label ilegal: '%.*s'"
 
-#: sequencer.c:3274
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "escribiendo commit raíz falso"
 
-#: sequencer.c:3279
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "escribiendo squash-onto"
 
-#: sequencer.c:3363
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "no se pudo resolver '%s'"
 
-#: sequencer.c:3394
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "no se puede fusionar sin una versión actual"
 
-#: sequencer.c:3416
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "no se puede analizar '%.*s'"
 
-#: sequencer.c:3425
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "nada para fusionar: '%.*s'"
 
-#: sequencer.c:3437
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "fusión octopus no puede ser ejecutada en la punta de un [nuevo root]"
 
-#: sequencer.c:3453
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "no se puede leer el mensaje del commit '%s'"
 
-#: sequencer.c:3613
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "no se pudo intentar fusionar '%.*s'"
 
-#: sequencer.c:3629
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "fusión: No se puede escribir el nuevo archivo índice"
 
-#: sequencer.c:3703
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "No se puede ejecutar autostash"
 
-#: sequencer.c:3706
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Respuesta de stash inesperada: '%s'"
 
-#: sequencer.c:3712
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "No se pudo crear el directorio para '%s'"
 
-#: sequencer.c:3715
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Autostash creado: %s\n"
 
-#: sequencer.c:3719
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "no se pudo reset --hard"
 
-#: sequencer.c:3744
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Autostash aplicado.\n"
 
-#: sequencer.c:3756
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "no se puede guardar %s"
 
-#: sequencer.c:3759
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7437,34 +8216,29 @@
 "Puedes ejecutar \"git stash pop\" o \"git stash drop\" en cualquier "
 "momento.\n"
 
-#: sequencer.c:3764
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "Apicar autostash resultó en conflictos."
 
-#: sequencer.c:3765
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Autostash existe; creando una nueva entrada stash."
 
-#: sequencer.c:3857
-#, c-format
-msgid "%s: not a valid OID"
-msgstr "%s no es OID válido"
-
-#: sequencer.c:3862 git-rebase--preserve-merges.sh:779
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "no se puede desacoplar HEAD"
 
-#: sequencer.c:3877
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Detenido en HEAD\n"
 
-#: sequencer.c:3879
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Detenido en %s\n"
 
-#: sequencer.c:3887
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7485,58 +8259,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Aplicando rebase (%d/%d)%s"
 
-#: sequencer.c:3976
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Detenido en %s...  %.*s\n"
 
-#: sequencer.c:4047
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "comando desconocido %d"
 
-#: sequencer.c:4106
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "no se puede leer orig-head"
 
-#: sequencer.c:4111
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "no se puede leer 'onto'"
 
-#: sequencer.c:4125
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "no se puede actualizar HEAD a %s"
 
-#: sequencer.c:4185
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Rebase aplicado satisfactoriamente y actualizado %s.\n"
 
-#: sequencer.c:4218
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "no se puede realizar rebase: Tienes cambios fuera del área de stage."
 
-#: sequencer.c:4227
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "no se puede arreglar un commit no existente"
 
-#: sequencer.c:4229
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "archivo inválido: '%s'"
 
-#: sequencer.c:4231
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contenido inválido: '%s'"
 
-#: sequencer.c:4234
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7547,50 +8321,50 @@
 "un commit con estos\n"
 "primero y luego ejecuta 'git rebase --continue' de nuevo."
 
-#: sequencer.c:4270 sequencer.c:4309
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "no se pudo escribir el archivo: '%s'"
 
-#: sequencer.c:4324
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "no se puede eliminar CHERRY_PICK_HEAD"
 
-#: sequencer.c:4331
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "no se pudo realizar el commit con los cambios en el área de stage."
 
-#: sequencer.c:4446
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: no se puede aplicar cherry-pick a un %s"
 
-#: sequencer.c:4450
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisión errónea"
 
-#: sequencer.c:4485
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "no se puede revertir como commit inicial"
 
-#: sequencer.c:4962
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: opciones desconocidas"
 
-#: sequencer.c:4965
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: error preparando revisiones"
 
-#: sequencer.c:5206 sequencer.c:5223
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "nada que hacer"
 
-#: sequencer.c:5242
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "no se pudo saltar los comandos pick innecesarios"
 
-#: sequencer.c:5336
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "este script ya fue reorganizado."
 
@@ -7647,85 +8421,89 @@
 msgid "this operation must be run in a work tree"
 msgstr "esta operación debe ser realizada en un árbol de trabajo"
 
-#: setup.c:604
+#: setup.c:661
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Se esperaba versión de git repo  <= %d, encontrada %d"
 
-#: setup.c:612
+#: setup.c:669
 msgid "unknown repository extensions found:"
 msgstr "se encontró extensión de repositorio desconocida:"
 
-#: setup.c:631
+#: setup.c:681
+msgid "repo version is 0, but v1-only extensions found:"
+msgstr "versión de repo es 0, pero extensión v1-only encontrada:"
+
+#: setup.c:700
 #, c-format
 msgid "error opening '%s'"
 msgstr "error abriendo '%s'"
 
-#: setup.c:633
+#: setup.c:702
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "muy grande para ser un archivo .git: '%s'"
 
-#: setup.c:635
+#: setup.c:704
 #, c-format
 msgid "error reading %s"
 msgstr "error leyendo %s"
 
-#: setup.c:637
+#: setup.c:706
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "formato gitfile inválido: %s"
 
-#: setup.c:639
+#: setup.c:708
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "no hay ruta en gitfile: %s"
 
-#: setup.c:641
+#: setup.c:710
 #, c-format
 msgid "not a git repository: %s"
 msgstr "no es un repositorio git: %s"
 
-#: setup.c:743
+#: setup.c:812
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' muy grande"
 
-#: setup.c:757
+#: setup.c:826
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "no es un repositorio git: '%s'"
 
-#: setup.c:786 setup.c:788 setup.c:819
+#: setup.c:855 setup.c:857 setup.c:888
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "no se puede aplicar chdir a '%s'"
 
-#: setup.c:791 setup.c:847 setup.c:857 setup.c:896 setup.c:904
+#: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
 msgid "cannot come back to cwd"
 msgstr "no se puede volver a cwd"
 
-#: setup.c:918
+#: setup.c:987
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "falló al determinar '%*s%s%s'"
 
-#: setup.c:1156
+#: setup.c:1225
 msgid "Unable to read current working directory"
 msgstr "Incapaz de leer el directorio de trabajo actual"
 
-#: setup.c:1165 setup.c:1171
+#: setup.c:1234 setup.c:1240
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "no se puede cambiar a '%s'"
 
-#: setup.c:1176
+#: setup.c:1245
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr ""
 "no es un repositorio git (ni ninguno de los directorios superiores): %s"
 
-#: setup.c:1182
+#: setup.c:1251
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -7735,7 +8513,7 @@
 "Parando en el límite del sistema de archivos "
 "(GIT_DISCOVERY_ACROSS_FILESYSTEM no establecido)."
 
-#: setup.c:1293
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7744,413 +8522,69 @@
 "problema con el valor del modo de archivo core.sharedRepository (0%.3o).\n"
 "El dueño de los archivos tiene que tener permisos de lectura y escritura."
 
-#: setup.c:1340
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "falló al abrir /dev/null o dup"
 
-#: setup.c:1355
+#: setup.c:1432
 msgid "fork failed"
 msgstr "falló fork"
 
-#: setup.c:1360
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "falló setsid"
 
-#: sha1-file.c:470
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "intentando usar sparse-index sin modo cono"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "no es posible actualizar el cache del árbol, manteniendo full"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "objeto directorio %s no existe; revisa .git/objects/info/alternates"
-
-#: sha1-file.c:521
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "incapaz de normalizar la ruta de objeto alterno: %s"
-
-#: sha1-file.c:593
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: ignorando espacios de objetos alternos, anidado muy profundo"
-
-#: sha1-file.c:600
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "incapaz de normalizar directorio de objeto: %s"
-
-#: sha1-file.c:643
-msgid "unable to fdopen alternates lockfile"
-msgstr "no es posible hacer fdopen en lockfile alternos"
-
-#: sha1-file.c:661
-msgid "unable to read alternates file"
-msgstr "no es posible leer archivos alternos"
-
-#: sha1-file.c:668
-msgid "unable to move new alternates file into place"
-msgstr "no es posible mover archivos alternos en el lugar"
-
-#: sha1-file.c:703
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "ruta '%s' no existe"
-
-#: sha1-file.c:724
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"repositorio de referencia '%s' como un checkout vinculado no es soportado "
-"todavía."
-
-#: sha1-file.c:730
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "repositorio de referencia '%s' no es un repositorio local."
-
-#: sha1-file.c:736
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "repositorio de referencia '%s' es superficial (shallow)"
-
-#: sha1-file.c:744
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "repositorio de referencia '% s' está injertado"
-
-#: sha1-file.c:804
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "línea inválida mientras se analizaban refs alternas: %s"
-
-#: sha1-file.c:954
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "intentando usar mmap %<PRIuMAX> sobre límite %<PRIuMAX>"
-
-#: sha1-file.c:975
-msgid "mmap failed"
-msgstr "mmap falló"
-
-#: sha1-file.c:1139
-#, c-format
-msgid "object file %s is empty"
-msgstr "archivo de objeto %s está vacío"
-
-#: sha1-file.c:1274 sha1-file.c:2454
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "objeto perdido corrupto '%s'"
-
-#: sha1-file.c:1276 sha1-file.c:2458
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "basura al final del objeto perdido '%s'"
-
-#: sha1-file.c:1318
-msgid "invalid object type"
-msgstr "tipo de objeto inválido"
-
-#: sha1-file.c:1402
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "no es posible desempacar header %s con --allow-unknown-type"
-
-#: sha1-file.c:1405
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "incapaz de desempaquetar header %s"
-
-#: sha1-file.c:1411
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "no es posible analizar header %s con --allow-unknown-type"
-
-#: sha1-file.c:1414
-#, c-format
-msgid "unable to parse %s header"
-msgstr "incapaz de analizar header %s"
-
-#: sha1-file.c:1640
-#, c-format
-msgid "failed to read object %s"
-msgstr "falló al leer objeto %s"
-
-#: sha1-file.c:1644
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "reemplazo %s no encontrado para %s"
-
-#: sha1-file.c:1648
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "objeto perdido %s (guardado en %s) está corrompido"
-
-#: sha1-file.c:1652
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "paquete de objeto %s (guardado en %s) está corrompido"
-
-#: sha1-file.c:1757
-#, c-format
-msgid "unable to write file %s"
-msgstr "no es posible escribir archivo %s"
-
-#: sha1-file.c:1764
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "no se pudo poner permisos a '%s'"
-
-#: sha1-file.c:1771
-msgid "file write error"
-msgstr "falló de escritura"
-
-#: sha1-file.c:1791
-msgid "error when closing loose object file"
-msgstr "error cerrando el archivo de objeto suelto"
-
-#: sha1-file.c:1856
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"permisos insuficientes para agregar un objeto a la base de datos del "
-"repositorio %s"
-
-#: sha1-file.c:1858
-msgid "unable to create temporary file"
-msgstr "no es posible crear un archivo temporal"
-
-#: sha1-file.c:1882
-msgid "unable to write loose object file"
-msgstr "no es posible escribir el archivo de objeto suelto"
-
-#: sha1-file.c:1888
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "no es posible desinflar el objeto nuevo %s (%d)"
-
-#: sha1-file.c:1892
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "deflateEnd en objeto %s falló (%d)"
-
-#: sha1-file.c:1896
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "confundido por fuente de data de objetos inestable para %s"
-
-#: sha1-file.c:1906 builtin/pack-objects.c:1085
-#, c-format
-msgid "failed utime() on %s"
-msgstr "falló utime() en %s"
-
-#: sha1-file.c:1983
-#, c-format
-msgid "cannot read object for %s"
-msgstr "no se pudo leer el objeto para %s"
-
-#: sha1-file.c:2022
-msgid "corrupt commit"
-msgstr "commit corrupto"
-
-#: sha1-file.c:2030
-msgid "corrupt tag"
-msgstr "tag corrupto"
-
-#: sha1-file.c:2130
-#, c-format
-msgid "read error while indexing %s"
-msgstr "error leyendo al indexar %s"
-
-#: sha1-file.c:2133
-#, c-format
-msgid "short read while indexing %s"
-msgstr "lectura corta al indexar %s"
-
-#: sha1-file.c:2206 sha1-file.c:2216
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: falló al insertar en la base de datos"
-
-#: sha1-file.c:2222
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: tipo de archivo no soportado"
-
-#: sha1-file.c:2246
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s no es objeto válido"
-
-#: sha1-file.c:2248
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s no es un objeto '%s' válido"
-
-#: sha1-file.c:2275 builtin/index-pack.c:155
-#, c-format
-msgid "unable to open %s"
-msgstr "no es posible abrir %s"
-
-#: sha1-file.c:2465 sha1-file.c:2518
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "hash no concuerda para %s (se esperaba %s)"
-
-#: sha1-file.c:2489
-#, c-format
-msgid "unable to mmap %s"
-msgstr "no es posible hacer mmap a %s"
-
-#: sha1-file.c:2494
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "incapaz de desempaquetar header de %s"
-
-#: sha1-file.c:2500
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "incapaz de analizar header de %s"
-
-#: sha1-file.c:2511
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "no es posible desempaquetar contenidos de %s"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "SHA1 %s corto es ambiguo"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Los candidatos son:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git normalmente nunca crea una ref que termine con 40 caracteres hex\n"
-"porque esto sería ignorado cuando solo se especifiquen 40-hex. Estas refs\n"
-"tal vez sean creadas por error. Por ejemplo,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"donde \"$br\" está de alguna manera vacía y una ref de 40-hex es creada. Por "
-"favor\n"
-"examina estas refs y tal vez bórralas. Silencia este mensaje \n"
-"ejecutando \"git config advice.objectNameWarning false\""
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "log para '%.*s' solo va hasta %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "log para '%.*s' solo tiene %d entradas"
-
-#: sha1-name.c:1689
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "la ruta '%s' existe en disco, pero no en '%.*s'"
-
-#: sha1-name.c:1695
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"ruta '%s' existe, pero no '%s'\n"
-"ayuda: ¿Quisiste decir '%.*s:%s' o '%.*s:./%s'?"
-
-#: sha1-name.c:1704
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "ruta '%s' no existe en '%.*s'"
-
-#: sha1-name.c:1732
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"ruta '%s' está en el index, pero no en stage %d\n"
-"ayuda:¿Quisiste decir: '%d:%s'?"
-
-#: sha1-name.c:1748
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"ruta '%s' está en el index, pero no '%s'\n"
-"ayuda:¿Quisiste decir ':%d:%s' o ':%d:./%s'?"
-
-#: sha1-name.c:1756
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "ruta '%s' existe en el disco, pero no en el index"
-
-#: sha1-name.c:1758
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "ruta '%s' no existe (ni en disco ni en el index)"
-
-#: sha1-name.c:1771
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-"la sintaxis de ruta relativa no se puede usar fuera del directorio de trabajo"
-
-#: sha1-name.c:1909
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "nombre de objeto no válido: '%.*s'."
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "la entrada de índice es un directorio, pero no escazo (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8158,14 +8592,20 @@
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u bytes/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1175
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
+#, c-format
+msgid "could not open '%s' for writing"
+msgstr "no se pudo abrir '%s' para escritura"
+
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "no se pudo editar '%s'"
@@ -8215,22 +8655,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "falló realizar stage a los .gitmodules actualizados"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "en el submódulo no poblado '%s'"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "El patrón de ruta '%s' está en el submódulo '%.*s'"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "mal argumento --ignore-submodules: %s"
 
-#: submodule.c:815
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8239,50 +8679,50 @@
 "Submódulo en el commit %s en ruta: '%s' colisiona con un submódulo llamado "
 "igual. Saltandolo."
 
-#: submodule.c:910
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "entrada de submódulo '%s' (%s) es un %s, no un commit"
 
-#: submodule.c:995
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr ""
-"no se pudo ejecutar comando 'git rev-list <commits> --not --remotes -n 1' en "
+"No se pudo ejecutar comando 'git rev-list <commits> --not --remotes -n 1' en "
 "el submódulo %s"
 
-#: submodule.c:1118
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "proceso para submódulo '%s' falló"
 
-#: submodule.c:1147 builtin/branch.c:678 builtin/submodule--helper.c:2045
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Falló al resolver HEAD como un ref válido."
 
-#: submodule.c:1158
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Empujando submódulo '%s'\n"
 
-#: submodule.c:1161
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "No es posible hacer push al submódulo '%s'\n"
 
-#: submodule.c:1453
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Haciendo fetch al submódulo %s%s\n"
 
-#: submodule.c:1483
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "No pudo acceder al submódulo '%s'\n"
 
-#: submodule.c:1637
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8291,61 +8731,61 @@
 "Errores durante el fetch del submódulo:\n"
 "%s"
 
-#: submodule.c:1662
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' no reconocido como un repositorio git"
 
-#: submodule.c:1679
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "No se pudo ejecutar 'git status --procelain=2' en el submódulo %s"
 
-#: submodule.c:1720
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --procelain=2' falló en el submódulo %s"
 
-#: submodule.c:1800
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "no se pudo comenzar 'git status' en el submódulo '%s'"
 
-#: submodule.c:1813
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "no se pudo ejecutar 'git status' en el submódulo '%s'"
 
-#: submodule.c:1828
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "No se pudo quitar configuración core.worktree en submódulo '%s'"
 
-#: submodule.c:1855 submodule.c:2165
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "no pudo recursar en el submódulo '%s'"
 
-#: submodule.c:1876
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "no se pudo reiniciar el index del submódulo"
 
-#: submodule.c:1918
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "submódulo '%s' tiene un índice corrupto"
 
-#: submodule.c:1970
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Submódulo '%s' no pudo ser actualizado."
 
-#: submodule.c:2038
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "submódulo git dir '%s' esta dentro de git dir '%.*s'"
 
-#: submodule.c:2059
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8353,17 +8793,17 @@
 "relocate_gitdir para el submódulo '%s' con más de un árbol de trabajo no "
 "soportado"
 
-#: submodule.c:2071 submodule.c:2130
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "no se pudo resolver el nombre para el submódulo '%s'"
 
-#: submodule.c:2075
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "rechazando mover '%s' dentro de un directorio git existente"
 
-#: submodule.c:2082
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8374,65 +8814,71 @@
 "'%s' hacia\n"
 "'%s'\n"
 
-#: submodule.c:2210
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "no se pudo comenzar ls-files en .."
 
-#: submodule.c:2250
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree devolvió un código %d inesperado"
 
-#: trailer.c:238
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "falló al hacer lstat '%s'"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "ejecución del comando de remolque '%s' falló"
 
-#: trailer.c:485 trailer.c:490 trailer.c:495 trailer.c:549 trailer.c:553
-#: trailer.c:557
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "valor '%s' desconocido para la clave '%s'"
 
-#: trailer.c:539 trailer.c:544 builtin/remote.c:298 builtin/remote.c:323
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "más de un %s"
 
-#: trailer.c:730
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "token de remolque vacío en el trailer '%.*s'"
 
-#: trailer.c:750
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "no se pudo leer el archivo de entrada '%s'"
 
-#: trailer.c:753
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "no se pudo leer desde stdin"
 
-#: trailer.c:1011 wrapper.c:673
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "no se pudo definir %s"
 
-#: trailer.c:1013
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "el archivo %s no es un archivo regular"
 
-#: trailer.c:1015
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "el archivo %s no puede ser escrito por el usuario"
 
-#: trailer.c:1027
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "no se pudo abrir el archivo temporal"
 
-#: trailer.c:1067
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "no se pudo renombrar el archivo temporal a %s"
@@ -8481,7 +8927,7 @@
 msgid "error while running fast-import"
 msgstr "error al ejecutar fast-import"
 
-#: transport-helper.c:549 transport-helper.c:1156
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "no se pudo leer la referencia %s"
@@ -8499,7 +8945,7 @@
 msgid "invalid remote service path"
 msgstr "ruta de servicio remoto inválida"
 
-#: transport-helper.c:661 transport.c:1347
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "operación no soportada por protocolo"
 
@@ -8508,59 +8954,72 @@
 msgid "can't connect to subservice %s"
 msgstr "no se puede conectar al subservicio %s"
 
-#: transport-helper.c:740
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only requiere protocolo v2"
+
+#: transport-helper.c:755
+msgid "'option' without a matching 'ok/error' directive"
+msgstr "'opción' sin una directiva correspondiente 'ok/error'"
+
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "se esperaba ok/error, helper dijo '%s'"
 
-#: transport-helper.c:793
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "helper reportó estado inesperado de %s"
 
-#: transport-helper.c:854
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "helper %s no soporta dry-run"
 
-#: transport-helper.c:857
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "helper %s no soporta --signed"
 
-#: transport-helper.c:860
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "helper %s no soporta --signed=if-asked"
 
-#: transport-helper.c:865
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "helper %s no soporta --atomic"
 
-#: transport-helper.c:871
+#: transport-helper.c:953
+#, c-format
+msgid "helper %s does not support --%s"
+msgstr "helper %s no soporta --%s"
+
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "helper %s no soporta 'push-option'"
 
-#: transport-helper.c:970
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper no soporta push; se necesita refspec"
 
-#: transport-helper.c:975
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "helper %s no soporta 'force'"
 
-#: transport-helper.c:1022
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "no se pudo ejecutar fast-export"
 
-#: transport-helper.c:1027
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "error al ejecutar fast-export"
 
-#: transport-helper.c:1052
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8569,52 +9028,52 @@
 "No hay refs comunes y ninguno especificado; no se hace nada.\n"
 "Tal vez deberías especificar un branch.\n"
 
-#: transport-helper.c:1133
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "formado de objeto no soportado '%s'"
 
-#: transport-helper.c:1142
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "respuesta malformada en lista de refs: %s"
 
-#: transport-helper.c:1294
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "leer(%s) falló"
 
-#: transport-helper.c:1321
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "escribir(%s) falló"
 
-#: transport-helper.c:1370
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "hilo %s falló"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "hilo %s falló al unirse: %s"
 
-#: transport-helper.c:1393 transport-helper.c:1397
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "no se puede iniciar el hilo para copiar data: %s"
 
-#: transport-helper.c:1434
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "proceso %s falló al esperar"
 
-#: transport-helper.c:1438
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "proceso %s falló"
 
-#: transport-helper.c:1456 transport-helper.c:1465
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "no se puede iniciar hilo para copiar data"
 
@@ -8641,29 +9100,33 @@
 msgid "server options require protocol version 2 or later"
 msgstr "opciones del servidor requieren protocolo versión 2 o posterior"
 
-#: transport.c:631
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "el servidor no soporta wait-for-done"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "no se pudo analizar valor de configuración transport.color.*"
 
-#: transport.c:704
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "soporte para protocolo v2 no implementado todavía"
 
-#: transport.c:838
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valor desconocido para configuración '%s': %s"
 
-#: transport.c:904
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transporte '%s' no permitido"
 
-#: transport.c:957
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync ya no es soportado"
 
-#: transport.c:1059
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8672,7 +9135,7 @@
 "La siguiente ruta de submódulo contiene cambios que no\n"
 "pueden ser encontrados en ningún remoto:\n"
 
-#: transport.c:1063
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8699,31 +9162,31 @@
 "para hacer un push al remoto.\n"
 "\n"
 
-#: transport.c:1071
+#: transport.c:1193
 msgid "Aborting."
 msgstr "Abortando."
 
-#: transport.c:1216
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "falló al hacer push a todos los submódulos necesarios"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "objeto de árbol muy corto"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "modo mal formado en la entrada de árbol"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "nombre de archivo vacío en la entrada de árbol"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "archivo de árbol muy corto"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8734,7 +9197,7 @@
 "%%sPor favor realiza un commit con los cambios o un stash antes de cambiar "
 "ramas."
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8744,7 +9207,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8754,7 +9217,7 @@
 "fusionar:\n"
 "%%sPor favor, confirma tus cambios o aguárdalos antes de fusionar."
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8764,7 +9227,7 @@
 "merge:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8773,7 +9236,7 @@
 "Los cambios locales de los siguientes archivos serán sobrescritos al %s:\n"
 "%%sPor favor, confirma tus cambios o guárdalos antes de %s."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8782,7 +9245,7 @@
 "Los cambios locales de los siguientes archivos serán sobreescritos por %s:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8792,7 +9255,7 @@
 "seguimiento en ellos:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8802,7 +9265,7 @@
 "eliminados al actualizar el árbol de trabajo:\n"
 "%%sPor favor, muévelos o elimínalos antes de intercambiar ramas."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8812,7 +9275,7 @@
 "eliminadosal actualizar el árbol de trabajo:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8822,7 +9285,7 @@
 "eliminados al fusionar:\n"
 "%%sPor favor, muévelos o elimínalos antes de fusionar."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8832,7 +9295,7 @@
 "eliminadosal fusionar:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8842,7 +9305,7 @@
 "eliminados al %s:\n"
 "%%sPor favor, muévelos o elimínalos antes de %s."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8852,7 +9315,7 @@
 "eliminados al ejecutar %s:\n"
 "%%s"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8863,7 +9326,7 @@
 "sobrescritos al actualizar el árbol de trabajo:\n"
 "%%sPor favor, muévelos o elimínalos antes de intercambiar ramas."
 
-#: unpack-trees.c:154
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8874,7 +9337,7 @@
 "sobrescritos al actualizar el árbol de trabajo:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8884,7 +9347,7 @@
 "sobrescritos al fusionar:\n"
 "%%sPor favor, muévelos o elimínalos antes de fusionar."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8894,7 +9357,7 @@
 "sobrescritos al fusionar:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8904,7 +9367,7 @@
 "sobrescritos al %s:\n"
 "%%sPor favor, muévelos o elimínalos antes de %s."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8914,12 +9377,12 @@
 "eliminadospor %s:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Entrada '%s' se superpone con '%s'.  No se pueden unir."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -8928,7 +9391,7 @@
 "No se puede actualizar le submódulo:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -8939,7 +9402,7 @@
 "patrón especificado:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -8949,7 +9412,7 @@
 "sparse:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -8960,12 +9423,12 @@
 "pesar del patrón especificado:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "Abortando\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -8974,11 +9437,11 @@
 "Luego de arreglar las rutas mostradas, puede que quieras ejecutar `git "
 "sparse-checkout reapply`.\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Actualizando archivos"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -8988,11 +9451,17 @@
 "en un filesystem case-insensitive) y solo una del grupo\n"
 "colisionando está en el árbol de trabajo:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "Actualizando flags del index"
 
-#: upload-pack.c:1415
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+"el árbol de trabajo y commits no monitoreados tienen entradas duplicadas: %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "se espera flush tras argumentos fetch"
 
@@ -9029,50 +9498,118 @@
 msgid "Fetching objects"
 msgstr "Haciendo fetch a objetos"
 
-#: worktree.c:248 builtin/am.c:2098
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "falló al leer '%s'"
 
-#: worktree.c:295
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr ""
 "'%s' en el árbol de trabajo principal no es el directorio del repositorio"
 
-#: worktree.c:306
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "archivo '%s' no contiene una ruta absoluta a la ubicación del árbol de "
 "trabajo"
 
-#: worktree.c:318
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' no existe"
 
-#: worktree.c:324
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' no es un archivo .git, código de error %d"
 
-#: worktree.c:333
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' no apunta de vuelta a '%s'"
 
-#: wrapper.c:194 wrapper.c:364
+#: worktree.c:608
+msgid "not a directory"
+msgstr "no es un directorio"
+
+#: worktree.c:617
+msgid ".git is not a file"
+msgstr ".git no es un archivo"
+
+#: worktree.c:619
+msgid ".git file broken"
+msgstr "archivo .git roto"
+
+#: worktree.c:621
+msgid ".git file incorrect"
+msgstr "archivo .git incorrecto"
+
+#: worktree.c:727
+msgid "not a valid path"
+msgstr "no es una ruta válida"
+
+#: worktree.c:733
+msgid "unable to locate repository; .git is not a file"
+msgstr "no es posible ubicar el repositorio; .git no es un archivo"
+
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr ""
+"incapaz de localizar el repositorio; El archivo .git no hace referencia a un "
+"repositorio"
+
+#: worktree.c:741
+msgid "unable to locate repository; .git file broken"
+msgstr "no es posible ubicar el repositorio; archivo .git roto"
+
+#: worktree.c:747
+msgid "gitdir unreadable"
+msgstr "gitdir ilegible"
+
+#: worktree.c:751
+msgid "gitdir incorrect"
+msgstr "gitdir incorrecto"
+
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "no en un directorio válido"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "archivo gitdir no existe"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "no es posible leer archivo gitdir (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "lectura corta (se esperaba %<PRIuMAX> bytes, se leyó %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "archivo gitdir inválido"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "archivo gitdir apunta a una ubicación inexistente"
+
+#: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "no se pudo abrir '%s' para lectura y escritura"
 
-#: wrapper.c:395 wrapper.c:596
+#: wrapper.c:398 wrapper.c:599
 #, c-format
 msgid "unable to access '%s'"
 msgstr "no es posible acceder '%s'"
 
-#: wrapper.c:604
+#: wrapper.c:607
 msgid "unable to get current working directory"
 msgstr "no es posible obtener el directorio de trabajo actual"
 
@@ -9110,11 +9647,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (usa \"git rm <file>...\" para marcar la resolución)"
 
-#: wt-status.c:211 wt-status.c:1072
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Cambios a ser confirmados:"
 
-#: wt-status.c:234 wt-status.c:1081
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Cambios no rastreados para el commit:"
 
@@ -9148,94 +9685,94 @@
 msgstr ""
 "  (usa \"git %s <archivo>...\" para incluirlo a lo que se será confirmado)"
 
-#: wt-status.c:268
+#: wt-status.c:266
 msgid "both deleted:"
 msgstr "ambos borrados:"
 
-#: wt-status.c:270
+#: wt-status.c:268
 msgid "added by us:"
 msgstr "agregado por nosotros:"
 
-#: wt-status.c:272
+#: wt-status.c:270
 msgid "deleted by them:"
 msgstr "borrados por ellos:"
 
-#: wt-status.c:274
+#: wt-status.c:272
 msgid "added by them:"
 msgstr "agregado por ellos:"
 
-#: wt-status.c:276
+#: wt-status.c:274
 msgid "deleted by us:"
 msgstr "borrado por nosotros:"
 
-#: wt-status.c:278
+#: wt-status.c:276
 msgid "both added:"
 msgstr "ambos agregados:"
 
-#: wt-status.c:280
+#: wt-status.c:278
 msgid "both modified:"
 msgstr "ambos modificados:"
 
-#: wt-status.c:290
+#: wt-status.c:288
 msgid "new file:"
 msgstr "nuevo archivo:"
 
-#: wt-status.c:292
+#: wt-status.c:290
 msgid "copied:"
 msgstr "copiado:"
 
-#: wt-status.c:294
+#: wt-status.c:292
 msgid "deleted:"
 msgstr "borrado:"
 
-#: wt-status.c:296
+#: wt-status.c:294
 msgid "modified:"
 msgstr "modificado:"
 
-#: wt-status.c:298
+#: wt-status.c:296
 msgid "renamed:"
 msgstr "renombrado:"
 
-#: wt-status.c:300
+#: wt-status.c:298
 msgid "typechange:"
 msgstr "cambio de tipo:"
 
-#: wt-status.c:302
+#: wt-status.c:300
 msgid "unknown:"
 msgstr "desconocido:"
 
-#: wt-status.c:304
+#: wt-status.c:302
 msgid "unmerged:"
 msgstr "des-fusionado:"
 
-#: wt-status.c:384
+#: wt-status.c:382
 msgid "new commits, "
 msgstr "nuevos commits, "
 
-#: wt-status.c:386
+#: wt-status.c:384
 msgid "modified content, "
 msgstr "contenido modificado, "
 
-#: wt-status.c:388
+#: wt-status.c:386
 msgid "untracked content, "
 msgstr "contenido no rastreado, "
 
-#: wt-status.c:904
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Tu stash actualmente tiene %d entrada"
 msgstr[1] "Tu stash actualmente tiene %d entradas"
 
-#: wt-status.c:936
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Submódulos cambiados pero no actualizados:"
 
-#: wt-status.c:938
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Submódulos cambiados listos para realizar commit:"
 
-#: wt-status.c:1020
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9243,7 +9780,7 @@
 "No modifique o borre la línea de encima.\n"
 "Todo lo que este por abajo será eliminado."
 
-#: wt-status.c:1112
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9254,107 +9791,107 @@
 "Tomó %.2f segundos para calcular los valores anterior/posterior del branch.\n"
 "Puedes usar '--no-ahead-behind' para evitar esto.\n"
 
-#: wt-status.c:1142
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Tienes rutas no fusionadas."
 
-#: wt-status.c:1145
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (arregla los conflictos y corre \"git commit\""
 
-#: wt-status.c:1147
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (usa \"git merge --abort\" para abortar la fusion)"
 
-#: wt-status.c:1151
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Todos los conflictos resueltos pero sigues fusionando."
 
-#: wt-status.c:1154
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (usa \"git commit\" para concluir la fusión)"
 
-#: wt-status.c:1163
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Estás en medio de una sesión am."
 
-#: wt-status.c:1166
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "El parche actual está vacío."
 
-#: wt-status.c:1170
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (arregla los conflictos y luego corre \"git am --continue\""
 
-#: wt-status.c:1172
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (usa \"git am --skip\" para saltar este parche)"
 
-#: wt-status.c:1174
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (usa \"git am --abort\" para restaurar la rama original)"
 
-#: wt-status.c:1307
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo no está presente."
 
-#: wt-status.c:1309
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "No se realizaron los comandos."
 
-#: wt-status.c:1312
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "El último comando realizado (%d comando realizado):"
 msgstr[1] "Los últimos comandos realizados (%d comandos realizados):"
 
-#: wt-status.c:1323
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (ver más en el archivo %s)"
 
-#: wt-status.c:1328
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "No quedan más comandos."
 
-#: wt-status.c:1331
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Siguiente comando a realizar (%d comando restante):"
 msgstr[1] "Siguiente comandos a realizar (%d comandos faltantes):"
 
-#: wt-status.c:1339
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (usa \"git rebase --edit-todo\" para ver y editar)"
 
-#: wt-status.c:1351
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Estás aplicando un rebase de la rama '%s' en '%s."
 
-#: wt-status.c:1356
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Estás aplicando un rebase."
 
-#: wt-status.c:1369
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (corrige los conflictos y ejecuta \"git rebase --continue\")"
 
-#: wt-status.c:1371
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (usa \"git rebase --skip\" para omitir este parche)"
 
-#: wt-status.c:1373
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (usa \"git rebase --abort\" para volver a tu rama original)"
 
-#: wt-status.c:1380
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (todos los conflictos corregidos: ejecuta \"git rebase --continue\")"
 
-#: wt-status.c:1384
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9362,149 +9899,157 @@
 "Estás dividiendo un commit mientras aplicas un rebase de la rama '%s' en "
 "'%s'."
 
-#: wt-status.c:1389
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Estás dividiendo un commit durante un rebase."
 
-#: wt-status.c:1392
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Una vez que tu directorio de trabajo esté limpio, ejecuta \"git rebase --"
 "continue\")"
 
-#: wt-status.c:1396
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Estás editando un commit mientras se aplica un rebase de la rama '%s' en "
 "'%s'."
 
-#: wt-status.c:1401
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "Estás editando un commit durante un rebase."
 
-#: wt-status.c:1404
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (usa \"git commit --amend\" para enmendar el commit actual)"
 
-#: wt-status.c:1406
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (usa \"git rebase --continue\" una vez que estés satisfecho con tus "
 "cambios)"
 
-#: wt-status.c:1417
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick en progreso actualmente."
 
-#: wt-status.c:1420
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Estás realizando un cherry-picking en el commit %s."
 
-#: wt-status.c:1427
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (corrige los conflictos y ejecuta \"git cherry-pick --continue\")"
 
-#: wt-status.c:1430
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (ejecuta \"git cherry-pick --continue\" para continuar)"
 
-#: wt-status.c:1433
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (todos los conflictos corregidos: ejecuta \"git cherry-pick --continue\")"
 
-#: wt-status.c:1435
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (usa \"git cherry-pick --skip\" para saltar este parche)"
 
-#: wt-status.c:1437
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (use \"git cherry-pick --abort\" para cancelar la operación cherry-pick)"
 
-#: wt-status.c:1447
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Revierte el estado en progreso actual."
 
-#: wt-status.c:1450
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Estás revirtiendo el commit %s."
 
-#: wt-status.c:1456
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (corrige los conflictos y ejecuta \"git revert --continue\")"
 
-#: wt-status.c:1459
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (ejecuta \"git revert --continue\" para continuar)"
 
-#: wt-status.c:1462
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (todos los conflictos corregidos: ejecuta \"git revert --continue\")"
 
-#: wt-status.c:1464
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (usa \"git revert --skip\" para omitir este parche)"
 
-#: wt-status.c:1466
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (usa \"git revert --abort\" para cancelar la operación de revertir)"
 
-#: wt-status.c:1476
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Estás aplicando un bisect, comenzando en la rama '%s'."
 
-#: wt-status.c:1480
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Estás aplicando un bisect."
 
-#: wt-status.c:1483
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (usa \"git bisect reset\" para volver a la rama original)"
 
-#: wt-status.c:1494
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "Estas en un checkout de sparse con %d%% archivos rastreados presentes."
 
-#: wt-status.c:1733
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "En la rama "
 
-#: wt-status.c:1740
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "rebase interactivo en progreso; en "
 
-#: wt-status.c:1742
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "rebase en progreso; en "
 
+#: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD desacoplada en "
+
 #: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD desacoplada de "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Actualmente no estás en ninguna rama."
 
-#: wt-status.c:1769
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Confirmación inicial"
 
-#: wt-status.c:1770
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "No hay commits todavía"
 
-#: wt-status.c:1784
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Archivos sin seguimiento"
 
-#: wt-status.c:1786
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Archivos ignorados"
 
-#: wt-status.c:1790
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9515,31 +10060,31 @@
 "puede acelerarlo, pero tienes que ser cuidadoso de no olvidar agregar\n"
 "nuevos archivos tú mismo (vea 'git help status')."
 
-#: wt-status.c:1796
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Archivos no rastreados no son mostrados %s"
 
-#: wt-status.c:1798
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (usa la opción -u para mostrar los archivos sin seguimiento)"
 
-#: wt-status.c:1804
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Sin cambios"
 
-#: wt-status.c:1809
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "sin cambios agregados al commit (usa \"git add\" y/o \"git commit -a\")\n"
 
-#: wt-status.c:1812
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "no se agregaron cambios al commit\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9548,72 +10093,90 @@
 "no hay nada agregado al commit pero hay archivos sin seguimiento presentes "
 "(usa \"git add\" para hacerles seguimiento)\n"
 
-#: wt-status.c:1818
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "no hay nada agregado para confirmar, pero hay archivos sin seguimiento "
 "presentes\n"
 
-#: wt-status.c:1821
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "no hay nada para confirmar (crea/copia archivos y usa \"git add\" para "
 "hacerles seguimiento)\n"
 
-#: wt-status.c:1824 wt-status.c:1829
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "nada para hacer commit\n"
 
-#: wt-status.c:1827
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "nada para hacer commit (usa -u para mostrar los archivos no rastreados)\n"
 
-#: wt-status.c:1831
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "nada para hacer commit, el árbol de trabajo está limpio\n"
 
-#: wt-status.c:1944
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "No hay commits todavía en "
 
-#: wt-status.c:1948
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (sin rama)"
 
-#: wt-status.c:1979
+#: wt-status.c:1980
 msgid "different"
 msgstr "diferente"
 
-#: wt-status.c:1981 wt-status.c:1989
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "detrás "
 
-#: wt-status.c:1984 wt-status.c:1987
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "adelante "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2509
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "no se puede %s: Tienes cambios sin marcar."
 
-#: wt-status.c:2515
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "adicionalmente, tu índice contiene cambios que no están en un commit."
 
-#: wt-status.c:2517
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "no se puede %s: Tu índice contiene cambios que no están en un commit."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:456
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "no se pudo enviar el comando IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "no se pudo leer la respuesta IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "no se pudo iniciar el accept_thread '%s'"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "no se pudo iniciar el worker[0] para '%s'"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "falló al desvincular '%s'"
@@ -9622,128 +10185,133 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opción>] [--] <especificación-de-ruta>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "no se puede aplicar chmod %cx '%s'"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "diff status inesperado %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "falló la actualización de carpetas"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "eliminar '%s'\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Cambios fuera del área de stage tras refrescar el índice:"
 
-#: builtin/add.c:266 builtin/rev-parse.c:904
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "No se pudo leer el índice"
 
-#: builtin/add.c:277
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "No se pudo abrir '%s' para escritura."
 
-#: builtin/add.c:281
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "No se puede escribir el parche"
 
-#: builtin/add.c:284
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "falló la edición del parche"
 
-#: builtin/add.c:287
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "No se pudo definir '%s'"
 
-#: builtin/add.c:289
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Parche vacío. Abortado."
 
-#: builtin/add.c:294
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "No se pudo aplicar '%s'"
 
-#: builtin/add.c:302
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Las siguientes rutas son ignoradas por uno de tus archivos .gitignore:\n"
 
-#: builtin/add.c:322 builtin/clean.c:904 builtin/fetch.c:164 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:548
-#: builtin/remote.c:1421 builtin/rm.c:242 builtin/send-pack.c:165
+#: 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
 msgid "dry run"
 msgstr "dry run ( ejecución en seco)"
 
-#: builtin/add.c:325
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "selección interactiva"
 
-#: builtin/add.c:326 builtin/checkout.c:1533 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "elegir hunks de forma interactiva"
 
-#: builtin/add.c:327
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "editar diff actual y aplicar"
 
-#: builtin/add.c:328
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "permitir agregar caso contrario ignorar archivos"
 
-#: builtin/add.c:329
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "actualizado las carpetas rastreadas"
 
-#: builtin/add.c:330
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "renormalizar EOL de los archivos rastreados (implica -u)"
 
-#: builtin/add.c:331
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "grabar solo el hecho de que la ruta será agregada después"
 
-#: builtin/add.c:332
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "agregar los cambios de todas las carpetas con y sin seguimiento"
 
-#: builtin/add.c:335
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "ignorar rutas eliminadas en el árbol de trabajo (lo mismo que --no-all)"
 
-#: builtin/add.c:337
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "no agregar, solo actualizar el índice"
 
-#: builtin/add.c:338
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr "saltar las carpetas que no pueden ser agregadas a causa de errores"
 
-#: builtin/add.c:339
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "comprobar si - incluso los archivos que faltan - se ignoran en dry run"
 
-#: builtin/add.c:341 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "sobrescribir el bit ejecutable de los archivos listados"
 
-#: builtin/add.c:343
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "avisar cuando se agrega un repositorio incrustado"
 
-#: builtin/add.c:345
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "backend para `git stash -p`"
 
-#: builtin/add.c:363
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9761,25 +10329,25 @@
 "See \"git help submodule\" for more information."
 msgstr ""
 "Se ha agregado otro repositorio de git dentro del repositorio actual.\n"
-"Clones del repositorio exterior no tendrán el contenido del \n"
+"Clones del repositorio exterior no tendrán el contenido del\n"
 "repositorio embebido y no sabrán como obtenerla.\n"
 "Si querías agregar un submódulo, usa:\n"
 "\n"
 "\tgit submodule add <url> %s\n"
 "\n"
-"Si se agrego esta ruta por error, puedes eliminar desde el índice \n"
+"Si se agrego esta ruta por error, puedes eliminar desde el índice\n"
 "usando:\n"
 "\n"
 "\tgit rm --cached %s\n"
 "\n"
 "Vea \"git help submodule\" para más información."
 
-#: builtin/add.c:391
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "agregando repositorio embebido: %s"
 
-#: builtin/add.c:410
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9789,47 +10357,51 @@
 "Desactiva este mensaje ejecutando\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:419
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "falló al agregar archivos"
 
-#: builtin/add.c:447 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run es incompatible con --interactive/--patch"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file es incompatible con --interactive/--patch"
 
-#: builtin/add.c:464
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file es incompatible con --edit"
 
-#: builtin/add.c:476
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A y -u son mutuamente incompatibles"
 
-#: builtin/add.c:479
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "Opción --ignore-missing solo puede ser usada junto a --dry-run"
 
-#: builtin/add.c:483
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "El parámetro '%s' para --chmod debe ser -x ó +x"
 
-#: builtin/add.c:501 builtin/checkout.c:1701 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1506
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file es incompatible con argumentos de pathspec"
 
-#: builtin/add.c:508 builtin/checkout.c:1713 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1512
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul requiere --pathspec-from-file"
 
-#: builtin/add.c:512
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Nada especificado, nada agregado.\n"
 
-#: builtin/add.c:514
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -9839,111 +10411,111 @@
 "Desactiva este mensage ejecutando\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "no se pudo analizar el script del autor"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' fue borrado por el hook de applypatch-msg"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Línea mal formada: '%s'."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Falló al copiar notas de '%s' a '%s'"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "fall de fseek"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "no se pudo analizar el parche '%s'"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Solo un parche StGIT puede ser aplicado de una vez"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "timestamp inválido"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "línea Date inválida"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "offset de zona horaria inválido"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Falló al detectar el formato del parche."
 
-#: builtin/am.c:953 builtin/clone.c:409
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "falló al crear el directorio '%s'"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "Falló al dividir parches."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Cuando hayas resuelto este problema, ejecuta \"%s --continue\"."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si prefieres saltar este parche, ejecuta \"%s --skip\"."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Para restaurar la rama original y detener el parchado, ejecutar \"%s --abort"
 "\"."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Parche mandado con formato=flowed; espacios al final de las líneas tal vez "
 "desaparezcan."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "El parche está vacío."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "falta línea autor en commit %s"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "sangría no válida: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Repositorio carece de los blobs necesarios para retroceder en una fusión de "
 "3-vías."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Usando la información del índice para reconstruir un árbol base..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -9951,24 +10523,24 @@
 "¿Editaste el parche a mano?\n"
 "No aplica a blobs guardados en su índice."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Retrocediendo para parchar base y fusión de 3-vías..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Falló al fusionar en los cambios."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "aplicando a un historial vacío"
 
-#: builtin/am.c:1621 builtin/am.c:1625
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "no se puede continuar: %s no existe."
 
-#: builtin/am.c:1643
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "Cuerpo de commit es:"
 
@@ -9976,39 +10548,39 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1653
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "¿Aplicar? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 
-#: builtin/am.c:1699 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "no es posible escribir en el archivo índice"
 
-#: builtin/am.c:1703
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Índice sucio: no se puede aplicar parches (sucio: %s)"
 
-#: builtin/am.c:1743 builtin/am.c:1811
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Aplicando: %.*s"
 
-#: builtin/am.c:1760
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Sin cambios -- parche ya aplicado."
 
-#: builtin/am.c:1766
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "El parche falló en %s %.*s"
 
-#: builtin/am.c:1770
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "Use 'git am --show-current-patch=diff' para ver el parche fallido"
 
-#: builtin/am.c:1814
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10018,7 +10590,7 @@
 "Si no hay nada en el área de stage, las posibilidad es que algo mas\n"
 "ya haya introducido el mismo cambio; tal vez quieras omitir este parche."
 
-#: builtin/am.c:1821
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10031,17 +10603,17 @@
 "Se puede ejecutar `git rm` en el archivo para aceptar \"borrado por ellos\" "
 "en él."
 
-#: builtin/am.c:1928 builtin/am.c:1932 builtin/am.c:1944 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "No se pudo analizar el objeto '%s'."
 
-#: builtin/am.c:1980
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "falló al limpiar el índice"
 
-#: builtin/am.c:2024
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10049,156 +10621,160 @@
 "Parece haber movido HEAD desde el último falló 'am'.\n"
 "No rebobinando a ORIG_HEAD"
 
-#: builtin/am.c:2131
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valor inválido para --patch-format: %s"
 
-#: builtin/am.c:2171
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Valor inválido para --show-current-patch: %s"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s es incompatible con --show-current-patch=%s"
 
-#: builtin/am.c:2206
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opciones>] [(<mbox> | <Directorio-de-correo>)...]"
 
-#: builtin/am.c:2207
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opciones>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2213
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "ejecutar de manera interactiva"
 
-#: builtin/am.c:2215
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "opción histórica -- no-op"
 
-#: builtin/am.c:2217
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "permitir retroceso en fusión de 3-vías si es necesario"
 
-#: builtin/am.c:2218 builtin/init-db.c:559 builtin/prune-packed.c:16
-#: builtin/repack.c:306 builtin/stash.c:816
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "ser silencioso"
 
-#: builtin/am.c:2220
-msgid "add a Signed-off-by line to the commit message"
+#: builtin/am.c:2275
+msgid "add a Signed-off-by trailer to the commit message"
 msgstr "agregar una línea \"Firmado-por\" al mensaje del commit"
 
-#: builtin/am.c:2223
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "recodificar en utf8 (default)"
 
-#: builtin/am.c:2225
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "pasar flag -k a git-mailinfo"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "pasar flag -b a git-mailinfo"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "pasar flag -m a git-mailinfo"
 
-#: builtin/am.c:2231
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "pasar flag --keep-cr a git-mailsplit para formato mbox"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "no pasar flag --keep-cr a git-mailsplit independientemente de am.keepcr"
 
-#: builtin/am.c:2237
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "descubrir todo antes de una línea de tijeras"
 
-#: builtin/am.c:2239 builtin/am.c:2242 builtin/am.c:2245 builtin/am.c:2248
-#: builtin/am.c:2251 builtin/am.c:2254 builtin/am.c:2257 builtin/am.c:2260
-#: builtin/am.c:2266
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "pasarlo a través de 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
 msgid "pass it through git-apply"
 msgstr "pasarlo a través de git-apply"
 
-#: builtin/am.c:2256 builtin/commit.c:1397 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:891 builtin/merge.c:252
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1329 builtin/repack.c:317 builtin/repack.c:321
-#: builtin/repack.c:323 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2262 builtin/branch.c:659 builtin/for-each-ref.c:38
-#: builtin/replace.c:556 builtin/tag.c:438 builtin/verify-tag.c:38
-#: bugreport.c:137
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "formato"
 
-#: builtin/am.c:2263
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "formatear el parche(s)"
 
-#: builtin/am.c:2269
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "sobrescribir mensajes de error cuando fallos de parchado ocurran"
 
-#: builtin/am.c:2271
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "continuar aplicando los parches tras resolver conflictos"
 
-#: builtin/am.c:2274
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "sinónimos para --continue"
 
-#: builtin/am.c:2277
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "saltar el parche actual"
 
-#: builtin/am.c:2280
-msgid "restore the original branch and abort the patching operation."
-msgstr "restaurar la rama original y abortar la operación de parchado."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "restaurar la rama original y abortar la operación de parcheo"
 
-#: builtin/am.c:2283
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "abortar la operación de parchado pero mantener HEAD donde está."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "abortar la operación de parcheo pero mantener HEAD donde está"
 
-#: builtin/am.c:2287
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "muestra el parche siendo aplicado"
 
-#: builtin/am.c:2292
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "mentir sobre la fecha del committer"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "usar el timestamp actual para la fecha del autor"
 
-#: builtin/am.c:2296 builtin/commit-tree.c:120 builtin/commit.c:1517
-#: builtin/merge.c:289 builtin/pull.c:175 builtin/rebase.c:524
-#: builtin/rebase.c:1380 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2297 builtin/rebase.c:525 builtin/rebase.c:1381
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "Commits con firma GPG"
 
-#: builtin/am.c:2300
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(uso interno para git-rebase)"
 
-#: builtin/am.c:2318
+#: builtin/am.c:2376
 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."
@@ -10206,16 +10782,16 @@
 "La opción -b/--binary ha estado deshabilitada por mucho tiempo, y\n"
 "será eliminada. Por favor no la use más."
 
-#: builtin/am.c:2325
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "falló al leer el índice"
 
-#: builtin/am.c:2340
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "directorio de rebase previo %s todavía existe en el mbox dado."
 
-#: builtin/am.c:2364
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10224,11 +10800,11 @@
 "Directorio extraviado %s encontrado.\n"
 "Use \"git am --abort\" para borrarlo."
 
-#: builtin/am.c:2370
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Operación de resolución no está en progreso, no vamos a continuar."
 
-#: builtin/am.c:2380
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "modo interactivo requiere parches en la línea de comando"
 
@@ -10266,43 +10842,15 @@
 msgid "git archive: expected a flush"
 msgstr "git archive: se esperaba un flush"
 
-#: builtin/bisect--helper.c:22
-msgid "git bisect--helper --next-all [--no-checkout]"
-msgstr "git bisect--helper --next-all [--no-checkout]"
-
 #: builtin/bisect--helper.c:23
-msgid "git bisect--helper --write-terms <bad_term> <good_term>"
-msgstr "git bisect--helper --write-terms <mal_término> <buen_término>"
-
-#: builtin/bisect--helper.c:24
-msgid "git bisect--helper --bisect-clean-state"
-msgstr "git bisect--helper --bisect-clean-state"
-
-#: builtin/bisect--helper.c:25
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<commit>]"
 
-#: builtin/bisect--helper.c:26
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <estado> <revision> <buen_term> "
-"<mal_term>"
-
-#: builtin/bisect--helper.c:27
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <comando> <buen_term> "
-"<mal_term>"
-
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:24
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr "git bisect--helper --bisect-next-check <buen_term> <mal_term> [<term>]"
 
-#: builtin/bisect--helper.c:29
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10310,48 +10858,76 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
+#: builtin/bisect--helper.c:26
+msgid ""
+"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-{new,bad}=<término> --term-{old,"
+"good}=<término>] [--no-checkout] [--first-parent] [<malo> [<bueno>...]] [--] "
+"[<rutas>...]"
+
+#: builtin/bisect--helper.c:28
+msgid "git bisect--helper --bisect-next"
+msgstr "git bisect--helper --bisect-next"
+
+#: builtin/bisect--helper.c:29
+msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
+msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
+
 #: builtin/bisect--helper.c:30
-msgid ""
-"git bisect--helper --bisect-start [--term-{old,good}=<term> --term-{new,bad}"
-"=<term>][--no-checkout] [<bad> [<good>...]] [--] [<paths>...]"
-msgstr ""
-"git bisect--helper --bisect-start [--term-{old,good}=<término> --term-{new,"
-"bad}=<término>][--no-checkout] [<malo> [<bueno>...]] [--] [<rutas>...]"
+msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
+msgstr "git bisect--helper --bisect-state (good|old) [<rev>...]"
 
-#: builtin/bisect--helper.c:86
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <archivio>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<rev>|<rango>)...]"
+
+#: builtin/bisect--helper.c:107
+#, c-format
+msgid "cannot open file '%s' in mode '%s'"
+msgstr "no se puede abrir archivo '%s' en modo '%s'"
+
+#: builtin/bisect--helper.c:114
+#, c-format
+msgid "could not write to file '%s'"
+msgstr "no se pudo escribir al archivo '%s'"
+
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' no es un término válido"
 
-#: builtin/bisect--helper.c:90
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "no se puede usar el comando nativo '%s' como un término"
 
-#: builtin/bisect--helper.c:100
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "no se puede cambiar el significado del término '%s'"
 
-#: builtin/bisect--helper.c:111
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "por favor use dos términos diferentes"
 
-#: builtin/bisect--helper.c:118
-msgid "could not open the file BISECT_TERMS"
-msgstr "no se pudo abrir el archivo BISECT_TERMS"
-
-#: builtin/bisect--helper.c:155
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "No estamos bisecando.\n"
 
-#: builtin/bisect--helper.c:163
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' no es un commit válido"
 
-#: builtin/bisect--helper.c:172
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10359,27 +10935,27 @@
 "no se pudo hacer check out al HEAD original '%s'. Intenta 'git bisect reset "
 "<commit>'."
 
-#: builtin/bisect--helper.c:216
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Mal argumento bisect_write: %s"
 
-#: builtin/bisect--helper.c:221
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "no se puede obtener el oid de la rev '%s'"
 
-#: builtin/bisect--helper.c:233
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "no se pudo abrir el archivo '%s'"
 
-#: builtin/bisect--helper.c:259
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Comando inválido: actualmente se encuentra en un bisect %s/%s"
 
-#: builtin/bisect--helper.c:286
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10388,7 +10964,7 @@
 "Tienes que dar al menos un %s y un %s revision.\n"
 "Se puede ver \"git bisect %s\" y \"git bisect %s\" para eso."
 
-#: builtin/bisect--helper.c:290
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10399,7 +10975,7 @@
 "Después tienes que entregar al menos un %s y una revision %s.\n"
 "Puedes usar \"git bisect %s\" y \"git bisect %s\" para eso."
 
-#: builtin/bisect--helper.c:310
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "haciendo bisect solo con un commit %s"
@@ -10408,15 +10984,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:318
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "¿Estás seguro [Y/n]? "
 
-#: builtin/bisect--helper.c:379
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "no hay términos definidos"
 
-#: builtin/bisect--helper.c:382
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10425,7 +11001,7 @@
 "Tus términos actuales son %s para el estado viejo\n"
 "y %s para el estado nuevo.\n"
 
-#: builtin/bisect--helper.c:392
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10434,267 +11010,313 @@
 "argumento inválido %s para 'git bisect terms'.\n"
 "Las opciones soportadas son: --term-good|--term-old y --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:460 builtin/bisect--helper.c:473
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
+msgid "revision walk setup failed\n"
+msgstr "la configuración del recorrido de revisión falló\n"
+
+#: builtin/bisect--helper.c:519
+#, c-format
+msgid "could not open '%s' for appending"
+msgstr "no se pudo abrir '%s' en modo append"
+
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "'' no es un término válido"
 
-#: builtin/bisect--helper.c:483
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "opción desconocida: '%s'"
 
-#: builtin/bisect--helper.c:487
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' no parece ser una revisión válida"
 
-#: builtin/bisect--helper.c:519
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "mal HEAD - Necesito un HEAD"
 
-#: builtin/bisect--helper.c:534
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "error al hacer checkout '%s'. Intente 'git bisect start <rama-válida>'."
 
-#: builtin/bisect--helper.c:555
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "no se bisecará en un árbol con cg-seek"
 
-#: builtin/bisect--helper.c:558
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "mal HEAD - ref simbólico extraño"
 
-#: builtin/bisect--helper.c:582
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "ref inválido: '%s'"
 
-#: builtin/bisect--helper.c:638
-msgid "perform 'git bisect next'"
-msgstr "realiza 'git bisect next'"
+#: builtin/bisect--helper.c:813
+msgid "You need to start by \"git bisect start\"\n"
+msgstr "Debes iniciar con \"git bisect start\"\n"
 
-#: builtin/bisect--helper.c:640
-msgid "write the terms to .git/BISECT_TERMS"
-msgstr "escribe los términos a .git/BISECT_TERMS"
+#. 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
+msgid "Do you want me to do it for you [Y/n]? "
+msgstr "¿Quieres que lo haga por ti [Y/n]? "
 
-#: builtin/bisect--helper.c:642
-msgid "cleanup the bisection state"
-msgstr "limpiar el estado de bisección"
+#: builtin/bisect--helper.c:842
+msgid "Please call `--bisect-state` with at least one argument"
+msgstr "Llame a `--bisect-state` con al menos un argumento"
 
-#: builtin/bisect--helper.c:644
-msgid "check for expected revs"
-msgstr "revisar por revs esperados"
+#: builtin/bisect--helper.c:855
+#, c-format
+msgid "'git bisect %s' can take only one argument."
+msgstr "'git bisect %s' solo puede tomar un argumento."
 
-#: builtin/bisect--helper.c:646
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
+#, c-format
+msgid "Bad rev input: %s"
+msgstr "Mala entrada rev: %s"
+
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Mala entrada rev (no es un commit): %s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "No estamos bisecando."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? ¿De qué estás hablando?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "no se puede leer '%s' para reproducir"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "reiniciar el estado de bisect"
 
-#: builtin/bisect--helper.c:648
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "escribir el estado de bisect en BISECT_LOG"
-
-#: builtin/bisect--helper.c:650
-msgid "check and set terms in a bisection state"
-msgstr "revisar y configurar los terms en el estado de bisect"
-
-#: builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "revisar si existen términos malos o buenos"
 
-#: builtin/bisect--helper.c:654
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "imprimir los terms del bisect"
 
-#: builtin/bisect--helper.c:656
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "comenzar la sesión de bisect"
 
-#: builtin/bisect--helper.c:658
-msgid "update BISECT_HEAD instead of checking out the current commit"
-msgstr "actualiza BISECT_HEAD en lugar de revisar el commit actual"
+#: builtin/bisect--helper.c:1062
+msgid "find the next bisection commit"
+msgstr "encontrar el siguiente commit de bisección"
 
-#: builtin/bisect--helper.c:660
+#: builtin/bisect--helper.c:1064
+msgid "mark the state of ref (or refs)"
+msgstr "marcar el estado de ref (o refs)"
+
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "listar los pasos de bisección hasta ahora"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "reproducir el proceso de bisección del archivo dado"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "saltar algunos commits para checkout"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "no hay log para BISECT_WRITE"
 
-#: builtin/bisect--helper.c:678
-msgid "--write-terms requires two arguments"
-msgstr "--write-terms requiere dos argumentos"
-
-#: builtin/bisect--helper.c:682
-msgid "--bisect-clean-state requires no arguments"
-msgstr "--bisect-clean-state no requiere argumentos"
-
-#: builtin/bisect--helper.c:689
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset requiere un commit o ningún argumento"
 
-#: builtin/bisect--helper.c:693
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write requiere entre 4 o 5 argumentos"
-
-#: builtin/bisect--helper.c:699
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--bisect-clean-state no requiere argumentos"
-
-#: builtin/bisect--helper.c:705
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check requiere 2 o 3 argumentos"
 
-#: builtin/bisect--helper.c:711
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms requiere 0 o 1 argumentos"
 
-#: builtin/blame.c:31
+#: builtin/bisect--helper.c:1107
+msgid "--bisect-next requires 0 arguments"
+msgstr "--bisect-next requiere 0 argumentos"
+
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log requiere 0 argumentos"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "ningún logfile proporcionado"
+
+#: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<opciones>] [<opciones-rev>] [<revision>] [--] <archivo>"
 
-#: builtin/blame.c:36
+#: builtin/blame.c:37
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<rev-opts> están documentadas en git-rev-list(1)"
 
-#: builtin/blame.c:409
+#: builtin/blame.c:410
 #, c-format
 msgid "expecting a color: %s"
 msgstr "esperando un color: %s"
 
-#: builtin/blame.c:416
+#: builtin/blame.c:417
 msgid "must end with a color"
 msgstr "tiene que terminar con un color"
 
-#: builtin/blame.c:729
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "color inválido '%s' en color.blame.repeatedLines"
 
-#: builtin/blame.c:747
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "valor inválido para blame.coloring"
 
-#: builtin/blame.c:822
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "no se pudo encontrar revision %s para ignorar"
 
-#: builtin/blame.c:844
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Mostrar las entradas blame como las encontramos, incrementalmente"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "mostrar las entradas blame como las encontramos, incrementalmente"
 
-#: builtin/blame.c:845
-msgid "Show blank SHA-1 for boundary commits (Default: off)"
-msgstr "Mostrar SHA-1 en blanco para commits extremos (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "no mostrar nombres de objetos de commits extremos (Default: off)"
 
-#: builtin/blame.c:846
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "No tratar commits raíces como extremos (Default: off)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "no tratar commits raíces como extremos (Default: off)"
 
-#: builtin/blame.c:847
-msgid "Show work cost statistics"
-msgstr "Mostrar estadísticas de costo de trabajo"
+#: builtin/blame.c:870
+msgid "show work cost statistics"
+msgstr "mostrar estadísticas de costo de trabajo"
 
-#: builtin/blame.c:848
-msgid "Force progress reporting"
-msgstr "Forzar el reporte de progreso"
+#: 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
+msgid "force progress reporting"
+msgstr "forzar el reporte de progreso"
 
-#: builtin/blame.c:849
-msgid "Show output score for blame entries"
-msgstr "Mostrar la puntuación de salida de las entradas de blame"
+#: builtin/blame.c:872
+msgid "show output score for blame entries"
+msgstr "mostrar la puntuación de salida de las entradas de blame"
 
-#: builtin/blame.c:850
-msgid "Show original filename (Default: auto)"
-msgstr "Mostrar nombre original del archivo (Default: auto)"
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
+msgstr "mostrar nombre original del archivo (Default: auto)"
 
-#: builtin/blame.c:851
-msgid "Show original linenumber (Default: off)"
-msgstr "Mostrar número de línea original (Default: off)"
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
+msgstr "mostrar número de línea original (Default: off)"
 
-#: builtin/blame.c:852
-msgid "Show in a format designed for machine consumption"
-msgstr "Mostrar en un formato diseñado para consumo de máquina"
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
+msgstr "mostrar en un formato diseñado para consumo de máquina"
 
-#: builtin/blame.c:853
-msgid "Show porcelain format with per-line commit information"
-msgstr "Mostrar en formato porcelana con información de commit por línea"
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
+msgstr "mostrar en formato porcelana con información de commit por línea"
 
-#: builtin/blame.c:854
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "Usar el mismo modo salida como git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "usar el mismo modo salida como git-annotate (Default: off)"
 
-#: builtin/blame.c:855
-msgid "Show raw timestamp (Default: off)"
-msgstr "Mostrar timestamp en formato raw (Default: off)"
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr "mostrar timestamp en formato raw (Default: off)"
 
-#: builtin/blame.c:856
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Mostrar SHA1 del commit en formato largo (Default: off)"
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr "mostrar SHA1 del commit en formato largo (Default: off)"
 
-#: builtin/blame.c:857
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Suprimir nombre del autor y timestamp (Default: off)"
+#: builtin/blame.c:880
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "suprimir nombre del autor y timestamp (Default: off)"
 
-#: builtin/blame.c:858
-msgid "Show author email instead of name (Default: off)"
-msgstr "Mostrar en cambio el email del autor (Default: off)"
+#: builtin/blame.c:881
+msgid "show author email instead of name (Default: off)"
+msgstr "mostrar en cambio el email del autor (Default: off)"
 
-#: builtin/blame.c:859
-msgid "Ignore whitespace differences"
-msgstr "Ignorar diferencias de espacios en blanco"
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
+msgstr "ignorar diferencias de espacios en blanco"
 
-#: builtin/blame.c:860 builtin/log.c:1721
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:860
-msgid "Ignore <rev> when blaming"
-msgstr "Ignorar <rev> durante el blame"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "ignorar <rev> durante el blame"
 
-#: builtin/blame.c:861
-msgid "Ignore revisions from <file>"
-msgstr "Ignorar revisiones de <archivo>"
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "ignorar revisiones de <archivo>"
 
-#: builtin/blame.c:862
+#: builtin/blame.c:885
 msgid "color redundant metadata from previous line differently"
 msgstr "colorear metadata redundante de líneas previas de manera diferente"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "colorear líneas por edad"
 
-#: builtin/blame.c:864
-msgid "Spend extra cycles to find better match"
-msgstr "Ocupo más ciclos para encontrar mejoras resultados"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "ocupar más ciclos para encontrar mejoras resultados"
 
-#: builtin/blame.c:865
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Use revisiones desde <archivo> en lugar de llamar git-rev-list"
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "use revisiones desde <archivo> en lugar de llamar git-rev-list"
 
-#: builtin/blame.c:866
-msgid "Use <file>'s contents as the final image"
-msgstr "Usar contenido de <archivo> como imagen final"
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
+msgstr "usar contenido de <archivo> como imagen final"
 
-#: builtin/blame.c:867 builtin/blame.c:868
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "puntaje"
 
-#: builtin/blame.c:867
-msgid "Find line copies within and across files"
-msgstr "Encontrar copias de líneas entre y a través de archivos"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "encontrar copias de líneas entre y a través de archivos"
 
-#: builtin/blame.c:868
-msgid "Find line movements within and across files"
-msgstr "Encontrar movimientos de líneas entre y a través de archivos"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "encontrar movimientos de líneas entre y a través de archivos"
 
-#: builtin/blame.c:869
-msgid "n,m"
-msgstr "n,m"
+#: builtin/blame.c:892
+msgid "range"
+msgstr "rango"
 
-#: builtin/blame.c:869
-msgid "Process only line range n,m, counting from 1"
-msgstr "Procesar solo el rango de líneas n,m, contando desde 1"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
+msgstr ""
+"Procesar solo el rango de líneas <inicio>,<fin> o función: <nombre-función>"
 
-#: builtin/blame.c:921
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress no puede ser usado con --incremental o formatos porcelana"
 
@@ -10706,24 +11328,24 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:972
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "hace 4 años, 11 meses"
 
-#: builtin/blame.c:1087
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "archivo %s tiene solo %lu línea"
 msgstr[1] "archivo %s tiene solo %lu líneas"
 
-#: builtin/blame.c:1133
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Blaming a líneas"
 
 #: builtin/branch.c:29
-msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
-msgstr "git branch [<opciones>] [-r | -a] [--merged | --no-merged]"
+msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
+msgstr "git branch [<opciones>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
 msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
@@ -10764,7 +11386,7 @@
 "not deleting branch '%s' that is not yet merged to\n"
 "         '%s', even though it is merged to HEAD."
 msgstr ""
-"no borrando rama '%s' que todavía no ha sido fusionada \n"
+"no borrando rama '%s' que todavía no ha sido fusionada\n"
 "\ta '%s', aunque se fusione con HEAD."
 
 #: builtin/branch.c:172
@@ -10785,121 +11407,111 @@
 msgid "Update of config-file failed"
 msgstr "Falló de actualización de config-file"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "no se puede usar-a con -d"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "No se pudo revisar el objeto commit para HEAD"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "No se puede borrar rama '%s' que cuenta con checkout en '%s'"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "rama de rastreo remoto '%s' no encontrada."
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "rama '%s' no encontrada."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Error al eliminar la rama de rastreo remota '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Error al eliminar la rama '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Eliminada la rama de rastreo remota %s (era %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Eliminada la rama %s (era %s)..\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "no es posible analizar el string de formato"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "no se pudo resolver HEAD"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) apunta fuera de refs/heads/"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Rama %s está siendo rebasada en %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Rama %s está siendo bisecada en %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "no se puede copiar la rama actual mientras no se está en ninguna."
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr "no se puede renombrar la rama actual mientras no se está en ninguna."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nombre de rama inválido: '%s'"
 
-#: builtin/branch.c:542
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Cambio de nombre de rama fallido"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Copiado de rama fallido"
 
-#: builtin/branch.c:548
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Copia creada de la rama malnombrada '%s'"
 
-#: builtin/branch.c:551
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Rama mal llamada '%s' renombrada"
 
-#: builtin/branch.c:557
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "¡Rama renombrada a %s, pero HEAD no está actualizado!"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "La rama está renombrada, pero falló la actualización del archivo de "
 "configuración"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "La rama está copiada, pero falló la actualización del archivo de "
 "configuración"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -10910,180 +11522,180 @@
 "%s\n"
 "Las líneas que comiencen con '%c' serán eliminadas.\n"
 
-#: builtin/branch.c:618
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Opciones genéricas"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "mostrar hash y tema, dar dos veces para rama upstream"
 
-#: builtin/branch.c:621
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "suprimir mensajes informativos"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "configurando modo tracking (mirar git-pull(1))"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "no usar"
 
-#: builtin/branch.c:626 builtin/rebase.c:520
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "upstream"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "cambiar info de upstream"
 
-#: builtin/branch.c:627
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "desconfigurando la info de upstream"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "usar salida con colores"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "actuar en ramas de traqueo remoto"
 
-#: builtin/branch.c:631 builtin/branch.c:633
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "mostrar solo ramas que contienen el commit"
 
-#: builtin/branch.c:632 builtin/branch.c:634
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "mostrar solo ramas que no contienen el commit"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Acciones específicas de git-branch:"
 
-#: builtin/branch.c:638
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "listar ramas de remote-tracking y locales"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "borrar ramas totalmente fusionadas"
 
-#: builtin/branch.c:641
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "borrar rama (incluso si no está fusionada)"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "mover/renombrar una rama y su reflog"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "mover/renombrar una rama, incluso si el destino existe"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "copiar una rama y su reflog"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "copiar una rama, incluso si el objetivo existe"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "listar nombres de ramas"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "muestra el nombre de branch actual"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "crea el reflog de la rama"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "edita la descripción de la rama"
 
-#: builtin/branch.c:651
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "fuerza la creación,movimiento/renombrado,borrado"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "muestra solo ramas que han sido fusionadas"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "muestra solo ramas que no han sido fusionadas"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "muestra las ramas en columnas"
 
-#: builtin/branch.c:656 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "objeto"
 
-#: builtin/branch.c:657
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "imprimir sólo las ramas del objeto"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "ordenamiento y filtrado son case-insensitive"
 
-#: builtin/branch.c:659 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "formato para usar para el output"
 
-#: builtin/branch.c:682 builtin/clone.c:789
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "¡HEAD no encontrado abajo de refs/heads!"
 
-#: builtin/branch.c:706
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column y --verbose son incompatibles"
 
-#: builtin/branch.c:721 builtin/branch.c:775 builtin/branch.c:784
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "se necesita el nombre de la rama"
 
-#: builtin/branch.c:751
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "No se puede dar descripción al HEAD desacoplado"
 
-#: builtin/branch.c:756
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "no se puede editar la descripción de más de una rama"
 
-#: builtin/branch.c:763
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Aún no hay commits en la rama '%s'."
 
-#: builtin/branch.c:766
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "No hay ninguna rama llamada '%s'."
 
-#: builtin/branch.c:781
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "demasiadas ramas para una operación de copiado"
 
-#: builtin/branch.c:790
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "demasiados argumentos para una operación de renombrado"
 
-#: builtin/branch.c:795
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "demasiados argumentos para configurar un nuevo upstream"
 
-#: builtin/branch.c:799
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11091,32 +11703,32 @@
 "no se pudo configurar upstream de HEAD a %s cuando este no apunta a ninguna "
 "rama."
 
-#: builtin/branch.c:802 builtin/branch.c:825
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "no hay tal rama '%s'"
 
-#: builtin/branch.c:806
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "la rama '%s' no existe"
 
-#: builtin/branch.c:819
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "demasiados argumentos para desconfigurar upstream"
 
-#: builtin/branch.c:823
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "no se puede desconfigurar upstream de HEAD cuando este no apunta a ninguna "
 "rama."
 
-#: builtin/branch.c:829
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Rama '%s' no tiene información de upstream"
 
-#: builtin/branch.c:839
+#: builtin/branch.c:854
 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>?"
@@ -11124,7 +11736,7 @@
 "Las opciones -a, y -r, de 'git branch' no toman un nombre de rama.\n"
 "¿Quisiste usar: -a|-r --list <patrón>?"
 
-#: builtin/branch.c:843
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11132,6 +11744,104 @@
 "la opción '--set-upstream' ya no es soportada. Considere usar '--track' o '--"
 "set-upstream-to' en cambio."
 
+#: builtin/bugreport.c:15
+msgid "git version:\n"
+msgstr "versión de git:\n"
+
+#: builtin/bugreport.c:21
+#, c-format
+msgid "uname() failed with error '%s' (%d)\n"
+msgstr "uname() falló con error '%s' (%d)\n"
+
+#: builtin/bugreport.c:31
+msgid "compiler info: "
+msgstr "información del compilador: "
+
+#: builtin/bugreport.c:34
+msgid "libc info: "
+msgstr "información de libc: "
+
+#: builtin/bugreport.c:80
+msgid "not run from a git repository - no hooks to show\n"
+msgstr "no ejecutado desde un repositorio git - no hay hooks para mostrar\n"
+
+#: builtin/bugreport.c:90
+msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
+msgstr ""
+"git bugreport [-o|--output-directory <archivo>] [-s|--suffix <formato>]"
+
+#: builtin/bugreport.c:97
+msgid ""
+"Thank you for filling out a Git bug report!\n"
+"Please answer the following questions to help us understand your issue.\n"
+"\n"
+"What did you do before the bug happened? (Steps to reproduce your issue)\n"
+"\n"
+"What did you expect to happen? (Expected behavior)\n"
+"\n"
+"What happened instead? (Actual behavior)\n"
+"\n"
+"What's different between what you expected and what actually happened?\n"
+"\n"
+"Anything else you want to add:\n"
+"\n"
+"Please review the rest of the bug report below.\n"
+"You can delete any lines you don't wish to share.\n"
+msgstr ""
+"¡Gracias por prepara un reporte de bug de Git!\n"
+"Por favor responde las siguientes preguntas para ayudarnos a entender el "
+"problema.\n"
+"\n"
+"¿Qué hiciste antes de que sucediera el bug? (Pasos para reproducir el "
+"problema)\n"
+"\n"
+"¿Qué esperabas que sucediera? (Comportamiento esperado)\n"
+"\n"
+"¿Qué sucedio en lugar de eso? (Comportamiento real)\n"
+"\n"
+"¿Qué es diferente entre lo que esperabas y lo que pasó?\n"
+"\n"
+"Cualquier cosa que quieras agregar:\n"
+"\n"
+"Por favor revisa el resto del reporte abajo.\n"
+"Puedes borrar cualquier línea que no desees compartir.\n"
+
+#: builtin/bugreport.c:136
+msgid "specify a destination for the bugreport file"
+msgstr "especificar el destino para el archivo de reporte de bug"
+
+#: builtin/bugreport.c:138
+msgid "specify a strftime format suffix for the filename"
+msgstr "especificar el sufijo formato strftime para el nombre del archivo"
+
+#: builtin/bugreport.c:160
+#, c-format
+msgid "could not create leading directories for '%s'"
+msgstr "no se pudo crear directorios principales para '%s'"
+
+#: builtin/bugreport.c:167
+msgid "System Info"
+msgstr "Información del sistema"
+
+#: builtin/bugreport.c:170
+msgid "Enabled Hooks"
+msgstr "Activar Hooks"
+
+#: builtin/bugreport.c:177
+#, c-format
+msgid "couldn't create a new file at '%s'"
+msgstr "no se pudo crear un archivo en '%s'"
+
+#: builtin/bugreport.c:180
+#, c-format
+msgid "unable to write to %s"
+msgstr "no es posible escribir en %s"
+
+#: builtin/bugreport.c:190
+#, c-format
+msgid "Created new report at '%s'.\n"
+msgstr "Crear un nuevo reporte en '%s'.\n"
+
 #: builtin/bundle.c:15 builtin/bundle.c:23
 msgid "git bundle create [<options>] <file> <git-rev-list args>"
 msgstr "git bundle create [<opciones>] <file> <git-rev-list args>"
@@ -11148,44 +11858,48 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <archivo> [<nombre-de-ref>...]"
 
-#: builtin/bundle.c:66 builtin/pack-objects.c:3448
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "no mostrar medidor de progreso"
 
-#: builtin/bundle.c:68 builtin/pack-objects.c:3450
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "mostrar medidor de progreso"
 
-#: builtin/bundle.c:70 builtin/pack-objects.c:3452
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "mostrar medidor de progreso durante la fase de escritura de objeto"
 
-#: builtin/bundle.c:73 builtin/pack-objects.c:3455
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similar a --all-progress cuando medidor de progreso es mostrado"
 
-#: builtin/bundle.c:93
+#: builtin/bundle.c:76
+msgid "specify bundle format version"
+msgstr "especificar la versión del formato del paquete"
+
+#: builtin/bundle.c:96
 msgid "Need a repository to create a bundle."
 msgstr "Se necesita un repositorio para agrupar."
 
-#: builtin/bundle.c:104
+#: builtin/bundle.c:107
 msgid "do not show bundle details"
 msgstr "no mostrar detalles del bundle"
 
-#: builtin/bundle.c:119
+#: builtin/bundle.c:122
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s está bien\n"
 
-#: builtin/bundle.c:160
+#: builtin/bundle.c:163
 msgid "Need a repository to unbundle."
 msgstr "Se necesita un repositorio para desagrupar."
 
-#: builtin/bundle.c:168 builtin/remote.c:1686
+#: builtin/bundle.c:171 builtin/remote.c:1700
 msgid "be verbose; must be placed before a subcommand"
 msgstr "ser verboso; tiene que ser agregado antes de un subcomando"
 
-#: builtin/bundle.c:190 builtin/remote.c:1717
+#: builtin/bundle.c:193 builtin/remote.c:1731
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Sub-comando desconocido: %s"
@@ -11238,7 +11952,7 @@
 msgid "for blob objects, run filters on object's content"
 msgstr "para objetos blob, ejecuta filters en el contenido del objeto"
 
-#: builtin/cat-file.c:648 git-submodule.sh:958
+#: builtin/cat-file.c:648
 msgid "blob"
 msgstr "blob"
 
@@ -11299,8 +12013,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "terminar registros de entrada y salida con un carácter NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1486 builtin/gc.c:537
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "suprimir el reporte de progreso"
 
@@ -11312,27 +12026,27 @@
 msgid "ignore index when checking"
 msgstr "ignorar el índice cuando se revise"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "no se puede especificar los nombres de rutas con --stdin"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z sólo tiene sentido con --stdin"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "ruta no especificada"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet solo es válido con un nombre de ruta único"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "no se puede tener ambos --quiet y --verbose"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching sólo es válida con --verbose"
 
@@ -11353,167 +12067,171 @@
 msgid "no contacts specified"
 msgstr "contactos no especificados"
 
-#: builtin/checkout-index.c:131
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<opciones>]"
+
+#: 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
+msgid "string"
+msgstr "string"
+
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+msgid "when creating files, prepend <string>"
+msgstr "cuando cree archivos, anteponer <string>"
+
+#: builtin/checkout-index.c:152
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<opciones>] [--] [<archivo>...]"
 
-#: builtin/checkout-index.c:148
+#: builtin/checkout-index.c:169
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage tiene que estar entre 1 y 3 o all"
 
-#: builtin/checkout-index.c:164
+#: builtin/checkout-index.c:187
 msgid "check out all files in the index"
 msgstr "revisar todos los archivos en el índice"
 
-#: builtin/checkout-index.c:165
+#: builtin/checkout-index.c:188
 msgid "force overwrite of existing files"
 msgstr "forzar sobreescritura de los archivos existentes"
 
-#: builtin/checkout-index.c:167
+#: builtin/checkout-index.c:190
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "no hay advertencias para los archivos existentes y los archivos no están en "
 "el índice"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:192
 msgid "don't checkout new files"
 msgstr "no revisar archivos nuevos"
 
-#: builtin/checkout-index.c:171
+#: builtin/checkout-index.c:194
 msgid "update stat information in the index file"
 msgstr "actualizar información de estado en el archivo índice"
 
-#: builtin/checkout-index.c:175
+#: builtin/checkout-index.c:198
 msgid "read list of paths from the standard input"
 msgstr "leer lista de rutas desde standard input"
 
-#: builtin/checkout-index.c:177
+#: builtin/checkout-index.c:200
 msgid "write the content to temporary files"
 msgstr "escribir el contenido en un archivo temporal"
 
-#: builtin/checkout-index.c:178 builtin/column.c:31
-#: builtin/submodule--helper.c:1400 builtin/submodule--helper.c:1403
-#: builtin/submodule--helper.c:1411 builtin/submodule--helper.c:1909
-#: builtin/worktree.c:754
-msgid "string"
-msgstr "string"
-
-#: builtin/checkout-index.c:179
-msgid "when creating files, prepend <string>"
-msgstr "cuando cree archivos, anteponer <string>"
-
-#: builtin/checkout-index.c:181
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "copiar los archivos del stage nombrado"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<opciones>]  <rama>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<opciones>] [<rama>] -- <archivo>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<opciones>] [<rama>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opciones>] [--source=<rama>] -- <archivo>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "ruta '%s' no tiene nuestra versión"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "ruta '%s' no tiene su versión"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "ruta '%s' no tiene todas las versiones necesarias"
 
-#: builtin/checkout.c:256
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "ruta '%s' no tiene versiones necesarias"
 
-#: builtin/checkout.c:274
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "ruta '%s': no se puede fusionar"
 
-#: builtin/checkout.c:290
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Incapaz de agregar resultados de fusión a '%s'"
 
-#: builtin/checkout.c:395
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Recreado %d conflicto de merge"
 msgstr[1] "Recreados %d conflictos de merge"
 
-#: builtin/checkout.c:400
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Actualizada %d ruta para %s"
 msgstr[1] "Actualizadas %d rutas para %s"
 
-#: builtin/checkout.c:407
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Actualizada %d ruta desde el index"
 msgstr[1] "Actualizadas %d rutas desde el index"
 
-#: builtin/checkout.c:430 builtin/checkout.c:433 builtin/checkout.c:436
-#: builtin/checkout.c:440
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' no puede ser usada con rutas actualizadas"
 
-#: builtin/checkout.c:443 builtin/checkout.c:446
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' no puede ser usado con %s"
 
-#: builtin/checkout.c:450
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "No se puede actualizar rutas y cambiar a la rama '%s' al mismo tiempo."
 
-#: builtin/checkout.c:454
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ni '%s' o '%s' están especificados"
 
-#: builtin/checkout.c:458
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' tiene que ser usado cuando '%s' no es especificado"
 
-#: builtin/checkout.c:463 builtin/checkout.c:468
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' o '%s' no puede ser usado con %s"
 
-#: builtin/checkout.c:527 builtin/checkout.c:534
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "ruta '%s' no esta fusionada"
 
-#: builtin/checkout.c:702
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "necesitas resolver tu índice actual primero"
 
-#: builtin/checkout.c:756
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11522,50 +12240,50 @@
 "no se puede continuar con los cambios en stage en los siguientes archivos:\n"
 "%s"
 
-#: builtin/checkout.c:859
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "No se puede hacer reflog para '%s': %s\n"
 
-#: builtin/checkout.c:901
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD está ahora en"
 
-#: builtin/checkout.c:905 builtin/clone.c:720
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "no es posible actualizar  HEAD"
 
-#: builtin/checkout.c:909
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Reiniciar rama '%s'\n"
 
-#: builtin/checkout.c:912
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Ya en '%s'\n"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Rama reiniciada y cambiada a '%s'\n"
 
-#: builtin/checkout.c:918 builtin/checkout.c:1342
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Cambiado a nueva rama '%s'\n"
 
-#: builtin/checkout.c:920
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Cambiado a rama '%s'\n"
 
-#: builtin/checkout.c:971
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... y %d más.\n"
 
-#: builtin/checkout.c:977
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11588,7 +12306,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:996
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11615,19 +12333,19 @@
 " git branch <nombre-de-rama> %s\n"
 "\n"
 
-#: builtin/checkout.c:1031
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "error interno en camino de revisión"
 
-#: builtin/checkout.c:1035
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "La posición previa de HEAD era"
 
-#: builtin/checkout.c:1075 builtin/checkout.c:1337
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Estás en una rama por nacer"
 
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11636,7 +12354,7 @@
 "'%s' puede ser tanto un archivo local como una rama de rastreo.\n"
 "Por favor use -- (y opcionalmente --no-guess) para desambiguar"
 
-#: builtin/checkout.c:1157
+#: builtin/checkout.c:1191
 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"
@@ -11657,51 +12375,51 @@
 "de nombre <nombre> remota, como 'origin', considera configurar\n"
 "checkout.defaultRemote=origin en tu configuración."
 
-#: builtin/checkout.c:1167
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' concordó con multiples (%d) ramas de rastreo remoto"
 
-#: builtin/checkout.c:1233
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "solo una referencia esperada"
 
-#: builtin/checkout.c:1250
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "solo una referencia esperada, %d entregadas."
 
-#: builtin/checkout.c:1296 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referencia inválida: %s"
 
-#: builtin/checkout.c:1309 builtin/checkout.c:1675
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la referencia no es n árbol: %s"
 
-#: builtin/checkout.c:1356
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "se esperaba un branch, se obtuvo tag '%s'"
 
-#: builtin/checkout.c:1358
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "se espera una rama, se obtuvo una rama remota '%s'"
 
-#: builtin/checkout.c:1359 builtin/checkout.c:1367
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "se esperaba branch, se obuto '%s'"
 
-#: builtin/checkout.c:1362
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "se espera una rama, se obtuvo commit '%s'"
 
-#: builtin/checkout.c:1378
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11709,7 +12427,7 @@
 "no se puede cambiar de branch durante un merge\n"
 "Considera \"git merge --quit\" o \"git worktree add\"."
 
-#: builtin/checkout.c:1382
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11717,7 +12435,7 @@
 "no se puede cambiar de branch en medio de una sesión de am\n"
 "Considera \"git am --quit\" o \"git worktree add\"."
 
-#: builtin/checkout.c:1386
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11725,7 +12443,7 @@
 "no se puede cambiar de branch durante un rebase\n"
 "Considera \"git rebase --quit\" o \"git worktree add\"."
 
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11733,7 +12451,7 @@
 "no se puede cambiar de branch durante un cherry-pick\n"
 "Considera \"git cherry-pick --quit\" o \"git worktree add\"."
 
-#: builtin/checkout.c:1394
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11741,144 +12459,137 @@
 "no se puede cambiar de branch durante un revert\n"
 "Considera \"git revert --quit\" o \"git worktree add\"."
 
-#: builtin/checkout.c:1398
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr "estás cambiando ramas durante un bisect"
 
-#: builtin/checkout.c:1405
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "rutas no pueden ser usadas con cambios de rama"
 
-#: builtin/checkout.c:1408 builtin/checkout.c:1412 builtin/checkout.c:1416
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' no puede ser usado con cambios de ramas"
 
-#: builtin/checkout.c:1420 builtin/checkout.c:1423 builtin/checkout.c:1426
-#: builtin/checkout.c:1431 builtin/checkout.c:1436
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' no puede ser usado con '%s'"
 
-#: builtin/checkout.c:1433
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' no puede tomar <punto de partida>"
 
-#: builtin/checkout.c:1441
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "No se puede cambiar rama a un '%s' sin commits"
 
-#: builtin/checkout.c:1448
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "falta branch o commit como argumento"
 
-#: builtin/checkout.c:1490 builtin/clone.c:91 builtin/commit-graph.c:82
-#: builtin/commit-graph.c:189 builtin/fetch.c:168 builtin/merge.c:288
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:561
-#: builtin/send-pack.c:173
-msgid "force progress reporting"
-msgstr "forzar el reporte de progreso"
-
-#: builtin/checkout.c:1491
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "realizar una fusión de tres vías con la rama nueva"
 
-#: builtin/checkout.c:1492 builtin/log.c:1709 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "estilo"
 
-#: builtin/checkout.c:1493
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "conflicto de estilos (merge o diff3)"
 
-#: builtin/checkout.c:1505 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "desacoplar HEAD en el commit nombrado"
 
-#: builtin/checkout.c:1506
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "configurar info de upstream para una rama nueva"
 
-#: builtin/checkout.c:1508
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "forzar el checkout (descartar modificaciones locales)"
 
-#: builtin/checkout.c:1510
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "nueva-rama"
 
-#: builtin/checkout.c:1510
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "nueva rama no emparentada"
 
-#: builtin/checkout.c:1512 builtin/merge.c:292
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "actualizar archivos ignorados (default)"
 
-#: builtin/checkout.c:1515
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr "no revise si otro árbol de trabajo contiene la ref entregada"
 
-#: builtin/checkout.c:1528
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "hacer checkout a  nuestra versión para archivos sin fusionar"
 
-#: builtin/checkout.c:1531
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "hacer checkout a su versión para los archivos sin fusionar"
 
-#: builtin/checkout.c:1535
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "no limitar pathspecs a dispersar entradas solamente"
 
-#: builtin/checkout.c:1590
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c y --orphan son mutuamente exclusivas"
 
-#: builtin/checkout.c:1594
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p y --overlay son mutuamente exclusivas"
 
-#: builtin/checkout.c:1631
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track necesita el nombre de una rama"
 
-#: builtin/checkout.c:1636
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "falta nombre de rama; prueba -%c"
 
-#: builtin/checkout.c:1668
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "no se pudo resolver %s"
 
-#: builtin/checkout.c:1684
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "especificación de ruta inválida"
 
-#: builtin/checkout.c:1691
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' no es un commit y una rama '%s' no puede ser creada desde este"
 
-#: builtin/checkout.c:1695
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach no toma un argumento de ruta '%s'"
 
-#: builtin/checkout.c:1704
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file es incompatible con --detach"
 
-#: builtin/checkout.c:1707 builtin/reset.c:325 builtin/stash.c:1503
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file es incompatible con --patch"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -11886,70 +12597,70 @@
 "git checkout: --ours/--theirs, --force y --merge son incompatibles cuando\n"
 "se revisa fuera del índice."
 
-#: builtin/checkout.c:1723
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "debes especificar path(s) para restaurar"
 
-#: builtin/checkout.c:1749 builtin/checkout.c:1751 builtin/checkout.c:1800
-#: builtin/checkout.c:1802 builtin/clone.c:121 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2295 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "rama"
 
-#: builtin/checkout.c:1750
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "crear y hacer checkout a una nueva rama"
 
-#: builtin/checkout.c:1752
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "crear/reiniciar y hacer checkout a una rama"
 
-#: builtin/checkout.c:1753
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "crear un reflog para una nueva rama"
 
-#: builtin/checkout.c:1755
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "adivinar segunda opción 'git checkout <no-hay-tal-rama>' (default)"
 
-#: builtin/checkout.c:1756
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "usar modo overlay (default)"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "crear y hacer switch a una nueva rama"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "crear/reiniciar y hacer switch a una rama"
 
-#: builtin/checkout.c:1805
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "adivinar segunda opción 'git checkout <no-hay-tal-rama>'"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "descartar modificaciones locales"
 
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "de qué árbol hacer el checkout"
 
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "restaurar el index"
 
-#: builtin/checkout.c:1845
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "restaurar el árbol de trabajo (default)"
 
-#: builtin/checkout.c:1847
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "ignorar entradas no fusionadas"
 
-#: builtin/checkout.c:1848
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "usar modo overlay"
 
@@ -11979,17 +12690,12 @@
 msgid "Would skip repository %s\n"
 msgstr "Se saltara repositorio %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "falló al borrar %s"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
 msgstr "no se pudo lstat %s\n"
 
-#: builtin/clean.c:302 git-add--interactive.perl:595
+#: builtin/clean.c:302 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12002,7 +12708,7 @@
 "foo        - selecciona un objeto basado en un prefijo único\n"
 "           - (vacío) no elegir nada\n"
 
-#: builtin/clean.c:306 git-add--interactive.perl:604
+#: builtin/clean.c:306 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12023,8 +12729,8 @@
 "*          - escoger todos los objetos\n"
 "           - (vacío) terminar selección\n"
 
-#: builtin/clean.c:521 git-add--interactive.perl:570
-#: git-add--interactive.perl:575
+#: builtin/clean.c:521 git-add--interactive.perl:568
+#: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "¿Ahh (%s)?\n"
@@ -12060,7 +12766,7 @@
 "?                   - help for prompt selection"
 msgstr ""
 "clean               - comenzar la limpieza\n"
-"filtrar por patrón   - excluye objetos del borrado \n"
+"filtrar por patrón   - excluye objetos del borrado\n"
 "elegir por números   - selecciona objetos a ser borrados por numero\n"
 "preguntar cada uno     - confirmar cada borrado (como \"rm -i\")\n"
 "quit                - parar limpieza\n"
@@ -12094,8 +12800,8 @@
 msgstr "borrar directorios completos"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:909 builtin/log.c:182 builtin/log.c:184
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "patrón"
@@ -12136,163 +12842,168 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opciones>] [--] <repo> [<directorio>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "no clonar repositorios superficiales"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "no crear checkout"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:554
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "crear un repositorio vacío"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "crear un repositorio espejo (implica vacío)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "clonar de un repositorio local"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "no usar hardlinks, siempre copiar"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "configurar como repositorio compartido"
 
-#: builtin/clone.c:106
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "pathspec"
 
-#: builtin/clone.c:106
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "inicializar submódulos en el clonado"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "numero de submódulos clonados en paralelo"
 
-#: builtin/clone.c:111 builtin/init-db.c:551
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "directorio-template"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "directorio del cual los templates serán usados"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1407
-#: builtin/submodule--helper.c:1912
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "repositorio de referencia"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1409
-#: builtin/submodule--helper.c:1914
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "usa--reference  solamente si estás clonado"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/init-db.c:562
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3514 builtin/repack.c:329
+#: 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
 msgid "name"
 msgstr "nombre"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "use <nombre> en lugar de 'origin' para rastrear upstream"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "checkout <rama> en lugar de HEAD remota"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "ruta para git-upload-pack en el remoto"
 
-#: builtin/clone.c:125 builtin/fetch.c:169 builtin/grep.c:848
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "profundidad"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "crear un clon superficial para esa profundidad"
 
-#: builtin/clone.c:127 builtin/fetch.c:171 builtin/pack-objects.c:3503
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "tiempo"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "crear un clon superficial desde el tiempo específico"
 
-#: builtin/clone.c:129 builtin/fetch.c:173 builtin/fetch.c:196
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1304
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "revision"
 
-#: builtin/clone.c:130 builtin/fetch.c:174 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "ahondando historia de clon superficial, excluyendo rev"
 
-#: builtin/clone.c:132 builtin/submodule--helper.c:1419
-#: builtin/submodule--helper.c:1928
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clonar solo una rama,HEAD o --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "no clonar ningún tag, y hacer que los subsiguientes fetch no los sigan"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "cualquier submódulo clonado será superficial"
 
-#: builtin/clone.c:137 builtin/init-db.c:560
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "separa git dir del árbol de trabajo"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "llave=valor"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "configurar config dentro del nuevo repositorio"
 
-#: builtin/clone.c:142 builtin/fetch.c:191 builtin/ls-remote.c:76
-#: builtin/pull.c:230 builtin/push.c:570 builtin/send-pack.c:171
+#: 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
 msgid "server-specific"
 msgstr "especifico-de-servidor"
 
-#: builtin/clone.c:142 builtin/fetch.c:191 builtin/ls-remote.c:76
-#: builtin/pull.c:231 builtin/push.c:570 builtin/send-pack.c:172
+#: 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
 msgid "option to transmit"
 msgstr "opción para trasmitir"
 
-#: builtin/clone.c:143 builtin/fetch.c:192 builtin/pull.c:234
-#: builtin/push.c:571
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
+#: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "solo usar direcciones IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:194 builtin/pull.c:237
-#: builtin/push.c:573
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
+#: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "solo usar direcciones IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "cualquier submódulo clonado usará su branch de rastreo remoto"
 
-#: builtin/clone.c:151
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "inicializar archivo sparse-checkout para incluir solo archivos en la raíz"
 
-#: builtin/clone.c:287
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12300,42 +13011,42 @@
 "No se pudo adivinar ningún nombre de directorio.\n"
 "Por favor especifique un directorio en la línea de comando"
 
-#: builtin/clone.c:340
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: No se pudo agregar un alterno para '%s': %s\n"
 
-#: builtin/clone.c:413
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe pero no es un directorio"
 
-#: builtin/clone.c:431
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "falló al iniciar el iterador sobre '%s'"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "falló al crear link '%s'"
 
-#: builtin/clone.c:466
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "falló al copiar archivo a '%s'"
 
-#: builtin/clone.c:471
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "falló al iterar sobre '%s'"
 
-#: builtin/clone.c:498
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "hecho.\n"
 
-#: builtin/clone.c:512
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12345,100 +13056,105 @@
 "Puedes inspeccionar a qué se hizo checkout con 'git status'\n"
 "y volver a intentarlo con 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:589
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "No se pudo encontrar la rama remota %s para clonar."
 
-#: builtin/clone.c:708
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "incapaz de actualizar %s"
 
-#: builtin/clone.c:756
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "falló al inicializar sparse-checkout"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "remoto HEAD refiere a un ref inexistente, no se puede hacer checkout.\n"
 
-#: builtin/clone.c:811
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "no es posible realizar checkout en el árbol de trabajo"
 
-#: builtin/clone.c:868
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "no es posible escribir parámetros al archivo config"
 
-#: builtin/clone.c:931
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "no se puede reempaquetar para limpiar"
 
-#: builtin/clone.c:933
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "no se puede desvincular archivos alternos temporales"
 
-#: builtin/clone.c:971 builtin/receive-pack.c:1982
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Muchos argumentos."
 
-#: builtin/clone.c:975
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Tienes que especificar un repositorio para clonar."
 
-#: builtin/clone.c:988
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "Las opciones --bare y --origin %s son incompatibles."
 
-#: builtin/clone.c:991
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare y --separate-git-dir son incompatibles."
 
-#: builtin/clone.c:1007
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "repositorio '%s' no existe"
 
-#: builtin/clone.c:1011 builtin/fetch.c:1794
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "profundidad %s no es un numero positivo"
 
-#: builtin/clone.c:1021
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "la ruta de destino '%s' ya existe y no es un directorio vacío."
 
-#: builtin/clone.c:1033
+#: builtin/clone.c:1055
+#, c-format
+msgid "repository path '%s' already exists and is not an empty directory."
+msgstr "La ruta del repositorio '%s' ya existe y no es un directorio vacío."
+
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "directorio de trabajo '%s' ya existe."
 
-#: builtin/clone.c:1048 builtin/clone.c:1069 builtin/difftool.c:271
-#: builtin/log.c:1886 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "no se pudo crear directorios principales de '%s'"
 
-#: builtin/clone.c:1053
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "no se pudo crear un árbol de trabajo '%s'"
 
-#: builtin/clone.c:1073
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clonando en un repositorio vacío '%s'...\n"
 
-#: builtin/clone.c:1075
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clonando en '%s'...\n"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -12446,36 +13162,41 @@
 "clone --recursive no es compatible con --reference y --reference-if-able al "
 "mismo tiempo"
 
-#: builtin/clone.c:1164
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#, c-format
+msgid "'%s' is not a valid remote name"
+msgstr "'%s' no es un nombre remoto válido"
+
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth es ignorada en clonaciones locales; usa file:// más bien."
 
-#: builtin/clone.c:1166
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since es ignorado en el clon local; use file:// ."
 
-#: builtin/clone.c:1168
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude es ignorado en clones locales; use file://."
 
-#: builtin/clone.c:1170
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter es ignorado en clones locales; usa file:// en su lugar."
 
-#: builtin/clone.c:1173
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "repositorio fuente es superficial, ignorando --local"
 
-#: builtin/clone.c:1178
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local es ignorado"
 
-#: builtin/clone.c:1262 builtin/clone.c:1270
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Rama remota %s no encontrada en upstream %s"
 
-#: builtin/clone.c:1273
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Pareces haber clonado un repositorio sin contenido."
 
@@ -12492,121 +13213,125 @@
 msgstr "capa a usar"
 
 #: builtin/column.c:30
-msgid "Maximum width"
-msgstr "Ancho máximo"
+msgid "maximum width"
+msgstr "ancho máximo"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
-msgstr "Realizando padding en el borde izquierdo"
+msgid "padding space on left border"
+msgstr "realizando padding en el borde izquierdo"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
-msgstr "Realizando padding en el borde derecho"
+msgid "padding space on right border"
+msgstr "realizando padding en el borde derecho"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "Realizando padding entre columnas"
+msgid "padding space between columns"
+msgstr "realizando padding entre columnas"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
 msgstr "--command debe ser el primer argumento"
 
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:21
+#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
 msgid ""
 "git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 msgstr ""
 "git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 
-#: builtin/commit-graph.c:14 builtin/commit-graph.c:26
+#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append] [--"
 "split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]progress] <split options>"
+"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
 msgstr ""
-"git commit-graph write [--object-dir <objeto dir>] [--append] [--"
+"git commit-graph write [--object-dir <objdir>] [--append] [--"
 "split[=<estrategia>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]progress] <opciones de split>"
+"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <opciones de split>"
 
-#: builtin/commit-graph.c:62
+#: builtin/commit-graph.c:64
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "no se pudo entoncrar el objeto directorio concordante con %s"
 
-#: builtin/commit-graph.c:78 builtin/commit-graph.c:177
-#: builtin/commit-graph.c:276 builtin/fetch.c:180 builtin/log.c:1678
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "dir"
 
-#: builtin/commit-graph.c:79 builtin/commit-graph.c:178
-#: builtin/commit-graph.c:277
-msgid "The object directory to store the graph"
-msgstr "El directorio de objetos para guardar el gráfico"
+#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
+#: builtin/commit-graph.c:317
+msgid "the object directory to store the graph"
+msgstr "el directorio de objetos para guardar el gráfico"
 
-#: builtin/commit-graph.c:81
+#: builtin/commit-graph.c:83
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr "si el commit-graph está cortado, solo verifica la punta del archivo"
 
-#: builtin/commit-graph.c:104
+#: builtin/commit-graph.c:106
 #, c-format
 msgid "Could not open commit-graph '%s'"
 msgstr "No se pudo abrir commit-graph '%s'"
 
-#: builtin/commit-graph.c:138
+#: builtin/commit-graph.c:142
 #, c-format
 msgid "unrecognized --split argument, %s"
 msgstr "argumento --split no reconocido, %s"
 
-#: builtin/commit-graph.c:151
+#: builtin/commit-graph.c:155
 #, c-format
 msgid "unexpected non-hex object ID: %s"
-msgstr "ID de objeto no hex inesperado :%s"
+msgstr "ID de objeto no hex inesperado:%s"
 
-#: builtin/commit-graph.c:156
+#: builtin/commit-graph.c:160
 #, c-format
 msgid "invalid object: %s"
 msgstr "no es un objeto válido: %s"
 
-#: builtin/commit-graph.c:180
+#: builtin/commit-graph.c:213
 msgid "start walk at all refs"
 msgstr "comenzar caminata en todas las refs"
 
-#: builtin/commit-graph.c:182
+#: builtin/commit-graph.c:215
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr "escanear paquete de índices por stdin por commits"
 
-#: builtin/commit-graph.c:184
+#: builtin/commit-graph.c:217
 msgid "start walk at commits listed by stdin"
 msgstr "comenzar a caminar a los commits listados por stdin"
 
-#: builtin/commit-graph.c:186
+#: builtin/commit-graph.c:219
 msgid "include all commits already in the commit-graph file"
 msgstr "inclye todos los commits que ya están en el archivo commit-graph"
 
-#: builtin/commit-graph.c:188
+#: builtin/commit-graph.c:221
 msgid "enable computation for changed paths"
 msgstr "habilitar computación para rutas cambiadas"
 
-#: builtin/commit-graph.c:191
+#: builtin/commit-graph.c:224
 msgid "allow writing an incremental commit-graph file"
 msgstr "permitir escribir un archivo commit-graph incremental"
 
-#: builtin/commit-graph.c:195
+#: builtin/commit-graph.c:228
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr "máximo número de commits en un commit-graph sin base cortada"
 
-#: builtin/commit-graph.c:197
+#: builtin/commit-graph.c:230
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr "radio máximo entre dos niveles de corte de commit-graph"
 
-#: builtin/commit-graph.c:199
+#: builtin/commit-graph.c:232
 msgid "only expire files older than a given date-time"
 msgstr "expirar objetos más viejos a una fecha dada"
 
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:234
+msgid "maximum number of changed-path Bloom filters to compute"
+msgstr "número máximo de cambios de ruta de filtro Bloom para computar"
+
+#: builtin/commit-graph.c:255
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr "use como máximo uno de --reachable, --stdin-commits, o --stdin-packs"
 
-#: builtin/commit-graph.c:245
+#: builtin/commit-graph.c:287
 msgid "Collecting commits from input"
 msgstr "Recolectando commits del input"
 
@@ -12623,7 +13348,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "padre duplicado %s ignorado"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:547
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "no es un nombre de objeto válido %s"
@@ -12651,13 +13376,13 @@
 msgid "id of a parent commit object"
 msgstr "id del objeto commit padre"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1506 builtin/merge.c:273
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1474
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "mensaje"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1506
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "mensaje del commit"
 
@@ -12665,7 +13390,7 @@
 msgid "read commit log message from file"
 msgstr "leer mensaje de commit desde un archivo"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1518 builtin/merge.c:290
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Firmar commit con GPG"
@@ -12692,7 +13417,7 @@
 "it empty. You can repeat your command with --allow-empty, or you can\n"
 "remove the commit entirely with \"git reset HEAD^\".\n"
 msgstr ""
-"Has solicitado un amend en tu commit más reciente, pero hacerlo lo \n"
+"Has solicitado un amend en tu commit más reciente, pero hacerlo lo\n"
 "vaciaría. Puedes repetir el comando con --alow-empty, o puedes eliminar\n"
 "el commit completamente con \"git reset HEAD^\".\n"
 
@@ -12741,73 +13466,73 @@
 "     git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "falló al desempaquetar objeto del árbol HEAD"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file con -a no tiene sentido"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "No hay rutas con --include/--only no tiene sentido."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "no es posible crear un índice temporal"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "adición interactiva fallida"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "no es posible actualizar el índice temporal"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Falló al actualizar el cache principal del árbol"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "no es posible escribir archivo new_index"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "no se puede realizar un commit parcial durante una fusión."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "no se puede realizar un commit parcial durante un cherry-pick."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "no se puede realizar un commit parcial durante un rebase."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "no se puede leer el índice"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "no es posible escribir el índice temporal"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "commit '%s' requiere cabecera de autor"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "el commit '%s' tiene una línea de autor mal formada"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "parámetro --author mal formado"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -12815,68 +13540,71 @@
 "no es posible seleccionar un carácter de comentario que no es usado\n"
 "en el mensaje de commit actual"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1099
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "no se pudo revisar el commit %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:319
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(leyendo mensajes de logs desde standard input)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "no se pudo leer log desde standard input"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "no se pudo leer el log '%s'"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "no se puede combinar -m con --fixup:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "no se pudo leer SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "no se pudo leer MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "no se pudo escribir el template del commit"
 
-#: builtin/commit.c:852
-#, c-format
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d MERGE_HEAD\n"
 "and try again.\n"
 msgstr ""
 "\n"
-"Parece que estás haciendo un commit con una fusión dentro.\n"
-"Si esto no es correcto, por favor elimina el archivo\n"
-"\t%s\n"
-"y vuelve a intentar.\n"
+"Parece que está realizando una fusión.\n"
+"Si esto no es correcto, ejecute\n"
+"\tgit update-ref -d MERGE_HEAD\n"
+"e intenta de nuevo.\n"
 
-#: builtin/commit.c:857
-#, c-format
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "and try again.\n"
 msgstr ""
 "\n"
-"Parece que puedes estar haciendo un commit a un cherry-pick.\n"
-"Si esto no es correcto, por favor elimina el archivo\n"
-"\t%s\n"
-"y vuelve a intentar.\n"
+"Parece que puede estar cometiendo una selección de cerebros.\n"
+"Si esto no es correcto, ejecute\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
+"e intenta de nuevo.\n"
 
-#: builtin/commit.c:870
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -12886,7 +13614,7 @@
 " líneas que comiencen con '%c' serán ignoradas, y un mensaje\n"
 " vacío aborta el commit.\n"
 
-#: builtin/commit.c:878
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -12898,147 +13626,177 @@
 " usted mismo si lo desea.\n"
 "Un mensaje vacío aborta el commit.\n"
 
-#: builtin/commit.c:895
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:     %.*s <%.*s>"
 
-#: builtin/commit.c:903
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sFecha:     %s"
 
-#: builtin/commit.c:910
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sCommitter: %.*s <%.*s>"
 
-#: builtin/commit.c:928
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "No se puede leer el índice"
 
-#: builtin/commit.c:999
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "no se puede pasar trailers a --trailers"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Error al construir los árboles"
 
-#: builtin/commit.c:1013 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Por favor suministra el mensaje usando las opciones -m o -F.\n"
 
-#: builtin/commit.c:1057
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' no está en el formato 'Name <email>' y no concuerda con ningún "
 "autor existente"
 
-#: builtin/commit.c:1071
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Modo ignorado inválido '%s'"
 
-#: builtin/commit.c:1089 builtin/commit.c:1333
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Modo inválido de los archivos no rastreados '%s'"
 
-#: builtin/commit.c:1129
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long y -z son incompatibles"
 
-#: builtin/commit.c:1173
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "Estás en medio de una fusión -- no puedes renombrar."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "Está en medio de un cherry-pick -- no se puede renombrar."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr "no se puede combinar opción de renombrar de --fixup con ruta '%s'"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"opción de refraseado de --fixup es mutuamente exclusiva con --patch/--"
+"interactive/--all/--include/--only"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Usar ambos --reset-author y --author no tiene sentido"
 
-#: builtin/commit.c:1182
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "No tienes nada que enmendar."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Estás en medio de una fusión -- no puedes enmendar."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Está en medio de un cherry-pick -- no se puede enmendar."
 
-#: builtin/commit.c:1189
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Estás en medio de una fusión -- no puedes enmendar."
 
-#: builtin/commit.c:1192
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Opciones --squash y --fixup no pueden ser usadas juntas"
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Solo uno de -c/-C/-F/--fixup puede ser usado."
 
-#: builtin/commit.c:1204
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "La opción -m no puede ser combinada con -c/-C/-F."
 
-#: builtin/commit.c:1213
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author sólo puede ser usada con -C, -c o --amend."
 
-#: builtin/commit.c:1231
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "Solo uno de --include/--only/--all/--interactive/--patch puede ser usado."
 
-#: builtin/commit.c:1237
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "opción desconocida: --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "paths '%s ...' con -a no tiene sentido"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "mostrar status de manera concisa"
 
-#: builtin/commit.c:1370 builtin/commit.c:1531
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "mostrar información de la rama"
 
-#: builtin/commit.c:1372
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "mostrar información del stash"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "calcular todos los valores delante/atrás"
 
-#: builtin/commit.c:1376
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1376 builtin/commit.c:1535 builtin/push.c:549
-#: builtin/worktree.c:722
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "output formato-maquina"
 
-#: builtin/commit.c:1379 builtin/commit.c:1537
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "mostrar status en formato largo (default)"
 
-#: builtin/commit.c:1382 builtin/commit.c:1540
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "terminar entradas con NUL"
 
-#: builtin/commit.c:1384 builtin/commit.c:1388 builtin/commit.c:1543
-#: builtin/fast-export.c:1199 builtin/fast-export.c:1202
-#: builtin/fast-export.c:1205 builtin/rebase.c:1392 parse-options.h:336
+#: 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
 msgid "mode"
 msgstr "modo"
 
-#: builtin/commit.c:1385 builtin/commit.c:1543
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "mostrar archivos sin seguimiento, modos opcionales: all, normal, no. "
 "(Predeterminado: all)"
 
-#: builtin/commit.c:1389
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13046,11 +13804,11 @@
 "mostrar archivos ignorados, modos opcionales: traditional, matching, no. "
 "(Predeterminado: traditional)"
 
-#: builtin/commit.c:1391 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "cuando"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13058,173 +13816,195 @@
 "ignorar cambios en submódulos, opcional cuando: all,dirty,untracked. "
 "(Default: all)"
 
-#: builtin/commit.c:1394
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "listar en columnas los archivos sin seguimiento"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "no detectar renombrados"
 
-#: builtin/commit.c:1397
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "detectar renombres, opcionalmente configurar similaridad de índice"
 
-#: builtin/commit.c:1417
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Combinación de argumentos de archivos ignorados y no rastreados no soportada"
 
-#: builtin/commit.c:1499
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "suprime summary tras un commit exitoso"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "mostrar diff en el template del mensaje de commit"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Opciones para el mensaje del commit"
 
-#: builtin/commit.c:1503 builtin/merge.c:277 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "leer mensaje desde un archivo"
 
-#: builtin/commit.c:1504
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "autor"
 
-#: builtin/commit.c:1504
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "sobrescribe el autor del commit"
 
-#: builtin/commit.c:1505 builtin/gc.c:538
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "fecha"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "sobrescribe la fecha del commit"
 
-#: builtin/commit.c:1507 builtin/commit.c:1508 builtin/commit.c:1509
-#: builtin/commit.c:1510 parse-options.h:328 ref-filter.h:92
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "confirmar"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "reusar y editar el mensaje de un commit especifico"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "reusar el mensaje de un commit especifico"
 
-#: builtin/commit.c:1509
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr ""
-"usar mensaje de formato autosquash para arreglar el commit especificado"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr ""
+"usar mensaje de formato autosquash para arreglar el amend/renombrado del "
+"commit especificado"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "usar el mensaje de formato autosquash para realizar squash  al commit "
 "especificado"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "el autor del commit soy yo ahora (usado con -C/-c/--amend)"
 
-#: builtin/commit.c:1512 builtin/log.c:1655 builtin/merge.c:293
-#: builtin/pull.c:145 builtin/revert.c:110
-msgid "add Signed-off-by:"
-msgstr "agregar Signed-off-by: (firmado por)"
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "trailer"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "agregando trailer(s) personalizados"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
+#: builtin/pull.c:145 builtin/revert.c:110
+msgid "add a Signed-off-by trailer"
+msgstr "agregar un firmado por al final"
+
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "usar archivo de template especificado"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "forzar la edición del commit"
 
-#: builtin/commit.c:1516
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "incluir status en el template del mensaje de commit"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Opciones para el contenido del commit"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "confirmar todos los archivos cambiados"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "agregar archivos específicos al índice para confirmar"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "agregar archivos interactivamente"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "agregar cambios interactivamente"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "sólo confirmar archivos específicos"
 
-#: builtin/commit.c:1527
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "evitar los capturadores (hooks) de pre-commit y commit-msg"
 
-#: builtin/commit.c:1528
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "mostrar lo que sería incluido en el commit"
 
-#: builtin/commit.c:1541
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "enmendar commit previo"
 
-#: builtin/commit.c:1542
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "gancho bypass post reescritura"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "ok al grabar un cambio vacío"
 
-#: builtin/commit.c:1551
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "ok al grabar un cambio con un mensaje vacío"
 
-#: builtin/commit.c:1624
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Archivo MERGE_HEAD (%s) corrupto"
 
-#: builtin/commit.c:1631
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "no se pudo leer MERGE_MODE"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "no se pudo leer el mensaje de commit: %s"
 
-#: builtin/commit.c:1659
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Abortando commit debido que el mensaje está en blanco.\n"
 
-#: builtin/commit.c:1664
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Abortando commit; no se ha editado el mensaje\n"
 
-#: builtin/commit.c:1698
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "Abortando commit debido que el cuerpo del mensaje está en blanco.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13238,212 +14018,220 @@
 msgid "git config [<options>]"
 msgstr "git config [<opciones>]"
 
-#: builtin/config.c:104 builtin/env--helper.c:23
+#: builtin/config.c:109 builtin/env--helper.c:27
 #, c-format
 msgid "unrecognized --type argument, %s"
 msgstr "argumento --type no reconocido, %s"
 
-#: builtin/config.c:116
+#: builtin/config.c:121
 msgid "only one type at a time"
 msgstr "solo un tipo a la vez"
 
-#: builtin/config.c:125
+#: builtin/config.c:130
 msgid "Config file location"
 msgstr "Ubicación del archivo configuración"
 
-#: builtin/config.c:126
+#: builtin/config.c:131
 msgid "use global config file"
 msgstr "usar archivo de config global"
 
-#: builtin/config.c:127
+#: builtin/config.c:132
 msgid "use system config file"
 msgstr "usar archivo de config del sistema"
 
-#: builtin/config.c:128
+#: builtin/config.c:133
 msgid "use repository config file"
 msgstr "usar archivo de config del repositorio"
 
-#: builtin/config.c:129
+#: builtin/config.c:134
 msgid "use per-worktree config file"
 msgstr "usar un archivo de config por árbol de trabajo"
 
-#: builtin/config.c:130
+#: builtin/config.c:135
 msgid "use given config file"
 msgstr "usar archivo config especificado"
 
-#: builtin/config.c:131
+#: builtin/config.c:136
 msgid "blob-id"
 msgstr "blob-id"
 
-#: builtin/config.c:131
+#: builtin/config.c:136
 msgid "read config from given blob object"
 msgstr "leer config del objeto blob suministrado"
 
-#: builtin/config.c:132
+#: builtin/config.c:137
 msgid "Action"
 msgstr "Acción"
 
-#: builtin/config.c:133
-msgid "get value: name [value-regex]"
-msgstr "obtener valor: nombre [valor-regex]"
+#: builtin/config.c:138
+msgid "get value: name [value-pattern]"
+msgstr "obtener valor: nombre [patrón de valor]"
 
-#: builtin/config.c:134
-msgid "get all values: key [value-regex]"
-msgstr "obtener todos los valores: llave [valores-regex]"
+#: builtin/config.c:139
+msgid "get all values: key [value-pattern]"
+msgstr "obtener todos los valores: clave [patrón de valor]"
 
-#: builtin/config.c:135
-msgid "get values for regexp: name-regex [value-regex]"
-msgstr "obtener valores para una regexp: nombre-regex [valor-regex]"
+#: builtin/config.c:140
+msgid "get values for regexp: name-regex [value-pattern]"
+msgstr "obtener valores para regexp: name-regex [value-pattern]"
 
-#: builtin/config.c:136
+#: builtin/config.c:141
 msgid "get value specific for the URL: section[.var] URL"
 msgstr "obtener valor especifico para el URL: sección[.var] URL"
 
-#: builtin/config.c:137
-msgid "replace all matching variables: name value [value_regex]"
+#: builtin/config.c:142
+msgid "replace all matching variables: name value [value-pattern]"
 msgstr ""
-"remplazar todas las variables que concuerden: nombre valor [valor_regex]"
+"reemplazar todas las variables coincidentes: nombre valor [valor-patrón]"
 
-#: builtin/config.c:138
+#: builtin/config.c:143
 msgid "add a new variable: name value"
 msgstr "agregar nueva variable: nombre valor"
 
-#: builtin/config.c:139
-msgid "remove a variable: name [value-regex]"
-msgstr "borrar una variable. nombre [valor-regex]"
+#: builtin/config.c:144
+msgid "remove a variable: name [value-pattern]"
+msgstr "eliminar una variable: nombre [patrón de valor]"
 
-#: builtin/config.c:140
-msgid "remove all matches: name [value-regex]"
-msgstr "borrar todas las concurrencias: nombre [valor-regex]"
+#: builtin/config.c:145
+msgid "remove all matches: name [value-pattern]"
+msgstr "eliminar todas las coincidencias: nombre [patrón de valor]"
 
-#: builtin/config.c:141
+#: builtin/config.c:146
 msgid "rename section: old-name new-name"
 msgstr "renombrar sección: nombre-viejo nombre-nuevo"
 
-#: builtin/config.c:142
+#: builtin/config.c:147
 msgid "remove a section: name"
 msgstr "borrar una sección: nombre"
 
-#: builtin/config.c:143
+#: builtin/config.c:148
 msgid "list all"
 msgstr "listar todo"
 
-#: builtin/config.c:144
+#: builtin/config.c:149
+msgid "use string equality when comparing values to 'value-pattern'"
+msgstr "use la igualdad de cadenas al comparar valores con 'patrón de valor'"
+
+#: builtin/config.c:150
 msgid "open an editor"
 msgstr "abrir el editor"
 
-#: builtin/config.c:145
+#: builtin/config.c:151
 msgid "find the color configured: slot [default]"
 msgstr "encontrar el color configurado: slot [default]"
 
-#: builtin/config.c:146
+#: builtin/config.c:152
 msgid "find the color setting: slot [stdout-is-tty]"
 msgstr "encontrar las opciones del color: slot [stdout-es-tty]"
 
-#: builtin/config.c:147
+#: builtin/config.c:153
 msgid "Type"
 msgstr "Tipo"
 
-#: builtin/config.c:148 builtin/env--helper.c:38
+#: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "al valor se ha dado este tipo"
 
-#: builtin/config.c:149
+#: builtin/config.c:155
 msgid "value is \"true\" or \"false\""
 msgstr "valor es \"true\" o \"false\""
 
-#: builtin/config.c:150
+#: builtin/config.c:156
 msgid "value is decimal number"
 msgstr "valor es un numero decimal"
 
-#: builtin/config.c:151
+#: builtin/config.c:157
 msgid "value is --bool or --int"
 msgstr "valor es --bool o --int"
 
-#: builtin/config.c:152
+#: builtin/config.c:158
+msgid "value is --bool or string"
+msgstr "el valor es --bool o cadena"
+
+#: builtin/config.c:159
 msgid "value is a path (file or directory name)"
 msgstr "valor es una ruta (archivo o nombre de directorio)"
 
-#: builtin/config.c:153
+#: builtin/config.c:160
 msgid "value is an expiry date"
 msgstr "valor es una fecha de expiración"
 
-#: builtin/config.c:154
+#: builtin/config.c:161
 msgid "Other"
 msgstr "Otro"
 
-#: builtin/config.c:155
+#: builtin/config.c:162
 msgid "terminate values with NUL byte"
 msgstr "terminar valores con un byte NULL"
 
-#: builtin/config.c:156
+#: builtin/config.c:163
 msgid "show variable names only"
 msgstr "mostrar solo nombres de variables"
 
-#: builtin/config.c:157
+#: builtin/config.c:164
 msgid "respect include directives on lookup"
 msgstr "respetar directivas include en la búsqueda"
 
-#: builtin/config.c:158
+#: builtin/config.c:165
 msgid "show origin of config (file, standard input, blob, command line)"
 msgstr "mostrar el origen de configuración (archivo, stdin, blob, comando)"
 
-#: builtin/config.c:159
+#: builtin/config.c:166
 msgid "show scope of config (worktree, local, global, system, command)"
 msgstr ""
 "mostrar el scope de la configuración (worktree, local, global, system, "
 "command)"
 
-#: builtin/config.c:160 builtin/env--helper.c:40
+#: builtin/config.c:167 builtin/env--helper.c:45
 msgid "value"
 msgstr "valor"
 
-#: builtin/config.c:160
+#: builtin/config.c:167
 msgid "with --get, use default value when missing entry"
 msgstr "con --get, usa el valor por defecto cuando falta una entrada"
 
-#: builtin/config.c:174
+#: builtin/config.c:181
 #, c-format
 msgid "wrong number of arguments, should be %d"
 msgstr "número de argumentos inválidos, deberían ser %d"
 
-#: builtin/config.c:176
+#: builtin/config.c:183
 #, c-format
 msgid "wrong number of arguments, should be from %d to %d"
 msgstr "número de argumentos inválidos, deberían ser de %d a %d"
 
-#: builtin/config.c:324
+#: builtin/config.c:339
 #, c-format
 msgid "invalid key pattern: %s"
 msgstr "patrón de llave inválido: %s"
 
-#: builtin/config.c:360
+#: builtin/config.c:377
 #, c-format
 msgid "failed to format default config value: %s"
 msgstr "falló al formatear el valor por defecto de configuración: %s"
 
-#: builtin/config.c:417
+#: builtin/config.c:441
 #, c-format
 msgid "cannot parse color '%s'"
 msgstr "no se analizar color '%s'"
 
-#: builtin/config.c:459
+#: builtin/config.c:483
 msgid "unable to parse default color value"
 msgstr "no es posible analizar el valor por defecto de color"
 
-#: builtin/config.c:512 builtin/config.c:768
+#: builtin/config.c:536 builtin/config.c:833
 msgid "not in a git directory"
 msgstr "no en un directorio git"
 
-#: builtin/config.c:515
+#: builtin/config.c:539
 msgid "writing to stdin is not supported"
 msgstr "escribir en stdin no está soportado"
 
-#: builtin/config.c:518
+#: builtin/config.c:542
 msgid "writing config blobs is not supported"
 msgstr "escribir blobs de configuración no está soportado"
 
-#: builtin/config.c:603
+#: builtin/config.c:627
 #, c-format
 msgid ""
 "# This is Git's per-user configuration file.\n"
@@ -13458,23 +14246,27 @@
 "#\tname = %s\n"
 "#\temail = %s\n"
 
-#: builtin/config.c:627
+#: builtin/config.c:652
 msgid "only one config file at a time"
 msgstr "solo un archivo de configuración a la vez"
 
-#: builtin/config.c:632
+#: builtin/config.c:658
 msgid "--local can only be used inside a git repository"
 msgstr "--local solo puedo ser usado dentro de un repositorio"
 
-#: builtin/config.c:635
+#: builtin/config.c:660
 msgid "--blob can only be used inside a git repository"
 msgstr "--blob solo puede ser usado dentro de un repositorio"
 
-#: builtin/config.c:655
+#: builtin/config.c:662
+msgid "--worktree can only be used inside a git repository"
+msgstr "--worktree solo se puede usar dentro de un repositorio de git"
+
+#: builtin/config.c:684
 msgid "$HOME not set"
 msgstr "$HOME no está configurado"
 
-#: builtin/config.c:679
+#: builtin/config.c:708
 msgid ""
 "--worktree cannot be used with multiple working trees unless the config\n"
 "extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
@@ -13486,52 +14278,56 @@
 "\"\n"
 "en \"git help worktree\" para más detalles"
 
-#: builtin/config.c:714
+#: builtin/config.c:743
 msgid "--get-color and variable type are incoherent"
 msgstr "--get-color y tipo de variable incoherente"
 
-#: builtin/config.c:719
+#: builtin/config.c:748
 msgid "only one action at a time"
 msgstr "solo una acción a la vez"
 
-#: builtin/config.c:732
+#: builtin/config.c:761
 msgid "--name-only is only applicable to --list or --get-regexp"
 msgstr "--name-only solo es aplicable para --list o --get-regexp"
 
-#: builtin/config.c:738
+#: builtin/config.c:767
 msgid ""
 "--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
 "list"
 msgstr ""
 "--show-origin solo es aplicable para --get, --get-all, --get-regexp, y --list"
 
-#: builtin/config.c:744
+#: builtin/config.c:773
 msgid "--default is only applicable to --get"
 msgstr "--default solo es aplicable para --get"
 
-#: builtin/config.c:757
+#: builtin/config.c:806
+msgid "--fixed-value only applies with 'value-pattern'"
+msgstr "--fixed-value solo se aplica con 'value-pattern'"
+
+#: builtin/config.c:822
 #, c-format
 msgid "unable to read config file '%s'"
 msgstr "no se puede leer el archivo de configuración '%s'"
 
-#: builtin/config.c:760
+#: builtin/config.c:825
 msgid "error processing config file(s)"
 msgstr "error al procesar archivo(s) de configuración"
 
-#: builtin/config.c:770
+#: builtin/config.c:835
 msgid "editing stdin is not supported"
 msgstr "editar stdin no está soportado"
 
-#: builtin/config.c:772
+#: builtin/config.c:837
 msgid "editing blobs is not supported"
 msgstr "editar blobs no está soportado"
 
-#: builtin/config.c:786
+#: builtin/config.c:851
 #, c-format
 msgid "cannot create configuration file %s"
 msgstr "no se puede crear el archivo de configuración %s"
 
-#: builtin/config.c:799
+#: builtin/config.c:864
 #, c-format
 msgid ""
 "cannot overwrite multiple values with a single value\n"
@@ -13540,7 +14336,7 @@
 "no se puede sobrescribir múltiples valores con un único valor\n"
 "\tUse una regexp, --add o --replace-all para cambiar %s."
 
-#: builtin/config.c:873 builtin/config.c:884
+#: builtin/config.c:943 builtin/config.c:954
 #, c-format
 msgid "no such section: %s"
 msgstr "no existe la sección: %s"
@@ -13553,6 +14349,38 @@
 msgid "print sizes in human readable format"
 msgstr "mostrar tamaños en formato legible para humano"
 
+#: builtin/credential-cache--daemon.c:227
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr ""
+"Los permisos en tu directorio de socket son demasiado flojos; otros\n"
+"usuarios pueden leer sus credenciales almacenadas en caché. Considera "
+"ejecutar:\n"
+"\n"
+"\tchmod 0700 %s"
+
+#: builtin/credential-cache--daemon.c:276
+msgid "print debugging messages to stderr"
+msgstr "mostrar mensajes de debug en stderr"
+
+#: builtin/credential-cache--daemon.c:316
+msgid "credential-cache--daemon unavailable; no unix socket support"
+msgstr "credential-cache--daemon no disponible; sin soporte de socket Unix"
+
+#: builtin/credential-cache.c:154
+msgid "credential-cache unavailable; no unix socket support"
+msgstr "credential-cache no disponible; sin soporte de socket Unix"
+
+#: builtin/credential-store.c:66
+#, c-format
+msgid "unable to get credential storage lock in %d ms"
+msgstr ""
+"no se puede obtener el bloqueo de almacenamiento de credenciales en %d ms"
+
 #: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<opciones>] [<commit-ish>...]"
@@ -13717,65 +14545,73 @@
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken es incompatible con commit-ismos"
 
-#: builtin/diff.c:91
+#: builtin/diff-tree.c:155
+msgid "--stdin and --merge-base are mutually exclusive"
+msgstr "--stdin and --merge-baseson mutuamente exclusivas"
+
+#: builtin/diff-tree.c:157
+msgid "--merge-base only works with two commits"
+msgstr "--merge-base solo funciona con dos commits"
+
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s': no es un archivo regular o un enlace simbólico"
 
-#: builtin/diff.c:242
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "opción inválida: %s"
 
-#: builtin/diff.c:359
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: se neceista una base de fusión"
 
-#: builtin/diff.c:469
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "No es un repositorio git"
 
-#: builtin/diff.c:514
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objeto '%s' entregado no es válido."
 
-#: builtin/diff.c:525
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "más de dos blobs entregados: '%s'"
 
-#: builtin/diff.c:530
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "objeto no manejado '%s' entregado."
 
-#: builtin/diff.c:564
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: múltiples bases de fusión, usando %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<opciones>] [<commit> [<commit>]] [--] [<ruta>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "falló: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "no se pudo leer el symlink %s"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "no se pudo leer el archivo symlink %s"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "no se pudo leer el objeto %s para el symlink %s"
@@ -13788,54 +14624,54 @@
 "formatos combinados de diff ('-c' y '--cc') no soportados en\n"
 "modo diff para directorio('-d' y '--dir-diff')."
 
-#: builtin/difftool.c:634
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "ambos archivos modificados: '%s' y '%s'."
 
-#: builtin/difftool.c:636
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "archivo del árbol de trabajo ha sido dejado."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "archivo temporal existe en '%s'."
 
-#: builtin/difftool.c:648
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "tal vez desees limpiar o recuperar estos."
 
-#: builtin/difftool.c:697
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "use `diff.guitool` en lugar de `diff.tool`"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "realizar un diff de todo el directorio"
 
-#: builtin/difftool.c:701
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "no mostrar antes de lanzar una herramienta de diff"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "usar enlaces simbólicos en modo dir-diff"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "herramienta"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "usar la herramienta de diff especificada"
 
-#: builtin/difftool.c:710
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "mostrar una lista de herramientas de diff que pueden ser usadas con `--tool`"
 
-#: builtin/difftool.c:713
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -13843,31 +14679,31 @@
 "hacer que 'git-difftool' salga cuando una herramienta de diff retorne un "
 "código de salida distinto de cero"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "especificar un comando personalizado para ver diffs"
 
-#: builtin/difftool.c:717
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "pasado a `diff`"
 
-#: builtin/difftool.c:732
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool requiere un árbol de trabajo o --no-index"
 
-#: builtin/difftool.c:739
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dirty-diff es incompatible con --no-index"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool y --extcmd son mutuamente exclusivas"
 
-#: builtin/difftool.c:750
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "no se ha proporcionado <herramienta> para --tool=<herramienta>"
 
-#: builtin/difftool.c:757
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "no se ha entregado <comando> para --extcmd=<comando>"
 
@@ -13875,24 +14711,24 @@
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <opciones> <env-var>"
 
-#: builtin/env--helper.c:37 builtin/hash-object.c:98
+#: builtin/env--helper.c:42 builtin/hash-object.c:98
 msgid "type"
 msgstr "tipo"
 
-#: builtin/env--helper.c:41
+#: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "default para git_env_*(...) es hacer fallback en"
 
-#: builtin/env--helper.c:43
+#: builtin/env--helper.c:48
 msgid "be quiet only use git_env_*() value as exit code"
 msgstr "ser silencioso solo usar valor git_env_*() como código de salida"
 
-#: builtin/env--helper.c:62
+#: builtin/env--helper.c:67
 #, c-format
 msgid "option `--default' expects a boolean value with `--type=bool`, not `%s`"
 msgstr "opción `--default' espera un valor boolean con `--type=bool`, no `%s`"
 
-#: builtin/env--helper.c:77
+#: builtin/env--helper.c:82
 #, c-format
 msgid ""
 "option `--default' expects an unsigned long value with `--type=ulong`, not `"
@@ -13910,96 +14746,127 @@
 "Error: No se puede exportar los tags anidados a menos que --mark-tags sea "
 "especificado."
 
-#: builtin/fast-export.c:1178
+#: builtin/fast-export.c:1177
 msgid "--anonymize-map token cannot be empty"
 msgstr "token --anonymize-map no puede estar vacío"
 
-#: builtin/fast-export.c:1198
+#: builtin/fast-export.c:1197
 msgid "show progress after <n> objects"
 msgstr "mostrar progreso después de <n> objetos"
 
-#: builtin/fast-export.c:1200
+#: builtin/fast-export.c:1199
 msgid "select handling of signed tags"
 msgstr "seleccionar el manejo de tags firmados"
 
-#: builtin/fast-export.c:1203
+#: builtin/fast-export.c:1202
 msgid "select handling of tags that tag filtered objects"
 msgstr "seleccionar el manejo de tags que son tags de objetos filtrados"
 
-#: builtin/fast-export.c:1206
+#: builtin/fast-export.c:1205
 msgid "select handling of commit messages in an alternate encoding"
 msgstr "seleccionar el manejo de mensajes de commit en un encoding diferente"
 
-#: builtin/fast-export.c:1209
-msgid "Dump marks to this file"
-msgstr "Volcar marcas a este archivo"
+#: builtin/fast-export.c:1208
+msgid "dump marks to this file"
+msgstr "volcar marcas a este archivo"
 
-#: builtin/fast-export.c:1211
-msgid "Import marks from this file"
-msgstr "Importar marcas de este archivo"
+#: builtin/fast-export.c:1210
+msgid "import marks from this file"
+msgstr "importar marcas de este archivo"
 
-#: builtin/fast-export.c:1215
-msgid "Import marks from this file if it exists"
-msgstr "Importar marcas de este archivo si existe"
+#: builtin/fast-export.c:1214
+msgid "import marks from this file if it exists"
+msgstr "importar marcas de este archivo si existe"
 
-#: builtin/fast-export.c:1217
-msgid "Fake a tagger when tags lack one"
-msgstr "Falsificar un tagger cuando les falta uno"
+#: builtin/fast-export.c:1216
+msgid "fake a tagger when tags lack one"
+msgstr "falsificar un tagger cuando les falta uno"
 
-#: builtin/fast-export.c:1219
-msgid "Output full tree for each commit"
-msgstr "Mostrar todo el árbol para cada commit"
+#: builtin/fast-export.c:1218
+msgid "output full tree for each commit"
+msgstr "mostrar todo el árbol para cada commit"
+
+#: builtin/fast-export.c:1220
+msgid "use the done feature to terminate the stream"
+msgstr "use el feature done para terminar el stream"
 
 #: builtin/fast-export.c:1221
-msgid "Use the done feature to terminate the stream"
-msgstr "Use el feature done para terminar el stream"
+msgid "skip output of blob data"
+msgstr "saltar el output de data blob"
 
-#: builtin/fast-export.c:1222
-msgid "Skip output of blob data"
-msgstr "Saltar el output de data blob"
-
-#: builtin/fast-export.c:1223 builtin/log.c:1724
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "refspec"
 
-#: builtin/fast-export.c:1224
-msgid "Apply refspec to exported refs"
-msgstr "Aplicar refspec para los refs exportados"
+#: builtin/fast-export.c:1223
+msgid "apply refspec to exported refs"
+msgstr "aplicar refspec para los refs exportados"
 
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1224
 msgid "anonymize output"
 msgstr "anonimizar la salida"
 
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1225
 msgid "from:to"
 msgstr "de:para"
 
-#: builtin/fast-export.c:1227
+#: builtin/fast-export.c:1226
 msgid "convert <from> to <to> in anonymized output"
 msgstr "convertir <de> a <para> en output anonimizado"
 
-#: builtin/fast-export.c:1230
-msgid "Reference parents which are not in fast-export stream by object id"
+#: builtin/fast-export.c:1229
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
-"Padres de la referencia que no estan en fast-export stream por id de objeto"
+"padres de la referencia que no estan en fast-export stream por id de objeto"
 
-#: builtin/fast-export.c:1232
-msgid "Show original object ids of blobs/commits"
-msgstr "Mostrar ids de objetos originales para blobs/commits"
+#: builtin/fast-export.c:1231
+msgid "show original object ids of blobs/commits"
+msgstr "mostrar ids de objetos originales para blobs/commits"
 
-#: builtin/fast-export.c:1234
-msgid "Label tags with mark ids"
-msgstr "Marcar tags con ids de mark"
+#: builtin/fast-export.c:1233
+msgid "label tags with mark ids"
+msgstr "marcar tags con ids de mark"
 
-#: builtin/fast-export.c:1257
+#: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
 msgstr "--anonymize-map sin --anonymize no tiene sentido"
 
-#: builtin/fast-export.c:1272
+#: builtin/fast-export.c:1271
 msgid "Cannot pass both --import-marks and --import-marks-if-exists"
 msgstr "No se puede pasar ambos --import-marks y --import-marks-if-exists"
 
-#: builtin/fetch-pack.c:245
+#: builtin/fast-import.c:3088
+#, c-format
+msgid "Missing from marks for submodule '%s'"
+msgstr "Faltan marcas from para el submódulo '%s'"
+
+#: builtin/fast-import.c:3090
+#, c-format
+msgid "Missing to marks for submodule '%s'"
+msgstr "Faltan marcas to para el submódulo '%s'"
+
+#: builtin/fast-import.c:3225
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr "Se esperaba comando 'mark', se obtuvo %s"
+
+#: builtin/fast-import.c:3230
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr "Se esperaba comando 'to', se obtuvo %s"
+
+#: builtin/fast-import.c:3322
+msgid "Expected format name:filename for submodule rewrite option"
+msgstr ""
+"Formato esperado de nombre:nombre de archivo para la opción de sobreescribir "
+"submódulo"
+
+#: builtin/fast-import.c:3377
+#, c-format
+msgid "feature '%s' forbidden in input without --allow-unsafe-features"
+msgstr "característica '%s' prohibida en input sin --allow-unsafe-features"
+
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Lockfile creado pero no reportado: %s"
@@ -14020,90 +14887,103 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opciones>]"
 
-#: builtin/fetch.c:117
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel no puede ser negativo"
 
-#: builtin/fetch.c:140 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "extraer de todos los remotos"
 
-#: builtin/fetch.c:142 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "configurar upstream para git pulll/fetch"
 
-#: builtin/fetch.c:144 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "adjuntar a .git/FETCH_HEAD en lugar de sobrescribir"
 
-#: builtin/fetch.c:146 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "usar transacción atómica para actualizar referencias"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "ruta para cargar el paquete al final del remoto"
 
-#: builtin/fetch.c:147
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "forzar sobrescritura de referencia local"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "extraer de múltiples remotos"
 
-#: builtin/fetch.c:151 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "extraer todos los tags y objetos asociados"
 
-#: builtin/fetch.c:153
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "no extraer todos los tags (--no-tags)"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "número de submódulos extraídos en paralelo"
 
-#: builtin/fetch.c:157 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+"modificar el refspec para colocar todas las referencias en refs/preferch/"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "limpiar ramas remotas rastreadas que ya no están en el remoto"
 
-#: builtin/fetch.c:159
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "limpiar tags locales que no se encuentran en el remoto y eliminar tags "
 "cambiados"
 
-#: builtin/fetch.c:160 builtin/fetch.c:183 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "en demanda"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "controlar extracción recursiva de submódulos"
 
-#: builtin/fetch.c:165 builtin/pull.c:206
+#: builtin/fetch.c:175
+msgid "write fetched references to the FETCH_HEAD file"
+msgstr "escribir referencias obtenidas en el archivo FETCH_HEAD"
+
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "mantener el paquete descargado"
 
-#: builtin/fetch.c:167
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "permitir actualizar la ref HEAD"
 
-#: builtin/fetch.c:170 builtin/fetch.c:176 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "historia profunda de un clon superficial"
 
-#: builtin/fetch.c:172 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "historia profunda de un repositorio superficial basado en tiempo"
 
-#: builtin/fetch.c:178 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "convertir a un repositorio completo"
 
-#: builtin/fetch.c:181
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "anteponer esto a salida de la ruta del submódulo"
 
-#: builtin/fetch.c:184
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14111,94 +14991,104 @@
 "default para extracción recursiva de submódulos (menor prioridad que "
 "archivos de configuración)"
 
-#: builtin/fetch.c:188 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "aceptar refs que actualicen .git/shallow"
 
-#: builtin/fetch.c:189 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "refmap"
 
-#: builtin/fetch.c:190 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "especificar extracción de refmap"
 
-#: builtin/fetch.c:197 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "reporta que solo tenemos objetos alcanzables de este objeto"
 
-#: builtin/fetch.c:200
-msgid "run 'gc --auto' after fetching"
-msgstr "ejecutar 'gc --auto' tras el fetch"
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+"no realizar fecth al packfile; en lugar de eso, mostrar los ancestros de las "
+"puntas de negociación"
 
-#: builtin/fetch.c:202 builtin/pull.c:243
+#: builtin/fetch.c:213 builtin/fetch.c:215
+msgid "run 'maintenance --auto' after fetching"
+msgstr "ejecute 'maintenance --auto' después de buscar"
+
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "verificar updates forzados en todos los branch actualizados"
 
-#: builtin/fetch.c:204
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "escribir commit-graph luego del fetch"
 
-#: builtin/fetch.c:514
+#: builtin/fetch.c:221
+msgid "accept refspecs from stdin"
+msgstr "aceptar refspecs de stdin"
+
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "No se puedo encontrar ref remota HEAD"
 
-#: builtin/fetch.c:654
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "la configuración fetch.output contiene el valor inválido %s"
 
-#: builtin/fetch.c:752
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "objeto %s no encontrado"
 
-#: builtin/fetch.c:756
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[actualizado]"
 
-#: builtin/fetch.c:769 builtin/fetch.c:785 builtin/fetch.c:857
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[rechazado]"
 
-#: builtin/fetch.c:770
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "no se puede traer en la rama actual"
 
-#: builtin/fetch.c:780
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[actualización de tag]"
 
-#: builtin/fetch.c:781 builtin/fetch.c:818 builtin/fetch.c:840
-#: builtin/fetch.c:852
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "no se posible actualizar el ref local"
 
-#: builtin/fetch.c:785
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "podría golpear tag existente"
 
-#: builtin/fetch.c:807
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[nuevo tag]"
 
-#: builtin/fetch.c:810
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[nueva rama]"
 
-#: builtin/fetch.c:813
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[nueva referencia]"
 
-#: builtin/fetch.c:852
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "actualización forzada"
 
-#: builtin/fetch.c:857
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "avance lento"
 
-#: builtin/fetch.c:878
+#: builtin/fetch.c:1065
 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"
@@ -14209,7 +15099,7 @@
 "show-forced-updates'\n"
 "o ejecute 'git config fetch.showForcedUpdates true'."
 
-#: builtin/fetch.c:882
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14222,22 +15112,22 @@
 "false'\n"
 "para evitar esta validación.\n"
 
-#: builtin/fetch.c:914
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s no envió todos los objetos necesarios\n"
 
-#: builtin/fetch.c:935
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "rechazado %s porque raíces superficiales no pueden ser actualizadas"
 
-#: builtin/fetch.c:1020 builtin/fetch.c:1158
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "Desde %.*s\n"
 
-#: builtin/fetch.c:1031
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14246,56 +15136,56 @@
 "algunos refs locales no pudieron ser actualizados; intente ejecutar\n"
 " 'git remote prune %s' para eliminar cualquier rama vieja o conflictiva"
 
-#: builtin/fetch.c:1128
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s se pondrá colgado)"
 
-#: builtin/fetch.c:1129
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s se ha colgado)"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[eliminado]"
 
-#: builtin/fetch.c:1162 builtin/remote.c:1112
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(nada)"
 
-#: builtin/fetch.c:1185
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Rehusando extraer en la rama actual %s de un repositorio no vacío"
 
-#: builtin/fetch.c:1204
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Opción \"%s\" valor \"%s\" no es válido para %s"
 
-#: builtin/fetch.c:1207
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Opción \"%s\" es ignorada por %s\n"
 
-#: builtin/fetch.c:1415
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "múltiples ramas detectadas, incompatible con --set-upstream"
 
-#: builtin/fetch.c:1430
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "no configurar upstream para una rama de rastreo remoto"
 
-#: builtin/fetch.c:1432
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "no configurar upstream para un tag remoto"
 
-#: builtin/fetch.c:1434
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "tipo de branch desconocido"
 
-#: builtin/fetch.c:1436
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14303,22 +15193,22 @@
 "no se encontró rama fuente.\n"
 "tienes que especificar exactamente una rama con la opción --set-upstream."
 
-#: builtin/fetch.c:1562 builtin/fetch.c:1625
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Extrayendo %s\n"
 
-#: builtin/fetch.c:1572 builtin/fetch.c:1627 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "No se pudo extraer %s"
 
-#: builtin/fetch.c:1584
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "no se pudo hacer fetch a '%s' (código de salida: %d)\n"
 
-#: builtin/fetch.c:1687
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14326,44 +15216,52 @@
 "No hay repositorio remoto especificado. Por favor, especifique un URL o un\n"
 "nombre remoto del cual las nuevas revisiones deben ser extraídas."
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Tienes que especificar un nombre de tag."
 
-#: builtin/fetch.c:1778
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "Profundidad negativa en --deepen no soportada"
 
-#: builtin/fetch.c:1780
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen y --depth son mutuamente exclusivas"
 
-#: builtin/fetch.c:1785
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth y --unshallow no pueden ser usadas juntas"
 
-#: builtin/fetch.c:1787
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow no tiene sentido en un repositorio completo"
 
-#: builtin/fetch.c:1800
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all no toma un argumento de repositorio"
 
-#: builtin/fetch.c:1802
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all no tiene sentido con refspecs"
 
-#: builtin/fetch.c:1811
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "No existe el remoto o grupo remoto: %s"
 
-#: builtin/fetch.c:1818
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Extraer un grupo y especificar un refspecs no tiene sentido"
 
-#: builtin/fetch.c:1836
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "tiene que proveer un remoto cuando usa --negotiate-only"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Protocolo no soporta --negotiate-only, saliendo."
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -14371,6 +15269,14 @@
 "--filter solo puede ser usado con el remoto configurado en extensions."
 "partialClone"
 
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic solo se puede usar cuando se busca desde un control remoto"
+
+#: builtin/fetch.c:2087
+msgid "--stdin can only be used when fetching from one remote"
+msgstr "--stdin solo se puede usar cuando se busca desde un control remoto"
+
 #: builtin/fmt-merge-msg.c:7
 msgid ""
 "git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
@@ -14406,83 +15312,99 @@
 msgstr "git for-each-ref [--points-at <objeto>]"
 
 #: builtin/for-each-ref.c:12
-msgid "git for-each-ref [(--merged | --no-merged) [<commit>]]"
-msgstr "git for-each-ref [(--merged | --no-merged) [<commit>]]"
+msgid "git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]"
+msgstr "git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]"
 
 #: builtin/for-each-ref.c:13
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "cite los marcadores de posición adecuadamente para los shells"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "cite los marcadores de posición adecuadamente para perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "cite los marcadores de posición adecuadamente para python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "cite los marcadores de posición adecuadamente para Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "mostrar solo <n> refs encontradas"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "respetar el formato de colores"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "mostrar solo refs que apunten al objeto dado"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "mostrar solo refs que son fusionadas"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "mostrar solo refs que no son fusionadas"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "mostrar solo refs que contienen el commit"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "mostrar solo refs que no contienen el commit"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/for-each-repo.c:9
+msgid "git for-each-repo --config=<config> <command-args>"
+msgstr "git for-each-repo --config=<config> <argumetnos-de-comando>"
+
+#: builtin/for-each-repo.c:37
+msgid "config"
+msgstr "config"
+
+#: builtin/for-each-repo.c:38
+msgid "config key storing a list of repository paths"
+msgstr "clave de configuración que almacena una lista de rutas de repositorio"
+
+#: builtin/for-each-repo.c:46
+msgid "missing --config=<config>"
+msgstr "falta --config=<config>"
+
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "desconocido"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "error en %s %s: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "peligro en %s %s: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "link roto de %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "tipo de objeto equivocado en link"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14491,240 +15413,240 @@
 "link roto de %7s %s\n"
 "              a %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "faltan %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "inalcanzable %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "actualizando %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "no se pudo crear lost-found"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "no se pudo finalizar '%s'"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "Revisando %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Verificando conectividad (%d objetos)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "Revisando %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "links rotos"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "raíz %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "tag %s %s (%s) en %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: objecto corrupto o faltante"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: referencia inválida %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Revisando reflog %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: puntero sha1 inválido %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: no es un commit"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "aviso: No hay referencias por defecto"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: objeto corrupto o no encontrado: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: no se puede analizar objeto: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "mal sha1 de archivo: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Revisando directorio de objetos"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Revisando objetos directorios"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "Revisando link %s"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:843
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "%s inválido"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s apunta a algo extraño (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: HEAD desacoplado apunta a nada"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "aviso: %s apunta a un branch no nacido (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Revisando el cache tree"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: puntero inválido sha1 en cache-tree"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "non-tree en cache-tree"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<opciones>] [<objeto>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "mostrar objetos ilegibles"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "mostrar objetos colgados"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "reportar tags"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "reportar nodos raíz"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "hacer objetos índices cabezas de nodos"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "hacer reflogs cabeza de nodos (default)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "también considerar paquetes y objetos alternos"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "revisar solo conectividad"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "habilitar revisión más estricta"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "escribir objetos colgados en .git/lost-found"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "mostrar progreso"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "mostrar nombres verboso para objetos alcanzables"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:225
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Revisando objetos"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: objeto faltante"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "parámetro inválido: sha1 esperado, se obtuvo '%s'"
 
-#: builtin/gc.c:35
+#: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<opciones>]"
 
-#: builtin/gc.c:90
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Falló el fstat %s: %s"
 
-#: builtin/gc.c:126
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "falló al analizar '%s' valor '%s'"
 
-#: builtin/gc.c:475 builtin/init-db.c:57
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "no se pudo definir '%s'"
 
-#: builtin/gc.c:484 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "no se puede leer '%s'"
 
-#: builtin/gc.c:491
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -14739,54 +15661,54 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:539
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "limpiar objetos no referenciados"
 
-#: builtin/gc.c:541
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "ser más exhaustivo (aumentar runtime)"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "habilitar modo auto-gc"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "forzar la ejecución de gc incluso si puede haber otro gc ejecutándose"
 
-#: builtin/gc.c:548
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "reempaquetar todos los otros paquetes excepto el paquete más grande"
 
-#: builtin/gc.c:565
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "falló al analizar valor %s de gc.logexpirity"
 
-#: builtin/gc.c:576
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "falló al analizar valor %s de prune expiry"
 
-#: builtin/gc.c:596
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Auto empaquetado del repositorio en segundo plano para un performance "
 "óptimo.\n"
 
-#: builtin/gc.c:598
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Auto empaquetado del repositorio para performance óptimo.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Vea \"git help gc\" para limpieza manual.\n"
 
-#: builtin/gc.c:639
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -14794,23 +15716,187 @@
 "gc ya está ejecutándose en la máquina '%s' pid %<PRIuMAX> (use --force so no "
 "es así)"
 
-#: builtin/gc.c:694
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Hay muchos objetos sueltos inalcanzables; ejecute 'git prune' para "
 "eliminarlos."
 
+#: builtin/gc.c:715
+msgid ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+msgstr ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+
+#: builtin/gc.c:745
+msgid "--no-schedule is not allowed"
+msgstr "--no-schedule no está permitido"
+
+#: builtin/gc.c:750
+#, c-format
+msgid "unrecognized --schedule argument '%s'"
+msgstr "argumento --schedule no reconocido, '%s'"
+
+#: builtin/gc.c:869
+msgid "failed to write commit-graph"
+msgstr "no se pudo escribir el commit-graph"
+
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "falló al hacer prefetch a los remotos"
+
+#: builtin/gc.c:1022
+msgid "failed to start 'git pack-objects' process"
+msgstr "no pudo iniciar el proceso 'git pack-objects'"
+
+#: builtin/gc.c:1039
+msgid "failed to finish 'git pack-objects' process"
+msgstr "no pudo finalizar el proceso 'git pack-objects'"
+
+#: builtin/gc.c:1091
+msgid "failed to write multi-pack-index"
+msgstr "no se pudo escribir el índice de paquetes múltiples"
+
+#: builtin/gc.c:1109
+msgid "'git multi-pack-index expire' failed"
+msgstr "'git multi-pack-index expire' falló"
+
+#: builtin/gc.c:1170
+msgid "'git multi-pack-index repack' failed"
+msgstr "'git multi-pack-index repack' falló"
+
+#: builtin/gc.c:1179
+msgid ""
+"skipping incremental-repack task because core.multiPackIndex is disabled"
+msgstr ""
+"omitiendo la tarea de reempaquetado incremental porque core.multiPackIndex "
+"está deshabilitado"
+
+#: builtin/gc.c:1283
+#, c-format
+msgid "lock file '%s' exists, skipping maintenance"
+msgstr "el archivo de bloqueo '%s' existe, omitiendo el mantenimiento"
+
+#: builtin/gc.c:1313
+#, c-format
+msgid "task '%s' failed"
+msgstr "tarea '%s' falló"
+
+#: builtin/gc.c:1395
+#, c-format
+msgid "'%s' is not a valid task"
+msgstr "'%s' no es una tarea válida"
+
+#: builtin/gc.c:1400
+#, c-format
+msgid "task '%s' cannot be selected multiple times"
+msgstr "tarea '%s' no puede ser seleccionada múltipes veces"
+
+#: builtin/gc.c:1415
+msgid "run tasks based on the state of the repository"
+msgstr "ejecutar tareas basadas en el estado del repositorio"
+
+#: builtin/gc.c:1416
+msgid "frequency"
+msgstr "frecuencia"
+
+#: builtin/gc.c:1417
+msgid "run tasks based on frequency"
+msgstr "ejecutar tareas basado en frecuencia"
+
+#: builtin/gc.c:1420
+msgid "do not report progress or other information over stderr"
+msgstr "no reportar progreso u otra información por medio de stderr"
+
+#: builtin/gc.c:1421
+msgid "task"
+msgstr "tarea"
+
+#: builtin/gc.c:1422
+msgid "run a specific task"
+msgstr "ruta a tarea específica"
+
+#: builtin/gc.c:1439
+msgid "use at most one of --auto and --schedule=<frequency>"
+msgstr "usar como máximo una entre --auto y --schedule=<frecuencia>"
+
+#: builtin/gc.c:1482
+msgid "failed to run 'git config'"
+msgstr "no pudo ejecutar 'git config'"
+
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "falló al expandir la ruta '%s'"
+
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "Falló al iniciar launchctl."
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "falló al crear directorios para '%s'"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "falló al generar el servicio %s"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "no se pudo crear el archivo temp xml"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "no pudo iniciar schtasks"
+
+#: builtin/gc.c:1879
+msgid "failed to run 'crontab -l'; your system might not support 'cron'"
+msgstr ""
+"no pudo ejecutar 'crontab -l'; es posible que su sistema no soporte 'cron'"
+
+#: builtin/gc.c:1896
+msgid "failed to run 'crontab'; your system might not support 'cron'"
+msgstr ""
+"no pudo ejecutar 'crontab'; es posible que su sistema no soporte 'cron'"
+
+#: builtin/gc.c:1900
+msgid "failed to open stdin of 'crontab'"
+msgstr "no pudo abrir stdin de 'crontab'"
+
+#: builtin/gc.c:1942
+msgid "'crontab' died"
+msgstr "'crontab' murió"
+
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "otro proceso está programando el mantenimiento en segundo plano"
+
+#: builtin/gc.c:2000
+msgid "failed to add repo to global config"
+msgstr "no se pudo agregar el repositorio a la configuración global"
+
+#: builtin/gc.c:2010
+msgid "git maintenance <subcommand> [<options>]"
+msgstr "git maintenance <subcomando> [<opciones>]"
+
+#: builtin/gc.c:2029
+#, c-format
+msgid "invalid subcommand: %s"
+msgstr "subcomando no válido: %s"
+
 #: builtin/grep.c:30
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opciones>] [-e] <patrón> [<rev>...] [[--] <ruta>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: falló al crear el hilo: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "número inválido de hilos especificado (%d) para %s"
@@ -14819,262 +15905,262 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1537 builtin/index-pack.c:1727
-#: builtin/pack-objects.c:2904
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "no hay soporte para hilos, ignorando %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "no es posible leer el  árbol (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "no es posible realizar grep del objeto de tipo %s"
 
-#: builtin/grep.c:724
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "switch `%c' espera un valor numérico"
 
-#: builtin/grep.c:823
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "buscar en el índice en lugar del árbol de trabajo"
 
-#: builtin/grep.c:825
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "encontrar en contenidos no manejados por git"
 
-#: builtin/grep.c:827
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "buscar en archivos rastreados y no rastreados"
 
-#: builtin/grep.c:829
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
-msgstr "ignorar archivos especificados via '.gitignore'"
+msgstr "ignorar archivos especificados vía '.gitignore'"
 
-#: builtin/grep.c:831
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "búsqueda recursiva en cada submódulo"
 
-#: builtin/grep.c:834
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "mostrar líneas que no concuerdan"
 
-#: builtin/grep.c:836
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "búsqueda insensible a mayúsculas"
 
-#: builtin/grep.c:838
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "concordar patrón solo a los límites de las palabras"
 
-#: builtin/grep.c:840
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "procesar archivos binarios como texto"
 
-#: builtin/grep.c:842
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "no concordar patrones en archivos binarios"
 
-#: builtin/grep.c:845
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "procesar archivos binarios con filtros textconv"
 
-#: builtin/grep.c:847
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "buscar en subdirectorios (default)"
 
-#: builtin/grep.c:849
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "descender como máximo <valor-de-profundiad>  niveles"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "usar expresiones regulares POSIX extendidas"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usar expresiones regulares POSIX (default)"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "interpretar patrones como strings arreglados"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "usar expresiones regulares compatibles con Perl"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "mostrar números de línea"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "mostrar el número de columna de la primer coincidencia"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "no mostrar nombres de archivo"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "mostrar nombres de archivo"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "mostrar nombres de archivo relativos al directorio superior"
 
-#: builtin/grep.c:872
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "mostrar solo nombres de archivos en lugar de líneas encontradas"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "sinónimo para --files-with-matches"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "mostrar solo los nombres de archivos sin coincidencias"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "imprimir NUL después del nombre de archivo"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "mostrar solo partes que concuerdan de una línea"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "mostrar el número de concordancias en lugar de las líneas concordantes"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "resaltar concordancias"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "imprimir una línea vacía entre coincidencias de diferentes archivos"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr ""
 "mostrar el nombre de archivo solo una vez para concordancias en el mismo "
 "archivo"
 
-#: builtin/grep.c:892
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "mostrar <n> líneas de contexto antes y después de la concordancia"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "mostrar <n> líneas de contexto antes de las concordancias"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "mostrar <n> líneas de context después de las concordancias"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "usar <n> hilos de trabajo"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "atajo para -C NUM"
 
-#: builtin/grep.c:903
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr ""
 "mostrar una línea con el nombre de la función antes de las concordancias"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "mostrar la función circundante"
 
-#: builtin/grep.c:908
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "leer patrones del archivo"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "concordar <patrón>"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "combinar patrones especificados con -e"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "indicar concordancia con exit status sin output"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "mostrar solo concordancias con archivos que concuerdan todos los patrones"
 
-#: builtin/grep.c:928
-msgid "show parse tree for grep expression"
-msgstr "mostrar árbol analizado para la expresión grep"
-
-#: builtin/grep.c:932
+#: builtin/grep.c:944
 msgid "pager"
 msgstr "paginador"
 
-#: builtin/grep.c:932
+#: builtin/grep.c:944
 msgid "show matching files in the pager"
 msgstr "mostrar archivos concordantes en el paginador"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:948
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permitir el llamado de grep(1) (ignorado por esta build)"
 
-#: builtin/grep.c:1003
+#: builtin/grep.c:1014
 msgid "no pattern given"
 msgstr "no se ha entregado patrón"
 
-#: builtin/grep.c:1039
+#: builtin/grep.c:1050
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index o --untracked no se puede usar con revs"
 
-#: builtin/grep.c:1047
+#: builtin/grep.c:1058
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "no se posible resolver revisión: %s"
 
-#: builtin/grep.c:1077
+#: builtin/grep.c:1088
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked no es soportada con --recurse-submodules"
 
-#: builtin/grep.c:1081
+#: builtin/grep.c:1092
 msgid "invalid option combination, ignoring --threads"
 msgstr "combinación de opciones inválida, ignorando --threads"
 
-#: builtin/grep.c:1084 builtin/pack-objects.c:3623
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "no se soportan hilos, ignorando --threads"
 
-#: builtin/grep.c:1087 builtin/index-pack.c:1534 builtin/pack-objects.c:2901
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "número inválido de hilos especificado (%d)"
 
-#: builtin/grep.c:1121
+#: builtin/grep.c:1132
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager solo funciona en el árbol de trabajo"
 
-#: builtin/grep.c:1147
+#: builtin/grep.c:1158
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached o --untracked no pueden ser usadas con --no-index"
 
-#: builtin/grep.c:1153
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked no se puede usar con --cached"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard no puede ser usada para contenido rastreado"
 
-#: builtin/grep.c:1161
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "--cached y árboles han sido entregados"
 
@@ -15207,12 +16293,12 @@
 msgid "no info viewer handled the request"
 msgstr "ningún visor de info manejo la petición"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' tiene el alias '%s'"
 
-#: builtin/help.c:534 git.c:367
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "mal alias.%s string: %s"
@@ -15226,299 +16312,299 @@
 msgid "'git help config' for more information"
 msgstr "'git help config' para más información"
 
-#: builtin/index-pack.c:185
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "el tipo del objeto no concuerda en %s"
 
-#: builtin/index-pack.c:205
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "no se recibió el objeto esperado %s"
 
-#: builtin/index-pack.c:208
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "objeto %s: tipo esperado %s, encontrado %s"
 
-#: builtin/index-pack.c:258
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "no se puede llenar %d byte"
 msgstr[1] "no se pueden llenar %d bytes"
 
-#: builtin/index-pack.c:268
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "EOF temprano"
 
-#: builtin/index-pack.c:269
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "leer error en input"
 
-#: builtin/index-pack.c:281
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "se usaron más bytes de los disponibles"
 
-#: builtin/index-pack.c:288 builtin/pack-objects.c:618
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "paquete muy grande para la definición actual de off_t"
 
-#: builtin/index-pack.c:291 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "paquete excede el máximo tamaño permitido"
 
-#: builtin/index-pack.c:306 builtin/repack.c:250
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "no se puede crear '%s'"
 
-#: builtin/index-pack.c:312
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "no se puede abrir el archivo de paquete '%s'"
 
-#: builtin/index-pack.c:326
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "firma del paquete no concuerda"
 
-#: builtin/index-pack.c:328
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "versión de paquete %<PRIu32> no soportada"
 
-#: builtin/index-pack.c:346
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "paquete tiene un mal objeto en el offset %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:466
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "inflate devolvió %d"
 
-#: builtin/index-pack.c:515
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "valor de offset desbordado para el objeto base delta"
 
-#: builtin/index-pack.c:523
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "offset de base delta está fuera de límites"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "tipo de objeto %d desconocido"
 
-#: builtin/index-pack.c:562
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "no se puede propagar el paquete"
 
-#: builtin/index-pack.c:564
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "final prematuro de archivo de paquete, %<PRIuMAX> byte faltante"
 msgstr[1] "final prematuro de archivo de paquete, %<PRIuMAX> bytes faltantes"
 
-#: builtin/index-pack.c:590
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "inconsistencia seria en inflate"
 
-#: builtin/index-pack.c:735 builtin/index-pack.c:741 builtin/index-pack.c:765
-#: builtin/index-pack.c:804 builtin/index-pack.c:813
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "¡COLISIÓN DE TIPO SHA1 ENCONTRADA CON %s !"
 
-#: builtin/index-pack.c:738 builtin/pack-objects.c:170
-#: builtin/pack-objects.c:230 builtin/pack-objects.c:325
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
+#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "no se posible leer %s"
 
-#: builtin/index-pack.c:802
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "no se puede leer la información existente del objeto %s"
 
-#: builtin/index-pack.c:810
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "no se puede leer el objeto existente %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objeto blob %s inválido"
 
-#: builtin/index-pack.c:827 builtin/index-pack.c:846
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "error de fsck en el objeto empaquetado"
 
-#: builtin/index-pack.c:848
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "No todos los objetos hijos de %s son alcanzables"
 
-#: builtin/index-pack.c:920 builtin/index-pack.c:951
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "falló al aplicar delta"
 
-#: builtin/index-pack.c:1121
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Recibiendo objetos"
 
-#: builtin/index-pack.c:1121
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Indexando objetos"
 
-#: builtin/index-pack.c:1155
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "paquete está corrompido (SHA1 no concuerda)"
 
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "no se puede fstat al archivo de paquete"
 
-#: builtin/index-pack.c:1163
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "el paquete tiene basura al final"
 
-#: builtin/index-pack.c:1175
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "confusión más allá de la locura en parse_pack_objects()"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Resolviendo deltas"
 
-#: builtin/index-pack.c:1208 builtin/pack-objects.c:2665
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "no es posible crear hilo: %s"
 
-#: builtin/index-pack.c:1249
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "confusión más allá de la locura"
 
-#: builtin/index-pack.c:1255
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "completado con %d objeto local"
 msgstr[1] "completado con %d objetos locales"
 
-#: builtin/index-pack.c:1267
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Tail checksum para %s inesperada (¿corrupción de disco?)"
 
-#: builtin/index-pack.c:1271
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "paquete tiene %d delta sin resolver"
 msgstr[1] "paquete tiene %d deltas sin resolver"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "no es posible desinflar el objeto adjunto (%d)"
 
-#: builtin/index-pack.c:1391
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "objeto local %s está corrompido"
 
-#: builtin/index-pack.c:1405
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "nombre '%s' de archivo de paquete no termina con '.pack'"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "el nombre del archivo de paquete '%s' no termina con '.%s'"
 
-#: builtin/index-pack.c:1430
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "no se puede escribir %s en el archivo '%s'"
 
-#: builtin/index-pack.c:1438
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "no se puede cerrar escrito %s en archivo '%s'"
 
-#: builtin/index-pack.c:1462
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "error mientras se cierra el archivo paquete"
 
-#: builtin/index-pack.c:1476
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "no se puede guardar el archivo paquete"
 
-#: builtin/index-pack.c:1484
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "no se puede guardar el archivo índice"
 
-#: builtin/index-pack.c:1528 builtin/pack-objects.c:2912
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "mal pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1592
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "No se puede abrir el archivo paquete existente '%s'"
 
-#: builtin/index-pack.c:1594
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "No se puede abrir el índice del archivo paquete para '%s'"
 
-#: builtin/index-pack.c:1642
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "no delta: %d objeto"
 msgstr[1] "no delta: %d objetos"
 
-#: builtin/index-pack.c:1649
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "largo de cadena = %d: %lu objeto"
 msgstr[1] "largo de cadena = %d: %lu objetos"
 
-#: builtin/index-pack.c:1689
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "No se puede regresar a cwd"
 
-#: builtin/index-pack.c:1738 builtin/index-pack.c:1741
-#: builtin/index-pack.c:1757 builtin/index-pack.c:1761
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "mal %s"
 
-#: builtin/index-pack.c:1767 builtin/init-db.c:392 builtin/init-db.c:621
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algoritmo hash desconocido '%s'"
 
-#: builtin/index-pack.c:1782
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin no puede ser usada sin --stdin"
 
-#: builtin/index-pack.c:1784
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin requiere un repositorio git"
 
-#: builtin/index-pack.c:1786
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format no se puede usar con --stdin"
 
-#: builtin/index-pack.c:1792
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "--verify no recibió ningún nombre de archivo de paquete"
 
-#: builtin/index-pack.c:1840 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "error de fsck en objetos paquete"
 
@@ -15562,56 +16648,56 @@
 msgid "not copying templates from '%s': %s"
 msgstr "no se copian templates de '%s': %s"
 
-#: builtin/init-db.c:276
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "nombre de rama inicial inválido: '%s'"
 
-#: builtin/init-db.c:368
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "no es posible manejar el tipo de archivo %d"
 
-#: builtin/init-db.c:371
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "no se puede mover %s a %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "intentar reinicializar el repositorio con un hash diferente"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s ya existe"
 
-#: builtin/init-db.c:444
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init: ignorando --initial-branch=%s"
 
-#: builtin/init-db.c:475
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "Reinicializado el repositorio Git compartido existente en %s%s\n"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Reinicializado el repositorio Git existente en %s%s\n"
 
-#: builtin/init-db.c:480
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Inicializado repositorio Git compartido vacío en %s%s\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Inicializado repositorio Git vacío en %s%s\n"
 
-#: builtin/init-db.c:530
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -15619,38 +16705,42 @@
 "git init [-q | --quiet] [--bare] [--template=<directorio-template>] [--"
 "shared[=<permisos>]] [<directorio>]"
 
-#: builtin/init-db.c:556
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "permisos"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr ""
 "especifica que el repositorio de git será compartido entre varios usuarios"
 
-#: builtin/init-db.c:563
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "sobrescribir el nombre de la rama inicial"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "hash"
 
-#: builtin/init-db.c:565 builtin/show-index.c:22
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "especificar el algoritmo hash a usar"
 
-#: builtin/init-db.c:598 builtin/init-db.c:603
+#: builtin/init-db.c:559
+msgid "--separate-git-dir and --bare are mutually exclusive"
+msgstr "--separate-git-dir y --bare son mutuamente excluyentes"
+
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "no se pude crear directorio %s"
 
-#: builtin/init-db.c:607
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "no se puede aplicar chdir a %s"
 
-#: builtin/init-db.c:634
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -15659,11 +16749,15 @@
 "%s (o --work-tree=<directorio>) no se permite sin especificar %s (o --git-"
 "dir=<directorio>)"
 
-#: builtin/init-db.c:662
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "No se puede acceder al árbol de trabajo '%s'"
 
+#: builtin/init-db.c:683
+msgid "--separate-git-dir incompatible with bare repository"
+msgstr "--separate-git-dir incompatible con el repositorio desnudo"
+
 #: builtin/interpret-trailers.c:16
 msgid ""
 "git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
@@ -15712,10 +16806,6 @@
 msgid "do not treat --- specially"
 msgstr "no tratar --- especialmente"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "trailer"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "trailer(s) para agregar"
@@ -15728,126 +16818,130 @@
 msgid "no input file given for in-place editing"
 msgstr "no se entregó archivo de entrada para edición en lugar"
 
-#: builtin/log.c:57
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opciones>] [<rango-de-revisión>] [[--] <ruta>...]"
 
-#: builtin/log.c:58
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opciones>] <objeto>..."
 
-#: builtin/log.c:111
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "opción --decorate inválida: %s"
 
-#: builtin/log.c:178
+#: builtin/log.c:180
 msgid "show source"
 msgstr "mostrar fuente"
 
-#: builtin/log.c:179
-msgid "Use mail map file"
-msgstr "Usar archivo de mapa de mail"
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "usar archivo de mapa de mail"
 
-#: builtin/log.c:182
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "solo decorar refs que concuerden con <patrón>"
 
-#: builtin/log.c:184
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "no decorar refs que concuerden con <patrón>"
 
-#: builtin/log.c:185
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "opciones de decorado"
 
-#: builtin/log.c:188
-msgid "Process line range n,m in file, counting from 1"
-msgstr "Procesar rango de líneas n,m en archivo, contando desde 1"
+#: builtin/log.c:190
+msgid ""
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
+"<file>"
+msgstr ""
+"rastrear la evolución del rango de línea <inicio>, <fin> o función: <nombre-"
+"funcion> en <archivo>"
 
-#: builtin/log.c:298
+#: builtin/log.c:213
+msgid "-L<range>:<file> cannot be used with pathspec"
+msgstr "-L<rango>:<archivo> no se puede usar con pathspec"
+
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Salida final: %d %s\n"
 
-#: builtin/log.c:556
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: mal archivo"
 
-#: builtin/log.c:571 builtin/log.c:666
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "no se pudo leer objeto %s"
 
-#: builtin/log.c:691
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipo desconocido: %d"
 
-#: builtin/log.c:835
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: modo cover from description inválido"
 
-#: builtin/log.c:842
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "formate.headers. sin valor"
 
-#: builtin/log.c:957
-msgid "name of output directory is too long"
-msgstr "nombre del directorio de salida es muy largo"
-
-#: builtin/log.c:973
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "no se puede abrir archivo patch %s"
 
-#: builtin/log.c:990
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "necesita exactamente un rango"
 
-#: builtin/log.c:1000
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "no es un rango"
 
-#: builtin/log.c:1164
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "letras de portada necesita formato email"
 
-#: builtin/log.c:1170
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "falló al crear los archivos cover-letter"
 
-#: builtin/log.c:1249
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "insano in-reply-to: %s"
 
-#: builtin/log.c:1276
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opciones>] [<desde> | <rango-de-revisiones>]"
 
-#: builtin/log.c:1334
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "¿dos directorios de salida?"
 
-#: builtin/log.c:1445 builtin/log.c:2217 builtin/log.c:2219 builtin/log.c:2231
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "commit desconocido %s"
 
-#: builtin/log.c:1455 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "falló al resolver '%s' como ref válida"
 
-#: builtin/log.c:1460
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "no se pudo encontrar una base de fusión exacta"
 
-#: builtin/log.c:1464
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -15859,281 +16953,294 @@
 "O puedes especificar un commit base mediante --base=<id-commit-base> "
 "manualmente"
 
-#: builtin/log.c:1484
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "falló al encontrar una base de fusión exacta"
 
-#: builtin/log.c:1495
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "el commit base debe ser el ancestro de la lista de revisión"
 
-#: builtin/log.c:1499
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "el commit base no debe estar en la lista de revisión"
 
-#: builtin/log.c:1552
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "no se puede obtener id de patch"
 
-#: builtin/log.c:1604
-msgid "failed to infer range-diff ranges"
-msgstr "falló al inferir rangos range-diff"
+#: builtin/log.c:1700
+msgid "failed to infer range-diff origin of current series"
+msgstr "falló al inferir rangos range-diff de la serie actual"
 
-#: builtin/log.c:1650
+#: builtin/log.c:1702
+#, c-format
+msgid "using '%s' as range-diff origin of current series"
+msgstr "usando '%s' como origen de diferencia de rango de la serie actual"
+
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "use [PATCH n/m] incluso con un único parche"
 
-#: builtin/log.c:1653
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "use [PATCH] incluso con múltiples parches"
 
-#: builtin/log.c:1657
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "mostrar parches en standard out"
 
-#: builtin/log.c:1659
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "generar letra de cover"
 
-#: builtin/log.c:1661
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr ""
 "usar una secuencia simple de números para salida de nombres de archivos"
 
-#: builtin/log.c:1662
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1663
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "use <sfx> en lugar de '.patch'"
 
-#: builtin/log.c:1665
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "comenzar a numerar los parches desde <n> en lugar de 1"
 
-#: builtin/log.c:1667
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "reroll-count"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "marcar las series como Nth re-roll"
 
-#: builtin/log.c:1669
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Use [RFC PATCH] en lugar de [PATCH]"
+#: builtin/log.c:1765
+msgid "max length of output filename"
+msgstr "tamaño máximo de nombre de archivo resultante"
 
-#: builtin/log.c:1672
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "use [RFC PATCH] en lugar de [PATCH]"
+
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "modo-cover-from-description"
 
-#: builtin/log.c:1673
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "genera partes de una carta de presentación basado en la descripción de la "
 "rama"
 
-#: builtin/log.c:1675
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Use [<prefijo>] en lugar de [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "use [<prefijo>] en lugar de [PATCH]"
 
-#: builtin/log.c:1678
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "guardar archivos resultantes en <dir>"
 
-#: builtin/log.c:1681
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "no cortar/agregar [PATCH]"
 
-#: builtin/log.c:1684
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "no mostrar diffs binarios"
 
-#: builtin/log.c:1686
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "salida como hash de todos-ceros en la cabecera From"
 
-#: builtin/log.c:1688
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "no incluya un parche que coincida con un commit en upstream"
 
-#: builtin/log.c:1690
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "mostrar formato de parche en lugar del default (parche + stat)"
 
-#: builtin/log.c:1692
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "Mensajeando"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1791
 msgid "header"
 msgstr "cabezal"
 
-#: builtin/log.c:1694
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "agregar cabecera email"
 
-#: builtin/log.c:1695 builtin/log.c:1696
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "email"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "agregar cabecera To:"
 
-#: builtin/log.c:1696
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "agregar cabecera Cc:"
 
-#: builtin/log.c:1697
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1698
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "configurar dirección From a <ident> ( o identidad de committer si está "
 "ausente)"
 
-#: builtin/log.c:1700
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "id de mensaje"
 
-#: builtin/log.c:1701
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "hacer primer mail una respuesta a <id de mensaje>"
 
-#: builtin/log.c:1702 builtin/log.c:1705
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "límite"
 
-#: builtin/log.c:1703
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "adjuntar el parche"
 
-#: builtin/log.c:1706
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "poner el parche en línea"
 
-#: builtin/log.c:1710
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "habilitar hilos de mensajes, estilos: superficial, profundo"
 
-#: builtin/log.c:1712
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "firma"
 
-#: builtin/log.c:1713
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "agregar una firma"
 
-#: builtin/log.c:1714
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "commit-base"
 
-#: builtin/log.c:1715
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr ""
 "agregar información de árbol de requisitos previos a la serie de parches"
 
-#: builtin/log.c:1717
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "agregar una firma de un archivo"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "no mostrar los nombres de archivos de los parches"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "mostrar medidor de progreso mientras se generan los parches"
 
-#: builtin/log.c:1722
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "muestra cambios contra <rev> en cover letter o en un solo parche"
 
-#: builtin/log.c:1725
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "muestra cambios contra <refspec> en cover letter o en un solo parche"
 
-#: builtin/log.c:1727
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "porcentaje por el cual la creación es pesada"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "línea de identificación inválida: %s"
 
-#: builtin/log.c:1827
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n y -k son mutuamente exclusivas"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc y -k son mutuamente exclusivos"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only no tiene sentido"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status no tiene sentido"
 
-#: builtin/log.c:1841
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check no tiene sentido"
 
-#: builtin/log.c:1874
-msgid "standard output, or directory, which one?"
-msgstr "¿salida standard, o directorio, cual?"
+#: builtin/log.c:1964
+msgid "--stdout, --output, and --output-directory are mutually exclusive"
+msgstr "--stdout, --output, and --output-directory son mutuamente exclusivas"
 
-#: builtin/log.c:1978
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requiere --cover-letter o un parche único"
 
-#: builtin/log.c:1982
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:1983
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contra v%d:"
 
-#: builtin/log.c:1989
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor requiere --range-diff"
 
-#: builtin/log.c:1993
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requiere --cover-letter o parche único"
 
-#: builtin/log.c:2001
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:2002
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff contra v%d:"
 
-#: builtin/log.c:2013
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "no se puede leer la firma del archivo '%s'"
 
-#: builtin/log.c:2049
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Generando parches"
 
-#: builtin/log.c:2093
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "falló al crear los archivos de salida"
 
-#: builtin/log.c:2152
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<upstream> [<head> [<límite>]]]"
 
-#: builtin/log.c:2206
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16141,114 +17248,118 @@
 "No se pudo encontrar una rama remota rastreada, por favor especifique "
 "<upstream> manualmente.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<opciones>] [<archivo>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "identifique el estado del archivo con tags"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "usar letras minúsculas para archivos 'asumidos sin cambios'"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "usar letras minúsculas para archivos de 'fsmonitor clean'"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "mostrar archivos en caché en la salida (default)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "mostrar archivos borrados en la salida"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "mostrar archivos modificados en la salida"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "mostrar otros archivos en la salida"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "mostrar archivos ignorados en la salida"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr ""
 "mostrar contenido de nombres de objetos en el área de stage en la salida"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "mostrar archivos en el filesystem que necesitan ser borrados"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "mostrar solo nombres de 'directorios otros'"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "mostrar finales de línea de archivos"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "no mostrar directorios vacíos"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "mostrar archivos no fusionados en la salida"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "mostrar información resolver-deshacer"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "saltar archivos que concuerden con el patrón"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "excluir patrones leídos de <archivo>"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr ""
 "leer patrones de exclusión de manera adicional por directorio en <archivo>"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "agregar las exclusiones standard de git"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "hacer la salida relativa al directorio principal del proyecto"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "recurrir a través de submódulos"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "si cualquier <archivo> no está en el índice, tratarlo como un error"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "árbol-ismo"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 "fingir que las rutas han sido borradas ya que todavía hay <árbol-ismos> "
 "presentes"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "mostrar data de debug"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "suprimir entradas duplicadas"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16259,39 +17370,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<repositorio> [<refs>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "no mostrar el URL remoto"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1384
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "ejecutar"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "ruta de git-upload-pack en el host remoto"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "limitar a tags"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "limitar a heads"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "no mostrar tags pelados"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "tomar url.<base>.insteadOf en cuenta"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "salir con código de salida 2 si no se encuentran refs que concuerden"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "mostrar ref subyacente en adición al objeto apuntado por él"
 
@@ -16332,6 +17443,55 @@
 msgstr ""
 "mostrar todo el árbol; no solo el directorio actual (implica --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<opciones>] <msg> <patch> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "mantener sujeto"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "mantener parche sin brackets en el sujeto"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "copiar Message-ID al final del mensaje del commit"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "re-codificar metadata en i18n.commitEncoding"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "deshabilitar charset re-coding de metadata"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "codificación"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "re-codificar metadata en esta codificación"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "usar tijeras"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<acción>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "actión cuando se encuentra un CR citado"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "usar cabeceras en el cuerpo del mensaje"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -16448,193 +17608,193 @@
 msgid "Merging %s with %s\n"
 msgstr "Fusionando %s con %s\n"
 
-#: builtin/merge.c:56
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<opciones>] [<commit>...]"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:121
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "cambiar `m' requiere un valor"
 
-#: builtin/merge.c:144
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "opción `%s' requiere un valor"
 
-#: builtin/merge.c:190
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "No se pudo encontrar estrategia de fusión '%s'.\n"
 
-#: builtin/merge.c:191
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Estrategias disponibles son:"
 
-#: builtin/merge.c:196
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Estrategias personalizadas disponibles son:"
 
-#: builtin/merge.c:247 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "no mostrar un diffstat al final de la fusión"
 
-#: builtin/merge.c:250 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "mostrar un diffstat al final de la fusión"
 
-#: builtin/merge.c:251 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(sinónimo para --stat)"
 
-#: builtin/merge.c:253 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "agregar (como máximo <n>) entradas del shortlog al mensaje del commit de "
 "fusión"
 
-#: builtin/merge.c:256 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "crear un commit único en lugar de hacer una fusión"
 
-#: builtin/merge.c:258 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "realizar un commit si la fusión es exitosa (default)"
 
-#: builtin/merge.c:260 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "editar mensaje antes de realizar commit"
 
-#: builtin/merge.c:262
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "permitir fast-forwars (default)"
 
-#: builtin/merge.c:264 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "abortar si fast-forward no es posible"
 
-#: builtin/merge.c:268 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "verificar que el commit nombrado tiene una firma GPG válida"
 
-#: builtin/merge.c:269 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:527 builtin/rebase.c:1398 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "estrategia"
 
-#: builtin/merge.c:270 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "estrategia de fusión para usar"
 
-#: builtin/merge.c:271 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "opción=valor"
 
-#: builtin/merge.c:272 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "opción para la estrategia de fusión seleccionada"
 
-#: builtin/merge.c:274
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "fusionar mensaje de commit (para una fusión no fast-forward)"
 
-#: builtin/merge.c:281
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "abortar la fusión en progreso actual"
 
-#: builtin/merge.c:283
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort pero deja el índice y el árbol de trabajo solos"
 
-#: builtin/merge.c:285
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "continuar la fusión en progreso actual"
 
-#: builtin/merge.c:287 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "permitir fusionar historias no relacionadas"
 
-#: builtin/merge.c:294
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "hacer un bypass a hooks pre-merge-commit y commit-msg"
 
-#: builtin/merge.c:311
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "no se pudo ejecutar stash."
 
-#: builtin/merge.c:316
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "stash falló"
 
-#: builtin/merge.c:321
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "no es un objeto válido: %s"
 
-#: builtin/merge.c:343 builtin/merge.c:360
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "lectura de árbol falló"
 
-#: builtin/merge.c:390
-msgid " (nothing to squash)"
-msgstr " (nada para hacer squash)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Ya está actualizado. (nada para hacer squash)"
 
-#: builtin/merge.c:401
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Commit de squash -- no actualizando HEAD\n"
 
-#: builtin/merge.c:451
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "No hay mensaje de fusión -- no actualizando HEAD\n"
 
-#: builtin/merge.c:502
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' no apunta a ningún commit"
 
-#: builtin/merge.c:589
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Mal string branch.%s.mergeoptions: %s"
 
-#: builtin/merge.c:716
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "No manejando nada más que fusión de dos heads."
 
-#: builtin/merge.c:730
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Opción desconocida para merge-recursive: -X%s"
 
-#: builtin/merge.c:745
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "no es posible escribir %s"
 
-#: builtin/merge.c:797
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "No se puedo leer de '%s'"
 
-#: builtin/merge.c:806
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "No se realiza commit de la fusión; use 'git commit' para completar la "
 "fusión.\n"
 
-#: builtin/merge.c:812
+#: builtin/merge.c:827
 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"
@@ -16646,11 +17806,11 @@
 "tópico.\n"
 "\n"
 
-#: builtin/merge.c:817
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Un mensaje vacío aborta el commit.\n"
 
-#: builtin/merge.c:820
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -16659,74 +17819,74 @@
 "Líneas comenzando con '%c' serán ignoradas, y un mensaje vacío aborta\n"
 " el commit.\n"
 
-#: builtin/merge.c:873
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Mensaje de commit vacío."
 
-#: builtin/merge.c:888
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Maravilloso.\n"
 
-#: builtin/merge.c:949
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Fusión automática falló; arregle los conflictos y luego realice un commit "
 "con el resultado.\n"
 
-#: builtin/merge.c:988
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "No rama actual."
 
-#: builtin/merge.c:990
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "No hay remoto para la rama actual."
 
-#: builtin/merge.c:992
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "Por defecto, no hay un upstream  definido para la rama actual."
 
-#: builtin/merge.c:997
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "No hay rama de rastreo remoto para %s de %s"
 
-#: builtin/merge.c:1054
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor erróneo '%s' en el entorno '%s'"
 
-#: builtin/merge.c:1157
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "nada que podamos fusionar en %s: %s"
 
-#: builtin/merge.c:1191
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "nada que podamos fusionar"
 
-#: builtin/merge.c:1295
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort no espera argumentos"
 
-#: builtin/merge.c:1299
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "No hay una fusión para abortar (falta MERGE_HEAD)"
 
-#: builtin/merge.c:1317
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit no espera argumentos"
 
-#: builtin/merge.c:1330
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue no espera argumentos"
 
-#: builtin/merge.c:1334
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "No hay fusión en progreso (falta MERGE_HEAD)."
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -16734,7 +17894,7 @@
 "No has concluido la fusión (existe MERGE_HEAD).\n"
 "Por favor, realiza un commit con los cambios antes de fusionar."
 
-#: builtin/merge.c:1357
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -16742,102 +17902,135 @@
 "No has concluido el cherry-pick (existe CHERRY_PICK_HEAD).\n"
 "Por favor, realiza un commit con los cambios antes de fusionar."
 
-#: builtin/merge.c:1360
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "No has concluido el cherry-pick (existe CHERRY_PICK_HEAD)."
 
-#: builtin/merge.c:1374
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "No se puede combinar --squash con --no-ff."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "No se puede combinar --squash con --commit."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "No hay commit especificado y merge.defaultToUpstream no está configurado."
 
-#: builtin/merge.c:1409
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "Commit aplastado dentro de un head vacío no es soportado todavía"
 
-#: builtin/merge.c:1411
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Commit no fast-forward no tiene sentido dentro de un head vacío"
 
-#: builtin/merge.c:1416
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - nada que podamos fusionar"
 
-#: builtin/merge.c:1418
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Solo se puede fusionar exactamente un commit en un head vacío"
 
-#: builtin/merge.c:1499
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "rehusando fusionar historias no relacionadas"
 
-#: builtin/merge.c:1508
-msgid "Already up to date."
-msgstr "Ya está actualizado."
-
-#: builtin/merge.c:1518
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Actualizando %s..%s\n"
 
-#: builtin/merge.c:1564
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Intentando fusión en índice realmente trivial...\n"
 
-#: builtin/merge.c:1571
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Nop.\n"
 
-#: builtin/merge.c:1596
-msgid "Already up to date. Yeeah!"
-msgstr "Ya está actualizado. ¡Oh, yeaahh!"
-
-#: builtin/merge.c:1602
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "No es posible hacer fast-forward, abortando."
 
-#: builtin/merge.c:1630 builtin/merge.c:1695
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Rebobinando el árbol a original...\n"
 
-#: builtin/merge.c:1634
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Intentando estrategia de fusión %s...\n"
 
-#: builtin/merge.c:1686
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Ninguna estrategia de fusión manejó la fusión.\n"
 
-#: builtin/merge.c:1688
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Fusionar con estrategia %s falló.\n"
 
-#: builtin/merge.c:1697
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Usando el %s para preparar resolución a mano.\n"
 
-#: builtin/merge.c:1711
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Fusión automática fue bien; detenida antes del commit como se solicitó\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "peligro: información de tag no pasa fsck: %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "error: valor de tag no pasa fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) nunca debería activar esta devolución de llamada"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "no se pudo leer objeto de tag '%s'"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "objeto '%s' es taggeado como '%s', pero es un tipo '%s'"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "etiqueta en stdin no pasó nuestro estricto control fsck"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "tag en stdin no se refería a un objeto válido"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "incapaz de escribir el archivo de tag"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -16854,19 +18047,35 @@
 msgid "allow creation of more than one tree"
 msgstr "permitir la creación de más de un árbol"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<tamaño>)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<opciones>] write [--preferred-pack=<pack>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<opciones>] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<opciones>] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<opciones>] repack [--batch-size=<tamaño>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr "objeto directorio conteniendo conjuntos de pares packfile y pack-index"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "pack preferido"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "pack para reuso cuando se calcula un bitmap de múltiples packs"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
@@ -16874,15 +18083,7 @@
 "durante el repack, recolectar los pack-files de tamaño menor en un batch que "
 "es más grande que este tamaño"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "muchos argumentos"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "opción --batch-size es solo para el subcomando 'repack'"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "subcomando desconocido: %s"
@@ -16915,68 +18116,72 @@
 msgid "skip move/rename errors"
 msgstr "saltar errores de mover/renombrar"
 
-#: builtin/mv.c:169
+#: builtin/mv.c:170
 #, c-format
 msgid "destination '%s' is not a directory"
 msgstr "destino '%s' no es un directorio"
 
-#: builtin/mv.c:180
+#: builtin/mv.c:181
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
 msgstr "Revisando cambio de nombre de '%s' a '%s'\n"
 
-#: builtin/mv.c:184
+#: builtin/mv.c:185
 msgid "bad source"
 msgstr "mala fuente"
 
-#: builtin/mv.c:187
+#: builtin/mv.c:188
 msgid "can not move directory into itself"
 msgstr "no se pude mover un directorio en sí mismo"
 
-#: builtin/mv.c:190
+#: builtin/mv.c:191
 msgid "cannot move directory over file"
 msgstr "no se puede mover un directorio dentro de un archivo"
 
-#: builtin/mv.c:199
+#: builtin/mv.c:200
 msgid "source directory is empty"
 msgstr "directorio de fuente está vacío"
 
-#: builtin/mv.c:224
+#: builtin/mv.c:225
 msgid "not under version control"
 msgstr "no se encuentra bajo control de versión"
 
 #: builtin/mv.c:227
+msgid "conflicted"
+msgstr "en conflicto"
+
+#: builtin/mv.c:230
 msgid "destination exists"
 msgstr "destino existe"
 
-#: builtin/mv.c:235
+#: builtin/mv.c:238
 #, c-format
 msgid "overwriting '%s'"
 msgstr "sobrescribiendo '%s'"
 
-#: builtin/mv.c:238
+#: builtin/mv.c:241
 msgid "Cannot overwrite"
 msgstr "No se puede sobrescribir"
 
-#: builtin/mv.c:241
+#: builtin/mv.c:244
 msgid "multiple sources for the same target"
 msgstr "múltiples fuentes para el mismo objetivo"
 
-#: builtin/mv.c:243
+#: builtin/mv.c:246
 msgid "destination directory does not exist"
 msgstr "el directorio de destino no existe"
 
-#: builtin/mv.c:250
+#: builtin/mv.c:253
 #, c-format
 msgid "%s, source=%s, destination=%s"
 msgstr "%s, fuente=%s, destino=%s"
 
-#: builtin/mv.c:271
+#: builtin/mv.c:274
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Renombrando %s a %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:781 builtin/repack.c:520
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "renombrando '%s' falló"
@@ -16994,8 +18199,8 @@
 msgstr "git name-rev [<opciones>] --stdin"
 
 #: builtin/name-rev.c:524
-msgid "print only names (no SHA-1)"
-msgstr "imprimir sólo nombres (sin SHA-1)"
+msgid "print only ref-based names (no object names)"
+msgstr "imprimir solo nombres basados en referencias (sin nombres de objetos)"
 
 #: builtin/name-rev.c:525
 msgid "only use tags to name the commits"
@@ -17170,7 +18375,7 @@
 msgid "the note contents have been left in %s"
 msgstr "los contenidos de nota han sido dejados en %s"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "no se pudo abrir o leer '%s'"
@@ -17213,8 +18418,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "demasiados parámetros"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "muchos argumentos"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -17273,8 +18479,8 @@
 msgstr "cargar configuración de reescritura para <comando> (implica --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "muy pocos parámetros"
+msgid "too few arguments"
+msgstr "muy pocos argumentos"
 
 #: builtin/notes.c:538
 #, c-format
@@ -17403,7 +18609,7 @@
 "commit con el resultado 'git notes merge --commit', o aborte la fusión con "
 "'git notes merge --abort'.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Falló al resolver '%s' como una ref válida."
@@ -17421,7 +18627,7 @@
 msgid "read object names from the standard input"
 msgstr "leer nombres de objetos de standard input"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "no eliminar, solo mostrar"
 
@@ -17437,125 +18643,139 @@
 msgid "use notes from <notes-ref>"
 msgstr "usar notas desde <referencia-de-notas>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1608
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subcomando desconocido: %s"
 
-#: builtin/pack-objects.c:53
+#: builtin/pack-objects.c:54
 msgid ""
 "git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
 msgstr ""
 "git pack-objects --stdout [<opciones>...] [< <lista-de-ref> | < <lista-de-"
 "objetos>]"
 
-#: builtin/pack-objects.c:54
+#: builtin/pack-objects.c:55
 msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr ""
 "git pack-objects [<opciones>...] <nombre-base> [< <lista-de-refs> | < <lista-"
 "de-objetos>]"
 
-#: builtin/pack-objects.c:442
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: no se pudo localizar %s, se esperaba en el "
+"desplazamiento %<PRIuMAX> en el paquete %s"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "mal paquete de objeto CRC para %s"
 
-#: builtin/pack-objects.c:453
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "objeto empaquetado corrupto para %s"
 
-#: builtin/pack-objects.c:584
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "delta recursivo encontrado para objeto %s"
 
-#: builtin/pack-objects.c:795
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u objetos ordenados, esperados %<PRIu32>"
 
-#: builtin/pack-objects.c:1003
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "objeto esperado en el desplazamiento %<PRIuMAX> en el paquete %s"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "deshabilitando escritura bitmap, paquetes son divididos debido a pack."
 "packSizeLimit"
 
-#: builtin/pack-objects.c:1016
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Escribiendo objetos"
 
-#: builtin/pack-objects.c:1077 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "falló al iniciar %s"
 
-#: builtin/pack-objects.c:1130
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> objetos escritos mientras se esperaban %<PRIu32>"
 
-#: builtin/pack-objects.c:1347
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "deshabilitando escritura bitmap, ya que algunos objetos no están siendo "
 "empaquetados"
 
-#: builtin/pack-objects.c:1774
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "overflow de offset en la base de delta en paquete para %s"
 
-#: builtin/pack-objects.c:1783
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "outbound de offset en la base de delta para %s"
 
-#: builtin/pack-objects.c:2054
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Contando objetos"
 
-#: builtin/pack-objects.c:2199
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "incapaz de analizar header del objeto %s"
 
-#: builtin/pack-objects.c:2269 builtin/pack-objects.c:2285
-#: builtin/pack-objects.c:2295
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "objeto %s no puede ser leído"
 
-#: builtin/pack-objects.c:2272 builtin/pack-objects.c:2299
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "objeto %s inconsistente con el largo del objeto (%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2309
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "suboptimal pack - fuera de memoria"
 
-#: builtin/pack-objects.c:2624
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compresión delta usando hasta %d hilos"
 
-#: builtin/pack-objects.c:2763
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "no es posible empaquetar objetos alcanzables desde tag %s"
 
-#: builtin/pack-objects.c:2851
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Comprimiendo objetos"
 
-#: builtin/pack-objects.c:2857
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "inconsistencia con la cuenta de delta"
 
-#: builtin/pack-objects.c:2929
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -17564,7 +18784,7 @@
 "valor para uploadpack.blobpackfileuri tiene que ser de la forma '<hash-de-"
 "objeto> <hash-de-pack> <uri>' (se tuvo '%s')"
 
-#: builtin/pack-objects.c:2932
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -17572,7 +18792,17 @@
 "objeto ya está configurado en otro uploadpack.blobpackfileuri (se obtuvo "
 "'%s')"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "no se puede obtener el tipo de objeto %s en pack %s"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "no se pudo encontrar pack '%s'"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -17581,7 +18811,7 @@
 "se espseraba ID de objeto al borde, se obtuvo basura:\n"
 "%s"
 
-#: builtin/pack-objects.c:2967
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -17590,240 +18820,252 @@
 "se esperaba ID de objeto, se obtuvo basuta:\n"
 "%s"
 
-#: builtin/pack-objects.c:3065
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "valor inválido para --missing"
 
-#: builtin/pack-objects.c:3124 builtin/pack-objects.c:3232
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "no se puede abrir índice de paquetes"
 
-#: builtin/pack-objects.c:3155
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "objeto perdido en %s no pudo ser examinado"
 
-#: builtin/pack-objects.c:3240
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "incapaz de forzar un objeto perdido"
 
-#: builtin/pack-objects.c:3333
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "no es una rev '%s'"
 
-#: builtin/pack-objects.c:3336
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "mala revisión '%s'"
 
-#: builtin/pack-objects.c:3361
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "incapaz de añadir objetos recientes"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "versión de índice no soportada %s"
 
-#: builtin/pack-objects.c:3418
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "mala versión del índice '%s'"
 
-#: builtin/pack-objects.c:3456
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<versión>[,<offset>]"
 
-#: builtin/pack-objects.c:3457
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "escribir el índice de paquete en la versión de formato idx especificado"
 
-#: builtin/pack-objects.c:3460
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "tamaño máximo de cada paquete resultante"
 
-#: builtin/pack-objects.c:3462
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorar objetos prestados de otros almacenes de objetos"
 
-#: builtin/pack-objects.c:3464
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "ignorar objetos paquete"
 
-#: builtin/pack-objects.c:3466
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "limitar ventana de paquete por objetos"
 
-#: builtin/pack-objects.c:3468
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr "limitar ventana de paquete por memoria en adición a límite de objetos"
 
-#: builtin/pack-objects.c:3470
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "longitud máxima de cadena delta permitida en el paquete resultante"
 
-#: builtin/pack-objects.c:3472
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "reusar deltas existentes"
 
-#: builtin/pack-objects.c:3474
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "reutilizar objetos existentes"
 
-#: builtin/pack-objects.c:3476
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "usar objetos OFS_DELTA"
 
-#: builtin/pack-objects.c:3478
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr "usar hilos cuando se busque para mejores concordancias de delta"
 
-#: builtin/pack-objects.c:3480
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "no crear un paquete resultante vacío"
 
-#: builtin/pack-objects.c:3482
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "leer argumentos de revisión de standard input"
 
-#: builtin/pack-objects.c:3484
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "limitar los objetos a aquellos que no han sido empaquetados todavía"
 
-#: builtin/pack-objects.c:3487
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "incluir objetos alcanzables por cualquier referencia"
 
-#: builtin/pack-objects.c:3490
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "incluir objetos referidos por entradas de reflog"
 
-#: builtin/pack-objects.c:3493
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "incluir objetos referidos por el índice"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "leer packs de stdin"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "mostrar paquete en stdout"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "incluir objetos tag que refieren a objetos a ser empaquetados"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "mantener objetos inalcanzables"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "empaquetar objetos sueltos inalcanzables"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "desempaquetar objetos inalcanzables más nuevos que <tiempo>"
 
-#: builtin/pack-objects.c:3507
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "usar el algoritmo sparse reachability"
 
-#: builtin/pack-objects.c:3509
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "crear paquetes delgados"
 
-#: builtin/pack-objects.c:3511
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "crear paquetes adecuados para fetches superficiales"
 
-#: builtin/pack-objects.c:3513
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorar paquetes que tienen un archivo .keep acompañante"
 
-#: builtin/pack-objects.c:3515
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "ignorar este paquete"
 
-#: builtin/pack-objects.c:3517
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "nivel de compresión del paquete"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "no ocultar commits por injertos"
 
-#: builtin/pack-objects.c:3521
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "usar un índice bitmap si está disponible para acelerar la cuenta de objetos"
 
-#: builtin/pack-objects.c:3523
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "escribir un índice de bitmap junto al índice de paquete"
 
-#: builtin/pack-objects.c:3527
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "escribir un índice de bitmap si es posible"
 
-#: builtin/pack-objects.c:3531
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "manejo de objetos perdidos"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "no se puede empaquetar objetos en packfiles promisores"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "respetar islas durante la compresión delta"
 
-#: builtin/pack-objects.c:3538
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "protocolo"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "excluyendo cualquier uploadpack.blobpackfileuri configurado con este "
 "protocolo"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "profundidad de cadena de delta %d es muy profunda, forzando %d"
 
-#: builtin/pack-objects.c:3573
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit es muy grande, forzando %d"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size no puede ser usado para construir un paquete para "
 "transferencia"
 
-#: builtin/pack-objects.c:3629
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "tamaño mínimo del paquete es 1 MiB"
 
-#: builtin/pack-objects.c:3634
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin no puede ser usado para construir un paquete indexable"
 
-#: builtin/pack-objects.c:3637
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable y --unpack-unreachable son incompatibles"
 
-#: builtin/pack-objects.c:3643
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "no se puede usar--filter sin --stdout"
 
-#: builtin/pack-objects.c:3703
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "no se puede usar--filter con --stdin-packs"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "no se puede usar un lista interna de rev con --stdin-packs"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Enumerando objetos"
 
-#: builtin/pack-objects.c:3734
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -17832,6 +19074,20 @@
 "Total %<PRIu32> (delta %<PRIu32>), reusado %<PRIu32> (delta %<PRIu32>), pack-"
 "reusado %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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' está nominado para su eliminación.\n"
+"Si todavía usa este comando, agregue un extra\n"
+"opción, '--i-still-use-this', en la línea de comando\n"
+"y háganos saber que todavía lo usa enviando un correo electrónico\n"
+"a <git@vger.kernel.org>. Gracias.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<opciones>]"
@@ -17890,11 +19146,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorporar cambios por rebase en lugar de fusión"
 
-#: builtin/pull.c:158 builtin/rebase.c:478 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "permitir fast-forward"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "ejecutar automáticamente stash/stash pop antes y después"
 
@@ -17915,7 +19171,93 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Valor inválido para pull.ff: %s"
 
-#: builtin/pull.c:349
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr "No hay candidato para rebasar entre las refs que has bajado con fetch."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"No hay candidatos para fusionar entre las refs que has bajado con fetch."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Generalmente esto significa que has proveído un wildcard de refspec que no "
+"tiene\n"
+"concordancia en el final remoto."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Se ha solicitado un pull del remoto '%s', pero no se ha especificado\n"
+"una rama. Porque este no es el remoto configurado por default\n"
+"para tu rama actual, tienes que especificar una rama en la línea de comando."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "No te encuentras actualmente en la rama."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Por favor especifica a qué rama quieres rebasar."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Por favor especifica a qué rama quieres fusionar."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Ver git-pull(1) para detalles."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<remoto>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<rama>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "No hay información de rastreo para la rama actual."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Si deseas configurar el rastreo de información para esta rama, puedes "
+"hacerlo con:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Tu configuración especifica fusionar con la ref '%s'\n"
+"de tu remoto, pero no se pudo hacer fetch a esa ref."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "no es posible acceder al commit %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "ignorando --verify-signatures para rebase"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -17945,106 +19287,19 @@
 "por defecto en cada invocación.\n"
 "\n"
 
-#: builtin/pull.c:459
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr "No hay candidato para rebasar entre las refs que has bajado con fetch."
-
-#: builtin/pull.c:461
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"No hay candidatos para fusionar entre las refs que has bajado con fetch."
-
-#: builtin/pull.c:462
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Generalmente esto significa que has proveído un wildcard de refspec que no "
-"tiene\n"
-"concordancia en el final remoto."
-
-#: builtin/pull.c:465
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Se ha solicitado un pull del remoto '%s', pero no se ha especificado\n"
-"una rama. Porque este no es el remoto configurado por default\n"
-"para tu rama actual, tienes que especificar una rama en la línea de comando."
-
-#: builtin/pull.c:470 builtin/rebase.c:1234 git-parse-remote.sh:73
-msgid "You are not currently on a branch."
-msgstr "No te encuentras actualmente en la rama."
-
-#: builtin/pull.c:472 builtin/pull.c:487 git-parse-remote.sh:79
-msgid "Please specify which branch you want to rebase against."
-msgstr "Por favor especifica a qué rama quieres rebasar."
-
-#: builtin/pull.c:474 builtin/pull.c:489 git-parse-remote.sh:82
-msgid "Please specify which branch you want to merge with."
-msgstr "Por favor especifica a qué rama quieres fusionar."
-
-#: builtin/pull.c:475 builtin/pull.c:490
-msgid "See git-pull(1) for details."
-msgstr "Ver git-pull(1) para detalles."
-
-#: builtin/pull.c:477 builtin/pull.c:483 builtin/pull.c:492
-#: builtin/rebase.c:1240 git-parse-remote.sh:64
-msgid "<remote>"
-msgstr "<remoto>"
-
-#: builtin/pull.c:477 builtin/pull.c:492 builtin/pull.c:497
-#: git-parse-remote.sh:65
-msgid "<branch>"
-msgstr "<rama>"
-
-#: builtin/pull.c:485 builtin/rebase.c:1232 git-parse-remote.sh:75
-msgid "There is no tracking information for the current branch."
-msgstr "No hay información de rastreo para la rama actual."
-
-#: builtin/pull.c:494 git-parse-remote.sh:95
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Si deseas configurar el rastreo de información para esta rama, puedes "
-"hacerlo con:"
-
-#: builtin/pull.c:499
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Tu configuración especifica fusionar con la ref '%s'\n"
-"de tu remoto, pero no se pudo hacer fetch a esa ref."
-
-#: builtin/pull.c:610
-#, c-format
-msgid "unable to access commit %s"
-msgstr "no es posible acceder al commit %s"
-
-#: builtin/pull.c:895
-msgid "ignoring --verify-signatures for rebase"
-msgstr "ignorando --verify-signatures para rebase"
-
-#: builtin/pull.c:955
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Actualizando una rama no nata con cambios agregados al índice."
 
-#: builtin/pull.c:959
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "pull con rebase"
 
-#: builtin/pull.c:960
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "por favor realiza un commit o un stash con ellos."
 
-#: builtin/pull.c:985
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18055,7 +19310,7 @@
 "realizando fast-forward al árbol de trabajo\n"
 "desde commit %s."
 
-#: builtin/pull.c:991
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18072,15 +19327,15 @@
 "$ git reset --hard\n"
 "para recuperar."
 
-#: builtin/pull.c:1006
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "No se puede fusionar múltiples ramas en un head vacío."
 
-#: builtin/pull.c:1010
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "No se puede rebasar en múltiples ramas."
 
-#: builtin/pull.c:1018
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "no se puede rebasar con modificaciones de submódulos grabadas localmente"
@@ -18090,15 +19345,15 @@
 msgstr ""
 "git push [<opciones>] [<repositorio> [<especificaciones-de-referencia>...]]"
 
-#: builtin/push.c:112
+#: builtin/push.c:111
 msgid "tag shorthand without <tag>"
 msgstr "taquigrafía de tag sin <tag>"
 
-#: builtin/push.c:122
+#: builtin/push.c:119
 msgid "--delete only accepts plain target ref names"
 msgstr "--delete solo acepta como objetivos nombres de ref planos"
 
-#: builtin/push.c:168
+#: builtin/push.c:164
 msgid ""
 "\n"
 "To choose either option permanently, see push.default in 'git help config'."
@@ -18107,7 +19362,7 @@
 "Para elegir si la opción es permanente, mira push.default en 'git help "
 "config'."
 
-#: builtin/push.c:171
+#: builtin/push.c:167
 #, c-format
 msgid ""
 "The upstream branch of your current branch does not match\n"
@@ -18132,7 +19387,7 @@
 "    git push %s HEAD\n"
 "%s"
 
-#: builtin/push.c:186
+#: builtin/push.c:182
 #, c-format
 msgid ""
 "You are not currently on a branch.\n"
@@ -18147,7 +19402,7 @@
 "\n"
 "\tgit push %s HEAD:<nombre-de-rama-remota>\n"
 
-#: builtin/push.c:200
+#: builtin/push.c:194
 #, c-format
 msgid ""
 "The current branch %s has no upstream branch.\n"
@@ -18161,12 +19416,12 @@
 "\n"
 "\tgit push --set-upstream %s %s\n"
 
-#: builtin/push.c:208
+#: builtin/push.c:202
 #, c-format
 msgid "The current branch %s has multiple upstream branches, refusing to push."
 msgstr "La rama actual %s tiene múltiples ramas upstream, rechazando el push."
 
-#: builtin/push.c:211
+#: builtin/push.c:205
 #, c-format
 msgid ""
 "You are pushing to remote '%s', which is not the upstream of\n"
@@ -18177,13 +19432,13 @@
 "la rama actual '%s', sin decirme qué poner en el push\n"
 "para actualizar en qué rama de remoto."
 
-#: builtin/push.c:270
+#: builtin/push.c:260
 msgid ""
 "You didn't specify any refspecs to push, and push.default is \"nothing\"."
 msgstr ""
 "No se especificó ningún refspecs para hacer push, y push.default es \"nada\"."
 
-#: builtin/push.c:277
+#: builtin/push.c:267
 msgid ""
 "Updates were rejected because the tip of your current branch is behind\n"
 "its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -18195,20 +19450,20 @@
 "'git pull ...') antes de hacer push de nuevo.\n"
 "Mira 'Note about fast-forwards' en 'git push --help' para más detalles."
 
-#: builtin/push.c:283
+#: builtin/push.c:273
 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"
 "(e.g. 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"Actualizaciones fueron rechazadas porque una punta de rama en el push está \n"
+"Actualizaciones fueron rechazadas porque una punta de rama en el push está\n"
 "detrás de su contraparte remota. Verifique esta rama e integre los cambios "
 "remotos\n"
 "(ejem. 'git pull ...') antes de volver a hacer push.\n"
 "Vea las 'Notes about fast-forwards' en 'git push --help' para más detalles."
 
-#: builtin/push.c:289
+#: builtin/push.c:279
 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"
@@ -18217,17 +19472,17 @@
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
 "Actualizaciones fueron rechazadas porque el remoto contiene trabajo que\n"
-"no existe localmente. Esto es causado usualmente por otro repositorio \n"
+"no existe localmente. Esto es causado usualmente por otro repositorio\n"
 "realizando push a la misma ref. Quizás quiera integrar primero los cambios\n"
 "remotos (ej. 'git pull ...') antes de volver a hacer push.\n"
 "Vea 'Notes about fast-forwards0 en 'git push --help' para detalles."
 
-#: builtin/push.c:296
+#: builtin/push.c:286
 msgid "Updates were rejected because the tag already exists in the remote."
 msgstr ""
 "Actualizaciones fueron rechazadas porque el tag ya existe en el remoto."
 
-#: builtin/push.c:299
+#: builtin/push.c:289
 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"
@@ -18237,99 +19492,117 @@
 "o actualizar un ref remoto para hacer que  apunte a un objeto no-commit,\n"
 "sin usar la opción '--force'.\n"
 
-#: builtin/push.c:361
+#: builtin/push.c:294
+msgid ""
+"Updates were rejected because the tip of the remote-tracking\n"
+"branch has been updated since the last checkout. You may want\n"
+"to integrate those changes locally (e.g., 'git pull ...')\n"
+"before forcing an update.\n"
+msgstr ""
+"Las actualizaciones se rechazaron porque la sugerencia del seguimiento "
+"remoto\n"
+"rama se ha actualizado desde la última vez que se realizó la compra. Es "
+"posible que desee\n"
+"para integrar esos cambios localmente (por ejemplo, 'git pull ...')\n"
+"antes de forzar una actualización.\n"
+
+#: builtin/push.c:364
 #, c-format
 msgid "Pushing to %s\n"
 msgstr "Haciendo push a %s\n"
 
-#: builtin/push.c:368
+#: builtin/push.c:371
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "falló el push de algunas referencias a '%s'"
 
-#: builtin/push.c:542
+#: builtin/push.c:553
 msgid "repository"
 msgstr "repositorio"
 
-#: builtin/push.c:543 builtin/send-pack.c:164
+#: builtin/push.c:554 builtin/send-pack.c:189
 msgid "push all refs"
 msgstr "realizar push a todas las refs"
 
-#: builtin/push.c:544 builtin/send-pack.c:166
+#: builtin/push.c:555 builtin/send-pack.c:191
 msgid "mirror all refs"
 msgstr "realizar mirror a todas las refs"
 
-#: builtin/push.c:546
+#: builtin/push.c:557
 msgid "delete refs"
 msgstr "borrar refs"
 
-#: builtin/push.c:547
+#: builtin/push.c:558
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "realizar push a tags (no puede ser usado con --all o --mirror)"
 
-#: builtin/push.c:550 builtin/send-pack.c:167
+#: builtin/push.c:561 builtin/send-pack.c:192
 msgid "force updates"
 msgstr "forzar actualizaciones"
 
-#: builtin/push.c:551 builtin/send-pack.c:179
+#: builtin/push.c:562 builtin/send-pack.c:204
 msgid "<refname>:<expect>"
 msgstr "<refname>:<expect>"
 
-#: builtin/push.c:552 builtin/send-pack.c:180
+#: builtin/push.c:563 builtin/send-pack.c:205
 msgid "require old value of ref to be at this value"
 msgstr "requiere haber valor viejo de ref en este valor"
 
-#: builtin/push.c:555
+#: builtin/push.c:566 builtin/send-pack.c:208
+msgid "require remote updates to be integrated locally"
+msgstr "requieren que las actualizaciones remotas se integren localmente"
+
+#: builtin/push.c:569
 msgid "control recursive pushing of submodules"
 msgstr "controlar push recursivo de submódulos"
 
-#: builtin/push.c:556 builtin/send-pack.c:174
+#: builtin/push.c:570 builtin/send-pack.c:199
 msgid "use thin pack"
 msgstr "usar empaquetado delgado"
 
-#: builtin/push.c:557 builtin/push.c:558 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
+#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
+#: builtin/send-pack.c:187
 msgid "receive pack program"
 msgstr "recibir programa de paquete"
 
-#: builtin/push.c:559
+#: builtin/push.c:573
 msgid "set upstream for git pull/status"
 msgstr "configurar upstream para git pulll/status"
 
-#: builtin/push.c:562
+#: builtin/push.c:576
 msgid "prune locally removed refs"
 msgstr "recortando refs eliminadas localmente"
 
-#: builtin/push.c:564
+#: builtin/push.c:578
 msgid "bypass pre-push hook"
 msgstr "hacer un bypass al hook pre-push"
 
-#: builtin/push.c:565
+#: builtin/push.c:579
 msgid "push missing but relevant tags"
 msgstr "realizar push de tags faltantes pero relevantes"
 
-#: builtin/push.c:567 builtin/send-pack.c:168
+#: builtin/push.c:581 builtin/send-pack.c:193
 msgid "GPG sign the push"
 msgstr "Firmar con GPG el push"
 
-#: builtin/push.c:569 builtin/send-pack.c:175
+#: builtin/push.c:583 builtin/send-pack.c:200
 msgid "request atomic transaction on remote side"
 msgstr "solicitar transacción atómica en el lado remoto"
 
-#: builtin/push.c:587
+#: builtin/push.c:601
 msgid "--delete is incompatible with --all, --mirror and --tags"
 msgstr "--delete es incompatible con --all, --mirror y --tags"
 
-#: builtin/push.c:589
+#: builtin/push.c:603
 msgid "--delete doesn't make sense without any refs"
 msgstr "--delete no tiene sentido sin ninguna referencia"
 
-#: builtin/push.c:609
+#: builtin/push.c:623
 #, c-format
 msgid "bad repository '%s'"
 msgstr "mal repositorio '%s'"
 
-#: builtin/push.c:610
+#: builtin/push.c:624
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -18351,70 +19624,74 @@
 "\n"
 "    git push <nombre>\n"
 
-#: builtin/push.c:625
+#: builtin/push.c:639
 msgid "--all and --tags are incompatible"
 msgstr "--all y --tags son incompatibles"
 
-#: builtin/push.c:627
+#: builtin/push.c:641
 msgid "--all can't be combined with refspecs"
 msgstr "--all no puede ser combinada con refspecs"
 
-#: builtin/push.c:631
+#: builtin/push.c:645
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror y --tags son incompatibles"
 
-#: builtin/push.c:633
+#: builtin/push.c:647
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror no puede ser combinado con refspecs"
 
-#: builtin/push.c:636
+#: builtin/push.c:650
 msgid "--all and --mirror are incompatible"
 msgstr "--all y --mirror son incompatibles"
 
-#: builtin/push.c:640
+#: builtin/push.c:657
 msgid "push options must not have new line characters"
 msgstr "opciones de push no pueden tener caracteres de línea nueva"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 "git range-diff [<opciones>] <base-vieja>..<punta-vieja> <base-nueva>..<punta-"
 "nueva>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<opciones>] <punta-vieja>...<punta-nueva>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<opciones>] <base> <punta-vieja> <punta-nueva>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "Porcentaje por el cual la creación es pesada"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "usar colores simples de diff"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "notas"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "pasado a 'git log'"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "no .. en rango: '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "solo emite salida relacionada con el primer rango"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "solo emite salida relacionada con el segundo rango"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "no es un rango de commit: '%s'"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "argumento único de formato debe ser un rango simétrico"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "se necesitan dos rangos de commits"
 
@@ -18519,193 +19796,193 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:181 builtin/rebase.c:205 builtin/rebase.c:232
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "lista de pendientes inutilizable: '%s'"
 
-#: builtin/rebase.c:298
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "no se pudo crear archivo temporal %s"
 
-#: builtin/rebase.c:304
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "no se pudo marcar como interactivo"
 
-#: builtin/rebase.c:358
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "no se pudo generar lista de pendientes"
 
-#: builtin/rebase.c:399
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "un commit base tiene que ser provisto con --upstream o --onto"
 
-#: builtin/rebase.c:468
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<opciones>]"
 
-#: builtin/rebase.c:481 builtin/rebase.c:1374
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "mantener commits que comienzan con vacío"
 
-#: builtin/rebase.c:485 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "permitir commits con mensajes vacíos"
 
-#: builtin/rebase.c:487
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "rebasando commits de fusión"
 
-#: builtin/rebase.c:489
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "mantener puntos originales de la rama de sus primos"
 
-#: builtin/rebase.c:491
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "mover commits que comienzan con squash!/fixup!"
 
-#: builtin/rebase.c:492
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "firmar commits"
 
-#: builtin/rebase.c:494 builtin/rebase.c:1314
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "mostrar un diffstat de lo que cambió en upstream"
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "continuar rebase"
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "saltar commit"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "editar la lista de pendientes"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "mostrar el parche actual"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "ids de commits cortos en la lista de pendientes"
 
-#: builtin/rebase.c:506
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "expandir ids de commits en la lista de pendientes"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "revisar la lista de pendientes"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "reorganizar líneas fixup/squash"
 
-#: builtin/rebase.c:512
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "insertar comando exec en la lista de pendientes"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "hacia"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "restringir revision"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:519
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "squash hacia"
 
-#: builtin/rebase.c:521
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "el commit de upstream"
 
-#: builtin/rebase.c:523
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:523
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "nombre de head"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "estrategia de rebase"
 
-#: builtin/rebase.c:529
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "opciones de estrategia"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "cambiar a"
 
-#: builtin/rebase.c:532
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "la rama o commit para hacer checkout"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "hacia-nombre"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "hacia nombre"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "el comando para ejecutar"
 
-#: builtin/rebase.c:537 builtin/rebase.c:1407
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "reprogramar automaticamente cualquier `exec` que falle"
 
-#: builtin/rebase.c:553
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins no tiene efecto sin --rebase-merges"
 
-#: builtin/rebase.c:569
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s requiere un backend de fusión"
 
-#: builtin/rebase.c:612
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "no se pudo conseguir 'onto': '%s'"
 
-#: builtin/rebase.c:629
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head inválido: '%s'"
 
-#: builtin/rebase.c:654
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "ignorando inválido allow_rerere_autoupdate: '%s'"
 
-#: builtin/rebase.c:799 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -18713,14 +19990,14 @@
 "To abort and get back to the state before \"git rebase\", run \"git rebase --"
 "abort\"."
 msgstr ""
-"Resuelva todos los conflictos manualmente ya sea con \n"
+"Resuelva todos los conflictos manualmente ya sea con\n"
 "\"git add/rm <archivo_conflictivo>\", luego ejecute \"git rebase --continue"
 "\".\n"
 "Si prefieres saltar este parche, ejecuta \"git rebase --skip\" .\n"
 "Para abortar y regresar al estado previo al \"git rebase\", ejecuta \"git "
 "rebase --abort\"."
 
-#: builtin/rebase.c:882
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -18739,7 +20016,7 @@
 "\n"
 "Como resultado, git no puede hacer rebase con ellos."
 
-#: builtin/rebase.c:1208
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -18748,7 +20025,7 @@
 "tipo '%s' vacío y desconocido; valores válidos son \"drop\", \"keep\", y "
 "\"ask\"."
 
-#: builtin/rebase.c:1226
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -18765,7 +20042,7 @@
 "    git rebase '<rama>'\n"
 "\n"
 
-#: builtin/rebase.c:1242
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -18778,180 +20055,184 @@
 "    git branch --set-upstream-to=%s/<rama> %s\n"
 "\n"
 
-#: builtin/rebase.c:1272
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "comandos exec no pueden contener newlines"
 
-#: builtin/rebase.c:1276
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "comando exec vacío"
 
-#: builtin/rebase.c:1305
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "haciendo rebase hacia rama dada en lugar de upstream"
 
-#: builtin/rebase.c:1307
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "usar la base de fusión de upstream y la rama como base actual"
 
-#: builtin/rebase.c:1309
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "permitir ejecutar hook pre-rebase"
 
-#: builtin/rebase.c:1311
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "ser silencioso implica --no-stat"
 
-#: builtin/rebase.c:1317
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "no mostrar un diffstat de lo que cambió en upstream"
 
-#: builtin/rebase.c:1320
-msgid "add a Signed-off-by: line to each commit"
+#: builtin/rebase.c:1334
+msgid "add a Signed-off-by trailer to each commit"
 msgstr "agregar una línea \"Firmado-por\" al mensaje de cada commit"
 
-#: builtin/rebase.c:1322 builtin/rebase.c:1326 builtin/rebase.c:1328
-msgid "passed to 'git am'"
-msgstr "pasado a 'git am'"
+#: builtin/rebase.c:1337
+msgid "make committer date match author date"
+msgstr "hacer que la fecha del commit concuerde con la fecha de autoría"
 
-#: builtin/rebase.c:1330 builtin/rebase.c:1332
+#: builtin/rebase.c:1339
+msgid "ignore author date and use current date"
+msgstr "ignorar la fecha del autor y usar la fecha actual"
+
+#: builtin/rebase.c:1341
+msgid "synonym of --reset-author-date"
+msgstr "sinónimo para --reset-author-date"
+
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "pasado a 'git-apply'"
 
-#: builtin/rebase.c:1334 builtin/rebase.c:1337
+#: builtin/rebase.c:1345
+msgid "ignore changes in whitespace"
+msgstr "ignorar cambios en espacios en blanco"
+
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "cherry-pick todos los commits, incluso si no han cambiado"
 
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "continuar"
 
-#: builtin/rebase.c:1342
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "saltar el parche y continuar"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "aborta y revisa la rama original"
 
-#: builtin/rebase.c:1347
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "aborta pero mantiene HEAD donde está"
 
-#: builtin/rebase.c:1348
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "editar la lista de pendientes durante el rebase interactivo"
 
-#: builtin/rebase.c:1351
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "muestra el archivo parche siendo aplicado o fusionado"
 
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "usar estrategias de apply para el rebase"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "usar estrategias de fusión para el rebase"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "permitir al usuario editar la lista de commits para rebasar"
 
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(DEPRECADO) intentar recrear merges en lugar de ignorarlos"
 
-#: builtin/rebase.c:1371
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "como manejar commits que se vuelven vacíos"
 
-#: builtin/rebase.c:1378
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "mover commits que comienzan con squash!/fixup! bajo -i"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "agregar líneas exec tras cada acommit de la lista editable"
 
-#: builtin/rebase.c:1389
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "permitir rebase commits con mensajes vacíos"
 
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "intentar fusiones por rebase en lugar de saltarlas"
 
-#: builtin/rebase.c:1396
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "use 'merge-base --fork-point' para refinar upstream"
 
-#: builtin/rebase.c:1398
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "usar la estrategia de merge dada"
 
-#: builtin/rebase.c:1400 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "opción"
 
-#: builtin/rebase.c:1401
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "pasar el argumento para la estrategia de fusión"
 
-#: builtin/rebase.c:1404
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "hacer rebase a todos los commits alcanzables hasta la raíz(raíces)"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 "aplicar todos los cambios, incluso aquellos que ya están presentes en "
 "upstream"
 
-#: builtin/rebase.c:1426
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"el soporte para rebase.useBuiltin ha sido eliminado!\n"
-"Vea su entrada en 'git help config' para detalles."
-
-#: builtin/rebase.c:1432
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Parece que 'git am' está en progreso. No se puede rebasar."
 
-#: builtin/rebase.c:1473
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges está deprecado. Use --rebase-merges en su lugar."
 
-#: builtin/rebase.c:1478
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "no se puede combinar '--keep-base' con '--onto'"
 
-#: builtin/rebase.c:1480
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "no se puede combinar '--keep-base' con '--root'"
 
-#: builtin/rebase.c:1484
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "no se puede combinar '--root' con '--fork-point'"
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "¿No hay rebase en progreso?"
 
-#: builtin/rebase.c:1491
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "La acción --edit-todo sólo puede ser usada al rebasar interactivamente."
 
-#: builtin/rebase.c:1514
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "No se puede leer el HEAD"
 
-#: builtin/rebase.c:1526
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -18959,16 +20240,16 @@
 "Tienes que editar todos los conflictos de fusión y luego\n"
 "marcarlos como resueltos usando git add"
 
-#: builtin/rebase.c:1545
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "no se pudo descartar los cambios del árbol de trabajo"
 
-#: builtin/rebase.c:1564
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "no se puede regresar a %s"
 
-#: builtin/rebase.c:1610
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -18981,7 +20262,7 @@
 "valuable there.\n"
 msgstr ""
 "Parece que ya hay un directorio %s, y\n"
-"me pregunto si estás en medio de otro rebase. Si ese es el \n"
+"me pregunto si estás en medio de otro rebase. Si ese es el\n"
 "caso, por favor intenta\n"
 "\t%s\n"
 "Si no es el caso, por favor\n"
@@ -18989,135 +20270,135 @@
 "y ejecútame nuevamente. Me estoy deteniendo en caso de que tengas\n"
 "algo de valor ahí.\n"
 
-#: builtin/rebase.c:1638
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "switch `C' espera un valor numérico"
 
-#: builtin/rebase.c:1680
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Modo desconocido: %s"
 
-#: builtin/rebase.c:1702
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requiere --merge o --interactive"
 
-#: builtin/rebase.c:1732
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "no se pueden combinar opciones de apply con opciones de merge"
 
-#: builtin/rebase.c:1745
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Backend de rebase desconocido: %s"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec requiere --exec o --interactive"
 
-#: builtin/rebase.c:1790
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "no se puede combinar '--preserve-merges' con '--rebase-merges'"
 
-#: builtin/rebase.c:1794
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "error: no se puede combinar '--preserve-merges' con '--reschedule-failed-"
 "exec'"
 
-#: builtin/rebase.c:1818
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "upstream inválido '%s'"
 
-#: builtin/rebase.c:1824
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "No se pudo crear commit raíz nuevo"
 
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': necesita exactamente una base de fusión con rama"
 
-#: builtin/rebase.c:1853
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': necesita exactamente una base de fusión"
 
-#: builtin/rebase.c:1861
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "No apunta a un commit válido '%s'"
 
-#: builtin/rebase.c:1887
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal: no existe la rama/commit: '%s'"
 
-#: builtin/rebase.c:1895 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:1990
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "No existe ref: %s"
 
-#: builtin/rebase.c:1906
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "No se pudo resolver HEAD a una revisión"
 
-#: builtin/rebase.c:1927
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Por favor, confírmalos o guárdalos."
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "no se pudo cambiar a %s"
 
-#: builtin/rebase.c:1974
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD está actualizado."
 
-#: builtin/rebase.c:1976
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La rama actual %s está actualizada.\n"
 
-#: builtin/rebase.c:1984
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD está actualizado, rebase forzado."
 
-#: builtin/rebase.c:1986
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Rama actual %s está actualizada, rebase forzado.\n"
 
-#: builtin/rebase.c:1994
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "El hook pre-rebase rechazó el rebase."
 
-#: builtin/rebase.c:2001
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Cambios a %s:\n"
 
-#: builtin/rebase.c:2004
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Cambios desde %s a %s:\n"
 
-#: builtin/rebase.c:2029
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "En primer lugar, rebobinando HEAD para después reproducir tus cambios encima "
 "de ésta...\n"
 
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "No se puede desacoplar HEAD"
 
-#: builtin/rebase.c:2047
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avance rápido de %s a %s.\n"
@@ -19126,7 +20407,7 @@
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-dir>"
 
-#: builtin/receive-pack.c:844
+#: builtin/receive-pack.c:1276
 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"
@@ -19159,7 +20440,7 @@
 "Para suprimir este mensaje y mantener el comportamiento predeterminado,\n"
 "configura 'receive.denyCurrentBranch' a 'refuse'."
 
-#: builtin/receive-pack.c:864
+#: builtin/receive-pack.c:1296
 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"
@@ -19180,11 +20461,11 @@
 "\n"
 "Para suprimir este mensaje, puedes configurarlo en 'refuse'."
 
-#: builtin/receive-pack.c:1970
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "tranquilo"
 
-#: builtin/receive-pack.c:1984
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Se tiene que especificar un directorio."
 
@@ -19215,36 +20496,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "'%s' no es una marca de tiempo válida"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Marcando objectos alcanzables..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "¡%s apunta a ningún lado!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "no reflog especificado para borrar"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "no es una reflog: %s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "no reflog para '%s'"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "formato inválido: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -19382,40 +20663,35 @@
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "especificar ramas para rastrear solo tiene sentido con fetch mirrors"
 
-#: builtin/remote.c:195 builtin/remote.c:696
+#: builtin/remote.c:195 builtin/remote.c:700
 #, c-format
 msgid "remote %s already exists."
 msgstr "remoto %s ya existe."
 
-#: builtin/remote.c:199 builtin/remote.c:700
-#, c-format
-msgid "'%s' is not a valid remote name"
-msgstr "'%s' no es un nombre remoto válido"
-
-#: builtin/remote.c:239
+#: builtin/remote.c:240
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "No se pudo configurar master '%s'"
 
-#: builtin/remote.c:354
+#: builtin/remote.c:355
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "No se pudo realizar el fetch al mapa para refspec %s"
 
-#: builtin/remote.c:453 builtin/remote.c:461
+#: builtin/remote.c:454 builtin/remote.c:462
 msgid "(matching)"
 msgstr "(concordando)"
 
-#: builtin/remote.c:465
+#: builtin/remote.c:466
 msgid "(delete)"
 msgstr "(eliminar)"
 
-#: builtin/remote.c:653
+#: builtin/remote.c:655
 #, c-format
 msgid "could not set '%s'"
 msgstr "no se pudo configurar '%s'"
 
-#: builtin/remote.c:658
+#: builtin/remote.c:660
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -19426,17 +20702,17 @@
 "\t%s:%d\n"
 "ahora nombra al remoto inexistente '%s'"
 
-#: builtin/remote.c:689 builtin/remote.c:832 builtin/remote.c:940
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "No existe el remoto '%s'"
 
-#: builtin/remote.c:706
+#: builtin/remote.c:710
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "No se pudo renombrar la sección de configuración '%s' a '%s'"
 
-#: builtin/remote.c:726
+#: builtin/remote.c:730
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -19447,17 +20723,17 @@
 "\t%s\n"
 "\tPor favor actualice la configuración manualmente si es necesario."
 
-#: builtin/remote.c:766
+#: builtin/remote.c:770
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "borrando '%s' falló"
 
-#: builtin/remote.c:800
+#: builtin/remote.c:804
 #, c-format
 msgid "creating '%s' failed"
 msgstr "creando '%s' falló"
 
-#: builtin/remote.c:876
+#: builtin/remote.c:882
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -19472,118 +20748,118 @@
 "eliminadas;\n"
 "para borrarlas, use:"
 
-#: builtin/remote.c:890
+#: builtin/remote.c:896
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "No se pudo borrar la sección de configuración '%s'"
 
-#: builtin/remote.c:993
+#: builtin/remote.c:999
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " nuevo (siguiente fetch se guardará en remotes/%s)"
 
-#: builtin/remote.c:996
+#: builtin/remote.c:1002
 msgid " tracked"
 msgstr " rastreada"
 
-#: builtin/remote.c:998
+#: builtin/remote.c:1004
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " viejo ( use 'git remote prune' para eliminar)"
 
-#: builtin/remote.c:1000
+#: builtin/remote.c:1006
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1041
+#: builtin/remote.c:1047
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "inválido branch.%s.merge; no se puede rebasar en > 1 rama"
 
-#: builtin/remote.c:1050
+#: builtin/remote.c:1056
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "rebasa interactivamente en remoto %s"
 
-#: builtin/remote.c:1052
+#: builtin/remote.c:1058
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "rebasa interactivamente (con fusiones) en remoto %s"
 
-#: builtin/remote.c:1055
+#: builtin/remote.c:1061
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "rebasa sobre el remoto %s"
 
-#: builtin/remote.c:1059
+#: builtin/remote.c:1065
 #, c-format
 msgid " merges with remote %s"
 msgstr " se fusiona con remoto %s"
 
-#: builtin/remote.c:1062
+#: builtin/remote.c:1068
 #, c-format
 msgid "merges with remote %s"
 msgstr "fusiona con remoto %s"
 
-#: builtin/remote.c:1065
+#: builtin/remote.c:1071
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s y con el remoto %s\n"
 
-#: builtin/remote.c:1108
+#: builtin/remote.c:1114
 msgid "create"
 msgstr "crear"
 
-#: builtin/remote.c:1111
+#: builtin/remote.c:1117
 msgid "delete"
 msgstr "borrar"
 
-#: builtin/remote.c:1115
+#: builtin/remote.c:1121
 msgid "up to date"
 msgstr "actualizado"
 
-#: builtin/remote.c:1118
+#: builtin/remote.c:1124
 msgid "fast-forwardable"
 msgstr "puede realizar fast-forward"
 
-#: builtin/remote.c:1121
+#: builtin/remote.c:1127
 msgid "local out of date"
 msgstr "desactualizado local"
 
-#: builtin/remote.c:1128
+#: builtin/remote.c:1134
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s fuerza a %-*s (%s)"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1137
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s publica a %-*s (%s)"
 
-#: builtin/remote.c:1135
+#: builtin/remote.c:1141
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s fuerza a %s"
 
-#: builtin/remote.c:1138
+#: builtin/remote.c:1144
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s publica a %s"
 
-#: builtin/remote.c:1206
+#: builtin/remote.c:1212
 msgid "do not query remotes"
 msgstr "no consultar remotos"
 
-#: builtin/remote.c:1233
+#: builtin/remote.c:1239
 #, c-format
 msgid "* remote %s"
 msgstr "* remoto %s"
 
-#: builtin/remote.c:1234
+#: builtin/remote.c:1240
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL  para obtener: %s"
 
-#: builtin/remote.c:1235 builtin/remote.c:1251 builtin/remote.c:1390
+#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
 msgid "(no URL)"
 msgstr "(sin URL)"
 
@@ -19591,323 +20867,332 @@
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1249 builtin/remote.c:1251
+#: builtin/remote.c:1255 builtin/remote.c:1257
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL para publicar: %s"
 
-#: builtin/remote.c:1253 builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Rama HEAD: %s"
 
-#: builtin/remote.c:1253
+#: builtin/remote.c:1259
 msgid "(not queried)"
 msgstr "(no consultado)"
 
-#: builtin/remote.c:1255
+#: builtin/remote.c:1261
 msgid "(unknown)"
 msgstr "(desconocido)"
 
-#: builtin/remote.c:1259
+#: builtin/remote.c:1265
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr ""
 "  HEAD en rama ( HEAD remoto es ambiguo, puede ser uno de los siguientes):\n"
 
-#: builtin/remote.c:1271
+#: builtin/remote.c:1277
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Rama remota:%s"
 msgstr[1] "  Ramas remotas:%s"
 
-#: builtin/remote.c:1274 builtin/remote.c:1300
+#: builtin/remote.c:1280 builtin/remote.c:1306
 msgid " (status not queried)"
 msgstr " (estado no consultado)"
 
-#: builtin/remote.c:1283
+#: builtin/remote.c:1289
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Rama local configurada para 'git pull':"
 msgstr[1] "  Ramas locales configuradas para 'git pull':"
 
-#: builtin/remote.c:1291
+#: builtin/remote.c:1297
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Las referencias locales serán reflejadas por 'git push'"
 
-#: builtin/remote.c:1297
+#: builtin/remote.c:1303
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Referencia local configurada para 'git push'%s:"
 msgstr[1] "  Referencias locales configuradas para 'git push'%s:"
 
-#: builtin/remote.c:1318
+#: builtin/remote.c:1324
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "configurar refs/remotes/<nombre>/HEAD de acuerdo al remoto"
 
-#: builtin/remote.c:1320
+#: builtin/remote.c:1326
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "borrar refs/remotos/<nombre>/HEAD"
 
-#: builtin/remote.c:1335
+#: builtin/remote.c:1341
 msgid "Cannot determine remote HEAD"
 msgstr "No se puede determinar el HEAD remoto"
 
-#: builtin/remote.c:1337
+#: builtin/remote.c:1343
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Múltiples ramas HEAD remotas. Por favor escoja una explícitamente con:"
 
-#: builtin/remote.c:1347
+#: builtin/remote.c:1353
 #, c-format
 msgid "Could not delete %s"
 msgstr "No se pudo borrar %s"
 
-#: builtin/remote.c:1355
+#: builtin/remote.c:1361
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "No es un ref válido: %s"
 
-#: builtin/remote.c:1357
+#: builtin/remote.c:1363
 #, c-format
 msgid "Could not setup %s"
 msgstr "No se pudo configurar %s"
 
-#: builtin/remote.c:1375
+#: builtin/remote.c:1381
 #, c-format
 msgid " %s will become dangling!"
 msgstr " ¡%s será colgado!"
 
-#: builtin/remote.c:1376
+#: builtin/remote.c:1382
 #, c-format
 msgid " %s has become dangling!"
 msgstr " ¡%s ha sido colgado!"
 
-#: builtin/remote.c:1386
+#: builtin/remote.c:1392
 #, c-format
 msgid "Pruning %s"
 msgstr "Recortando %s"
 
-#: builtin/remote.c:1387
+#: builtin/remote.c:1393
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1403
+#: builtin/remote.c:1409
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [ejecutará prune] %s"
 
-#: builtin/remote.c:1406
+#: builtin/remote.c:1412
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [prune realizado] %s"
 
-#: builtin/remote.c:1451
+#: builtin/remote.c:1457
 msgid "prune remotes after fetching"
 msgstr "recortar remotos tras realizar fetch"
 
-#: builtin/remote.c:1514 builtin/remote.c:1568 builtin/remote.c:1636
+#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
 #, c-format
 msgid "No such remote '%s'"
 msgstr "No existe el remoto '%s'"
 
-#: builtin/remote.c:1530
+#: builtin/remote.c:1539
 msgid "add branch"
 msgstr "agregar rama"
 
-#: builtin/remote.c:1537
+#: builtin/remote.c:1546
 msgid "no remote specified"
 msgstr "no hay remotos especificados"
 
-#: builtin/remote.c:1554
+#: builtin/remote.c:1563
 msgid "query push URLs rather than fetch URLs"
 msgstr "consultar URLs de push en lugar de URLs de fetch"
 
-#: builtin/remote.c:1556
+#: builtin/remote.c:1565
 msgid "return all URLs"
 msgstr "retornar todos los URLs"
 
-#: builtin/remote.c:1584
+#: builtin/remote.c:1595
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "no hay URLs configurados para remoto '%s'"
 
-#: builtin/remote.c:1610
+#: builtin/remote.c:1621
 msgid "manipulate push URLs"
 msgstr "manipular URLs de push"
 
-#: builtin/remote.c:1612
+#: builtin/remote.c:1623
 msgid "add URL"
 msgstr "agregar URL"
 
-#: builtin/remote.c:1614
+#: builtin/remote.c:1625
 msgid "delete URLs"
 msgstr "borrar URLs"
 
-#: builtin/remote.c:1621
+#: builtin/remote.c:1632
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete no tiene sentido"
 
-#: builtin/remote.c:1660
+#: builtin/remote.c:1673
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Patrón de URL viejo inválido: %s"
 
-#: builtin/remote.c:1668
+#: builtin/remote.c:1681
 #, c-format
 msgid "No such URL found: %s"
 msgstr "No se encontró URL: %s"
 
-#: builtin/remote.c:1670
+#: builtin/remote.c:1683
 msgid "Will not delete all non-push URLs"
 msgstr "No borrará todos los URLs de no-push"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<opciones>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
-"Re empaquetados incrementales son incompatibles con índices bitmap. Use \n"
+"Re empaquetados incrementales son incompatibles con índices bitmap. Use\n"
 "--no-write-bitmap-index o deshabilite la configuración pack.writebitmaps."
 
-#: builtin/repack.c:193
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "no se puede iniciar pack-objects para reempaquetar objetos promisores"
 
-#: builtin/repack.c:232 builtin/repack.c:418
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Esperando líneas de ID de objeto en full hex solo desde pack-objects."
 
-#: builtin/repack.c:256
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "no se puede finalizar pack-objects para reempaquetar objetos promisores"
 
-#: builtin/repack.c:294
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "no se puede abrir index para %s"
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr "pack %s es muy grande para considerar en la progresión geométrica"
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "pack %s es muy grande para hacer un roll up"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "empaquetar todo en un único paquete"
 
-#: builtin/repack.c:296
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "lo mismo que -a, y pierde objetos inaccesibles"
 
-#: builtin/repack.c:299
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "eliminar paquetes redundantes, y ejecutar git-prune-packed"
 
-#: builtin/repack.c:301
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "pasar --no-reuse-delta a git-pack-objects"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "pasar --no-reuse-object a git-pack-objects"
 
-#: builtin/repack.c:305
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "no ejecutar git-update-server-info"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "pasar --local a git-pack-objects"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "escribir un índice de bitmap"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "pasar --delta-islands a git-pack-objects"
 
-#: builtin/repack.c:313
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "aproxime"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "con -A, no perder objetos más antiguos que este"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "con -a, re empaquetar objetos inalcanzables"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "tamaño de la ventana usado para la compresión delta"
 
-#: builtin/repack.c:319 builtin/repack.c:325
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "bytes"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "lo mismo que arriba, pero limita el tamaño de memoria en lugar de contar "
 "entradas"
 
-#: builtin/repack.c:322
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "limita la profundidad máxima del delta"
 
-#: builtin/repack.c:324
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "limita el número máximo de hilos"
 
-#: builtin/repack.c:326
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "tamaño máximo de cada paquete"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "re-empaquetar objetos en paquetes marcados con .keep"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "no reempaquetar este paquete"
 
-#: builtin/repack.c:340
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "encontrar una progresión geométrica con factor <N>"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "no se pueden borrar paquetes en un repositorio de objetos-preciosos"
 
-#: builtin/repack.c:344
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable y -A son incompatibles"
 
-#: builtin/repack.c:427
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric es incompatible con -A, -a"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Nada nuevo para empaquetar."
 
-#: builtin/repack.c:488
+#: builtin/repack.c:669
 #, c-format
-msgid ""
-"WARNING: Some packs in use have been renamed by\n"
-"WARNING: prefixing old- to their name, in order to\n"
-"WARNING: replace them with the new version of the\n"
-"WARNING: file.  But the operation failed, and the\n"
-"WARNING: attempt to rename them back to their\n"
-"WARNING: original names also failed.\n"
-"WARNING: Please rename them in %s manually:\n"
-msgstr ""
-"WARNING: Algunos packs en uso han sido renombrados\n"
-"WARNING: agregando el prefijo old- a sus nombres,para\n"
-"WARNING: reemplazarlos con la nueva versión del\n"
-"WARNING: archivo. Pero la operación falló, y el intento\n"
-"WARNING: de renombrarlos a sus nombres originales\n"
-"WARNING: también falló.\n"
-"WARNING: Por favor renombralos en %s manualmente:\n"
+msgid "missing required file: %s"
+msgstr "falta archivo requerido: %s"
 
-#: builtin/repack.c:536
+#: builtin/repack.c:671
 #, c-format
-msgid "failed to remove '%s'"
-msgstr "falló al eliminar'%s'"
+msgid "could not unlink: %s"
+msgstr "no se pudo desvincular: %s"
 
 #: builtin/replace.c:22
 msgid "git replace [-f] <object> <replacement>"
@@ -20237,8 +21522,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "No se puede realziar un reset %s  en medio de una fusión."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:595
-#: builtin/stash.c:619
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "ser silencioso, solo reportar errores"
 
@@ -20323,19 +21608,19 @@
 msgid "Could not write new index file."
 msgstr "No se puede escribir un nuevo archivo índice."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "no se puede combinar --exclude-promisor-objects y --missing"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "filtrado de objetos requiere --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list no soporta mostrar notas"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "conteo de marcas es incompatible con --objects"
 
@@ -20448,19 +21733,19 @@
 msgid "keep redundant, empty commits"
 msgstr "mantener commits redundantes, vacíos"
 
-#: builtin/revert.c:232
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "falló al revertir"
 
-#: builtin/revert.c:245
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "cherry-pick falló"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<opciones>] [--] <archivo>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -20474,7 +21759,7 @@
 "los siguientes archivos tienen contenido diferente a los mismos\n"
 "y a HEAD:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -20482,13 +21767,13 @@
 "\n"
 "(usa -f para forzar su eliminación)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "el siguiente archivo tiene cambios en stage en el índice:"
 msgstr[1] "los siguientes archivos tienen cambios en stage en el índice:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -20496,48 +21781,48 @@
 "\n"
 "(usa --cached para conservar el archivo, o -f para forzar su eliminación)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "el siguiente archivo tiene modificaciones locales:"
 msgstr[1] "los siguientes archivos tienen modificaciones locales:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "no listar archivos eliminado"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "solo eliminar del índice"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "sobrescribir el check de actualizado"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "permitir eliminar de forma recursiva"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "salir con estado cero incluso si nada coincide"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "Se entregó un nuevo pathspec. ¿Qué archivos debería eliminar?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "por favor agrega el stage de tus cambios a .gitmodules o realiza un stash "
 "para proceder"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "no eliminando '%s' de manera recursiva sin -r"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: no es posible eliminar %s"
@@ -20554,55 +21839,76 @@
 "[<ref>...]\n"
 "  --all y especificaciones <ref> explícitas son mutuamente exclusivas."
 
-#: builtin/send-pack.c:163
+#: builtin/send-pack.c:188
 msgid "remote name"
 msgstr "nombre remoto"
 
-#: builtin/send-pack.c:176
+#: builtin/send-pack.c:201
 msgid "use stateless RPC protocol"
 msgstr "usar protocolo RPC sin estado"
 
-#: builtin/send-pack.c:177
+#: builtin/send-pack.c:202
 msgid "read refs from stdin"
 msgstr "leer refs de stdin"
 
-#: builtin/send-pack.c:178
+#: builtin/send-pack.c:203
 msgid "print status from remote helper"
 msgstr "mostrar status del remote helper"
 
-#: builtin/shortlog.c:14
+#: builtin/shortlog.c:16
 msgid "git shortlog [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git shortlog [<opciones>] [<rango-de-revisión>] [[--] <ruta>...]"
 
-#: builtin/shortlog.c:15
+#: builtin/shortlog.c:17
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shorlog [<opciones>]"
 
-#: builtin/shortlog.c:264
-msgid "Group by committer rather than author"
-msgstr "Agrupar por committer en lugar de autor"
+#: builtin/shortlog.c:123
+msgid "using multiple --group options with stdin is not supported"
+msgstr "no se admite el uso de múltiples opciones de grupo --group con stdin"
 
-#: builtin/shortlog.c:266
+#: builtin/shortlog.c:133
+msgid "using --group=trailer with stdin is not supported"
+msgstr "el uso de --group = trailer con stdin no es compatible"
+
+#: builtin/shortlog.c:323
+#, c-format
+msgid "unknown group type: %s"
+msgstr "tipo de grupo desconocido: %s"
+
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "agrupar por committer en lugar de autor"
+
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "ordenar salida de acuerdo al número de commits por autor"
 
-#: builtin/shortlog.c:268
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Suprimir descripción de commits, solo proveer cuenta de commits"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "suprimir descripción de commits, solo proveer cuenta de commits"
 
-#: builtin/shortlog.c:270
-msgid "Show the email address of each author"
-msgstr "Mostrar la dirección de correo de cada autor"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "mostrar la dirección de correo de cada autor"
 
-#: builtin/shortlog.c:271
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:272
-msgid "Linewrap output"
-msgstr "Salida de línea"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "salida de línea"
 
-#: builtin/shortlog.c:301
+#: builtin/shortlog.c:362
+msgid "field"
+msgstr "campo"
+
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "agrupar por campo"
+
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "demasiados argumentos dados fuera del repositorio"
 
@@ -20793,94 +22099,114 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "mostrar refs de stdin que no están en el repositorio local"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <opciones>"
 
-#: builtin/sparse-checkout.c:64
+#: builtin/sparse-checkout.c:46
+msgid "git sparse-checkout list"
+msgstr "git sparse-checkout list"
+
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "este árbol de trabajo no tiene sparse (archivo sparese-checkout tal vez no "
 "existe)"
 
-#: builtin/sparse-checkout.c:216
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "falló al crear directorio para el archivo sparse-checkout"
 
-#: builtin/sparse-checkout.c:257
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
 "no es posible actualizar el formato de repositorio para habilitar "
 "worktreeConfig"
 
-#: builtin/sparse-checkout.c:259
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "falló al configurar opción extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:276
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:295
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "inicializa el sparse-checkout en modo cono"
 
-#: builtin/sparse-checkout.c:332
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "activar el uso de un índice sparse"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "falló al modificar la configuración del índice sparse"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "falló al abrir '%s'"
 
-#: builtin/sparse-checkout.c:389
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "no se pudo normalizar la ruta %s"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <patrones>)"
 
-#: builtin/sparse-checkout.c:426
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "no es posible dequote para la cadena de estilo C '%s'"
 
-#: builtin/sparse-checkout.c:480 builtin/sparse-checkout.c:504
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "no se pudo cargar patrones de sparse-checkout existentes"
 
-#: builtin/sparse-checkout.c:549
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "leer patrones de standard in"
 
-#: builtin/sparse-checkout.c:586
+#: builtin/sparse-checkout.c:594
+msgid "git sparse-checkout reapply"
+msgstr "git sparse-checkout reapply"
+
+#: builtin/sparse-checkout.c:613
+msgid "git sparse-checkout disable"
+msgstr "git sparse-checkout disable"
+
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "error al refrescar directorio de trabajo"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<opciones>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<opciones>] [<stash>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <nombre-rama> [<stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -20892,7 +22218,7 @@
 "          [--pathspec-from-file=<archivo> [--pathspec-file-nul]]\n"
 "          [--] [<pathspec>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -20900,19 +22226,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<mensaje>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <mensaje>] [-q|--quiet] <commit>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -20922,173 +22248,201 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <mensaje>]\n"
 "          [--] [<pathspec>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "'%s' no es un commit estilo stash"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Se especificaron demasiadas revisiones: %s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "No se encontraron entradas de stash."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s no es una referencia válida"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr "git stash clear con parámetros no está implementado"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
+msgstr "git stash clear con argumentos no está implementado"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"ADVERTENCIA: Archivo sin seguimiento en forma de archivo con seguimiento. "
+"Renombrar\n"
+"             %s ->%s\n"
+"          Para hacer espacio.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "no se puede aplicar un stash en medio de un merge"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "no se pudo generar diff %s^!."
 
-#: builtin/stash.c:422
-msgid "conflicts in index.Try without --index."
+#: builtin/stash.c:510
+msgid "conflicts in index. Try without --index."
 msgstr "conflictos en índice. Intente sin --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "no se puede guardar el índice del árbol"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "no se pueden restaurar archivos no rastreados de la entrada stash"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Fusionando %s con %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "El índice no fue sacado de stash."
 
-#: builtin/stash.c:522 builtin/stash.c:621
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "intento de recrear el index"
 
-#: builtin/stash.c:555
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Botado %s (%s)"
 
-#: builtin/stash.c:558
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: No se pudo borrar entrada stash"
 
-#: builtin/stash.c:583
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' no es una referencia stash"
 
-#: builtin/stash.c:633
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "La entrada de stash se guardó en caso de ser necesario nuevamente."
 
-#: builtin/stash.c:656
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "No se especificó el nombre de la rama"
 
-#: builtin/stash.c:800 builtin/stash.c:837
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "falló al analizar el árbol"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "falló al desempaquetar árboles"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "incluir archivos no rastreados en el stash"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "solo mostrar archivos no rastreados en el stash"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "No se puede actualizar %s con %s"
 
-#: builtin/stash.c:818 builtin/stash.c:1475 builtin/stash.c:1540
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "mensaje de stash"
 
-#: builtin/stash.c:828
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" requiere un argumento <commit>"
 
-#: builtin/stash.c:1046
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Sin cambios seleccionados"
 
-#: builtin/stash.c:1146
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Aún no tienes un commit inicial"
 
-#: builtin/stash.c:1173
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "No se puede guardar el estado actual del índice"
 
-#: builtin/stash.c:1182
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "No se pueden guardar los archivos no rastreados"
 
-#: builtin/stash.c:1193 builtin/stash.c:1202
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "No se puede guardar el estado actual del árbol de trabajo"
 
-#: builtin/stash.c:1230
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "No se puede grabar el estado del árbol de trabajo"
 
-#: builtin/stash.c:1279
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "No se puede usar --patch y --include-untracked o --all al mismo tiempo"
 
-#: builtin/stash.c:1295
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "¿Olvidaste 'git add'?"
 
-#: builtin/stash.c:1310
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "No hay cambios locales para guardar"
 
-#: builtin/stash.c:1317
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "No se puede inicializar stash"
 
-#: builtin/stash.c:1332
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "No se puede guardar el estado actual"
 
-#: builtin/stash.c:1337
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Directorio de trabajo guardado y estado de índice %s"
 
-#: builtin/stash.c:1427
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "No se pueden eliminar cambios del árbol de trabajo"
 
-#: builtin/stash.c:1466 builtin/stash.c:1531
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "mantener index"
 
-#: builtin/stash.c:1468 builtin/stash.c:1533
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "stash en modo patch"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "modo tranquilo"
 
-#: builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "incluir archivos sin seguimiento en stash"
 
-#: builtin/stash.c:1473 builtin/stash.c:1538
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "incluir archivos ignorados"
 
-#: builtin/stash.c:1573
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21113,7 +22467,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "anteponer carácter de comentario y espacio a cada línea"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:1999
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Se esperaba un nombre de ref completo, se obtuvo %s"
@@ -21127,7 +22481,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "no se puede quitar un componente del url '%s'"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1395
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "ancho alternativo para rutas relativas"
 
@@ -21135,18 +22489,18 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<ruta>] [<ruta>...]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
 #: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "No se encontró url para la ruta del submódulo '%s' en .gitmodules"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Entrando '%s'\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -21155,7 +22509,7 @@
 "run_command devolvió estado no-cero para %s\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21166,19 +22520,20 @@
 "anidados de %s\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Suprime la salida al inicializar cada comando de submódulo"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "suprime la salida al inicializar cada comando de submódulo"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1063
-msgid "Recurse into nested submodules"
-msgstr "Recursar en submódulos anidados"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "recursar en submódulos anidados"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <comando>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -21210,82 +22565,135 @@
 "Error al registrar el modo de actualización para la ruta del submódulo '%s'"
 
 #: builtin/submodule--helper.c:710
-msgid "Suppress output for initializing a submodule"
-msgstr "Suprime la salida para inicializar un submódulo"
+msgid "suppress output for initializing a submodule"
+msgstr "suprime la salida para inicializar un submódulo"
 
 #: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<opciones>] [<path>]"
 
-#: builtin/submodule--helper.c:789 builtin/submodule--helper.c:924
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 "no se ha encontrado mapeo de submódulos en .gitmodules para la ruta '%s'"
 
-#: builtin/submodule--helper.c:837
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "no pudo resolver ref de HEAD dentro del submódulo '%s'"
 
-#: builtin/submodule--helper.c:864 builtin/submodule--helper.c:1033
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "falló al recursar en el submódulo '%s'"
 
-#: builtin/submodule--helper.c:888 builtin/submodule--helper.c:1199
-msgid "Suppress submodule status output"
-msgstr "Suprimir output del estado del submódulo"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "suprimir output del estado del submódulo"
 
-#: builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:888
 msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr ""
-"Usar el commit guardado en el índice en lugar del guardado en el submódulo "
+"usar el commit guardado en el índice en lugar del guardado en el submódulo "
 "HEAD"
 
-#: builtin/submodule--helper.c:890
-msgid "recurse into nested submodules"
-msgstr "recursar en submódulos anidados"
-
-#: builtin/submodule--helper.c:895
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<ruta>...]"
 
-#: builtin/submodule--helper.c:919
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <ruta>"
 
-#: builtin/submodule--helper.c:983
+#: builtin/submodule--helper.c:990
+#, c-format
+msgid "* %s %s(blob)->%s(submodule)"
+msgstr "* %s %s(blob)->%s(submodule)"
+
+#: builtin/submodule--helper.c:993
+#, c-format
+msgid "* %s %s(submodule)->%s(blob)"
+msgstr "* %s %s(submodule)->%s(blob)"
+
+#: builtin/submodule--helper.c:1006
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: builtin/submodule--helper.c:1056
+#, c-format
+msgid "couldn't hash object from '%s'"
+msgstr "no se pudo realizar hash del objeto '%s'"
+
+#: builtin/submodule--helper.c:1060
+#, c-format
+msgid "unexpected mode %o\n"
+msgstr "modo %o inesperado\n"
+
+#: builtin/submodule--helper.c:1301
+msgid "use the commit stored in the index instead of the submodule HEAD"
+msgstr ""
+"usar el commit guardado en el índice en lugar del guardado en el submódulo "
+"HEAD"
+
+#: builtin/submodule--helper.c:1303
+msgid "to compare the commit in the index with that in the submodule HEAD"
+msgstr ""
+"usar el commit guardado en el índice para comparar con el guardado en el "
+"submódulo HEAD"
+
+#: builtin/submodule--helper.c:1305
+msgid "skip submodules with 'ignore_config' value set to 'all'"
+msgstr "omitir submódulos con el valor 'ignore_config' establecido en 'all'"
+
+#: builtin/submodule--helper.c:1307
+msgid "limit the summary size"
+msgstr "limitar el tamaño de resumen"
+
+#: builtin/submodule--helper.c:1312
+msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
+msgstr "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
+
+#: builtin/submodule--helper.c:1336
+msgid "could not fetch a revision for HEAD"
+msgstr "no se puede obtener la revisión para HEAD"
+
+#: builtin/submodule--helper.c:1341
+msgid "--cached and --files are mutually exclusive"
+msgstr "--cached y --files son mutuamente exclusivos"
+
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Sincronizando url del submódulo para '%s'\n"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "falló al registrar el url para la ruta del submódulo '%s'"
 
-#: builtin/submodule--helper.c:1003
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "error al conseguir el remoto por defecto para el submódulo '%s'"
 
-#: builtin/submodule--helper.c:1014
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "error al actualizar el remoto para el submódulo '%s'"
 
-#: builtin/submodule--helper.c:1061
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Suprime la salida del url del submódulo que se sincroniza"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "suprime la salida del url del submódulo que se sincroniza"
 
-#: builtin/submodule--helper.c:1068
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<ruta>]"
 
-#: builtin/submodule--helper.c:1122
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21294,7 +22702,7 @@
 "El árbol de trabajo del submódulo '%s' contiene un directorio .git (use 'rm -"
 "rf' si realmente quieres eliminarlo incluyendo todo en su historia)"
 
-#: builtin/submodule--helper.c:1134
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -21303,46 +22711,46 @@
 "El árbol de trabajo del submódulo '%s' contiene modificaciones locales; usa "
 "'-f' para descartarlas"
 
-#: builtin/submodule--helper.c:1142
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Directorio '%s' limpiado\n"
 
-#: builtin/submodule--helper.c:1144
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "No se pudo eliminar el árbol de trabajo del submódulo '%s'\n"
 
-#: builtin/submodule--helper.c:1155
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "no se pudo crear directorio vacío de submódulo %s"
 
-#: builtin/submodule--helper.c:1171
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Submódulo '%s' (%s) no registrado para ruta '%s'\n"
 
-#: builtin/submodule--helper.c:1200
-msgid "Remove submodule working trees even if they contain local changes"
+#: builtin/submodule--helper.c:1625
+msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
-"Remover árboles de trabajo de submódulos incluso si contienen cambios locales"
+"remover árboles de trabajo de submódulos incluso si contienen cambios locales"
 
-#: builtin/submodule--helper.c:1201
-msgid "Unregister all submodules"
-msgstr "Quitar todos los submódulos"
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "quitar todos los submódulos"
 
-#: builtin/submodule--helper.c:1206
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<ruta>...]]"
 
-#: builtin/submodule--helper.c:1220
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Usa '--all' si realmente quieres des-inicializar todos los submódulos"
 
-#: builtin/submodule--helper.c:1289
+#: builtin/submodule--helper.c:1714
 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"
@@ -21356,46 +22764,46 @@
 "con\n"
 "'--reference-if-able' en lugar de '--reference'."
 
-#: builtin/submodule--helper.c:1328 builtin/submodule--helper.c:1331
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "submódulo '%s' no puede agregar alterno: %s"
 
-#: builtin/submodule--helper.c:1367
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Valor '%s' para submodule.alternateErrorStrategy no es reconocido"
 
-#: builtin/submodule--helper.c:1374
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Valor '%s' para submodule.alternateLocation no es reconocido"
 
-#: builtin/submodule--helper.c:1398
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "a donde el nuevo submódulo será clonado"
 
-#: builtin/submodule--helper.c:1401
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "nombre del nuevo submódulo"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "url de dónde clonar el submódulo"
 
-#: builtin/submodule--helper.c:1412
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "profundidad para clones superficiales"
 
-#: builtin/submodule--helper.c:1415 builtin/submodule--helper.c:1924
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "forzar el proceso de clonado"
 
-#: builtin/submodule--helper.c:1417 builtin/submodule--helper.c:1926
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "no permitir clonar en directorios no vacíos"
 
-#: builtin/submodule--helper.c:1424
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -21405,104 +22813,104 @@
 "<repositorio>] [--name <nombre>] [--depth <profundidad>] [--single-branch] --"
 "url <url> --path <ruta>"
 
-#: builtin/submodule--helper.c:1449
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "rechazando crear/usar '%s' en el directorio de git de otro submódulo"
 
-#: builtin/submodule--helper.c:1460
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "clon de '%s' en la ruta de submódulo '%s' falló"
 
-#: builtin/submodule--helper.c:1464
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "directorio no está vacío: '%s'"
 
-#: builtin/submodule--helper.c:1476
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "no se pudo obtener el directorio de submódulo para '%s'"
 
-#: builtin/submodule--helper.c:1512
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Modo de actualización inválido '%s' para ruta de submódulo '%s'"
 
-#: builtin/submodule--helper.c:1516
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Modo de actualización inválido '%s' configurado para ruta de submódulo '%s'"
 
-#: builtin/submodule--helper.c:1617
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Ruta de submódulo '%s' no inicializada"
 
-#: builtin/submodule--helper.c:1621
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "¿Tal vez quieres usar 'update --init'?"
 
-#: builtin/submodule--helper.c:1651
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Saltando submódulo %s no fusionado"
 
-#: builtin/submodule--helper.c:1680
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Saltando submódulo '%s'"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Falló al clonar '%s'. Reintento programado"
 
-#: builtin/submodule--helper.c:1841
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Falló al clonar '%s' una segunda vez, abortando"
 
-#: builtin/submodule--helper.c:1903 builtin/submodule--helper.c:2149
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "ruta hacia el árbol de trabajo"
 
-#: builtin/submodule--helper.c:1906
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
 "ruta hacia el árbol de trabajo, a través de extremos de submódulos anidados"
 
-#: builtin/submodule--helper.c:1910
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout o none"
 
-#: builtin/submodule--helper.c:1916
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Crea un clon superficial truncado al número especificado de revisión"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "crea un clon superficial truncado al número especificado de revisión"
 
-#: builtin/submodule--helper.c:1919
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "trabajos paralelos"
 
-#: builtin/submodule--helper.c:1921
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "si el clon inicial debe seguir la recomendación superficial"
 
-#: builtin/submodule--helper.c:1922
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "no mostrar el progreso de clonado"
 
-#: builtin/submodule--helper.c:1933
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<ruta>] [<ruta>...]"
 
-#: builtin/submodule--helper.c:1946
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "mal valor para parámetro update"
 
-#: builtin/submodule--helper.c:1994
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -21511,85 +22919,85 @@
 "Rama de submódulo (%s) configurada para heredar rama del superproyecto, pero "
 "el superproyecto no está en ninguna rama"
 
-#: builtin/submodule--helper.c:2117
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "no se pudo conseguir un handle para el submódulo '%s'"
 
-#: builtin/submodule--helper.c:2150
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "recurrir a submódulos"
 
-#: builtin/submodule--helper.c:2156
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<opciones>] [<path>...]"
 
-#: builtin/submodule--helper.c:2212
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "revisar is es seguro escribir el archivo .gitmodules"
 
-#: builtin/submodule--helper.c:2215
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "desconfigura la opción en elarchivo .gitmodules"
 
-#: builtin/submodule--helper.c:2220
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <nombre> [<valor>]"
 
-#: builtin/submodule--helper.c:2221
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <nombre>"
 
-#: builtin/submodule--helper.c:2222
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2241 git-submodule.sh:176
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 "por favor asegúrate que el archivo .gitmodules está en el árbol de trabajo"
 
-#: builtin/submodule--helper.c:2257
-msgid "Suppress output for setting url of a submodule"
-msgstr "Suprime la salida para inicializar la url de un submódulo"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "suprime la salida para inicializar la url de un submódulo"
 
-#: builtin/submodule--helper.c:2261
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <ruta> <nueva url>"
 
-#: builtin/submodule--helper.c:2294
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "configurar la rama de rastreo por defecto a master"
 
-#: builtin/submodule--helper.c:2296
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "configurar la rama de rastreo por defecto"
 
-#: builtin/submodule--helper.c:2300
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <ruta>"
 
-#: builtin/submodule--helper.c:2301
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <rama> <ruta>"
 
-#: builtin/submodule--helper.c:2308
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "--branch o --default requeridos"
 
-#: builtin/submodule--helper.c:2311
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch y --default son mutuamente exclusivos"
 
-#: builtin/submodule--helper.c:2367 git.c:436 git.c:683
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s no soporta --super-prefix"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' no es un comando submodule--helper válido"
@@ -21602,23 +23010,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <nombre>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "suprimir mensajes de error para refs no simbólicos (desacoplados)"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "eliminar referencia simbólica"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "salida de referencia más corta"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:486
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "razón"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:486
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "razón de la actualización"
 
@@ -21638,27 +23046,29 @@
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
-"\t\t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]"
+"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
+"[<pattern>...]"
 msgstr ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <objeto>]\n"
-"\t\t[--format=<formato>] [--[no-]merged [<commit>]] [<patrón>...]"
+"\t\t[--format=<formato>] [--merged <commit>] [--no-merged <commit>] "
+"[<patrón>...]"
 
 #: builtin/tag.c:30
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<formato>] <nombre-de-tag>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "tag '%s' no encontrado."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Etiqueta '%s' eliminada (era %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -21671,7 +23081,7 @@
 "  %s\n"
 "Las líneas que comienzan con '%c' serán ignoradas.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -21686,15 +23096,11 @@
 "Las líneas que comienzan con '%c' serán conservadas; puedes eliminarlas por "
 "ti mismo si quieres hacerlo.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "incapaz de firmar tag"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "incapaz de escribir el archivo de tag"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -21707,143 +23113,139 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "tipo de objeto erróneo."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "¿Sin mensaje de tag?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "El mensaje del tag ha sido dejado en %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "listar nombres de tags"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "imprimir <n> líneas de cada mensaje de tag"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "eliminar tags"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "verificar tags"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Opciones de creación de tags"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "tags anotadas necesitan un mensaje"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "mensaje de tag"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "forzar la edición del mensaje de tag"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "tag anotado y firmado con GPG"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "usar otra clave para firmar el tag"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "remplazar tag si existe"
 
-#: builtin/tag.c:422 builtin/update-ref.c:492
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "crear un reflog"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Opciones de listado de tag"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "mostrar lista de tags en columnas"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "mostrar solo tags que contienen el commit"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "mostrar solo tags que no contienen el commit"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "sólo imprimir las tags que están fusionadas"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "sólo imprimir las tags que no están fusionadas"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "sólo imprimir tags de el objeto"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column y -n son incompatibles"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "opción -n solo es permitida en modo lista"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "opción --contains solo es permitido en modo lista"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "opción --no-contains solo es permitida en modo lista"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "opción --points-at solo es permitida en modo lista"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "opciones --merged y --no-merged  solo están permitidas en modo lista"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "sólo se permite una de las opciones, -m ó -F."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "demasiados parámetros"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' no es un nombre de tag válido."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "el tag '%s' ya existe"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Etiqueta '%s' actualizada (era %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Desempaquetando objetos"
 
@@ -21907,147 +23309,147 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opciones>] [--] [<archivo>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr ""
 "continuar refresh (Actualización) incluso cuando el índice necesita "
 "actualización"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "refresh: ignora submódulos"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "no ignorar archivos nuevos"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "permitir que archivos remplacen directorios y vice-versa"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "avisar de archivos faltando en el árbol de trabajo"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "ejecutar refresh incluso si el índice contiene entradas sin cambios"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "refresh información de estado"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "como --refresh, pero ignora configuración assume-unchanged"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<modo>,<objeto>,<ruta>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "agregar la entrada especificada al índice"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "marcar archivos como \"not changing\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "limpiar bit assumed-unchanged"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "marcar archivos como \"index-only\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "limpiar bit skip-worktree"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "no tocar entradas index-only"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "agregar solo al índice; no agregar contenido a la base de datos de objetos"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "eliminar rutas nombradas incluso si están presentes en el árbol de trabajo"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "con --stdin: las líneas de entrada son terminadas con bytes nulos"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "leer la lista de rutas para ser actualizada desde standard input"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "agregar entradas de standard input al índice"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "repoblar stages #2 y #3 para las rutas listadas"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "solo actualizar entradas que difieren de HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "ignorar archivos faltantes en el árbol de trabajo"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "reportar acciones por standard output"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(para porcelanas) olvidar conflictos sin resolver guardados"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "escribir índice en este formato"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "activar o desactivar índice dividido"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "habilitar o deshabilitar caché no rastreado"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "probar si el filesystem soporta caché no rastreado"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "habilitar caché no rastreado sin probar el filesystem"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "escribir el índice incluso si no está marcado como cambiado"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "activar o desactivar monitor de sistema de archivos"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "marcar archivos como válidos para fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "limpia el bit de validación fsmonitor"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -22055,7 +23457,7 @@
 "core.splitIndex está configurado en false; remuévelo o cámbialo, si "
 "realmente quieres habilitar el índice partido"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -22063,7 +23465,7 @@
 "core.splitIndex está configurado en true; remuévelo o cámbialo, si realmente "
 "quieres deshabilitar el índice partido"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -22071,11 +23473,11 @@
 "core.untrackedCache está configurado en true; remuévelo o cámbialo, si "
 "realmente quieres deshabilitar el chaché no rastreado"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "Caché no rastreado deshabilitado"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -22083,29 +23485,29 @@
 "core.untrackedCache está configurado en false; remuévelo o cámbialo, si "
 "realmente quieres habilitar el caché no rastreado"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Caché no rastreado habilitado para '%s'"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor no está configurado; actívalo si realmente quieres habilitar "
 "fsmonitor"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor activado"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor está configurado; remuévelo si realmente quieres deshabilitar "
 "el fsmonitor"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor desactivado"
 
@@ -22123,19 +23525,19 @@
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [<opciones>] --stdin [-z]"
 
-#: builtin/update-ref.c:487
+#: builtin/update-ref.c:500
 msgid "delete the reference"
 msgstr "eliminar la referencia"
 
-#: builtin/update-ref.c:489
+#: builtin/update-ref.c:502
 msgid "update <refname> not the one it points to"
 msgstr "actualiza <refname> no a lo que apunta"
 
-#: builtin/update-ref.c:490
+#: builtin/update-ref.c:503
 msgid "stdin has NUL-terminated arguments"
 msgstr "stdin tiene argumentos terminados en NUL"
 
-#: builtin/update-ref.c:491
+#: builtin/update-ref.c:504
 msgid "read updates from stdin"
 msgstr "lee actualizaciones de stdin"
 
@@ -22179,15 +23581,15 @@
 msgid "print raw gpg status output"
 msgstr "muestra la salida de status gpg en formato raw"
 
-#: builtin/verify-pack.c:55
+#: builtin/verify-pack.c:59
 msgid "git verify-pack [-v | --verbose] [-s | --stat-only] <pack>..."
 msgstr "git verify-pack [-v | --verbose] [-s | --stat-only] <paquete>..."
 
-#: builtin/verify-pack.c:65
+#: builtin/verify-pack.c:70
 msgid "verbose"
 msgstr "verboso"
 
-#: builtin/verify-pack.c:67
+#: builtin/verify-pack.c:72
 msgid "show statistics only"
 msgstr "solo mostrar estadísticas"
 
@@ -22199,89 +23601,63 @@
 msgid "print tag contents"
 msgstr "imprimir contenido del tag"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opciones>] <ruta> [<commit-ish>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opciones>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opciones>] <ruta>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <worktree> <nueva-ruta>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opciones>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opciones>] <worktree>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <ruta>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:972
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "falló al borrar '%s'"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "no en un directorio válido"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "archivo gitdir no existe"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "no es posible leer archivo gitdir (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "lectura corta (se esperaba %<PRIuMAX> bytes, se leyó %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "archivo gitdir inválido"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "archivo gitdir apunta a una ubicación inexistente"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Eliminando %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "reporta árboles de trabajo recortados"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "expirar árboles de trabajo más viejos a <tiempo>"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' ya existe"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "destino de worktree inutilizable '%s'"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22291,7 +23667,7 @@
 "usa '%s -f -f' para sobreescribir, o 'unlock' y 'prune' o 'remove' para "
 "limpiar"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22300,119 +23676,132 @@
 "'%s' es un árbol de trabajo faltante pero ya registrado;\n"
 "usa '%s -f' para sobreescribir, o 'prune' o 'remove' para limpiar"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "no se pudo crear directorio de '%s'"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Preparando árbol de trabajo (nueva rama '%s')"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Preparando árbol de trabajo (reiniciando rama '%s'; estaba en %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Preparando árbol de trabajo (haciendo checkout a '%s')"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Preparando árbol de trabajo (HEAD desacoplado %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "hacer checkout a <rama> incluso si ya ha hecho checkout en otro árbol de "
 "trabajo"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "crear una nueva rama"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "crear o restablecer una rama"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "popular el nuevo árbol de trabajo"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "mantener el nuevo árbol de trabajo bloqueado"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "configurando modo tracking (mirar git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "intentar emparejar el nuevo nombre de rama con una rama de rastreo remoto"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B, y --detach son mutuamente exclusivas"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track solo puede ser usado si una nueva rama es creada"
 
-#: builtin/worktree.c:755
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "mostrar anotaciones ampliadas y motivos, si están disponibles"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"agregue la anotación 'podable' a los árboles de trabajo anteriores a <tiempo>"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose and --porcelain son mutuamente exclusivas"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "razón para bloquear"
 
-#: builtin/worktree.c:767 builtin/worktree.c:800 builtin/worktree.c:874
-#: builtin/worktree.c:1000
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' no es un árbol de trabajo"
 
-#: builtin/worktree.c:769 builtin/worktree.c:802
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "El árbol de trabajo principal no puede ser bloqueado ni desbloqueado"
 
-#: builtin/worktree.c:774
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' ya está bloqueado; razón: %s"
 
-#: builtin/worktree.c:776
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' ya está bloqueado"
 
-#: builtin/worktree.c:804
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' no está bloqueado"
 
-#: builtin/worktree.c:845
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "árboles de trabajo conteniendo submódulos no puede ser movidos o eliminado"
 
-#: builtin/worktree.c:853
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr "forzar move incluso si el árbol de trabajo está sucio o bloqueado"
 
-#: builtin/worktree.c:876 builtin/worktree.c:1002
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' es un árbol de trabajo principal"
 
-#: builtin/worktree.c:881
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "no se pudo descubrir el nombre de destino de '%s'"
 
-#: builtin/worktree.c:894
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -22421,7 +23810,7 @@
 "no se puede mover un árbol de trabajo bloqueado, motivo del bloqueo: %s\n"
 "use 'move -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:896
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -22429,37 +23818,37 @@
 "no se puede mover un árbol de trabajo bloqueado;\n"
 "use 'move -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "falló validación, no se puede mover el árbol de trabajo: %s"
 
-#: builtin/worktree.c:904
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "falló al mover '%s' a '%s'"
 
-#: builtin/worktree.c:952
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "falló al ejecutar 'git status' en '%s'"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' contiene archivos no rastreados o modificados, use --force para borrarlo"
 
-#: builtin/worktree.c:961
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "no se pudo ejecutar 'git status' en '%s', código %d"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr "forzar remoción incluso si el árbol de trabajo está sucio o bloqueado"
 
-#: builtin/worktree.c:1007
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -22468,7 +23857,7 @@
 "no se pueden eliminar árbol de trabajo bloqueado, razón del bloqueo: %s\n"
 "use 'remove -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:1009
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -22476,11 +23865,21 @@
 "no se pueden eliminar árbol de trabajo bloqueado;\n"
 "use 'remove -f -f' para sobreescribir o desbloquear primero"
 
-#: builtin/worktree.c:1012
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "falló validación, no se puede eliminar árbol de trabajo: %s"
 
+#: builtin/worktree.c:999
+#, c-format
+msgid "repair: %s: %s"
+msgstr "reparar: %s: %s"
+
+#: builtin/worktree.c:1002
+#, c-format
+msgid "error: %s: %s"
+msgstr "error: %s: %s"
+
 #: builtin/write-tree.c:15
 msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
 msgstr "git write-tree [--missing-ok] [--prefix=<prefijo>/]"
@@ -22497,175 +23896,6 @@
 msgid "only useful for debugging"
 msgstr "sólo útil para depurar"
 
-#: bugreport.c:15
-msgid "git version:\n"
-msgstr "versión de git:\n"
-
-#: bugreport.c:21
-#, c-format
-msgid "uname() failed with error '%s' (%d)\n"
-msgstr "uname() falló con error '%s' (%d)\n"
-
-#: bugreport.c:31
-msgid "compiler info: "
-msgstr "información del compilador: "
-
-#: bugreport.c:34
-msgid "libc info: "
-msgstr "información de libc: "
-
-#: bugreport.c:80
-msgid "not run from a git repository - no hooks to show\n"
-msgstr "no ejecutado desde un repositorio git - no hay hooks para mostrar\n"
-
-#: bugreport.c:90
-msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
-msgstr ""
-"git bugreport [-o|--output-directory <archivo>] [-s|--suffix <formato>]"
-
-#: bugreport.c:97
-msgid ""
-"Thank you for filling out a Git bug report!\n"
-"Please answer the following questions to help us understand your issue.\n"
-"\n"
-"What did you do before the bug happened? (Steps to reproduce your issue)\n"
-"\n"
-"What did you expect to happen? (Expected behavior)\n"
-"\n"
-"What happened instead? (Actual behavior)\n"
-"\n"
-"What's different between what you expected and what actually happened?\n"
-"\n"
-"Anything else you want to add:\n"
-"\n"
-"Please review the rest of the bug report below.\n"
-"You can delete any lines you don't wish to share.\n"
-msgstr ""
-"¡Gracias por prepara un reporte de bug de Git!\n"
-"Por favor responde las siguientes preguntas para ayudarnos a entender el "
-"problema.\n"
-"\n"
-"¿Qué hiciste antes de que sucediera el bug? (Pasos para reproducir el "
-"problema)\n"
-"\n"
-"¿Qué esperabas que sucediera? (Comportamiento esperado)\n"
-"\n"
-"¿Qué sucedio en lugar de eso? (Comportamiento real)\n"
-"\n"
-"¿Qué es diferente entre lo que esperabas y lo que pasó?\n"
-"\n"
-"Cualquier cosa que quieras agregar:\n"
-"\n"
-"Por favor revisa el resto del reporte abajo.\n"
-"Puedes borrar cualquier línea que no desees compartir.\n"
-
-#: bugreport.c:136
-msgid "specify a destination for the bugreport file"
-msgstr "especificar el destino para el archivo de reporte de bug"
-
-#: bugreport.c:138
-msgid "specify a strftime format suffix for the filename"
-msgstr "especificar el sufijo formato strftime para el nombre del archivo."
-
-#: bugreport.c:162
-#, c-format
-msgid "could not create leading directories for '%s'"
-msgstr "no se pudo crear directorios principales para '%s'"
-
-#: bugreport.c:169
-msgid "System Info"
-msgstr "Información del sistema"
-
-#: bugreport.c:172
-msgid "Enabled Hooks"
-msgstr "Activar Hooks"
-
-#: bugreport.c:180
-#, c-format
-msgid "couldn't create a new file at '%s'"
-msgstr "no se pudo crear un archivo en '%s'"
-
-#: bugreport.c:184
-#, c-format
-msgid "unable to write to %s"
-msgstr "no es posible escribir en %s"
-
-#: bugreport.c:194
-#, c-format
-msgid "Created new report at '%s'.\n"
-msgstr "Crear un nuevo reporte en '%s'.\n"
-
-#: fast-import.c:3100
-#, c-format
-msgid "Missing from marks for submodule '%s'"
-msgstr "Faltan marcas from para el submódulo '%s'"
-
-#: fast-import.c:3102
-#, c-format
-msgid "Missing to marks for submodule '%s'"
-msgstr "Faltan marcas to para el submódulo '%s'"
-
-#: fast-import.c:3237
-#, c-format
-msgid "Expected 'mark' command, got %s"
-msgstr "Se esperaba comando 'mark', se obtuvo %s"
-
-#: fast-import.c:3242
-#, c-format
-msgid "Expected 'to' command, got %s"
-msgstr "Se esperaba comando 'to', se obtuvo %s"
-
-#: fast-import.c:3334
-msgid "Expected format name:filename for submodule rewrite option"
-msgstr ""
-"Formato esperado de nombre:nombre de archivo para la opción de sobreescribir "
-"submódulo"
-
-#: fast-import.c:3388
-#, c-format
-msgid "feature '%s' forbidden in input without --allow-unsafe-features"
-msgstr "característica '%s' prohibida en input sin --allow-unsafe-features"
-
-#: http-fetch.c:111
-#, c-format
-msgid "argument to --packfile must be a valid hash (got '%s')"
-msgstr "argumento para --packfile tiene que se un hash válido (se obtuvo '%s')"
-
-#: credential-cache--daemon.c:223
-#, c-format
-msgid ""
-"The permissions on your socket directory are too loose; other\n"
-"users may be able to read your cached credentials. Consider running:\n"
-"\n"
-"\tchmod 0700 %s"
-msgstr ""
-"Los permisos en tu directorio de socket son demasiado flojos; otros\n"
-"usuarios pueden leer sus credenciales almacenadas en caché. Considera "
-"ejecutar:\n"
-"\n"
-"\tchmod 0700 %s"
-
-#: credential-cache--daemon.c:272
-msgid "print debugging messages to stderr"
-msgstr "mostrar mensajes de debug en stderr"
-
-#: t/helper/test-reach.c:152
-#, c-format
-msgid "commit %s is not marked reachable"
-msgstr "commit %s no está marcado como alcanzable"
-
-#: t/helper/test-reach.c:162
-msgid "too many commits marked reachable"
-msgstr "demasiados commits marcados como alcanzables"
-
-#: t/helper/test-serve-v2.c:7
-msgid "test-tool serve-v2 [<options>]"
-msgstr "test-tool serve-v2 [<opciones>]"
-
-#: t/helper/test-serve-v2.c:19
-msgid "exit immediately after advertising capabilities"
-msgstr "salir inmediatamente tras anunciar capacidades"
-
 #: git.c:28
 msgid ""
 "git [--version] [--help] [-C <path>] [-c <name>=<value>]\n"
@@ -22673,16 +23903,19 @@
 "           [-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>]"
 msgstr ""
 "git [--version] [--help] [-C <ruta>] [-c <nombre>=<valor>]\n"
-"           [--exec-path[=<ruta>]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"            [--exec-path [= <path>]] [--html-path] [--man-path] [--info-"
+"path]\n"
+"            [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
 "bare]\n"
-"           [--git-dir=<ruta>] [--work-tree=<ruta>] [--namespace=<nombre>]\n"
-"           <comando> [<args>]"
+"            [--git-dir=<ruta>] [--work-tree=<ruta>] [--namespace=<nombre>]\n"
+"            [--super-prefix=<ruta>] [--config-env=<nombre>=<envvar>]\n"
+"            <comando> [<args>]"
 
-#: git.c:35
+#: git.c:36
 msgid ""
 "'git help -a' and 'git help -g' list available subcommands and some\n"
 "concept guides. See 'git help <command>' or 'git help <concept>'\n"
@@ -22694,47 +23927,52 @@
 "para leer sobre un subcomando o concepto específico.\n"
 "Mira 'git help git' para una vista general del sistema."
 
-#: git.c:187
+#: git.c:188
 #, c-format
 msgid "no directory given for --git-dir\n"
 msgstr "no se entregó directorio para --git-dir\n"
 
-#: git.c:201
+#: git.c:202
 #, c-format
 msgid "no namespace given for --namespace\n"
 msgstr "no se entregó namespace para --namespace\n"
 
-#: git.c:215
+#: git.c:216
 #, c-format
 msgid "no directory given for --work-tree\n"
 msgstr "no se entregó directorio para --work-tree\n"
 
-#: git.c:229
+#: git.c:230
 #, c-format
 msgid "no prefix given for --super-prefix\n"
 msgstr "no se entregó prefijo para --super-prefix\n"
 
-#: git.c:251
+#: git.c:252
 #, c-format
 msgid "-c expects a configuration string\n"
 msgstr "-c espera un string de configuración\n"
 
-#: git.c:289
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "no se entregó una llave de config para --config-env\n"
+
+#: git.c:300
 #, c-format
 msgid "no directory given for -C\n"
 msgstr "no se entregó directorio para -C\n"
 
-#: git.c:315
+#: git.c:326
 #, c-format
 msgid "unknown option: %s\n"
 msgstr "opción %s desconocida\n"
 
-#: git.c:362
+#: git.c:375
 #, c-format
 msgid "while expanding alias '%s': '%s'"
 msgstr "al expandir el alias '%s':'%s'"
 
-#: git.c:371
+#: git.c:384
 #, c-format
 msgid ""
 "alias '%s' changes environment variables.\n"
@@ -22743,39 +23981,39 @@
 "alias '%s' cambia las variables de entorno.\n"
 "Puedes usar '!git' en el alias para hacer esto"
 
-#: git.c:378
+#: git.c:391
 #, c-format
 msgid "empty alias for %s"
 msgstr "alias vacío para %s"
 
-#: git.c:381
+#: git.c:394
 #, c-format
 msgid "recursive alias: %s"
 msgstr "alias recursivo: %s"
 
-#: git.c:463
+#: git.c:476
 msgid "write failure on standard output"
 msgstr "error de escritura en standard output"
 
-#: git.c:465
+#: git.c:478
 msgid "unknown write failure on standard output"
 msgstr "error desconocido de escritura en standard output"
 
-#: git.c:467
+#: git.c:480
 msgid "close failed on standard output"
 msgstr "cierre falló en standard output"
 
-#: git.c:792
+#: git.c:833
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "bucle de alias detectado: expansión de '%s' no termina: %s"
 
-#: git.c:842
+#: git.c:883
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "no se puede manejar %s como un builtin"
 
-#: git.c:855
+#: git.c:896
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -22786,16 +24024,166 @@
 "\n"
 "\n"
 
-#: git.c:875
+#: git.c:916
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "expansión del alias '%s' falló; '%s' no es un comando de git\n"
 
-#: git.c:887
+#: git.c:928
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "falló al ejecutar comando '%s': %s\n"
 
+#: http-fetch.c:118
+#, c-format
+msgid "argument to --packfile must be a valid hash (got '%s')"
+msgstr "argumento para --packfile tiene que se un hash válido (se obtuvo '%s')"
+
+#: http-fetch.c:128
+msgid "not a git repository"
+msgstr "no es un repositorio git"
+
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile requiere --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args solo se puede usar con --packfile"
+
+#: t/helper/test-fast-rebase.c:141
+msgid "unhandled options"
+msgstr "opciones no manejadas"
+
+#: t/helper/test-fast-rebase.c:146
+msgid "error preparing revisions"
+msgstr "error al preparar revisiones"
+
+#: t/helper/test-reach.c:154
+#, c-format
+msgid "commit %s is not marked reachable"
+msgstr "commit %s no está marcado como alcanzable"
+
+#: t/helper/test-reach.c:164
+msgid "too many commits marked reachable"
+msgstr "demasiados commits marcados como alcanzables"
+
+#: t/helper/test-serve-v2.c:7
+msgid "test-tool serve-v2 [<options>]"
+msgstr "test-tool serve-v2 [<opciones>]"
+
+#: t/helper/test-serve-v2.c:19
+msgid "exit immediately after advertising capabilities"
+msgstr "salir inmediatamente tras anunciar capacidades"
+
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr "socket/pipe ya está en uso: '%s'"
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr "no se pudo iniciar el servidor en: '%s'"
+
+#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
+msgid "could not spawn daemon in the background"
+msgstr "no se puede generar demonio en el background"
+
+#: t/helper/test-simple-ipc.c:356
+msgid "waitpid failed"
+msgstr "falló waitpid"
+
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
+msgstr "demonio no está en línea todavía"
+
+#: t/helper/test-simple-ipc.c:406
+msgid "daemon failed to start"
+msgstr "falló al iniciar demonio"
+
+#: t/helper/test-simple-ipc.c:410
+msgid "waitpid is confused"
+msgstr "waitpid está confundido"
+
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
+msgstr "demonio no se ha apagado todavía"
+
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active  [<nombre>] [<opciones>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<nombre>] [<hilos>]"
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+"test-helper simple-ipc start-daemon [<nombre>] [<hilos>] [<espera-maxima>]"
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<nombre>] [<espera-maxima>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<nombre>] [<token>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr ""
+"test-helper simple-ipc sendbytes    [<nombre>] [<cuenta de bytes>] [<byte>]"
+
+#: t/helper/test-simple-ipc.c:688
+msgid ""
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
+msgstr ""
+"test-helper simple-ipc multiple     [<nombre>] [<hilos>] [<cuenta de bytes>] "
+"[<tamaño de batch>]"
+
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "nombre o ruta de nombre de socket de dominio unix"
+
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "nombre de named-pipe"
+
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "número de hilos en el pool de hilos del servidor"
+
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "segundos a esperar para que el dominio empiece o se detenga"
+
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "número de bytes"
+
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "númeor de peticiones por hilo"
+
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "byte"
+
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "caracter lastre"
+
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "token"
+
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "comando token para enviar al servidor"
+
 #: http.c:399
 #, c-format
 msgid "negative value for http.postbuffer; defaulting to %d"
@@ -22834,7 +24222,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "No se pudo configurar backend SSL para '%s': ya configurado"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -22845,137 +24233,137 @@
 "  preguntaba por: %s\n"
 "   redireccionamiento: %s"
 
-#: remote-curl.c:168
+#: remote-curl.c:183
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "quoting inválido en valor de push-option: '%s'"
 
-#: remote-curl.c:295
+#: remote-curl.c:307
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs no es válido: ¿es este un repositorio git?"
 
-#: remote-curl.c:396
+#: remote-curl.c:408
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "respuesta de servidor inválida; se esperaba servicio, se obtuvo un flush "
 "packet"
 
-#: remote-curl.c:427
+#: remote-curl.c:439
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "respuesta de servidor inválida; se obtuvo '%s'"
 
-#: remote-curl.c:487
+#: remote-curl.c:499
 #, c-format
 msgid "repository '%s' not found"
 msgstr "repositorio '%s' no encontrado"
 
-#: remote-curl.c:491
+#: remote-curl.c:503
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Autenticación falló para '%s'"
 
-#: remote-curl.c:495
+#: remote-curl.c:507
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "no es posible acceder '%s':%s"
 
-#: remote-curl.c:501
+#: remote-curl.c:513
 #, c-format
 msgid "redirecting to %s"
 msgstr "redirigiendo a %s"
 
-#: remote-curl.c:630
+#: remote-curl.c:642
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "no debería tener EOF cuando no es gentil en EOF"
 
-#: remote-curl.c:642
+#: remote-curl.c:654
 msgid "remote server sent stateless separator"
 msgstr "el servidor remoto envió un separador sin estado (stateless)"
 
-#: remote-curl.c:712
+#: remote-curl.c:724
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "no es posible rebobinar rpc post data - intenta incrementando http.postBuffer"
 
-#: remote-curl.c:742
+#: remote-curl.c:754
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: mal caracter de largo de línea: %.4s"
 
-#: remote-curl.c:744
+#: remote-curl.c:756
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: packet de respuesta final inesperado"
 
-#: remote-curl.c:820
+#: remote-curl.c:832
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC falló; %s"
 
-#: remote-curl.c:860
+#: remote-curl.c:872
 msgid "cannot handle pushes this big"
 msgstr "no se puede manejar pushes tan grandes"
 
-#: remote-curl.c:975
+#: remote-curl.c:987
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "no se puede desinflar el request; zlib deflate error %d"
 
-#: remote-curl.c:979
+#: remote-curl.c:991
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "no se puede desinflar el request; zlib end error %d"
 
-#: remote-curl.c:1029
+#: remote-curl.c:1041
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "%d bytes de header de longitud fueron recibidos"
 
-#: remote-curl.c:1031
+#: remote-curl.c:1043
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "%d bytes de cuerpo se siguen esperando"
 
-#: remote-curl.c:1120
+#: remote-curl.c:1132
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "dump http transport no soporta capacidades superficiales"
 
-#: remote-curl.c:1135
+#: remote-curl.c:1147
 msgid "fetch failed."
 msgstr "fetch falló."
 
-#: remote-curl.c:1183
+#: remote-curl.c:1193
 msgid "cannot fetch by sha1 over smart http"
 msgstr "no se puede hacer fetch por sha1 sobre smart http"
 
-#: remote-curl.c:1227 remote-curl.c:1233
+#: remote-curl.c:1237 remote-curl.c:1243
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "error de protocolo: se esperaba sha/ref, se obtuvo '%s'"
 
-#: remote-curl.c:1245 remote-curl.c:1360
+#: remote-curl.c:1255 remote-curl.c:1373
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http transport no soporta %s"
 
-#: remote-curl.c:1281
+#: remote-curl.c:1291
 msgid "git-http-push failed"
 msgstr "git-http-push falló"
 
-#: remote-curl.c:1466
+#: remote-curl.c:1479
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: uso: git remote-curl <remote> [<url>]"
 
-#: remote-curl.c:1498
+#: remote-curl.c:1511
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: error leyendo command stream de git"
 
-#: remote-curl.c:1505
+#: remote-curl.c:1518
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: fetch intentado sin un repositorio local"
 
-#: remote-curl.c:1546
+#: remote-curl.c:1559
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: comando '%s' desconocido de git"
@@ -22988,54 +24376,54 @@
 msgid "no libc information available\n"
 msgstr "no hay información disponible de libc\n"
 
-#: list-objects-filter-options.h:85
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "args"
 
-#: list-objects-filter-options.h:86
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "filtrado de objeto"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "fecha de expiración"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "no-op (compatibilidad con versiones anteriores)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "ser más verboso"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "ser más discreto"
 
-#: parse-options.h:317
-msgid "use <n> digits to display SHA-1s"
-msgstr "usa <n> dígitos para mostrar SHA-1s"
+#: parse-options.h:318
+msgid "use <n> digits to display object names"
+msgstr "use <n> dígitos para mostrar los nombres de los objetos"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "cómo quitar espacios y #comentarios de mensajes"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "leer pathspec de archivo"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 "con --pathspec-from-file, elementos de pathspec son separados con caracter "
 "NUL"
 
-#: ref-filter.h:101
+#: ref-filter.h:99
 msgid "key"
 msgstr "clave"
 
-#: ref-filter.h:101
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "nombre del campo por el cuál ordenar"
 
@@ -23045,14 +24433,6 @@
 "actualizar el índice con la resolución de conflictos reutilizada si es "
 "posible"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD desacoplada en "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD desacoplada de "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Agrega contenido de carpetas al índice"
@@ -23256,533 +24636,505 @@
 msgstr "Información de output en cada ref"
 
 #: command-list.h:99
+msgid "Run a Git command on a list of repositories"
+msgstr "Ejecute un comando de Git en una lista de repositorios"
+
+#: command-list.h:100
 msgid "Prepare patches for e-mail submission"
 msgstr "Prepara parches para ser enviados por e-mail"
 
-#: command-list.h:100
+#: command-list.h:101
 msgid "Verifies the connectivity and validity of the objects in the database"
 msgstr ""
 "Verifica la conectividad y disponibilidad de los objetos en la base de datos"
 
-#: command-list.h:101
+#: command-list.h:102
 msgid "Cleanup unnecessary files and optimize the local repository"
 msgstr "Limpia archivos innecesarios y optimiza el repositorio local"
 
-#: command-list.h:102
+#: command-list.h:103
 msgid "Extract commit ID from an archive created using git-archive"
 msgstr "Extrae el ID de commit de un archivo creado usando git-archive"
 
-#: command-list.h:103
+#: command-list.h:104
 msgid "Print lines matching a pattern"
 msgstr "Imprime las líneas que concuerdan con el patron"
 
-#: command-list.h:104
+#: command-list.h:105
 msgid "A portable graphical interface to Git"
 msgstr "Una interfaz gráfica portátil para Git"
 
-#: command-list.h:105
+#: command-list.h:106
 msgid "Compute object ID and optionally creates a blob from a file"
 msgstr "Computa ID de objeto y, opcionalmente, crea un blob de un archivo"
 
-#: command-list.h:106
+#: command-list.h:107
 msgid "Display help information about Git"
 msgstr "Mostrar información sobre Git"
 
-#: command-list.h:107
+#: command-list.h:108
 msgid "Server side implementation of Git over HTTP"
 msgstr "Implementación de lado de servidor de Git por HTTP"
 
-#: command-list.h:108
+#: command-list.h:109
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Descarga de un repositorio Git remoto vía HTTP"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Empuja objetos por HTTP/DAV a otro repositorio"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "Enviar una colección de parches de stdin a una carpeta IMAP"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Build pack index file for an existing packed archive"
 msgstr "Constuye un archivo de índice para un archivo empaquetado existente"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Crea un repositorio de Git vacío o reinicia el que ya existe"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Buscar instantáneamente tu repositorio de trabajo en gitweb"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Add or parse structured information in commit messages"
 msgstr "Agregar o analizar información estructurada en mensajes de commit"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "The Git repository browser"
 msgstr "El navegador de repositorio Git"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Muestra los logs de los commits"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "Muestra información sobre archivos in el índice y el árbol de trabajo"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Lista referencias en un repositorio remoto"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Lista los contenidos de un objeto árbol"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "Extraer parche y autoría de un único mensaje de e-mail"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Programa divisor de mbox simple de UNIX"
 
-#: command-list.h:122
+#: command-list.h:123
+msgid "Run tasks to optimize Git repository data"
+msgstr "Ejecute tareas para optimizar los datos del repositorio de Git"
+
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Junta dos o más historiales de desarrollo juntos"
 
-#: command-list.h:123
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Encuentra un ancestro común bueno para una posible fusión"
 
-#: command-list.h:124
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Ejecuta una fusión de tres vías en un archivo"
 
-#: command-list.h:125
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Ejecuta una fusión para archivos que la necesitan"
 
-#: command-list.h:126
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "El programa de ayuda estándar para usar con git-merge-index"
 
-#: command-list.h:127
+#: command-list.h:129
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 "Ejecuta las herramientas de fusión de resolución de conflictos para resolver "
 "conflictos de fusión"
 
-#: command-list.h:128
+#: command-list.h:130
 msgid "Show three-way merge without touching index"
 msgstr "Mostrar fusión de tres vías sin tocar el índice"
 
-#: command-list.h:129
+#: command-list.h:131
 msgid "Write and verify multi-pack-indexes"
 msgstr "Escribe y verifica archivos multi-pack-index"
 
-#: command-list.h:130
-msgid "Creates a tag object"
-msgstr "Crea un objeto tag"
+#: command-list.h:132
+msgid "Creates a tag object with extra validation"
+msgstr "Crea un objeto de etiqueta con validación adicional"
 
-#: command-list.h:131
+#: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Construir un objeto árbol de un texto en formato ls-tree"
 
-#: command-list.h:132
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Mueve o cambia el nombre a archivos, directorios o enlaces simbólicos"
 
-#: command-list.h:133
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Encontrar nombres simbólicos para revs dados"
 
-#: command-list.h:134
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Agrega o inspecciona objetos nota"
 
-#: command-list.h:135
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Importar desde y enviar a repositorios Perforce"
 
-#: command-list.h:136
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Crea un archivo de objetos empaquetados"
 
-#: command-list.h:137
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Encuentra archivos empaquetados de manera redundante"
 
-#: command-list.h:138
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Empaqueta heads y tags para un acceso eficiente al repositorio"
 
-#: command-list.h:139
-msgid "Routines to help parsing remote repository access parameters"
-msgstr ""
-"Rutinas para ayudar a analizar los parámetros de acceso del repositorio "
-"remoto"
-
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Calcular ID único para un parche"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "Limpia todos los objetos no alcanzables de la base de datos de objetos"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Remover objetos extra que ya están en archivos empaquetados"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Realiza un fetch e integra con otro repositorio o rama local"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "Actualiza referencias remotas junto con sus objetos asociados"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Aplica un parche quilt en la rama actual"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "Compara dos rangos de commits (por ejemplo dos versions de un branch)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Lee información del ábol en el índice"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Vuelve a aplicar commits en la punta de otra rama"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Recibir lo que es empujado en el respositorio"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Gestionar información de reflog"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Gestiona un conjunto de repositorios rastreados"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Empaquetar objetos no empaquetados en un repositorio"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Crea, lista, borra referencias para reemplazar objetos"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Genera un resumen de cambios pendientes"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Reutilizar la resolución registrada de fusiones conflictivas"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Reinicia el HEAD actual a un estado especifico"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Restaurar archivos de árboles de trabajo"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Revert some existing commits"
 msgstr "Revierte algunos commits existentes"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Lista objetos commit en orden cronológico inverso"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Pick out and massage parameters"
 msgstr "Seleccionar y masajear los parámetros"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Borra archivos del árbol de trabajo y del índice"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Envía una colección de parches como e-mails"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Empujar objetos por protocolo Git a otro repositorio"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Shell de inicio de sesión restringido para acceso SSH exclusivo de Git"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Summarize 'git log' output"
 msgstr "Resumir la salida 'git log'"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Show various types of objects"
 msgstr "Muestra varios tipos de objetos"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Show branches and their commits"
 msgstr "Mostrar ramas y sus commits"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show packed archive index"
 msgstr "Mostrar el índice de archivo empaquetado"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "List references in a local repository"
 msgstr "Listar referencias en el repositorio local"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Git's i18n setup code for shell scripts"
 msgstr "El código de configuración i18n de Git para scripts de shell"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "Common Git shell script setup code"
 msgstr "Código de configuración de script de shell común de Git"
 
-#: command-list.h:172
+#: command-list.h:173
 msgid "Initialize and modify the sparse-checkout"
 msgstr "Inicializa y modifica el sparse-checkout"
 
-#: command-list.h:173
+#: command-list.h:174
 msgid "Stash the changes in a dirty working directory away"
 msgstr ""
 "Poner en un stash los cambios en un directorio de trabajo sucio de todas "
 "maneras"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Add file contents to the staging area"
 msgstr "Agrega contenidos de un archivo al área de staging"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Muestra el estado del árbol de trabajo"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Eliminar el espacio en blanco innecesario"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Inicializa, actualiza o inspecciona submódulos"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Operación bidireccional entre un repositorio Subversion y Git"
 
-#: command-list.h:179
-msgid "Switch branches"
-msgstr "Cambiar branches"
-
 #: command-list.h:180
+msgid "Switch branches"
+msgstr "Cambiar de branch"
+
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Lee, modifica y borra referencias simbólicas"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "Crea, lista, borra o verifica un tag de objeto firmado con GPG"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Crea un archivo temporal con contenidos de un blob"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Desempaqueta objetos de un archivo empaquetado"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Registra contenidos de archivos en el árbol de trabajo al índice"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr ""
 "Actualiza el nombre del objeto almacenado en una referencia de forma segura"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
 "Actualiza el archivo de información auxiliar para ayudar a los servidores "
 "dumb"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Enviar archivo a git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Enviar objetos empaquetados a git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Mostrar una variable lógica de Git"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "Verificar firma GPG de commits"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Valida archivos Git empaquetados"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Verifica la firma GPG de etiquetas"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Interfaz web Git (interfaz web para repositorios Git)"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Show logs with difference each commit introduces"
 msgstr "Muestra logs con las diferencias que cada commit introduce"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Manage multiple working trees"
 msgstr "Gestiona múltiples árboles de trabajo"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Create a tree object from the current index"
 msgstr "Crea un objeto árbol del índice actual"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Defining attributes per path"
 msgstr "Definiendo atributos por ruta"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "Git command-line interface and conventions"
 msgstr "Interfaz y convenciones de línea de comandos de Git"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "A Git core tutorial for developers"
 msgstr "Un tutorial básico de Git para desarrolladores"
 
-#: command-list.h:200
+#: command-list.h:201
+msgid "Providing usernames and passwords to Git"
+msgstr "Proporcionar nombres de usuario y contraseñas a Git"
+
+#: command-list.h:202
 msgid "Git for CVS users"
 msgstr "Git para usuarios CVS"
 
-#: command-list.h:201
+#: command-list.h:203
 msgid "Tweaking diff output"
 msgstr "Afinar la salida de diff"
 
-#: command-list.h:202
+#: command-list.h:204
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Un conjunto mínimo útil de comandos diarios de Git"
 
-#: command-list.h:203
+#: command-list.h:205
 msgid "Frequently asked questions about using Git"
 msgstr "Preguntas frecuentes sobre el uso de Git"
 
-#: command-list.h:204
+#: command-list.h:206
 msgid "A Git Glossary"
 msgstr "Un Glosario de Git"
 
-#: command-list.h:205
+#: command-list.h:207
 msgid "Hooks used by Git"
 msgstr "Hooks utilizados por Git"
 
-#: command-list.h:206
+#: command-list.h:208
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Especifica de forma intencional archivos sin seguimiento a ignorar"
 
-#: command-list.h:207
+#: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr ""
+"Mapear nombres de autor/ nombre de commiter y/o direcciones de correo "
+"electrónico"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Definiendo las propiedades del submódulo"
 
-#: command-list.h:208
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Namespaces de Git"
 
-#: command-list.h:209
+#: command-list.h:212
+msgid "Helper programs to interact with remote repositories"
+msgstr "Programas de ayuda para interactuar con repositorios remotos"
+
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Disposición del repositorio Git"
 
-#: command-list.h:210
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
-msgstr "Especificando revisiones y rangos para Git"
+msgstr "Especificar revisiones y rangos para Git"
 
-#: command-list.h:211
+#: command-list.h:215
 msgid "Mounting one repository inside another"
-msgstr "Montando un repositorio dentro de otro"
+msgstr "Montar un repositorio dentro de otro"
 
-#: command-list.h:212
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Un tutorial de introducción a Git: parte dos"
 
-#: command-list.h:213
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
-msgstr "Un tutorial de introducción para Git"
+msgstr "Un tutorial de introducción a Git"
 
-#: command-list.h:214
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Una visión general de flujos de trabajo recomendados con Git"
 
-#: git-bisect.sh:54
-msgid "You need to start by \"git bisect start\""
-msgstr "Debes iniciar con \"git bisect start\""
-
-#. TRANSLATORS: Make sure to include [Y] and [n] in your
-#. translation. The program will only accept English input
-#. at this point.
-#: git-bisect.sh:60
-msgid "Do you want me to do it for you [Y/n]? "
-msgstr "¿Quieres que lo haga por ti [Y/n]? "
-
-#: git-bisect.sh:101
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Mala entrada rev: $arg"
-
-#: git-bisect.sh:121
-#, sh-format
-msgid "Bad rev input: $bisected_head"
-msgstr "Mala entrada rev: $bisected_head"
-
-#: git-bisect.sh:130
-#, sh-format
-msgid "Bad rev input: $rev"
-msgstr "Mala entrada rev: $rev"
-
-#: git-bisect.sh:139
-#, sh-format
-msgid "'git bisect $TERM_BAD' can take only one argument."
-msgstr "'git bisect $TERM_BAD' solo puede tomar un argumento."
-
-#: git-bisect.sh:209
-msgid "No logfile given"
-msgstr "Ningún logfile proporcionado"
-
-#: git-bisect.sh:210
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "no se puede leer $file para reproducir"
-
-#: git-bisect.sh:233
-msgid "?? what are you talking about?"
-msgstr "?? ¿De qué estás hablando?"
-
-#: git-bisect.sh:243
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "bisect falló: no se proveyó comando."
 
-#: git-bisect.sh:248
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "ejecutando $command"
 
-#: git-bisect.sh:255
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -23791,27 +25143,23 @@
 "bisect falló:\n"
 "código de salida $res de '$command' es <0 o >=128"
 
-#: git-bisect.sh:281
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "bisect no puede seguir continuando"
 
-#: git-bisect.sh:287
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
-"'bisect_state $state' exited with error code $res"
+"'bisect-state $state' exited with error code $res"
 msgstr ""
-"bisect falló:\n"
-"'bisect_state $state' salió con código de error $res"
+"bisect run falló:\n"
+"'bisect-state $state' salió con el código de error $res"
 
-#: git-bisect.sh:294
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "bisect exitoso"
 
-#: git-bisect.sh:302
-msgid "We are not bisecting."
-msgstr "No estamos bisecando."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -23852,50 +25200,50 @@
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Fusión simple no funcionó, intentando fusión automática."
 
-#: git-submodule.sh:205
+#: git-submodule.sh:179
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "La ruta relativa sólo se puede usar desde el nivel superior del árbol de "
 "trabajo"
 
-#: git-submodule.sh:215
+#: git-submodule.sh:189
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr "repo URL: '$repo' debe ser absoluta o iniciar con ./|../"
 
-#: git-submodule.sh:234
+#: git-submodule.sh:208
 #, sh-format
 msgid "'$sm_path' already exists in the index"
 msgstr "'$sm_path' ya existe en el índice"
 
-#: git-submodule.sh:237
+#: git-submodule.sh:211
 #, sh-format
 msgid "'$sm_path' already exists in the index and is not a submodule"
 msgstr "'$sm_path' ya existe en el índice y no es un submódulo"
 
-#: git-submodule.sh:244
+#: git-submodule.sh:218
 #, sh-format
 msgid "'$sm_path' does not have a commit checked out"
 msgstr "'$sm_path' no tiene un commit checked out"
 
-#: git-submodule.sh:275
+#: git-submodule.sh:249
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
 msgstr "Agregando el repositorio existente en '$sm_path' al índice"
 
-#: git-submodule.sh:277
+#: git-submodule.sh:251
 #, sh-format
 msgid "'$sm_path' already exists and is not a valid git repo"
 msgstr "'$sm_path' ya existe y no es un repositorio git válido"
 
-#: git-submodule.sh:285
+#: git-submodule.sh:259
 #, sh-format
 msgid "A git directory for '$sm_name' is found locally with remote(s):"
 msgstr ""
 "Se encontró localmente un directorio git para '$sm_name' con el(los) "
 "remoto(s):"
 
-#: git-submodule.sh:287
+#: git-submodule.sh:261
 #, sh-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23912,39 +25260,39 @@
 "o no estás seguro de lo que esto significa, escoge otro nombre con la opción "
 "'--name'."
 
-#: git-submodule.sh:293
+#: git-submodule.sh:267
 #, sh-format
 msgid "Reactivating local git directory for submodule '$sm_name'."
 msgstr "Reactivar directorio git local para el submódulo '$sm_name'."
 
-#: git-submodule.sh:305
+#: git-submodule.sh:279
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
 msgstr "No es posible hacer checkout al submódulo '$sm_path'"
 
-#: git-submodule.sh:310
+#: git-submodule.sh:284
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
 msgstr "Falló al agregar el submódulo '$sm_path'"
 
-#: git-submodule.sh:319
+#: git-submodule.sh:293
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
 msgstr "Falló al registrar el submódulo '$sm_path'"
 
-#: git-submodule.sh:592
+#: git-submodule.sh:568
 #, sh-format
 msgid "Unable to find current revision in submodule path '$displaypath'"
 msgstr ""
 "No se pudo encontrar la revisión actual en la ruta de submódulo "
 "'$displaypath'"
 
-#: git-submodule.sh:602
+#: git-submodule.sh:578
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr "No es posible realizar fetch en la ruta de submódulo '$sm_path'"
 
-#: git-submodule.sh:607
+#: git-submodule.sh:583
 #, sh-format
 msgid ""
 "Unable to find current ${remote_name}/${branch} revision in submodule path "
@@ -23953,7 +25301,7 @@
 "No es posible encontrar revisión actual ${remote_name}/${branch} en la ruta "
 "de submódulo  '$sm_path'"
 
-#: git-submodule.sh:625
+#: git-submodule.sh:601
 #, sh-format
 msgid ""
 "Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
@@ -23962,7 +25310,7 @@
 "No es posible realizar fetch en la ruta de submódulo '$displaypath'; "
 "intentando hacer un fetch directo $sha1:"
 
-#: git-submodule.sh:631
+#: git-submodule.sh:607
 #, sh-format
 msgid ""
 "Fetched in submodule path '$displaypath', but it did not contain $sha1. "
@@ -23971,85 +25319,55 @@
 "Fetch realizado en ruta de submódulo '$displaypath', pero no contenía $sha1. "
 "Fetch directo del commit falló."
 
-#: git-submodule.sh:638
+#: git-submodule.sh:614
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
 msgstr "No es posible revisar '$sha1' en la ruta de submódulo '$displaypath'"
 
-#: git-submodule.sh:639
+#: git-submodule.sh:615
 #, sh-format
 msgid "Submodule path '$displaypath': checked out '$sha1'"
 msgstr "Ruta de submódulo '$displaypath': check out realizado a '$sha1'"
 
-#: git-submodule.sh:643
+#: git-submodule.sh:619
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
 msgstr ""
 "No se posible ejecutar rebase a '$sha1' en la ruta de submódulo "
 "'$displaypath'"
 
-#: git-submodule.sh:644
+#: git-submodule.sh:620
 #, sh-format
 msgid "Submodule path '$displaypath': rebased into '$sha1'"
 msgstr "Ruta de submódulo '$displaypath': rebasada en '$sha1'"
 
-#: git-submodule.sh:649
+#: git-submodule.sh:625
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
 msgstr "Incapaz de fusionar '$sha1' en la ruta del submódulo '$displaypath'"
 
-#: git-submodule.sh:650
+#: git-submodule.sh:626
 #, sh-format
 msgid "Submodule path '$displaypath': merged in '$sha1'"
 msgstr "Ruta de submódulo '$displaypath': fusionada en '$sha1'"
 
-#: git-submodule.sh:655
+#: git-submodule.sh:631
 #, sh-format
 msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
 msgstr ""
 "Falló la ejecución  de  '$command $sha1' en la ruta de submódulo "
 "'$displaypath'"
 
-#: git-submodule.sh:656
+#: git-submodule.sh:632
 #, sh-format
 msgid "Submodule path '$displaypath': '$command $sha1'"
 msgstr "Ruta de submódulo '$displaypath': '$command $sha1'"
 
-#: git-submodule.sh:687
+#: git-submodule.sh:663
 #, sh-format
 msgid "Failed to recurse into submodule path '$displaypath'"
 msgstr "Falló al recurrir en la ruta de submódulo '$displaypath'"
 
-#: git-submodule.sh:852
-msgid "The --cached option cannot be used with the --files option"
-msgstr "La opción --cached no puede ser usada con la opción --files"
-
-#: git-submodule.sh:904
-#, sh-format
-msgid "unexpected mode $mod_dst"
-msgstr "modo $mod_dst inesperado"
-
-#: git-submodule.sh:924
-#, sh-format
-msgid "  Warn: $display_name doesn't contain commit $sha1_src"
-msgstr "  Advertencia: $display_name no contiene el commit $sha1_src"
-
-#: git-submodule.sh:927
-#, sh-format
-msgid "  Warn: $display_name doesn't contain commit $sha1_dst"
-msgstr "  Advertencia: $display_name no contiene el commit $sha1_dst"
-
-#: git-submodule.sh:930
-#, sh-format
-msgid "  Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
-msgstr ""
-"  Advertencia: $display_name no contiene los commits $sha1_src y $sha1_dst"
-
-#: git-parse-remote.sh:89
-#, sh-format
-msgid "See git-${cmd}(1) for details."
-msgstr "Véase git-${cmd}(1) para más detalles."
-
 #: git-rebase--preserve-merges.sh:109
 msgid "Applied autostash."
 msgstr "Autostash aplicado."
@@ -24065,7 +25383,7 @@
 "Your changes are safe in the stash.\n"
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
-"Aplicando autostash resultó en conflictos.\n"
+"Aplicar autostash resultó en conflictos.\n"
 "Tus cambios están seguros en el stash.\n"
 "Puedes ejecutar \"git stash pop\" o \"git stash drop\" en cualquier "
 "momento.\n"
@@ -24075,7 +25393,7 @@
 msgid "Rebasing ($new_count/$total)"
 msgstr "Rebasando ($new_count/$total)"
 
-#: git-rebase--preserve-merges.sh:207
+#: git-rebase--preserve-merges.sh:197
 msgid ""
 "\n"
 "Commands:\n"
@@ -24106,7 +25424,7 @@
 "x, exec <commit> = ejecuta comando ( el resto de la línea) usando un shell\n"
 "d, drop <commit> = eliminar commit\n"
 "l, label <label> = poner label al HEAD actual con un nombre\n"
-"t, reset <label> = reiniciar HEAD a el label\n"
+"t, reset <label> = reiniciar HEAD al label\n"
 "m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
 ".       crea un commit de fusión usando el mensaje original de\n"
 ".       fusión (o la línea de oneline, si no se especifica un mensaje\n"
@@ -24115,7 +25433,7 @@
 "Estas líneas pueden ser reordenadas; son ejecutadas desde arriba hacia "
 "abajo.\n"
 
-#: git-rebase--preserve-merges.sh:270
+#: git-rebase--preserve-merges.sh:260
 #, sh-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -24134,83 +25452,83 @@
 "\n"
 "\tgit rebase --continue"
 
-#: git-rebase--preserve-merges.sh:295
+#: git-rebase--preserve-merges.sh:285
 #, sh-format
 msgid "$sha1: not a commit that can be picked"
 msgstr "$sha1: no es un commit que pueda ser cogido"
 
-#: git-rebase--preserve-merges.sh:334
+#: git-rebase--preserve-merges.sh:324
 #, sh-format
 msgid "Invalid commit name: $sha1"
 msgstr "Nombre de commit inválido: $sha1"
 
-#: git-rebase--preserve-merges.sh:364
+#: git-rebase--preserve-merges.sh:354
 msgid "Cannot write current commit's replacement sha1"
 msgstr "No se puede escribir el remplazo sha1 del commit actual"
 
-#: git-rebase--preserve-merges.sh:415
+#: git-rebase--preserve-merges.sh:405
 #, sh-format
 msgid "Fast-forward to $sha1"
 msgstr "Avance rápido a $sha1"
 
-#: git-rebase--preserve-merges.sh:417
+#: git-rebase--preserve-merges.sh:407
 #, sh-format
 msgid "Cannot fast-forward to $sha1"
 msgstr "No se puede realizar avance rápido a $sha1"
 
-#: git-rebase--preserve-merges.sh:426
+#: git-rebase--preserve-merges.sh:416
 #, sh-format
 msgid "Cannot move HEAD to $first_parent"
 msgstr "No se puede mover HEAD a $first_parent"
 
-#: git-rebase--preserve-merges.sh:431
+#: git-rebase--preserve-merges.sh:421
 #, sh-format
 msgid "Refusing to squash a merge: $sha1"
 msgstr "Rehusando a ejecutar squash en fusión: $sha1"
 
-#: git-rebase--preserve-merges.sh:449
+#: git-rebase--preserve-merges.sh:439
 #, sh-format
 msgid "Error redoing merge $sha1"
 msgstr "Error rehaciendo fusión $sha1"
 
-#: git-rebase--preserve-merges.sh:458
+#: git-rebase--preserve-merges.sh:448
 #, sh-format
 msgid "Could not pick $sha1"
 msgstr "No se pudo coger $sha1"
 
-#: git-rebase--preserve-merges.sh:467
+#: git-rebase--preserve-merges.sh:457
 #, sh-format
 msgid "This is the commit message #${n}:"
 msgstr "Este es el mensaje del commit #${n}:"
 
-#: git-rebase--preserve-merges.sh:472
+#: git-rebase--preserve-merges.sh:462
 #, sh-format
 msgid "The commit message #${n} will be skipped:"
 msgstr "El mensaje del commit  #${n} será ignorado:"
 
-#: git-rebase--preserve-merges.sh:483
+#: 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] "Esta es una combinación de $count commit."
 msgstr[1] "Esta es la combinación de $count commits."
 
-#: git-rebase--preserve-merges.sh:492
+#: git-rebase--preserve-merges.sh:482
 #, sh-format
 msgid "Cannot write $fixup_msg"
 msgstr "No se puede escribir $fixup_msg"
 
-#: git-rebase--preserve-merges.sh:495
+#: git-rebase--preserve-merges.sh:485
 msgid "This is a combination of 2 commits."
 msgstr "Esto es una combinación de 2 commits."
 
-#: git-rebase--preserve-merges.sh:536 git-rebase--preserve-merges.sh:579
-#: git-rebase--preserve-merges.sh:582
+#: 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 se puede aplicar $sha1... $rest"
 
-#: git-rebase--preserve-merges.sh:611
+#: git-rebase--preserve-merges.sh:601
 #, sh-format
 msgid ""
 "Could not amend commit after successfully picking $sha1... $rest\n"
@@ -24227,31 +25545,31 @@
 "problema antes\n"
 "de que sea capaz de reformular el commit."
 
-#: git-rebase--preserve-merges.sh:626
+#: git-rebase--preserve-merges.sh:616
 #, sh-format
 msgid "Stopped at $sha1_abbrev... $rest"
 msgstr "Detenido en $sha1_abbrev... $rest"
 
-#: git-rebase--preserve-merges.sh:641
+#: git-rebase--preserve-merges.sh:631
 #, sh-format
 msgid "Cannot '$squash_style' without a previous commit"
 msgstr "No se puede '$squash_style' sin un commit previo"
 
-#: git-rebase--preserve-merges.sh:683
+#: git-rebase--preserve-merges.sh:673
 #, sh-format
 msgid "Executing: $rest"
 msgstr "Ejecutando: $rest"
 
-#: git-rebase--preserve-merges.sh:691
+#: git-rebase--preserve-merges.sh:681
 #, sh-format
 msgid "Execution failed: $rest"
 msgstr "Ejecución fallida: $rest"
 
-#: git-rebase--preserve-merges.sh:693
+#: git-rebase--preserve-merges.sh:683
 msgid "and made changes to the index and/or the working tree"
 msgstr "y hizo cambios al índice y/o al árbol de trabajo"
 
-#: git-rebase--preserve-merges.sh:695
+#: git-rebase--preserve-merges.sh:685
 msgid ""
 "You can fix the problem, and then run\n"
 "\n"
@@ -24262,7 +25580,7 @@
 "\tgit rebase --continue"
 
 #. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:708
+#: git-rebase--preserve-merges.sh:698
 #, sh-format
 msgid ""
 "Execution succeeded: $rest\n"
@@ -24277,25 +25595,25 @@
 "\n"
 "\tgit rebase --continue"
 
-#: git-rebase--preserve-merges.sh:719
+#: git-rebase--preserve-merges.sh:709
 #, sh-format
 msgid "Unknown command: $command $sha1 $rest"
 msgstr "Comando desconocido: $command $sha1 $rest"
 
-#: git-rebase--preserve-merges.sh:720
+#: git-rebase--preserve-merges.sh:710
 msgid "Please fix this using 'git rebase --edit-todo'."
 msgstr "Por favor, corrige esto usando 'git rebase --edit-todo'."
 
-#: git-rebase--preserve-merges.sh:755
+#: git-rebase--preserve-merges.sh:745
 #, sh-format
 msgid "Successfully rebased and updated $head_name."
 msgstr "$head_name rebasado y actualizado satisfactoriamente."
 
-#: git-rebase--preserve-merges.sh:812
+#: git-rebase--preserve-merges.sh:802
 msgid "Could not remove CHERRY_PICK_HEAD"
 msgstr "No se pudo eliminar CHERRY_PICK_HEAD"
 
-#: git-rebase--preserve-merges.sh:817
+#: git-rebase--preserve-merges.sh:807
 #, sh-format
 msgid ""
 "You have staged changes in your working tree.\n"
@@ -24313,7 +25631,7 @@
 "  git rebase --continue\n"
 msgstr ""
 "Tienes cambios en el área de stage de tu árbol de trabajo.\n"
-"Si estos cambios están destinados a \n"
+"Si estos cambios están destinados a\n"
 "ser aplastados en el commit previo, ejecuta:\n"
 "\n"
 "  git commit --amend $gpg_sign_opt_quoted\n"
@@ -24326,12 +25644,12 @@
 "\n"
 "  git rebase --continue\n"
 
-#: git-rebase--preserve-merges.sh:834
+#: git-rebase--preserve-merges.sh:824
 msgid "Error trying to find the author identity to amend commit"
 msgstr ""
 "Error tratando de encontrar la identidad del autor para remediar el commit"
 
-#: git-rebase--preserve-merges.sh:839
+#: 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."
@@ -24339,44 +25657,44 @@
 "Tienes cambios sin confirmar en tu árbol de trabajo. Por favor, confírmalos\n"
 "primero y entonces ejecuta 'git rebase --continue' de nuevo."
 
-#: git-rebase--preserve-merges.sh:844 git-rebase--preserve-merges.sh:848
+#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
 msgid "Could not commit staged changes."
 msgstr "No se pudo realizar el commit con los cambios en el área de stage."
 
-#: git-rebase--preserve-merges.sh:879 git-rebase--preserve-merges.sh:965
+#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
 msgid "Could not execute editor"
 msgstr "No se pudo ejecutar el editor"
 
-#: git-rebase--preserve-merges.sh:900
+#: git-rebase--preserve-merges.sh:890
 #, sh-format
 msgid "Could not checkout $switch_to"
 msgstr "No se pudo actualizar el árbol de trabajo a $switch_to"
 
-#: git-rebase--preserve-merges.sh:907
+#: git-rebase--preserve-merges.sh:897
 msgid "No HEAD?"
 msgstr "¿Sin HEAD?"
 
-#: git-rebase--preserve-merges.sh:908
+#: git-rebase--preserve-merges.sh:898
 #, sh-format
 msgid "Could not create temporary $state_dir"
 msgstr "No se pudo crear $state_dir temporalmente"
 
-#: git-rebase--preserve-merges.sh:911
+#: git-rebase--preserve-merges.sh:901
 msgid "Could not mark as interactive"
 msgstr "No se pudo marcar como interactivo"
 
-#: git-rebase--preserve-merges.sh:943
+#: 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] "Rebase $shortrevisions en $shortonto ($todocount comando)"
 msgstr[1] "Rebase $shortrevisions en $shortonto ($todocount comandos)"
 
-#: git-rebase--preserve-merges.sh:955
+#: git-rebase--preserve-merges.sh:945
 msgid "Note that empty commits are commented out"
 msgstr "Tenga en cuenta que los commits vacíos están comentados"
 
-#: git-rebase--preserve-merges.sh:997 git-rebase--preserve-merges.sh:1002
+#: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
 msgid "Could not init rewritten commits"
 msgstr "No se puede inicializar los commits reescritos"
 
@@ -24455,61 +25773,61 @@
 msgid "%12s %12s %s"
 msgstr "%12s %12s %s"
 
-#: git-add--interactive.perl:634
+#: git-add--interactive.perl:632
 #, perl-format
 msgid "touched %d path\n"
 msgid_plural "touched %d paths\n"
 msgstr[0] "touch hecho a %d ruta\n"
 msgstr[1] "touch hecho a %d rutas\n"
 
-#: git-add--interactive.perl:1055
+#: git-add--interactive.perl:1056
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for staging."
 msgstr ""
-"Si el parche aplica limpiamente, el hunk editado sera marcado\n"
+"Si el parche aplica limpiamente, el hunk editado será marcado\n"
 "inmediatamente para el área de stage."
 
-#: git-add--interactive.perl:1058
+#: git-add--interactive.perl:1059
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for stashing."
 msgstr ""
-"Si el parche aplica limpiamente, el hunk editado sera marcado\n"
+"Si el parche aplica limpiamente, el hunk editado será marcado\n"
 "inmediatamente para aplicar stash."
 
-#: git-add--interactive.perl:1061
+#: git-add--interactive.perl:1062
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for unstaging."
 msgstr ""
-"Si el parche aplica limpiamente, el hunk editado sera marcado\n"
+"Si el parche aplica limpiamente, el hunk editado será marcado\n"
 "inmediatamente para sacar del área de stage."
 
-#: git-add--interactive.perl:1064 git-add--interactive.perl:1073
-#: git-add--interactive.perl:1079
+#: git-add--interactive.perl:1065 git-add--interactive.perl:1074
+#: git-add--interactive.perl:1080
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for applying."
 msgstr ""
-"Si el parche aplica de forma limpia, el hunk editado sera marcado \n"
+"Si el parche aplica de forma limpia, el hunk editado será marcado\n"
 "inmediatamente para aplicar."
 
-#: git-add--interactive.perl:1067 git-add--interactive.perl:1070
-#: git-add--interactive.perl:1076
+#: git-add--interactive.perl:1068 git-add--interactive.perl:1071
+#: git-add--interactive.perl:1077
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for discarding."
 msgstr ""
-"Si el parche aplica de forma limpia, el hunk editado sera marcado\n"
+"Si el parche aplica de forma limpia, el hunk editado será marcado\n"
 "inmediatamente para descarte."
 
-#: git-add--interactive.perl:1113
+#: git-add--interactive.perl:1114
 #, perl-format
 msgid "failed to open hunk edit file for writing: %s"
 msgstr "falló al abrir el archivo de adición del hunk para escritura: %s"
 
-#: git-add--interactive.perl:1120
+#: git-add--interactive.perl:1121
 #, perl-format
 msgid ""
 "---\n"
@@ -24522,12 +25840,12 @@
 "Para eliminar '%s' líneas, bórrelas.\n"
 "Lineas comenzando con  %s serán eliminadas.\n"
 
-#: git-add--interactive.perl:1142
+#: git-add--interactive.perl:1143
 #, perl-format
 msgid "failed to open hunk edit file for reading: %s"
 msgstr "falló al abrir el archivo de edición del hunk para lectura: %s"
 
-#: git-add--interactive.perl:1250
+#: git-add--interactive.perl:1251
 msgid ""
 "y - stage this hunk\n"
 "n - do not stage this hunk\n"
@@ -24537,12 +25855,12 @@
 msgstr ""
 "y - aplicar stage a este hunk\n"
 "n - no aplicar stage a este hunk\n"
-"q - quit; no aplicar stage a este hunk o ninguno de los restantes\n"
-"a - aplicar stage a este hunk y a todos los posteriores en el archivo \n"
-"d - no aplicar stage a este hunk o a ninguno de los posteriores en este "
+"q - quit; no aplicar stage a este hunk ni ninguno de los restantes\n"
+"a - aplicar stage a este hunk y a todos los posteriores en el archivo\n"
+"d - no aplicar stage a este hunk ni a ninguno de los posteriores en este "
 "archivo"
 
-#: git-add--interactive.perl:1256
+#: git-add--interactive.perl:1257
 msgid ""
 "y - stash this hunk\n"
 "n - do not stash this hunk\n"
@@ -24554,9 +25872,9 @@
 "n - no aplicar stash a este hunk\n"
 "q - quit; no aplicar stash a este hunk o a ninguno de los restantes\n"
 "a - aplicar stash a este hunk y a todos los posteriores en el archivo\n"
-"d - no aplicar stash a este hunk o ninguno de los posteriores en el archivo"
+"d - no aplicar stash a este hunk ni ninguno de los posteriores en el archivo"
 
-#: git-add--interactive.perl:1262
+#: git-add--interactive.perl:1263
 msgid ""
 "y - unstage this hunk\n"
 "n - do not unstage this hunk\n"
@@ -24566,12 +25884,12 @@
 msgstr ""
 "y - sacar desde hunk del área de stage\n"
 "n - no sacar este hunk del area de stage\n"
-"q - quit; no sacar del area de stage este hunk o ninguno de los restantes\n"
+"q - quit; no sacar del area de stage este hunk ni ninguno de los restantes\n"
 "a - sacar del area de stage este hunk y todos los posteriores en el archivo\n"
-"d - no sacar del area de stage este hunk o ninguno de los posteriores en el "
+"d - no sacar del area de stage este hunk ni ninguno de los posteriores en el "
 "archivo"
 
-#: git-add--interactive.perl:1268
+#: git-add--interactive.perl:1269
 msgid ""
 "y - apply this hunk to index\n"
 "n - do not apply this hunk to index\n"
@@ -24581,11 +25899,11 @@
 msgstr ""
 "y - aplicar este hunk al índice\n"
 "n - no aplicar este hunk al índice\n"
-"q - quit; no aplicar este hunk o ninguno de los restantes\n"
+"q - quit; no aplicar este hunk ni ninguno de los restantes\n"
 "a - aplicar este hunk y todos los posteriores en el archivo\n"
-"d - no aplicar este hunko ninguno de los posteriores en el archivo"
+"d - no aplicar este hunk ni ninguno de los posteriores en el archivo"
 
-#: git-add--interactive.perl:1274 git-add--interactive.perl:1292
+#: git-add--interactive.perl:1275 git-add--interactive.perl:1293
 msgid ""
 "y - discard this hunk from worktree\n"
 "n - do not discard this hunk from worktree\n"
@@ -24595,11 +25913,11 @@
 msgstr ""
 "y - descartar este hunk del árbol de trabajo\n"
 "n - no descartar este hunk del árbol de trabajo\n"
-"q - quit; no descartar este hunk o ninguno de los que restantes\n"
+"q - quit; no descartar este hunk ni ninguno de los que restantes\n"
 "a - descartar este hunk y todos los posteriores en este archivo\n"
-"d - no descartar este hunk o ninguno de los posteriores en el archivo"
+"d - no descartar este hunk ni ninguno de los posteriores en el archivo"
 
-#: git-add--interactive.perl:1280
+#: git-add--interactive.perl:1281
 msgid ""
 "y - discard this hunk from index and worktree\n"
 "n - do not discard this hunk from index and worktree\n"
@@ -24609,11 +25927,11 @@
 msgstr ""
 "y - descartar este hunk del índice y el árbol de trabajo\n"
 "n - no descartar este hunk del índice ni el árbol de trabajo\n"
-"q - quit; no descartar este hunk o ninguno de los que quedan\n"
+"q - quit; no descartar este hunk ni ninguno de los que queden\n"
 "a - descartar este hunk y todos los posteriores en este archivo\n"
-"d - no descartar este hunk o ninguno posterior en el archivo"
+"d - no descartar este hunk ni ninguno posterior en el archivo"
 
-#: git-add--interactive.perl:1286
+#: git-add--interactive.perl:1287
 msgid ""
 "y - apply this hunk to index and worktree\n"
 "n - do not apply this hunk to index and worktree\n"
@@ -24623,11 +25941,11 @@
 msgstr ""
 "y - aplicar este hunk al índice y al árbol de trabajo\n"
 "n - no aplicar este hunk al índice y al árbol de trabajo\n"
-"q - quit;  no aplicar este hunk o ninguno de los restantes\n"
+"q - quit;  no aplicar este hunk ni ninguno de los restantes\n"
 "a - aplicar este hunk y todos los posteriores en el archivo\n"
-"d - no aplicar este hunk o ninguno de los siguientes en este archivo"
+"d - no aplicar este hunk ni ninguno de los siguientes en este archivo"
 
-#: git-add--interactive.perl:1298
+#: git-add--interactive.perl:1299
 msgid ""
 "y - apply this hunk to worktree\n"
 "n - do not apply this hunk to worktree\n"
@@ -24637,11 +25955,11 @@
 msgstr ""
 "y - aplicar este hunk al índice y al árbol de trabajo\n"
 "n - no aplicar este hunk al índice y al árbol de trabajo\n"
-"q - quit;  no aplicar este hunk o ninguno de los restantes\n"
+"q - quit;  no aplicar este hunk ni ninguno de los restantes\n"
 "a - aplicar este hunk y todos los posteriores en el archivo\n"
-"d - no aplicar este hunk o ninguno de los siguientes en este archivo"
+"d - no aplicar este hunk ni ninguno de los siguientes en este archivo"
 
-#: git-add--interactive.perl:1313
+#: git-add--interactive.perl:1314
 msgid ""
 "g - select a hunk to go to\n"
 "/ - search for a hunk matching the given regex\n"
@@ -24663,90 +25981,90 @@
 "e - editar manualmente el hunk actual\n"
 "? - imprimir ayuda\n"
 
-#: git-add--interactive.perl:1344
+#: git-add--interactive.perl:1345
 msgid "The selected hunks do not apply to the index!\n"
 msgstr "¡Los hunks seleccionados no aplican al índice!\n"
 
-#: git-add--interactive.perl:1359
+#: git-add--interactive.perl:1360
 #, perl-format
 msgid "ignoring unmerged: %s\n"
 msgstr "ignorando lo no fusionado: %s\n"
 
-#: git-add--interactive.perl:1478
+#: git-add--interactive.perl:1479
 #, perl-format
 msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar cambio de modo para el árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1479
+#: git-add--interactive.perl:1480
 #, perl-format
 msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar borrado al árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1480
+#: git-add--interactive.perl:1481
 #, perl-format
 msgid "Apply addition to worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar adición al árbol de trabajo [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1481
+#: git-add--interactive.perl:1482
 #, perl-format
 msgid "Apply this hunk to worktree [y,n,q,a,d%s,?]? "
 msgstr "¿Aplicar este hunk al árbol de trabajo [y,n,q,a,d,/%s,?]? "
 
-#: git-add--interactive.perl:1587
+#: git-add--interactive.perl:1599
 msgid "No other hunks to goto\n"
 msgstr "No hay más pedazos para el ir\n"
 
-#: git-add--interactive.perl:1605
+#: git-add--interactive.perl:1617
 #, perl-format
 msgid "Invalid number: '%s'\n"
 msgstr "Numero inválido: '%s'\n"
 
-#: git-add--interactive.perl:1610
+#: git-add--interactive.perl:1622
 #, perl-format
 msgid "Sorry, only %d hunk available.\n"
 msgid_plural "Sorry, only %d hunks available.\n"
 msgstr[0] "Lo siento, solo %d hunk disponible.\n"
 msgstr[1] "Lo siento, solo %d hunks disponibles.\n"
 
-#: git-add--interactive.perl:1636
+#: git-add--interactive.perl:1657
 msgid "No other hunks to search\n"
 msgstr "No hay más pedazos para buscar\n"
 
-#: git-add--interactive.perl:1653
+#: git-add--interactive.perl:1674
 #, perl-format
 msgid "Malformed search regexp %s: %s\n"
 msgstr "Regexp para la búsqueda mal formado %s: %s\n"
 
-#: git-add--interactive.perl:1663
+#: git-add--interactive.perl:1684
 msgid "No hunk matches the given pattern\n"
 msgstr "No hay hunks que concuerden con el patrón entregado.\n"
 
-#: git-add--interactive.perl:1675 git-add--interactive.perl:1697
+#: git-add--interactive.perl:1696 git-add--interactive.perl:1718
 msgid "No previous hunk\n"
 msgstr "No el anterior hunk\n"
 
-#: git-add--interactive.perl:1684 git-add--interactive.perl:1703
+#: git-add--interactive.perl:1705 git-add--interactive.perl:1724
 msgid "No next hunk\n"
 msgstr "No el siguiente hunk\n"
 
-#: git-add--interactive.perl:1709
+#: git-add--interactive.perl:1730
 msgid "Sorry, cannot split this hunk\n"
 msgstr "Perdón, no se puede dividir este pedazo\n"
 
-#: git-add--interactive.perl:1715
+#: git-add--interactive.perl:1736
 #, perl-format
 msgid "Split into %d hunk.\n"
 msgid_plural "Split into %d hunks.\n"
 msgstr[0] "Cortar en %d hunk.\n"
 msgstr[1] "Cortar en  %d hunks.\n"
 
-#: git-add--interactive.perl:1725
+#: git-add--interactive.perl:1746
 msgid "Sorry, cannot edit this hunk\n"
 msgstr "Perdón, no se puede editar este pedazo\n"
 
 #. TRANSLATORS: please do not translate the command names
 #. 'status', 'update', 'revert', etc.
-#: git-add--interactive.perl:1790
+#: git-add--interactive.perl:1811
 msgid ""
 "status        - show paths with changes\n"
 "update        - add working tree state to the staged set of changes\n"
@@ -24766,19 +26084,19 @@
 "add untracked - agrega contenidos de archivos no rastreados al grupo de "
 "cambios del area de stage\n"
 
-#: git-add--interactive.perl:1807 git-add--interactive.perl:1812
-#: git-add--interactive.perl:1815 git-add--interactive.perl:1822
-#: git-add--interactive.perl:1825 git-add--interactive.perl:1832
-#: git-add--interactive.perl:1836 git-add--interactive.perl:1842
+#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
+#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
+#: git-add--interactive.perl:1853 git-add--interactive.perl:1860
+#: git-add--interactive.perl:1864 git-add--interactive.perl:1870
 msgid "missing --"
 msgstr "falta --"
 
-#: git-add--interactive.perl:1838
+#: git-add--interactive.perl:1866
 #, perl-format
 msgid "unknown --patch mode: %s"
 msgstr "modo --patch desconocido: %s"
 
-#: git-add--interactive.perl:1844 git-add--interactive.perl:1850
+#: git-add--interactive.perl:1872 git-add--interactive.perl:1878
 #, perl-format
 msgid "invalid argument %s, expecting --"
 msgstr "argumento inválido %s, se esperaba --"
@@ -24791,31 +26109,48 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "el offset del tiempo local es mayor o igual a 24 horas\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
-msgid "the editor exited uncleanly, aborting everything"
-msgstr "el editor se cerro inapropiadamente, abortando todo"
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "fatal: comando '%s' murió con código de salida %d"
 
-#: git-send-email.perl:310
+#: git-send-email.perl:235
+msgid "the editor exited uncleanly, aborting everything"
+msgstr "el editor se cerró inapropiadamente, abortando todo"
+
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr ""
 "'%s' contiene una versión intermedia del correo que se estaba generando.\n"
 
-#: git-send-email.perl:315
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' contiene el email generado.\n"
 
-#: git-send-email.perl:408
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases no es compatible con otras opciones.\n"
 
-#: git-send-email.perl:481 git-send-email.perl:683
+#: git-send-email.perl:493
+msgid ""
+"fatal: found configuration options for 'sendmail'\n"
+"git-send-email is configured with the sendemail.* options - note the 'e'.\n"
+"Set sendemail.forbidSendmailVariables to false to disable this check.\n"
+msgstr ""
+"fatal: opciones de configuración encontradas para 'sendmail'\n"
+"git-send-email está configurado con las opciones sendemail. * - tenga en "
+"cuenta la 'e'.\n"
+"Establezca sendemail.forbidSendmailVariables en false para deshabilitar esta "
+"verificación.\n"
+
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "No se puede ejecutar git format-patch desde fuera del repositorio.\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
@@ -24823,37 +26158,37 @@
 "`batch-size` y `relogin` deben ser especificados juntos (via la línea de "
 "comando o por opción de configuración)\n"
 
-#: git-send-email.perl:497
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Campo --suppress-cc desconocido: '%s'\n"
 
-#: git-send-email.perl:528
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Configuración --confirm desconocida: '%s'\n"
 
-#: git-send-email.perl:556
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "peligro: alias de sendmail  con comillas no es soportado: %s\n"
 
-#: git-send-email.perl:558
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "peligro: `:include:` no soportado: %s\n"
 
-#: git-send-email.perl:560
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
-msgstr "advertencia: redirección `/file` o `|pipe` no soportada : %s\n"
+msgstr "advertencia: redirección `/file` o `|pipe` no soportada: %s\n"
 
-#: git-send-email.perl:565
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "advertencia: línea sendmail no reconocida: %s\n"
 
-#: git-send-email.perl:649
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -24862,47 +26197,38 @@
 "    * Saying \"./%s\" if you mean a file; or\n"
 "    * Giving --format-patch option if you mean a range.\n"
 msgstr ""
-"Archivo '%s' existe pero podría ser el rango de commits \n"
+"Archivo '%s' existe pero podría ser el rango de commits\n"
 "para producir los parches.  Por favor elimina la ambigüedad...\n"
 "\n"
 "    * Diciendo \"./%s\" si se quiere decir un archivo; o\n"
 "    * Agregando la opción --format-patch si se quiere decir un rango.\n"
 
-#: git-send-email.perl:670
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Falló al abrir directorio %s: %s"
 
-#: git-send-email.perl:694
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"fatal: %s: %s\n"
-"peligro: no se mandaron parches\n"
-
-#: git-send-email.perl:705
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
 "\n"
 msgstr ""
 "\n"
-"No se especificaron parches!\n"
+"¡No se especificaron parches!\n"
 "\n"
 
-#: git-send-email.perl:718
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "¿No hay línea de subject en %s?"
 
-#: git-send-email.perl:728
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Falló al abrir para escritura %s: %s"
 
-#: git-send-email.perl:739
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -24916,27 +26242,27 @@
 "\n"
 "Limpiar el contenido de body si no deseas mandar un resumen.\n"
 
-#: git-send-email.perl:763
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Falló al abrir %s: %s"
 
-#: git-send-email.perl:780
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Falló al abrir %s.final: %s"
 
-#: git-send-email.perl:823
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "Archivo de resumen está vacío, saltando al siguiente\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:858
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "¿Estás seguro de que deseas usar <%s> [y/N]? "
 
-#: git-send-email.perl:913
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -24944,11 +26270,11 @@
 "Los siguientes archivos son 8bit, pero no declaran un Content-Transfer-"
 "Encoding.\n"
 
-#: git-send-email.perl:918
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
-msgstr "¿Que codificación de 8bit debería declarar [UTF-8]? "
+msgstr "¿Qué codificación de 8bit debería declarar [UTF-8]? "
 
-#: git-send-email.perl:926
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -24958,25 +26284,25 @@
 msgstr ""
 "Rehusando mandar el parche porque\n"
 "\t%s\n"
-"tiene el template  '*** SUBJECT HERE ***'. Agrega --force si realmente lo "
-"deseas mandar.\n"
+"tiene el asunto de template  '*** SUBJECT HERE ***'. Agrega --force si"
+"realmente lo deseas mandar.\n"
 
-#: git-send-email.perl:945
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
-msgstr "¿A quien se deben mandar los correos (si existe)?"
+msgstr "¿A quién se deben mandar los correos (si existe)?"
 
-#: git-send-email.perl:963
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "fatal: alias '%s' se expande a si mismo\n"
 
-#: git-send-email.perl:975
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
-"¿Qué id de mensaje será usado como En-Respuesta-Para en el primer email (si "
+"¿Qué id de mensaje será usado como In-Reply-To en el primer email (si "
 "existe alguno)? "
 
-#: git-send-email.perl:1033 git-send-email.perl:1041
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "error: no es posible extraer una dirección válida de %s\n"
@@ -24984,16 +26310,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:1045
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
-msgstr "¿Que hacer con esta dirección? ([q]salir|[d]botar|[e]ditar): "
+msgstr "¿Qué hacer con esta dirección? ([q]salir|[d]botar|[e]ditar): "
 
-#: git-send-email.perl:1362
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "Ruta CA \"%s\" no existe"
 
-#: git-send-email.perl:1445
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25021,133 +26347,443 @@
 #. 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:1460
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "¿Mandar este email? ([y]si||[n]o|[e]editar|[q]salir|[a]todo): "
 
-#: git-send-email.perl:1463
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Necesitas mandar esta respuesta de email"
 
-#: git-send-email.perl:1491
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "El servidor SMTP no esta definido adecuadamente."
 
-#: git-send-email.perl:1538
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "¡El servidor no soporta STARTTLS! %s"
 
-#: git-send-email.perl:1543 git-send-email.perl:1547
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "¡Falló STARTTLS! %s"
 
-#: git-send-email.perl:1556
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
-"No es posible inicializar SMTP adecuadamente. Verificar config y usar ---"
-"smtp-debug."
+"No es posible inicializar SMTP adecuadamente. Verificar config y usar --smtp-debug."
 
-#: git-send-email.perl:1574
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "Falló al enviar %s\n"
 
-#: git-send-email.perl:1577
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Dry-Sent %s\n"
 
-#: git-send-email.perl:1577
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Enviado %s\n"
 
-#: git-send-email.perl:1579
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Dry-OK. Log dice:\n"
 
-#: git-send-email.perl:1579
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK. Log dice:\n"
 
-#: git-send-email.perl:1591
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Resultado: "
 
-#: git-send-email.perl:1594
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Resultado: OK\n"
 
-#: git-send-email.perl:1612
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "no se puede abrir el archivo %s"
 
-#: git-send-email.perl:1659 git-send-email.perl:1679
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
-msgstr "(mbox) Agregando cc: %s de línea '%s'\n"
+msgstr "(mbox) Agregando cc: %s de la línea '%s'\n"
 
-#: git-send-email.perl:1665
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Agregando para: %s de la línea '%s'\n"
 
-#: git-send-email.perl:1722
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Agregando cc: %s de la línea '%s'\n"
 
-#: git-send-email.perl:1757
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) Agregando cc: %s de la línea '%s'\n"
 
-#: git-send-email.perl:1868
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) no se pudo ejecutar '%s'"
 
-#: git-send-email.perl:1875
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Agregando %s: %s de: '%s'\n"
 
-#: git-send-email.perl:1879
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
-msgstr "(%s) falló al cerrar el pipe para '%s'"
+msgstr "(%s) falló al cerrar el pipe a '%s'"
 
-#: git-send-email.perl:1909
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "no se puede mandar mensaje como 7bit"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "codificación de transferencia inválida"
 
-#: git-send-email.perl:1958 git-send-email.perl:2010 git-send-email.perl:2020
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal: %s: rechazado por hook sendmail-validate\n"
+"%s\n"
+"peligro: no se mandaron parches\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "no es posible abrir %s: %s\n"
 
-#: git-send-email.perl:1961
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s: el parche contiene una línea con más de 998 caracteres"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal: %s: %d es más grande que 998 caracteres\n"
+"peligro: no se mandaron parches\n"
 
-#: git-send-email.perl:1978
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "Saltando %s con el sufijo de backup '%s'.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1982
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
-msgstr "¿Realmente deseas mandar %s?[y|N]: "
+msgstr "¿Realmente deseas mandar %s? [y|N]: "
+
+#~ msgid "--cached and --3way cannot be used together."
+#~ msgstr "--cached y --3way no se pueden utilizar juntas."
+
+#~ msgid "both"
+#~ msgstr "ambos"
+
+#~ msgid "one"
+#~ msgstr "uno"
+
+#, c-format
+#~ msgid "Already up to date!"
+#~ msgstr "¡Ya está actualizado!"
+
+#~ msgid "Already up to date. Yeeah!"
+#~ msgstr "Ya está actualizado. ¡Oh, yeaahh!"
+
+#~ msgid "--batch-size option is only for 'repack' subcommand"
+#~ msgstr "opción --batch-size es solo para el subcomando 'repack'"
+
+#~ msgid "Percentage by which creation is weighted"
+#~ msgstr "Porcentaje por el cual la creación es pesada"
+
+#~ msgid ""
+#~ "the rebase.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "el soporte para rebase.useBuiltin ha sido eliminado!\n"
+#~ "Vea su entrada en 'git help config' para detalles."
+
+#, perl-format
+#~ msgid "%s: patch contains a line longer than 998 characters"
+#~ msgstr "%s: el parche contiene una línea con más de 998 caracteres"
+
+#~ msgid "store only"
+#~ msgstr "solo guardar"
+
+#~ msgid "compress faster"
+#~ msgstr "comprimir más rápido"
+
+#~ msgid "compress better"
+#~ msgstr "comprimir mejor"
+
+#~ msgid "unknown hash algorithm length"
+#~ msgstr "largo del algoritmo hash desconocido"
+
+#~ msgid "rev-list died"
+#~ msgstr "rev-list murió"
+
+#~ msgid ""
+#~ "commit-graph chunk lookup table entry missing; file may be incomplete"
+#~ msgstr ""
+#~ "falta tabla de lookup del chunk en commit-graph; el archivo puede estar "
+#~ "incompleto"
+
+#, c-format
+#~ msgid "commit-graph improper chunk offset %08x%08x"
+#~ msgstr "offset del chunk de commit-graph inapropiado %08x%08x"
+
+#, c-format
+#~ msgid "commit-graph chunk id %08x appears multiple times"
+#~ msgstr "id de chunk de commit-graph %08x parece tener múltiples tiempos"
+
+#~ msgid "Writing changed paths Bloom filters index"
+#~ msgstr "Escribiendo cambios de ruta del índice de filtros Bloom"
+
+#~ msgid "Counting distinct commits in commit graph"
+#~ msgstr "Contando commits distintos en commit graph"
+
+#, c-format
+#~ msgid "unexpected duplicate commit id %s"
+#~ msgstr "id de commit duplicado inesperado %s"
+
+#, c-format
+#~ msgid "the commit graph format cannot write %d commits"
+#~ msgstr "el formato de gráficos de commit no pudede escribir %d commits"
+
+#, c-format
+#~ msgid "hash version %u does not match"
+#~ msgstr "versión de hash %u no concuerda"
+
+#~ msgid "invalid chunk offset (too large)"
+#~ msgstr "offset inválido del conjunto (muy grande)"
+
+#~ msgid "error preparing packfile from multi-pack-index"
+#~ msgstr "error preparando packfile de multi-pack-index"
+
+#~ msgid "Writing chunks to multi-pack-index"
+#~ msgstr "Escribiendo chunks a multi-pack-index"
+
+#~ msgid "Remote with no URL"
+#~ msgstr "Remoto sin URL"
+
+#, c-format
+#~ msgid "%%(subject) does not take arguments"
+#~ msgstr "%%(subject) no toma ningún argumento"
+
+#, c-format
+#~ msgid "positive value expected objectname:short=%s"
+#~ msgstr "valor positivo esperado objectname:short=%s"
+
+#, c-format
+#~ msgid "unrecognized %%(objectname) argument: %s"
+#~ msgstr "argumento: %s no reconocido %%(objectname)"
+
+#, c-format
+#~ msgid "option `%s' is incompatible with --merged"
+#~ msgstr "opción `%s' es incompatible con --merged"
+
+#, c-format
+#~ msgid "option `%s' is incompatible with --no-merged"
+#~ msgstr "opción `%s' es incompatible con --no-merged"
+
+#, c-format
+#~ msgid "could not open '%s' for writing: %s"
+#~ msgstr "no se pudo abrir '%s' para escritura: %s"
+
+#, c-format
+#~ msgid "could not read ref '%s'"
+#~ msgstr "no se pudo leer la referencia '%s'"
+
+#, c-format
+#~ msgid "ref '%s' already exists"
+#~ msgstr "ref '%s' ya existe"
+
+#, c-format
+#~ msgid "unexpected object ID when writing '%s'"
+#~ msgstr "ID de objecto inesperado al escribir '%s'"
+
+#, c-format
+#~ msgid "unexpected object ID when deleting '%s'"
+#~ msgstr "ID de objecto inesperado al borrar '%s'"
+
+#, c-format
+#~ msgid "The hash algorithm %s is not supported in this build."
+#~ msgstr "El algoritmo hash %s no está soportado en este build."
+
+#, c-format
+#~ msgid "%s: not a valid OID"
+#~ msgstr "%s no es OID válido"
+
+#~ msgid "git bisect--helper --next-all [--no-checkout]"
+#~ msgstr "git bisect--helper --next-all [--no-checkout]"
+
+#~ msgid "git bisect--helper --write-terms <bad_term> <good_term>"
+#~ msgstr "git bisect--helper --write-terms <mal_término> <buen_término>"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-write [--no-log] <state> <revision> "
+#~ "<good_term> <bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-write [--no-log] <estado> <revision> "
+#~ "<buen_term> <mal_term>"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
+#~ "<bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-check-and-set-terms <comando> <buen_term> "
+#~ "<mal_term>"
+
+#~ msgid "could not open the file BISECT_TERMS"
+#~ msgstr "no se pudo abrir el archivo BISECT_TERMS"
+
+#~ msgid "perform 'git bisect next'"
+#~ msgstr "realiza 'git bisect next'"
+
+#~ msgid "write the terms to .git/BISECT_TERMS"
+#~ msgstr "escribe los términos a .git/BISECT_TERMS"
+
+#~ msgid "cleanup the bisection state"
+#~ msgstr "limpiar el estado de bisección"
+
+#~ msgid "check for expected revs"
+#~ msgstr "revisar por revs esperados"
+
+#~ msgid "write out the bisection state in BISECT_LOG"
+#~ msgstr "escribir el estado de bisect en BISECT_LOG"
+
+#~ msgid "check and set terms in a bisection state"
+#~ msgstr "revisar y configurar los terms en el estado de bisect"
+
+#~ msgid "update BISECT_HEAD instead of checking out the current commit"
+#~ msgstr "actualiza BISECT_HEAD en lugar de revisar el commit actual"
+
+#~ msgid "--write-terms requires two arguments"
+#~ msgstr "--write-terms requiere dos argumentos"
+
+#~ msgid "--bisect-clean-state requires no arguments"
+#~ msgstr "--bisect-clean-state no requiere argumentos"
+
+#~ msgid "--bisect-write requires either 4 or 5 arguments"
+#~ msgstr "--bisect-write requiere entre 4 o 5 argumentos"
+
+#~ msgid "--check-and-set-terms requires 3 arguments"
+#~ msgstr "--bisect-clean-state no requiere argumentos"
+
+#~ msgid "Force progress reporting"
+#~ msgstr "Forzar el reporte de progreso"
+
+#~ msgid "n,m"
+#~ msgstr "n,m"
+
+#, c-format
+#~ msgid "Error deleting remote-tracking branch '%s'"
+#~ msgstr "Error al eliminar la rama de rastreo remota '%s'"
+
+#, c-format
+#~ msgid "Error deleting branch '%s'"
+#~ msgstr "Error al eliminar la rama '%s'"
+
+#~ msgid "show parse tree for grep expression"
+#~ msgstr "mostrar árbol analizado para la expresión grep"
+
+#~ msgid "Process line range n,m in file, counting from 1"
+#~ msgstr "Procesar rango de líneas n,m en archivo, contando desde 1"
+
+#~ msgid "name of output directory is too long"
+#~ msgstr "nombre del directorio de salida es muy largo"
+
+#~ msgid "standard output, or directory, which one?"
+#~ msgstr "¿salida standard, o directorio, cual?"
+
+#~ msgid "print only names (no SHA-1)"
+#~ msgstr "imprimir sólo nombres (sin SHA-1)"
+
+#~ msgid "too many parameters"
+#~ msgstr "demasiados parámetros"
+
+#~ msgid "too few parameters"
+#~ msgstr "muy pocos parámetros"
+
+#~ msgid "passed to 'git am'"
+#~ msgstr "pasado a 'git am'"
+
+#, c-format
+#~ msgid ""
+#~ "WARNING: Some packs in use have been renamed by\n"
+#~ "WARNING: prefixing old- to their name, in order to\n"
+#~ "WARNING: replace them with the new version of the\n"
+#~ "WARNING: file.  But the operation failed, and the\n"
+#~ "WARNING: attempt to rename them back to their\n"
+#~ "WARNING: original names also failed.\n"
+#~ "WARNING: Please rename them in %s manually:\n"
+#~ msgstr ""
+#~ "WARNING: Algunos packs en uso han sido renombrados\n"
+#~ "WARNING: agregando el prefijo old- a sus nombres,para\n"
+#~ "WARNING: reemplazarlos con la nueva versión del\n"
+#~ "WARNING: archivo. Pero la operación falló, y el intento\n"
+#~ "WARNING: de renombrarlos a sus nombres originales\n"
+#~ "WARNING: también falló.\n"
+#~ "WARNING: Por favor renombralos en %s manualmente:\n"
+
+#, c-format
+#~ msgid "failed to remove '%s'"
+#~ msgstr "falló al eliminar'%s'"
+
+#~ msgid "Recurse into nested submodules"
+#~ msgstr "Recursar en submódulos anidados"
+
+#~ msgid "too many params"
+#~ msgstr "demasiados parámetros"
+
+#~ msgid "Routines to help parsing remote repository access parameters"
+#~ msgstr ""
+#~ "Rutinas para ayudar a analizar los parámetros de acceso del repositorio "
+#~ "remoto"
+
+#, sh-format
+#~ msgid "Bad rev input: $bisected_head"
+#~ msgstr "Mala entrada rev: $bisected_head"
+
+#, sh-format
+#~ msgid "Bad rev input: $rev"
+#~ msgstr "Mala entrada rev: $rev"
+
+#~ msgid "The --cached option cannot be used with the --files option"
+#~ msgstr "La opción --cached no puede ser usada con la opción --files"
+
+#, sh-format
+#~ msgid "  Warn: $display_name doesn't contain commit $sha1_src"
+#~ msgstr "  Advertencia: $display_name no contiene el commit $sha1_src"
+
+#, sh-format
+#~ msgid "  Warn: $display_name doesn't contain commit $sha1_dst"
+#~ msgstr "  Advertencia: $display_name no contiene el commit $sha1_dst"
+
+#, sh-format
+#~ msgid ""
+#~ "  Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
+#~ msgstr ""
+#~ "  Advertencia: $display_name no contiene los commits $sha1_src y $sha1_dst"
+
+#, sh-format
+#~ msgid "See git-${cmd}(1) for details."
+#~ msgstr "Véase git-${cmd}(1) para más detalles."
 
 #, c-format
 #~ msgid "Finding commits for commit graph from %d ref"
@@ -25322,7 +26958,7 @@
 #~ "If the patch applies cleanly, the edited hunk will immediately be\n"
 #~ "marked for staging.\n"
 #~ msgstr ""
-#~ "Si el parche aplica limpiamente, el hunk editado sera marcado\n"
+#~ "Si el parche aplica limpiamente, el hunk editado será marcado\n"
 #~ "inmediatamente para el área de stage.\n"
 
 #~ msgid ""
@@ -25334,8 +26970,8 @@
 #~ msgstr ""
 #~ "y - aplicar stage a este hunk\n"
 #~ "n - no aplicar stage a este hunk\n"
-#~ "q - quit; no aplicar stage a este hunk o ninguno de los restantes\n"
-#~ "a - aplicar stage a este hunk y a todos los posteriores en el archivo \n"
+#~ "q - quit; no aplicar stage a este hunk ni ninguno de los restantes\n"
+#~ "a - aplicar stage a este hunk y a todos los posteriores en el archivo\n"
 #~ "d - no aplicar stage a este hunk o a ninguno de los posteriores en este "
 #~ "archivo\n"
 
@@ -25346,9 +26982,6 @@
 #~ msgid "malformed ident line"
 #~ msgstr "línea de entrada mal formada"
 
-#~ msgid "corrupted author without date information"
-#~ msgstr "autor corrupto sin información de fecha"
-
 #, c-format
 #~ msgid "could not parse '%.*s'"
 #~ msgstr "no se puede analizar '%.*s'"
@@ -25386,18 +27019,6 @@
 #~ msgid "no HEAD?"
 #~ msgstr "¿Sin HEAD?"
 
-#~ msgid "make committer date match author date"
-#~ msgstr "hacer que la fecha del commit concuerde con la fecha de autoría"
-
-#~ msgid "ignore author date and use current date"
-#~ msgstr "ignorar la fecha del autor y usar la fecha actual"
-
-#~ msgid "synonym of --reset-author-date"
-#~ msgstr "sinónimo para --reset-author-date"
-
-#~ msgid "ignore changes in whitespace"
-#~ msgstr "ignorar cambios en espacios en blanco"
-
 #~ msgid "preserve empty commits during rebase"
 #~ msgstr "preservar commits vacíos durante el rebase"
 
@@ -25414,10 +27035,6 @@
 #~ "$sm_path\n"
 #~ "Usa -f si en verdad quieres agregarlo."
 
-#, c-format
-#~ msgid "unable to get tree for %s"
-#~ msgstr "no se pudo obtener árbol para %s"
-
 #~ msgid "Use an experimental heuristic to improve diffs"
 #~ msgstr "Usar un heurístico experimental para mejorar los diffs"
 
@@ -25489,12 +27106,6 @@
 #~ msgid "Server supports ofs-delta"
 #~ msgstr "El servidor soporta ofs-delta"
 
-#~ msgid "(HEAD detached at %s)"
-#~ msgstr "(HEAD desacoplado en %s)"
-
-#~ msgid "(HEAD detached from %s)"
-#~ msgstr "(HEAD desacoplado de %s)"
-
 #~ msgid "Checking out files"
 #~ msgstr "Revisando archivos"
 
@@ -25522,9 +27133,6 @@
 #~ msgid "unrecognized verb: %s"
 #~ msgstr "verbo no reconocido: %s"
 
-#~ msgid "hash version %X does not match version %X"
-#~ msgstr "versión de hash %X no concuerda con versión %X"
-
 #~ msgid "option '%s' requires a value"
 #~ msgstr "opción '%s' requiere un valor"
 
@@ -25557,7 +27165,7 @@
 #~ "valuable there."
 #~ msgstr ""
 #~ "Parece que ya hay un directorio $state_dir_base, y\n"
-#~ "me pregunto si está en medio de otro rebase. Si ese es el \n"
+#~ "me pregunto si está en medio de otro rebase. Si ese es el\n"
 #~ "caso, por favor intente\n"
 #~ "\t$cmd_live_rebase\n"
 #~ "Si no es el caso, por favor\n"
diff --git a/po/fr.po b/po/fr.po
index f0191c2..336dc60 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -76,8 +76,8 @@
 msgstr ""
 "Project-Id-Version: git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-21 18:52+0100\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-19 17:43+0200\n"
 "Last-Translator: Cédric Malard <c.malard-git@valdun.net>\n"
 "Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n"
 "Language: fr\n"
@@ -85,31 +85,26 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n<=1 ?0 : 1;\n"
-"X-Generator: Poedit 2.2.3\n"
+"X-Generator: Poedit 2.4.2\n"
 
 #: add-interactive.c:376
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Hein (%s) ?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "impossible de lire l'index"
 
-#: add-interactive.c:584 git-add--interactive.perl:269
-#: git-add--interactive.perl:294
+#: add-interactive.c:584 git-add--interactive.perl:269 git-add--interactive.perl:294
 msgid "binary"
 msgstr "binaire"
 
-#: add-interactive.c:642 git-add--interactive.perl:278
-#: git-add--interactive.perl:332
+#: add-interactive.c:642 git-add--interactive.perl:278 git-add--interactive.perl:332
 msgid "nothing"
 msgstr "rien"
 
-#: add-interactive.c:643 git-add--interactive.perl:314
-#: git-add--interactive.perl:329
+#: add-interactive.c:643 git-add--interactive.perl:314 git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "inchangé"
 
@@ -122,7 +117,7 @@
 msgid "could not stage '%s'"
 msgstr "impossible d'indexer '%s'"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "impossible d'écrire l'index"
 
@@ -138,8 +133,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "note : %s n'est plus suivi à présent.\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
-#: builtin/reset.c:145
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298 builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "échec de make_cache_entry pour le chemin '%s'"
@@ -150,7 +144,7 @@
 
 #: add-interactive.c:775
 msgid "Could not parse HEAD^{tree}"
-msgstr "impossible d'analyser HEAD^{tree}"
+msgstr "Impossible d'analyser HEAD^{tree}"
 
 #: add-interactive.c:813 git-add--interactive.perl:629
 #, c-format, perl-format
@@ -204,8 +198,7 @@
 
 #: add-interactive.c:1012
 msgid "add working tree state to the staged set of changes"
-msgstr ""
-"ajouter l'état de l'arbre de travail à l'ensemble des modifications indexées"
+msgstr "ajouter l'état de l'arbre de travail à l'ensemble des modifications indexées"
 
 #: add-interactive.c:1014
 msgid "revert staged set of changes back to the HEAD version"
@@ -221,9 +214,7 @@
 
 #: add-interactive.c:1020
 msgid "add contents of untracked files to the staged set of changes"
-msgstr ""
-"ajouter le contenu des fichiers non-suivis à l'ensemble des modifications "
-"indexées"
+msgstr "ajouter le contenu des fichiers non-suivis à l'ensemble des modifications indexées"
 
 #: add-interactive.c:1028 add-interactive.c:1077
 msgid "Prompt help:"
@@ -271,7 +262,7 @@
 
 #: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
 msgid "What now"
-msgstr "Et maintenant ?"
+msgstr "Et maintenant"
 
 #: add-interactive.c:1144 git-add--interactive.perl:213
 msgid "staged"
@@ -281,13 +272,9 @@
 msgid "unstaged"
 msgstr "non-indexé"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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
-#: git-add--interactive.perl:213
+#: 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 git-add--interactive.perl:213
 msgid "path"
 msgstr "chemin"
 
@@ -321,12 +308,8 @@
 msgstr "Indexer cette section [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:39
-msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"staging."
-msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
-"marquée comme indexée."
+msgid "If the patch applies cleanly, the edited hunk will immediately be marked for staging."
+msgstr "Si le patch s'applique proprement, la section éditée sera immédiatement marquée comme indexée."
 
 #: add-patch.c:42
 msgid ""
@@ -363,12 +346,8 @@
 msgstr "Remiser cette section [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:61
-msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"stashing."
-msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
-"marquée comme remisée."
+msgid "If the patch applies cleanly, the edited hunk will immediately be marked for stashing."
+msgstr "Si le patch s'applique proprement, la section éditée sera immédiatement marquée comme remisée."
 
 #: add-patch.c:64
 msgid ""
@@ -405,12 +384,8 @@
 msgstr "Désindexer cette section [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:85
-msgid ""
-"If the patch applies cleanly, the edited hunk will immediately be marked for "
-"unstaging."
-msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
-"marquée comme desindexée."
+msgid "If the patch applies cleanly, the edited hunk will immediately be marked for unstaging."
+msgstr "Si le patch s'applique proprement, la section éditée sera immédiatement marquée comme desindexée."
 
 #: add-patch.c:88
 msgid ""
@@ -447,12 +422,8 @@
 msgstr "Appliquer cette section à l'index [y,n,q,a,d%s,?] ? "
 
 #: 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."
-msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
-"marquée comme appliquée."
+msgid "If the patch applies cleanly, the edited hunk will immediately be marked for applying."
+msgstr "Si le patch s'applique proprement, la section éditée sera immédiatement marquée comme appliquée."
 
 #: add-patch.c:111
 msgid ""
@@ -468,37 +439,29 @@
 "a - appliquer cette section et toutes les suivantes de ce fichier\n"
 "d - ne pas appliquer cette section ni les suivantes de ce fichier\n"
 
-#: add-patch.c:126 git-add--interactive.perl:1455
-#: git-add--interactive.perl:1473
+#: add-patch.c:126 git-add--interactive.perl:1455 git-add--interactive.perl:1473
 #, c-format, perl-format
 msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
 msgstr "Abandonner le changement de mode dans l'arbre [y,n,q,a,d%s,?] ? "
 
-#: add-patch.c:127 git-add--interactive.perl:1456
-#: git-add--interactive.perl:1474
+#: add-patch.c:127 git-add--interactive.perl:1456 git-add--interactive.perl:1474
 #, c-format, perl-format
 msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
 msgstr "Abandonner la suppression dans l'arbre [y,n,q,a,d%s,?] ? "
 
-#: add-patch.c:128 git-add--interactive.perl:1457
-#: git-add--interactive.perl:1475
+#: add-patch.c:128 git-add--interactive.perl:1457 git-add--interactive.perl:1475
 #, c-format, perl-format
 msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
 msgstr "Abandonner l'ajout dans l'arbre [y,n,q,a,d%s,?] ? "
 
-#: add-patch.c:129 git-add--interactive.perl:1458
-#: git-add--interactive.perl:1476
+#: add-patch.c:129 git-add--interactive.perl:1458 git-add--interactive.perl:1476
 #, c-format, perl-format
 msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
 msgstr "Abandonner cette section dans l'arbre [y,n,q,a,d%s,?] ? "
 
 #: 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."
-msgstr ""
-"Si le patch s'applique proprement, la section éditée sera immédiatement "
-"marquée comme éliminée."
+msgid "If the patch applies cleanly, the edited hunk will immediately be marked for discarding."
+msgstr "Si le patch s'applique proprement, la section éditée sera immédiatement marquée comme éliminée."
 
 #: add-patch.c:134 add-patch.c:202
 msgid ""
@@ -517,8 +480,7 @@
 #: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
 #, c-format, perl-format
 msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Abandonner le changement de mode dans l'index et l'arbre [y,n,q,a,d%s,?] ? "
+msgstr "Abandonner le changement de mode dans l'index et l'arbre [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1462
 #, c-format, perl-format
@@ -533,8 +495,7 @@
 #: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
 #, c-format, perl-format
 msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Supprimer la section dans l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
+msgstr "Supprimer la section dans l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:157
 msgid ""
@@ -553,28 +514,22 @@
 #: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
 #, c-format, perl-format
 msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Appliquer le changement de mode dans l'index et l'arbre de travail [y,n,q,a,d"
-"%s,?] ? "
+msgstr "Appliquer le changement de mode dans l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
 
 #: 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 ""
-"Appliquer la suppression dans l'index et l'arbre de travail [y,n,q,a,d"
-"%s,?] ? "
+msgstr "Appliquer la suppression dans l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
 #, c-format, perl-format
 msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Appliquer l'ajout dans l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
+msgstr "Appliquer l'ajout dans l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
 #, c-format, perl-format
 msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Appliquer la section à l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
+msgstr "Appliquer la section à l'index et l'arbre de travail [y,n,q,a,d%s,?] ? "
 
 #: add-patch.c:179
 msgid ""
@@ -663,8 +618,7 @@
 
 #: add-patch.c:1081 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
-msgstr ""
-"Mode d'édition manuelle de section -- voir ci-dessous pour un guide rapide.\n"
+msgstr "Mode d'édition manuelle de section -- voir ci-dessous pour un guide rapide.\n"
 
 #: add-patch.c:1085
 #, c-format
@@ -711,11 +665,8 @@
 #. (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
-msgid ""
-"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
-msgstr ""
-"Votre section éditée ne s'applique pas. L'éditer à nouveau (\"no\" "
-"l'élimine !) [y|n] ? "
+msgid "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
+msgstr "Votre section éditée ne s'applique pas. L'éditer à nouveau (\"no\" l'élimine !) [y|n] ? "
 
 #: add-patch.c:1289
 msgid "The selected hunks do not apply to the index!"
@@ -785,7 +736,7 @@
 
 #: add-patch.c:1574
 msgid "No other hunks to search"
-msgstr "aucune autre section à rechercher"
+msgstr "Aucune autre section à rechercher"
 
 #: add-patch.c:1580 git-add--interactive.perl:1661
 msgid "search for regex? "
@@ -817,7 +768,7 @@
 msgid "'git apply' failed"
 msgstr "'git apply' a échoué"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -826,37 +777,37 @@
 "\n"
 "Désactivez ce message avec \"git config advice.%s false\""
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sastuce: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Impossible de picorer car vous avez des fichiers non fusionnés."
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Impossible de valider car vous avez des fichiers non fusionnés."
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Impossible de fusionner car vous avez des fichiers non fusionnés."
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Impossible de tirer car vous avez des fichiers non fusionnés."
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Impossible d'annuler car vous avez des fichiers non fusionnés."
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "%s n'est pas possible car vous avez des fichiers non fusionnés."
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -864,23 +815,36 @@
 "Corrigez-les puis lancez 'git add/rm <fichier>'\n"
 "si nécessaire pour marquer la résolution et valider."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Abandon à cause de conflit non résolu."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Veuillez valider vos changements avant de fusionner."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Abandon à cause d'une fusion non terminée."
 
-#: advice.c:290
+#: 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 ""
+"Les spécificateurs de chemin suivants n'ont trouvé aucune correspondance, mais correspondent\n"
+"dans les entrées d'index hors de l'extraction clairsemée actuelle :\n"
+
+#: advice.c:303
+msgid "Disable or modify the sparsity rules if you intend to update such entries."
+msgstr "Désactiver ou modifier les règles de partialisation si vous allez mettre à jour de telles entrées."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -898,21 +862,16 @@
 "\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 ""
 "Note : basculement sur '%s'.\n"
 "\n"
-"Vous êtes dans l'état « HEAD détachée ». Vous pouvez visiter, faire des "
-"modifications\n"
-"expérimentales et les valider. Il vous suffit de faire un autre basculement "
-"pour\n"
-"abandonner les commits que vous faites dans cet état sans impacter les "
-"autres branches\n"
+"Vous êtes dans l'état « HEAD détachée ». Vous pouvez visiter, faire des modifications\n"
+"expérimentales et les valider. Il vous suffit de faire un autre basculement pour\n"
+"abandonner les commits que vous faites dans cet état sans impacter les autres branches\n"
 "\n"
-"Si vous voulez créer une nouvelle branche pour conserver les commits que "
-"vous créez,\n"
+"Si vous voulez créer une nouvelle branche pour conserver les commits que vous créez,\n"
 "il vous suffit d'utiliser l'option -c de la commande switch comme ceci :\n"
 "\n"
 "  git switch -c <nom-de-la-nouvelle-branche>\n"
@@ -921,8 +880,7 @@
 "\n"
 "  git switch -\n"
 "\n"
-"Désactivez ce conseil en renseignant la variable de configuration advice."
-"detachedHead à false\n"
+"Désactivez ce conseil en renseignant la variable de configuration advice.detachedHead à false\n"
 "\n"
 
 #: alias.c:50
@@ -933,190 +891,170 @@
 msgid "unclosed quote"
 msgstr "citation non fermée"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "option d'espace non reconnue '%s'"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "option d'ignorance d'espace non reconnue '%s'"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject et --3way ne peuvent pas être utilisés ensemble."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached et --3way ne peuvent pas être utilisés ensemble."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way hors d'un dépôt"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index hors d'un dépôt"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached hors d'un dépôt"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Impossible de préparer la regexp d'horodatage %s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec a retourné %d pour l'entrée : %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "nom de fichier du patch introuvable à la ligne %d"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
-msgstr ""
-"git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé à la "
-"ligne %d"
+msgstr "git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé à la ligne %d"
+
+#: apply.c:927
+#, c-format
+msgid "git apply: bad git-diff - inconsistent new filename on line %d"
+msgstr "git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant à la ligne %d"
 
 #: apply.c:928
 #, c-format
-msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr ""
-"git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant "
-"à la ligne %d"
-
-#: apply.c:929
-#, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
-msgstr ""
-"git apply : mauvais format de git-diff - ancien nom de fichier inconsistant "
-"à la ligne %d"
+msgstr "git apply : mauvais format de git-diff - ancien nom de fichier inconsistant à la ligne %d"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr ""
-"git apply : mauvais format de git-diff - /dev/null attendu à la ligne %d"
+msgstr "git apply : mauvais format de git-diff - /dev/null attendu à la ligne %d"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "mode invalide dans la ligne %d : %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "lignes d'entête inconsistantes %d et %d"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
-msgid ""
-"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)"
-msgstr[0] ""
-"information de nom de fichier manquante dans l'en-tête de git diff lors de "
-"la suppression de %d composant de préfixe de chemin (ligne %d)"
-msgstr[1] ""
-"information de nom de fichier manquante dans l'en-tête de git diff lors de "
-"la suppression de %d composants de préfixe de chemin (ligne %d)"
+msgid "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)"
+msgstr[0] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composant de préfixe de chemin (ligne %d)"
+msgstr[1] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composants de préfixe de chemin (ligne %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
-msgstr ""
-"information de nom de fichier manquante dans l'en-tête de git diff (ligne %d)"
+msgstr "information de nom de fichier manquante dans l'en-tête de git diff (ligne %d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recomptage : ligne inattendue : %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "fragment de patch sans en-tête à la ligne %d : %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "le nouveau fichier dépend de contenus anciens"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "le fichier supprimé a encore du contenu"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "patch corrompu à la ligne %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "le nouveau fichier %s dépend de contenus anciens"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "le fichier supprimé %s a encore du contenu"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** attention : le fichier %s devient vide mais n'est pas supprimé"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "patch binaire corrompu à la ligne %d : %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "patch binaire non reconnu à la ligne %d"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch totalement incompréhensible à la ligne %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "lecture du lien symbolique %s impossible"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "ouverture ou lecture de %s impossible"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "début de ligne invalide : '%c'"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "La section n°%d a réussi à la ligne %d (offset %d ligne)."
 msgstr[1] "La section n°%d a réussi à la ligne %d (offset %d lignes)."
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contexte réduit à (%ld/%ld) pour appliquer le fragment à la ligne %d"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1125,449 +1063,432 @@
 "pendant la recherche de :\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "données de patch binaire manquantes pour '%s'"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
-msgstr ""
-"impossible d'appliquer l'inverse d'un patch binaire à '%s' sans la section "
-"inverse"
+msgstr "impossible d'appliquer l'inverse d'un patch binaire à '%s' sans la section inverse"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
-msgstr ""
-"impossible d'appliquer un patch binaire à '%s' sans la ligne complète d'index"
+msgstr "impossible d'appliquer un patch binaire à '%s' sans la ligne complète d'index"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
-msgid ""
-"the patch applies to '%s' (%s), which does not match the current contents."
-msgstr ""
-"le patch s'applique à '%s' (%s), ce qui ne correspond pas au contenu actuel."
+msgid "the patch applies to '%s' (%s), which does not match the current contents."
+msgstr "le patch s'applique à '%s' (%s), ce qui ne correspond pas au contenu actuel."
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "le patch s'applique à un '%s' vide mais ce n'est pas vide"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "l'image postérieure nécessaire %s pour '%s' ne peut pas être lue"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "le patch binaire ne s'applique par correctement à '%s'"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
-msgstr ""
-"le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s "
-"trouvé)"
+msgstr "le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s trouvé)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "le patch a échoué : %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "extraction de %s impossible"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214 setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "échec de la lecture de %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "lecture depuis '%s' au-delà d'un lien symbolique"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "le chemin %s a été renommé/supprimé"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s : n'existe pas dans l'index"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s : ne correspond pas à l'index"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr ""
-"le dépôt n'a pas les blobs nécessaires pour un retour à une fusion à 3 "
-"points."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "le dépôt n'a pas les blobs nécessaires pour effectuer une fusion à 3 points."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "Retour à une fusion à 3 points…\n"
+msgid "Performing three-way merge...\n"
+msgstr "Application d'une fusion à 3 points…\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "impossible de lire le contenu actuel de '%s'"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "Échec du retour à une fusion à 3 points…\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "Échec de l'application de la fusion à 3 points…\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch %s appliqué avec des conflits.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch %s appliqué proprement.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Retour à une application directe…\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "le patch de suppression laisse un contenu dans le fichier"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s : type erroné"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s est de type %o, mais %o attendu"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890 read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "chemin invalide '%s'"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s : existe déjà dans l'index"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s : existe déjà dans la copie de travail"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o)"
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
-msgstr ""
-"le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o) de %s"
+msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o) de %s"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "le fichier affecté '%s' est au-delà d'un lien symbolique"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s : le patch ne s'applique pas"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Vérification du patch %s..."
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
-msgstr ""
-"l'information sha1 est manquante ou inutilisable pour le sous-module %s"
+msgstr "l'information sha1 est manquante ou inutilisable pour le sous-module %s"
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "le mode change pour %s, qui n'est pas dans la HEAD actuelle"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "l'information de sha1 est manquante ou inutilisable (%s)."
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "impossible d'ajouter %s à l'index temporaire"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "impossible d'écrire l'index temporaire dans %s"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "suppression de %s dans l'index impossible"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "patch corrompu pour le sous-module %s"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "stat du fichier nouvellement créé '%s' impossible"
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
-msgstr ""
-"création du magasin de stockage pour le fichier nouvellement créé %s "
-"impossible"
+msgstr "création du magasin de stockage pour le fichier nouvellement créé %s impossible"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "ajout de l'élément de cache %s impossible"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "échec de l'écriture dans '%s'"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "fermeture du fichier '%s'"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "écriture du fichier '%s' mode %o impossible"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s appliqué proprement."
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "erreur interne"
 
-#: apply.c:4557
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Application du patch %%s avec %d rejet..."
 msgstr[1] "Application du patch %%s avec %d rejets..."
 
-#: apply.c:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "troncature du nom de fichier .rej en %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "impossible d'ouvrir %s"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Section n°%d appliquée proprement."
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Section n°%d rejetée."
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Chemin '%s' non traité."
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "entrée non reconnue"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "lecture du fichier d'index impossible"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "ouverture impossible du patch '%s' :%s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d erreur d'espace ignorée"
 msgstr[1] "%d erreurs d'espace ignorées"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ligne a ajouté des erreurs d'espace."
 msgstr[1] "%d lignes ont ajouté des erreurs d'espace."
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d ligne ajoutée après correction des erreurs d'espace."
 msgstr[1] "%d lignes ajoutées après correction des erreurs d'espace."
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "Impossible d'écrire le nouveau fichier d'index"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "ne pas appliquer les modifications qui correspondent au chemin donné"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "appliquer les modifications qui correspondent au chemin donné"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "num"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "supprimer <num> barres obliques des chemins traditionnels de diff"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "ignorer les additions réalisées par le patch"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
-msgstr ""
-"afficher le nombre de lignes ajoutées et supprimées en notation décimale"
+msgstr "afficher le nombre de lignes ajoutées et supprimées en notation décimale"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "au lieu d'appliquer le patch, afficher un résumé de l'entrée"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "au lieu d'appliquer le patch, voir si le patch est applicable"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "s'assurer que le patch est applicable sur l'index actuel"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marquer les nouveaux fichiers `git add --intent-to-add`"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "appliquer les patch sans toucher à la copie de travail"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "accepter un patch qui touche hors de la copie de travail"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "appliquer aussi le patch (à utiliser avec --stat/--summary/--check)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "tenter une fusion à 3 points si le patch ne s'applique pas proprement"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr "tenter une fusion à 3 points, revenir à un rustinage normal en cas d'échec"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
-msgstr ""
-"construire un index temporaire fondé sur l'information de l'index embarqué"
+msgstr "construire un index temporaire fondé sur l'information de l'index embarqué"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "les chemins sont séparés par un caractère NUL"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "s'assurer d'au moins <n> lignes de correspondance de contexte"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296 builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
+#: builtin/pack-objects.c:3831 builtin/rebase.c:1347
 msgid "action"
 msgstr "action"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
-msgstr ""
-"détecter des lignes nouvelles ou modifiées qui contiennent des erreurs "
-"d'espace"
+msgstr "détecter des lignes nouvelles ou modifiées qui contiennent des erreurs d'espace"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorer des modifications d'espace lors de la recherche de contexte"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "appliquer le patch en sens inverse"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "ne pas s'attendre à au moins une ligne de contexte"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "laisser les sections rejetées dans les fichiers *.rej correspondants"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "accepter les recouvrements de sections"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "mode verbeux"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
-msgstr ""
-"tolérer des erreurs de détection de retours chariot manquants en fin de "
-"fichier"
+msgstr "tolérer des erreurs de détection de retours chariot manquants en fin de fichier"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "ne pas se fier au compte de lignes dans les en-têtes de section"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "racine"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "préfixer tous les noms de fichier avec <root>"
 
@@ -1624,152 +1545,141 @@
 msgstr "git archive --list"
 
 #: archive.c:16
-msgid ""
-"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
-msgstr ""
-"git archive --remote <dépôt> [--exec <commande>] [<options>] <arbre ou "
-"apparenté> [<chemin>...]"
+msgid "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
+msgstr "git archive --remote <dépôt> [--exec <commande>] [<options>] <arbre ou apparenté> [<chemin>...]"
 
 #: archive.c:17
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <dépôt> [--exec <commande>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "impossible de lire %s"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "impossible de lire '%s'"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "le chemin '%s' ne correspond à aucun fichier"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "référence inexistante : %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "nom d'objet invalide : %s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "objet arbre invalide : %s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "l'arbre de travail actuel est non-suivi"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Fichier non trouvé : %s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "'%s' n'est pas un fichier normal"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "fmt"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "format d'archive"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "préfixe"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "préfixer chaque chemin de fichier dans l'archive"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "fichier"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "ajouter les fichiers non suivis à l'archive"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "écrire l'archive dans ce fichier"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "lire .gitattributes dans le répertoire de travail"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "afficher les fichiers archivés sur stderr"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "régler le niveau de compression"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "afficher les formats d'archive supportés"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "dépôt"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "récupérer l'archive depuis le dépôt distant <dépôt>"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
-#: builtin/notes.c:498
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718 builtin/notes.c:498
 msgid "command"
 msgstr "commande"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "chemin vers la commande distante git-upload-archive"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Option --remote inattendue"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "L'option --exec ne peut être utilisée qu'en complément de --remote"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Option --output inattendue"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
-msgstr ""
-"Les options --add-file et --remote ne peuvent pas être utilisées ensemble"
+msgstr "Les options --add-file et --remote ne peuvent pas être utilisées ensemble"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Format d'archive inconnu '%s'"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument non supporté pour le format '%s' : -%d"
@@ -1779,12 +1689,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s n'est pas un nom valide d'attribut"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s non permis : %s : %d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1852,9 +1762,8 @@
 "So we cannot be sure the first %s commit is between %s and %s.\n"
 "We continue anyway."
 msgstr ""
-"La base de fusion entre %s et [%s] doit être évitée.\n"
-"On ne peut donc pas être certain que le premier commit %s se trouve entre %s "
-"et %s.\n"
+"la base de fusion entre %s et [%s] doit être évitée.\n"
+"On ne peut donc pas être certain que le premier commit %s se trouve entre %s et %s.\n"
 "On continue tout de même."
 
 #: bisect.c:861
@@ -1867,12 +1776,12 @@
 msgid "a %s revision is needed"
 msgstr "une révision %s est nécessaire"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "impossible de créer le fichier '%s'"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "impossible de lire le fichier '%s'"
@@ -1890,10 +1799,10 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Aucun commit testable n'a été trouvé\n"
-"Peut-être avez-vous démarré avec un mauvais paramètre de chemin ?\n"
+"Peut-être avez-vous démarré avec un mauvais arguement de chemin ?\n"
 
 #: bisect.c:1095
 #, c-format
@@ -1912,41 +1821,34 @@
 msgstr[0] "Bissection : %d révision à tester après ceci %s\n"
 msgstr[1] "Bissection : %d révisions à tester après ceci %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents et --reverse ne font pas bon ménage."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "on ne peut pas utiliser --contents avec un nom d'objet commit final"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
-msgstr ""
-"--reverse et --first-parent ensemble nécessitent la spécification d'un "
-"dernier commit"
+msgstr "--reverse et --first-parent ensemble nécessitent la spécification d'un dernier commit"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "échec de la préparation du parcours des révisions"
 
-#: blame.c:2839
-msgid ""
-"--reverse --first-parent together require range along first-parent chain"
-msgstr ""
-"--reverse --first-parent ensemble nécessitent une portée avec la chaîne de "
-"premier parent"
+#: blame.c:2838
+msgid "--reverse --first-parent together require range along first-parent chain"
+msgstr "--reverse --first-parent ensemble nécessitent une portée avec la chaîne de premier parent"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "pas de chemin %s dans %s"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "impossible de lire le blob %s  pour le chemin %s"
@@ -1972,23 +1874,17 @@
 #: branch.c:93
 #, c-format
 msgid "Branch '%s' set up to track remote branch '%s' from '%s' by rebasing."
-msgstr ""
-"La branche '%s' est paramétrée pour suivre la branche distante '%s' de '%s' "
-"en rebasant."
+msgstr "La branche '%s' est paramétrée pour suivre la branche distante '%s' de '%s' en rebasant."
 
 #: branch.c:94
 #, c-format
 msgid "Branch '%s' set up to track remote branch '%s' from '%s'."
-msgstr ""
-"La branche '%s' est paramétrée pour suivre la branche distante '%s' depuis "
-"'%s'."
+msgstr "La branche '%s' est paramétrée pour suivre la branche distante '%s' depuis '%s'."
 
 #: branch.c:98
 #, c-format
 msgid "Branch '%s' set up to track local branch '%s' by rebasing."
-msgstr ""
-"La branche '%s' est paramétrée pour suivre la branche locale '%'s en "
-"rebasant."
+msgstr "La branche '%s' est paramétrée pour suivre la branche locale '%'s en rebasant."
 
 #: branch.c:99
 #, c-format
@@ -1998,9 +1894,7 @@
 #: branch.c:104
 #, c-format
 msgid "Branch '%s' set up to track remote ref '%s' by rebasing."
-msgstr ""
-"La branche '%s' est paramétrée pour suivre la référence distante '%s' en "
-"rebasant."
+msgstr "La branche '%s' est paramétrée pour suivre la référence distante '%s' en rebasant."
 
 #: branch.c:105
 #, c-format
@@ -2010,9 +1904,7 @@
 #: branch.c:109
 #, c-format
 msgid "Branch '%s' set up to track local ref '%s' by rebasing."
-msgstr ""
-"La branche '%s' est paramétrée pour suivre la référence locale '%s' en "
-"rebasant."
+msgstr "La branche '%s' est paramétrée pour suivre la référence locale '%s' en rebasant."
 
 #: branch.c:110
 #, c-format
@@ -2045,9 +1937,7 @@
 #: branch.c:233
 #, c-format
 msgid "Cannot setup tracking information; starting point '%s' is not a branch."
-msgstr ""
-"Impossible de paramétrer le suivi de branche ; le point de départ '%s' n'est "
-"pas une branche."
+msgstr "Impossible de paramétrer le suivi de branche ; le point de départ '%s' n'est pas une branche."
 
 #: branch.c:235
 #, c-format
@@ -2089,12 +1979,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Point d'embranchement invalide : '%s'."
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' est déjà extrait dans '%s'"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "la HEAD de la copie de travail %s n'est pas mise à jour"
@@ -2119,8 +2009,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "en-tête non reconnu : %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385 builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "impossible d'ouvrir '%s'"
@@ -2163,320 +2052,306 @@
 msgid "pack-objects died"
 msgstr "les objets groupés ont disparu"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list a disparu"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "la référence '%s' est exclue par les options de rev-list"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "version de colis non supportée %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "impossible d'écrire une version de colis %d avec l'algorithme %s"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "argument non reconnu : %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Refus de créer un colis vide."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "impossible de créer '%s'"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "l'index de groupe a disparu"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "l'identifiant de terminaison de tronçon apparaît plus tôt qu'attendu"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "décalage(s) de section incorrect(s) %<PRIx64> et %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "ID de section dupliqué %<PRIx32>"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "la section finale a un id non nul %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
-msgstr "Valeur invalide de couleur : %.*s"
+msgstr "valeur invalide de couleur : %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "version d'empreinte invalide"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "le graphe de commit est trop petit"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
-msgstr ""
-"la signature du graphe de commit %X ne correspond pas à la signature %X"
+msgstr "la signature du graphe de commit %X ne correspond pas à la signature %X"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "la version %X du graphe de commit ne correspond pas à la version %X"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
-msgstr ""
-"l'empreinte de la version %X du graphe de commit ne correspond pas à la "
-"version %X"
+msgstr "l'empreinte de la version %X du graphe de commit ne correspond pas à la version %X"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "le graphe de commit est trop petit pour contenir %u sections"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "décalage de bloc %08x%08x du graphe de commit inadéquat"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "l'id de bloc de graphe de commit %08x apparaît des multiples fois"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "le graphe de commit n'a pas de section de graphes de base"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "la chaîne de graphe de commit ne correspond pas"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
-msgstr ""
-"chaîne de graphe de commit invalide : la ligne '%s' n'est pas une empreinte"
+msgstr "chaîne de graphe de commit invalide : la ligne '%s' n'est pas une empreinte"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "impossible de trouver tous les fichiers du graphe de commit"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
-msgstr ""
-"position de commit invalide. Le graphe de commit est vraisemblablement "
-"corrompu"
+msgstr "position de commit invalide. Le graphe de commit est vraisemblablement corrompu"
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "impossible de trouver le commit %s"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "le graphe de commits requiert des données de génération de débordement mais n'en contient pas"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "impossible d'analyser le commit %s"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "impossible d'obtenir le type de l'objet %s"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "Lecture des commits connus dans un graphe de commit"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expansion des commits joignables dans un graphe de commit"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "Suppression les marques de commit dans le graphe de commits"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "Calcul des niveaux topologiques du graphe de commits"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "Calcul des chiffres de génération du graphe de commits"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Calcul des filtres Bloom des chemins modifiés du commit"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Collecte des commits référencés"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Recherche de commits pour un graphe de commits dans %d paquet"
 msgstr[1] "Recherche de commits pour un graphe de commits dans %d paquets"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "erreur à l'ajout du packet %s"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "erreur à l'ouverture de l'index pour %s"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
-msgstr ""
-"Recherche de commits pour un graphe de commits parmi les objets empaquetés"
+msgstr "Recherche de commits pour un graphe de commits parmi les objets empaquetés"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "Recherche d'arêtes supplémentaires dans un graphe de commits"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "échec à l'écriture le nombre correct d'id de base de fusion"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "impossible de créer les répertoires de premier niveau de %s"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "impossible de créer une couche de graphe temporaire"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "impossible de régler les droits partagés pour '%s'"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Écriture le graphe de commits en %d passe"
 msgstr[1] "Écriture le graphe de commits en %d passes"
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "impossible d'ouvrir le fichier de graphe de commit"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "échec du renommage du fichier de graphe de commits"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "impossible de renommer le fichier temporaire de graphe de commits"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Analyse des commits de fusion"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
-msgstr "fusion du graphe de commits"
+msgstr "Fusion du graphe de commits"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
-msgstr ""
-"essai d'écriture de graphe de commits, mais 'core.commitGraph' est désactivé"
+msgstr "essai d'écriture de graphe de commits, mais 'core.commitGraph' est désactivé"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "trop de commits pour écrire un graphe"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
-msgstr ""
-"le graphe de commit a une somme de contrôle incorrecte et est "
-"vraisemblablement corrompu"
+msgstr "le graphe de commit a une somme de contrôle incorrecte et est vraisemblablement corrompu"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "le graphe de commit a un ordre d'OID incorrect : %s puis %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
-msgstr ""
-"le graphe de commit a une valeur de dispersion incorrecte : dispersion[%d] = "
-"%u != %u"
+msgstr "le graphe de commit a une valeur de dispersion incorrecte : dispersion[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "échec de l'analyse le commit %s depuis le graphe de commits"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "Verification des commits dans le graphe de commits"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
-msgstr ""
-"échec de l'analyse du commit %s depuis la base de données d'objets pour le "
-"graphe de commit"
+msgstr "échec de l'analyse du commit %s depuis la base de données d'objets pour le graphe de commit"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
-msgstr ""
-"l'OID de l'arbre racine pour le commit %s dans le graphe de commit est %s != "
-"%s"
+msgstr "l'OID de l'arbre racine pour le commit %s dans le graphe de commit est %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
-msgstr ""
-"la liste des parents du graphe de commit pour le commit %s est trop longue"
+msgstr "la liste des parents du graphe de commit pour le commit %s est trop longue"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "le parent du graphe de commit pour %s est %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
-msgstr ""
-"la liste de parents du graphe de commit pour le commit %s se termine trop tôt"
+msgstr "la liste de parents du graphe de commit pour le commit %s se termine trop tôt"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
-msgid ""
-"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
-msgstr ""
-"le graphe de commit a un numéro de génération nul pour le commit %s, mais "
-"non-nul ailleurs"
+msgid "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
+msgstr "le graphe de commit a un numéro de génération nul pour le commit %s, mais non-nul ailleurs"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
-msgid ""
-"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
-msgstr ""
-"le graphe de commit a un numéro de génération non-nul pour le commit %s, "
-"mais nul ailleurs"
+msgid "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
+msgstr "le graphe de commit a un numéro de génération non-nul pour le commit %s, mais nul ailleurs"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "la génération du graphe de commit pour le commit %s est %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "la génération du graphe de commit pour le commit %s est %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
-msgstr ""
-"la date de validation pour le commit %s dans le graphe de commit est "
-"%<PRIuMAX> != %<PRIuMAX>"
+msgstr "la date de validation pour le commit %s dans le graphe de commit est %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "impossible d'analyser %s"
@@ -2506,43 +2381,41 @@
 "Supprimez ce message en lançant\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "La validation %s a une signature GPG non fiable, prétendument par %s."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "La validation %s a une mauvaise signature GPG prétendument par %s."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "La validation %s n'a pas de signature GPG."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "La validation %s a une signature GPG correcte par %s\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
 "variable i18n.commitencoding to the encoding your project uses.\n"
 msgstr ""
 "Avertissement : le message de validation ne se conforme pas à UTF-8.\n"
-"Vous souhaitez peut-être le modifier après correction du message ou régler "
-"la\n"
-"variable de configuration i18n.commitencoding à l'encodage utilisé par votre "
-"projet.\n"
+"Vous souhaitez peut-être le modifier après correction du message ou régler la\n"
+"variable de configuration i18n.commitencoding à l'encodage utilisé par votre projet.\n"
 
 #: compat/obstack.c:406 compat/obstack.c:408
 msgid "memory exhausted"
 msgstr "plus de mémoire"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2557,306 +2430,333 @@
 "\t%s\n"
 "possibilité d'inclusions multiples."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "expansion impossible du chemin d'inclusion '%s'"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "les inclusions de configuration relatives doivent venir de fichiers"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
-msgstr ""
-"les conditions d'inclusion de configuration relative doivent venir de "
-"fichiers"
+msgstr "les conditions d'inclusion de configuration relative doivent venir de fichiers"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "format de config invalide : %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "nom de variable d'environnement manquant pour le configuration '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "variable d'environnement '%s' manquante pour le configuration '%.*s'"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "la clé ne contient pas de section: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "la clé ne contient pas de nom de variable : %s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "clé invalide : %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "clé invalide (retour chariot) : %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "clé de configuration vide"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "paramètre de configuration mal formé: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "formatage mal formé dans %s"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "compte faux dans %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "trop d'entrées dans %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "clé de configuration %s manquante"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "valeur de config manquante %s"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "ligne %d de config incorrecte dans le blob %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "ligne %d de config incorrecte dans le fichier %s"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "ligne %d de config incorrecte dans l'entrée standard"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "ligne %d de config incorrecte dans le blob de sous-module %s"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "ligne %d de config incorrecte dans la ligne de commande %s"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "ligne %d de config incorrecte dans %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "hors plage"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "unité invalide"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "valeur numérique de configuration invalide '%s' pour '%s' : %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
-msgstr ""
-"valeur numérique de configuration incorrecte '%s' pour '%s' dans le blob "
-"%s : %s"
+msgstr "valeur numérique de configuration incorrecte '%s' pour '%s' dans le blob %s : %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
-msgstr ""
-"valeur numérique de configuration incorrecte '%s' pour '%s' dans le fichier "
-"%s : %s"
+msgstr "valeur numérique de configuration incorrecte '%s' pour '%s' dans le fichier %s : %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
-msgstr ""
-"valeur numérique de configuration incorrecte '%s' pour '%s' dans l'entrée "
-"standard : %s"
+msgstr "valeur numérique de configuration incorrecte '%s' pour '%s' dans l'entrée standard : %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
-msgstr ""
-"valeur numérique de configuration incorrecte '%s' pour '%s' dans le blob de "
-"sous-module %s : %s"
+msgstr "valeur numérique de configuration incorrecte '%s' pour '%s' dans le blob de sous-module %s : %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
-msgstr ""
-"valeur numérique de configuration incorrecte '%s' pour '%s' dans la ligne de "
-"commande %s : %s"
+msgstr "valeur numérique de configuration incorrecte '%s' pour '%s' dans la ligne de commande %s : %s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr ""
-"valeur numérique de configuration incorrecte '%s' pour '%s' dans %s : %s"
+msgstr "valeur numérique de configuration incorrecte '%s' pour '%s' dans %s : %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "valeur booléenne de configuration invalide '%s' pour '%s'"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "impossible d'étendre le répertoire utilisateur dans : '%s'"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' pour '%s' n'est pas un horodatage valide"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "longueur d'abbrev hors plage : %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "niveau de compression zlib incorrect %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar ne devrait être qu'un unique caractère"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "mode invalide pour la création d'objet : %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "valeur mal formée pour %s"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valeur mal formée pour %s : %s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "doit être parmi nothing, matching, simple, upstream ou current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "niveau de compression du paquet %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "impossible de charger l'objet blob de config '%s'"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "la référence '%s' ne pointe pas sur un blob"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "impossible de résoudre le blob de config '%s'"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "échec de l'analyse de %s"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "lecture de la configuration de ligne de commande impossible"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "erreur inconnue pendant la lecture des fichiers de configuration"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s invalide : '%s'"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
-msgstr ""
-"la valeur '%d' de splitIndex.maxPercentChange devrait se situer entre 0 et "
-"100"
+msgstr "la valeur '%d' de splitIndex.maxPercentChange devrait se situer entre 0 et 100"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
-msgstr ""
-"impossible d'analyser '%s' depuis le configuration en ligne de commande"
+msgstr "impossible d'analyser '%s' depuis le configuration en ligne de commande"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
-msgstr ""
-"variable de configuration '%s' incorrecte dans le fichier '%s' à la ligne %d"
+msgstr "variable de configuration '%s' incorrecte dans le fichier '%s' à la ligne %d"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nom de section invalide '%s'"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s a des valeurs multiples"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "impossible d'écrire le fichier de configuration %s"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "impossible de verrouiller le fichier de configuration %s"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "ouverture de %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "motif invalide : %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "fichier de configuration invalide %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "échec de fstat sur %s"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "impossible de réaliser un map de '%s'"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "échec de chmod sur %s"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "impossible d'écrire le fichier de configuration %s"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "impossible de régler '%s' à '%s'"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "impossible de désinitialiser '%s'"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nom de section invalide : %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "valeur manquante pour '%s'"
@@ -2880,12 +2780,12 @@
 #: connect.c:81
 #, c-format
 msgid "server doesn't support '%s'"
-msgstr "Le serveur ne supporte pas '%s'"
+msgstr "le serveur ne supporte pas '%s'"
 
 #: connect.c:118
 #, c-format
 msgid "server doesn't support feature '%s'"
-msgstr "Le serveur ne supporte pas la fonctionnalité '%s'"
+msgstr "le serveur ne supporte pas la fonctionnalité '%s'"
 
 #: connect.c:129
 msgid "expected flush after capabilities"
@@ -2918,45 +2818,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "erreur de protocole : '%s' attendu"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "format d'objet spécifié par le serveur inconnu '%s'"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "réponse à ls-ref invalide : %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "vidage attendu après le listage de références"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "paquet de fin de réponse attendu après le listage de références"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "le protocole '%s' n'est pas supporté"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "impossible de positionner SO_KEEPALIVE sur la socket"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Recherche de %s… "
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "impossible de rechercher %s (port %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2965,7 +2865,7 @@
 "fait.\n"
 "Connexion à %s (port %s)… "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2975,63 +2875,65 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "fait."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "impossible de rechercher %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "port inconnu %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "nom d'hôte étrange '%s' bloqué"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "port étrange '%s' bloqué"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "impossible de démarrer un proxy %s"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
-msgstr ""
-"aucun chemin spécifié ; référez-vous à 'git help pull' pour une syntaxe "
-"d'URL valide"
+msgstr "aucun chemin spécifié ; référez-vous à 'git help pull' pour une syntaxe d'URL valide"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "le retour chariot est interdit dans les hôtes git:// et les chemins de dépôt"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "la variante ssh 'simple' ne supporte pas -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "la variante ssh 'simple' ne supporte pas -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "la variante ssh 'simple' ne supporte pas de spécifier le port"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "chemin étrange '%s' bloqué"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "fork impossible"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Vérification de la connectivité"
 
@@ -3047,17 +2949,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "impossible de fermer l'entrée standard du rev-list"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action illégal %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "Les CRLF seraient remplacés par des LF dans %s"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -3066,12 +2968,12 @@
 "Les CRLF seront remplacés par des LF dans %s.\n"
 "Le fichier conservera ses fins de ligne d'origine dans votre copie de travail"
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "Les LF seraient remplacés par des CRLF dans %s"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -3080,99 +2982,85 @@
 "Les LF seront remplacés par des CRLF dans %s.\n"
 "Le fichier conservera ses fins de ligne d'origine dans votre copie de travail"
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "Aucun BOM n'est permis dans '%s' s'il est encodé comme %s"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
-msgid ""
-"The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
-"working-tree-encoding."
-msgstr ""
-"Le fichier '%s' contient un marqueur d'ordre d'octets (BOM). Veuillez "
-"utiliser UTF-%.*s comme encodage d'arbre de travail."
+msgid "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as working-tree-encoding."
+msgstr "Le fichier '%s' contient un marqueur d'ordre d'octets (BOM). Veuillez utiliser UTF-%.*s comme encodage d'arbre de travail."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "Un BOM est obligatoire dans '%s' s'il est encodé comme %s"
 
-#: convert.c:306
+#: convert.c: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."
+msgid "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-%sLE (depending on the byte order) as working-tree-encoding."
 msgstr ""
-"Il manque un marqueur d'ordre d'octets (BOM) au fichier '%s'. Veuillez "
-"utiliser UTF-%sBE ou UTF-%sLE (selon l'ordre désiré) comme encodage d'arbre "
-"de travail."
+"Il manque un marqueur d'ordre d'octets (BOM) au fichier '%s'. Veuillez utiliser UTF-%sBE ou UTF-%sLE (selon l'ordre désiré) comme encodage d'arbre de travail."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "échec de l'encodage de '%s' de %s vers %s"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
-msgstr ""
-"encoder '%s' depuis %s vers %s puis inversement ne produit pas le même "
-"contenu"
+msgstr "encoder '%s' depuis %s vers %s puis inversement ne produit pas le même contenu"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "impossible de forker pour lancer le filtre externe '%s'"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "impossible de fournir l'entrée au filtre externe '%s'"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "le filtre externe '%s' a échoué %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "la lecture depuis le filtre externe '%s' a échoué"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "le filtre externe '%s' a échoué"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "type de filtre inattendu"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "nom de chemin trop long pour un filtre externe"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
-msgid ""
-"external filter '%s' is not available anymore although not all paths have "
-"been filtered"
-msgstr ""
-"le filtre externe '%s' n'est plus disponible bien que tous les chemins "
-"n'aient pas été filtrés"
+msgid "external filter '%s' is not available anymore although not all paths have been filtered"
+msgstr "le filtre externe '%s' n'est plus disponible bien que tous les chemins n'aient pas été filtrés"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false ne sont pas des encodages d'arbre de travail valides"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s : le filtre clean '%s' a échoué"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s : le filtre smudge '%s' a échoué"
@@ -3180,9 +3068,7 @@
 #: credential.c:96
 #, c-format
 msgid "skipping credential lookup for key: credential.%s"
-msgstr ""
-"vérification des informations d'identification sautée pour la clé : "
-"credential.%s"
+msgstr "vérification des informations d'identification sautée pour la clé : credential.%s"
 
 #: credential.c:112
 msgid "refusing to work with credential missing host field"
@@ -3190,13 +3076,12 @@
 
 #: credential.c:114
 msgid "refusing to work with credential missing protocol field"
-msgstr ""
-"refus de travailler avec un champ protocol manquant dans l'identification"
+msgstr "refus de travailler avec un champ protocol manquant dans l'identification"
 
 #: credential.c:394
 #, c-format
 msgid "url contains a newline in its %s component: %s"
-msgstr "L'url contient un retour chariot dans composant %s : %s"
+msgstr "l'url contient un retour chariot dans composant %s : %s"
 
 #: credential.c:438
 #, c-format
@@ -3293,32 +3178,35 @@
 #: delta-islands.c:390
 #, c-format
 msgid "island regex from config has too many capture groups (max=%d)"
-msgstr ""
-"l'expression rationnelle depuis la configuration a trop de groupes de "
-"capture (max=%d)"
+msgstr "l'expression rationnelle depuis la configuration a trop de groupes de capture (max=%d)"
 
 #: delta-islands.c:467
 #, c-format
 msgid "Marked %d islands, done.\n"
 msgstr "Marquage de %d îlots, fait.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "valeur inconnue pour --diff-merges : %s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base ne fonctionne pas avec des plages"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base ne fonctionne qu'avec des commits"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "impossible d'acquérir HEAD"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "aucune base de fusion trouvée"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "bases multiples de fusion trouvées"
 
@@ -3327,18 +3215,13 @@
 msgstr "git diff --no-index [<options>] <chemin> <chemin>"
 
 #: diff-no-index.c:263
-msgid ""
-"Not a git repository. Use --no-index to compare two paths outside a working "
-"tree"
-msgstr ""
-"Pas un dépôt git. Utilisez --no-index pour comparer deux chemins hors d'un "
-"arbre de travail"
+msgid "Not a git repository. Use --no-index to compare two paths outside a working tree"
+msgstr "Pas un dépôt git. Utilisez --no-index pour comparer deux chemins hors d'un arbre de travail"
 
 #: diff.c:156
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
-msgstr ""
-"  Impossible d'analyser le pourcentage de modification de dirstat '%s'\n"
+msgstr "  Impossible d'analyser le pourcentage de modification de dirstat '%s'\n"
 
 #: diff.c:161
 #, c-format
@@ -3346,36 +3229,24 @@
 msgstr "  Paramètre dirstat inconnu '%s'\n"
 
 #: diff.c:297
-msgid ""
-"color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
-"'dimmed-zebra', 'plain'"
-msgstr ""
-"le paramètre de couleur de déplacement doit être parmi 'no', 'default', "
-"'blocks', 'zebra', 'dimmed_zebra' ou 'plain'"
+msgid "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', 'plain'"
+msgstr "le paramètre de couleur de déplacement doit être parmi 'no', 'default', 'blocks', 'zebra', 'dimmed_zebra' ou 'plain'"
 
 #: diff.c:325
 #, 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'"
+msgid "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
 msgstr ""
-"mode unknown color-moved-ws inconnu '%s', les valeurs possibles sont 'ignore-"
-"space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-"
+"mode unknown color-moved-ws inconnu '%s', les valeurs possibles sont 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-"
 "change'"
 
 #: diff.c:333
-msgid ""
-"color-moved-ws: allow-indentation-change cannot be combined with other "
-"whitespace modes"
-msgstr ""
-"color-moved-ws : allow-indentation-change ne peut pas être combiné avec "
-"d'autres modes d'espace"
+msgid "color-moved-ws: allow-indentation-change cannot be combined with other whitespace modes"
+msgstr "color-moved-ws : allow-indentation-change ne peut pas être combiné avec d'autres modes d'espace"
 
 #: diff.c:410
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
-msgstr ""
-"Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'"
+msgstr "Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'"
 
 #: diff.c:470
 #, c-format
@@ -3386,35 +3257,34 @@
 "Erreurs dans la variable de configuration 'diff.dirstat' :\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "l'application de diff externe a disparu, arrêt à %s"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check et -s sont mutuellement exclusifs"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S et --find-object sont mutuellement exclusifs"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow a besoin d'une spécification de chemin unique"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valeur invalide de --stat : %s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
-#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s attend une valeur numérique"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3423,563 +3293,516 @@
 "Impossible d'analyser le paramètre de l'option --dirstat/-X :\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de modification inconnue '%c' dans --diff-fileter=%s"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valeur inconnue après ws-error-highlight=%.*s"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "impossible de résoudre '%s'"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "forme <n>/<m> attendue par %s"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "caractère attendu par %s, '%s' trouvé"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "mauvais argument --color-moved : %s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode invalide '%s' dans --color-moved-ws"
 
-#: diff.c:5063
-msgid ""
-"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
-"\"histogram\""
-msgstr ""
-"l'option diff-algorithm accept \"myers\", \"minimal\", \"patience\" et "
-"\"histogram\""
+#: diff.c:5068
+msgid "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and \"histogram\""
+msgstr "l'option diff-algorithm accept \"myers\", \"minimal\", \"patience\" et \"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argument invalide pour %s"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "regex invalide fournie à -I : '%s'"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "échec de l'analyse du paramètre de l'option --submodule : '%s'"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "mauvais argument pour --word-diff : %s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Options de format de sortie de diff"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "générer la rustine"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "supprimer la sortie des différences"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "générer les diffs avec <n> lignes de contexte"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "générer le diff en format brut"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "synonyme de '-p --raw'"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "synonyme de '-p --stat'"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "--stat pour traitement automatique"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "afficher seulement la dernière ligne de --stat"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5384
-msgid ""
-"output the distribution of relative amount of changes for each sub-directory"
-msgstr ""
-"afficher la distribution des quantités de modifications relatives pour "
-"chaque sous-répertoire"
+#: diff.c:5402
+msgid "output the distribution of relative amount of changes for each sub-directory"
+msgstr "afficher la distribution des quantités de modifications relatives pour chaque sous-répertoire"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "synonyme pour --dirstat=cumulative"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonyme pour --dirstat=files,param1,param2..."
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
-msgstr ""
-"avertir si les modifications introduisent des marqueurs de conflit ou des "
-"erreurs d'espace"
+msgstr "avertir si les modifications introduisent des marqueurs de conflit ou des erreurs d'espace"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
-msgstr ""
-"résumé succinct tel que les créations, les renommages et les modifications "
-"de mode"
+msgstr "résumé succinct tel que les créations, les renommages et les modifications de mode"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "n'afficher que les noms de fichiers modifiés"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "n'afficher que les noms et les status des fichiers modifiés"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<largeur>[,<largeur-de-nom>[,<compte>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "générer un diffstat"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<largeur>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "générer un diffstat avec la largeur indiquée"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "génerer un diffstat avec la largeur de nom indiquée"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "génerer un diffstat avec la largeur de graphe indiquée"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<compte>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "générer un diffstat avec des lignes limitées"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "générer une résumé compact dans le diffstat"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "produire un diff binaire qui peut être appliqué"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
-msgstr ""
-"afficher les noms complets des objets pre- et post-image sur les lignes "
-"\"index\""
+msgstr "afficher les noms complets des objets pre- et post-image sur les lignes \"index\""
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "afficher un diff coloré"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<sorte>"
 
-#: diff.c:5433
-msgid ""
-"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
-"diff"
-msgstr ""
-"surligner les erreurs d'espace dans les lignes 'contexte', 'ancien', "
-"'nouveau' dans le diff"
+#: diff.c:5451
+msgid "highlight whitespace errors in the 'context', 'old' or 'new' lines in the diff"
+msgstr "surligner les erreurs d'espace dans les lignes 'contexte', 'ancien', 'nouveau' dans le diff"
 
-#: diff.c:5436
-msgid ""
-"do not munge pathnames and use NULs as output field terminators in --raw or "
-"--numstat"
-msgstr ""
-"ne pas compresser les chemins et utiliser des NULs comme terminateurs de "
-"champs dans --raw ou --numstat"
+#: diff.c:5454
+msgid "do not munge pathnames and use NULs as output field terminators in --raw or --numstat"
+msgstr "ne pas compresser les chemins et utiliser des NULs comme terminateurs de champs dans --raw ou --numstat"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<préfixe>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "afficher le préfixe de source indiqué au lieu de \"a/\""
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "afficher le préfixe de destination indiqué au lieu de \"b/\""
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "préfixer toutes les lignes en sortie avec la chaîne indiquée"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "n'afficher aucun préfixe, ni de source, ni de destination"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
-msgstr ""
-"afficher le contexte entre les sections à concurrence du nombre de ligne "
-"indiqué"
+msgstr "afficher le contexte entre les sections à concurrence du nombre de ligne indiqué"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<caractère>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "spécifier le caractère pour indiquer une nouvelle ligne au lieu de '+'"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "spécifier le caractère pour indiquer une ancienne ligne au lieu de '-'"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
-msgstr ""
-"spécifier le caractère pour indiquer une ligne de contexte au lieu de ' '"
+msgstr "spécifier le caractère pour indiquer une ligne de contexte au lieu de ' '"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Options de renommage de diff"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
-msgstr ""
-"casser les modifications d'une réécrire complète en paires de suppression et "
-"création"
+msgstr "casser les modifications d'une réécrire complète en paires de suppression et création"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "détecter les renommages"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "supprimer la pré-image pour les suppressions"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "détecter les copies"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
-msgstr ""
-"utiliser les fichiers non-modifiés comme sources pour trouver des copies"
+msgstr "utiliser les fichiers non-modifiés comme sources pour trouver des copies"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "désactiver la détection de renommage"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "utiliser des blobs vides comme source de renommage"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "continuer à afficher l'historique d'un fichier au delà des renommages"
 
-#: diff.c:5497
-msgid ""
-"prevent rename/copy detection if the number of rename/copy targets exceeds "
-"given limit"
-msgstr ""
-"empêcher la détection de renommage/copie si le nombre de cibles de renommage/"
-"copie excède la limite indiquée"
+#: diff.c:5515
+msgid "prevent rename/copy detection if the number of rename/copy targets exceeds given limit"
+msgstr "empêcher la détection de renommage/copie si le nombre de cibles de renommage/copie excède la limite indiquée"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Options de l'algorithme de diff"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "produire le diff le plus petit possible"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorer les espaces lors de la comparaison de ligne"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorer des modifications du nombre d'espaces"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorer des modifications d'espace en fin de ligne"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "ignore le retour chariot en fin de ligne"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "ignorer les modifications dont les lignes sont vides"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignorer les modifications dont les lignes correspondent à <regex>"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
-msgstr ""
-"heuristique qui déplace les limites de sections de diff pour faciliter la "
-"lecture"
+msgstr "heuristique qui déplace les limites de sections de diff pour faciliter la lecture"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "générer un diff en utilisant l'algorithme de différence \"patience\""
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
-msgstr ""
-"générer un diff en utilisant l'algorithme de différence \"histogramme\""
+msgstr "générer un diff en utilisant l'algorithme de différence \"histogramme\""
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<algorithme>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "choisir un algorithme de différence"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<texte>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "générer un diff en utilisant l'algorithme de différence \"ancré\""
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
-msgstr ""
-"afficher des différences par mot, en utilisant <mode> pour délimiter les "
-"mots modifiés"
+msgstr "afficher des différences par mot, en utilisant <mode> pour délimiter les mots modifiés"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "utiliser <regex> pour décider ce qu'est un mot"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "équivalent à --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "les lignes déplacées sont colorées différemment"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "comment les espaces sont ignorés dans --color-moved"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Autres options diff"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
-msgstr ""
-"lancé depuis un sous-répertoire, exclure les modifications en dehors et "
-"afficher les chemins relatifs"
+msgstr "lancé depuis un sous-répertoire, exclure les modifications en dehors et afficher les chemins relatifs"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "traiter les fichiers comme texte"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "échanger les entrées, inverser le diff"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "sortir un code d'erreur 1 s'il y avait de différences, 0 sinon"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "désactiver tous les affichages du programme"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "autoriser l'exécution d'un assistant externe de diff"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
-msgstr ""
-"lancer les filtres externes de conversion en texte lors de la comparaison de "
-"fichiers binaires"
+msgstr "lancer les filtres externes de conversion en texte lors de la comparaison de fichiers binaires"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<quand>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
-msgstr ""
-"ignorer les modifications dans les sous-modules lors de la génération de diff"
+msgstr "ignorer les modifications dans les sous-modules lors de la génération de diff"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "spécifier comment les différences dans les sous-modules sont affichées"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "masquer les entrées 'git add -N' de l'index"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "traiter les entrées 'git add -N' comme réelles dans l'index"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<chaîne>"
 
-#: diff.c:5586
-msgid ""
-"look for differences that change the number of occurrences of the specified "
-"string"
-msgstr ""
-"rechercher les différences qui modifient le nombre d'occurrences de la "
-"chaîne spécifiée"
+#: diff.c:5604
+msgid "look for differences that change the number of occurrences of the specified string"
+msgstr "rechercher les différences qui modifient le nombre d'occurrences de la chaîne spécifiée"
 
-#: diff.c:5589
-msgid ""
-"look for differences that change the number of occurrences of the specified "
-"regex"
-msgstr ""
-"rechercher les différences qui modifient le nombre d'occurrences de la regex "
-"spécifiée"
+#: diff.c:5607
+msgid "look for differences that change the number of occurrences of the specified regex"
+msgstr "rechercher les différences qui modifient le nombre d'occurrences de la regex spécifiée"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
-msgstr ""
-"afficher toutes les modifications dans l'ensemble de modifications avec -S "
-"ou -G"
+msgstr "afficher toutes les modifications dans l'ensemble de modifications avec -S ou -G"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
-msgstr ""
-"traiter <chaîne> dans -S comme une expression rationnelle POSIX étendue"
+msgstr "traiter <chaîne> dans -S comme une expression rationnelle POSIX étendue"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "contrôler l'ordre dans lequel les fichiers apparaissent dans la sortie"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<chemin>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "afficher la modification dans le chemin spécifié en premier"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "sauter la sortie pour le chemin spécifié"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<id-objet>"
 
-#: diff.c:5600
-msgid ""
-"look for differences that change the number of occurrences of the specified "
-"object"
-msgstr ""
-"rechercher les différences qui modifient le nombre d'occurrences de l'objet "
-"indiqué"
+#: diff.c:5624
+msgid "look for differences that change the number of occurrences of the specified object"
+msgstr "rechercher les différences qui modifient le nombre d'occurrences de l'objet indiqué"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "sélectionner les fichiers par types de diff"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<fichier>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Sortie vers un fichier spécifié"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
-msgstr ""
-"détection de renommage inexact annulée à cause d'un trop grand nombre de "
-"fichiers."
+msgstr "détection de renommage inexact annulée à cause d'un trop grand nombre de fichiers."
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
-msgstr ""
-"recherche uniquement des copies par modification de chemin à cause d'un trop "
-"grand nombre de fichiers."
+msgstr "recherche uniquement des copies par modification de chemin à cause d'un trop grand nombre de fichiers."
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
-msgid ""
-"you may want to set your %s variable to at least %d and retry the command."
-msgstr ""
-"vous souhaitez peut-être régler la variable %s à au moins %d et réessayer le "
-"commande."
+msgid "you may want to set your %s variable to at least %d and retry the command."
+msgstr "vous souhaitez peut-être régler la variable %s à au moins %d et réessayer le commande."
 
 #: diffcore-order.c:24
 #, c-format
 msgid "failed to read orderfile '%s'"
 msgstr "impossible de lire le fichier de commande '%s'"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Détection de renommage inexact en cours"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Pas de chemin '%s' dans la diff"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
-msgstr ""
-"le spécificateur de chemin '%s' ne correspond à aucun fichier connu de git"
+msgstr "le spécificateur de chemin '%s' ne correspond à aucun fichier connu de git"
 
 #: dir.c:718 dir.c:747 dir.c:760
 #, c-format
@@ -3994,43 +3817,41 @@
 #: dir.c:809
 #, c-format
 msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
-msgstr ""
-"votre fichier d'extraction partielle pourrait présenter des problèmes : le "
-"motif '%s' est répété"
+msgstr "votre fichier d'extraction partielle pourrait présenter des problèmes : le motif '%s' est répété"
 
 #: dir.c:819
 msgid "disabling cone pattern matching"
 msgstr "désactivation de la correspondance de motif de cone"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "impossible d'utiliser %s comme fichier d'exclusion"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "impossible d'ouvrir le répertoire '%s'"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "echec de l'obtention d'information de kernel"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
-msgstr "Le cache non suivi est désactivé sur ce système ou sur cet endroit"
+msgstr "le cache non suivi est désactivé sur ce système ou sur cet endroit"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "fichier d'index corrompu dans le dépôt %s"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "impossible de créer les répertoires pour %s"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "impossible de migrer le répertoire git de '%s' vers '%s'"
@@ -4038,25 +3859,23 @@
 #: editor.c:74
 #, c-format
 msgid "hint: Waiting for your editor to close the file...%c"
-msgstr ""
-"suggestion : en attente de la fermeture du fichier par votre éditeur de "
-"texte…%c"
+msgstr "suggestion : en attente de la fermeture du fichier par votre éditeur de texte…%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Filtrage du contenu"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "impossible de stat le fichier '%s'"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
-msgstr "Espaces de nom de Git \"%s\""
+msgstr "espaces de nom de Git \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "impossible de régler GIT_DIR à '%s'"
@@ -4066,260 +3885,269 @@
 msgid "too many args to run %s"
 msgstr "trop d'arguments pour lancer %s"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack : liste superficielle attendue"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
-msgstr ""
-"git fetch-pack : paquet de vidage attendu après une liste superficielle"
+msgstr "git fetch-pack : paquet de vidage attendu après une liste superficielle"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack : ACK/NACK attendu, paquet de nettoyage reçu"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack : ACK/NACK attendu, '%s' reçu"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "impossible d'écrire sur un distant"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc nécessite multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ligne de superficiel invalide : %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ligne de fin de superficiel invalide : %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "objet non trouvé : %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
-msgstr "Erreur dans l'objet : %s"
+msgstr "erreur dans l'objet : %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
-msgstr "Pas de superficiel trouvé : %s"
+msgstr "pas de superficiel trouvé : %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "superficiel/non superficiel attendu, %s trouvé"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "réponse %s %d %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit invalide %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "abandon"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "fait"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s trouvé (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Marquage de %s comme terminé"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "%s déjà possédé (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack : impossible de dupliquer le démultiplexeur latéral"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "erreur de protocole : mauvais entête de paquet"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack : impossible de dupliquer %s"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack : sortie d'index de pack invalide"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "échec de %s"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "erreur dans le démultiplexer latéral"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La version du serveur est %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "Le serveur supporte %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "Le serveur ne supporte les clients superficiels"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "Le receveur ne gère pas --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "Le receveur ne gère pas --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "Le receveur ne gère pas --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "Le serveur ne supporte pas ce format d'objets de ce dépôt"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "pas de commit commun"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "le dépôt source est superficiel, clonage rejeté."
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack : échec de le récupération."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "non-correspondance des algorithmes : client %s ; serveur %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
-msgstr "Le serveur ne supporte pas l'algorithme '%s'"
+msgstr "le serveur ne supporte pas l'algorithme '%s'"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "Le serveur ne supporte pas les requêtes superficielles"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "Le serveur supporte filter"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "impossible d'écrire la requête sur le distant"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "erreur à la lecture de l'entête de section '%s'"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' attendu, '%s' reçu"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "ligne d'acquittement inattendue : '%s'"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "erreur lors du traitement des acquittements : %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "fichier paquet attendu à envoyer après 'ready'"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "aucune autre section attendue à envoyer après absence de 'ready'"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "erreur lors du traitement de l'information de superficialité : %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref attendu, '%s' trouvé"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inattendu : '%s'"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "erreur lors du traitement des références voulues : %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack : paquet de fin de réponse attendu"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "pas de HEAD distante correspondante"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "'ready' inattendu depuis le distant"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "référence distante inconnue %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Le serveur n'autorise pas de requête pour l'objet %s non annoncé"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "impossible de créer un fichier temporaire"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "impossible d'écrire la signature détachée dans '%s'"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg n'a pas pu signer les données"
 
@@ -4328,26 +4156,21 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "couleur invalide '%.*s' ignorée dans log.graphColors"
 
-#: grep.c:640
-msgid ""
-"given pattern contains NULL byte (via -f <file>). This is only supported "
-"with -P under PCRE v2"
-msgstr ""
-"le motif fourni contient des octets NUL (via -f <fichier>). Ce n'est "
-"supporté qu'avec -P avec PCRE v2"
+#: grep.c:531
+msgid "given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2"
+msgstr "le motif fourni contient des octets NUL (via -f <fichier>). Ce n'est supporté qu'avec -P avec PCRE v2"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s' : lecture de %s impossible"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90 builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "échec du stat de '%s'"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s' : lecture tronquée"
@@ -4358,8 +4181,7 @@
 
 #: help.c:24
 msgid "work on the current change (see also: git help everyday)"
-msgstr ""
-"travailler sur la modification actuelle (voir aussi : git help revisions)"
+msgstr "travailler sur la modification actuelle (voir aussi : git help revisions)"
 
 #: help.c:25
 msgid "examine the history and state (see also: git help revisions)"
@@ -4418,7 +4240,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "Ci-dessous les commandes Git habituelles dans diverses situations :"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "type de liste de commandes non supporté '%s'"
@@ -4429,9 +4251,7 @@
 
 #: help.c:429
 msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr ""
-"Référez-vous à 'git help <commande>' pour des informations sur une sous-"
-"commande spécifique"
+msgstr "Référez-vous à 'git help <commande>' pour des informations sur une sous-commande spécifique"
 
 #: help.c:434
 msgid "External commands"
@@ -4462,8 +4282,7 @@
 #: help.c:613
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
-msgstr ""
-"ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe pas."
+msgstr "ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe pas."
 
 #: help.c:618
 #, c-format
@@ -4473,8 +4292,7 @@
 #: help.c:623
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
-msgstr ""
-"Continuons dans %0.1f secondes en supposant que vous avez voulu dire '%s'."
+msgstr "Continuons dans %0.1f secondes en supposant que vous avez voulu dire '%s'."
 
 #: help.c:635
 msgid ""
@@ -4575,50 +4393,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "le nom n'est constitué que de caractères interdits : %s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "format de date invalide : %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "attendu : 'tree:<profondeur>'"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse : le support des filtres de chemin a été abandonné"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "'%s' pour 'object:type=<type>' n'est pas un type d'objet valide"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "spécificateur de filtre invalide '%s'"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
-msgstr ""
-"le caractère doit être échappé dans le spécificateur de sous-filtre : '%c'"
+msgstr "le caractère doit être échappé dans le spécificateur de sous-filtre : '%c'"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "quelque chose attendu après combine :"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "impossible de combiner des spécificateurs multiples de filtre"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
-msgstr ""
-"impossible de mettre à jour le format de dépôt pour supporter les clones "
-"partiels"
+msgstr "impossible de mettre à jour le format de dépôt pour supporter les clones partiels"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "impossible d'accéder au blob clairsemé dans '%s'"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "impossible d'analyser la donnée de filtre clairsemé dans %s"
@@ -4626,16 +4446,14 @@
 #: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
-msgstr ""
-"l'entrée '%s' dans l'arbre %s a un mode d'arbre, mais n'est pas un arbre"
+msgstr "l'entrée '%s' dans l'arbre %s a un mode d'arbre, mais n'est pas un arbre"
 
 #: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
-msgstr ""
-"l'entrée '%s' dans l'arbre %s a un mode de blob, mais n'est pas un blob"
+msgstr "l'entrée '%s' dans l'arbre %s a un mode de blob, mais n'est pas un blob"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "impossible de charger l'arbre racine pour le commit %s"
@@ -4664,126 +4482,59 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "Impossible de créer '%s.lock' : %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "valeur invalide '%s' pour lsrefs.unborn"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "vidage attendu après les arguments ls-refs"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "CRLF citées détectées"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
 #, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-"Vos modifications locales aux fichiers suivants seraient écrasées par la "
-"fusion :\n"
-"  %s"
+msgid "bad action '%s' for '%s'"
+msgstr "action invalide '%s' pour '%s'"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Déjà à jour !"
-
-#: merge-recursive.c:356
-msgid "(bad commit)\n"
-msgstr "(mauvais commit)\n"
-
-#: merge-recursive.c:379
-#, c-format
-msgid "add_cacheinfo failed for path '%s'; merge aborting."
-msgstr "échec de addinfo_cache pour le chemin '%s' ; abandon de la fusion."
-
-#: merge-recursive.c:388
-#, c-format
-msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
-msgstr "échec de addinfo_cache pour le chemin '%s' ; abandon de la fusion."
-
-#: merge-recursive.c:874
-#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "impossible de créer le chemin '%s' %s"
-
-#: merge-recursive.c:885
-#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "Suppression de %s pour faire de la place pour le sous-répertoire\n"
-
-#: merge-recursive.c:899 merge-recursive.c:918
-msgid ": perhaps a D/F conflict?"
-msgstr ": peut-être un conflit D/F ?"
-
-#: merge-recursive.c:908
-#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "refus de perdre le fichier non suivi '%s'"
-
-#: merge-recursive.c:949 builtin/cat-file.c:41
-#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "impossible de lire l'objet %s '%s'"
-
-#: merge-recursive.c:954
-#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "blob attendu pour %s '%s'"
-
-#: merge-recursive.c:979
-#, c-format
-msgid "failed to open '%s': %s"
-msgstr "échec à l'ouverture de '%s' : %s"
-
-#: merge-recursive.c:990
-#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "échec à la création du lien symbolique '%s' : %s"
-
-#: merge-recursive.c:995
-#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "ne sait pas traiter %06o %s '%s'"
-
-#: merge-recursive.c:1191
+#: merge-ort.c:1116 merge-recursive.c:1205
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Échec de la fusion du sous-module %s (non extrait)"
 
-#: merge-recursive.c:1198
+#: merge-ort.c:1125 merge-recursive.c:1212
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Échec de fusion du sous-module %s (commits non présents)"
 
-#: merge-recursive.c:1205
+#: merge-ort.c:1134 merge-recursive.c:1219
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr "Échec de la fusion du sous-module %s (les commits ne descendent pas de la base de fusion)"
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Note : Avance rapide du sous-module %s à %s"
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Échec de la fusion du sous-module %s"
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
 msgstr ""
-"Échec de la fusion du sous-module %s (les commits ne descendent pas de la "
-"base de fusion)"
+"Échec de fusion du sous-module %s mais une résolution possible de fusion existe :\n"
+"%s\n"
 
-#: merge-recursive.c:1213 merge-recursive.c:1225
-#, c-format
-msgid "Fast-forwarding submodule %s to the following commit:"
-msgstr "Avance rapide du sous-module %s au commit suivant :"
-
-#: merge-recursive.c:1216 merge-recursive.c:1228
-#, c-format
-msgid "Fast-forwarding submodule %s"
-msgstr "Avance rapide du sous-module %s"
-
-#: merge-recursive.c:1251
-#, c-format
-msgid "Failed to merge submodule %s (merge following commits not found)"
-msgstr ""
-"Échec de fusion du sous-module %s (fusion suivant les commits non trouvée)"
-
-#: merge-recursive.c:1255
-#, c-format
-msgid "Failed to merge submodule %s (not fast-forward)"
-msgstr "Échec de fusion du sous-module %s (pas en avance rapide)"
-
-#: merge-recursive.c:1256
-msgid "Found a possible merge resolution for the submodule:\n"
-msgstr "Résolution possible de fusion trouvée pour le sous-module :\n"
-
-#: merge-recursive.c:1259
+#: merge-ort.c:1183 merge-recursive.c:1273
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4800,307 +4551,412 @@
 "\n"
 "qui acceptera cette suggestion.\n"
 
-#: merge-recursive.c:1268
+#: merge-ort.c:1196
 #, c-format
-msgid "Failed to merge submodule %s (multiple merges found)"
-msgstr "Échec de fusion du sous-module %s (plusieurs fusions trouvées)"
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Échec de fusion du sous-module %s mais de multiples solutions de fusion existent :\n"
+"%s"
 
-#: merge-recursive.c:1341
+#: merge-ort.c:1415 merge-recursive.c:1362
 msgid "Failed to execute internal merge"
 msgstr "Échec à l'exécution de la fusion interne"
 
-#: merge-recursive.c:1346
+#: merge-ort.c:1420 merge-recursive.c:1367
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Impossible d'ajouter %s à la base de données"
 
-#: merge-recursive.c:1378
+#: merge-ort.c:1427 merge-recursive.c:1400
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Fusion automatique de %s"
 
-#: merge-recursive.c:1402
+#: merge-ort.c:1566 merge-recursive.c:2122
 #, c-format
-msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
-msgstr ""
-"Erreur : refus de perdre le fichier non suivi %s ; écriture dans %s à la "
-"place."
+msgid "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of implicit directory rename(s) putting the following path(s) there: %s."
+msgstr "CONFLIT (renommage implicite de répertoire) : le répertoire/fichier %s gêne des renommages implicites de répertoire déplaçant les chemins suivants : %s."
 
-#: merge-recursive.c:1474
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid "CONFLICT (implicit dir rename): Cannot map more than one path to %s; implicit directory renames tried to put these paths there: %s"
+msgstr "CONFLIT (renommage implicite de répertoire) : impossible de transformer plusieurs chemins sur %s ; les chemins concernés sont : %s"
+
+#: merge-ort.c:1634
 #, c-format
 msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree."
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was renamed to multiple other directories, with no destination getting a majority of the "
+"files."
 msgstr ""
-"CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
-"%s laissée dans l'arbre."
+"CONFLIT (renommage de répertoire coupé) : le renommage de %s n'est pas clair parce que le répertoire a été renommé en plusieurs autres répertoires, sans aucune "
+"destination récupérant la majorité des fichiers."
 
-#: merge-recursive.c:1479
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was renamed."
+msgstr "AVERTISSEMENT : ne renomme pas %s->%s dans %s, parce que %s lui-même a été renommé."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid "Path updated: %s added in %s inside a directory that was renamed in %s; moving it to %s."
+msgstr "Chemin mis à jour : %s ajouté dans %s dans un répertoire qui a été renommé en %s ; déplacé dans %s."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid "Path updated: %s renamed to %s in %s, inside a directory that was renamed in %s; moving it to %s."
+msgstr "Chemin mis à jour : %s renommé en %s dans %s, dans un répertoire qui a été renommé en %s ; déplacé dans %s."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid "CONFLICT (file location): %s added in %s inside a directory that was renamed in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"CONFLIT (localisation de fichier) : %s ajouté dans %s dans un répertoire qui a été renommé dans %s, ce qui suggère qu'il devrait peut-être être déplacé vers %s."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"CONFLIT (localisation de fichier) : %s renommé en %s dans %s, dans un répertoire qui a été renommé dans %s, ce qui suggère qu'il devrait peut-être être déplacé "
+"vers %s."
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr "CONFLIT (renommage/renommage) : %s renommé en %s dans %s et en %s dans %s."
+
+#: merge-ort.c:2198
 #, c-format
 msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
-"left in tree."
+"CONFLICT (rename involved in collision): rename of %s -> %s has content conflicts AND collides with another path; this may result in nested conflict markers."
 msgstr ""
-"CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version "
-"%s de %s laissée dans l'arbre."
+"CONFLIT (renommage au sein d'une collision) : lre renommage de %s -> %s a des conflits de contenu ET entre en collision avec un autre chemin ; ceci peut "
+"resulter en des marqueurs de conflit imbriqués."
 
-#: merge-recursive.c:1486
+#: merge-ort.c:2217 merge-ort.c:2241
 #, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
-"in tree at %s."
-msgstr ""
-"CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
-"%s laissée dans l'arbre dans le fichier %s."
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr "CONFLIT (renommage/suppression) : Renommage de %s en %s dans %s mais supprimé dans %s."
 
-#: merge-recursive.c:1491
-#, c-format
-msgid ""
-"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
-"left in tree at %s."
-msgstr ""
-"CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version "
-"%s de %s laissée dans l'arbre dans le fichier %s."
-
-#: merge-recursive.c:1526
-msgid "rename"
-msgstr "renommage"
-
-#: merge-recursive.c:1526
-msgid "renamed"
-msgstr "renommé"
-
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
-#, c-format
-msgid "Refusing to lose dirty file at %s"
-msgstr "Refus de perdre le fichier modifié %s"
-
-#: merge-recursive.c:1587
-#, c-format
-msgid "Refusing to lose untracked file at %s, even though it's in the way."
-msgstr "Refus de perdre le fichier non suivi %s, même s'il gêne."
-
-#: merge-recursive.c:1645
-#, c-format
-msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
-msgstr ""
-"CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s"
-
-#: merge-recursive.c:1676
-#, c-format
-msgid "%s is a directory in %s adding as %s instead"
-msgstr "%s est un répertoire dans %s ajouté plutôt comme %s"
-
-#: merge-recursive.c:1681
-#, c-format
-msgid "Refusing to lose untracked file at %s; adding as %s instead"
-msgstr "Refus de perdre le fichier non suivi %s ; ajout comme %s à la place"
-
-#: merge-recursive.c:1708
-#, c-format
-msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
-msgstr ""
-"CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche "
-"\"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s"
-
-#: merge-recursive.c:1713
-msgid " (left unresolved)"
-msgstr " (laissé non résolu)"
-
-#: merge-recursive.c:1805
-#, c-format
-msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
-msgstr ""
-"CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'-"
-">'%s' dans %s"
-
-#: merge-recursive.c:2068
-#, c-format
-msgid ""
-"CONFLICT (directory rename split): Unclear where to place %s because "
-"directory %s was renamed to multiple other directories, with no destination "
-"getting a majority of the files."
-msgstr ""
-"CONFLIT (renommage de répertoire coupé) : la place de %s n'est pas claire "
-"parce que le répertoire %s a été renommé en plusieurs autres répertoires, "
-"sans aucune destination récupérant la majorité des fichiers."
-
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"CONFLIT (renommage implicite de répertoire) : le répertoire/fichier %s gêne "
-"des renommages implicites de répertoire déplaçant les chemins suivants : %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"CONFLIT (renommage implicite de répertoire) : impossible de transformer "
-"plusieurs chemins sur %s ; les chemins concernés sont : %s"
-
-#: merge-recursive.c:2202
-#, c-format
-msgid ""
-"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
-">%s in %s"
-msgstr ""
-"CONFLIT (renommage/renommage) : renommage du répertoire %s->%s dans %s. "
-"Renommage de répertoire %s->%s dans %s"
-
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"AVERTISSEMENT : ne renomme pas %s->%s dans %s, parce que %s lui-même a été "
-"renommé."
-
-#: merge-recursive.c:2973
+#: merge-ort.c:2550 merge-recursive.c:3002
 #, c-format
 msgid "cannot read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: merge-recursive.c:2976
+#: merge-ort.c:2553 merge-recursive.c:3005
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'objet %s n'est pas un blob"
 
-#: merge-recursive.c:3040
-msgid "modify"
-msgstr "modification"
+#: merge-ort.c:2981
+#, c-format
+msgid "CONFLICT (file/directory): directory in the way of %s from %s; moving it to %s instead."
+msgstr "CONFLIT (fichier/répertoire) : répertoire au milieu de %s depuis %s ; déplacement dans %s à la place."
 
-#: merge-recursive.c:3040
-msgid "modified"
-msgstr "modifié"
+#: merge-ort.c:3055
+#, c-format
+msgid "CONFLICT (distinct types): %s had different types on each side; renamed both of them so each can be recorded somewhere."
+msgstr "CONFLIT (types différents) : %s a des types différents des deux côtés ; renommé chacune de manière à pouvoir enregistrer les deux quelque part."
 
-#: merge-recursive.c:3052
+#: merge-ort.c:3062
+#, c-format
+msgid "CONFLICT (distinct types): %s had different types on each side; renamed one of them so each can be recorded somewhere."
+msgstr "CONFLIT (types différents) : %s a des types différents des deux côtés ; renommé une d'entre elles de manière à pouvoir enregistrer les deux quelque part."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
 msgid "content"
 msgstr "contenu"
 
-#: merge-recursive.c:3056
+#: merge-ort.c:3164 merge-recursive.c:3085
 msgid "add/add"
 msgstr "ajout/ajout"
 
-#: merge-recursive.c:3079
-#, c-format
-msgid "Skipped %s (merged same as existing)"
-msgstr "%s sauté (fusion identique à l'existant)"
-
-#: merge-recursive.c:3101
+#: merge-ort.c:3166 merge-recursive.c:3130
 msgid "submodule"
 msgstr "sous-module"
 
-#: merge-recursive.c:3102
+#: merge-ort.c:3168 merge-recursive.c:3131
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLIT (%s) : Conflit de fusion dans %s"
 
-#: merge-recursive.c:3132
+#: merge-ort.c:3198
+#, c-format
+msgid "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s of %s left in tree."
+msgstr "CONFLIT (modification/suppression) : %s supprimé dans %s et modifié dans %s. Version %s de %s laissée dans l'arbre."
+
+#: merge-ort.c:3433
+#, c-format
+msgid "Note: %s not up to date and in way of checking out conflicted version; old copy renamed to %s"
+msgstr "Note :%s pas à jour et au milieu de l'extraction d'une version conflictuelle ; la vielle copie a été renommée en %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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "échec de collecte l'information de fusion pour les arbres %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+"Vos modifications locales aux fichiers suivants seraient écrasées par la fusion :\n"
+"  %s"
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Déjà à jour."
+
+#: merge-recursive.c:356
+msgid "(bad commit)\n"
+msgstr "(mauvais commit)\n"
+
+#: merge-recursive.c:379
+#, c-format
+msgid "add_cacheinfo failed for path '%s'; merge aborting."
+msgstr "échec de addinfo_cache pour le chemin '%s' ; abandon de la fusion."
+
+#: merge-recursive.c:388
+#, c-format
+msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
+msgstr "échec de addinfo_cache pour le chemin '%s' ; abandon de la fusion."
+
+#: merge-recursive.c:876
+#, c-format
+msgid "failed to create path '%s'%s"
+msgstr "impossible de créer le chemin '%s' %s"
+
+#: merge-recursive.c:887
+#, c-format
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "Suppression de %s pour faire de la place pour le sous-répertoire\n"
+
+#: merge-recursive.c:901 merge-recursive.c:920
+msgid ": perhaps a D/F conflict?"
+msgstr ": peut-être un conflit D/F ?"
+
+#: merge-recursive.c:910
+#, c-format
+msgid "refusing to lose untracked file at '%s'"
+msgstr "refus de perdre le fichier non suivi '%s'"
+
+#: merge-recursive.c:951 builtin/cat-file.c:41
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr "impossible de lire l'objet %s '%s'"
+
+#: merge-recursive.c:956
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr "blob attendu pour %s '%s'"
+
+#: merge-recursive.c:981
+#, c-format
+msgid "failed to open '%s': %s"
+msgstr "échec à l'ouverture de '%s' : %s"
+
+#: merge-recursive.c:992
+#, c-format
+msgid "failed to symlink '%s': %s"
+msgstr "échec à la création du lien symbolique '%s' : %s"
+
+#: merge-recursive.c:997
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "ne sait pas traiter %06o %s '%s'"
+
+#: merge-recursive.c:1227 merge-recursive.c:1239
+#, c-format
+msgid "Fast-forwarding submodule %s to the following commit:"
+msgstr "Avance rapide du sous-module %s au commit suivant :"
+
+#: merge-recursive.c:1230 merge-recursive.c:1242
+#, c-format
+msgid "Fast-forwarding submodule %s"
+msgstr "Avance rapide du sous-module %s"
+
+#: merge-recursive.c:1265
+#, c-format
+msgid "Failed to merge submodule %s (merge following commits not found)"
+msgstr "Échec de fusion du sous-module %s (fusion suivant les commits non trouvée)"
+
+#: merge-recursive.c:1269
+#, c-format
+msgid "Failed to merge submodule %s (not fast-forward)"
+msgstr "Échec de fusion du sous-module %s (pas en avance rapide)"
+
+#: merge-recursive.c:1270
+msgid "Found a possible merge resolution for the submodule:\n"
+msgstr "Résolution possible de fusion trouvée pour le sous-module :\n"
+
+#: merge-recursive.c:1282
+#, c-format
+msgid "Failed to merge submodule %s (multiple merges found)"
+msgstr "Échec de fusion du sous-module %s (plusieurs fusions trouvées)"
+
+#: merge-recursive.c:1424
+#, c-format
+msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
+msgstr "Erreur : refus de perdre le fichier non suivi %s ; écriture dans %s à la place."
+
+#: merge-recursive.c:1496
+#, c-format
+msgid "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left in tree."
+msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre."
+
+#: merge-recursive.c:1501
+#, c-format
+msgid "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s left in tree."
+msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version %s de %s laissée dans l'arbre."
+
+#: merge-recursive.c:1508
+#, c-format
+msgid "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left in tree at %s."
+msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre dans le fichier %s."
+
+#: merge-recursive.c:1513
+#, c-format
+msgid "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s left in tree at %s."
+msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version %s de %s laissée dans l'arbre dans le fichier %s."
+
+#: merge-recursive.c:1548
+msgid "rename"
+msgstr "renommage"
+
+#: merge-recursive.c:1548
+msgid "renamed"
+msgstr "renommé"
+
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
+#, c-format
+msgid "Refusing to lose dirty file at %s"
+msgstr "Refus de perdre le fichier modifié %s"
+
+#: merge-recursive.c:1609
+#, c-format
+msgid "Refusing to lose untracked file at %s, even though it's in the way."
+msgstr "Refus de perdre le fichier non suivi %s, même s'il gêne."
+
+#: merge-recursive.c:1667
+#, c-format
+msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
+msgstr "CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s"
+
+#: merge-recursive.c:1698
+#, c-format
+msgid "%s is a directory in %s adding as %s instead"
+msgstr "%s est un répertoire dans %s ajouté plutôt comme %s"
+
+#: merge-recursive.c:1703
+#, c-format
+msgid "Refusing to lose untracked file at %s; adding as %s instead"
+msgstr "Refus de perdre le fichier non suivi %s ; ajout comme %s à la place"
+
+#: merge-recursive.c:1730
+#, c-format
+msgid "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s\"->\"%s\" in \"%s\"%s"
+msgstr "CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche \"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s"
+
+#: merge-recursive.c:1735
+msgid " (left unresolved)"
+msgstr " (laissé non résolu)"
+
+#: merge-recursive.c:1827
+#, c-format
+msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgstr "CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'->'%s' dans %s"
+
+#: merge-recursive.c:2090
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to place %s because directory %s was renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"CONFLIT (renommage de répertoire coupé) : la place de %s n'est pas claire parce que le répertoire %s a été renommé en plusieurs autres répertoires, sans aucune "
+"destination récupérant la majorité des fichiers."
+
+#: merge-recursive.c:2224
+#, c-format
+msgid "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s->%s in %s"
+msgstr "CONFLIT (renommage/renommage) : renommage du répertoire %s->%s dans %s. Renommage de répertoire %s->%s dans %s"
+
+#: merge-recursive.c:3069
+msgid "modify"
+msgstr "modification"
+
+#: merge-recursive.c:3069
+msgid "modified"
+msgstr "modifié"
+
+#: merge-recursive.c:3108
+#, c-format
+msgid "Skipped %s (merged same as existing)"
+msgstr "%s sauté (fusion identique à l'existant)"
+
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Ajout plutôt comme %s"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Chemin mis à jour : %s ajouté dans %s dans un répertoire qui a été renommé "
-"en %s ; déplacé dans %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"CONFLIT (localisation de fichier) : %s ajouté dans %s dans un répertoire qui "
-"a été renommé dans %s, ce qui suggère qu'il devrait peut-être être déplacé "
-"vers %s."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Chemin mis à jour : %s renommé en %s dans %s, dans un répertoire qui a été "
-"renommé en %s ; déplacé dans %s."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"CONFLIT (localisation de fichier) : %s renommé en %s dans %s, dans un "
-"répertoire qui a été renommé dans %s, ce qui suggère qu'il devrait peut-être "
-"être déplacé vers %s."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "Suppression de %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "fichier/répertoire"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "répertoire/fichier"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
-msgstr ""
-"CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s"
+msgstr "CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s"
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "Ajout de %s"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLIT (ajout/ajout) : Conflit de fusion dans %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "échec de fusion des arbres %s et %s"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Fusion :"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u ancêtre commun trouvé :"
 msgstr[1] "%u ancêtres communs trouvés :"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "la fusion n'a pas retourné de commit"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Impossible d'analyser l'objet '%s'"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900 builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "Impossible d'écrire l'index."
 
@@ -5108,194 +4964,192 @@
 msgid "failed to read the cache"
 msgstr "impossible de lire le cache"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "impossible d'écrire le nouveau fichier d'index"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "l'étalement de l'OID d'index multi-paquet n'a pas la bonne taille"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "le fichier d'index multi-paquet %s est trop petit"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
-msgstr ""
-"la signature de l'index multi-paquet 0x%08x ne correspond pas à la signature "
-"0x%08x"
+msgstr "la signature de l'index multi-paquet 0x%08x ne correspond pas à la signature 0x%08x"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "la version d'index multi-paquet %d n'est pas reconnue"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
-msgstr ""
-"la version d'empreinte d'index multi-paquet %u ne correspond pas à la "
-"version %u"
+msgstr "la version d'empreinte d'index multi-paquet %u ne correspond pas à la version %u"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "décalage de section invalide (trop grand)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr ""
-"identifiant de terminaison de tronçon d'index multi-paquet terminant "
-"apparaît plus tôt qu'attendu"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "index multi-paquet manque de tronçon de nom de paquet"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "index multi-paquet manque de tronçon de d'étalement OID requis"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
-msgstr "index multi-paquet manque de tronçon de recherche OID"
+msgstr "index multi-paquet manque de tronçon de recherche OID requis"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
-msgstr "index multi-paquet manque de tronçon de décalage d'objet"
+msgstr "index multi-paquet manque de tronçon de décalage d'objet requis"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
-msgstr ""
-"index multi-paquet les noms de paquets sont en désordre : '%s' avant '%s'"
+msgstr "index multi-paquet les noms de paquets sont en désordre : '%s' avant '%s'"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "mauvais pack-int-id : %u (%u paquets au total)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
-msgstr ""
-"l'index multi-paquet stock un décalage en 64-bit, mais off_t est trop petit"
+msgstr "l'index multi-paquet stock un décalage en 64-bit, mais off_t est trop petit"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "échec de l'ajout du fichier paquet '%s'"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "échec à l'ouverture du fichier paquet '%s'"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "échec de localisation de l'objet %d dans le fichier paquet"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "impossible de stocker le fichier d'index inversé"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Ajout de fichiers paquet à un index multi-paquet"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "fichier paquet à éliminer %s non trouvé"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "paquet préféré inconnu : %s"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "le paquet préféré '%s' est expiré"
+
+#: midx.c:1045
 msgid "no pack files to index."
-msgstr "Aucun fichier paquet à l'index."
+msgstr "aucun fichier paquet à l'index."
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Écriture des sections dans l'index multi-paquet"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "échec de la suppression de %s"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "échec du nettoyage de l'index de multi-paquet à %s"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "le fichier d'index multi-paquet existe mais n'a pu être analysé"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Recherche de fichiers paquets référencés"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
-msgid ""
-"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
-msgstr ""
-"étalement oid en désordre : étalement[%d] = %<PRIx32> > %<PRIx32> = "
-"étalement[%d]"
+msgid "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
+msgstr "étalement oid en désordre : étalement[%d] = %<PRIx32> > %<PRIx32> = étalement[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "le midx ne contient aucun oid"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Vérification de l'ordre des OID dans l'index multi-paquet"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "recherche d'oid en désordre : oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Classement des objets par fichier paquet"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Vérification des décalages des objets"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "échec de la lecture de l'élément de cache pour oid[%d] = %s"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "impossible de lire le fichier paquet %s"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "décalage d'objet incorrect pour oid[%d] = %s : %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Comptage des objets référencés"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Recherche et effacement des fichiers paquets non-référencés"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
-msgstr "Impossible de démarrer le groupement d'objets"
+msgstr "impossible de démarrer le groupement d'objets"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
-msgstr "Impossible de finir le groupement d'objets"
+msgstr "impossible de finir le groupement d'objets"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "impossible de créer le fil lazy_dir : %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "impossible de créer le fil lazy_name : %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "impossible de joindre le fil lazy_name : %s"
@@ -5304,12 +5158,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 ""
 "Vous n'avez pas terminé votre précédente fusion de notes (%s existe).\n"
-"Veuillez utiliser 'git notes merge --commit' ou 'git notes merge --abort' "
-"pour valider/abandonner la fusion en cours avant d'en démarrer une nouvelle."
+"Veuillez utiliser 'git notes merge --commit' ou 'git notes merge --abort' pour valider/abandonner la fusion en cours avant d'en démarrer une nouvelle."
 
 #: notes-merge.c:284
 #, c-format
@@ -5339,6 +5191,357 @@
 msgid "Bad %s value: '%s'"
 msgstr "Mauvaise valeur de %s : '%s'"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "le répertoire objet %s n'existe pas ; vérifiez .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "impossible de normaliser le chemin d'objet alternatif : %s"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s : magasins d'objets alternatifs ignorés, récursion trop profonde"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "impossible de normaliser le répertoire d'objet : %s"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "impossible d'ouvrir (fdopen) le fichier verrou des alternatives"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "lecture du fichier d'alternatives impossible"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "impossible de déplacer le nouveau fichier d'alternative"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "le chemin '%s' n'existe pas"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "extraire le dépôt de référence '%s' comme une extraction liée n'est pas encore supporté."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "le dépôt de référence '%s' n'est pas un dépôt local."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "le dépôt de référence '%s' est superficiel"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "le dépôt de référence '%s' est greffé"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "ligne invalide pendant l'analyse des refs alternatives : %s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "essai de mmap %<PRIuMAX> au delà de la limite %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "échec de mmap"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "le fichier objet %s est vide"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "objet libre corrompu '%s'"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "données incorrectes à la fin de l'objet libre '%s'"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "type d'objet invalide"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "impossible de dépaqueter l'entête %s avec --allow-unknow-type"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "impossible de dépaqueter l'entête %s"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "impossible d'analyser l'entête %s avec --allow-unknow-type"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "impossible d'analyser l'entête %s"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "impossible de lire l'objet %s"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "remplacement %s non trouvé pour %s"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "l'objet libre %s (stocké dans %s) est corrompu"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "l'objet empaqueté %s (stocké dans %s) est corrompu"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "impossible d'écrire le fichier %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "impossible de régler les droits de '%s'"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "erreur d'écriture d'un fichier"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "erreur en fermeture du fichier d'objet esseulé"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr "droits insuffisants pour ajouter un objet à la base de données %s du dépôt"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "impossible de créer un fichier temporaire"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "impossible d'écrire le fichier d'objet esseulé"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "impossible de compresser le nouvel objet %s (%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "échec de deflateEnd sur l'objet %s (%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "données de source d'objet instable pour %s"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "échec de utime() sur %s"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "impossible de lire l'objet pour %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "commit corrompu"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "étiquette corrompue"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "erreur de lecture à l'indexation de %s"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "lecture tronquée pendant l'indexation de %s"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s : échec de l'insertion dans la base de données"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s : type de fichier non supporté"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s n'est pas un objet valide"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s n'est pas un objet '%s' valide"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "impossible d'ouvrir %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "incohérence de hachage pour %s (%s attendu)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "impossible de mmap %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "impossible de dépaqueter l'entête de %s"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "impossible d'analyser l'entête de %s"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "impossible de dépaqueter le contenu de %s"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "l'id court d'objet %s est ambigu"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Les candidats sont :"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git ne crée normalement jamais de référence qui se termine par 40\n"
+"caractères hexa car elle serait ignorée si vous spécifiez juste\n"
+"40-hexa. Ces références peuvent être créées par erreur. Par exemple,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"où \"$br\" est d'une manière ou d'une autre vide et une référence 40-hexa est créée.\n"
+"Veuillez examiner ces références et peut-être les supprimer. Désactivez ce message\n"
+"en lançant \"git config advice.objectNameWarning false\""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "le journal de '%.*s' ne remonte qu'à %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "le journal de '%.*s' n'a que %d entrées"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "le chemin '%s' existe sur le disque, mais pas dans '%.*s'"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"le chemin '%s' existe, mais pas '%s'\n"
+"conseil : peut-être vouliez-vous dire '%.*s:%s', soit '%.*s:./%s' ?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "le chemin '%s' n'existe pas dans '%.*s'"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"le chemin '%s' est dans l'index, mais pas à l'étape %d\n"
+"conseil : vous vouliez peut-être dire ':%d:%s' ?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"le chemin '%s' est dans l'index, mais pas '%s'\n"
+"conseil : peut-être vouliez-vous dire ':%d:%s', soit '%d:./%s' ?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "le chemin '%s' existe sur le disque, mais pas dans l'index"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "le chemin '%s' n'existe pas (ni sur le disque, ni dans l'index)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "la syntaxe de chemin relatif ne peut pas être utilisée hors de l'arbre de travail"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "nom d'objet invalide : '%.*s'."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5349,40 +5552,88 @@
 msgid "object %s is a %s, not a %s"
 msgstr "l'objet %s est de type %s, pas de type %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "l'objet %s a un id de type inconnu %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "impossible d'analyser l'objet : %s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "incohérence de hachage %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "impossible de récupérer la taille de %s"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "impossible de récupérer l'utilisation du disque de %s"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "le fichier d'index inversé %s est trop petit"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "le fichier d'index inversé %s est corrompu"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "le fichier d'index inversé %s a une signature inconnue"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "le fichier d'index inverse %s a une version non gérée %<PRIu32>"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "le fichier d'index inverse %s a un id d'empreinte non géré %<PRIu32>"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "impossible de lire et vérifier à la fois l'index inverse"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "stat impossible de %s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "échec de rendre %s lisible"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "impossible d'écrire le fichier de prometteur '%s'"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset avant la fin du fichier paquet (.idx cassé ?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "offset avant le début de l'index de paquet pour %s (index corrompu ?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
-msgstr ""
-"offset au delà de la fin de l'index de paquet pour %s (index tronqué ?)"
+msgstr "offset au delà de la fin de l'index de paquet pour %s (index tronqué ?)"
 
 #: parse-options-cb.c:20 parse-options-cb.c:24
 #, c-format
@@ -5444,31 +5695,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "vouliez-vous dire `--%s` (avec deux signes moins)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "alias pour --%s"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "option inconnue « %s »"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "bascule inconnue « %c »"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "option non-ascii inconnue dans la chaîne : '%s'"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "usage : %s"
@@ -5476,17 +5727,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "   ou : %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-NUM"
 
@@ -5495,86 +5746,76 @@
 msgid "Could not make %s writable by group"
 msgstr "Impossible de rendre %s inscriptible pour le groupe"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
-msgstr ""
-"Le caractère d'échappement '\\\\' interdit comme dernier caractère dans une "
-"valeur d'attribut"
+msgstr "Le caractère d'échappement '\\\\' interdit comme dernier caractère dans une valeur d'attribut"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Une seule spécification 'attr:' est autorisée."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "un spécificateur d'attribut ne peut pas être vide"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "nom d'attribut invalide %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
-msgstr ""
-"les réglages de spécificateurs de chemin généraux 'glob' et 'noglob' sont "
-"incompatibles"
+msgstr "les réglages de spécificateurs de chemin généraux 'glob' et 'noglob' sont incompatibles"
 
-#: pathspec.c:266
-msgid ""
-"global 'literal' pathspec setting is incompatible with all other global "
-"pathspec settings"
-msgstr ""
-"le réglage global de spécificateur de chemin 'literal' est incompatible avec "
-"tous les autres réglages globaux de spécificateur de chemin"
+#: pathspec.c:287
+msgid "global 'literal' pathspec setting is incompatible with all other global pathspec settings"
+msgstr "le réglage global de spécificateur de chemin 'literal' est incompatible avec tous les autres réglages globaux de spécificateur de chemin"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "paramètre invalide pour le spécificateur magique de chemin 'prefix'"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "La spécification magique de chemin '%.*s' est invalide dans '%s'"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "')' manquante à la fin du spécificateur magique de chemin dans '%s'"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Spécificateur magique '%c' non implémenté dans '%s'"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s : 'literal' et 'glob' sont incompatibles"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s : '%s' est hors du dépôt à '%s'"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s' (mnémonique : '%c')"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
-msgstr ""
-"%s : le spécificateur magique de chemin n'est pas supporté par cette "
-"commande : %s"
+msgstr "%s : le spécificateur magique de chemin n'est pas supporté par cette commande : %s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "le chemin '%s' est au-delà d'un lien symbolique"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "la ligne est mal citée : %s"
@@ -5595,7 +5836,7 @@
 msgid "flush packet write failed"
 msgstr "échec de l'écriture du vidage de paquet"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "erreur de protocole : ligne impossiblement trop longue"
 
@@ -5603,159 +5844,156 @@
 msgid "packet write with format failed"
 msgstr "échec de l'écriture d'un paquet avec format"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
-msgstr ""
-"échec de l'écriture d'un paquet ‑ les données dépassent la taille maximale "
-"d'un paquet"
+msgstr "échec de l'écriture d'un paquet ‑ les données dépassent la taille maximale d'un paquet"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "échec de l'écriture d'un paquet"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "échec de l'écriture d'un paquet : %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "erreur de lecture"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
-msgstr "L'hôte distant a fermé la connexion de manière inattendue"
+msgstr "l'hôte distant a fermé la connexion de manière inattendue"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "erreur de protocole : mauvais caractère de longueur de ligne : %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "erreur de protocole : mauvaise longueur de ligne %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "erreur distante : %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "Rafraîchissement de l'index"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "impossible de créer le lstat en fil : %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "impossible d'analyser le format --pretty"
 
 #: promisor-remote.c:30
 msgid "promisor-remote: unable to fork off fetch subprocess"
-msgstr ""
-"promisor-remote : impossible de créer un sous-processus de récupération"
+msgstr "promisor-remote : impossible de créer un sous-processus de récupération"
 
 #: promisor-remote.c:35 promisor-remote.c:37
 msgid "promisor-remote: could not write to fetch subprocess"
-msgstr ""
-"promisor-remote : impossible d'écrire vers un sous-processus de récupération"
+msgstr "promisor-remote : impossible d'écrire vers un sous-processus de récupération"
 
 #: promisor-remote.c:41
 msgid "promisor-remote: could not close stdin to fetch subprocess"
-msgstr ""
-"promisor-remote : impossible de fermer l'entrée standard du sous-processus "
-"de récupération"
+msgstr "promisor-remote : impossible de fermer l'entrée standard du sous-processus de récupération"
 
 #: promisor-remote.c:53
 #, c-format
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "un nom de prometteur distant ne peut pas commencer par '/' : %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info : vidage attendu après les arguments"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Suppression des objets dupliqués"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "impossible de démarrer `log`"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "impossible de lire la sortie de `log`"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "impossible d'analyser le commit '%s'"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
-msgid ""
-"could not parse first line of `log` output: did not start with 'commit ': "
-"'%s'"
-msgstr ""
-"impossible d'analyser la première ligne de la sortie de `log` : ne commence "
-"pas par 'commit' : '%s'"
+msgid "could not parse first line of `log` output: did not start with 'commit ': '%s'"
+msgstr "impossible d'analyser la première ligne de la sortie de `log` : ne commence pas par 'commit' : '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "impossible d'analyser l'entête git '%.*s'"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "échec de la génération de diff"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only et --right-only sont mutuellement exclusifs"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "impossible d'analyser le journal pour '%s'"
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "pas d'ajout d'alias de fichier '%s'(« %s » existe déjà dans l'index)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "impossible de créer un blob vide dans la base de donnée d'objets"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
-msgstr ""
-"%s : ne peut ajouter que des fichiers normaux, des liens symboliques ou des "
-"répertoires git"
+msgstr "%s : ne peut ajouter que des fichiers normaux, des liens symboliques ou des répertoires git"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' n'a pas de commit extrait"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "indexation du fichier '%s' impossible"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "impossible d'ajouter '%s' à l'index"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "fstat de '%s' impossible"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' existe à la fois comme un fichier et un répertoire"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Rafraîchir l'index"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5764,7 +6002,7 @@
 "version d'index renseignée, mais la valeur est invalide.\n"
 "Utilisation de la version %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5773,159 +6011,156 @@
 "GIT_INDEX_VERSION est renseigné, mais la valeur est invalide.\n"
 "Utilisation de la version %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "signature incorrecte 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "mauvaise version d'index %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "mauvaise signature sha1 d'index"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "l'index utilise l'extension %.4s qui n'est pas comprise"
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "extension %.4s ignorée"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "format d'entrée d'index inconnu 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "champ de nom malformé dans l'index, près du chemin '%s'"
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "entrées de préparation non ordonnées dans l'index"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "entrées multiples de préparation pour le fichier fusionné '%s'"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entrées de préparation non ordonnées pour '%s'"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
-#: builtin/submodule--helper.c:332
+#: 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
 msgid "index file corrupt"
 msgstr "fichier d'index corrompu"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "impossible de créer le fil load_cache_entries : %s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "impossible de joindre le fil load_cach_entries : %s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s : l'ouverture du fichier d'index a échoué"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s : impossible de faire un stat sur l'index ouvert"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s : fichier d'index plus petit qu'attendu"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s : impossible de mapper le fichier d'index"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "impossible de créer le fil load_index_extensions : %s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "impossible de joindre le fil load_index_extensions : %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "impossible de rafraîchir l'index partagé '%s'"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "index cassé, %s attendu dans %s, %s obtenu"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "impossible de fermer '%s'"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "échec de conversion d'un index clairsemé"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
-msgstr "stat impossible de '%s'"
+msgstr "impossible de stat '%s'"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "impossible d'ouvrir le répertoire git : %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "échec lors de l'unlink : %s"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "impossible de régler les bits de droit de '%s'"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s : impossible de revenir à l'étape 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 ""
-"Vous pouvez corriger ceci avec 'git rebase --edit-todo' puis lancez 'git "
-"rebase --continue'.\n"
+"Vous pouvez corriger ceci avec 'git rebase --edit-todo' puis lancez 'git rebase --continue'.\n"
 "Ou vous pouvez abandonner le rebasage avec 'git rebase --abort'.\n"
 
 #: rebase-interactive.c:33
 #, c-format
-msgid ""
-"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
-msgstr ""
-"paramètre non reconnu %s pour l'option rebase.missingCommitsCheck. Ignoré."
+msgid "unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
+msgstr "paramètre non reconnu %s pour l'option rebase.missingCommitsCheck. Ignoré."
 
 #: rebase-interactive.c:42
 msgid ""
@@ -5935,7 +6170,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5944,7 +6182,7 @@
 "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"
+".       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 ""
@@ -5953,12 +6191,13 @@
 " p, pick <commit> = utiliser le commit\n"
 " r, reword <commit> = utiliser le commit, mais reformuler son message\n"
 " e, edit <commit> = utiliser le commit, mais s'arrêter pour le modifier\n"
-" s, squash <commit> = utiliser le commit, mais le fusionner avec le "
-"précédent\n"
-" f, fixup <commit> = comme \"squash\", mais en éliminant son message\n"
+" s, squash <commit> = utiliser le commit, mais le fusionner avec le précédent\n"
+" f, fixup [-C | -c] <commit> = comme \"squash\", mais en ne gardant que le message\n"
+"                    du commit précédent, à moins que -C ne soit utilisé, auquel cas, conserver\n"
+"                    ne conserver que le message de ce commit ; -c est identique à -C mais ouvre\n"
+"                    un éditeur\n"
 " x, exec <commit> = lancer la commande (reste de la ligne) dans un shell\n"
-" b, break = s'arrêter ici (on peut continuer ensuite avec 'git rebase --"
-"continue')\n"
+" b, break = s'arrêter ici (on peut continuer ensuite avec 'git rebase --continue')\n"
 " d, drop <commit> = supprimer le commit\n"
 " l, label <label> = étiqueter la HEAD courante avec un nom\n"
 " t, reset <label> = réinitialiser HEAD à label\n"
@@ -5969,23 +6208,22 @@
 "\n"
 "Vous pouvez réordonner ces lignes ; elles sont exécutées de haut en bas.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Rebasage de %s sur %s (%d commande)"
 msgstr[1] "Rebasage de %s sur %s (%d commandes)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 "\n"
-"Ne supprimez aucune ligne. Utilisez 'drop' explicitement pour supprimer un "
-"commit.\n"
+"Ne supprimez aucune ligne. Utilisez 'drop' explicitement pour supprimer un commit.\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5993,7 +6231,7 @@
 "\n"
 "Si vous éliminez une ligne ici, LE COMMIT CORRESPONDANT SERA PERDU.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6002,13 +6240,12 @@
 "\n"
 msgstr ""
 "\n"
-"Vous êtes en train d'éditer le fichier todo d'un rebasage interactif en "
-"cours.\n"
+"Vous êtes en train d'éditer le fichier todo d'un rebasage interactif en cours.\n"
 "Pour continuer le rebasage après édition, lancez :\n"
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -6018,19 +6255,17 @@
 "Cependant, si vous effacez tout, le rebasage sera annulé.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "impossible d'écrire '%s'"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229 builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "impossible d'écrire '%s'."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -6039,33 +6274,28 @@
 "Attention : certains commits ont pu être accidentellement supprimés.\n"
 "Commits supprimés (du plus jeune au plus vieux) :\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 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 ""
-"Pour éviter ce message, utilisez \"drop\" pour supprimer explicitement un "
-"commit.\n"
+"Pour éviter ce message, utilisez \"drop\" pour supprimer explicitement un commit.\n"
 "\n"
-"Utilisez 'git config rebase.missingCommitsCheck' pour changer le niveau "
-"d'avertissements.\n"
+"Utilisez 'git config rebase.missingCommitsCheck' pour changer le niveau d'avertissements.\n"
 "Les comportements disponibles sont : ignore, warn, error.\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "impossible de lire '%s'."
 
 # à priori on parle d'une branche ici
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "disparue"
 
@@ -6084,233 +6314,246 @@
 msgid "ahead %d, behind %d"
 msgstr "en avance de %d, en retard de %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "format attendu : %%(color:<couleur>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "couleur non reconnue : %%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Valeur entière attendue refname:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valeur entière attendue refname:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argument %%(%s) non reconnu : %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) n'accepte pas d'argument"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "argument %%(objectsize) non reconnu : %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) n'accepte pas d'argument"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) n'accepte pas d'argument"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "argument %%(subject) non reconnu : %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "%%(trailers:key=<value>) attendu"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "argument %%(trailers) inconnu : %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valeur positive attendue contents:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "argument %%(contents) non reconnu : %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "valeur positive attendue '%s' dans %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "argument '%s' non reconnu dans %%(%s)"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "option de courriel non reconnue : %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "format attendu : %%(align:<largeur>,<position>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "position non reconnue : %s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "largeur non reconnue : %s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "argument %%(align) non reconnu : %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "valeur positive attendue avec l'atome %%(align)"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "argument %%(if) non reconnu : %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nom de champ malformé %.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nom de champ inconnu : %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
-msgid ""
-"not a git repository, but the field '%.*s' requires access to object data"
-msgstr ""
-"pas un dépôt git, mais le champ '%.*s' nécessite l'accès aux données d'objet"
+msgid "not a git repository, but the field '%.*s' requires access to object data"
+msgstr "pas un dépôt git, mais le champ '%.*s' nécessite l'accès aux données d'objet"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format : atome %%(if) utilisé sans un atome %%(then)"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format : atome %%(then) utilisé sans un atome %%(if)"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format : atome %%(then) utilisé plus d'une fois"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: atome %%(then) utilisé après %%(else)"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format : atome %%(else) utilisé sans un atome %%(if)"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "format : atome %%(else) utilisé sans un atome %%(then)"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "format : atome %%(else) utilisé plus d'une fois"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "format : atome %%(end) utilisé sans atome correspondant"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
-msgstr "Chaîne de formatage mal formée %s"
+msgstr "chaîne de formatage mal formée %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "aucune branche, rebasage de %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(aucune branche, rebasage de %s)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "aucune branche, rebasage de la HEAD détachée %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(aucune branche, rebasage de la HEAD détachée %s)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "aucune branche, bisect a démarré sur %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(aucune branche, bisect a démarré sur %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "aucune branche"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD détachée sur %s)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD détachée depuis %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(aucune branche)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "objet manquant %s pour %s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "échec de parse_object_buffer sur %s pour %s"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objet malformé à '%s'"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "réf avec un nom cassé %s ignoré"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "réf cassé %s ignoré"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: atome %%(end) manquant"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "nom d'objet malformé %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'option '%s' doit pointer sur un commit"
@@ -6353,57 +6596,57 @@
 #: refs.c:598
 #, c-format
 msgid "invalid branch name: %s = %s"
-msgstr "Nom de branche invalide : %s = %s"
+msgstr "nom de branche invalide : %s = %s"
 
 #: refs.c:674
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "symref pendant %s ignoré"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "le journal pour la réf %s contient un trou après %s"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "le journal pour la réf %s s'arrête de manière inattendue sur %s"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "le journal pour la réf %s est vide"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "refus de mettre à jour une réf avec un nom cassé '%s'"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "échec de update_ref pour la réf '%s' : %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "mises à jour multiples pour la réf '%s' non permises"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "mises à jour des références interdites en environnement de quarantaine"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "mises à jour des références annulées par le crochet"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existe ; impossible de créer '%s'"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "impossible de traiter '%s' et '%s' en même temps"
@@ -6413,11 +6656,10 @@
 msgid "could not remove reference %s"
 msgstr "impossible de supprimer la référence %s"
 
-#: refs/files-backend.c:1242 refs/packed-backend.c:1542
-#: refs/packed-backend.c:1552
+#: refs/files-backend.c:1242 refs/packed-backend.c:1542 refs/packed-backend.c:1552
 #, c-format
 msgid "could not delete reference %s: %s"
-msgstr "Impossible de supprimer la référence %s : %s"
+msgstr "impossible de supprimer la référence %s : %s"
 
 #: refs/files-backend.c:1245 refs/packed-backend.c:1555
 #, c-format
@@ -6432,8 +6674,7 @@
 #: remote.c:351
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
-msgstr ""
-"un raccourci de configuration de distant ne peut pas commencer par '/' : %s"
+msgstr "un raccourci de configuration de distant ne peut pas commencer par '/' : %s"
 
 #: remote.c:399
 msgid "more than one receivepack given, using the first"
@@ -6468,23 +6709,21 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "la valeur '%s' du modèle n'a pas de '*'"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
-msgstr ""
-"le spécificateur de référence source %s ne correspond à aucune référence"
+msgstr "le spécificateur de référence source %s ne correspond à aucune référence"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
-msgstr ""
-"le spécificateur de référence source %s correspond à plus d'une référence"
+msgstr "le spécificateur de référence source %s correspond à plus d'une référence"
 
 #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6505,182 +6744,171 @@
 "  est une référence dans \"refs/{heads,tags}/\". Si oui, ajout du préfixe\n"
 "  refs/{heads,tags}/ correspondant du côté distant.\n"
 "\n"
-"Aucune n'a fonctionné, donc abandon. Veuillez spécifier une référence "
-"totalement qualifiée."
+"Aucune n'a fonctionné, donc abandon. Veuillez spécifier une référence totalement qualifiée."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
 "Did you mean to create a new branch by pushing to\n"
 "'%s:refs/heads/%s'?"
 msgstr ""
-"la partie <source> du spécificateur de référence est un objet commit.\n"
+"La partie <source> du spécificateur de référence est un objet commit.\n"
 "Souhaitiez-vous créer une nouvelle branche en poussant sur\n"
 "'%s:refs/heads/%s' ?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
 "Did you mean to create a new tag by pushing to\n"
 "'%s:refs/tags/%s'?"
 msgstr ""
-"la partie <source> du spécificateur de référence est un objet étiquette.\n"
+"La partie <source> du spécificateur de référence est un objet étiquette.\n"
 "Souhaitiez-vous créer une nouvelle étiquette en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
 "Did you mean to tag a new tree by pushing to\n"
 "'%s:refs/tags/%s'?"
 msgstr ""
-"la partie <source> du spécificateur de référence est un objet arbre.\n"
+"La partie <source> du spécificateur de référence est un objet arbre.\n"
 "Souhaitiez-vous créer un nouvel arbre en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
 "Did you mean to tag a new blob by pushing to\n"
 "'%s:refs/tags/%s'?"
 msgstr ""
-"la partie <source> du spécificateur de référence est un objet blob.\n"
+"La partie <source> du spécificateur de référence est un objet blob.\n"
 "Souhaitiez-vous créer un nouveau blob en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "'%s' ne peut pas être résolue comme une branche"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "suppression de '%s' impossible : la référence distante n'existe pas"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
-msgstr ""
-"le spécificateur de référence dst %s correspond à plus d'un spécificateur de "
-"références"
+msgstr "le spécificateur de référence dst %s correspond à plus d'un spécificateur de références"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "le spécificateur de référence dst %s reçoit depuis plus d'une source"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD ne pointe pas sur une branche"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "pas de branche '%s'"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "aucune branche amont configurée pour la branche '%s'"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la branche amont '%s' n'est pas stockée comme branche de suivi"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
-msgstr ""
-"la destination de poussée '%s' sur le serveur distant '%s' n'a pas de "
-"branche locale de suivi"
+msgstr "la destination de poussée '%s' sur le serveur distant '%s' n'a pas de branche locale de suivi"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la branche '%s' n'a aucune branche distante de poussée"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "les références de spec pour '%s' n'incluent pas '%s'"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "la poussée n'a pas de destination (push.default vaut 'nothing')"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
-msgstr ""
-"impossible de résoudre une poussée 'simple' pour une destination unique"
+msgstr "impossible de résoudre une poussée 'simple' pour une destination unique"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "impossible de trouver la référence distante %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Référence bizarre '%s' ignorée localement"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Votre branche est basée sur '%s', mais la branche amont a disparu.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (utilisez \"git branch --unset-upstream\" pour corriger)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Votre branche est à jour avec '%s'.\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Votre branche et '%s' font référence à des commits différents.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (utilisez \"%s\" pour plus de détails)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Votre branche est en avance sur '%s' de %d commit.\n"
 msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (utilisez \"git push\" pour publier vos commits locaux)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
-msgid_plural ""
-"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
-msgstr[0] ""
-"Votre branche est en retard sur '%s' de %d commit, et peut être mise à jour "
-"en avance rapide.\n"
-msgstr[1] ""
-"Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour "
-"en avance rapide.\n"
+msgid_plural "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
+msgstr[0] "Votre branche est en retard sur '%s' de %d commit, et peut être mise à jour en avance rapide.\n"
+msgstr[1] "Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour en avance rapide.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (utilisez \"git pull\" pour mettre à jour votre branche locale)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6695,12 +6923,11 @@
 "Votre branche et '%s' ont divergé,\n"
 "et ont %d et %d commits différents chacune respectivement.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
-msgstr ""
-"  (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
+msgstr "  (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "impossible d'analyser le nom attendu d'objet '%s'"
@@ -6720,96 +6947,95 @@
 msgid "replace depth too high for object %s"
 msgstr "profondeur de remplacement trop grande pour l'objet %s"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "MERGE_RR corrompu"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "impossible d'écrire l'enregistrement rerere"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "il y a eu des erreurs à l'écriture de '%s' (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "échec du flush de '%s'"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "impossible d'analyser la section en conflit dans '%s'"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "échec de utime() sur '%s'"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "échec de l'écriture de '%s'"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' indexé en utilisant la résolution pré-existante."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Résolution enregistrée pour '%s'."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "'%s' résolu en utilisant la résolution pré-existante."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "impossible de délier '%s' qui est errant"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Pré-image enregistrée pour '%s'"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000 builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "impossible de créer le répertoire '%s'"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "échec de la mise à jour de l'état en conflit dans '%s'"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
-msgstr "Aucune résolution enregistrée pour '%s'"
+msgstr "aucune résolution enregistrée pour '%s'"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "impossible de délier '%s'"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Pré-image mise à jour pour '%s'"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Résolution  pour '%s' oubliée\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "impossible d'ouvrir le répertoire rr-cache"
 
@@ -6817,129 +7043,125 @@
 msgid "could not determine HEAD revision"
 msgstr "impossible de déterminer la révision HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "impossible de trouver l'arbre de %s"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<fichier-paquet> n'est plus géré"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "valeur inconnue pour --diff-merges : %s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "votre branche actuelle semble cassée"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "votre branche actuelle '%s' ne contient encore aucun commit"
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L ne supporte pas encore les formats de diff autres que -p et -s"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "échec de l'ouverture de /dev/null"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "impossible de créer un fil asynchrone : %s"
 
-#: run-command.c:1335
+#: 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 ""
 "Le crochet '%s' a été ignoré parce qu'il n'est pas marqué comme exécutable.\n"
-"Vous pouvez désactiver cet avertissement avec `git config advice.ignoredHook "
-"false`."
+"Vous pouvez désactiver cet avertissement avec `git config advice.ignoredHook false`."
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
-msgstr ""
-"paquet de nettoyage inattendu pendant la lecture de l'état de dépaquetage "
-"distant"
+msgstr "paquet de nettoyage inattendu pendant la lecture de l'état de dépaquetage distant"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "impossible d'analyser l'état de dépaquetage distant : %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "le dépaquetage a échoué : %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "impossible de signer le certificat de poussée"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack : impossible de créer un sous-processus de récupération"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "le négociation de poussée a échoué ; poursuite de la poussée de toute façon"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
-msgstr "Le receveur ne gère pas l'algorithme d'empreinte de ce dépôt"
+msgstr "le receveur ne gère pas l'algorithme d'empreinte de ce dépôt"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
-msgstr "Le receveur ne gère pas les poussées avec --signed"
+msgstr "le receveur ne gère pas les poussées avec --signed"
 
-#: send-pack.c:478
-msgid ""
-"not sending a push certificate since the receiving end does not support --"
-"signed push"
-msgstr ""
-"pas d'envoi de certificat de poussée car le receveur ne gère pas les "
-"poussées avec --signed"
+#: send-pack.c:531
+msgid "not sending a push certificate since the receiving end does not support --signed push"
+msgstr "pas d'envoi de certificat de poussée car le receveur ne gère pas les poussées avec --signed"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
-msgstr "Le receveur ne gère pas les poussées avec --atomic"
+msgstr "le receveur ne gère pas les poussées avec --atomic"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
-msgstr "Le receveur ne gère pas les options de poussées"
+msgstr "le receveur ne gère pas les options de poussées"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "mode de nettoyage invalide de message de validation '%s'"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
-msgstr "Impossible de supprimer '%s'"
+msgstr "impossible de supprimer '%s'"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "impossible de supprimer '%s'"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "revert"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "action inconnue : %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6947,7 +7169,7 @@
 "après résolution des conflits, marquez les chemins corrigés\n"
 "avec 'git add <chemins>' ou 'git rm <chemins>'"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6957,43 +7179,41 @@
 "avec 'git add <chemins>' ou 'git rm <chemins>'\n"
 "puis validez le résultat avec 'git commit'"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "impossible de verrouiller '%s'"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289 sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "impossible d'écrire dans '%s'"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "impossible d'écrire la fin de ligne dans '%s'"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291 sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "échec lors de la finalisation de '%s'"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "vos modifications locales seraient écrasées par %s."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "validez vos modifications ou les remiser pour continuer."
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s : avance rapide"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Mode de nettoyage invalide %s"
@@ -7001,65 +7221,64 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Impossible d'écrire le nouveau fichier index"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "impossible de mettre à jour l'arbre de cache"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "impossible de résoudre le commit HEAD"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "aucune clé présente dans '%.*s'"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
-msgstr "Impossible de décoter la valeur de '%s'"
+msgstr "impossible de décoter la valeur de '%s'"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "impossible d'ouvrir '%s' en lecture"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' déjà fourni"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' déjà fourni"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' déjà fourni"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "variable inconnue '%s'"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "'GIT_AUTHOR_NAME' manquant"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "'GIT_AUTHOR_EMAIL' manquant"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "'GIT_AUTHOR_DATE' manquant"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7075,7 +7294,7 @@
 "\n"
 "  git rebase --continue\n"
 msgstr ""
-"Vous avez des modifications indexées dans votre copie de travail.\n"
+"vous avez des modifications indexées dans votre copie de travail.\n"
 "Si elles devaient être ajoutées dans le commit précédent, lancez :\n"
 "\n"
 "  git commit --amend %s\n"
@@ -7088,11 +7307,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "échec du crochet 'prepare-commit-msg'"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7106,22 +7325,19 @@
 "\n"
 "    git commit --amend --reset-author\n"
 msgstr ""
-"Votre nom et votre adresse courriel ont été configurés automatiquement en "
-"se\n"
+"Votre nom et votre adresse courriel ont été configurés automatiquement en se\n"
 "fondant sur votre nom d'utilisateur et le nom de votre machine. Veuillez \n"
 "vérifier qu'ils sont corrects. Vous pouvez supprimer ce message en les \n"
 "paramétrant explicitement. Lancez les commandes suivantes et suivez les\n"
-"instructions dans votre éditeur pour éditer votre fichier de "
-"configuration :\n"
+"instructions dans votre éditeur pour éditer votre fichier de configuration :\n"
 "\n"
 "    git config --global --edit\n"
 "\n"
-"Après ceci, vous pouvez corriger l'identité utilisée pour cette validation "
-"avec :\n"
+"Après ceci, vous pouvez corriger l'identité utilisée pour cette validation avec :\n"
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7134,10 +7350,8 @@
 "\n"
 "    git commit --amend --reset-author\n"
 msgstr ""
-"Votre nom et votre adresse courriel ont été configurés automatiquement en se "
-"fondant\n"
-"sur votre nom d'utilisateur et le nom de votre machine. Veuillez vérifier "
-"qu'ils sont corrects.\n"
+"Votre nom et votre adresse courriel ont été configurés automatiquement en se fondant\n"
+"sur votre nom d'utilisateur et le nom de votre machine. Veuillez vérifier qu'ils sont corrects.\n"
 "Vous pouvez supprimer ce message en les paramétrant explicitement :\n"
 "\n"
 "    git config --global user.name \"Votre Nom\"\n"
@@ -7147,357 +7361,359 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "impossible de retrouver le commit nouvellement créé"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "impossible d'analyser le commit nouvellement créé"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "impossible de résoudre HEAD après création du commit"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "HEAD détachée"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (commit racine)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s n'est pas un commit !"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "impossible d'analyser le commit HEAD"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "impossible d'analyser l'auteur du commit"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree a échoué à écrire un arbre"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "impossible de lire le message de validation de '%s'"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "identité d'auteur invalide '%s'"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "auteur corrompu : information de date manquante"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "échec de l'écriture de l'objet commit"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "impossible de mettre à jour %s"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "impossible d'analyser le commit %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "impossible d'analyser le commit parent %s"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "commande inconnue : %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Ceci est la combinaison de %d commits."
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "une HEAD est nécessaire à la correction"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "Impossible de lire HEAD"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "impossible de lire le message de validation de HEAD"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "impossible d'écrire '%s'"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Ceci est le premier message de validation :"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "impossible de lire le message de validation de %s"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Ceci est le message de validation numéro %d :"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "Le premier message de validation sera ignoré :"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Le message de validation %d sera ignoré :"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Ceci est la combinaison de %d commits."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "impossible d'écrire '%s'"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "une HEAD est nécessaire à la correction"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "impossible de lire HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "impossible de lire le message de validation de HEAD"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "impossible de lire le message de validation de %s"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "votre fichier d'index n'est pas fusionné."
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "impossible de réparer le commit racine"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "le commit %s est une fusion mais l'option -m n'a pas été spécifiée."
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "le commit %s n'a pas de parent %d"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "impossible d'obtenir un message de validation pour %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s : impossible d'analyser le commit parent %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "impossible de renommer '%s' en '%s'"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "impossible d'annuler %s... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "impossible d'appliquer %s... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "abandon de %s %s -- le contenu de la rustine déjà en amont\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s : échec à la lecture de l'index"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s : échec du rafraîchissement de l'index"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s n'accepte pas d'argument : '%s'"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argument manquant pour %s"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "impossible d'analyser '%s'"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "ligne %d invalide : %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "'%s' impossible avec le commit précédent"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "annulation d'un picorage en cours"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "annulation d'un retour en cours"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "veuillez corriger ceci en utilisant 'git rebase --edit-todo'."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "feuille d'instruction inutilisable : '%s'"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "aucun commit analysé."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "impossible de picorer pendant l'annulation d'un commit."
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "impossible d'annuler un commit pendant un picorage."
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valeur invalide pour %s : %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "\"écrase-sur\" inutilisable"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "feuille d'options malformée : %s"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "l'ensemble de commits spécifié est vide"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "un retour est déjà en cours"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "essayez \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "un picorage est déjà en cours"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "essayez \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "impossible de créer le répertoire de séquenceur '%s'"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "impossible de verrouiller HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "aucun picorage ou retour en cours"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "impossible de résoudre HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "impossible d'abandonner depuis une branche non encore créée"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "impossible d'ouvrir '%s'"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "impossible de lire '%s' : %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "fin de fichier inattendue"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "le fichier HEAD de préparation de picorage '%s' est corrompu"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
-msgstr ""
-"Vous semblez avoir déplacé la HEAD. Pas de rembobinage, vérifiez votre HEAD !"
+msgstr "Vous semblez avoir déplacé la HEAD. Pas de rembobinage, vérifiez votre HEAD !"
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
-msgstr "Pas de retour en cours ?"
+msgstr "pas de retour en cours"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "aucun picorage en cours"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "échec du saut de commit"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "il n'y a rien à sauter"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
 msgstr ""
-"Avez-vous déjà validé ?\n"
+"avez-vous déjà validé ?\n"
 "essayez \"git %s -continue\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7516,27 +7732,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
-msgstr "impossible d'appliquer %s... %.*s"
+msgstr "Impossible d'appliquer %s... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Impossible de fusionner %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Exécution : %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7551,11 +7767,11 @@
 "git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "et a mis à jour l'index ou l'arbre de travail\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7565,98 +7781,97 @@
 "  git rebase --continue\n"
 "\n"
 msgstr ""
-"L'exécution a réussi : %s\n"
+"l'exécution a réussi : %s\n"
 "mais a laissé des modifications dans l'index ou la copie de travail\n"
 "Validez ou remisez vos modification, puis lancez\n"
 "\n"
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nom de label illégal '%.*s'"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "écriture d'un commit racine bidon"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "écriture de 'écraser-sur'"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "impossible de résoudre '%s'"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "impossible de fusionner avec une révision courante"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "impossible d'analyser '%.*s'"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "rien à fusionner : '%.*s'"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
-msgstr ""
-"une fusion octopus ne peut pas être exécutée par dessus une nouvelle racine"
+msgstr "une fusion octopus ne peut pas être exécutée par dessus une nouvelle racine"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "impossible de lire le message de validation de '%s'"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "impossible de seulement essayer de fusionner '%.*s'"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "fusion : Impossible d'écrire le nouveau fichier index"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "Autoremisage impossible"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
-msgstr "réponse de remisage inattendue : '%s'"
+msgstr "Réponse de remisage inattendue : '%s'"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Impossible de créer le répertoire pour '%s'"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Autoremisage créé : %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "impossible de réinitialiser --hard"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Autoremisage appliqué.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "impossible de stocker %s"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7667,30 +7882,29 @@
 "Vos  modifications sont à l'abri dans la remise.\n"
 "Vous pouvez lancer \"git stash pop\" ou \"git stash drop\" à tout moment.\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "L'application du remisage automatique a créé des conflits."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
-msgstr ""
-"Un remisage automatique existe ; création d'une nouvelle entrée de remisage."
+msgstr "Un remisage automatique existe ; création d'une nouvelle entrée de remisage."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
-msgstr "Impossible de détacher HEAD"
+msgstr "impossible de détacher HEAD"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
-msgstr "arrêt à HEAD\n"
+msgstr "Arrêt à HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Arrêté à %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7711,58 +7925,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Rebasage (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
-msgstr "arrêt à %s... %.*s\n"
+msgstr "Arrêt à %s... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "commande inconnue %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "impossible de lire orig-head"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "impossible de lire 'onto'"
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "impossible de mettre à jour HEAD sur %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Rebasage et mise à jour de %s avec succès.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "impossible de rebaser : vous avez des modifications non indexées."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "impossible de corriger un commit non-existant"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "fichier invalide : '%s'"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contenu invalide : '%s'"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7772,50 +7986,50 @@
 "Vous avez des modifications non validées dans votre copie de travail.\n"
 "Veuillez les valider d'abord, puis relancer 'git rebase --continue'."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "impossible d'écrire le fichier : '%s'"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "impossible de supprimer CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "impossible de valider les modifications indexées."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s : impossible de picorer un %s"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s : mauvaise révision"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "impossible d'annuler en tant que commit initial"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script : options non gérées"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script : erreur lors de la préparation des révisions"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "rien à faire"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "impossible d'éviter les commandes de picorage non nécessaires"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "le script a déjà été réarrangé."
 
@@ -7831,8 +8045,7 @@
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
 "%s : ce chemin n'existe pas dans la copie de travail.\n"
-"Utilisez 'git <commande> -- <chemin>...' pour spécifier des chemins qui "
-"n'existent pas localement."
+"Utilisez 'git <commande> -- <chemin>...' pour spécifier des chemins qui n'existent pas localement."
 
 #: setup.c:198
 #, c-format
@@ -7848,9 +8061,7 @@
 #: setup.c:264
 #, c-format
 msgid "option '%s' must come before non-option arguments"
-msgstr ""
-"l'option '%s' doit être présente avant les arguments qui ne sont pas des "
-"options"
+msgstr "l'option '%s' doit être présente avant les arguments qui ne sont pas des options"
 
 #: setup.c:283
 #, c-format
@@ -7865,13 +8076,11 @@
 
 #: setup.c:419
 msgid "unable to set up work tree using invalid config"
-msgstr ""
-"impossible de mettre en place le répertoire de travail en utilisant une "
-"configuration invalide"
+msgstr "impossible de mettre en place le répertoire de travail en utilisant une configuration invalide"
 
 #: setup.c:423
 msgid "this operation must be run in a work tree"
-msgstr "Cette opération doit être effectuée dans un arbre de travail"
+msgstr "cette opération doit être effectuée dans un arbre de travail"
 
 #: setup.c:661
 #, c-format
@@ -7884,8 +8093,7 @@
 
 #: setup.c:681
 msgid "repo version is 0, but v1-only extensions found:"
-msgstr ""
-"la version du dépôt est 0, mais des extensions uniquement v1 trouvées :"
+msgstr "la version du dépôt est 0, mais des extensions uniquement v1 trouvées :"
 
 #: setup.c:700
 #, c-format
@@ -7961,430 +8169,81 @@
 "not a git repository (or any parent up to mount point %s)\n"
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
-"ni ceci ni aucun de ses répertoires parents (jusqu'au point de montage %s) "
-"n'est un dépôt git\n"
-"Arrêt à la limite du système de fichiers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
-"n'est pas défini)."
+"ni ceci ni aucun de ses répertoires parents (jusqu'au point de montage %s) n'est un dépôt git\n"
+"Arrêt à la limite du système de fichiers (GIT_DISCOVERY_ACROSS_FILESYSTEM n'est pas défini)."
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
 "problème avec la valeur de core.sharedRepository (0%.3o).\n"
-"Le propriétaire des fichiers doit toujours avoir les droits en lecture et "
-"écriture."
+"Le propriétaire des fichiers doit toujours avoir les droits en lecture et écriture."
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "échec de l'ouverture ou au dup de /dev/null"
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "échec de la bifurcation"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "échec du setsid"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "tentative d'utilisation de l'index partiel sans mode cone"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "impossible de mettre à jour l'arbre de cache, full conservé"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-"le répertoire objet %s n'existe pas ; vérifiez .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "impossible de normaliser le chemin d'objet alternatif : %s"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s : magasins d'objets alternatifs ignorés, récursion trop profonde"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "impossible de normaliser le répertoire d'objet : %s"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "impossible d'ouvrir (fdopen) le fichier verrou des alternatives"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "lecture du fichier d'alternatives impossible"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "impossible de déplacer le nouveau fichier d'alternative"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "le chemin '%s' n'existe pas"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"extraire le dépôt de référence '%s' comme une extraction liée n'est pas "
-"encore supporté."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "le dépôt de référence '%s' n'est pas un dépôt local."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "le dépôt de référence '%s' est superficiel"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "le dépôt de référence '%s' est greffé"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "ligne invalide pendant l'analyse des refs alternatives : %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "essai de mmap %<PRIuMAX> au delà de la limite %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "échec de mmap"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "le fichier objet %s est vide"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "objet libre corrompu '%s'"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "données incorrectes à la fin de l'objet libre '%s'"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "type d'objet invalide"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "impossible de dépaqueter l'entête %s avec --allow-unknow-type"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "impossible de dépaqueter l'entête %s"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "impossible d'analyser l'entête %s avec --allow-unknow-type"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "impossible d'analyser l'entête %s"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "impossible de lire l'objet %s"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "remplacement %s non trouvé pour %s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "l'objet libre %s (stocké dans %s) est corrompu"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "l'objet empaqueté %s (stocké dans %s) est corrompu"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "impossible d'écrire le fichier %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "impossible de régler les droits de '%s'"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "erreur d'écriture d'un fichier"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "erreur en fermeture du fichier d'objet esseulé"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"droits insuffisants pour ajouter un objet à la base de données %s du dépôt"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "impossible de créer un fichier temporaire"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "impossible d'écrire le fichier d'objet esseulé"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "impossible de compresser le nouvel objet %s (%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "échec de deflateEnd sur l'objet %s (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "données de source d'objet instable pour %s"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "échec de utime() sur %s"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "impossible de lire l'objet pour %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "commit corrompu"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "étiquette corrompue"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "erreur de lecture à l'indexation de %s"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "lecture tronquée pendant l'indexation de %s"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s : échec de l'insertion dans la base de données"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s : type de fichier non supporté"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s n'est pas un objet valide"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s n'est pas un objet '%s' valide"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "impossible d'ouvrir %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "incohérence de hachage pour %s (%s attendu)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "impossible de mmap %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "impossible de dépaqueter l'entête de %s"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "impossible d'analyser l'entête de %s"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "impossible de dépaqueter le contenu de %s"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "le SHA1 court %s est ambigu"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Les candidats sont :"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git ne crée normalement jamais de référence qui se termine par 40\n"
-"caractères hexa car elle serait ignorée si vous spécifiez juste\n"
-"40-hexa. Ces références peuvent être créées par erreur. Par exemple,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"où \"$br\" est d'une manière ou d'une autre vide et une référence 40-hexa "
-"est créée.\n"
-"Veuillez examiner ces références et peut-être les supprimer. Désactivez ce "
-"message\n"
-"en lançant \"git config advice.objectNameWarning false\""
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "le journal de '%.*s' ne remonte qu'à %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "le journal de '%.*s' n'a que %d entrées"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "le chemin '%s' existe sur le disque, mais pas dans '%.*s'"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"le chemin '%s' existe, mais pas '%s'\n"
-"conseil : peut-être vouliez-vous dire '%.*s:%s', soit '%.*s:./%s'"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "le chemin '%s' n'existe pas dans '%.*s'"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"le chemin '%s' est dans l'index, mais pas à l'étape %d\n"
-"conseil : vous vouliez peut-être dire ':%d:%s' ?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"le chemin '%s' est dans l'index, mais pas '%s'\n"
-"conseil : peut-être vouliez-vous dire ':%d:%s', soit '%d:./%s'"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "le chemin '%s' existe sur le disque, mais pas dans l'index"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "le chemin '%s' n'existe pas (ni sur le disque, ni dans l'index)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-"la syntaxe de chemin relatif ne peut pas être utilisée hors de l'arbre de "
-"travail"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "nom d'objet invalide : '%.*s'."
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "l'entrée d'index est un répertoire, mais pas clairsemé (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u Gio"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u Gio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u Mio"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u Mio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u Kio"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u Kio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8392,20 +8251,19 @@
 msgstr[1] "%u octets"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u octet/s"
 msgstr[1] "%u octets/s"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737 builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "impossible d'ouvrir '%s' en écriture"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "impossible d'éditer '%s'"
@@ -8422,14 +8280,12 @@
 #: submodule-config.c:402
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
-msgstr ""
-"'%s' ignoré et qui peut être interprété comme une option de ligne de "
-"commande : %s"
+msgstr "'%s' ignoré et qui peut être interprété comme une option de ligne de commande : %s"
 
 #: submodule-config.c:499
 #, c-format
 msgid "invalid value for %s"
-msgstr "Valeur invalide pour %s"
+msgstr "valeur invalide pour %s"
 
 #: submodule-config.c:766
 #, c-format
@@ -8438,9 +8294,7 @@
 
 #: submodule.c:114 submodule.c:143
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
-msgstr ""
-"Modification impossible de .gitmodules non fusionné, résolvez les conflits "
-"d'abord"
+msgstr "Modification impossible de .gitmodules non fusionné, résolvez les conflits d'abord"
 
 #: submodule.c:118 submodule.c:147
 #, c-format
@@ -8457,74 +8311,66 @@
 msgid "staging updated .gitmodules failed"
 msgstr "échec de la mise en index du .gitmodules mis à jour"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "dans le sous-module '%s' non populé"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Le chemin '%s' est dans le sous-module '%.*s'"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "mauvais argument --ignore-submodules : %s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
-msgid ""
-"Submodule in commit %s at path: '%s' collides with a submodule named the "
-"same. Skipping it."
-msgstr ""
-"Le sous-module dans le commit %s au chemin : '%s' entre en collision avec un "
-"sous-module du même nom. Ignoré."
+msgid "Submodule in commit %s at path: '%s' collides with a submodule named the same. Skipping it."
+msgstr "Le sous-module dans le commit %s au chemin : '%s' entre en collision avec un sous-module du même nom. Ignoré."
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "l'entrée de sous-module '%s' (%s) est un %s, pas un commit"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
-msgid ""
-"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
-"submodule %s"
-msgstr ""
-"Impossible de lancer la commande 'git rev-list <commits> --not --remotes -n "
-"1' dans le sous-module %s"
+msgid "Could not run 'git rev-list <commits> --not --remotes -n 1' command in submodule %s"
+msgstr "Impossible de lancer la commande 'git rev-list <commits> --not --remotes -n 1' dans le sous-module %s"
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "le processus pour le sous-module '%s' a échoué"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Échec de résolution de HEAD comme référence valide."
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Poussée du sous-module '%s'\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Impossible de pousser le sous-module '%s'\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Récupération du sous-module %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Impossible d'accéder au sous-module '%s'\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8533,81 +8379,76 @@
 "Erreurs pendant la récupération du sous-module :\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' n'est pas reconnu comme dépôt git"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "impossible de lancer 'git status --porcelain=2' dans le sous-module %s"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --porcelain=2' a échoué dans le sous-module %s"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "impossible de démarrer 'git status' dans le sous-module '%s'"
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "impossible de lancer 'git status' dans le sous-module '%s'"
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Impossible de désactiver core.worktree dans le sous-module '%s'"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "récursion impossible dans le sous-module '%s'"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "impossible de réinitialiser l'index du sous-module"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "le sous-module '%s' a un index sale"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
-msgstr "le sous-module '%s' n'a pas pu être mis à jour."
+msgstr "Le sous-module '%s' n'a pas pu être mis à jour."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
-msgstr ""
-"le répertoire git du sous-module '%s' est à l'intérieur du répertoire git "
-"'%.*s'"
+msgstr "le répertoire git du sous-module '%s' est à l'intérieur du répertoire git '%.*s'"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
-msgid ""
-"relocate_gitdir for submodule '%s' with more than one worktree not supported"
-msgstr ""
-"relocate_gitdir pour le sous-module '%s' avec plus d'un arbre de travail "
-"n'est pas supporté"
+msgid "relocate_gitdir for submodule '%s' with more than one worktree not supported"
+msgstr "relocate_gitdir pour le sous-module '%s' avec plus d'un arbre de travail n'est pas supporté"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "impossible de trouve le nom pour le sous-module '%s'"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "refus de déplacer '%s' dans une répertoire git existant"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8618,65 +8459,69 @@
 "'%s' sur\n"
 "'%s'\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "impossible de démarrer ls-files dans .."
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree a renvoyé un code de retour inattendu %d"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "échec du lstat de '%s'"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "échec de la commande trailer '%s'"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566 trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "valeur inconnue '%s' pour la clé '%s'"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299 builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "plus d'un %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "symbole vide dans la ligne de fin '%.*s'"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "impossible de lire le fichier d'entrée '%s'"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
-msgstr "Impossible de lire depuis l'entrée standard"
+msgstr "impossible de lire depuis l'entrée standard"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "stat impossible de %s"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "%s n'est pas un fichier régulier"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "le fichier %s n'est pas inscriptible par l'utilisateur"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "impossible de créer un fichier temporaire"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "impossible de renommer un fichier temporaire en %s"
@@ -8688,21 +8533,16 @@
 #: transport-helper.c:145
 #, c-format
 msgid "unable to find remote helper for '%s'"
-msgstr "Impossible de trouver un assistant distant pour '%s'"
+msgstr "impossible de trouver un assistant distant pour '%s'"
 
 #: transport-helper.c:161 transport-helper.c:575
 msgid "can't dup helper output fd"
-msgstr ""
-"impossible de dupliquer le descripteur de flux de sortie de l'assistant"
+msgstr "impossible de dupliquer le descripteur de flux de sortie de l'assistant"
 
 #: transport-helper.c:214
 #, c-format
-msgid ""
-"unknown mandatory capability %s; this remote helper probably needs newer "
-"version of Git"
-msgstr ""
-"capacité obligatoire inconnue %s ; cet assistant distant requiert "
-"probablement une une nouvelle version de Git"
+msgid "unknown mandatory capability %s; this remote helper probably needs newer version of Git"
+msgstr "capacité obligatoire inconnue %s ; cet assistant distant requiert probablement une une nouvelle version de Git"
 
 #: transport-helper.c:220
 msgid "this remote helper should implement refspec capability"
@@ -8726,7 +8566,7 @@
 msgid "error while running fast-import"
 msgstr "erreur au lancement de fast-import"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "impossible de lire la réf %s"
@@ -8738,15 +8578,13 @@
 
 #: transport-helper.c:616
 msgid "setting remote service path not supported by protocol"
-msgstr ""
-"la spécification du chemin de service distant n'est pas supportée par le "
-"protocole"
+msgstr "la spécification du chemin de service distant n'est pas supportée par le protocole"
 
 #: transport-helper.c:618
 msgid "invalid remote service path"
 msgstr "chemin de service distant invalide"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "option non supportée par le protocole"
 
@@ -8755,70 +8593,72 @@
 msgid "can't connect to subservice %s"
 msgstr "impossible de se connecter au sous-service %s"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negociate-only requiert le protocole v2"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' sans directive 'ok/error' correspondante"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "ok/error attendu, l'assistant a dit '%s'"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'assistant a renvoyé un statut de retour inattendu %s"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "l'assistant %s ne gère pas dry-run"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "l'assistant %s ne gère pas --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "l'assistant %s ne gère pas --signed=if-asked"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "l'assistant %s ne gère pas --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "l'assistant %s ne gère pas --%s"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "l'assistant %s ne gère pas 'push-option'"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
-msgstr ""
-"l'assistant %s ne gère pas push ; un spécificateur de référence est "
-"nécessaire"
+msgstr "l'assistant %s ne gère pas push ; un spécificateur de référence est nécessaire"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "l'assistant %s ne gère pas 'force'"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "impossible de lancer fast-export"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "erreur au lancement de fast-export"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8827,52 +8667,52 @@
 "Aucune référence en commun et aucune spécfiée ; rien à faire.\n"
 "Vous devriez peut-être spécifier une branche.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "format d'objet non géré '%s'"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "réponse malformée dans le liste de réfs : %s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "échec de read(%s)"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "échec de write(%s)"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "échec du fil d'exécution %s"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "échec de jonction du fil d'exécution %s : %s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "impossible de démarrer le fil d'exécution pour copier les données : %s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "échec du processus %s pour l'attente"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "échec du processus %s"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "impossible de démarrer le fil d'exécution pour copier les données"
 
@@ -8891,37 +8731,41 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "transport : option de profondeur invalide '%s'"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "voir protocol.version dans 'git help config' pour plus d'information"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "les options de serveur exigent une version 2 ou supérieure"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "le serveur ne prend pas en charge wait-for-done"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "impossible d'analyser la configuration transport.color.*"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "le support du protocole v2 n'est pas encore implanté"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valeur inconnue pour la config '%s' : %s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transport '%s' non permis"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync n'est plus supporté"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8930,7 +8774,7 @@
 "Les chemins suivants de sous-module contiennent des modifications\n"
 "qui ne peuvent être trouvées sur aucun distant :\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8957,72 +8801,67 @@
 "pour les pousser vers un serveur distant.\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "Abandon."
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "échec de la poussée de tous les sous-modules nécessaires"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "objet arbre trop court"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "mode invalide dans l'entrée d'arbre"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "nom de fichier vide dans une entrée de l'arbre"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "fichier arbre trop court"
 
-#: unpack-trees.c:113
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%sPlease commit your changes or stash them before you switch branches."
-msgstr ""
-"Vos modifications locales aux fichiers suivants seraient écrasées par "
-"l'extraction :\n"
-"%%sVeuillez valider ou remiser vos modifications avant de basculer de "
-"branche."
-
 #: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
-"%%s"
+"%%sPlease commit your changes or stash them before you switch branches."
 msgstr ""
-"Vos modifications locales aux fichiers suivants seraient écrasées par "
-"l'extraction :\n"
-"%%s"
+"Vos modifications locales aux fichiers suivants seraient écrasées par l'extraction :\n"
+"%%sVeuillez valider ou remiser vos modifications avant de basculer de branche."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%sPlease commit your changes or stash them before you merge."
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%s"
 msgstr ""
-"Vos modifications locales aux fichiers suivants seraient écrasées par la "
-"fusion :\n"
-"%%sVeuillez valider ou remiser vos modifications avant la fusion."
+"Vos modifications locales aux fichiers suivants seraient écrasées par l'extraction :\n"
+"%%s"
 
 #: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
+"%%sPlease commit your changes or stash them before you merge."
+msgstr ""
+"Vos modifications locales aux fichiers suivants seraient écrasées par la fusion :\n"
+"%%sVeuillez valider ou remiser vos modifications avant la fusion."
+
+#: unpack-trees.c:122
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
-"Vos modifications locales aux fichiers suivants seraient écrasées par la "
-"fusion :\n"
+"Vos modifications locales aux fichiers suivants seraient écrasées par la fusion :\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -9031,7 +8870,7 @@
 "Vos modifications locales aux fichiers suivants seraient écrasées par %s :\n"
 "%%sVeuillez valider ou remiser vos modifications avant %s."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -9040,27 +8879,25 @@
 "Vos modifications locales aux fichiers suivants seraient écrasées par %s :\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
 "%s"
 msgstr ""
-"La mise à jour des répertoires suivants effacerait les fichiers non suivis "
-"contenus :\n"
+"La mise à jour des répertoires suivants effacerait les fichiers non suivis contenus :\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
-"Les fichiers suivants non suivis de la copie de travail seraient effacés par "
-"l'extraction :\n"
+"Les fichiers suivants non suivis de la copie de travail seraient effacés par l'extraction :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant de basculer de branche."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -9069,17 +8906,16 @@
 "Les fichiers suivants non suivis seraient effacés par l'extraction :\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
-"Les fichiers suivants non suivis de la copie de travail seraient effacés par "
-"la fusion :\n"
+"Les fichiers suivants non suivis de la copie de travail seraient effacés par la fusion :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant la fusion."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -9088,17 +8924,16 @@
 "Les fichiers suivants non suivis seraient effacés par la fusion :\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
-"Les fichiers suivants non suivis de la copie de travail seraient effacés par "
-"%s :\n"
+"Les fichiers suivants non suivis de la copie de travail seraient effacés par %s :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant %s."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -9107,38 +8942,34 @@
 "Les fichiers suivants non suivis seraient effacés par %s :\n"
 "%%s"
 
-#: unpack-trees.c:152
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr ""
-"Les fichiers suivants non suivis de la copie de travail seraient écrasés par "
-"l'extraction :\n"
-"%%sVeuillez renommer ou effacer ces fichiers avant de basculer de branche."
-
 #: 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 ""
+"Les fichiers suivants non suivis de la copie de travail seraient écrasés par l'extraction :\n"
+"%%sVeuillez renommer ou effacer ces fichiers avant de basculer de branche."
+
+#: unpack-trees.c:156
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by checkout:\n"
 "%%s"
 msgstr ""
 "Les fichiers suivants non suivis seraient écrasés par l'extraction :\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
-"Les fichiers suivants non suivis de la copie de travail seraient effacés par "
-"la fusion :\n"
+"Les fichiers suivants non suivis de la copie de travail seraient effacés par la fusion :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant la fusion."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -9147,17 +8978,16 @@
 "Les fichiers suivants non suivis seraient écrasés par la fusion :\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
-"Les fichiers suivants non suivis de la copie de travail seraient écrasés par "
-"%s :\n"
+"Les fichiers suivants non suivis de la copie de travail seraient écrasés par %s :\n"
 "%%sVeuillez renommer ou effacer ces fichiers avant %s."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -9166,12 +8996,12 @@
 "Les fichiers suivants non suivis seraient écrasés par %s :\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "L'entrée '%s' surcharge avec '%s'. Affectation impossible."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9180,71 +9010,67 @@
 "Mise à jour impossible pour le sous-module :\n"
 "%s"
 
-#: unpack-trees.c:178
-#, c-format
-msgid ""
-"The following paths are not up to date and were left despite sparse "
-"patterns:\n"
-"%s"
-msgstr ""
-"Les chemins suivants ne sont pas à jour et ont été laissés malgré les motifs "
-"clairsemés :\n"
-"%s"
-
 #: unpack-trees.c:180
 #, c-format
 msgid ""
-"The following paths are unmerged and were left despite sparse patterns:\n"
+"The following paths are not up to date and were left despite sparse patterns:\n"
 "%s"
 msgstr ""
-"Les chemins suivants ne sont pas fusionnés et ont été laissés malgré les "
-"motifs clairsemés :\n"
+"Les chemins suivants ne sont pas à jour et ont été laissés malgré les motifs clairsemés :\n"
 "%s"
 
 #: unpack-trees.c:182
 #, c-format
 msgid ""
-"The following paths were already present and thus not updated despite sparse "
-"patterns:\n"
+"The following paths are unmerged and were left despite sparse patterns:\n"
 "%s"
 msgstr ""
-"Les chemins suivants étaient déjà présents et ont été laissés malgré les "
-"motifs clairsemés :\n"
+"Les chemins suivants ne sont pas fusionnés et ont été laissés malgré les motifs clairsemés :\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:184
+#, c-format
+msgid ""
+"The following paths were already present and thus not updated despite sparse patterns:\n"
+"%s"
+msgstr ""
+"Les chemins suivants étaient déjà présents et ont été laissés malgré les motifs clairsemés :\n"
+"%s"
+
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "Abandon\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
-msgid ""
-"After fixing the above paths, you may want to run `git sparse-checkout "
-"reapply`.\n"
-msgstr ""
-"Après correction des chemins ci-dessus, vous voulez peut-être lancer `git "
-"sparse-checkout reapply`.\n"
+msgid "After fixing the above paths, you may want to run `git sparse-checkout reapply`.\n"
+msgstr "Après correction des chemins ci-dessus, vous voulez peut-être lancer `git sparse-checkout reapply`.\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Mise à jour des fichiers"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
 "colliding group is in the working tree:\n"
 msgstr ""
-"Les chemins suivants sont en collision (par exemple par des chemins\n"
+"les chemins suivants sont en collision (par exemple par des chemins\n"
 "sensibles à la casse dans une système de fichier insensible) et un\n"
 "seul du groupe en collision est dans l'arbre de travail :\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "Mise à jour des drapeaux de l'index"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr "l'arbre de travail et le commit non suivi ont des entrées dupliquées : %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "vidage attendu après les arguments de récupération"
 
@@ -9281,75 +9107,102 @@
 msgid "Fetching objects"
 msgstr "Récupération des objets"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "échec de la lecture de '%s'"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
-msgstr ""
-"'%s' dans l'arbre de travail principal n'est pas le répertoire de dépôt"
+msgstr "'%s' dans l'arbre de travail principal n'est pas le répertoire de dépôt"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
-msgstr ""
-"le fichier '%s' ne contient pas de chemin absolu à l'emplacement de l'arbre "
-"de travail"
+msgstr "le fichier '%s' ne contient pas de chemin absolu à l'emplacement de l'arbre de travail"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' n'existe pas"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' n'est pas un fichier .git, code d'erreur %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' ne pointe pas en retour sur '%s'"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "pas un répertoire"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git n'est pas un fichier"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr "fichier .git cassé"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr "fichier .git incorrect"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "pas un chemin valide"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "impossible de localiser le dépôt ; .git n'est pas un fichier"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "impossible de localiser le dépôt ; .git ne fait pas référence à un dépôt"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "impossible de localiser le dépôt ; fichier .git cassé"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "gitdir non lisible"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "gitdir incorrect"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "pas un répertoire valide"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "le fichier gitdir n'existe pas"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "impossible de lire le fichier gitdir (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "lecture trop courte ( %<PRIuMAX> octets attendus, %<PRIuMAX> octets lus)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "fichier gitdir invalide"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "le fichier gitdir pointe sur un endroit inexistant"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9375,9 +9228,7 @@
 #: wt-status.c:190 wt-status.c:222
 #, c-format
 msgid "  (use \"git restore --source=%s --staged <file>...\" to unstage)"
-msgstr ""
-"  (utilisez \"git restore --source=%s --staged <fichier>...\" pour "
-"désindexer)"
+msgstr "  (utilisez \"git restore --source=%s --staged <fichier>...\" pour désindexer)"
 
 #: wt-status.c:193 wt-status.c:225
 msgid "  (use \"git rm --cached <file>...\" to unstage)"
@@ -9389,50 +9240,40 @@
 
 #: wt-status.c:199 wt-status.c:203
 msgid "  (use \"git add/rm <file>...\" as appropriate to mark resolution)"
-msgstr ""
-"  (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme "
-"résolu)"
+msgstr "  (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme résolu)"
 
 #: wt-status.c:201
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (utilisez \"git rm <fichier>...\" pour marquer comme résolu)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Modifications qui seront validées :"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Modifications qui ne seront pas validées :"
 
 #: wt-status.c:238
 msgid "  (use \"git add <file>...\" to update what will be committed)"
-msgstr ""
-"  (utilisez \"git add <fichier>...\" pour mettre à jour ce qui sera validé)"
+msgstr "  (utilisez \"git add <fichier>...\" pour mettre à jour ce qui sera validé)"
 
 #: wt-status.c:240
 msgid "  (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr ""
-"  (utilisez \"git add/rm <fichier>...\" pour mettre à jour ce qui sera "
-"validé)"
+msgstr "  (utilisez \"git add/rm <fichier>...\" pour mettre à jour ce qui sera validé)"
 
 #: wt-status.c:241
-msgid ""
-"  (use \"git restore <file>...\" to discard changes in working directory)"
-msgstr ""
-"  (utilisez \"git restore <fichier>...\" pour annuler les modifications dans "
-"le répertoire de travail)"
+msgid "  (use \"git restore <file>...\" to discard changes in working directory)"
+msgstr "  (utilisez \"git restore <fichier>...\" pour annuler les modifications dans le répertoire de travail)"
 
 #: wt-status.c:243
 msgid "  (commit or discard the untracked or modified content in submodules)"
-msgstr ""
-"  (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)"
+msgstr "  (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)"
 
 #: wt-status.c:254
 #, c-format
 msgid "  (use \"git %s <file>...\" to include in what will be committed)"
-msgstr ""
-"  (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)"
+msgstr "  (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)"
 
 #: wt-status.c:266
 msgid "both deleted:"
@@ -9506,22 +9347,22 @@
 msgid "untracked content, "
 msgstr "contenu non suivi, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Votre remisage contient actuellement %d entrée"
 msgstr[1] "Votre remisage contient actuellement %d entrées"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Sous-modules modifiés mais non mis à jour :"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Changements du sous-module à valider :"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9529,7 +9370,7 @@
 "Ne touchez pas à la ligne ci-dessus.\n"
 "Tout ce qui suit sera éliminé."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9537,263 +9378,256 @@
 "You can use '--no-ahead-behind' to avoid this.\n"
 msgstr ""
 "\n"
-"%.2f secondes ont été nécessaires pour calculer les valeurs d'avance/retard "
-"de la branche.\n"
+"%.2f secondes ont été nécessaires pour calculer les valeurs d'avance/retard de la branche.\n"
 "Vous pouvez utiliser '--no-ahead-behind' pour éviter ceci.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Vous avez des chemins non fusionnés."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (réglez les conflits puis lancez \"git commit\")"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (utilisez \"git merge --abort\" pour annuler la fusion)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tous les conflits sont réglés mais la fusion n'est pas terminée."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (utilisez \"git commit\" pour terminer la fusion)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Vous êtes au milieu d'une session am."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "Le patch actuel est vide."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git am --continue\")"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (utilisez \"git am --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (utilisez \"git am --abort\" pour restaurer la branche d'origine)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo est manquant."
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "Aucune commande réalisée."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Dernière commande effectuée (%d commande effectuée) :"
 msgstr[1] "Dernières commandes effectuées (%d commandes effectuées) :"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (voir plus dans le fichier %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "Aucune commande restante."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Prochaine commande à effectuer (%d commande restante) :"
 msgstr[1] "Prochaines commandes à effectuer (%d commandes restantes) :"
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (utilisez \"git rebase --edit-todo\" pour voir et éditer)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Vous êtes en train de rebaser la branche '%s' sur '%s'."
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Vous êtes en train de rebaser."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git rebase --continue\")"
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (utilisez \"git rebase --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (utilisez \"git rebase --abort\" pour extraire la branche d'origine)"
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (tous les conflits sont réglés : lancez \"git rebase --continue\")"
 
-#: wt-status.c:1382
-#, c-format
-msgid ""
-"You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Vous êtes actuellement en train de fractionner un commit pendant un rebasage "
-"de la branche '%s' sur '%s'."
-
 #: wt-status.c:1387
-msgid "You are currently splitting a commit during a rebase."
-msgstr ""
-"Vous êtes actuellement en train de fractionner un commit pendant un rebasage."
-
-#: wt-status.c:1390
-msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
-msgstr ""
-"  (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")"
-
-#: wt-status.c:1394
 #, c-format
-msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Vous êtes actuellement en train d'éditer un commit pendant un rebasage de la "
-"branche '%s' sur '%s'."
+msgid "You are currently splitting a commit while rebasing branch '%s' on '%s'."
+msgstr "Vous êtes actuellement en train de fractionner un commit pendant un rebasage de la branche '%s' sur '%s'."
+
+#: wt-status.c:1392
+msgid "You are currently splitting a commit during a rebase."
+msgstr "Vous êtes actuellement en train de fractionner un commit pendant un rebasage."
+
+#: wt-status.c:1395
+msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
+msgstr "  (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")"
 
 #: wt-status.c:1399
-msgid "You are currently editing a commit during a rebase."
-msgstr ""
-"Vous êtes actuellement en train d'éditer un commit pendant un rebasage."
+#, c-format
+msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
+msgstr "Vous êtes actuellement en train d'éditer un commit pendant un rebasage de la branche '%s' sur '%s'."
 
-#: wt-status.c:1402
+#: wt-status.c:1404
+msgid "You are currently editing a commit during a rebase."
+msgstr "Vous êtes actuellement en train d'éditer un commit pendant un rebasage."
+
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (utilisez \"git commit --amend\" pour corriger le commit actuel)"
 
-#: wt-status.c:1404
-msgid ""
-"  (use \"git rebase --continue\" once you are satisfied with your changes)"
-msgstr ""
-"  (utilisez \"git rebase --continue\" quand vous avez effectué toutes vos "
-"modifications)"
+#: wt-status.c:1409
+msgid "  (use \"git rebase --continue\" once you are satisfied with your changes)"
+msgstr "  (utilisez \"git rebase --continue\" quand vous avez effectué toutes vos modifications)"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Picorage en cours."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Vous êtes actuellement en train de picorer le commit %s."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git cherry-pick --continue\")"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (lancez \"git cherry-pick --continue\" pour continuer)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
-msgstr ""
-"  (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
+msgstr "  (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (utilisez \"git cherry-pick --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (utilisez \"git cherry-pick --abort\" pour annuler le picorage)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Rétablissement en cours."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Vous êtes actuellement en train de rétablir le commit %s."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git revert --continue\")"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (lancez \"git revert --continue\" pour continuer)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (tous les conflits sont réglés : lancez \"git revert --continue\")"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (utilisez \"git revert --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (utilisez \"git revert --abort\" pour annuler le rétablissement)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Vous êtes en cours de bissection, depuis la branche '%s'."
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Vous êtes en cours de bissection."
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (utilisez \"git bisect reset\" pour revenir à la branche d'origine)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
-msgstr ""
-"Vous êtes dans une extraction partielle avec %d %% de fichiers suivis "
-"présents."
+msgstr "Vous êtes dans une extraction partielle avec %d %% de fichiers suivis présents."
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "Sur la branche "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "rebasage interactif en cours ; sur "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "rebasage en cours ; sur "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD détachée sur "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD détachée depuis "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Actuellement sur aucun branche."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Validation initiale"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "Aucun commit"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Fichiers non suivis"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Fichiers ignorés"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9802,108 +9636,115 @@
 msgstr ""
 "L'énumération des fichiers non suivis a duré %.2f secondes. 'status -uno'\n"
 "peut l'accélérer, mais vous devez alors faire attention à ne pas\n"
-"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help "
-"status')."
+"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help status')."
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Fichiers non suivis non affichés%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (utilisez -u pour afficher les fichiers non suivis)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Aucune modification"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
-msgstr ""
-"aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou "
-"\"git commit -a\")\n"
+msgstr "aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou \"git commit -a\")\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "aucune modification ajoutée à la validation\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
-msgid ""
-"nothing added to commit but untracked files present (use \"git add\" to "
-"track)\n"
-msgstr ""
-"aucune modification ajoutée à la validation mais des fichiers non suivis "
-"sont présents (utilisez \"git add\" pour les suivre)\n"
+msgid "nothing added to commit but untracked files present (use \"git add\" to track)\n"
+msgstr "aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez \"git add\" pour les suivre)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
-msgstr ""
-"aucune modification ajoutée à la validation mais des fichiers non suivis "
-"sont présents\n"
+msgstr "aucune modification ajoutée à la validation mais des fichiers non suivis sont présents\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
-msgstr ""
-"rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les "
-"suivre)\n"
+msgstr "rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les suivre)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "rien à valider\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "rien à valider (utilisez -u pour afficher les fichiers non suivis)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "rien à valider, la copie de travail est propre\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "Encore aucun commit sur "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (aucune branche)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "différent"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "derrière "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "devant "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
-msgstr "Impossible de %s : vous avez des modifications non indexées."
+msgstr "impossible de %s : vous avez des modifications non indexées."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "de plus, votre index contient des modifications non validées."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "%s impossible : votre index contient des modifications non validées."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "impossible de trouver le commit %"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "impossible de lire la réponse IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "impossible de démarrer accept_thread '%s'"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "impossible de démarrer worker[0] pour '%s'"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "échec pour délier '%s'"
@@ -9912,131 +9753,130 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<options>] [--] <chemin>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "impossible de chmod %cx '%s'"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "état de diff inattendu %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "échec de la mise à jour des fichiers"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "suppression de '%s'\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Modifications non indexées après rafraîchissement de l'index :"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "Impossible de lire l'index"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Impossible d'ouvrir '%s' en écriture."
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "Impossible d'écrire le patch"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "échec de l'édition du patch"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Stat de '%s' impossible"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Patch vide. Abandon."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Impossible d'appliquer '%s'"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
-msgstr ""
-"Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
+msgstr "Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
-#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
+#: 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
 msgid "dry run"
 msgstr "simuler l'action"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "sélection interactive"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "sélection interactive des sections"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "édition du diff actuel et application"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "permettre l'ajout de fichiers ignorés"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "mettre à jour les fichiers suivis"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
-msgstr ""
-"renormaliser les fins de lignes (EOL) des fichiers suivis (implique -u)"
+msgstr "renormaliser les fins de lignes (EOL) des fichiers suivis (implique -u)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "enregistrer seulement le fait que le chemin sera ajouté plus tard"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "ajouter les modifications de tous les fichiers suivis et non suivis"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
-msgstr ""
-"ignorer les chemins effacés dans la copie de travail (identique à --no-all)"
+msgstr "ignorer les chemins effacés dans la copie de travail (identique à --no-all)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "ne pas ajouter, juste rafraîchir l'index"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
-msgstr ""
-"sauter seulement les fichiers qui ne peuvent pas être ajoutés du fait "
-"d'erreurs"
+msgstr "sauter seulement les fichiers qui ne peuvent pas être ajoutés du fait d'erreurs"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "vérifier si des fichiers - même manquants - sont ignorés, à vide"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "outrepasser le bit exécutable pour les fichiers listés"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "avertir lors de l'ajout d'un dépôt embarqué"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "backend pour `git stash -p`"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10067,12 +9907,12 @@
 "\n"
 "Référez-vous à \"git help submodule\" pour plus d'information."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "dépôt git embarqué ajouté : %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10082,48 +9922,49 @@
 "Éliminez ce message en lançant\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "échec de l'ajout de fichiers"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run est incompatible avec --interactive/--patch"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file est incompatible avec --interactive/--patch"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file est incompatible avec --edit"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A et -u sont mutuellement incompatibles"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr ""
-"L'option --ignore-missing ne peut être utilisée qu'en complément de --dry-run"
+msgstr "L'option --ignore-missing ne peut être utilisée qu'en complément de --dry-run"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "Le paramètre '%s' de --chmod doit être soit -x soit +x"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363 builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file est incompatible avec pathspec arguments"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369 builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul nécessite --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Rien de spécifié, rien n'a été ajouté.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10133,112 +9974,105 @@
 "Éliminez ce message en lançant\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "impossible d'analyser l'auteur du script"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' a été effacé par le crochet applypatch-msg"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Ligne en entrée malformée : '%s'."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Impossible de copier les notes de '%s' vers '%s'"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "échec de fseek"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "impossible d'analyser le patch '%s'"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Seulement une série de patchs StGIT peut être appliquée à la fois"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "horodatage invalide"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "ligne de Date invalide"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "décalage horaire invalide"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Échec de détection du format du patch."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "échec de la création du répertoire '%s'"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "Échec de découpage des patchs."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Quand vous avez résolu ce problème, lancez \"%s --continue\"."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si vous préférez plutôt sauter ce patch, lancez \"%s --skip\"."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
-msgstr ""
-"Pour restaurer la branche originale et arrêter de patcher, lancez \"%s --"
-"abort\"."
+msgstr "Pour restaurer la branche originale et arrêter de patcher, lancez \"%s --abort\"."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
-msgstr ""
-"Rustine envoyée avec format=flowed ; les espaces en fin de ligne peuvent "
-"être perdus."
+msgstr "Rustine envoyée avec format=flowed ; les espaces en fin de ligne peuvent être perdus."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "Le patch actuel est vide."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "ligne d'auteur manquante dans le commit %s"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "ligne d'identification invalide : %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
-msgstr ""
-"Le dépôt n'a pas les blobs nécessaires pour un retour à une fusion à 3 "
-"points."
+msgstr "Le dépôt n'a pas les blobs nécessaires pour un retour à une fusion à 3 points."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
-msgstr ""
-"Utilisation de l'information de l'index pour reconstruire un arbre de base..."
+msgstr "Utilisation de l'information de l'index pour reconstruire un arbre de base..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10246,24 +10080,24 @@
 "Avez-vous édité le patch à la main ?\n"
 "Il ne s'applique pas aux blobs enregistrés dans son index."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Retour à un patch de la base et fusion à 3 points..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Échec d'intégration des modifications."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "application à un historique vide"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "impossible de continuer : %s n'existe pas."
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "Le corps de la validation est :"
 
@@ -10271,40 +10105,39 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Appliquer ? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all : "
 
-#: builtin/am.c:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "impossible d'écrire le fichier d'index"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Index sale : impossible d'appliquer des patchs (sales : %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Application de  %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Pas de changement -- Patch déjà appliqué."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
-msgstr "le patch a échoué à %s %.*s"
+msgstr "l'application de la rustine a échoué à %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
-msgstr ""
-"Utilisez 'git am --show-current-patch=diff' pour visualiser le patch en échec"
+msgstr "Utilisez 'git am --show-current-patch=diff' pour visualiser le patch en échec"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10312,33 +10145,28 @@
 msgstr ""
 "Aucun changement - avez-vous oublié d'utiliser 'git add' ?\n"
 "S'il n'y a plus rien à indexer, il se peut qu'autre chose ait déjà\n"
-"introduit les mêmes changements ; vous pourriez avoir envie de sauter ce "
-"patch."
+"introduit les mêmes changements ; vous pourriez avoir envie de sauter ce patch."
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 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 ""
 "Vous avez encore des chemin non-fusionnés dans votre index.\n"
-"Vous devriez lancer 'git add' sur chaque conflit résolu pour les marquer "
-"comme tel.\n"
-"Vous pouvez lancer 'git rm' sur un fichier \"supprimé par eux\" pour "
-"accepter son état."
+"Vous devriez lancer 'git add' sur chaque conflit résolu pour les marquer comme tel.\n"
+"Vous pouvez lancer 'git rm' sur un fichier \"supprimé par eux\" pour accepter son état."
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
-#: builtin/reset.c:355
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347 builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Impossible d'analyser l'objet '%s'."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "échec du nettoyage de l'index"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10346,157 +10174,150 @@
 "Vous semblez avoir déplacé la HEAD depuis le dernier échec de 'am'.\n"
 "Pas de retour à ORIG_HEAD"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valeur invalide pour --patch-format : %s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Valeur invalide pour --show-current-patch : %s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s est incompatible avec --show-current-patch=%s"
 
-#: builtin/am.c:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<options>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<options>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "exécution interactive"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "option historique -- no-op"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "permettre de revenir à une fusion à 3 points si nécessaire"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16 builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "être silencieux"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "ajouter une ligne terminale Signed-off-by au message de validation"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "recoder en utf-8 (par défaut)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "passer l'option -k à git-mailinfo"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "passer l'option -b à git-mailinfo"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "passer l'option -m à git-mailinfo"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passer l'option --keep-cr à git-mailsplit fpour le format mbox"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
-msgstr ""
-"ne pas passer l'option --keep-cr à git-mailsplit indépendamment de am.keepcr"
+msgstr "ne pas passer l'option --keep-cr à git-mailsplit indépendamment de am.keepcr"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "retirer tout le contenu avant la ligne des ciseaux"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "le passer à travers 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
 msgid "pass it through git-apply"
 msgstr "le passer jusqu'à git-apply"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
-#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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/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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
-#: builtin/verify-tag.c:38
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "format de présentation des patchs"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "surcharger le message d'erreur lors d'un échec d'application de patch"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "continuer à appliquer les patchs après résolution d'un conflit"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "synonymes de --continue"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "sauter le patch courant"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr ""
-"restaurer la branche originale et abandonner les applications de patch."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "restaurer la branche originale et abandonner les applications de patch"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "abandonne l'opération de patch mais garde HEAD où il est."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "abandonne l'opération de patch mais garde HEAD où il est"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "afficher le patch en cours d'application"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "mentir sur la date de validation"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "utiliser l'horodatage actuel pour la date d'auteur"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "id-clé"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "signer les commits avec GPG"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(utilisation interne pour git-rebase)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10504,17 +10325,16 @@
 "L'option -b/--binary ne fait plus rien depuis longtemps,\n"
 "et elle sera supprimée. Veuillez ne plus l'utiliser."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "échec à la lecture de l'index"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
-msgstr ""
-"le répertoire précédent de rebasage %s existe toujours mais mbox donnée."
+msgstr "le répertoire précédent de rebasage %s existe toujours mais mbox donnée."
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10523,13 +10343,11 @@
 "Répertoire abandonné %s trouvé.\n"
 "Utilisez \"git am --abort\" pour le supprimer."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
-msgstr ""
-"Pas de résolution de l'opération en cours, nous ne sommes pas dans une "
-"reprise."
+msgstr "Pas de résolution de l'opération en cours, nous ne sommes pas dans une reprise."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "le mode interactif requiert des rustines sur la ligne de commande"
 
@@ -10572,129 +10390,105 @@
 msgstr "git bisect--helper --bisect-reset [<commit>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <état> <révision> <terme-pour-"
-"bon> <terme-pour-mauvais>"
+msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+msgstr "git bisect--helper --bisect-next-check <terme-pour-bon> <terme-pour-mauvais> [<term>]"
 
 #: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <commande> <terme-pour-bon> "
-"<terme-pour-mauvais>"
+msgid "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-new]"
 
 #: builtin/bisect--helper.c:26
-msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
-msgstr ""
-"git bisect--helper --bisect-next-check <terme-pour-bon> <terme-pour-mauvais> "
-"[<term>]"
-
-#: builtin/bisect--helper.c:27
 msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
+"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-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
-#: builtin/bisect--helper.c:28
-msgid ""
-"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-{new,bad}=<terme> --term-{old,good}"
-"=<terme>][--no-checkout] [--first-parent] [<mauvais> [<bon>...]] [--] "
+"git bisect--helper --bisect-start [--term-{new,bad}=<terme> --term-{old,good}=<terme>][--no-checkout] [--first-parent] [<mauvais> [<bon>...]] [--] "
 "[<chemins>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-reset (bad|new) [<rév>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-reset (good|old) [<rév>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-next <nom-de-fichier>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<rév>|<plage>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "impossible d'ouvrir le fichier '%s' en mode '%s'"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "impossible d'écrire le fichier '%s'"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' n'est pas un terme valide"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "impossible d'utiliser la commande incluse '%s' comme terme"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "impossible de modifier la signification du terme '%s'"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "veuillez utiliser deux termes différents"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "Pas de bissection en cours.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' n'est pas un commit valide"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
-msgid ""
-"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
-msgstr ""
-"Échec d'extraction de la HEAD d'origine '%s'. Essayez 'git bisect reset "
-"<commit>'."
+msgid "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
+msgstr "échec d'extraction de la HEAD d'origine '%s'. Essayez 'git bisect reset <commit>'."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Mauvais argument pour bisect_write : %s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "impossible d'obtenir l'oid de la révision '%s'"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "impossible d'ouvrir le fichier '%s'"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Commande invalide : vous êtes actuellement dans une bissection %s/%s"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10703,7 +10497,7 @@
 "Vous devez me donner au moins une révision %s et une révision %s.\n"
 "Vous pouvez utiliser \"git bisect %s\" et \"git bisect %s\" pour cela."
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10714,24 +10508,24 @@
 "Puis vous devez me donner au moins une révision %s et une révision %s.\n"
 "Vous pouvez utiliser \"git bisect %s\" et \"git bisect %s\" pour cela."
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
-msgstr "Attention : bissection avec seulement une validation %s"
+msgstr "bissection avec seulement un commit %s"
 
 #. 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:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Confirmez-vous [Y/n] ? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "aucun terme défini"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10740,63 +10534,61 @@
 "Vos termes actuels sont %s pour l'état ancien\n"
 "et %s pour le nouvel état.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
 "Supported options are: --term-good|--term-old and --term-bad|--term-new."
 msgstr ""
 "argument invalide %s pour 'git bisect terms'.\n"
-"Les options supportées sont : --term-good|--term-old et --term-bad|--term-"
-"new."
+"Les options supportées sont : --term-good|--term-old et --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "échec de la préparation du parcours des révisions\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "impossible d'ouvrir '%s' en ajout"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "'' n'est pas un terme valide"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "option non reconnue : '%s'"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' ne semble être une révision valide"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "mauvaise HEAD - j'ai besoin d'une HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
-msgstr ""
-"L'extraction de '%s' a échoué. Essayez 'git bisect start <branche-valide>'."
+msgstr "l'extraction de '%s' a échoué. Essayez 'git bisect start <branche-valide>'."
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "refus de bissecter sur un arbre 'cg-seeked'"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "mauvaise HEAD - référence symbolique douteuse"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "réference invalide : '%s'"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Vous devez démarrer avec \"git bisect start\"\n"
 
@@ -10804,93 +10596,106 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Souhaitez-vous que je le fasse pour vous [Y/n] ? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Veuillez appeler `--bisect-state` avec au moins un argument"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "'git bisect %s' n'accepte qu'un seul argument."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Mauvaise révision en entrée : %s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Mauvaise révision en entrée (pas un commit) : %s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "Pas de bissection en cours."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s' ?? de quoi parlez-vous ?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "impossible de lire le fichier '%s' pour rejouer"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "réinitialiser l'état de la bissection"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "écrire l'état de la bissection dans BISECT_LOG"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "vérifier et régler les termes dans un état de la bissection"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "vérifier si les termes bons ou mauvais existent"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "afficher les termes de bissection"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "démarrer une session de bissection"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "trouver le prochain commit de bissection"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"vérifier le prochain état de bissection puis extraire le prochain commit de "
-"bissection"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "marquer l'état d'une références (ou plusieurs)"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "lister les étapes de bissection jusqu'ici"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "rejouer le processus de bissection depuis le fichier fourni"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "sauter certains commits pour l'extraction"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "pas de journal pour BISECT_WRITE"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset supporte soit aucun argument, soit un commit"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write supporte soit 4 arguments, soit 5 arguments"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms exige 3 arguments"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check exige 2 ou 3 arguments"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms exige 0 ou 1 argument"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next exige 0 argument"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next exige 0 argument"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log exige 0 argument"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "pas de fichier de log donné"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10909,151 +10714,140 @@
 msgid "must end with a color"
 msgstr "doit finir avec une couleur"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "couleur invalide '%s' dans color.blame.repeatedlines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "valeur invalide pour blame.coloring"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "référence à ignorer %s introuvable"
 
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "montrer les éléments de blâme au fur et à mesure de leur découverte, de manière incrémentale"
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "ne pas montrer les noms des objets pour les commits de limite (Défaut : désactivé)"
+
 #: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr ""
-"Montrer les éléments de blâme au fur et à mesure de leur découverte, de "
-"manière incrémentale"
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
 
 #: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
-msgstr ""
-"Ne pas montrer les noms des objets pour les commits de limite (Défaut : "
-"désactivé)"
+msgid "show work cost statistics"
+msgstr "montrer les statistiques de coût d'activité"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr ""
-"Ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
+#: builtin/blame.c: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
+msgid "force progress reporting"
+msgstr "forcer l'affichage de l'état d'avancement"
 
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "Montrer les statistiques de coût d'activité"
+msgid "show output score for blame entries"
+msgstr "montrer le score de sortie pour les éléments de blâme"
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Forcer l'affichage de l'état d'avancement"
+msgid "show original filename (Default: auto)"
+msgstr "montrer les noms de fichier originaux (Défaut : auto)"
 
 #: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "Montrer le score de sortie pour les éléments de blâme"
+msgid "show original linenumber (Default: off)"
+msgstr "montrer les numéros de lignes originaux (Défaut : désactivé)"
 
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr "Montrer les noms de fichier originaux (Défaut : auto)"
+msgid "show in a format designed for machine consumption"
+msgstr "afficher dans un format propice à la consommation par machine"
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
-msgstr "Montrer les numéros de lignes originaux (Défaut : désactivé)"
+msgid "show porcelain format with per-line commit information"
+msgstr "afficher en format porcelaine avec l'information de commit par ligne"
 
 #: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "Afficher dans un format propice à la consommation par machine"
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "utiliser le même mode de sortie que git-annotate (Défaut : désactivé)"
 
 #: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr "Afficher en format porcelaine avec l'information de commit par ligne"
+msgid "show raw timestamp (Default: off)"
+msgstr "afficher les horodatages bruts (Défaut : désactivé)"
 
 #: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "Utiliser le même mode de sortie que git-annotate (Défaut : désactivé)"
+msgid "show long commit SHA1 (Default: off)"
+msgstr "afficher les longs SHA1 de commits (Défaut : désactivé)"
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Afficher les horodatages bruts (Défaut : désactivé)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Afficher les longs SHA1 de commits (Défaut : désactivé)"
+msgid "show author email instead of name (Default: off)"
+msgstr "afficher le courriel de l'auteur au lieu du nom (Défaut : désactivé)"
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)"
+msgid "ignore whitespace differences"
+msgstr "ignorer les différences d'espace"
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr "Afficher le courriel de l'auteur au lieu du nom (Défaut : désactivé)"
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Ignorer les différences d'espace"
-
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "rév"
 
-#: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "ignore <rev> pendant le blâme"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "ignorer <rev> pendant le blâme"
 
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
 msgstr "ignorer les révisions listées dans <fichier>"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:885
 msgid "color redundant metadata from previous line differently"
-msgstr ""
-"colorer différemment les métadonnées redondantes avec la ligne précédente"
+msgstr "colorer différemment les métadonnées redondantes avec la ligne précédente"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "colorier les lignes par âge"
 
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
+
 #: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr ""
-"Dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
+msgid "use <file>'s contents as the final image"
+msgstr "utiliser le contenu de <fichier> comme image finale"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr ""
-"Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "Utiliser le contenu de <fichier> comme image finale"
-
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "score"
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "trouver les copies de ligne dans et entre les fichiers"
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "trouver les mouvements de ligne dans et entre les fichiers"
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr "Trouver les copies de ligne dans et entre les fichiers"
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr "Trouver les mouvements de ligne dans et entre les fichiers"
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr "plage"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
-msgstr ""
-"Traiter seulement l'intervalle de ligne <début>,<fin> ou la fonction : <nom-"
-"de-fonction>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
+msgstr "traiter seulement l'intervalle de ligne <début>,<fin> ou la fonction : <nom-de-fonction>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
-msgstr ""
-"--progress ne peut pas être utilisé avec --incremental ou les formats "
-"porcelaine"
+msgstr "--progress ne peut pas être utilisé avec --incremental ou les formats porcelaine"
 
 #. TRANSLATORS: This string is used to tell us the
 #. maximum display width for a relative timestamp in
@@ -11063,18 +10857,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "il y a 10 ans et 11 mois"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "le fichier %s n'a qu'%lu ligne"
 msgstr[1] "le fichier %s n'a que %lu lignes"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Assignation de blâme aux lignes"
 
@@ -11084,7 +10878,7 @@
 
 #: builtin/branch.c:30
 msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<options] [-l] [-f] <nom-de-branche> [<point-de-départ>]"
+msgstr "git branch [<options>] [-l] [-f] <nom-de-branche> [<point-de-départ>]"
 
 #: builtin/branch.c:31
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
@@ -11092,13 +10886,11 @@
 
 #: builtin/branch.c:32
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
-msgstr ""
-"git branch [<options>] (-m | -M) [<ancienne-branche>] <nouvelle-branche>"
+msgstr "git branch [<options>] (-m | -M) [<ancienne-branche>] <nouvelle-branche>"
 
 #: builtin/branch.c:33
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
-msgstr ""
-"git branch [<options>] (-c | -C) [<ancienne-branche>] <nouvelle-branche>"
+msgstr "git branch [<options>] (-c | -C) [<ancienne-branche>] <nouvelle-branche>"
 
 #: builtin/branch.c:34
 msgid "git branch [<options>] [-r | -a] [--points-at]"
@@ -11144,121 +10936,107 @@
 msgid "Update of config-file failed"
 msgstr "Échec de la mise à jour du fichier de configuration"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "impossible d'utiliser -a avec -d"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Impossible de rechercher l'objet commit pour HEAD"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Impossible de supprimer la branche '%s' extraite dans '%s'"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "branche de suivi '%s' non trouvée."
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "branche '%s' non trouvée."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Erreur lors de la suppression de la branche de suivi '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Erreur lors de la suppression de la branche '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Branche de suivi %s supprimée (précédemment %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Branche %s supprimée (précédemment %s).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "impossible d'analyser la chaîne de format"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "impossible de résoudre HEAD"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) pointe hors de refs/heads/"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "La branche %s est en cours de rebasage sur %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "La branche %s est en cours de bissection sur %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "impossible de copier la branche actuelle, il n'y en a pas."
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr "impossible de renommer la branche actuelle, il n'y en a pas."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nom de branche invalide : '%s'"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Échec de renommage de la branche"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Échec de copie de la branche"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Création d'une copie d'une branche mal nommée '%s'"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Renommage d'une branche mal nommée '%s'"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "La branche a été renommée en %s, mais HEAD n'est pas mise à jour !"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
-msgstr ""
-"La branche est renommée, mais la mise à jour du fichier de configuration a "
-"échoué"
+msgstr "La branche est renommée, mais la mise à jour du fichier de configuration a échoué"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
-msgstr ""
-"La branche est copiée, mais la mise à jour du fichier de configuration a "
-"échoué"
+msgstr "La branche est copiée, mais la mise à jour du fichier de configuration a échoué"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11269,228 +11047,215 @@
 "  %s\n"
 "Les lignes commençant par '%c' seront ignorées.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Options génériques"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "afficher le hachage et le sujet, doublé pour la branche amont"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "supprimer les messages d'information"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "régler le mode de suivi (voir git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "ne pas utiliser"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "amont"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "modifier l'information amont"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "désactiver l'information amont"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "utiliser la coloration dans la sortie"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "agir sur les branches de suivi distantes"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "afficher seulement les branches qui contiennent le commit"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "afficher seulement les branches qui ne contiennent pas le commit"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Actions spécifiques à git-branch :"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "afficher à la fois les branches de suivi et les branches locales"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "supprimer une branche totalement fusionnée"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "supprimer une branche (même non fusionnée)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "déplacer/renommer une branche et son reflog"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "déplacer/renommer une branche, même si la cible existe"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "copier une branche et son reflog"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "copier une branche, même si la cible existe"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "afficher les noms des branches"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "afficher le nom de la branche courante"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "créer le reflog de la branche"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "éditer la description de la branche"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "forcer la création, le déplacement/renommage, ou la suppression"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "afficher seulement les branches qui sont fusionnées"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "afficher seulement les branches qui ne sont pas fusionnées"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "afficher les branches en colonnes"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:434
+#: 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
 msgid "object"
 msgstr "objet"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "afficher seulement les branches de l'objet"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "le tri et le filtrage sont non-sensibles à la casse"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format à utiliser pour la sortie"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD non trouvée sous refs/heads !"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column et --verbose sont incompatibles"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "le nom de branche est requis"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "Impossible de décrire une HEAD détachée"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "impossible d'éditer la description de plus d'une branche"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Aucun commit sur la branche '%s'."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Aucune branche nommée '%s'."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "trop de branches pour une opération de copie"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "trop d'arguments pour une opération de renommage"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "trop d'arguments pour spécifier une branche amont"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
-msgid ""
-"could not set upstream of HEAD to %s when it does not point to any branch."
-msgstr ""
-"impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur "
-"aucune branche."
+msgid "could not set upstream of HEAD to %s when it does not point to any branch."
+msgstr "impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur aucune branche."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "pas de branche '%s'"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "la branche '%s' n'existe pas"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "trop d'arguments pour désactiver un amont"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
-msgstr ""
-"impossible de désactiver une branche amont de HEAD quand elle ne pointe sur "
-"aucune branche."
+msgstr "impossible de désactiver une branche amont de HEAD quand elle ne pointe sur aucune branche."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "La branche '%s' n'a aucune information de branche amont"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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 options -a et -r de 'git branch' n'ont pas de sens avec un nom de "
-"branche.\n"
+"Les options -a et -r de 'git branch' n'ont pas de sens avec un nom de branche.\n"
 "Vouliez-vous plutôt dire -a|-r --list <motif> ?"
 
-#: builtin/branch.c:845
-msgid ""
-"the '--set-upstream' option is no longer supported. Please use '--track' or "
-"'--set-upstream-to' instead."
-msgstr ""
-"l'option '--set-upstream' est obsolète. Utilisez '--track' ou '--set-"
-"upstream-to' à la place."
+#: builtin/branch.c:858
+msgid "the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead."
+msgstr "l'option '--set-upstream' est obsolète. Utilisez '--track' ou '--set-upstream-to' à la place."
 
 #: builtin/bugreport.c:15
 msgid "git version:\n"
@@ -11536,56 +11301,53 @@
 "You can delete any lines you don't wish to share.\n"
 msgstr ""
 "Merci de remplir le rapport de bogue Git !\n"
-"Veuillez répondre aux questions suivantes pour nous aider à comprendre votre "
-"problème.\n"
+"Veuillez répondre aux questions suivantes pour nous aider à comprendre votre problème.\n"
 "\n"
-"Qu'avez-vous fait avant l'apparition du bogue ? (Étapes pour reproduire "
-"votre problème)\n"
+"Qu'avez-vous fait avant l'apparition du bogue ? (Étapes pour reproduire votre problème)\n"
 "\n"
 "Quel était le résultat attendu ? (comportement attendu)\n"
 "\n"
 "Que s'est-il passé à la place ? (comportement observé)\n"
 "\n"
-"Quelle différence y a-t-il entre ce que vous attendiez et ce qu'il s'est "
-"passé ?\n"
+"Quelle différence y a-t-il entre ce que vous attendiez et ce qu'il s'est passé ?\n"
 "\n"
 "Autres remarques :\n"
 "\n"
 "Veuillez relire le rapport de bogue ci-dessous.\n"
 "Vous pouvez supprimer toute ligne que vous ne souhaitez pas envoyer.\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "spécifier la destination du fichier de rapport de bogue"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "spécifier une suffixe au format strftime pour le nom de fichier"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "impossible de créer les répertoires de premier niveau pour '%s'"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "Info système"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "Crochets activés"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "impossible de créer un fichier nouveau à '%s'"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "impossible d'écrire dans %s"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Nouveau rapport créé à '%s'.\n"
@@ -11606,19 +11368,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <fichier> [<nom-de-ref>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "ne pas afficher la barre de progression"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "afficher la barre de progression"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "afficher la barre de progression durant la phase d'écrite des objets"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similaire à --all-progress quand la barre de progression est affichée"
 
@@ -11653,20 +11415,12 @@
 msgstr "Sous-commande inconnue : %s"
 
 #: builtin/cat-file.c:598
-msgid ""
-"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-unknow-type] | -s [--allow-unknow-type] | -e | -p "
-"| <type> | --textconv | --filters) [--path=<chemin>] <objet>"
+msgid "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-unknow-type] | -s [--allow-unknow-type] | -e | -p | <type> | --textconv | --filters) [--path=<chemin>] <objet>"
 
 #: builtin/cat-file.c:599
-msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
-msgstr ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+msgid "git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-symlinks] [--textconv | --filters]"
+msgstr "git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-symlinks] [--textconv | --filters]"
 
 #: builtin/cat-file.c:620
 msgid "only one batch option may be specified"
@@ -11718,8 +11472,7 @@
 
 #: builtin/cat-file.c:654
 msgid "show info and content of objects fed from the standard input"
-msgstr ""
-"afficher l'information et le contenu des objets passés en entrée standard"
+msgstr "afficher l'information et le contenu des objets passés en entrée standard"
 
 #: builtin/cat-file.c:658
 msgid "show info about objects fed from the standard input"
@@ -11727,9 +11480,7 @@
 
 #: builtin/cat-file.c:662
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
-msgstr ""
-"suivre les liens symbolique internes à la copie de travail (utilisé avec --"
-"batch ou --batch-check)"
+msgstr "suivre les liens symbolique internes à la copie de travail (utilisé avec --batch ou --batch-check)"
 
 #: builtin/cat-file.c:664
 msgid "show all objects with --batch or --batch-check"
@@ -11761,11 +11512,9 @@
 
 #: builtin/check-attr.c:25 builtin/check-ignore.c:27
 msgid "terminate input and output records by a NUL character"
-msgstr ""
-"terminer les enregistrements en entrée et en sortie par un caractère NUL"
+msgstr "terminer les enregistrements en entrée et en sortie par un caractère NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549 builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "supprimer l'état d'avancement"
 
@@ -11777,27 +11526,27 @@
 msgid "ignore index when checking"
 msgstr "ignorer l'index pendant la vérification"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "impossible de spécifier les chemins avec --stdin"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z n'a de sens qu'avec l'option --stdin"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "aucun chemin spécifié"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet n'est valide qu'avec un seul chemin"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "impossible d'avoir --quiet et --verbose"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching n'est valide qu'avec --verbose"
 
@@ -11818,222 +11567,219 @@
 msgid "no contacts specified"
 msgstr "aucun contact spécifié"
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
-msgstr "git checkout-index [<options>] [--] [<fichier>...]"
+#: builtin/checkout--worker.c:110
+#| msgid "git checkout [<options>] <branch>"
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<options>]"
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr "stage doit valoir entre 1 et 3, ou all"
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr "extraire tous les fichiers présents dans l'index"
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr "forcer l'écrasement des fichiers existants"
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr ""
-"pas d'avertissement pour les fichiers existants et les fichiers absents de "
-"l'index"
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr "ne pas extraire les nouveaux fichiers"
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr "mettre à jour l'information de stat dans le fichier d'index"
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr "lire la liste des chemins depuis l'entrée standard"
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr "écrire le contenu dans des fichiers temporaires"
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr "chaîne"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr "lors de la création de fichiers, préfixer par <chaîne>"
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr "git checkout-index [<options>] [--] [<fichier>...]"
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr "stage doit valoir entre 1 et 3, ou all"
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr "extraire tous les fichiers présents dans l'index"
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr "forcer l'écrasement des fichiers existants"
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr "pas d'avertissement pour les fichiers existants et les fichiers absents de l'index"
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr "ne pas extraire les nouveaux fichiers"
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr "mettre à jour l'information de stat dans le fichier d'index"
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr "lire la liste des chemins depuis l'entrée standard"
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr "écrire le contenu dans des fichiers temporaires"
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "copier les fichiers depuis l'index nommé"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<options>] <branche>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<options>] [<branche>] -- <fichier>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<options>] <branche>"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<options>] [--source=<branche>] <fichier>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "le chemin '%s' n'a pas notre version"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "le chemin '%s' n'a pas leur version"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "le chemin '%s' n'a aucune des versions nécessaires"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "le chemin '%s' n'a pas les versions nécessaires"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "chemin '%s' : impossible de fusionner"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Impossible d'ajouter le résultat de fusion pour '%s'"
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d conflit du fusion recréé"
 msgstr[1] "%d conflits du fusion recréés"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d chemin mis à jour depuis %s"
 msgstr[1] "%d chemins mis à jour depuis %s"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d chemin mis à jour depuis l'index"
 msgstr[1] "%d chemins mis à jour depuis l'index"
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455 builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' ne peut pas être utilisé avec des mises à jour de chemins"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' ne peut pas être utilisé avec %s"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
-msgstr ""
-"Impossible de mettre à jour les chemins et basculer sur la branche '%s' en "
-"même temps."
+msgstr "Impossible de mettre à jour les chemins et basculer sur la branche '%s' en même temps."
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ni '%s', ni '%s' spécifié"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' ne peut pas être utilisé quand '%s' n'est pas spécifié"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' ou '%s' ne peut pas être utilisé avec %s"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "le chemin '%s' n'est pas fusionné"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "vous devez d'abord résoudre votre index courant"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
-"impossible de continuer avec des modifications indexées dans les fichiers "
-"suivants :\n"
+"impossible de continuer avec des modifications indexées dans les fichiers suivants :\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Impossible de faire un reflog pour '%s' : %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD est maintenant sur"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "impossible de mettre à jour HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Remise à zéro de la branche '%s'\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Déjà sur '%s'\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Basculement et remise à zéro de la branche '%s'\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Basculement sur la nouvelle branche '%s'\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Basculement sur la branche '%s'\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... et %d en plus.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12056,7 +11802,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12071,33 +11817,31 @@
 " git branch <new-branch-name> %s\n"
 "\n"
 msgstr[0] ""
-"Si vous souhaitez le garder en créant une nouvelle branche, c'est le bon "
-"moment\n"
+"Si vous souhaitez le garder en créant une nouvelle branche, c'est le bon moment\n"
 "pour le faire avec :\n"
 "\n"
 "git branch <nouvelle-branche> %s\n"
 "\n"
 msgstr[1] ""
-"Si vous souhaitez les garder en créant une nouvelle branche, c'est le bon "
-"moment\n"
+"Si vous souhaitez les garder en créant une nouvelle branche, c'est le bon moment\n"
 "pour le faire avec :\n"
 "\n"
 "git branch <nouvelle-branche> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "erreur interne lors du parcours des révisions"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "La position précédente de HEAD était sur"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Vous êtes sur une branche qui doit encore naître"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12106,7 +11850,7 @@
 "'%s' pourrait être un fichier local ou un branche de suivi.\n"
 "Veuillez utiliser -- (et --no-guess en facultatif) pour les distinguer"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -12126,51 +11870,51 @@
 "ambigu, vous pouvez positionner checkout.defaultRemote=origin dans\n"
 "votre config."
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' correspond à plusieurs (%d) branches de suivi à distance"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "une seule référence attendue"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "une seule référence attendue, %d fournies."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "référence invalide : %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la référence n'est pas un arbre : %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "branche attendue, mais étiquette '%s' reçue"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "une branche est attendue, mais une branche distante '%s' a été reçue"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "une branche est attendue, mais '%s' a été reçue"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "une branche est attendue, mais un commit '%s' a été reçu"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12178,7 +11922,7 @@
 "impossible de basculer de branche pendant une fusion\n"
 "Envisagez \"git merge --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12186,7 +11930,7 @@
 "impossible de basculer de branche pendant une session am\n"
 "Envisagez \"git am --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12194,7 +11938,7 @@
 "impossible de basculer de branche pendant un rebasage\n"
 "Envisagez \"git rebase --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12202,7 +11946,7 @@
 "impossible de basculer de branche pendant un picorage\n"
 "Envisagez \"git cherry-pick --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12210,146 +11954,136 @@
 "impossible de basculer de branche pendant un retour\n"
 "Envisagez \"git revert --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
-msgstr "Vous basculez de branche en cours de bissection"
+msgstr "vous basculez de branche en cours de bissection"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "impossible d'utiliser des chemins avec un basculement de branches"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' ne peut pas être utilisé avec un basculement de branches"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460 builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' ne peut pas être utilisé avec '%s'"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' n'accepte pas <point-de-départ>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Impossible de basculer de branche vers '%s' qui n'est pas un commit"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "argument de branche ou de commit manquant"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "forcer l'affichage de l'état d'avancement"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "effectuer une fusion à 3 points avec la nouvelle branche"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "style"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "style de conflit (merge (fusion) ou diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "détacher la HEAD au commit nommé"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "paramétrer les coordonnées de branche amont pour une nouvelle branche"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "forcer l'extraction (laisser tomber les modifications locales)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "nouvelle branche"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "nouvelle branche sans parent"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "mettre à jour les fichiers ignorés (par défaut)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
-msgstr ""
-"ne pas vérifier si une autre copie de travail contient le référence fournie"
+msgstr "ne pas vérifier si une autre copie de travail contient le référence fournie"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "extraire notre version pour les fichiers non fusionnés"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "extraire leur version pour les fichiers non fusionnés"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "ne pas limiter les spécificateurs de chemins aux seuls éléments creux"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c et --orphan sont mutuellement exclusifs"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p et --overlay sont mutuellement exclusifs"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track requiert un nom de branche"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "nom de branche manquant ; essayez -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "impossible de résoudre %s"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "spécification de chemin invalide"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
-msgstr ""
-"'%s' n'est pas un commit et une branche '%s' ne peut pas en être créée depuis"
+msgstr "'%s' n'est pas un commit et une branche '%s' ne peut pas en être créée depuis"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach n'accepte pas un argument de chemin '%s'"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file est incompatible avec --detach"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file est incompatible avec --patch"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12357,79 +12091,74 @@
 "git checkout: --ours/--theirs, --force et --merge sont incompatibles lors\n"
 "de l'extraction de l'index."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
-msgstr "Vous devez spécifier un ou des chemins à restaurer"
+msgstr "vous devez spécifier un ou des chemins à restaurer"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "branche"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "créer et extraire une nouvelle branche"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "créer/réinitialiser et extraire une branche"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "créer un reflog pour une nouvelle branche"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
-msgstr ""
-"essayer d'interpréter 'git checkout <branche-inexistante>' (par défaut)"
+msgstr "essayer d'interpréter 'git checkout <branche-inexistante>' (par défaut)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "utiliser le mode de superposition (défaut)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "créer et basculer sur une nouvelle branche"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "créer/réinitialiser et basculer sur une branche"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "interpréter 'git switch <branche-inexistante>'"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "laisser tomber les modifications locales"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "de quel <arbre-esque> faire l'extraction"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "restaurer l'index"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "restaurer l'arbre de travail (par défaut)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "ignorer les entrées non-fusionnées"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "utiliser le mode de superposition"
 
 #: builtin/clean.c:29
-msgid ""
-"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
-msgstr ""
-"git clean [-d] [-f] [-i] [-n] [-q] [-e <motif>] [-x | -X] [--] <chemins>..."
+msgid "git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
+msgstr "git clean [-d] [-f] [-i] [-n] [-q] [-e <motif>] [-x | -X] [--] <chemins>..."
 
 #: builtin/clean.c:33
 #, c-format
@@ -12451,11 +12180,6 @@
 msgid "Would skip repository %s\n"
 msgstr "Ignorerait le dépôt %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "échec de la suppression de %s"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12495,8 +12219,7 @@
 "*          - choisir tous les éléments\n"
 "           - (vide) terminer la sélection\n"
 
-#: builtin/clean.c:521 git-add--interactive.perl:568
-#: git-add--interactive.perl:573
+#: builtin/clean.c:521 git-add--interactive.perl:568 git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Hein (%s) ?\n"
@@ -12565,10 +12288,8 @@
 msgid "remove whole directories"
 msgstr "supprimer les répertoires entiers"
 
-#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
-#: builtin/show-ref.c:179
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "motif"
 
@@ -12585,20 +12306,12 @@
 msgstr "supprimer seulement les fichiers ignorés"
 
 #: builtin/clean.c:929
-msgid ""
-"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
-"clean"
-msgstr ""
-"clean.requireForce positionné à true et ni -i, -n ou -f fourni ; refus de "
-"nettoyer"
+msgid "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to clean"
+msgstr "clean.requireForce positionné à true et ni -i, -n ou -f fourni ; refus de nettoyer"
 
 #: builtin/clean.c:932
-msgid ""
-"clean.requireForce defaults to true and neither -i, -n, nor -f given; "
-"refusing to clean"
-msgstr ""
-"clean.requireForce à true par défaut et ni -i, -n ou -f fourni ; refus de "
-"nettoyer"
+msgid "clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean"
+msgstr "clean.requireForce à true par défaut et ni -i, -n ou -f fourni ; refus de nettoyer"
 
 #: builtin/clean.c:944
 msgid "-x and -X cannot be used together"
@@ -12608,168 +12321,156 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<options>] [--] <dépôt> [<répertoire>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "ne pas cloner un dépôt superficiel"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "ne pas créer d'extraction"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "créer un dépôt nu"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "créer un dépôt miroir (implique dépôt nu)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "pour cloner depuis un dépôt local"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "ne pas utiliser de liens durs locaux, toujours copier"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "régler comme dépôt partagé"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "spécificateur de chemin"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "initialiser les sous-modules dans le clone"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "nombre de sous-modules clonés en parallèle"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "répertoire-modèle"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "répertoire depuis lequel les modèles vont être utilisés"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832 builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "dépôt de référence"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834 builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "utiliser seulement --reference pour cloner"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "nom"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "utiliser <nom> au lieu de 'origin' pour suivre la branche amont"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "extraire <branche> au lieu de la HEAD du répertoire distant"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "chemin vers git-upload-pack sur le serveur distant"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
-#: builtin/pull.c:208
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863 builtin/pull.c:208
 msgid "depth"
 msgstr "profondeur"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "créer un clone superficiel de cette profondeur"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
-#: builtin/pull.c:211
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804 builtin/pull.c:211
 msgid "time"
 msgstr "heure"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "créer un clone superficiel depuis une date spécifique"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207 builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "révision"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
-msgstr ""
-"approfondir l'historique d'un clone superficiel en excluant une révision"
+msgstr "approfondir l'historique d'un clone superficiel en excluant une révision"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844 builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "cloner seulement une branche, HEAD ou --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
-msgstr ""
-"ne pas cloner les tags et indiquer aux récupérations futures de ne pas le "
-"faire"
+msgstr "ne pas cloner les tags et indiquer aux récupérations futures de ne pas le faire"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "tous les sous-modules clonés seront superficiels"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "séparer le répertoire git de la copie de travail"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "clé=valeur"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "régler la configuration dans le nouveau dépôt"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
-#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
+#: 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
 msgid "server-specific"
 msgstr "spécifique au serveur"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
-#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
+#: 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
 msgid "option to transmit"
 msgstr "option à transmettre"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
-#: builtin/push.c:585
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234 builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "n'utiliser que des adresses IPv4"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
-#: builtin/push.c:587
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237 builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "n'utiliser que des adresses IPv6"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
-msgstr ""
-"tous les sous-modules clonés utiliseront leur branche de suivi à distance"
+msgstr "tous les sous-modules clonés utiliseront leur branche de suivi à distance"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
-msgstr ""
-"initialiser le fichier d'extraction partielle pour n'inclure que les "
-"fichiers à la racine"
+msgstr "initialiser le fichier d'extraction clairsemée pour n'inclure que les fichiers à la racine"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12777,42 +12478,42 @@
 "Aucun nom de répertoire n'a pu être deviné\n"
 "Veuillez spécifier un répertoire dans la ligne de commande"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info : impossible d'ajouter une alternative pour '%s' : %s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe et n'est pas un répertoire"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "échec du démarrage un itérateur sur '%s'"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "échec de la création du lien '%s'"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "échec de la copie vers '%s'"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "échec de l'itération sur '%s'"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "fait.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12822,154 +12523,141 @@
 "Vous pouvez inspecter ce qui a été extrait avec 'git status'\n"
 "et réessayer avec 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Impossible de trouver la branche distante '%s' à cloner."
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "impossible de mettre à jour %s"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
-msgstr "échec lors de l'initialisation l'extraction partielle"
+msgstr "échec lors de l'initialisation l'extraction clairsemée"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
-msgstr ""
-"la HEAD distante réfère à une référence non existante, impossible de "
-"l'extraire.\n"
+msgstr "la HEAD distante réfère à une référence non existante, impossible de l'extraire.\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "impossible d'extraire la copie de travail"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "impossible d'écrire les paramètres dans le fichier de configuration"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "impossible de remballer pour nettoyer"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "impossible de délier le fichier temporaire alternates"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Trop d'arguments."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Vous devez spécifier un dépôt à cloner."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "les options --bare et --origin %s sont incompatibles."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare et --separate-git-dir sont incompatibles."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "le dépôt '%s' n'existe pas"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profondeur %s n'est pas un entier positif"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
-msgstr ""
-"le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
+msgstr "le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "le chemin du dépôt '%s' existe déjà et n'est pas un répertoire vide."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "la copie de travail '%s' existe déjà."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272 builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "impossible de créer les répertoires de premier niveau dans '%s'"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "impossible de créer le répertoire de la copie de travail '%s'"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clonage dans le dépôt nu '%s'\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clonage dans '%s'...\n"
 
-#: builtin/clone.c:1125
-msgid ""
-"clone --recursive is not compatible with both --reference and --reference-if-"
-"able"
-msgstr ""
-"clone --recursive n'est pas compatible avec à la fois --reference et --"
-"reference-if-able"
+#: builtin/clone.c:1135
+msgid "clone --recursive is not compatible with both --reference and --reference-if-able"
+msgstr "clone --recursive n'est pas compatible avec à la fois --reference et --reference-if-able"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' n'est pas un nom valide de distante"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
-msgstr ""
-"--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
+msgstr "--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
-msgstr ""
-"--shallow-since est ignoré dans les clones locaux : utilisez plutôt \"file://"
-"\"."
+msgstr "--shallow-since est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
-msgstr ""
-"--shallow-exclude est ignoré dans les clones locaux : utilisez plutôt "
-"\"file://\"."
+msgstr "--shallow-exclude est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter est ignoré dans les clones locaux ; utilisez plutôt file:// ."
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "le dépôt source est superficiel, option --local ignorée"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local est ignoré"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "La branche distante %s n'a pas été trouvée dans le dépôt amont %s"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Vous semblez avoir cloné un dépôt vide."
 
@@ -12986,65 +12674,58 @@
 msgstr "mise en page à utiliser"
 
 #: builtin/column.c:30
-msgid "Maximum width"
-msgstr "Largeur maximale"
+msgid "maximum width"
+msgstr "largeur maximale"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
-msgstr "Remplissage d'espace sur la bordure gauche"
+msgid "padding space on left border"
+msgstr "remplissage d'espace sur la bordure gauche"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
-msgstr "Remplissage d'espace sur le côté droit"
+msgid "padding space on right border"
+msgstr "remplissage d'espace sur le côté droit"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "Remplissage d'espace entre les colonnes"
+msgid "padding space between columns"
+msgstr "remplissage d'espace entre les colonnes"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
 msgstr "--command doit être le premier argument"
 
 #: builtin/commit-graph.c:13 builtin/commit-graph.c:22
-msgid ""
-"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
-msgstr ""
-"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgid "git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr "git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 
 #: builtin/commit-graph.c:14 builtin/commit-graph.c:27
 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 <répertoire-d'objet>] [--append] [--"
-"split[=<stratégie>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
-"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <options de division>"
+"git commit-graph write [--object-dir <répertoire-d'objet>] [--append] [--split[=<stratégie>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-paths] [--"
+"[no-]max-new-filters <n>] [--[no-]progress] <options de division>"
 
 #: builtin/commit-graph.c:64
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "impossible de trouver le répertoire objet correspondant à %s"
 
-#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:210 builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "répertoire"
 
-#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
-#: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
-msgstr "Le répertoire d'objet où stocker le graphe"
+#: builtin/commit-graph.c:81 builtin/commit-graph.c:211 builtin/commit-graph.c:317
+msgid "the object directory to store the graph"
+msgstr "le répertoire d'objet où stocker le graphe"
 
 #: builtin/commit-graph.c:83
 msgid "if the commit-graph is split, only verify the tip file"
-msgstr ""
-"si le graphe de commit est divisé, vérifier seulement le fichier sommet"
+msgstr "si le graphe de commit est divisé, vérifier seulement le fichier sommet"
 
 #: builtin/commit-graph.c:106
 #, c-format
 msgid "Could not open commit-graph '%s'"
-msgstr "impossible d'ouvrir le graphe de commit '%s'"
+msgstr "Impossible d'ouvrir le graphe de commit '%s'"
 
 #: builtin/commit-graph.c:142
 #, c-format
@@ -13075,8 +12756,7 @@
 
 #: builtin/commit-graph.c:219
 msgid "include all commits already in the commit-graph file"
-msgstr ""
-"inclure tous les commits déjà présents dans le fichier de graphe de commits"
+msgstr "inclure tous les commits déjà présents dans le fichier de graphe de commits"
 
 #: builtin/commit-graph.c:221
 msgid "enable computation for changed paths"
@@ -13088,8 +12768,7 @@
 
 #: builtin/commit-graph.c:228
 msgid "maximum number of commits in a non-base split commit-graph"
-msgstr ""
-"le nombre maximum de commits dans un graphe de commit divisé pas de base"
+msgstr "le nombre maximum de commits dans un graphe de commit divisé pas de base"
 
 #: builtin/commit-graph.c:230
 msgid "maximum ratio between two levels of a split commit-graph"
@@ -13112,19 +12791,15 @@
 msgstr "Collecte des commits depuis l'entrée"
 
 #: builtin/commit-tree.c:18
-msgid ""
-"git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
-"<file>)...] <tree>"
-msgstr ""
-"git commit-tree [(-p <parent>)...] [-S[<idclé>]] [(-m <message>)...] [(-F "
-"<fichier>)...] <arbre>"
+msgid "git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F <file>)...] <tree>"
+msgstr "git commit-tree [(-p <parent>)...] [-S[<idclé>]] [(-m <message>)...] [(-F <fichier>)...] <arbre>"
 
 #: builtin/commit-tree.c:31
 #, c-format
 msgid "duplicate parent %s ignored"
 msgstr "le parent dupliqué %s est ignoré"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "nom d'objet invalide %s"
@@ -13152,13 +12827,11 @@
 msgid "id of a parent commit object"
 msgstr "id d'un objet commit parent"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "message"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "message de validation"
 
@@ -13166,8 +12839,7 @@
 msgid "read commit log message from file"
 msgstr "lire le message de validation depuis un fichier"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
-#: builtin/pull.c:176 builtin/revert.c:118
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299 builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "signer la validation avec GPG"
 
@@ -13193,8 +12865,7 @@
 "it empty. You can repeat your command with --allow-empty, or you can\n"
 "remove the commit entirely with \"git reset HEAD^\".\n"
 msgstr ""
-"Vous avez demandé de corriger le commit le plus récent, mais le faire le "
-"rendrait\n"
+"Vous avez demandé de corriger le commit le plus récent, mais le faire le rendrait\n"
 "vide. Vous pouvez répéter votre commande avec --allow-empty, ou vous pouvez\n"
 "supprimer complètement le commit avec \"git reset HEAD^\".\n"
 
@@ -13206,8 +12877,7 @@
 "    git commit --allow-empty\n"
 "\n"
 msgstr ""
-"Le picorage précédent est à présent vide, vraisemblablement dû à une "
-"résolution de conflit.\n"
+"Le picorage précédent est à présent vide, vraisemblablement dû à une résolution de conflit.\n"
 "Si vous souhaitez tout de même le valider, utilisez :\n"
 "\n"
 "    git commit --allow-empty\n"
@@ -13243,73 +12913,73 @@
 "    git cherry-pick --skipped\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "échec du dépaquetage de l'objet arbre HEAD"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file avec l'option -a n'a pas de sens"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "Aucun chemin avec les options --include/--only n'a pas de sens."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "impossible de créer l'index temporaire"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "échec de l'ajout interactif"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "impossible de mettre à jour l'index temporaire"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Impossible de mettre à jour l'arbre de cache principal"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "impossible d'écrire le fichier new_index"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "impossible de faire une validation partielle pendant une fusion."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "impossible de faire une validation partielle pendant un picorage."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "impossible de faire une validation partielle pendant un rebasage."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "impossible de lire l'index"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "impossible d'écrire le fichier d'index temporaire"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "entête d'auteur manquant dans le commit '%s'"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "le commit '%s' a une ligne d'auteur malformée"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "paramètre --author mal formé"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13317,38 +12987,43 @@
 "impossible de sélectionner un caractère de commentaire\n"
 "qui n'est pas utilisé dans le message de validation actuel"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "impossible de rechercher le commit %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(lecture du message de journal depuis l'entrée standard)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "impossible de lire le journal depuis l'entrée standard"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "impossible de lire le fichier de journal '%s'"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "impossible de combiner -m avec --fixup:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "impossible de lire SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "impossible de lire MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "impossible d'écrire le modèle de commit"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13362,7 +13037,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "et essayez à nouveau.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13376,17 +13051,16 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "et essayez à nouveau.\n"
 
-#: builtin/commit.c:868
+#: 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 ""
 "Veuillez saisir le message de validation pour vos modifications. Les lignes\n"
-"commençant par '%c' seront ignorées, et un message vide abandonne la "
-"validation.\n"
+"commençant par '%c' seront ignorées, et un message vide abandonne la validation.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13397,336 +13071,359 @@
 "commençant par '%c' seront conservées ; vous pouvez les supprimer vous-même\n"
 "si vous le souhaitez. Un message vide abandonne la validation.\n"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAuteur :     %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sDate :       %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sValidateur : %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "Impossible de lire l'index"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "impossible de passer les lignes finales à --trailers"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Erreur lors de la construction des arbres"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Veuillez fournir le message en utilisant l'option -m ou -F.\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
-msgstr ""
-"--author '%s' n'est pas de la forme 'Nom <email>' ni ne correspond à aucun "
-"auteur existant"
+msgstr "--author '%s' n'est pas de la forme 'Nom <email>' ni ne correspond à aucun auteur existant"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Mode de fichier ignoré invalide '%s'"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode de fichier non suivi invalide '%s'"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long et -z sont incompatibles"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "Vous êtes en pleine fusion -- impossible de reformuler."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "Vous êtes en plein picorage -- impossible de reformuler."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr "impossible de combiner l'option reword de --fixup avec le chemin '%s'"
+
+#: builtin/commit.c:1226
+msgid "reword option of --fixup is mutually exclusive with --patch/--interactive/--all/--include/--only"
+msgstr "l'option reword de --fixup est mutuellement exclusive avec --patch/--interactive/--all/--include/--only"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "L'utilisation simultanée de --reset-author et --author n'a pas de sens"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "Il n'y a rien à corriger."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Vous êtes en pleine fusion -- impossible de corriger (amend)."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Vous êtes en plein picorage -- impossible de corriger (amend)."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Vous êtes en plein rebasage -- impossible de corriger (amend)."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Les options --squash et --fixup ne peuvent pas être utilisées ensemble"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Une seule option parmi -c/-C/-F/--fixup peut être utilisée."
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "L'option -m ne peut pas être combinée avec -c/-C/-F."
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author ne peut être utilisé qu'avec -C, -c ou --amend."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Une seule option parmi --include/--only/--all/--interactive/--patch peut "
-"être utilisée."
+msgstr "Une seule option parmi --include/--only/--all/--interactive/--patch peut être utilisée."
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "option inconnue : --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "des chemins '%s ...' avec l'option -a n'a pas de sens"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "afficher l'état avec concision"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "afficher l'information de branche"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "afficher l'information de remisage"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "calcule les valeurs complètes en avance/en retard"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560 builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "sortie pour traitement automatique"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "afficher l'état en format long (par défaut)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "terminer les éléments par NUL"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
-#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1406 parse-options.h:336
+#: 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
 msgid "mode"
 msgstr "mode"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
-msgstr ""
-"afficher les fichiers non suivis, \"mode\" facultatif : all (tous), normal, "
-"no. (Défaut : all)"
+msgstr "afficher les fichiers non suivis, \"mode\" facultatif : all (tous), normal, no. (Défaut : all)"
 
-#: builtin/commit.c:1387
-msgid ""
-"show ignored files, optional modes: traditional, matching, no. (Default: "
-"traditional)"
-msgstr ""
-"afficher les fichiers ignorés, \"mode\" facultatif : traditional "
-"(traditionnel), matching (correspondant), no. (Défaut : traditional)"
+#: builtin/commit.c:1497
+msgid "show ignored files, optional modes: traditional, matching, no. (Default: traditional)"
+msgstr "afficher les fichiers ignorés, \"mode\" facultatif : traditional (traditionnel), matching (correspondant), no. (Défaut : traditional)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "quand"
 
-#: builtin/commit.c:1390
-msgid ""
-"ignore changes to submodules, optional when: all, dirty, untracked. "
-"(Default: all)"
-msgstr ""
-"ignorer les modifications dans les sous-modules, \"quand\" facultatif : all "
-"(tous), dirty (sale), untracked (non suivi). (Défaut : all)"
+#: builtin/commit.c:1500
+msgid "ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"
+msgstr "ignorer les modifications dans les sous-modules, \"quand\" facultatif : all (tous), dirty (sale), untracked (non suivi). (Défaut : all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "afficher les fichiers non suivis en colonnes"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "ne pas détecter les renommages"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
-msgstr ""
-"détecter les renommages, en spécifiant optionnellement le facteur de "
-"similarité"
+msgstr "détecter les renommages, en spécifiant optionnellement le facteur de similarité"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
-msgstr ""
-"Combinaison non supportée d'arguments sur les fichiers ignorés et non-suivis"
+msgstr "Combinaison non supportée d'arguments sur les fichiers ignorés et non-suivis"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "supprimer le résumé après une validation réussie"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "afficher les diff dans le modèle de message de validation"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Options du message de validation"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "lire le message depuis un fichier"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "auteur"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "remplacer l'auteur pour la validation"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "date"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "remplacer la date pour la validation"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622 parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "commit"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "réutiliser et éditer le message du commit spécifié"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "réutiliser le message du commit spécifié"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr ""
-"utiliser un message au format autosquash pour corriger le commit spécifié"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+#| msgid "amend previous commit"
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid "use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr "utiliser un message au format autosquash pour corriger ou reformuler le commit spécifié"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
-msgstr ""
-"utiliser un message au format autosquash pour compresser le commit spécifié"
+msgstr "utiliser un message au format autosquash pour compresser le commit spécifié"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
-msgstr ""
-"à présent je suis l'auteur de la validation (utilisé avec -C/-c/--amend)"
+msgstr "à présent je suis l'auteur de la validation (utilisé avec -C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
-#: builtin/pull.c:145 builtin/revert.c:110
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "ligne de fin"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "ajouter des lignes terminales personnaliser"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302 builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "ajouter une ligne terminale Signed-off-by"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "utiliser le fichier de modèle spécifié"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "forcer l'édition du commit"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "inclure l'état dans le modèle de message de validation"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Valider les options des contenus"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "valider tous les fichiers modifiés"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "ajouter les fichiers spécifiés à l'index pour la validation"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "ajouter des fichiers en mode interactif"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "ajouter les modifications en mode interactif"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "valider seulement les fichiers spécifiés"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "éviter d'utiliser les crochets pre-commit et commit-msg"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "afficher ce qui serait validé"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "corriger la validation précédente"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "éviter d'utiliser le crochet post-rewrite"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "accepter d'enregistrer une modification vide"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "accepter d'enregistrer une modification avec un message vide"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Fichier MERGE_HEAD corrompu (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "impossible de lire MERGE_MODE"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "impossible de lire le message de validation : %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Abandon de la validation dû à un message de validation vide.\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Abandon de la validation ; vous n'avez pas édité le message\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "Abandon de la validation dû à un corps de message de validation vide.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13803,8 +13500,7 @@
 
 #: builtin/config.c:142
 msgid "replace all matching variables: name value [value-pattern]"
-msgstr ""
-"remplacer toutes les variables correspondant : nom valeur [motif-de-valeur]"
+msgstr "remplacer toutes les variables correspondant : nom valeur [motif-de-valeur]"
 
 #: builtin/config.c:143
 msgid "add a new variable: name value"
@@ -13832,8 +13528,7 @@
 
 #: builtin/config.c:149
 msgid "use string equality when comparing values to 'value-pattern'"
-msgstr ""
-"utiliser l'égalité de chaînes lors de la comparaison de 'motif-de-valeur'"
+msgstr "utiliser l'égalité de chaînes lors de la comparaison de 'motif-de-valeur'"
 
 #: builtin/config.c:150
 msgid "open an editor"
@@ -13897,15 +13592,11 @@
 
 #: builtin/config.c:165
 msgid "show origin of config (file, standard input, blob, command line)"
-msgstr ""
-"afficher l'origine de la configuration (fichier, entrée standard, blob, "
-"ligne de commande)"
+msgstr "afficher l'origine de la configuration (fichier, entrée standard, blob, ligne de commande)"
 
 #: builtin/config.c:166
 msgid "show scope of config (worktree, local, global, system, command)"
-msgstr ""
-"afficher la portée de configuration (arbre de travail, local, global, "
-"système, commande)"
+msgstr "afficher la portée de configuration (arbre de travail, local, global, système, commande)"
 
 #: builtin/config.c:167 builtin/env--helper.c:45
 msgid "value"
@@ -13999,8 +13690,7 @@
 msgstr ""
 "--worktree ne peut pas être utilisé avec des arbres de travail multiples\n"
 "à moins que l'extension worktreeConfig soit configuré. Veuillez lire\n"
-"la section \"CONFIGURATION FILE\" de \"git help worktree\" pour plus de "
-"détails"
+"la section \"CONFIGURATION FILE\" de \"git help worktree\" pour plus de détails"
 
 #: builtin/config.c:743
 msgid "--get-color and variable type are incoherent"
@@ -14015,12 +13705,8 @@
 msgstr "--name-only n'est applicable qu'avec --list ou --get-regexp"
 
 #: builtin/config.c:767
-msgid ""
-"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
-"list"
-msgstr ""
-"--show-origin n'est applicable qu'avec --get, --get-all, --get-regexp ou --"
-"list"
+msgid "--show-origin is only applicable to --get, --get-all, --get-regexp, and --list"
+msgstr "--show-origin n'est applicable qu'avec --get, --get-all, --get-regexp ou --list"
 
 #: builtin/config.c:773
 msgid "--default is only applicable to --get"
@@ -14074,7 +13760,7 @@
 msgid "print sizes in human readable format"
 msgstr "affiche les tailles dans un format humainement lisible"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -14087,14 +13773,13 @@
 "\n"
 "    chmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "afficher les messages de debug sur stderr"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
-msgstr ""
-"credential-cache-daemon non disponible ; pas de gestion des sockets unix"
+msgstr "credential-cache-daemon non disponible ; pas de gestion des sockets unix"
 
 #: builtin/credential-cache.c:154
 msgid "credential-cache unavailable; no unix socket support"
@@ -14143,9 +13828,7 @@
 #: builtin/describe.c:330
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
-msgstr ""
-"Pas de correspondance exacte sur des réfs ou des étiquettes, recherche par "
-"describe\n"
+msgstr "Pas de correspondance exacte sur des réfs ou des étiquettes, recherche par describe\n"
 
 #: builtin/describe.c:397
 #, c-format
@@ -14181,8 +13864,7 @@
 "more than %i tags found; listed %i most recent\n"
 "gave up search at %s\n"
 msgstr ""
-"plus de %i étiquettes ont été trouvées; seules les %i plus récentes sont "
-"affichées\n"
+"plus de %i étiquettes ont été trouvées; seules les %i plus récentes sont affichées\n"
 "abandon de la recherche à %s\n"
 
 #: builtin/describe.c:529
@@ -14230,8 +13912,7 @@
 
 #: builtin/describe.c:564
 msgid "consider <n> most recent tags (default: 10)"
-msgstr ""
-"considérer uniquement les <n> étiquettes le plus récentes (défaut : 10)"
+msgstr "considérer uniquement les <n> étiquettes le plus récentes (défaut : 10)"
 
 #: builtin/describe.c:566
 msgid "only consider tags matching <pattern>"
@@ -14255,8 +13936,7 @@
 
 #: builtin/describe.c:575
 msgid "append <mark> on broken working tree (default: \"-broken\")"
-msgstr ""
-"ajouter <marque> si la copie de travail est cassée (défaut : \"-broken\")"
+msgstr "ajouter <marque> si la copie de travail est cassée (défaut : \"-broken\")"
 
 #: builtin/describe.c:593
 msgid "--long is incompatible with --abbrev=0"
@@ -14264,7 +13944,7 @@
 
 #: builtin/describe.c:622
 msgid "No names found, cannot describe anything."
-msgstr "aucun nom trouvé, impossible de décrire quoi que ce soit."
+msgstr "Aucun nom trouvé, impossible de décrire quoi que ce soit."
 
 #: builtin/describe.c:673
 msgid "--dirty is incompatible with commit-ishes"
@@ -14282,70 +13962,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base ne fonctionne qu'avec deux commits"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s' : n'est pas un fichier régulier ni un lien symbolique"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "option invalide : %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s..%s: pas de base de fusion"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
-msgstr "Ce n'est pas un dépôt git !"
+msgstr "Ce n'est pas un dépôt git"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objet spécifié '%s' invalide."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "plus de deux blobs spécifiés : '%s'"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "objet non géré '%s' spécifié."
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "\"%s...%s\" : bases multiples de fusion, utilisation de %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<options>] [<commit> [<commit>]] [--] [<chemin>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "échec : %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "lecture du lien symbolique %s impossible"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "impossible de lire le fichier symlink %s"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
-msgstr "Impossible de lire l'objet %s pour le symlink %s"
+msgstr "impossible de lire l'objet %s pour le symlink %s"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14353,85 +14033,81 @@
 "les formats de diff combinés ('-c' et '--cc') ne sont pas supportés\n"
 "dans le mode de diff de répertoire ('-d' et '--dir-diff')."
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "les deux fichiers sont modifiés : '%s' et '%s'."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "le fichier dans l'arbre de travail a été laissé."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "des fichiers temporaires existent dans '%s'."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "vous pourriez souhaiter les nettoyer ou les récupérer."
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "utiliser `diff.guitool` au lieu de `diff.tool`"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "réalise un diff de répertoire complet"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "ne pas confirmer avant de lancer l'outil de diff"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "utiliser les liens symboliques en mode de diff de répertoire"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "outil"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "utiliser l'outil de diff spécifié"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "afficher une liste des outils de diff utilisables avec `--tool`"
 
-#: builtin/difftool.c:712
-msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
-"code"
-msgstr ""
-"provoque la fin de 'git-difftool' si l'outil de diff invoqué renvoie un code "
-"non-nul"
+#: builtin/difftool.c:716
+msgid "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit code"
+msgstr "provoque la fin de 'git-difftool' si l'outil de diff invoqué renvoie un code non-nul"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "spécifier une commande personnalisée pour visualiser les différences"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "passé à `diff`"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool exige un arbre de travail ou --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff est incompatible avec --no-index"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool et --extcmd sont mutuellement exclusifs"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "pas d'<outil> spécifié pour --tool=<outil>"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "pas de <commande> spécifié pour --extcmd=<commande>"
 
@@ -14449,24 +14125,17 @@
 
 #: builtin/env--helper.c:48
 msgid "be quiet only use git_env_*() value as exit code"
-msgstr ""
-"mode silencieux n'utilisant la valeur de git_env_*() que pour le code de "
-"sortie"
+msgstr "mode silencieux n'utilisant la valeur de git_env_*() que pour le code de sortie"
 
 #: builtin/env--helper.c:67
 #, c-format
 msgid "option `--default' expects a boolean value with `--type=bool`, not `%s`"
-msgstr ""
-"l'option `--default` attend une valeur booléenne avec `--type=bool`, pas `%s`"
+msgstr "l'option `--default` attend une valeur booléenne avec `--type=bool`, pas `%s`"
 
 #: builtin/env--helper.c:82
 #, c-format
-msgid ""
-"option `--default' expects an unsigned long value with `--type=ulong`, not `"
-"%s`"
-msgstr ""
-"l'option `--default` attend une valeur entier long non signé avec `--"
-"type=ulong`, pas `%s`"
+msgid "option `--default' expects an unsigned long value with `--type=ulong`, not `%s`"
+msgstr "l'option `--default` attend une valeur entier long non signé avec `--type=ulong`, pas `%s`"
 
 #: builtin/fast-export.c:29
 msgid "git fast-export [rev-list-opts]"
@@ -14474,9 +14143,7 @@
 
 #: builtin/fast-export.c:868
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
-msgstr ""
-"Erreur : impossible d'exporter des étiquettes imbriquées à moins que --mark-"
-"tags ne soit spécifié."
+msgstr "Erreur : impossible d'exporter des étiquettes imbriquées à moins que --mark-tags ne soit spécifié."
 
 #: builtin/fast-export.c:1177
 msgid "--anonymize-map token cannot be empty"
@@ -14492,50 +14159,47 @@
 
 #: builtin/fast-export.c:1202
 msgid "select handling of tags that tag filtered objects"
-msgstr ""
-"sélectionner la gestion des étiquettes qui pointent sur des objets filtrés"
+msgstr "sélectionner la gestion des étiquettes qui pointent sur des objets filtrés"
 
 #: builtin/fast-export.c:1205
 msgid "select handling of commit messages in an alternate encoding"
-msgstr ""
-"sélectionner la gestion des messages de validation dans un encodage "
-"alternatif"
+msgstr "sélectionner la gestion des messages de validation dans un encodage alternatif"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "Enregistrer les marques dans ce fichier"
+msgid "dump marks to this file"
+msgstr "enregistrer les marques dans ce fichier"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
 msgstr "importer les marques depuis ce fichier"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
+msgid "import marks from this file if it exists"
 msgstr "importer les marques depuis ce fichier s'il existe"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
+msgid "fake a tagger when tags lack one"
 msgstr "falsifier un auteur d'étiquette si l'étiquette n'en présente pas"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "Afficher l'arbre complet pour chaque commit"
+msgid "output full tree for each commit"
+msgstr "afficher l'arbre complet pour chaque commit"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "Utiliser la fonction \"done\" pour terminer le flux"
+msgid "use the done feature to terminate the stream"
+msgstr "utiliser la fonction \"done\" pour terminer le flux"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "Sauter l'affichage de données de blob"
+msgid "skip output of blob data"
+msgstr "sauter l'affichage de données de blob"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "spécificateur de référence"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "Appliquer le spécificateur de référence aux références exportées"
+msgid "apply refspec to exported refs"
+msgstr "appliquer le spécificateur de référence aux références exportées"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14550,18 +14214,16 @@
 msgstr "convertit <depuis> en <vers> dans la sortie anonymisée"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
-msgstr ""
-"les parents références qui ne sont pas dans le flux d'export rapide par id "
-"d'objet"
+msgid "reference parents which are not in fast-export stream by object id"
+msgstr "référencer les parents qui ne sont pas dans le flux d'export rapide par id d'objet"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "Afficher les ids d'objet originaux des blobs/commits"
+msgid "show original object ids of blobs/commits"
+msgstr "afficher les ids d'objet originaux des blobs/commits"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "Marquer les étiquettes avec des ids de marque"
+msgid "label tags with mark ids"
+msgstr "marquer les étiquettes avec des ids de marque"
 
 #: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
@@ -14569,8 +14231,7 @@
 
 #: builtin/fast-export.c:1271
 msgid "Cannot pass both --import-marks and --import-marks-if-exists"
-msgstr ""
-"Impossible d'utiliser à la fois --import-marks et --import-marks-if-exists"
+msgstr "Impossible d'utiliser à la fois --import-marks et --import-marks-if-exists"
 
 #: builtin/fast-import.c:3088
 #, c-format
@@ -14580,31 +14241,28 @@
 #: builtin/fast-import.c:3090
 #, c-format
 msgid "Missing to marks for submodule '%s'"
-msgstr "champs to manquants pour le sous-module '%s'"
+msgstr "Champs 'to' manquants pour le sous-module '%s'"
 
 #: builtin/fast-import.c:3225
 #, c-format
 msgid "Expected 'mark' command, got %s"
-msgstr "commande 'mark' attendue, %s trouvé"
+msgstr "Commande 'mark' attendue, %s trouvé"
 
 #: builtin/fast-import.c:3230
 #, c-format
 msgid "Expected 'to' command, got %s"
-msgstr "commande 'to' attendue, %s trouvé"
+msgstr "Commande 'to' attendue, %s trouvé"
 
 #: builtin/fast-import.c:3322
 msgid "Expected format name:filename for submodule rewrite option"
-msgstr ""
-"Format attendu nom:<nom de fichier> pour l'option de réécriture de sous-"
-"module"
+msgstr "Format attendu nom:<nom de fichier> pour l'option de réécriture de sous-module"
 
 #: builtin/fast-import.c:3377
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
-msgstr ""
-"la fonctionnalité '%s' est interdite en entrée sans --allow-unsafe-features"
+msgstr "la fonctionnalité '%s' est interdite en entrée sans --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Fichier verrou créé mais non reporté : %s"
@@ -14625,196 +14283,197 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<options>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel ne peut pas être négatif"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "récupérer depuis tous les dépôts distants"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "définir la branche amont pour git pull/fetch"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "ajouter à .git/FETCH_HEAD au lieu de l'écraser"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "utiliser une transaction atomique pour mettre à jour les références"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "chemin vers lequel télécharger le paquet sur le poste distant"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "forcer l'écrasement de la branche locale"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "récupérer depuis plusieurs dépôts distants"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "récupérer toutes les étiquettes et leurs objets associés"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "ne pas récupérer toutes les étiquettes (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "nombre de sous-modules récupérés en parallèle"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr "modifier le spécificateur de référence pour placer les références dans refs/prefetch/"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
-msgstr ""
-"éliminer les branches de suivi distant si la branche n'existe plus dans le "
-"dépôt distant"
+msgstr "éliminer les branches de suivi distant si la branche n'existe plus dans le dépôt distant"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
-msgstr ""
-"éliminer les étiquettes locales qui ont disparu du dépôt distant et qui "
-"encombrent les étiquettes modifiées"
+msgstr "éliminer les étiquettes locales qui ont disparu du dépôt distant et qui encombrent les étiquettes modifiées"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "à la demande"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "contrôler la récupération récursive dans les sous-modules"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "écrire les références récupérées dans le fichier FETCH_HEAD"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "conserver le paquet téléchargé"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "permettre la mise à jour de la référence HEAD"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
-#: builtin/pull.c:218
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209 builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "approfondir l'historique d'un clone superficiel"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "approfondir l'historique d'un clone superficiel en fonction d'une date"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "convertir en un dépôt complet"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "préfixer ceci à la sortie du chemin du sous-module"
 
-#: builtin/fetch.c:188
-msgid ""
-"default for recursive fetching of submodules (lower priority than config "
-"files)"
-msgstr ""
-"par défaut pour la récupération récursive de sous-modules (priorité plus "
-"basse que les fichiers de config)"
+#: builtin/fetch.c:195
+msgid "default for recursive fetching of submodules (lower priority than config files)"
+msgstr "par défaut pour la récupération récursive de sous-modules (priorité plus basse que les fichiers de config)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "accepter les références qui mettent à jour .git/shallow"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "correspondance de référence"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "spécifier une correspondance de référence pour la récupération"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "rapporte que nous n'avons que des objets joignables depuis cet objet"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr "ne pas récupérer le fichier paquet ; à la place, afficher les ancêtres des sommets de négociation"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "lancer 'maintenance --auto' après la récupération"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "vérifier les mises à jour forcées sur toutes les branches mises à jour"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "écrire le graphe de commits après le rapatriement"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "lire les spécificateurs de référence depuis l'entrée standard"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "impossible de trouver la référence HEAD distante"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
-msgstr ""
-"le paramètre de configuration fetch.output contient une valeur invalide %s"
+msgstr "le paramètre de configuration fetch.output contient une valeur invalide %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "objet %s non trouvé"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[à jour]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[rejeté]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "impossible de récupérer dans la branche actuelle"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[mise à jour de l'étiquette]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944 builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "impossible de mettre à jour la référence locale"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "écraserait l'étiquette existante"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[nouvelle étiquette]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[nouvelle branche]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[nouvelle référence]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "mise à jour forcée"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "pas en avance rapide"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14824,35 +14483,33 @@
 "mais ceci a été désactivé. Pour ré-activer, utilisez le drapeau\n"
 "'--show-forced-update' ou lancez 'git config fetch.showForcedUpdates true'."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, 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 ""
 "%.2f secondes ont été nécessaires pour vérifier les mises à jour forcées.\n"
 "Vous pouvez utiliser '--no-show-forced-update' ou lancer\n"
 "'git config fetch.showForcedUpdates false' pour éviter ceci.\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s n'a pas envoyé tous les objets nécessaires\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
-msgstr ""
-"%s rejeté parce que les racines superficielles ne sont pas mises à jour"
+msgstr "%s rejeté parce que les racines superficielles ne sont pas mises à jour"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "Depuis %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14861,79 +14518,79 @@
 "des références locales n'ont pas pu être mises à jour ; essayez de lancer\n"
 " 'git remote prune %s' pour supprimer des branches anciennes en conflit"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sera en suspens)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s est devenu en suspens)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[supprimé]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(aucun(e))"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Refus de récupérer dans la branche courant %s d'un dépôt non nu"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "La valeur \"%2$s\" de l'option \"%1$s\" est invalide pour %3$s"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "L'option \"%s\" est ignorée pour %s\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "branches multiples détectées, imcompatible avec --set-upstream"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "dépôt amont non défini pour la branche de suivi à distance"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "dépôt amont non défini pour l'étiquette distante"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "type de branche inconnu"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
 msgstr ""
-"Aucune branche source trouvée.\n"
+"aucune branche source trouvée.\n"
 "Vous devez spécifier exactement une branche avec l'option --set-upstream."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Récupération de %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Impossible de récupérer %s"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "impossible de récupérer '%s' (code de sortie : %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14941,62 +14598,66 @@
 "Aucun dépôt distant spécifié. Veuillez spécifier une URL ou un nom\n"
 "distant depuis lesquels les nouvelles révisions devraient être récupérées."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Vous devez spécifier un nom d'étiquette."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "Une profondeur négative dans --deepen n'est pas supportée"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen et --depth sont mutuellement exclusifs"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth et --unshallow ne peuvent pas être utilisés ensemble"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow sur un dépôt complet n'a pas de sens"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all n'accepte pas d'argument de dépôt"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all n'a pas de sens avec des spécifications de référence"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
-msgstr "distant ou groupe distant inexistant : %s"
+msgstr "Distant ou groupe distant inexistant : %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
-msgstr ""
-"La récupération d'un groupe et les spécifications de référence n'ont pas de "
-"sens"
+msgstr "La récupération d'un groupe et les spécifications de référence n'ont pas de sens"
 
-#: builtin/fetch.c:1887
-msgid ""
-"--filter can only be used with the remote configured in extensions."
-"partialclone"
-msgstr ""
-"--filter ne peut être utilisé qu'avec le dépôt distant configuré dans "
-"extensions.partialClone"
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "le distant doit être fourni lors de l'utilisation de --negotiate-only"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Le protocole ne prend pas en charge --negotiate-only, abandon."
+
+#: builtin/fetch.c:2079
+msgid "--filter can only be used with the remote configured in extensions.partialclone"
+msgstr "--filter ne peut être utilisé qu'avec le dépôt distant configuré dans extensions.partialClone"
+
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic ne peut être utilisée qu'en récupérant depuis un seul distant"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin ne peut être utilisée qu'en récupérant depuis un seul distant"
 
 #: builtin/fmt-merge-msg.c:7
-msgid ""
-"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
-msgstr ""
-"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <fichier>]"
+msgid "git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
+msgstr "git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <fichier>]"
 
 #: builtin/fmt-merge-msg.c:18
 msgid "populate log with at most <n> entries from shortlog"
@@ -15034,47 +14695,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "échapper les champs réservés pour les interpréteurs de commandes"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "échapper les champs réservés pour perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "échapper les champs réservés pour python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "échapper les champs réservés pour compatibilité avec Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "n'afficher que <n> références correspondant"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "respecter les couleurs de formatage"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "afficher seulement les références pointant sur l'objet"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "afficher seulement les références qui sont fusionnées"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "afficher seulement les références qui ne sont pas fusionnées"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "afficher seulement les références qui contiennent le commit"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "afficher seulement les références qui ne contiennent pas le commit"
 
@@ -15094,32 +14755,32 @@
 msgid "missing --config=<config>"
 msgstr "--config=<config> manquant"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "inconnu"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "erreur dans l'objet %s %s : %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "avertissement dans l'objet %s %s : %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "lien cassé dans l'objet %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "type d'objet inconnu dans le lien"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -15128,212 +14789,212 @@
 "lien cassé depuis %7s %s\n"
 "             vers %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "objet %s manquant %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "objet %s inatteignable %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "objet %s fantôme %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "impossible de créer le fichier lost-found"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "impossible de finir '%s'"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "Vérification de l'objet %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Vérification de la connectivité (%d objets)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "Vérification de l'objet %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "liens cassés"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "racine %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "étiquetage de l'objet %s %s (%s) dans %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s : objet corrompu ou manquant"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s : entrée %s de journal de références invalide"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Vérification du journal de réferences %s-> %s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s : pointeur de sha1 invalide %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "l'objet %s n'est pas un commit"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
-msgstr "Note : pas de référence par défaut"
+msgstr "note : pas de référence par défaut"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s : objet corrompu ou manquant : %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s : impossible d'analyser : %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "mauvais fichier de sha1 : %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Vérification du répertoire d'objet"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Vérification des répertoires d'objet"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "Vérification du lien %s"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "%s invalide"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s pointe sur quelque chose bizarre (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s : la HEAD détachée ne pointe sur rien"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "note : %s pointe sur une branche non-née (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Vérification de l'arbre cache"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s : pointer sha1 invalide dans l'arbre de cache"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "non-arbre dans l'arbre de cache"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<options>] [<objet>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "afficher les objets inaccessibles"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "afficher les objets en suspens"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "afficher les étiquettes"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "signaler les nœuds racines"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "considérer les objets de l'index comme nœuds tête"
 
 # translated from man page
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "considérer les reflogs comme nœuds tête (par défaut)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "inspecter aussi les objets pack et alternatifs"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "ne vérifier que la connectivité"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "activer une vérification plus strict"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "écrire les objets en suspens dans .git/lost-found"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "afficher la progression"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "afficher les noms étendus pour les objets inaccessibles"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Vérification des objets"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s : objet manquant"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "paramètre invalide : sha-1 attendu, '%s' trouvé"
@@ -15342,27 +15003,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<options>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Échec du stat de %s : %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "échec de l'analyse de '%s' valeur '%s'"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "impossible de faire un stat de '%s'"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "impossible de lire '%s'"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15373,211 +15034,217 @@
 msgstr ""
 "Le dernier lancement de gc a rapporté l'erreur suivante. Veuillez corriger\n"
 "la cause et supprimer %s.\n"
-"Le nettoyage automatique n'aura pas lieu jusqu'à ce que le fichier soit "
-"supprimé.\n"
+"Le nettoyage automatique n'aura pas lieu jusqu'à ce que le fichier soit supprimé.\n"
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "éliminer les objets non référencés"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "être plus consciencieux (durée de traitement allongée)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "activer le mode auto-gc"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
-msgstr ""
-"forcer le lancement du ramasse-miettes même si un autre ramasse-miettes "
-"tourne déjà"
+msgstr "forcer le lancement du ramasse-miettes même si un autre ramasse-miettes tourne déjà"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "recompacter tous les autres paquets excepté le plus gros paquet"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "impossible d'analyser gc.logexpiry %s"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "impossible d'analyser la valeur d'expiration d'élagage %s"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
-msgstr ""
-"Compression automatique du dépôt en tâche de fond pour optimiser les "
-"performances.\n"
+msgstr "Compression automatique du dépôt en tâche de fond pour optimiser les performances.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Compression du dépôt pour optimiser les performances.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Voir \"git help gc\" pour toute information sur le nettoyage manuel.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
-msgid ""
-"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
-msgstr ""
-"un ramasse-miettes est déjà en cours sur la machine '%s' pid %<PRIuMAX> "
-"(utilisez --force si ce n'est pas le cas)"
+msgid "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
+msgstr "un ramasse-miettes est déjà en cours sur la machine '%s' pid %<PRIuMAX> (utilisez --force si ce n'est pas le cas)"
 
-#: builtin/gc.c:698
-msgid ""
-"There are too many unreachable loose objects; run 'git prune' to remove them."
-msgstr ""
-"Il y a trop d'objets seuls inaccessibles ; lancez 'git prune' pour les "
-"supprimer."
+#: builtin/gc.c:705
+msgid "There are too many unreachable loose objects; run 'git prune' to remove them."
+msgstr "Il y a trop d'objets seuls inaccessibles ; lancez 'git prune' pour les supprimer."
 
-#: builtin/gc.c:708
-msgid ""
-"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
-msgstr ""
-"git maintenance run [--auto] [--[no-]quiet] [--task=<tâche>] [--schedule]"
+#: builtin/gc.c:715
+msgid "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+msgstr "git maintenance run [--auto] [--[no-]quiet] [--task=<tâche>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--schedule n'est pas accepté"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "argument de --schedule non reconnu, '%s'"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "échec de l'écriture du graphe de commits"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "échec du remplissage des distants"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "échec de la pré-récupération des distants"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
-msgstr "Impossible de démarrer le processus 'git pack-objects'"
+msgstr "impossible de démarrer le processus 'git pack-objects'"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
-msgstr "Impossible de finir le processus 'git pack-objects'"
+msgstr "impossible de finir le processus 'git pack-objects'"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "échec de l'écriture de l'index de multi-paquet"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "échec de 'git multi-pack-index expire'"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "échec de 'git multi-pack-index repack'"
 
-#: builtin/gc.c:1181
-msgid ""
-"skipping incremental-repack task because core.multiPackIndex is disabled"
-msgstr ""
-"tâche incremental-repack ignorée parce que core.multiPackIndex est désactivé"
+#: builtin/gc.c:1179
+msgid "skipping incremental-repack task because core.multiPackIndex is disabled"
+msgstr "tâche incremental-repack ignorée parce que core.multiPackIndex est désactivé"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "le fichier verrou '%s' existe, pas de maintenance"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "échec de la tâche '%s'"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' n'est pas une tâche valide"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "la tâche '%s' ne peut pas être sélectionnée plusieurs fois"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "lancer les tâches selon l'état du dépôt"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "fréquence"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "lancer les tâches selon une fréquence"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "ne pas afficher le progrès ou d'autres informations sur stderr"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "tâche"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "lancer une tâche spécifique"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "--auto et --schedule=<fréquence> sont mutuellement exclusifs"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "échec du lancement de 'git config'"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr ""
-"un autre processus est en train de programmer une maintenance en tâche de "
-"fond"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "impossible d'étendre le chemin '%s'"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "échec de démarrage de launchctl"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "échec de la création des répertoires pour '%s'"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "échec de l'amorçage du service %s"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "échec de création du fichier temporaire xml"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "échec du démarrage de schtasks"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
-msgstr ""
-"echec du lancement de 'crontab -l' ; votre système n'a pas l'air de fournir "
-"'cron'"
+msgstr "echec du lancement de 'crontab -l' ; votre système n'a pas l'air de fournir 'cron'"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
-msgstr ""
-"echec du lancement de 'crontab' ; votre système n'a pas l'air de fournir "
-"'cron'"
+msgstr "echec du lancement de 'crontab' ; votre système n'a pas l'air de fournir 'cron'"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "échec à l'ouverture de stdin de 'crontab'"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "'crontab' est mort"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "un autre processus est en train de programmer une maintenance en tâche de fond"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "échec de l'ajout du dépôt à la config globale"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <subcommand> [<options>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "sous-commande invalide : %s"
@@ -15586,12 +15253,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<options>] [-e] <motif> [<révision>...] [[--] <chemin>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep : échec de création du fil: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "nombre de fils spécifié invalide (%d) pour %s"
@@ -15600,209 +15267,197 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793 builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "pas de support des fils, ignore %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "impossible de lire l'arbre (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "impossible de faire un grep sur un objet de type %s"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "l'option '%c' attend une valeur numérique"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "rechercher dans l'index plutôt que dans la copie de travail"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "rechercher dans les contenus non gérés par git"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "rechercher dans les fichiers suivis et non-suivis"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorer les fichiers spécifiés via '.gitignore'"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "rechercher récursivement dans chaque sous-module"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "afficher les lignes qui ne correspondent pas"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "correspondance insensible à la casse"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "rechercher les motifs aux séparateurs de mots"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "traiter les fichiers binaires comme texte"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "ne pas chercher les motifs dans les fichiers binaires"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "traiter les fichiers binaires avec les filtres textconv"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "rechercher dans les sous-répertoires (défaut)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "descendre au plus de <profondeur> dans l'arborescence"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "utiliser des expressions régulières étendues POSIX"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "utiliser des expressions régulières basiques POSIX (par défaut)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "interpréter les motifs comme de chaînes fixes"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "utiliser des expressions régulières compatibles avec Perl"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "afficher les numéros de ligne"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "afficher le numéro de colonne de la première correspondance"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "ne pas pas afficher les noms de fichier"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "afficher les noms de fichier"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "afficher les noms de fichiers relativement au répertoire de base"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "n'afficher que les noms de fichiers au lieu des lignes correspondant"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "synonyme pour --files-with-matches"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "n'afficher que les noms des fichiers sans correspondance"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "imprimer une caractère NUL après le noms de fichier"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "n'afficher que les parties correspondantes d'une ligne"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "afficher le nombre de correspondances au lieu des lignes correspondant"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "mettre en évidence les correspondances"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
-msgstr ""
-"imprimer une ligne vide entre les correspondances de fichiers différents"
-
-#: builtin/grep.c:901
-msgid "show filename only once above matches from same file"
-msgstr ""
-"afficher le nom de fichier une fois au dessus des correspondances du même "
-"fichier"
+msgstr "imprimer une ligne vide entre les correspondances de fichiers différents"
 
 #: builtin/grep.c:904
+msgid "show filename only once above matches from same file"
+msgstr "afficher le nom de fichier une fois au dessus des correspondances du même fichier"
+
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "afficher <n> lignes de contexte avant et après les correspondances"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "afficher <n> lignes de contexte avant les correspondances"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "afficher <n> lignes de contexte après les correspondances"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "utiliser <n> fils de travail"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "raccourci pour -C NUM"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
-msgstr ""
-"afficher une ligne avec le nom de la fonction avant les correspondances"
+msgstr "afficher une ligne avec le nom de la fonction avant les correspondances"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "afficher la fonction contenante"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "lire les motifs depuis fichier"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "rechercher <motif>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "combiner les motifs spécifiés par -e"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
-msgstr ""
-"indiquer des correspondances avec le code de sortie mais sans rien afficher"
+msgstr "indiquer des correspondances avec le code de sortie mais sans rien afficher"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
-msgstr ""
-"n'afficher que les correspondances de fichiers qui correspondent à tous les "
-"motifs"
-
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "afficher l'arbre d'analyse pour le motif grep"
+msgstr "n'afficher que les correspondances de fichiers qui correspondent à tous les motifs"
 
 #: builtin/grep.c:944
 msgid "pager"
@@ -15822,8 +15477,7 @@
 
 #: builtin/grep.c:1050
 msgid "--no-index or --untracked cannot be used with revs"
-msgstr ""
-"--no-index ou --untracked ne peuvent pas être utilisés avec des révisions"
+msgstr "--no-index ou --untracked ne peuvent pas être utilisés avec des révisions"
 
 #: builtin/grep.c:1058
 #, c-format
@@ -15838,11 +15492,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "option de combinaison invalide, ignore --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "pas de support des fils, ignore --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "nombre de fils spécifié invalide (%d)"
@@ -15855,21 +15509,21 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached ou --untracked ne peuvent pas être utilisés avec --no-index"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked ne peut pas être utilisé avec --cached"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard ne peut pas être utilisé avec du contenu suivi"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "--cached et des arbres sont fournis en même temps"
 
 #: builtin/hash-object.c:85
-msgid ""
-"git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
-"[--] <file>..."
-msgstr ""
-"git hash-object [-t <type>] [-w] [--path=<fichier> | --no-filters] [--stdin] "
-"[--] <fichier>..."
+msgid "git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] [--] <file>..."
+msgstr "git hash-object [-t <type>] [-w] [--path=<fichier> | --no-filters] [--stdin] [--] <fichier>..."
 
 #: builtin/hash-object.c:86
 msgid "git hash-object  --stdin-paths"
@@ -15892,11 +15546,8 @@
 msgstr "stocker le fichier tel quel sans filtrage"
 
 #: builtin/hash-object.c:104
-msgid ""
-"just hash any random garbage to create corrupt objects for debugging Git"
-msgstr ""
-"juste hasher n'importe quel contenu pour créer des objets corrompus pour "
-"debugger Git"
+msgid "just hash any random garbage to create corrupt objects for debugging Git"
+msgstr "juste hasher n'importe quel contenu pour créer des objets corrompus pour debugger Git"
 
 #: builtin/hash-object.c:105
 msgid "process file as it were from this path"
@@ -15945,11 +15596,11 @@
 
 #: builtin/help.c:190
 msgid "Failed to start emacsclient."
-msgstr "échec de démarrage d'emacsclient."
+msgstr "Échec de démarrage d'emacsclient."
 
 #: builtin/help.c:203
 msgid "Failed to parse emacsclient version."
-msgstr "échec d'analyse de la version d'emacsclient."
+msgstr "Échec d'analyse de la version d'emacsclient."
 
 #: builtin/help.c:211
 #, c-format
@@ -15992,15 +15643,15 @@
 msgid "no info viewer handled the request"
 msgstr "aucun visualiseur de 'info' n'a pris en charge la demande"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' est un alias de '%s'"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
-msgstr "Mauvais chaîne alias.%s : %s"
+msgstr "mauvais chaîne alias.%s : %s"
 
 #: builtin/help.c:563 builtin/help.c:593
 #, c-format
@@ -16011,459 +15662,443 @@
 msgid "'git help config' for more information"
 msgstr "'git help config' pour plus d'information"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "type d'objet non correspondant à %s"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "objet attendu non reçu %s"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "objet %s : type attendu %s, reçu %s"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "impossible de remplir %d octet"
 msgstr[1] "impossible de remplir %d octets"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "fin de fichier prématurée"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "erreur de lecture sur l'entrée"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "plus d'octets utilisés que disponibles"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "le paquet est trop grand pour la définition actuelle de off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "le paquet dépasse la taille maximale permise"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "impossible de créer '%s'"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "impossible d'ouvrir le fichier paquet '%s'"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "la signature du paquet ne correspond pas"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "la version de paquet %<PRIu32> non supportée"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "le paquet a un mauvais objet à l'offset %<PRIuMAX> : %s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "la décompression (inflate) a retourné %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "dépassement de la valeur d'offset pour l'objet delta de base"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "l'objet delta de base est hors limite"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "type d'objet inconnu %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "impossible de lire (pread) le fichier paquet"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "fin prématurée du fichier paquet, %<PRIuMAX> octet lu"
 msgstr[1] "fin prématurée du fichier paquet, %<PRIuMAX> octets lus"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "grave incohérence dans la décompression (inflate)"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "COLLISION SHA1 TROUVÉE AVEC %s !"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
-#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171 builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "impossible de lire %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "impossible de lire l'information existante de l'objet %s"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "impossible de lire l'objet existant %s"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objet blob invalide %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "erreur de fsck dans l'objet empaqueté"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Tous les objets enfants de %s ne sont pas accessibles"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "échec d'application du delta"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Réception d'objets"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Indexation d'objets"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "le paquet est corrompu (SHA1 ne correspond pas)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "impossible d'obtenir le statut (fstat) du fichier paquet"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "le paquet est invalide à la fin"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "confusion extrême dans parse_pack_objects()"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Résolution des deltas"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "impossible de créer le fil : %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "confusion extrême"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "complété avec %d objet local"
 msgstr[1] "complété avec %d objets locaux"
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
-msgstr ""
-"Somme de contrôle de fin inattendue pour %s (corruption sur le disque ?)"
+msgstr "Somme de contrôle de fin inattendue pour %s (corruption sur le disque ?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "le paquet a %d delta non résolu"
 msgstr[1] "le paquet a %d deltas non résolus"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "impossible de compresser l'objet ajouté (%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "l'objet local %s est corrompu"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "le nom de fichier paquet '%s' ne se termine pas par '.pack'"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "le nom de fichier paquet '%s' ne se termine pas par '.%s'"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "impossible d'écrire le fichier %s '%s'"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "impossible de fermer le fichier %s écrit '%s'"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "erreur en fermeture du fichier paquet"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "impossible de stocker le fichier paquet"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "impossible de stocker le fichier d'index"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "mauvais pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Impossible d'ouvrir le fichier paquet existant '%s'"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Impossible d'ouvrir le fichier paquet d'index existant pour '%s'"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "pas un delta : %d objet"
 msgstr[1] "pas un delta : %d objets"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "longueur chaînée = %d : %lu objet"
 msgstr[1] "longueur chaînée = %d : %lu objets"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "Impossible de revenir au répertoire de travail courant"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807 builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "mauvais %s"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algorithme d'empreinte inconnu '%s'"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin ne peut pas être utilisé sans --stdin"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin requiert un dépôt git"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format ne peut pas être utilisé avec --stdin"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "--verify sans nom de fichier paquet donné"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "erreur de fsck dans les objets paquets"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "impossible de faire un stat du modèle '%s'"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "impossible d'ouvrir le répertoire '%s'"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "impossible de lire le lien '%s'"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "impossible de créer un lien symbolique de '%s' '%s'"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "modèle %s ignoré"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "modèles non trouvés dans %s"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "pas de copie des modèles depuis '%s' : %s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
-msgstr "Nom de branche initiale invalide : '%s'"
+msgstr "nom de branche initiale invalide : '%s'"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "impossible de traiter le fichier de type %d"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "impossible de déplacer %s vers %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "essai de réinitialisation du dépôt avec une empreinte différente"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s existe déjà"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-initialisation : --initial-branch=%s ignoré"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "Dépôt Git existant partagé réinitialisé dans %s%s\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Dépôt Git existant réinitialisé dans %s%s\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Dépôt Git vide partagé initialisé dans %s%s\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Dépôt Git vide initialisé dans %s%s\n"
 
-#: builtin/init-db.c:531
-msgid ""
-"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
-"shared[=<permissions>]] [<directory>]"
-msgstr ""
-"git init [-q | --quiet] [--bare] [--template=<répertoire-modèle>] [--"
-"shared[=<permissions>]] [<répertoire>]"
+#: builtin/init-db.c:517
+msgid "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [<directory>]"
+msgstr "git init [-q | --quiet] [--bare] [--template=<répertoire-modèle>] [--shared[=<permissions>]] [<répertoire>]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "permissions"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "spécifier que le dépôt git sera partagé entre plusieurs utilisateurs"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "outrepasser le nom de la branche initiale"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "empreinte"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "spécifier l'algorithme d'empreinte à utiliser"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir et --bare sont mutuellement exclusifs"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "impossible de créer le répertoire (mkdir) %s"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "impossible de se déplacer vers le répertoire (chdir) %s"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
-msgid ""
-"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
-"dir=<directory>)"
-msgstr ""
-"%s (ou --work-tree=<répertoire>) n'est pas autorisé sans spécifier %s (ou --"
-"git-dir=<répertoire>)"
+msgid "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-dir=<directory>)"
+msgstr "%s (ou --work-tree=<répertoire>) n'est pas autorisé sans spécifier %s (ou --git-dir=<répertoire>)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Impossible d'accéder à l'arbre de travail '%s'"
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir est incompatible avec un dépôt nu"
 
 #: builtin/interpret-trailers.c:16
-msgid ""
-"git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
-"<token>[(=|:)<value>])...] [<file>...]"
-msgstr ""
-"git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
-"<symbole>[(=|:)<valeur>])...] [<fichier>...]"
+msgid "git interpret-trailers [--in-place] [--trim-empty] [(--trailer <token>[(=|:)<value>])...] [<file>...]"
+msgstr "git interpret-trailers [--in-place] [--trim-empty] [(--trailer <symbole>[(=|:)<valeur>])...] [<fichier>...]"
 
 #: builtin/interpret-trailers.c:95
 msgid "edit files in place"
@@ -16505,10 +16140,6 @@
 msgid "do not treat --- specially"
 msgstr "ne pas traiter spécialement ---"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "ligne de fin"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "ligne(s) de fin à ajouter"
@@ -16521,548 +16152,528 @@
 msgid "no input file given for in-place editing"
 msgstr "aucun fichier en entrée pour l'éditon sur place"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<options>] [<plage de révisions>] [[--] <chemin>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<options>] <objet>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "option --decorate invalide : %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "afficher la source"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
-msgstr "Utiliser le fichier de correspondance de mail"
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "utiliser le fichier de correspondance de mail"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "décorer seulement les références correspondant à <motif>"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "ne pas décorer les références correspondant à <motif>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "décorer les options"
 
-#: builtin/log.c:189
-msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
-"<file>"
-msgstr ""
-"tracer l'évolution d'une plage <début>,<fin> ou d'une fonction <nom-de-"
-"fonction> dans <fichier>"
+#: builtin/log.c:190
+msgid "trace the evolution of line range <start>,<end> or function :<funcname> in <file>"
+msgstr "tracer l'évolution d'une plage <début>,<fin> ou d'une fonction <nom-de-fonction> dans <fichier>"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
-msgstr ""
-"-L<plage>:<fichier> ne peut pas être utilisé avec une spécificateur de chemin"
+msgstr "-L<plage>:<fichier> ne peut pas être utilisé avec une spécificateur de chemin"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Sortie finale : %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s : fichier incorrect"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "type inconnu : %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s : couverture invalide pour le mode de description"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers sans valeur"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "impossible d'ouvrir le fichier correctif %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "exactement une plage nécessaire"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "ceci n'est pas une plage"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "la lettre de motivation doit être au format courriel"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "échec de création du fichier de lettre de motivation"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to aberrant : %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<options>] [<depuis> | <plage de révisions>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "deux répertoires de sortie ?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "commit inconnu %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
-#: builtin/replace.c:210
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207 builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "échec à résoudre '%s' comme une référence valide"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "impossible de trouver la base de fusion exacte"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
 "Or you could specify base commit by --base=<base-commit-id> manually"
 msgstr ""
-"impossible de récupérer l'amont, si vous voulez enregistrer le commit de "
-"base automatiquement,\n"
-"veuillez utiliser git branch --set-upstream-to pour suivre une branche "
-"distante.\n"
-"Ou vous pouvez spécifier le commit de base par --base=<id-du-commit-de-base> "
-"manuellement"
+"impossible de récupérer l'amont, si vous voulez enregistrer le commit de base automatiquement,\n"
+"veuillez utiliser git branch --set-upstream-to pour suivre une branche distante.\n"
+"Ou vous pouvez spécifier le commit de base par --base=<id-du-commit-de-base> manuellement"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "échec à trouver la base de fusion exacte"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "le commit de base devrait être l'ancêtre de la liste de révisions"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "le commit de base ne devrait pas faire partie de la liste de révisions"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "impossible d'obtenir l'id du patch"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
-msgstr ""
-"échec d'inférence de l'origine de différence d'intervalles de la série "
-"actuelle"
+msgstr "échec d'inférence de l'origine de différence d'intervalles de la série actuelle"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
-msgstr ""
-"utilisation de '%s' comme une différence d'intervalle pour la série actuelle"
+msgstr "utilisation de '%s' comme une différence d'intervalle pour la série actuelle"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "utiliser [PATCH n/m] même avec un patch unique"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "utiliser [PATCH] même avec des patchs multiples"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "afficher les patchs sur la sortie standard"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "générer une lettre de motivation"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
-msgstr ""
-"utiliser une séquence simple de nombres pour les nom des fichiers de sortie"
+msgstr "utiliser une séquence simple de nombres pour les nom des fichiers de sortie"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "utiliser <sfx> au lieu de '.patch'"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "démarrer la numérotation des patchs à <n> au lieu de 1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "reroll-count"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "marquer la série comme une Nième réédition"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "taille maximum du nom du fichier de sortie"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "utiliser [RFC PATCH] au lieu de [PATCH]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
-msgstr ""
-"générer des parties de la lettre d'introduction à partir de la description "
-"de la branche"
+msgstr "générer des parties de la lettre d'introduction à partir de la description de la branche"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
 msgstr "utiliser [<préfixe>] au lieu de [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "stocker les fichiers résultats dans <répertoire>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "ne pas retirer/ajouter [PATCH]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "ne pas imprimer les diffs binaires"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "écrire une empreinte à zéro dans l'entête From"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "ne pas inclure un patch correspondant à un commit amont"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "afficher le format du patch au lieu du défaut (patch + stat)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "Communication"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "en-tête"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "ajouter l'en-tête de courriel"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "courriel"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "ajouter l'en-tête \"To:\""
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "ajouter l'en-tête \"Cc:\""
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
-msgstr ""
-"renseigner l'adresse From à <ident> (ou à l'ident du validateur si absent)"
+msgstr "renseigner l'adresse From à <ident> (ou à l'ident du validateur si absent)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "id-message"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "répondre dans le premier message à <id-message>"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "limite"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "attacher le patch"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "patch à l'intérieur"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
-msgstr ""
-"activer l'enfilage de message, styles : shallow (superficiel), deep (profond)"
+msgstr "activer l'enfilage de message, styles : shallow (superficiel), deep (profond)"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "signature"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "ajouter une signature"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "commit-de-base"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
-msgstr "Ajouter un arbre prérequis à la série de patchs"
+msgstr "ajouter un arbre prérequis à la série de patchs"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "ajouter une signature depuis un fichier"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "ne pas afficher les noms de fichiers des patchs"
 
-#: builtin/log.c:1812
-msgid "show progress while generating patches"
-msgstr ""
-"afficher la barre de progression durant la phase de génération des patchs"
-
-#: builtin/log.c:1814
-msgid "show changes against <rev> in cover letter or single patch"
-msgstr ""
-"afficher les modifications par rapport à <rév> dans la première page ou une "
-"rustine"
-
-#: builtin/log.c:1817
-msgid "show changes against <refspec> in cover letter or single patch"
-msgstr ""
-"afficher les modifications par rapport à <refspec> dans la première page ou "
-"une rustine"
-
 #: builtin/log.c:1819
+msgid "show progress while generating patches"
+msgstr "afficher la barre de progression durant la phase de génération des patchs"
+
+#: builtin/log.c:1821
+msgid "show changes against <rev> in cover letter or single patch"
+msgstr "afficher les modifications par rapport à <rév> dans la première page ou une rustine"
+
+#: builtin/log.c:1824
+msgid "show changes against <refspec> in cover letter or single patch"
+msgstr "afficher les modifications par rapport à <refspec> dans la première page ou une rustine"
+
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "pourcentage par lequel la création est pondérée"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "ligne d'identification invalide : %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n et -k sont mutuellement exclusifs"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc et -k sont mutuellement exclusifs"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only n'a pas de sens"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status n'a pas de sens"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check n'a pas de sens"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "--stdout, --output, et --output-directory sont mutuellement exclusifs"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requiert --cover-letter ou une rustine unique"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff :"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contre v%d :"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor requiert --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requiert --cover-letter ou une rustine unique"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Diff-intervalle :"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Diff-intervalle contre v%d :"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "lecture du fichier de signature '%s' impossible"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Génération des patchs"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "échec de création des fichiers en sortie"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<branche_amont> [<head> [<limite>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
-msgid ""
-"Could not find a tracked remote branch, please specify <upstream> manually.\n"
-msgstr ""
-"Impossible de trouver une branche distante suivie, merci de spécifier "
-"<branche_amont> manuellement.\n"
+msgid "Could not find a tracked remote branch, please specify <upstream> manually.\n"
+msgstr "Impossible de trouver une branche distante suivie, merci de spécifier <branche_amont> manuellement.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<options>] [<fichier>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "identifier l'état de fichier avec les étiquettes"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "utiliser des minuscules pour les fichiers 'assumés inchangés'"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "utiliser des minuscules pour les fichiers 'fsmonitor clean'"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "afficher les fichiers mis en cache dans la sortie (défaut)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "afficher les fichiers supprimés dans la sortie"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "afficher les fichiers modifiés dans la sortie"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "afficher les autres fichiers dans la sortie"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "afficher les fichiers ignorés dans la sortie"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "afficher les nom des objets indexés dans la sortie"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
-msgstr ""
-"afficher les fichiers du système de fichiers qui ont besoin d'être supprimés"
+msgstr "afficher les fichiers du système de fichiers qui ont besoin d'être supprimés"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "afficher seulement les noms des répertoires 'other'"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "afficher les fins de lignes des fichiers"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "ne pas afficher les répertoires vides"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "afficher les fichiers non fusionnés dans la sortie"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "afficher l'information resolv-undo"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "sauter les fichiers correspondant au motif"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "les motifs d'exclusion sont lus depuis <fichier>"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "lire des motifs d'exclusion additionnels par répertoire dans <fichier>"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "ajouter les exclusions git standard"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "afficher en relatif par rapport au répertoire racine du projet"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "parcourir récursivement les sous-modules"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "si un <fichier> n'est pas dans l'index, traiter cela comme une erreur"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "arbre ou apparenté"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
-msgstr ""
-"considérer que les chemins supprimés depuis <arbre ou apparenté> sont "
-"toujours présents"
+msgstr "considérer que les chemins supprimés depuis <arbre ou apparenté> sont toujours présents"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "afficher les données de débogage"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "supprimer les entrées dupliquées"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -17073,41 +16684,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<dépôt> [<références>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "ne pas afficher les URL distantes"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "exécutable"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "chemin vers git-upload-pack sur le serveur distant"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "limiter aux étiquettes"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "limiter aux heads"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "ne pas afficher les étiquettes pelées"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "prendre en compte url.<base>.insteadOf"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
-msgstr ""
-"sortir avec un code d'erreur 2 si aucune correspondance de référence n'est "
-"trouvée"
+msgstr "sortir avec un code d'erreur 2 si aucune correspondance de référence n'est trouvée"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "afficher la réf sous-jacente en plus de l'objet pointé par elle"
 
@@ -17145,9 +16754,57 @@
 
 #: builtin/ls-tree.c:145
 msgid "list entire tree; not just current directory (implies --full-name)"
-msgstr ""
-"afficher l'arbre entier ; pas seulement le répertoire courant (implique --"
-"full-name)"
+msgstr "afficher l'arbre entier ; pas seulement le répertoire courant (implique --full-name)"
+
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+#| msgid "git diff --no-index [<options>] <path> <path>"
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<options>] <msg> <rustine> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "garder le sujet"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "conserver les crochets autres que ceux autour de PATCH dans le sujet"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "copier le Message-ID à la fin du message de validation"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "ré-encoder les méta-données en i18n.commitEncoding"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "désactiver le ré-encodage de jeu de caractère des méta-données"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "jeu de caractère"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "ré-encoder les méta-données dans ce jeu de caractère"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "utiliser les ciseaux"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<action>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "action lorsqu'un CR cité est trouvé"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "utiliser l'entête dans le corps de message"
 
 #: builtin/mailsplit.c:241
 #, c-format
@@ -17195,12 +16852,8 @@
 msgstr "trouver où <validation> a divergé du reflog de <référence>"
 
 #: builtin/merge-file.c:9
-msgid ""
-"git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> "
-"<orig-file> <file2>"
-msgstr ""
-"git merge-file [<options>] [-L <nom1> [-L <orig> [-L <nom2>]]] <fichier1> "
-"<fichier-orig> <fichier2>"
+msgid "git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> <orig-file> <file2>"
+msgstr "git merge-file [<options>] [-L <nom1> [-L <orig> [-L <nom2>]]] <fichier1> <fichier-orig> <fichier2>"
 
 #: builtin/merge-file.c:35
 msgid "send results to standard output"
@@ -17242,7 +16895,7 @@
 #: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
-msgstr "Impossible d'analyser l'objet '%s'"
+msgstr "impossible d'analyser l'objet '%s'"
 
 #: builtin/merge-recursive.c:57
 #, c-format
@@ -17265,210 +16918,202 @@
 msgid "Merging %s with %s\n"
 msgstr "Fusion de %s avec %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<options>] [<commit>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "le commutateur `m' a besoin d'une valeur"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "le commutateur '%s' a besoin d'une valeur"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Impossible de trouver la stratégie de fusion '%s'.\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Les stratégies disponibles sont :"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Les stratégies personnalisées sont :"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "ne pas afficher un diffstat à la fin de la fusion"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "afficher un diffstat à la fin de la fusion"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(synonyme de --stat)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
-msgstr ""
-"ajouter (au plus <n>) éléments du journal court au message de validation de "
-"la fusion"
+msgstr "ajouter (au plus <n>) éléments du journal court au message de validation de la fusion"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "créer une validation unique au lieu de faire une fusion"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "effectuer une validation si la fusion réussit (défaut)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "éditer le message avant la validation"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "autoriser l'avance rapide (défaut)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "abandonner si l'avance rapide n'est pas possible"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "vérifier que le commit nommé a une signature GPG valide"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168 builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "stratégie"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "stratégie de fusion à utiliser"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "option=valeur"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "option pour la stratégie de fusion sélectionnée"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
-msgstr ""
-"message de validation de la fusion (pour une fusion sans avance rapide)"
+msgstr "message de validation de la fusion (pour une fusion sans avance rapide)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "abandonner la fusion en cours"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort mais laisser l'index et l'arbre de travail inchangés"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "continuer la fusion en cours"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "permettre la fusion d'historiques sans rapport"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "ne pas utiliser les crochets pre-merge-commit et commit-msg"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "impossible de lancer le remisage."
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "échec du remisage"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "pas un objet valide : %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree a échoué"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (rien à compresser)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Déjà à jour. (rien à compresser)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Validation compressée -- HEAD non mise à jour\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Pas de message de fusion -- pas de mise à jour de HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' ne pointe pas sur un commit"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Mauvaise chaîne branch.%s.mergeoptions : %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "Impossible de gérer autre chose que la fusion de deux têtes."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Options inconnue pour merge-recursive : -X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "impossible d'écrire %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Impossible de lire depuis '%s'"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
-msgstr ""
-"Pas de validation de la fusion ; utilisez 'git commit' pour terminer la "
-"fusion.\n"
+msgstr "Pas de validation de la fusion ; utilisez 'git commit' pour terminer la fusion.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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 ""
-"Veuillez entrer un message de validation pour expliquer en quoi cette fusion "
-"est\n"
-"nécessaire, surtout si cela fusionne une branche amont mise à jour dans une "
-"branche de sujet.\n"
+"Veuillez entrer un message de validation pour expliquer en quoi cette fusion est\n"
+"nécessaire, surtout si cela fusionne une branche amont mise à jour dans une branche de sujet.\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Un message vide abandonne la validation.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17477,74 +17122,72 @@
 "Les lignes commençant par '%c' seront ignorées, et un message vide\n"
 "abandonne la validation.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Message de validation vide."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Merveilleux.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
-msgstr ""
-"La fusion automatique a échoué ; réglez les conflits et validez le "
-"résultat.\n"
+msgstr "La fusion automatique a échoué ; réglez les conflits et validez le résultat.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "Pas de branche courante."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "Pas de branche distante pour la branche courante."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "Pas de branche amont par défaut définie pour la branche courante."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Pas de branche de suivi pour %s depuis %s"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Mauvaise valeur '%s' dans l'environnement '%s'"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "pas possible de fusionner ceci dans %s : %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "pas possible de fusionner ceci"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort n'accepte pas d'argument"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Il n'y a pas de fusion à abandonner (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit n'accepte pas d'argument"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue ne supporte aucun argument"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Il n'y a pas de fusion en cours (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17552,7 +17195,7 @@
 "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe).\n"
 "Veuillez valider vos modifications avant de pouvoir fusionner."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17560,102 +17203,132 @@
 "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe).\n"
 "Veuillez valider vos modifications avant de pouvoir fusionner."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Vous ne pouvez pas combiner --squash avec --no-ff."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "Vous ne pouvez pas combiner --squash avec --commit."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
-msgstr ""
-"Pas de validation spécifiée et merge.defaultToUpstream n'est pas défini."
+msgstr "Pas de validation spécifiée et merge.defaultToUpstream n'est pas défini."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "La validation compressée vers une tête vide n'est pas encore supportée"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Une validation sans avance rapide n'a pas de sens dans une tête vide"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - pas possible de fusionner ceci"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
-msgstr ""
-"Possible de fusionner exactement une seule validation dans une tête vide"
+msgstr "Possible de fusionner exactement une seule validation dans une tête vide"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "refus de fusionner des historiques sans relation"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Déjà à jour."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Mise à jour %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Essai de fusion vraiment triviale dans l'index...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Non.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Déjà à jour. Ouais !"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "Pas possible d'avancer rapidement, abandon."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Retour de l'arbre à l'original...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Essai de la stratégie de fusion %s...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Aucune stratégie de fusion n'a pris en charge la fusion.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "La fusion avec la stratégie %s a échoué.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Utilisation de %s pour préparer la résolution à la main.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
-msgstr ""
-"La fusion automatique a réussi ; stoppée avant la validation comme demandé\n"
+msgstr "La fusion automatique a réussi ; stoppée avant la validation comme demandé\n"
+
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "attention : l'entrée d'étiquette ne passe pas fsck : %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "erreur : l'entrée d'étiquette ne passe pas fsck : %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) ne devrait jamais rappeler cette fonction"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "impossible de lire l'objet étiqueté '%s'"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "l'objet '%s' étiqueté comme '%s', mais est de type '%s'"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "l'étiquette sur stdin n'a pas passé le test strict fsck"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "l'étiquette sur stdin ne pointe pas sur un objet valide"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "impossible d'écrire le fichier d'étiquettes"
 
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
@@ -17673,37 +17346,43 @@
 msgid "allow creation of more than one tree"
 msgstr "autoriser la création de plus d'un arbre"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<taille>)"
+#: builtin/multi-pack-index.c:10
+#| msgid "git multi-pack-index [<options>] (write|verify|expire|repack --batch-size=<size>)"
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<options>] write [--preferred-pack=<paquet>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+#| msgid "git upload-pack [<options>] <dir>"
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<options>] verify"
+
+#: builtin/multi-pack-index.c:16
+#| msgid "git upload-pack [<options>] <dir>"
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<options>] expire"
+
+#: builtin/multi-pack-index.c:19
+#| msgid "git multi-pack-index [<options>] (write|verify|expire|repack --batch-size=<size>)"
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<options>] repack [--batch-size=<taille>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
-msgstr ""
-"répertoire objet contenant un ensemble de paires de fichiers paquet et "
-"d'index de paquet"
-
-#: builtin/multi-pack-index.c:29
-msgid ""
-"during repack, collect pack-files of smaller size into a batch that is "
-"larger than this size"
-msgstr ""
-"pendant le repaquetage, collecter les fichiers paquet de plus petite taille "
-"dans un lot plus grand que cette taille"
-
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "trop d'arguments"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "l'option --batch-size ne sert que pour la sous-commande 'repack'"
+msgstr "répertoire objet contenant un ensemble de paires de fichiers paquet et d'index de paquet"
 
 #: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "paquet-préféré"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "paquet à réutiliser lors du calcul de bitmap de multi-paquet"
+
+#: builtin/multi-pack-index.c:128
+msgid "during repack, collect pack-files of smaller size into a batch that is larger than this size"
+msgstr "pendant le repaquetage, collecter les fichiers paquet de plus petite taille dans un lot plus grand que cette taille"
+
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "sous-commande non reconnue : %s"
@@ -17719,9 +17398,7 @@
 
 #: builtin/mv.c:85
 msgid "Please stage your changes to .gitmodules or stash them to proceed"
-msgstr ""
-"Veuillez indexer vos modifications de .gitmodules ou les remiser pour "
-"continuer"
+msgstr "Veuillez indexer vos modifications de .gitmodules ou les remiser pour continuer"
 
 #: builtin/mv.c:103
 #, c-format
@@ -17801,7 +17478,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "Renommage de %s en %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "le renommage de '%s' a échoué"
@@ -17820,8 +17497,7 @@
 
 #: builtin/name-rev.c:524
 msgid "print only ref-based names (no object names)"
-msgstr ""
-"afficher seulement les noms basés sur des références (pas de nom d'objet)"
+msgstr "afficher seulement les noms basés sur des références (pas de nom d'objet)"
 
 #: builtin/name-rev.c:525
 msgid "only use tags to name the commits"
@@ -17837,8 +17513,7 @@
 
 #: builtin/name-rev.c:531
 msgid "list all commits reachable from all refs"
-msgstr ""
-"afficher toutes les validations accessibles depuis toutes les références"
+msgstr "afficher toutes les validations accessibles depuis toutes les références"
 
 #: builtin/name-rev.c:532
 msgid "read from stdin"
@@ -17857,25 +17532,16 @@
 msgstr "git notes [--ref <références-notes>] [list [<object>]]"
 
 #: builtin/notes.c:29
-msgid ""
-"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> "
-"| (-c | -C) <object>] [<object>]"
-msgstr ""
-"git notes [--ref <références-notes>] add [-f] [--allow-empty] [-m <message> "
-"| -F <fichier> | (-c | -C) <objet>] [<objet>]"
+msgid "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"
+msgstr "git notes [--ref <références-notes>] add [-f] [--allow-empty] [-m <message> | -F <fichier> | (-c | -C) <objet>] [<objet>]"
 
 #: builtin/notes.c:30
 msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
-msgstr ""
-"git notes [--ref <références-notes>] copy [-f] <depuis-objet> <vers-objet>"
+msgstr "git notes [--ref <références-notes>] copy [-f] <depuis-objet> <vers-objet>"
 
 #: builtin/notes.c:31
-msgid ""
-"git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | "
-"(-c | -C) <object>] [<object>]"
-msgstr ""
-"git notes [--ref <références-notes>] append [--allow-empty] [-m <message> | -"
-"F <fichier> | (-c | -C) <objet>] [<objet>]"
+msgid "git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"
+msgstr "git notes [--ref <références-notes>] append [--allow-empty] [-m <message> | -F <fichier> | (-c | -C) <objet>] [<objet>]"
 
 #: builtin/notes.c:32
 msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
@@ -17886,11 +17552,8 @@
 msgstr "git notes [--ref <références-notes>] show [<objet>]"
 
 #: builtin/notes.c:34
-msgid ""
-"git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
-msgstr ""
-"git notes [--ref <références-notes>] merge [-v | -q] [-s <stratégie> ] "
-"<références-notes>"
+msgid "git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
+msgstr "git notes [--ref <références-notes>] merge [-v | -q] [-s <stratégie> ] <références-notes>"
 
 #: builtin/notes.c:35
 msgid "git notes merge --commit [-v | -q]"
@@ -17995,14 +17658,13 @@
 msgid "the note contents have been left in %s"
 msgstr "le contenu de la note a été laissé dans %s"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "impossible d'ouvrir ou lire '%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: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
 #, c-format
 msgid "failed to resolve '%s' as a valid ref."
 msgstr "impossible de résoudre '%s' comme une référence valide."
@@ -18033,13 +17695,12 @@
 #: builtin/notes.c:356
 #, c-format
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
-msgstr "Refus de faire %s sur des notes dans %s (hors de refs/notes/)"
+msgstr "refus de faire %s sur des notes dans %s (hors 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
-msgid "too many parameters"
-msgstr "trop de paramètres"
+#: 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
+msgid "too many arguments"
+msgstr "trop d'arguments"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -18072,12 +17733,8 @@
 
 #: builtin/notes.c:448
 #, c-format
-msgid ""
-"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
-msgstr ""
-"Impossible d'ajouter des notes. Des notes ont été trouvées pour l'objet %s. "
-"Utilisez '-f' pour écraser les notes existantes"
+msgid "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite existing notes"
+msgstr "Impossible d'ajouter des notes. Des notes ont été trouvées pour l'objet %s. Utilisez '-f' pour écraser les notes existantes"
 
 #: builtin/notes.c:463 builtin/notes.c:544
 #, c-format
@@ -18095,21 +17752,16 @@
 
 #: builtin/notes.c:499
 msgid "load rewriting config for <command> (implies --stdin)"
-msgstr ""
-"charger la configuration de réécriture pour <commande> (implique --stdin)"
+msgstr "charger la configuration de réécriture pour <commande> (implique --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "pas assez de paramètres"
+msgid "too few arguments"
+msgstr "trop peu d'arguments"
 
 #: builtin/notes.c:538
 #, c-format
-msgid ""
-"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
-"existing notes"
-msgstr ""
-"Impossible de copier des notes. Des notes ont été trouvées pour l'objet %s. "
-"Utilisez '-f' pour écraser les notes existantes"
+msgid "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite existing notes"
+msgstr "Impossible de copier des notes. Des notes ont été trouvées pour l'objet %s. Utilisez '-f' pour écraser les notes existantes"
 
 #: builtin/notes.c:550
 #, c-format
@@ -18171,12 +17823,8 @@
 msgstr "Options de fusion"
 
 #: builtin/notes.c:788
-msgid ""
-"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
-"cat_sort_uniq)"
-msgstr ""
-"résoudre les conflits de notes en utilisant la stratégie donnée (manual/ours/"
-"theirs/union/cat_sort_uniq)"
+msgid "resolve notes conflicts using the given strategy (manual/ours/theirs/union/cat_sort_uniq)"
+msgstr "résoudre les conflits de notes en utilisant la stratégie donnée (manual/ours/theirs/union/cat_sort_uniq)"
 
 #: builtin/notes.c:790
 msgid "Committing unmerged notes"
@@ -18215,21 +17863,17 @@
 #: builtin/notes.c:876
 #, c-format
 msgid "failed to store link to current notes ref (%s)"
-msgstr ""
-"impossible de stocker le lien vers la référence actuelle aux notes (%s)"
+msgstr "impossible de stocker le lien vers la référence actuelle aux notes (%s)"
 
 #: builtin/notes.c:878
 #, 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 fusion automatique des notes a échoué. Corrigez les conflits dans %s et "
-"validez le résultat avec 'git notes merges --commit', ou abandonnez la "
-"fusion avec 'git notes merge --abort'.\n"
+"La fusion automatique des notes a échoué. Corrigez les conflits dans %s et validez le résultat avec 'git notes merges --commit', ou abandonnez la fusion avec "
+"'git notes merge --abort'.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Impossible de résoudre '%s' comme une référence valide."
@@ -18241,14 +17885,13 @@
 
 #: builtin/notes.c:912
 msgid "attempt to remove non-existent note is not an error"
-msgstr ""
-"la tentative de suppression d'une note non existante n'est pas une erreur"
+msgstr "la tentative de suppression d'une note non existante n'est pas une erreur"
 
 #: builtin/notes.c:915
 msgid "read object names from the standard input"
 msgstr "lire les noms d'objet depuis l'entrée standard"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "ne pas supprimer, afficher seulement"
 
@@ -18264,142 +17907,143 @@
 msgid "use notes from <notes-ref>"
 msgstr "utiliser les notes depuis <références-notes>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "sous-commande inconnue : %s"
 
 #: builtin/pack-objects.c:54
-msgid ""
-"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
-msgstr ""
-"git pack-objects --stdout [options...] [< <liste-références> | < <liste-"
-"objets>]"
+msgid "git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
+msgstr "git pack-objects --stdout [options...] [< <liste-références> | < <liste-objets>]"
 
 #: builtin/pack-objects.c:55
-msgid ""
-"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
-msgstr ""
-"git pack-objects [options...] base-name [< <liste-références> | < <liste-"
-"objets>]"
+msgid "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
+msgstr "git pack-objects [options...] base-name [< <liste-références> | < <liste-objets>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in pack %s"
+msgstr "write_reuse_object : impossible de localiser %s, attendu à l'offset %<PRIuMAX> dans le paquet %s"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "mauvais CRC d'objet empaqueté pour %s"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "objet empaqueté corrompu pour %s"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "delta récursif détecté pour l'objet %s"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u objets commandés, %<PRIu32> attendus"
 
-#: builtin/pack-objects.c:1004
-msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
-msgstr ""
-"désactivation de l'écriture en bitmap, les fichiers paquets sont scindés à "
-"cause de pack.packSizeLimit"
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "objet attendu à l'offset %<PRIuMAX> dans le paquet %s"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1015
+msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
+msgstr "désactivation de l'écriture en bitmap, les fichiers paquets sont scindés à cause de pack.packSizeLimit"
+
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Écriture des objets"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "échec du stat de %s"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> objets écrits, %<PRIu32> attendus"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
-msgstr ""
-"désactivation de l'écriture en bitmap car certains objets ne sont pas "
-"compressés"
+msgstr "désactivation de l'écriture en bitmap car certains objets ne sont pas compressés"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "dépassement de décalage de base de delta pour %s"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "décalage de base de delta est hors limite pour %s"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Décompte des objets"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "impossible d'analyser l'entête d'objet de %s"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352 builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "l'objet %s ne peut être lu"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
-msgstr ""
-"objet %s longueur de l'objet inconsistante (%<PRIuMAX> contre %<PRIuMAX>)"
+msgstr "objet %s longueur de l'objet inconsistante (%<PRIuMAX> contre %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "paquet sous-optimal - mémoire insuffisante"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compression par delta en utilisant jusqu'à %d fils d'exécution"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "impossible d'empaqueter les objets joignables depuis l'étiquette %s"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Compression des objets"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "inconsistance dans le compte de delta"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
-msgid ""
-"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
-"hash> <uri>' (got '%s')"
-msgstr ""
-"la valeur de uploadpack.blobpackfileuri doit être de la forme '<empreinte-d-"
-"objet> <empreinte-de-pack> <uri>' ('%s' reçu)"
+msgid "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-hash> <uri>' (got '%s')"
+msgstr "la valeur de uploadpack.blobpackfileuri doit être de la forme '<empreinte-d-objet> <empreinte-de-pack> <uri>' ('%s' reçu)"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
-msgid ""
-"object already configured in another uploadpack.blobpackfileuri (got '%s')"
-msgstr ""
-"l'objet est déjà configuré dans un autre uploadpack.blobpackfileuri ('%s' "
-"reçu)"
+msgid "object already configured in another uploadpack.blobpackfileuri (got '%s')"
+msgstr "l'objet est déjà configuré dans un autre uploadpack.blobpackfileuri ('%s' reçu)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "impossible d'obtenir le type de l'objet %s dans le paquet %s"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "impossible de trouver le paquet '%s'"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18408,7 +18052,7 @@
 "ID d'objet de bord attendu, reçu des données illisibles :\n"
 "%s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18417,251 +18061,263 @@
 "ID d'objet attendu, reçu des données illisibles :\n"
 "%s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "valeur invalide pour --missing"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "impossible d'ouvrir l'index de paquet"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "l'objet libre à %s n'a pas pu être examiné"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "impossible de forcer l'objet libre"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' n'est pas une révision"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "mauvaise révision '%s'"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "impossible d'ajouter les objets récents"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "version d'index non supportée %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "mauvaise version d'index '%s'"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<version>[,<décalage>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
-msgstr ""
-"écrire le fichier d'index du paquet dans le format d'index de version "
-"spécifié"
+msgstr "écrire le fichier d'index du paquet dans le format d'index de version spécifié"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "taille maximum de chaque fichier paquet en sortie"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorer les objets empruntés à un autre magasin d'objets"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "ignorer les objets empaquetés"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "limiter la fenêtre d'empaquetage par objets"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
-msgstr ""
-"limiter la fenêtre d'empaquetage par mémoire en plus de la limite d'objets"
+msgstr "limiter la fenêtre d'empaquetage par mémoire en plus de la limite d'objets"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
-msgstr ""
-"longueur maximum de la chaîne de delta autorisée dans le paquet résultant"
+msgstr "longueur maximum de la chaîne de delta autorisée dans le paquet résultant"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "réutiliser les deltas existants"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "réutiliser les objets existants"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "utiliser les objets OFS_DELTA"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
-msgstr ""
-"utiliser des fils lors de la recherche pour une meilleure correspondance des "
-"deltas"
+msgstr "utiliser des fils lors de la recherche pour une meilleure correspondance des deltas"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "ne pas créer un paquet vide"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "lire les paramètres de révision depuis l'entrée standard"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "limiter les objets à ceux qui ne sont pas encore empaquetés"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "inclure les objets accessibles depuis toute référence"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "inclure les objets référencés par les éléments de reflog"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "inclure les objets référencés par l'index"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "lire les paquets depuis l'entrée standard"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "afficher l'empaquetage sur la sortie standard"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "inclure les objets d'étiquettes qui réfèrent à des objets à empaqueter"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "garder les objets inaccessibles"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "empaqueter les objets inaccessibles détachés"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "dépaqueter les objets inaccessibles plus récents que <heure>"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "utiliser l'algorithme de joignabilité creuse"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "créer des paquets légers"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "créer des paquets permettant des récupérations superficielles"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorer les paquets qui ont un fichier .keep"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "ignorer ce paquet"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "niveau de compression du paquet"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "ne pas cacher les validations par greffes"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
-msgstr ""
-"utiliser un index en bitmap si disponible pour accélerer le décompte des "
-"objets"
+msgstr "utiliser un index en bitmap si disponible pour accélerer le décompte des objets"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "écrire un index en bitmap associé à l'index de paquet"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "écrire un index de bitmap si possible"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "gestion des objets manquants"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "ne pas empaqueter les objets dans les fichiers paquets prometteurs"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "respecter les îlots pendant la compression des deltas"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "protocole"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "exclure tout uploadpack.blobpackfileuri configuré avec ce protocole"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "la profondeur %d de chaîne de delta est trop grande, forcée à %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit est trop grand, forcé à %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
-msgstr ""
-"--max-pack-size ne peut pas être utilisé pour construire un paquet à "
-"transférer"
+msgstr "--max-pack-size ne peut pas être utilisé pour construire un paquet à transférer"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "la taille limite minimale d'un paquet est 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin ne peut pas être utilisé pour construire un paquet indexable"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable et --unpack-unreachable sont incompatibles"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "impossible d'utiliser --filter sans --stdout"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "impossible d'utiliser --filter avec --stdin-packs"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "impossible d'utiliser un liste interne de révisions avec --stdin-packs"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Énumération des objets"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
+msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-reused %<PRIu32>"
+msgstr "Total %<PRIu32> (delta %<PRIu32>), réutilisés %<PRIu32> (delta %<PRIu32>), réutilisés du pack %<PRIu32>"
+
+#: builtin/pack-redundant.c:601
 msgid ""
-"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
-"reused %<PRIu32>"
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>.  Thanks.\n"
 msgstr ""
-"Total %<PRIu32> (delta %<PRIu32>), réutilisés %<PRIu32> (delta %<PRIu32>), "
-"réutilisés du pack %<PRIu32>"
+"La suppression  de 'git pack-redundant' est prévue.\n"
+"Si vous utilisez cette commande, veuillez ajouter\n"
+"une option supplémentaire, '--i-still-use-this',\n"
+"sur la ligne de commande pour nous avertir par\n"
+"un courriel à <git@vger.kernel.org>. Merci.\n"
 
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
@@ -18720,11 +18376,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorporer les modifications en rebasant plutôt qu'en fusionnant"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "autoriser l'avance rapide"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "remiser et réappliquer automatiquement avant et après"
 
@@ -18745,7 +18401,84 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Valeur invalide pour pull.ff : %s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid "There is no candidate for rebasing against among the refs that you just fetched."
+msgstr "Il n'y a pas de candidate sur laquelle rebaser parmi les références que vous venez de récupérer."
+
+#: builtin/pull.c:447
+msgid "There are no candidates for merging among the refs that you just fetched."
+msgstr "Il n'y a pas de candidate avec laquelle fusionner parmi les références que vous venez de récupérer."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Généralement, cela signifie que vous avez indiqué un spécificateur\n"
+"de référence joker qui n'a pas eu de correspondance sur le serveur distant."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Vous avez demandé de tirer depuis le dépôt distant '%s', mais sans indiquer\n"
+"la branche. Comme ce n'est pas le dépôt distant par défaut dans la configuration\n"
+"pour la branche actuelle, vous devez spécifier la branche avec la commande."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Vous n'êtes actuellement sur aucune branche."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Veuillez spécifier sur quelle branche vous souhaiter rebaser."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Veuillez spécifier une branche avec laquelle fusionner."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Référez-vous à git-pull(1) pour de plus amples détails."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478 builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<distant>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<branche>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Pas d'information de suivi distant pour la branche actuelle."
+
+#: builtin/pull.c:480
+msgid "If you wish to set tracking information for this branch you can do so with:"
+msgstr "Si vous souhaitez indiquer l'information de suivi distant pour cette branche, vous pouvez le faire avec :"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Votre information de configuration indique de fusionner avec la référence '%s'\n"
+"du serveur distant, mais cette référence n'a pas été récupérée."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "impossible d'accéder le commit %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "--verify-signatures est ignoré pour un rebasage"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18755,8 +18488,7 @@
 "  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"
@@ -18774,111 +18506,19 @@
 "passer --rebase, --no-rebase ou --ff-only sur la ligne de commande pour\n"
 "remplacer à l'invocation la valeur par défaut configurée.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Il n'y a pas de candidate sur laquelle rebaser parmi les références que vous "
-"venez de récupérer."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Il n'y a pas de candidate avec laquelle fusionner parmi les références que "
-"vous venez de récupérer."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Généralement, cela signifie que vous avez indiqué un spécificateur\n"
-"de référence joker qui n'a pas eu de correspondance sur le serveur distant."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Vous avez demandé de tirer depuis le dépôt distant '%s', mais sans indiquer\n"
-"la branche. Comme ce n'est pas le dépôt distant par défaut dans la "
-"configuration\n"
-"pour la branche actuelle, vous devez spécifier la branche avec la commande."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Vous n'êtes actuellement sur aucune branche."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "Veuillez spécifier sur quelle branche vous souhaiter rebaser."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Veuillez spécifier une branche avec laquelle fusionner."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Référez-vous à git-pull(1) pour de plus amples détails."
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<distant>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<branche>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Pas d'information de suivi distant pour la branche actuelle."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Si vous souhaitez indiquer l'information de suivi distant pour cette "
-"branche, vous pouvez le faire avec :"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Votre information de configuration indique de fusionner avec la référence "
-"'%s'\n"
-"du serveur distant, mais cette référence n'a pas été récupérée."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "impossible d'accéder le commit %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "--verify-signatures est ignoré pour un rebasage"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
-msgstr ""
-"Mise à jour d'une branche non encore créée avec les changements ajoutés dans "
-"l'index."
+msgstr "Mise à jour d'une branche non encore créée avec les changements ajoutés dans l'index."
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "tirer avec un rebasage"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "veuillez les valider ou les remiser."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18889,7 +18529,7 @@
 "avance rapide de votre copie de travail\n"
 "depuis le commit %s."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18906,19 +18546,17 @@
 "$ git reset --hard\n"
 "pour régénérer."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Impossible de fusionner de multiples branches sur une tête vide."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Impossible de rebaser sur de multiples branches."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
-msgstr ""
-"impossible de rebaser avec des modifications de sous-modules enregistrées "
-"localement"
+msgstr "impossible de rebaser avec des modifications de sous-modules enregistrées localement"
 
 #: builtin/push.c:19
 msgid "git push [<options>] [<repository> [<refspec>...]]"
@@ -18938,8 +18576,7 @@
 "To choose either option permanently, see push.default in 'git help config'."
 msgstr ""
 "\n"
-"Pour choisir l'option de manière permanente, voir push.default dans 'git "
-"help config'."
+"Pour choisir l'option de manière permanente, voir push.default dans 'git help config'."
 
 #: builtin/push.c:167
 #, c-format
@@ -18990,16 +18627,14 @@
 "    git push --set-upstream %s %s\n"
 msgstr ""
 "La branche courante %s n'a pas de branche amont.\n"
-"Pour pousser la branche courante et définir la distante comme amont, "
-"utilisez\n"
+"Pour pousser la branche courante et définir la distante comme amont, utilisez\n"
 "\n"
 "    git push --set-upstream %s %s\n"
 
 #: builtin/push.c:202
 #, c-format
 msgid "The current branch %s has multiple upstream branches, refusing to push."
-msgstr ""
-"La branche courante %s a de multiples branches amont, impossible de pousser."
+msgstr "La branche courante %s a de multiples branches amont, impossible de pousser."
 
 #: builtin/push.c:205
 #, c-format
@@ -19013,11 +18648,8 @@
 "me dire quoi pousser pour mettre à jour quelle branche amont."
 
 #: builtin/push.c:260
-msgid ""
-"You didn't specify any refspecs to push, and push.default is \"nothing\"."
-msgstr ""
-"Vous n'avez pas spécifié de spécifications de référence à pousser, et push."
-"default est \"nothing\"."
+msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"."
+msgstr "Vous n'avez pas spécifié de spécifications de référence à pousser, et push.default est \"nothing\"."
 
 #: builtin/push.c:267
 msgid ""
@@ -19026,13 +18658,10 @@
 "'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"Les mises à jour ont été rejetées car la pointe de la branche courante est "
-"derrière\n"
-"son homologue distant. Intégrez les changements distants (par exemple 'git "
-"pull ...')\n"
+"Les mises à jour ont été rejetées car la pointe de la branche courante est derrière\n"
+"son homologue distant. Intégrez les changements distants (par exemple 'git pull ...')\n"
 "avant de pousser à nouveau.\n"
-"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus "
-"d'information."
+"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus d'information."
 
 #: builtin/push.c:273
 msgid ""
@@ -19041,13 +18670,10 @@
 "(e.g. 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"Les mises à jour ont été rejetées car la pointe de la branche courante est "
-"derrière\n"
-"son homologue distant. Extrayez cette branche et intégrez les changements "
-"distants\n"
+"Les mises à jour ont été rejetées car la pointe de la branche courante est derrière\n"
+"son homologue distant. Extrayez cette branche et intégrez les changements distants\n"
 "(par exemple 'git pull ...') avant de pousser à nouveau.\n"
-"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus "
-"d'information."
+"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus d'information."
 
 #: builtin/push.c:279
 msgid ""
@@ -19057,21 +18683,15 @@
 "(e.g., 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"Les mises à jour ont été rejetées car la branche distante contient du "
-"travail que\n"
-"vous n'avez pas en local. Ceci est généralement causé par un autre dépôt "
-"poussé\n"
-"vers la même référence. Vous pourriez intégrer d'abord les changements "
-"distants\n"
+"Les mises à jour ont été rejetées car la branche distante contient du travail que\n"
+"vous n'avez pas en local. Ceci est généralement causé par un autre dépôt poussé\n"
+"vers la même référence. Vous pourriez intégrer d'abord les changements distants\n"
 "(par exemple 'git pull ...') avant de pousser à nouveau.\n"
-"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus "
-"d'information."
+"Voir la 'Note à propos des avances rapides' dans 'git push --help' pour plus d'information."
 
 #: builtin/push.c:286
 msgid "Updates were rejected because the tag already exists in the remote."
-msgstr ""
-"Les mises à jour ont été rejetées car l'étiquette existe déjà dans la "
-"branche distante."
+msgstr "Les mises à jour ont été rejetées car l'étiquette existe déjà dans la branche distante."
 
 #: builtin/push.c:289
 msgid ""
@@ -19079,10 +18699,8 @@
 "or update a remote ref to make it point at a non-commit object,\n"
 "without using the '--force' option.\n"
 msgstr ""
-"Vous ne pouvez pas mettre à jour une référence distante qui pointe sur un "
-"objet qui\n"
-"n'est pas un commit, ou mettre à jour une référence distante pour la faire "
-"pointer\n"
+"Vous ne pouvez pas mettre à jour une référence distante qui pointe sur un objet qui\n"
+"n'est pas un commit, ou mettre à jour une référence distante pour la faire pointer\n"
 "vers un objet qui n'est pas un commit, sans utiliser l'option '--force'.\n"
 
 #: builtin/push.c:294
@@ -19125,8 +18743,7 @@
 
 #: builtin/push.c:558
 msgid "push tags (can't be used with --all or --mirror)"
-msgstr ""
-"pousser les étiquettes (ne peut pas être utilisé avec --all ou --mirror)"
+msgstr "pousser les étiquettes (ne peut pas être utilisé avec --all ou --mirror)"
 
 #: builtin/push.c:561 builtin/send-pack.c:192
 msgid "force updates"
@@ -19152,8 +18769,7 @@
 msgid "use thin pack"
 msgstr "utiliser un empaquetage léger"
 
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
-#: builtin/send-pack.c:187
+#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186 builtin/send-pack.c:187
 msgid "receive pack program"
 msgstr "recevoir le programme d'empaquetage"
 
@@ -19197,8 +18813,7 @@
 #: builtin/push.c:624
 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"
@@ -19207,8 +18822,7 @@
 "    git push <name>\n"
 msgstr ""
 "Pas de destination pour pousser.\n"
-"Spécifiez une URL depuis la ligne de commande ou configurez un dépôt distant "
-"en utilisant\n"
+"Spécifiez une URL depuis la ligne de commande ou configurez un dépôt distant en utilisant\n"
 "\n"
 "    git remote add <nom> <url>\n"
 "\n"
@@ -19238,63 +18852,60 @@
 
 #: builtin/push.c:657
 msgid "push options must not have new line characters"
-msgstr ""
-"les options de poussée ne peuvent pas contenir de caractères de nouvelle "
-"ligne"
-
-#: builtin/range-diff.c:8
-msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
-msgstr ""
-"git range-diff [<options>] <ancienne-base>..<ancien-sommet> <nouvelle-base>.."
-"<nouveau-sommet>"
+msgstr "les options de poussée ne peuvent pas contenir de caractères de nouvelle ligne"
 
 #: builtin/range-diff.c:9
+msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
+msgstr "git range-diff [<options>] <ancienne-base>..<ancien-sommet> <nouvelle-base>..<nouveau-sommet>"
+
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<options>] <ancien-sommet>...<nouveau-sommet>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<options>] <base> <ancien-sommet> <nouveau-sommet>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "Pourcentage par lequel la création est pondérée"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "utiliser des couleurs de diff simples"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "notes"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "passé à 'git log'"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "pas de .. dans la plage : '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "afficher seulement les sorties liées à la première plage"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "afficher seulement les sorties liées à la deuxième plage"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "pas une plage de commit : '%s'"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "un format d'argument unique doit être une plage symétrique"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "plage entre deux commits requise"
 
 #: 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>]])"
+"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>]])"
 msgstr ""
-"git read-tree [(-m [--trivial] [--aggressive] | --reset | --"
-"prefix=<préfixe>) [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-"
-"sparse-checkout] [--index-output=<fichier>] (--empty | <arbre ou apparenté "
-"1> [<arbre ou apparenté 2> [<arbre ou apparenté 3>]])"
+"git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<préfixe>) [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--index-"
+"output=<fichier>] (--empty | <arbre-esque> [<arbre-esque 2> [<arbre-esque 3>]])"
 
 #: builtin/read-tree.c:124
 msgid "write resulting index to <file>"
@@ -19369,225 +18980,216 @@
 msgstr "Vous devez d'abord résoudre votre index courant"
 
 #: builtin/rebase.c:35
-msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
-"[<upstream> [<branch>]]"
-msgstr ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base> | --keep-"
-"base] [<amont> [<branche>]]"
+msgid "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]]"
+msgstr "git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base> | --keep-base] [<amont> [<branche>]]"
 
 #: builtin/rebase.c:37
-msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
-msgstr ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base>] --root "
-"[<branche>]"
+msgid "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
+msgstr "git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base>] --root [<branche>]"
 
 #: builtin/rebase.c:39
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "liste à faire inutilisable : '%s'"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "impossible de créer un fichier temporaire %s"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "impossible de marquer comme interactif"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "impossible de générer la liste à-faire"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "un commit de base doit être fourni avec --upstream ou --onto"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<options>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "conserver les commits qui commencent vides"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "autoriser les validations avec des messages vides"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "rebaser les commits de fusion"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "conserver les points de branchement de cousins originaux"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "déplacer les commits qui commencent par squash!/fixup!"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "signer les commits"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "afficher un diffstat de ce qui a changé en amont"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "continuer le rebasage"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "sauter le commit"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "éditer la liste à-faire"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "afficher le patch courant"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "raccourcir les identifiants de commits dans la liste à-faire"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "étendre les identifiants de commit dans la liste à-faire"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "vérifier la liste à-faire"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "réarranger les lignes fixup/squash"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "insérer les commandes exec dans la liste à-faire"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "sur"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "restreindre la révision"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "écraser-sur"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "écraser sur"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "le commit amont"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "nom du head"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "nom du head"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "stratégie de rebasage"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "options de stratégie"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "options de stratégie"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "switch-to"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "la branche ou le commit à extraire"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "sur-le-nom"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "sur le nom"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "la commande à lancer"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "re-planifier automatiquement tout `exec` qui échoue"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins n'a aucun effet sans --rebase-merges"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s requiert un moteur de fusion"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "impossible d'accéder 'onto' : '%s'"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head invalide : '%s'"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "allow_rerere_autoupdate invalide ignoré : '%s'"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
 "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 ""
 "Résolvez tous les conflits manuellement, marquez-les comme résolus avec\n"
 "\"git add/rm <fichier en conflit>\", puis lancez \"git rebase --continue\".\n"
-"Si vous préférez sauter ce commit, lancez \"git rebase --skip\". Pour "
-"arrêter\n"
+"Si vous préférez sauter ce commit, lancez \"git rebase --skip\". Pour arrêter\n"
 "et revenir à l'état antérieur à la commande, lancez \"git rebase --abort\"."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19606,16 +19208,12 @@
 "\n"
 "Résultat, git ne peut pas les rebaser."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
-msgid ""
-"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
-"\"."
-msgstr ""
-"type vide non connu '%s' ; les valeurs valides sont \"drop\" (abandonner), "
-"\"keep\" (garder) et \"ask\" (demander)."
+msgid "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask\"."
+msgstr "type vide non connu '%s' ; les valeurs valides sont \"drop\" (abandonner), \"keep\" (garder) et \"ask\" (demander)."
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19632,7 +19230,7 @@
 "    git rebase '<branche>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19640,200 +19238,184 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 msgstr ""
-"Si vous souhaitez indiquer l'information de suivi distant pour cette "
-"branche, vous pouvez le faire avec :\n"
+"Si vous souhaitez indiquer l'information de suivi distant pour cette branche, vous pouvez le faire avec :\n"
 "\n"
 "    git branch --set-upstream-to=%s/<branche> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "les commandes exec ne peut pas contenir de retour à la ligne"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "commande exec vide"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "rebaser sur la branche %s au lieu de la branche amont"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
-msgstr ""
-"utiliser la base de fusion de l'amont et la branche comme base actuelle"
+msgstr "utiliser la base de fusion de l'amont et la branche comme base actuelle"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "permettre le lancement du crochet pre-rebase"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "être silencieux. implique --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "ne pas afficher un diffstat de ce qui a changé en amont"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "ajouter une ligne Signed-off-by à chaque message de validation"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "mettre la date de validateur à la date auteur"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "ignorer la date d'auteur et utilise la date actuelle"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "synonyme pour --reset-author-date"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "passé jusqu'à git-apply"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "ignorer des modifications d'espaces"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "picorer tous les commits, même sans modifiant"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "continuer"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "sauter le patch courant et continuer"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "abandonner et extraire la branche d'origine"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "abandonne mais garde HEAD où il est"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "éditer la liste à faire lors d'un rebasage interactif"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "afficher le patch en cours d'application ou de fusion"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "utiliser des stratégies d'application pour rebaser"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "utiliser des stratégies de fusion pour rebaser"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "laisser l'utilisateur éditer la liste des commits à rebaser"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(DÉCONSEILLÉ) essayer de recréer les fusions au lieu de les ignorer"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "comment gérer les commits qui deviennent vides"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "déplace les commits qui commencent par squash!/fixup! sous -i"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "ajouter les lignes exec après chaque commit de la liste éditable"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "autoriser les commits de rebasage avec des messages vides"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "essayer de rebaser les fusions au lieu de les garder"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "utiliser 'merge-base --fork-point' pour raffiner l'amont"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "utiliser la stratégie de fusion indiquée"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "option"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "passer les arguments jusqu'à la stratégie de fusion"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "rebaser tous les objets inatteignables depuis les racines"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
-msgstr ""
-"appliquer toutes les modifications, même celles déjà présentes en amont"
+msgstr "appliquer toutes les modifications, même celles déjà présentes en amont"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"les support de rebase.useBuiltin a été supprimé !\n"
-"Voir son entrée dans 'git help config' pour plus de détails."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Il semble que 'git-am' soit en cours. Impossible de rebaser."
 
-#: builtin/rebase.c:1487
-msgid ""
-"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
-msgstr ""
-"git rebase --preserve-merges est déconseillé. Utilisez --rebase-merges à la "
-"place."
+#: builtin/rebase.c:1483
+msgid "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
+msgstr "git rebase --preserve-merges est déconseillé. Utilisez --rebase-merges à la place."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "impossible de combiner '--keep-base' avec '--onto'"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "impossible de combiner '--keep-base' avec '--root'"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "impossible de combiner '--root' avec '--fork-point'"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "Pas de rebasage en cours ?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
-msgstr ""
-"L'action --edit-todo peut seulement être utilisée lors d'un rebasage "
-"interactif."
+msgstr "L'action --edit-todo peut seulement être utilisée lors d'un rebasage interactif."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Impossible de lire HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19841,16 +19423,16 @@
 "Vous devez éditer tous les conflits de fusion et\n"
 "les marquer comme résolus avec git add"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
-msgstr "Impossible de supprimer les changements de l'arbre de travail"
+msgstr "impossible de supprimer les changements de l'arbre de travail"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
-msgstr "Impossible de revenir à %s"
+msgstr "impossible de revenir à %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19868,140 +19450,132 @@
 "\t%s\n"
 "Sinon, essayez\n"
 "\t%s\n"
-"puis relancez-moi à nouveau.  Je m'arrête au cas où vous auriez quelque "
-"chose\n"
+"puis relancez-moi à nouveau.  Je m'arrête au cas où vous auriez quelque chose\n"
 "d'important ici.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "l'option `C' attend un valeur numérique"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
-msgstr "mode inconnu : %s"
+msgstr "Mode inconnu : %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requiert --merge ou --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
-msgstr ""
-"impossible de combiner les options d'application avec les options de fusion"
+msgstr "impossible de combiner les options d'application avec les options de fusion"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
-msgstr "backend de rebasage inconnu : %s"
+msgstr "Backend de rebasage inconnu : %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec requiert --exec ou --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "impossible de combiner '--preserve-merges' avec '--rebase-merges'"
 
-#: builtin/rebase.c:1830
-msgid ""
-"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
-msgstr ""
-"erreur : impossible de combiner '--preserve-merges' avec '--reschedule-"
-"failed-exec'"
+#: builtin/rebase.c:1826
+msgid "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
+msgstr "erreur : impossible de combiner '--preserve-merges' avec '--reschedule-failed-exec'"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "amont invalide '%s'"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "Impossible de créer un nouveau commit racine"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': exactement une base de fusion nécessaire avec une branche"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': exactement une base de fusion nécessaire"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
-msgstr "ne pointe pas sur une validation valide : '%s'"
+msgstr "Ne pointe pas sur une validation valide : '%s'"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "fatal : pas de branche ou commit '%s'"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40 builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "Référence inexistante : %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "Impossible de résoudre le commit HEAD vers un révision"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Veuillez les valider ou les remiser."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
-msgstr "Impossible de basculer vers %s"
+msgstr "impossible de basculer vers %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD est à jour."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La branche courante %s est à jour.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD est à jour, rebasage forcé."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "La branche courante %s est à jour, rebasage forcé.\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Le crochet pre-rebase a refusé de rebaser."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Changements vers %s :\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Changements de %s sur %s :\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
-msgstr ""
-"Rembobinage préalable de head pour pouvoir rejouer votre travail par-"
-"dessus...\n"
+msgstr "Rembobinage préalable de head pour pouvoir rejouer votre travail par-dessus...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "Impossible de détacher HEAD"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avance rapide de %s sur %s.\n"
@@ -20060,31 +19634,22 @@
 "\n"
 "Pour éliminer ce message, réglez-le à 'refuse'."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "quiet"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Vous devez spécifier un répertoire."
 
 #: builtin/reflog.c:17
-msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+msgid "git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <refs>..."
 msgstr ""
-"git reflog expire [--expire=<date>] [--expire-unreachable=<date>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<réferences>..."
+"git reflog expire [--expire=<date>] [--expire-unreachable=<date>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <réferences>..."
 
 #: builtin/reflog.c:22
-msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
-msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<références>..."
+msgid "git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <refs>..."
+msgstr "git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <références>..."
 
 #: builtin/reflog.c:25
 msgid "git reflog exists <ref>"
@@ -20095,36 +19660,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "'%s' n'est pas un horodatage valide"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Marquage des objets inaccessibles..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s ne pointe nulle part !"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "pas de journal de références à supprimer spécifié"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "'%s' n'est pas un journal de références"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "pas de journal de références pour '%s'"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "format de référence invalide : %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -20133,12 +19698,8 @@
 msgstr "git remote [-v | --verbose]"
 
 #: builtin/remote.c:18
-msgid ""
-"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
-"mirror=<fetch|push>] <name> <url>"
-msgstr ""
-"git remote add [-t <branche>] [-m <master>] [-f] [--tags | --no-tags] [--"
-"mirror=<fetch|push>] <nom> <url>"
+msgid "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>"
+msgstr "git remote add [-t <branche>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <nom> <url>"
 
 #: builtin/remote.c:19 builtin/remote.c:39
 msgid "git remote rename <old> <new>"
@@ -20161,11 +19722,8 @@
 msgstr "git remote prune [-n | --dry-run] <nom>"
 
 #: builtin/remote.c:24
-msgid ""
-"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
-msgstr ""
-"git remote [-v | --verbose] update [-p | --prune] [(<groupe> | "
-"<distante>)...]"
+msgid "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
+msgstr "git remote [-v | --verbose] update [-p | --prune] [(<groupe> | <distante>)...]"
 
 #: builtin/remote.c:25
 msgid "git remote set-branches [--add] <name> <branch>..."
@@ -20235,8 +19793,7 @@
 
 #: builtin/remote.c:166
 msgid "import all tags and associated objects when fetching"
-msgstr ""
-"importer toutes les étiquettes et les objets associés lors du rapatriement"
+msgstr "importer toutes les étiquettes et les objets associés lors du rapatriement"
 
 #: builtin/remote.c:169
 msgid "or do not fetch any tag at all (--no-tags)"
@@ -20252,8 +19809,7 @@
 
 #: builtin/remote.c:174
 msgid "set up remote as a mirror to push to or fetch from"
-msgstr ""
-"paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis"
+msgstr "paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis"
 
 #: builtin/remote.c:186
 msgid "specifying a master branch makes no sense with --mirror"
@@ -20261,9 +19817,7 @@
 
 #: builtin/remote.c:188
 msgid "specifying branches to track makes sense only with fetch mirrors"
-msgstr ""
-"spécifier les branches à suivre n'a de sens qu'avec des miroirs de "
-"rapatriement"
+msgstr "spécifier les branches à suivre n'a de sens qu'avec des miroirs de rapatriement"
 
 #: builtin/remote.c:195 builtin/remote.c:700
 #, c-format
@@ -20278,9 +19832,7 @@
 #: builtin/remote.c:355
 #, c-format
 msgid "Could not get fetch map for refspec %s"
-msgstr ""
-"Impossible d'obtenir une correspondance distante pour la spécification de "
-"référence %s"
+msgstr "Impossible d'obtenir une correspondance distante pour la spécification de référence %s"
 
 #: builtin/remote.c:454 builtin/remote.c:462
 msgid "(matching)"
@@ -20306,7 +19858,7 @@
 "\t%s%d\n"
 "nomme à présent le distant inexistant '%s'"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Pas de serveur remote : '%s'"
@@ -20348,8 +19900,7 @@
 "Note : Une branche en dehors de refs/remotes/ n'a pas été supprimée ;\n"
 "pour la supprimer, utilisez :"
 msgstr[1] ""
-"Note : Plusieurs branches en dehors de refs/remotes/ n'ont pas été "
-"supprimées ;\n"
+"Note : Plusieurs branches en dehors de refs/remotes/ n'ont pas été supprimées ;\n"
 "pour les supprimer, utilisez :"
 
 #: builtin/remote.c:896
@@ -20491,11 +20042,8 @@
 
 #: builtin/remote.c:1265
 #, c-format
-msgid ""
-"  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
-msgstr ""
-"  Branche HEAD (la HEAD distante est ambiguë, peut être l'une des "
-"suivantes) :\n"
+msgid "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
+msgstr "  Branche HEAD (la HEAD distante est ambiguë, peut être l'une des suivantes) :\n"
 
 #: builtin/remote.c:1277
 #, c-format
@@ -20539,9 +20087,7 @@
 
 #: builtin/remote.c:1343
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
-msgstr ""
-"Il y a de multiples branches HEAD distantes. Veuillez en choisir une "
-"explicitement avec :"
+msgstr "Il y a de multiples branches HEAD distantes. Veuillez en choisir une explicitement avec :"
 
 #: builtin/remote.c:1353
 #, c-format
@@ -20648,135 +20194,152 @@
 msgid "Will not delete all non-push URLs"
 msgstr "Pas de suppression de toutes les URLs non-push"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<options>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
-"Les repaquetages incrémentaux sont incompatibles avec les index bitmap. "
-"Utilisez\n"
+"Les repaquetages incrémentaux sont incompatibles avec les index bitmap. Utilisez\n"
 "--no-write-bitmap-index ou désactivez le paramètre pack.writebitmaps."
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
-msgstr ""
-"ne pas démarrer pack-objects pour ré-empaqueter les objects de prometteur"
+msgstr "ne pas démarrer pack-objects pour ré-empaqueter les objects de prometteur"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
-msgstr ""
-"repack : attente de lignes d'Id d'objets en hexa complet seulement depuis "
-"les objects de paquet."
+msgstr "repack : attente de lignes d'Id d'objets en hexa complet seulement depuis les objects de paquet."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
-msgstr ""
-"impossible de terminer pack-objects  pour ré-empaqueter les objets de "
-"prometteur"
+msgstr "impossible de terminer pack-objects  pour ré-empaqueter les objets de prometteur"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "impossible d'ouvrir l'index pour %s"
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr "le paquet %s est trop gros pour être pris en compte dans un progression géométrique"
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "le paquet %s est trop gros à enrouler"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "empaqueter tout dans un seul paquet"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "identique à -a et transformer les objets inaccessibles en suspens"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "supprimer les paquets redondants et lancer git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passer --no-reuse-delta à git-pack-objects"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passer --no-reuse-object à git-pack-objects"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "ne pas lancer git update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "passer --local à git-pack-objects"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "écrire un index en bitmap"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passer --delta-islands à git-pack-objects"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "date approximative"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "avec -A, ne pas suspendre les objets plus vieux que celui-ci"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "avec -a, repaquétiser les objets inaccessibles"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "taille de la fenêtre utilisée pour la compression des deltas"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "octets"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
-msgstr ""
-"idem ci-dessus, mais limiter la taille mémoire au lieu du nombre d'éléments"
+msgstr "idem ci-dessus, mais limiter la taille mémoire au lieu du nombre d'éléments"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "limite la profondeur maximale des deltas"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "limite le nombre maximal de fils"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "taille maximum de chaque fichier paquet"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "réempaqueter les objets dans des paquets marqués avec .keep"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "ne pas rempaqueter ce paquet"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "trouver une progression géométrique avec un facteur <N>"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "impossible de supprimer les paquets dans un dépôt d'objets précieux"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable et -A sont incompatibles"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+#| msgid "--long is incompatible with --abbrev=0"
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric est incompatible avec -A, -a"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Rien de neuf à empaqueter."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "fichier nécessaire manquant : %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "impossible de délier : '%s'"
@@ -20884,8 +20447,7 @@
 msgid "unable to write object to database"
 msgstr "impossible d'écrire l'objet dans la base de données"
 
-#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:424
-#: builtin/replace.c:454
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:424 builtin/replace.c:454
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "nom d'objet invalide : '%s'"
@@ -20921,12 +20483,8 @@
 
 #: builtin/replace.c:430
 #, c-format
-msgid ""
-"original commit '%s' contains mergetag '%s' that is discarded; use --edit "
-"instead of --graft"
-msgstr ""
-"le commit original '%s' contient l'étiquette de fusion '%s' qui a disparu ; "
-"utilisez --edit au lieu de --graft"
+msgid "original commit '%s' contains mergetag '%s' that is discarded; use --edit instead of --graft"
+msgstr "le commit original '%s' contient l'étiquette de fusion '%s' qui a disparu ; utilisez --edit au lieu de --graft"
 
 #: builtin/replace.c:469
 #, c-format
@@ -20940,7 +20498,7 @@
 #: builtin/replace.c:480
 #, c-format
 msgid "could not write replacement commit for: '%s'"
-msgstr "Impossible d'écrire le commit de remplacement pour '%s'"
+msgstr "impossible d'écrire le commit de remplacement pour '%s'"
 
 #: builtin/replace.c:488
 #, c-format
@@ -20975,7 +20533,7 @@
 
 #: builtin/replace.c:551
 msgid "change a commit's parents"
-msgstr "Modifier les parents d'un commit"
+msgstr "modifier les parents d'un commit"
 
 #: builtin/replace.c:552
 msgid "convert existing graft file"
@@ -21031,8 +20589,7 @@
 
 #: builtin/rerere.c:13
 msgid "git rerere [clear | forget <path>... | status | remaining | diff | gc]"
-msgstr ""
-"git rerere [clear | forget <chemin>... | status | remaining | diff | gc]"
+msgstr "git rerere [clear | forget <chemin>... | status | remaining | diff | gc]"
 
 #: builtin/rerere.c:60
 msgid "register clean resolutions in index"
@@ -21048,21 +20605,16 @@
 msgstr "échec de la génération de diff pour '%s'"
 
 #: builtin/reset.c:32
-msgid ""
-"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
-msgstr ""
-"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
+msgid "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
+msgstr "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
 
 #: builtin/reset.c:33
 msgid "git reset [-q] [<tree-ish>] [--] <pathspec>..."
-msgstr ""
-"git reset [-q] [<arbre ou apparenté>] [--] <spécificateur-de-chemin>..."
+msgstr "git reset [-q] [<arbre ou apparenté>] [--] <spécificateur-de-chemin>..."
 
 #: builtin/reset.c:34
-msgid ""
-"git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"
-msgstr ""
-"git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<arbre-esque>]"
+msgid "git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"
+msgstr "git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<arbre-esque>]"
 
 #: builtin/reset.c:35
 msgid "git reset --patch [<tree-ish>] [--] [<pathspec>...]"
@@ -21111,8 +20663,7 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Impossible de faire un \"reset %s\" au milieu d'une fusion."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663 builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "être silencieux, afficher seulement les erreurs"
 
@@ -21134,9 +20685,7 @@
 
 #: builtin/reset.c:310
 msgid "record only the fact that removed paths will be added later"
-msgstr ""
-"enregistrer seulement le fait que les chemins effacés seront ajoutés plus "
-"tard"
+msgstr "enregistrer seulement le fait que les chemins effacés seront ajoutés plus tard"
 
 #: builtin/reset.c:344
 #, c-format
@@ -21154,9 +20703,7 @@
 
 #: builtin/reset.c:371
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
-msgstr ""
-"--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' à la "
-"place."
+msgstr "--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' à la place."
 
 #: builtin/reset.c:373
 #, c-format
@@ -21185,10 +20732,8 @@
 "to make this the default.\n"
 msgstr ""
 "\n"
-"Les modifications non-indexées ont pris %.2f secondes à énumérer après "
-"reset.\n"
-"Vous pouvez utiliser '--quiet' pour éviter ce message. Réglez le paramètre "
-"de\n"
+"Les modifications non-indexées ont pris %.2f secondes à énumérer après reset.\n"
+"Vous pouvez utiliser '--quiet' pour éviter ce message. Réglez le paramètre de\n"
 "config reset.quiet à true pour avoir ce comportement en permanence.\n"
 
 #: builtin/reset.c:434
@@ -21200,19 +20745,19 @@
 msgid "Could not write new index file."
 msgstr "Impossible d'écrire le nouveau fichier d'index."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "impossible de combiner --exclude-promisor-objects et --missing"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "le filtrage d'objet exige --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list ne supporte l'affichage des notes"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "le comptage marqué est incompatible avec --objects"
 
@@ -21244,8 +20789,7 @@
 "   ou : git rev-parse --sq-quote [<argument>...]\n"
 "   ou : git rev-parse [options] [<argument>...]\n"
 "\n"
-"Lancez \"git rev-parse --parseopt -h\" pour plus d'information sur "
-"l'utilisation principale."
+"Lancez \"git rev-parse --parseopt -h\" pour plus d'information sur l'utilisation principale."
 
 #: builtin/revert.c:24
 msgid "git revert [<options>] <commit-ish>..."
@@ -21325,19 +20869,19 @@
 msgid "keep redundant, empty commits"
 msgstr "garder les validations redondantes, vides"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "revert a échoué"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "le picorage a échoué"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<options>] [--] <fichier>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -21351,7 +20895,7 @@
 "les fichiers suivants ont du contenu indexé différent\n"
 "du fichier et de HEAD :"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -21359,13 +20903,13 @@
 "\n"
 "(utilisez -f pour forcer la suppression)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "le fichier suivant a des changements indexés :"
 msgstr[1] "les fichiers suivants ont des changements indexés :"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -21373,65 +20917,58 @@
 "\n"
 "(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "le fichier suivant a des modifications locales :"
 msgstr[1] "les fichiers suivants ont des modifications locales :"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "ne pas afficher les fichiers supprimés"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "supprimer seulement de l'index"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "outrepasser la vérification des fichiers à jour"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "autoriser la suppression récursive"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "sortir avec un état zéro même si rien ne correspondait"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
-msgstr ""
-"Aucun spécificateur de chemin fourni. Quel fichier doit être supprimé ?"
+msgstr "Aucun spécificateur de chemin fourni. Quel fichier doit être supprimé ?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
-msgstr ""
-"veuillez indexer vos modifications de .gitmodules ou les remiser pour "
-"continuer"
+msgstr "veuillez indexer vos modifications de .gitmodules ou les remiser pour continuer"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "pas de suppression récursive de '%s' sans -r"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm : impossible de supprimer %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"
+"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."
 msgstr ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<hôte>:]<répertoire> "
+"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] [<hôte>:]<répertoire> "
 "[<référence>...]\n"
-"  --all et la spécification explicite de <référence> sont mutuellement "
-"exclusifs."
+"  --all et la spécification explicite de <référence> sont mutuellement exclusifs."
 
 #: builtin/send-pack.c:188
 msgid "remote name"
@@ -21457,55 +20994,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<options>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
-msgstr ""
-"l'utilisation de plusieurs options --group avec stdin n'est pas supportée"
+msgstr "l'utilisation de plusieurs options --group avec stdin n'est pas supportée"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "l'utilisation de --group=trailer avec stdin n'est pas supportée"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "type de groupe inconnu : %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Grouper par validateur plutôt que par auteur"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "grouper par validateur plutôt que par auteur"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "trier la sortie sur le nombre de validations par auteur"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr ""
-"Supprimer les descriptions de validation, fournit seulement le nombre de "
-"validations"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "supprimer les descriptions de validation, fournit seulement le nombre de validations"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Afficher l'adresse courriel de chaque auteur"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "afficher l'adresse courriel de chaque auteur"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr "Couper les lignes"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "couper les lignes"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "champ"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Grouper par champ"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "grouper par champ"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "trop d'arguments fournis hors d'un dépôt"
 
@@ -21583,8 +21117,7 @@
 
 #: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
-msgstr ""
-"afficher seulement les validations qui ne sont pas sur la première branche"
+msgstr "afficher seulement les validations qui ne sont pas sur la première branche"
 
 #: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
@@ -21600,15 +21133,11 @@
 
 #: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
-msgstr ""
-"afficher les <n> plus récents éléments de ref-log en commençant à la base"
+msgstr "afficher les <n> plus récents éléments de ref-log en commençant à la base"
 
 #: builtin/show-branch.c:711
-msgid ""
-"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
-msgstr ""
-"--reflog est incompatible avec --all, --remotes, --independant et --merge-"
-"base"
+msgid "--reflog is incompatible with --all, --remotes, --independent or --merge-base"
+msgstr "--reflog est incompatible avec --all, --remotes, --independant et --merge-base"
 
 #: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
@@ -21656,12 +21185,8 @@
 msgstr "Algorithme d'empreinte inconnu"
 
 #: builtin/show-ref.c:12
-msgid ""
-"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] [--] [<motif>...]"
+msgid "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] [--] [<motif>...]"
 
 #: builtin/show-ref.c:13
 msgid "git show-ref --exclude-existing[=<pattern>]"
@@ -21677,9 +21202,7 @@
 
 #: builtin/show-ref.c:164
 msgid "stricter reference checking, requires exact ref path"
-msgstr ""
-"vérification de référence plus stricte, nécessite un chemin de référence "
-"exact"
+msgstr "vérification de référence plus stricte, nécessite un chemin de référence exact"
 
 #: builtin/show-ref.c:167 builtin/show-ref.c:169
 msgid "show the HEAD reference, even if it would be filtered out"
@@ -21695,115 +21218,117 @@
 
 #: builtin/show-ref.c:177
 msgid "do not print results to stdout (useful with --verify)"
-msgstr ""
-"ne pas afficher les résultats sur la sortie standard (pratique avec --verify)"
+msgstr "ne pas afficher les résultats sur la sortie standard (pratique avec --verify)"
 
 #: builtin/show-ref.c:179
 msgid "show refs from stdin that aren't in local repository"
-msgstr ""
-"afficher les références de l'entrée standard qui ne sont pas dans le dépôt "
-"local"
+msgstr "afficher les références de l'entrée standard qui ne sont pas dans le dépôt local"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
-msgstr ""
-"cet arbre de travail n'est pas partiel (le fichier sparse-checkout pourrait "
-"ne pas exister)"
+msgstr "cet arbre de travail n'est pas clairsemé (le fichier sparse-checkout pourrait ne pas exister)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
-msgstr ""
-"échec de la création du répertoire pour le fichier d'extraction partielle"
+msgstr "échec de la création du répertoire pour le fichier d'extraction clairsemée"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr ""
-"impossible de mettre à jour le format de dépôt pour activer worktreeConfig"
+msgstr "impossible de mettre à jour le format de dépôt pour activer worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "échec de paramétrage extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+#| msgid "git sparse-checkout init [--cone]"
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
-msgstr "initialiser l'extraction partielle en mode cone"
+msgstr "initialiser l'extraction clairsemée en mode cone"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "bascule l'utilisation d'index clairsemé"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "impossible de modifier la configuration d'index clairsemé"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "échec à l'ouverture de '%s'"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "impossible de normaliser le chemin '%s'"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <motifs>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
-msgstr "Impossible de décoter la chaîne en style C '%s'"
+msgstr "impossible de décoter la chaîne en style C '%s'"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
-msgstr "impossible de charger les motifs de l'extraction partielle existants"
+msgstr "impossible de charger les motifs de l'extraction clairsemée existants"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "lire les motifs depuis l'entrée standard"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "erreur lors du rafraîchissement du répertoire de travail"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<options>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<options>] [<remise>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<remise>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<remise>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <nom-de-branche> [<remise>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21815,7 +21340,7 @@
 "          [--pathspec-from-file=<fichier> [--pathspec-file-nul]]\n"
 "          [--] [<spécificateur-de-chemin>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21823,19 +21348,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<remise>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<remise>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <message>] [-q|--quiet] <remise>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21845,175 +21370,200 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
 "          [--] [<spécificateur-de-chemin>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "'%s' n'est pas une validation de type remisage"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Trop de révisions spécifiées : %s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "Aucune entrée de remisage trouvée."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s n'est pas une référence valide"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr "git stash clear avec des paramètres n'est pas implémenté"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
+msgstr "git stash clear avec des arguments n'est pas implémenté"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"AVERTISSEMENT : un fichier non-suivi en travers d'un fichier suivi ! Renommage\n"
+"            %s -> %s\n"
+"         pour faire de la place.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "impossible d'appliquer un remisage en cours de fusion"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "impossible de générer %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "conflits dans l'index. Essayez sans --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "impossible de sauvegarder l'arbre d'index"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "impossible de restaurer les fichiers non-suivis depuis le remisage"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Fusion de %s avec %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "L'index n'a pas été sorti de remise."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "tentative de recréer l'index"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s supprimé (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s : Impossible de supprimer l'élément de stash"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' n'est pas une référence de remisage"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
-msgstr ""
-"L'entrée de remisage est conservée au cas où vous en auriez encore besoin."
+msgstr "L'entrée de remisage est conservée au cas où vous en auriez encore besoin."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Aucune branche spécifiée"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "échec de l'analyse de l'arbre"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "échec du dépaquetage des arbres"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "inclure les fichiers non suivis dans le remisage"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "ne montrer que les fichiers non suivis dans le remisage"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Impossible de mettre à jour %s avec %s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "message pour le remisage"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" exige un argument <commit>"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Aucun changement sélectionné"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Vous n'avez pas encore la validation initiale"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "Impossible de sauver l'état courant de l'index"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "Impossible de sauver les fichiers non-suivis"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "Impossible de sauver l'état courant de la copie de travail"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "Impossible d'enregistrer l'état de la copie de travail"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
-msgstr ""
-"Impossible d'utiliser --patch et --include-untracked ou --all en même temps"
+msgstr "Impossible d'utiliser --patch et --include-untracked ou --all en même temps"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "Vous avez sûrement oublié 'git add' ?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "Pas de modifications locales à sauver"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "Impossible d'initialiser le remisage"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "Impossible de sauver l'état courant"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Arbre de travail et état de l'index sauvegardés dans %s"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "Impossible de supprimer les changements de la copie de travail"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "conserver l'index"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "remiser une mode rustine"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "mode silencieux"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "inclure les fichiers non suivis dans la remise"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "inclure les fichiers ignorés"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -22031,15 +21581,13 @@
 
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
-msgstr ""
-"sauter et supprimer toutes les lignes commençant par le caractère de "
-"commentaire"
+msgstr "sauter et supprimer toutes les lignes commençant par le caractère de commentaire"
 
 #: builtin/stripspace.c:40
 msgid "prepend comment character and space to each line"
 msgstr "ajouter devant chaque ligne le caractère de commentaire et un espace"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Nom de référence complet attendu, %s obtenu"
@@ -22053,7 +21601,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "impossible de supprimer un composant de l'URL '%s'"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "ancre alternative pour les chemins relatifs"
 
@@ -22061,18 +21609,17 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<chemin>] [<chemin>...]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630 builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "URL non trouvée pour le chemin de sous-module '%s' dans .gitmodules"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Entrée dans '%s'\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22081,258 +21628,220 @@
 "run_command a retourné un statut non-nul pour %s\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, 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 ""
-"run_command a retourné un statut non-nul pendant la récursion dans les sous-"
-"modules inclus de %s\n"
+"run_command a retourné un statut non-nul pendant la récursion dans les sous-modules inclus de %s\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr ""
-"Supprimer la sortie lors de l'entrée dans chaque commande de sous-module"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "supprimer la sortie lors de l'entrée dans chaque commande de sous-module"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Parcourir récursivement les sous-modules"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889 builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "parcourir récursivement les sous-modules"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <commande>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
-msgid ""
-"could not look up configuration '%s'. Assuming this repository is its own "
-"authoritative upstream."
-msgstr ""
-"impossible de trouver la configuration '%s'. Ce dépôt est considéré comme "
-"son propre amont d'autorité."
+msgid "could not look up configuration '%s'. Assuming this repository is its own authoritative upstream."
+msgstr "impossible de trouver la configuration '%s'. Ce dépôt est considéré comme son propre amont d'autorité."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Échec d'enregistrement de l'URL pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Sous-module '%s' (%s) enregistré pour le chemin '%s'\n"
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
-msgstr ""
-"attention : nous vous suggérons de spécifier une commande de mode de mise à "
-"jour pour le sous-module '%s'\n"
+msgstr "attention : nous vous suggérons de spécifier une commande de mode de mise à jour pour le sous-module '%s'\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
-msgstr ""
-"Échec d'enregistrement du mode de mise à jour pour le chemin de sous-module "
-"'%s'"
+msgstr "Échec d'enregistrement du mode de mise à jour pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Supprimer la sortie lors de l'initialisation d'un sous-module"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "supprimer la sortie lors de l'initialisation d'un sous-module"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<options>] [<chemin>]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
-msgstr ""
-"Pas de mise en correspondance du sous-module trouvé dans .gitmodules pour le "
-"chemin '%s'"
+msgstr "pas de mise en correspondance du sous-module trouvé dans .gitmodules pour le chemin '%s'"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "impossible de résoudre HEAD dans le sous-module '%s'"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "récursion impossible dans le sous-module '%s'"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
 msgstr "supprimer la sortie d'état du sous-module"
 
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
-msgstr ""
-"Utiliser le commit stocké dans l'index au lieu de celui stocké dans la HEAD "
-"du sous-module"
-
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "parcourir récursivement les sous-modules"
+msgid "use commit stored in the index instead of the one stored in the submodule HEAD"
+msgstr "utiliser le commit stocké dans l'index au lieu de celui stocké dans la HEAD du sous-module"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<chemin>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper <nom> <chemin>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
-msgstr "Impossible de calculer l'empreinte de l'objet depuis '%s'"
+msgstr "impossible de calculer l'empreinte de l'objet depuis '%s'"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "mode %o inattendu\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
-msgstr ""
-"utiliser le commit stocké dans l'index au lieu de la HEAD du sous-module"
+msgstr "utiliser le commit stocké dans l'index au lieu de la HEAD du sous-module"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
-msgstr ""
-"pour comparer le commit dans l'index au lieu de celui dans la HEAD du sous-"
-"module"
+msgstr "pour comparer le commit dans l'index au lieu de celui dans la HEAD du sous-module"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "sauter les sous-modules avec la valeur 'ignore_config' à 'all'"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "limiter la taille du résumé"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<options>] [<commit>] [--] [<chemin>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
-msgstr "Impossible de récupérer une révision pour HEAD"
+msgstr "impossible de récupérer une révision pour HEAD"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "--cached et --files sont mutuellement exclusifs"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Synchronisation de l'URL sous-module pour '%s'\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "échec d'enregistrement de l'URL pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "échec d'obtention du dépôt distant par défaut pour le sous-module '%s'"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "échec de mise à jour du dépôt distant pour le sous-module '%s'"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr ""
-"Supprimer la sortie lors de la synchronisation de l'URL d'un sous-module"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "supprimer la sortie lors de la synchronisation de l'URL d'un sous-module"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<chemin>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
-msgid ""
-"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
-"really want to remove it including all of its history)"
+msgid "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you really want to remove it including all of its history)"
 msgstr ""
-"L'arbre de travail du sous-module '%s' contient un répertoire .git (utilisez "
-"'rm -rf' si vous voulez vraiment le supprimer en incluant tout son "
-"historique)"
+"L'arbre de travail du sous-module '%s' contient un répertoire .git (utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son historique)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
-msgid ""
-"Submodule work tree '%s' contains local modifications; use '-f' to discard "
-"them"
-msgstr ""
-"L'arbre de travail du sous-module '%s' contient des modifications locales ; "
-"utilisez '-f' pour les annuler"
+msgid "Submodule work tree '%s' contains local modifications; use '-f' to discard them"
+msgstr "L'arbre de travail du sous-module '%s' contient des modifications locales ; utilisez '-f' pour les annuler"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Répertoire '%s' nettoyé\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Impossible de supprimer l'arbre de travail du sous-module '%s'\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "impossible de créer le répertoire vide du sous-module %s"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Sous-module '%s' (%s) non enregistré pour le chemin '%s'\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr ""
-"Éliminer les arbres de travail des sous-modules même s'ils contiennent des "
-"modifications locales"
-
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Désenregistrer tous les sous-modules"
+msgid "remove submodule working trees even if they contain local changes"
+msgstr "éliminer les arbres de travail des sous-modules même s'ils contiennent des modifications locales"
 
-#: builtin/submodule--helper.c:1630
-msgid ""
-"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
-msgstr ""
-"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<chemin>...]]"
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "désenregistrer tous les sous-modules"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1631
+msgid "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
+msgstr "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<chemin>...]]"
+
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
-msgstr ""
-"Utilisez '--all' si vous voulez vraiment réinitialiser tous les sous-modules"
+msgstr "Utilisez '--all' si vous voulez vraiment réinitialiser tous les sous-modules"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -22344,243 +21853,228 @@
 "submodule.alternateErrorStrategy à 'info', ou de manière équivalente,\n"
 "clonez avec '--reference-if-able' au lieu de '--reference'."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "le sous-module '%s' ne peut pas ajouter d'alternative : %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
-msgstr ""
-"La valeur '%s' pour submodule.alternateErrorStrategy n'est pas reconnue"
+msgstr "La valeur '%s' pour submodule.alternateErrorStrategy n'est pas reconnue"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "La valeur '%s' pour submodule.alternateLocation n'est pas reconnue"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "emplacement où le sous-module sera cloné"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "nom du nouveau sous-module"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "URL depuis laquelle cloner le sous-module"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "profondeur de l'historique des clones superficiels"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "forcer l'affichage de la progression du clonage"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "interdire de cloner dans un répertoire non-vide"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
-"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference <repository>] [--name <name>] [--depth <depth>] [--single-branch] --url <url> --path <path>"
 msgstr ""
-"git submodule--helper clone [--prefix=<chemin>] [--quiet] [--reference "
-"<dépôt>] [--name <nom>] [--depth <profondeur>] [--single-branch] --url <url> "
-"--path <chemin>"
+"git submodule--helper clone [--prefix=<chemin>] [--quiet] [--reference <dépôt>] [--name <nom>] [--depth <profondeur>] [--single-branch] --url <url> --path "
+"<chemin>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
-msgstr ""
-"refus de créer/utiliser '%s' dans un répertoire git d'un autre sous-module"
+msgstr "refus de créer/utiliser '%s' dans un répertoire git d'un autre sous-module"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
-msgstr "Le clonage de '%s' dans le chemin de sous-module '%s' a échoué"
+msgstr "le clonage de '%s' dans le chemin de sous-module '%s' a échoué"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "le répertoire n'est pas vide : '%s'"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "impossible de créer le répertoire de sous-module pour '%s'"
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
-msgstr "mode de mise à jour '%s' invalide pour le chemin de sous-module '%s'"
+msgstr "Mode de mise à jour '%s' invalide pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
-msgstr ""
-"Mode de mise à jour '%s'invalide configuré pour le chemin de sous-module '%s'"
+msgstr "Mode de mise à jour '%s'invalide configuré pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Le chemin de sous-module '%s' n'est pas initialisé"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Vous voudriez sûrement utiliser 'update --init' ?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Sous-module non fusionné %s non traité"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Sous-module '%s' non traité"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Impossible de cloner '%s'. Réessai prévu"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Impossible de cloner '%s' pour la seconde fois, abandon"
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "chemin dans la copie de travail"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
-msgstr ""
-"chemin dans la copie de travail, traversant les frontières de sous-modules"
+msgstr "chemin dans la copie de travail, traversant les frontières de sous-modules"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "valeurs possibles : rebase, merge, checkout ou none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Créer un clone superficiel tronqué au nombre de révisions spécifié"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "créer un clone superficiel tronqué au nombre de révisions spécifié"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "jobs parallèles"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "spécifie si le clonage initial doit être aussi superficiel"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "ne pas afficher la progression du clonage"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<chemin>] [<chemin>...]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "valeur invalide pour la mise à jour du paramètre"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
-msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
-msgstr ""
-"la branche du sous-module %s est configurée pour hériter de la branche du "
-"superprojet, mais le superprojet n'est sur aucune branche"
+msgid "Submodule (%s) branch configured to inherit branch from superproject, but the superproject is not on any branch"
+msgstr "La branche du sous-module %s est configurée pour hériter de la branche du superprojet, mais le superprojet n'est sur aucune branche"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "impossible de trouver une poignée de dépôt pour le sous-module '%s'"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "parcourir récursivement les sous-modules"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper embed-git-dir [<options>] [<chemin>...]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "vérifier si écrire dans le fichier .gitmodules est sur"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "désactiver la configuration dans le fichier .gitmodules"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config name [<valeur>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <nom>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
-msgstr ""
-"veuillez vous assurer que le fichier .gitmodules est dans l'arbre de travail"
+msgstr "veuillez vous assurer que le fichier .gitmodules est dans l'arbre de travail"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Supprimer la sortie lors du paramétrage de l'url d'un sous-module"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "supprimer la sortie lors du paramétrage de l'url d'un sous-module"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper sync [--quiet] <chemin> <nouvelle-url>"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "régler la branche de suivi par défaut à master"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "régler la branche de suivi par défaut"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <chemin>"
 
-#: builtin/submodule--helper.c:2725
-msgid ""
-"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
-msgstr ""
-"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branche> "
-"<chemin>"
+#: builtin/submodule--helper.c:2726
+msgid "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
+msgstr "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branche> <chemin>"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "--branch ou --default requis"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch et --default sont mutuellement exclusifs"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s ne gère pas --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' n'est pas une sous-commande valide de submodule--helper"
@@ -22593,24 +22087,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <nom>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
-msgstr ""
-"supprimer le message d'erreur pour une référence non symbolique (détachée)"
+msgstr "supprimer le message d'erreur pour une référence non symbolique (détachée)"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "supprimer la référence symbolique"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "raccourcir l'affichage de la référence"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "raison"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "raison de la mise à jour"
 
@@ -22628,31 +22121,27 @@
 
 #: builtin/tag.c:28
 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"
+"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"
 msgstr ""
-"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
-"points-at <objet>]\n"
-"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
-"[<motif>...]"
+"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <objet>]\n"
+"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] [<motif>...]"
 
 #: builtin/tag.c:30
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<format>] <nométiquette>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "étiquette '%s' non trouvée."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Étiquette '%s' supprimée (elle était sur %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22665,30 +22154,24 @@
 "  %s\n"
 "Les lignes commençant par '%c' seront ignorées.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\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"
 "Écrivez un message pour l'étiquette :\n"
 "  %s\n"
-"Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-"
-"même si vous le souhaitez.\n"
+"Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-même si vous le souhaitez.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "impossible de signer l'étiquette"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "impossible d'écrire le fichier d'étiquettes"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22696,151 +22179,144 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 msgstr ""
-"Vous avez créé une étiquette nichée. L'objet pointé par votre nouvelle "
-"étiquette\n"
-"est déjà une étiquette. Si vous vouliez étiqueter l'objet pointé, "
-"utilisez :\n"
+"Vous avez créé une étiquette nichée. L'objet pointé par votre nouvelle étiquette\n"
+"est déjà une étiquette. Si vous vouliez étiqueter l'objet pointé, utilisez :\n"
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "mauvais type d'objet."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "pas de message pour l'étiquette ?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Le message pour l'étiquette a été laissé dans %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "afficher les noms des étiquettes"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "affiche <n> lignes de chaque message d'étiquette"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "supprimer des étiquettes"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "vérifier des étiquettes"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Options de création de l'étiquette"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "étiquette annotée, nécessite un message"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "message pour l'étiquette"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "forcer l'édition du message d'étiquetage"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "étiquette annotée et signée avec GPG"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "utiliser une autre clé pour signer l'étiquette"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "remplacer l'étiquette si elle existe"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "créer un reflog"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Options d'affichage des étiquettes"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "afficher la liste des étiquettes sous forme de colonnes"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "afficher seulement les étiquettes qui contiennent la validation"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "afficher seulement les étiquettes qui ne contiennent pas la validation"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "afficher seulement les étiquettes qui sont fusionnées"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "afficher seulement les étiquettes qui ne sont pas fusionnées"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "afficher seulement les étiquettes de l'objet"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column et -n sont incompatibles"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "l'option -n est autorisée seulement en mode de liste"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "l'option --contains est autorisée seulement en mode de liste"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "l'option --contains est autorisée seulement en mode liste"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "l'option --points-at est autorisée seulement en mode liste"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
-msgstr ""
-"les options --merged et --no-merged ne sont autorisées qu'en mode liste"
+msgstr "les options --merged et --no-merged ne sont autorisées qu'en mode liste"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "une seule option -F ou -m est autorisée."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "trop de paramètres"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' n'est pas un nom d'étiquette valide."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "l'étiquette '%s' existe déjà"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Étiquette '%s' mise à jour (elle était sur %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Dépaquetage des objets"
 
@@ -22871,36 +22347,27 @@
 
 #: builtin/update-index.c:154
 msgid "directory stat info does not change after adding a new file"
-msgstr ""
-"l'information de stat du répertoire ne change pas après ajout d'un fichier"
+msgstr "l'information de stat du répertoire ne change pas après ajout d'un fichier"
 
 #: builtin/update-index.c:167
 msgid "directory stat info does not change after adding a new directory"
-msgstr ""
-"l'information de stat du répertoire ne change pas après ajout d'un répertoire"
+msgstr "l'information de stat du répertoire ne change pas après ajout d'un répertoire"
 
 #: builtin/update-index.c:180
 msgid "directory stat info changes after updating a file"
-msgstr ""
-"l'information de stat du répertoire change après mise à jour d'un fichier"
+msgstr "l'information de stat du répertoire change après mise à jour d'un fichier"
 
 #: builtin/update-index.c:191
 msgid "directory stat info changes after adding a file inside subdirectory"
-msgstr ""
-"l'information de stat du répertoire change après l'ajout d'un fichier dans "
-"un sous-répertoire"
+msgstr "l'information de stat du répertoire change après l'ajout d'un fichier dans un sous-répertoire"
 
 #: builtin/update-index.c:202
 msgid "directory stat info does not change after deleting a file"
-msgstr ""
-"l'information de stat du répertoire ne change pas après la suppression d'un "
-"fichier<"
+msgstr "l'information de stat du répertoire ne change pas après la suppression d'un fichier<"
 
 #: builtin/update-index.c:215
 msgid "directory stat info does not change after deleting a directory"
-msgstr ""
-"l'information de stat du répertoire ne change pas après la suppression d'un "
-"répertoire"
+msgstr "l'information de stat du répertoire ne change pas après la suppression d'un répertoire"
 
 #: builtin/update-index.c:222
 msgid " OK"
@@ -22910,206 +22377,180 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<options>] [--] [<fichier>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr "continuer de rafraîchir même si l'index a besoin d'une mise à jour"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "rafraîchir : ignorer les sous-modules"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "ne pas ignorer les nouveaux fichiers"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "laisser les fichiers remplacer des répertoires et vice-versa"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "aviser des fichiers manquants dans la copie de travail"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "rafraîchir même si l'index contient des éléments non fusionnés"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "rafraîchir l'information de stat"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "comme --refresh, mais en ignorant l'option assume-unchanged"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>, <objet>, <chemin>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "ajouter l'élément spécifié dans l'index"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "marquer les fichiers comme \"non changeants\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "mettre à zéro le bit supposé-non-modifié"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "marquer les fichiers comme \"index seulement\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "mettre à zéro le bit sauter-la-copie-de travail"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "ne pas toucher aux entrées restreintes à l'index"
 
-#: builtin/update-index.c:1022
-msgid "add to index only; do not add content to object database"
-msgstr ""
-"ajouter seulement à l'index ; ne pas ajouter le contenu dans la base de "
-"données des objets"
-
 #: builtin/update-index.c:1024
-msgid "remove named paths even if present in worktree"
-msgstr ""
-"supprimer les chemins nommés même s'ils sont présents dans la copie de "
-"travail"
+msgid "add to index only; do not add content to object database"
+msgstr "ajouter seulement à l'index ; ne pas ajouter le contenu dans la base de données des objets"
 
 #: builtin/update-index.c:1026
+msgid "remove named paths even if present in worktree"
+msgstr "supprimer les chemins nommés même s'ils sont présents dans la copie de travail"
+
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "avec --stdin : les lignes en entrée sont terminées par des octets nuls"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "lire la liste des chemins à mettre à jour depuis l'entrée standard"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "ajouter les éléments depuis l'entrée standard à l'index"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "repeupler les étapes n°2 et n°3 pour les chemins listés"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "mettre à jour seulement les éléments qui diffèrent de HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "ignorer les fichiers manquants dans la copie de travail"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "afficher les actions sur la sortie standard"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(pour porcelaines) oublier les conflits sauvés et non résolus"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "écrire l'index dans ce format"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "activer ou désactiver l'index divisé"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "activer ou désactiver le cache de non-suivis"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "tester si le système de fichier supporte le cache de non-suivis"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "activer le cache de non-suivis sans tester le système de fichier"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "écrire l'index même s'il n'est pas marqué comme modifié"
 
-#: builtin/update-index.c:1065
-msgid "enable or disable file system monitor"
-msgstr ""
-"activer ou désactiver la surveillance du système de fichier (fsmonitor)"
-
 #: builtin/update-index.c:1067
+msgid "enable or disable file system monitor"
+msgstr "activer ou désactiver la surveillance du système de fichier (fsmonitor)"
+
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "marquer les fichiers comme valides pour fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "effacer le bit de validité fsmonitor"
 
-#: 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 réglé à false ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment activer l'index coupé"
+#: builtin/update-index.c:1175
+msgid "core.splitIndex is set to false; remove or change it, if you really want to enable split index"
+msgstr "core.splitIndex est réglé à false ; supprimez-le ou changez-le si vous souhaitez vraiment activer l'index coupé"
 
-#: 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 réglé à vrai ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment désactiver l'index coupé"
+#: builtin/update-index.c:1184
+msgid "core.splitIndex is set to true; remove or change it, if you really want to disable split index"
+msgstr "core.splitIndex est réglé à vrai ; supprimez-le ou changez-le si vous souhaitez vraiment désactiver l'index coupé"
 
-#: 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"
-msgstr ""
-"core.untrackedCache est réglé à true ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment désactiver le cache des fichiers non-suivis"
+#: builtin/update-index.c:1196
+msgid "core.untrackedCache is set to true; remove or change it, if you really want to disable the untracked cache"
+msgstr "core.untrackedCache est réglé à true ; supprimez-le ou changez-le si vous souhaitez vraiment désactiver le cache des fichiers non-suivis"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "Le cache non suivi est désactivé"
 
-#: 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"
-msgstr ""
-"core.untrackedCache est réglé à false ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment activer le cache des fichiers non-suivis"
+#: builtin/update-index.c:1208
+msgid "core.untrackedCache is set to false; remove or change it, if you really want to enable the untracked cache"
+msgstr "core.untrackedCache est réglé à false ; supprimez-le ou changez-le si vous souhaitez vraiment activer le cache des fichiers non-suivis"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Le cache non suivi est activé pour '%s'"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
-msgstr ""
-"core.fsmonitor est réglé à false ; changez-le si vous souhaitez vraiment "
-"activer la surveillance du système de fichiers"
+msgstr "core.fsmonitor est réglé à false ; changez-le si vous souhaitez vraiment activer la surveillance du système de fichiers"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor activé"
 
-#: builtin/update-index.c:1225
-msgid ""
-"core.fsmonitor is set; remove it if you really want to disable fsmonitor"
-msgstr ""
-"core.fsmonitor est réglé à true ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment désactiver la surveillance du système de fichiers"
+#: builtin/update-index.c:1227
+msgid "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
+msgstr "core.fsmonitor est réglé à true ; supprimez-le ou changez-le si vous souhaitez vraiment désactiver la surveillance du système de fichiers"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor désactivé"
 
@@ -23119,9 +22560,7 @@
 
 #: builtin/update-ref.c:11
 msgid "git update-ref [<options>]    <refname> <new-val> [<old-val>]"
-msgstr ""
-"git update-ref [<options>]    <nom-référence> <nouvelle-valeur> [<ancienne-"
-"valeur>]"
+msgstr "git update-ref [<options>]    <nom-référence> <nouvelle-valeur> [<ancienne-valeur>]"
 
 #: builtin/update-ref.c:12
 msgid "git update-ref [<options>] --stdin [-z]"
@@ -23161,12 +22600,11 @@
 
 #: builtin/upload-pack.c:25
 msgid "exit immediately after initial ref advertisement"
-msgstr "Sortir immédiatement après l'annonce initiale des références"
+msgstr "sortir immédiatement après l'annonce initiale des références"
 
 #: builtin/upload-pack.c:27
 msgid "do not try <directory>/.git/ if <directory> is no Git directory"
-msgstr ""
-"ne pas essayer <répertoire>/.git/ si <répertoire> n'est pas un répertoire Git"
+msgstr "ne pas essayer <répertoire>/.git/ si <répertoire> n'est pas un répertoire Git"
 
 #: builtin/upload-pack.c:29
 msgid "interrupt transfer after <n> seconds of inactivity"
@@ -23204,100 +22642,72 @@
 msgid "print tag contents"
 msgstr "afficher le contenu de l'étiquette"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<options>] <chemin> [<commit>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<options>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<options>] <chemin>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <arbre-de-travail> <nouveau-chemin>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<options>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<options>] <arbre-de-travail>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <chemin>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "échec de la suppression de '%s'"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "pas un répertoire valide"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "le fichier gitdir n'existe pas"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "impossible de lire le fichier gitdir (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr ""
-"lecture trop courte ( %<PRIuMAX> octets attendus, %<PRIuMAX> octets lus)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "fichier gitdir invalide"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "le fichier gitdir pointe sur un endroit inexistant"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Suppression de %s/%s : %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "afficher les arbres de travail éliminés"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "faire expirer les arbres de travail plus vieux que <temps>"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' existe déjà"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "arbre de travail destination '%s' inutilisable"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, 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' est un arbre de travail manquant mais verrouillé ;\n"
-"utilisez '%s -f -f' pour passer outre, ou 'unlock' et 'prune' ou 'remove' "
-"pour corriger"
+"utilisez '%s -f -f' pour passer outre, ou 'unlock' et 'prune' ou 'remove' pour corriger"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23306,134 +22716,135 @@
 "'%s' est un arbre de travail manquant mais déjà enregistré ;\n"
 "utilisez '%s -f' pour passer outre, ou 'prune' ou 'remove' pour corriger"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "impossible de créer le répertoire de '%s'"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Préparation de l'arbre de travail (nouvelle branche '%s')"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
-msgstr ""
-"Préparation de l'arbre de travail (réinitialisation de la branche '%s' ; "
-"précédemment sur %s)"
+msgstr "Préparation de l'arbre de travail (réinitialisation de la branche '%s' ; précédemment sur %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Préparation de l'arbre de travail (extraction de '%s')"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Préparation de l'arbre de travail (HEAD détachée %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
-msgstr ""
-"extraire la <branche> même si elle est déjà extraite dans une autre copie de "
-"travail"
+msgstr "extraire la <branche> même si elle est déjà extraite dans une autre copie de travail"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "créer une nouvelle branche"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "créer ou réinitialiser une branche"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "remplissage de la nouvelle copie de travail"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "conserver le verrou sur le nouvel arbre de travail"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "régler le mode de suivi (voir git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "essayer de nommer la nouvelle branche comme la branche amont"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B et --detach sont mutuellement exclusifs"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
-msgstr ""
-"--[no-]track ne peut être utilisé qu'à la création d'une nouvelle branche"
+msgstr "--[no-]track ne peut être utilisé qu'à la création d'une nouvelle branche"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "afficher les annotations étendues et les raisons, si disponible"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr "ajouter l'annotation 'prunable' aux arbres de travail plus vieux que <temps>"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose et --porcelain sont mutuellement exclusifs"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "raison du verrouillage"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839 builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' n'est pas une copie de travail"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
-msgstr ""
-"La copie de travail principale ne peut pas être verrouillée ou déverrouillée"
+msgstr "La copie de travail principale ne peut pas être verrouillée ou déverrouillée"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' est déjà verrouillé, car '%s'"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' est déjà verrouillé"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' n'est pas verrouillé"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
-msgstr ""
-"les arbres de travail contenant des sous-modules ne peuvent pas être "
-"déplacés ou supprimés"
+msgstr "les arbres de travail contenant des sous-modules ne peuvent pas être déplacés ou supprimés"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
-msgstr ""
-"forcer le déplacement même si l'arbre de travail est sale ou verrouillé"
+msgstr "forcer le déplacement même si l'arbre de travail est sale ou verrouillé"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' est un arbre de travail principal"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "impossible de trouver le nom de la destination à partir de '%s'"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
-"impossible de déplacer un arbre de travail verrouillé, raison du "
-"verrouillage : %s\n"
+"impossible de déplacer un arbre de travail verrouillé, raison du verrouillage : %s\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23441,49 +22852,45 @@
 "impossible de déplacer un arbre de travail verrouillé;\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "la validation a échoué, impossible de déplacer l'arbre de travail : %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "échec au déplacement de '%s' vers '%s'"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "échec du lancement de 'git status' sur '%s'"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
-msgstr ""
-"'%s' contient des fichiers modifiés ou non-suivis, utilisez --force pour le "
-"supprimer"
+msgstr "'%s' contient des fichiers modifiés ou non-suivis, utilisez --force pour le supprimer"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "impossible de lancer 'git status' sur '%s', code %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
-msgstr ""
-"forcer la suppression même si l'arbre de travail est sale ou verrouillé"
+msgstr "forcer la suppression même si l'arbre de travail est sale ou verrouillé"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
-"impossible de supprimer un arbre de travail verrouillé, raison du "
-"verrouillage : %s\n"
+"impossible de supprimer un arbre de travail verrouillé, raison du verrouillage : %s\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23491,18 +22898,17 @@
 "impossible de supprimer un arbre de travail verrouillé;\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
-msgstr ""
-"la validation a échoué, impossible de supprimer l'arbre de travail : %s"
+msgstr "la validation a échoué, impossible de supprimer l'arbre de travail : %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "réparation : %s : '%s'"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "erreur : %s : %s"
@@ -23523,15 +22929,156 @@
 msgid "only useful for debugging"
 msgstr "seulement utile pour le débogage"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <chemin>] [-c <nom>=<valeur>]\n"
+"           [--exec-path[=<chemin>]] [--html-path] [--man-path] [--info-path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n"
+"           [--git-dir=<chemin>] [--work-tree=<chemin>] [--namespace=<nom>]\n"
+"           [--super-prefix=<chemin>] [--config-env=<nom>=<variable-d-environnement>]\n"
+"           <commande> [<args>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"'git help -a' et 'git help -g' listent les sous-commandes disponibles et\n"
+"quelques concepts. Voir 'git help <commande>' ou 'git help <concept>'\n"
+"pour en lire plus à propos d'une commande spécifique ou d'un concept.\n"
+"Voir 'git help git' pour un survol du système."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "aucun répertoire fourni pour --git-dir\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "aucun espace de nom fournit pour --namespace\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "aucun répertoire fourni pour --work-tree\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "aucun préfixe fourni pour --super-prefix\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "-c requiert une chaîne de configuration\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "aucune clé de configuration fournie pour --conf-env\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "aucun répertoire fourni pour -C\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "option inconnue : %s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "lors de l'expansion de l'alias '%s' : '%s'"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"l'alias '%s' modifie les variables d'environnement.\n"
+"Vous pouvez utiliser '!git' dans l'alias pour le faire"
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "alias vide pour %s"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "alias recursif : %s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "échec d'écriture sur la sortie standard"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "échec inconnu d'écriture sur la sortie standard"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "échec de fermeture de la sortie standard"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "boucle d'alias détectée : l'expansion de '%s' ne finit jamais : %s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "impossible d'utiliser %s comme une fonction intégrée"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"usage : %s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr "l'expansion de l'alias '%s' a échoué : '%s' n'est pas une commande git\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "échec au lancement de la commande '%s' : %s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "l'argument de --packfile doit être une empreinte valide ('%s' reçu)"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "pas un dépôt git"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile nécessite --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args ne peut être utilisé qu'avec --packfile"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "options non gérées"
@@ -23557,141 +23104,112 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "sortir immédiatement après l'annonce des capacités"
 
-#: git.c:28
-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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
-msgstr ""
-"git [--version] [--help] [-C <chemin>] [-c <nom>=<valeur>]\n"
-"           [--exec-path[=<chemin>]] [--html-path] [--man-path] [--info-"
-"path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=<chemin>] [--work-tree=<chemin>] [--namespace=<nom>]\n"
-"           <commande> [<args>]"
-
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"'git help -a' et 'git help -g' listent les sous-commandes disponibles et\n"
-"quelques concepts. Voir 'git help <commande>' ou 'git help <concept>'\n"
-"pour en lire plus à propos d'une commande spécifique ou d'un concept.\n"
-"Voir 'git help git' pour un survol du système."
-
-#: git.c:187
+#: t/helper/test-simple-ipc.c:262
 #, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "aucun répertoire fourni pour --git-dir\n"
+msgid "socket/pipe already in use: '%s'"
+msgstr "socket/pipe déjà en cours d'utilisation : '%s'"
 
-#: git.c:201
+#: t/helper/test-simple-ipc.c:264
 #, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "aucun espace de nom fournit pour --namespace\n"
+msgid "could not start server on: '%s'"
+msgstr "impossible de démarrer les serveur sur : '%s'"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "aucun répertoire fourni pour --work-tree\n"
+#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
+msgid "could not spawn daemon in the background"
+msgstr "échec du lancement d'un daemon en tâche de fond"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "aucun préfixe fourni pour --super-prefix\n"
+#: t/helper/test-simple-ipc.c:356
+msgid "waitpid failed"
+msgstr "échec du waitpid"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "-c requiert une chaîne de configuration\n"
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
+msgstr "daemon pas encore en ligne"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "aucun répertoire fourni pour -C\n"
+#: t/helper/test-simple-ipc.c:406
+msgid "daemon failed to start"
+msgstr "échec du démarrage du daemon"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "option inconnue : %s\n"
+#: t/helper/test-simple-ipc.c:410
+msgid "waitpid is confused"
+msgstr "waitpid est embrouillé"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "lors de l'expansion de l'alias '%s' : '%s'"
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
+msgstr "le daemon n'est pas encore arrêté"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"l'alias '%s' modifie les variables d'environnement.\n"
-"Vous pouvez utiliser '!git' dans l'alias pour le faire"
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc-is-active [<nom>] [<options>]"
 
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "alias vide pour %s"
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<nom>] [<fils-d'exécution>]"
 
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "alias recursif : %s"
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr "test-helper simple-ipc start-daemon [<nom>] [<fils-d'exécution>] [<attente-max>]"
 
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "échec d'écriture sur la sortie standard"
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<nom>] [<attente-max>]"
 
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "échec inconnu d'écriture sur la sortie standard"
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<nom>] [<jeton>]"
 
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "échec de fermeture de la sortie standard"
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<nom>] [<nombre-d'octets>] [<octets>]"
 
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "boucle d'alias détectée : l'expansion de '%s' ne finit jamais : %s"
+#: t/helper/test-simple-ipc.c:688
+msgid "test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] [<batchsize>]"
+msgstr "test-helper simple-ipc multiple     [<nom>] [<fils-d'exécution>] [<nombre-d'octets>] [<taille-de-lot>]"
 
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "impossible d'utiliser %s comme une fonction intégrée"
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "nom ou nom de chemin du socket unix"
 
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"usage : %s\n"
-"\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "nom du pipe nommé"
 
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr ""
-"l'expansion de l'alias '%s' a échoué : '%s' n'est pas une commande git\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "nombre de fils d'exécution dans le réservoir de fils d'exécution du serveur"
 
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "échec au lancement de la commande '%s' : %s\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "nombre de secondes à attendre que le daemon démarre ou s'arrête"
+
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "nombre d'octets"
+
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "nombre de requêtes par fil d'exécution"
+
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "octet"
+
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "caractère ballast"
+
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "jeton"
+
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "jeton de commande à envoyer au serveur"
 
 #: http.c:399
 #, c-format
 msgid "negative value for http.postbuffer; defaulting to %d"
-msgstr ""
-"valeur négative pour http.postbuffer ; utilisation de la valeur par défaut %d"
+msgstr "valeur négative pour http.postbuffer ; utilisation de la valeur par défaut %d"
 
 #: http.c:420
 msgid "Delegation control is not supported with cURL < 7.22.0"
@@ -23717,16 +23235,14 @@
 #: http.c:1139
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
-msgstr ""
-"Impossible de régler la dorsale SSL à '%s' : cURL a été construit sans "
-"dorsale SSL"
+msgstr "Impossible de régler la dorsale SSL à '%s' : cURL a été construit sans dorsale SSL"
 
 #: http.c:1143
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Impossible de spécifier le dorsal SSL à '%s' : déjà spécifié"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23786,9 +23302,7 @@
 
 #: remote-curl.c:724
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
-msgstr ""
-"impossible de rembobiner le données post rpc - essayer d'augmenter http."
-"postBuffer"
+msgstr "impossible de rembobiner le données post rpc - essayer d'augmenter http.postBuffer"
 
 #: remote-curl.c:754
 #, c-format
@@ -23879,69 +23393,57 @@
 msgid "no libc information available\n"
 msgstr "aucune information de libc disponible\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "args"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "filtrage d'objet"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "date-d'expiration"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "sans action (rétrocompatibilité)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "être plus verbeux"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "être plus silencieux"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "utiliser <n> chiffres pour afficher les noms des objets"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "comment éliminer les espaces et les commentaires # du message"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "lire les spécificateurs de fichier depuis fichier"
 
-#: parse-options.h:338
-msgid ""
-"with --pathspec-from-file, pathspec elements are separated with NUL character"
-msgstr ""
-"avec --pathspec-from-file, les spécificateurs de chemin sont séparés par un "
-"caractère NUL"
+#: parse-options.h:339
+msgid "with --pathspec-from-file, pathspec elements are separated with NUL character"
+msgstr "avec --pathspec-from-file, les spécificateurs de chemin sont séparés par un caractère NUL"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "clé"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "nom du champ servant à trier"
 
 #: rerere.h:44
 msgid "update the index with reused conflict resolution if possible"
-msgstr ""
-"met à jour l'index avec les résolutions de conflit réutilisées si possible"
-
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD détachée sur "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD détachée depuis "
+msgstr "met à jour l'index avec les résolutions de conflit réutilisées si possible"
 
 #: command-list.h:50
 msgid "Add file contents to the index"
@@ -23973,9 +23475,7 @@
 
 #: command-list.h:57
 msgid "Show what revision and author last modified each line of a file"
-msgstr ""
-"Montrer la révision et l'auteur qui ont modifié en dernier chaque ligne d'un "
-"fichier"
+msgstr "Montrer la révision et l'auteur qui ont modifié en dernier chaque ligne d'un fichier"
 
 #: command-list.h:58
 msgid "List, create, or delete branches"
@@ -23983,8 +23483,7 @@
 
 #: command-list.h:59
 msgid "Collect information for user to file a bug report"
-msgstr ""
-"Collecter l'information pour l'utilisateur pour remplir un rapport de bogue"
+msgstr "Collecter l'information pour l'utilisateur pour remplir un rapport de bogue"
 
 #: command-list.h:60
 msgid "Move objects and refs by archive"
@@ -23992,9 +23491,7 @@
 
 #: command-list.h:61
 msgid "Provide content or type and size information for repository objects"
-msgstr ""
-"Fournir le contenu ou l'information de type et taille pour les objets du "
-"dépôt"
+msgstr "Fournir le contenu ou l'information de type et taille pour les objets du dépôt"
 
 #: command-list.h:62
 msgid "Display gitattributes information"
@@ -24058,13 +23555,11 @@
 
 #: command-list.h:77
 msgid "Get and set repository or global options"
-msgstr "voir et régler les options globales ou de dépôt"
+msgstr "Voir et régler les options globales ou de dépôt"
 
 #: command-list.h:78
 msgid "Count unpacked number of objects and their disk consumption"
-msgstr ""
-"Compter le nombre d'objets non-empaquetés et leur consommation d'espace "
-"disque"
+msgstr "Compter le nombre d'objets non-empaquetés et leur consommation d'espace disque"
 
 #: command-list.h:79
 msgid "Retrieve and store user credentials"
@@ -24096,14 +23591,11 @@
 
 #: command-list.h:86
 msgid "Give an object a human readable name based on an available ref"
-msgstr ""
-"Baptiser un objet avec un nom lisible à partir d'une référence disponible"
+msgstr "Baptiser un objet avec un nom lisible à partir d'une référence disponible"
 
 #: command-list.h:87
 msgid "Show changes between commits, commit and working tree, etc"
-msgstr ""
-"Afficher les changements entre les validations, entre validation et copie de "
-"travail, etc"
+msgstr "Afficher les changements entre les validations, entre validation et copie de travail, etc"
 
 #: command-list.h:88
 msgid "Compares files in the working tree and the index"
@@ -24159,8 +23651,7 @@
 
 #: command-list.h:101
 msgid "Verifies the connectivity and validity of the objects in the database"
-msgstr ""
-"Vérifier la connectivité et la validité des objets dans la base de données"
+msgstr "Vérifier la connectivité et la validité des objets dans la base de données"
 
 #: command-list.h:102
 msgid "Cleanup unnecessary files and optimize the local repository"
@@ -24180,8 +23671,7 @@
 
 #: command-list.h:106
 msgid "Compute object ID and optionally creates a blob from a file"
-msgstr ""
-"Calculer l'ID d'objet et créer optionnellement un blob depuis un fichier"
+msgstr "Calculer l'ID d'objet et créer optionnellement un blob depuis un fichier"
 
 #: command-list.h:107
 msgid "Display help information about Git"
@@ -24205,8 +23695,7 @@
 
 #: command-list.h:112
 msgid "Build pack index file for an existing packed archive"
-msgstr ""
-"Construire un fichier d'index pack depuis une archive compactée existante"
+msgstr "Construire un fichier d'index pack depuis une archive compactée existante"
 
 #: command-list.h:113
 msgid "Create an empty Git repository or reinitialize an existing one"
@@ -24218,8 +23707,7 @@
 
 #: command-list.h:115
 msgid "Add or parse structured information in commit messages"
-msgstr ""
-"Ajouter ou analyser l'information structurée dans les messages de validation"
+msgstr "Ajouter ou analyser l'information structurée dans les messages de validation"
 
 #: command-list.h:116
 msgid "The Git repository browser"
@@ -24231,9 +23719,7 @@
 
 #: command-list.h:118
 msgid "Show information about files in the index and the working tree"
-msgstr ""
-"Afficher l'information à propos des fichiers dans l'index ou l'arbre de "
-"travail"
+msgstr "Afficher l'information à propos des fichiers dans l'index ou l'arbre de travail"
 
 #: command-list.h:119
 msgid "List references in a remote repository"
@@ -24245,9 +23731,7 @@
 
 #: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
-msgstr ""
-"Extraire le patch et l'information de d'auteur depuis un simple message de "
-"courriel"
+msgstr "Extraire le patch et l'information de d'auteur depuis un simple message de courriel"
 
 #: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
@@ -24279,9 +23763,7 @@
 
 #: command-list.h:129
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
-msgstr ""
-"Lancer les outils de résolution de conflit de fusion pour résoudre les "
-"conflits de fusion"
+msgstr "Lancer les outils de résolution de conflit de fusion pour résoudre les conflits de fusion"
 
 #: command-list.h:130
 msgid "Show three-way merge without touching index"
@@ -24292,8 +23774,8 @@
 msgstr "Écrire et vérifier les index multi-paquet"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Créer un objet étiquette"
+msgid "Creates a tag object with extra validation"
+msgstr "Créer un objet étiquette avec validation supplémentaire"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24333,8 +23815,7 @@
 
 #: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
-msgstr ""
-"Éliminer les objets inatteignables depuis la base de données des objets"
+msgstr "Éliminer les objets inatteignables depuis la base de données des objets"
 
 #: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
@@ -24354,8 +23835,7 @@
 
 #: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
-msgstr ""
-"Comparer deux plages de commits (par exemple deux versions d'une branche)"
+msgstr "Comparer deux plages de commits (par exemple deux versions d'une branche)"
 
 #: command-list.h:148
 msgid "Reads tree information into the index"
@@ -24399,7 +23879,7 @@
 
 #: command-list.h:158
 msgid "Restore working tree files"
-msgstr "restaurer les fichiers l'arbre de travail"
+msgstr "Restaurer les fichiers l'arbre de travail"
 
 #: command-list.h:159
 msgid "Revert some existing commits"
@@ -24427,7 +23907,7 @@
 
 #: command-list.h:165
 msgid "Restricted login shell for Git-only SSH access"
-msgstr "shell de login restreint pour un accès SSH vers Git seulement"
+msgstr "Shell de login restreint pour un accès SSH vers Git seulement"
 
 #: command-list.h:166
 msgid "Summarize 'git log' output"
@@ -24459,7 +23939,7 @@
 
 #: command-list.h:173
 msgid "Initialize and modify the sparse-checkout"
-msgstr "Initialiser et modifier l'extraction partielle"
+msgstr "Initialiser et modifier l'extraction clairsemée"
 
 #: command-list.h:174
 msgid "Stash the changes in a dirty working directory away"
@@ -24495,8 +23975,7 @@
 
 #: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
-msgstr ""
-"Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG"
+msgstr "Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG"
 
 #: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
@@ -24512,14 +23991,11 @@
 
 #: command-list.h:186
 msgid "Update the object name stored in a ref safely"
-msgstr ""
-"Mettre à jour le nom d'objet stocké dans une référence en toute sécurité"
+msgstr "Mettre à jour le nom d'objet stocké dans une référence en toute sécurité"
 
 #: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
-msgstr ""
-"Mettre à jour le fichier d'informations auxiliaires pour aider les serveurs "
-"idiots"
+msgstr "Mettre à jour le fichier d'informations auxiliaires pour aider les serveurs idiots"
 
 #: command-list.h:188
 msgid "Send archive back to git-archive"
@@ -24567,7 +24043,7 @@
 
 #: command-list.h:199
 msgid "Git command-line interface and conventions"
-msgstr "interface en ligne de commande et conventions de Git"
+msgstr "Interface en ligne de commande et conventions de Git"
 
 #: command-list.h:200
 msgid "A Git core tutorial for developers"
@@ -24606,69 +24082,55 @@
 msgstr "Spécifie les fichiers non-suivis à ignorer intentionnellement"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Fait correspondre les noms d'auteur/validateur avec les adresses de courriel"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Définition des propriétés de sous-module"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Espaces de nom de Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Programmes assistants pour interagir avec des dépôts distants"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Disposition d'un dépôt Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Spécification des révisions et portées pour Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Montage d'un dépôt dans un autre dépôt"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Une introduction pratique à Git : deuxième partie"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Une introduction pratique à Git"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Un aperçu des flux de travail recommandés avec Git"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Mauvaise révision en entrée : $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Pas de fichier de log donné"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "impossible de lire $file pour rejouer"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? de quoi parlez-vous ?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "la bissection a échoué : aucune commande fournie."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "lancement de $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24677,11 +24139,11 @@
 "la bissection a échoué :\n"
 "le code retour $res de '$command' est < 0 ou >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "la bissection ne peut plus continuer"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24690,21 +24152,13 @@
 "la bissection a échoué :\n"
 "'bisect-state $state' a retourné le code erreur $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "succès de la bissection"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "Pas de bissection en cours."
-
 #: git-merge-octopus.sh:46
-msgid ""
-"Error: Your local changes to the following files would be overwritten by "
-"merge"
-msgstr ""
-"Erreur : vos modifications locales aux fichiers suivants seraient écrasées "
-"par la fusion"
+msgid "Error: Your local changes to the following files would be overwritten by merge"
+msgstr "Erreur : vos modifications locales aux fichiers suivants seraient écrasées par la fusion"
 
 #: git-merge-octopus.sh:61
 msgid "Automated merge did not work."
@@ -24740,14 +24194,12 @@
 
 #: git-submodule.sh:179
 msgid "Relative path can only be used from the toplevel of the working tree"
-msgstr ""
-"Un chemin relatif ne peut être utilisé que depuis la racine de la copie de "
-"travail"
+msgstr "Un chemin relatif ne peut être utilisé que depuis la racine de la copie de travail"
 
 #: git-submodule.sh:189
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr "L'URL de dépôt '$repo' doit être absolu ou commencer par ./|../"
+msgstr "l'URL de dépôt : '$repo' doit être absolu ou commencer par ./|../"
 
 #: git-submodule.sh:208
 #, sh-format
@@ -24777,25 +24229,19 @@
 #: git-submodule.sh:259
 #, sh-format
 msgid "A git directory for '$sm_name' is found locally with remote(s):"
-msgstr ""
-"Un répertoire git pour '$sm_name' est trouvé en local avec le(s) serveur(s) "
-"distant(s) :"
+msgstr "Un répertoire git pour '$sm_name' est trouvé en local avec le(s) serveur(s) distant(s) :"
 
 #: 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."
+"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 vous voulez réutiliser ce répertoire local git au lieu de le recloner "
-"depuis\n"
+"Si vous voulez réutiliser ce répertoire local git au lieu de le recloner depuis\n"
 "  $realrepo\n"
-"utilisez l'option '--force'. Si le répertoire local git n'est pas le dépôt "
-"correct\n"
+"utilisez l'option '--force'. Si le répertoire local git n'est pas le dépôt correct\n"
 "ou si ceci n'est pas clair, choisissez un autre nom avec l'option '--name'."
 
 #: git-submodule.sh:267
@@ -24821,9 +24267,7 @@
 #: git-submodule.sh:568
 #, sh-format
 msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-"Impossible de trouver la révision courante dans le chemin de sous-module "
-"'$displaypath'"
+msgstr "Impossible de trouver la révision courante dans le chemin de sous-module '$displaypath'"
 
 #: git-submodule.sh:578
 #, sh-format
@@ -24832,36 +24276,23 @@
 
 #: git-submodule.sh:583
 #, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"Impossible de trouver la révision courante ${remote_name}/${branch} dans le "
-"chemin de sous-module '$sm_path'"
+msgid "Unable to find current ${remote_name}/${branch} revision in submodule path '$sm_path'"
+msgstr "Impossible de trouver la révision courante ${remote_name}/${branch} dans le chemin de sous-module '$sm_path'"
 
 #: git-submodule.sh:601
 #, sh-format
-msgid ""
-"Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
-"$sha1:"
-msgstr ""
-"Impossible de rapatrier dans le chemin de sous-module '$displaypath' ; essai "
-"de rapatriement direct de $sha1 :"
+msgid "Unable to fetch in submodule path '$displaypath'; trying to directly fetch $sha1:"
+msgstr "Impossible de rapatrier dans le chemin de sous-module '$displaypath' ; essai de rapatriement direct de $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 ""
-"Chemin de sous-module '$displaypath' récupéré, mais il ne contenait pas "
-"$sha1. La récupération directe de ce commit a échoué."
+msgid "Fetched in submodule path '$displaypath', but it did not contain $sha1. Direct fetching of that commit failed."
+msgstr "Chemin de sous-module '$displaypath' récupéré, mais il ne contenait pas $sha1. La récupération directe de ce commit a échoué."
 
 #: git-submodule.sh:614
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Impossible d'extraire '$sha1' dans le chemin de sous-module '$displaypath'"
+msgstr "Impossible d'extraire '$sha1' dans le chemin de sous-module '$displaypath'"
 
 #: git-submodule.sh:615
 #, sh-format
@@ -24871,8 +24302,7 @@
 #: git-submodule.sh:619
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Impossible de rebaser '$sha1' dans le chemin de sous-module '$displaypath'"
+msgstr "Impossible de rebaser '$sha1' dans le chemin de sous-module '$displaypath'"
 
 #: git-submodule.sh:620
 #, sh-format
@@ -24882,8 +24312,7 @@
 #: git-submodule.sh:625
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Impossible de fusionner '$sha1' dans le chemin de sous-module '$displaypath'"
+msgstr "Impossible de fusionner '$sha1' dans le chemin de sous-module '$displaypath'"
 
 #: git-submodule.sh:626
 #, sh-format
@@ -24893,9 +24322,7 @@
 #: git-submodule.sh:631
 #, sh-format
 msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
-msgstr ""
-"L'exécution de '$command $sha1' a échoué dans le chemin de sous-module "
-"'$displaypath'"
+msgstr "L'exécution de '$command $sha1' a échoué dans le chemin de sous-module '$displaypath'"
 
 #: git-submodule.sh:632
 #, sh-format
@@ -24956,8 +24383,7 @@
 " p, pick <commit> = utiliser le commit\n"
 " r, reword <commit> = utiliser le commit, mais reformuler son message\n"
 " e, edit <commit> = utiliser le commit, mais s'arrêter pour le modifier\n"
-" s, squash <commit> = utiliser le commit, mais le fusionner avec le "
-"précédent\n"
+" s, squash <commit> = utiliser le commit, mais le fusionner avec le précédent\n"
 " f, fixup <commit> = comme \"squash\", mais en éliminant son message\n"
 " x, exec <commit> = lancer la commande (reste de la ligne) dans un shell\n"
 " d, drop <commit> = supprimer le commit\n"
@@ -25059,8 +24485,7 @@
 msgid "This is a combination of 2 commits."
 msgstr "Ceci est la combinaison de 2 commits."
 
-#: git-rebase--preserve-merges.sh:526 git-rebase--preserve-merges.sh:569
-#: git-rebase--preserve-merges.sh:572
+#: 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 "Impossible d'appliquer $sha1... $rest"
@@ -25070,16 +24495,12 @@
 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"
+"failed. If the pre-commit hook failed, you may need to resolve the issue before\n"
 "you are able to reword the commit."
 msgstr ""
-"Impossible de corriger le commit après avoir réussi à picorer $sha1... "
-"$rest\n"
-"C'est probablement dû à un message de validation vide ou le crochet pre-"
-"commit\n"
-"a échoué. Si le crochet pre-commit a échoué, vous devez peut-être résoudre "
-"le\n"
+"Impossible de corriger le commit après avoir réussi à picorer $sha1... $rest\n"
+"C'est probablement dû à un message de validation vide ou le crochet pre-commit\n"
+"a échoué. Si le crochet pre-commit a échoué, vous devez peut-être résoudre le\n"
 "problème avant de pouvoir reformuler le message du commit."
 
 #: git-rebase--preserve-merges.sh:616
@@ -25183,8 +24604,7 @@
 
 #: git-rebase--preserve-merges.sh:824
 msgid "Error trying to find the author identity to amend commit"
-msgstr ""
-"Erreur lors de la recherche de l'identité de l'auteur pour corriger le commit"
+msgstr "Erreur lors de la recherche de l'identité de l'auteur pour corriger le commit"
 
 #: git-rebase--preserve-merges.sh:829
 msgid ""
@@ -25243,9 +24663,7 @@
 #: git-sh-setup.sh:191
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
-msgstr ""
-"Impossible de se placer dans le répertoire $cdup, la racine de la copie de "
-"travail"
+msgstr "Impossible de se placer dans le répertoire $cdup, la racine de la copie de travail"
 
 #: git-sh-setup.sh:200 git-sh-setup.sh:207
 #, sh-format
@@ -25258,14 +24676,11 @@
 
 #: git-sh-setup.sh:224
 msgid "Cannot rewrite branches: You have unstaged changes."
-msgstr ""
-"Impossible de réécrire les branches : vous avez des modifications non "
-"indexées."
+msgstr "Impossible de réécrire les branches : vous avez des modifications non indexées."
 
 #: git-sh-setup.sh:227
 msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr ""
-"impossible de tirer avec rebasage. Vous avez des modifications non indexées."
+msgstr "impossible de tirer avec rebasage. Vous avez des modifications non indexées."
 
 #: git-sh-setup.sh:230
 #, sh-format
@@ -25274,20 +24689,16 @@
 
 #: git-sh-setup.sh:243
 msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr ""
-"Impossible de rebaser : votre index contient des modifications non validées."
+msgstr "Impossible de rebaser : votre index contient des modifications non validées."
 
 #: git-sh-setup.sh:246
 msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"impossible de tirer avec rebasage : votre index contient des modifications "
-"non validées."
+msgstr "impossible de tirer avec rebasage : votre index contient des modifications non validées."
 
 #: git-sh-setup.sh:249
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
-msgstr ""
-"$action est impossible : votre index contient des modifications non validées."
+msgstr "$action est impossible : votre index contient des modifications non validées."
 
 #: git-sh-setup.sh:253
 msgid "Additionally, your index contains uncommitted changes."
@@ -25295,8 +24706,7 @@
 
 #: git-sh-setup.sh:373
 msgid "You need to run this command from the toplevel of the working tree."
-msgstr ""
-"Vous devez lancer cette commande depuis la racine de votre copie de travail."
+msgstr "Vous devez lancer cette commande depuis la racine de votre copie de travail."
 
 #: git-sh-setup.sh:378
 msgid "Unable to determine absolute path of git directory"
@@ -25339,8 +24749,7 @@
 "Si le patch s'applique proprement, la section éditée sera\n"
 "immédiatement marquée comme desindexée."
 
-#: git-add--interactive.perl:1065 git-add--interactive.perl:1074
-#: git-add--interactive.perl:1080
+#: git-add--interactive.perl:1065 git-add--interactive.perl:1074 git-add--interactive.perl:1080
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for applying."
@@ -25348,8 +24757,7 @@
 "Si le patch s'applique proprement, la section éditée sera\n"
 "immédiatement marquée comme appliquée."
 
-#: git-add--interactive.perl:1068 git-add--interactive.perl:1071
-#: git-add--interactive.perl:1077
+#: git-add--interactive.perl:1068 git-add--interactive.perl:1071 git-add--interactive.perl:1077
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for discarding."
@@ -25526,8 +24934,7 @@
 #: git-add--interactive.perl:1479
 #, perl-format
 msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Appliquer le changement de mode dans l'arbre de travail [y,n,q,a,d%s,?] ? "
+msgstr "Appliquer le changement de mode dans l'arbre de travail [y,n,q,a,d%s,?] ? "
 
 #: git-add--interactive.perl:1480
 #, perl-format
@@ -25562,7 +24969,7 @@
 
 #: git-add--interactive.perl:1657
 msgid "No other hunks to search\n"
-msgstr "aucune autre section à rechercher\n"
+msgstr "Aucune autre section à rechercher\n"
 
 #: git-add--interactive.perl:1674
 #, perl-format
@@ -25605,21 +25012,17 @@
 "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        - montrer les chemins modifiés\n"
-"update        - ajouter l'état de l'arbre de travail aux modifications à "
-"indexer\n"
+"update        - ajouter l'état de l'arbre de travail aux modifications à indexer\n"
 "revert        - faire revenir les modifications à indexer à la version HEAD\n"
 "patch         - sélectionner les sections et mettre à jour sélectivement\n"
 "diff          - visualiser les diff entre HEAD et l'index\n"
 "add untracked - ajouter les fichiers non-suivis aux modifications à indexer\n"
 
-#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
-#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
-#: git-add--interactive.perl:1853 git-add--interactive.perl:1860
-#: git-add--interactive.perl:1864 git-add--interactive.perl:1870
+#: git-add--interactive.perl:1828 git-add--interactive.perl:1840 git-add--interactive.perl:1843 git-add--interactive.perl:1850 git-add--interactive.perl:1853
+#: git-add--interactive.perl:1860 git-add--interactive.perl:1864 git-add--interactive.perl:1870
 msgid "missing --"
 msgstr "-- manquant"
 
@@ -25635,90 +25038,84 @@
 
 #: git-send-email.perl:138
 msgid "local zone differs from GMT by a non-minute interval\n"
-msgstr ""
-"la zone locale diffère du GMT par un intervalle supérieur à une minute\n"
+msgstr "la zone locale diffère du GMT par un intervalle supérieur à une minute\n"
 
 #: git-send-email.perl:145 git-send-email.perl:151
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "le décalage de temps local est plus grand ou égal à 24 heures\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "fatal : la commande '%s' s'est interrompue avec le code %d"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "l'éditeur est sorti en erreur, abandon total"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
-msgid ""
-"'%s' contains an intermediate version of the email you were composing.\n"
-msgstr ""
-"'%s' contient une version intermédiaire du courriel que vous composiez.\n"
+msgid "'%s' contains an intermediate version of the email you were composing.\n"
+msgstr "'%s' contient une version intermédiaire du courriel que vous composiez.\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' contient le courriel composé.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases est incompatible avec d'autres options\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
 "Set sendemail.forbidSendmailVariables to false to disable this check.\n"
 msgstr ""
 "fatal : options de configuration trouvées pour 'sendmail'\n"
-"git-send-mail est configuré avec des options sendemail.* - veuillez noter le "
-"'e'.\n"
-"Positionnez sendemail.forbidSendmailVariables à false pour désactiver cette "
-"vérification.\n"
+"git-send-mail est configuré avec des options sendemail.* - veuillez noter le 'e'.\n"
+"Positionnez sendemail.forbidSendmailVariables à false pour désactiver cette vérification.\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "Lancement de git format-patch impossible à l'extérieur d'un dépôt\n"
 
-#: git-send-email.perl:492
-msgid ""
-"`batch-size` and `relogin` must be specified together (via command-line or "
-"configuration option)\n"
-msgstr ""
-"`batch-size` et `relogin` doivent être spécifiés ensembles (via la ligne de "
-"commande ou des options de configuration)\n"
+#: git-send-email.perl:501
+msgid "`batch-size` and `relogin` must be specified together (via command-line or configuration option)\n"
+msgstr "`batch-size` et `relogin` doivent être spécifiés ensembles (via la ligne de commande ou des options de configuration)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Champ de --suppress-cc inconnu : '%s'\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Paramètre de --confirm inconnu : '%s'\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
-msgstr ""
-"attention : les guillemets ne sont pas supportés dans alias sendmail : %s\n"
+msgstr "attention : les guillemets ne sont pas supportés dans alias sendmail : %s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "attention : `:include:` n'est pas supporté : %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
-msgstr ""
-"attention : les redirections `/file` ou `|pipe` ne sont pas supportées : %s\n"
+msgstr "attention : les redirections `/file` ou `|pipe` ne sont pas supportées : %s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "attention : ligne sendmail non reconnue : %s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25733,21 +25130,12 @@
 "    * en indiquant \"./%s\" si vous désignez un fichier, ou\n"
 "    * en fournissant l'option --format-patch pour une plage.\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Échec à l'ouverture du répertoire %s : %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"fatal : %s : %s\n"
-"attention : aucun patch envoyé\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -25757,17 +25145,17 @@
 "Aucun fichier patch spécifié !\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Ligne de sujet non trouvée dans %s ?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Impossible d'ouvrir %s en écriture : %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25781,67 +25169,59 @@
 "\n"
 "Effacez le corps si vous ne souhaitez pas envoyer un résumé.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Échec à l'ouverture de %s : %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Échec à l'ouverture de %s.final : %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "Le courriel de résumé étant vide, il a été ignoré\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Êtes-vous sur de vouloir utiliser <%s> [y/N] ? "
 
-#: git-send-email.perl:921
-msgid ""
-"The following files are 8bit, but do not declare a Content-Transfer-"
-"Encoding.\n"
-msgstr ""
-"Les fichiers suivants sont 8bit mais ne déclarent pas de champs Content-"
-"Transfer-Encoding.\n"
+#: git-send-email.perl:928
+msgid "The following files are 8bit, but do not declare a Content-Transfer-Encoding.\n"
+msgstr "Les fichiers suivants sont 8bit mais ne déclarent pas de champs Content-Transfer-Encoding.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Quel encodage 8bit doit être déclaré [UTF8] ? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, 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 ""
 "Envoi refusé parce que le patch\n"
 "\t%s\n"
-"a un sujet modèle '*** SUBJECT HERE ***'. Passez --force is vous souhaitez "
-"vraiment envoyer.\n"
+"a un sujet modèle '*** SUBJECT HERE ***'. Passez --force is vous souhaitez vraiment envoyer.\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "À qui les courriels doivent-ils être envoyés (s'il y en a) ?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "fatal : l'alias '%s' se développe en lui-même\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
-msgstr ""
-"Message-ID à utiliser comme In-Reply-To pour le premier courriel (s'il y en "
-"a) ? "
+msgstr "Message-ID à utiliser comme In-Reply-To pour le premier courriel (s'il y en a) ? "
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "erreur : impossible d'extraire une adresse valide depuis : %s\n"
@@ -25849,16 +25229,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "Que faire de cette adresse ? ([q]uitter|[d]élaisser|[e]diter): "
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
-msgstr "le chemin vers la CA \"%s\" n'existe pas"
+msgstr "Le chemin vers la CA \"%s\" n'existe pas"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25885,136 +25265,199 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "Envoyer ce courriel ? ([y]es|[n]o|[e]dit|[q]uit|[a]ll) : "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Une réponse est nécessaire"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "Le serveur SMTP nécessaire n'est pas défini correctement."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Le serveur ne supporte pas STARTTLS ! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "échec de STARTTLS ! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
-msgstr ""
-"Impossible d'initialiser SMTP. Vérifiez la configuration et utilisez --smtp-"
-"debug."
+msgstr "Impossible d'initialiser SMTP. Vérifiez la configuration et utilisez --smtp-debug."
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
-msgstr "échec de l'envoi de %s\n"
+msgstr "Échec de l'envoi de %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Envoi simulé de %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "%s envoyé\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Simulation OK. Le journal indique :\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK. Le journal indique :\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Résultat : "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Résultat : OK\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "impossible d'ouvrir le fichier %s"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Ajout de cc: %s depuis la ligne '%s'\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Ajout de to: %s depuis la ligne '%s'\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Ajout de cc: %s depuis la ligne '%s'\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(corps) Ajout de cc: %s depuis la ligne '%s'\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Impossible d'exécuter '%s'"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Ajout de %s : %s depuis : '%s'\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) échec de la fermeture du pipe vers '%s'"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "impossible d'envoyer un message comme 7bit"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "codage de transfert invalide"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal : %s : rejeté par le crochet sendemail-validate\n"
+"%s\n"
+"attention : aucun patch envoyé\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "impossible d'ouvrir %s :%s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s : le patch contient une ligne plus longue que 998 caractères"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"fatal : %s : %d est plus long que 998 caractères \n"
+"attention : aucun patch envoyé\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "%s sauté avec un suffix de sauvegarde '%s'.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Souhaitez-vous réellement envoyer %s ?[y|N] : "
 
-#~ msgid "Counting distinct commits in commit graph"
-#~ msgstr "Comptage des commits distincts dans un graphe de commit"
+#~ msgid "--cached and --3way cannot be used together."
+#~ msgstr "--cached et --3way ne peuvent pas être utilisés ensemble."
 
-#~ msgid "the commit graph format cannot write %d commits"
-#~ msgstr "le graphe de commits ne peut pas écrire %d commits"
+#~ msgid "both"
+#~ msgstr "les deux"
+
+#~ msgid "one"
+#~ msgstr "un"
+
+#, c-format
+#~ msgid "Already up to date!"
+#~ msgstr "Déjà à jour !"
+
+#~ msgid "Already up to date. Yeeah!"
+#~ msgstr "Déjà à jour. Ouais !"
+
+#~ msgid "--batch-size option is only for 'repack' subcommand"
+#~ msgstr "l'option --batch-size ne sert que pour la sous-commande 'repack'"
+
+#~ msgid "Percentage by which creation is weighted"
+#~ msgstr "Pourcentage par lequel la création est pondérée"
+
+#~ msgid ""
+#~ "the rebase.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "les support de rebase.useBuiltin a été supprimé !\n"
+#~ "Voir son entrée dans 'git help config' pour plus de détails."
+
+#, perl-format
+#~ msgid "%s: patch contains a line longer than 998 characters"
+#~ msgstr "%s : le patch contient une ligne plus longue que 998 caractères"
+
+#~ msgid "repository contains replace objects; skipping commit-graph"
+#~ msgstr "le dépôt contient des object de remplacement ; saut du graphe de commits"
+
+#~ msgid "repository contains (deprecated) grafts; skipping commit-graph"
+#~ msgstr "le dépôt contient des greffes (déconseillées) ; saut du graphe de commits"
+
+#~ msgid "repository is shallow; skipping commit-graph"
+#~ msgstr "le dépôt est superficiel ; saut du graphe de commit"
+
+#, c-format
+#~ msgid "commit-graph improper chunk offset %08x%08x"
+#~ msgstr "décalage de bloc %08x%08x du graphe de commit inadéquat"
+
+#, c-format
+#~ msgid "commit-graph chunk id %08x appears multiple times"
+#~ msgstr "l'id de bloc de graphe de commit %08x apparaît des multiples fois"
+
+#~ msgid "invalid chunk offset (too large)"
+#~ msgstr "décalage de section invalide (trop grand)"
+
+#~ msgid "Writing chunks to multi-pack-index"
+#~ msgstr "Écriture des sections dans l'index multi-paquet"
diff --git a/po/git.pot b/po/git.pot
index 6b5b503..7889c2c 100644
--- a/po/git.pot
+++ b/po/git.pot
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,9 +23,9 @@
 msgid "Huh (%s)?"
 msgstr ""
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr ""
 
@@ -53,7 +53,7 @@
 msgid "could not stage '%s'"
 msgstr ""
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr ""
 
@@ -69,7 +69,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr ""
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -209,12 +209,12 @@
 msgid "unstaged"
 msgstr ""
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr ""
@@ -660,66 +660,79 @@
 msgid "'git apply' failed"
 msgstr ""
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
 "Disable this message with \"git config advice.%s false\""
 msgstr ""
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr ""
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr ""
 
-#: advice.c:268
+#: advice.c:270
 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."
 msgstr ""
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr ""
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr ""
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr ""
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr ""
 
-#: advice.c:290
+#: 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:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -750,82 +763,78 @@
 msgid "unclosed quote"
 msgstr ""
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr ""
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr ""
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr ""
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr ""
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr ""
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr ""
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr ""
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr ""
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr ""
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr ""
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr ""
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr ""
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr ""
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -836,523 +845,530 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr ""
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr ""
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr ""
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr ""
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr ""
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr ""
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr ""
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr ""
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr ""
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr ""
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr ""
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr ""
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr ""
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr ""
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
 "%.*s"
 msgstr ""
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr ""
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr ""
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr ""
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr ""
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr ""
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr ""
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr ""
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr ""
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr ""
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr ""
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
+msgid "Performing three-way merge...\n"
 msgstr ""
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr ""
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
+msgid "Failed to perform three-way merge...\n"
 msgstr ""
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr ""
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr ""
 
-#: apply.c:3652
-msgid "removal patch leaves file contents"
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
 msgstr ""
 
-#: apply.c:3725
-#, c-format
-msgid "%s: wrong type"
+#: apply.c:3654
+msgid "removal patch leaves file contents"
 msgstr ""
 
 #: apply.c:3727
 #, c-format
+msgid "%s: wrong type"
+msgstr ""
+
+#: apply.c:3729
+#, c-format
 msgid "%s has type %o, expected %o"
 msgstr ""
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr ""
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr ""
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr ""
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr ""
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr ""
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr ""
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr ""
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr ""
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr ""
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr ""
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr ""
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr ""
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr ""
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr ""
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr ""
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr ""
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr ""
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr ""
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr ""
 
-#: apply.c:4557
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr ""
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr ""
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr ""
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr ""
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr ""
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr ""
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr ""
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr ""
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr ""
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr ""
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr ""
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr ""
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr ""
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr ""
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr ""
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr ""
-
-#: apply.c:5022
-msgid "build a temporary index based on embedded index information"
-msgstr ""
-
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
-msgid "paths are separated with NUL character"
-msgstr ""
-
 #: apply.c:5027
-msgid "ensure at least <n> lines of context match"
-msgstr ""
-
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
-msgid "action"
+msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 
 #: apply.c:5029
+msgid "build a temporary index based on embedded index information"
+msgstr ""
+
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+msgid "paths are separated with NUL character"
+msgstr ""
+
+#: apply.c:5034
+msgid "ensure at least <n> lines of context match"
+msgstr ""
+
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
+msgid "action"
+msgstr ""
+
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr ""
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr ""
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr ""
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr ""
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr ""
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr ""
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr ""
 
@@ -1417,141 +1433,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr ""
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr ""
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr ""
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr ""
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr ""
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr ""
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr ""
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr ""
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr ""
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr ""
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr ""
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr ""
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr ""
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr ""
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr ""
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr ""
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr ""
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr ""
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr ""
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr ""
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr ""
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr ""
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr ""
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr ""
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr ""
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr ""
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr ""
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr ""
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr ""
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr ""
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr ""
@@ -1561,12 +1577,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr ""
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr ""
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1634,12 +1650,12 @@
 msgid "a %s revision is needed"
 msgstr ""
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr ""
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr ""
@@ -1657,7 +1673,7 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 
 #: bisect.c:1095
@@ -1677,37 +1693,37 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr ""
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr ""
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr ""
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr ""
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr ""
@@ -1826,12 +1842,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr ""
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr ""
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr ""
@@ -1856,8 +1872,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr ""
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr ""
@@ -1900,296 +1916,309 @@
 msgid "pack-objects died"
 msgstr ""
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr ""
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr ""
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr ""
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr ""
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr ""
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr ""
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr ""
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr ""
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr ""
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr ""
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr ""
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr ""
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr ""
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr ""
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr ""
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr ""
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr ""
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr ""
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr ""
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr ""
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr ""
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr ""
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr ""
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr ""
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr ""
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr ""
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr ""
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr ""
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr ""
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr ""
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr ""
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr ""
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr ""
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr ""
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr ""
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr ""
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr ""
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr ""
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr ""
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr ""
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr ""
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr ""
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr ""
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr ""
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr ""
@@ -2211,27 +2240,27 @@
 "\"git config advice.graftFileDeprecated false\""
 msgstr ""
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr ""
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr ""
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2242,7 +2271,7 @@
 msgid "memory exhausted"
 msgstr ""
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2252,289 +2281,333 @@
 "This might be due to circular includes."
 msgstr ""
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr ""
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr ""
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr ""
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr ""
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr ""
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr ""
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr ""
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr ""
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr ""
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr ""
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr ""
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr ""
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr ""
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr ""
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr ""
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr ""
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr ""
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr ""
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr ""
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr ""
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr ""
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr ""
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr ""
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr ""
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr ""
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr ""
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr ""
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr ""
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr ""
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr ""
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr ""
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr ""
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr ""
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr ""
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr ""
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr ""
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr ""
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr ""
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr ""
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr ""
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr ""
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr ""
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr ""
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr ""
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr ""
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr ""
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr ""
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr ""
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr ""
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr ""
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr ""
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr ""
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr ""
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr ""
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr ""
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr ""
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr ""
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr ""
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr ""
@@ -2592,52 +2665,52 @@
 msgid "protocol error: unexpected '%s'"
 msgstr ""
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr ""
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr ""
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr ""
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr ""
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr ""
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr ""
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr ""
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr ""
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
 "Connecting to %s (port %s) ... "
 msgstr ""
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2645,61 +2718,65 @@
 msgstr ""
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr ""
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr ""
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr ""
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr ""
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr ""
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr ""
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr ""
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr ""
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr ""
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr ""
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr ""
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr ""
 
@@ -2715,119 +2792,119 @@
 msgid "failed to close rev-list's stdin"
 msgstr ""
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr ""
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr ""
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr ""
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr ""
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
 "working-tree-encoding."
 msgstr ""
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr ""
 
-#: convert.c:306
+#: 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."
 msgstr ""
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr ""
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr ""
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr ""
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr ""
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr ""
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr ""
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr ""
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr ""
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr ""
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr ""
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr ""
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr ""
@@ -2952,23 +3029,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr ""
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr ""
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr ""
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr ""
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr ""
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr ""
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr ""
 
@@ -3023,532 +3105,544 @@
 "%s"
 msgstr ""
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr ""
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr ""
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr ""
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr ""
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr ""
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
 msgstr ""
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr ""
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr ""
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr ""
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr ""
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr ""
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr ""
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr ""
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr ""
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr ""
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr ""
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr ""
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr ""
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr ""
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr ""
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr ""
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr ""
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr ""
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr ""
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr ""
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr ""
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr ""
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr ""
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr ""
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr ""
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr ""
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr ""
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr ""
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr ""
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr ""
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr ""
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr ""
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr ""
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr ""
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr ""
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr ""
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr ""
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr ""
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr ""
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr ""
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr ""
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr ""
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr ""
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr ""
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr ""
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr ""
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr ""
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr ""
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr ""
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr ""
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr ""
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr ""
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr ""
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr ""
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr ""
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr ""
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr ""
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr ""
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr ""
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr ""
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr ""
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr ""
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr ""
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr ""
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr ""
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr ""
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr ""
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr ""
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr ""
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr ""
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr ""
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr ""
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr ""
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr ""
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr ""
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr ""
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr ""
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr ""
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr ""
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr ""
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr ""
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr ""
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr ""
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr ""
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr ""
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr ""
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr ""
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr ""
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr ""
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr ""
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr ""
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr ""
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr ""
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3559,10 +3653,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr ""
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr ""
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr ""
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3587,35 +3686,35 @@
 msgid "disabling cone pattern matching"
 msgstr ""
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr ""
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr ""
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr ""
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr ""
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr ""
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr ""
@@ -3625,21 +3724,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr ""
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr ""
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr ""
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr ""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr ""
@@ -3649,259 +3748,271 @@
 msgid "too many args to run %s"
 msgstr ""
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr ""
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr ""
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr ""
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr ""
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr ""
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr ""
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr ""
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr ""
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr ""
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr ""
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr ""
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr ""
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr ""
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr ""
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr ""
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr ""
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr ""
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr ""
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr ""
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr ""
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr ""
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr ""
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr ""
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr ""
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr ""
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr ""
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr ""
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr ""
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr ""
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr ""
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr ""
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr ""
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr ""
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr ""
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr ""
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr ""
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr ""
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr ""
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr ""
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr ""
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr ""
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr ""
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr ""
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr ""
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr ""
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr ""
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr ""
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr ""
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr ""
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr ""
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr ""
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr ""
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr ""
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr ""
 
@@ -3910,24 +4021,24 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr ""
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
 msgstr ""
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr ""
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr ""
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr ""
@@ -3997,7 +4108,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr ""
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr ""
@@ -4129,47 +4240,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr ""
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr ""
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr ""
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr ""
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr ""
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr ""
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr ""
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr ""
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr ""
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr ""
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr ""
@@ -4184,7 +4300,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr ""
@@ -4206,20 +4322,242 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr ""
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr ""
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr ""
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr ""
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr ""
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr ""
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr ""
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr ""
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr ""
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr ""
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr ""
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr ""
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr ""
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, c-format
+msgid ""
+"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
+"was renamed in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr ""
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr ""
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr ""
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr ""
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr ""
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr ""
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+
+#. 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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr ""
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "  %s"
 msgstr ""
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
 msgstr ""
 
 #: merge-recursive.c:356
@@ -4236,202 +4574,162 @@
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
 
-#: merge-recursive.c:874
+#: merge-recursive.c:876
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr ""
 
-#: merge-recursive.c:885
+#: merge-recursive.c:887
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr ""
 
-#: merge-recursive.c:899 merge-recursive.c:918
+#: merge-recursive.c:901 merge-recursive.c:920
 msgid ": perhaps a D/F conflict?"
 msgstr ""
 
-#: merge-recursive.c:908
+#: merge-recursive.c:910
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 
-#: merge-recursive.c:949 builtin/cat-file.c:41
+#: merge-recursive.c:951 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:954
+#: merge-recursive.c:956
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:979
+#: merge-recursive.c:981
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr ""
 
-#: merge-recursive.c:990
+#: merge-recursive.c:992
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr ""
 
-#: merge-recursive.c:995
+#: merge-recursive.c:997
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr ""
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr ""
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr ""
-
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1227 merge-recursive.c:1239
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr ""
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1230 merge-recursive.c:1242
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr ""
 
-#: merge-recursive.c:1251
+#: merge-recursive.c:1265
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 
-#: merge-recursive.c:1255
+#: merge-recursive.c:1269
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr ""
 
-#: merge-recursive.c:1256
+#: merge-recursive.c:1270
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-
-#: merge-recursive.c:1268
+#: merge-recursive.c:1282
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr ""
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr ""
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr ""
-
-#: merge-recursive.c:1402
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree."
 msgstr ""
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree."
 msgstr ""
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree at %s."
 msgstr ""
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree at %s."
 msgstr ""
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr ""
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr ""
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr ""
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
 "\"->\"%s\" in \"%s\"%s"
 msgstr ""
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr ""
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4439,161 +4737,86 @@
 "getting a majority of the files."
 msgstr ""
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
 ">%s in %s"
 msgstr ""
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr ""
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr ""
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr ""
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr ""
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr ""
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr ""
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr ""
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr ""
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr ""
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-
-#: merge-recursive.c:3225
-#, c-format
-msgid ""
-"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
-"was renamed in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr ""
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr ""
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr ""
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr ""
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr ""
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr ""
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr ""
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr ""
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr ""
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr ""
 
@@ -4601,184 +4824,195 @@
 msgid "failed to read the cache"
 msgstr ""
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr ""
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr ""
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr ""
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr ""
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr ""
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr ""
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr ""
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr ""
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr ""
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr ""
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr ""
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr ""
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr ""
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr ""
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr ""
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr ""
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr ""
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr ""
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr ""
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
 msgstr ""
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr ""
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr ""
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr ""
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr ""
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr ""
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr ""
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr ""
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr ""
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr ""
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr ""
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr ""
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr ""
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr ""
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr ""
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr ""
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr ""
@@ -4819,6 +5053,342 @@
 msgid "Bad %s value: '%s'"
 msgstr ""
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr ""
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr ""
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr ""
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr ""
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr ""
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr ""
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr ""
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr ""
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr ""
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr ""
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr ""
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr ""
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr ""
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr ""
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr ""
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr ""
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr ""
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr ""
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr ""
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr ""
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr ""
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr ""
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr ""
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr ""
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr ""
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr ""
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr ""
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr ""
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr ""
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr ""
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr ""
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr ""
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr ""
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr ""
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr ""
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr ""
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr ""
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr ""
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr ""
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr ""
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr ""
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr ""
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr ""
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr ""
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr ""
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr ""
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr ""
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr ""
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr ""
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr ""
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr ""
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr ""
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr ""
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr ""
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr ""
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr ""
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr ""
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -4829,36 +5399,85 @@
 msgid "object %s is a %s, not a %s"
 msgstr ""
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr ""
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr ""
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr ""
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr ""
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr ""
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr ""
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr ""
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr ""
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr ""
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr ""
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr ""
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr ""
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr ""
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr ""
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr ""
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr ""
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -4923,31 +5542,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr ""
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr ""
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr ""
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr ""
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr ""
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr ""
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr ""
@@ -4955,17 +5574,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr ""
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr ""
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr ""
 
@@ -4974,78 +5593,78 @@
 msgid "Could not make %s writable by group"
 msgstr ""
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr ""
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr ""
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr ""
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr ""
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
 msgstr ""
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr ""
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr ""
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr ""
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr ""
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr ""
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr ""
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr ""
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr ""
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr ""
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr ""
@@ -5066,7 +5685,7 @@
 msgid "flush packet write failed"
 msgstr ""
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr ""
 
@@ -5074,47 +5693,48 @@
 msgid "packet write with format failed"
 msgstr ""
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
 msgstr ""
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr ""
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr ""
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr ""
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr ""
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr ""
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr ""
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr ""
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr ""
 
@@ -5135,234 +5755,246 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr ""
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr ""
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr ""
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr ""
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr ""
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr ""
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr ""
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr ""
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr ""
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr ""
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr ""
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr ""
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr ""
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr ""
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr ""
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr ""
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr ""
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr ""
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr ""
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr ""
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr ""
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr ""
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr ""
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr ""
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr ""
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr ""
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr ""
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr ""
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr ""
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr ""
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr ""
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr ""
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr ""
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr ""
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr ""
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr ""
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr ""
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr ""
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr ""
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr ""
@@ -5388,7 +6020,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5397,31 +6032,31 @@
 "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"
+".       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 ""
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
 msgstr ""
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5430,33 +6065,33 @@
 "\n"
 msgstr ""
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
 "\n"
 msgstr ""
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr ""
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr ""
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
 "Dropped commits (newer to older):\n"
 msgstr ""
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5467,14 +6102,14 @@
 "\n"
 msgstr ""
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 ""
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr ""
 
@@ -5493,232 +6128,247 @@
 msgid "ahead %d, behind %d"
 msgstr ""
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr ""
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr ""
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr ""
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr ""
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr ""
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr ""
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr ""
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr ""
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr ""
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr ""
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr ""
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr ""
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr ""
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr ""
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr ""
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr ""
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr ""
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr ""
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr ""
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr ""
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr ""
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr ""
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr ""
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr ""
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr ""
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr ""
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr ""
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr ""
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr ""
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr ""
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr ""
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
+msgid "(no branch, rebasing %s)"
 msgstr ""
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
+msgid "(no branch, rebasing detached HEAD %s)"
 msgstr ""
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
+msgid "(no branch, bisect started on %s)"
 msgstr ""
 
-#: ref-filter.c:1565
-msgid "no branch"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
 msgstr ""
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr ""
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr ""
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr ""
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr ""
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr ""
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr ""
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr ""
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr ""
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr ""
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr ""
@@ -5758,50 +6408,50 @@
 msgid "ignoring dangling symref %s"
 msgstr ""
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr ""
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr ""
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr ""
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr ""
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr ""
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr ""
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr ""
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr ""
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr ""
@@ -5865,12 +6515,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr ""
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr ""
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -5879,7 +6529,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5893,7 +6543,7 @@
 "Neither worked, so we gave up. You must fully qualify the ref."
 msgstr ""
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5901,7 +6551,7 @@
 "'%s:refs/heads/%s'?"
 msgstr ""
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5909,7 +6559,7 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5917,7 +6567,7 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5925,114 +6575,114 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr ""
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr ""
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr ""
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr ""
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr ""
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr ""
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr ""
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr ""
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr ""
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr ""
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr ""
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr ""
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr ""
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr ""
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr ""
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr ""
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6040,11 +6690,11 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6055,11 +6705,11 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr ""
@@ -6079,96 +6729,96 @@
 msgid "replace depth too high for object %s"
 msgstr ""
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr ""
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr ""
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr ""
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr ""
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr ""
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr ""
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr ""
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr ""
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr ""
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr ""
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr ""
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr ""
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr ""
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr ""
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr ""
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr ""
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr ""
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr ""
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr ""
 
@@ -6176,171 +6826,174 @@
 msgid "could not determine HEAD revision"
 msgstr ""
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr ""
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr ""
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr ""
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr ""
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr ""
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr ""
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr ""
 
-#: run-command.c:1335
+#: 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 ""
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr ""
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr ""
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr ""
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr ""
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr ""
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr ""
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr ""
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
 msgstr ""
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr ""
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr ""
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr ""
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr ""
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr ""
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr ""
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr ""
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr ""
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr ""
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
 msgstr ""
 
-#: sequencer.c:421
+#: sequencer.c:422
 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 ""
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr ""
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr ""
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr ""
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr ""
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr ""
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr ""
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr ""
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr ""
@@ -6348,65 +7001,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr ""
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr ""
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr ""
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr ""
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr ""
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr ""
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr ""
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr ""
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr ""
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr ""
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr ""
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr ""
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr ""
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6423,11 +7076,11 @@
 "  git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr ""
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6442,7 +7095,7 @@
 "    git commit --amend --reset-author\n"
 msgstr ""
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6456,354 +7109,358 @@
 "    git commit --amend --reset-author\n"
 msgstr ""
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr ""
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr ""
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr ""
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr ""
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr ""
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr ""
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr ""
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr ""
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr ""
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr ""
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr ""
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr ""
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr ""
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr ""
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr ""
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr ""
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr ""
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr ""
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr ""
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr ""
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr ""
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr ""
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr ""
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr ""
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr ""
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr ""
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr ""
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr ""
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr ""
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr ""
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr ""
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr ""
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr ""
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr ""
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr ""
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr ""
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr ""
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr ""
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr ""
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr ""
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr ""
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr ""
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr ""
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr ""
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr ""
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr ""
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr ""
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr ""
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr ""
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr ""
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr ""
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr ""
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr ""
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr ""
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr ""
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr ""
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr ""
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr ""
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr ""
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr ""
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr ""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr ""
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr ""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr ""
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr ""
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr ""
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr ""
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr ""
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr ""
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr ""
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr ""
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr ""
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr ""
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
 msgstr ""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr ""
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -6815,27 +7472,27 @@
 "  git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr ""
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr ""
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr ""
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -6845,11 +7502,11 @@
 "\n"
 msgstr ""
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr ""
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -6860,90 +7517,90 @@
 "\n"
 msgstr ""
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr ""
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr ""
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr ""
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr ""
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr ""
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr ""
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr ""
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr ""
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr ""
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr ""
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr ""
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr ""
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr ""
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr ""
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr ""
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -6951,29 +7608,29 @@
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr ""
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr ""
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr ""
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr ""
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6986,108 +7643,108 @@
 "    git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr ""
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr ""
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr ""
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr ""
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr ""
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr ""
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr ""
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr ""
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr ""
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr ""
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
 "first and then run 'git rebase --continue' again."
 msgstr ""
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr ""
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr ""
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr ""
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr ""
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr ""
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr ""
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr ""
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr ""
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr ""
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr ""
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr ""
 
@@ -7220,399 +7877,76 @@
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr ""
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr ""
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr ""
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr ""
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr ""
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr ""
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr ""
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr ""
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr ""
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr ""
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr ""
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr ""
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr ""
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr ""
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr ""
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr ""
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr ""
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr ""
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr ""
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr ""
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr ""
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr ""
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr ""
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr ""
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr ""
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr ""
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr ""
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr ""
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr ""
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr ""
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr ""
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr ""
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr ""
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr ""
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr ""
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr ""
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr ""
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr ""
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr ""
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr ""
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr ""
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr ""
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr ""
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr ""
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr ""
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr ""
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr ""
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr ""
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr ""
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr ""
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr ""
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr ""
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr ""
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr ""
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr ""
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr ""
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr ""
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr ""
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr ""
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr ""
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr ""
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr ""
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr ""
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr ""
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
+msgid "index entry is a directory, but not sparse (%08x)"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -7620,20 +7954,20 @@
 msgstr[1] ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr ""
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr ""
@@ -7680,147 +8014,147 @@
 msgid "staging updated .gitmodules failed"
 msgstr ""
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr ""
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr ""
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr ""
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
 msgstr ""
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr ""
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr ""
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr ""
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr ""
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr ""
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
 "%s"
 msgstr ""
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr ""
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr ""
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr ""
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr ""
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr ""
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr ""
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr ""
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr ""
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr ""
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr ""
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr ""
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -7828,65 +8162,71 @@
 "'%s'\n"
 msgstr ""
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr ""
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr ""
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr ""
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr ""
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr ""
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr ""
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr ""
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr ""
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr ""
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr ""
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr ""
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr ""
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr ""
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr ""
@@ -7933,7 +8273,7 @@
 msgid "error while running fast-import"
 msgstr ""
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr ""
@@ -7951,7 +8291,7 @@
 msgid "invalid remote service path"
 msgstr ""
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr ""
 
@@ -7960,120 +8300,124 @@
 msgid "can't connect to subservice %s"
 msgstr ""
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr ""
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr ""
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr ""
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr ""
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr ""
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr ""
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr ""
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr ""
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr ""
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr ""
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr ""
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
 "Perhaps you should specify a branch.\n"
 msgstr ""
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr ""
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr ""
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr ""
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr ""
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr ""
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr ""
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr ""
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr ""
 
@@ -8092,44 +8436,48 @@
 msgid "transport: invalid depth option '%s'"
 msgstr ""
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr ""
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr ""
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr ""
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr ""
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr ""
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8145,127 +8493,119 @@
 "\n"
 msgstr ""
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr ""
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr ""
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr ""
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr ""
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr ""
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr ""
 
-#: unpack-trees.c:113
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by checkout:\n"
-"%%sPlease commit your changes or stash them before you switch branches."
-msgstr ""
-
 #: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
-"%%s"
+"%%sPlease commit your changes or stash them before you switch branches."
 msgstr ""
 
-#: unpack-trees.c:118
+#: unpack-trees.c:117
 #, c-format
 msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"%%sPlease commit your changes or stash them before you merge."
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%s"
 msgstr ""
 
 #: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
-"%%s"
+"%%sPlease commit your changes or stash them before you merge."
 msgstr ""
 
-#: unpack-trees.c:123
+#: unpack-trees.c:122
 #, c-format
 msgid ""
-"Your local changes to the following files would be overwritten by %s:\n"
-"%%sPlease commit your changes or stash them before you %s."
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%s"
 msgstr ""
 
 #: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
+"%%sPlease commit your changes or stash them before you %s."
+msgstr ""
+
+#: unpack-trees.c:127
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
 "%s"
 msgstr ""
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:139
-#, c-format
-msgid ""
-"The following untracked working tree files would be removed by merge:\n"
-"%%sPlease move or remove them before you merge."
-msgstr ""
-
 #: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
-"%%s"
+"%%sPlease move or remove them before you merge."
 msgstr ""
 
-#: unpack-trees.c:144
+#: unpack-trees.c:143
 #, c-format
 msgid ""
-"The following untracked working tree files would be removed by %s:\n"
-"%%sPlease move or remove them before you %s."
+"The following untracked working tree files would be removed by merge:\n"
+"%%s"
 msgstr ""
 
 #: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
-"%%s"
+"%%sPlease move or remove them before you %s."
 msgstr ""
 
-#: unpack-trees.c:152
+#: unpack-trees.c:148
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%sPlease move or remove them before you switch branches."
+"The following untracked working tree files would be removed by %s:\n"
+"%%s"
 msgstr ""
 
 #: unpack-trees.c:154
@@ -8273,50 +8613,58 @@
 msgid ""
 "The following untracked working tree files would be overwritten by "
 "checkout:\n"
-"%%s"
+"%%sPlease move or remove them before you switch branches."
 msgstr ""
 
-#: unpack-trees.c:157
+#: unpack-trees.c:156
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by merge:\n"
-"%%sPlease move or remove them before you merge."
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%s"
 msgstr ""
 
 #: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
-"%%s"
+"%%sPlease move or remove them before you merge."
 msgstr ""
 
-#: unpack-trees.c:162
+#: unpack-trees.c:161
 #, c-format
 msgid ""
-"The following untracked working tree files would be overwritten by %s:\n"
-"%%sPlease move or remove them before you %s."
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%s"
 msgstr ""
 
 #: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+
+#: unpack-trees.c:166
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr ""
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
 "%s"
 msgstr ""
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -8324,14 +8672,14 @@
 "%s"
 msgstr ""
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
 "%s"
 msgstr ""
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -8339,34 +8687,39 @@
 "%s"
 msgstr ""
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr ""
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
 "reapply`.\n"
 msgstr ""
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr ""
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
 "colliding group is in the working tree:\n"
 msgstr ""
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr ""
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr ""
 
@@ -8403,72 +8756,102 @@
 msgid "Fetching objects"
 msgstr ""
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr ""
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr ""
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr ""
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr ""
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr ""
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr ""
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ""
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr ""
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr ""
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr ""
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr ""
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr ""
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr ""
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr ""
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr ""
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr ""
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr ""
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr ""
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr ""
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr ""
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr ""
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -8512,11 +8895,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr ""
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr ""
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr ""
 
@@ -8614,28 +8997,28 @@
 msgid "untracked content, "
 msgstr ""
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] ""
 msgstr[1] ""
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr ""
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr ""
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
 msgstr ""
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -8643,247 +9026,255 @@
 "You can use '--no-ahead-behind' to avoid this.\n"
 msgstr ""
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr ""
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr ""
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr ""
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr ""
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr ""
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr ""
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr ""
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr ""
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr ""
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr ""
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr ""
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] ""
 msgstr[1] ""
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr ""
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr ""
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] ""
 msgstr[1] ""
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr ""
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr ""
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr ""
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr ""
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr ""
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr ""
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr ""
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr ""
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr ""
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr ""
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr ""
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr ""
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr ""
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr ""
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr ""
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr ""
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr ""
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr ""
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -8891,97 +9282,115 @@
 "new files yourself (see 'git help status')."
 msgstr ""
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr ""
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr ""
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr ""
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr ""
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr ""
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr ""
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr ""
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr ""
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr ""
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr ""
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr ""
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr ""
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr ""
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr ""
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr ""
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr ""
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr ""
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr ""
@@ -8990,126 +9399,131 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr ""
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr ""
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr ""
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr ""
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr ""
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr ""
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr ""
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr ""
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr ""
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr ""
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr ""
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr ""
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr ""
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr ""
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr ""
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr ""
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr ""
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr ""
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr ""
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr ""
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr ""
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr ""
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr ""
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr ""
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr ""
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr ""
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9127,187 +9541,191 @@
 "See \"git help submodule\" for more information."
 msgstr ""
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr ""
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
 "\"git config advice.addIgnoredFile false\""
 msgstr ""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr ""
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr ""
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr ""
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr ""
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr ""
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr ""
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr ""
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr ""
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr ""
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr ""
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
 "\"git config advice.addEmptyPathspec false\""
 msgstr ""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr ""
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr ""
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr ""
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr ""
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr ""
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr ""
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr ""
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr ""
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr ""
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr ""
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr ""
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr ""
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr ""
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr ""
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr ""
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr ""
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr ""
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr ""
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr ""
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr ""
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr ""
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr ""
 
@@ -9315,46 +9733,46 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 
-#: builtin/am.c:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr ""
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr ""
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr ""
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr ""
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr ""
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -9362,197 +9780,201 @@
 "You might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr ""
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr ""
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr ""
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr ""
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr ""
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr ""
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr ""
 
-#: builtin/am.c:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr ""
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr ""
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr ""
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr ""
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr ""
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr ""
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr ""
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr ""
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr ""
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr ""
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr ""
+
+#: 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
 msgid "pass it through git-apply"
 msgstr ""
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr ""
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr ""
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr ""
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr ""
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr ""
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr ""
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr ""
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
 msgstr ""
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
 msgstr ""
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr ""
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr ""
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr ""
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr ""
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr ""
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr ""
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
 msgstr ""
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr ""
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
 "Use \"git am --abort\" to remove it."
 msgstr ""
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr ""
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr ""
 
@@ -9595,123 +10017,115 @@
 msgstr ""
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 msgstr ""
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
 "[<paths>...]"
 msgstr ""
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr ""
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr ""
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr ""
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr ""
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr ""
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr ""
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr ""
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr ""
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr ""
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr ""
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr ""
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr ""
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr ""
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
 "You can use \"git bisect %s\" and \"git bisect %s\" for that."
 msgstr ""
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -9719,7 +10133,7 @@
 "You can use \"git bisect %s\" and \"git bisect %s\" for that."
 msgstr ""
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr ""
@@ -9728,74 +10142,74 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr ""
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr ""
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
 "and %s for the new state.\n"
 msgstr ""
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
 "Supported options are: --term-good|--term-old and --term-bad|--term-new."
 msgstr ""
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr ""
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr ""
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr ""
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr ""
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr ""
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr ""
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr ""
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr ""
 
@@ -9803,90 +10217,105 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr ""
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr ""
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr ""
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr ""
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr ""
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr ""
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr ""
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr ""
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr ""
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr ""
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr ""
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr ""
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr ""
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr ""
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr ""
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr ""
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr ""
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr ""
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr ""
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr ""
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr ""
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr ""
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr ""
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
 msgstr ""
 
 #: builtin/blame.c:32
@@ -9906,137 +10335,140 @@
 msgid "must end with a color"
 msgstr ""
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr ""
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr ""
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr ""
 
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr ""
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr ""
+
 #: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
+msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
+msgid "show work cost statistics"
 msgstr ""
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+#: 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
+msgid "force progress reporting"
 msgstr ""
 
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
+msgid "show output score for blame entries"
 msgstr ""
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
+msgid "show original filename (Default: auto)"
 msgstr ""
 
 #: builtin/blame.c:874
-msgid "Show output score for blame entries"
+msgid "show original linenumber (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
+msgid "show in a format designed for machine consumption"
 msgstr ""
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+msgid "show porcelain format with per-line commit information"
 msgstr ""
 
 #: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
+msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
+msgid "show raw timestamp (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+msgid "show long commit SHA1 (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
+msgid "suppress author name and timestamp (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
+msgid "show author email instead of name (Default: off)"
 msgstr ""
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
+msgid "ignore whitespace differences"
 msgstr ""
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr ""
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr ""
-
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr ""
 
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr ""
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr ""
+
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr ""
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr ""
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr ""
 
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr ""
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr ""
+
 #: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
+msgid "use <file>'s contents as the final image"
 msgstr ""
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr ""
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr ""
-
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr ""
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr ""
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr ""
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr ""
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr ""
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr ""
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 
@@ -10048,18 +10480,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr ""
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr ""
 
@@ -10121,117 +10553,107 @@
 msgid "Update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr ""
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr ""
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr ""
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr ""
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr ""
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr ""
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr ""
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr ""
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr ""
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr ""
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr ""
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr ""
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr ""
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr ""
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr ""
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr ""
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr ""
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr ""
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr ""
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr ""
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr ""
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -10239,215 +10661,215 @@
 "Lines starting with '%c' will be stripped.\n"
 msgstr ""
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr ""
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr ""
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr ""
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr ""
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr ""
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr ""
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr ""
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr ""
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr ""
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr ""
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr ""
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr ""
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr ""
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr ""
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr ""
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr ""
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr ""
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr ""
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr ""
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr ""
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr ""
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr ""
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr ""
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr ""
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr ""
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr ""
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr ""
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr ""
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr ""
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr ""
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr ""
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr ""
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr ""
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr ""
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr ""
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr ""
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr ""
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr ""
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr ""
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr ""
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr ""
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr ""
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr ""
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr ""
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr ""
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr ""
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr ""
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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 ""
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -10497,38 +10919,38 @@
 "You can delete any lines you don't wish to share.\n"
 msgstr ""
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr ""
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr ""
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr ""
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr ""
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr ""
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr ""
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr ""
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr ""
@@ -10549,19 +10971,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr ""
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr ""
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr ""
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr ""
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 
@@ -10699,8 +11121,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr ""
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr ""
 
@@ -10712,27 +11134,27 @@
 msgid "ignore index when checking"
 msgstr ""
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr ""
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr ""
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr ""
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr ""
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr ""
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr ""
 
@@ -10753,215 +11175,219 @@
 msgid "no contacts specified"
 msgstr ""
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
 msgstr ""
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr ""
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr ""
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr ""
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr ""
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr ""
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr ""
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr ""
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr ""
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr ""
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr ""
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr ""
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr ""
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr ""
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr ""
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr ""
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr ""
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr ""
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr ""
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr ""
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr ""
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr ""
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr ""
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr ""
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr ""
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
-#, c-format
-msgid "path '%s' does not have our version"
-msgstr ""
-
 #: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
+msgid "path '%s' does not have our version"
+msgstr ""
+
+#: builtin/checkout.c:192 builtin/checkout.c:231
+#, c-format
 msgid "path '%s' does not have their version"
 msgstr ""
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr ""
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr ""
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr ""
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr ""
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr ""
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr ""
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr ""
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr ""
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr ""
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr ""
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr ""
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr ""
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr ""
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -10976,7 +11402,7 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -10993,26 +11419,26 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr ""
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr ""
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr ""
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
 "Please use -- (and optionally --no-guess) to disambiguate"
 msgstr ""
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -11024,287 +11450,280 @@
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr ""
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr ""
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr ""
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr ""
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr ""
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr ""
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr ""
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr ""
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr ""
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr ""
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr ""
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr ""
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr ""
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr ""
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr ""
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr ""
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr ""
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr ""
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr ""
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr ""
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr ""
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr ""
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr ""
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr ""
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr ""
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr ""
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr ""
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr ""
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr ""
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr ""
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr ""
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr ""
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr ""
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr ""
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr ""
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr ""
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr ""
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr ""
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr ""
 
@@ -11333,11 +11752,6 @@
 msgid "Would skip repository %s\n"
 msgstr ""
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr ""
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -11429,8 +11843,8 @@
 msgstr ""
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr ""
@@ -11467,347 +11881,352 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr ""
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr ""
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr ""
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr ""
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr ""
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr ""
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr ""
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr ""
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr ""
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr ""
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr ""
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr ""
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr ""
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr ""
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr ""
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr ""
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr ""
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr ""
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr ""
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr ""
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr ""
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr ""
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr ""
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr ""
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr ""
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr ""
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr ""
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr ""
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr ""
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr ""
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr ""
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr ""
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr ""
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
 msgstr ""
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr ""
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr ""
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr ""
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr ""
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr ""
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr ""
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr ""
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
 "and retry with 'git restore --source=HEAD :/'\n"
 msgstr ""
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr ""
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr ""
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr ""
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr ""
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr ""
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr ""
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr ""
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr ""
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr ""
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr ""
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr ""
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr ""
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr ""
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr ""
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr ""
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr ""
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr ""
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr ""
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr ""
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr ""
 
@@ -11824,19 +12243,19 @@
 msgstr ""
 
 #: builtin/column.c:30
-msgid "Maximum width"
+msgid "maximum width"
 msgstr ""
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
+msgid "padding space on left border"
 msgstr ""
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
+msgid "padding space on right border"
 msgstr ""
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
+msgid "padding space between columns"
 msgstr ""
 
 #: builtin/column.c:51
@@ -11861,13 +12280,13 @@
 msgstr ""
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr ""
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+msgid "the object directory to store the graph"
 msgstr ""
 
 #: builtin/commit-graph.c:83
@@ -11953,7 +12372,7 @@
 msgid "duplicate parent %s ignored"
 msgstr ""
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr ""
@@ -11981,13 +12400,13 @@
 msgid "id of a parent commit object"
 msgstr ""
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr ""
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr ""
 
@@ -11995,7 +12414,7 @@
 msgid "read commit log message from file"
 msgstr ""
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr ""
@@ -12053,110 +12472,115 @@
 "\n"
 msgstr ""
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr ""
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr ""
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr ""
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr ""
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr ""
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr ""
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr ""
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr ""
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr ""
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr ""
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr ""
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr ""
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr ""
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr ""
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr ""
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr ""
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr ""
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr ""
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr ""
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr ""
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr ""
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr ""
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr ""
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr ""
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -12165,7 +12589,7 @@
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -12174,14 +12598,14 @@
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:868
+#: 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 ""
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -12189,320 +12613,369 @@
 "An empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr ""
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr ""
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr ""
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr ""
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr ""
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr ""
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr ""
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr ""
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr ""
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr ""
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr ""
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr ""
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr ""
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr ""
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr ""
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr ""
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr ""
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr ""
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr ""
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr ""
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr ""
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr ""
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr ""
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr ""
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr ""
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr ""
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr ""
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr ""
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr ""
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
 msgstr ""
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr ""
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr ""
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr ""
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr ""
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr ""
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr ""
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr ""
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr ""
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr ""
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr ""
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr ""
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
 msgstr ""
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr ""
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr ""
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr ""
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr ""
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr ""
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr ""
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr ""
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr ""
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr ""
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr ""
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr ""
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr ""
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr ""
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr ""
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr ""
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr ""
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr ""
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr ""
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr ""
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr ""
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr ""
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr ""
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr ""
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -12828,7 +13301,7 @@
 msgid "print sizes in human readable format"
 msgstr ""
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -12837,11 +13310,11 @@
 "\tchmod 0700 %s"
 msgstr ""
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr ""
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
 
@@ -13020,152 +13493,152 @@
 msgid "--merge-base only works with two commits"
 msgstr ""
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr ""
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr ""
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr ""
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr ""
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr ""
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr ""
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr ""
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr ""
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr ""
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr ""
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr ""
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr ""
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr ""
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
 msgstr ""
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr ""
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr ""
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr ""
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr ""
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr ""
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr ""
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr ""
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr ""
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr ""
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr ""
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
 msgstr ""
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr ""
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr ""
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr ""
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr ""
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr ""
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr ""
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr ""
 
@@ -13226,39 +13699,39 @@
 msgstr ""
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
+msgid "dump marks to this file"
 msgstr ""
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
 msgstr ""
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
+msgid "import marks from this file if it exists"
 msgstr ""
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
+msgid "fake a tagger when tags lack one"
 msgstr ""
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
+msgid "output full tree for each commit"
 msgstr ""
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
+msgid "use the done feature to terminate the stream"
 msgstr ""
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
+msgid "skip output of blob data"
 msgstr ""
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr ""
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
+msgid "apply refspec to exported refs"
 msgstr ""
 
 #: builtin/fast-export.c:1224
@@ -13274,15 +13747,15 @@
 msgstr ""
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
+msgid "show original object ids of blobs/commits"
 msgstr ""
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
+msgid "label tags with mark ids"
 msgstr ""
 
 #: builtin/fast-export.c:1256
@@ -13322,7 +13795,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr ""
@@ -13343,196 +13816,208 @@
 msgid "git fetch --all [<options>]"
 msgstr ""
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr ""
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr ""
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr ""
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr ""
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr ""
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr ""
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr ""
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr ""
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr ""
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr ""
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr ""
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr ""
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr ""
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr ""
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr ""
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr ""
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr ""
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr ""
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr ""
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr ""
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr ""
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr ""
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr ""
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr ""
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr ""
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr ""
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr ""
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr ""
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr ""
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr ""
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr ""
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr ""
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr ""
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr ""
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr ""
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr ""
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr ""
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr ""
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr ""
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr ""
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr ""
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 msgid ""
 "Fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
 "flag or run 'git config fetch.showForcedUpdates true'."
 msgstr ""
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -13541,148 +14026,160 @@
 " to avoid this check.\n"
 msgstr ""
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr ""
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr ""
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr ""
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr ""
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr ""
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr ""
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr ""
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr ""
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr ""
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr ""
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr ""
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr ""
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr ""
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
 msgstr ""
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr ""
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr ""
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr ""
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr ""
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr ""
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr ""
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr ""
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr ""
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr ""
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr ""
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr ""
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr ""
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr ""
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr ""
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr ""
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr ""
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
 
@@ -13727,47 +14224,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr ""
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr ""
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr ""
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr ""
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr ""
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr ""
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr ""
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr ""
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr ""
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr ""
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr ""
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr ""
 
@@ -13787,243 +14284,243 @@
 msgid "missing --config=<config>"
 msgstr ""
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr ""
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr ""
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr ""
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr ""
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr ""
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
 "              to %7s %s"
 msgstr ""
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr ""
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr ""
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr ""
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr ""
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr ""
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr ""
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr ""
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr ""
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr ""
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr ""
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr ""
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr ""
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr ""
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr ""
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr ""
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr ""
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr ""
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr ""
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr ""
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr ""
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr ""
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr ""
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr ""
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr ""
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr ""
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr ""
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr ""
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr ""
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr ""
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr ""
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr ""
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr ""
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr ""
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr ""
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr ""
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr ""
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr ""
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr ""
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr ""
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr ""
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr ""
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr ""
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr ""
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr ""
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr ""
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr ""
@@ -14032,27 +14529,27 @@
 msgid "git gc [<options>]"
 msgstr ""
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr ""
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr ""
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr ""
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr ""
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -14062,190 +14559,217 @@
 "%s"
 msgstr ""
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr ""
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr ""
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr ""
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr ""
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr ""
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr ""
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr ""
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr ""
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr ""
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr ""
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr ""
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr ""
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
 msgstr ""
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr ""
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr ""
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr ""
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr ""
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr ""
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr ""
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr ""
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr ""
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr ""
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr ""
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr ""
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr ""
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr ""
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr ""
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr ""
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr ""
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr ""
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
 msgstr ""
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr ""
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr ""
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr ""
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr ""
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr ""
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr ""
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr ""
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr ""
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr ""
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr ""
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr ""
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr ""
@@ -14254,12 +14778,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr ""
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr ""
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr ""
@@ -14268,203 +14792,199 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr ""
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr ""
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr ""
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr ""
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr ""
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr ""
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr ""
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr ""
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr ""
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr ""
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr ""
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr ""
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr ""
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr ""
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr ""
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr ""
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr ""
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr ""
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr ""
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr ""
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr ""
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr ""
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr ""
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr ""
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr ""
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr ""
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr ""
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr ""
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr ""
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr ""
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr ""
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr ""
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr ""
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr ""
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr ""
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr ""
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr ""
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr ""
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr ""
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr ""
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr ""
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr ""
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr ""
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr ""
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr ""
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr ""
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr ""
@@ -14498,11 +15018,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr ""
@@ -14515,11 +15035,15 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr ""
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr ""
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr ""
 
@@ -14644,12 +15168,12 @@
 msgid "no info viewer handled the request"
 msgstr ""
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr ""
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr ""
@@ -14663,444 +15187,444 @@
 msgid "'git help config' for more information"
 msgstr ""
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr ""
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr ""
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr ""
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr ""
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr ""
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr ""
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr ""
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr ""
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr ""
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr ""
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr ""
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr ""
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr ""
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr ""
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr ""
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr ""
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr ""
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr ""
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr ""
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr ""
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr ""
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr ""
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr ""
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr ""
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr ""
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr ""
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr ""
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr ""
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr ""
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr ""
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr ""
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr ""
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr ""
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr ""
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr ""
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr ""
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr ""
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
+msgid "packfile name '%s' does not end with '.%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr ""
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr ""
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr ""
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr ""
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr ""
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr ""
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr ""
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr ""
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr ""
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr ""
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr ""
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr ""
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr ""
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr ""
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr ""
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr ""
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr ""
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr ""
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr ""
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr ""
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr ""
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr ""
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr ""
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr ""
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr ""
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr ""
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr ""
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr ""
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr ""
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
 msgstr ""
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr ""
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr ""
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr ""
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr ""
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr ""
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr ""
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr ""
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr ""
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr ""
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr ""
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr ""
 
@@ -15150,10 +15674,6 @@
 msgid "do not treat --- specially"
 msgstr ""
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr ""
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr ""
@@ -15166,521 +15686,529 @@
 msgid "no input file given for in-place editing"
 msgstr ""
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr ""
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr ""
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr ""
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr ""
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
 msgstr ""
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr ""
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr ""
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr ""
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr ""
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr ""
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr ""
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr ""
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr ""
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr ""
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr ""
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr ""
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr ""
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr ""
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr ""
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr ""
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr ""
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr ""
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr ""
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr ""
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr ""
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
 "Or you could specify base commit by --base=<base-commit-id> manually"
 msgstr ""
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr ""
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr ""
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr ""
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr ""
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr ""
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr ""
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr ""
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr ""
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr ""
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr ""
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr ""
 
-#: builtin/log.c:1756
-msgid "mark the series as Nth re-roll"
-msgstr ""
-
-#: builtin/log.c:1758
-msgid "max length of output filename"
-msgstr ""
-
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
+#: builtin/log.c:1762
+msgid "reroll-count"
 msgstr ""
 
 #: builtin/log.c:1763
+msgid "mark the series as Nth re-roll"
+msgstr ""
+
+#: builtin/log.c:1765
+msgid "max length of output filename"
+msgstr ""
+
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr ""
+
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr ""
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr ""
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr ""
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr ""
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr ""
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr ""
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr ""
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr ""
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr ""
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr ""
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr ""
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr ""
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr ""
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr ""
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr ""
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr ""
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr ""
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr ""
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr ""
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr ""
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr ""
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr ""
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr ""
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr ""
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr ""
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr ""
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr ""
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr ""
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr ""
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr ""
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr ""
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr ""
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr ""
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr ""
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr ""
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr ""
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr ""
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr ""
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr ""
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr ""
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr ""
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr ""
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr ""
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr ""
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr ""
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr ""
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr ""
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr ""
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr ""
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr ""
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr ""
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr ""
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr ""
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr ""
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr ""
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr ""
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr ""
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr ""
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr ""
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr ""
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr ""
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -15688,39 +16216,39 @@
 "                     [--symref] [<repository> [<refs>...]]"
 msgstr ""
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr ""
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr ""
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr ""
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr ""
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr ""
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr ""
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr ""
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr ""
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr ""
 
@@ -15760,6 +16288,55 @@
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr ""
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr ""
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr ""
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr ""
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr ""
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr ""
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr ""
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr ""
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr ""
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr ""
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr ""
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr ""
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -15874,377 +16451,410 @@
 msgid "Merging %s with %s\n"
 msgstr ""
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr ""
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr ""
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr ""
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr ""
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr ""
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr ""
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr ""
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr ""
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr ""
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr ""
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr ""
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr ""
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr ""
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr ""
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr ""
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr ""
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr ""
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr ""
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr ""
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr ""
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr ""
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr ""
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr ""
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr ""
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr ""
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr ""
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr ""
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr ""
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr ""
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr ""
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr ""
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
 msgstr ""
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr ""
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr ""
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr ""
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr ""
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr ""
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr ""
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr ""
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr ""
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
 "\n"
 msgstr ""
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr ""
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr ""
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr ""
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr ""
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr ""
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr ""
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr ""
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr ""
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr ""
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr ""
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr ""
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr ""
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr ""
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr ""
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr ""
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr ""
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr ""
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr ""
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr ""
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr ""
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr ""
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr ""
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr ""
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr ""
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr ""
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr ""
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr ""
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr ""
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr ""
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr ""
@@ -16261,31 +16871,41 @@
 msgid "allow creation of more than one tree"
 msgstr ""
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
 msgstr ""
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr ""
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr ""
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr ""
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr ""
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr ""
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr ""
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr ""
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr ""
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr ""
@@ -16381,7 +17001,7 @@
 msgid "Renaming %s to %s\n"
 msgstr ""
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr ""
@@ -16566,7 +17186,7 @@
 msgid "the note contents have been left in %s"
 msgstr ""
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr ""
@@ -16609,7 +17229,8 @@
 #: 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
-msgid "too many parameters"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
 msgstr ""
 
 #: builtin/notes.c:389 builtin/notes.c:678
@@ -16667,7 +17288,7 @@
 msgstr ""
 
 #: builtin/notes.c:517
-msgid "too few parameters"
+msgid "too few arguments"
 msgstr ""
 
 #: builtin/notes.c:538
@@ -16787,7 +17408,7 @@
 "abort'.\n"
 msgstr ""
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr ""
@@ -16805,7 +17426,7 @@
 msgid "read object names from the standard input"
 msgstr ""
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr ""
 
@@ -16821,7 +17442,7 @@
 msgid "use notes from <notes-ref>"
 msgstr ""
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr ""
@@ -16836,361 +17457,404 @@
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr ""
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr ""
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr ""
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr ""
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr ""
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr ""
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
 "hash> <uri>' (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr ""
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr ""
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr ""
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr ""
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr ""
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr ""
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr ""
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr ""
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr ""
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr ""
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr ""
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr ""
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr ""
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr ""
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr ""
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr ""
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr ""
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr ""
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr ""
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr ""
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr ""
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr ""
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr ""
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr ""
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr ""
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr ""
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
 "reused %<PRIu32>"
 msgstr ""
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>.  Thanks.\n"
+msgstr ""
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr ""
@@ -17248,11 +17912,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr ""
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr ""
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr ""
 
@@ -17273,7 +17937,82 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr ""
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr ""
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr ""
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr ""
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr ""
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr ""
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr ""
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr ""
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr ""
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr ""
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -17290,94 +18029,19 @@
 "invocation.\n"
 msgstr ""
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr ""
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr ""
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr ""
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr ""
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr ""
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr ""
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr ""
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr ""
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr ""
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr ""
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr ""
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -17385,7 +18049,7 @@
 "commit %s."
 msgstr ""
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -17396,15 +18060,15 @@
 "to recover."
 msgstr ""
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr ""
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr ""
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 
@@ -17655,44 +18319,48 @@
 msgid "push options must not have new line characters"
 msgstr ""
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr ""
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr ""
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr ""
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr ""
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr ""
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr ""
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
 msgstr ""
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr ""
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr ""
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr ""
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr ""
 
@@ -17790,193 +18458,193 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr ""
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr ""
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr ""
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr ""
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr ""
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr ""
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr ""
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr ""
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr ""
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr ""
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr ""
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr ""
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr ""
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr ""
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr ""
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr ""
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr ""
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr ""
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr ""
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr ""
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr ""
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr ""
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr ""
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr ""
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr ""
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr ""
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr ""
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr ""
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr ""
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr ""
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr ""
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr ""
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr ""
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr ""
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr ""
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr ""
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr ""
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr ""
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr ""
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr ""
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -17985,7 +18653,7 @@
 "abort\"."
 msgstr ""
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -17997,14 +18665,14 @@
 "As a result, git cannot rebase them."
 msgstr ""
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr ""
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -18015,7 +18683,7 @@
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -18024,201 +18692,195 @@
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr ""
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr ""
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr ""
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr ""
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr ""
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr ""
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr ""
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr ""
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr ""
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr ""
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr ""
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr ""
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr ""
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr ""
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr ""
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr ""
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr ""
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr ""
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr ""
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr ""
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr ""
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr ""
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr ""
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr ""
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr ""
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr ""
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr ""
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr ""
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
 msgstr ""
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr ""
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr ""
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -18231,131 +18893,131 @@
 "valuable there.\n"
 msgstr ""
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr ""
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr ""
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr ""
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr ""
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr ""
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr ""
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr ""
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr ""
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr ""
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr ""
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr ""
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr ""
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr ""
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr ""
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr ""
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr ""
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr ""
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr ""
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr ""
@@ -18393,11 +19055,11 @@
 "To squelch this message, you can set it to 'refuse'."
 msgstr ""
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr ""
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr ""
 
@@ -18423,36 +19085,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr ""
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr ""
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr ""
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr ""
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr ""
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr ""
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr ""
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr ""
 
@@ -18619,7 +19281,7 @@
 "now names the non-existent remote '%s'"
 msgstr ""
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr ""
@@ -18949,126 +19611,149 @@
 msgid "Will not delete all non-push URLs"
 msgstr ""
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr ""
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr ""
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr ""
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr ""
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr ""
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr ""
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr ""
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr ""
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr ""
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr ""
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr ""
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr ""
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr ""
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr ""
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr ""
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr ""
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr ""
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr ""
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr ""
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr ""
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr ""
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr ""
@@ -19390,8 +20075,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr ""
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr ""
 
@@ -19469,19 +20154,19 @@
 msgid "Could not write new index file."
 msgstr ""
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr ""
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr ""
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr ""
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr ""
 
@@ -19588,19 +20273,19 @@
 msgid "keep redundant, empty commits"
 msgstr ""
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr ""
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr ""
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr ""
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -19610,64 +20295,64 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
 msgstr ""
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
 msgstr ""
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr ""
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr ""
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr ""
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr ""
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr ""
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr ""
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr ""
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr ""
@@ -19704,52 +20389,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr ""
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr ""
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr ""
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr ""
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
 msgstr ""
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr ""
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
 msgstr ""
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
 msgstr ""
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr ""
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
 msgstr ""
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr ""
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
+#: builtin/shortlog.c:363
+msgid "group by field"
 msgstr ""
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr ""
 
@@ -19933,102 +20618,110 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr ""
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr ""
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr ""
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr ""
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr ""
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr ""
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 msgstr ""
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr ""
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr ""
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr ""
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr ""
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr ""
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr ""
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr ""
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr ""
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr ""
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr ""
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr ""
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr ""
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr ""
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr ""
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr ""
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr ""
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr ""
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr ""
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -20036,198 +20729,222 @@
 "          [--] [<pathspec>...]]"
 msgstr ""
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
 msgstr ""
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr ""
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr ""
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr ""
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
 "          [--] [<pathspec>...]]"
 msgstr ""
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr ""
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr ""
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr ""
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr ""
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
 msgstr ""
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr ""
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr ""
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr ""
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr ""
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr ""
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr ""
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr ""
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr ""
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr ""
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr ""
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr ""
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr ""
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr ""
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr ""
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr ""
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr ""
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr ""
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr ""
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr ""
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr ""
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr ""
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr ""
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr ""
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr ""
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr ""
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr ""
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr ""
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr ""
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr ""
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr ""
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr ""
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr ""
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr ""
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr ""
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr ""
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr ""
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -20249,7 +20966,7 @@
 msgid "prepend comment character and space to each line"
 msgstr ""
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr ""
@@ -20263,7 +20980,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr ""
 
@@ -20271,25 +20988,25 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -20297,223 +21014,220 @@
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
 msgstr ""
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr ""
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr ""
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr ""
-
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
 msgstr ""
 
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr ""
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr ""
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr ""
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr ""
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
 msgstr ""
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
 "really want to remove it including all of its history)"
 msgstr ""
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr ""
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr ""
-
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
+msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr ""
+
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -20521,231 +21235,231 @@
 "'--reference-if-able' instead of '--reference'."
 msgstr ""
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr ""
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr ""
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr ""
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr ""
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr ""
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr ""
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr ""
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
 "<url> --path <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr ""
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr ""
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr ""
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr ""
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr ""
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr ""
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr ""
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr ""
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr ""
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr ""
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr ""
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
 "the superproject is not on any branch"
 msgstr ""
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr ""
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr ""
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr ""
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr ""
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr ""
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr ""
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr ""
@@ -20758,23 +21472,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr ""
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr ""
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr ""
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr ""
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr ""
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr ""
 
@@ -20800,17 +21514,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr ""
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr ""
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr ""
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -20819,7 +21533,7 @@
 "Lines starting with '%c' will be ignored.\n"
 msgstr ""
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -20829,15 +21543,11 @@
 "want to.\n"
 msgstr ""
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr ""
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr ""
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -20846,143 +21556,139 @@
 "\tgit tag -f %s %s^{}"
 msgstr ""
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr ""
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr ""
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr ""
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr ""
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr ""
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr ""
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr ""
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr ""
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr ""
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr ""
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr ""
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr ""
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr ""
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr ""
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr ""
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr ""
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr ""
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr ""
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr ""
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr ""
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr ""
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr ""
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr ""
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr ""
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr ""
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr ""
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr ""
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr ""
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr ""
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr ""
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr ""
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr ""
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr ""
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr ""
 
@@ -21043,189 +21749,189 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr ""
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr ""
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr ""
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr ""
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr ""
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr ""
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr ""
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr ""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr ""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr ""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr ""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr ""
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr ""
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr ""
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr ""
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr ""
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr ""
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr ""
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr ""
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr ""
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr ""
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr ""
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr ""
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr ""
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr ""
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr ""
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr ""
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr ""
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr ""
 
@@ -21317,276 +22023,262 @@
 msgid "print tag contents"
 msgstr ""
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr ""
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr ""
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr ""
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr ""
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr ""
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr ""
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr ""
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr ""
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr ""
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr ""
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr ""
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr ""
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr ""
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr ""
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr ""
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr ""
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr ""
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr ""
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr ""
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, 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 ""
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
 "use '%s -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr ""
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr ""
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr ""
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr ""
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr ""
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr ""
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr ""
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr ""
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr ""
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr ""
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr ""
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr ""
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr ""
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr ""
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr ""
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr ""
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr ""
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr ""
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr ""
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr ""
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr ""
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr ""
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr ""
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr ""
@@ -21607,15 +22299,143 @@
 msgid "only useful for debugging"
 msgstr ""
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr ""
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr ""
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr ""
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr ""
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr ""
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr ""
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr ""
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr ""
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr ""
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr ""
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr ""
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr ""
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr ""
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr ""
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr ""
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr ""
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr ""
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr ""
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr ""
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr ""
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr ""
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr ""
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr ""
@@ -21641,118 +22461,108 @@
 msgid "exit immediately after advertising capabilities"
 msgstr ""
 
-#: git.c:28
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
 msgstr ""
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
 msgstr ""
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
 msgstr ""
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
 msgstr ""
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
 msgstr ""
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
 msgstr ""
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
 msgstr ""
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
 msgstr ""
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
 msgstr ""
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr ""
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr ""
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr ""
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr ""
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr ""
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr ""
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr ""
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr ""
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
 msgstr ""
 
 #: http.c:399
@@ -21791,7 +22601,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr ""
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -21939,52 +22749,52 @@
 msgid "no libc information available\n"
 msgstr ""
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr ""
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr ""
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr ""
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr ""
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr ""
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr ""
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr ""
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr ""
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr ""
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr ""
 
@@ -21992,14 +22802,6 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr ""
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr ""
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr ""
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr ""
@@ -22329,7 +23131,7 @@
 msgstr ""
 
 #: command-list.h:132
-msgid "Creates a tag object"
+msgid "Creates a tag object with extra validation"
 msgstr ""
 
 #: command-list.h:133
@@ -22637,94 +23439,76 @@
 msgstr ""
 
 #: command-list.h:209
-msgid "Defining submodule properties"
+msgid "Map author/committer names and/or E-Mail addresses"
 msgstr ""
 
 #: command-list.h:210
-msgid "Git namespaces"
+msgid "Defining submodule properties"
 msgstr ""
 
 #: command-list.h:211
-msgid "Helper programs to interact with remote repositories"
+msgid "Git namespaces"
 msgstr ""
 
 #: command-list.h:212
-msgid "Git Repository Layout"
+msgid "Helper programs to interact with remote repositories"
 msgstr ""
 
 #: command-list.h:213
-msgid "Specifying revisions and ranges for Git"
+msgid "Git Repository Layout"
 msgstr ""
 
 #: command-list.h:214
-msgid "Mounting one repository inside another"
+msgid "Specifying revisions and ranges for Git"
 msgstr ""
 
 #: command-list.h:215
-msgid "A tutorial introduction to Git: part two"
+msgid "Mounting one repository inside another"
 msgstr ""
 
 #: command-list.h:216
-msgid "A tutorial introduction to Git"
+msgid "A tutorial introduction to Git: part two"
 msgstr ""
 
 #: command-list.h:217
+msgid "A tutorial introduction to Git"
+msgstr ""
+
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr ""
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr ""
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr ""
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr ""
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr ""
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr ""
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr ""
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "exit code $res from '$command' is < 0 or >= 128"
 msgstr ""
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr ""
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "'bisect-state $state' exited with error code $res"
 msgstr ""
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr ""
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr ""
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -23503,73 +24287,78 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr ""
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr ""
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr ""
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr ""
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr ""
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr ""
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
 "Set sendemail.forbidSendmailVariables to false to disable this check.\n"
 msgstr ""
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr ""
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
 msgstr ""
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr ""
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr ""
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr ""
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr ""
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -23579,36 +24368,29 @@
 "    * Giving --format-patch option if you mean a range.\n"
 msgstr ""
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr ""
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
 "\n"
 msgstr ""
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr ""
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr ""
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -23617,37 +24399,37 @@
 "Clear the body content if you don't wish to send a summary.\n"
 msgstr ""
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr ""
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr ""
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr ""
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr ""
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
 msgstr ""
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr ""
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -23656,20 +24438,20 @@
 "want to send.\n"
 msgstr ""
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr ""
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr ""
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr ""
@@ -23677,16 +24459,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr ""
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr ""
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -23703,128 +24485,138 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr ""
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr ""
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr ""
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr ""
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr ""
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr ""
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr ""
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr ""
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr ""
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr ""
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr ""
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr ""
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr ""
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr ""
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr ""
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr ""
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr ""
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr ""
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr ""
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
 msgstr ""
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr ""
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr ""
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..50e2e1d
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,25293 @@
+# Indonesian translations for Git package.
+# Copyright (C) 2021 Bagas Sanjaya
+# This file is distributed under the same license as the Git package.
+# Bagas Sanjaya <bagasdotme@gmail.com>, 2021.
+#
+msgid ""
+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"
+"PO-Revision-Date: 2021-05-17 18:32+0700\n"
+"Last-Translator: Bagas Sanjaya <bagasdotme@gmail.com>\n"
+"Language-Team: Indonesian\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: add-interactive.c:376
+#, c-format
+msgid "Huh (%s)?"
+msgstr "Huh (%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
+msgid "could not read index"
+msgstr "tidak dapat membaca indeks"
+
+#: add-interactive.c:584 git-add--interactive.perl:269
+#: git-add--interactive.perl:294
+msgid "binary"
+msgstr "biner"
+
+#: add-interactive.c:642 git-add--interactive.perl:278
+#: git-add--interactive.perl:332
+msgid "nothing"
+msgstr "tidak ada"
+
+#: add-interactive.c:643 git-add--interactive.perl:314
+#: git-add--interactive.perl:329
+msgid "unchanged"
+msgstr "tak berubah"
+
+#: add-interactive.c:680 git-add--interactive.perl:641
+msgid "Update"
+msgstr "Perbarui"
+
+#: add-interactive.c:697 add-interactive.c:885
+#, c-format
+msgid "could not stage '%s'"
+msgstr "tidak dapat menggelar '%s'"
+
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
+msgid "could not write index"
+msgstr "tidak dapat menulis indeks"
+
+#: add-interactive.c:706 git-add--interactive.perl:626
+#, c-format, perl-format
+msgid "updated %d path\n"
+msgid_plural "updated %d paths\n"
+msgstr[0] "%d jalur diperbarui\n"
+msgstr[1] "%d jalur diperbarui\n"
+
+#: add-interactive.c:724 git-add--interactive.perl:676
+#, c-format, perl-format
+msgid "note: %s is untracked now.\n"
+msgstr "catatan: %s sekarang tak terlacak.\n"
+
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
+#: builtin/reset.c:145
+#, c-format
+msgid "make_cache_entry failed for path '%s'"
+msgstr "make_cache_entry gagal untuk jalur '%s'"
+
+#: add-interactive.c:759 git-add--interactive.perl:653
+msgid "Revert"
+msgstr "Kembalikan"
+
+#: add-interactive.c:775
+msgid "Could not parse HEAD^{tree}"
+msgstr "Tidak dapat menguraikan HEAD^{tree}"
+
+#: add-interactive.c:813 git-add--interactive.perl:629
+#, c-format, perl-format
+msgid "reverted %d path\n"
+msgid_plural "reverted %d paths\n"
+msgstr[0] "%d jalur dikembalikan\n"
+msgstr[1] "%d jalur dikembalikan\n"
+
+#: add-interactive.c:864 git-add--interactive.perl:693
+#, c-format
+msgid "No untracked files.\n"
+msgstr "Tidak ada berkas tak terlacak.\n"
+
+#: add-interactive.c:868 git-add--interactive.perl:687
+msgid "Add untracked"
+msgstr "Tambahkan tak terlacak"
+
+#: add-interactive.c:895 git-add--interactive.perl:623
+#, c-format, perl-format
+msgid "added %d path\n"
+msgid_plural "added %d paths\n"
+msgstr[0] "%d jalur ditambahkan\n"
+msgstr[1] "%d jalur ditambahkan\n"
+
+#: add-interactive.c:925
+#, c-format
+msgid "ignoring unmerged: %s"
+msgstr "mengabaikan tak tergabung: %s"
+
+#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
+#, c-format
+msgid "Only binary files changed.\n"
+msgstr "Hanya berkas biner yang berubah.\n"
+
+#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
+#, c-format
+msgid "No changes.\n"
+msgstr "Tidak ada perubahan.\n"
+
+#: add-interactive.c:943 git-add--interactive.perl:1379
+msgid "Patch update"
+msgstr "Pembaruan tambalan"
+
+#: add-interactive.c:982 git-add--interactive.perl:1792
+msgid "Review diff"
+msgstr "Tinjau diff"
+
+#: add-interactive.c:1010
+msgid "show paths with changes"
+msgstr "perlihatkan jalur dengan perubahan"
+
+#: add-interactive.c:1012
+msgid "add working tree state to the staged set of changes"
+msgstr "tambahkan keadaan pohon kerja ke set perubahan yang tergelar"
+
+#: add-interactive.c:1014
+msgid "revert staged set of changes back to the HEAD version"
+msgstr "kembalikan set perubahan yang tergelar kembali ke versi HEAD"
+
+#: add-interactive.c:1016
+msgid "pick hunks and update selectively"
+msgstr "ambil hunk dan perbarui secara selektif"
+
+#: add-interactive.c:1018
+msgid "view diff between HEAD and index"
+msgstr "lihat diff antara HEAD dan indeks"
+
+#: add-interactive.c:1020
+msgid "add contents of untracked files to the staged set of changes"
+msgstr "tambahkan isi berkas tak terlacak ke set perubahan yang tergelar"
+
+#: add-interactive.c:1028 add-interactive.c:1077
+msgid "Prompt help:"
+msgstr "Permintaan bantuan:"
+
+#: add-interactive.c:1030
+msgid "select a single item"
+msgstr "pilih satu item"
+
+#: add-interactive.c:1032
+msgid "select a range of items"
+msgstr "pilih kisaran item"
+
+#: add-interactive.c:1034
+msgid "select multiple ranges"
+msgstr "pilih banyak kisaran"
+
+#: add-interactive.c:1036 add-interactive.c:1081
+msgid "select item based on unique prefix"
+msgstr "pilih item berdasarkan prefiks unik"
+
+#: add-interactive.c:1038
+msgid "unselect specified items"
+msgstr "batal pilih item yang disebutkan"
+
+#: add-interactive.c:1040
+msgid "choose all items"
+msgstr "pilih semua item"
+
+#: add-interactive.c:1042
+msgid "(empty) finish selecting"
+msgstr "(kosong) sudah memilih"
+
+#: add-interactive.c:1079
+msgid "select a numbered item"
+msgstr "pilih item bernomor"
+
+#: add-interactive.c:1083
+msgid "(empty) select nothing"
+msgstr "(empty) tidak pilih apapun"
+
+#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
+msgid "*** Commands ***"
+msgstr "*** Perintah ***"
+
+#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
+msgid "What now"
+msgstr "Apa sekarang"
+
+#: add-interactive.c:1144 git-add--interactive.perl:213
+msgid "staged"
+msgstr "tergelar"
+
+#: add-interactive.c:1144 git-add--interactive.perl:213
+msgid "unstaged"
+msgstr "tak tergelar"
+
+#: 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
+#: git-add--interactive.perl:213
+msgid "path"
+msgstr "jalur"
+
+#: add-interactive.c:1151
+msgid "could not refresh index"
+msgstr "tidak dapat menyegarkan indeks"
+
+#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
+#, c-format
+msgid "Bye.\n"
+msgstr "Sampai jumpa.\n"
+
+#: add-patch.c:34 git-add--interactive.perl:1431
+#, c-format, perl-format
+msgid "Stage mode change [y,n,q,a,d%s,?]? "
+msgstr "Gelar perubahan mode [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:35 git-add--interactive.perl:1432
+#, c-format, perl-format
+msgid "Stage deletion [y,n,q,a,d%s,?]? "
+msgstr "Gelar penghapusan [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:36 git-add--interactive.perl:1433
+#, c-format, perl-format
+msgid "Stage addition [y,n,q,a,d%s,?]? "
+msgstr "Gelar penambahan [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:37 git-add--interactive.perl:1434
+#, c-format, perl-format
+msgid "Stage this hunk [y,n,q,a,d%s,?]? "
+msgstr "Gelar hunk ini [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:39
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be marked for "
+"staging."
+msgstr ""
+"Jika tambalan diterapkan bersih, hunk yang disunting akan langsung ditandai "
+"untuk digelar."
+
+#: add-patch.c:42
+msgid ""
+"y - stage this hunk\n"
+"n - do not stage this hunk\n"
+"q - quit; do not stage this hunk or any of the remaining ones\n"
+"a - stage this hunk and all later hunks in the file\n"
+"d - do not stage this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - gelar hunk ini\n"
+"n - jangan gelar hunk ini\n"
+"q - keluar; jangan gelar hunk ini atau yang sisanya\n"
+"a - gelar hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan gelar hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:56 git-add--interactive.perl:1437
+#, c-format, perl-format
+msgid "Stash mode change [y,n,q,a,d%s,?]? "
+msgstr "Stase perubahan mode [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:57 git-add--interactive.perl:1438
+#, c-format, perl-format
+msgid "Stash deletion [y,n,q,a,d%s,?]? "
+msgstr "Stase penghapusan [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:58 git-add--interactive.perl:1439
+#, c-format, perl-format
+msgid "Stash addition [y,n,q,a,d%s,?]? "
+msgstr "Stase penambahan [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:59 git-add--interactive.perl:1440
+#, c-format, perl-format
+msgid "Stash this hunk [y,n,q,a,d%s,?]? "
+msgstr "Stase hunk ini [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:61
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be marked for "
+"stashing."
+msgstr ""
+"Jika tambalan diterapkan bersih, hunk yang disunting akan langsung ditandai "
+"untuk distase."
+
+#: add-patch.c:64
+msgid ""
+"y - stash this hunk\n"
+"n - do not stash this hunk\n"
+"q - quit; do not stash this hunk or any of the remaining ones\n"
+"a - stash this hunk and all later hunks in the file\n"
+"d - do not stash this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - stase hunk ini\n"
+"n - jangan stase hunk ini\n"
+"q - keluar; jangan stase hunk ini atau yang sisanya\n"
+"a - stase hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan stase hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:80 git-add--interactive.perl:1443
+#, c-format, perl-format
+msgid "Unstage mode change [y,n,q,a,d%s,?]? "
+msgstr "Batal gelar perubahan mode [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:81 git-add--interactive.perl:1444
+#, c-format, perl-format
+msgid "Unstage deletion [y,n,q,a,d%s,?]? "
+msgstr "Batal gelar penghapusan [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:82 git-add--interactive.perl:1445
+#, c-format, perl-format
+msgid "Unstage addition [y,n,q,a,d%s,?]? "
+msgstr "Batal gelar penambahan [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:83 git-add--interactive.perl:1446
+#, c-format, perl-format
+msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
+msgstr "Batal gelar hunk ini [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:85
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be marked for "
+"unstaging."
+msgstr ""
+"Jika tambalan diterapkan bersih, hunk yang disunting akan langsung ditandai "
+"untuk dibatalgelarkan."
+
+#: add-patch.c:88
+msgid ""
+"y - unstage this hunk\n"
+"n - do not unstage this hunk\n"
+"q - quit; do not unstage this hunk or any of the remaining ones\n"
+"a - unstage this hunk and all later hunks in the file\n"
+"d - do not unstage this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - batal gelar hunk ini\n"
+"n - jangan batal gelar hunk ini\n"
+"q - keluar; jangan batal gelar hunk ini atau yang sisanya\n"
+"a - batal gelar hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan batal gelar hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:103 git-add--interactive.perl:1449
+#, c-format, perl-format
+msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
+msgstr "Terapkan perubahan mode ke indeks [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:104 git-add--interactive.perl:1450
+#, c-format, perl-format
+msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
+msgstr "Terapkan penghapusan ke indeks [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:105 git-add--interactive.perl:1451
+#, c-format, perl-format
+msgid "Apply addition to index [y,n,q,a,d%s,?]? "
+msgstr "Terapkan penambahan ke indeks [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:106 git-add--interactive.perl:1452
+#, c-format, perl-format
+msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
+msgstr "Terapkan hunk ini ke indeks [y,n,q,a,d%s,?]? "
+
+#: 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."
+msgstr ""
+"Jika tambalan diterapkan bersih, hunk yang disunting akan langsung ditandai "
+"untuk diterapkan."
+
+#: add-patch.c:111
+msgid ""
+"y - apply this hunk to index\n"
+"n - do not apply this hunk to index\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - terapkan hunk ini ke indeks\n"
+"n - jangan terapkan hunk ini ke indeks\n"
+"q - keluar; jangan terapkan hunk ini atau yang sisanya\n"
+"a - terapkan hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan terapkan hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:126 git-add--interactive.perl:1455
+#: git-add--interactive.perl:1473
+#, c-format, perl-format
+msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang perubahan mode dari pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:127 git-add--interactive.perl:1456
+#: git-add--interactive.perl:1474
+#, c-format, perl-format
+msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang penghapusan dari pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:128 git-add--interactive.perl:1457
+#: git-add--interactive.perl:1475
+#, c-format, perl-format
+msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang penambahan dari pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:129 git-add--interactive.perl:1458
+#: git-add--interactive.perl:1476
+#, c-format, perl-format
+msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang hunk ini dari pohon kerja [y,n,q,a,d%s,?]? "
+
+#: 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."
+msgstr ""
+"Jika tambalan diterapkan bersih, hunk yang disunting akan langsung ditandai "
+"untuk dibuang."
+
+#: add-patch.c:134 add-patch.c:202
+msgid ""
+"y - discard this hunk from worktree\n"
+"n - do not discard this hunk from worktree\n"
+"q - quit; do not discard this hunk or any of the remaining ones\n"
+"a - discard this hunk and all later hunks in the file\n"
+"d - do not discard this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - buang hunk ini dari pohon kerja\n"
+"n - jangan buang hunk ini dari pohon kerja\n"
+"q - keluar; jangan buang hunk ini atau yang sisanya\n"
+"a - buang hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan buang hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
+#, c-format, perl-format
+msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang perubahan mode dari indeks dan pohon kerja [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 "Buang penghapusan dari indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
+#, c-format, perl-format
+msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang penambahan dari indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
+#, c-format, perl-format
+msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Buang hunk ini dari indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:157
+msgid ""
+"y - discard this hunk from index and worktree\n"
+"n - do not discard this hunk from index and worktree\n"
+"q - quit; do not discard this hunk or any of the remaining ones\n"
+"a - discard this hunk and all later hunks in the file\n"
+"d - do not discard this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - buang hunk ini dari indeks dan pohon kerja\n"
+"n - jangan buang hunk ini dari indeks dan pohon kerja\n"
+"q - keluar; jangan buang hunk ini atau yang sisanya\n"
+"a - buang hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan buang hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
+#, c-format, perl-format
+msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Terapkan perubahan mode ke indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: 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 "Terapkan penghapusan ke indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
+#, c-format, perl-format
+msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Terapkan penambahan ke indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
+#, c-format, perl-format
+msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Terapkan hunk ini ke indeks dan pohon kerja [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:179
+msgid ""
+"y - apply this hunk to index and worktree\n"
+"n - do not apply this hunk to index and worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - terapkan hunk ini ke indeks dan pohon kerja\n"
+"n - jangan terapkan hunk ini ke indeks dan pohon kerja\n"
+"q - keluar; jangan terapkan hunk ini atau yang sisanya\n"
+"a - terapkan hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan terapkan hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:224
+msgid ""
+"y - apply this hunk to worktree\n"
+"n - do not apply this hunk to worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file\n"
+msgstr ""
+"y - terapkan hunk ini ke pohon kerja\n"
+"n - jangan terapkan hunk ini ke pohon kerja\n"
+"q - keluar; jangan terapkan hunk ini atau yang sisanya\n"
+"a - terapkan hunk ini dan semua hunk selanjutnya dalam berkas\n"
+"d - jangan terapkan hunk ini atau hunk selanjutnya dalam berkas\n"
+
+#: add-patch.c:342
+#, c-format
+msgid "could not parse hunk header '%.*s'"
+msgstr "tidak dapat menguraikan kepala hunk '%.*s'"
+
+#: add-patch.c:361 add-patch.c:365
+#, c-format
+msgid "could not parse colored hunk header '%.*s'"
+msgstr "tidak dapat menguraikan kepala hunk berwarna '%.*s'"
+
+#: add-patch.c:419
+msgid "could not parse diff"
+msgstr "tidak dapat menguraikan diff"
+
+#: add-patch.c:438
+msgid "could not parse colored diff"
+msgstr "tidak dapat menguraikan diff berwarna"
+
+#: add-patch.c:452
+#, c-format
+msgid "failed to run '%s'"
+msgstr "gagal menjalankan '%s'"
+
+#: add-patch.c:611
+msgid "mismatched output from interactive.diffFilter"
+msgstr "keluaran tak cocok dari interactive.diffFilter"
+
+#: add-patch.c:612
+msgid ""
+"Your filter must maintain a one-to-one correspondence\n"
+"between its input and output lines."
+msgstr ""
+"Saringan Anda haru menjaga korespondensi satu-satu antara masukannya\n"
+"dan baris keluaran."
+
+#: add-patch.c:790
+#, c-format
+msgid ""
+"expected context line #%d in\n"
+"%.*s"
+msgstr ""
+"baris konteks #%d diharapkan dalam\n"
+"%.*s"
+
+#: add-patch.c:805
+#, c-format
+msgid ""
+"hunks do not overlap:\n"
+"%.*s\n"
+"\tdoes not end with:\n"
+"%.*s"
+msgstr ""
+"hunk tidak tumpang tindih:\n"
+"%.*s\n"
+"tidak berakhir dengan:\n"
+"%.*s"
+
+#: add-patch.c:1081 git-add--interactive.perl:1115
+msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
+msgstr "Mode sunting hunk manual -- lihat dibawah untuk panduan cepat.\n"
+
+#: add-patch.c:1085
+#, c-format
+msgid ""
+"---\n"
+"To remove '%c' lines, make them ' ' lines (context).\n"
+"To remove '%c' lines, delete them.\n"
+"Lines starting with %c will be removed.\n"
+msgstr ""
+"---\n"
+"Untuk menghapus baris '%c', buatlah menjadi baris ' ' (konteks).\n"
+"Untuk menghapus baris '%c', hapuslah itu.\n"
+"Baris yang diawali dengan %c akan dihapus.\n"
+
+#. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
+#: add-patch.c:1099 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"
+"aborted and the hunk is left unchanged.\n"
+msgstr ""
+"Jika itu tidak diterapkan dengan bersih, Anda akan diberikan kesempatan\n"
+"untuk menyunting lagi. Jika semua baris dalam hunk dihapus, suntingan\n"
+"dibatalkan dan hunk tetap tidak berubah.\n"
+
+#: add-patch.c:1132
+msgid "could not parse hunk header"
+msgstr "tidak dapat menguraikan kepala hunk"
+
+#: add-patch.c:1177
+msgid "'git apply --cached' failed"
+msgstr "'git apply --cached' gagal"
+
+#. 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.
+#.
+#. 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
+msgid ""
+"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
+msgstr ""
+"Hunk Anda tak diterapkan. Sunting lagi (bilang \"n\" untuk \"tidak\" buang!) "
+"[y/n]?"
+
+#: add-patch.c:1289
+msgid "The selected hunks do not apply to the index!"
+msgstr "Hunk yang dipilih tidak diterapkan ke indeks!"
+
+#: add-patch.c:1290 git-add--interactive.perl:1346
+msgid "Apply them to the worktree anyway? "
+msgstr "Tetap terapkan itu ke pohon kerja? "
+
+#: add-patch.c:1297 git-add--interactive.perl:1349
+msgid "Nothing was applied.\n"
+msgstr "Tidak ada yang diterapkan.\n"
+
+#: add-patch.c:1354
+msgid ""
+"j - leave this hunk undecided, see next undecided hunk\n"
+"J - leave this hunk undecided, see next hunk\n"
+"k - leave this hunk undecided, see previous undecided hunk\n"
+"K - leave this hunk undecided, see previous hunk\n"
+"g - select a hunk to go to\n"
+"/ - search for a hunk matching the given regex\n"
+"s - split the current hunk into smaller hunks\n"
+"e - manually edit the current hunk\n"
+"? - print help\n"
+msgstr ""
+"j - biarkan hunk ini ragu, lihat hunk ragu berikutnya\n"
+"J - biarkan hunk ini ragu, lihat hunk berikutnya\n"
+"k - biarkan hunk ini ragu, lihat hunk ragu sebelumnya\n"
+"K - biarkan hunk ini ragu, lihat hunk sebelumnya\n"
+"g - pilih satu hunk untuk dikunjungi\n"
+"/ - cari satu hunk yang cocok dengan regex yang diberikan\n"
+"s - belah hunk saat ini ke dalam hunk yang lebih kecil\n"
+"e - sunting hunk saat ini secara manual\n"
+"? - cetak bantuan\n"
+
+#: add-patch.c:1516 add-patch.c:1526
+msgid "No previous hunk"
+msgstr "Tidak ada hunk sebelumnya"
+
+#: add-patch.c:1521 add-patch.c:1531
+msgid "No next hunk"
+msgstr "Tidak ada hunk selanjutnya"
+
+#: add-patch.c:1537
+msgid "No other hunks to goto"
+msgstr "Tidak ada hunk lainnya untuk dikunjungi"
+
+#: add-patch.c:1548 git-add--interactive.perl:1606
+msgid "go to which hunk (<ret> to see more)? "
+msgstr "pergi ke hunk yang mana (<ret> untuk lihat lebih)? "
+
+#: add-patch.c:1549 git-add--interactive.perl:1608
+msgid "go to which hunk? "
+msgstr "pergi ke hunk yang mana?"
+
+#: add-patch.c:1560
+#, c-format
+msgid "Invalid number: '%s'"
+msgstr "Angka tidak valid: '%s'"
+
+#: add-patch.c:1565
+#, c-format
+msgid "Sorry, only %d hunk available."
+msgid_plural "Sorry, only %d hunks available."
+msgstr[0] "Maaf, hanya %d hunk yang tersedia."
+msgstr[1] "Maaf, hanya %d hunk yang tersedia."
+
+#: add-patch.c:1574
+msgid "No other hunks to search"
+msgstr "Tidak ada hunk lainnya untuk dicari"
+
+#: add-patch.c:1580 git-add--interactive.perl:1661
+msgid "search for regex? "
+msgstr "cari untuk regex? "
+
+#: add-patch.c:1595
+#, c-format
+msgid "Malformed search regexp %s: %s"
+msgstr "regexp pencarian %s cacat: %s"
+
+#: add-patch.c:1612
+msgid "No hunk matches the given pattern"
+msgstr "Tidak ada hunk yang cocok dengan pola yang diberikan"
+
+#: add-patch.c:1619
+msgid "Sorry, cannot split this hunk"
+msgstr "Maaf, tidak dapat membelah hunk ini"
+
+#: add-patch.c:1623
+#, c-format
+msgid "Split into %d hunks."
+msgstr "Terbelah ke dalam %d hunk."
+
+#: add-patch.c:1627
+msgid "Sorry, cannot edit this hunk"
+msgstr "Maaf, tidak dapat menyunting hunk ini"
+
+#: add-patch.c:1679
+msgid "'git apply' failed"
+msgstr "'git apply' gagal"
+
+#: advice.c:145
+#, c-format
+msgid ""
+"\n"
+"Disable this message with \"git config advice.%s false\""
+msgstr ""
+
+#: advice.c:161
+#, c-format
+msgid "%shint: %.*s%s\n"
+msgstr ""
+
+#: advice.c:252
+msgid "Cherry-picking is not possible because you have unmerged files."
+msgstr ""
+
+#: advice.c:254
+msgid "Committing is not possible because you have unmerged files."
+msgstr ""
+
+#: advice.c:256
+msgid "Merging is not possible because you have unmerged files."
+msgstr ""
+
+#: advice.c:258
+msgid "Pulling is not possible because you have unmerged files."
+msgstr ""
+
+#: advice.c:260
+msgid "Reverting is not possible because you have unmerged files."
+msgstr ""
+
+#: advice.c:262
+#, c-format
+msgid "It is not possible to %s because you have unmerged files."
+msgstr ""
+
+#: advice.c:270
+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."
+msgstr ""
+
+#: advice.c:278
+msgid "Exiting because of an unresolved conflict."
+msgstr ""
+
+#: advice.c:283 builtin/merge.c:1374
+msgid "You have not concluded your merge (MERGE_HEAD exists)."
+msgstr ""
+
+#: advice.c:285
+msgid "Please, commit your changes before merging."
+msgstr ""
+
+#: advice.c:286
+msgid "Exiting because of unfinished merge."
+msgstr ""
+
+#: 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:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+
+#: advice.c:310
+#, c-format
+msgid ""
+"Note: switching to '%s'.\n"
+"\n"
+"You are in 'detached HEAD' state. You can look around, make experimental\n"
+"changes and commit them, and you can discard any commits you make in this\n"
+"state without impacting any branches by switching back to a branch.\n"
+"\n"
+"If you want to create a new branch to retain commits you create, you may\n"
+"do so (now or later) by using -c with the switch command. Example:\n"
+"\n"
+"  git switch -c <new-branch-name>\n"
+"\n"
+"Or undo this operation with:\n"
+"\n"
+"  git switch -\n"
+"\n"
+"Turn off this advice by setting config variable advice.detachedHead to "
+"false\n"
+"\n"
+msgstr ""
+
+#: alias.c:50
+msgid "cmdline ends with \\"
+msgstr ""
+
+#: alias.c:51
+msgid "unclosed quote"
+msgstr ""
+
+#: apply.c:70
+#, c-format
+msgid "unrecognized whitespace option '%s'"
+msgstr ""
+
+#: apply.c:86
+#, c-format
+msgid "unrecognized whitespace ignore option '%s'"
+msgstr ""
+
+#: apply.c:136
+msgid "--reject and --3way cannot be used together."
+msgstr ""
+
+#: apply.c:139
+msgid "--3way outside a repository"
+msgstr ""
+
+#: apply.c:150
+msgid "--index outside a repository"
+msgstr ""
+
+#: apply.c:153
+msgid "--cached outside a repository"
+msgstr ""
+
+#: apply.c:800
+#, c-format
+msgid "Cannot prepare timestamp regexp %s"
+msgstr ""
+
+#: apply.c:809
+#, c-format
+msgid "regexec returned %d for input: %s"
+msgstr ""
+
+#: apply.c:883
+#, c-format
+msgid "unable to find filename in patch at line %d"
+msgstr ""
+
+#: apply.c:921
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
+msgstr ""
+
+#: apply.c:927
+#, c-format
+msgid "git apply: bad git-diff - inconsistent new filename on line %d"
+msgstr ""
+
+#: apply.c:928
+#, c-format
+msgid "git apply: bad git-diff - inconsistent old filename on line %d"
+msgstr ""
+
+#: apply.c:933
+#, c-format
+msgid "git apply: bad git-diff - expected /dev/null on line %d"
+msgstr ""
+
+#: apply.c:962
+#, c-format
+msgid "invalid mode on line %d: %s"
+msgstr ""
+
+#: apply.c:1281
+#, c-format
+msgid "inconsistent header lines %d and %d"
+msgstr ""
+
+#: apply.c:1371
+#, c-format
+msgid ""
+"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)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apply.c:1384
+#, c-format
+msgid "git diff header lacks filename information (line %d)"
+msgstr ""
+
+#: apply.c:1480
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr ""
+
+#: apply.c:1549
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr ""
+
+#: apply.c:1752
+msgid "new file depends on old contents"
+msgstr ""
+
+#: apply.c:1754
+msgid "deleted file still has contents"
+msgstr ""
+
+#: apply.c:1788
+#, c-format
+msgid "corrupt patch at line %d"
+msgstr ""
+
+#: apply.c:1825
+#, c-format
+msgid "new file %s depends on old contents"
+msgstr ""
+
+#: apply.c:1827
+#, c-format
+msgid "deleted file %s still has contents"
+msgstr ""
+
+#: apply.c:1830
+#, c-format
+msgid "** warning: file %s becomes empty but is not deleted"
+msgstr ""
+
+#: apply.c:1977
+#, c-format
+msgid "corrupt binary patch at line %d: %.*s"
+msgstr ""
+
+#: apply.c:2014
+#, c-format
+msgid "unrecognized binary patch at line %d"
+msgstr ""
+
+#: apply.c:2176
+#, c-format
+msgid "patch with only garbage at line %d"
+msgstr ""
+
+#: apply.c:2262
+#, c-format
+msgid "unable to read symlink %s"
+msgstr ""
+
+#: apply.c:2266
+#, c-format
+msgid "unable to open or read %s"
+msgstr ""
+
+#: apply.c:2935
+#, c-format
+msgid "invalid start of line: '%c'"
+msgstr ""
+
+#: apply.c:3056
+#, c-format
+msgid "Hunk #%d succeeded at %d (offset %d line)."
+msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apply.c:3068
+#, c-format
+msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
+msgstr ""
+
+#: apply.c:3074
+#, c-format
+msgid ""
+"while searching for:\n"
+"%.*s"
+msgstr ""
+
+#: apply.c:3096
+#, c-format
+msgid "missing binary patch data for '%s'"
+msgstr ""
+
+#: apply.c:3104
+#, c-format
+msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
+msgstr ""
+
+#: apply.c:3151
+#, c-format
+msgid "cannot apply binary patch to '%s' without full index line"
+msgstr ""
+
+#: apply.c:3162
+#, c-format
+msgid ""
+"the patch applies to '%s' (%s), which does not match the current contents."
+msgstr ""
+
+#: apply.c:3170
+#, c-format
+msgid "the patch applies to an empty '%s' but it is not empty"
+msgstr ""
+
+#: apply.c:3188
+#, c-format
+msgid "the necessary postimage %s for '%s' cannot be read"
+msgstr ""
+
+#: apply.c:3201
+#, c-format
+msgid "binary patch does not apply to '%s'"
+msgstr ""
+
+#: apply.c:3208
+#, c-format
+msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
+msgstr ""
+
+#: apply.c:3229
+#, c-format
+msgid "patch failed: %s:%ld"
+msgstr ""
+
+#: apply.c:3352
+#, c-format
+msgid "cannot checkout %s"
+msgstr ""
+
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
+#, c-format
+msgid "failed to read %s"
+msgstr ""
+
+#: apply.c:3412
+#, c-format
+msgid "reading from '%s' beyond a symbolic link"
+msgstr ""
+
+#: apply.c:3441 apply.c:3687
+#, c-format
+msgid "path %s has been renamed/deleted"
+msgstr ""
+
+#: apply.c:3527 apply.c:3702
+#, c-format
+msgid "%s: does not exist in index"
+msgstr ""
+
+#: apply.c:3536 apply.c:3710 apply.c:3954
+#, c-format
+msgid "%s: does not match index"
+msgstr ""
+
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr ""
+
+#: apply.c:3574
+#, c-format
+msgid "Performing three-way merge...\n"
+msgstr ""
+
+#: apply.c:3590 apply.c:3594
+#, c-format
+msgid "cannot read the current contents of '%s'"
+msgstr ""
+
+#: apply.c:3606
+#, c-format
+msgid "Failed to perform three-way merge...\n"
+msgstr ""
+
+#: apply.c:3620
+#, c-format
+msgid "Applied patch to '%s' with conflicts.\n"
+msgstr ""
+
+#: apply.c:3625
+#, c-format
+msgid "Applied patch to '%s' cleanly.\n"
+msgstr ""
+
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr ""
+
+#: apply.c:3654
+msgid "removal patch leaves file contents"
+msgstr ""
+
+#: apply.c:3727
+#, c-format
+msgid "%s: wrong type"
+msgstr ""
+
+#: apply.c:3729
+#, c-format
+msgid "%s has type %o, expected %o"
+msgstr ""
+
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
+#, c-format
+msgid "invalid path '%s'"
+msgstr ""
+
+#: apply.c:3952
+#, c-format
+msgid "%s: already exists in index"
+msgstr ""
+
+#: apply.c:3956
+#, c-format
+msgid "%s: already exists in working directory"
+msgstr ""
+
+#: apply.c:3976
+#, c-format
+msgid "new mode (%o) of %s does not match old mode (%o)"
+msgstr ""
+
+#: apply.c:3981
+#, c-format
+msgid "new mode (%o) of %s does not match old mode (%o) of %s"
+msgstr ""
+
+#: apply.c:4001
+#, c-format
+msgid "affected file '%s' is beyond a symbolic link"
+msgstr ""
+
+#: apply.c:4005
+#, c-format
+msgid "%s: patch does not apply"
+msgstr ""
+
+#: apply.c:4020
+#, c-format
+msgid "Checking patch %s..."
+msgstr ""
+
+#: apply.c:4112
+#, c-format
+msgid "sha1 information is lacking or useless for submodule %s"
+msgstr ""
+
+#: apply.c:4119
+#, c-format
+msgid "mode change for %s, which is not in current HEAD"
+msgstr ""
+
+#: apply.c:4122
+#, c-format
+msgid "sha1 information is lacking or useless (%s)."
+msgstr ""
+
+#: apply.c:4131
+#, c-format
+msgid "could not add %s to temporary index"
+msgstr ""
+
+#: apply.c:4141
+#, c-format
+msgid "could not write temporary index to %s"
+msgstr ""
+
+#: apply.c:4279
+#, c-format
+msgid "unable to remove %s from index"
+msgstr ""
+
+#: apply.c:4313
+#, c-format
+msgid "corrupt patch for submodule %s"
+msgstr ""
+
+#: apply.c:4319
+#, c-format
+msgid "unable to stat newly created file '%s'"
+msgstr ""
+
+#: apply.c:4327
+#, c-format
+msgid "unable to create backing store for newly created file %s"
+msgstr ""
+
+#: apply.c:4333 apply.c:4478
+#, c-format
+msgid "unable to add cache entry for %s"
+msgstr ""
+
+#: apply.c:4376 builtin/bisect--helper.c:523
+#, c-format
+msgid "failed to write to '%s'"
+msgstr ""
+
+#: apply.c:4380
+#, c-format
+msgid "closing file '%s'"
+msgstr ""
+
+#: apply.c:4450
+#, c-format
+msgid "unable to write file '%s' mode %o"
+msgstr ""
+
+#: apply.c:4548
+#, c-format
+msgid "Applied patch %s cleanly."
+msgstr ""
+
+#: apply.c:4556
+msgid "internal error"
+msgstr ""
+
+#: apply.c:4559
+#, c-format
+msgid "Applying patch %%s with %d reject..."
+msgid_plural "Applying patch %%s with %d rejects..."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apply.c:4570
+#, c-format
+msgid "truncating .rej filename to %.*s.rej"
+msgstr ""
+
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#, c-format
+msgid "cannot open %s"
+msgstr ""
+
+#: apply.c:4592
+#, c-format
+msgid "Hunk #%d applied cleanly."
+msgstr ""
+
+#: apply.c:4596
+#, c-format
+msgid "Rejected hunk #%d."
+msgstr ""
+
+#: apply.c:4725
+#, c-format
+msgid "Skipped patch '%s'."
+msgstr ""
+
+#: apply.c:4733
+msgid "unrecognized input"
+msgstr ""
+
+#: apply.c:4753
+msgid "unable to read index file"
+msgstr ""
+
+#: apply.c:4910
+#, c-format
+msgid "can't open patch '%s': %s"
+msgstr ""
+
+#: apply.c:4937
+#, c-format
+msgid "squelched %d whitespace error"
+msgid_plural "squelched %d whitespace errors"
+msgstr[0] ""
+msgstr[1] ""
+
+#: apply.c:4943 apply.c:4958
+#, c-format
+msgid "%d line adds whitespace errors."
+msgid_plural "%d lines add whitespace errors."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apply.c:4951
+#, c-format
+msgid "%d line applied after fixing whitespace errors."
+msgid_plural "%d lines applied after fixing whitespace errors."
+msgstr[0] ""
+msgstr[1] ""
+
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
+msgid "Unable to write new index file"
+msgstr ""
+
+#: apply.c:4995
+msgid "don't apply changes matching the given path"
+msgstr ""
+
+#: apply.c:4998
+msgid "apply changes matching the given path"
+msgstr ""
+
+#: apply.c:5000 builtin/am.c:2317
+msgid "num"
+msgstr ""
+
+#: apply.c:5001
+msgid "remove <num> leading slashes from traditional diff paths"
+msgstr ""
+
+#: apply.c:5004
+msgid "ignore additions made by the patch"
+msgstr ""
+
+#: apply.c:5006
+msgid "instead of applying the patch, output diffstat for the input"
+msgstr ""
+
+#: apply.c:5010
+msgid "show number of added and deleted lines in decimal notation"
+msgstr ""
+
+#: apply.c:5012
+msgid "instead of applying the patch, output a summary for the input"
+msgstr ""
+
+#: apply.c:5014
+msgid "instead of applying the patch, see if the patch is applicable"
+msgstr ""
+
+#: apply.c:5016
+msgid "make sure the patch is applicable to the current index"
+msgstr ""
+
+#: apply.c:5018
+msgid "mark new files with `git add --intent-to-add`"
+msgstr ""
+
+#: apply.c:5020
+msgid "apply a patch without touching the working tree"
+msgstr ""
+
+#: apply.c:5022
+msgid "accept a patch that touches outside the working area"
+msgstr ""
+
+#: apply.c:5025
+msgid "also apply the patch (use with --stat/--summary/--check)"
+msgstr ""
+
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr ""
+
+#: apply.c:5029
+msgid "build a temporary index based on embedded index information"
+msgstr ""
+
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+msgid "paths are separated with NUL character"
+msgstr ""
+
+#: apply.c:5034
+msgid "ensure at least <n> lines of context match"
+msgstr ""
+
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
+msgid "action"
+msgstr ""
+
+#: apply.c:5036
+msgid "detect new or modified lines that have whitespace errors"
+msgstr ""
+
+#: apply.c:5039 apply.c:5042
+msgid "ignore changes in whitespace when finding context"
+msgstr ""
+
+#: apply.c:5045
+msgid "apply the patch in reverse"
+msgstr ""
+
+#: apply.c:5047
+msgid "don't expect at least one line of context"
+msgstr ""
+
+#: apply.c:5049
+msgid "leave the rejected hunks in corresponding *.rej files"
+msgstr ""
+
+#: apply.c:5051
+msgid "allow overlapping hunks"
+msgstr ""
+
+#: 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
+msgid "be verbose"
+msgstr ""
+
+#: apply.c:5054
+msgid "tolerate incorrectly detected missing new-line at the end of file"
+msgstr ""
+
+#: apply.c:5057
+msgid "do not trust the line counts in the hunk headers"
+msgstr ""
+
+#: apply.c:5059 builtin/am.c:2305
+msgid "root"
+msgstr ""
+
+#: apply.c:5060
+msgid "prepend <root> to all filenames"
+msgstr ""
+
+#: archive-tar.c:125 archive-zip.c:345
+#, c-format
+msgid "cannot stream blob %s"
+msgstr ""
+
+#: archive-tar.c:265 archive-zip.c:358
+#, c-format
+msgid "unsupported file mode: 0%o (SHA1: %s)"
+msgstr ""
+
+#: archive-tar.c:450
+#, c-format
+msgid "unable to start '%s' filter"
+msgstr ""
+
+#: archive-tar.c:453
+msgid "unable to redirect descriptor"
+msgstr ""
+
+#: archive-tar.c:460
+#, c-format
+msgid "'%s' filter reported error"
+msgstr ""
+
+#: archive-zip.c:318
+#, c-format
+msgid "path is not valid UTF-8: %s"
+msgstr ""
+
+#: archive-zip.c:322
+#, c-format
+msgid "path too long (%d chars, SHA1: %s): %s"
+msgstr ""
+
+#: archive-zip.c:469 builtin/pack-objects.c:244 builtin/pack-objects.c:247
+#, c-format
+msgid "deflate error (%d)"
+msgstr ""
+
+#: archive-zip.c:603
+#, c-format
+msgid "timestamp too large for this system: %<PRIuMAX>"
+msgstr ""
+
+#: archive.c:14
+msgid "git archive [<options>] <tree-ish> [<path>...]"
+msgstr "git archive [<opsi>] <mirip pohon> [<jalur>...]"
+
+#: archive.c:15
+msgid "git archive --list"
+msgstr "git archive --list"
+
+#: archive.c:16
+msgid ""
+"git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
+msgstr ""
+"git archive --remote <repo> [--exec <perintah>] [<opsi>] <mirip pohon> "
+"[<jalur>...]"
+
+#: archive.c:17
+msgid "git archive --remote <repo> [--exec <cmd>] --list"
+msgstr "git archive --remote <repo> [--exec <perintah>] --list"
+
+#: archive.c:188
+#, c-format
+msgid "cannot read %s"
+msgstr "Tidak dapat membaca %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
+#, c-format
+msgid "could not read '%s'"
+msgstr "tidak dapat membaca '%s'"
+
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
+#, c-format
+msgid "pathspec '%s' did not match any files"
+msgstr "spek jalur '%s' tidak cocok dengan berkas apapun"
+
+#: archive.c:451
+#, c-format
+msgid "no such ref: %.*s"
+msgstr "tidak ada referensi seperti: %.*s"
+
+#: archive.c:457
+#, c-format
+msgid "not a valid object name: %s"
+msgstr "bukan nama objek valid: %s"
+
+#: archive.c:470
+#, c-format
+msgid "not a tree object: %s"
+msgstr "bukan objek pohon: %s"
+
+#: archive.c:482
+msgid "current working directory is untracked"
+msgstr "direktori kerja saat ini tak terlacak"
+
+#: archive.c:523
+#, c-format
+msgid "File not found: %s"
+msgstr "Berkas tidak ditemukan: %s"
+
+#: archive.c:525
+#, c-format
+msgid "Not a regular file: %s"
+msgstr "Bukan berkas reguler: %s"
+
+#: archive.c:552
+msgid "fmt"
+msgstr "fmt"
+
+#: archive.c:552
+msgid "archive format"
+msgstr "format arsip"
+
+#: archive.c:553 builtin/log.c:1772
+msgid "prefix"
+msgstr "prefiks"
+
+#: archive.c:554
+msgid "prepend prefix to each pathname in the archive"
+msgstr "tambahkan prefiks di depan setiap nama jalur dalam arsip"
+
+#: 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
+msgid "file"
+msgstr "berkas"
+
+#: archive.c:556
+msgid "add untracked file to archive"
+msgstr "tambahkan berkas tak terlacak ke arsip"
+
+#: archive.c:559 builtin/archive.c:90
+msgid "write the archive to this file"
+msgstr "tulis arsip ke berkas ini"
+
+#: archive.c:561
+msgid "read .gitattributes in working directory"
+msgstr "baca .gitattributes dalam direktori kerja"
+
+#: archive.c:562
+msgid "report archived files on stderr"
+msgstr "laporkan berkas terarsip ke error standar"
+
+#: archive.c:564
+msgid "set compression level"
+msgstr "setel level kompresi"
+
+#: archive.c:567
+msgid "list supported archive formats"
+msgstr "daftar format arsip yang didukung"
+
+#: 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
+msgid "repo"
+msgstr "repositori"
+
+#: archive.c:570 builtin/archive.c:92
+msgid "retrieve the archive from remote repository <repo>"
+msgstr "ambil arsip dari repositori remote <repo>"
+
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
+#: builtin/notes.c:498
+msgid "command"
+msgstr "perintah"
+
+#: archive.c:572 builtin/archive.c:94
+msgid "path to the remote git-upload-archive command"
+msgstr "jalur ke perintah git-upload-archive remote"
+
+#: archive.c:579
+msgid "Unexpected option --remote"
+msgstr "Opsi --remote tak diharapkan"
+
+#: archive.c:581
+msgid "Option --exec can only be used together with --remote"
+msgstr "Opsi --exec hanya dapat digunakan bersamaan dengan --remote"
+
+#: archive.c:583
+msgid "Unexpected option --output"
+msgstr "Opsi --output tak diharapkan"
+
+#: archive.c:585
+msgid "Options --add-file and --remote cannot be used together"
+msgstr "Opsi --add-file dan --remote tidak dapat digunakan bersamaan"
+
+#: archive.c:607
+#, c-format
+msgid "Unknown archive format '%s'"
+msgstr "Format arsip tidak dikenal '%s'"
+
+#: archive.c:616
+#, c-format
+msgid "Argument not supported for format '%s': -%d"
+msgstr "Argumen tidak didukung untuk format '%s': -%d"
+
+#: attr.c:202
+#, c-format
+msgid "%.*s is not a valid attribute name"
+msgstr ""
+
+#: attr.c:363
+#, c-format
+msgid "%s not allowed: %s:%d"
+msgstr ""
+
+#: attr.c:403
+msgid ""
+"Negative patterns are ignored in git attributes\n"
+"Use '\\!' for literal leading exclamation."
+msgstr ""
+
+#: bisect.c:489
+#, c-format
+msgid "Badly quoted content in file '%s': %s"
+msgstr ""
+
+#: bisect.c:699
+#, c-format
+msgid "We cannot bisect more!\n"
+msgstr ""
+
+#: bisect.c:766
+#, c-format
+msgid "Not a valid commit name %s"
+msgstr ""
+
+#: bisect.c:791
+#, c-format
+msgid ""
+"The merge base %s is bad.\n"
+"This means the bug has been fixed between %s and [%s].\n"
+msgstr ""
+
+#: bisect.c:796
+#, c-format
+msgid ""
+"The merge base %s is new.\n"
+"The property has changed between %s and [%s].\n"
+msgstr ""
+
+#: bisect.c:801
+#, c-format
+msgid ""
+"The merge base %s is %s.\n"
+"This means the first '%s' commit is between %s and [%s].\n"
+msgstr ""
+
+#: bisect.c:809
+#, c-format
+msgid ""
+"Some %s revs are not ancestors of the %s rev.\n"
+"git bisect cannot work properly in this case.\n"
+"Maybe you mistook %s and %s revs?\n"
+msgstr ""
+
+#: bisect.c:822
+#, c-format
+msgid ""
+"the merge base between %s and [%s] must be skipped.\n"
+"So we cannot be sure the first %s commit is between %s and %s.\n"
+"We continue anyway."
+msgstr ""
+
+#: bisect.c:861
+#, c-format
+msgid "Bisecting: a merge base must be tested\n"
+msgstr ""
+
+#: bisect.c:911
+#, c-format
+msgid "a %s revision is needed"
+msgstr ""
+
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#, c-format
+msgid "could not create file '%s'"
+msgstr ""
+
+#: bisect.c:987 builtin/merge.c:153
+#, c-format
+msgid "could not read file '%s'"
+msgstr ""
+
+#: bisect.c:1027
+msgid "reading bisect refs failed"
+msgstr ""
+
+#: bisect.c:1057
+#, c-format
+msgid "%s was both %s and %s\n"
+msgstr ""
+
+#: bisect.c:1066
+#, c-format
+msgid ""
+"No testable commit found.\n"
+"Maybe you started with bad path arguments?\n"
+msgstr ""
+
+#: bisect.c:1095
+#, c-format
+msgid "(roughly %d step)"
+msgid_plural "(roughly %d steps)"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: the last %s will be replaced with "(roughly %d
+#. steps)" translation.
+#.
+#: bisect.c:1101
+#, 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"
+msgstr[0] ""
+msgstr[1] ""
+
+#: blame.c:2776
+msgid "--contents and --reverse do not blend well."
+msgstr ""
+
+#: blame.c:2790
+msgid "cannot use --contents with final commit object name"
+msgstr ""
+
+#: blame.c:2811
+msgid "--reverse and --first-parent together require specified latest commit"
+msgstr ""
+
+#: 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
+msgid "revision walk setup failed"
+msgstr "persiapan jalan revisi gagal"
+
+#: blame.c:2838
+msgid ""
+"--reverse --first-parent together require range along first-parent chain"
+msgstr ""
+
+#: blame.c:2849
+#, c-format
+msgid "no such path %s in %s"
+msgstr ""
+
+#: blame.c:2860
+#, c-format
+msgid "cannot read blob %s for path %s"
+msgstr ""
+
+#: branch.c:53
+#, c-format
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\"."
+msgstr ""
+
+#: branch.c:67
+#, c-format
+msgid "Not setting branch %s as its own upstream."
+msgstr ""
+
+#: branch.c:93
+#, c-format
+msgid "Branch '%s' set up to track remote branch '%s' from '%s' by rebasing."
+msgstr ""
+
+#: branch.c:94
+#, c-format
+msgid "Branch '%s' set up to track remote branch '%s' from '%s'."
+msgstr ""
+
+#: branch.c:98
+#, c-format
+msgid "Branch '%s' set up to track local branch '%s' by rebasing."
+msgstr ""
+
+#: branch.c:99
+#, c-format
+msgid "Branch '%s' set up to track local branch '%s'."
+msgstr ""
+
+#: branch.c:104
+#, c-format
+msgid "Branch '%s' set up to track remote ref '%s' by rebasing."
+msgstr ""
+
+#: branch.c:105
+#, c-format
+msgid "Branch '%s' set up to track remote ref '%s'."
+msgstr ""
+
+#: branch.c:109
+#, c-format
+msgid "Branch '%s' set up to track local ref '%s' by rebasing."
+msgstr ""
+
+#: branch.c:110
+#, c-format
+msgid "Branch '%s' set up to track local ref '%s'."
+msgstr ""
+
+#: branch.c:119
+msgid "Unable to write upstream branch configuration"
+msgstr ""
+
+#: branch.c:156
+#, c-format
+msgid "Not tracking: ambiguous information for ref %s"
+msgstr ""
+
+#: branch.c:189
+#, c-format
+msgid "'%s' is not a valid branch name."
+msgstr ""
+
+#: branch.c:208
+#, c-format
+msgid "A branch named '%s' already exists."
+msgstr ""
+
+#: branch.c:213
+msgid "Cannot force update the current branch."
+msgstr ""
+
+#: branch.c:233
+#, c-format
+msgid "Cannot setup tracking information; starting point '%s' is not a branch."
+msgstr ""
+
+#: branch.c:235
+#, c-format
+msgid "the requested upstream branch '%s' does not exist"
+msgstr ""
+
+#: branch.c:237
+msgid ""
+"\n"
+"If you are planning on basing your work on an upstream\n"
+"branch that already exists at the remote, you may need to\n"
+"run \"git fetch\" to retrieve it.\n"
+"\n"
+"If you are planning to push out a new local branch that\n"
+"will track its remote counterpart, you may want to use\n"
+"\"git push -u\" to set the upstream config as you push."
+msgstr ""
+
+#: branch.c:281
+#, c-format
+msgid "Not a valid object name: '%s'."
+msgstr ""
+
+#: branch.c:301
+#, c-format
+msgid "Ambiguous object name: '%s'."
+msgstr ""
+
+#: branch.c:306
+#, c-format
+msgid "Not a valid branch point: '%s'."
+msgstr ""
+
+#: branch.c:366
+#, c-format
+msgid "'%s' is already checked out at '%s'"
+msgstr ""
+
+#: branch.c:389
+#, c-format
+msgid "HEAD of working tree %s is not updated"
+msgstr ""
+
+#: bundle.c:41
+#, c-format
+msgid "unrecognized bundle hash algorithm: %s"
+msgstr ""
+
+#: bundle.c:45
+#, c-format
+msgid "unknown capability '%s'"
+msgstr ""
+
+#: bundle.c:71
+#, c-format
+msgid "'%s' does not look like a v2 or v3 bundle file"
+msgstr ""
+
+#: bundle.c:110
+#, c-format
+msgid "unrecognized header: %s%s (%d)"
+msgstr ""
+
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
+#, c-format
+msgid "could not open '%s'"
+msgstr ""
+
+#: bundle.c:189
+msgid "Repository lacks these prerequisite commits:"
+msgstr ""
+
+#: bundle.c:192
+msgid "need a repository to verify a bundle"
+msgstr ""
+
+#: bundle.c:243
+#, c-format
+msgid "The bundle contains this ref:"
+msgid_plural "The bundle contains these %d refs:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bundle.c:250
+msgid "The bundle records a complete history."
+msgstr ""
+
+#: bundle.c:252
+#, c-format
+msgid "The bundle requires this ref:"
+msgid_plural "The bundle requires these %d refs:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bundle.c:319
+msgid "unable to dup bundle descriptor"
+msgstr ""
+
+#: bundle.c:326
+msgid "Could not spawn pack-objects"
+msgstr ""
+
+#: bundle.c:337
+msgid "pack-objects died"
+msgstr ""
+
+#: bundle.c:386
+#, c-format
+msgid "ref '%s' is excluded by the rev-list options"
+msgstr ""
+
+#: bundle.c:490
+#, c-format
+msgid "unsupported bundle version %d"
+msgstr ""
+
+#: bundle.c:492
+#, c-format
+msgid "cannot write bundle version %d with algorithm %s"
+msgstr ""
+
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr ""
+
+#: bundle.c:539
+msgid "Refusing to create empty bundle."
+msgstr ""
+
+#: bundle.c:549
+#, c-format
+msgid "cannot create '%s'"
+msgstr ""
+
+#: bundle.c:574
+msgid "index-pack died"
+msgstr ""
+
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr ""
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr ""
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr ""
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr ""
+
+#: color.c:329
+#, c-format
+msgid "invalid color value: %.*s"
+msgstr ""
+
+#: commit-graph.c:204 midx.c:47
+msgid "invalid hash version"
+msgstr ""
+
+#: commit-graph.c:262
+msgid "commit-graph file is too small"
+msgstr ""
+
+#: commit-graph.c:355
+#, c-format
+msgid "commit-graph signature %X does not match signature %X"
+msgstr ""
+
+#: commit-graph.c:362
+#, c-format
+msgid "commit-graph version %X does not match version %X"
+msgstr ""
+
+#: commit-graph.c:369
+#, c-format
+msgid "commit-graph hash version %X does not match version %X"
+msgstr ""
+
+#: commit-graph.c:386
+#, c-format
+msgid "commit-graph file is too small to hold %u chunks"
+msgstr ""
+
+#: commit-graph.c:482
+msgid "commit-graph has no base graphs chunk"
+msgstr ""
+
+#: commit-graph.c:492
+msgid "commit-graph chain does not match"
+msgstr ""
+
+#: commit-graph.c:540
+#, c-format
+msgid "invalid commit-graph chain: line '%s' not a hash"
+msgstr ""
+
+#: commit-graph.c:564
+msgid "unable to find all commit-graph files"
+msgstr ""
+
+#: commit-graph.c:745 commit-graph.c:782
+msgid "invalid commit position. commit-graph is likely corrupt"
+msgstr ""
+
+#: commit-graph.c:766
+#, c-format
+msgid "could not find commit %s"
+msgstr ""
+
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr ""
+
+#: commit-graph.c:1075 builtin/am.c:1340
+#, c-format
+msgid "unable to parse commit %s"
+msgstr ""
+
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
+#, c-format
+msgid "unable to get type of object %s"
+msgstr ""
+
+#: commit-graph.c:1368
+msgid "Loading known commits in commit graph"
+msgstr ""
+
+#: commit-graph.c:1385
+msgid "Expanding reachable commits in commit graph"
+msgstr ""
+
+#: commit-graph.c:1405
+msgid "Clearing commit marks in commit graph"
+msgstr ""
+
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr ""
+
+#: commit-graph.c:1477
+msgid "Computing commit graph generation numbers"
+msgstr ""
+
+#: commit-graph.c:1558
+msgid "Computing commit changed paths Bloom filters"
+msgstr ""
+
+#: commit-graph.c:1635
+msgid "Collecting referenced commits"
+msgstr ""
+
+#: commit-graph.c:1660
+#, c-format
+msgid "Finding commits for commit graph in %d pack"
+msgid_plural "Finding commits for commit graph in %d packs"
+msgstr[0] ""
+msgstr[1] ""
+
+#: commit-graph.c:1673
+#, c-format
+msgid "error adding pack %s"
+msgstr ""
+
+#: commit-graph.c:1677
+#, c-format
+msgid "error opening index for %s"
+msgstr ""
+
+#: commit-graph.c:1714
+msgid "Finding commits for commit graph among packed objects"
+msgstr ""
+
+#: commit-graph.c:1732
+msgid "Finding extra edges in commit graph"
+msgstr ""
+
+#: commit-graph.c:1781
+msgid "failed to write correct number of base graph ids"
+msgstr ""
+
+#: commit-graph.c:1812 midx.c:906
+#, c-format
+msgid "unable to create leading directories of %s"
+msgstr ""
+
+#: commit-graph.c:1825
+msgid "unable to create temporary graph layer"
+msgstr ""
+
+#: commit-graph.c:1830
+#, c-format
+msgid "unable to adjust shared permissions for '%s'"
+msgstr ""
+
+#: commit-graph.c:1887
+#, c-format
+msgid "Writing out commit graph in %d pass"
+msgid_plural "Writing out commit graph in %d passes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: commit-graph.c:1923
+msgid "unable to open commit-graph chain file"
+msgstr ""
+
+#: commit-graph.c:1939
+msgid "failed to rename base commit-graph file"
+msgstr ""
+
+#: commit-graph.c:1959
+msgid "failed to rename temporary commit-graph file"
+msgstr ""
+
+#: commit-graph.c:2092
+msgid "Scanning merged commits"
+msgstr ""
+
+#: commit-graph.c:2136
+msgid "Merging commit-graph"
+msgstr ""
+
+#: commit-graph.c:2244
+msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
+msgstr ""
+
+#: commit-graph.c:2351
+msgid "too many commits to write graph"
+msgstr ""
+
+#: commit-graph.c:2450
+msgid "the commit-graph file has incorrect checksum and is likely corrupt"
+msgstr ""
+
+#: commit-graph.c:2460
+#, c-format
+msgid "commit-graph has incorrect OID order: %s then %s"
+msgstr ""
+
+#: commit-graph.c:2470 commit-graph.c:2485
+#, c-format
+msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
+msgstr ""
+
+#: commit-graph.c:2477
+#, c-format
+msgid "failed to parse commit %s from commit-graph"
+msgstr ""
+
+#: commit-graph.c:2495
+msgid "Verifying commits in commit graph"
+msgstr ""
+
+#: commit-graph.c:2510
+#, c-format
+msgid "failed to parse commit %s from object database for commit-graph"
+msgstr ""
+
+#: commit-graph.c:2517
+#, c-format
+msgid "root tree OID for commit %s in commit-graph is %s != %s"
+msgstr ""
+
+#: commit-graph.c:2527
+#, c-format
+msgid "commit-graph parent list for commit %s is too long"
+msgstr ""
+
+#: commit-graph.c:2536
+#, c-format
+msgid "commit-graph parent for %s is %s != %s"
+msgstr ""
+
+#: commit-graph.c:2550
+#, c-format
+msgid "commit-graph parent list for commit %s terminates early"
+msgstr ""
+
+#: commit-graph.c:2555
+#, c-format
+msgid ""
+"commit-graph has generation number zero for commit %s, but non-zero elsewhere"
+msgstr ""
+
+#: commit-graph.c:2559
+#, c-format
+msgid ""
+"commit-graph has non-zero generation number for commit %s, but zero elsewhere"
+msgstr ""
+
+#: commit-graph.c:2576
+#, c-format
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr ""
+
+#: commit-graph.c:2582
+#, c-format
+msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
+msgstr ""
+
+#: 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
+#, c-format
+msgid "could not parse %s"
+msgstr ""
+
+#: commit.c:54
+#, c-format
+msgid "%s %s is not a commit!"
+msgstr ""
+
+#: commit.c:194
+msgid ""
+"Support for <GIT_DIR>/info/grafts is deprecated\n"
+"and will be removed in a future Git version.\n"
+"\n"
+"Please use \"git replace --convert-graft-file\"\n"
+"to convert the grafts into replace refs.\n"
+"\n"
+"Turn this message off by running\n"
+"\"git config advice.graftFileDeprecated false\""
+msgstr ""
+
+#: commit.c:1237
+#, c-format
+msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
+msgstr ""
+
+#: commit.c:1241
+#, c-format
+msgid "Commit %s has a bad GPG signature allegedly by %s."
+msgstr ""
+
+#: commit.c:1244
+#, c-format
+msgid "Commit %s does not have a GPG signature."
+msgstr ""
+
+#: commit.c:1247
+#, c-format
+msgid "Commit %s has a good GPG signature by %s\n"
+msgstr ""
+
+#: commit.c:1501
+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"
+"variable i18n.commitencoding to the encoding your project uses.\n"
+msgstr ""
+
+#: compat/obstack.c:406 compat/obstack.c:408
+msgid "memory exhausted"
+msgstr ""
+
+#: config.c:126
+#, c-format
+msgid ""
+"exceeded maximum include depth (%d) while including\n"
+"\t%s\n"
+"from\n"
+"\t%s\n"
+"This might be due to circular includes."
+msgstr ""
+"melebihi kedalaman include maksimum (%d) ketika memasukkan\n"
+"\t%s\n"
+"dari\n"
+"\t%s\n"
+"Ini mungkin disebabkan oleh include sirkular."
+
+#: config.c:142
+#, c-format
+msgid "could not expand include path '%s'"
+msgstr "tidak dapat menjabarkan jalur include '%s'"
+
+#: config.c:153
+msgid "relative config includes must come from files"
+msgstr "include konfigurasi relatif harus dari berkas"
+
+#: config.c:199
+msgid "relative config include conditionals must come from files"
+msgstr "kondisional include konfigurasi relative harus dari berkas"
+
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "format konfigurasi tidak valid: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "nama variabel lingkungan untuk konfigurasi hilang '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "variabel lingkungan '%s' untuk konfigurasi '%.*s'"
+
+#: config.c:442
+#, c-format
+msgid "key does not contain a section: %s"
+msgstr "kunci tidak berisi bagian: %s"
+
+#: config.c:448
+#, c-format
+msgid "key does not contain variable name: %s"
+msgstr "kunci tidak berisi nama variabel: %s"
+
+#: config.c:472 sequencer.c:2785
+#, c-format
+msgid "invalid key: %s"
+msgstr "kunci tidak valid: %s"
+
+#: config.c:478
+#, c-format
+msgid "invalid key (newline): %s"
+msgstr "kunci tidak valid (barisbaru): %s"
+
+#: config.c:511
+msgid "empty config key"
+msgstr "kunci konfigurasi kosong"
+
+#: config.c:529 config.c:541
+#, c-format
+msgid "bogus config parameter: %s"
+msgstr "parameter konfigurasi gadungan: %s"
+
+#: config.c:555 config.c:572 config.c:579 config.c:588
+#, c-format
+msgid "bogus format in %s"
+msgstr "format gadungan dalam %s"
+
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "hitungan gadungan dalam %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "terlalu banyak entri di %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "kunci konfigurasi %s hilang"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "nilai konfigurasi %s hilang"
+
+#: config.c:995
+#, c-format
+msgid "bad config line %d in blob %s"
+msgstr "baris konfigurasi %d jelek dalam blob %s"
+
+#: config.c:999
+#, c-format
+msgid "bad config line %d in file %s"
+msgstr "baris konfigurasi %d jelek dalam berkas %s"
+
+#: config.c:1003
+#, c-format
+msgid "bad config line %d in standard input"
+msgstr "baris konfigurasi %d jelek pada masukan standar"
+
+#: config.c:1007
+#, c-format
+msgid "bad config line %d in submodule-blob %s"
+msgstr "baris konfigurasi %d jelek dalam blob submodul %s"
+
+#: config.c:1011
+#, c-format
+msgid "bad config line %d in command line %s"
+msgstr "baris konfigurasi %d jelek pada baris perintah %s"
+
+#: config.c:1015
+#, c-format
+msgid "bad config line %d in %s"
+msgstr "baris konfigurasi %d jelek dalam %s"
+
+#: config.c:1152
+msgid "out of range"
+msgstr "di luar rentang"
+
+#: config.c:1152
+msgid "invalid unit"
+msgstr "satuan tidak valid"
+
+#: config.c:1153
+#, c-format
+msgid "bad numeric config value '%s' for '%s': %s"
+msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s': %s"
+
+#: config.c:1163
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
+msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam blob %s: %s"
+
+#: config.c:1166
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in file %s: %s"
+msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam berkas %s: %s"
+
+#: config.c:1169
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in standard input: %s"
+msgstr ""
+"nilai konfigurasi numerik '%s' jelek untuk '%s' pada masukan standar: %s"
+
+#: config.c:1172
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
+msgstr ""
+"nilai konfigurasi numerik '%s' jelek untuk '%s' dalam blob submodul %s: %s"
+
+#: config.c:1175
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
+msgstr ""
+"nilai konfigurasi numerik '%s' jelek untuk '%s' pada baris perintah %s: %s"
+
+#: config.c:1178
+#, c-format
+msgid "bad numeric config value '%s' for '%s' in %s: %s"
+msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam %s: %s"
+
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "nilai konfigurasi boolean '%s' jelek untuk '%s'"
+
+#: config.c:1275
+#, c-format
+msgid "failed to expand user dir in: '%s'"
+msgstr "gagal menjabarkan direktori pengguna di: '%s'"
+
+#: config.c:1284
+#, c-format
+msgid "'%s' for '%s' is not a valid timestamp"
+msgstr "'%s' untuk '%s' bukan stempel waktu valid"
+
+#: config.c:1377
+#, c-format
+msgid "abbrev length out of range: %d"
+msgstr "panjang singkatan di luar rentang: %d"
+
+#: config.c:1391 config.c:1402
+#, c-format
+msgid "bad zlib compression level %d"
+msgstr "level kompresi zlib jelek %d"
+
+#: config.c:1494
+msgid "core.commentChar should only be one character"
+msgstr "core.commentChar harusnya hanya satu karakter"
+
+#: config.c:1527
+#, c-format
+msgid "invalid mode for object creation: %s"
+msgstr "mode tidak valid untuk pembuatan objek: %s"
+
+#: config.c:1599
+#, c-format
+msgid "malformed value for %s"
+msgstr "nilai rusak untuk %s"
+
+#: config.c:1625
+#, c-format
+msgid "malformed value for %s: %s"
+msgstr "nilai rusak untuk %s: %s"
+
+#: config.c:1626
+msgid "must be one of nothing, matching, simple, upstream or current"
+msgstr "harus salah satu dari nothing, matching, simple, upstream atau current"
+
+#: config.c:1687 builtin/pack-objects.c:3924
+#, c-format
+msgid "bad pack compression level %d"
+msgstr "level kompresi pak jelek %d"
+
+#: config.c:1809
+#, c-format
+msgid "unable to load config blob object '%s'"
+msgstr "tidak dapat memuat objek blob konfigurasi '%s'"
+
+#: config.c:1812
+#, c-format
+msgid "reference '%s' does not point to a blob"
+msgstr "referensi '%s' tidak menunjuk pada sebuah blob"
+
+#: config.c:1829
+#, c-format
+msgid "unable to resolve config blob '%s'"
+msgstr "tidak dapat menguraikan blob konfigurasi '%s'"
+
+#: config.c:1873
+#, c-format
+msgid "failed to parse %s"
+msgstr "gagal menguraikan %s"
+
+#: config.c:1929
+msgid "unable to parse command-line config"
+msgstr "gagal menguraikan konfigurasi baris perintah"
+
+#: config.c:2293
+msgid "unknown error occurred while reading the configuration files"
+msgstr "error tidak diketahui ketika membaca berkas konfigurasi"
+
+#: config.c:2467
+#, c-format
+msgid "Invalid %s: '%s'"
+msgstr "%s tidak valid: '%s'"
+
+#: config.c:2512
+#, c-format
+msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
+msgstr "nilai splitIndex.maxPercentChange '%d' harusnya diantara 0 dan 100"
+
+#: config.c:2558
+#, c-format
+msgid "unable to parse '%s' from command-line config"
+msgstr "tidak dapat menguraikan '%s' dari konfigurasi baris perintah"
+
+#: config.c:2560
+#, c-format
+msgid "bad config variable '%s' in file '%s' at line %d"
+msgstr "variabel konfigurasi '%s' jelek dalam berkas '%s' pada baris %d"
+
+#: config.c:2644
+#, c-format
+msgid "invalid section name '%s'"
+msgstr "nama bagian '%s' tidak valid"
+
+#: config.c:2676
+#, c-format
+msgid "%s has multiple values"
+msgstr "%s punya banyak nilai"
+
+#: config.c:2705
+#, c-format
+msgid "failed to write new configuration file %s"
+msgstr "gagal menulis berkas konfigurasi baru %s"
+
+#: config.c:2957 config.c:3283
+#, c-format
+msgid "could not lock config file %s"
+msgstr "tidak dapat mengunci berkas konfigurasi %s"
+
+#: config.c:2968
+#, c-format
+msgid "opening %s"
+msgstr "membuka %s"
+
+#: config.c:3005 builtin/config.c:361
+#, c-format
+msgid "invalid pattern: %s"
+msgstr "pola tidak valid: %s"
+
+#: config.c:3030
+#, c-format
+msgid "invalid config file %s"
+msgstr "berkas konfigurasi %s tidak valid"
+
+#: config.c:3043 config.c:3296
+#, c-format
+msgid "fstat on %s failed"
+msgstr "fstat pada %s gagal"
+
+#: config.c:3054
+#, c-format
+msgid "unable to mmap '%s'"
+msgstr "tidak dapat me-mmap '%s'"
+
+#: config.c:3063 config.c:3301
+#, c-format
+msgid "chmod on %s failed"
+msgstr "chmod pada %s gagal"
+
+#: config.c:3148 config.c:3398
+#, c-format
+msgid "could not write config file %s"
+msgstr "tidak dapat menulis berkas konfigurasi %s"
+
+#: config.c:3182
+#, c-format
+msgid "could not set '%s' to '%s'"
+msgstr "tidak dapat menyetel '%s' ke '%s'"
+
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#, c-format
+msgid "could not unset '%s'"
+msgstr "tidak dapat mem-batal setel '%s'"
+
+#: config.c:3274
+#, c-format
+msgid "invalid section name: %s"
+msgstr "nama bagian tidak valid: %s"
+
+#: config.c:3441
+#, c-format
+msgid "missing value for '%s'"
+msgstr "nilai hilang untuk '%s'"
+
+#: connect.c:61
+msgid "the remote end hung up upon initial contact"
+msgstr ""
+
+#: connect.c:63
+msgid ""
+"Could not read from remote repository.\n"
+"\n"
+"Please make sure you have the correct access rights\n"
+"and the repository exists."
+msgstr ""
+
+#: connect.c:81
+#, c-format
+msgid "server doesn't support '%s'"
+msgstr ""
+
+#: connect.c:118
+#, c-format
+msgid "server doesn't support feature '%s'"
+msgstr ""
+
+#: connect.c:129
+msgid "expected flush after capabilities"
+msgstr ""
+
+#: connect.c:263
+#, c-format
+msgid "ignoring capabilities after first line '%s'"
+msgstr ""
+
+#: connect.c:284
+msgid "protocol error: unexpected capabilities^{}"
+msgstr ""
+
+#: connect.c:306
+#, c-format
+msgid "protocol error: expected shallow sha-1, got '%s'"
+msgstr ""
+
+#: connect.c:308
+msgid "repository on the other end cannot be shallow"
+msgstr ""
+
+#: connect.c:347
+msgid "invalid packet"
+msgstr ""
+
+#: connect.c:367
+#, c-format
+msgid "protocol error: unexpected '%s'"
+msgstr ""
+
+#: connect.c:497
+#, c-format
+msgid "unknown object format '%s' specified by server"
+msgstr ""
+
+#: connect.c:526
+#, c-format
+msgid "invalid ls-refs response: %s"
+msgstr ""
+
+#: connect.c:530
+msgid "expected flush after ref listing"
+msgstr ""
+
+#: connect.c:533
+msgid "expected response end packet after ref listing"
+msgstr ""
+
+#: connect.c:666
+#, c-format
+msgid "protocol '%s' is not supported"
+msgstr ""
+
+#: connect.c:717
+msgid "unable to set SO_KEEPALIVE on socket"
+msgstr ""
+
+#: connect.c:757 connect.c:820
+#, c-format
+msgid "Looking up %s ... "
+msgstr ""
+
+#: connect.c:761
+#, c-format
+msgid "unable to look up %s (port %s) (%s)"
+msgstr ""
+
+#. TRANSLATORS: this is the end of "Looking up %s ... "
+#: connect.c:765 connect.c:836
+#, c-format
+msgid ""
+"done.\n"
+"Connecting to %s (port %s) ... "
+msgstr ""
+
+#: connect.c:787 connect.c:864
+#, c-format
+msgid ""
+"unable to connect to %s:\n"
+"%s"
+msgstr ""
+
+#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
+#: connect.c:793 connect.c:870
+msgid "done."
+msgstr ""
+
+#: connect.c:824
+#, c-format
+msgid "unable to look up %s (%s)"
+msgstr ""
+
+#: connect.c:830
+#, c-format
+msgid "unknown port %s"
+msgstr ""
+
+#: connect.c:967 connect.c:1299
+#, c-format
+msgid "strange hostname '%s' blocked"
+msgstr ""
+
+#: connect.c:969
+#, c-format
+msgid "strange port '%s' blocked"
+msgstr ""
+
+#: connect.c:979
+#, c-format
+msgid "cannot start proxy %s"
+msgstr ""
+
+#: connect.c:1050
+msgid "no path specified; see 'git help pull' for valid url syntax"
+msgstr ""
+
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr ""
+
+#: connect.c:1247
+msgid "ssh variant 'simple' does not support -4"
+msgstr ""
+
+#: connect.c:1259
+msgid "ssh variant 'simple' does not support -6"
+msgstr ""
+
+#: connect.c:1276
+msgid "ssh variant 'simple' does not support setting port"
+msgstr ""
+
+#: connect.c:1388
+#, c-format
+msgid "strange pathname '%s' blocked"
+msgstr ""
+
+#: connect.c:1436
+msgid "unable to fork"
+msgstr ""
+
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
+msgid "Checking connectivity"
+msgstr ""
+
+#: connected.c:120
+msgid "Could not run 'git rev-list'"
+msgstr ""
+
+#: connected.c:144
+msgid "failed write to rev-list"
+msgstr ""
+
+#: connected.c:149
+msgid "failed to close rev-list's stdin"
+msgstr ""
+
+#: convert.c:183
+#, c-format
+msgid "illegal crlf_action %d"
+msgstr ""
+
+#: convert.c:196
+#, c-format
+msgid "CRLF would be replaced by LF in %s"
+msgstr ""
+
+#: convert.c:198
+#, c-format
+msgid ""
+"CRLF will be replaced by LF in %s.\n"
+"The file will have its original line endings in your working directory"
+msgstr ""
+
+#: convert.c:206
+#, c-format
+msgid "LF would be replaced by CRLF in %s"
+msgstr ""
+
+#: convert.c:208
+#, c-format
+msgid ""
+"LF will be replaced by CRLF in %s.\n"
+"The file will have its original line endings in your working directory"
+msgstr ""
+
+#: convert.c:273
+#, c-format
+msgid "BOM is prohibited in '%s' if encoded as %s"
+msgstr ""
+
+#: convert.c:280
+#, c-format
+msgid ""
+"The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
+"working-tree-encoding."
+msgstr ""
+
+#: convert.c:293
+#, c-format
+msgid "BOM is required in '%s' if encoded as %s"
+msgstr ""
+
+#: 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."
+msgstr ""
+
+#: convert.c:408 convert.c:479
+#, c-format
+msgid "failed to encode '%s' from %s to %s"
+msgstr ""
+
+#: convert.c:451
+#, c-format
+msgid "encoding '%s' from %s to %s and back is not the same"
+msgstr ""
+
+#: convert.c:654
+#, c-format
+msgid "cannot fork to run external filter '%s'"
+msgstr ""
+
+#: convert.c:674
+#, c-format
+msgid "cannot feed the input to external filter '%s'"
+msgstr ""
+
+#: convert.c:681
+#, c-format
+msgid "external filter '%s' failed %d"
+msgstr ""
+
+#: convert.c:716 convert.c:719
+#, c-format
+msgid "read from external filter '%s' failed"
+msgstr ""
+
+#: convert.c:722 convert.c:777
+#, c-format
+msgid "external filter '%s' failed"
+msgstr ""
+
+#: convert.c:826
+msgid "unexpected filter type"
+msgstr ""
+
+#: convert.c:837
+msgid "path name too long for external filter"
+msgstr ""
+
+#: convert.c:934
+#, c-format
+msgid ""
+"external filter '%s' is not available anymore although not all paths have "
+"been filtered"
+msgstr ""
+
+#: convert.c:1234
+msgid "true/false are no valid working-tree-encodings"
+msgstr ""
+
+#: convert.c:1414 convert.c:1447
+#, c-format
+msgid "%s: clean filter '%s' failed"
+msgstr ""
+
+#: convert.c:1490
+#, c-format
+msgid "%s: smudge filter %s failed"
+msgstr ""
+
+#: credential.c:96
+#, c-format
+msgid "skipping credential lookup for key: credential.%s"
+msgstr ""
+
+#: credential.c:112
+msgid "refusing to work with credential missing host field"
+msgstr ""
+
+#: credential.c:114
+msgid "refusing to work with credential missing protocol field"
+msgstr ""
+
+#: credential.c:394
+#, c-format
+msgid "url contains a newline in its %s component: %s"
+msgstr ""
+
+#: credential.c:438
+#, c-format
+msgid "url has no scheme: %s"
+msgstr ""
+
+#: credential.c:511
+#, c-format
+msgid "credential url cannot be parsed: %s"
+msgstr ""
+
+#: date.c:138
+msgid "in the future"
+msgstr ""
+
+#: date.c:144
+#, c-format
+msgid "%<PRIuMAX> second ago"
+msgid_plural "%<PRIuMAX> seconds ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:151
+#, c-format
+msgid "%<PRIuMAX> minute ago"
+msgid_plural "%<PRIuMAX> minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:158
+#, c-format
+msgid "%<PRIuMAX> hour ago"
+msgid_plural "%<PRIuMAX> hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:165
+#, c-format
+msgid "%<PRIuMAX> day ago"
+msgid_plural "%<PRIuMAX> days ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:171
+#, c-format
+msgid "%<PRIuMAX> week ago"
+msgid_plural "%<PRIuMAX> weeks ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:178
+#, c-format
+msgid "%<PRIuMAX> month ago"
+msgid_plural "%<PRIuMAX> months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:189
+#, c-format
+msgid "%<PRIuMAX> year"
+msgid_plural "%<PRIuMAX> years"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: "%s" is "<n> years"
+#: date.c:192
+#, c-format
+msgid "%s, %<PRIuMAX> month ago"
+msgid_plural "%s, %<PRIuMAX> months ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: date.c:197 date.c:202
+#, c-format
+msgid "%<PRIuMAX> year ago"
+msgid_plural "%<PRIuMAX> years ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: delta-islands.c:272
+msgid "Propagating island marks"
+msgstr ""
+
+#: delta-islands.c:290
+#, c-format
+msgid "bad tree object %s"
+msgstr ""
+
+#: delta-islands.c:334
+#, c-format
+msgid "failed to load island regex for '%s': %s"
+msgstr ""
+
+#: delta-islands.c:390
+#, c-format
+msgid "island regex from config has too many capture groups (max=%d)"
+msgstr ""
+
+#: delta-islands.c:467
+#, c-format
+msgid "Marked %d islands, done.\n"
+msgstr ""
+
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr ""
+
+#: diff-lib.c:538
+msgid "--merge-base does not work with ranges"
+msgstr ""
+
+#: diff-lib.c:540
+msgid "--merge-base only works with commits"
+msgstr ""
+
+#: diff-lib.c:557
+msgid "unable to get HEAD"
+msgstr ""
+
+#: diff-lib.c:564
+msgid "no merge base found"
+msgstr ""
+
+#: diff-lib.c:566
+msgid "multiple merge bases found"
+msgstr ""
+
+#: diff-no-index.c:238
+msgid "git diff --no-index [<options>] <path> <path>"
+msgstr ""
+
+#: diff-no-index.c:263
+msgid ""
+"Not a git repository. Use --no-index to compare two paths outside a working "
+"tree"
+msgstr ""
+
+#: diff.c:156
+#, c-format
+msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
+msgstr "  Gagal mengurai persentase potongan dirstat '%s'\n"
+
+#: diff.c:161
+#, c-format
+msgid "  Unknown dirstat parameter '%s'\n"
+msgstr "  Parameter dirstat tidak ditketahui '%s'\n"
+
+#: diff.c:297
+msgid ""
+"color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
+"'dimmed-zebra', 'plain'"
+msgstr ""
+"Setelan warna berpindah harus salah satu dari 'no', 'default', 'blocks', "
+"'dimmed-zebra', 'plain'"
+
+#: diff.c:325
+#, 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'"
+msgstr ""
+"mode color-moved-ws tidak dikenal '%s', nilai yang mungkin yaitu 'ignore-"
+"space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-"
+"change'"
+
+#: diff.c:333
+msgid ""
+"color-moved-ws: allow-indentation-change cannot be combined with other "
+"whitespace modes"
+msgstr ""
+"color-moved-ws: allow-indentation-change tidak dapat digabungkan dengan mode "
+"spasi yang lainnya"
+
+#: diff.c:410
+#, c-format
+msgid "Unknown value for 'diff.submodule' config variable: '%s'"
+msgstr "Nilai tidak dikenal untuk variabel konfigurasi 'diff.submodule': '%s'"
+
+#: diff.c:470
+#, c-format
+msgid ""
+"Found errors in 'diff.dirstat' config variable:\n"
+"%s"
+msgstr ""
+"Ditemukan error dalam variable konfigurasi 'diff.dirstat':\n"
+"%s"
+
+#: diff.c:4278
+#, c-format
+msgid "external diff died, stopping at %s"
+msgstr "diff eksternal mati, berhenti pada %s"
+
+#: diff.c:4630
+msgid "--name-only, --name-status, --check and -s are mutually exclusive"
+msgstr "--name-only, --name-status, --check dan -s saling eksklusif"
+
+#: diff.c:4633
+msgid "-G, -S and --find-object are mutually exclusive"
+msgstr "-G, -S dan --find-object saling eksklusif"
+
+#: diff.c:4712
+msgid "--follow requires exactly one pathspec"
+msgstr "--follow butuh tepatnya satu spek jalur"
+
+#: diff.c:4760
+#, c-format
+msgid "invalid --stat value: %s"
+msgstr "nilai --stat tidak valid: %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
+#, c-format
+msgid "%s expects a numerical value"
+msgstr "%s harap nilai numerik"
+
+#: diff.c:4797
+#, c-format
+msgid ""
+"Failed to parse --dirstat/-X option parameter:\n"
+"%s"
+msgstr ""
+"Gagal menguraikan parameter opsi --dirstat/-X:\n"
+"%s"
+
+#: diff.c:4882
+#, c-format
+msgid "unknown change class '%c' in --diff-filter=%s"
+msgstr "kelas perubahan '%c' tidak dikenal dalam --diff-filter=%s"
+
+#: diff.c:4906
+#, c-format
+msgid "unknown value after ws-error-highlight=%.*s"
+msgstr "nilai tidak dikenal setelah ws-error-highlight=%.*s"
+
+#: diff.c:4920
+#, c-format
+msgid "unable to resolve '%s'"
+msgstr "tidak dapat menguraikan '%s'"
+
+#: diff.c:4970 diff.c:4976
+#, c-format
+msgid "%s expects <n>/<m> form"
+msgstr "%s butuh bentuk <n>/<m>"
+
+#: diff.c:4988
+#, c-format
+msgid "%s expects a character, got '%s'"
+msgstr "%s butuh sebuah karakter, dapat '%s'"
+
+#: diff.c:5009
+#, c-format
+msgid "bad --color-moved argument: %s"
+msgstr "argumen --color-moved jelek: %s"
+
+#: diff.c:5028
+#, c-format
+msgid "invalid mode '%s' in --color-moved-ws"
+msgstr "mode tidak valid '%s' dalam --color-moved-ws"
+
+#: diff.c:5068
+msgid ""
+"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
+"\"histogram\""
+msgstr ""
+"opsi diff-algorithm terima \"myers\", \"minimal\", \"patience\" dan "
+"\"histogram\""
+
+#: diff.c:5104 diff.c:5124
+#, c-format
+msgid "invalid argument to %s"
+msgstr "argumen tidak valid ke %s"
+
+#: diff.c:5228
+#, c-format
+msgid "invalid regex given to -I: '%s'"
+msgstr "regex tidak valid diberikan ke -I: '%s'"
+
+#: diff.c:5277
+#, c-format
+msgid "failed to parse --submodule option parameter: '%s'"
+msgstr "gagal menguraikan parameter opsi --submodule: '%s'"
+
+#: diff.c:5333
+#, c-format
+msgid "bad --word-diff argument: %s"
+msgstr "argumen --word-diff jelek: %s"
+
+#: diff.c:5369
+msgid "Diff output format options"
+msgstr "Opsi format keluaran diff"
+
+#: diff.c:5371 diff.c:5377
+msgid "generate patch"
+msgstr "buat tambalan"
+
+#: diff.c:5374 builtin/log.c:179
+msgid "suppress diff output"
+msgstr "sembunyikan keluaran diff"
+
+#: diff.c:5379 diff.c:5493 diff.c:5500
+msgid "<n>"
+msgstr "<n>"
+
+#: diff.c:5380 diff.c:5383
+msgid "generate diffs with <n> lines context"
+msgstr "buat diff dengan <n> baris konteks"
+
+#: diff.c:5385
+msgid "generate the diff in raw format"
+msgstr "buat diff dalam format mentah"
+
+#: diff.c:5388
+msgid "synonym for '-p --raw'"
+msgstr "sinonim untuk '-p --raw'"
+
+#: diff.c:5392
+msgid "synonym for '-p --stat'"
+msgstr "sinonim untuk '-p --stat'"
+
+#: diff.c:5396
+msgid "machine friendly --stat"
+msgstr "--stat yang ramah mesin"
+
+#: diff.c:5399
+msgid "output only the last line of --stat"
+msgstr "keluarkan hanya baris terakhir --stat"
+
+#: diff.c:5401 diff.c:5409
+msgid "<param1,param2>..."
+msgstr "<parameter 1,parameter 2>..."
+
+#: diff.c:5402
+msgid ""
+"output the distribution of relative amount of changes for each sub-directory"
+msgstr ""
+"keluarkan distribusi jumlah perubahan relatif untuk setiap subdirektori"
+
+#: diff.c:5406
+msgid "synonym for --dirstat=cumulative"
+msgstr "sinonim untuk --dirstat=cumulative"
+
+#: diff.c:5410
+msgid "synonym for --dirstat=files,param1,param2..."
+msgstr "sinonim untuk --dirstat=files,param1,param2..."
+
+#: diff.c:5414
+msgid "warn if changes introduce conflict markers or whitespace errors"
+msgstr ""
+"peringatkan bila perubahan memasukkan penanda konflik atau kesalahan spasi"
+
+#: diff.c:5417
+msgid "condensed summary such as creations, renames and mode changes"
+msgstr ""
+"ringkasan singkat seperti pembuatan, penggantian nama dan perubahan mode"
+
+#: diff.c:5420
+msgid "show only names of changed files"
+msgstr "perlihatkan hanya nama berkas yang berubah"
+
+#: diff.c:5423
+msgid "show only names and status of changed files"
+msgstr "perlihatkan hanya nama dan status berkas yang berubah"
+
+#: diff.c:5425
+msgid "<width>[,<name-width>[,<count>]]"
+msgstr "<lebar>[,<nama lebar>[,<hitungan>]]"
+
+#: diff.c:5426
+msgid "generate diffstat"
+msgstr "buat diffstat"
+
+#: diff.c:5428 diff.c:5431 diff.c:5434
+msgid "<width>"
+msgstr "<lebar>"
+
+#: diff.c:5429
+msgid "generate diffstat with a given width"
+msgstr "buat diffstat dengan lebar yang diberikan"
+
+#: diff.c:5432
+msgid "generate diffstat with a given name width"
+msgstr "buat diffstat dengan nama lebar yang diberikan"
+
+#: diff.c:5435
+msgid "generate diffstat with a given graph width"
+msgstr "buat diffstat dengan lebar grafik yang diberikan"
+
+#: diff.c:5437
+msgid "<count>"
+msgstr "<hitungan>"
+
+#: diff.c:5438
+msgid "generate diffstat with limited lines"
+msgstr "buat diffstat dengan baris yang terbatas"
+
+#: diff.c:5441
+msgid "generate compact summary in diffstat"
+msgstr "buat ringkasan singkat dalam diffstat"
+
+#: diff.c:5444
+msgid "output a binary diff that can be applied"
+msgstr "keluarkan diff biner yang dapat diterapkan"
+
+#: diff.c:5447
+msgid "show full pre- and post-image object names on the \"index\" lines"
+msgstr "perlihatkan objek pra- dan pasca-citra penuh pada baris \"index\""
+
+#: diff.c:5449
+msgid "show colored diff"
+msgstr "perlihatkan diff berwarna"
+
+#: diff.c:5450
+msgid "<kind>"
+msgstr "<tipe>"
+
+#: diff.c:5451
+msgid ""
+"highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
+"diff"
+msgstr ""
+"soroti kesalahan spasi dalam baris 'context', 'old' atau 'new' dalam diff"
+
+#: diff.c:5454
+msgid ""
+"do not munge pathnames and use NULs as output field terminators in --raw or "
+"--numstat"
+msgstr ""
+"jangan tengkar jalur nama dan gunakan NUL sebagai pembatas bidang keluaran "
+"pada --raw atau --numstat"
+
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
+msgid "<prefix>"
+msgstr "<prefiks>"
+
+#: diff.c:5458
+msgid "show the given source prefix instead of \"a/\""
+msgstr "perlihatkan prefiks sumber yang diberikan daripada \"a/\""
+
+#: diff.c:5461
+msgid "show the given destination prefix instead of \"b/\""
+msgstr "perlihatkan prefiks tujuan daripada \"b/\""
+
+#: diff.c:5464
+msgid "prepend an additional prefix to every line of output"
+msgstr "tambah depan prefiks tambahan pada setiap baris keluaran"
+
+#: diff.c:5467
+msgid "do not show any source or destination prefix"
+msgstr "jangan perlihatkan prefiks sumber atau tujuan apapun"
+
+#: diff.c:5470
+msgid "show context between diff hunks up to the specified number of lines"
+msgstr ""
+"perlihatkan konteks diantara hunk diff hingga jumlah baris yang disebutkan"
+
+#: diff.c:5474 diff.c:5479 diff.c:5484
+msgid "<char>"
+msgstr "<karakter>"
+
+#: diff.c:5475
+msgid "specify the character to indicate a new line instead of '+'"
+msgstr "sebutkan karakter yang menandai baris baru daripada '+'"
+
+#: diff.c:5480
+msgid "specify the character to indicate an old line instead of '-'"
+msgstr "sebutkan karakter yang menandai baris lama daripada '-'"
+
+#: diff.c:5485
+msgid "specify the character to indicate a context instead of ' '"
+msgstr "sebutkan karakter yang menandai konteks daripada ' '"
+
+#: diff.c:5488
+msgid "Diff rename options"
+msgstr "Opsi penamaan ulang diff"
+
+#: diff.c:5489
+msgid "<n>[/<m>]"
+msgstr "<n>[/<m>]"
+
+#: diff.c:5490
+msgid "break complete rewrite changes into pairs of delete and create"
+msgstr ""
+"pisahkan perubahan penulisan ulang penuh kedalam pasangan penghapusan dan "
+"pembuatan"
+
+#: diff.c:5494
+msgid "detect renames"
+msgstr "deteksi penamaan ulang"
+
+#: diff.c:5498
+msgid "omit the preimage for deletes"
+msgstr "lewati pracitra untuk penghapusan"
+
+#: diff.c:5501
+msgid "detect copies"
+msgstr "deteksi penyalinan"
+
+#: diff.c:5505
+msgid "use unmodified files as source to find copies"
+msgstr ""
+"gunakan berkas tak termodifikasi sebagai sumber untuk menemukan salinan"
+
+#: diff.c:5507
+msgid "disable rename detection"
+msgstr "nonaktifkan deteksi penamaan ulang"
+
+#: diff.c:5510
+msgid "use empty blobs as rename source"
+msgstr "gunakan blob kosong sebagai sumber penamaan ulang"
+
+#: diff.c:5512
+msgid "continue listing the history of a file beyond renames"
+msgstr "lanjutkan daftarkan riwayat berkas di luar penamaan ulang"
+
+#: diff.c:5515
+msgid ""
+"prevent rename/copy detection if the number of rename/copy targets exceeds "
+"given limit"
+msgstr ""
+"cegah pendeteksian penamaan ulang/penyalinan jika jumlah target penamaan "
+"ulang/penyalinan melebihi batas yang diberikan"
+
+#: diff.c:5517
+msgid "Diff algorithm options"
+msgstr "Opsi algoritma diff"
+
+#: diff.c:5519
+msgid "produce the smallest possible diff"
+msgstr "hasilkan diff yang paling kecil yang dimungkinkan"
+
+#: diff.c:5522
+msgid "ignore whitespace when comparing lines"
+msgstr "abaikan spasi saat membandingkan baris"
+
+#: diff.c:5525
+msgid "ignore changes in amount of whitespace"
+msgstr "abaikan perubahan dalam jumlah spasi"
+
+#: diff.c:5528
+msgid "ignore changes in whitespace at EOL"
+msgstr "abaikan perubahan spasi pada EOL"
+
+#: diff.c:5531
+msgid "ignore carrier-return at the end of line"
+msgstr "abaikan kembalian-kurir pada akhir baris"
+
+#: diff.c:5534
+msgid "ignore changes whose lines are all blank"
+msgstr "abaikan perubahan yang semua baris kosong"
+
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
+msgid "<regex>"
+msgstr "<regex>"
+
+#: diff.c:5537
+msgid "ignore changes whose all lines match <regex>"
+msgstr "abaikan perubahan yang semua baris cocok dengan <regex>"
+
+#: diff.c:5540
+msgid "heuristic to shift diff hunk boundaries for easy reading"
+msgstr "heuristik untuk geser perbatasan hunk diff untuk pembacaan yang mudah"
+
+#: diff.c:5543
+msgid "generate diff using the \"patience diff\" algorithm"
+msgstr "buat diff menggunakan algoritma \"diff sabar\""
+
+#: diff.c:5547
+msgid "generate diff using the \"histogram diff\" algorithm"
+msgstr "buat diff menggunakan algoritma \"diff histogram\""
+
+#: diff.c:5549
+msgid "<algorithm>"
+msgstr "<algoritma>"
+
+#: diff.c:5550
+msgid "choose a diff algorithm"
+msgstr "pilih algoritma diff"
+
+#: diff.c:5552
+msgid "<text>"
+msgstr "<teks>"
+
+#: diff.c:5553
+msgid "generate diff using the \"anchored diff\" algorithm"
+msgstr "buat diff menggunakan algoritma \"diff terlabuh\""
+
+#: diff.c:5555 diff.c:5564 diff.c:5567
+msgid "<mode>"
+msgstr "<mode>"
+
+#: diff.c:5556
+msgid "show word diff, using <mode> to delimit changed words"
+msgstr ""
+"perlihatkan diff kata, menggunakan <mode> untuk batasi kata yang berubah"
+
+#: diff.c:5559
+msgid "use <regex> to decide what a word is"
+msgstr "gunakan <regex> untuk menentukan apa itu kata"
+
+#: diff.c:5562
+msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
+msgstr "sama dengan --word-diff=color --word-diff-regex=<regex>"
+
+#: diff.c:5565
+msgid "moved lines of code are colored differently"
+msgstr "baris kode yang berpindah diwarnai berbeda"
+
+#: diff.c:5568
+msgid "how white spaces are ignored in --color-moved"
+msgstr "bagaimana spasi diabaikan di --color-moved"
+
+#: diff.c:5571
+msgid "Other diff options"
+msgstr "Opsi diff yang lainnya"
+
+#: diff.c:5573
+msgid "when run from subdir, exclude changes outside and show relative paths"
+msgstr ""
+"ketika dijalankan dari subdirektori, kecualikan perubahan diluar dan "
+"perlihatkan jalur relatif"
+
+#: diff.c:5577
+msgid "treat all files as text"
+msgstr "perlakukan semua berkas sebagai teks"
+
+#: diff.c:5579
+msgid "swap two inputs, reverse the diff"
+msgstr "tukar dua masukkan, balikkan diff"
+
+#: diff.c:5581
+msgid "exit with 1 if there were differences, 0 otherwise"
+msgstr "keluar dengan 1 jika ada perbedaan, selain itu 0"
+
+#: diff.c:5583
+msgid "disable all output of the program"
+msgstr "nonaktifkan semua keluaran program"
+
+#: diff.c:5585
+msgid "allow an external diff helper to be executed"
+msgstr "perbolehkan pembantu diff eksternal untuk dieksekusi"
+
+#: diff.c:5587
+msgid "run external text conversion filters when comparing binary files"
+msgstr ""
+"jalankan saringan konversi teks eksternal ketika membandingkan berkas biner"
+
+#: diff.c:5589
+msgid "<when>"
+msgstr "<kapan>"
+
+#: diff.c:5590
+msgid "ignore changes to submodules in the diff generation"
+msgstr "abaikan perubahan submodul dalam pembuatan diff"
+
+#: diff.c:5593
+msgid "<format>"
+msgstr "<format>"
+
+#: diff.c:5594
+msgid "specify how differences in submodules are shown"
+msgstr "sebutkan bagaimana perbedaan dalam submodul diperlihatkan"
+
+#: diff.c:5598
+msgid "hide 'git add -N' entries from the index"
+msgstr "sembunyikan entri 'git add -N' dari indeks"
+
+#: diff.c:5601
+msgid "treat 'git add -N' entries as real in the index"
+msgstr "perlakukan entri 'git add -N' sebagai nyata dalam indeks"
+
+#: diff.c:5603
+msgid "<string>"
+msgstr "<untai>"
+
+#: diff.c:5604
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"string"
+msgstr "cari perbedaan yang mengubah jumlah kemunculan untai yang disebutkan"
+
+#: diff.c:5607
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"regex"
+msgstr "cari perbedaan yang mengubah jumlah kemunculan regex yang disebutkan"
+
+#: diff.c:5610
+msgid "show all changes in the changeset with -S or -G"
+msgstr "perlihatkan semua perubahan dalam set perubahan dengan -S atau -G"
+
+#: diff.c:5613
+msgid "treat <string> in -S as extended POSIX regular expression"
+msgstr ""
+"perlakukan <string> di -S sebagai ekspresi reguler POSIX yang diperluas"
+
+#: diff.c:5616
+msgid "control the order in which files appear in the output"
+msgstr "kontrol urutan berkas yang muncul dalam keluaran"
+
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<jalur>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "perlihatkan perubahan dalam jalur yang disebutkan terlebih dahulu"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "lewati keluaran ke jalur yang disebutkan"
+
+#: diff.c:5623
+msgid "<object-id>"
+msgstr "<id objek>"
+
+#: diff.c:5624
+msgid ""
+"look for differences that change the number of occurrences of the specified "
+"object"
+msgstr "cari perubahan yang mengubah jumlah kemunculan objek yang disebutkan"
+
+#: diff.c:5626
+msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
+msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
+
+#: diff.c:5627
+msgid "select files by diff type"
+msgstr "pilih berkas oleh tipe diff"
+
+#: diff.c:5629
+msgid "<file>"
+msgstr "<berkas>"
+
+#: diff.c:5630
+msgid "Output to a specific file"
+msgstr "Keluarkan ke berkas yang disebutkan"
+
+#: diff.c:6287
+msgid "inexact rename detection was skipped due to too many files."
+msgstr ""
+"deteksi penamaan ulang tak eksak dilewati karena terlalu banyak berkas."
+
+#: diff.c:6290
+msgid "only found copies from modified paths due to too many files."
+msgstr ""
+"hanya ditemukan salinan dari jalur yang berubah karena terlalu banyak berkas."
+
+#: diff.c:6293
+#, c-format
+msgid ""
+"you may want to set your %s variable to at least %d and retry the command."
+msgstr ""
+"mungkin Anda ingin menyetel variabel %s Anda ke setidaknya %d dan coba lagi "
+"perintah."
+
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr ""
+
+#: diffcore-rename.c:1418
+msgid "Performing inexact rename detection"
+msgstr ""
+
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr ""
+
+#: dir.c:578
+#, c-format
+msgid "pathspec '%s' did not match any file(s) known to git"
+msgstr ""
+
+#: dir.c:718 dir.c:747 dir.c:760
+#, c-format
+msgid "unrecognized pattern: '%s'"
+msgstr ""
+
+#: dir.c:777 dir.c:791
+#, c-format
+msgid "unrecognized negative pattern: '%s'"
+msgstr ""
+
+#: dir.c:809
+#, c-format
+msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
+msgstr ""
+
+#: dir.c:819
+msgid "disabling cone pattern matching"
+msgstr ""
+
+#: dir.c:1206
+#, c-format
+msgid "cannot use %s as an exclude file"
+msgstr ""
+
+#: dir.c:2314
+#, c-format
+msgid "could not open directory '%s'"
+msgstr ""
+
+#: dir.c:2614
+msgid "failed to get kernel name and information"
+msgstr ""
+
+#: dir.c:2738
+msgid "untracked cache is disabled on this system or location"
+msgstr ""
+
+#: dir.c:3543
+#, c-format
+msgid "index file corrupt in repo %s"
+msgstr ""
+
+#: dir.c:3590 dir.c:3595
+#, c-format
+msgid "could not create directories for %s"
+msgstr ""
+
+#: dir.c:3624
+#, c-format
+msgid "could not migrate git directory from '%s' to '%s'"
+msgstr ""
+
+#: editor.c:74
+#, c-format
+msgid "hint: Waiting for your editor to close the file...%c"
+msgstr ""
+
+#: entry.c:179
+msgid "Filtering content"
+msgstr ""
+
+#: entry.c:500
+#, c-format
+msgid "could not stat file '%s'"
+msgstr ""
+
+#: environment.c:152
+#, c-format
+msgid "bad git namespace path \"%s\""
+msgstr ""
+
+#: environment.c:335
+#, c-format
+msgid "could not set GIT_DIR to '%s'"
+msgstr ""
+
+#: exec-cmd.c:363
+#, c-format
+msgid "too many args to run %s"
+msgstr ""
+
+#: fetch-pack.c:182
+msgid "git fetch-pack: expected shallow list"
+msgstr ""
+
+#: fetch-pack.c:185
+msgid "git fetch-pack: expected a flush packet after shallow list"
+msgstr ""
+
+#: fetch-pack.c:196
+msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
+msgstr ""
+
+#: fetch-pack.c:216
+#, c-format
+msgid "git fetch-pack: expected ACK/NAK, got '%s'"
+msgstr ""
+
+#: fetch-pack.c:227
+msgid "unable to write to remote"
+msgstr ""
+
+#: fetch-pack.c:288
+msgid "--stateless-rpc requires multi_ack_detailed"
+msgstr ""
+
+#: fetch-pack.c:383 fetch-pack.c:1423
+#, c-format
+msgid "invalid shallow line: %s"
+msgstr ""
+
+#: fetch-pack.c:389 fetch-pack.c:1429
+#, c-format
+msgid "invalid unshallow line: %s"
+msgstr ""
+
+#: fetch-pack.c:391 fetch-pack.c:1431
+#, c-format
+msgid "object not found: %s"
+msgstr ""
+
+#: fetch-pack.c:394 fetch-pack.c:1434
+#, c-format
+msgid "error in object: %s"
+msgstr ""
+
+#: fetch-pack.c:396 fetch-pack.c:1436
+#, c-format
+msgid "no shallow found: %s"
+msgstr ""
+
+#: fetch-pack.c:399 fetch-pack.c:1440
+#, c-format
+msgid "expected shallow/unshallow, got %s"
+msgstr ""
+
+#: fetch-pack.c:439
+#, c-format
+msgid "got %s %d %s"
+msgstr ""
+
+#: fetch-pack.c:456
+#, c-format
+msgid "invalid commit %s"
+msgstr ""
+
+#: fetch-pack.c:487
+msgid "giving up"
+msgstr ""
+
+#: fetch-pack.c:500 progress.c:339
+msgid "done"
+msgstr ""
+
+#: fetch-pack.c:512
+#, c-format
+msgid "got %s (%d) %s"
+msgstr ""
+
+#: fetch-pack.c:548
+#, c-format
+msgid "Marking %s as complete"
+msgstr ""
+
+#: fetch-pack.c:763
+#, c-format
+msgid "already have %s (%s)"
+msgstr ""
+
+#: fetch-pack.c:849
+msgid "fetch-pack: unable to fork off sideband demultiplexer"
+msgstr ""
+
+#: fetch-pack.c:857
+msgid "protocol error: bad pack header"
+msgstr ""
+
+#: fetch-pack.c:951
+#, c-format
+msgid "fetch-pack: unable to fork off %s"
+msgstr ""
+
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr ""
+
+#: fetch-pack.c:974
+#, c-format
+msgid "%s failed"
+msgstr ""
+
+#: fetch-pack.c:976
+msgid "error in sideband demultiplexer"
+msgstr ""
+
+#: fetch-pack.c:1019
+#, c-format
+msgid "Server version is %.*s"
+msgstr ""
+
+#: 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
+#, c-format
+msgid "Server supports %s"
+msgstr ""
+
+#: fetch-pack.c:1029
+msgid "Server does not support shallow clients"
+msgstr ""
+
+#: fetch-pack.c:1089
+msgid "Server does not support --shallow-since"
+msgstr ""
+
+#: fetch-pack.c:1094
+msgid "Server does not support --shallow-exclude"
+msgstr ""
+
+#: fetch-pack.c:1098
+msgid "Server does not support --deepen"
+msgstr ""
+
+#: fetch-pack.c:1100
+msgid "Server does not support this repository's object format"
+msgstr ""
+
+#: fetch-pack.c:1113
+msgid "no common commits"
+msgstr ""
+
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr ""
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
+msgid "git fetch-pack: fetch failed."
+msgstr ""
+
+#: fetch-pack.c:1242
+#, c-format
+msgid "mismatched algorithms: client %s; server %s"
+msgstr ""
+
+#: fetch-pack.c:1246
+#, c-format
+msgid "the server does not support algorithm '%s'"
+msgstr ""
+
+#: fetch-pack.c:1279
+msgid "Server does not support shallow requests"
+msgstr ""
+
+#: fetch-pack.c:1286
+msgid "Server supports filter"
+msgstr ""
+
+#: fetch-pack.c:1329 fetch-pack.c:2034
+msgid "unable to write request to remote"
+msgstr ""
+
+#: fetch-pack.c:1347
+#, c-format
+msgid "error reading section header '%s'"
+msgstr ""
+
+#: fetch-pack.c:1353
+#, c-format
+msgid "expected '%s', received '%s'"
+msgstr ""
+
+#: fetch-pack.c:1387
+#, c-format
+msgid "unexpected acknowledgment line: '%s'"
+msgstr ""
+
+#: fetch-pack.c:1392
+#, c-format
+msgid "error processing acks: %d"
+msgstr ""
+
+#: fetch-pack.c:1402
+msgid "expected packfile to be sent after 'ready'"
+msgstr ""
+
+#: fetch-pack.c:1404
+msgid "expected no other sections to be sent after no 'ready'"
+msgstr ""
+
+#: fetch-pack.c:1445
+#, c-format
+msgid "error processing shallow info: %d"
+msgstr ""
+
+#: fetch-pack.c:1494
+#, c-format
+msgid "expected wanted-ref, got '%s'"
+msgstr ""
+
+#: fetch-pack.c:1499
+#, c-format
+msgid "unexpected wanted-ref: '%s'"
+msgstr ""
+
+#: fetch-pack.c:1504
+#, c-format
+msgid "error processing wanted refs: %d"
+msgstr ""
+
+#: fetch-pack.c:1534
+msgid "git fetch-pack: expected response end packet"
+msgstr ""
+
+#: fetch-pack.c:1930
+msgid "no matching remote head"
+msgstr ""
+
+#: fetch-pack.c:1953 builtin/clone.c:697
+msgid "remote did not send all necessary objects"
+msgstr ""
+
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr ""
+
+#: fetch-pack.c:2079
+#, c-format
+msgid "no such remote ref %s"
+msgstr ""
+
+#: fetch-pack.c:2082
+#, c-format
+msgid "Server does not allow request for unadvertised object %s"
+msgstr ""
+
+#: gpg-interface.c:273
+msgid "could not create temporary file"
+msgstr ""
+
+#: gpg-interface.c:276
+#, c-format
+msgid "failed writing detached signature to '%s'"
+msgstr ""
+
+#: gpg-interface.c:470
+msgid "gpg failed to sign the data"
+msgstr ""
+
+#: graph.c:98
+#, c-format
+msgid "ignore invalid color '%.*s' in log.graphColors"
+msgstr ""
+
+#: grep.c:531
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+
+#: grep.c:1893
+#, c-format
+msgid "'%s': unable to read %s"
+msgstr ""
+
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
+#, c-format
+msgid "failed to stat '%s'"
+msgstr ""
+
+#: grep.c:1921
+#, c-format
+msgid "'%s': short read"
+msgstr ""
+
+#: help.c:23
+msgid "start a working area (see also: git help tutorial)"
+msgstr ""
+
+#: help.c:24
+msgid "work on the current change (see also: git help everyday)"
+msgstr ""
+
+#: help.c:25
+msgid "examine the history and state (see also: git help revisions)"
+msgstr ""
+
+#: help.c:26
+msgid "grow, mark and tweak your common history"
+msgstr ""
+
+#: help.c:27
+msgid "collaborate (see also: git help workflows)"
+msgstr ""
+
+#: help.c:31
+msgid "Main Porcelain Commands"
+msgstr ""
+
+#: help.c:32
+msgid "Ancillary Commands / Manipulators"
+msgstr ""
+
+#: help.c:33
+msgid "Ancillary Commands / Interrogators"
+msgstr ""
+
+#: help.c:34
+msgid "Interacting with Others"
+msgstr ""
+
+#: help.c:35
+msgid "Low-level Commands / Manipulators"
+msgstr ""
+
+#: help.c:36
+msgid "Low-level Commands / Interrogators"
+msgstr ""
+
+#: help.c:37
+msgid "Low-level Commands / Syncing Repositories"
+msgstr ""
+
+#: help.c:38
+msgid "Low-level Commands / Internal Helpers"
+msgstr ""
+
+#: help.c:300
+#, c-format
+msgid "available git commands in '%s'"
+msgstr ""
+
+#: help.c:307
+msgid "git commands available from elsewhere on your $PATH"
+msgstr ""
+
+#: help.c:316
+msgid "These are common Git commands used in various situations:"
+msgstr ""
+
+#: help.c:365 git.c:100
+#, c-format
+msgid "unsupported command listing type '%s'"
+msgstr ""
+
+#: help.c:405
+msgid "The Git concept guides are:"
+msgstr ""
+
+#: help.c:429
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr ""
+
+#: help.c:434
+msgid "External commands"
+msgstr ""
+
+#: help.c:449
+msgid "Command aliases"
+msgstr ""
+
+#: help.c:527
+#, c-format
+msgid ""
+"'%s' appears to be a git command, but we were not\n"
+"able to execute it. Maybe git-%s is broken?"
+msgstr ""
+
+#: help.c:543 help.c:631
+#, c-format
+msgid "git: '%s' is not a git command. See 'git --help'."
+msgstr ""
+
+#: help.c:591
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr ""
+
+#: help.c:613
+#, c-format
+msgid "WARNING: You called a Git command named '%s', which does not exist."
+msgstr ""
+
+#: help.c:618
+#, c-format
+msgid "Continuing under the assumption that you meant '%s'."
+msgstr ""
+
+#: help.c:623
+#, c-format
+msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
+msgstr ""
+
+#: help.c:635
+msgid ""
+"\n"
+"The most similar command is"
+msgid_plural ""
+"\n"
+"The most similar commands are"
+msgstr[0] ""
+msgstr[1] ""
+
+#: help.c:675
+msgid "git version [<options>]"
+msgstr ""
+
+#: help.c:730
+#, c-format
+msgid "%s: %s - %s"
+msgstr ""
+
+#: help.c:734
+msgid ""
+"\n"
+"Did you mean this?"
+msgid_plural ""
+"\n"
+"Did you mean one of these?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ident.c:353
+msgid "Author identity unknown\n"
+msgstr ""
+
+#: ident.c:356
+msgid "Committer identity unknown\n"
+msgstr ""
+
+#: ident.c:362
+msgid ""
+"\n"
+"*** Please tell me who you are.\n"
+"\n"
+"Run\n"
+"\n"
+"  git config --global user.email \"you@example.com\"\n"
+"  git config --global user.name \"Your Name\"\n"
+"\n"
+"to set your account's default identity.\n"
+"Omit --global to set the identity only in this repository.\n"
+"\n"
+msgstr ""
+
+#: ident.c:397
+msgid "no email was given and auto-detection is disabled"
+msgstr ""
+
+#: ident.c:402
+#, c-format
+msgid "unable to auto-detect email address (got '%s')"
+msgstr ""
+
+#: ident.c:419
+msgid "no name was given and auto-detection is disabled"
+msgstr ""
+
+#: ident.c:425
+#, c-format
+msgid "unable to auto-detect name (got '%s')"
+msgstr ""
+
+#: ident.c:433
+#, c-format
+msgid "empty ident name (for <%s>) not allowed"
+msgstr ""
+
+#: ident.c:439
+#, c-format
+msgid "name consists only of disallowed characters: %s"
+msgstr ""
+
+#: ident.c:454 builtin/commit.c:647
+#, c-format
+msgid "invalid date format: %s"
+msgstr ""
+
+#: list-objects-filter-options.c:83
+msgid "expected 'tree:<depth>'"
+msgstr ""
+
+#: list-objects-filter-options.c:98
+msgid "sparse:path filters support has been dropped"
+msgstr ""
+
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr ""
+
+#: list-objects-filter-options.c:124
+#, c-format
+msgid "invalid filter-spec '%s'"
+msgstr ""
+
+#: list-objects-filter-options.c:140
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr ""
+
+#: list-objects-filter-options.c:182
+msgid "expected something after combine:"
+msgstr ""
+
+#: list-objects-filter-options.c:264
+msgid "multiple filter-specs cannot be combined"
+msgstr ""
+
+#: list-objects-filter-options.c:376
+msgid "unable to upgrade repository format to support partial clone"
+msgstr ""
+
+#: list-objects-filter.c:532
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr ""
+
+#: list-objects-filter.c:535
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr ""
+
+#: list-objects.c:127
+#, c-format
+msgid "entry '%s' in tree %s has tree mode, but is not a tree"
+msgstr ""
+
+#: list-objects.c:140
+#, c-format
+msgid "entry '%s' in tree %s has blob mode, but is not a blob"
+msgstr ""
+
+#: list-objects.c:395
+#, c-format
+msgid "unable to load root tree for commit %s"
+msgstr ""
+
+#: lockfile.c:152
+#, c-format
+msgid ""
+"Unable to create '%s.lock': %s.\n"
+"\n"
+"Another git process seems to be running in this repository, e.g.\n"
+"an editor opened by 'git commit'. Please make sure all processes\n"
+"are terminated then try again. If it still fails, a git process\n"
+"may have crashed in this repository earlier:\n"
+"remove the file manually to continue."
+msgstr ""
+
+#: lockfile.c:160
+#, c-format
+msgid "Unable to create '%s.lock': %s"
+msgstr ""
+
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr ""
+
+#: ls-refs.c:167
+msgid "expected flush after ls-refs arguments"
+msgstr ""
+
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr ""
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr ""
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr ""
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr ""
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr ""
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr ""
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr ""
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr ""
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr ""
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr ""
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, c-format
+msgid ""
+"CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
+"was renamed in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr ""
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr ""
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr ""
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr ""
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr ""
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr ""
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+
+#. 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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr ""
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Sudah terbaru."
+
+#: merge-recursive.c:356
+msgid "(bad commit)\n"
+msgstr ""
+
+#: merge-recursive.c:379
+#, c-format
+msgid "add_cacheinfo failed for path '%s'; merge aborting."
+msgstr ""
+
+#: merge-recursive.c:388
+#, c-format
+msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
+msgstr ""
+
+#: merge-recursive.c:876
+#, c-format
+msgid "failed to create path '%s'%s"
+msgstr ""
+
+#: merge-recursive.c:887
+#, c-format
+msgid "Removing %s to make room for subdirectory\n"
+msgstr ""
+
+#: merge-recursive.c:901 merge-recursive.c:920
+msgid ": perhaps a D/F conflict?"
+msgstr ""
+
+#: merge-recursive.c:910
+#, c-format
+msgid "refusing to lose untracked file at '%s'"
+msgstr ""
+
+#: merge-recursive.c:951 builtin/cat-file.c:41
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr ""
+
+#: merge-recursive.c:956
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr ""
+
+#: merge-recursive.c:981
+#, c-format
+msgid "failed to open '%s': %s"
+msgstr ""
+
+#: merge-recursive.c:992
+#, c-format
+msgid "failed to symlink '%s': %s"
+msgstr ""
+
+#: merge-recursive.c:997
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr ""
+
+#: merge-recursive.c:1227 merge-recursive.c:1239
+#, c-format
+msgid "Fast-forwarding submodule %s to the following commit:"
+msgstr ""
+
+#: merge-recursive.c:1230 merge-recursive.c:1242
+#, c-format
+msgid "Fast-forwarding submodule %s"
+msgstr ""
+
+#: merge-recursive.c:1265
+#, c-format
+msgid "Failed to merge submodule %s (merge following commits not found)"
+msgstr ""
+
+#: merge-recursive.c:1269
+#, c-format
+msgid "Failed to merge submodule %s (not fast-forward)"
+msgstr ""
+
+#: merge-recursive.c:1270
+msgid "Found a possible merge resolution for the submodule:\n"
+msgstr ""
+
+#: merge-recursive.c:1282
+#, c-format
+msgid "Failed to merge submodule %s (multiple merges found)"
+msgstr ""
+
+#: merge-recursive.c:1424
+#, c-format
+msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
+msgstr ""
+
+#: merge-recursive.c:1496
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree."
+msgstr ""
+
+#: merge-recursive.c:1501
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
+"left in tree."
+msgstr ""
+
+#: merge-recursive.c:1508
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
+"in tree at %s."
+msgstr ""
+
+#: merge-recursive.c:1513
+#, c-format
+msgid ""
+"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
+"left in tree at %s."
+msgstr ""
+
+#: merge-recursive.c:1548
+msgid "rename"
+msgstr ""
+
+#: merge-recursive.c:1548
+msgid "renamed"
+msgstr ""
+
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
+#, c-format
+msgid "Refusing to lose dirty file at %s"
+msgstr ""
+
+#: merge-recursive.c:1609
+#, c-format
+msgid "Refusing to lose untracked file at %s, even though it's in the way."
+msgstr ""
+
+#: merge-recursive.c:1667
+#, c-format
+msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
+msgstr ""
+
+#: merge-recursive.c:1698
+#, c-format
+msgid "%s is a directory in %s adding as %s instead"
+msgstr ""
+
+#: merge-recursive.c:1703
+#, c-format
+msgid "Refusing to lose untracked file at %s; adding as %s instead"
+msgstr ""
+
+#: merge-recursive.c:1730
+#, c-format
+msgid ""
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
+"\"->\"%s\" in \"%s\"%s"
+msgstr ""
+
+#: merge-recursive.c:1735
+msgid " (left unresolved)"
+msgstr ""
+
+#: merge-recursive.c:1827
+#, c-format
+msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
+msgstr ""
+
+#: merge-recursive.c:2090
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to place %s because "
+"directory %s was renamed to multiple other directories, with no destination "
+"getting a majority of the files."
+msgstr ""
+
+#: merge-recursive.c:2224
+#, c-format
+msgid ""
+"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
+">%s in %s"
+msgstr ""
+
+#: merge-recursive.c:3069
+msgid "modify"
+msgstr ""
+
+#: merge-recursive.c:3069
+msgid "modified"
+msgstr ""
+
+#: merge-recursive.c:3108
+#, c-format
+msgid "Skipped %s (merged same as existing)"
+msgstr ""
+
+#: merge-recursive.c:3161
+#, c-format
+msgid "Adding as %s instead"
+msgstr ""
+
+#: merge-recursive.c:3368
+#, c-format
+msgid "Removing %s"
+msgstr ""
+
+#: merge-recursive.c:3391
+msgid "file/directory"
+msgstr ""
+
+#: merge-recursive.c:3396
+msgid "directory/file"
+msgstr ""
+
+#: merge-recursive.c:3403
+#, c-format
+msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
+msgstr ""
+
+#: merge-recursive.c:3412
+#, c-format
+msgid "Adding %s"
+msgstr ""
+
+#: merge-recursive.c:3421
+#, c-format
+msgid "CONFLICT (add/add): Merge conflict in %s"
+msgstr ""
+
+#: merge-recursive.c:3474
+#, c-format
+msgid "merging of trees %s and %s failed"
+msgstr ""
+
+#: merge-recursive.c:3568
+msgid "Merging:"
+msgstr ""
+
+#: merge-recursive.c:3581
+#, c-format
+msgid "found %u common ancestor:"
+msgid_plural "found %u common ancestors:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: merge-recursive.c:3631
+msgid "merge returned no commit"
+msgstr ""
+
+#: merge-recursive.c:3796
+#, c-format
+msgid "Could not parse object '%s'"
+msgstr ""
+
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
+msgid "Unable to write index."
+msgstr ""
+
+#: merge.c:41
+msgid "failed to read the cache"
+msgstr ""
+
+#: 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
+msgid "unable to write new index file"
+msgstr ""
+
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr ""
+
+#: midx.c:105
+#, c-format
+msgid "multi-pack-index file %s is too small"
+msgstr ""
+
+#: midx.c:121
+#, c-format
+msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
+msgstr ""
+
+#: midx.c:126
+#, c-format
+msgid "multi-pack-index version %d not recognized"
+msgstr ""
+
+#: midx.c:131
+#, c-format
+msgid "multi-pack-index hash version %u does not match version %u"
+msgstr ""
+
+#: midx.c:148
+msgid "multi-pack-index missing required pack-name chunk"
+msgstr ""
+
+#: midx.c:150
+msgid "multi-pack-index missing required OID fanout chunk"
+msgstr ""
+
+#: midx.c:152
+msgid "multi-pack-index missing required OID lookup chunk"
+msgstr ""
+
+#: midx.c:154
+msgid "multi-pack-index missing required object offsets chunk"
+msgstr ""
+
+#: midx.c:170
+#, c-format
+msgid "multi-pack-index pack names out of order: '%s' before '%s'"
+msgstr ""
+
+#: midx.c:214
+#, c-format
+msgid "bad pack-int-id: %u (%u total packs)"
+msgstr ""
+
+#: midx.c:264
+msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
+msgstr ""
+
+#: midx.c:490
+#, c-format
+msgid "failed to add packfile '%s'"
+msgstr ""
+
+#: midx.c:496
+#, c-format
+msgid "failed to open pack-index '%s'"
+msgstr ""
+
+#: midx.c:564
+#, c-format
+msgid "failed to locate object %d in packfile"
+msgstr ""
+
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "tidak dapat menyimpan berkas indeks balik"
+
+#: midx.c:933
+msgid "Adding packfiles to multi-pack-index"
+msgstr ""
+
+#: midx.c:979
+#, c-format
+msgid "did not see pack-file %s to drop"
+msgstr ""
+
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr ""
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr ""
+
+#: midx.c:1045
+msgid "no pack files to index."
+msgstr ""
+
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "gagal menghapus %s"
+
+#: midx.c:1156
+#, c-format
+msgid "failed to clear multi-pack-index at %s"
+msgstr ""
+
+#: midx.c:1214
+msgid "multi-pack-index file exists, but failed to parse"
+msgstr ""
+
+#: midx.c:1222
+msgid "Looking for referenced packfiles"
+msgstr ""
+
+#: midx.c:1237
+#, c-format
+msgid ""
+"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
+msgstr ""
+
+#: midx.c:1242
+msgid "the midx contains no oid"
+msgstr ""
+
+#: midx.c:1251
+msgid "Verifying OID order in multi-pack-index"
+msgstr ""
+
+#: midx.c:1260
+#, c-format
+msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
+msgstr ""
+
+#: midx.c:1280
+msgid "Sorting objects by packfile"
+msgstr ""
+
+#: midx.c:1287
+msgid "Verifying object offsets"
+msgstr ""
+
+#: midx.c:1303
+#, c-format
+msgid "failed to load pack entry for oid[%d] = %s"
+msgstr ""
+
+#: midx.c:1309
+#, c-format
+msgid "failed to load pack-index for packfile %s"
+msgstr ""
+
+#: midx.c:1318
+#, c-format
+msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
+msgstr ""
+
+#: midx.c:1343
+msgid "Counting referenced objects"
+msgstr ""
+
+#: midx.c:1353
+msgid "Finding and deleting unreferenced packfiles"
+msgstr ""
+
+#: midx.c:1544
+msgid "could not start pack-objects"
+msgstr ""
+
+#: midx.c:1564
+msgid "could not finish pack-objects"
+msgstr ""
+
+#: name-hash.c:542
+#, c-format
+msgid "unable to create lazy_dir thread: %s"
+msgstr ""
+
+#: name-hash.c:564
+#, c-format
+msgid "unable to create lazy_name thread: %s"
+msgstr ""
+
+#: name-hash.c:570
+#, c-format
+msgid "unable to join lazy_name thread: %s"
+msgstr ""
+
+#: notes-merge.c:277
+#, 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."
+msgstr ""
+
+#: notes-merge.c:284
+#, c-format
+msgid "You have not concluded your notes merge (%s exists)."
+msgstr ""
+
+#: notes-utils.c:46
+msgid "Cannot commit uninitialized/unreferenced notes tree"
+msgstr ""
+
+#: notes-utils.c:105
+#, c-format
+msgid "Bad notes.rewriteMode value: '%s'"
+msgstr ""
+
+#: notes-utils.c:115
+#, c-format
+msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
+msgstr ""
+
+#. 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 ""
+
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr ""
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr ""
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr ""
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr ""
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr ""
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr ""
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr ""
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr ""
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr ""
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr ""
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr ""
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr ""
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr ""
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr ""
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr ""
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr ""
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr ""
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr ""
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr ""
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr ""
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr ""
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr ""
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr ""
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr ""
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr ""
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr ""
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr ""
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr ""
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr ""
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr ""
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr ""
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr ""
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr ""
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr ""
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr ""
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr ""
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr ""
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr ""
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr ""
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr ""
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr ""
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr ""
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr ""
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr ""
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "tidak dapat membuka %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr ""
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr ""
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr ""
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr ""
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr ""
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr ""
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr ""
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr ""
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr ""
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr ""
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr ""
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr ""
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr ""
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr ""
+
+#: object.c:53
+#, c-format
+msgid "invalid object type \"%s\""
+msgstr ""
+
+#: object.c:173
+#, c-format
+msgid "object %s is a %s, not a %s"
+msgstr ""
+
+#: object.c:232
+#, c-format
+msgid "object %s has unknown type id %d"
+msgstr ""
+
+#: object.c:245
+#, c-format
+msgid "unable to parse object: %s"
+msgstr ""
+
+#: object.c:265 object.c:277
+#, c-format
+msgid "hash mismatch %s"
+msgstr ""
+
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
+#, c-format
+msgid "unable to get size of %s"
+msgstr ""
+
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr ""
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr ""
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr ""
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr ""
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr ""
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr ""
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr ""
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr ""
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr ""
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr ""
+
+#: packfile.c:625
+msgid "offset before end of packfile (broken .idx?)"
+msgstr ""
+
+#: packfile.c:1937
+#, c-format
+msgid "offset before start of pack index for %s (corrupt index?)"
+msgstr ""
+
+#: packfile.c:1941
+#, c-format
+msgid "offset beyond end of pack index for %s (truncated index?)"
+msgstr ""
+
+#: parse-options-cb.c:20 parse-options-cb.c:24
+#, c-format
+msgid "option `%s' expects a numerical value"
+msgstr ""
+
+#: parse-options-cb.c:41
+#, c-format
+msgid "malformed expiration date '%s'"
+msgstr ""
+
+#: parse-options-cb.c:54
+#, c-format
+msgid "option `%s' expects \"always\", \"auto\", or \"never\""
+msgstr ""
+
+#: parse-options-cb.c:132 parse-options-cb.c:149
+#, c-format
+msgid "malformed object name '%s'"
+msgstr ""
+
+#: parse-options.c:38
+#, c-format
+msgid "%s requires a value"
+msgstr ""
+
+#: parse-options.c:73
+#, c-format
+msgid "%s is incompatible with %s"
+msgstr ""
+
+#: parse-options.c:78
+#, c-format
+msgid "%s : incompatible with something else"
+msgstr ""
+
+#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#, c-format
+msgid "%s takes no value"
+msgstr ""
+
+#: parse-options.c:94
+#, c-format
+msgid "%s isn't available"
+msgstr ""
+
+#: parse-options.c:217
+#, c-format
+msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
+msgstr ""
+
+#: parse-options.c:386
+#, c-format
+msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
+msgstr ""
+
+#: parse-options.c:420 parse-options.c:428
+#, c-format
+msgid "did you mean `--%s` (with two dashes)?"
+msgstr ""
+
+#: parse-options.c:668 parse-options.c:988
+#, c-format
+msgid "alias of --%s"
+msgstr ""
+
+#: parse-options.c:879
+#, c-format
+msgid "unknown option `%s'"
+msgstr ""
+
+#: parse-options.c:881
+#, c-format
+msgid "unknown switch `%c'"
+msgstr ""
+
+#: parse-options.c:883
+#, c-format
+msgid "unknown non-ascii option in string: `%s'"
+msgstr ""
+
+#: parse-options.c:907
+msgid "..."
+msgstr ""
+
+#: parse-options.c:926
+#, c-format
+msgid "usage: %s"
+msgstr ""
+
+#. TRANSLATORS: the colon here should align with the
+#. one in "usage: %s" translation.
+#.
+#: parse-options.c:932
+#, c-format
+msgid "   or: %s"
+msgstr ""
+
+#: parse-options.c:935
+#, c-format
+msgid "    %s"
+msgstr ""
+
+#: parse-options.c:974
+msgid "-NUM"
+msgstr ""
+
+#: path.c:915
+#, c-format
+msgid "Could not make %s writable by group"
+msgstr ""
+
+#: pathspec.c:151
+msgid "Escape character '\\' not allowed as last character in attr value"
+msgstr ""
+
+#: pathspec.c:169
+msgid "Only one 'attr:' specification is allowed."
+msgstr ""
+
+#: pathspec.c:172
+msgid "attr spec must not be empty"
+msgstr ""
+
+#: pathspec.c:215
+#, c-format
+msgid "invalid attribute name %s"
+msgstr ""
+
+#: pathspec.c:280
+msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
+msgstr ""
+
+#: pathspec.c:287
+msgid ""
+"global 'literal' pathspec setting is incompatible with all other global "
+"pathspec settings"
+msgstr ""
+
+#: pathspec.c:327
+msgid "invalid parameter for pathspec magic 'prefix'"
+msgstr ""
+
+#: pathspec.c:348
+#, c-format
+msgid "Invalid pathspec magic '%.*s' in '%s'"
+msgstr ""
+
+#: pathspec.c:353
+#, c-format
+msgid "Missing ')' at the end of pathspec magic in '%s'"
+msgstr ""
+
+#: pathspec.c:391
+#, c-format
+msgid "Unimplemented pathspec magic '%c' in '%s'"
+msgstr ""
+
+#: pathspec.c:450
+#, c-format
+msgid "%s: 'literal' and 'glob' are incompatible"
+msgstr ""
+
+#: pathspec.c:466
+#, c-format
+msgid "%s: '%s' is outside repository at '%s'"
+msgstr ""
+
+#: pathspec.c:542
+#, c-format
+msgid "'%s' (mnemonic: '%c')"
+msgstr ""
+
+#: pathspec.c:552
+#, c-format
+msgid "%s: pathspec magic not supported by this command: %s"
+msgstr ""
+
+#: pathspec.c:619
+#, c-format
+msgid "pathspec '%s' is beyond a symbolic link"
+msgstr ""
+
+#: pathspec.c:664
+#, c-format
+msgid "line is badly quoted: %s"
+msgstr ""
+
+#: pkt-line.c:92
+msgid "unable to write flush packet"
+msgstr ""
+
+#: pkt-line.c:99
+msgid "unable to write delim packet"
+msgstr ""
+
+#: pkt-line.c:106
+msgid "unable to write stateless separator packet"
+msgstr ""
+
+#: pkt-line.c:113
+msgid "flush packet write failed"
+msgstr ""
+
+#: pkt-line.c:153 pkt-line.c:265
+msgid "protocol error: impossibly long line"
+msgstr ""
+
+#: pkt-line.c:169 pkt-line.c:171
+msgid "packet write with format failed"
+msgstr ""
+
+#: pkt-line.c:204
+msgid "packet write failed - data exceeds max packet size"
+msgstr ""
+
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr ""
+
+#: pkt-line.c:328 pkt-line.c:329
+msgid "read error"
+msgstr ""
+
+#: pkt-line.c:339 pkt-line.c:340
+msgid "the remote end hung up unexpectedly"
+msgstr ""
+
+#: pkt-line.c:369 pkt-line.c:371
+#, c-format
+msgid "protocol error: bad line length character: %.4s"
+msgstr ""
+
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
+#, c-format
+msgid "protocol error: bad line length %d"
+msgstr ""
+
+#: pkt-line.c:413 sideband.c:165
+#, c-format
+msgid "remote error: %s"
+msgstr ""
+
+#: preload-index.c:125
+msgid "Refreshing index"
+msgstr ""
+
+#: preload-index.c:144
+#, c-format
+msgid "unable to create threaded lstat: %s"
+msgstr ""
+
+#: pretty.c:988
+msgid "unable to parse --pretty format"
+msgstr ""
+
+#: promisor-remote.c:30
+msgid "promisor-remote: unable to fork off fetch subprocess"
+msgstr ""
+
+#: promisor-remote.c:35 promisor-remote.c:37
+msgid "promisor-remote: could not write to fetch subprocess"
+msgstr ""
+
+#: promisor-remote.c:41
+msgid "promisor-remote: could not close stdin to fetch subprocess"
+msgstr ""
+
+#: promisor-remote.c:53
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr ""
+
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr ""
+
+#: prune-packed.c:35
+msgid "Removing duplicate objects"
+msgstr ""
+
+#: range-diff.c:78
+msgid "could not start `log`"
+msgstr ""
+
+#: range-diff.c:80
+msgid "could not read `log` output"
+msgstr ""
+
+#: range-diff.c:101 sequencer.c:5551
+#, c-format
+msgid "could not parse commit '%s'"
+msgstr ""
+
+#: range-diff.c:115
+#, c-format
+msgid ""
+"could not parse first line of `log` output: did not start with 'commit ': "
+"'%s'"
+msgstr ""
+
+#: range-diff.c:140
+#, c-format
+msgid "could not parse git header '%.*s'"
+msgstr ""
+
+#: range-diff.c:306
+msgid "failed to generate diff"
+msgstr ""
+
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr ""
+
+#: range-diff.c:561 range-diff.c:563
+#, c-format
+msgid "could not parse log for '%s'"
+msgstr ""
+
+#: read-cache.c:708
+#, c-format
+msgid "will not add file alias '%s' ('%s' already exists in index)"
+msgstr ""
+
+#: read-cache.c:724
+msgid "cannot create an empty blob in the object database"
+msgstr ""
+
+#: read-cache.c:746
+#, c-format
+msgid "%s: can only add regular files, symbolic links or git-directories"
+msgstr ""
+
+#: read-cache.c:751
+#, c-format
+msgid "'%s' does not have a commit checked out"
+msgstr ""
+
+#: read-cache.c:803
+#, c-format
+msgid "unable to index file '%s'"
+msgstr ""
+
+#: read-cache.c:822
+#, c-format
+msgid "unable to add '%s' to index"
+msgstr ""
+
+#: read-cache.c:833
+#, c-format
+msgid "unable to stat '%s'"
+msgstr ""
+
+#: read-cache.c:1356
+#, c-format
+msgid "'%s' appears as both a file and as a directory"
+msgstr ""
+
+#: read-cache.c:1571
+msgid "Refresh index"
+msgstr ""
+
+#: read-cache.c:1700
+#, c-format
+msgid ""
+"index.version set, but the value is invalid.\n"
+"Using version %i"
+msgstr ""
+
+#: read-cache.c:1710
+#, c-format
+msgid ""
+"GIT_INDEX_VERSION set, but the value is invalid.\n"
+"Using version %i"
+msgstr ""
+
+#: read-cache.c:1766
+#, c-format
+msgid "bad signature 0x%08x"
+msgstr ""
+
+#: read-cache.c:1769
+#, c-format
+msgid "bad index version %d"
+msgstr ""
+
+#: read-cache.c:1778
+msgid "bad index file sha1 signature"
+msgstr ""
+
+#: read-cache.c:1812
+#, c-format
+msgid "index uses %.4s extension, which we do not understand"
+msgstr ""
+
+#: read-cache.c:1814
+#, c-format
+msgid "ignoring %.4s extension"
+msgstr ""
+
+#: read-cache.c:1851
+#, c-format
+msgid "unknown index entry format 0x%08x"
+msgstr ""
+
+#: read-cache.c:1867
+#, c-format
+msgid "malformed name field in the index, near path '%s'"
+msgstr ""
+
+#: read-cache.c:1924
+msgid "unordered stage entries in index"
+msgstr ""
+
+#: read-cache.c:1927
+#, c-format
+msgid "multiple stage entries for merged file '%s'"
+msgstr ""
+
+#: read-cache.c:1930
+#, c-format
+msgid "unordered stage entries for '%s'"
+msgstr ""
+
+#: 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
+msgid "index file corrupt"
+msgstr ""
+
+#: read-cache.c:2180
+#, c-format
+msgid "unable to create load_cache_entries thread: %s"
+msgstr ""
+
+#: read-cache.c:2193
+#, c-format
+msgid "unable to join load_cache_entries thread: %s"
+msgstr ""
+
+#: read-cache.c:2226
+#, c-format
+msgid "%s: index file open failed"
+msgstr ""
+
+#: read-cache.c:2230
+#, c-format
+msgid "%s: cannot stat the open index"
+msgstr ""
+
+#: read-cache.c:2234
+#, c-format
+msgid "%s: index file smaller than expected"
+msgstr ""
+
+#: read-cache.c:2238
+#, c-format
+msgid "%s: unable to map index file"
+msgstr ""
+
+#: read-cache.c:2280
+#, c-format
+msgid "unable to create load_index_extensions thread: %s"
+msgstr ""
+
+#: read-cache.c:2307
+#, c-format
+msgid "unable to join load_index_extensions thread: %s"
+msgstr ""
+
+#: read-cache.c:2345
+#, c-format
+msgid "could not freshen shared index '%s'"
+msgstr ""
+
+#: read-cache.c:2392
+#, c-format
+msgid "broken index, expect %s in %s, got %s"
+msgstr ""
+
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
+#, c-format
+msgid "could not close '%s'"
+msgstr ""
+
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr ""
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
+#, c-format
+msgid "could not stat '%s'"
+msgstr ""
+
+#: read-cache.c:3222
+#, c-format
+msgid "unable to open git dir: %s"
+msgstr ""
+
+#: read-cache.c:3234
+#, c-format
+msgid "unable to unlink: %s"
+msgstr ""
+
+#: read-cache.c:3263
+#, c-format
+msgid "cannot fix permission bits on '%s'"
+msgstr ""
+
+#: read-cache.c:3412
+#, c-format
+msgid "%s: cannot drop to stage #0"
+msgstr ""
+
+#: rebase-interactive.c:11
+msgid ""
+"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
+"continue'.\n"
+"Or you can abort the rebase with 'git rebase --abort'.\n"
+msgstr ""
+
+#: rebase-interactive.c:33
+#, c-format
+msgid ""
+"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
+msgstr ""
+
+#: rebase-interactive.c:42
+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 [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
+"x, exec <command> = run command (the rest of the line) using shell\n"
+"b, break = stop here (continue rebase later with 'git rebase --continue')\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 ""
+
+#: rebase-interactive.c:66
+#, c-format
+msgid "Rebase %s onto %s (%d command)"
+msgid_plural "Rebase %s onto %s (%d commands)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
+msgid ""
+"\n"
+"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
+msgstr ""
+
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
+msgid ""
+"\n"
+"If you remove a line here THAT COMMIT WILL BE LOST.\n"
+msgstr ""
+
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
+msgid ""
+"\n"
+"You are editing the todo file of an ongoing interactive rebase.\n"
+"To continue rebase after editing, run:\n"
+"    git rebase --continue\n"
+"\n"
+msgstr ""
+
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
+msgid ""
+"\n"
+"However, if you remove everything, the rebase will be aborted.\n"
+"\n"
+msgstr ""
+
+#: 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
+#, c-format
+msgid "could not write '%s'"
+msgstr ""
+
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
+#, c-format
+msgid "could not write '%s'."
+msgstr ""
+
+#: rebase-interactive.c:196
+#, c-format
+msgid ""
+"Warning: some commits may have been dropped accidentally.\n"
+"Dropped commits (newer to older):\n"
+msgstr ""
+
+#: rebase-interactive.c:203
+#, c-format
+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"
+"The possible behaviours are: ignore, warn, error.\n"
+"\n"
+msgstr ""
+
+#: 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 ""
+
+#: ref-filter.c:42 wt-status.c:1978
+msgid "gone"
+msgstr ""
+
+#: ref-filter.c:43
+#, c-format
+msgid "ahead %d"
+msgstr ""
+
+#: ref-filter.c:44
+#, c-format
+msgid "behind %d"
+msgstr ""
+
+#: ref-filter.c:45
+#, c-format
+msgid "ahead %d, behind %d"
+msgstr ""
+
+#: ref-filter.c:175
+#, c-format
+msgid "expected format: %%(color:<color>)"
+msgstr ""
+
+#: ref-filter.c:177
+#, c-format
+msgid "unrecognized color: %%(color:%s)"
+msgstr ""
+
+#: ref-filter.c:199
+#, c-format
+msgid "Integer value expected refname:lstrip=%s"
+msgstr ""
+
+#: ref-filter.c:203
+#, c-format
+msgid "Integer value expected refname:rstrip=%s"
+msgstr ""
+
+#: ref-filter.c:205
+#, c-format
+msgid "unrecognized %%(%s) argument: %s"
+msgstr ""
+
+#: ref-filter.c:260
+#, c-format
+msgid "%%(objecttype) does not take arguments"
+msgstr ""
+
+#: ref-filter.c:282
+#, c-format
+msgid "unrecognized %%(objectsize) argument: %s"
+msgstr ""
+
+#: ref-filter.c:290
+#, c-format
+msgid "%%(deltabase) does not take arguments"
+msgstr ""
+
+#: ref-filter.c:302
+#, c-format
+msgid "%%(body) does not take arguments"
+msgstr ""
+
+#: ref-filter.c:315
+#, c-format
+msgid "unrecognized %%(subject) argument: %s"
+msgstr ""
+
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr ""
+
+#: ref-filter.c:336
+#, c-format
+msgid "unknown %%(trailers) argument: %s"
+msgstr ""
+
+#: ref-filter.c:367
+#, c-format
+msgid "positive value expected contents:lines=%s"
+msgstr ""
+
+#: ref-filter.c:369
+#, c-format
+msgid "unrecognized %%(contents) argument: %s"
+msgstr ""
+
+#: ref-filter.c:384
+#, c-format
+msgid "positive value expected '%s' in %%(%s)"
+msgstr ""
+
+#: ref-filter.c:388
+#, c-format
+msgid "unrecognized argument '%s' in %%(%s)"
+msgstr ""
+
+#: ref-filter.c:402
+#, c-format
+msgid "unrecognized email option: %s"
+msgstr ""
+
+#: ref-filter.c:432
+#, c-format
+msgid "expected format: %%(align:<width>,<position>)"
+msgstr ""
+
+#: ref-filter.c:444
+#, c-format
+msgid "unrecognized position:%s"
+msgstr ""
+
+#: ref-filter.c:451
+#, c-format
+msgid "unrecognized width:%s"
+msgstr ""
+
+#: ref-filter.c:460
+#, c-format
+msgid "unrecognized %%(align) argument: %s"
+msgstr ""
+
+#: ref-filter.c:468
+#, c-format
+msgid "positive width expected with the %%(align) atom"
+msgstr ""
+
+#: ref-filter.c:486
+#, c-format
+msgid "unrecognized %%(if) argument: %s"
+msgstr ""
+
+#: ref-filter.c:588
+#, c-format
+msgid "malformed field name: %.*s"
+msgstr ""
+
+#: ref-filter.c:615
+#, c-format
+msgid "unknown field name: %.*s"
+msgstr ""
+
+#: ref-filter.c:619
+#, c-format
+msgid ""
+"not a git repository, but the field '%.*s' requires access to object data"
+msgstr ""
+
+#: ref-filter.c:743
+#, c-format
+msgid "format: %%(if) atom used without a %%(then) atom"
+msgstr ""
+
+#: ref-filter.c:807
+#, c-format
+msgid "format: %%(then) atom used without an %%(if) atom"
+msgstr ""
+
+#: ref-filter.c:809
+#, c-format
+msgid "format: %%(then) atom used more than once"
+msgstr ""
+
+#: ref-filter.c:811
+#, c-format
+msgid "format: %%(then) atom used after %%(else)"
+msgstr ""
+
+#: ref-filter.c:839
+#, c-format
+msgid "format: %%(else) atom used without an %%(if) atom"
+msgstr ""
+
+#: ref-filter.c:841
+#, c-format
+msgid "format: %%(else) atom used without a %%(then) atom"
+msgstr ""
+
+#: ref-filter.c:843
+#, c-format
+msgid "format: %%(else) atom used more than once"
+msgstr ""
+
+#: ref-filter.c:858
+#, c-format
+msgid "format: %%(end) atom used without corresponding atom"
+msgstr ""
+
+#: ref-filter.c:915
+#, c-format
+msgid "malformed format string %s"
+msgstr ""
+
+#: ref-filter.c:1556
+#, c-format
+msgid "(no branch, rebasing %s)"
+msgstr ""
+
+#: ref-filter.c:1559
+#, c-format
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr ""
+
+#: ref-filter.c:1562
+#, c-format
+msgid "(no branch, bisect started on %s)"
+msgstr ""
+
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr ""
+
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr ""
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr ""
+
+#: ref-filter.c:1604 ref-filter.c:1813
+#, c-format
+msgid "missing object %s for %s"
+msgstr ""
+
+#: ref-filter.c:1614
+#, c-format
+msgid "parse_object_buffer failed on %s for %s"
+msgstr ""
+
+#: ref-filter.c:1997
+#, c-format
+msgid "malformed object at '%s'"
+msgstr ""
+
+#: ref-filter.c:2086
+#, c-format
+msgid "ignoring ref with broken name %s"
+msgstr ""
+
+#: ref-filter.c:2091 refs.c:676
+#, c-format
+msgid "ignoring broken ref %s"
+msgstr ""
+
+#: ref-filter.c:2431
+#, c-format
+msgid "format: %%(end) atom missing"
+msgstr ""
+
+#: ref-filter.c:2525
+#, c-format
+msgid "malformed object name %s"
+msgstr ""
+
+#: ref-filter.c:2530
+#, c-format
+msgid "option `%s' must point to a commit"
+msgstr ""
+
+#: refs.c:264
+#, c-format
+msgid "%s does not point to a valid object!"
+msgstr ""
+
+#: refs.c:566
+#, 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"
+"of your new repositories, which will suppress this warning, call:\n"
+"\n"
+"\tgit config --global init.defaultBranch <name>\n"
+"\n"
+"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
+"'development'. The just-created branch can be renamed via this command:\n"
+"\n"
+"\tgit branch -m <name>\n"
+msgstr ""
+
+#: refs.c:588
+#, c-format
+msgid "could not retrieve `%s`"
+msgstr ""
+
+#: refs.c:598
+#, c-format
+msgid "invalid branch name: %s = %s"
+msgstr ""
+
+#: refs.c:674
+#, c-format
+msgid "ignoring dangling symref %s"
+msgstr ""
+
+#: refs.c:922
+#, c-format
+msgid "log for ref %s has gap after %s"
+msgstr ""
+
+#: refs.c:929
+#, c-format
+msgid "log for ref %s unexpectedly ended on %s"
+msgstr ""
+
+#: refs.c:994
+#, c-format
+msgid "log for %s is empty"
+msgstr ""
+
+#: refs.c:1086
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr ""
+
+#: refs.c:1157
+#, c-format
+msgid "update_ref failed for ref '%s': %s"
+msgstr ""
+
+#: refs.c:2051
+#, c-format
+msgid "multiple updates for ref '%s' not allowed"
+msgstr ""
+
+#: refs.c:2131
+msgid "ref updates forbidden inside quarantine environment"
+msgstr ""
+
+#: refs.c:2142
+msgid "ref updates aborted by hook"
+msgstr ""
+
+#: refs.c:2242 refs.c:2272
+#, c-format
+msgid "'%s' exists; cannot create '%s'"
+msgstr ""
+
+#: refs.c:2248 refs.c:2283
+#, c-format
+msgid "cannot process '%s' and '%s' at the same time"
+msgstr ""
+
+#: refs/files-backend.c:1228
+#, c-format
+msgid "could not remove reference %s"
+msgstr ""
+
+#: refs/files-backend.c:1242 refs/packed-backend.c:1542
+#: refs/packed-backend.c:1552
+#, c-format
+msgid "could not delete reference %s: %s"
+msgstr ""
+
+#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#, c-format
+msgid "could not delete references: %s"
+msgstr ""
+
+#: refspec.c:170
+#, c-format
+msgid "invalid refspec '%s'"
+msgstr ""
+
+#: remote.c:351
+#, c-format
+msgid "config remote shorthand cannot begin with '/': %s"
+msgstr "pintasan konfigurasi remote tidak dapat diawali dengan '/': %s"
+
+#: remote.c:399
+msgid "more than one receivepack given, using the first"
+msgstr "lebih dari satu paket terima diberikan, gunakan yang pertama"
+
+#: remote.c:407
+msgid "more than one uploadpack given, using the first"
+msgstr "lebih dari satu paket unggah diberikan, gunakan yang pertama"
+
+#: remote.c:590
+#, c-format
+msgid "Cannot fetch both %s and %s to %s"
+msgstr "tidak dapat mengambil baik %s dan %s ke %s"
+
+#: remote.c:594
+#, c-format
+msgid "%s usually tracks %s, not %s"
+msgstr "%s biasanya melacak %s, bukan %s"
+
+#: remote.c:598
+#, c-format
+msgid "%s tracks both %s and %s"
+msgstr "%s melacak baik %s dan %s"
+
+#: remote.c:666
+#, c-format
+msgid "key '%s' of pattern had no '*'"
+msgstr "kunci '%s' dari pola tidak ada '*'"
+
+#: remote.c:676
+#, c-format
+msgid "value '%s' of pattern has no '*'"
+msgstr "nilai '%s' dari pola tidak ada '*'"
+
+#: remote.c:1083
+#, c-format
+msgid "src refspec %s does not match any"
+msgstr "spek referensi sumber %s tidak cocok dengan apapun"
+
+#: remote.c:1088
+#, c-format
+msgid "src refspec %s matches more than one"
+msgstr "spek referensi sumber %s cocok dengan lebih dari satu"
+
+#. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
+#. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
+#. the <src>.
+#.
+#: remote.c:1103
+#, c-format
+msgid ""
+"The destination you provided is not a full refname (i.e.,\n"
+"starting with \"refs/\"). We tried to guess what you meant by:\n"
+"\n"
+"- Looking for a ref that matches '%s' on the remote side.\n"
+"- Checking if the <src> being pushed ('%s')\n"
+"  is a ref in \"refs/{heads,tags}/\". If so we add a corresponding\n"
+"  refs/{heads,tags}/ prefix on the remote side.\n"
+"\n"
+"Neither worked, so we gave up. You must fully qualify the ref."
+msgstr ""
+"Tujuan yang Anda berikan bukan nama referensi penuh (seperti \n"
+"dimulai dengan \"refs/\"). Kami mencoba menebak maksud Anda dengan:\n"
+"- Cari referensi yang cocok dengan '%s' pada sisi remote.\n"
+"- Perika apakah <src> yang sedang didorong ('%s') adalah \n"
+"  referensi pada \"refs/{heads,tags}\". Bila demikian kami \n"
+"  menambahkan awalan refs/{heads,tags}/ yang bersesuaian pada sisi \n"
+"  remote.\n"
+"\n"
+"Kedua-duanya tidak bekerja, jadi kami menyerah. Anda harus kualifikasi\n"
+"penuh referensi."
+
+#: remote.c:1123
+#, c-format
+msgid ""
+"The <src> part of the refspec is a commit object.\n"
+"Did you mean to create a new branch by pushing to\n"
+"'%s:refs/heads/%s'?"
+msgstr ""
+"Bagian <src> dari spek referensi adalah objek komit.\n"
+"Apakah maksud Anda buat cabang baru dengan mendorong ke\n"
+"'%s:refs/heads/%s'?"
+
+#: remote.c:1128
+#, c-format
+msgid ""
+"The <src> part of the refspec is a tag object.\n"
+"Did you mean to create a new tag by pushing to\n"
+"'%s:refs/tags/%s'?"
+msgstr ""
+"Bagian <src> dari spek referensi adalah objek tag.\n"
+"Apakah maksud Anda buat tag baru dengan mendorong ke\n"
+"'%s:refs/tags/%s'?"
+
+#: remote.c:1133
+#, c-format
+msgid ""
+"The <src> part of the refspec is a tree object.\n"
+"Did you mean to tag a new tree by pushing to\n"
+"'%s:refs/tags/%s'?"
+msgstr ""
+"Bagian <src> dari spek referensi adalah objek pohon.\n"
+"Apakah maksud Anda tag pohon dengan mendorong ke\n"
+"'%s:refs/tags/%s'?"
+
+#: remote.c:1138
+#, c-format
+msgid ""
+"The <src> part of the refspec is a blob object.\n"
+"Did you mean to tag a new blob by pushing to\n"
+"'%s:refs/tags/%s'?"
+msgstr ""
+"Bagian <src> dari spek referensi adalah objek blob.\n"
+"Apakah maksud Anda tag blob baru dengan mendorong ke\n"
+"'%s:refs/tags/%s'?"
+
+#: remote.c:1174
+#, c-format
+msgid "%s cannot be resolved to branch"
+msgstr "%s tidak dapat diselesaikan ke cabang"
+
+#: remote.c:1185
+#, c-format
+msgid "unable to delete '%s': remote ref does not exist"
+msgstr "tidak dapat menghapus '%s': referensi remote tidak ada"
+
+#: remote.c:1197
+#, c-format
+msgid "dst refspec %s matches more than one"
+msgstr "spek referensi tujuan %s cocok dengan lebih dari satu"
+
+#: remote.c:1204
+#, c-format
+msgid "dst ref %s receives from more than one src"
+msgstr "referensi tujuan %s menerima dari lebih dari satu sumber"
+
+#: remote.c:1724 remote.c:1825
+msgid "HEAD does not point to a branch"
+msgstr "HEAD tidak menunjuk ke cabang"
+
+#: remote.c:1733
+#, c-format
+msgid "no such branch: '%s'"
+msgstr "tidak ada cabang seperti: '%s'"
+
+#: remote.c:1736
+#, c-format
+msgid "no upstream configured for branch '%s'"
+msgstr "tidak ada hulu yang terkonfigurasi untuk cabang '%s'"
+
+#: remote.c:1742
+#, c-format
+msgid "upstream branch '%s' not stored as a remote-tracking branch"
+msgstr "cabang hulu '%s' tidak disimpan sebagai cabang pelacak remote"
+
+#: remote.c:1757
+#, c-format
+msgid "push destination '%s' on remote '%s' has no local tracking branch"
+msgstr "tujuan dorong '%s' pada remote '%s' tidak ada cabang pelacak lokal"
+
+#: remote.c:1769
+#, c-format
+msgid "branch '%s' has no remote for pushing"
+msgstr "cabang '%s' tidak ada remote untuk didorong"
+
+#: remote.c:1779
+#, c-format
+msgid "push refspecs for '%s' do not include '%s'"
+msgstr "spek referensi dorong untuk '%s' tidak termasuk '%s'"
+
+#: remote.c:1792
+msgid "push has no destination (push.default is 'nothing')"
+msgstr "dorong tidak ada tujuan (push.default yaitu 'nothing')"
+
+#: remote.c:1814
+msgid "cannot resolve 'simple' push to a single destination"
+msgstr "tidak dapat menyelesaikan dorongan 'sederhana' ke satu tujuan"
+
+#: remote.c:1943
+#, c-format
+msgid "couldn't find remote ref %s"
+msgstr "tidak dapat menemukan referensi remote %s"
+
+#: remote.c:1956
+#, c-format
+msgid "* Ignoring funny ref '%s' locally"
+msgstr "* Abaikan referensi lucu '%s' secara lokal"
+
+#: remote.c:2119
+#, c-format
+msgid "Your branch is based on '%s', but the upstream is gone.\n"
+msgstr "Cabang Anda didasarkan pada '%s', tapi hulu sudah tiada.\n"
+
+#: remote.c:2123
+msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
+msgstr "  (gunakan \"git branch --unset-upstream\" untuk perbaiki)\n"
+
+#: remote.c:2126
+#, c-format
+msgid "Your branch is up to date with '%s'.\n"
+msgstr "Cabang Anda mutakhir dengan '%s'.\n"
+
+#: remote.c:2130
+#, c-format
+msgid "Your branch and '%s' refer to different commits.\n"
+msgstr "Cabang Anda dan '%s' merujuk pada komit yang berbeda.\n"
+
+#: remote.c:2133
+#, c-format
+msgid "  (use \"%s\" for details)\n"
+msgstr "  (gunakan \"%s\" untuk selengkapnya)\n"
+
+#: remote.c:2137
+#, c-format
+msgid "Your branch is ahead of '%s' by %d commit.\n"
+msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: remote.c:2143
+msgid "  (use \"git push\" to publish your local commits)\n"
+msgstr "  (gunakan \"git push\" untuk terbitkan komit lokal Anda)\n"
+
+#: remote.c:2146
+#, c-format
+msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
+msgid_plural ""
+"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: remote.c:2154
+msgid "  (use \"git pull\" to update your local branch)\n"
+msgstr "  (gunakan \"git pull\" untuk perbarui cabang lokal Anda)\n"
+
+#: remote.c:2157
+#, c-format
+msgid ""
+"Your branch and '%s' have diverged,\n"
+"and have %d and %d different commit each, respectively.\n"
+msgid_plural ""
+"Your branch and '%s' have diverged,\n"
+"and have %d and %d different commits each, respectively.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: remote.c:2167
+msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
+msgstr "  (gunakan \"git pull\" untuk gabungkan cabang remote ke milik Anda)\n"
+
+#: remote.c:2359
+#, c-format
+msgid "cannot parse expected object name '%s'"
+msgstr "tidak dapat mengurai nama object yang diharapkan '%s'"
+
+#: replace-object.c:21
+#, c-format
+msgid "bad replace ref name: %s"
+msgstr ""
+
+#: replace-object.c:30
+#, c-format
+msgid "duplicate replace ref: %s"
+msgstr ""
+
+#: replace-object.c:82
+#, c-format
+msgid "replace depth too high for object %s"
+msgstr ""
+
+#: rerere.c:201 rerere.c:210 rerere.c:213
+msgid "corrupt MERGE_RR"
+msgstr ""
+
+#: rerere.c:248 rerere.c:253
+msgid "unable to write rerere record"
+msgstr ""
+
+#: rerere.c:479
+#, c-format
+msgid "there were errors while writing '%s' (%s)"
+msgstr ""
+
+#: rerere.c:482
+#, c-format
+msgid "failed to flush '%s'"
+msgstr ""
+
+#: rerere.c:487 rerere.c:1023
+#, c-format
+msgid "could not parse conflict hunks in '%s'"
+msgstr ""
+
+#: rerere.c:668
+#, c-format
+msgid "failed utime() on '%s'"
+msgstr ""
+
+#: rerere.c:678
+#, c-format
+msgid "writing '%s' failed"
+msgstr ""
+
+#: rerere.c:698
+#, c-format
+msgid "Staged '%s' using previous resolution."
+msgstr ""
+
+#: rerere.c:737
+#, c-format
+msgid "Recorded resolution for '%s'."
+msgstr ""
+
+#: rerere.c:772
+#, c-format
+msgid "Resolved '%s' using previous resolution."
+msgstr ""
+
+#: rerere.c:787
+#, c-format
+msgid "cannot unlink stray '%s'"
+msgstr ""
+
+#: rerere.c:791
+#, c-format
+msgid "Recorded preimage for '%s'"
+msgstr ""
+
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
+#, c-format
+msgid "could not create directory '%s'"
+msgstr ""
+
+#: rerere.c:1041
+#, c-format
+msgid "failed to update conflicted state in '%s'"
+msgstr ""
+
+#: rerere.c:1052 rerere.c:1059
+#, c-format
+msgid "no remembered resolution for '%s'"
+msgstr ""
+
+#: rerere.c:1061
+#, c-format
+msgid "cannot unlink '%s'"
+msgstr ""
+
+#: rerere.c:1071
+#, c-format
+msgid "Updated preimage for '%s'"
+msgstr ""
+
+#: rerere.c:1080
+#, c-format
+msgid "Forgot resolution for '%s'\n"
+msgstr ""
+
+#: rerere.c:1191
+msgid "unable to open rr-cache directory"
+msgstr ""
+
+#: reset.c:42
+msgid "could not determine HEAD revision"
+msgstr "tidak dapat menentukan revisi HEAD"
+
+#: reset.c:70 reset.c:76 sequencer.c:3669
+#, c-format
+msgid "failed to find tree of %s"
+msgstr "gagal menemukan pohon %s"
+
+#: revision.c:2343
+msgid "--unpacked=<packfile> no longer supported"
+msgstr ""
+
+#: revision.c:2683
+msgid "your current branch appears to be broken"
+msgstr ""
+
+#: revision.c:2686
+#, c-format
+msgid "your current branch '%s' does not have any commits yet"
+msgstr ""
+
+#: revision.c:2892
+msgid "-L does not yet support diff formats besides -p and -s"
+msgstr ""
+
+#: run-command.c:767
+msgid "open /dev/null failed"
+msgstr ""
+
+#: run-command.c:1275
+#, c-format
+msgid "cannot create async thread: %s"
+msgstr ""
+
+#: 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 ""
+
+#: send-pack.c:150
+msgid "unexpected flush packet while reading remote unpack status"
+msgstr ""
+
+#: send-pack.c:152
+#, c-format
+msgid "unable to parse remote unpack status: %s"
+msgstr ""
+
+#: send-pack.c:154
+#, c-format
+msgid "remote unpack failed: %s"
+msgstr ""
+
+#: send-pack.c:378
+msgid "failed to sign the push certificate"
+msgstr ""
+
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr ""
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr ""
+
+#: send-pack.c:520
+msgid "the receiving end does not support this repository's hash algorithm"
+msgstr ""
+
+#: send-pack.c:529
+msgid "the receiving end does not support --signed push"
+msgstr ""
+
+#: send-pack.c:531
+msgid ""
+"not sending a push certificate since the receiving end does not support --"
+"signed push"
+msgstr ""
+
+#: send-pack.c:543
+msgid "the receiving end does not support --atomic push"
+msgstr ""
+
+#: send-pack.c:548
+msgid "the receiving end does not support push options"
+msgstr ""
+
+#: sequencer.c:196
+#, c-format
+msgid "invalid commit message cleanup mode '%s'"
+msgstr ""
+
+#: sequencer.c:324
+#, c-format
+msgid "could not delete '%s'"
+msgstr ""
+
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
+#, c-format
+msgid "could not remove '%s'"
+msgstr ""
+
+#: sequencer.c:354
+msgid "revert"
+msgstr ""
+
+#: sequencer.c:356
+msgid "cherry-pick"
+msgstr ""
+
+#: sequencer.c:358
+msgid "rebase"
+msgstr ""
+
+#: sequencer.c:360
+#, c-format
+msgid "unknown action: %d"
+msgstr ""
+
+#: sequencer.c:419
+msgid ""
+"after resolving the conflicts, mark the corrected paths\n"
+"with 'git add <paths>' or 'git rm <paths>'"
+msgstr ""
+
+#: sequencer.c:422
+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 ""
+
+#: sequencer.c:435 sequencer.c:3271
+#, c-format
+msgid "could not lock '%s'"
+msgstr ""
+
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
+#, c-format
+msgid "could not write to '%s'"
+msgstr ""
+
+#: sequencer.c:442
+#, c-format
+msgid "could not write eol to '%s'"
+msgstr ""
+
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
+#, c-format
+msgid "failed to finalize '%s'"
+msgstr ""
+
+#: sequencer.c:486
+#, c-format
+msgid "your local changes would be overwritten by %s."
+msgstr ""
+
+#: sequencer.c:490
+msgid "commit your changes or stash them to proceed."
+msgstr ""
+
+#: sequencer.c:522
+#, c-format
+msgid "%s: fast-forward"
+msgstr ""
+
+#: sequencer.c:561 builtin/tag.c:609
+#, c-format
+msgid "Invalid cleanup mode %s"
+msgstr ""
+
+#. TRANSLATORS: %s will be "revert", "cherry-pick" or
+#. "rebase".
+#.
+#: sequencer.c:671
+#, c-format
+msgid "%s: Unable to write new index file"
+msgstr ""
+
+#: sequencer.c:685
+msgid "unable to update cache tree"
+msgstr ""
+
+#: sequencer.c:699
+msgid "could not resolve HEAD commit"
+msgstr ""
+
+#: sequencer.c:779
+#, c-format
+msgid "no key present in '%.*s'"
+msgstr ""
+
+#: sequencer.c:790
+#, c-format
+msgid "unable to dequote value of '%s'"
+msgstr ""
+
+#: 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
+#, c-format
+msgid "could not open '%s' for reading"
+msgstr ""
+
+#: sequencer.c:837
+msgid "'GIT_AUTHOR_NAME' already given"
+msgstr ""
+
+#: sequencer.c:842
+msgid "'GIT_AUTHOR_EMAIL' already given"
+msgstr ""
+
+#: sequencer.c:847
+msgid "'GIT_AUTHOR_DATE' already given"
+msgstr ""
+
+#: sequencer.c:851
+#, c-format
+msgid "unknown variable '%s'"
+msgstr ""
+
+#: sequencer.c:856
+msgid "missing 'GIT_AUTHOR_NAME'"
+msgstr ""
+
+#: sequencer.c:858
+msgid "missing 'GIT_AUTHOR_EMAIL'"
+msgstr ""
+
+#: sequencer.c:860
+msgid "missing 'GIT_AUTHOR_DATE'"
+msgstr ""
+
+#: sequencer.c:925
+#, c-format
+msgid ""
+"you have staged changes in your working tree\n"
+"If these changes are meant to be squashed into the previous commit, run:\n"
+"\n"
+"  git commit --amend %s\n"
+"\n"
+"If they are meant to go into a new commit, run:\n"
+"\n"
+"  git commit %s\n"
+"\n"
+"In both cases, once you're done, continue with:\n"
+"\n"
+"  git rebase --continue\n"
+msgstr ""
+
+#: sequencer.c:1212
+msgid "'prepare-commit-msg' hook failed"
+msgstr ""
+
+#: sequencer.c:1218
+msgid ""
+"Your name and email address were configured automatically based\n"
+"on your username and hostname. Please check that they are accurate.\n"
+"You can suppress this message by setting them explicitly. Run the\n"
+"following command and follow the instructions in your editor to edit\n"
+"your configuration file:\n"
+"\n"
+"    git config --global --edit\n"
+"\n"
+"After doing this, you may fix the identity used for this commit with:\n"
+"\n"
+"    git commit --amend --reset-author\n"
+msgstr ""
+
+#: sequencer.c:1231
+msgid ""
+"Your name and email address were configured automatically based\n"
+"on your username and hostname. Please check that they are accurate.\n"
+"You can suppress this message by setting them explicitly:\n"
+"\n"
+"    git config --global user.name \"Your Name\"\n"
+"    git config --global user.email you@example.com\n"
+"\n"
+"After doing this, you may fix the identity used for this commit with:\n"
+"\n"
+"    git commit --amend --reset-author\n"
+msgstr ""
+
+#: sequencer.c:1273
+msgid "couldn't look up newly created commit"
+msgstr ""
+
+#: sequencer.c:1275
+msgid "could not parse newly created commit"
+msgstr ""
+
+#: sequencer.c:1321
+msgid "unable to resolve HEAD after creating commit"
+msgstr ""
+
+#: sequencer.c:1323
+msgid "detached HEAD"
+msgstr ""
+
+#: sequencer.c:1327
+msgid " (root-commit)"
+msgstr ""
+
+#: sequencer.c:1348
+msgid "could not parse HEAD"
+msgstr ""
+
+#: sequencer.c:1350
+#, c-format
+msgid "HEAD %s is not a commit!"
+msgstr ""
+
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
+msgid "could not parse HEAD commit"
+msgstr ""
+
+#: sequencer.c:1410 sequencer.c:2295
+msgid "unable to parse commit author"
+msgstr ""
+
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
+msgid "git write-tree failed to write a tree"
+msgstr ""
+
+#: sequencer.c:1454 sequencer.c:1574
+#, c-format
+msgid "unable to read commit message from '%s'"
+msgstr ""
+
+#: sequencer.c:1485 sequencer.c:1517
+#, c-format
+msgid "invalid author identity '%s'"
+msgstr ""
+
+#: sequencer.c:1491
+msgid "corrupt author: missing date information"
+msgstr ""
+
+#: 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
+msgid "failed to write commit object"
+msgstr ""
+
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
+#, c-format
+msgid "could not update %s"
+msgstr ""
+
+#: sequencer.c:1606
+#, c-format
+msgid "could not parse commit %s"
+msgstr ""
+
+#: sequencer.c:1611
+#, c-format
+msgid "could not parse parent commit %s"
+msgstr ""
+
+#: sequencer.c:1694 sequencer.c:1975
+#, c-format
+msgid "unknown command: %d"
+msgstr ""
+
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
+msgid "This is the 1st commit message:"
+msgstr ""
+
+#: sequencer.c:1737
+#, c-format
+msgid "This is the commit message #%d:"
+msgstr ""
+
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr ""
+
+#: sequencer.c:1739
+#, c-format
+msgid "The commit message #%d will be skipped:"
+msgstr ""
+
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr ""
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr ""
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr ""
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr ""
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr ""
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr ""
+
+#: sequencer.c:2072
+msgid "your index file is unmerged."
+msgstr ""
+
+#: sequencer.c:2079
+msgid "cannot fixup root commit"
+msgstr ""
+
+#: sequencer.c:2098
+#, c-format
+msgid "commit %s is a merge but no -m option was given."
+msgstr ""
+
+#: sequencer.c:2106 sequencer.c:2114
+#, c-format
+msgid "commit %s does not have parent %d"
+msgstr ""
+
+#: sequencer.c:2120
+#, c-format
+msgid "cannot get commit message for %s"
+msgstr ""
+
+#. TRANSLATORS: The first %s will be a "todo" command like
+#. "revert" or "pick", the second %s a SHA1.
+#: sequencer.c:2139
+#, c-format
+msgid "%s: cannot parse parent commit %s"
+msgstr ""
+
+#: sequencer.c:2205
+#, c-format
+msgid "could not rename '%s' to '%s'"
+msgstr ""
+
+#: sequencer.c:2265
+#, c-format
+msgid "could not revert %s... %s"
+msgstr ""
+
+#: sequencer.c:2266
+#, c-format
+msgid "could not apply %s... %s"
+msgstr ""
+
+#: sequencer.c:2287
+#, c-format
+msgid "dropping %s %s -- patch contents already upstream\n"
+msgstr ""
+
+#: sequencer.c:2345
+#, c-format
+msgid "git %s: failed to read the index"
+msgstr ""
+
+#: sequencer.c:2352
+#, c-format
+msgid "git %s: failed to refresh the index"
+msgstr ""
+
+#: sequencer.c:2425
+#, c-format
+msgid "%s does not accept arguments: '%s'"
+msgstr ""
+
+#: sequencer.c:2434
+#, c-format
+msgid "missing arguments for %s"
+msgstr ""
+
+#: sequencer.c:2477
+#, c-format
+msgid "could not parse '%s'"
+msgstr ""
+
+#: sequencer.c:2538
+#, c-format
+msgid "invalid line %d: %.*s"
+msgstr ""
+
+#: sequencer.c:2549
+#, c-format
+msgid "cannot '%s' without a previous commit"
+msgstr ""
+
+#: sequencer.c:2635
+msgid "cancelling a cherry picking in progress"
+msgstr ""
+
+#: sequencer.c:2644
+msgid "cancelling a revert in progress"
+msgstr ""
+
+#: sequencer.c:2690
+msgid "please fix this using 'git rebase --edit-todo'."
+msgstr ""
+
+#: sequencer.c:2692
+#, c-format
+msgid "unusable instruction sheet: '%s'"
+msgstr ""
+
+#: sequencer.c:2697
+msgid "no commits parsed."
+msgstr ""
+
+#: sequencer.c:2708
+msgid "cannot cherry-pick during a revert."
+msgstr ""
+
+#: sequencer.c:2710
+msgid "cannot revert during a cherry-pick."
+msgstr ""
+
+#: sequencer.c:2788
+#, c-format
+msgid "invalid value for %s: %s"
+msgstr ""
+
+#: sequencer.c:2897
+msgid "unusable squash-onto"
+msgstr ""
+
+#: sequencer.c:2917
+#, c-format
+msgid "malformed options sheet: '%s'"
+msgstr ""
+
+#: sequencer.c:3012 sequencer.c:4869
+msgid "empty commit set passed"
+msgstr ""
+
+#: sequencer.c:3029
+msgid "revert is already in progress"
+msgstr ""
+
+#: sequencer.c:3031
+#, c-format
+msgid "try \"git revert (--continue | %s--abort | --quit)\""
+msgstr ""
+
+#: sequencer.c:3034
+msgid "cherry-pick is already in progress"
+msgstr ""
+
+#: sequencer.c:3036
+#, c-format
+msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
+msgstr ""
+
+#: sequencer.c:3050
+#, c-format
+msgid "could not create sequencer directory '%s'"
+msgstr ""
+
+#: sequencer.c:3065
+msgid "could not lock HEAD"
+msgstr ""
+
+#: sequencer.c:3125 sequencer.c:4582
+msgid "no cherry-pick or revert in progress"
+msgstr ""
+
+#: sequencer.c:3127 sequencer.c:3138
+msgid "cannot resolve HEAD"
+msgstr ""
+
+#: sequencer.c:3129 sequencer.c:3173
+msgid "cannot abort from a branch yet to be born"
+msgstr ""
+
+#: sequencer.c:3159 builtin/grep.c:759
+#, c-format
+msgid "cannot open '%s'"
+msgstr ""
+
+#: sequencer.c:3161
+#, c-format
+msgid "cannot read '%s': %s"
+msgstr ""
+
+#: sequencer.c:3162
+msgid "unexpected end of file"
+msgstr ""
+
+#: sequencer.c:3168
+#, c-format
+msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
+msgstr ""
+
+#: sequencer.c:3179
+msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
+msgstr ""
+
+#: sequencer.c:3220
+msgid "no revert in progress"
+msgstr ""
+
+#: sequencer.c:3229
+msgid "no cherry-pick in progress"
+msgstr ""
+
+#: sequencer.c:3239
+msgid "failed to skip the commit"
+msgstr ""
+
+#: sequencer.c:3246
+msgid "there is nothing to skip"
+msgstr ""
+
+#: sequencer.c:3249
+#, c-format
+msgid ""
+"have you committed already?\n"
+"try \"git %s --continue\""
+msgstr ""
+
+#: sequencer.c:3411 sequencer.c:4473
+msgid "cannot read HEAD"
+msgstr ""
+
+#: sequencer.c:3428
+#, c-format
+msgid "unable to copy '%s' to '%s'"
+msgstr ""
+
+#: sequencer.c:3436
+#, c-format
+msgid ""
+"You can amend the commit now, with\n"
+"\n"
+"  git commit --amend %s\n"
+"\n"
+"Once you are satisfied with your changes, run\n"
+"\n"
+"  git rebase --continue\n"
+msgstr ""
+
+#: sequencer.c:3446
+#, c-format
+msgid "Could not apply %s... %.*s"
+msgstr ""
+
+#: sequencer.c:3453
+#, c-format
+msgid "Could not merge %.*s"
+msgstr ""
+
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
+#, c-format
+msgid "could not copy '%s' to '%s'"
+msgstr ""
+
+#: sequencer.c:3483
+#, c-format
+msgid "Executing: %s\n"
+msgstr ""
+
+#: sequencer.c:3498
+#, c-format
+msgid ""
+"execution failed: %s\n"
+"%sYou can fix the problem, and then run\n"
+"\n"
+"  git rebase --continue\n"
+"\n"
+msgstr ""
+
+#: sequencer.c:3504
+msgid "and made changes to the index and/or the working tree\n"
+msgstr ""
+
+#: sequencer.c:3510
+#, c-format
+msgid ""
+"execution succeeded: %s\n"
+"but left changes to the index and/or the working tree\n"
+"Commit or stash your changes, and then run\n"
+"\n"
+"  git rebase --continue\n"
+"\n"
+msgstr ""
+
+#: sequencer.c:3571
+#, c-format
+msgid "illegal label name: '%.*s'"
+msgstr ""
+
+#: sequencer.c:3625
+msgid "writing fake root commit"
+msgstr ""
+
+#: sequencer.c:3630
+msgid "writing squash-onto"
+msgstr ""
+
+#: sequencer.c:3714
+#, c-format
+msgid "could not resolve '%s'"
+msgstr ""
+
+#: sequencer.c:3747
+msgid "cannot merge without a current revision"
+msgstr ""
+
+#: sequencer.c:3769
+#, c-format
+msgid "unable to parse '%.*s'"
+msgstr ""
+
+#: sequencer.c:3778
+#, c-format
+msgid "nothing to merge: '%.*s'"
+msgstr ""
+
+#: sequencer.c:3790
+msgid "octopus merge cannot be executed on top of a [new root]"
+msgstr ""
+
+#: sequencer.c:3806
+#, c-format
+msgid "could not get commit message of '%s'"
+msgstr ""
+
+#: sequencer.c:3989
+#, c-format
+msgid "could not even attempt to merge '%.*s'"
+msgstr ""
+
+#: sequencer.c:4005
+msgid "merge: Unable to write new index file"
+msgstr ""
+
+#: sequencer.c:4079
+msgid "Cannot autostash"
+msgstr ""
+
+#: sequencer.c:4082
+#, c-format
+msgid "Unexpected stash response: '%s'"
+msgstr ""
+
+#: sequencer.c:4088
+#, c-format
+msgid "Could not create directory for '%s'"
+msgstr ""
+
+#: sequencer.c:4091
+#, c-format
+msgid "Created autostash: %s\n"
+msgstr ""
+
+#: sequencer.c:4095
+msgid "could not reset --hard"
+msgstr ""
+
+#: sequencer.c:4120
+#, c-format
+msgid "Applied autostash.\n"
+msgstr ""
+
+#: sequencer.c:4132
+#, c-format
+msgid "cannot store %s"
+msgstr ""
+
+#: sequencer.c:4135
+#, c-format
+msgid ""
+"%s\n"
+"Your changes are safe in the stash.\n"
+"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
+msgstr ""
+
+#: sequencer.c:4140
+msgid "Applying autostash resulted in conflicts."
+msgstr ""
+
+#: sequencer.c:4141
+msgid "Autostash exists; creating a new stash entry."
+msgstr ""
+
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
+msgid "could not detach HEAD"
+msgstr ""
+
+#: sequencer.c:4249
+#, c-format
+msgid "Stopped at HEAD\n"
+msgstr ""
+
+#: sequencer.c:4251
+#, c-format
+msgid "Stopped at %s\n"
+msgstr ""
+
+#: sequencer.c:4259
+#, c-format
+msgid ""
+"Could not execute the todo command\n"
+"\n"
+"    %.*s\n"
+"It has been rescheduled; To edit the command before continuing, please\n"
+"edit the todo list first:\n"
+"\n"
+"    git rebase --edit-todo\n"
+"    git rebase --continue\n"
+msgstr ""
+
+#: sequencer.c:4305
+#, c-format
+msgid "Rebasing (%d/%d)%s"
+msgstr ""
+
+#: sequencer.c:4351
+#, c-format
+msgid "Stopped at %s...  %.*s\n"
+msgstr ""
+
+#: sequencer.c:4422
+#, c-format
+msgid "unknown command %d"
+msgstr ""
+
+#: sequencer.c:4481
+msgid "could not read orig-head"
+msgstr ""
+
+#: sequencer.c:4486
+msgid "could not read 'onto'"
+msgstr ""
+
+#: sequencer.c:4500
+#, c-format
+msgid "could not update HEAD to %s"
+msgstr ""
+
+#: sequencer.c:4560
+#, c-format
+msgid "Successfully rebased and updated %s.\n"
+msgstr ""
+
+#: sequencer.c:4612
+msgid "cannot rebase: You have unstaged changes."
+msgstr ""
+
+#: sequencer.c:4621
+msgid "cannot amend non-existing commit"
+msgstr ""
+
+#: sequencer.c:4623
+#, c-format
+msgid "invalid file: '%s'"
+msgstr ""
+
+#: sequencer.c:4625
+#, c-format
+msgid "invalid contents: '%s'"
+msgstr ""
+
+#: sequencer.c:4628
+msgid ""
+"\n"
+"You have uncommitted changes in your working tree. Please, commit them\n"
+"first and then run 'git rebase --continue' again."
+msgstr ""
+
+#: sequencer.c:4664 sequencer.c:4703
+#, c-format
+msgid "could not write file: '%s'"
+msgstr ""
+
+#: sequencer.c:4719
+msgid "could not remove CHERRY_PICK_HEAD"
+msgstr ""
+
+#: sequencer.c:4726
+msgid "could not commit staged changes."
+msgstr ""
+
+#: sequencer.c:4846
+#, c-format
+msgid "%s: can't cherry-pick a %s"
+msgstr ""
+
+#: sequencer.c:4850
+#, c-format
+msgid "%s: bad revision"
+msgstr ""
+
+#: sequencer.c:4885
+msgid "can't revert as initial commit"
+msgstr ""
+
+#: sequencer.c:5362
+msgid "make_script: unhandled options"
+msgstr ""
+
+#: sequencer.c:5365
+msgid "make_script: error preparing revisions"
+msgstr ""
+
+#: sequencer.c:5615 sequencer.c:5632
+msgid "nothing to do"
+msgstr ""
+
+#: sequencer.c:5651
+msgid "could not skip unnecessary pick commands"
+msgstr ""
+
+#: sequencer.c:5751
+msgid "the script was already rearranged."
+msgstr ""
+
+#: setup.c:133
+#, c-format
+msgid "'%s' is outside repository at '%s'"
+msgstr ""
+
+#: setup.c:185
+#, c-format
+msgid ""
+"%s: no such path in the working tree.\n"
+"Use 'git <command> -- <path>...' to specify paths that do not exist locally."
+msgstr ""
+
+#: setup.c:198
+#, c-format
+msgid ""
+"ambiguous argument '%s': unknown revision or path not in the working tree.\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr ""
+
+#: setup.c:264
+#, c-format
+msgid "option '%s' must come before non-option arguments"
+msgstr ""
+
+#: setup.c:283
+#, c-format
+msgid ""
+"ambiguous argument '%s': both revision and filename\n"
+"Use '--' to separate paths from revisions, like this:\n"
+"'git <command> [<revision>...] -- [<file>...]'"
+msgstr ""
+
+#: setup.c:419
+msgid "unable to set up work tree using invalid config"
+msgstr ""
+
+#: setup.c:423
+msgid "this operation must be run in a work tree"
+msgstr ""
+
+#: setup.c:661
+#, c-format
+msgid "Expected git repo version <= %d, found %d"
+msgstr ""
+
+#: setup.c:669
+msgid "unknown repository extensions found:"
+msgstr ""
+
+#: setup.c:681
+msgid "repo version is 0, but v1-only extensions found:"
+msgstr ""
+
+#: setup.c:700
+#, c-format
+msgid "error opening '%s'"
+msgstr ""
+
+#: setup.c:702
+#, c-format
+msgid "too large to be a .git file: '%s'"
+msgstr ""
+
+#: setup.c:704
+#, c-format
+msgid "error reading %s"
+msgstr ""
+
+#: setup.c:706
+#, c-format
+msgid "invalid gitfile format: %s"
+msgstr ""
+
+#: setup.c:708
+#, c-format
+msgid "no path in gitfile: %s"
+msgstr ""
+
+#: setup.c:710
+#, c-format
+msgid "not a git repository: %s"
+msgstr ""
+
+#: setup.c:812
+#, c-format
+msgid "'$%s' too big"
+msgstr ""
+
+#: setup.c:826
+#, c-format
+msgid "not a git repository: '%s'"
+msgstr ""
+
+#: setup.c:855 setup.c:857 setup.c:888
+#, c-format
+msgid "cannot chdir to '%s'"
+msgstr ""
+
+#: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
+msgid "cannot come back to cwd"
+msgstr ""
+
+#: setup.c:987
+#, c-format
+msgid "failed to stat '%*s%s%s'"
+msgstr ""
+
+#: setup.c:1225
+msgid "Unable to read current working directory"
+msgstr ""
+
+#: setup.c:1234 setup.c:1240
+#, c-format
+msgid "cannot change to '%s'"
+msgstr ""
+
+#: setup.c:1245
+#, c-format
+msgid "not a git repository (or any of the parent directories): %s"
+msgstr ""
+
+#: setup.c:1251
+#, c-format
+msgid ""
+"not a git repository (or any parent up to mount point %s)\n"
+"Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
+msgstr ""
+
+#: setup.c:1370
+#, c-format
+msgid ""
+"problem with core.sharedRepository filemode value (0%.3o).\n"
+"The owner of files must always have read and write permissions."
+msgstr ""
+
+#: setup.c:1417
+msgid "open /dev/null or dup failed"
+msgstr ""
+
+#: setup.c:1432
+msgid "fork failed"
+msgstr ""
+
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
+msgid "setsid failed"
+msgstr ""
+
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr ""
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr ""
+
+#: sparse-index.c:239
+#, c-format
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 gibibyte
+#: strbuf.c:850
+#, c-format
+msgid "%u.%2.2u GiB"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
+#: strbuf.c:852
+#, c-format
+msgid "%u.%2.2u GiB/s"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 mebibyte
+#: strbuf.c:860
+#, c-format
+msgid "%u.%2.2u MiB"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
+#: strbuf.c:862
+#, c-format
+msgid "%u.%2.2u MiB/s"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 kibibyte
+#: strbuf.c:869
+#, c-format
+msgid "%u.%2.2u KiB"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
+#: strbuf.c:871
+#, c-format
+msgid "%u.%2.2u KiB/s"
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 byte
+#: strbuf.c:877
+#, c-format
+msgid "%u byte"
+msgid_plural "%u bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#. TRANSLATORS: IEC 80000-13:2008 byte/second
+#: strbuf.c:879
+#, c-format
+msgid "%u byte/s"
+msgid_plural "%u bytes/s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
+#, c-format
+msgid "could not open '%s' for writing"
+msgstr ""
+
+#: strbuf.c:1177
+#, c-format
+msgid "could not edit '%s'"
+msgstr ""
+
+#: submodule-config.c:237
+#, c-format
+msgid "ignoring suspicious submodule name: %s"
+msgstr "abaikan nama submodul dicurigai: %s"
+
+#: submodule-config.c:304
+msgid "negative values not allowed for submodule.fetchjobs"
+msgstr "nilai negatif tidak diperbolehkan untuk submodule.fetchjobs"
+
+#: submodule-config.c:402
+#, c-format
+msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
+msgstr "abaikan '%s' yang mungkin ditafsirkan sebagai opsi baris perintah: %s"
+
+#: submodule-config.c:499
+#, c-format
+msgid "invalid value for %s"
+msgstr "nilai tidak valid untuk %s"
+
+#: submodule-config.c:766
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr "Tidak dapat memperbarui entri .gitmodules %s"
+
+#: submodule.c:114 submodule.c:143
+msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
+msgstr ""
+"Tidak dapat mengubah .gitmodules yang tak tergabung, selesaikan konflik "
+"penggabungan terlebih dahulu"
+
+#: submodule.c:118 submodule.c:147
+#, c-format
+msgid "Could not find section in .gitmodules where path=%s"
+msgstr "Tidak dapat menemukan bagian .gitmodules dimana path=%s"
+
+#: submodule.c:154
+#, c-format
+msgid "Could not remove .gitmodules entry for %s"
+msgstr "Tidak dapat menghapus entri .gitmodules untuk %s"
+
+#: submodule.c:165
+msgid "staging updated .gitmodules failed"
+msgstr "gagal menggelar .gitmodules terbarui"
+
+#: submodule.c:328
+#, c-format
+msgid "in unpopulated submodule '%s'"
+msgstr "dalam submodul tak terisi '%s'"
+
+#: submodule.c:359
+#, c-format
+msgid "Pathspec '%s' is in submodule '%.*s'"
+msgstr "Spek jalur '%s' di dalam submodul '%.*s'"
+
+#: submodule.c:436
+#, c-format
+msgid "bad --ignore-submodules argument: %s"
+msgstr "argumen --ignore-submodules jelek: %s"
+
+#: submodule.c:818
+#, c-format
+msgid ""
+"Submodule in commit %s at path: '%s' collides with a submodule named the "
+"same. Skipping it."
+msgstr ""
+"Submodul dalam komit %s pada jalur '%s' bertabrakan dengan submodul yang "
+"bernama sama. Melewati itu."
+
+#: submodule.c:921
+#, c-format
+msgid "submodule entry '%s' (%s) is a %s, not a commit"
+msgstr "entri submodul '%s' (%s) adalah %s, bukan komit"
+
+#: submodule.c:1006
+#, c-format
+msgid ""
+"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
+"submodule %s"
+msgstr ""
+"Tidak dapat menjalankan perintah 'git rev-list <komit> --not --remotes -n 1' "
+"dalam submodul %s"
+
+#: submodule.c:1129
+#, c-format
+msgid "process for submodule '%s' failed"
+msgstr "proses untuk submodul '%s' gagal"
+
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
+msgid "Failed to resolve HEAD as a valid ref."
+msgstr "Gagal menguraikan HEAD sebagai referensi valid."
+
+#: submodule.c:1169
+#, c-format
+msgid "Pushing submodule '%s'\n"
+msgstr "Mendorong submodul '%s'\n"
+
+#: submodule.c:1172
+#, c-format
+msgid "Unable to push submodule '%s'\n"
+msgstr "Tidak dapat mendorong submodul '%s'\n"
+
+#: submodule.c:1464
+#, c-format
+msgid "Fetching submodule %s%s\n"
+msgstr "Mengambil submodul %s%s\n"
+
+#: submodule.c:1498
+#, c-format
+msgid "Could not access submodule '%s'\n"
+msgstr "Tidak dapat mengakses submodul '%s'\n"
+
+#: submodule.c:1653
+#, c-format
+msgid ""
+"Errors during submodule fetch:\n"
+"%s"
+msgstr ""
+"Kesalahan saat pengambilan submodul:\n"
+"%s"
+
+#: submodule.c:1678
+#, c-format
+msgid "'%s' not recognized as a git repository"
+msgstr "'%s' tak dikenal sebagai repositori git"
+
+#: submodule.c:1695
+#, c-format
+msgid "Could not run 'git status --porcelain=2' in submodule %s"
+msgstr "Tidak dapat menjalankan 'git status --porcelain=2' dalam submodul %s"
+
+#: submodule.c:1736
+#, c-format
+msgid "'git status --porcelain=2' failed in submodule %s"
+msgstr "'git status --porcelain=2' gagal dalam submodul %s"
+
+#: submodule.c:1811
+#, c-format
+msgid "could not start 'git status' in submodule '%s'"
+msgstr "Tidak dalat memulai 'git status' dalam submodul '%s'"
+
+#: submodule.c:1824
+#, c-format
+msgid "could not run 'git status' in submodule '%s'"
+msgstr "tidak dapat menjalankan 'git status' dalam submodul '%s'"
+
+#: submodule.c:1839
+#, c-format
+msgid "Could not unset core.worktree setting in submodule '%s'"
+msgstr "Tidak dapat batal setel setelan core.worktree dalam submodul '%s'"
+
+#: submodule.c:1866 submodule.c:2176
+#, c-format
+msgid "could not recurse into submodule '%s'"
+msgstr "tidak dapat rekursi ke dalam submodul '%s'"
+
+#: submodule.c:1887
+msgid "could not reset submodule index"
+msgstr "tidak dapat reset indeks submodul"
+
+#: submodule.c:1929
+#, c-format
+msgid "submodule '%s' has dirty index"
+msgstr "submodul '%s' punya indeks kotor"
+
+#: submodule.c:1981
+#, c-format
+msgid "Submodule '%s' could not be updated."
+msgstr "Submodul '%s' tidak dapat diperbarui."
+
+#: submodule.c:2049
+#, c-format
+msgid "submodule git dir '%s' is inside git dir '%.*s'"
+msgstr "direktori submodul git '%s' di dalam direktori git '%.*s'"
+
+#: submodule.c:2070
+#, c-format
+msgid ""
+"relocate_gitdir for submodule '%s' with more than one worktree not supported"
+msgstr ""
+"relocate_gitdir untuk submodul '%s' dengan lebih dari satu pohon kerja tidak "
+"didukung"
+
+#: submodule.c:2082 submodule.c:2141
+#, c-format
+msgid "could not lookup name for submodule '%s'"
+msgstr "tidak dapat mencari nama untuk submodul '%s'"
+
+#: submodule.c:2086
+#, c-format
+msgid "refusing to move '%s' into an existing git dir"
+msgstr "menolak memindahkan '%s' ke dalam direktori git yang ada"
+
+#: submodule.c:2093
+#, c-format
+msgid ""
+"Migrating git directory of '%s%s' from\n"
+"'%s' to\n"
+"'%s'\n"
+msgstr ""
+"Memigrasikan direktori git '%s%s' dari\n"
+"'%s' ke\n"
+"'%s'\n"
+
+#: submodule.c:2221
+msgid "could not start ls-files in .."
+msgstr "tidak dapat memulai ls-files dalam .."
+
+#: submodule.c:2261
+#, c-format
+msgid "ls-tree returned unexpected return code %d"
+msgstr "ls-tree kembalikan kode kembali %d yang tak diharapkan"
+
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr ""
+
+#: trailer.c:244
+#, c-format
+msgid "running trailer command '%s' failed"
+msgstr ""
+
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
+#, c-format
+msgid "unknown value '%s' for key '%s'"
+msgstr ""
+
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
+#, c-format
+msgid "more than one %s"
+msgstr ""
+
+#: trailer.c:743
+#, c-format
+msgid "empty trailer token in trailer '%.*s'"
+msgstr ""
+
+#: trailer.c:763
+#, c-format
+msgid "could not read input file '%s'"
+msgstr ""
+
+#: trailer.c:766 builtin/mktag.c:88
+msgid "could not read from stdin"
+msgstr ""
+
+#: trailer.c:1024 wrapper.c:676
+#, c-format
+msgid "could not stat %s"
+msgstr ""
+
+#: trailer.c:1026
+#, c-format
+msgid "file %s is not a regular file"
+msgstr ""
+
+#: trailer.c:1028
+#, c-format
+msgid "file %s is not writable by user"
+msgstr ""
+
+#: trailer.c:1040
+msgid "could not open temporary file"
+msgstr ""
+
+#: trailer.c:1080
+#, c-format
+msgid "could not rename temporary file to %s"
+msgstr ""
+
+#: transport-helper.c:62 transport-helper.c:91
+msgid "full write to remote helper failed"
+msgstr ""
+
+#: transport-helper.c:145
+#, c-format
+msgid "unable to find remote helper for '%s'"
+msgstr ""
+
+#: transport-helper.c:161 transport-helper.c:575
+msgid "can't dup helper output fd"
+msgstr ""
+
+#: transport-helper.c:214
+#, c-format
+msgid ""
+"unknown mandatory capability %s; this remote helper probably needs newer "
+"version of Git"
+msgstr ""
+
+#: transport-helper.c:220
+msgid "this remote helper should implement refspec capability"
+msgstr ""
+
+#: transport-helper.c:287 transport-helper.c:429
+#, c-format
+msgid "%s unexpectedly said: '%s'"
+msgstr ""
+
+#: transport-helper.c:417
+#, c-format
+msgid "%s also locked %s"
+msgstr ""
+
+#: transport-helper.c:497
+msgid "couldn't run fast-import"
+msgstr ""
+
+#: transport-helper.c:520
+msgid "error while running fast-import"
+msgstr ""
+
+#: transport-helper.c:549 transport-helper.c:1247
+#, c-format
+msgid "could not read ref %s"
+msgstr ""
+
+#: transport-helper.c:594
+#, c-format
+msgid "unknown response to connect: %s"
+msgstr ""
+
+#: transport-helper.c:616
+msgid "setting remote service path not supported by protocol"
+msgstr ""
+
+#: transport-helper.c:618
+msgid "invalid remote service path"
+msgstr ""
+
+#: transport-helper.c:661 transport.c:1471
+msgid "operation not supported by protocol"
+msgstr ""
+
+#: transport-helper.c:664
+#, c-format
+msgid "can't connect to subservice %s"
+msgstr ""
+
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr ""
+
+#: transport-helper.c:755
+msgid "'option' without a matching 'ok/error' directive"
+msgstr ""
+
+#: transport-helper.c:798
+#, c-format
+msgid "expected ok/error, helper said '%s'"
+msgstr ""
+
+#: transport-helper.c:855
+#, c-format
+msgid "helper reported unexpected status of %s"
+msgstr ""
+
+#: transport-helper.c:938
+#, c-format
+msgid "helper %s does not support dry-run"
+msgstr ""
+
+#: transport-helper.c:941
+#, c-format
+msgid "helper %s does not support --signed"
+msgstr ""
+
+#: transport-helper.c:944
+#, c-format
+msgid "helper %s does not support --signed=if-asked"
+msgstr ""
+
+#: transport-helper.c:949
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr ""
+
+#: transport-helper.c:953
+#, c-format
+msgid "helper %s does not support --%s"
+msgstr ""
+
+#: transport-helper.c:960
+#, c-format
+msgid "helper %s does not support 'push-option'"
+msgstr ""
+
+#: transport-helper.c:1060
+msgid "remote-helper doesn't support push; refspec needed"
+msgstr ""
+
+#: transport-helper.c:1065
+#, c-format
+msgid "helper %s does not support 'force'"
+msgstr ""
+
+#: transport-helper.c:1112
+msgid "couldn't run fast-export"
+msgstr ""
+
+#: transport-helper.c:1117
+msgid "error while running fast-export"
+msgstr ""
+
+#: transport-helper.c:1142
+#, c-format
+msgid ""
+"No refs in common and none specified; doing nothing.\n"
+"Perhaps you should specify a branch.\n"
+msgstr ""
+
+#: transport-helper.c:1224
+#, c-format
+msgid "unsupported object format '%s'"
+msgstr ""
+
+#: transport-helper.c:1233
+#, c-format
+msgid "malformed response in ref list: %s"
+msgstr ""
+
+#: transport-helper.c:1385
+#, c-format
+msgid "read(%s) failed"
+msgstr ""
+
+#: transport-helper.c:1412
+#, c-format
+msgid "write(%s) failed"
+msgstr ""
+
+#: transport-helper.c:1461
+#, c-format
+msgid "%s thread failed"
+msgstr ""
+
+#: transport-helper.c:1465
+#, c-format
+msgid "%s thread failed to join: %s"
+msgstr ""
+
+#: transport-helper.c:1484 transport-helper.c:1488
+#, c-format
+msgid "can't start thread for copying data: %s"
+msgstr ""
+
+#: transport-helper.c:1525
+#, c-format
+msgid "%s process failed to wait"
+msgstr ""
+
+#: transport-helper.c:1529
+#, c-format
+msgid "%s process failed"
+msgstr ""
+
+#: transport-helper.c:1547 transport-helper.c:1556
+msgid "can't start thread for copying data"
+msgstr ""
+
+#: transport.c:116
+#, c-format
+msgid "Would set upstream of '%s' to '%s' of '%s'\n"
+msgstr ""
+
+#: transport.c:145
+#, c-format
+msgid "could not read bundle '%s'"
+msgstr ""
+
+#: transport.c:220
+#, c-format
+msgid "transport: invalid depth option '%s'"
+msgstr ""
+
+#: transport.c:272
+msgid "see protocol.version in 'git help config' for more details"
+msgstr ""
+
+#: transport.c:273
+msgid "server options require protocol version 2 or later"
+msgstr ""
+
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr ""
+
+#: transport.c:751
+msgid "could not parse transport.color.* config"
+msgstr ""
+
+#: transport.c:826
+msgid "support for protocol v2 not implemented yet"
+msgstr ""
+
+#: transport.c:960
+#, c-format
+msgid "unknown value for config '%s': %s"
+msgstr ""
+
+#: transport.c:1026
+#, c-format
+msgid "transport '%s' not allowed"
+msgstr ""
+
+#: transport.c:1079
+msgid "git-over-rsync is no longer supported"
+msgstr ""
+
+#: transport.c:1181
+#, c-format
+msgid ""
+"The following submodule paths contain changes that can\n"
+"not be found on any remote:\n"
+msgstr ""
+
+#: transport.c:1185
+#, c-format
+msgid ""
+"\n"
+"Please try\n"
+"\n"
+"\tgit push --recurse-submodules=on-demand\n"
+"\n"
+"or cd to the path and use\n"
+"\n"
+"\tgit push\n"
+"\n"
+"to push them to a remote.\n"
+"\n"
+msgstr ""
+
+#: transport.c:1193
+msgid "Aborting."
+msgstr ""
+
+#: transport.c:1340
+msgid "failed to push all needed submodules"
+msgstr ""
+
+#: tree-walk.c:33
+msgid "too-short tree object"
+msgstr ""
+
+#: tree-walk.c:39
+msgid "malformed mode in tree entry"
+msgstr ""
+
+#: tree-walk.c:43
+msgid "empty filename in tree entry"
+msgstr ""
+
+#: tree-walk.c:118
+msgid "too-short tree file"
+msgstr ""
+
+#: unpack-trees.c:115
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%sPlease commit your changes or stash them before you switch branches."
+msgstr ""
+
+#: unpack-trees.c:117
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by checkout:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:120
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%sPlease commit your changes or stash them before you merge."
+msgstr ""
+
+#: unpack-trees.c:122
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:125
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%sPlease commit your changes or stash them before you %s."
+msgstr ""
+
+#: unpack-trees.c:127
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by %s:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:132
+#, c-format
+msgid ""
+"Updating the following directories would lose untracked files in them:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:136
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+
+#: unpack-trees.c:138
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by checkout:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:141
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr ""
+
+#: unpack-trees.c:143
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by merge:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:146
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+
+#: unpack-trees.c:148
+#, c-format
+msgid ""
+"The following untracked working tree files would be removed by %s:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:154
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+
+#: unpack-trees.c:156
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:159
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%sPlease move or remove them before you merge."
+msgstr ""
+
+#: unpack-trees.c:161
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by merge:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:164
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%sPlease move or remove them before you %s."
+msgstr ""
+
+#: unpack-trees.c:166
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by %s:\n"
+"%%s"
+msgstr ""
+
+#: unpack-trees.c:174
+#, c-format
+msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
+msgstr ""
+
+#: unpack-trees.c:177
+#, c-format
+msgid ""
+"Cannot update submodule:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:180
+#, c-format
+msgid ""
+"The following paths are not up to date and were left despite sparse "
+"patterns:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:182
+#, c-format
+msgid ""
+"The following paths are unmerged and were left despite sparse patterns:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:184
+#, c-format
+msgid ""
+"The following paths were already present and thus not updated despite sparse "
+"patterns:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:264
+#, c-format
+msgid "Aborting\n"
+msgstr ""
+
+#: unpack-trees.c:291
+#, c-format
+msgid ""
+"After fixing the above paths, you may want to run `git sparse-checkout "
+"reapply`.\n"
+msgstr ""
+
+#: unpack-trees.c:352
+msgid "Updating files"
+msgstr ""
+
+#: unpack-trees.c:384
+msgid ""
+"the following paths have collided (e.g. case-sensitive paths\n"
+"on a case-insensitive filesystem) and only one from the same\n"
+"colliding group is in the working tree:\n"
+msgstr ""
+
+#: unpack-trees.c:1519
+msgid "Updating index flags"
+msgstr ""
+
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+
+#: upload-pack.c:1548
+msgid "expected flush after fetch arguments"
+msgstr ""
+
+#: urlmatch.c:163
+msgid "invalid URL scheme name or missing '://' suffix"
+msgstr ""
+
+#: urlmatch.c:187 urlmatch.c:346 urlmatch.c:405
+#, c-format
+msgid "invalid %XX escape sequence"
+msgstr ""
+
+#: urlmatch.c:215
+msgid "missing host and scheme is not 'file:'"
+msgstr ""
+
+#: urlmatch.c:232
+msgid "a 'file:' URL may not have a port number"
+msgstr ""
+
+#: urlmatch.c:247
+msgid "invalid characters in host name"
+msgstr ""
+
+#: urlmatch.c:292 urlmatch.c:303
+msgid "invalid port number"
+msgstr ""
+
+#: urlmatch.c:371
+msgid "invalid '..' path segment"
+msgstr ""
+
+#: walker.c:170
+msgid "Fetching objects"
+msgstr ""
+
+#: worktree.c:238 builtin/am.c:2151
+#, c-format
+msgid "failed to read '%s'"
+msgstr "gagal membaca '%s'"
+
+#: worktree.c:304
+#, c-format
+msgid "'%s' at main working tree is not the repository directory"
+msgstr "'%s' pada pohon kerja utama bukan direktori repositori"
+
+#: worktree.c:315
+#, c-format
+msgid "'%s' file does not contain absolute path to the working tree location"
+msgstr "berkas '%s' tidak berisi jalur absolut ke lokasi pohon kerja"
+
+#: worktree.c:327
+#, c-format
+msgid "'%s' does not exist"
+msgstr "'%s' tidak ada"
+
+#: worktree.c:333
+#, c-format
+msgid "'%s' is not a .git file, error code %d"
+msgstr "'%s' bukan berkas .git, kode error %d"
+
+#: worktree.c:342
+#, c-format
+msgid "'%s' does not point back to '%s'"
+msgstr "'%s' tidak menunjuk kembali ke '%s'"
+
+#: worktree.c:608
+msgid "not a directory"
+msgstr "bukan direktori"
+
+#: worktree.c:617
+msgid ".git is not a file"
+msgstr ".git bukan berkas"
+
+#: worktree.c:619
+msgid ".git file broken"
+msgstr "berkas .git rusak"
+
+#: worktree.c:621
+msgid ".git file incorrect"
+msgstr "berkas .git salah"
+
+#: worktree.c:727
+msgid "not a valid path"
+msgstr "bukan jalur valid"
+
+#: worktree.c:733
+msgid "unable to locate repository; .git is not a file"
+msgstr "tidak dapat menempatkan repositori; .git bukan berkas"
+
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr ""
+"tidak dapat menempatkan repositori; berkas .git tidak merujuk repositori"
+
+#: worktree.c:741
+msgid "unable to locate repository; .git file broken"
+msgstr "tidak dapat menempatkan repositori; berkas .git rusak"
+
+#: worktree.c:747
+msgid "gitdir unreadable"
+msgstr "gitdir tidak dapat dibaca"
+
+#: worktree.c:751
+msgid "gitdir incorrect"
+msgstr "gitdir salah"
+
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "bukan direktori valid"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "berkas gitdir tidak ada"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "tidak dapat membaca berkas gitdir (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "baca singkat (diharapkan %<PRIuMAX> bita, terbaca %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "berkas gitdir tidak valid"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "berkas gitdir menunjuk ke lokasi yang tidak ada"
+
+#: wrapper.c:197 wrapper.c:367
+#, c-format
+msgid "could not open '%s' for reading and writing"
+msgstr ""
+
+#: wrapper.c:398 wrapper.c:599
+#, c-format
+msgid "unable to access '%s'"
+msgstr ""
+
+#: wrapper.c:607
+msgid "unable to get current working directory"
+msgstr ""
+
+#: wt-status.c:158
+msgid "Unmerged paths:"
+msgstr "Jalur yang tak tergabung:"
+
+#: wt-status.c:187 wt-status.c:219
+msgid "  (use \"git restore --staged <file>...\" to unstage)"
+msgstr "  (gunakan \"git restore --staged <berkas>...\" untuk menggelar balik)"
+
+#: wt-status.c:190 wt-status.c:222
+#, c-format
+msgid "  (use \"git restore --source=%s --staged <file>...\" to unstage)"
+msgstr ""
+"  (gunakan \"git restore --source=%s --staged <berkas>..\" untuk menggelar "
+"balik)"
+
+#: wt-status.c:193 wt-status.c:225
+msgid "  (use \"git rm --cached <file>...\" to unstage)"
+msgstr "  (gunakan \"git rm --cached <berkas>...\" untuk menggelar balik)"
+
+#: wt-status.c:197
+msgid "  (use \"git add <file>...\" to mark resolution)"
+msgstr "  (gunakan \"git add <berkas>...\" untuk menandai penyelesaian)"
+
+#: wt-status.c:199 wt-status.c:203
+msgid "  (use \"git add/rm <file>...\" as appropriate to mark resolution)"
+msgstr ""
+"  (gunakan \"git add.rm <berkas>...\" sebagaimana mestinya untuk menandai "
+"penyelesaian)"
+
+#: wt-status.c:201
+msgid "  (use \"git rm <file>...\" to mark resolution)"
+msgstr "  (gunakan \"git rm <berkas>\" untuk menandai penyelesaian)"
+
+#: wt-status.c:211 wt-status.c:1075
+msgid "Changes to be committed:"
+msgstr "Perubahan yang akan dikomit:"
+
+#: wt-status.c:234 wt-status.c:1084
+msgid "Changes not staged for commit:"
+msgstr "Perubahan yang tidak digelar untuk komit:"
+
+#: wt-status.c:238
+msgid "  (use \"git add <file>...\" to update what will be committed)"
+msgstr ""
+"  (gunakan \"git add <berkas>...\" untuk memperbarui apa yang akan dikomit)"
+
+#: wt-status.c:240
+msgid "  (use \"git add/rm <file>...\" to update what will be committed)"
+msgstr ""
+"  (gunakan \"git add/rm <berkas>...\" untuk memperbarui apa yang akan "
+"dikomit)"
+
+#: wt-status.c:241
+msgid ""
+"  (use \"git restore <file>...\" to discard changes in working directory)"
+msgstr ""
+"  (gunakan \"git restore <berkas>...\" untuk membuang perubahan di direktori "
+"kerja)"
+
+#: wt-status.c:243
+msgid "  (commit or discard the untracked or modified content in submodules)"
+msgstr ""
+"  (komit atau buang konten yang tak dilacak atau diubah dalam submodul)"
+
+#: wt-status.c:254
+#, c-format
+msgid "  (use \"git %s <file>...\" to include in what will be committed)"
+msgstr "  (use \"git %s <berkas>...\" untuk menyertakan apa yang akan dikomit)"
+
+#: wt-status.c:266
+msgid "both deleted:"
+msgstr "kedua-duanya dihapus:"
+
+#: wt-status.c:268
+msgid "added by us:"
+msgstr "ditambahkan oleh kami:"
+
+#: wt-status.c:270
+msgid "deleted by them:"
+msgstr "dihapus oleh mereka:"
+
+#: wt-status.c:272
+msgid "added by them:"
+msgstr "ditambahkan oleh mereka:"
+
+#: wt-status.c:274
+msgid "deleted by us:"
+msgstr "dihapus oleh kami:"
+
+#: wt-status.c:276
+msgid "both added:"
+msgstr "kedua-duanya ditambah:"
+
+#: wt-status.c:278
+msgid "both modified:"
+msgstr "kedua-duanya diubah:"
+
+#: wt-status.c:288
+msgid "new file:"
+msgstr "berkas baru:"
+
+#: wt-status.c:290
+msgid "copied:"
+msgstr "tersalin:"
+
+#: wt-status.c:292
+msgid "deleted:"
+msgstr "terhapus:"
+
+#: wt-status.c:294
+msgid "modified:"
+msgstr "terubah:"
+
+#: wt-status.c:296
+msgid "renamed:"
+msgstr "terganti nama:"
+
+#: wt-status.c:298
+msgid "typechange:"
+msgstr "tipe perubahan:"
+
+#: wt-status.c:300
+msgid "unknown:"
+msgstr "tidak diketahui:"
+
+#: wt-status.c:302
+msgid "unmerged:"
+msgstr "tidak digabung:"
+
+#: wt-status.c:382
+msgid "new commits, "
+msgstr "komit baru, "
+
+#: wt-status.c:384
+msgid "modified content, "
+msgstr "konten yang dimodifikasi, "
+
+#: wt-status.c:386
+msgid "untracked content, "
+msgstr "konten yang tak dilacak, "
+
+#: wt-status.c:908
+#, c-format
+msgid "Your stash currently has %d entry"
+msgid_plural "Your stash currently has %d entries"
+msgstr[0] "Simpanan Anda saat ini ada %d entri"
+msgstr[1] "Simpanan Anda saat ini ada %d entri"
+
+#: wt-status.c:939
+msgid "Submodules changed but not updated:"
+msgstr "Submodul berubah tapi tak diperbarui:"
+
+#: wt-status.c:941
+msgid "Submodule changes to be committed:"
+msgstr "Perubahan submodul yang akan dikomit:"
+
+#: wt-status.c:1023
+msgid ""
+"Do not modify or remove the line above.\n"
+"Everything below it will be ignored."
+msgstr ""
+"Jangan ubah atau hapus baris diatas.\n"
+"Semua dibawahnya akan diabaikan."
+
+#: wt-status.c:1115
+#, c-format
+msgid ""
+"\n"
+"It took %.2f seconds to compute the branch ahead/behind values.\n"
+"You can use '--no-ahead-behind' to avoid this.\n"
+msgstr ""
+"\n"
+"Butuh %.2f detik untuk menghitung cabang di depan/di belakang nilai.\n"
+"Anda bisa gunakan '--no-ahead-behind' untuk menghindari hal tersebut.\n"
+
+#: wt-status.c:1145
+msgid "You have unmerged paths."
+msgstr "Anda punya jalur yang tak tergabung."
+
+#: wt-status.c:1148
+msgid "  (fix conflicts and run \"git commit\")"
+msgstr "  (selesaikan konflik dan jalankan \"git commit\")"
+
+#: wt-status.c:1150
+msgid "  (use \"git merge --abort\" to abort the merge)"
+msgstr "  (gunakan \"git merge --abort\" untuk membatalkan penggabungan)"
+
+#: wt-status.c:1154
+msgid "All conflicts fixed but you are still merging."
+msgstr "Semua konflik sudah selesai tapi Anda masih menggabungkan."
+
+#: wt-status.c:1157
+msgid "  (use \"git commit\" to conclude merge)"
+msgstr "  (gunakan \"git commit\" untuk mengakhiri penggabungan)"
+
+#: wt-status.c:1166
+msgid "You are in the middle of an am session."
+msgstr "Anda berada ditengah-tengah sesi am."
+
+#: wt-status.c:1169
+msgid "The current patch is empty."
+msgstr "Jalur saat ini kosong"
+
+#: wt-status.c:1173
+msgid "  (fix conflicts and then run \"git am --continue\")"
+msgstr "  (selesaikan konflik lalu jalankan \"git am --continue\")"
+
+#: wt-status.c:1175
+msgid "  (use \"git am --skip\" to skip this patch)"
+msgstr "  (gunakan \"git am --skip\" untuk lewati tambalan ini)"
+
+#: wt-status.c:1177
+msgid "  (use \"git am --abort\" to restore the original branch)"
+msgstr "  (gunakan \"git am --abort\" untuk mengembalikan cabang asal)"
+
+#: wt-status.c:1310
+msgid "git-rebase-todo is missing."
+msgstr "git-rebase-todo hilang."
+
+#: wt-status.c:1312
+msgid "No commands done."
+msgstr "Tidak ada perintah selesai."
+
+#: wt-status.c:1315
+#, c-format
+msgid "Last command done (%d command done):"
+msgid_plural "Last commands done (%d commands done):"
+msgstr[0] "Perintah yang selesai (%d perintah):"
+msgstr[1] "Perintah yang selesai (%d perintah):"
+
+#: wt-status.c:1326
+#, c-format
+msgid "  (see more in file %s)"
+msgstr "  (lihat lebih lanjut di berkas %s)"
+
+#: wt-status.c:1331
+msgid "No commands remaining."
+msgstr "Tidak ada perintah yang tersisa."
+
+#: wt-status.c:1334
+#, c-format
+msgid "Next command to do (%d remaining command):"
+msgid_plural "Next commands to do (%d remaining commands):"
+msgstr[0] "Perintah berikutnya (%d perintah tersisa):"
+msgstr[1] "Perintah berikutnya (%d perintah tersisa):"
+
+#: wt-status.c:1342
+msgid "  (use \"git rebase --edit-todo\" to view and edit)"
+msgstr "  (gunakan \"git rebase --edit-todo\" untuk lihat dan sunting)"
+
+#: wt-status.c:1354
+#, c-format
+msgid "You are currently rebasing branch '%s' on '%s'."
+msgstr "Anda sedang mendasarkan ulang cabang '%s' pada '%s'."
+
+#: wt-status.c:1359
+msgid "You are currently rebasing."
+msgstr "Anda sedang mendasarkan ulang."
+
+#: wt-status.c:1372
+msgid "  (fix conflicts and then run \"git rebase --continue\")"
+msgstr "  (selesaikan konflik lalu jalankan \"git rebase --continue\")"
+
+#: wt-status.c:1374
+msgid "  (use \"git rebase --skip\" to skip this patch)"
+msgstr "  (gunakan \"git rebase --skip\" untuk lewati tambalan ini)"
+
+#: wt-status.c:1376
+msgid "  (use \"git rebase --abort\" to check out the original branch)"
+msgstr "  (gunakan \"git rebase --abort\" untuk check out cabang asal)"
+
+#: wt-status.c:1383
+msgid "  (all conflicts fixed: run \"git rebase --continue\")"
+msgstr "  (semua konflik sudah selesai: jalankan \"git rebase --continue\")"
+
+#: wt-status.c:1387
+#, c-format
+msgid ""
+"You are currently splitting a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+"Anda sedang membelah komit saat mendasarkan ulang cabang '%s' pada '%s'."
+
+#: wt-status.c:1392
+msgid "You are currently splitting a commit during a rebase."
+msgstr "Anda sedang membelah komit saat mendasarkan ulang."
+
+#: wt-status.c:1395
+msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
+msgstr ""
+"  (Setelah direktori kerja Anda bersih, jalankan \"git rebase --continue\")"
+
+#: wt-status.c:1399
+#, c-format
+msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
+msgstr ""
+"Anda sedang menyunting komit saat mendasarkan ulang cabang '%s' pada '%s'."
+
+#: wt-status.c:1404
+msgid "You are currently editing a commit during a rebase."
+msgstr "Anda sedang menyunting komit saat mendasarkan ulang."
+
+#: wt-status.c:1407
+msgid "  (use \"git commit --amend\" to amend the current commit)"
+msgstr "  (gunakan \"git commit --amend\" untuk mengubah komit saat ini)"
+
+#: wt-status.c:1409
+msgid ""
+"  (use \"git rebase --continue\" once you are satisfied with your changes)"
+msgstr ""
+"  (gunakan \"git rebase --continue\" begitu Anda puas dengan perubahan Anda)"
+
+#: wt-status.c:1420
+msgid "Cherry-pick currently in progress."
+msgstr "Petik ceri sedang berjalan."
+
+#: wt-status.c:1423
+#, c-format
+msgid "You are currently cherry-picking commit %s."
+msgstr "Anda sedang memetik ceri komit %s."
+
+#: wt-status.c:1430
+msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
+msgstr "  (selesaikan konflik dan jalankan \"git cherry-pick --continue\")"
+
+#: wt-status.c:1433
+msgid "  (run \"git cherry-pick --continue\" to continue)"
+msgstr "  (jalankan \"git cherry-pick --continue\" untuk melanjutkan)"
+
+#: wt-status.c:1436
+msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
+msgstr ""
+"  (semua konflik sudah selesai: jalankan \"git cherry-pick --continue\")"
+
+#: wt-status.c:1438
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr "  (gunakan \"git cherry-pick --skip\" untuk lewati tambalan ini)"
+
+#: wt-status.c:1440
+msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
+msgstr ""
+"  (gunakan \"git cherry-pick --abort\" untuk membatalkan operasi petik ceri)"
+
+#: wt-status.c:1450
+msgid "Revert currently in progress."
+msgstr "Pengembalian sedang berjalang."
+
+#: wt-status.c:1453
+#, c-format
+msgid "You are currently reverting commit %s."
+msgstr "Anda sedang mengembalikan komit %s."
+
+#: wt-status.c:1459
+msgid "  (fix conflicts and run \"git revert --continue\")"
+msgstr "  (selesaikan konflik dan jalankan \"git revert --continue\")"
+
+#: wt-status.c:1462
+msgid "  (run \"git revert --continue\" to continue)"
+msgstr "  (jalankan \"git revert --continue\" untuk melanjutkan)"
+
+#: wt-status.c:1465
+msgid "  (all conflicts fixed: run \"git revert --continue\")"
+msgstr "  (semua konflik sudah selesai: jalankan \"git revert --continue\")"
+
+#: wt-status.c:1467
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr "  (gunakan \"git revert --skip\" untuk lewati tambalan ini)"
+
+#: wt-status.c:1469
+msgid "  (use \"git revert --abort\" to cancel the revert operation)"
+msgstr ""
+"  (gunakan \"git revert --abort\" untuk membatalkan operasi pengembalian)"
+
+#: wt-status.c:1479
+#, c-format
+msgid "You are currently bisecting, started from branch '%s'."
+msgstr "Anda sedang membagi dua, dimulai dari cabang '%s'."
+
+#: wt-status.c:1483
+msgid "You are currently bisecting."
+msgstr "Anda sedang membagi dua."
+
+#: wt-status.c:1486
+msgid "  (use \"git bisect reset\" to get back to the original branch)"
+msgstr "  (gunakan \"git bisect reset\" untuk kembali ke cabang asal)"
+
+#: wt-status.c:1497
+#, c-format
+msgid "You are in a sparse checkout with %d%% of tracked files present."
+msgstr "Anda berada dalam checkout tipis dengan %d%% berkas terlacak ada."
+
+#: wt-status.c:1736
+msgid "On branch "
+msgstr "Pada cabang "
+
+#: wt-status.c:1743
+msgid "interactive rebase in progress; onto "
+msgstr "sedang mendasarkan ulang interaktif; ke "
+
+#: wt-status.c:1745
+msgid "rebase in progress; onto "
+msgstr "sedang mendasarkan ulang; ke "
+
+#: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr ""
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr ""
+
+#: wt-status.c:1755
+msgid "Not currently on any branch."
+msgstr "Tidak sedang berada pada cabang apapun."
+
+#: wt-status.c:1772
+msgid "Initial commit"
+msgstr "Komit awal"
+
+#: wt-status.c:1773
+msgid "No commits yet"
+msgstr "Tidak ada komit"
+
+#: wt-status.c:1787
+msgid "Untracked files"
+msgstr "Berkas tak terlacak"
+
+#: wt-status.c:1789
+msgid "Ignored files"
+msgstr "Berkas yang diabaikan"
+
+#: wt-status.c:1793
+#, c-format
+msgid ""
+"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
+"may speed it up, but you have to be careful not to forget to add\n"
+"new files yourself (see 'git help status')."
+msgstr ""
+"Butuh %.2f detik untuk menghitung berkas tak terlacak. 'status -uno'\n"
+"mungkin bisa mempercepat, tapi Anda harus berhati-hati jangan sampai lupa\n"
+"untuk tambahkan berkas baru sendiri (lihat 'git help status')."
+
+#: wt-status.c:1799
+#, c-format
+msgid "Untracked files not listed%s"
+msgstr "Berkas tak terlacak yang tak disebutkan%s"
+
+#: wt-status.c:1801
+msgid " (use -u option to show untracked files)"
+msgstr " (gunakan opsi -u untuk melihat berkas yang tak terlacak)"
+
+#: wt-status.c:1807
+msgid "No changes"
+msgstr "Tidak ada perubahan"
+
+#: wt-status.c:1812
+#, c-format
+msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
+msgstr ""
+"tidak ada perubahan untuk dikomit (gunakan \"git add\" dan/atau \"git commit "
+"-a\")\n"
+
+#: wt-status.c:1816
+#, c-format
+msgid "no changes added to commit\n"
+msgstr "tidak ada perubahan untuk dikomit\n"
+
+#: wt-status.c:1820
+#, c-format
+msgid ""
+"nothing added to commit but untracked files present (use \"git add\" to "
+"track)\n"
+msgstr ""
+"tidak ada perubahan untuk dikomit tapi berkas yang tak terlacak ada(gunakan "
+"\"git add\" untuk lacak)\n"
+
+#: wt-status.c:1824
+#, c-format
+msgid "nothing added to commit but untracked files present\n"
+msgstr "tidak ada perubahan untuk dikomit tapi berkas yang tak terlacak ada\n"
+
+#: wt-status.c:1828
+#, c-format
+msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
+msgstr ""
+"tidak ada yang dikomit (buat/salin berkas dan gunakan \"git add\" untuk "
+"lacak)\n"
+
+#: wt-status.c:1832 wt-status.c:1838
+#, c-format
+msgid "nothing to commit\n"
+msgstr "tidak ada yang dikomit\n"
+
+#: wt-status.c:1835
+#, c-format
+msgid "nothing to commit (use -u to show untracked files)\n"
+msgstr "tidak ada yang dikomit (gunakan -u untuk lihat berkas tak terlacak)\n"
+
+#: wt-status.c:1840
+#, c-format
+msgid "nothing to commit, working tree clean\n"
+msgstr "tidak ada yang dikomit, pohon kerja bersih\n"
+
+#: wt-status.c:1945
+msgid "No commits yet on "
+msgstr "Tidak ada komit apapun pada "
+
+#: wt-status.c:1949
+msgid "HEAD (no branch)"
+msgstr "HEAD (tanpa cabang)"
+
+#: wt-status.c:1980
+msgid "different"
+msgstr "berbeda"
+
+#: wt-status.c:1982 wt-status.c:1990
+msgid "behind "
+msgstr "di belakang "
+
+#: wt-status.c:1985 wt-status.c:1988
+msgid "ahead "
+msgstr "di depan "
+
+#. TRANSLATORS: the action is e.g. "pull with rebase"
+#: wt-status.c:2511
+#, c-format
+msgid "cannot %s: You have unstaged changes."
+msgstr "tidak dapat %s: Anda punya perubahan yang tidak digelar."
+
+#: wt-status.c:2517
+msgid "additionally, your index contains uncommitted changes."
+msgstr "juga indeks Anda berisi perubahan yang belum dikomit."
+
+#: wt-status.c:2519
+#, c-format
+msgid "cannot %s: Your index contains uncommitted changes."
+msgstr "tidak dapat %s: indeks Anda berisi perubahan yang belum dikomit."
+
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr ""
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr ""
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr ""
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr ""
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr ""
+
+#: builtin/add.c:26
+msgid "git add [<options>] [--] <pathspec>..."
+msgstr "git add [<opsi>] [--] <pathspec>..."
+
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "tidak dapat chmod %cx '%s'"
+
+#: builtin/add.c:99
+#, c-format
+msgid "unexpected diff status %c"
+msgstr "status diff tak diharapkan %c"
+
+#: builtin/add.c:104 builtin/commit.c:297
+msgid "updating files failed"
+msgstr "gagal memperbarui berkas"
+
+#: builtin/add.c:114
+#, c-format
+msgid "remove '%s'\n"
+msgstr "hapus '%s'\n"
+
+#: builtin/add.c:198
+msgid "Unstaged changes after refreshing the index:"
+msgstr "Perubahan tak tergelar setelah menyegarkan indeks:"
+
+#: builtin/add.c:307 builtin/rev-parse.c:991
+msgid "Could not read the index"
+msgstr "Tidak dapat membaca indeks"
+
+#: builtin/add.c:318
+#, c-format
+msgid "Could not open '%s' for writing."
+msgstr "Tidak dapat membuka '%s' untuk ditulis."
+
+#: builtin/add.c:322
+msgid "Could not write patch"
+msgstr "Tidak dapat menulis tambalan"
+
+#: builtin/add.c:325
+msgid "editing patch failed"
+msgstr "Gagal menyunting tambalan"
+
+#: builtin/add.c:328
+#, c-format
+msgid "Could not stat '%s'"
+msgstr "Tidak dapat men-stat '%s'"
+
+#: builtin/add.c:330
+msgid "Empty patch. Aborted."
+msgstr "Tambalan kosong. Dibatalkan."
+
+#: builtin/add.c:335
+#, c-format
+msgid "Could not apply '%s'"
+msgstr "Tidak dapat terapkan '%s'"
+
+#: builtin/add.c:343
+msgid "The following paths are ignored by one of your .gitignore files:\n"
+msgstr "Jalur berikut diabaikan oleh salah satu dari berkas .gitignore Anda:\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
+msgid "dry run"
+msgstr "latihan"
+
+#: builtin/add.c:366
+msgid "interactive picking"
+msgstr "pengambilan interaktif"
+
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
+msgid "select hunks interactively"
+msgstr "pilih bingkah secara interaktif"
+
+#: builtin/add.c:368
+msgid "edit current diff and apply"
+msgstr "sunting diff saat ini dan terapkan"
+
+#: builtin/add.c:369
+msgid "allow adding otherwise ignored files"
+msgstr "perbolehkan tambah berkas yang diabaikan"
+
+#: builtin/add.c:370
+msgid "update tracked files"
+msgstr "perbarui berkas terlacak"
+
+#: builtin/add.c:371
+msgid "renormalize EOL of tracked files (implies -u)"
+msgstr "normalisasi ulang EOL berkas terlacak (menyiratkan -u)"
+
+#: builtin/add.c:372
+msgid "record only the fact that the path will be added later"
+msgstr "rekam hanya fakta bahwa jalur akan ditambahkan nanti"
+
+#: builtin/add.c:373
+msgid "add changes from all tracked and untracked files"
+msgstr "tambahkan perubahan dari semua berkas terlacak dan tak terlacak"
+
+#: builtin/add.c:376
+msgid "ignore paths removed in the working tree (same as --no-all)"
+msgstr "abaikan jalur yang terhapus dari pohon kerja (sama dengan --no-all)"
+
+#: builtin/add.c:378
+msgid "don't add, only refresh the index"
+msgstr "jangan tambahkan, hanya segarkan indeks"
+
+#: builtin/add.c:379
+msgid "just skip files which cannot be added because of errors"
+msgstr "hanya lewatkan berkas yang tidak dapat ditambah karena error"
+
+#: builtin/add.c:380
+msgid "check if - even missing - files are ignored in dry run"
+msgstr "periksa bahwa berkas yang - bahkan hilang - diabaikan dalam latihan"
+
+#: builtin/add.c:382 builtin/update-index.c:1006
+msgid "override the executable bit of the listed files"
+msgstr "timpa bit yang dapat dieksekusi dari berkas terdaftar"
+
+#: builtin/add.c:384
+msgid "warn when adding an embedded repository"
+msgstr "peringatkan ketika menambahkan repositori tertanam"
+
+#: builtin/add.c:386
+msgid "backend for `git stash -p`"
+msgstr "tulang belakang untuk `git stash -p`"
+
+#: builtin/add.c:404
+#, c-format
+msgid ""
+"You've added another git repository inside your current repository.\n"
+"Clones of the outer repository will not contain the contents of\n"
+"the embedded repository and will not know how to obtain it.\n"
+"If you meant to add a submodule, use:\n"
+"\n"
+"\tgit submodule add <url> %s\n"
+"\n"
+"If you added this path by mistake, you can remove it from the\n"
+"index with:\n"
+"\n"
+"\tgit rm --cached %s\n"
+"\n"
+"See \"git help submodule\" for more information."
+msgstr ""
+"Anda telah menambahkan repositori git yang lain di dalam repositori Anda\n"
+"saat ini. Kloningan repositori luar tidak akan berisi isi repositori\n"
+"tertanam dan tidak akan tahu bagaimana cara mendapatkannya.\n"
+"Jika maksud anda menambahkan submodul, gunakan:\n"
+"\n"
+"\tgit submodule add <url> %s\n"
+"\n"
+"Jika Anda menambahkan jalur itu sebagai kesengajaan, Anda dapat menghapus\n"
+"itu dari indeks dengan:\n"
+"\n"
+"\tgit rm --cached %s\n"
+"\n"
+"Lihat \"git help submodule\" untuk selengkapnya."
+
+#: builtin/add.c:432
+#, c-format
+msgid "adding embedded git repository: %s"
+msgstr "menambahkan repositori git tertanam: %s"
+
+#: builtin/add.c:451
+msgid ""
+"Use -f if you really want to add them.\n"
+"Turn this message off by running\n"
+"\"git config advice.addIgnoredFile false\""
+msgstr ""
+"Gunakan -f jika Anda benar-benar ingin tambahkan itu.\n"
+"Matikan pesan ini dengan menjalankan\n"
+"\"git config advice.addIgnoredFile false\""
+
+#: builtin/add.c:460
+msgid "adding files failed"
+msgstr "gagal menambahkan berkas"
+
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run tidak kompatibel dengan --interactive/--patch"
+
+#: builtin/add.c:490 builtin/commit.c:357
+msgid "--pathspec-from-file is incompatible with --interactive/--patch"
+msgstr "--pathspec-from-file tidak kompatibel dengan --interactive/--patch"
+
+#: builtin/add.c:507
+msgid "--pathspec-from-file is incompatible with --edit"
+msgstr "--pathspec-from-file tidak kompatibel dengan --edit"
+
+#: builtin/add.c:519
+msgid "-A and -u are mutually incompatible"
+msgstr "-A dan -u saling tak kompatibel"
+
+#: builtin/add.c:522
+msgid "Option --ignore-missing can only be used together with --dry-run"
+msgstr "Opsi --ignore-missing hanya dapat digunakan bersama dengan --dry-run"
+
+#: builtin/add.c:526
+#, c-format
+msgid "--chmod param '%s' must be either -x or +x"
+msgstr "--chmod param '%s' harus berupa -x atau +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
+msgid "--pathspec-from-file is incompatible with pathspec arguments"
+msgstr "--pathspec-from-file tidak kompatibel dengan argumen 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
+msgid "--pathspec-file-nul requires --pathspec-from-file"
+msgstr "--pathspec-file-nul butuh --pathspec-from-file"
+
+#: builtin/add.c:555
+#, c-format
+msgid "Nothing specified, nothing added.\n"
+msgstr "Tidak ada yang disebutkan, tidak ada yang ditambahkan.\n"
+
+#: builtin/add.c:557
+msgid ""
+"Maybe you wanted to say 'git add .'?\n"
+"Turn this message off by running\n"
+"\"git config advice.addEmptyPathspec false\""
+msgstr ""
+"Mungkin Anda ingin bilang 'git add .'?\n"
+"Matikan pesan ini dengan menjalankan\n"
+"\"git config advice.addEmptyPathspec false\""
+
+#: builtin/am.c:364
+msgid "could not parse author script"
+msgstr ""
+
+#: builtin/am.c:454
+#, c-format
+msgid "'%s' was deleted by the applypatch-msg hook"
+msgstr ""
+
+#: builtin/am.c:496
+#, c-format
+msgid "Malformed input line: '%s'."
+msgstr ""
+
+#: builtin/am.c:534
+#, c-format
+msgid "Failed to copy notes from '%s' to '%s'"
+msgstr ""
+
+#: builtin/am.c:560
+msgid "fseek failed"
+msgstr ""
+
+#: builtin/am.c:748
+#, c-format
+msgid "could not parse patch '%s'"
+msgstr ""
+
+#: builtin/am.c:813
+msgid "Only one StGIT patch series can be applied at once"
+msgstr ""
+
+#: builtin/am.c:861
+msgid "invalid timestamp"
+msgstr ""
+
+#: builtin/am.c:866 builtin/am.c:878
+msgid "invalid Date line"
+msgstr ""
+
+#: builtin/am.c:873
+msgid "invalid timezone offset"
+msgstr ""
+
+#: builtin/am.c:966
+msgid "Patch format detection failed."
+msgstr ""
+
+#: builtin/am.c:971 builtin/clone.c:414
+#, c-format
+msgid "failed to create directory '%s'"
+msgstr ""
+
+#: builtin/am.c:976
+msgid "Failed to split patches."
+msgstr ""
+
+#: builtin/am.c:1125
+#, c-format
+msgid "When you have resolved this problem, run \"%s --continue\"."
+msgstr ""
+
+#: builtin/am.c:1126
+#, c-format
+msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
+msgstr ""
+
+#: builtin/am.c:1127
+#, c-format
+msgid "To restore the original branch and stop patching, run \"%s --abort\"."
+msgstr ""
+
+#: builtin/am.c:1222
+msgid "Patch sent with format=flowed; space at the end of lines might be lost."
+msgstr ""
+
+#: builtin/am.c:1250
+msgid "Patch is empty."
+msgstr ""
+
+#: builtin/am.c:1315
+#, c-format
+msgid "missing author line in commit %s"
+msgstr ""
+
+#: builtin/am.c:1318
+#, c-format
+msgid "invalid ident line: %.*s"
+msgstr ""
+
+#: builtin/am.c:1537
+msgid "Repository lacks necessary blobs to fall back on 3-way merge."
+msgstr ""
+
+#: builtin/am.c:1539
+msgid "Using index info to reconstruct a base tree..."
+msgstr ""
+
+#: builtin/am.c:1558
+msgid ""
+"Did you hand edit your patch?\n"
+"It does not apply to blobs recorded in its index."
+msgstr ""
+
+#: builtin/am.c:1564
+msgid "Falling back to patching base and 3-way merge..."
+msgstr ""
+
+#: builtin/am.c:1590
+msgid "Failed to merge in the changes."
+msgstr ""
+
+#: builtin/am.c:1622
+msgid "applying to an empty history"
+msgstr ""
+
+#: builtin/am.c:1674 builtin/am.c:1678
+#, c-format
+msgid "cannot resume: %s does not exist."
+msgstr ""
+
+#: builtin/am.c:1696
+msgid "Commit Body is:"
+msgstr ""
+
+#. 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
+#, c-format
+msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
+msgstr ""
+
+#: builtin/am.c:1752 builtin/commit.c:408
+msgid "unable to write index file"
+msgstr ""
+
+#: builtin/am.c:1756
+#, c-format
+msgid "Dirty index: cannot apply patches (dirty: %s)"
+msgstr ""
+
+#: builtin/am.c:1796 builtin/am.c:1864
+#, c-format
+msgid "Applying: %.*s"
+msgstr ""
+
+#: builtin/am.c:1813
+msgid "No changes -- Patch already applied."
+msgstr ""
+
+#: builtin/am.c:1819
+#, c-format
+msgid "Patch failed at %s %.*s"
+msgstr ""
+
+#: builtin/am.c:1823
+msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
+msgstr ""
+
+#: builtin/am.c:1867
+msgid ""
+"No changes - did you forget to use 'git add'?\n"
+"If there is nothing left to stage, chances are that something else\n"
+"already introduced the same changes; you might want to skip this patch."
+msgstr ""
+
+#: builtin/am.c:1874
+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 might run `git rm` on a file to accept \"deleted by them\" for it."
+msgstr ""
+
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
+#: builtin/reset.c:355
+#, c-format
+msgid "Could not parse object '%s'."
+msgstr "Tidak dapat mengurai objek '%s'."
+
+#: builtin/am.c:2033
+msgid "failed to clean index"
+msgstr ""
+
+#: builtin/am.c:2077
+msgid ""
+"You seem to have moved HEAD since the last 'am' failure.\n"
+"Not rewinding to ORIG_HEAD"
+msgstr ""
+
+#: builtin/am.c:2184
+#, c-format
+msgid "Invalid value for --patch-format: %s"
+msgstr ""
+
+#: builtin/am.c:2226
+#, c-format
+msgid "Invalid value for --show-current-patch: %s"
+msgstr ""
+
+#: builtin/am.c:2230
+#, c-format
+msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
+msgstr ""
+
+#: builtin/am.c:2261
+msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
+msgstr ""
+
+#: builtin/am.c:2262
+msgid "git am [<options>] (--continue | --skip | --abort)"
+msgstr ""
+
+#: builtin/am.c:2268
+msgid "run interactively"
+msgstr ""
+
+#: builtin/am.c:2270
+msgid "historical option -- no-op"
+msgstr ""
+
+#: builtin/am.c:2272
+msgid "allow fall back on 3way merging if needed"
+msgstr ""
+
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
+msgid "be quiet"
+msgstr ""
+
+#: builtin/am.c:2275
+msgid "add a Signed-off-by trailer to the commit message"
+msgstr ""
+
+#: builtin/am.c:2278
+msgid "recode into utf8 (default)"
+msgstr ""
+
+#: builtin/am.c:2280
+msgid "pass -k flag to git-mailinfo"
+msgstr ""
+
+#: builtin/am.c:2282
+msgid "pass -b flag to git-mailinfo"
+msgstr ""
+
+#: builtin/am.c:2284
+msgid "pass -m flag to git-mailinfo"
+msgstr ""
+
+#: builtin/am.c:2286
+msgid "pass --keep-cr flag to git-mailsplit for mbox format"
+msgstr ""
+
+#: builtin/am.c:2289
+msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
+msgstr ""
+
+#: builtin/am.c:2292
+msgid "strip everything before a scissors line"
+msgstr ""
+
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr ""
+
+#: 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
+msgid "pass it through git-apply"
+msgstr ""
+
+#: 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/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
+msgid "n"
+msgstr ""
+
+#: 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/verify-tag.c:38
+msgid "format"
+msgstr ""
+
+#: builtin/am.c:2321
+msgid "format the patch(es) are in"
+msgstr ""
+
+#: builtin/am.c:2327
+msgid "override error message when patch failure occurs"
+msgstr ""
+
+#: builtin/am.c:2329
+msgid "continue applying patches after resolving a conflict"
+msgstr ""
+
+#: builtin/am.c:2332
+msgid "synonyms for --continue"
+msgstr ""
+
+#: builtin/am.c:2335
+msgid "skip the current patch"
+msgstr ""
+
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr ""
+
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr ""
+
+#: builtin/am.c:2345
+msgid "show the patch being applied"
+msgstr ""
+
+#: builtin/am.c:2350
+msgid "lie about committer date"
+msgstr ""
+
+#: builtin/am.c:2352
+msgid "use current timestamp for author date"
+msgstr ""
+
+#: 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
+msgid "key-id"
+msgstr ""
+
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
+msgid "GPG-sign commits"
+msgstr ""
+
+#: builtin/am.c:2358
+msgid "(internal use for git-rebase)"
+msgstr ""
+
+#: builtin/am.c:2376
+msgid ""
+"The -b/--binary option has been a no-op for long time, and\n"
+"it will be removed. Please do not use it anymore."
+msgstr ""
+
+#: builtin/am.c:2383
+msgid "failed to read the index"
+msgstr ""
+
+#: builtin/am.c:2398
+#, c-format
+msgid "previous rebase directory %s still exists but mbox given."
+msgstr ""
+
+#: builtin/am.c:2422
+#, c-format
+msgid ""
+"Stray %s directory found.\n"
+"Use \"git am --abort\" to remove it."
+msgstr ""
+
+#: builtin/am.c:2428
+msgid "Resolve operation not in progress, we are not resuming."
+msgstr ""
+
+#: builtin/am.c:2438
+msgid "interactive mode requires patches on the command line"
+msgstr ""
+
+#: builtin/apply.c:8
+msgid "git apply [<options>] [<patch>...]"
+msgstr ""
+
+#: builtin/archive.c:17
+#, c-format
+msgid "could not create archive file '%s'"
+msgstr ""
+
+#: builtin/archive.c:20
+msgid "could not redirect output"
+msgstr ""
+
+#: builtin/archive.c:37
+msgid "git archive: Remote with no URL"
+msgstr ""
+
+#: builtin/archive.c:61
+msgid "git archive: expected ACK/NAK, got a flush packet"
+msgstr ""
+
+#: builtin/archive.c:64
+#, c-format
+msgid "git archive: NACK %s"
+msgstr ""
+
+#: builtin/archive.c:65
+msgid "git archive: protocol error"
+msgstr ""
+
+#: builtin/archive.c:69
+msgid "git archive: expected a flush"
+msgstr ""
+
+#: builtin/bisect--helper.c:23
+msgid "git bisect--helper --bisect-reset [<commit>]"
+msgstr ""
+
+#: builtin/bisect--helper.c:24
+msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+msgstr ""
+
+#: builtin/bisect--helper.c:25
+msgid ""
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
+"term-new]"
+msgstr ""
+
+#: builtin/bisect--helper.c:26
+msgid ""
+"git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
+"=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
+"[<paths>...]"
+msgstr ""
+
+#: builtin/bisect--helper.c:28
+msgid "git bisect--helper --bisect-next"
+msgstr ""
+
+#: builtin/bisect--helper.c:29
+msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
+msgstr ""
+
+#: builtin/bisect--helper.c:30
+msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
+msgstr ""
+
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr ""
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr ""
+
+#: builtin/bisect--helper.c:107
+#, c-format
+msgid "cannot open file '%s' in mode '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:114
+#, c-format
+msgid "could not write to file '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:153
+#, c-format
+msgid "'%s' is not a valid term"
+msgstr ""
+
+#: builtin/bisect--helper.c:157
+#, c-format
+msgid "can't use the builtin command '%s' as a term"
+msgstr ""
+
+#: builtin/bisect--helper.c:167
+#, c-format
+msgid "can't change the meaning of the term '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:177
+msgid "please use two different terms"
+msgstr ""
+
+#: builtin/bisect--helper.c:193
+#, c-format
+msgid "We are not bisecting.\n"
+msgstr ""
+
+#: builtin/bisect--helper.c:201
+#, c-format
+msgid "'%s' is not a valid commit"
+msgstr ""
+
+#: builtin/bisect--helper.c:210
+#, c-format
+msgid ""
+"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
+msgstr ""
+
+#: builtin/bisect--helper.c:254
+#, c-format
+msgid "Bad bisect_write argument: %s"
+msgstr ""
+
+#: builtin/bisect--helper.c:259
+#, c-format
+msgid "couldn't get the oid of the rev '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:271
+#, c-format
+msgid "couldn't open the file '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:297
+#, c-format
+msgid "Invalid command: you're currently in a %s/%s bisect"
+msgstr ""
+
+#: builtin/bisect--helper.c:324
+#, c-format
+msgid ""
+"You need to give me at least one %s and %s revision.\n"
+"You can use \"git bisect %s\" and \"git bisect %s\" for that."
+msgstr ""
+
+#: builtin/bisect--helper.c:328
+#, c-format
+msgid ""
+"You need to start by \"git bisect start\".\n"
+"You then need to give me at least one %s and %s revision.\n"
+"You can use \"git bisect %s\" and \"git bisect %s\" for that."
+msgstr ""
+
+#: builtin/bisect--helper.c:348
+#, c-format
+msgid "bisecting only with a %s commit"
+msgstr ""
+
+#. 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
+msgid "Are you sure [Y/n]? "
+msgstr ""
+
+#: builtin/bisect--helper.c:417
+msgid "no terms defined"
+msgstr ""
+
+#: builtin/bisect--helper.c:420
+#, c-format
+msgid ""
+"Your current terms are %s for the old state\n"
+"and %s for the new state.\n"
+msgstr ""
+
+#: builtin/bisect--helper.c:430
+#, c-format
+msgid ""
+"invalid argument %s for 'git bisect terms'.\n"
+"Supported options are: --term-good|--term-old and --term-bad|--term-new."
+msgstr ""
+
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
+msgid "revision walk setup failed\n"
+msgstr ""
+
+#: builtin/bisect--helper.c:519
+#, c-format
+msgid "could not open '%s' for appending"
+msgstr ""
+
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
+msgid "'' is not a valid term"
+msgstr ""
+
+#: builtin/bisect--helper.c:661
+#, c-format
+msgid "unrecognized option: '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:665
+#, c-format
+msgid "'%s' does not appear to be a valid revision"
+msgstr ""
+
+#: builtin/bisect--helper.c:696
+msgid "bad HEAD - I need a HEAD"
+msgstr ""
+
+#: builtin/bisect--helper.c:711
+#, c-format
+msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
+msgstr ""
+
+#: builtin/bisect--helper.c:732
+msgid "won't bisect on cg-seek'ed tree"
+msgstr ""
+
+#: builtin/bisect--helper.c:735
+msgid "bad HEAD - strange symbolic ref"
+msgstr ""
+
+#: builtin/bisect--helper.c:755
+#, c-format
+msgid "invalid ref: '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:813
+msgid "You need to start by \"git bisect start\"\n"
+msgstr ""
+
+#. 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
+msgid "Do you want me to do it for you [Y/n]? "
+msgstr ""
+
+#: builtin/bisect--helper.c:842
+msgid "Please call `--bisect-state` with at least one argument"
+msgstr ""
+
+#: builtin/bisect--helper.c:855
+#, c-format
+msgid "'git bisect %s' can take only one argument."
+msgstr ""
+
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
+#, c-format
+msgid "Bad rev input: %s"
+msgstr ""
+
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr ""
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr ""
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr ""
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr ""
+
+#: builtin/bisect--helper.c:1054
+msgid "reset the bisection state"
+msgstr ""
+
+#: builtin/bisect--helper.c:1056
+msgid "check whether bad or good terms exist"
+msgstr ""
+
+#: builtin/bisect--helper.c:1058
+msgid "print out the bisect terms"
+msgstr ""
+
+#: builtin/bisect--helper.c:1060
+msgid "start the bisect session"
+msgstr ""
+
+#: builtin/bisect--helper.c:1062
+msgid "find the next bisection commit"
+msgstr ""
+
+#: builtin/bisect--helper.c:1064
+msgid "mark the state of ref (or refs)"
+msgstr ""
+
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr ""
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr ""
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr ""
+
+#: builtin/bisect--helper.c:1072
+msgid "no log for BISECT_WRITE"
+msgstr ""
+
+#: builtin/bisect--helper.c:1087
+msgid "--bisect-reset requires either no argument or a commit"
+msgstr ""
+
+#: builtin/bisect--helper.c:1092
+msgid "--bisect-next-check requires 2 or 3 arguments"
+msgstr ""
+
+#: builtin/bisect--helper.c:1098
+msgid "--bisect-terms requires 0 or 1 argument"
+msgstr ""
+
+#: builtin/bisect--helper.c:1107
+msgid "--bisect-next requires 0 arguments"
+msgstr ""
+
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr ""
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr ""
+
+#: builtin/blame.c:32
+msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
+msgstr ""
+
+#: builtin/blame.c:37
+msgid "<rev-opts> are documented in git-rev-list(1)"
+msgstr ""
+
+#: builtin/blame.c:410
+#, c-format
+msgid "expecting a color: %s"
+msgstr ""
+
+#: builtin/blame.c:417
+msgid "must end with a color"
+msgstr ""
+
+#: builtin/blame.c:728
+#, c-format
+msgid "invalid color '%s' in color.blame.repeatedLines"
+msgstr ""
+
+#: builtin/blame.c:746
+msgid "invalid value for blame.coloring"
+msgstr ""
+
+#: builtin/blame.c:845
+#, c-format
+msgid "cannot find revision %s to ignore"
+msgstr ""
+
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr ""
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:870
+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:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "paksa laporkan perkembangan"
+
+#: builtin/blame.c:872
+msgid "show output score for blame entries"
+msgstr ""
+
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
+msgstr ""
+
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
+msgstr ""
+
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
+msgstr ""
+
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:880
+msgid "suppress author name and timestamp (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:881
+msgid "show author email instead of name (Default: off)"
+msgstr ""
+
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
+msgstr ""
+
+#: builtin/blame.c:883 builtin/log.c:1820
+msgid "rev"
+msgstr ""
+
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr ""
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr ""
+
+#: builtin/blame.c:885
+msgid "color redundant metadata from previous line differently"
+msgstr ""
+
+#: builtin/blame.c:886
+msgid "color lines by age"
+msgstr ""
+
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr ""
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr ""
+
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
+msgstr ""
+
+#: builtin/blame.c:890 builtin/blame.c:891
+msgid "score"
+msgstr ""
+
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr ""
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr ""
+
+#: builtin/blame.c:892
+msgid "range"
+msgstr ""
+
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
+msgstr ""
+
+#: builtin/blame.c:945
+msgid "--progress can't be used with --incremental or porcelain formats"
+msgstr ""
+
+#. TRANSLATORS: This string is used to tell us the
+#. maximum display width for a relative timestamp in
+#. "git blame" output.  For C locale, "4 years, 11
+#. months ago", which takes 22 places, is the longest
+#. among various forms of relative timestamps, but
+#. your language may need more or fewer display
+#. columns.
+#.
+#: builtin/blame.c:996
+msgid "4 years, 11 months ago"
+msgstr ""
+
+#: builtin/blame.c:1112
+#, c-format
+msgid "file %s has only %lu line"
+msgid_plural "file %s has only %lu lines"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/blame.c:1157
+msgid "Blaming lines"
+msgstr ""
+
+#: builtin/branch.c:29
+msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
+msgstr "git branch [<opsi>] [-r | -a] [--merged] [--no-merged]"
+
+#: builtin/branch.c:30
+msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
+msgstr "git branch [<opsi>] [-l] [-f] <nama-cabang> [<titik-awal>]"
+
+#: builtin/branch.c:31
+msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
+msgstr "git branch [<opsi> [-r] (-d | -D) <nama-cabang>...]"
+
+#: builtin/branch.c:32
+msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
+msgstr "git branch [<opsi>] (-m | -M) [<cabang-lama>] <cabang-baru>"
+
+#: builtin/branch.c:33
+msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
+msgstr "git branch [<opsi>] (-c | -C) [<cabang-lama>] <cabang-baru>"
+
+#: builtin/branch.c:34
+msgid "git branch [<options>] [-r | -a] [--points-at]"
+msgstr "git branch [<opsi>] [-r | -a] [--points-at]"
+
+#: builtin/branch.c:35
+msgid "git branch [<options>] [-r | -a] [--format]"
+msgstr "git branch [<opsi>] [-r | -a] [--format]"
+
+#: builtin/branch.c:154
+#, c-format
+msgid ""
+"deleting branch '%s' that has been merged to\n"
+"         '%s', but not yet merged to HEAD."
+msgstr ""
+"menghapus cabang '%s' yang sudah digabungkan ke\n"
+"         '%s', tapi belum digabungkan ke HEAD."
+
+#: builtin/branch.c:158
+#, c-format
+msgid ""
+"not deleting branch '%s' that is not yet merged to\n"
+"         '%s', even though it is merged to HEAD."
+msgstr ""
+"tidak menghapus cabang '%s' yang belum digabungkan ke\n"
+"         '%s', walaupun tergabung ke HEAD."
+
+#: builtin/branch.c:172
+#, c-format
+msgid "Couldn't look up commit object for '%s'"
+msgstr "Tidak dapat mencari objek komit untuk '%s'"
+
+#: builtin/branch.c:176
+#, c-format
+msgid ""
+"The branch '%s' is not fully merged.\n"
+"If you are sure you want to delete it, run 'git branch -D %s'."
+msgstr ""
+"Cabang '%s' belum sepenuhnya tergabung.\n"
+"Kalau Anda yakin ingin menghapus itu, jalankan 'git branch -D %s'."
+
+#: builtin/branch.c:189
+msgid "Update of config-file failed"
+msgstr "Pembaruan berkas konfigurasi gagal"
+
+#: builtin/branch.c:223
+msgid "cannot use -a with -d"
+msgstr "tidak dapat gunakan -a dengan -d"
+
+#: builtin/branch.c:230
+msgid "Couldn't look up commit object for HEAD"
+msgstr "Tidak dapat mencari objek komit untuk HEAD"
+
+#: builtin/branch.c:244
+#, c-format
+msgid "Cannot delete branch '%s' checked out at '%s'"
+msgstr "Tidak dapat menghapus cabang '%s' yang ter-checkout pada '%s'"
+
+#: builtin/branch.c:259
+#, c-format
+msgid "remote-tracking branch '%s' not found."
+msgstr "cabang pelacak remote '%s' tidak ditemukan."
+
+#: builtin/branch.c:260
+#, c-format
+msgid "branch '%s' not found."
+msgstr "cabang '%s' tidak ditemukan."
+
+#: builtin/branch.c:291
+#, c-format
+msgid "Deleted remote-tracking branch %s (was %s).\n"
+msgstr "Cabang pelacak remote %s (yaitu %s) dihapus.\n"
+
+#: builtin/branch.c:292
+#, c-format
+msgid "Deleted branch %s (was %s).\n"
+msgstr "Cabang %s (yaitu %s) dihapus.\n"
+
+#: builtin/branch.c:440 builtin/tag.c:63
+msgid "unable to parse format string"
+msgstr "tidak dapat menguraikan untai format"
+
+#: builtin/branch.c:471
+msgid "could not resolve HEAD"
+msgstr "tidak dapat menguraikan HEAD"
+
+#: builtin/branch.c:477
+#, c-format
+msgid "HEAD (%s) points outside of refs/heads/"
+msgstr "HEAD (%s) merujuk diluar refs/heads/"
+
+#: builtin/branch.c:492
+#, c-format
+msgid "Branch %s is being rebased at %s"
+msgstr "Cabang %s sedang didasarkan ulang pada %s"
+
+#: builtin/branch.c:496
+#, c-format
+msgid "Branch %s is being bisected at %s"
+msgstr "Cabang %s sedang dibagi dua pada %s"
+
+#: builtin/branch.c:513
+msgid "cannot copy the current branch while not on any."
+msgstr "tidak dapat menyalin cabang saat ini ketika tidak ada."
+
+#: builtin/branch.c:515
+msgid "cannot rename the current branch while not on any."
+msgstr "tidak dapat mengganti nama cabang saat ini ketika tidak ada."
+
+#: builtin/branch.c:526
+#, c-format
+msgid "Invalid branch name: '%s'"
+msgstr "Nama cabang tidak valid: '%s'"
+
+#: builtin/branch.c:555
+msgid "Branch rename failed"
+msgstr "Penggantian nama cabang gagal"
+
+#: builtin/branch.c:557
+msgid "Branch copy failed"
+msgstr "Penyalinan cabang gagal"
+
+#: builtin/branch.c:561
+#, c-format
+msgid "Created a copy of a misnamed branch '%s'"
+msgstr "Salinan cabang salah nama '%s' dibuat"
+
+#: builtin/branch.c:564
+#, c-format
+msgid "Renamed a misnamed branch '%s' away"
+msgstr "Cabang salah nama '%s' berganti nama"
+
+#: builtin/branch.c:570
+#, c-format
+msgid "Branch renamed to %s, but HEAD is not updated!"
+msgstr "Cabang berganti nama ke %s, tapi HEAD tidak diperbarui!"
+
+#: builtin/branch.c:579
+msgid "Branch is renamed, but update of config-file failed"
+msgstr "Cabang berganti nama, tapi pembaruan berkas konfigurasi gagal"
+
+#: builtin/branch.c:581
+msgid "Branch is copied, but update of config-file failed"
+msgstr "Cabang disalin, tapi pembaruan berkas konfigurasi gagal"
+
+#: builtin/branch.c:597
+#, c-format
+msgid ""
+"Please edit the description for the branch\n"
+"  %s\n"
+"Lines starting with '%c' will be stripped.\n"
+msgstr ""
+"Mohon sunting deskripsi untuk cabang\n"
+"  %s\n"
+"Baris yang diawali dengan '%c' akan dicopot.\n"
+
+#: builtin/branch.c:631
+msgid "Generic options"
+msgstr "Opsi generik"
+
+#: builtin/branch.c:633
+msgid "show hash and subject, give twice for upstream branch"
+msgstr "perlihatkan hash dan subjek, berikan dua kali untuk cabang hulu"
+
+#: builtin/branch.c:634
+msgid "suppress informational messages"
+msgstr "sembunyikan pesan informasi"
+
+#: builtin/branch.c:635
+msgid "set up tracking mode (see git-pull(1))"
+msgstr "pasang mode pelacakan (lihat git-pull(1))"
+
+#: builtin/branch.c:637
+msgid "do not use"
+msgstr "jangan gunakan"
+
+#: builtin/branch.c:639 builtin/rebase.c:533
+msgid "upstream"
+msgstr "hulu"
+
+#: builtin/branch.c:639
+msgid "change the upstream info"
+msgstr "ubah info hulu"
+
+#: builtin/branch.c:640
+msgid "unset the upstream info"
+msgstr "batal-setel info hulu"
+
+#: builtin/branch.c:641
+msgid "use colored output"
+msgstr "gunakan keluaran berwarna"
+
+#: builtin/branch.c:642
+msgid "act on remote-tracking branches"
+msgstr "lakukan pada cabang pelacak remote"
+
+#: builtin/branch.c:644 builtin/branch.c:646
+msgid "print only branches that contain the commit"
+msgstr "cetak hanya cabang yang berisi komit"
+
+#: builtin/branch.c:645 builtin/branch.c:647
+msgid "print only branches that don't contain the commit"
+msgstr "cetak hanya cabang yang tak berisi komit"
+
+#: builtin/branch.c:650
+msgid "Specific git-branch actions:"
+msgstr "Aksi git-branch spesifik:"
+
+#: builtin/branch.c:651
+msgid "list both remote-tracking and local branches"
+msgstr "sebut baik cabang pelacak remote dan cabang lokal"
+
+#: builtin/branch.c:653
+msgid "delete fully merged branch"
+msgstr "hapus cabang yang tergabung sepenuhnya"
+
+#: builtin/branch.c:654
+msgid "delete branch (even if not merged)"
+msgstr "hapus cabang (walaupun tak tergabung)"
+
+#: builtin/branch.c:655
+msgid "move/rename a branch and its reflog"
+msgstr "pindah/ganti nama cabang dan reflog-nya"
+
+#: builtin/branch.c:656
+msgid "move/rename a branch, even if target exists"
+msgstr "pindah/ganti nama cabang, walaupun target ada"
+
+#: builtin/branch.c:657
+msgid "copy a branch and its reflog"
+msgstr "salin cabang dan reflog-nya"
+
+#: builtin/branch.c:658
+msgid "copy a branch, even if target exists"
+msgstr "salin cabang, walapun target ada"
+
+#: builtin/branch.c:659
+msgid "list branch names"
+msgstr "sebut nama cabang"
+
+#: builtin/branch.c:660
+msgid "show current branch name"
+msgstr "perlihatkan nama cabang saat ini"
+
+#: builtin/branch.c:661
+msgid "create the branch's reflog"
+msgstr "buat reflog cabang"
+
+#: builtin/branch.c:663
+msgid "edit the description for the branch"
+msgstr "sunting deskripsi cabang"
+
+#: builtin/branch.c:664
+msgid "force creation, move/rename, deletion"
+msgstr "paksa buat, pindah/ganti nama, hapus"
+
+#: builtin/branch.c:665
+msgid "print only branches that are merged"
+msgstr "cetak hanya cabang yang tergabung"
+
+#: builtin/branch.c:666
+msgid "print only branches that are not merged"
+msgstr "cetak hanya cabang yang tak tergabung"
+
+#: builtin/branch.c:667
+msgid "list branches in columns"
+msgstr "sebut cabang dalam kolom"
+
+#: 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
+msgid "object"
+msgstr "objek"
+
+#: builtin/branch.c:670
+msgid "print only branches of the object"
+msgstr "cetak hanya cabang objek"
+
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
+msgid "sorting and filtering are case insensitive"
+msgstr "pengurutan dan penyaringan tak peka kapital"
+
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
+#: builtin/verify-tag.c:38
+msgid "format to use for the output"
+msgstr "format yang digunakan untuk keluaran"
+
+#: builtin/branch.c:695 builtin/clone.c:794
+msgid "HEAD not found below refs/heads!"
+msgstr "HEAD tidak ditemukan di bawah refs/heads!"
+
+#: builtin/branch.c:719
+msgid "--column and --verbose are incompatible"
+msgstr "--column dan --verbose tidak kompatibel"
+
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
+msgid "branch name required"
+msgstr "nama cabang diperlukan"
+
+#: builtin/branch.c:766
+msgid "Cannot give description to detached HEAD"
+msgstr "Tidak dapat memberikan deskripsi ke HEAD terpisah"
+
+#: builtin/branch.c:771
+msgid "cannot edit description of more than one branch"
+msgstr "tidak dapat menyunting deskripsi lebih dari satu cabang"
+
+#: builtin/branch.c:778
+#, c-format
+msgid "No commit on branch '%s' yet."
+msgstr "Belum ada komit pada cabang '%s'."
+
+#: builtin/branch.c:781
+#, c-format
+msgid "No branch named '%s'."
+msgstr "Tidak ada cabang bernama '%s'."
+
+#: builtin/branch.c:796
+msgid "too many branches for a copy operation"
+msgstr "terlalu banyak cabang untuk operasi penyalinan"
+
+#: builtin/branch.c:805
+msgid "too many arguments for a rename operation"
+msgstr "terlalu banyak argumen untuk operasi penggantian nama"
+
+#: builtin/branch.c:810
+msgid "too many arguments to set new upstream"
+msgstr "terlalu banyak argumen untuk menyetel hulu baru"
+
+#: builtin/branch.c:814
+#, c-format
+msgid ""
+"could not set upstream of HEAD to %s when it does not point to any branch."
+msgstr ""
+"tidak dapat menyetel hulu HEAD ke %s ketika itu tak menunjuk pada cabang "
+"apapun."
+
+#: builtin/branch.c:817 builtin/branch.c:840
+#, c-format
+msgid "no such branch '%s'"
+msgstr "tidak ada cabang '%s'"
+
+#: builtin/branch.c:821
+#, c-format
+msgid "branch '%s' does not exist"
+msgstr "cabang '%s' tidak ada"
+
+#: builtin/branch.c:834
+msgid "too many arguments to unset upstream"
+msgstr "terlalu banyak argumen untuk batal-setel hulu"
+
+#: builtin/branch.c:838
+msgid "could not unset upstream of HEAD when it does not point to any branch."
+msgstr ""
+"tidak dapat membatal-setel hulu HEAD ketika itu tak menunjuk pada cabang "
+"apapun."
+
+#: builtin/branch.c:844
+#, c-format
+msgid "Branch '%s' has no upstream information"
+msgstr "Cabang '%s' tidak ada informasi hulu"
+
+#: builtin/branch.c:854
+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 ""
+"Opsi -a dan -r tidak mengambil nama cabang.\n"
+"Mungkin maksud Anda gunakan: -a|-r --list <pola>?"
+
+#: builtin/branch.c:858
+msgid ""
+"the '--set-upstream' option is no longer supported. Please use '--track' or "
+"'--set-upstream-to' instead."
+msgstr ""
+"opsi '--set-upstream' tidak lagi didukung. Mohon gunakan '--track' atau '--"
+"set-upstream-to' sebagai gantinya."
+
+#: builtin/bugreport.c:15
+msgid "git version:\n"
+msgstr ""
+
+#: builtin/bugreport.c:21
+#, c-format
+msgid "uname() failed with error '%s' (%d)\n"
+msgstr ""
+
+#: builtin/bugreport.c:31
+msgid "compiler info: "
+msgstr ""
+
+#: builtin/bugreport.c:34
+msgid "libc info: "
+msgstr ""
+
+#: builtin/bugreport.c:80
+msgid "not run from a git repository - no hooks to show\n"
+msgstr ""
+
+#: builtin/bugreport.c:90
+msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
+msgstr ""
+
+#: builtin/bugreport.c:97
+msgid ""
+"Thank you for filling out a Git bug report!\n"
+"Please answer the following questions to help us understand your issue.\n"
+"\n"
+"What did you do before the bug happened? (Steps to reproduce your issue)\n"
+"\n"
+"What did you expect to happen? (Expected behavior)\n"
+"\n"
+"What happened instead? (Actual behavior)\n"
+"\n"
+"What's different between what you expected and what actually happened?\n"
+"\n"
+"Anything else you want to add:\n"
+"\n"
+"Please review the rest of the bug report below.\n"
+"You can delete any lines you don't wish to share.\n"
+msgstr ""
+
+#: builtin/bugreport.c:136
+msgid "specify a destination for the bugreport file"
+msgstr ""
+
+#: builtin/bugreport.c:138
+msgid "specify a strftime format suffix for the filename"
+msgstr ""
+
+#: builtin/bugreport.c:160
+#, c-format
+msgid "could not create leading directories for '%s'"
+msgstr ""
+
+#: builtin/bugreport.c:167
+msgid "System Info"
+msgstr ""
+
+#: builtin/bugreport.c:170
+msgid "Enabled Hooks"
+msgstr ""
+
+#: builtin/bugreport.c:177
+#, c-format
+msgid "couldn't create a new file at '%s'"
+msgstr ""
+
+#: builtin/bugreport.c:180
+#, c-format
+msgid "unable to write to %s"
+msgstr ""
+
+#: builtin/bugreport.c:190
+#, c-format
+msgid "Created new report at '%s'.\n"
+msgstr ""
+
+#: builtin/bundle.c:15 builtin/bundle.c:23
+msgid "git bundle create [<options>] <file> <git-rev-list args>"
+msgstr ""
+
+#: builtin/bundle.c:16 builtin/bundle.c:28
+msgid "git bundle verify [<options>] <file>"
+msgstr ""
+
+#: builtin/bundle.c:17 builtin/bundle.c:33
+msgid "git bundle list-heads <file> [<refname>...]"
+msgstr ""
+
+#: builtin/bundle.c:18 builtin/bundle.c:38
+msgid "git bundle unbundle <file> [<refname>...]"
+msgstr ""
+
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
+msgid "do not show progress meter"
+msgstr ""
+
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
+msgid "show progress meter"
+msgstr ""
+
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
+msgid "show progress meter during object writing phase"
+msgstr ""
+
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
+msgid "similar to --all-progress when progress meter is shown"
+msgstr ""
+
+#: builtin/bundle.c:76
+msgid "specify bundle format version"
+msgstr ""
+
+#: builtin/bundle.c:96
+msgid "Need a repository to create a bundle."
+msgstr ""
+
+#: builtin/bundle.c:107
+msgid "do not show bundle details"
+msgstr ""
+
+#: builtin/bundle.c:122
+#, c-format
+msgid "%s is okay\n"
+msgstr ""
+
+#: builtin/bundle.c:163
+msgid "Need a repository to unbundle."
+msgstr ""
+
+#: builtin/bundle.c:171 builtin/remote.c:1700
+msgid "be verbose; must be placed before a subcommand"
+msgstr ""
+
+#: builtin/bundle.c:193 builtin/remote.c:1731
+#, c-format
+msgid "Unknown subcommand: %s"
+msgstr ""
+
+#: builtin/cat-file.c:598
+msgid ""
+"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
+"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+msgstr ""
+
+#: builtin/cat-file.c:599
+msgid ""
+"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
+"symlinks] [--textconv | --filters]"
+msgstr ""
+
+#: builtin/cat-file.c:620
+msgid "only one batch option may be specified"
+msgstr ""
+
+#: builtin/cat-file.c:638
+msgid "<type> can be one of: blob, tree, commit, tag"
+msgstr ""
+
+#: builtin/cat-file.c:639
+msgid "show object type"
+msgstr ""
+
+#: builtin/cat-file.c:640
+msgid "show object size"
+msgstr ""
+
+#: builtin/cat-file.c:642
+msgid "exit with zero when there's no error"
+msgstr ""
+
+#: builtin/cat-file.c:643
+msgid "pretty-print object's content"
+msgstr ""
+
+#: builtin/cat-file.c:645
+msgid "for blob objects, run textconv on object's content"
+msgstr ""
+
+#: builtin/cat-file.c:647
+msgid "for blob objects, run filters on object's content"
+msgstr ""
+
+#: builtin/cat-file.c:648
+msgid "blob"
+msgstr ""
+
+#: builtin/cat-file.c:649
+msgid "use a specific path for --textconv/--filters"
+msgstr ""
+
+#: builtin/cat-file.c:651
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr ""
+
+#: builtin/cat-file.c:652
+msgid "buffer --batch output"
+msgstr ""
+
+#: builtin/cat-file.c:654
+msgid "show info and content of objects fed from the standard input"
+msgstr ""
+
+#: builtin/cat-file.c:658
+msgid "show info about objects fed from the standard input"
+msgstr ""
+
+#: builtin/cat-file.c:662
+msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+msgstr ""
+
+#: builtin/cat-file.c:664
+msgid "show all objects with --batch or --batch-check"
+msgstr ""
+
+#: builtin/cat-file.c:666
+msgid "do not order --batch-all-objects output"
+msgstr ""
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr ""
+
+#: builtin/check-attr.c:14
+msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+msgstr ""
+
+#: builtin/check-attr.c:21
+msgid "report all attributes set on file"
+msgstr ""
+
+#: builtin/check-attr.c:22
+msgid "use .gitattributes only from the index"
+msgstr ""
+
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
+msgid "read file names from stdin"
+msgstr ""
+
+#: builtin/check-attr.c:25 builtin/check-ignore.c:27
+msgid "terminate input and output records by a NUL character"
+msgstr ""
+
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
+msgid "suppress progress reporting"
+msgstr ""
+
+#: builtin/check-ignore.c:29
+msgid "show non-matching input paths"
+msgstr ""
+
+#: builtin/check-ignore.c:31
+msgid "ignore index when checking"
+msgstr ""
+
+#: builtin/check-ignore.c:165
+msgid "cannot specify pathnames with --stdin"
+msgstr ""
+
+#: builtin/check-ignore.c:168
+msgid "-z only makes sense with --stdin"
+msgstr ""
+
+#: builtin/check-ignore.c:170
+msgid "no path specified"
+msgstr ""
+
+#: builtin/check-ignore.c:174
+msgid "--quiet is only valid with a single pathname"
+msgstr ""
+
+#: builtin/check-ignore.c:176
+msgid "cannot have both --quiet and --verbose"
+msgstr ""
+
+#: builtin/check-ignore.c:179
+msgid "--non-matching is only valid with --verbose"
+msgstr ""
+
+#: builtin/check-mailmap.c:9
+msgid "git check-mailmap [<options>] <contact>..."
+msgstr ""
+
+#: builtin/check-mailmap.c:14
+msgid "also read contacts from stdin"
+msgstr ""
+
+#: builtin/check-mailmap.c:25
+#, c-format
+msgid "unable to parse contact: %s"
+msgstr ""
+
+#: builtin/check-mailmap.c:48
+msgid "no contacts specified"
+msgstr ""
+
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr ""
+
+#: 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
+msgid "string"
+msgstr ""
+
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+msgid "when creating files, prepend <string>"
+msgstr ""
+
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr ""
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr ""
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr ""
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr ""
+
+#: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr ""
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr ""
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr ""
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr ""
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr ""
+
+#: builtin/checkout-index.c:204
+msgid "copy out the files from named stage"
+msgstr ""
+
+#: builtin/checkout.c:33
+msgid "git checkout [<options>] <branch>"
+msgstr "git checkout [<opsi>] <cabang>"
+
+#: builtin/checkout.c:34
+msgid "git checkout [<options>] [<branch>] -- <file>..."
+msgstr "git checkout [<opsi>] [<cabang>] -- <berkas>..."
+
+#: builtin/checkout.c:39
+msgid "git switch [<options>] [<branch>]"
+msgstr "git switch [<opsi>] [<cabang>]"
+
+#: builtin/checkout.c:44
+msgid "git restore [<options>] [--source=<branch>] <file>..."
+msgstr "git restore [<opsi>] [--source=<cabang>] <berkas>..."
+
+#: builtin/checkout.c:190 builtin/checkout.c:229
+#, c-format
+msgid "path '%s' does not have our version"
+msgstr "jalur '%s' tidak punya versi kami"
+
+#: builtin/checkout.c:192 builtin/checkout.c:231
+#, c-format
+msgid "path '%s' does not have their version"
+msgstr "jalur '%s' tidak punya versi mereka"
+
+#: builtin/checkout.c:208
+#, c-format
+msgid "path '%s' does not have all necessary versions"
+msgstr "jalur '%s' tidak punya semua versi yang diperlukan"
+
+#: builtin/checkout.c:261
+#, c-format
+msgid "path '%s' does not have necessary versions"
+msgstr "jalur '%s' tidak punya versi yang diperlukan"
+
+#: builtin/checkout.c:278
+#, c-format
+msgid "path '%s': cannot merge"
+msgstr "jalur '%s': tidak dapat gabung"
+
+#: builtin/checkout.c:294
+#, c-format
+msgid "Unable to add merge result for '%s'"
+msgstr "Tidak dapat menambahkan hasil penggabungan untuk '%s'"
+
+#: builtin/checkout.c:414
+#, c-format
+msgid "Recreated %d merge conflict"
+msgid_plural "Recreated %d merge conflicts"
+msgstr[0] "Konflik penggabungan %d dibuat ulang"
+msgstr[1] "Konflik penggabungan %d dibuat ulang"
+
+#: builtin/checkout.c:419
+#, c-format
+msgid "Updated %d path from %s"
+msgid_plural "Updated %d paths from %s"
+msgstr[0] "%d jalur diperbarui dari %s"
+msgstr[1] "%d jalur diperbarui dari %s"
+
+#: builtin/checkout.c:426
+#, c-format
+msgid "Updated %d path from the index"
+msgid_plural "Updated %d paths from the index"
+msgstr[0] "%d jalur diperbarui dari indeks"
+msgstr[1] "%d jalur diperbarui dari indeks"
+
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
+#, c-format
+msgid "'%s' cannot be used with updating paths"
+msgstr "'%s' tidak dapat digunakan untuk memperbarui jalur"
+
+#: builtin/checkout.c:462 builtin/checkout.c:465
+#, c-format
+msgid "'%s' cannot be used with %s"
+msgstr "'%s' tidak dapat digunakan untuk %s"
+
+#: builtin/checkout.c:469
+#, c-format
+msgid "Cannot update paths and switch to branch '%s' at the same time."
+msgstr ""
+"Tidak dapat memperbarui jalur dan mengganti ke cabang '%s' dalam waktu yang "
+"bersamaan."
+
+#: builtin/checkout.c:473
+#, c-format
+msgid "neither '%s' or '%s' is specified"
+msgstr "baik '%s' atau '%s' tidak disebutkan"
+
+#: builtin/checkout.c:477
+#, c-format
+msgid "'%s' must be used when '%s' is not specified"
+msgstr "'%s' harus disebutkan ketika '%s' tidak disebutkan"
+
+#: builtin/checkout.c:482 builtin/checkout.c:487
+#, c-format
+msgid "'%s' or '%s' cannot be used with %s"
+msgstr "'%s' atau '%s' tidak dapat digunakan untuk %s"
+
+#: builtin/checkout.c:563 builtin/checkout.c:570
+#, c-format
+msgid "path '%s' is unmerged"
+msgstr "jalur '%s' tak tergabung"
+
+#: builtin/checkout.c:739
+msgid "you need to resolve your current index first"
+msgstr "Anda perlu selesaikan dulu indeks Anda saat ini"
+
+#: builtin/checkout.c:793
+#, c-format
+msgid ""
+"cannot continue with staged changes in the following files:\n"
+"%s"
+msgstr ""
+"tidak dapat melanjutkan dengan perubahan yang tergelar dalam berkas "
+"berikut:\n"
+"%s"
+
+#: builtin/checkout.c:886
+#, c-format
+msgid "Can not do reflog for '%s': %s\n"
+msgstr "Tidak dapat melakukan reflog untuk '%s': %s\n"
+
+#: builtin/checkout.c:928
+msgid "HEAD is now at"
+msgstr "HEAD sekarang berada di"
+
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
+msgid "unable to update HEAD"
+msgstr "tidak dapat memperbarui HEAD"
+
+#: builtin/checkout.c:936
+#, c-format
+msgid "Reset branch '%s'\n"
+msgstr "Ganti ulang cabang '%s'\n"
+
+#: builtin/checkout.c:939
+#, c-format
+msgid "Already on '%s'\n"
+msgstr "Sudah berada pada '%s'\n"
+
+#: builtin/checkout.c:943
+#, c-format
+msgid "Switched to and reset branch '%s'\n"
+msgstr "Ganti ke dan ganti cabang '%s'\n"
+
+#: builtin/checkout.c:945 builtin/checkout.c:1376
+#, c-format
+msgid "Switched to a new branch '%s'\n"
+msgstr "Ganti ke cabang baru '%s'\n"
+
+#: builtin/checkout.c:947
+#, c-format
+msgid "Switched to branch '%s'\n"
+msgstr "Ganti ke cabang '%s'\n"
+
+#: builtin/checkout.c:998
+#, c-format
+msgid " ... and %d more.\n"
+msgstr "... dan %d lainnya.\n"
+
+#: builtin/checkout.c:1004
+#, c-format
+msgid ""
+"Warning: you are leaving %d commit behind, not connected to\n"
+"any of your branches:\n"
+"\n"
+"%s\n"
+msgid_plural ""
+"Warning: you are leaving %d commits behind, not connected to\n"
+"any of your branches:\n"
+"\n"
+"%s\n"
+msgstr[0] ""
+"Peringatan: Anda meninggalkan %d komit di belakang, tidak terhubung ke\n"
+"cabang Anda manapun:\n"
+"\n"
+"%s\n"
+msgstr[1] ""
+"Peringatan: Anda meninggalkan %d komit di belakang, tidak terhubung ke\n"
+"cabang Anda manapun:\n"
+"\n"
+"%s\n"
+
+#: builtin/checkout.c:1023
+#, c-format
+msgid ""
+"If you want to keep it by creating a new branch, this may be a good time\n"
+"to do so with:\n"
+"\n"
+" git branch <new-branch-name> %s\n"
+"\n"
+msgid_plural ""
+"If you want to keep them by creating a new branch, this may be a good time\n"
+"to do so with:\n"
+"\n"
+" git branch <new-branch-name> %s\n"
+"\n"
+msgstr[0] ""
+"Jika Anda ingin memelihara itu dengan membuat cabang baru, ini mungkin\n"
+"saat yang tepat untuk dilakukan dengan:\n"
+"git branch <nama-cabang-baru> %s\n"
+msgstr[1] ""
+"Jika Anda ingin memelihara itu dengan membuat cabang baru, ini mungkin\n"
+"saat yang tepat untuk dilakukan dengan:\n"
+"git branch <nama-cabang-baru> %s\n"
+
+#: builtin/checkout.c:1058
+msgid "internal error in revision walk"
+msgstr "kesalahan internal dalam jalan revisi"
+
+#: builtin/checkout.c:1062
+msgid "Previous HEAD position was"
+msgstr "Posisi HEAD sebelumnya adalah"
+
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
+msgid "You are on a branch yet to be born"
+msgstr "Anda berada pada cabang yang belum lahir"
+
+#: builtin/checkout.c:1184
+#, c-format
+msgid ""
+"'%s' could be both a local file and a tracking branch.\n"
+"Please use -- (and optionally --no-guess) to disambiguate"
+msgstr ""
+"'%s' bisa jadi berkas lokal dan cabang pelacak.\n"
+"Mohon gunakan -- (dan secara opsional --no-guess) untuk disambiguasi"
+
+#: builtin/checkout.c:1191
+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"
+"\n"
+"    git checkout --track origin/<name>\n"
+"\n"
+"If you'd like to always have checkouts of an ambiguous <name> prefer\n"
+"one remote, e.g. the 'origin' remote, consider setting\n"
+"checkout.defaultRemote=origin in your config."
+msgstr ""
+"Jika maksud Anda check out cabang pelacak remote, seperti 'origin',\n"
+"Anda bisa lakukan dengan kualifikasi penuh nama dengan opsi --track:\n"
+"\n"
+"    git checkout --track origin/<nama>\n"
+"\n"
+"Jika Anda ingin checkout <nama> ambigu selalu memilih satu remote,\n"
+"seperti remote 'origin', pertimbangkan untuk menyetel\n"
+"checkout.defaultRemote=origin di konfigurasi Anda"
+
+#: builtin/checkout.c:1201
+#, c-format
+msgid "'%s' matched multiple (%d) remote tracking branches"
+msgstr "'%s' cocok dengan banyak (%d) cabang pelacak remote"
+
+#: builtin/checkout.c:1267
+msgid "only one reference expected"
+msgstr "hanya satu referensi yang diharapkan"
+
+#: builtin/checkout.c:1284
+#, c-format
+msgid "only one reference expected, %d given."
+msgstr "hanya satu referensi yang diharapkan, %d diberikan"
+
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
+#, c-format
+msgid "invalid reference: %s"
+msgstr "referensi tidak valid: %s"
+
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
+#, c-format
+msgid "reference is not a tree: %s"
+msgstr "referensi bukan pohon: %s"
+
+#: builtin/checkout.c:1390
+#, c-format
+msgid "a branch is expected, got tag '%s'"
+msgstr "sebuah cabang diharapkan, dapat tag '%s'"
+
+#: builtin/checkout.c:1392
+#, c-format
+msgid "a branch is expected, got remote branch '%s'"
+msgstr "sebuah cabang diharapkan, dapat cabang remote '%s'"
+
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
+#, c-format
+msgid "a branch is expected, got '%s'"
+msgstr "sebuah cabang diharapkan, dapat '%s'"
+
+#: builtin/checkout.c:1396
+#, c-format
+msgid "a branch is expected, got commit '%s'"
+msgstr "sebuah cabang diharapkan, dapat komit '%s'"
+
+#: builtin/checkout.c:1412
+msgid ""
+"cannot switch branch while merging\n"
+"Consider \"git merge --quit\" or \"git worktree add\"."
+msgstr ""
+"tidak dapat mengganti cabang saat penggabungan\n"
+"Pertimbangkan untuk menggunakan \"git merge --quit\" atau \"git worktree add"
+"\"."
+
+#: builtin/checkout.c:1416
+msgid ""
+"cannot switch branch in the middle of an am session\n"
+"Consider \"git am --quit\" or \"git worktree add\"."
+msgstr ""
+"tidak dapat mengganti cabang di tengah sesi am\n"
+"Pertimbangkan untuk menggunakan \"git am --quit\" atau \"git worktree add\"."
+
+#: builtin/checkout.c:1420
+msgid ""
+"cannot switch branch while rebasing\n"
+"Consider \"git rebase --quit\" or \"git worktree add\"."
+msgstr ""
+"tidak dapat mengganti cabang saat pendasaran ulang\n"
+"Pertimbangkan untuk menggunakan \"git rebase --quit\" atau \"git worktree add"
+"\"."
+
+#: builtin/checkout.c:1424
+msgid ""
+"cannot switch branch while cherry-picking\n"
+"Consider \"git cherry-pick --quit\" or \"git worktree add\"."
+msgstr ""
+"tidak dapat mengganti cabang saat pemetikan ceri\n"
+"Pertimbangkan untuk menggunakan \"git cherry-pick --quit\" atau \"git "
+"worktree add\"."
+
+#: builtin/checkout.c:1428
+msgid ""
+"cannot switch branch while reverting\n"
+"Consider \"git revert --quit\" or \"git worktree add\"."
+msgstr ""
+"tidak dapat mengganti cabang saat pembalikan\n"
+"Pertimbangkan untuk menggunakan \"git cherry-pick --quit\" atau \"git "
+"worktree add\"."
+
+#: builtin/checkout.c:1432
+msgid "you are switching branch while bisecting"
+msgstr "Anda mengganti cabang saat pembagian dua"
+
+#: builtin/checkout.c:1439
+msgid "paths cannot be used with switching branches"
+msgstr "jalur tidak dapat digunakan dengan mengganti cabang"
+
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
+#, c-format
+msgid "'%s' cannot be used with switching branches"
+msgstr "'%s' tidak dapat digunakan dengan mengganti cabang"
+
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
+#, c-format
+msgid "'%s' cannot be used with '%s'"
+msgstr "'%s' tidak dapat digunakan dengan '%s'"
+
+#: builtin/checkout.c:1467
+#, c-format
+msgid "'%s' cannot take <start-point>"
+msgstr "'%s' tidak bisa mengambil <titik-awal>"
+
+#: builtin/checkout.c:1475
+#, c-format
+msgid "Cannot switch branch to a non-commit '%s'"
+msgstr "Tidak dapat mengganti cabang ke bukan komit '%s'"
+
+#: builtin/checkout.c:1482
+msgid "missing branch or commit argument"
+msgstr "kehilangan argumen cabang atau komit"
+
+#: builtin/checkout.c:1525
+msgid "perform a 3-way merge with the new branch"
+msgstr "lakukan penggabungan 3 arah dengan cabang baru"
+
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
+msgid "style"
+msgstr "gaya"
+
+#: builtin/checkout.c:1527
+msgid "conflict style (merge or diff3)"
+msgstr "gaya konflik (merge atau diff3)"
+
+#: builtin/checkout.c:1539 builtin/worktree.c:488
+msgid "detach HEAD at named commit"
+msgstr "lepas HEAD pada komit bernama"
+
+#: builtin/checkout.c:1540
+msgid "set upstream info for new branch"
+msgstr "setel info hulu untuk cabang baru"
+
+#: builtin/checkout.c:1542
+msgid "force checkout (throw away local modifications)"
+msgstr "paksa checkout (buang modifikasi lokal)"
+
+#: builtin/checkout.c:1544
+msgid "new-branch"
+msgstr "cabang baru"
+
+#: builtin/checkout.c:1544
+msgid "new unparented branch"
+msgstr "cabang baru tanpa induk"
+
+#: builtin/checkout.c:1546 builtin/merge.c:301
+msgid "update ignored files (default)"
+msgstr "perbarui berkas yang diabaikan (default)"
+
+#: builtin/checkout.c:1549
+msgid "do not check if another worktree is holding the given ref"
+msgstr ""
+"jangan periksa jika pohon kerja yang lain mempunyai referensi yang diberikan"
+
+#: builtin/checkout.c:1562
+msgid "checkout our version for unmerged files"
+msgstr "checkout versi kami untuk berkas yang tak tergabung"
+
+#: builtin/checkout.c:1565
+msgid "checkout their version for unmerged files"
+msgstr "checkout versi mereka untuk berkas yang tak tergabung"
+
+#: builtin/checkout.c:1569
+msgid "do not limit pathspecs to sparse entries only"
+msgstr "jangan batasi jalur spek hanya ke entri tipis"
+
+#: builtin/checkout.c:1624
+#, c-format
+msgid "-%c, -%c and --orphan are mutually exclusive"
+msgstr "-%c, -%c dan --orphan saling eksklusif"
+
+#: builtin/checkout.c:1628
+msgid "-p and --overlay are mutually exclusive"
+msgstr "-p dan --overlay saling eksklusif"
+
+#: builtin/checkout.c:1665
+msgid "--track needs a branch name"
+msgstr "--track butuh nama cabang"
+
+#: builtin/checkout.c:1670
+#, c-format
+msgid "missing branch name; try -%c"
+msgstr "kehilangan nama cabang; coba -%c"
+
+#: builtin/checkout.c:1702
+#, c-format
+msgid "could not resolve %s"
+msgstr "tidak dapat menyelesaikan %s"
+
+#: builtin/checkout.c:1718
+msgid "invalid path specification"
+msgstr "spesifikasi jalur tidak valid"
+
+#: builtin/checkout.c:1725
+#, c-format
+msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
+msgstr "'%s' bukanlah commit dan cabang '%s' tidak dapat dibuat dari itu"
+
+#: builtin/checkout.c:1729
+#, c-format
+msgid "git checkout: --detach does not take a path argument '%s'"
+msgstr "git checkout: --detach tidak mengambil argumen jalur '%s'"
+
+#: builtin/checkout.c:1738
+msgid "--pathspec-from-file is incompatible with --detach"
+msgstr "--pathspec-from-file tidak kompatible dengan --detach"
+
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
+msgid "--pathspec-from-file is incompatible with --patch"
+msgstr "--pathspec-from-file tidak kompatibel dengan --patch"
+
+#: builtin/checkout.c:1754
+msgid ""
+"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
+"checking out of the index."
+msgstr ""
+"git checkout: --ours/theirs, --force dan --merge tidak kompatibel saat\n"
+"men-checkout index"
+
+#: builtin/checkout.c:1759
+msgid "you must specify path(s) to restore"
+msgstr "Anda harus sebutkan jalur untuk dipulihkan"
+
+#: 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
+msgid "branch"
+msgstr "cabang"
+
+#: builtin/checkout.c:1786
+msgid "create and checkout a new branch"
+msgstr "buat dan checkout cabang baru"
+
+#: builtin/checkout.c:1788
+msgid "create/reset and checkout a branch"
+msgstr "buat/setel ulang dan checkout cabang"
+
+#: builtin/checkout.c:1789
+msgid "create reflog for new branch"
+msgstr "buat reflog untuk cabang baru"
+
+#: builtin/checkout.c:1791
+msgid "second guess 'git checkout <no-such-branch>' (default)"
+msgstr "tebakan kedua 'git checkout <tidak-ada-cabang-seperti-itu>' (default)"
+
+#: builtin/checkout.c:1792
+msgid "use overlay mode (default)"
+msgstr "gunakan mode hamparan (default)"
+
+#: builtin/checkout.c:1837
+msgid "create and switch to a new branch"
+msgstr "buat dan ganti ke cabang baru"
+
+#: builtin/checkout.c:1839
+msgid "create/reset and switch to a branch"
+msgstr "buat/setel ulang dan ganti ke cabang"
+
+#: builtin/checkout.c:1841
+msgid "second guess 'git switch <no-such-branch>'"
+msgstr "tebakan kedua 'git switch <tidak-ada-cabang-seperti-itu>'"
+
+#: builtin/checkout.c:1843
+msgid "throw away local modifications"
+msgstr "buang modifikasi lokal"
+
+#: builtin/checkout.c:1877
+msgid "which tree-ish to checkout from"
+msgstr "mana mirip-cabang untuk di-checkout"
+
+#: builtin/checkout.c:1879
+msgid "restore the index"
+msgstr "pulihkan indeks"
+
+#: builtin/checkout.c:1881
+msgid "restore the working tree (default)"
+msgstr "pulihkan pohon kerja (default)"
+
+#: builtin/checkout.c:1883
+msgid "ignore unmerged entries"
+msgstr "abaikan entri yang tak tergabung"
+
+#: builtin/checkout.c:1884
+msgid "use overlay mode"
+msgstr "gunakan mode hamparan"
+
+#: builtin/clean.c:29
+msgid ""
+"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
+msgstr ""
+"git clean [-d] [-f] [-i] [-n] [-q] [-e <pola>] [-x | -X] [--] <jalur>..."
+
+#: builtin/clean.c:33
+#, c-format
+msgid "Removing %s\n"
+msgstr "Menghapus %s\n"
+
+#: builtin/clean.c:34
+#, c-format
+msgid "Would remove %s\n"
+msgstr "Akan hapus %s\n"
+
+#: builtin/clean.c:35
+#, c-format
+msgid "Skipping repository %s\n"
+msgstr "Melewatkan repositori %s\n"
+
+#: builtin/clean.c:36
+#, c-format
+msgid "Would skip repository %s\n"
+msgstr "Akan melewatkan repositori %s\n"
+
+#: builtin/clean.c:38
+#, c-format
+msgid "could not lstat %s\n"
+msgstr "tidak dapat me-lstat %s\n"
+
+#: builtin/clean.c:302 git-add--interactive.perl:593
+#, c-format
+msgid ""
+"Prompt help:\n"
+"1          - select a numbered item\n"
+"foo        - select item based on unique prefix\n"
+"           - (empty) select nothing\n"
+msgstr ""
+"Bisik bantuan:\n"
+"1          - pilih item bernomor\n"
+"foo        - pilih item berdasarkan prefiks unik\n"
+"           - (kosong) tidak pilih apa-apa\n"
+
+#: builtin/clean.c:306 git-add--interactive.perl:602
+#, c-format
+msgid ""
+"Prompt help:\n"
+"1          - select a single item\n"
+"3-5        - select a range of items\n"
+"2-3,6-9    - select multiple ranges\n"
+"foo        - select item based on unique prefix\n"
+"-...       - unselect specified items\n"
+"*          - choose all items\n"
+"           - (empty) finish selecting\n"
+msgstr ""
+"Bisik bantuan:\n"
+"1          - pilih item tunggal\n"
+"3-5        - pilih satu rentang item\n"
+"2-3,6-9    - pilih banyak rentang\n"
+"foo        - pilih item berdasarkan prefiks unik\n"
+"-...       - batal pilih item yang disebutkan\n"
+"*          - pilih semua item\n"
+"           - (kosong) selesai memilih\n"
+
+#: builtin/clean.c:521 git-add--interactive.perl:568
+#: git-add--interactive.perl:573
+#, c-format, perl-format
+msgid "Huh (%s)?\n"
+msgstr "Huh (%s)?\n"
+
+#: builtin/clean.c:661
+#, c-format
+msgid "Input ignore patterns>> "
+msgstr "Masukkan pola pengabaian>> "
+
+#: builtin/clean.c:696
+#, c-format
+msgid "WARNING: Cannot find items matched by: %s"
+msgstr "PERINGATAN: Tidak dapat menemukan item yang cocok dengan: %s"
+
+#: builtin/clean.c:717
+msgid "Select items to delete"
+msgstr "Pilih item untuk dihapus"
+
+#. TRANSLATORS: Make sure to keep [y/N] as is
+#: builtin/clean.c:758
+#, c-format
+msgid "Remove %s [y/N]? "
+msgstr "Hapus %s [y/N]? "
+
+#: builtin/clean.c:789
+msgid ""
+"clean               - start cleaning\n"
+"filter by pattern   - exclude items from deletion\n"
+"select by numbers   - select items to be deleted by numbers\n"
+"ask each            - confirm each deletion (like \"rm -i\")\n"
+"quit                - stop cleaning\n"
+"help                - this screen\n"
+"?                   - help for prompt selection"
+msgstr ""
+"clean               - mulai membersihkan\n"
+"filter by pattern   - kecualikan item dari penghapusan\n"
+"select by numbers   - pilih item untuk dihapus oleh nomor\n"
+"ask each            - konfirmasi setiap penghapusan (seperti \"rm -i\")\n"
+"quit                - berhenti membersihkan\n"
+"help                - layar ini\n"
+"?                   - bantuan untuk bisik pemilihan"
+
+#: builtin/clean.c:825
+msgid "Would remove the following item:"
+msgid_plural "Would remove the following items:"
+msgstr[0] "Akan menghapus item berikut:"
+msgstr[1] "Akan menghapus item berikut:"
+
+#: builtin/clean.c:841
+msgid "No more files to clean, exiting."
+msgstr "Tidak ada lagi berkas untuk dibersihkan, keluar."
+
+#: builtin/clean.c:903
+msgid "do not print names of files removed"
+msgstr "jangan cetak nama berkas yang dihapus"
+
+#: builtin/clean.c:905
+msgid "force"
+msgstr "paksa"
+
+#: builtin/clean.c:906
+msgid "interactive cleaning"
+msgstr "pembersihan interaktif"
+
+#: builtin/clean.c:908
+msgid "remove whole directories"
+msgstr "hapus keseluruhan direktori"
+
+#: 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/show-ref.c:179
+msgid "pattern"
+msgstr "pola"
+
+#: builtin/clean.c:910
+msgid "add <pattern> to ignore rules"
+msgstr "tambahkan <pola> ke aturan pengabaian"
+
+#: builtin/clean.c:911
+msgid "remove ignored files, too"
+msgstr "juga hapus berkas terabaikan"
+
+#: builtin/clean.c:913
+msgid "remove only ignored files"
+msgstr "hanya hapus berkas terabaikan"
+
+#: builtin/clean.c:929
+msgid ""
+"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
+"clean"
+msgstr ""
+"clean.requireForce disetel ke true dan baik -i, -n, atau -f tidak diberikan; "
+"menolak membersihkan"
+
+#: builtin/clean.c:932
+msgid ""
+"clean.requireForce defaults to true and neither -i, -n, nor -f given; "
+"refusing to clean"
+msgstr ""
+"clean.requireForce asal ke true dan baik -i, -n, atau -f tidak diberikan; "
+"menolak membersihkan"
+
+#: builtin/clean.c:944
+msgid "-x and -X cannot be used together"
+msgstr "-x dan -X tidak dapat digunakan bersamaan"
+
+#: builtin/clone.c:45
+msgid "git clone [<options>] [--] <repo> [<dir>]"
+msgstr "git clone [<opsi>] [--] <repo> [<direktori>]"
+
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "jangan kloning repositori dangkal"
+
+#: builtin/clone.c:98
+msgid "don't create a checkout"
+msgstr "jangan buat checkout"
+
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
+msgid "create a bare repository"
+msgstr "buat repositori bare"
+
+#: builtin/clone.c:103
+msgid "create a mirror repository (implies bare)"
+msgstr "buat repositori cermin (implikasikan bare)"
+
+#: builtin/clone.c:105
+msgid "to clone from a local repository"
+msgstr "kloning dari repositori lokal"
+
+#: builtin/clone.c:107
+msgid "don't use local hardlinks, always copy"
+msgstr "jangan gunakan tautan keras lokal, selalu salin"
+
+#: builtin/clone.c:109
+msgid "setup as shared repository"
+msgstr "siapkan sebagai repositori berbagi"
+
+#: builtin/clone.c:111
+msgid "pathspec"
+msgstr "spek jalur"
+
+#: builtin/clone.c:111
+msgid "initialize submodules in the clone"
+msgstr "inisialisasi submodul dalam klon"
+
+#: builtin/clone.c:115
+msgid "number of submodules cloned in parallel"
+msgstr "jumlah submodul yang diklon secara paralel"
+
+#: builtin/clone.c:116 builtin/init-db.c:538
+msgid "template-directory"
+msgstr "direktori templat"
+
+#: builtin/clone.c:117 builtin/init-db.c:539
+msgid "directory from which templates will be used"
+msgstr "direktori dimana templat akan digunakan"
+
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
+msgid "reference repository"
+msgstr "repositori rujukan"
+
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
+msgid "use --reference only while cloning"
+msgstr "gunakan --reference hanya pada saat kloning"
+
+#: 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
+msgid "name"
+msgstr "nama"
+
+#: builtin/clone.c:125
+msgid "use <name> instead of 'origin' to track upstream"
+msgstr "gunakan <nama> daripada 'origin' untuk lacak hulu"
+
+#: builtin/clone.c:127
+msgid "checkout <branch> instead of the remote's HEAD"
+msgstr "checkout <cabang> daripada HEAD remote"
+
+#: builtin/clone.c:129
+msgid "path to git-upload-pack on the remote"
+msgstr "jalur ke git-upload-pack pada remote"
+
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
+#: builtin/pull.c:208
+msgid "depth"
+msgstr "kedalaman"
+
+#: builtin/clone.c:131
+msgid "create a shallow clone of that depth"
+msgstr "buat klon dangkal sedalam kedalaman tersebut"
+
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
+#: builtin/pull.c:211
+msgid "time"
+msgstr "waktu"
+
+#: builtin/clone.c:133
+msgid "create a shallow clone since a specific time"
+msgstr "buat klon dangkal sejak waktu yang disebutkan"
+
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
+msgid "revision"
+msgstr "revisi"
+
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
+msgid "deepen history of shallow clone, excluding rev"
+msgstr "perdalam riwayat klon dangkal, tidak termasuk rev"
+
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
+msgid "clone only one branch, HEAD or --branch"
+msgstr "klon hanya satu cabang, HEAD atau --branch"
+
+#: builtin/clone.c:139
+msgid "don't clone any tags, and make later fetches not to follow them"
+msgstr "jangan klon tag apapun, dan buat pengambilan nanti tidak mengikutinya"
+
+#: builtin/clone.c:141
+msgid "any cloned submodules will be shallow"
+msgstr "submodul yang diklon akan dangkal"
+
+#: builtin/clone.c:142 builtin/init-db.c:547
+msgid "gitdir"
+msgstr "direktori git"
+
+#: builtin/clone.c:143 builtin/init-db.c:548
+msgid "separate git dir from working tree"
+msgstr "pisahkan direktori git dari pohon kerja"
+
+#: builtin/clone.c:144
+msgid "key=value"
+msgstr "kunci=nilai"
+
+#: builtin/clone.c:145
+msgid "set config inside the new repository"
+msgstr "setel konfigurasi di dalam repositori baru"
+
+#: 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
+msgid "server-specific"
+msgstr "spesifik ke server"
+
+#: 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
+msgid "option to transmit"
+msgstr "opsi untuk transmisi"
+
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
+#: builtin/push.c:585
+msgid "use IPv4 addresses only"
+msgstr "gunakan hanya alamat IPv4"
+
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
+#: builtin/push.c:587
+msgid "use IPv6 addresses only"
+msgstr "gunakan hanya alamat IPv6"
+
+#: builtin/clone.c:154
+msgid "any cloned submodules will use their remote-tracking branch"
+msgstr "submodul yang diklon akan menggunakan cabang yang melacak remotenya"
+
+#: builtin/clone.c:156
+msgid "initialize sparse-checkout file to include only files at root"
+msgstr ""
+"inisialisasi berkas checkout tipis agar memasukkan hanya berkas pada akar"
+
+#: builtin/clone.c:292
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"Nama direktori tidak dapat ditebak.\n"
+"Mohon sebutkan direktori pada baris perintah"
+
+#: builtin/clone.c:345
+#, c-format
+msgid "info: Could not add alternate for '%s': %s\n"
+msgstr "info: Tidak dapat menambahkan alternatif untuk '%s': %s\n"
+
+#: builtin/clone.c:418
+#, c-format
+msgid "%s exists and is not a directory"
+msgstr "%s ada dan bukan direktori"
+
+#: builtin/clone.c:436
+#, c-format
+msgid "failed to start iterator over '%s'"
+msgstr "gagal memulai iterator pada '%s'"
+
+#: builtin/clone.c:467
+#, c-format
+msgid "failed to create link '%s'"
+msgstr "gagal membuat tautan '%s'"
+
+#: builtin/clone.c:471
+#, c-format
+msgid "failed to copy file to '%s'"
+msgstr "gagal menyalin berkas ke '%s'"
+
+#: builtin/clone.c:476
+#, c-format
+msgid "failed to iterate over '%s'"
+msgstr "gagal iterasi pada '%s'"
+
+#: builtin/clone.c:503
+#, c-format
+msgid "done.\n"
+msgstr "selesai.\n"
+
+#: builtin/clone.c:517
+msgid ""
+"Clone succeeded, but checkout failed.\n"
+"You can inspect what was checked out with 'git status'\n"
+"and retry with 'git restore --source=HEAD :/'\n"
+msgstr ""
+"Klon sukses, tapi checkout gagal.\n"
+"Anda dapat periksa apa yang dicheckout dengan 'git status'\n"
+"dan coba lagi dengan 'git restore --source=HEAD :/'\n"
+
+#: builtin/clone.c:594
+#, c-format
+msgid "Could not find remote branch %s to clone."
+msgstr "Tidak dapat menemukan cabang remote %s untuk diklon."
+
+#: builtin/clone.c:713
+#, c-format
+msgid "unable to update %s"
+msgstr "tidak dapat memperbarui %s"
+
+#: builtin/clone.c:761
+msgid "failed to initialize sparse-checkout"
+msgstr "gagal menginisalisasi checkout tipis"
+
+#: builtin/clone.c:784
+msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
+msgstr ""
+"HEAD remote merujuk pada ref yang tidak ada, tidak dapat men-checkout.\n"
+
+#: builtin/clone.c:816
+msgid "unable to checkout working tree"
+msgstr "tidak dapat men-checkout pohon kerja"
+
+#: builtin/clone.c:894
+msgid "unable to write parameters to config file"
+msgstr "tidak dapat menulis parameter ke berkas konfigurasi"
+
+#: builtin/clone.c:957
+msgid "cannot repack to clean up"
+msgstr "tidak dapat memaket ulang untuk pembersihan"
+
+#: builtin/clone.c:959
+msgid "cannot unlink temporary alternates file"
+msgstr "tidak dapat batal-taut berkas alternatif sementara"
+
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
+msgid "Too many arguments."
+msgstr "Terlalu banyak argumen."
+
+#: builtin/clone.c:1005
+msgid "You must specify a repository to clone."
+msgstr "Anda harus sebutkan repositori untuk diklon."
+
+#: builtin/clone.c:1018
+#, c-format
+msgid "--bare and --origin %s options are incompatible."
+msgstr "--bare dan --origin %s tidak kompatibel."
+
+#: builtin/clone.c:1021
+msgid "--bare and --separate-git-dir are incompatible."
+msgstr "--bare dan --separate-git-dir tidak kompatibel."
+
+#: builtin/clone.c:1035
+#, c-format
+msgid "repository '%s' does not exist"
+msgstr "repositori '%s' tidak ada"
+
+#: builtin/clone.c:1039 builtin/fetch.c:2011
+#, c-format
+msgid "depth %s is not a positive number"
+msgstr "kedalaman %s bukan bilangan positif"
+
+#: builtin/clone.c:1049
+#, c-format
+msgid "destination path '%s' already exists and is not an empty directory."
+msgstr "jalur tujuan '%s' sudah ada dan bukan direktori kosong"
+
+#: builtin/clone.c:1055
+#, c-format
+msgid "repository path '%s' already exists and is not an empty directory."
+msgstr "jalur repositori '%s' sudah ada dan bukan direktori kosong"
+
+#: builtin/clone.c:1069
+#, c-format
+msgid "working tree '%s' already exists."
+msgstr "pohon kerja '%s' sudah ada."
+
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
+#, c-format
+msgid "could not create leading directories of '%s'"
+msgstr "tidak dapat membuat direktori pendahulu '%s'"
+
+#: builtin/clone.c:1089
+#, c-format
+msgid "could not create work tree dir '%s'"
+msgstr "tidak dapat membuat direktori pohon kerja '%s'"
+
+#: builtin/clone.c:1109
+#, c-format
+msgid "Cloning into bare repository '%s'...\n"
+msgstr "Kloning ke repositori bare '%s'...\n"
+
+#: builtin/clone.c:1111
+#, c-format
+msgid "Cloning into '%s'...\n"
+msgstr "Kloning ke '%s'...\n"
+
+#: builtin/clone.c:1135
+msgid ""
+"clone --recursive is not compatible with both --reference and --reference-if-"
+"able"
+msgstr ""
+"clone --recursive tidak kompatibel dengan baik --reference dan --reference-"
+"if-able"
+
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#, c-format
+msgid "'%s' is not a valid remote name"
+msgstr "'%s' bukan nama remote yang valid"
+
+#: builtin/clone.c:1229
+msgid "--depth is ignored in local clones; use file:// instead."
+msgstr "--depth diabaikan di klon lokal; gunakan file:// sebagai gantinya."
+
+#: builtin/clone.c:1231
+msgid "--shallow-since is ignored in local clones; use file:// instead."
+msgstr ""
+"--shallow-since diabaikan di klon lokal; gunakan file:// sebagai gantinya."
+
+#: builtin/clone.c:1233
+msgid "--shallow-exclude is ignored in local clones; use file:// instead."
+msgstr ""
+"--shallow-exclude diabaikan di klon lokal; gunakan file:// sebagai gantinya."
+
+#: builtin/clone.c:1235
+msgid "--filter is ignored in local clones; use file:// instead."
+msgstr "--filter diabaikan di klon lokal; gunakan file:// sebagai gantinya."
+
+#: builtin/clone.c:1240
+msgid "source repository is shallow, ignoring --local"
+msgstr "repositori sumber dangkal, abaikan --local"
+
+#: builtin/clone.c:1245
+msgid "--local is ignored"
+msgstr "--local diabaikan"
+
+#: builtin/clone.c:1337 builtin/clone.c:1345
+#, c-format
+msgid "Remote branch %s not found in upstream %s"
+msgstr "Cabang remote %s tidak ditemukan di hulu %s"
+
+#: builtin/clone.c:1348
+msgid "You appear to have cloned an empty repository."
+msgstr "Anda tampaknya mengklon repositori kosong."
+
+#: builtin/column.c:10
+msgid "git column [<options>]"
+msgstr ""
+
+#: builtin/column.c:27
+msgid "lookup config vars"
+msgstr ""
+
+#: builtin/column.c:28 builtin/column.c:29
+msgid "layout to use"
+msgstr ""
+
+#: builtin/column.c:30
+msgid "maximum width"
+msgstr ""
+
+#: builtin/column.c:31
+msgid "padding space on left border"
+msgstr ""
+
+#: builtin/column.c:32
+msgid "padding space on right border"
+msgstr ""
+
+#: builtin/column.c:33
+msgid "padding space between columns"
+msgstr ""
+
+#: builtin/column.c:51
+msgid "--command must be the first argument"
+msgstr ""
+
+#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
+msgstr ""
+
+#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
+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>"
+msgstr ""
+
+#: builtin/commit-graph.c:64
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr ""
+
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
+msgid "dir"
+msgstr ""
+
+#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
+#: builtin/commit-graph.c:317
+msgid "the object directory to store the graph"
+msgstr ""
+
+#: builtin/commit-graph.c:83
+msgid "if the commit-graph is split, only verify the tip file"
+msgstr ""
+
+#: builtin/commit-graph.c:106
+#, c-format
+msgid "Could not open commit-graph '%s'"
+msgstr ""
+
+#: builtin/commit-graph.c:142
+#, c-format
+msgid "unrecognized --split argument, %s"
+msgstr ""
+
+#: builtin/commit-graph.c:155
+#, c-format
+msgid "unexpected non-hex object ID: %s"
+msgstr ""
+
+#: builtin/commit-graph.c:160
+#, c-format
+msgid "invalid object: %s"
+msgstr ""
+
+#: builtin/commit-graph.c:213
+msgid "start walk at all refs"
+msgstr ""
+
+#: builtin/commit-graph.c:215
+msgid "scan pack-indexes listed by stdin for commits"
+msgstr ""
+
+#: builtin/commit-graph.c:217
+msgid "start walk at commits listed by stdin"
+msgstr ""
+
+#: builtin/commit-graph.c:219
+msgid "include all commits already in the commit-graph file"
+msgstr ""
+
+#: builtin/commit-graph.c:221
+msgid "enable computation for changed paths"
+msgstr ""
+
+#: builtin/commit-graph.c:224
+msgid "allow writing an incremental commit-graph file"
+msgstr ""
+
+#: builtin/commit-graph.c:228
+msgid "maximum number of commits in a non-base split commit-graph"
+msgstr ""
+
+#: builtin/commit-graph.c:230
+msgid "maximum ratio between two levels of a split commit-graph"
+msgstr ""
+
+#: builtin/commit-graph.c:232
+msgid "only expire files older than a given date-time"
+msgstr ""
+
+#: builtin/commit-graph.c:234
+msgid "maximum number of changed-path Bloom filters to compute"
+msgstr ""
+
+#: builtin/commit-graph.c:255
+msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
+msgstr ""
+
+#: builtin/commit-graph.c:287
+msgid "Collecting commits from input"
+msgstr ""
+
+#: builtin/commit-tree.c:18
+msgid ""
+"git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
+"<file>)...] <tree>"
+msgstr ""
+
+#: builtin/commit-tree.c:31
+#, c-format
+msgid "duplicate parent %s ignored"
+msgstr ""
+
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
+#, c-format
+msgid "not a valid object name %s"
+msgstr ""
+
+#: builtin/commit-tree.c:93
+#, c-format
+msgid "git commit-tree: failed to open '%s'"
+msgstr ""
+
+#: builtin/commit-tree.c:96
+#, c-format
+msgid "git commit-tree: failed to read '%s'"
+msgstr ""
+
+#: builtin/commit-tree.c:98
+#, c-format
+msgid "git commit-tree: failed to close '%s'"
+msgstr ""
+
+#: builtin/commit-tree.c:111
+msgid "parent"
+msgstr ""
+
+#: builtin/commit-tree.c:112
+msgid "id of a parent commit object"
+msgstr ""
+
+#: 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
+msgid "message"
+msgstr ""
+
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
+msgid "commit message"
+msgstr ""
+
+#: builtin/commit-tree.c:118
+msgid "read commit log message from file"
+msgstr ""
+
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
+#: builtin/pull.c:176 builtin/revert.c:118
+msgid "GPG sign commit"
+msgstr ""
+
+#: builtin/commit-tree.c:133
+msgid "must give exactly one tree"
+msgstr ""
+
+#: builtin/commit-tree.c:140
+msgid "git commit-tree: failed to read"
+msgstr ""
+
+#: builtin/commit.c:41
+msgid "git commit [<options>] [--] <pathspec>..."
+msgstr "git commit [<opsi>] [--] <spek jalur>..."
+
+#: builtin/commit.c:46
+msgid "git status [<options>] [--] <pathspec>..."
+msgstr "git status [<opsi>] [--] <spek jalur>..."
+
+#: builtin/commit.c:51
+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"
+"remove the commit entirely with \"git reset HEAD^\".\n"
+msgstr ""
+"Anda diminta untuk mengubah komit terkini, tetapi melakukan\n"
+"hal itu akan membuat komit kosong. Anda dapat mengulangi perintah\n"
+"dengan --allow-empty, atau Anda dapat menghapus keseluruhan komit\n"
+"dengan \"git reset HEAD^\".\n"
+
+#: builtin/commit.c:56
+msgid ""
+"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
+"If you wish to commit it anyway, use:\n"
+"\n"
+"    git commit --allow-empty\n"
+"\n"
+msgstr ""
+"Petik ceri sebelumnya sekarang kosong, kemungkinan karena resolusi konflik.\n"
+"Jika Anda ingin komit, gunakan:\n"
+"\n"
+"    git commit --allow-empty\n"
+"\n"
+
+#: builtin/commit.c:63
+msgid "Otherwise, please use 'git rebase --skip'\n"
+msgstr "Selain itu, gunakan 'git rebase --skip'\n"
+
+#: builtin/commit.c:66
+msgid "Otherwise, please use 'git cherry-pick --skip'\n"
+msgstr "Selain itu, gunakan 'git cherry-pick --skip'\n"
+
+#: builtin/commit.c:69
+msgid ""
+"and then use:\n"
+"\n"
+"    git cherry-pick --continue\n"
+"\n"
+"to resume cherry-picking the remaining commits.\n"
+"If you wish to skip this commit, use:\n"
+"\n"
+"    git cherry-pick --skip\n"
+"\n"
+msgstr ""
+"dan gunakan:\n"
+"\n"
+"    git cherry-pick --continue\n"
+"\n"
+"untuk melanjutkan pemetikan ceri sisa komit.\n"
+"Jika Anda ingin melewatkan komit ini, gunakan:\n"
+"    git cherry-pick --skip\n"
+"\n"
+
+#: builtin/commit.c:324
+msgid "failed to unpack HEAD tree object"
+msgstr "gagal membuka objek pohon HEAD"
+
+#: builtin/commit.c:360
+msgid "--pathspec-from-file with -a does not make sense"
+msgstr "--pathspec-from-file dengan -a tidak masuk akal"
+
+#: builtin/commit.c:374
+msgid "No paths with --include/--only does not make sense."
+msgstr "Tanpa jalur dengan --include/--only tidak masuk akal."
+
+#: builtin/commit.c:386
+msgid "unable to create temporary index"
+msgstr "tidak dapat membuat indeks sementara"
+
+#: builtin/commit.c:395
+msgid "interactive add failed"
+msgstr "penambahan interaktif gagal"
+
+#: builtin/commit.c:410
+msgid "unable to update temporary index"
+msgstr "tidak dapat memperbarui indeks sementara"
+
+#: builtin/commit.c:412
+msgid "Failed to update main cache tree"
+msgstr "gagal memperbarui tembolok pohon utama"
+
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
+msgid "unable to write new_index file"
+msgstr "tidak dapat menulis berkas indeks baru"
+
+#: builtin/commit.c:489
+msgid "cannot do a partial commit during a merge."
+msgstr "tidak dapat melakukan komit sebagian selama penggabungan."
+
+#: builtin/commit.c:491
+msgid "cannot do a partial commit during a cherry-pick."
+msgstr "tidak dapat melakukan komit sebagian selama pemetikan ceri."
+
+#: builtin/commit.c:493
+msgid "cannot do a partial commit during a rebase."
+msgstr "tidak dapat melakukan komit sebagian selama pendasaran ulang."
+
+#: builtin/commit.c:501
+msgid "cannot read the index"
+msgstr "tidak dapat membaca indeks"
+
+#: builtin/commit.c:520
+msgid "unable to write temporary index file"
+msgstr "tidak dapat menulis berkas indeks sementara"
+
+#: builtin/commit.c:618
+#, c-format
+msgid "commit '%s' lacks author header"
+msgstr "komit '%s' kurang kepala pengarang"
+
+#: builtin/commit.c:620
+#, c-format
+msgid "commit '%s' has malformed author line"
+msgstr "komit '%s' ada baris pengarang cacat"
+
+#: builtin/commit.c:639
+msgid "malformed --author parameter"
+msgstr "parameter --author cacat"
+
+#: builtin/commit.c:692
+msgid ""
+"unable to select a comment character that is not used\n"
+"in the current commit message"
+msgstr ""
+"tidak dapat memilih karakter komentar yang tidak terpakai\n"
+"dalam pesan komit saat ini"
+
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
+#, c-format
+msgid "could not lookup commit %s"
+msgstr "tidak dapat mencari komit %s"
+
+#: builtin/commit.c:758 builtin/shortlog.c:413
+#, c-format
+msgid "(reading log message from standard input)\n"
+msgstr "(baca pesan log dari standar masukan)\n"
+
+#: builtin/commit.c:760
+msgid "could not read log from standard input"
+msgstr "tidak dapat membaca log dari standar masukan"
+
+#: builtin/commit.c:764
+#, c-format
+msgid "could not read log file '%s'"
+msgstr "tidak dapat membaca berkas log '%s'"
+
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "tidak dapat menggabungkan -m dengan --fixup:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
+msgid "could not read SQUASH_MSG"
+msgstr "tidak dapat membaca SQUASH_MSG"
+
+#: builtin/commit.c:820
+msgid "could not read MERGE_MSG"
+msgstr "tidak dapat membaca MERGE_MSG"
+
+#: builtin/commit.c:880
+msgid "could not write commit template"
+msgstr "tidak dapat menulis templat komit"
+
+#: builtin/commit.c:900
+msgid ""
+"\n"
+"It looks like you may be committing a merge.\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d MERGE_HEAD\n"
+"and try again.\n"
+msgstr ""
+"\n"
+"Sepertinya Anda mungkin mengkomit penggabungan.\n"
+"Jika itu salah, mohon jalankan\n"
+"\tgit update-ref -d MERGE_HEAD\n"
+"dan coba lagi.\n"
+
+#: builtin/commit.c:905
+msgid ""
+"\n"
+"It looks like you may be committing a cherry-pick.\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
+"and try again.\n"
+msgstr ""
+"\n"
+"Sepertinya Anda mungkin mengkomit petik ceri.\n"
+"Jika it salah, mohon jalankan\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
+"dan coba lagi.\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 ""
+"Mohon masukkan pesan komit untuk perubahan Anda. Baris yang diawali\n"
+"dengan '%c' akan diabaikan, dan pesan kosong batalkan komit.\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 ""
+"Mohon masukkan pesan komit untuk perubahan Anda. Baris yang diawali\n"
+"dengan '%c' akan tetap; Anda dapat menghapus itu jika Anda mau.\n"
+"Pesan kosong batalkan komit.\n"
+
+#: builtin/commit.c:940
+#, c-format
+msgid "%sAuthor:    %.*s <%.*s>"
+msgstr "%sPengarang:    %.*s <%.*s>"
+
+#: builtin/commit.c:948
+#, c-format
+msgid "%sDate:      %s"
+msgstr "%sTanggal:       %s"
+
+#: builtin/commit.c:955
+#, c-format
+msgid "%sCommitter: %.*s <%.*s>"
+msgstr "%sPengkomit: %.*s <%.*s>"
+
+#: builtin/commit.c:973
+msgid "Cannot read index"
+msgstr "Tidak dapat membaca indeks"
+
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "tidak dapat melewatkan trailer ke --trailers"
+
+#: builtin/commit.c:1058
+msgid "Error building trees"
+msgstr "Kesalahan membangun pohon"
+
+#: builtin/commit.c:1072 builtin/tag.c:319
+#, c-format
+msgid "Please supply the message using either -m or -F option.\n"
+msgstr "Mohon berikan pesan baik dengan opsi -m atau -F.\n"
+
+#: builtin/commit.c:1116
+#, c-format
+msgid "--author '%s' is not 'Name <email>' and matches no existing author"
+msgstr ""
+"--author '%s' bukan 'Nama <email>' dan tidak cocok dengan pengarang yang ada"
+
+#: builtin/commit.c:1130
+#, c-format
+msgid "Invalid ignored mode '%s'"
+msgstr "Mode terabaikan '%s' tidak valid"
+
+#: builtin/commit.c:1148 builtin/commit.c:1441
+#, c-format
+msgid "Invalid untracked files mode '%s'"
+msgstr "Mode berkas tak terlacak '%s' tidak valid"
+
+#: builtin/commit.c:1188
+msgid "--long and -z are incompatible"
+msgstr "--long dan -z tidak kompatibel"
+
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "Anda berada di tengah penggabungan -- tidak dapat menulis ulang."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "Anda berada di tengah pemetikan ceri -- tidak dapat menulis ulang."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr ""
+"tidak dapat menggabungkan opsi penulisan ulang --fixup dengan jalur '%s'"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+
+#: builtin/commit.c:1245
+msgid "Using both --reset-author and --author does not make sense"
+msgstr "Menggunakan baik --reset-author dan --author tidak masuk akal"
+
+#: builtin/commit.c:1254
+msgid "You have nothing to amend."
+msgstr "Anda tidak punya apapun untuk diubah."
+
+#: builtin/commit.c:1257
+msgid "You are in the middle of a merge -- cannot amend."
+msgstr "Anda berada di tengah penggabungan -- tidak dapat mengubah."
+
+#: builtin/commit.c:1259
+msgid "You are in the middle of a cherry-pick -- cannot amend."
+msgstr "Anda berada di tengah pemetikan ceri -- tidak dapat mengubah."
+
+#: builtin/commit.c:1261
+msgid "You are in the middle of a rebase -- cannot amend."
+msgstr "Anda berada di tengah pendasaran ulang -- tidak dapat mengubah."
+
+#: builtin/commit.c:1264
+msgid "Options --squash and --fixup cannot be used together"
+msgstr "Opsi --squash dan --fixup tidak dapat digunakan bersamaan"
+
+#: builtin/commit.c:1274
+msgid "Only one of -c/-C/-F/--fixup can be used."
+msgstr "Hanya salah satu dari -c/-C/-F/--fixup yang dapat digunakan."
+
+#: builtin/commit.c:1276
+msgid "Option -m cannot be combined with -c/-C/-F."
+msgstr "Opsi -m tidak dapat digabung dengan -c/-C/-F."
+
+#: builtin/commit.c:1285
+msgid "--reset-author can be used only with -C, -c or --amend."
+msgstr "--reset-author hanya dapat digunakan dengan -C, -c atau --amend."
+
+#: builtin/commit.c:1303
+msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
+msgstr ""
+"Hanya salah satu dari --include/--only/--all/--interactive/--patch yang "
+"dapat digunakan."
+
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr ""
+
+#: builtin/commit.c:1345
+#, c-format
+msgid "paths '%s ...' with -a does not make sense"
+msgstr "jalur '%s ...' dengan -a tidak masuk akal"
+
+#: builtin/commit.c:1476 builtin/commit.c:1642
+msgid "show status concisely"
+msgstr "perlihatkan status dengan ringkas"
+
+#: builtin/commit.c:1478 builtin/commit.c:1644
+msgid "show branch information"
+msgstr "perlihatkan informasi cabang"
+
+#: builtin/commit.c:1480
+msgid "show stash information"
+msgstr "perlihatkan informasi stase"
+
+#: builtin/commit.c:1482 builtin/commit.c:1646
+msgid "compute full ahead/behind values"
+msgstr "hitung nilai didepan/dibelakang penuh"
+
+#: builtin/commit.c:1484
+msgid "version"
+msgstr "versi"
+
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
+msgid "machine-readable output"
+msgstr "keluaran yang dapat dibaca mesin"
+
+#: builtin/commit.c:1487 builtin/commit.c:1650
+msgid "show status in long format (default)"
+msgstr "perlihatkan status dalam format panjang (asali)"
+
+#: builtin/commit.c:1490 builtin/commit.c:1653
+msgid "terminate entries with NUL"
+msgstr "akhiri entri dengan 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
+msgid "mode"
+msgstr "mode"
+
+#: builtin/commit.c:1493 builtin/commit.c:1656
+msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
+msgstr ""
+"perlihatkan berkas tak terlacak, mode opsional: all, normal, no. (Asali: all)"
+
+#: builtin/commit.c:1497
+msgid ""
+"show ignored files, optional modes: traditional, matching, no. (Default: "
+"traditional)"
+msgstr ""
+"perlihatkan berkas terabaikan, mode opsional: traditional, matching, no. "
+"(Asali: traditional)"
+
+#: builtin/commit.c:1499 parse-options.h:193
+msgid "when"
+msgstr "bila"
+
+#: builtin/commit.c:1500
+msgid ""
+"ignore changes to submodules, optional when: all, dirty, untracked. "
+"(Default: all)"
+msgstr ""
+"abaikan perubahan submodul, bila opsional: all, dirty, untracked. (Asali: "
+"all)"
+
+#: builtin/commit.c:1502
+msgid "list untracked files in columns"
+msgstr "sebut berkas tak terlacak dalam kolom"
+
+#: builtin/commit.c:1503
+msgid "do not detect renames"
+msgstr "jangan deteksi penggantian nama"
+
+#: builtin/commit.c:1505
+msgid "detect renames, optionally set similarity index"
+msgstr "deteksi penggantian nama, setel indeks kemiripan secara opsional"
+
+#: builtin/commit.c:1525
+msgid "Unsupported combination of ignored and untracked-files arguments"
+msgstr "Kombinasi argumen berkas terabaikan dan tak terlacak tidak didukung"
+
+#: builtin/commit.c:1607
+msgid "suppress summary after successful commit"
+msgstr "sembunyikan rangkuman setelah komit berhasil"
+
+#: builtin/commit.c:1608
+msgid "show diff in commit message template"
+msgstr "perlihatkan diff dalam templat pesan komit"
+
+#: builtin/commit.c:1610
+msgid "Commit message options"
+msgstr "Opsi pesan komit"
+
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
+msgid "read message from file"
+msgstr "Baca pesan dari berkas"
+
+#: builtin/commit.c:1612
+msgid "author"
+msgstr "pengarang"
+
+#: builtin/commit.c:1612
+msgid "override author for commit"
+msgstr "timpa pengarang komit"
+
+#: builtin/commit.c:1613 builtin/gc.c:550
+msgid "date"
+msgstr "tangal"
+
+#: builtin/commit.c:1613
+msgid "override date for commit"
+msgstr "timpa tanggal komit"
+
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
+msgid "commit"
+msgstr "komit"
+
+#: builtin/commit.c:1615
+msgid "reuse and edit message from specified commit"
+msgstr "gunakan kembali dan sunting pesan dari komit tersebut"
+
+#: builtin/commit.c:1616
+msgid "reuse message from specified commit"
+msgstr "gunakan kembali pesan dari komit tersebut"
+
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]komit"
+
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr ""
+"gunakan pesan terformat autosquash untuk perbaiki atau ubah/tulis ulang "
+"komit yang disebutkan"
+
+#: builtin/commit.c:1622
+msgid "use autosquash formatted message to squash specified commit"
+msgstr "gunakan pesan terformat autosquash untuk lumat komit tersebut"
+
+#: builtin/commit.c:1623
+msgid "the commit is authored by me now (used with -C/-c/--amend)"
+msgstr "komit sekarang dikarang olehku (gunakan dengan -C/-c/--amend)"
+
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr ""
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr ""
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
+#: builtin/pull.c:145 builtin/revert.c:110
+msgid "add a Signed-off-by trailer"
+msgstr "tambahkan trailer Signed-off-by"
+
+#: builtin/commit.c:1626
+msgid "use specified template file"
+msgstr "gunakan templat berkas tersebut"
+
+#: builtin/commit.c:1627
+msgid "force edit of commit"
+msgstr "paksa sunting komit"
+
+#: builtin/commit.c:1629
+msgid "include status in commit message template"
+msgstr "masukkan status dalam templat pesaan komit"
+
+#: builtin/commit.c:1634
+msgid "Commit contents options"
+msgstr "Opsi isi komit"
+
+#: builtin/commit.c:1635
+msgid "commit all changed files"
+msgstr "komit semua berkas terubah"
+
+#: builtin/commit.c:1636
+msgid "add specified files to index for commit"
+msgstr "tambahakn berkas tersebut ke indeks untuk dikomit"
+
+#: builtin/commit.c:1637
+msgid "interactively add files"
+msgstr "tambah berkas secara interaktif"
+
+#: builtin/commit.c:1638
+msgid "interactively add changes"
+msgstr "tambah perubahan secara interaktif"
+
+#: builtin/commit.c:1639
+msgid "commit only specified files"
+msgstr "hanya komit berkas tersebut"
+
+#: builtin/commit.c:1640
+msgid "bypass pre-commit and commit-msg hooks"
+msgstr "lewati hook pre-commit dan commit-msg"
+
+#: builtin/commit.c:1641
+msgid "show what would be committed"
+msgstr "perlihatkan apa yang akan dikomit"
+
+#: builtin/commit.c:1654
+msgid "amend previous commit"
+msgstr "ubah komit sebelumnya"
+
+#: builtin/commit.c:1655
+msgid "bypass post-rewrite hook"
+msgstr "lewati hook post-rewrite"
+
+#: builtin/commit.c:1662
+msgid "ok to record an empty change"
+msgstr "ok merekam perubahan kosong"
+
+#: builtin/commit.c:1664
+msgid "ok to record a change with an empty message"
+msgstr "ok merekam perubahan dengan pesan kosong"
+
+#: builtin/commit.c:1737
+#, c-format
+msgid "Corrupt MERGE_HEAD file (%s)"
+msgstr "Berkas MERGE_HEAD (%s) rusak"
+
+#: builtin/commit.c:1744
+msgid "could not read MERGE_MODE"
+msgstr "tidak dapat membaca MERGE_MODE"
+
+#: builtin/commit.c:1765
+#, c-format
+msgid "could not read commit message: %s"
+msgstr "tidak dapat membaca pesan komit: %s"
+
+#: builtin/commit.c:1772
+#, c-format
+msgid "Aborting commit due to empty commit message.\n"
+msgstr "Batalkan komit karena pesan komit kosong.\n"
+
+#: builtin/commit.c:1777
+#, c-format
+msgid "Aborting commit; you did not edit the message.\n"
+msgstr "Batalkan komit; Anda tidak menyunting pesan.\n"
+
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "Batalkan komit karena badan pesan komit kosong.\n"
+
+#: builtin/commit.c:1824
+msgid ""
+"repository has been updated, but unable to write\n"
+"new_index file. Check that disk is not full and quota is\n"
+"not exceeded, and then \"git restore --staged :/\" to recover."
+msgstr ""
+"repositori sudah diperbarui, tetapi tidak dapat menulis\n"
+"berkas indeks baru. Periksa bahwa disk tidak penuh dan kuota\n"
+"tidak terlampaui, lalu \"git restore --staged :/\" untuk pulihkan."
+
+#: builtin/config.c:11
+msgid "git config [<options>]"
+msgstr "git config [<opsi>]"
+
+#: builtin/config.c:109 builtin/env--helper.c:27
+#, c-format
+msgid "unrecognized --type argument, %s"
+msgstr "argumen --type tidak dikenal %s"
+
+#: builtin/config.c:121
+msgid "only one type at a time"
+msgstr "hanya satu tipe pada suatu saat"
+
+#: builtin/config.c:130
+msgid "Config file location"
+msgstr "Lokasi berkas konfigurasi"
+
+#: builtin/config.c:131
+msgid "use global config file"
+msgstr "gunakan berkas konfigurasi global"
+
+#: builtin/config.c:132
+msgid "use system config file"
+msgstr "gunakan berkas konfigurasi sistem"
+
+#: builtin/config.c:133
+msgid "use repository config file"
+msgstr "gunakan berkas konfigurasi repositori"
+
+#: builtin/config.c:134
+msgid "use per-worktree config file"
+msgstr "gunakan berkas konfigurasi per pohon kerja"
+
+#: builtin/config.c:135
+msgid "use given config file"
+msgstr "gunakan berkas konfigurasi yang diberikan"
+
+#: builtin/config.c:136
+msgid "blob-id"
+msgstr "id blob"
+
+#: builtin/config.c:136
+msgid "read config from given blob object"
+msgstr "baca konfigurasi dari objek blob yang diberikan"
+
+#: builtin/config.c:137
+msgid "Action"
+msgstr "Tindakan"
+
+#: builtin/config.c:138
+msgid "get value: name [value-pattern]"
+msgstr "dapatkan nilai: name [pola nilai]"
+
+#: builtin/config.c:139
+msgid "get all values: key [value-pattern]"
+msgstr "dapatkan semua nilai: key [pola nilai]"
+
+#: builtin/config.c:140
+msgid "get values for regexp: name-regex [value-pattern]"
+msgstr "dapatkan nilai dari regexp: name-regex [pola nilai]"
+
+#: builtin/config.c:141
+msgid "get value specific for the URL: section[.var] URL"
+msgstr "dapatkan nilai spesifik untuk URL: section[.var] URL"
+
+#: builtin/config.c:142
+msgid "replace all matching variables: name value [value-pattern]"
+msgstr "ganti semua variabel yang cocok: name value [pola nilai]"
+
+#: builtin/config.c:143
+msgid "add a new variable: name value"
+msgstr "tambahkan variabel baru: name value"
+
+#: builtin/config.c:144
+msgid "remove a variable: name [value-pattern]"
+msgstr "hapus variabel: name [pola nilai]"
+
+#: builtin/config.c:145
+msgid "remove all matches: name [value-pattern]"
+msgstr "hapus semua cocokan: name [pola nilai]"
+
+#: builtin/config.c:146
+msgid "rename section: old-name new-name"
+msgstr "ganti nama bagian: old-name new-name"
+
+#: builtin/config.c:147
+msgid "remove a section: name"
+msgstr "hapus bagian: name"
+
+#: builtin/config.c:148
+msgid "list all"
+msgstr "daftar semua"
+
+#: builtin/config.c:149
+msgid "use string equality when comparing values to 'value-pattern'"
+msgstr "gunakan kesamaan untai ketika membandingkan nilai ke 'pola nilai'"
+
+#: builtin/config.c:150
+msgid "open an editor"
+msgstr "buka penyunting"
+
+#: builtin/config.c:151
+msgid "find the color configured: slot [default]"
+msgstr "temukan warna terkonfigurasi: slot [asali]"
+
+#: builtin/config.c:152
+msgid "find the color setting: slot [stdout-is-tty]"
+msgstr "temukan setelan warna: slot [stdout-is-tty]"
+
+#: builtin/config.c:153
+msgid "Type"
+msgstr "Tipe"
+
+#: builtin/config.c:154 builtin/env--helper.c:43
+msgid "value is given this type"
+msgstr "Nilai diberikan tipe ini"
+
+#: builtin/config.c:155
+msgid "value is \"true\" or \"false\""
+msgstr "Nilai adala \"true\" atau \"false\""
+
+#: builtin/config.c:156
+msgid "value is decimal number"
+msgstr "nilai adalah angka desimal"
+
+#: builtin/config.c:157
+msgid "value is --bool or --int"
+msgstr "nilai adalah --bool atau --int"
+
+#: builtin/config.c:158
+msgid "value is --bool or string"
+msgstr "nilai adalah --bool atau untai"
+
+#: builtin/config.c:159
+msgid "value is a path (file or directory name)"
+msgstr "nilai adalah jalur (nama berkas atau direktori)"
+
+#: builtin/config.c:160
+msgid "value is an expiry date"
+msgstr "nilai adalah tanggal kadaluarsa"
+
+#: builtin/config.c:161
+msgid "Other"
+msgstr "Lainnya"
+
+#: builtin/config.c:162
+msgid "terminate values with NUL byte"
+msgstr "Akhiri nilai dengan bita NUL"
+
+#: builtin/config.c:163
+msgid "show variable names only"
+msgstr "perlihatkan hanya nama variabel"
+
+#: builtin/config.c:164
+msgid "respect include directives on lookup"
+msgstr "segani arahan masukkan pada pencarian"
+
+#: builtin/config.c:165
+msgid "show origin of config (file, standard input, blob, command line)"
+msgstr ""
+"perlihatkan asal konfigurasi (berkas, masukan standar, blob, baris perintah)"
+
+#: builtin/config.c:166
+msgid "show scope of config (worktree, local, global, system, command)"
+msgstr ""
+"perlihatkan cakupan konfigurasi (pohon kerja, lokal, global, sistem, "
+"perintah)"
+
+#: builtin/config.c:167 builtin/env--helper.c:45
+msgid "value"
+msgstr "nilai"
+
+#: builtin/config.c:167
+msgid "with --get, use default value when missing entry"
+msgstr "dengan --get, gunakan nilai asali ketika kehilangan entri"
+
+#: builtin/config.c:181
+#, c-format
+msgid "wrong number of arguments, should be %d"
+msgstr "jumlah argumen salah, seharusnya %d"
+
+#: builtin/config.c:183
+#, c-format
+msgid "wrong number of arguments, should be from %d to %d"
+msgstr "jumlah argumen salah, seharusnya dari %d ke %d"
+
+#: builtin/config.c:339
+#, c-format
+msgid "invalid key pattern: %s"
+msgstr "pola kunci tidak valid: %s"
+
+#: builtin/config.c:377
+#, c-format
+msgid "failed to format default config value: %s"
+msgstr "gagal memformat nilai konfigurasi asali: %s"
+
+#: builtin/config.c:441
+#, c-format
+msgid "cannot parse color '%s'"
+msgstr "tidak dapat menguraikan warna '%s'"
+
+#: builtin/config.c:483
+msgid "unable to parse default color value"
+msgstr "tidak dapat menguraikan nilai warna asali"
+
+#: builtin/config.c:536 builtin/config.c:833
+msgid "not in a git directory"
+msgstr "bukan di dalam direktori git"
+
+#: builtin/config.c:539
+msgid "writing to stdin is not supported"
+msgstr "menulis ke stdin tidak didukung"
+
+#: builtin/config.c:542
+msgid "writing config blobs is not supported"
+msgstr "menulis blob konfigurasi tidak didukung"
+
+#: builtin/config.c:627
+#, c-format
+msgid ""
+"# This is Git's per-user configuration file.\n"
+"[user]\n"
+"# Please adapt and uncomment the following lines:\n"
+"#\tname = %s\n"
+"#\temail = %s\n"
+msgstr ""
+"# Ini adalah berkas konfigurasi Git per pengguna.\n"
+"[user]\n"
+"# Mohon sesuaikan dan batal komen baris berikut:\n"
+"#\tname = %s\n"
+"#\temail = %s\n"
+
+#: builtin/config.c:652
+msgid "only one config file at a time"
+msgstr "hanya satu berkas konfigurasi pada suatu saat"
+
+#: builtin/config.c:658
+msgid "--local can only be used inside a git repository"
+msgstr "--local hanya dapat digunakan di dalam repositori git"
+
+#: builtin/config.c:660
+msgid "--blob can only be used inside a git repository"
+msgstr "--blob hanya dapat digunakan di dalam repositori git"
+
+#: builtin/config.c:662
+msgid "--worktree can only be used inside a git repository"
+msgstr "--worktree hanya dapat digunakan di dalam repositori git"
+
+#: builtin/config.c:684
+msgid "$HOME not set"
+msgstr "$HOME tak disetel"
+
+#: builtin/config.c:708
+msgid ""
+"--worktree cannot be used with multiple working trees unless the config\n"
+"extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
+"section in \"git help worktree\" for details"
+msgstr ""
+"--worktree tidak dapat digunakan dengan banyak pohon kerja kecuali\n"
+"konfigurasi ekstensi worktreeConfig diaktifkan. Mohon baca bagian\n"
+"\"CONFIGURATION FILE\" di \"git help worktree\" untuk selengkapnya"
+
+#: builtin/config.c:743
+msgid "--get-color and variable type are incoherent"
+msgstr "--get-color dan tipe variabel raban"
+
+#: builtin/config.c:748
+msgid "only one action at a time"
+msgstr "hanya satu tindakan pada suatu saat"
+
+#: builtin/config.c:761
+msgid "--name-only is only applicable to --list or --get-regexp"
+msgstr "--name-only hanya dapat diterapkan pada --list atau --get-regexp"
+
+#: builtin/config.c:767
+msgid ""
+"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
+"list"
+msgstr ""
+"--show-origin hanya dapat diterapkan pada --get, --get-all, --get-regexp, "
+"dan --list"
+
+#: builtin/config.c:773
+msgid "--default is only applicable to --get"
+msgstr "--default hanya dapat diterapkan pada --get"
+
+#: builtin/config.c:806
+msgid "--fixed-value only applies with 'value-pattern'"
+msgstr "--fixed-value hanya diterapkan dengan 'pola nilai'"
+
+#: builtin/config.c:822
+#, c-format
+msgid "unable to read config file '%s'"
+msgstr "tidak dapat membaca berkas konfigurasi '%s'"
+
+#: builtin/config.c:825
+msgid "error processing config file(s)"
+msgstr "kesalahan memproses berkas konfigurasi"
+
+#: builtin/config.c:835
+msgid "editing stdin is not supported"
+msgstr "menyunting stdin tidak didukung"
+
+#: builtin/config.c:837
+msgid "editing blobs is not supported"
+msgstr "menyunting blob tidak didukung"
+
+#: builtin/config.c:851
+#, c-format
+msgid "cannot create configuration file %s"
+msgstr "tidak dapat membuat berkas konfigurasi %s"
+
+#: builtin/config.c:864
+#, c-format
+msgid ""
+"cannot overwrite multiple values with a single value\n"
+"       Use a regexp, --add or --replace-all to change %s."
+msgstr ""
+"tidak dapat menimpa banyak nilai dengan nilai tunggal\n"
+"       Gunakan regexp, --add atau --replace-all untuk mengubah %s."
+
+#: builtin/config.c:943 builtin/config.c:954
+#, c-format
+msgid "no such section: %s"
+msgstr "tidak ada bagian seperti: %s"
+
+#: builtin/count-objects.c:90
+msgid "git count-objects [-v] [-H | --human-readable]"
+msgstr ""
+
+#: builtin/count-objects.c:100
+msgid "print sizes in human readable format"
+msgstr ""
+
+#: builtin/credential-cache--daemon.c:227
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr ""
+
+#: builtin/credential-cache--daemon.c:276
+msgid "print debugging messages to stderr"
+msgstr ""
+
+#: builtin/credential-cache--daemon.c:316
+msgid "credential-cache--daemon unavailable; no unix socket support"
+msgstr ""
+
+#: builtin/credential-cache.c:154
+msgid "credential-cache unavailable; no unix socket support"
+msgstr ""
+
+#: builtin/credential-store.c:66
+#, c-format
+msgid "unable to get credential storage lock in %d ms"
+msgstr ""
+
+#: builtin/describe.c:26
+msgid "git describe [<options>] [<commit-ish>...]"
+msgstr ""
+
+#: builtin/describe.c:27
+msgid "git describe [<options>] --dirty"
+msgstr ""
+
+#: builtin/describe.c:63
+msgid "head"
+msgstr ""
+
+#: builtin/describe.c:63
+msgid "lightweight"
+msgstr ""
+
+#: builtin/describe.c:63
+msgid "annotated"
+msgstr ""
+
+#: builtin/describe.c:277
+#, c-format
+msgid "annotated tag %s not available"
+msgstr ""
+
+#: builtin/describe.c:281
+#, c-format
+msgid "tag '%s' is externally known as '%s'"
+msgstr ""
+
+#: builtin/describe.c:328
+#, c-format
+msgid "no tag exactly matches '%s'"
+msgstr ""
+
+#: builtin/describe.c:330
+#, c-format
+msgid "No exact match on refs or tags, searching to describe\n"
+msgstr ""
+
+#: builtin/describe.c:397
+#, c-format
+msgid "finished search at %s\n"
+msgstr ""
+
+#: builtin/describe.c:424
+#, c-format
+msgid ""
+"No annotated tags can describe '%s'.\n"
+"However, there were unannotated tags: try --tags."
+msgstr ""
+
+#: builtin/describe.c:428
+#, c-format
+msgid ""
+"No tags can describe '%s'.\n"
+"Try --always, or create some tags."
+msgstr ""
+
+#: builtin/describe.c:458
+#, c-format
+msgid "traversed %lu commits\n"
+msgstr ""
+
+#: builtin/describe.c:461
+#, c-format
+msgid ""
+"more than %i tags found; listed %i most recent\n"
+"gave up search at %s\n"
+msgstr ""
+
+#: builtin/describe.c:529
+#, c-format
+msgid "describe %s\n"
+msgstr ""
+
+#: builtin/describe.c:532
+#, c-format
+msgid "Not a valid object name %s"
+msgstr ""
+
+#: builtin/describe.c:540
+#, c-format
+msgid "%s is neither a commit nor blob"
+msgstr ""
+
+#: builtin/describe.c:554
+msgid "find the tag that comes after the commit"
+msgstr ""
+
+#: builtin/describe.c:555
+msgid "debug search strategy on stderr"
+msgstr ""
+
+#: builtin/describe.c:556
+msgid "use any ref"
+msgstr ""
+
+#: builtin/describe.c:557
+msgid "use any tag, even unannotated"
+msgstr ""
+
+#: builtin/describe.c:558
+msgid "always use long format"
+msgstr ""
+
+#: builtin/describe.c:559
+msgid "only follow first parent"
+msgstr ""
+
+#: builtin/describe.c:562
+msgid "only output exact matches"
+msgstr ""
+
+#: builtin/describe.c:564
+msgid "consider <n> most recent tags (default: 10)"
+msgstr ""
+
+#: builtin/describe.c:566
+msgid "only consider tags matching <pattern>"
+msgstr ""
+
+#: builtin/describe.c:568
+msgid "do not consider tags matching <pattern>"
+msgstr ""
+
+#: builtin/describe.c:570 builtin/name-rev.c:535
+msgid "show abbreviated commit object as fallback"
+msgstr ""
+
+#: builtin/describe.c:571 builtin/describe.c:574
+msgid "mark"
+msgstr ""
+
+#: builtin/describe.c:572
+msgid "append <mark> on dirty working tree (default: \"-dirty\")"
+msgstr ""
+
+#: builtin/describe.c:575
+msgid "append <mark> on broken working tree (default: \"-broken\")"
+msgstr ""
+
+#: builtin/describe.c:593
+msgid "--long is incompatible with --abbrev=0"
+msgstr ""
+
+#: builtin/describe.c:622
+msgid "No names found, cannot describe anything."
+msgstr ""
+
+#: builtin/describe.c:673
+msgid "--dirty is incompatible with commit-ishes"
+msgstr ""
+
+#: builtin/describe.c:675
+msgid "--broken is incompatible with commit-ishes"
+msgstr ""
+
+#: builtin/diff-tree.c:155
+msgid "--stdin and --merge-base are mutually exclusive"
+msgstr ""
+
+#: builtin/diff-tree.c:157
+msgid "--merge-base only works with two commits"
+msgstr ""
+
+#: builtin/diff.c:92
+#, c-format
+msgid "'%s': not a regular file or symlink"
+msgstr ""
+
+#: builtin/diff.c:259
+#, c-format
+msgid "invalid option: %s"
+msgstr ""
+
+#: builtin/diff.c:376
+#, c-format
+msgid "%s...%s: no merge base"
+msgstr ""
+
+#: builtin/diff.c:486
+msgid "Not a git repository"
+msgstr ""
+
+#: builtin/diff.c:532 builtin/grep.c:684
+#, c-format
+msgid "invalid object '%s' given."
+msgstr ""
+
+#: builtin/diff.c:543
+#, c-format
+msgid "more than two blobs given: '%s'"
+msgstr ""
+
+#: builtin/diff.c:548
+#, c-format
+msgid "unhandled object '%s' given."
+msgstr ""
+
+#: builtin/diff.c:582
+#, c-format
+msgid "%s...%s: multiple merge bases, using %s"
+msgstr ""
+
+#: builtin/difftool.c:31
+msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
+msgstr ""
+
+#: builtin/difftool.c:261
+#, c-format
+msgid "failed: %d"
+msgstr ""
+
+#: builtin/difftool.c:303
+#, c-format
+msgid "could not read symlink %s"
+msgstr ""
+
+#: builtin/difftool.c:305
+#, c-format
+msgid "could not read symlink file %s"
+msgstr ""
+
+#: builtin/difftool.c:313
+#, c-format
+msgid "could not read object %s for symlink %s"
+msgstr ""
+
+#: builtin/difftool.c:413
+msgid ""
+"combined diff formats('-c' and '--cc') are not supported in\n"
+"directory diff mode('-d' and '--dir-diff')."
+msgstr ""
+
+#: builtin/difftool.c:637
+#, c-format
+msgid "both files modified: '%s' and '%s'."
+msgstr ""
+
+#: builtin/difftool.c:639
+msgid "working tree file has been left."
+msgstr ""
+
+#: builtin/difftool.c:650
+#, c-format
+msgid "temporary files exist in '%s'."
+msgstr ""
+
+#: builtin/difftool.c:651
+msgid "you may want to cleanup or recover these."
+msgstr ""
+
+#: builtin/difftool.c:700
+msgid "use `diff.guitool` instead of `diff.tool`"
+msgstr ""
+
+#: builtin/difftool.c:702
+msgid "perform a full-directory diff"
+msgstr ""
+
+#: builtin/difftool.c:704
+msgid "do not prompt before launching a diff tool"
+msgstr ""
+
+#: builtin/difftool.c:709
+msgid "use symlinks in dir-diff mode"
+msgstr ""
+
+#: builtin/difftool.c:710
+msgid "tool"
+msgstr ""
+
+#: builtin/difftool.c:711
+msgid "use the specified diff tool"
+msgstr ""
+
+#: builtin/difftool.c:713
+msgid "print a list of diff tools that may be used with `--tool`"
+msgstr ""
+
+#: builtin/difftool.c:716
+msgid ""
+"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
+"code"
+msgstr ""
+
+#: builtin/difftool.c:719
+msgid "specify a custom command for viewing diffs"
+msgstr ""
+
+#: builtin/difftool.c:720
+msgid "passed to `diff`"
+msgstr ""
+
+#: builtin/difftool.c:735
+msgid "difftool requires worktree or --no-index"
+msgstr ""
+
+#: builtin/difftool.c:742
+msgid "--dir-diff is incompatible with --no-index"
+msgstr ""
+
+#: builtin/difftool.c:745
+msgid "--gui, --tool and --extcmd are mutually exclusive"
+msgstr ""
+
+#: builtin/difftool.c:753
+msgid "no <tool> given for --tool=<tool>"
+msgstr ""
+
+#: builtin/difftool.c:760
+msgid "no <cmd> given for --extcmd=<cmd>"
+msgstr ""
+
+#: builtin/env--helper.c:6
+msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
+msgstr ""
+
+#: builtin/env--helper.c:42 builtin/hash-object.c:98
+msgid "type"
+msgstr ""
+
+#: builtin/env--helper.c:46
+msgid "default for git_env_*(...) to fall back on"
+msgstr ""
+
+#: builtin/env--helper.c:48
+msgid "be quiet only use git_env_*() value as exit code"
+msgstr ""
+
+#: builtin/env--helper.c:67
+#, c-format
+msgid "option `--default' expects a boolean value with `--type=bool`, not `%s`"
+msgstr ""
+
+#: builtin/env--helper.c:82
+#, c-format
+msgid ""
+"option `--default' expects an unsigned long value with `--type=ulong`, not `"
+"%s`"
+msgstr ""
+
+#: builtin/fast-export.c:29
+msgid "git fast-export [rev-list-opts]"
+msgstr ""
+
+#: builtin/fast-export.c:868
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+
+#: builtin/fast-export.c:1177
+msgid "--anonymize-map token cannot be empty"
+msgstr ""
+
+#: builtin/fast-export.c:1197
+msgid "show progress after <n> objects"
+msgstr ""
+
+#: builtin/fast-export.c:1199
+msgid "select handling of signed tags"
+msgstr ""
+
+#: builtin/fast-export.c:1202
+msgid "select handling of tags that tag filtered objects"
+msgstr ""
+
+#: builtin/fast-export.c:1205
+msgid "select handling of commit messages in an alternate encoding"
+msgstr ""
+
+#: builtin/fast-export.c:1208
+msgid "dump marks to this file"
+msgstr ""
+
+#: builtin/fast-export.c:1210
+msgid "import marks from this file"
+msgstr ""
+
+#: builtin/fast-export.c:1214
+msgid "import marks from this file if it exists"
+msgstr ""
+
+#: builtin/fast-export.c:1216
+msgid "fake a tagger when tags lack one"
+msgstr ""
+
+#: builtin/fast-export.c:1218
+msgid "output full tree for each commit"
+msgstr ""
+
+#: builtin/fast-export.c:1220
+msgid "use the done feature to terminate the stream"
+msgstr ""
+
+#: builtin/fast-export.c:1221
+msgid "skip output of blob data"
+msgstr ""
+
+#: builtin/fast-export.c:1222 builtin/log.c:1823
+msgid "refspec"
+msgstr ""
+
+#: builtin/fast-export.c:1223
+msgid "apply refspec to exported refs"
+msgstr ""
+
+#: builtin/fast-export.c:1224
+msgid "anonymize output"
+msgstr ""
+
+#: builtin/fast-export.c:1225
+msgid "from:to"
+msgstr ""
+
+#: builtin/fast-export.c:1226
+msgid "convert <from> to <to> in anonymized output"
+msgstr ""
+
+#: builtin/fast-export.c:1229
+msgid "reference parents which are not in fast-export stream by object id"
+msgstr ""
+
+#: builtin/fast-export.c:1231
+msgid "show original object ids of blobs/commits"
+msgstr ""
+
+#: builtin/fast-export.c:1233
+msgid "label tags with mark ids"
+msgstr ""
+
+#: builtin/fast-export.c:1256
+msgid "--anonymize-map without --anonymize does not make sense"
+msgstr ""
+
+#: builtin/fast-export.c:1271
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr ""
+
+#: builtin/fast-import.c:3088
+#, c-format
+msgid "Missing from marks for submodule '%s'"
+msgstr ""
+
+#: builtin/fast-import.c:3090
+#, c-format
+msgid "Missing to marks for submodule '%s'"
+msgstr ""
+
+#: builtin/fast-import.c:3225
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr ""
+
+#: builtin/fast-import.c:3230
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr ""
+
+#: builtin/fast-import.c:3322
+msgid "Expected format name:filename for submodule rewrite option"
+msgstr ""
+
+#: builtin/fast-import.c:3377
+#, c-format
+msgid "feature '%s' forbidden in input without --allow-unsafe-features"
+msgstr ""
+
+#: builtin/fetch-pack.c:242
+#, c-format
+msgid "Lockfile created but not reported: %s"
+msgstr ""
+
+#: builtin/fetch.c:35
+msgid "git fetch [<options>] [<repository> [<refspec>...]]"
+msgstr "git fetch [<opsi>] [<repositori> [<spek referensi>...]]"
+
+#: builtin/fetch.c:36
+msgid "git fetch [<options>] <group>"
+msgstr "git fetch [<opsi>] <grup>"
+
+#: builtin/fetch.c:37
+msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
+msgstr "git fetch --multiple [<opsi>] [(<repositori> | <grup>)]"
+
+#: builtin/fetch.c:38
+msgid "git fetch --all [<options>]"
+msgstr "git fetch --all [<opsi>]"
+
+#: builtin/fetch.c:122
+msgid "fetch.parallel cannot be negative"
+msgstr "fetch.parallel tidak dapat bernilai negatif"
+
+#: builtin/fetch.c:145 builtin/pull.c:185
+msgid "fetch from all remotes"
+msgstr "ambil dari semua remote"
+
+#: builtin/fetch.c:147 builtin/pull.c:245
+msgid "set upstream for git pull/fetch"
+msgstr "setel hulu untuk git pull/fetch"
+
+#: builtin/fetch.c:149 builtin/pull.c:188
+msgid "append to .git/FETCH_HEAD instead of overwriting"
+msgstr "tambah ke .git/FETCH_HEAD daripada timpa"
+
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr ""
+
+#: builtin/fetch.c:153 builtin/pull.c:191
+msgid "path to upload pack on remote end"
+msgstr "jalur ke paket unggah pada sisi remote"
+
+#: builtin/fetch.c:154
+msgid "force overwrite of local reference"
+msgstr "paksa timpa referensi lokal"
+
+#: builtin/fetch.c:156
+msgid "fetch from multiple remotes"
+msgstr "ambil dari banyak remote"
+
+#: builtin/fetch.c:158 builtin/pull.c:195
+msgid "fetch all tags and associated objects"
+msgstr "ambil semua tag dan objek yang bersesuaian"
+
+#: builtin/fetch.c:160
+msgid "do not fetch all tags (--no-tags)"
+msgstr "jangan ambil semua tag (--no-tags)"
+
+#: builtin/fetch.c:162
+msgid "number of submodules fetched in parallel"
+msgstr "jumlah submodul yang diambil secara bersamaan"
+
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+
+#: builtin/fetch.c:166 builtin/pull.c:198
+msgid "prune remote-tracking branches no longer on remote"
+msgstr "buang cabang pelacak remote yang tidak ada pada remote"
+
+#: builtin/fetch.c:168
+msgid "prune local tags no longer on remote and clobber changed tags"
+msgstr "buang tag lokal yang tidak ada pada remote dan klob tag yang berubah"
+
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
+msgid "on-demand"
+msgstr "sesuai permintaan"
+
+#: builtin/fetch.c:170
+msgid "control recursive fetching of submodules"
+msgstr "kontrol pengambilan submodul rekursif"
+
+#: builtin/fetch.c:175
+msgid "write fetched references to the FETCH_HEAD file"
+msgstr "tulis referensi yang diambil ke berkas FETCH_HEAD"
+
+#: builtin/fetch.c:176 builtin/pull.c:206
+msgid "keep downloaded pack"
+msgstr "simpan paket yang diunduh"
+
+#: builtin/fetch.c:178
+msgid "allow updating of HEAD ref"
+msgstr "bolehkan perbarui referensi HEAD"
+
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
+#: builtin/pull.c:218
+msgid "deepen history of shallow clone"
+msgstr "perdalam riwayat klon dangkal"
+
+#: builtin/fetch.c:183 builtin/pull.c:212
+msgid "deepen history of shallow repository based on time"
+msgstr "perdalam riwayat repositori dangkal berdasarkan waktu"
+
+#: builtin/fetch.c:189 builtin/pull.c:221
+msgid "convert to a complete repository"
+msgstr "ubah ke repositori penuh"
+
+#: builtin/fetch.c:192
+msgid "prepend this to submodule path output"
+msgstr "tambahkan ini ke jalur keluaran submodul"
+
+#: builtin/fetch.c:195
+msgid ""
+"default for recursive fetching of submodules (lower priority than config "
+"files)"
+msgstr ""
+"default untuk ambil submodul secara rekursif (prioritas lebih rendah "
+"dariberkas konfigurasi)"
+
+#: builtin/fetch.c:199 builtin/pull.c:224
+msgid "accept refs that update .git/shallow"
+msgstr "terima referensi yang memperbarui .git/shallow"
+
+#: builtin/fetch.c:200 builtin/pull.c:226
+msgid "refmap"
+msgstr "peta referensi"
+
+#: builtin/fetch.c:201 builtin/pull.c:227
+msgid "specify fetch refmap"
+msgstr "sebutkan ambil peta referensi"
+
+#: builtin/fetch.c:208 builtin/pull.c:240
+msgid "report that we have only objects reachable from this object"
+msgstr ""
+"laporkan bahwa kami hanya punya object yang bisa dicapai dari objek ini"
+
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
+msgid "run 'maintenance --auto' after fetching"
+msgstr "lakukan 'maintenance --auto' setelah pengambilan"
+
+#: builtin/fetch.c:217 builtin/pull.c:243
+msgid "check for forced-updates on all updated branches"
+msgstr "periksa pembaruan terpaksa pada semua cabang"
+
+#: builtin/fetch.c:219
+msgid "write the commit-graph after fetching"
+msgstr "tulis grafik komit setelah pengambilan"
+
+#: builtin/fetch.c:221
+msgid "accept refspecs from stdin"
+msgstr "terima spek referensi dari masukan standar"
+
+#: builtin/fetch.c:586
+msgid "Couldn't find remote ref HEAD"
+msgstr "tidak dapat menemukan referensi remote HEAD"
+
+#: builtin/fetch.c:757
+#, c-format
+msgid "configuration fetch.output contains invalid value %s"
+msgstr "konfigurasi fetch.output berisi nilai tidak valid %s"
+
+#: builtin/fetch.c:856
+#, c-format
+msgid "object %s not found"
+msgstr "objek %s tidak ditemukan"
+
+#: builtin/fetch.c:860
+msgid "[up to date]"
+msgstr "[terkini]"
+
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
+msgid "[rejected]"
+msgstr "[tertolak]"
+
+#: builtin/fetch.c:874
+msgid "can't fetch in current branch"
+msgstr "tidak dapat mengambil di cabang saat ini"
+
+#: builtin/fetch.c:884
+msgid "[tag update]"
+msgstr "[pembaruan tag]"
+
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
+msgid "unable to update local ref"
+msgstr "tidak dapat memperbarui referensi lokal"
+
+#: builtin/fetch.c:889
+msgid "would clobber existing tag"
+msgstr "akan klob tag yang ada"
+
+#: builtin/fetch.c:911
+msgid "[new tag]"
+msgstr "[tag baru]"
+
+#: builtin/fetch.c:914
+msgid "[new branch]"
+msgstr "[cabang baru]"
+
+#: builtin/fetch.c:917
+msgid "[new ref]"
+msgstr "[referensi baru]"
+
+#: builtin/fetch.c:956
+msgid "forced update"
+msgstr "pembaruan terpaksa"
+
+#: builtin/fetch.c:961
+msgid "non-fast-forward"
+msgstr "bukan-maju-cepat"
+
+#: builtin/fetch.c:1065
+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 ""
+"Ambil secara normal mengindikasikan cabang mana ada pembaruan terpaksa,\n"
+"tapi pemeriksaan tersebut dinonaktifkan. Untuk aktifkan kembali, gunakan\n"
+"'--show-forced-updates' atau jalankan 'git config fetch.showForcedUpdates "
+"true'."
+
+#: builtin/fetch.c:1069
+#, c-format
+msgid ""
+"It took %.2f seconds to check forced updates. You can use\n"
+"'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates "
+"false'\n"
+" to avoid this check.\n"
+msgstr ""
+"Butuh waktu %2.f detik untuk periksa pembaruan terpaksa. Anda dapat\n"
+"menggunakan '--no-show-forced-updates' atau jalankan\n"
+"'git config fetch.showForcedUpdates false'\n"
+" untuk menghindari pemeriksaan ini.\n"
+
+#: builtin/fetch.c:1101
+#, c-format
+msgid "%s did not send all necessary objects\n"
+msgstr "%s tidak mengirim semua objek yang diperlukan\n"
+
+#: builtin/fetch.c:1129
+#, c-format
+msgid "reject %s because shallow roots are not allowed to be updated"
+msgstr "tolak %s karena akar dangkal tidak diperkenankan untuk diperbarui"
+
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
+#, c-format
+msgid "From %.*s\n"
+msgstr "Dari %.*s\n"
+
+#: builtin/fetch.c:1228
+#, c-format
+msgid ""
+"some local refs could not be updated; try running\n"
+" 'git remote prune %s' to remove any old, conflicting branches"
+msgstr ""
+"beberapa referensi lokal tidak dapat diperbarui; coba jalankan\n"
+" 'git remote prune %s' untuk hapus cabang yang lama dan berkonflik"
+
+#: builtin/fetch.c:1327
+#, c-format
+msgid "   (%s will become dangling)"
+msgstr "   (%s akan menjadi terjuntai)"
+
+#: builtin/fetch.c:1328
+#, c-format
+msgid "   (%s has become dangling)"
+msgstr "   (%s telah menjadi terjuntai)"
+
+#: builtin/fetch.c:1360
+msgid "[deleted]"
+msgstr "[dihapus]"
+
+#: builtin/fetch.c:1361 builtin/remote.c:1118
+msgid "(none)"
+msgstr "(tidak ada)"
+
+#: builtin/fetch.c:1384
+#, c-format
+msgid "Refusing to fetch into current branch %s of non-bare repository"
+msgstr "Tolak mengambil ke cabang saat ini %s dari repositori non-bare"
+
+#: builtin/fetch.c:1403
+#, c-format
+msgid "Option \"%s\" value \"%s\" is not valid for %s"
+msgstr "Opsi \"%s\" nilai \"%s\" tidak valid untuk %s"
+
+#: builtin/fetch.c:1406
+#, c-format
+msgid "Option \"%s\" is ignored for %s\n"
+msgstr "Opsi \"%s\" diabaikan untuk %s\n"
+
+#: builtin/fetch.c:1618
+msgid "multiple branches detected, incompatible with --set-upstream"
+msgstr "banyak cabang terdeteksi, tidak kompatibel dengan --set-upstream"
+
+#: builtin/fetch.c:1633
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr "tidak setel hulu untuk cabang remote pelacak remote"
+
+#: builtin/fetch.c:1635
+msgid "not setting upstream for a remote tag"
+msgstr "tidak setel hulu untuk tag remote"
+
+#: builtin/fetch.c:1637
+msgid "unknown branch type"
+msgstr "tipe cabang tidak diketahui"
+
+#: builtin/fetch.c:1639
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+"cabang sumber tidak ditemukan.\n"
+"Anda harus sebutkan tepat satu cabang dengan opsi --set-upstream."
+
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
+#, c-format
+msgid "Fetching %s\n"
+msgstr "Mengambil %s\n"
+
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
+#, c-format
+msgid "Could not fetch %s"
+msgstr "Tidak dapat mengambil %s"
+
+#: builtin/fetch.c:1790
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
+msgstr "tidak dapat mengambil '%s' (kode keluar: %d)\n"
+
+#: builtin/fetch.c:1894
+msgid ""
+"No remote repository specified.  Please, specify either a URL or a\n"
+"remote name from which new revisions should be fetched."
+msgstr ""
+"Repositori remot tidak disebutkan. Mohon sebutkan baik URL atau nama\n"
+"cabang yang mana revisi baru sebaiknya diambil."
+
+#: builtin/fetch.c:1930
+msgid "You need to specify a tag name."
+msgstr "Anda perlu sebutkan nama tag"
+
+#: builtin/fetch.c:1995
+msgid "Negative depth in --deepen is not supported"
+msgstr "Kedalaman negatif di --deepen tidak didukung"
+
+#: builtin/fetch.c:1997
+msgid "--deepen and --depth are mutually exclusive"
+msgstr "--deepen dan --depth saling eksklusif"
+
+#: builtin/fetch.c:2002
+msgid "--depth and --unshallow cannot be used together"
+msgstr "--depth dan --unshallow tidak dapat digunakan bersamaan"
+
+#: builtin/fetch.c:2004
+msgid "--unshallow on a complete repository does not make sense"
+msgstr "--unshallow pada repositori penuh tidak masuk akal"
+
+#: builtin/fetch.c:2021
+msgid "fetch --all does not take a repository argument"
+msgstr "fetch --all tidak mengambil argumen repositori"
+
+#: builtin/fetch.c:2023
+msgid "fetch --all does not make sense with refspecs"
+msgstr "fetch --all tidak masuk akal dengan spek referensi"
+
+#: builtin/fetch.c:2032
+#, c-format
+msgid "No such remote or remote group: %s"
+msgstr "tidak ada remote atau grup remote seperti itu: %s"
+
+#: builtin/fetch.c:2039
+msgid "Fetching a group and specifying refspecs does not make sense"
+msgstr "Ambil grup dan sebutkan spek referensi tidak masuk akal"
+
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr ""
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr ""
+
+#: builtin/fetch.c:2079
+msgid ""
+"--filter can only be used with the remote configured in extensions."
+"partialclone"
+msgstr ""
+"--filter hanya dapat digunakan dengan remote yang terkonfigurasi di "
+"extensions.partialclone"
+
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic hanya dapat digunakan saat mengambil dari satu remote"
+
+#: builtin/fetch.c:2087
+msgid "--stdin can only be used when fetching from one remote"
+msgstr "--stdin hanya dapat digunakan saat mengambil dari satu remote"
+
+#: builtin/fmt-merge-msg.c:7
+msgid ""
+"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:18
+msgid "populate log with at most <n> entries from shortlog"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:21
+msgid "alias for --log (deprecated)"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:24
+msgid "text"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:25
+msgid "use <text> as start of message"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:26
+msgid "file to read from"
+msgstr ""
+
+#: builtin/for-each-ref.c:10
+msgid "git for-each-ref [<options>] [<pattern>]"
+msgstr ""
+
+#: builtin/for-each-ref.c:11
+msgid "git for-each-ref [--points-at <object>]"
+msgstr ""
+
+#: builtin/for-each-ref.c:12
+msgid "git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]"
+msgstr ""
+
+#: builtin/for-each-ref.c:13
+msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
+msgstr ""
+
+#: builtin/for-each-ref.c:30
+msgid "quote placeholders suitably for shells"
+msgstr ""
+
+#: builtin/for-each-ref.c:32
+msgid "quote placeholders suitably for perl"
+msgstr ""
+
+#: builtin/for-each-ref.c:34
+msgid "quote placeholders suitably for python"
+msgstr ""
+
+#: builtin/for-each-ref.c:36
+msgid "quote placeholders suitably for Tcl"
+msgstr ""
+
+#: builtin/for-each-ref.c:39
+msgid "show only <n> matched refs"
+msgstr ""
+
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
+msgid "respect format colors"
+msgstr ""
+
+#: builtin/for-each-ref.c:44
+msgid "print only refs which points at the given object"
+msgstr ""
+
+#: builtin/for-each-ref.c:46
+msgid "print only refs that are merged"
+msgstr ""
+
+#: builtin/for-each-ref.c:47
+msgid "print only refs that are not merged"
+msgstr ""
+
+#: builtin/for-each-ref.c:48
+msgid "print only refs which contain the commit"
+msgstr ""
+
+#: builtin/for-each-ref.c:49
+msgid "print only refs which don't contain the commit"
+msgstr ""
+
+#: builtin/for-each-repo.c:9
+msgid "git for-each-repo --config=<config> <command-args>"
+msgstr ""
+
+#: builtin/for-each-repo.c:37
+msgid "config"
+msgstr ""
+
+#: builtin/for-each-repo.c:38
+msgid "config key storing a list of repository paths"
+msgstr ""
+
+#: builtin/for-each-repo.c:46
+msgid "missing --config=<config>"
+msgstr ""
+
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
+msgid "unknown"
+msgstr ""
+
+#. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
+#: builtin/fsck.c:78 builtin/fsck.c:100
+#, c-format
+msgid "error in %s %s: %s"
+msgstr ""
+
+#. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
+#: builtin/fsck.c:94
+#, c-format
+msgid "warning in %s %s: %s"
+msgstr ""
+
+#: builtin/fsck.c:123 builtin/fsck.c:126
+#, c-format
+msgid "broken link from %7s %s"
+msgstr ""
+
+#: builtin/fsck.c:135
+msgid "wrong object type in link"
+msgstr ""
+
+#: builtin/fsck.c:151
+#, c-format
+msgid ""
+"broken link from %7s %s\n"
+"              to %7s %s"
+msgstr ""
+
+#: builtin/fsck.c:263
+#, c-format
+msgid "missing %s %s"
+msgstr ""
+
+#: builtin/fsck.c:290
+#, c-format
+msgid "unreachable %s %s"
+msgstr ""
+
+#: builtin/fsck.c:310
+#, c-format
+msgid "dangling %s %s"
+msgstr ""
+
+#: builtin/fsck.c:320
+msgid "could not create lost-found"
+msgstr ""
+
+#: builtin/fsck.c:331
+#, c-format
+msgid "could not finish '%s'"
+msgstr ""
+
+#: builtin/fsck.c:348
+#, c-format
+msgid "Checking %s"
+msgstr ""
+
+#: builtin/fsck.c:386
+#, c-format
+msgid "Checking connectivity (%d objects)"
+msgstr ""
+
+#: builtin/fsck.c:405
+#, c-format
+msgid "Checking %s %s"
+msgstr ""
+
+#: builtin/fsck.c:410
+msgid "broken links"
+msgstr ""
+
+#: builtin/fsck.c:419
+#, c-format
+msgid "root %s"
+msgstr ""
+
+#: builtin/fsck.c:427
+#, c-format
+msgid "tagged %s %s (%s) in %s"
+msgstr ""
+
+#: builtin/fsck.c:456
+#, c-format
+msgid "%s: object corrupt or missing"
+msgstr ""
+
+#: builtin/fsck.c:481
+#, c-format
+msgid "%s: invalid reflog entry %s"
+msgstr ""
+
+#: builtin/fsck.c:495
+#, c-format
+msgid "Checking reflog %s->%s"
+msgstr ""
+
+#: builtin/fsck.c:529
+#, c-format
+msgid "%s: invalid sha1 pointer %s"
+msgstr ""
+
+#: builtin/fsck.c:536
+#, c-format
+msgid "%s: not a commit"
+msgstr ""
+
+#: builtin/fsck.c:590
+msgid "notice: No default references"
+msgstr ""
+
+#: builtin/fsck.c:605
+#, c-format
+msgid "%s: object corrupt or missing: %s"
+msgstr ""
+
+#: builtin/fsck.c:618
+#, c-format
+msgid "%s: object could not be parsed: %s"
+msgstr ""
+
+#: builtin/fsck.c:638
+#, c-format
+msgid "bad sha1 file: %s"
+msgstr ""
+
+#: builtin/fsck.c:653
+msgid "Checking object directory"
+msgstr ""
+
+#: builtin/fsck.c:656
+msgid "Checking object directories"
+msgstr ""
+
+#: builtin/fsck.c:671
+#, c-format
+msgid "Checking %s link"
+msgstr ""
+
+#: builtin/fsck.c:676 builtin/index-pack.c:866
+#, c-format
+msgid "invalid %s"
+msgstr "%s tidak valid"
+
+#: builtin/fsck.c:683
+#, c-format
+msgid "%s points to something strange (%s)"
+msgstr ""
+
+#: builtin/fsck.c:689
+#, c-format
+msgid "%s: detached HEAD points at nothing"
+msgstr ""
+
+#: builtin/fsck.c:693
+#, c-format
+msgid "notice: %s points to an unborn branch (%s)"
+msgstr ""
+
+#: builtin/fsck.c:705
+msgid "Checking cache tree"
+msgstr ""
+
+#: builtin/fsck.c:710
+#, c-format
+msgid "%s: invalid sha1 pointer in cache-tree"
+msgstr ""
+
+#: builtin/fsck.c:719
+msgid "non-tree in cache-tree"
+msgstr ""
+
+#: builtin/fsck.c:750
+msgid "git fsck [<options>] [<object>...]"
+msgstr ""
+
+#: builtin/fsck.c:756
+msgid "show unreachable objects"
+msgstr ""
+
+#: builtin/fsck.c:757
+msgid "show dangling objects"
+msgstr ""
+
+#: builtin/fsck.c:758
+msgid "report tags"
+msgstr ""
+
+#: builtin/fsck.c:759
+msgid "report root nodes"
+msgstr ""
+
+#: builtin/fsck.c:760
+msgid "make index objects head nodes"
+msgstr ""
+
+#: builtin/fsck.c:761
+msgid "make reflogs head nodes (default)"
+msgstr ""
+
+#: builtin/fsck.c:762
+msgid "also consider packs and alternate objects"
+msgstr ""
+
+#: builtin/fsck.c:763
+msgid "check only connectivity"
+msgstr ""
+
+#: builtin/fsck.c:764 builtin/mktag.c:75
+msgid "enable more strict checking"
+msgstr ""
+
+#: builtin/fsck.c:766
+msgid "write dangling objects in .git/lost-found"
+msgstr ""
+
+#: builtin/fsck.c:767 builtin/prune.c:134
+msgid "show progress"
+msgstr ""
+
+#: builtin/fsck.c:768
+msgid "show verbose names for reachable objects"
+msgstr ""
+
+#: builtin/fsck.c:827 builtin/index-pack.c:262
+msgid "Checking objects"
+msgstr "Memeriksa objek"
+
+#: builtin/fsck.c:855
+#, c-format
+msgid "%s: object missing"
+msgstr ""
+
+#: builtin/fsck.c:866
+#, c-format
+msgid "invalid parameter: expected sha1, got '%s'"
+msgstr ""
+
+#: builtin/gc.c:39
+msgid "git gc [<options>]"
+msgstr ""
+
+#: builtin/gc.c:93
+#, c-format
+msgid "Failed to fstat %s: %s"
+msgstr ""
+
+#: builtin/gc.c:129
+#, c-format
+msgid "failed to parse '%s' value '%s'"
+msgstr ""
+
+#: builtin/gc.c:487 builtin/init-db.c:57
+#, c-format
+msgid "cannot stat '%s'"
+msgstr ""
+
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
+#, c-format
+msgid "cannot read '%s'"
+msgstr ""
+
+#: builtin/gc.c:503
+#, c-format
+msgid ""
+"The last gc run reported the following. Please correct the root cause\n"
+"and remove %s.\n"
+"Automatic cleanup will not be performed until the file is removed.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: builtin/gc.c:551
+msgid "prune unreferenced objects"
+msgstr ""
+
+#: builtin/gc.c:553
+msgid "be more thorough (increased runtime)"
+msgstr ""
+
+#: builtin/gc.c:554
+msgid "enable auto-gc mode"
+msgstr ""
+
+#: builtin/gc.c:557
+msgid "force running gc even if there may be another gc running"
+msgstr ""
+
+#: builtin/gc.c:560
+msgid "repack all other packs except the largest pack"
+msgstr ""
+
+#: builtin/gc.c:576
+#, c-format
+msgid "failed to parse gc.logexpiry value %s"
+msgstr ""
+
+#: builtin/gc.c:587
+#, c-format
+msgid "failed to parse prune expiry value %s"
+msgstr ""
+
+#: builtin/gc.c:607
+#, c-format
+msgid "Auto packing the repository in background for optimum performance.\n"
+msgstr ""
+
+#: builtin/gc.c:609
+#, c-format
+msgid "Auto packing the repository for optimum performance.\n"
+msgstr ""
+
+#: builtin/gc.c:610
+#, c-format
+msgid "See \"git help gc\" for manual housekeeping.\n"
+msgstr ""
+
+#: builtin/gc.c:650
+#, c-format
+msgid ""
+"gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
+msgstr ""
+
+#: builtin/gc.c:705
+msgid ""
+"There are too many unreachable loose objects; run 'git prune' to remove them."
+msgstr ""
+
+#: builtin/gc.c:715
+msgid ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+msgstr ""
+
+#: builtin/gc.c:745
+msgid "--no-schedule is not allowed"
+msgstr ""
+
+#: builtin/gc.c:750
+#, c-format
+msgid "unrecognized --schedule argument '%s'"
+msgstr ""
+
+#: builtin/gc.c:869
+msgid "failed to write commit-graph"
+msgstr ""
+
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr ""
+
+#: builtin/gc.c:1022
+msgid "failed to start 'git pack-objects' process"
+msgstr ""
+
+#: builtin/gc.c:1039
+msgid "failed to finish 'git pack-objects' process"
+msgstr ""
+
+#: builtin/gc.c:1091
+msgid "failed to write multi-pack-index"
+msgstr ""
+
+#: builtin/gc.c:1109
+msgid "'git multi-pack-index expire' failed"
+msgstr ""
+
+#: builtin/gc.c:1170
+msgid "'git multi-pack-index repack' failed"
+msgstr ""
+
+#: builtin/gc.c:1179
+msgid ""
+"skipping incremental-repack task because core.multiPackIndex is disabled"
+msgstr ""
+
+#: builtin/gc.c:1283
+#, c-format
+msgid "lock file '%s' exists, skipping maintenance"
+msgstr ""
+
+#: builtin/gc.c:1313
+#, c-format
+msgid "task '%s' failed"
+msgstr ""
+
+#: builtin/gc.c:1395
+#, c-format
+msgid "'%s' is not a valid task"
+msgstr ""
+
+#: builtin/gc.c:1400
+#, c-format
+msgid "task '%s' cannot be selected multiple times"
+msgstr ""
+
+#: builtin/gc.c:1415
+msgid "run tasks based on the state of the repository"
+msgstr ""
+
+#: builtin/gc.c:1416
+msgid "frequency"
+msgstr ""
+
+#: builtin/gc.c:1417
+msgid "run tasks based on frequency"
+msgstr ""
+
+#: builtin/gc.c:1420
+msgid "do not report progress or other information over stderr"
+msgstr ""
+
+#: builtin/gc.c:1421
+msgid "task"
+msgstr ""
+
+#: builtin/gc.c:1422
+msgid "run a specific task"
+msgstr ""
+
+#: builtin/gc.c:1439
+msgid "use at most one of --auto and --schedule=<frequency>"
+msgstr ""
+
+#: builtin/gc.c:1482
+msgid "failed to run 'git config'"
+msgstr ""
+
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr ""
+
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr ""
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr ""
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr ""
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr ""
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr ""
+
+#: builtin/gc.c:1879
+msgid "failed to run 'crontab -l'; your system might not support 'cron'"
+msgstr ""
+
+#: builtin/gc.c:1896
+msgid "failed to run 'crontab'; your system might not support 'cron'"
+msgstr ""
+
+#: builtin/gc.c:1900
+msgid "failed to open stdin of 'crontab'"
+msgstr ""
+
+#: builtin/gc.c:1942
+msgid "'crontab' died"
+msgstr ""
+
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr ""
+
+#: builtin/gc.c:2000
+msgid "failed to add repo to global config"
+msgstr ""
+
+#: builtin/gc.c:2010
+msgid "git maintenance <subcommand> [<options>]"
+msgstr ""
+
+#: builtin/gc.c:2029
+#, c-format
+msgid "invalid subcommand: %s"
+msgstr ""
+
+#: builtin/grep.c:30
+msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
+msgstr ""
+
+#: builtin/grep.c:223
+#, c-format
+msgid "grep: failed to create thread: %s"
+msgstr ""
+
+#: builtin/grep.c:277
+#, c-format
+msgid "invalid number of threads specified (%d) for %s"
+msgstr ""
+
+#. 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
+#, c-format
+msgid "no threads support, ignoring %s"
+msgstr "tidak ada dukungan utas, abaikan %s"
+
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
+#, c-format
+msgid "unable to read tree (%s)"
+msgstr ""
+
+#: builtin/grep.c:658
+#, c-format
+msgid "unable to grep from object of type %s"
+msgstr ""
+
+#: builtin/grep.c:739
+#, c-format
+msgid "switch `%c' expects a numerical value"
+msgstr ""
+
+#: builtin/grep.c:838
+msgid "search in index instead of in the work tree"
+msgstr ""
+
+#: builtin/grep.c:840
+msgid "find in contents not managed by git"
+msgstr ""
+
+#: builtin/grep.c:842
+msgid "search in both tracked and untracked files"
+msgstr ""
+
+#: builtin/grep.c:844
+msgid "ignore files specified via '.gitignore'"
+msgstr ""
+
+#: builtin/grep.c:846
+msgid "recursively search in each submodule"
+msgstr ""
+
+#: builtin/grep.c:849
+msgid "show non-matching lines"
+msgstr ""
+
+#: builtin/grep.c:851
+msgid "case insensitive matching"
+msgstr ""
+
+#: builtin/grep.c:853
+msgid "match patterns only at word boundaries"
+msgstr ""
+
+#: builtin/grep.c:855
+msgid "process binary files as text"
+msgstr ""
+
+#: builtin/grep.c:857
+msgid "don't match patterns in binary files"
+msgstr ""
+
+#: builtin/grep.c:860
+msgid "process binary files with textconv filters"
+msgstr ""
+
+#: builtin/grep.c:862
+msgid "search in subdirectories (default)"
+msgstr ""
+
+#: builtin/grep.c:864
+msgid "descend at most <depth> levels"
+msgstr ""
+
+#: builtin/grep.c:868
+msgid "use extended POSIX regular expressions"
+msgstr ""
+
+#: builtin/grep.c:871
+msgid "use basic POSIX regular expressions (default)"
+msgstr ""
+
+#: builtin/grep.c:874
+msgid "interpret patterns as fixed strings"
+msgstr ""
+
+#: builtin/grep.c:877
+msgid "use Perl-compatible regular expressions"
+msgstr ""
+
+#: builtin/grep.c:880
+msgid "show line numbers"
+msgstr ""
+
+#: builtin/grep.c:881
+msgid "show column number of first match"
+msgstr ""
+
+#: builtin/grep.c:882
+msgid "don't show filenames"
+msgstr ""
+
+#: builtin/grep.c:883
+msgid "show filenames"
+msgstr ""
+
+#: builtin/grep.c:885
+msgid "show filenames relative to top directory"
+msgstr ""
+
+#: builtin/grep.c:887
+msgid "show only filenames instead of matching lines"
+msgstr ""
+
+#: builtin/grep.c:889
+msgid "synonym for --files-with-matches"
+msgstr ""
+
+#: builtin/grep.c:892
+msgid "show only the names of files without match"
+msgstr ""
+
+#: builtin/grep.c:894
+msgid "print NUL after filenames"
+msgstr ""
+
+#: builtin/grep.c:897
+msgid "show only matching parts of a line"
+msgstr ""
+
+#: builtin/grep.c:899
+msgid "show the number of matches instead of matching lines"
+msgstr ""
+
+#: builtin/grep.c:900
+msgid "highlight matches"
+msgstr ""
+
+#: builtin/grep.c:902
+msgid "print empty line between matches from different files"
+msgstr ""
+
+#: builtin/grep.c:904
+msgid "show filename only once above matches from same file"
+msgstr ""
+
+#: builtin/grep.c:907
+msgid "show <n> context lines before and after matches"
+msgstr ""
+
+#: builtin/grep.c:910
+msgid "show <n> context lines before matches"
+msgstr ""
+
+#: builtin/grep.c:912
+msgid "show <n> context lines after matches"
+msgstr ""
+
+#: builtin/grep.c:914
+msgid "use <n> worker threads"
+msgstr ""
+
+#: builtin/grep.c:915
+msgid "shortcut for -C NUM"
+msgstr ""
+
+#: builtin/grep.c:918
+msgid "show a line with the function name before matches"
+msgstr ""
+
+#: builtin/grep.c:920
+msgid "show the surrounding function"
+msgstr ""
+
+#: builtin/grep.c:923
+msgid "read patterns from file"
+msgstr ""
+
+#: builtin/grep.c:925
+msgid "match <pattern>"
+msgstr ""
+
+#: builtin/grep.c:927
+msgid "combine patterns specified with -e"
+msgstr ""
+
+#: builtin/grep.c:939
+msgid "indicate hit with exit status without output"
+msgstr ""
+
+#: builtin/grep.c:941
+msgid "show only matches from files that match all patterns"
+msgstr ""
+
+#: builtin/grep.c:944
+msgid "pager"
+msgstr ""
+
+#: builtin/grep.c:944
+msgid "show matching files in the pager"
+msgstr ""
+
+#: builtin/grep.c:948
+msgid "allow calling of grep(1) (ignored by this build)"
+msgstr ""
+
+#: builtin/grep.c:1014
+msgid "no pattern given"
+msgstr ""
+
+#: builtin/grep.c:1050
+msgid "--no-index or --untracked cannot be used with revs"
+msgstr ""
+
+#: builtin/grep.c:1058
+#, c-format
+msgid "unable to resolve revision: %s"
+msgstr ""
+
+#: builtin/grep.c:1088
+msgid "--untracked not supported with --recurse-submodules"
+msgstr ""
+
+#: builtin/grep.c:1092
+msgid "invalid option combination, ignoring --threads"
+msgstr ""
+
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
+msgid "no threads support, ignoring --threads"
+msgstr ""
+
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
+#, c-format
+msgid "invalid number of threads specified (%d)"
+msgstr "jumlah utas tersebut (%d) tidak valid"
+
+#: builtin/grep.c:1132
+msgid "--open-files-in-pager only works on the worktree"
+msgstr ""
+
+#: builtin/grep.c:1158
+msgid "--cached or --untracked cannot be used with --no-index"
+msgstr ""
+
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr ""
+
+#: builtin/grep.c:1167
+msgid "--[no-]exclude-standard cannot be used for tracked contents"
+msgstr ""
+
+#: builtin/grep.c:1175
+msgid "both --cached and trees are given"
+msgstr ""
+
+#: builtin/hash-object.c:85
+msgid ""
+"git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
+"[--] <file>..."
+msgstr ""
+
+#: builtin/hash-object.c:86
+msgid "git hash-object  --stdin-paths"
+msgstr ""
+
+#: builtin/hash-object.c:98
+msgid "object type"
+msgstr ""
+
+#: builtin/hash-object.c:99
+msgid "write the object into the object database"
+msgstr ""
+
+#: builtin/hash-object.c:101
+msgid "read the object from stdin"
+msgstr ""
+
+#: builtin/hash-object.c:103
+msgid "store file as is without filters"
+msgstr ""
+
+#: builtin/hash-object.c:104
+msgid ""
+"just hash any random garbage to create corrupt objects for debugging Git"
+msgstr ""
+
+#: builtin/hash-object.c:105
+msgid "process file as it were from this path"
+msgstr ""
+
+#: builtin/help.c:47
+msgid "print all available commands"
+msgstr "cetak semua perintah yang tersedia"
+
+#: builtin/help.c:48
+msgid "exclude guides"
+msgstr "kecualikan panduan"
+
+#: builtin/help.c:49
+msgid "print list of useful guides"
+msgstr "cetak daftar panduan berguna"
+
+#: builtin/help.c:50
+msgid "print all configuration variable names"
+msgstr "cetak semua nama variabel konfigurasi"
+
+#: builtin/help.c:52
+msgid "show man page"
+msgstr "perlihatkan halaman man"
+
+#: builtin/help.c:53
+msgid "show manual in web browser"
+msgstr "perlihatkan manual dalam penjelajah web"
+
+#: builtin/help.c:55
+msgid "show info page"
+msgstr "perlihatkan halaman info"
+
+#: builtin/help.c:57
+msgid "print command description"
+msgstr "perlihatkan deskripsi perintah"
+
+#: builtin/help.c:62
+msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
+msgstr "git help [--all] [--guides] [--man | --web | --info] [<command>]"
+
+#: builtin/help.c:163
+#, c-format
+msgid "unrecognized help format '%s'"
+msgstr "format bantuan tidak dikenal '%s'"
+
+#: builtin/help.c:190
+msgid "Failed to start emacsclient."
+msgstr "gagal menjalankan emacsclient."
+
+#: builtin/help.c:203
+msgid "Failed to parse emacsclient version."
+msgstr "gagal menguraikan versi emacsclient."
+
+#: builtin/help.c:211
+#, c-format
+msgid "emacsclient version '%d' too old (< 22)."
+msgstr "versi emacsclient '%d' terlalu usang (< 22)."
+
+#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
+#, c-format
+msgid "failed to exec '%s'"
+msgstr "gagal menjalankan '%s'"
+
+#: builtin/help.c:307
+#, c-format
+msgid ""
+"'%s': path for unsupported man viewer.\n"
+"Please consider using 'man.<tool>.cmd' instead."
+msgstr ""
+"'%s': jalur untuk pembaca man yang tidak didukung.\n"
+"Mohon gunakan 'man.<tool>.cmd' sebagai gantinya."
+
+#: builtin/help.c:319
+#, c-format
+msgid ""
+"'%s': cmd for supported man viewer.\n"
+"Please consider using 'man.<tool>.path' instead."
+msgstr ""
+"'%s': cmd untuk pembaca man yang didukung.\n"
+"Mohon gunakan 'man.<tool>.path' sebagai gantinya."
+
+#: builtin/help.c:436
+#, c-format
+msgid "'%s': unknown man viewer."
+msgstr "'%s': pembaca man tidak dikenal"
+
+#: builtin/help.c:453
+msgid "no man viewer handled the request"
+msgstr "tidak ada pembaca man yang menangani permintaan"
+
+#: builtin/help.c:461
+msgid "no info viewer handled the request"
+msgstr "tidak ada pembaca info yang menangani permintaan"
+
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
+#, c-format
+msgid "'%s' is aliased to '%s'"
+msgstr "'%s' dialiaskan ke '%s'"
+
+#: builtin/help.c:534 git.c:380
+#, c-format
+msgid "bad alias.%s string: %s"
+msgstr "untai alias.%s jelek: %s"
+
+#: builtin/help.c:563 builtin/help.c:593
+#, c-format
+msgid "usage: %s%s"
+msgstr "penggunaan: %s%s"
+
+#: builtin/help.c:577
+msgid "'git help config' for more information"
+msgstr "'git help config' untuk informasi lebih lanjut"
+
+#: builtin/index-pack.c:222
+#, c-format
+msgid "object type mismatch at %s"
+msgstr "tipe objek tidak cocok pada %s"
+
+#: builtin/index-pack.c:242
+#, c-format
+msgid "did not receive expected object %s"
+msgstr "tidak menerima objek yang diharapkan %s"
+
+#: builtin/index-pack.c:245
+#, c-format
+msgid "object %s: expected type %s, found %s"
+msgstr "objek %s: yang diharapkan %s, yang didapat %s"
+
+#: builtin/index-pack.c:295
+#, c-format
+msgid "cannot fill %d byte"
+msgid_plural "cannot fill %d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:305
+msgid "early EOF"
+msgstr "EOF awal"
+
+#: builtin/index-pack.c:306
+msgid "read error on input"
+msgstr "kesalahan baca pada masukan"
+
+#: builtin/index-pack.c:318
+msgid "used more bytes than were available"
+msgstr "gunakan lebih banyak pita dari pada yang tersedia"
+
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
+msgid "pack too large for current definition of off_t"
+msgstr "paket terlalu besar untuk definisi off_t saat ini"
+
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "paket melebihi ukuran maksimum yang diperbolehkan"
+
+#: builtin/index-pack.c:343
+#, c-format
+msgid "unable to create '%s'"
+msgstr "tidak dapat membuat '%s'"
+
+#: builtin/index-pack.c:349
+#, c-format
+msgid "cannot open packfile '%s'"
+msgstr "tidak dapat membuka berkas paket '%s'"
+
+#: builtin/index-pack.c:363
+msgid "pack signature mismatch"
+msgstr "tanda tangan paket tidak cocok"
+
+#: builtin/index-pack.c:365
+#, c-format
+msgid "pack version %<PRIu32> unsupported"
+msgstr "versi paket %<PRIu32> tidak didukung"
+
+#: builtin/index-pack.c:383
+#, c-format
+msgid "pack has bad object at offset %<PRIuMAX>: %s"
+msgstr "paket ada objek jelek pada offset %<PRIuMAX>: %s"
+
+#: builtin/index-pack.c:489
+#, c-format
+msgid "inflate returned %d"
+msgstr "inflate mengembalikan %d"
+
+#: builtin/index-pack.c:538
+msgid "offset value overflow for delta base object"
+msgstr "nilai offset meluap untuk objek basis delta"
+
+#: builtin/index-pack.c:546
+msgid "delta base offset is out of bound"
+msgstr "offset basis delta di luar jangkauan"
+
+#: builtin/index-pack.c:554
+#, c-format
+msgid "unknown object type %d"
+msgstr "tipe objek tidak diketahui %d"
+
+#: builtin/index-pack.c:585
+msgid "cannot pread pack file"
+msgstr "tidak dapat pread berkas paket"
+
+#: builtin/index-pack.c:587
+#, c-format
+msgid "premature end of pack file, %<PRIuMAX> byte missing"
+msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:613
+msgid "serious inflate inconsistency"
+msgstr "inkonsistensi inflate serius"
+
+#: 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
+#, c-format
+msgid "SHA1 COLLISION FOUND WITH %s !"
+msgstr "TUMBUKAN SHA1 DITEMUKAN DENGAN %s !"
+
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
+#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
+#, c-format
+msgid "unable to read %s"
+msgstr "tidak dapat membaca %s"
+
+#: builtin/index-pack.c:825
+#, c-format
+msgid "cannot read existing object info %s"
+msgstr "tidak dapat membaca info objek yang ada %s"
+
+#: builtin/index-pack.c:833
+#, c-format
+msgid "cannot read existing object %s"
+msgstr "tidak dapat membaca objek yang ada %s"
+
+#: builtin/index-pack.c:847
+#, c-format
+msgid "invalid blob object %s"
+msgstr "objek blob tidak valid %s"
+
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
+msgid "fsck error in packed object"
+msgstr "kesalahan fsck dalam objek terpaket"
+
+#: builtin/index-pack.c:871
+#, c-format
+msgid "Not all child objects of %s are reachable"
+msgstr "Tidak semua objek anak dari %s bisa dicapai"
+
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
+msgid "failed to apply delta"
+msgstr "gagal menerapkan delta"
+
+#: builtin/index-pack.c:1162
+msgid "Receiving objects"
+msgstr "Menerima objek"
+
+#: builtin/index-pack.c:1162
+msgid "Indexing objects"
+msgstr "Mengindeks objek"
+
+#: builtin/index-pack.c:1196
+msgid "pack is corrupted (SHA1 mismatch)"
+msgstr "paket rusak (SHA1 tidak cocok)"
+
+#: builtin/index-pack.c:1201
+msgid "cannot fstat packfile"
+msgstr "tidak dapat fstat berkas paket"
+
+#: builtin/index-pack.c:1204
+msgid "pack has junk at the end"
+msgstr "paket memiliki sampah pada ujung"
+
+#: builtin/index-pack.c:1216
+msgid "confusion beyond insanity in parse_pack_objects()"
+msgstr "bingung di luar kegilaan di parse_pack_objects()"
+
+#: builtin/index-pack.c:1239
+msgid "Resolving deltas"
+msgstr "Menguraikan delta"
+
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
+#, c-format
+msgid "unable to create thread: %s"
+msgstr "tidak dapat membuat utas: %s"
+
+#: builtin/index-pack.c:1283
+msgid "confusion beyond insanity"
+msgstr "bingung di luar kegilaan"
+
+#: builtin/index-pack.c:1289
+#, c-format
+msgid "completed with %d local object"
+msgid_plural "completed with %d local objects"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1301
+#, c-format
+msgid "Unexpected tail checksum for %s (disk corruption?)"
+msgstr "Checksum ekor tidak diharapkan untuk %s (kerusakan disk?)"
+
+#: builtin/index-pack.c:1305
+#, c-format
+msgid "pack has %d unresolved delta"
+msgid_plural "pack has %d unresolved deltas"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1329
+#, c-format
+msgid "unable to deflate appended object (%d)"
+msgstr "tidak dapat menggemboskan objek tertambah (%d)"
+
+#: builtin/index-pack.c:1425
+#, c-format
+msgid "local object %s is corrupt"
+msgstr "objek lokal %s rusak"
+
+#: builtin/index-pack.c:1446
+#, c-format
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "nama berkas paket '%s' tidak diakhiri dengan '.%s'"
+
+#: builtin/index-pack.c:1470
+#, c-format
+msgid "cannot write %s file '%s'"
+msgstr "tidak dapat menulis %s berkas '%s'"
+
+#: builtin/index-pack.c:1478
+#, c-format
+msgid "cannot close written %s file '%s'"
+msgstr "tidak dapat menutup %s berkas tertulis '%s'"
+
+#: builtin/index-pack.c:1504
+msgid "error while closing pack file"
+msgstr "kesalahan menutup berkas paket"
+
+#: builtin/index-pack.c:1518
+msgid "cannot store pack file"
+msgstr "tidak dapat menyimpan berkas paket"
+
+#: builtin/index-pack.c:1526
+msgid "cannot store index file"
+msgstr "tidak dapat menyimpan berkas indeks"
+
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
+#, c-format
+msgid "bad pack.indexversion=%<PRIu32>"
+msgstr "pack.indexversion=%<PRIu32> jelek"
+
+#: builtin/index-pack.c:1651
+#, c-format
+msgid "Cannot open existing pack file '%s'"
+msgstr "tidak dapat membuka berkas paket yang ada '%s'"
+
+#: builtin/index-pack.c:1653
+#, c-format
+msgid "Cannot open existing pack idx file for '%s'"
+msgstr "tidak dapat membuka berkas indeks paket untuk '%s'"
+
+#: builtin/index-pack.c:1701
+#, c-format
+msgid "non delta: %d object"
+msgid_plural "non delta: %d objects"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1708
+#, c-format
+msgid "chain length = %d: %lu object"
+msgid_plural "chain length = %d: %lu objects"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/index-pack.c:1750
+msgid "Cannot come back to cwd"
+msgstr "tidak dapat kembali ke direktori kerja saat ini"
+
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
+#, c-format
+msgid "bad %s"
+msgstr "%s jelek"
+
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
+#, c-format
+msgid "unknown hash algorithm '%s'"
+msgstr "algoritma hash tak dikenal '%s'"
+
+#: builtin/index-pack.c:1852
+msgid "--fix-thin cannot be used without --stdin"
+msgstr "--fix-thin tidak dapat digunakan tanpa --stdin"
+
+#: builtin/index-pack.c:1854
+msgid "--stdin requires a git repository"
+msgstr "--stdin memerlukan repositori git"
+
+#: builtin/index-pack.c:1856
+msgid "--object-format cannot be used with --stdin"
+msgstr "--object-format tidak dapat digunakan dengan --stdin"
+
+#: builtin/index-pack.c:1871
+msgid "--verify with no packfile name given"
+msgstr "--verify tanpa nama berkas paket diberikan"
+
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
+msgid "fsck error in pack objects"
+msgstr "kesalahan fsck dalam objek paket"
+
+#: builtin/init-db.c:63
+#, c-format
+msgid "cannot stat template '%s'"
+msgstr "tidak dapat men-stat templat '%s'"
+
+#: builtin/init-db.c:68
+#, c-format
+msgid "cannot opendir '%s'"
+msgstr "tidak dapat membuka direktori '%s'"
+
+#: builtin/init-db.c:80
+#, c-format
+msgid "cannot readlink '%s'"
+msgstr "tidak dapat membaca tautan '%s'"
+
+#: builtin/init-db.c:82
+#, c-format
+msgid "cannot symlink '%s' '%s'"
+msgstr "tidak dapat menautkan simbolik '%s' '%s'"
+
+#: builtin/init-db.c:88
+#, c-format
+msgid "cannot copy '%s' to '%s'"
+msgstr "tidak dapat menyalin '%s' ke '%s'"
+
+#: builtin/init-db.c:92
+#, c-format
+msgid "ignoring template %s"
+msgstr "mengabaikan templat %s"
+
+#: builtin/init-db.c:123
+#, c-format
+msgid "templates not found in %s"
+msgstr "templat tidak ditemukan di %s"
+
+#: builtin/init-db.c:138
+#, c-format
+msgid "not copying templates from '%s': %s"
+msgstr "tidak menyalin templat dari '%s': %s"
+
+#: builtin/init-db.c:262
+#, c-format
+msgid "invalid initial branch name: '%s'"
+msgstr "nama cabang asal salah: '%s'"
+
+#: builtin/init-db.c:353
+#, c-format
+msgid "unable to handle file type %d"
+msgstr "tidak dapat menangani tipe berkas %d"
+
+#: builtin/init-db.c:356
+#, c-format
+msgid "unable to move %s to %s"
+msgstr "tidak dapat memindahkan %s ke %s"
+
+#: builtin/init-db.c:372
+msgid "attempt to reinitialize repository with different hash"
+msgstr "mencoba menginisialisasi ulang repositori dengan hash yang berbeda"
+
+#: builtin/init-db.c:396 builtin/init-db.c:399
+#, c-format
+msgid "%s already exists"
+msgstr "%s sudah ada"
+
+#: builtin/init-db.c:431
+#, c-format
+msgid "re-init: ignored --initial-branch=%s"
+msgstr "re-init: --initial-branch=%s diabaikan"
+
+#: builtin/init-db.c:462
+#, c-format
+msgid "Reinitialized existing shared Git repository in %s%s\n"
+msgstr "Repositori berbagi Git yang sudah ada diinisialisasi ulang di %s%s\n"
+
+#: builtin/init-db.c:463
+#, c-format
+msgid "Reinitialized existing Git repository in %s%s\n"
+msgstr "Repositori Git diinisialisasi ulang di %s%s\n"
+
+#: builtin/init-db.c:467
+#, c-format
+msgid "Initialized empty shared Git repository in %s%s\n"
+msgstr "Repositori berbagi Git kosong diinisialisasi di %s%s\n"
+
+#: builtin/init-db.c:468
+#, c-format
+msgid "Initialized empty Git repository in %s%s\n"
+msgstr "Repositori Git kosong dinisialisasi di %s%s\n"
+
+#: builtin/init-db.c:517
+msgid ""
+"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
+"shared[=<permissions>]] [<directory>]"
+msgstr ""
+"git init [-q | --quiet] [--bare] [--template=<direktori-templat>][--"
+"shared[=<perizinan>]] [<direktori>]"
+
+#: builtin/init-db.c:543
+msgid "permissions"
+msgstr "perizinan"
+
+#: builtin/init-db.c:544
+msgid "specify that the git repository is to be shared amongst several users"
+msgstr ""
+"tentukan bahwa repositori git untuk dibagikan di antara beberapa pengguna"
+
+#: builtin/init-db.c:550
+msgid "override the name of the initial branch"
+msgstr "timpa nama cabang asal"
+
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
+msgid "hash"
+msgstr ""
+
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
+msgid "specify the hash algorithm to use"
+msgstr "tentukan algoritma hash yang akan digunakan"
+
+#: builtin/init-db.c:559
+msgid "--separate-git-dir and --bare are mutually exclusive"
+msgstr "--separate-git-dir dan --bare saling eksklusif"
+
+#: builtin/init-db.c:590 builtin/init-db.c:595
+#, c-format
+msgid "cannot mkdir %s"
+msgstr "tidak dapat membuat direktori %s"
+
+#: builtin/init-db.c:599 builtin/init-db.c:654
+#, c-format
+msgid "cannot chdir to %s"
+msgstr "tidak dapat mengganti direktori ke %s"
+
+#: builtin/init-db.c:626
+#, c-format
+msgid ""
+"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
+"dir=<directory>)"
+msgstr ""
+"%s (atau --work-tree=<direktori>) tidak diperbolehkan tanpa sebutkan %s "
+"(atau--git-dir=<direktori>)"
+
+#: builtin/init-db.c:678
+#, c-format
+msgid "Cannot access work tree '%s'"
+msgstr "Tidak dapat mengakses pohon kerja '%s'"
+
+#: builtin/init-db.c:683
+msgid "--separate-git-dir incompatible with bare repository"
+msgstr "--separate-git-dir tidak kompatibel dengan repositori bare"
+
+#: builtin/interpret-trailers.c:16
+msgid ""
+"git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
+"<token>[(=|:)<value>])...] [<file>...]"
+msgstr ""
+
+#: builtin/interpret-trailers.c:95
+msgid "edit files in place"
+msgstr ""
+
+#: builtin/interpret-trailers.c:96
+msgid "trim empty trailers"
+msgstr ""
+
+#: builtin/interpret-trailers.c:99
+msgid "where to place the new trailer"
+msgstr ""
+
+#: builtin/interpret-trailers.c:101
+msgid "action if trailer already exists"
+msgstr ""
+
+#: builtin/interpret-trailers.c:103
+msgid "action if trailer is missing"
+msgstr ""
+
+#: builtin/interpret-trailers.c:105
+msgid "output only the trailers"
+msgstr ""
+
+#: builtin/interpret-trailers.c:106
+msgid "do not apply config rules"
+msgstr ""
+
+#: builtin/interpret-trailers.c:107
+msgid "join whitespace-continued values"
+msgstr ""
+
+#: builtin/interpret-trailers.c:108
+msgid "set parsing options"
+msgstr ""
+
+#: builtin/interpret-trailers.c:110
+msgid "do not treat --- specially"
+msgstr ""
+
+#: builtin/interpret-trailers.c:112
+msgid "trailer(s) to add"
+msgstr ""
+
+#: builtin/interpret-trailers.c:123
+msgid "--trailer with --only-input does not make sense"
+msgstr ""
+
+#: builtin/interpret-trailers.c:133
+msgid "no input file given for in-place editing"
+msgstr ""
+
+#: builtin/log.c:59
+msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
+msgstr "git log [<opsi>] [<rentang revisi>] [[--] <jalur>...]"
+
+#: builtin/log.c:60
+msgid "git show [<options>] <object>..."
+msgstr "git show [<opsi>] <objek>..."
+
+#: builtin/log.c:113
+#, c-format
+msgid "invalid --decorate option: %s"
+msgstr "opsi --decorate tidak valid: %s"
+
+#: builtin/log.c:180
+msgid "show source"
+msgstr "perlihatkan sumber"
+
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "gunakan berkas peta surat"
+
+#: builtin/log.c:184
+msgid "only decorate refs that match <pattern>"
+msgstr "hanya dekorasi referensi yang cocok dengan <pola>"
+
+#: builtin/log.c:186
+msgid "do not decorate refs that match <pattern>"
+msgstr "jangan dekorasi referensi yang cocok dengan <pola>"
+
+#: builtin/log.c:187
+msgid "decorate options"
+msgstr "opsi dekorasi"
+
+#: builtin/log.c:190
+msgid ""
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
+"<file>"
+msgstr ""
+"lacak evolusi rentang baris <awal>,<akhir> atau fungsi :<nama fungsi> dalam "
+"<berkas>"
+
+#: builtin/log.c:213
+msgid "-L<range>:<file> cannot be used with pathspec"
+msgstr "-L<rentang>:<berkas> tidak dapat digunakan dengan spek jalur"
+
+#: builtin/log.c:303
+#, c-format
+msgid "Final output: %d %s\n"
+msgstr "Keluaran terakhir: %d %s\n"
+
+#: builtin/log.c:568
+#, c-format
+msgid "git show %s: bad file"
+msgstr "git show %s: berkas jelek"
+
+#: builtin/log.c:583 builtin/log.c:673
+#, c-format
+msgid "could not read object %s"
+msgstr "tidak dapat membaca objek %s"
+
+#: builtin/log.c:698
+#, c-format
+msgid "unknown type: %d"
+msgstr "tipe tidak dikenal: %d"
+
+#: builtin/log.c:843
+#, c-format
+msgid "%s: invalid cover from description mode"
+msgstr "%s: sampul tidak valid dari mode deskripsi"
+
+#: builtin/log.c:850
+msgid "format.headers without value"
+msgstr "format.headers tanpa nilai"
+
+#: builtin/log.c:979
+#, c-format
+msgid "cannot open patch file %s"
+msgstr "tidak dapat membuka berkas tambalan %s"
+
+#: builtin/log.c:996
+msgid "need exactly one range"
+msgstr "butuh tepatnya satu rentang"
+
+#: builtin/log.c:1006
+msgid "not a range"
+msgstr "bukan sebuah rentang"
+
+#: builtin/log.c:1170
+msgid "cover letter needs email format"
+msgstr "sampul surat butuh format email"
+
+#: builtin/log.c:1176
+msgid "failed to create cover-letter file"
+msgstr "gagal membuat berkas sampul surat"
+
+#: builtin/log.c:1263
+#, c-format
+msgid "insane in-reply-to: %s"
+msgstr "in-reply-to gila: %s"
+
+#: builtin/log.c:1290
+msgid "git format-patch [<options>] [<since> | <revision-range>]"
+msgstr "git format-patch [<opsi>] [<sejak> | <rentang revisi>]"
+
+#: builtin/log.c:1348
+msgid "two output directories?"
+msgstr "dua direktori keluaran?"
+
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
+#, c-format
+msgid "unknown commit %s"
+msgstr "komit tidak dikenal %s"
+
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/replace.c:210
+#, c-format
+msgid "failed to resolve '%s' as a valid ref"
+msgstr "gagal menguraikan '%s' sebagai referensi valid"
+
+#: builtin/log.c:1519
+msgid "could not find exact merge base"
+msgstr "tidak dapat menemukan dasar penggabungan eksak"
+
+#: builtin/log.c:1529
+msgid ""
+"failed to get upstream, if you want to record base commit automatically,\n"
+"please use git branch --set-upstream-to to track a remote branch.\n"
+"Or you could specify base commit by --base=<base-commit-id> manually"
+msgstr ""
+"gagal mendapatkan hulu, jika Anda ingin merekam dasar komit secara "
+"otomatis,\n"
+"mohon gunakan git branch --set-upstream-to untuk melacak cabang remote.\n"
+"Atau Anda dapat menyebutkan dasar komit secara manual dengan --base=<id "
+"dasar komit>"
+
+#: builtin/log.c:1552
+msgid "failed to find exact merge base"
+msgstr "tidak dapat menemukan dasar penggabungan eksak"
+
+#: builtin/log.c:1569
+msgid "base commit should be the ancestor of revision list"
+msgstr "dasar komit seharusnya menjadi leluhur daftar revisi"
+
+#: builtin/log.c:1579
+msgid "base commit shouldn't be in revision list"
+msgstr "dasar komit tidak seharusnya dalam daftar revisi"
+
+#: builtin/log.c:1637
+msgid "cannot get patch id"
+msgstr "tidak dapat mendapatkan id tambalan"
+
+#: builtin/log.c:1700
+msgid "failed to infer range-diff origin of current series"
+msgstr "gagal menduga asal range-diff dari seri saat ini"
+
+#: builtin/log.c:1702
+#, c-format
+msgid "using '%s' as range-diff origin of current series"
+msgstr "menggunakan '%s' sebagai asal range-diff dari seri saat ini"
+
+#: builtin/log.c:1746
+msgid "use [PATCH n/m] even with a single patch"
+msgstr "gunakan [PATCH n/m] bahkan dengan satu tambalan"
+
+#: builtin/log.c:1749
+msgid "use [PATCH] even with multiple patches"
+msgstr "gunakan [PATCH] bahkan dengan banyak tambalan"
+
+#: builtin/log.c:1753
+msgid "print patches to standard out"
+msgstr "cetak tambalan ke keluaran standar"
+
+#: builtin/log.c:1755
+msgid "generate a cover letter"
+msgstr "buat sampul surat"
+
+#: builtin/log.c:1757
+msgid "use simple number sequence for output file names"
+msgstr "gunakan urutan bilangan sederhana untuk keluarkan nama berkas"
+
+#: builtin/log.c:1758
+msgid "sfx"
+msgstr "sfx"
+
+#: builtin/log.c:1759
+msgid "use <sfx> instead of '.patch'"
+msgstr "gunakan <akhiran> daripada '.patch'"
+
+#: builtin/log.c:1761
+msgid "start numbering patches at <n> instead of 1"
+msgstr "mulai menomorkan tambalan pada <n> daripada 1"
+
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr ""
+
+#: builtin/log.c:1763
+msgid "mark the series as Nth re-roll"
+msgstr "tandai seri sebagai gulung ulang ke-N"
+
+#: builtin/log.c:1765
+msgid "max length of output filename"
+msgstr "panjang nama berkas keluaran maksimum"
+
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "gunakan [RFC PATCH] daripada [PATCH]"
+
+#: builtin/log.c:1770
+msgid "cover-from-description-mode"
+msgstr "cover-from-description-mode"
+
+#: builtin/log.c:1771
+msgid "generate parts of a cover letter based on a branch's description"
+msgstr "buat bagian dari sampul surat berdasarkan deskripsi cabang"
+
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "gunakan [<prefix>] daripada [PATCH]"
+
+#: builtin/log.c:1776
+msgid "store resulting files in <dir>"
+msgstr "simpan hasil berkas di <direktori>"
+
+#: builtin/log.c:1779
+msgid "don't strip/add [PATCH]"
+msgstr "jangan copot/tambah [PATCH]"
+
+#: builtin/log.c:1782
+msgid "don't output binary diffs"
+msgstr "jangan keluarkan diff biner"
+
+#: builtin/log.c:1784
+msgid "output all-zero hash in From header"
+msgstr "keluarkan hash semua-nol di kepala From"
+
+#: builtin/log.c:1786
+msgid "don't include a patch matching a commit upstream"
+msgstr "jangan termasuk tambalan yang cocok dengan komit hulu"
+
+#: builtin/log.c:1788
+msgid "show patch format instead of default (patch + stat)"
+msgstr "perlihatkan format tambalan daripada asali (tambalan + stat)"
+
+#: builtin/log.c:1790
+msgid "Messaging"
+msgstr "Perpesanan"
+
+#: builtin/log.c:1791
+msgid "header"
+msgstr "kepala"
+
+#: builtin/log.c:1792
+msgid "add email header"
+msgstr "tambahkan kepala email"
+
+#: builtin/log.c:1793 builtin/log.c:1794
+msgid "email"
+msgstr "email"
+
+#: builtin/log.c:1793
+msgid "add To: header"
+msgstr "tambahkan kepala To:"
+
+#: builtin/log.c:1794
+msgid "add Cc: header"
+msgstr "tambahkan kepala Cc:"
+
+#: builtin/log.c:1795
+msgid "ident"
+msgstr "ident"
+
+#: builtin/log.c:1796
+msgid "set From address to <ident> (or committer ident if absent)"
+msgstr ""
+"setel alamat From ke <identitas> (atau identitas pengkomit jika tidak ada)"
+
+#: builtin/log.c:1798
+msgid "message-id"
+msgstr "message-id"
+
+#: builtin/log.c:1799
+msgid "make first mail a reply to <message-id>"
+msgstr "buat surat pertama balasan ke <id pesan>"
+
+#: builtin/log.c:1800 builtin/log.c:1803
+msgid "boundary"
+msgstr "perbatasan"
+
+#: builtin/log.c:1801
+msgid "attach the patch"
+msgstr "lampirkan tambalan"
+
+#: builtin/log.c:1804
+msgid "inline the patch"
+msgstr "bariskan tambalan"
+
+#: builtin/log.c:1808
+msgid "enable message threading, styles: shallow, deep"
+msgstr "aktifkan utasan pesan, gaya: shallow, deep"
+
+#: builtin/log.c:1810
+msgid "signature"
+msgstr "tanda tangan"
+
+#: builtin/log.c:1811
+msgid "add a signature"
+msgstr "tambah tanda tangan"
+
+#: builtin/log.c:1812
+msgid "base-commit"
+msgstr "dasar komit"
+
+#: builtin/log.c:1813
+msgid "add prerequisite tree info to the patch series"
+msgstr "tambahkan info pohon prasyarat ke seri tambalan"
+
+#: builtin/log.c:1816
+msgid "add a signature from a file"
+msgstr "tambahkan tandatangan dari berkas"
+
+#: builtin/log.c:1817
+msgid "don't print the patch filenames"
+msgstr "jangan cetak nama berkas tambalan"
+
+#: builtin/log.c:1819
+msgid "show progress while generating patches"
+msgstr "perlihatkan perkembangan ketika membuat tambalan"
+
+#: builtin/log.c:1821
+msgid "show changes against <rev> in cover letter or single patch"
+msgstr ""
+"perlihatkan perubahan terhadap <revisi> di sampul surat atau satu tambalan"
+
+#: builtin/log.c:1824
+msgid "show changes against <refspec> in cover letter or single patch"
+msgstr ""
+"perlihatkan perubahan terhadap <spek referensi> di sampul surat atau satu "
+"tambalan"
+
+#: builtin/log.c:1826 builtin/range-diff.c:28
+msgid "percentage by which creation is weighted"
+msgstr "persentase dimana pembuatan tertimbang"
+
+#: builtin/log.c:1913
+#, c-format
+msgid "invalid ident line: %s"
+msgstr "baris identitas tidak valid: %s"
+
+#: builtin/log.c:1928
+msgid "-n and -k are mutually exclusive"
+msgstr "-n dan -k saling eksklusif"
+
+#: builtin/log.c:1930
+msgid "--subject-prefix/--rfc and -k are mutually exclusive"
+msgstr "--subject-prefix/--rfc dan -k saling eksklusif"
+
+#: builtin/log.c:1938
+msgid "--name-only does not make sense"
+msgstr "--name-only tidak masuk akal"
+
+#: builtin/log.c:1940
+msgid "--name-status does not make sense"
+msgstr "--name-status tidak masuk akal"
+
+#: builtin/log.c:1942
+msgid "--check does not make sense"
+msgstr "--check tidak masuk akal"
+
+#: builtin/log.c:1964
+msgid "--stdout, --output, and --output-directory are mutually exclusive"
+msgstr "--stdout, --output, dan --output-directory saling eksklusif"
+
+#: builtin/log.c:2087
+msgid "--interdiff requires --cover-letter or single patch"
+msgstr "--interdiff butuh --cover-letter atau satu tambalan"
+
+#: builtin/log.c:2091
+msgid "Interdiff:"
+msgstr "Interdiff:"
+
+#: builtin/log.c:2092
+#, c-format
+msgid "Interdiff against v%d:"
+msgstr "Interdiff terhadap v%d:"
+
+#: builtin/log.c:2098
+msgid "--creation-factor requires --range-diff"
+msgstr "--creation-factor butuh --range-diff"
+
+#: builtin/log.c:2102
+msgid "--range-diff requires --cover-letter or single patch"
+msgstr "--range-diff butuh --cover-letter atau satu tambalan"
+
+#: builtin/log.c:2110
+msgid "Range-diff:"
+msgstr "Range-diff:"
+
+#: builtin/log.c:2111
+#, c-format
+msgid "Range-diff against v%d:"
+msgstr "Range-diff terhadap v%d:"
+
+#: builtin/log.c:2122
+#, c-format
+msgid "unable to read signature file '%s'"
+msgstr "tidak dapat membaca berkas tanda tangan '%s'"
+
+#: builtin/log.c:2158
+msgid "Generating patches"
+msgstr "Membuat tambalan"
+
+#: builtin/log.c:2202
+msgid "failed to create output files"
+msgstr "tidak dapat membuat berkas keluaran"
+
+#: builtin/log.c:2261
+msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
+msgstr "git cherry [-v] [<hulu> [<kepala> [<batas>]]]"
+
+#: builtin/log.c:2315
+#, c-format
+msgid ""
+"Could not find a tracked remote branch, please specify <upstream> manually.\n"
+msgstr ""
+"Tidak dapat menemukan cabang remote terlacak, mohon sebutkan <hulu>\n"
+"secara manual.\n"
+
+#: builtin/ls-files.c:563
+msgid "git ls-files [<options>] [<file>...]"
+msgstr ""
+
+#: builtin/ls-files.c:619
+msgid "identify the file status with tags"
+msgstr ""
+
+#: builtin/ls-files.c:621
+msgid "use lowercase letters for 'assume unchanged' files"
+msgstr ""
+
+#: builtin/ls-files.c:623
+msgid "use lowercase letters for 'fsmonitor clean' files"
+msgstr ""
+
+#: builtin/ls-files.c:625
+msgid "show cached files in the output (default)"
+msgstr ""
+
+#: builtin/ls-files.c:627
+msgid "show deleted files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:629
+msgid "show modified files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:631
+msgid "show other files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:633
+msgid "show ignored files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:636
+msgid "show staged contents' object name in the output"
+msgstr ""
+
+#: builtin/ls-files.c:638
+msgid "show files on the filesystem that need to be removed"
+msgstr ""
+
+#: builtin/ls-files.c:640
+msgid "show 'other' directories' names only"
+msgstr ""
+
+#: builtin/ls-files.c:642
+msgid "show line endings of files"
+msgstr ""
+
+#: builtin/ls-files.c:644
+msgid "don't show empty directories"
+msgstr ""
+
+#: builtin/ls-files.c:647
+msgid "show unmerged files in the output"
+msgstr ""
+
+#: builtin/ls-files.c:649
+msgid "show resolve-undo information"
+msgstr ""
+
+#: builtin/ls-files.c:651
+msgid "skip files matching pattern"
+msgstr ""
+
+#: builtin/ls-files.c:654
+msgid "exclude patterns are read from <file>"
+msgstr ""
+
+#: builtin/ls-files.c:657
+msgid "read additional per-directory exclude patterns in <file>"
+msgstr ""
+
+#: builtin/ls-files.c:659
+msgid "add the standard git exclusions"
+msgstr ""
+
+#: builtin/ls-files.c:663
+msgid "make the output relative to the project top directory"
+msgstr ""
+
+#: builtin/ls-files.c:666
+msgid "recurse through submodules"
+msgstr ""
+
+#: builtin/ls-files.c:668
+msgid "if any <file> is not in the index, treat this as an error"
+msgstr ""
+
+#: builtin/ls-files.c:669
+msgid "tree-ish"
+msgstr ""
+
+#: builtin/ls-files.c:670
+msgid "pretend that paths removed since <tree-ish> are still present"
+msgstr ""
+
+#: builtin/ls-files.c:672
+msgid "show debugging data"
+msgstr ""
+
+#: builtin/ls-files.c:674
+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>...]]"
+msgstr ""
+
+#: 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
+msgid "exec"
+msgstr ""
+
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
+msgid "path of git-upload-pack on the remote host"
+msgstr ""
+
+#: builtin/ls-remote.c:66
+msgid "limit to tags"
+msgstr ""
+
+#: builtin/ls-remote.c:67
+msgid "limit to heads"
+msgstr ""
+
+#: builtin/ls-remote.c:68
+msgid "do not show peeled tags"
+msgstr ""
+
+#: builtin/ls-remote.c:70
+msgid "take url.<base>.insteadOf into account"
+msgstr ""
+
+#: builtin/ls-remote.c:73
+msgid "exit with exit code 2 if no matching refs are found"
+msgstr ""
+
+#: builtin/ls-remote.c:76
+msgid "show underlying ref in addition to the object pointed by it"
+msgstr ""
+
+#: builtin/ls-tree.c:30
+msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
+msgstr ""
+
+#: builtin/ls-tree.c:128
+msgid "only show trees"
+msgstr ""
+
+#: builtin/ls-tree.c:130
+msgid "recurse into subtrees"
+msgstr ""
+
+#: builtin/ls-tree.c:132
+msgid "show trees when recursing"
+msgstr ""
+
+#: builtin/ls-tree.c:135
+msgid "terminate entries with NUL byte"
+msgstr ""
+
+#: builtin/ls-tree.c:136
+msgid "include object size"
+msgstr ""
+
+#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+msgid "list only filenames"
+msgstr ""
+
+#: builtin/ls-tree.c:143
+msgid "use full path names"
+msgstr ""
+
+#: builtin/ls-tree.c:145
+msgid "list entire tree; not just current directory (implies --full-name)"
+msgstr ""
+
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr ""
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr ""
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr ""
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr ""
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr ""
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr ""
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr ""
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr ""
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr ""
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr ""
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr ""
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr ""
+
+#: builtin/mailsplit.c:241
+#, c-format
+msgid "empty mbox: '%s'"
+msgstr ""
+
+#: builtin/merge-base.c:32
+msgid "git merge-base [-a | --all] <commit> <commit>..."
+msgstr ""
+
+#: builtin/merge-base.c:33
+msgid "git merge-base [-a | --all] --octopus <commit>..."
+msgstr ""
+
+#: builtin/merge-base.c:34
+msgid "git merge-base --independent <commit>..."
+msgstr ""
+
+#: builtin/merge-base.c:35
+msgid "git merge-base --is-ancestor <commit> <commit>"
+msgstr ""
+
+#: builtin/merge-base.c:36
+msgid "git merge-base --fork-point <ref> [<commit>]"
+msgstr ""
+
+#: builtin/merge-base.c:143
+msgid "output all common ancestors"
+msgstr ""
+
+#: builtin/merge-base.c:145
+msgid "find ancestors for a single n-way merge"
+msgstr ""
+
+#: builtin/merge-base.c:147
+msgid "list revs not reachable from others"
+msgstr ""
+
+#: builtin/merge-base.c:149
+msgid "is the first one ancestor of the other?"
+msgstr ""
+
+#: builtin/merge-base.c:151
+msgid "find where <commit> forked from reflog of <ref>"
+msgstr ""
+
+#: builtin/merge-file.c:9
+msgid ""
+"git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> "
+"<orig-file> <file2>"
+msgstr ""
+
+#: builtin/merge-file.c:35
+msgid "send results to standard output"
+msgstr ""
+
+#: builtin/merge-file.c:36
+msgid "use a diff3 based merge"
+msgstr ""
+
+#: builtin/merge-file.c:37
+msgid "for conflicts, use our version"
+msgstr ""
+
+#: builtin/merge-file.c:39
+msgid "for conflicts, use their version"
+msgstr ""
+
+#: builtin/merge-file.c:41
+msgid "for conflicts, use a union version"
+msgstr ""
+
+#: builtin/merge-file.c:44
+msgid "for conflicts, use this marker size"
+msgstr ""
+
+#: builtin/merge-file.c:45
+msgid "do not warn about conflicts"
+msgstr ""
+
+#: builtin/merge-file.c:47
+msgid "set labels for file1/orig-file/file2"
+msgstr ""
+
+#: builtin/merge-recursive.c:47
+#, c-format
+msgid "unknown option %s"
+msgstr ""
+
+#: builtin/merge-recursive.c:53
+#, c-format
+msgid "could not parse object '%s'"
+msgstr ""
+
+#: builtin/merge-recursive.c:57
+#, c-format
+msgid "cannot handle more than %d base. Ignoring %s."
+msgid_plural "cannot handle more than %d bases. Ignoring %s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/merge-recursive.c:65
+msgid "not handling anything other than two heads merge."
+msgstr ""
+
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
+#, c-format
+msgid "could not resolve ref '%s'"
+msgstr ""
+
+#: builtin/merge-recursive.c:82
+#, c-format
+msgid "Merging %s with %s\n"
+msgstr ""
+
+#: builtin/merge.c:58
+msgid "git merge [<options>] [<commit>...]"
+msgstr "git merge [<opsi>] [<komit>...]"
+
+#: 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
+msgid "switch `m' requires a value"
+msgstr "tombol `m' butuh sebuah nilai"
+
+#: builtin/merge.c:146
+#, c-format
+msgid "option `%s' requires a value"
+msgstr "opsi `%s' butuh sebuah nilai"
+
+#: builtin/merge.c:199
+#, c-format
+msgid "Could not find merge strategy '%s'.\n"
+msgstr "Tidak dapat menemukan strategi penggabungan '%s'.\n"
+
+#: builtin/merge.c:200
+#, c-format
+msgid "Available strategies are:"
+msgstr "Strategi yang tersedia:"
+
+#: builtin/merge.c:205
+#, c-format
+msgid "Available custom strategies are:"
+msgstr "Strategi kustom yang tersedia:"
+
+#: builtin/merge.c:256 builtin/pull.c:133
+msgid "do not show a diffstat at the end of the merge"
+msgstr "jangan perlihatkan diffstat pada akhir penggabungan"
+
+#: builtin/merge.c:259 builtin/pull.c:136
+msgid "show a diffstat at the end of the merge"
+msgstr "perlihatkan diffstat pada akhir penggabungan"
+
+#: builtin/merge.c:260 builtin/pull.c:139
+msgid "(synonym to --stat)"
+msgstr "(sinonim untuk --stat)"
+
+#: builtin/merge.c:262 builtin/pull.c:142
+msgid "add (at most <n>) entries from shortlog to merge commit message"
+msgstr ""
+"tambah (paling banyak <n>) entri dari log pendek ke pesan komit penggabungan"
+
+#: builtin/merge.c:265 builtin/pull.c:148
+msgid "create a single commit instead of doing a merge"
+msgstr "buat satu komit daripada melakukan penggabungan"
+
+#: builtin/merge.c:267 builtin/pull.c:151
+msgid "perform a commit if the merge succeeds (default)"
+msgstr "lakukan komit jika penggabungan sukses (asali)"
+
+#: builtin/merge.c:269 builtin/pull.c:154
+msgid "edit message before committing"
+msgstr "sunting pesan sebelum komit"
+
+#: builtin/merge.c:271
+msgid "allow fast-forward (default)"
+msgstr "perbolehkan maju cepat (asali)"
+
+#: builtin/merge.c:273 builtin/pull.c:161
+msgid "abort if fast-forward is not possible"
+msgstr "batalkan jika maju cepat tidak dimungkinkan"
+
+#: builtin/merge.c:277 builtin/pull.c:164
+msgid "verify that the named commit has a valid GPG signature"
+msgstr "periksa bahwa komit bernama punya tandatangan GPG yang valid"
+
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
+msgid "strategy"
+msgstr "strategi"
+
+#: builtin/merge.c:279 builtin/pull.c:169
+msgid "merge strategy to use"
+msgstr "strategi penggabungan yang digunakan"
+
+#: builtin/merge.c:280 builtin/pull.c:172
+msgid "option=value"
+msgstr "opsi=nilai"
+
+#: builtin/merge.c:281 builtin/pull.c:173
+msgid "option for selected merge strategy"
+msgstr "opsi untuk strategi penggabungan yang dipilih"
+
+#: builtin/merge.c:283
+msgid "merge commit message (for a non-fast-forward merge)"
+msgstr "pesan komit penggabungan (untuk penggabungan bukan maju cepat)"
+
+#: builtin/merge.c:290
+msgid "abort the current in-progress merge"
+msgstr "batalkan penggabungan yang sedang berlangsung saat ini"
+
+#: builtin/merge.c:292
+msgid "--abort but leave index and working tree alone"
+msgstr "--abort tapi biarkan indeks dan pohon kerja"
+
+#: builtin/merge.c:294
+msgid "continue the current in-progress merge"
+msgstr "lanjutkan penggabungan yang sedang berlangsung saat ini"
+
+#: builtin/merge.c:296 builtin/pull.c:180
+msgid "allow merging unrelated histories"
+msgstr "perbolehkan penggabungan riwayat yang tak terkait"
+
+#: builtin/merge.c:303
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr "lewati hook pre-merge-commit dan commit-msg"
+
+#: builtin/merge.c:320
+msgid "could not run stash."
+msgstr "tidak dapat menjalankan stase."
+
+#: builtin/merge.c:325
+msgid "stash failed"
+msgstr "stase gagal"
+
+#: builtin/merge.c:330
+#, c-format
+msgid "not a valid object: %s"
+msgstr "bukan objek valid: %s"
+
+#: builtin/merge.c:352 builtin/merge.c:369
+msgid "read-tree failed"
+msgstr "read-tree gagal"
+
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Sudah diperbarui. (tidak ada yang bisa dilumat)"
+
+#: builtin/merge.c:414
+#, c-format
+msgid "Squash commit -- not updating HEAD\n"
+msgstr "Lumat komit -- tak perbarui HEAD\n"
+
+#: builtin/merge.c:464
+#, c-format
+msgid "No merge message -- not updating HEAD\n"
+msgstr "Tidak ada pesan komit -- tak perbarui HEAD\n"
+
+#: builtin/merge.c:515
+#, c-format
+msgid "'%s' does not point to a commit"
+msgstr "'%s' tidak menunjuk pada sebuah komit"
+
+#: builtin/merge.c:602
+#, c-format
+msgid "Bad branch.%s.mergeoptions string: %s"
+msgstr "Untai branch.%s.mergeoptions jelek: %s"
+
+#: builtin/merge.c:728
+msgid "Not handling anything other than two heads merge."
+msgstr "Tak tangani apapun selain penggabungan dua kepala."
+
+#: builtin/merge.c:741
+#, c-format
+msgid "Unknown option for merge-recursive: -X%s"
+msgstr "Opsi merge-recursive tak dikenal: -X%s"
+
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
+#, c-format
+msgid "unable to write %s"
+msgstr "tidak dapat menulis %s"
+
+#: builtin/merge.c:812
+#, c-format
+msgid "Could not read from '%s'"
+msgstr "Tidak dapat membaca dari '%s'"
+
+#: builtin/merge.c:821
+#, c-format
+msgid "Not committing merge; use 'git commit' to complete the merge.\n"
+msgstr ""
+"Tak mengkomit penggabungan; gunakan 'git commit' untuk menyelesaikan "
+"penggabungan.\n"
+
+#: builtin/merge.c:827
+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 ""
+"Mohon masukkan pesan komit untuk jelaskan mengapa penggabungan ini\n"
+"diperlukan, khususnya jika itu menggabungkan hulu terbarui ke cabang\n"
+"topik.\n"
+
+#: builtin/merge.c:832
+msgid "An empty message aborts the commit.\n"
+msgstr "Pesan kosong membatalkan komit.\n"
+
+#: builtin/merge.c:835
+#, c-format
+msgid ""
+"Lines starting with '%c' will be ignored, and an empty message aborts\n"
+"the commit.\n"
+msgstr ""
+"Baris yang diawali dengan '%c' akan diabaikan, dan pesan kosong batalkan\n"
+"komit.\n"
+
+#: builtin/merge.c:888
+msgid "Empty commit message."
+msgstr "Pesan komit kosong"
+
+#: builtin/merge.c:903
+#, c-format
+msgid "Wonderful.\n"
+msgstr "Luar biasa.\n"
+
+#: builtin/merge.c:964
+#, c-format
+msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
+msgstr "Penggabungan otomatis gagal; selesaikan konflik lalu komit hasilnya.\n"
+
+#: builtin/merge.c:1003
+msgid "No current branch."
+msgstr "Tidak ada cabang saat ini."
+
+#: builtin/merge.c:1005
+msgid "No remote for the current branch."
+msgstr "Tidak ada remote untuk cabang saat ini."
+
+#: builtin/merge.c:1007
+msgid "No default upstream defined for the current branch."
+msgstr "Tidak ada hulu asali yang ditentukan untuk cabang saat ini."
+
+#: builtin/merge.c:1012
+#, c-format
+msgid "No remote-tracking branch for %s from %s"
+msgstr "Tidak ada cabang pelacak remote untuk %s dari %s"
+
+#: builtin/merge.c:1069
+#, c-format
+msgid "Bad value '%s' in environment '%s'"
+msgstr "Nilai jelek '%s' dalam lingkungan '%s'"
+
+#: builtin/merge.c:1172
+#, c-format
+msgid "not something we can merge in %s: %s"
+msgstr "bukan sesuatu yang kami bisa gabungkan di %s: %s"
+
+#: builtin/merge.c:1206
+msgid "not something we can merge"
+msgstr "bukan sesuatu yang kami bisa gabungkan"
+
+#: builtin/merge.c:1316
+msgid "--abort expects no arguments"
+msgstr "--abort harap tanpa argumen"
+
+#: builtin/merge.c:1320
+msgid "There is no merge to abort (MERGE_HEAD missing)."
+msgstr "Tidak ada penggabungan yang bisa dibatalkan (MERGE_HEAD hilang)."
+
+#: builtin/merge.c:1338
+msgid "--quit expects no arguments"
+msgstr "--quit harap tanpa argumen"
+
+#: builtin/merge.c:1351
+msgid "--continue expects no arguments"
+msgstr "--continue harap tanpa argumen"
+
+#: builtin/merge.c:1355
+msgid "There is no merge in progress (MERGE_HEAD missing)."
+msgstr "Tidak ada penggabungan yang sedang berlangsung (MERGE_HEAD hilang)."
+
+#: builtin/merge.c:1371
+msgid ""
+"You have not concluded your merge (MERGE_HEAD exists).\n"
+"Please, commit your changes before you merge."
+msgstr ""
+"Anda belum mengakhiri penggabungan Anda (MERGE_HEAD ada).\n"
+"Mohon komit perubahan Anda sebelum Anda gabungkan."
+
+#: builtin/merge.c:1378
+msgid ""
+"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
+"Please, commit your changes before you merge."
+msgstr ""
+"Anda belum mengakhiri pemetikan ceri Anda (CHERRY_PICK_HEAD ada).\n"
+"Mohon komit perubahan Anda sebelum Anda gabungkan."
+
+#: builtin/merge.c:1381
+msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
+msgstr "Anda belum mengakhiri pemetikan ceri Anda (CHERRY_PICK_HEAD ada)."
+
+#: builtin/merge.c:1395
+msgid "You cannot combine --squash with --no-ff."
+msgstr "Anda tidak dapat menggabungkan --squash dengan --no-ff."
+
+#: builtin/merge.c:1397
+msgid "You cannot combine --squash with --commit."
+msgstr "Anda tidak dapat menggabungkan --squash dengan --commit"
+
+#: builtin/merge.c:1413
+msgid "No commit specified and merge.defaultToUpstream not set."
+msgstr ""
+"Tidak ada komit yang disebutkan dan merge.defaultToUpstream tidak disetel."
+
+#: builtin/merge.c:1430
+msgid "Squash commit into empty head not supported yet"
+msgstr "Lumat komit ke kepala kosong belum didukung"
+
+#: builtin/merge.c:1432
+msgid "Non-fast-forward commit does not make sense into an empty head"
+msgstr "Komit nir maju cepat tidak masuk akal ke kepala kosong"
+
+#: builtin/merge.c:1437
+#, c-format
+msgid "%s - not something we can merge"
+msgstr "%s - bukan sesuatu yang kami bisa gabungkan"
+
+#: builtin/merge.c:1439
+msgid "Can merge only exactly one commit into empty head"
+msgstr "Hanya bisa menggabungkan tepantnya satu komit ke kepala kosong"
+
+#: builtin/merge.c:1520
+msgid "refusing to merge unrelated histories"
+msgstr "menolak menggabungkan riwayat tak terkait"
+
+#: builtin/merge.c:1539
+#, c-format
+msgid "Updating %s..%s\n"
+msgstr "Memperbarui %s..%s\n"
+
+#: builtin/merge.c:1585
+#, c-format
+msgid "Trying really trivial in-index merge...\n"
+msgstr "Mencoba penggabungan dalam indeks yang sangat sepele\n"
+
+#: builtin/merge.c:1592
+#, c-format
+msgid "Nope.\n"
+msgstr "Tidak.\n"
+
+#: builtin/merge.c:1623
+msgid "Not possible to fast-forward, aborting."
+msgstr "Tidak mungkin untuk maju cepat, batalkan."
+
+#: builtin/merge.c:1651 builtin/merge.c:1716
+#, c-format
+msgid "Rewinding the tree to pristine...\n"
+msgstr "Memutar ulang pohon ke asli...\n"
+
+#: builtin/merge.c:1655
+#, c-format
+msgid "Trying merge strategy %s...\n"
+msgstr "Mencoba strategi penggabungan %s...\n"
+
+#: builtin/merge.c:1707
+#, c-format
+msgid "No merge strategy handled the merge.\n"
+msgstr "Tidak ada strategi yang menangani penggabungan.\n"
+
+#: builtin/merge.c:1709
+#, c-format
+msgid "Merge with strategy %s failed.\n"
+msgstr "Penggabungan dengan strategi %s gagal.\n"
+
+#: builtin/merge.c:1718
+#, c-format
+msgid "Using the %s to prepare resolving by hand.\n"
+msgstr "Menggunakan %s untuk menyiapkan penyelesaian dengan tangan.\n"
+
+#: builtin/merge.c:1732
+#, c-format
+msgid "Automatic merge went well; stopped before committing as requested\n"
+msgstr ""
+"Penggabungan otomatis berjalan baik; berhenti sebelum mengkomit seperti yang "
+"diminta\n"
+
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr ""
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr ""
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr ""
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr ""
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr ""
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr ""
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr ""
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr ""
+
+#: builtin/mktree.c:66
+msgid "git mktree [-z] [--missing] [--batch]"
+msgstr ""
+
+#: builtin/mktree.c:154
+msgid "input is NUL terminated"
+msgstr ""
+
+#: builtin/mktree.c:155 builtin/write-tree.c:26
+msgid "allow missing objects"
+msgstr ""
+
+#: builtin/mktree.c:156
+msgid "allow creation of more than one tree"
+msgstr ""
+
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr ""
+
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr ""
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr ""
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr ""
+
+#: builtin/multi-pack-index.c:54
+msgid "object directory containing set of packfile and pack-index pairs"
+msgstr ""
+
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr ""
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr ""
+
+#: builtin/multi-pack-index.c:128
+msgid ""
+"during repack, collect pack-files of smaller size into a batch that is "
+"larger than this size"
+msgstr ""
+
+#: builtin/multi-pack-index.c:180
+#, c-format
+msgid "unrecognized subcommand: %s"
+msgstr ""
+
+#: builtin/mv.c:18
+msgid "git mv [<options>] <source>... <destination>"
+msgstr "git mv [<opsi>] <sumber>... <tujuan>"
+
+#: builtin/mv.c:83
+#, c-format
+msgid "Directory %s is in index and no submodule?"
+msgstr "Direktori %s di dalam indeks dan tidak ada submodul?"
+
+#: builtin/mv.c:85
+msgid "Please stage your changes to .gitmodules or stash them to proceed"
+msgstr ""
+"Mohon gelar perubahan Anda ke .gitmodules atau stase itu untuk melanjutkan"
+
+#: builtin/mv.c:103
+#, c-format
+msgid "%.*s is in index"
+msgstr "%.*s di dalam indeks"
+
+#: builtin/mv.c:125
+msgid "force move/rename even if target exists"
+msgstr "paksa pindah/ganti nama bahkan jika target ada"
+
+#: builtin/mv.c:127
+msgid "skip move/rename errors"
+msgstr "lewati kesalahan pindah/ganti nama"
+
+#: builtin/mv.c:170
+#, c-format
+msgid "destination '%s' is not a directory"
+msgstr "tujuan '%s' bukan direktori"
+
+#: builtin/mv.c:181
+#, c-format
+msgid "Checking rename of '%s' to '%s'\n"
+msgstr "Memeriksa penamaan ulang '%s' ke '%s'\n"
+
+#: builtin/mv.c:185
+msgid "bad source"
+msgstr "sumber jelek"
+
+#: builtin/mv.c:188
+msgid "can not move directory into itself"
+msgstr "tidak dapat memindahkan direktori ke dirinya sendiri"
+
+#: builtin/mv.c:191
+msgid "cannot move directory over file"
+msgstr "tidak dapat memindahkan direktori ke berkas"
+
+#: builtin/mv.c:200
+msgid "source directory is empty"
+msgstr "direktori asal kosong"
+
+#: builtin/mv.c:225
+msgid "not under version control"
+msgstr "bukan dalam kontrol versi"
+
+#: builtin/mv.c:227
+msgid "conflicted"
+msgstr "terkonflik"
+
+#: builtin/mv.c:230
+msgid "destination exists"
+msgstr "tujuan ada"
+
+#: builtin/mv.c:238
+#, c-format
+msgid "overwriting '%s'"
+msgstr "menimpa '%s'"
+
+#: builtin/mv.c:241
+msgid "Cannot overwrite"
+msgstr "Tidak dapat menimpa"
+
+#: builtin/mv.c:244
+msgid "multiple sources for the same target"
+msgstr "banyak asal untuk target yang sama"
+
+#: builtin/mv.c:246
+msgid "destination directory does not exist"
+msgstr "direktori tujuan tidak ada"
+
+#: builtin/mv.c:253
+#, c-format
+msgid "%s, source=%s, destination=%s"
+msgstr "%s, source=%s, destination=%s"
+
+#: builtin/mv.c:274
+#, c-format
+msgid "Renaming %s to %s\n"
+msgstr "Mengganti nama %s ke %s\n"
+
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
+#, c-format
+msgid "renaming '%s' failed"
+msgstr "gagal mengganti nama '%s'"
+
+#: builtin/name-rev.c:465
+msgid "git name-rev [<options>] <commit>..."
+msgstr ""
+
+#: builtin/name-rev.c:466
+msgid "git name-rev [<options>] --all"
+msgstr ""
+
+#: builtin/name-rev.c:467
+msgid "git name-rev [<options>] --stdin"
+msgstr ""
+
+#: builtin/name-rev.c:524
+msgid "print only ref-based names (no object names)"
+msgstr ""
+
+#: builtin/name-rev.c:525
+msgid "only use tags to name the commits"
+msgstr ""
+
+#: builtin/name-rev.c:527
+msgid "only use refs matching <pattern>"
+msgstr ""
+
+#: builtin/name-rev.c:529
+msgid "ignore refs matching <pattern>"
+msgstr ""
+
+#: builtin/name-rev.c:531
+msgid "list all commits reachable from all refs"
+msgstr ""
+
+#: builtin/name-rev.c:532
+msgid "read from stdin"
+msgstr ""
+
+#: builtin/name-rev.c:533
+msgid "allow to print `undefined` names (default)"
+msgstr ""
+
+#: builtin/name-rev.c:539
+msgid "dereference tags in the input (internal use)"
+msgstr ""
+
+#: builtin/notes.c:28
+msgid "git notes [--ref <notes-ref>] [list [<object>]]"
+msgstr ""
+
+#: builtin/notes.c:29
+msgid ""
+"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> "
+"| (-c | -C) <object>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:30
+msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
+msgstr ""
+
+#: builtin/notes.c:31
+msgid ""
+"git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | "
+"(-c | -C) <object>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:32
+msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:33
+msgid "git notes [--ref <notes-ref>] show [<object>]"
+msgstr ""
+
+#: builtin/notes.c:34
+msgid ""
+"git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
+msgstr ""
+
+#: builtin/notes.c:35
+msgid "git notes merge --commit [-v | -q]"
+msgstr ""
+
+#: builtin/notes.c:36
+msgid "git notes merge --abort [-v | -q]"
+msgstr ""
+
+#: builtin/notes.c:37
+msgid "git notes [--ref <notes-ref>] remove [<object>...]"
+msgstr ""
+
+#: builtin/notes.c:38
+msgid "git notes [--ref <notes-ref>] prune [-n] [-v]"
+msgstr ""
+
+#: builtin/notes.c:39
+msgid "git notes [--ref <notes-ref>] get-ref"
+msgstr ""
+
+#: builtin/notes.c:44
+msgid "git notes [list [<object>]]"
+msgstr ""
+
+#: builtin/notes.c:49
+msgid "git notes add [<options>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:54
+msgid "git notes copy [<options>] <from-object> <to-object>"
+msgstr ""
+
+#: builtin/notes.c:55
+msgid "git notes copy --stdin [<from-object> <to-object>]..."
+msgstr ""
+
+#: builtin/notes.c:60
+msgid "git notes append [<options>] [<object>]"
+msgstr ""
+
+#: builtin/notes.c:65
+msgid "git notes edit [<object>]"
+msgstr ""
+
+#: builtin/notes.c:70
+msgid "git notes show [<object>]"
+msgstr ""
+
+#: builtin/notes.c:75
+msgid "git notes merge [<options>] <notes-ref>"
+msgstr ""
+
+#: builtin/notes.c:76
+msgid "git notes merge --commit [<options>]"
+msgstr ""
+
+#: builtin/notes.c:77
+msgid "git notes merge --abort [<options>]"
+msgstr ""
+
+#: builtin/notes.c:82
+msgid "git notes remove [<object>]"
+msgstr ""
+
+#: builtin/notes.c:87
+msgid "git notes prune [<options>]"
+msgstr ""
+
+#: builtin/notes.c:92
+msgid "git notes get-ref"
+msgstr ""
+
+#: builtin/notes.c:97
+msgid "Write/edit the notes for the following object:"
+msgstr ""
+
+#: builtin/notes.c:150
+#, c-format
+msgid "unable to start 'show' for object '%s'"
+msgstr ""
+
+#: builtin/notes.c:154
+msgid "could not read 'show' output"
+msgstr ""
+
+#: builtin/notes.c:162
+#, c-format
+msgid "failed to finish 'show' for object '%s'"
+msgstr ""
+
+#: builtin/notes.c:197
+msgid "please supply the note contents using either -m or -F option"
+msgstr ""
+
+#: builtin/notes.c:206
+msgid "unable to write note object"
+msgstr ""
+
+#: builtin/notes.c:208
+#, c-format
+msgid "the note contents have been left in %s"
+msgstr ""
+
+#: builtin/notes.c:242 builtin/tag.c:576
+#, c-format
+msgid "could not open or read '%s'"
+msgstr ""
+
+#: 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
+#, c-format
+msgid "failed to resolve '%s' as a valid ref."
+msgstr ""
+
+#: builtin/notes.c:265
+#, c-format
+msgid "failed to read object '%s'."
+msgstr ""
+
+#: builtin/notes.c:268
+#, c-format
+msgid "cannot read note data from non-blob object '%s'."
+msgstr ""
+
+#: builtin/notes.c:309
+#, c-format
+msgid "malformed input line: '%s'."
+msgstr ""
+
+#: builtin/notes.c:324
+#, c-format
+msgid "failed to copy notes from '%s' to '%s'"
+msgstr ""
+
+#. TRANSLATORS: the first %s will be replaced by a git
+#. notes command: 'add', 'merge', 'remove', etc.
+#.
+#: builtin/notes.c:356
+#, c-format
+msgid "refusing to %s notes in %s (outside of refs/notes/)"
+msgstr ""
+
+#: 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
+msgid "too many arguments"
+msgstr ""
+
+#: builtin/notes.c:389 builtin/notes.c:678
+#, c-format
+msgid "no note found for object %s."
+msgstr ""
+
+#: builtin/notes.c:410 builtin/notes.c:576
+msgid "note contents as a string"
+msgstr ""
+
+#: builtin/notes.c:413 builtin/notes.c:579
+msgid "note contents in a file"
+msgstr ""
+
+#: builtin/notes.c:416 builtin/notes.c:582
+msgid "reuse and edit specified note object"
+msgstr ""
+
+#: builtin/notes.c:419 builtin/notes.c:585
+msgid "reuse specified note object"
+msgstr ""
+
+#: builtin/notes.c:422 builtin/notes.c:588
+msgid "allow storing empty note"
+msgstr ""
+
+#: builtin/notes.c:423 builtin/notes.c:496
+msgid "replace existing notes"
+msgstr ""
+
+#: builtin/notes.c:448
+#, c-format
+msgid ""
+"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
+"existing notes"
+msgstr ""
+
+#: builtin/notes.c:463 builtin/notes.c:544
+#, c-format
+msgid "Overwriting existing notes for object %s\n"
+msgstr ""
+
+#: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
+#, c-format
+msgid "Removing note for object %s\n"
+msgstr ""
+
+#: builtin/notes.c:497
+msgid "read objects from stdin"
+msgstr ""
+
+#: builtin/notes.c:499
+msgid "load rewriting config for <command> (implies --stdin)"
+msgstr ""
+
+#: builtin/notes.c:517
+msgid "too few arguments"
+msgstr ""
+
+#: builtin/notes.c:538
+#, c-format
+msgid ""
+"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
+"existing notes"
+msgstr ""
+
+#: builtin/notes.c:550
+#, c-format
+msgid "missing notes on source object %s. Cannot copy."
+msgstr ""
+
+#: builtin/notes.c:603
+#, c-format
+msgid ""
+"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
+"Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
+msgstr ""
+
+#: builtin/notes.c:698
+msgid "failed to delete ref NOTES_MERGE_PARTIAL"
+msgstr ""
+
+#: builtin/notes.c:700
+msgid "failed to delete ref NOTES_MERGE_REF"
+msgstr ""
+
+#: builtin/notes.c:702
+msgid "failed to remove 'git notes merge' worktree"
+msgstr ""
+
+#: builtin/notes.c:722
+msgid "failed to read ref NOTES_MERGE_PARTIAL"
+msgstr ""
+
+#: builtin/notes.c:724
+msgid "could not find commit from NOTES_MERGE_PARTIAL."
+msgstr ""
+
+#: builtin/notes.c:726
+msgid "could not parse commit from NOTES_MERGE_PARTIAL."
+msgstr ""
+
+#: builtin/notes.c:739
+msgid "failed to resolve NOTES_MERGE_REF"
+msgstr ""
+
+#: builtin/notes.c:742
+msgid "failed to finalize notes merge"
+msgstr ""
+
+#: builtin/notes.c:768
+#, c-format
+msgid "unknown notes merge strategy %s"
+msgstr ""
+
+#: builtin/notes.c:784
+msgid "General options"
+msgstr ""
+
+#: builtin/notes.c:786
+msgid "Merge options"
+msgstr ""
+
+#: builtin/notes.c:788
+msgid ""
+"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
+"cat_sort_uniq)"
+msgstr ""
+
+#: builtin/notes.c:790
+msgid "Committing unmerged notes"
+msgstr ""
+
+#: builtin/notes.c:792
+msgid "finalize notes merge by committing unmerged notes"
+msgstr ""
+
+#: builtin/notes.c:794
+msgid "Aborting notes merge resolution"
+msgstr ""
+
+#: builtin/notes.c:796
+msgid "abort notes merge"
+msgstr ""
+
+#: builtin/notes.c:807
+msgid "cannot mix --commit, --abort or -s/--strategy"
+msgstr ""
+
+#: builtin/notes.c:812
+msgid "must specify a notes ref to merge"
+msgstr ""
+
+#: builtin/notes.c:836
+#, c-format
+msgid "unknown -s/--strategy: %s"
+msgstr ""
+
+#: builtin/notes.c:873
+#, c-format
+msgid "a notes merge into %s is already in-progress at %s"
+msgstr ""
+
+#: builtin/notes.c:876
+#, c-format
+msgid "failed to store link to current notes ref (%s)"
+msgstr ""
+
+#: builtin/notes.c:878
+#, 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"
+msgstr ""
+
+#: builtin/notes.c:897 builtin/tag.c:589
+#, c-format
+msgid "Failed to resolve '%s' as a valid ref."
+msgstr ""
+
+#: builtin/notes.c:900
+#, c-format
+msgid "Object %s has no note\n"
+msgstr ""
+
+#: builtin/notes.c:912
+msgid "attempt to remove non-existent note is not an error"
+msgstr ""
+
+#: builtin/notes.c:915
+msgid "read object names from the standard input"
+msgstr ""
+
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
+msgid "do not remove, show only"
+msgstr ""
+
+#: builtin/notes.c:955
+msgid "report pruned notes"
+msgstr ""
+
+#: builtin/notes.c:998
+msgid "notes-ref"
+msgstr ""
+
+#: builtin/notes.c:999
+msgid "use notes from <notes-ref>"
+msgstr ""
+
+#: builtin/notes.c:1034 builtin/stash.c:1739
+#, c-format
+msgid "unknown subcommand: %s"
+msgstr ""
+
+#: builtin/pack-objects.c:54
+msgid ""
+"git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
+msgstr ""
+
+#: builtin/pack-objects.c:55
+msgid ""
+"git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
+msgstr ""
+
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:448
+#, c-format
+msgid "bad packed object CRC for %s"
+msgstr ""
+
+#: builtin/pack-objects.c:459
+#, c-format
+msgid "corrupt packed object for %s"
+msgstr ""
+
+#: builtin/pack-objects.c:590
+#, c-format
+msgid "recursive delta detected for object %s"
+msgstr ""
+
+#: builtin/pack-objects.c:801
+#, c-format
+msgid "ordered %u objects, expected %<PRIu32>"
+msgstr ""
+
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:1015
+msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
+msgstr ""
+
+#: builtin/pack-objects.c:1028
+msgid "Writing objects"
+msgstr ""
+
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
+#, c-format
+msgid "failed to stat %s"
+msgstr ""
+
+#: builtin/pack-objects.c:1141
+#, c-format
+msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
+msgstr ""
+
+#: builtin/pack-objects.c:1383
+msgid "disabling bitmap writing, as some objects are not being packed"
+msgstr ""
+
+#: builtin/pack-objects.c:1831
+#, c-format
+msgid "delta base offset overflow in pack for %s"
+msgstr ""
+
+#: builtin/pack-objects.c:1840
+#, c-format
+msgid "delta base offset out of bound for %s"
+msgstr ""
+
+#: builtin/pack-objects.c:2121
+msgid "Counting objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2266
+#, c-format
+msgid "unable to parse object header of %s"
+msgstr ""
+
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
+#, c-format
+msgid "object %s cannot be read"
+msgstr ""
+
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
+#, c-format
+msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
+msgstr ""
+
+#: builtin/pack-objects.c:2376
+msgid "suboptimal pack - out of memory"
+msgstr ""
+
+#: builtin/pack-objects.c:2691
+#, c-format
+msgid "Delta compression using up to %d threads"
+msgstr ""
+
+#: builtin/pack-objects.c:2830
+#, c-format
+msgid "unable to pack objects reachable from tag %s"
+msgstr ""
+
+#: builtin/pack-objects.c:2916
+msgid "Compressing objects"
+msgstr ""
+
+#: builtin/pack-objects.c:2922
+msgid "inconsistency with delta count"
+msgstr ""
+
+#: builtin/pack-objects.c:3001
+#, c-format
+msgid ""
+"value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
+"hash> <uri>' (got '%s')"
+msgstr ""
+
+#: builtin/pack-objects.c:3004
+#, c-format
+msgid ""
+"object already configured in another uploadpack.blobpackfileuri (got '%s')"
+msgstr ""
+
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr ""
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr ""
+
+#: builtin/pack-objects.c:3218
+#, c-format
+msgid ""
+"expected edge object ID, got garbage:\n"
+" %s"
+msgstr ""
+
+#: builtin/pack-objects.c:3224
+#, c-format
+msgid ""
+"expected object ID, got garbage:\n"
+" %s"
+msgstr ""
+
+#: builtin/pack-objects.c:3322
+msgid "invalid value for --missing"
+msgstr ""
+
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
+msgid "cannot open pack index"
+msgstr ""
+
+#: builtin/pack-objects.c:3412
+#, c-format
+msgid "loose object at %s could not be examined"
+msgstr ""
+
+#: builtin/pack-objects.c:3498
+msgid "unable to force loose object"
+msgstr ""
+
+#: builtin/pack-objects.c:3628
+#, c-format
+msgid "not a rev '%s'"
+msgstr ""
+
+#: builtin/pack-objects.c:3631
+#, c-format
+msgid "bad revision '%s'"
+msgstr ""
+
+#: builtin/pack-objects.c:3659
+msgid "unable to add recent objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3712
+#, c-format
+msgid "unsupported index version %s"
+msgstr ""
+
+#: builtin/pack-objects.c:3716
+#, c-format
+msgid "bad index version '%s'"
+msgstr ""
+
+#: builtin/pack-objects.c:3755
+msgid "<version>[,<offset>]"
+msgstr ""
+
+#: builtin/pack-objects.c:3756
+msgid "write the pack index file in the specified idx format version"
+msgstr ""
+
+#: builtin/pack-objects.c:3759
+msgid "maximum size of each output pack file"
+msgstr ""
+
+#: builtin/pack-objects.c:3761
+msgid "ignore borrowed objects from alternate object store"
+msgstr ""
+
+#: builtin/pack-objects.c:3763
+msgid "ignore packed objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3765
+msgid "limit pack window by objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3767
+msgid "limit pack window by memory in addition to object limit"
+msgstr ""
+
+#: builtin/pack-objects.c:3769
+msgid "maximum length of delta chain allowed in the resulting pack"
+msgstr ""
+
+#: builtin/pack-objects.c:3771
+msgid "reuse existing deltas"
+msgstr ""
+
+#: builtin/pack-objects.c:3773
+msgid "reuse existing objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3775
+msgid "use OFS_DELTA objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3777
+msgid "use threads when searching for best delta matches"
+msgstr ""
+
+#: builtin/pack-objects.c:3779
+msgid "do not create an empty pack output"
+msgstr ""
+
+#: builtin/pack-objects.c:3781
+msgid "read revision arguments from standard input"
+msgstr ""
+
+#: builtin/pack-objects.c:3783
+msgid "limit the objects to those that are not yet packed"
+msgstr ""
+
+#: builtin/pack-objects.c:3786
+msgid "include objects reachable from any reference"
+msgstr ""
+
+#: builtin/pack-objects.c:3789
+msgid "include objects referred by reflog entries"
+msgstr ""
+
+#: builtin/pack-objects.c:3792
+msgid "include objects referred to by the index"
+msgstr ""
+
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr ""
+
+#: builtin/pack-objects.c:3797
+msgid "output pack to stdout"
+msgstr ""
+
+#: builtin/pack-objects.c:3799
+msgid "include tag objects that refer to objects to be packed"
+msgstr ""
+
+#: builtin/pack-objects.c:3801
+msgid "keep unreachable objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3803
+msgid "pack loose unreachable objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3805
+msgid "unpack unreachable objects newer than <time>"
+msgstr ""
+
+#: builtin/pack-objects.c:3808
+msgid "use the sparse reachability algorithm"
+msgstr ""
+
+#: builtin/pack-objects.c:3810
+msgid "create thin packs"
+msgstr ""
+
+#: builtin/pack-objects.c:3812
+msgid "create packs suitable for shallow fetches"
+msgstr ""
+
+#: builtin/pack-objects.c:3814
+msgid "ignore packs that have companion .keep file"
+msgstr ""
+
+#: builtin/pack-objects.c:3816
+msgid "ignore this pack"
+msgstr ""
+
+#: builtin/pack-objects.c:3818
+msgid "pack compression level"
+msgstr ""
+
+#: builtin/pack-objects.c:3820
+msgid "do not hide commits by grafts"
+msgstr ""
+
+#: builtin/pack-objects.c:3822
+msgid "use a bitmap index if available to speed up counting objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3824
+msgid "write a bitmap index together with the pack index"
+msgstr ""
+
+#: builtin/pack-objects.c:3828
+msgid "write a bitmap index if possible"
+msgstr ""
+
+#: builtin/pack-objects.c:3832
+msgid "handling for missing objects"
+msgstr ""
+
+#: builtin/pack-objects.c:3835
+msgid "do not pack objects in promisor packfiles"
+msgstr ""
+
+#: builtin/pack-objects.c:3837
+msgid "respect islands during delta compression"
+msgstr ""
+
+#: builtin/pack-objects.c:3839
+msgid "protocol"
+msgstr ""
+
+#: builtin/pack-objects.c:3840
+msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
+msgstr ""
+
+#: builtin/pack-objects.c:3873
+#, c-format
+msgid "delta chain depth %d is too deep, forcing %d"
+msgstr ""
+
+#: builtin/pack-objects.c:3878
+#, c-format
+msgid "pack.deltaCacheLimit is too high, forcing %d"
+msgstr ""
+
+#: builtin/pack-objects.c:3934
+msgid "--max-pack-size cannot be used to build a pack for transfer"
+msgstr ""
+
+#: builtin/pack-objects.c:3936
+msgid "minimum pack size limit is 1 MiB"
+msgstr ""
+
+#: builtin/pack-objects.c:3941
+msgid "--thin cannot be used to build an indexable pack"
+msgstr ""
+
+#: builtin/pack-objects.c:3944
+msgid "--keep-unreachable and --unpack-unreachable are incompatible"
+msgstr ""
+
+#: builtin/pack-objects.c:3950
+msgid "cannot use --filter without --stdout"
+msgstr ""
+
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr ""
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr ""
+
+#: builtin/pack-objects.c:4015
+msgid "Enumerating objects"
+msgstr ""
+
+#: builtin/pack-objects.c:4052
+#, c-format
+msgid ""
+"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
+"reused %<PRIu32>"
+msgstr ""
+
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"and let us know you still use it by sending an e-mail\n"
+"to <git@vger.kernel.org>.  Thanks.\n"
+msgstr ""
+
+#: builtin/pack-refs.c:8
+msgid "git pack-refs [<options>]"
+msgstr ""
+
+#: builtin/pack-refs.c:16
+msgid "pack everything"
+msgstr ""
+
+#: builtin/pack-refs.c:17
+msgid "prune loose refs (default)"
+msgstr ""
+
+#: builtin/prune-packed.c:6
+msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
+msgstr ""
+
+#: builtin/prune.c:14
+msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
+msgstr ""
+
+#: builtin/prune.c:133
+msgid "report pruned objects"
+msgstr ""
+
+#: builtin/prune.c:136
+msgid "expire objects older than <time>"
+msgstr ""
+
+#: builtin/prune.c:138
+msgid "limit traversal to objects outside promisor packfiles"
+msgstr ""
+
+#: builtin/prune.c:152
+msgid "cannot prune in a precious-objects repo"
+msgstr ""
+
+#: builtin/pull.c:45 builtin/pull.c:47
+#, c-format
+msgid "Invalid value for %s: %s"
+msgstr "Nilai tidak valid untuk %s: %s"
+
+#: builtin/pull.c:67
+msgid "git pull [<options>] [<repository> [<refspec>...]]"
+msgstr "git pull [<opsi>] [<repositori> [<spek referensi>]]"
+
+#: builtin/pull.c:123
+msgid "control for recursive fetching of submodules"
+msgstr "kontrol pengambilan rekursif submodul"
+
+#: builtin/pull.c:127
+msgid "Options related to merging"
+msgstr "Opsi yang berkaitan dengan penggabungan"
+
+#: builtin/pull.c:130
+msgid "incorporate changes by rebasing rather than merging"
+msgstr "masukkan perubahan dengan pendasaran ulang daripada penggabungan"
+
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
+msgid "allow fast-forward"
+msgstr "perbolehkan maju cepat"
+
+#: builtin/pull.c:167 parse-options.h:340
+msgid "automatically stash/stash pop before and after"
+msgstr "stash/stash pop otomatis sebelum dan sesudah"
+
+#: builtin/pull.c:183
+msgid "Options related to fetching"
+msgstr "Opsi yang berkaitan dengan pengambilan"
+
+#: builtin/pull.c:193
+msgid "force overwrite of local branch"
+msgstr "paksa timpa cabang lokal"
+
+#: builtin/pull.c:201
+msgid "number of submodules pulled in parallel"
+msgstr "nomor submodul ditarik dalam paralel"
+
+#: builtin/pull.c:317
+#, c-format
+msgid "Invalid value for pull.ff: %s"
+msgstr "Nilai tidak valid untuk pull.ff: %s"
+
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Tidak ada kandidat untuk didasarkan ulang diantara referensi yang baru saja "
+"Anda ambil."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Tidak ada kandidat untuk digabungkan diantara referensi yang baru sajaAnda "
+"ambil."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Umumnya itu berarti Anda memberikan spek referensi wildcard yang tidak\n"
+"cocok pada ujung remote."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Anda minta untuk tarik dari remote '%s', tapi tidak menyebutkan\n"
+"satu cabang. Oleh karena ini bukan remote terkonfigurasi asali untuk\n"
+"cabang Anda saat ini, Anda harus sebutkan satu cabang pada baris perintah."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Anda tidak berada pada sebuah cabang."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Mohon sebutkan cabang mana yang Anda ingin didasarkan ulang."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Mohon sebutkan cabang mana yang Anda ingin digabungkan."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Lihat git-pull(1) untuk selengkapnya."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<remote>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<cabang>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Tidak ada informasi pelacakan untuk cabang saat ini."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Jika Anda ingin menyetel informasi pelacakan untuk cabang ini Anda bisa "
+"melakukannya dengan:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Konfigurasi Anda menyebutkan untuk menggabungkan dengan referensi '%s'\n"
+"dari remote, tapi tidak ada referensi seperti itu yang diambil."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "Tidak dapat mengakses komit %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "mengabaikan --verify-signatures untuk pendasaran ulang"
+
+#: builtin/pull.c:930
+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"
+"\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"
+"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"
+msgstr ""
+"Menarik tanpa menyebutkan cara merujukkan cabang yang berlainan tidak\n"
+"disarankan. Anda dapat mematikan pesan ini dengan menjalankan salah\n"
+"satu perintah berikut sebelum penarikan berikutnya:\n"
+"\n"
+"  git config pull.rebase false  # penggabungan (strategi asali)\n"
+"  git config pull.rebase true   # pendasaran ulang\n"
+"  git config pull.ff only       # hanya maju cepat\n"
+"\n"
+"Anda dapat mengganti \"git config\" dengan \"git config --global\" untuk\n"
+"menyetel pilihan asali untuk semua repositori. Anda juga dapat melewatkan\n"
+"--rebase, --no-rebase, atau --ff-only pada baris perintah untuk menimpa\n"
+"asali terkonfigurasi untuk setiap invokasi.\n"
+
+#: builtin/pull.c:991
+msgid "Updating an unborn branch with changes added to the index."
+msgstr ""
+"Memperbarui cabang yang belum lahir dengan perubahan yang ditambahkan ke "
+"indeks."
+
+#: builtin/pull.c:995
+msgid "pull with rebase"
+msgstr "tarik dengan pendasaran ulang"
+
+#: builtin/pull.c:996
+msgid "please commit or stash them."
+msgstr "mohon komit atau stase itu."
+
+#: builtin/pull.c:1021
+#, c-format
+msgid ""
+"fetch updated the current branch head.\n"
+"fast-forwarding your working tree from\n"
+"commit %s."
+msgstr ""
+"fetch memperbarui kepala cabang saat ini.\n"
+"memajukan-cepat pohon kerja Anda dari komit %s."
+
+#: builtin/pull.c:1027
+#, c-format
+msgid ""
+"Cannot fast-forward your working tree.\n"
+"After making sure that you saved anything precious from\n"
+"$ git diff %s\n"
+"output, run\n"
+"$ git reset --hard\n"
+"to recover."
+msgstr ""
+"Tidak dapat maju-cepat pohon kerja Anda.\n"
+"Setelah Anda yakin Anda simpan apapun yang penting dari keluaran\n"
+"$ git diff %s,\n"
+"jalankan\n"
+"$ git reset --hard\n"
+"untuk memulihkan."
+
+#: builtin/pull.c:1042
+msgid "Cannot merge multiple branches into empty head."
+msgstr "Tidak dapat menggabungkan banyak cabang ke kepala kosong."
+
+#: builtin/pull.c:1046
+msgid "Cannot rebase onto multiple branches."
+msgstr "Tidak dapat mendasarkan ulang pada banyak cabang."
+
+#: builtin/pull.c:1067
+msgid "cannot rebase with locally recorded submodule modifications"
+msgstr ""
+"tidak dapat mendasarkan ulang dengan modifikasi submodul yang terekam lokal."
+
+#: builtin/push.c:19
+msgid "git push [<options>] [<repository> [<refspec>...]]"
+msgstr "git push [<opsi>] [<repositori> [<spek referensi>...]]"
+
+#: builtin/push.c:111
+msgid "tag shorthand without <tag>"
+msgstr "pintasan tag tanpa <tag>"
+
+#: builtin/push.c:119
+msgid "--delete only accepts plain target ref names"
+msgstr "--delete hanya terima nama target referensi polos"
+
+#: builtin/push.c:164
+msgid ""
+"\n"
+"To choose either option permanently, see push.default in 'git help config'."
+msgstr ""
+"\n"
+"Untuk memilih salah satu opsi secara permanen, lihat push.default di 'git "
+"help config'."
+
+#: builtin/push.c:167
+#, c-format
+msgid ""
+"The upstream branch of your current branch does not match\n"
+"the name of your current branch.  To push to the upstream branch\n"
+"on the remote, use\n"
+"\n"
+"    git push %s HEAD:%s\n"
+"\n"
+"To push to the branch of the same name on the remote, use\n"
+"\n"
+"    git push %s HEAD\n"
+"%s"
+msgstr ""
+"Cabang hulu dari cabang Anda saat ini tidak cocok dengan \n"
+"nama cabang Anda saat ini. Untuk dorong ke cabang hulu pada remote,\n"
+"gunakan\n"
+"\n"
+"    git push %s HEAD:%s\n"
+"\n"
+"Untuk dorong ke cabang bernama sama pada remote, gunakan\n"
+"\n"
+"    git push %s HEAD\n"
+"%s"
+
+#: builtin/push.c:182
+#, c-format
+msgid ""
+"You are not currently on a branch.\n"
+"To push the history leading to the current (detached HEAD)\n"
+"state now, use\n"
+"\n"
+"    git push %s HEAD:<name-of-remote-branch>\n"
+msgstr ""
+"Anda tidak berada pada cabang.\n"
+"Untuk dorong riwayat hingga kondisi saat ini (HEAD terlepas)\n"
+"sekarang, gunakan\n"
+"\n"
+"    git push %s HEAD:<nama-cabang-remote>\n"
+
+#: builtin/push.c:194
+#, c-format
+msgid ""
+"The current branch %s has no upstream branch.\n"
+"To push the current branch and set the remote as upstream, use\n"
+"\n"
+"    git push --set-upstream %s %s\n"
+msgstr ""
+"Cabang saat ini %s tidak punya cabang hulu.\n"
+"Untuk dorong cabang saat ini dan setel remote sebagai hulu, gunakan\n"
+"\n"
+"    git push --set-upstream %s %s\n"
+
+#: builtin/push.c:202
+#, c-format
+msgid "The current branch %s has multiple upstream branches, refusing to push."
+msgstr "Cabang saat ini %s punya banyak cabang hulu, tolak dorong. "
+
+#: builtin/push.c:205
+#, c-format
+msgid ""
+"You are pushing to remote '%s', which is not the upstream of\n"
+"your current branch '%s', without telling me what to push\n"
+"to update which remote branch."
+msgstr ""
+"Anda sedang mendorong ke remote '%s', yang bukan hulu dari\n"
+"cabang Anda saat ini '%s', tanpa beri tahu saya apa yang harus\n"
+"didorong untuk perbarui cabang remote yang mana."
+
+#: builtin/push.c:260
+msgid ""
+"You didn't specify any refspecs to push, and push.default is \"nothing\"."
+msgstr ""
+"Anda tidak sebutkan spek referensi apapun untuk didorong, dan push.default "
+"yaitu \"nothing\""
+
+#: builtin/push.c:267
+msgid ""
+"Updates were rejected because the tip of your current branch is behind\n"
+"its remote counterpart. Integrate the remote changes (e.g.\n"
+"'git pull ...') before pushing again.\n"
+"See the 'Note about fast-forwards' in 'git push --help' for details."
+msgstr ""
+"Pembaruan ditolak karena ujung dari cabang Anda saat ini di belakang\n"
+"pasangan remotenya. Integrasikan perubahan remote (seperti\n"
+"'git pull') sebelum dorong lagi.\n"
+"Lihat 'Note about fast-forwards' di 'git push --help' untuk selengkapnya."
+
+#: builtin/push.c:273
+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"
+"(e.g. 'git pull ...') before pushing again.\n"
+"See the 'Note about fast-forwards' in 'git push --help' for details."
+msgstr ""
+"Pembaruan ditolak karena ujung dari cabang yang didorong di belakang\n"
+"pasangan remotenya. Check out cabang itu dan integrasikan perubahan\n"
+"remote (seperti 'git pull') sebelum dorong lagi.\n"
+"Lihat 'Note about fast-forwards' di 'git push --help' untuk selengkapnya."
+
+#: builtin/push.c:279
+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"
+"to the same ref. You may want to first integrate the remote changes\n"
+"(e.g., 'git pull ...') before pushing again.\n"
+"See the 'Note about fast-forwards' in 'git push --help' for details."
+msgstr ""
+"Pembaruan ditolak karena remote berisi kerja yang Anda tidak punya\n"
+"di lokal. Ini biasanya disebabkan repositori yang lain dorong ke\n"
+"referensi yang sama. Mungkin Anda ingin integrasikan terlebih dahulu\n"
+"perubahan remote (seperti 'git pull') sebelum dorong lagi.\n"
+"Lihat 'Note about fast-forwards' di 'git push --help' untuk selengkapnya."
+
+#: builtin/push.c:286
+msgid "Updates were rejected because the tag already exists in the remote."
+msgstr "Pembaruan ditolak karena tag sudah ada di remote."
+
+#: builtin/push.c:289
+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"
+"without using the '--force' option.\n"
+msgstr ""
+"Anda tidak dapat memperbarui referensi remote yang menunjuk ke objek\n"
+"non komit atau memperbarui referensi remote agar itu memnunjuk ke\n"
+"objek non komit, tanpa menggunakan opsi '--force'.\n"
+
+#: builtin/push.c:294
+msgid ""
+"Updates were rejected because the tip of the remote-tracking\n"
+"branch has been updated since the last checkout. You may want\n"
+"to integrate those changes locally (e.g., 'git pull ...')\n"
+"before forcing an update.\n"
+msgstr ""
+"Pembaruan ditolak karena ujung dari cabang pelacak remote\n"
+"sudah diperbarui sejak checkout terakhir. Mungkin Anda ingin\n"
+"integrasikan perubahan tersebut ke lokal (seperti 'git pull...')\n"
+"sebelum memaksa pembaruan.\n"
+
+#: builtin/push.c:364
+#, c-format
+msgid "Pushing to %s\n"
+msgstr "Mendorong ke %s\n"
+
+#: builtin/push.c:371
+#, c-format
+msgid "failed to push some refs to '%s'"
+msgstr "gagal dorong beberapa referensi ke '%s'"
+
+#: builtin/push.c:553
+msgid "repository"
+msgstr "repositori"
+
+#: builtin/push.c:554 builtin/send-pack.c:189
+msgid "push all refs"
+msgstr "dorong semua referensi"
+
+#: builtin/push.c:555 builtin/send-pack.c:191
+msgid "mirror all refs"
+msgstr "cermin semua referensi"
+
+#: builtin/push.c:557
+msgid "delete refs"
+msgstr "hapus referensi"
+
+#: builtin/push.c:558
+msgid "push tags (can't be used with --all or --mirror)"
+msgstr "dorong tag (tidak dapat digunakan dengan --all atau --mirror)"
+
+#: builtin/push.c:561 builtin/send-pack.c:192
+msgid "force updates"
+msgstr "paksa pembaruan"
+
+#: builtin/push.c:562 builtin/send-pack.c:204
+msgid "<refname>:<expect>"
+msgstr "<nama referensi>:<harapan>"
+
+#: builtin/push.c:563 builtin/send-pack.c:205
+msgid "require old value of ref to be at this value"
+msgstr "memerlukan nilai lama referensi berada pada nilai saat ini"
+
+#: builtin/push.c:566 builtin/send-pack.c:208
+msgid "require remote updates to be integrated locally"
+msgstr "memerlukan pembaruan remote diintegrasikan ke lokal"
+
+#: builtin/push.c:569
+msgid "control recursive pushing of submodules"
+msgstr "kontrol dorong rekursif submodul"
+
+#: builtin/push.c:570 builtin/send-pack.c:199
+msgid "use thin pack"
+msgstr "gunakan paket tipis"
+
+#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
+#: builtin/send-pack.c:187
+msgid "receive pack program"
+msgstr "program terima paket"
+
+#: builtin/push.c:573
+msgid "set upstream for git pull/status"
+msgstr "setel hulu untuk git pull/status"
+
+#: builtin/push.c:576
+msgid "prune locally removed refs"
+msgstr "buang referensi terhapus lokal"
+
+#: builtin/push.c:578
+msgid "bypass pre-push hook"
+msgstr "lewati kait pra-dorong"
+
+#: builtin/push.c:579
+msgid "push missing but relevant tags"
+msgstr "dorong tag yang hilang tapi relevan"
+
+#: builtin/push.c:581 builtin/send-pack.c:193
+msgid "GPG sign the push"
+msgstr "Tandatangan GPG dorong"
+
+#: builtin/push.c:583 builtin/send-pack.c:200
+msgid "request atomic transaction on remote side"
+msgstr "minta transaksi atomik pada sisi remote"
+
+#: builtin/push.c:601
+msgid "--delete is incompatible with --all, --mirror and --tags"
+msgstr "--delete tidak kompatibel dengan --all, --mirror dan --tags "
+
+#: builtin/push.c:603
+msgid "--delete doesn't make sense without any refs"
+msgstr "--delete tidak masuk akal tanpa referensi"
+
+#: builtin/push.c:623
+#, c-format
+msgid "bad repository '%s'"
+msgstr "repositori jelek '%s'"
+
+#: builtin/push.c:624
+msgid ""
+"No configured push destination.\n"
+"Either specify the URL from the command-line or configure a remote "
+"repository using\n"
+"\n"
+"    git remote add <name> <url>\n"
+"\n"
+"and then push using the remote name\n"
+"\n"
+"    git push <name>\n"
+msgstr ""
+"Tidak ada tujuan dorong terkonfigurasi.\n"
+"Baik sebutkan URL dari baris perintah atau konfigurasikan repositori remote "
+"dengan menggunakan\n"
+"\n"
+"    git remote add <nama> <url>\n"
+"\n"
+"dan dorong dengan menggunakan nama remote\n"
+"\n"
+"    git push <nama>\n"
+
+#: builtin/push.c:639
+msgid "--all and --tags are incompatible"
+msgstr "--all dan --tags tidak kompatibel"
+
+#: builtin/push.c:641
+msgid "--all can't be combined with refspecs"
+msgstr "--all tidak dapat digabung dengan spek referensi"
+
+#: builtin/push.c:645
+msgid "--mirror and --tags are incompatible"
+msgstr "--mirror dan --tags tidak kompatibel"
+
+#: builtin/push.c:647
+msgid "--mirror can't be combined with refspecs"
+msgstr "--mirror tidak dapat digabungkan dengan spek referensi"
+
+#: builtin/push.c:650
+msgid "--all and --mirror are incompatible"
+msgstr "--all dan --mirror tidak kompatibel"
+
+#: builtin/push.c:657
+msgid "push options must not have new line characters"
+msgstr "opsi dorong harus tidak ada karakter baris baru"
+
+#: builtin/range-diff.c:9
+msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
+msgstr ""
+
+#: builtin/range-diff.c:10
+msgid "git range-diff [<options>] <old-tip>...<new-tip>"
+msgstr ""
+
+#: builtin/range-diff.c:11
+msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
+msgstr ""
+
+#: builtin/range-diff.c:30
+msgid "use simple diff colors"
+msgstr ""
+
+#: builtin/range-diff.c:32
+msgid "notes"
+msgstr ""
+
+#: builtin/range-diff.c:32
+msgid "passed to 'git log'"
+msgstr ""
+
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr ""
+
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr ""
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr ""
+
+#: builtin/range-diff.c:74
+msgid "single arg format must be symmetric range"
+msgstr ""
+
+#: builtin/range-diff.c:89
+msgid "need two commit ranges"
+msgstr ""
+
+#: 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>]])"
+msgstr ""
+
+#: builtin/read-tree.c:124
+msgid "write resulting index to <file>"
+msgstr ""
+
+#: builtin/read-tree.c:127
+msgid "only empty the index"
+msgstr ""
+
+#: builtin/read-tree.c:129
+msgid "Merging"
+msgstr ""
+
+#: builtin/read-tree.c:131
+msgid "perform a merge in addition to a read"
+msgstr ""
+
+#: builtin/read-tree.c:133
+msgid "3-way merge if no file level merging required"
+msgstr ""
+
+#: builtin/read-tree.c:135
+msgid "3-way merge in presence of adds and removes"
+msgstr ""
+
+#: builtin/read-tree.c:137
+msgid "same as -m, but discard unmerged entries"
+msgstr ""
+
+#: builtin/read-tree.c:138
+msgid "<subdirectory>/"
+msgstr ""
+
+#: builtin/read-tree.c:139
+msgid "read the tree into the index under <subdirectory>/"
+msgstr ""
+
+#: builtin/read-tree.c:142
+msgid "update working tree with merge result"
+msgstr ""
+
+#: builtin/read-tree.c:144
+msgid "gitignore"
+msgstr ""
+
+#: builtin/read-tree.c:145
+msgid "allow explicitly ignored files to be overwritten"
+msgstr ""
+
+#: builtin/read-tree.c:148
+msgid "don't check the working tree after merging"
+msgstr ""
+
+#: builtin/read-tree.c:149
+msgid "don't update the index or the work tree"
+msgstr ""
+
+#: builtin/read-tree.c:151
+msgid "skip applying sparse checkout filter"
+msgstr ""
+
+#: builtin/read-tree.c:153
+msgid "debug unpack-trees"
+msgstr ""
+
+#: builtin/read-tree.c:157
+msgid "suppress feedback messages"
+msgstr ""
+
+#: builtin/read-tree.c:188
+msgid "You need to resolve your current index first"
+msgstr ""
+
+#: builtin/rebase.c:35
+msgid ""
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
+msgstr ""
+"git rebase [-i] [opsi] [--exec <perintah>] [--onto <basis baru> | --keep-"
+"base][<hulu> [<cabang>]]"
+
+#: builtin/rebase.c:37
+msgid ""
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
+msgstr ""
+"git rebase [-i] [opsi] [--exec <perintah>] [--onto <basis baru>] --root "
+"[<cabang>]"
+
+#: 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 "daftar todo tidak dapat digunakan: '%s'"
+
+#: builtin/rebase.c:311
+#, c-format
+msgid "could not create temporary %s"
+msgstr "tidak dapat membuat %s sementara"
+
+#: builtin/rebase.c:317
+msgid "could not mark as interactive"
+msgstr "tidak dapat menandai sebagai interaktif"
+
+#: builtin/rebase.c:370
+msgid "could not generate todo list"
+msgstr "tidak dapat membuat daftar todo"
+
+#: builtin/rebase.c:412
+msgid "a base commit must be provided with --upstream or --onto"
+msgstr "basis komit harus diberikan dengan --upstream atau --onto"
+
+#: builtin/rebase.c:481
+msgid "git rebase--interactive [<options>]"
+msgstr "git rebase--interactive [<opsi>]"
+
+#: builtin/rebase.c:494 builtin/rebase.c:1389
+msgid "keep commits which start empty"
+msgstr "simpan komit yang dimulai kosong"
+
+#: builtin/rebase.c:498 builtin/revert.c:128
+msgid "allow commits with empty messages"
+msgstr "perbolehkan komit dengan pesan kosong"
+
+#: builtin/rebase.c:500
+msgid "rebase merge commits"
+msgstr "dasarkan ulang komit penggabungan"
+
+#: builtin/rebase.c:502
+msgid "keep original branch points of cousins"
+msgstr "simpan titik cabang sepupu asal "
+
+#: builtin/rebase.c:504
+msgid "move commits that begin with squash!/fixup!"
+msgstr "pindahkan komit yang diawali dengan squash!/fixup!"
+
+#: builtin/rebase.c:505
+msgid "sign commits"
+msgstr "tandatangani komit"
+
+#: builtin/rebase.c:507 builtin/rebase.c:1328
+msgid "display a diffstat of what changed upstream"
+msgstr "perlihatkan diffstat apa yang berubah di hulu"
+
+#: builtin/rebase.c:509
+msgid "continue rebase"
+msgstr "lanjutkan pendasaran ulang"
+
+#: builtin/rebase.c:511
+msgid "skip commit"
+msgstr "lewatkan komit"
+
+#: builtin/rebase.c:512
+msgid "edit the todo list"
+msgstr "sunting daftar todo"
+
+#: builtin/rebase.c:514
+msgid "show the current patch"
+msgstr "perlihatkan tambalan saat ini"
+
+#: builtin/rebase.c:517
+msgid "shorten commit ids in the todo list"
+msgstr "pendekkan id komit dalam daftar todo"
+
+#: builtin/rebase.c:519
+msgid "expand commit ids in the todo list"
+msgstr "jabarkan id komit dalam daftar todo"
+
+#: builtin/rebase.c:521
+msgid "check the todo list"
+msgstr "periksa daftar todo"
+
+#: builtin/rebase.c:523
+msgid "rearrange fixup/squash lines"
+msgstr "susun ulang baris fixup/squash"
+
+#: builtin/rebase.c:525
+msgid "insert exec commands in todo list"
+msgstr "masukkan perintah exec ke dalam daftar todo"
+
+#: builtin/rebase.c:526
+msgid "onto"
+msgstr "ke"
+
+#: builtin/rebase.c:529
+msgid "restrict-revision"
+msgstr "restrict-revision"
+
+#: builtin/rebase.c:529
+msgid "restrict revision"
+msgstr "batasi revisi"
+
+#: builtin/rebase.c:531
+msgid "squash-onto"
+msgstr "squash-onto"
+
+#: builtin/rebase.c:532
+msgid "squash onto"
+msgstr "lumat ke"
+
+#: builtin/rebase.c:534
+msgid "the upstream commit"
+msgstr "komit hulu"
+
+#: builtin/rebase.c:536
+msgid "head-name"
+msgstr "head-name"
+
+#: builtin/rebase.c:536
+msgid "head name"
+msgstr "nama kepala"
+
+#: builtin/rebase.c:541
+msgid "rebase strategy"
+msgstr "strategi pendasaran"
+
+#: builtin/rebase.c:542
+msgid "strategy-opts"
+msgstr "strategy-opts"
+
+#: builtin/rebase.c:543
+msgid "strategy options"
+msgstr "opsi strategi"
+
+#: builtin/rebase.c:544
+msgid "switch-to"
+msgstr "switch-to"
+
+#: builtin/rebase.c:545
+msgid "the branch or commit to checkout"
+msgstr "cabang atau komit untuk di-checkout"
+
+#: builtin/rebase.c:546
+msgid "onto-name"
+msgstr "onto-name"
+
+#: builtin/rebase.c:546
+msgid "onto name"
+msgstr "nama ke"
+
+#: builtin/rebase.c:547
+msgid "cmd"
+msgstr "cmd"
+
+#: builtin/rebase.c:547
+msgid "the command to run"
+msgstr "perintah untuk dijalankan"
+
+#: builtin/rebase.c:550 builtin/rebase.c:1422
+msgid "automatically re-schedule any `exec` that fails"
+msgstr "jadwal ulang otomatis `exec` apa saja yang gagal"
+
+#: builtin/rebase.c:566
+msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
+msgstr "--[no-]rebase-cousins tidak ada efek tanpa --rebase-merges"
+
+#: builtin/rebase.c:582
+#, c-format
+msgid "%s requires the merge backend"
+msgstr "%s butuh tulang belakang penggabungan"
+
+#: builtin/rebase.c:625
+#, c-format
+msgid "could not get 'onto': '%s'"
+msgstr "tidak dapat mendapatkan 'ke': '%s'"
+
+#: builtin/rebase.c:642
+#, c-format
+msgid "invalid orig-head: '%s'"
+msgstr "orig-head tidak valid: '%s'"
+
+#: builtin/rebase.c:667
+#, c-format
+msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
+msgstr "abaikan allow_rerere_autoupdate yang tak valid: '%s'"
+
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
+msgid ""
+"Resolve all conflicts manually, mark them as resolved with\n"
+"\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
+"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\"."
+msgstr ""
+"Selesaikan semua konflik secara manual, tandai sebagai terselesaikan\n"
+"dengan \"git add/rm <berkas terkonflik>\", lalu jalankan\n"
+"\"git rebase --continue\".\n"
+"Anda juga bisa melewatkan komit ini: jalankan \"git rebase --skip\".\n"
+"Untuk membatalkan dan kembali ke kondisi sebelum \"git rebase\",jalankan "
+"\"git rebase --abort\"."
+
+#: builtin/rebase.c:896
+#, c-format
+msgid ""
+"\n"
+"git encountered an error while preparing the patches to replay\n"
+"these revisions:\n"
+"\n"
+"    %s\n"
+"\n"
+"As a result, git cannot rebase them."
+msgstr ""
+"\n"
+"git menemui kesalahan ketika menyiapan tambalan untuk memainkan ulang\n"
+"revisi berikut:\n"
+"\n"
+"    %s\n"
+"\n"
+"Hasilnya git tidak dapat mendasarkan ulang itu."
+
+#: builtin/rebase.c:1222
+#, c-format
+msgid ""
+"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
+"\"."
+msgstr ""
+"tipe kosong tak dikenali '%s'; nilai yang valid adalah \"drop\", \"keep\", "
+"dan \"ask\"."
+
+#: builtin/rebase.c:1240
+#, c-format
+msgid ""
+"%s\n"
+"Please specify which branch you want to rebase against.\n"
+"See git-rebase(1) for details.\n"
+"\n"
+"    git rebase '<branch>'\n"
+"\n"
+msgstr ""
+"%s\n"
+"Mohon sebutkan cabang mana yang Anda ingin dasarkan ulang.\n"
+"Lihat git-rebase(1) untuk selengkapnya.\n"
+"\n"
+"    git rebase '<cabang>'.\n"
+"\n"
+
+#: builtin/rebase.c:1256
+#, c-format
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:\n"
+"\n"
+"    git branch --set-upstream-to=%s/<branch> %s\n"
+"\n"
+msgstr ""
+"Kalau Anda ingin menyetel informasi pelacakan untuk cabang ini Anda\n"
+"dapat melakukan hal itu dengan:\n"
+"    git branch --set-upstream-to=%s/<cabang> %s\n"
+"\n"
+
+#: builtin/rebase.c:1286
+msgid "exec commands cannot contain newlines"
+msgstr "perintah exec tidak dapat berisi baris baru"
+
+#: builtin/rebase.c:1290
+msgid "empty exec command"
+msgstr "perintah exec kosong"
+
+#: builtin/rebase.c:1319
+msgid "rebase onto given branch instead of upstream"
+msgstr "dasarkan ulang kepada cabang yang diberikan daripada hulu"
+
+#: builtin/rebase.c:1321
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr "gunakan merge-base hulu dan cabang sebagai dasar saat ini"
+
+#: builtin/rebase.c:1323
+msgid "allow pre-rebase hook to run"
+msgstr "perbolehkan hook pre-rebase untuk dijalankan"
+
+#: builtin/rebase.c:1325
+msgid "be quiet. implies --no-stat"
+msgstr "diam. menyiratkan --no-stat"
+
+#: builtin/rebase.c:1331
+msgid "do not show diffstat of what changed upstream"
+msgstr "jangan perlihatkan diffstat apa yang berubah di hulu"
+
+#: builtin/rebase.c:1334
+msgid "add a Signed-off-by trailer to each commit"
+msgstr "tambahkan trailer Signed-off-by ke setiap komit"
+
+#: builtin/rebase.c:1337
+msgid "make committer date match author date"
+msgstr "jadikan tanggal pengkomit sama dengan tanggal pengarang"
+
+#: builtin/rebase.c:1339
+msgid "ignore author date and use current date"
+msgstr "abaikan tanggal pengarang dan gunakan tanggal saat ini"
+
+#: builtin/rebase.c:1341
+msgid "synonym of --reset-author-date"
+msgstr "sinonim dari --reset-author-date"
+
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
+msgid "passed to 'git apply'"
+msgstr "lewatkan ke 'git apply'"
+
+#: builtin/rebase.c:1345
+msgid "ignore changes in whitespace"
+msgstr "abaikan perubahan spasi"
+
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
+msgid "cherry-pick all commits, even if unchanged"
+msgstr "petik ceri semua komit, bahkan jika tak berubah"
+
+#: builtin/rebase.c:1354
+msgid "continue"
+msgstr "lanjutkan"
+
+#: builtin/rebase.c:1357
+msgid "skip current patch and continue"
+msgstr "lewatkan tambalan saat ini dan lanjutkan"
+
+#: builtin/rebase.c:1359
+msgid "abort and check out the original branch"
+msgstr "hentikan dan check out cabang asli"
+
+#: builtin/rebase.c:1362
+msgid "abort but keep HEAD where it is"
+msgstr "hentikan tapi simpan HEAD dimana itu berada"
+
+#: builtin/rebase.c:1363
+msgid "edit the todo list during an interactive rebase"
+msgstr "sunting daftar todo selama pendasaran ulang interaktif"
+
+#: builtin/rebase.c:1366
+msgid "show the patch file being applied or merged"
+msgstr "perlihatkan berkas tambalan yang sedang diterapkan atau digabungkan"
+
+#: builtin/rebase.c:1369
+msgid "use apply strategies to rebase"
+msgstr "gunakan strategi penerapan ke pendasaran ulang"
+
+#: builtin/rebase.c:1373
+msgid "use merging strategies to rebase"
+msgstr "gunakan strategi penggabungan ke pendasaran ulang"
+
+#: builtin/rebase.c:1377
+msgid "let the user edit the list of commits to rebase"
+msgstr "biarkan pengguna menyunting daftar komit untuk didasarkan ulang"
+
+#: builtin/rebase.c:1381
+msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
+msgstr "(USANG) coba buat ulang penggabungan daripada abaikan itu"
+
+#: builtin/rebase.c:1386
+msgid "how to handle commits that become empty"
+msgstr "bagaimana cara menangani komit yang menjadi kosong"
+
+#: builtin/rebase.c:1393
+msgid "move commits that begin with squash!/fixup! under -i"
+msgstr "pindahakan komit yang diawali dengan squash!/fixup! di bawah -i"
+
+#: builtin/rebase.c:1400
+msgid "add exec lines after each commit of the editable list"
+msgstr ""
+"tambahkan baris exec setelah setiap komit dari daftar yang bisa disunting"
+
+#: builtin/rebase.c:1404
+msgid "allow rebasing commits with empty messages"
+msgstr "perbolehkan mendasarkan ulang komit dengan pesan kosong"
+
+#: builtin/rebase.c:1408
+msgid "try to rebase merges instead of skipping them"
+msgstr "coba mendasarkan ulang penggabungan daripada melewatkan itu"
+
+#: builtin/rebase.c:1411
+msgid "use 'merge-base --fork-point' to refine upstream"
+msgstr "gunakan 'merge-base --fork-point' untuk menyaring hulu"
+
+#: builtin/rebase.c:1413
+msgid "use the given merge strategy"
+msgstr "gunakan strategi penggabungan yang diberikan"
+
+#: builtin/rebase.c:1415 builtin/revert.c:115
+msgid "option"
+msgstr "opsi"
+
+#: builtin/rebase.c:1416
+msgid "pass the argument through to the merge strategy"
+msgstr "lewatkan argumen ke strategi penggabungan"
+
+#: builtin/rebase.c:1419
+msgid "rebase all reachable commits up to the root(s)"
+msgstr "dasarkan ulang semua komit yang bisa dicapai hingga ke akar"
+
+#: builtin/rebase.c:1424
+msgid "apply all changes, even those already present upstream"
+msgstr "terapkan semua perubahan, bahkan yang sudah ada di hulu"
+
+#: builtin/rebase.c:1442
+msgid "It looks like 'git am' is in progress. Cannot rebase."
+msgstr "Sepertinya 'git am' sedang berjalan. Tidak dapat mendasarkan ulang"
+
+#: builtin/rebase.c:1483
+msgid ""
+"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
+msgstr ""
+"git rebase --preserve-merges usang. Gunakan --rebase-merges sebagai gantinya."
+
+#: builtin/rebase.c:1488
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "tidak dapat menggabungkan '--keep-base' dengan '--onto'"
+
+#: builtin/rebase.c:1490
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "tidak dapat menggabungkan '--keep-base' dengan '--root'"
+
+#: builtin/rebase.c:1494
+msgid "cannot combine '--root' with '--fork-point'"
+msgstr "tidak dapat menggabungkan '--root' dengan '--fork-point'"
+
+#: builtin/rebase.c:1497
+msgid "No rebase in progress?"
+msgstr "Tidak ada pendasaran ulang yang sedang berjalan?"
+
+#: builtin/rebase.c:1501
+msgid "The --edit-todo action can only be used during interactive rebase."
+msgstr ""
+"Aksi --edit-todo hanya dapat digunakan selama pendasaran ulang interaktif."
+
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
+msgid "Cannot read HEAD"
+msgstr "Tidak dapat membaca HEAD"
+
+#: builtin/rebase.c:1536
+msgid ""
+"You must edit all merge conflicts and then\n"
+"mark them as resolved using git add"
+msgstr ""
+"Anda harus menyunting semua konflik penggabungan lalu\n"
+"tandai itu sebagai terselesaikan menggunakan git add"
+
+#: builtin/rebase.c:1555
+msgid "could not discard worktree changes"
+msgstr "tidak dapat menyingkirkan perubahan pohon kerja"
+
+#: builtin/rebase.c:1574
+#, c-format
+msgid "could not move back to %s"
+msgstr "tidak dapt memindahkan kembali ke %s"
+
+#: builtin/rebase.c:1620
+#, c-format
+msgid ""
+"It seems that there is already a %s directory, and\n"
+"I wonder if you are in the middle of another rebase.  If that is the\n"
+"case, please try\n"
+"\t%s\n"
+"If that is not the case, please\n"
+"\t%s\n"
+"and run me again.  I am stopping in case you still have something\n"
+"valuable there.\n"
+msgstr ""
+"Sepertinya sudah ada direktori %s, dan saya ingin tahu kalau Anda\n"
+"berada di tengah-tengah pendasaran ulang yang lain. Jika itu maksudnya,\n"
+"mohon coba \n"
+"\t%s\n"
+"Jika itu bukan, mohon\n"
+"\t%s\n"
+"dan jalankan saya lagi. Saya berhenti seandainya Anda masih punya\n"
+"sesuatu yang berharga di sana.\n"
+
+#: builtin/rebase.c:1648
+msgid "switch `C' expects a numerical value"
+msgstr "tombol `C' harap nilai numerik"
+
+#: builtin/rebase.c:1690
+#, c-format
+msgid "Unknown mode: %s"
+msgstr "Mode tidak dikenal: %s"
+
+#: builtin/rebase.c:1729
+msgid "--strategy requires --merge or --interactive"
+msgstr "--strategy butuh --merge atau --interactive"
+
+#: builtin/rebase.c:1759
+msgid "cannot combine apply options with merge options"
+msgstr "tidak dapat menggabungkan opsi penerapan dengan opsi penggabungan"
+
+#: builtin/rebase.c:1772
+#, c-format
+msgid "Unknown rebase backend: %s"
+msgstr "Tulang belakang pendasaran ulang tidak dikenal: %s"
+
+#: builtin/rebase.c:1802
+msgid "--reschedule-failed-exec requires --exec or --interactive"
+msgstr "--reschedule-failed-exec butuh --exec atau --interactive"
+
+#: builtin/rebase.c:1822
+msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
+msgstr "tidak dapat menggabungkan '--preserve-merges' dengan '--rebase-merges'"
+
+#: builtin/rebase.c:1826
+msgid ""
+"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
+msgstr ""
+"error: tidak dapat menggabungkan '--preserve-merges' dengan '--reschedule-"
+"failed-exec'"
+
+#: builtin/rebase.c:1850
+#, c-format
+msgid "invalid upstream '%s'"
+msgstr "hulu tidak valid '%s'"
+
+#: builtin/rebase.c:1856
+msgid "Could not create new root commit"
+msgstr "tidak dapat membuat komit akar baru"
+
+#: builtin/rebase.c:1882
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr "'%s': butuh tepatnya satu dasar penggabungan dengan cabang"
+
+#: builtin/rebase.c:1885
+#, c-format
+msgid "'%s': need exactly one merge base"
+msgstr "'%s': butuh tepatnya satu dasar penggabungan"
+
+#: builtin/rebase.c:1893
+#, c-format
+msgid "Does not point to a valid commit '%s'"
+msgstr "Tidak menunjuk pada komit yang valid '%s'"
+
+#: builtin/rebase.c:1921
+#, c-format
+msgid "fatal: no such branch/commit '%s'"
+msgstr "fatal: tidak ada cabang/komit seperti '%s'"
+
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
+#, c-format
+msgid "No such ref: %s"
+msgstr "Tidak ada referensi seperti: %s"
+
+#: builtin/rebase.c:1940
+msgid "Could not resolve HEAD to a revision"
+msgstr "Tidak dapat menguraikan HEAD ke sebuah revisi"
+
+#: builtin/rebase.c:1961
+msgid "Please commit or stash them."
+msgstr "Mohon komit atau stase itu."
+
+#: builtin/rebase.c:1997
+#, c-format
+msgid "could not switch to %s"
+msgstr "tidak dapat mengganti ke %s"
+
+#: builtin/rebase.c:2008
+msgid "HEAD is up to date."
+msgstr "HEAD terbaru."
+
+#: builtin/rebase.c:2010
+#, c-format
+msgid "Current branch %s is up to date.\n"
+msgstr "Cabang saat ini %s terbaru.\n"
+
+#: builtin/rebase.c:2018
+msgid "HEAD is up to date, rebase forced."
+msgstr "HEAD terbaru, pendasaran ulang dipaksa."
+
+#: builtin/rebase.c:2020
+#, c-format
+msgid "Current branch %s is up to date, rebase forced.\n"
+msgstr "Cabang saat ini %s terbaru, pendasaran ulang dipaksa.\n"
+
+#: builtin/rebase.c:2028
+msgid "The pre-rebase hook refused to rebase."
+msgstr "Hook pre-rebase menolak mendasarkan ulang."
+
+#: builtin/rebase.c:2035
+#, c-format
+msgid "Changes to %s:\n"
+msgstr "Perubahan unuk %s:\n"
+
+#: builtin/rebase.c:2038
+#, c-format
+msgid "Changes from %s to %s:\n"
+msgstr "Perubahan dari %s ke %s:\n"
+
+#: builtin/rebase.c:2063
+#, c-format
+msgid "First, rewinding head to replay your work on top of it...\n"
+msgstr ""
+"Pertama, memutar ulang kepala untuk memainkan ulang karya Anda diatas "
+"itu...\n"
+
+#: builtin/rebase.c:2072
+msgid "Could not detach HEAD"
+msgstr "Tidak dapat melepas HEAD"
+
+#: builtin/rebase.c:2081
+#, c-format
+msgid "Fast-forwarded %s to %s.\n"
+msgstr "Maju-cepat %s ke %s.\n"
+
+#: builtin/receive-pack.c:34
+msgid "git receive-pack <git-dir>"
+msgstr ""
+
+#: builtin/receive-pack.c:1276
+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"
+"with what you pushed, and will require 'git reset --hard' to match\n"
+"the work tree to HEAD.\n"
+"\n"
+"You can set the 'receive.denyCurrentBranch' configuration variable\n"
+"to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
+"its current branch; however, this is not recommended unless you\n"
+"arranged to update its work tree to match what you pushed in some\n"
+"other way.\n"
+"\n"
+"To squelch this message and still keep the default behaviour, set\n"
+"'receive.denyCurrentBranch' configuration variable to 'refuse'."
+msgstr ""
+
+#: builtin/receive-pack.c:1296
+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"
+"\n"
+"You can set 'receive.denyDeleteCurrent' configuration variable to\n"
+"'warn' or 'ignore' in the remote repository to allow deleting the\n"
+"current branch, with or without a warning message.\n"
+"\n"
+"To squelch this message, you can set it to 'refuse'."
+msgstr ""
+
+#: builtin/receive-pack.c:2479
+msgid "quiet"
+msgstr ""
+
+#: builtin/receive-pack.c:2493
+msgid "You must specify a directory."
+msgstr ""
+
+#: builtin/reflog.c:17
+msgid ""
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
+"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
+"<refs>..."
+msgstr ""
+
+#: builtin/reflog.c:22
+msgid ""
+"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
+"<refs>..."
+msgstr ""
+
+#: builtin/reflog.c:25
+msgid "git reflog exists <ref>"
+msgstr ""
+
+#: builtin/reflog.c:568 builtin/reflog.c:573
+#, c-format
+msgid "'%s' is not a valid timestamp"
+msgstr ""
+
+#: builtin/reflog.c:609
+#, c-format
+msgid "Marking reachable objects..."
+msgstr ""
+
+#: builtin/reflog.c:647
+#, c-format
+msgid "%s points nowhere!"
+msgstr ""
+
+#: builtin/reflog.c:699
+msgid "no reflog specified to delete"
+msgstr ""
+
+#: builtin/reflog.c:708
+#, c-format
+msgid "not a reflog: %s"
+msgstr ""
+
+#: builtin/reflog.c:713
+#, c-format
+msgid "no reflog for '%s'"
+msgstr ""
+
+#: builtin/reflog.c:759
+#, c-format
+msgid "invalid ref format: %s"
+msgstr ""
+
+#: builtin/reflog.c:768
+msgid "git reflog [ show | expire | delete | exists ]"
+msgstr ""
+
+#: builtin/remote.c:17
+msgid "git remote [-v | --verbose]"
+msgstr "git remote [-v | --verbose]"
+
+#: builtin/remote.c:18
+msgid ""
+"git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
+"mirror=<fetch|push>] <name> <url>"
+msgstr ""
+"git remote add [-t <cabang>] [-m <master>] [-f] [--tags | --no-tags] [--"
+"mirror=<fetch|push>] <nama> <url>"
+
+#: builtin/remote.c:19 builtin/remote.c:39
+msgid "git remote rename <old> <new>"
+msgstr "git remote rename <lama> <baru>"
+
+#: builtin/remote.c:20 builtin/remote.c:44
+msgid "git remote remove <name>"
+msgstr "git remote remove <nama>"
+
+#: builtin/remote.c:21 builtin/remote.c:49
+msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
+msgstr "git remote set-head <nama> (-a | --auto | -d | --delete | <cabang>)"
+
+#: builtin/remote.c:22
+msgid "git remote [-v | --verbose] show [-n] <name>"
+msgstr "git remote [-v | --verbose] show [-n] <nama>"
+
+#: builtin/remote.c:23
+msgid "git remote prune [-n | --dry-run] <name>"
+msgstr "git remote prune [-n | --dry-run] <nama>"
+
+#: builtin/remote.c:24
+msgid ""
+"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
+msgstr ""
+"git remote [-v | --verbose] update [-p | --prune] [(<grup> | <remote>)...]"
+
+#: builtin/remote.c:25
+msgid "git remote set-branches [--add] <name> <branch>..."
+msgstr "git remote set-branches [--add] <nama> <cabang>..."
+
+#: builtin/remote.c:26 builtin/remote.c:75
+msgid "git remote get-url [--push] [--all] <name>"
+msgstr "git remote get-url [--push] [--all] <nama>"
+
+#: builtin/remote.c:27 builtin/remote.c:80
+msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
+msgstr "git remote set-url [--push] <nama> <url baru> [<url lama>]"
+
+#: builtin/remote.c:28 builtin/remote.c:81
+msgid "git remote set-url --add <name> <newurl>"
+msgstr "git remote set-url --add <nama> <url baru>"
+
+#: builtin/remote.c:29 builtin/remote.c:82
+msgid "git remote set-url --delete <name> <url>"
+msgstr "git remote set-url --delete <nama> <url>"
+
+#: builtin/remote.c:34
+msgid "git remote add [<options>] <name> <url>"
+msgstr "git remote add [<opsi>] <nama> <url>"
+
+#: builtin/remote.c:54
+msgid "git remote set-branches <name> <branch>..."
+msgstr "git remote set-branches <nama> <cabang>"
+
+#: builtin/remote.c:55
+msgid "git remote set-branches --add <name> <branch>..."
+msgstr "git remote set-branches --add <nama> <cabang>"
+
+#: builtin/remote.c:60
+msgid "git remote show [<options>] <name>"
+msgstr "git remote show [<opsi>] <nama>"
+
+#: builtin/remote.c:65
+msgid "git remote prune [<options>] <name>"
+msgstr "git remote prune [<opsi>] <nama>"
+
+#: builtin/remote.c:70
+msgid "git remote update [<options>] [<group> | <remote>]..."
+msgstr "git remote update [<opsi>] [<group> | <remote>]..."
+
+#: builtin/remote.c:99
+#, c-format
+msgid "Updating %s"
+msgstr "Memperbarui %s"
+
+#: builtin/remote.c:131
+msgid ""
+"--mirror is dangerous and deprecated; please\n"
+"\t use --mirror=fetch or --mirror=push instead"
+msgstr ""
+"--mirror berbahaya dan usang; mohon gunakan --mirror=fetch\n"
+"\t atau --mirror=push sebagai gantinya"
+
+#: builtin/remote.c:148
+#, c-format
+msgid "unknown mirror argument: %s"
+msgstr "argumen mirror tidak dikenal: %s"
+
+#: builtin/remote.c:164
+msgid "fetch the remote branches"
+msgstr "ambil cabang remote"
+
+#: builtin/remote.c:166
+msgid "import all tags and associated objects when fetching"
+msgstr "impor semua tag dan objek yang terkait ketika mengambil"
+
+#: builtin/remote.c:169
+msgid "or do not fetch any tag at all (--no-tags)"
+msgstr "atau jangan mengambil tag apapun (--no-tags)"
+
+#: builtin/remote.c:171
+msgid "branch(es) to track"
+msgstr "cabang untuk dilacak"
+
+#: builtin/remote.c:172
+msgid "master branch"
+msgstr "cabang master"
+
+#: builtin/remote.c:174
+msgid "set up remote as a mirror to push to or fetch from"
+msgstr "atur remote sebagai cermin untuk didorong atau diambil"
+
+#: builtin/remote.c:186
+msgid "specifying a master branch makes no sense with --mirror"
+msgstr "menyebutkan cabang master tidak masuk akal dengan --mirror"
+
+#: builtin/remote.c:188
+msgid "specifying branches to track makes sense only with fetch mirrors"
+msgstr "menyebutkan cabang untuk dilacak hanya masuk akal dengan cermin ambil"
+
+#: builtin/remote.c:195 builtin/remote.c:700
+#, c-format
+msgid "remote %s already exists."
+msgstr "remote %s sudah ada"
+
+#: builtin/remote.c:240
+#, c-format
+msgid "Could not setup master '%s'"
+msgstr "Tidak dapat mengatur master '%s'"
+
+#: builtin/remote.c:355
+#, c-format
+msgid "Could not get fetch map for refspec %s"
+msgstr "Tidak dapat mendapatkan peta pengambilan untuk spek referensi %s"
+
+#: builtin/remote.c:454 builtin/remote.c:462
+msgid "(matching)"
+msgstr "(sepadan)"
+
+#: builtin/remote.c:466
+msgid "(delete)"
+msgstr "(hapus)"
+
+#: builtin/remote.c:655
+#, c-format
+msgid "could not set '%s'"
+msgstr "tidak dapat menyetel '%s'"
+
+#: builtin/remote.c:660
+#, c-format
+msgid ""
+"The %s configuration remote.pushDefault in:\n"
+"\t%s:%d\n"
+"now names the non-existent remote '%s'"
+msgstr ""
+"Konfigurasi %s remote.pushDefault di:\n"
+"\t%s:%d\n"
+"sekarang menamai remote yang tiada '%s'"
+
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
+#, c-format
+msgid "No such remote: '%s'"
+msgstr "Tidak ada remote seperti: '%s'"
+
+#: builtin/remote.c:710
+#, c-format
+msgid "Could not rename config section '%s' to '%s'"
+msgstr "Tidak dapat menamai ulang bagian konfigurasi '%s' ke '%s'"
+
+#: builtin/remote.c:730
+#, c-format
+msgid ""
+"Not updating non-default fetch refspec\n"
+"\t%s\n"
+"\tPlease update the configuration manually if necessary."
+msgstr ""
+"Tidak memperbarui spek referensi pengambilan bukan asali\n"
+"\t%s\n"
+"\tMohon perbarui konfigurasi secara manual bila diperlukan."
+
+#: builtin/remote.c:770
+#, c-format
+msgid "deleting '%s' failed"
+msgstr "menghapus '%s' gagal"
+
+#: builtin/remote.c:804
+#, c-format
+msgid "creating '%s' failed"
+msgstr "membuat '%s' gagal"
+
+#: builtin/remote.c:882
+msgid ""
+"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
+"to delete it, use:"
+msgid_plural ""
+"Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n"
+"to delete them, use:"
+msgstr[0] ""
+"Catatan: Sebuah cabang diluar hierarki refs/remotes tidak dihapus;\n"
+"untuk menghapus itu, gunakan:"
+msgstr[1] ""
+"Catatan: Beberapa cabang diluar hierarki refs/remotes tidak dihapus;\n"
+"untuk menghapus itu, gunakan:"
+
+#: builtin/remote.c:896
+#, c-format
+msgid "Could not remove config section '%s'"
+msgstr "Tidak dapat menghapus bagian konfigurasi '%s'"
+
+#: builtin/remote.c:999
+#, c-format
+msgid " new (next fetch will store in remotes/%s)"
+msgstr " baru (pengambilan berikutnya akan simpan di remotes/%s)"
+
+#: builtin/remote.c:1002
+msgid " tracked"
+msgstr " dilacak"
+
+#: builtin/remote.c:1004
+msgid " stale (use 'git remote prune' to remove)"
+msgstr " basi (gunakan 'git remote prune' untuk hapus)"
+
+#: builtin/remote.c:1006
+msgid " ???"
+msgstr " ???"
+
+#: builtin/remote.c:1047
+#, c-format
+msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
+msgstr ""
+"branch.%s.merge tidak valid; tidak dapat mendasarkan ulang ke lebih dari "
+"satu cabang"
+
+#: builtin/remote.c:1056
+#, c-format
+msgid "rebases interactively onto remote %s"
+msgstr "dasarkan ulang secara interaktif ke remote %s"
+
+#: builtin/remote.c:1058
+#, c-format
+msgid "rebases interactively (with merges) onto remote %s"
+msgstr "dasarkan ulang secara interaktif (dengan penggabungan) ke remote %s"
+
+#: builtin/remote.c:1061
+#, c-format
+msgid "rebases onto remote %s"
+msgstr "dasarkan ulang ke remote %s"
+
+#: builtin/remote.c:1065
+#, c-format
+msgid " merges with remote %s"
+msgstr " gabungkan dengan remote %s"
+
+#: builtin/remote.c:1068
+#, c-format
+msgid "merges with remote %s"
+msgstr "gabungkan dengan remote %s"
+
+#: builtin/remote.c:1071
+#, c-format
+msgid "%-*s    and with remote %s\n"
+msgstr "%-*s    dan dengan remote %s\n"
+
+#: builtin/remote.c:1114
+msgid "create"
+msgstr "buat"
+
+#: builtin/remote.c:1117
+msgid "delete"
+msgstr "hapus"
+
+#: builtin/remote.c:1121
+msgid "up to date"
+msgstr "terbaru"
+
+#: builtin/remote.c:1124
+msgid "fast-forwardable"
+msgstr "bisa dimaju cepat"
+
+#: builtin/remote.c:1127
+msgid "local out of date"
+msgstr "lokal kuno"
+
+#: builtin/remote.c:1134
+#, c-format
+msgid "    %-*s forces to %-*s (%s)"
+msgstr "    %-*s memaksa untuk %-*s (%s)"
+
+#: builtin/remote.c:1137
+#, c-format
+msgid "    %-*s pushes to %-*s (%s)"
+msgstr "    %-*s mendorong ke %-*s (%s)"
+
+#: builtin/remote.c:1141
+#, c-format
+msgid "    %-*s forces to %s"
+msgstr "    %-*s memaksa untuk %s"
+
+#: builtin/remote.c:1144
+#, c-format
+msgid "    %-*s pushes to %s"
+msgstr "    %-*s mendorong ke %s"
+
+#: builtin/remote.c:1212
+msgid "do not query remotes"
+msgstr "jangan tanyakan remote"
+
+#: builtin/remote.c:1239
+#, c-format
+msgid "* remote %s"
+msgstr "* remote %s"
+
+#: builtin/remote.c:1240
+#, c-format
+msgid "  Fetch URL: %s"
+msgstr "  URL pengambilan: %s"
+
+#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
+msgid "(no URL)"
+msgstr "(tidak ada URL)"
+
+#. TRANSLATORS: the colon ':' should align
+#. with the one in " Fetch URL: %s"
+#. translation.
+#.
+#: builtin/remote.c:1255 builtin/remote.c:1257
+#, c-format
+msgid "  Push  URL: %s"
+msgstr "  URL pendorongan: %s"
+
+#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
+#, c-format
+msgid "  HEAD branch: %s"
+msgstr "  Cabang HEAD: %s"
+
+#: builtin/remote.c:1259
+msgid "(not queried)"
+msgstr "(tidak ditanyakan)"
+
+#: builtin/remote.c:1261
+msgid "(unknown)"
+msgstr "(tidak diketahui)"
+
+#: builtin/remote.c:1265
+#, c-format
+msgid ""
+"  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
+msgstr ""
+"  Cabang HEAD (HEAD remote ambigu, bisa jadi salah satu dari yang berikut):\n"
+
+#: builtin/remote.c:1277
+#, c-format
+msgid "  Remote branch:%s"
+msgid_plural "  Remote branches:%s"
+msgstr[0] "  Cabang remote:%s"
+msgstr[1] "  Cabang remote:%s"
+
+#: builtin/remote.c:1280 builtin/remote.c:1306
+msgid " (status not queried)"
+msgstr " (status tidak ditanyakan)"
+
+#: builtin/remote.c:1289
+msgid "  Local branch configured for 'git pull':"
+msgid_plural "  Local branches configured for 'git pull':"
+msgstr[0] "  Cabang lokal dikonfigurasi untuk 'git pull':"
+msgstr[1] "  Cabang lokal dikonfigurasi untuk 'git pull':"
+
+#: builtin/remote.c:1297
+msgid "  Local refs will be mirrored by 'git push'"
+msgstr "  Referensi lokal yang akan dicerminkan oleh 'git push'"
+
+#: builtin/remote.c:1303
+#, c-format
+msgid "  Local ref configured for 'git push'%s:"
+msgid_plural "  Local refs configured for 'git push'%s:"
+msgstr[0] "  Referensi lokal dikonfigurasi untuk 'git push'%s:"
+msgstr[1] "  Referensi lokal dikonfigurasi untuk 'git push'%s:"
+
+#: builtin/remote.c:1324
+msgid "set refs/remotes/<name>/HEAD according to remote"
+msgstr "setel refs/remotes/<nama>/HEAD tergantung remote"
+
+#: builtin/remote.c:1326
+msgid "delete refs/remotes/<name>/HEAD"
+msgstr "hapus refs/remotes/<nama>/HEAD"
+
+#: builtin/remote.c:1341
+msgid "Cannot determine remote HEAD"
+msgstr "Tidak dapat menentukan HEAD remote"
+
+#: builtin/remote.c:1343
+msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
+msgstr "Banyak cabang HEAD remote. Mohon pilih satu secara eksplisit dengan:"
+
+#: builtin/remote.c:1353
+#, c-format
+msgid "Could not delete %s"
+msgstr "Tidak dapat menghapus %s"
+
+#: builtin/remote.c:1361
+#, c-format
+msgid "Not a valid ref: %s"
+msgstr "Bukan referensi valid: %s"
+
+#: builtin/remote.c:1363
+#, c-format
+msgid "Could not setup %s"
+msgstr "Tidak dapat mengatur %s"
+
+#: builtin/remote.c:1381
+#, c-format
+msgid " %s will become dangling!"
+msgstr " %s akan menjadi teruntai!"
+
+#: builtin/remote.c:1382
+#, c-format
+msgid " %s has become dangling!"
+msgstr " %s telah menjadi teruntai!"
+
+#: builtin/remote.c:1392
+#, c-format
+msgid "Pruning %s"
+msgstr "Memangkas %s"
+
+#: builtin/remote.c:1393
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: builtin/remote.c:1409
+#, c-format
+msgid " * [would prune] %s"
+msgstr " * [akan pangkas] %s"
+
+#: builtin/remote.c:1412
+#, c-format
+msgid " * [pruned] %s"
+msgstr " * [dipangkas] %s"
+
+#: builtin/remote.c:1457
+msgid "prune remotes after fetching"
+msgstr "pangkas remote setelah pengambilan"
+
+#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
+#, c-format
+msgid "No such remote '%s'"
+msgstr "Tidak ada remote seperti '%s'"
+
+#: builtin/remote.c:1539
+msgid "add branch"
+msgstr "tambah cabang"
+
+#: builtin/remote.c:1546
+msgid "no remote specified"
+msgstr "tidak ada remote yang disebutkan"
+
+#: builtin/remote.c:1563
+msgid "query push URLs rather than fetch URLs"
+msgstr "tanyakan URL pendorongan daripada URL pengambilan"
+
+#: builtin/remote.c:1565
+msgid "return all URLs"
+msgstr "kembalikan semua URL"
+
+#: builtin/remote.c:1595
+#, c-format
+msgid "no URLs configured for remote '%s'"
+msgstr "tidak ada URL yang dikonfigurasi untuk remote '%s'"
+
+#: builtin/remote.c:1621
+msgid "manipulate push URLs"
+msgstr "manipulasi URL pendorongan"
+
+#: builtin/remote.c:1623
+msgid "add URL"
+msgstr "tambah URL"
+
+#: builtin/remote.c:1625
+msgid "delete URLs"
+msgstr "hapus URL"
+
+#: builtin/remote.c:1632
+msgid "--add --delete doesn't make sense"
+msgstr "--add --delete tidak masuk akal"
+
+#: builtin/remote.c:1673
+#, c-format
+msgid "Invalid old URL pattern: %s"
+msgstr "pola URL lama tidak valid: %s"
+
+#: builtin/remote.c:1681
+#, c-format
+msgid "No such URL found: %s"
+msgstr "Tidak ada URL yang ditemukan seperti: %s"
+
+#: builtin/remote.c:1683
+msgid "Will not delete all non-push URLs"
+msgstr "Tidak akan hapus semua URL non-dorong"
+
+#: builtin/repack.c:26
+msgid "git repack [<options>]"
+msgstr ""
+
+#: builtin/repack.c:31
+msgid ""
+"Incremental repacks are incompatible with bitmap indexes.  Use\n"
+"--no-write-bitmap-index or disable the pack.writebitmaps configuration."
+msgstr ""
+
+#: builtin/repack.c:198
+msgid "could not start pack-objects to repack promisor objects"
+msgstr ""
+
+#: builtin/repack.c:270 builtin/repack.c:630
+msgid "repack: Expecting full hex object ID lines only from pack-objects."
+msgstr ""
+
+#: builtin/repack.c:294
+msgid "could not finish pack-objects to repack promisor objects"
+msgstr ""
+
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr ""
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr ""
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr ""
+
+#: builtin/repack.c:460
+msgid "pack everything in a single pack"
+msgstr ""
+
+#: builtin/repack.c:462
+msgid "same as -a, and turn unreachable objects loose"
+msgstr ""
+
+#: builtin/repack.c:465
+msgid "remove redundant packs, and run git-prune-packed"
+msgstr ""
+
+#: builtin/repack.c:467
+msgid "pass --no-reuse-delta to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:469
+msgid "pass --no-reuse-object to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:471
+msgid "do not run git-update-server-info"
+msgstr ""
+
+#: builtin/repack.c:474
+msgid "pass --local to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:476
+msgid "write bitmap index"
+msgstr ""
+
+#: builtin/repack.c:478
+msgid "pass --delta-islands to git-pack-objects"
+msgstr ""
+
+#: builtin/repack.c:479
+msgid "approxidate"
+msgstr ""
+
+#: builtin/repack.c:480
+msgid "with -A, do not loosen objects older than this"
+msgstr ""
+
+#: builtin/repack.c:482
+msgid "with -a, repack unreachable objects"
+msgstr ""
+
+#: builtin/repack.c:484
+msgid "size of the window used for delta compression"
+msgstr ""
+
+#: builtin/repack.c:485 builtin/repack.c:491
+msgid "bytes"
+msgstr ""
+
+#: builtin/repack.c:486
+msgid "same as the above, but limit memory size instead of entries count"
+msgstr ""
+
+#: builtin/repack.c:488
+msgid "limits the maximum delta depth"
+msgstr ""
+
+#: builtin/repack.c:490
+msgid "limits the maximum number of threads"
+msgstr ""
+
+#: builtin/repack.c:492
+msgid "maximum size of each packfile"
+msgstr ""
+
+#: builtin/repack.c:494
+msgid "repack objects in packs marked with .keep"
+msgstr ""
+
+#: builtin/repack.c:496
+msgid "do not repack this pack"
+msgstr ""
+
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr ""
+
+#: builtin/repack.c:508
+msgid "cannot delete packs in a precious-objects repo"
+msgstr ""
+
+#: builtin/repack.c:512
+msgid "--keep-unreachable and -A are incompatible"
+msgstr ""
+
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr ""
+
+#: builtin/repack.c:639
+msgid "Nothing new to pack."
+msgstr ""
+
+#: builtin/repack.c:669
+#, c-format
+msgid "missing required file: %s"
+msgstr ""
+
+#: builtin/repack.c:671
+#, c-format
+msgid "could not unlink: %s"
+msgstr ""
+
+#: builtin/replace.c:22
+msgid "git replace [-f] <object> <replacement>"
+msgstr ""
+
+#: builtin/replace.c:23
+msgid "git replace [-f] --edit <object>"
+msgstr ""
+
+#: builtin/replace.c:24
+msgid "git replace [-f] --graft <commit> [<parent>...]"
+msgstr ""
+
+#: builtin/replace.c:25
+msgid "git replace [-f] --convert-graft-file"
+msgstr ""
+
+#: builtin/replace.c:26
+msgid "git replace -d <object>..."
+msgstr ""
+
+#: builtin/replace.c:27
+msgid "git replace [--format=<format>] [-l [<pattern>]]"
+msgstr ""
+
+#: builtin/replace.c:90
+#, c-format
+msgid ""
+"invalid replace format '%s'\n"
+"valid formats are 'short', 'medium' and 'long'"
+msgstr ""
+
+#: builtin/replace.c:125
+#, c-format
+msgid "replace ref '%s' not found"
+msgstr ""
+
+#: builtin/replace.c:141
+#, c-format
+msgid "Deleted replace ref '%s'"
+msgstr ""
+
+#: builtin/replace.c:153
+#, c-format
+msgid "'%s' is not a valid ref name"
+msgstr ""
+
+#: builtin/replace.c:158
+#, c-format
+msgid "replace ref '%s' already exists"
+msgstr ""
+
+#: builtin/replace.c:178
+#, c-format
+msgid ""
+"Objects must be of the same type.\n"
+"'%s' points to a replaced object of type '%s'\n"
+"while '%s' points to a replacement object of type '%s'."
+msgstr ""
+
+#: builtin/replace.c:229
+#, c-format
+msgid "unable to open %s for writing"
+msgstr ""
+
+#: builtin/replace.c:242
+msgid "cat-file reported failure"
+msgstr ""
+
+#: builtin/replace.c:258
+#, c-format
+msgid "unable to open %s for reading"
+msgstr ""
+
+#: builtin/replace.c:272
+msgid "unable to spawn mktree"
+msgstr ""
+
+#: builtin/replace.c:276
+msgid "unable to read from mktree"
+msgstr ""
+
+#: builtin/replace.c:285
+msgid "mktree reported failure"
+msgstr ""
+
+#: builtin/replace.c:289
+msgid "mktree did not return an object name"
+msgstr ""
+
+#: builtin/replace.c:298
+#, c-format
+msgid "unable to fstat %s"
+msgstr ""
+
+#: builtin/replace.c:303
+msgid "unable to write object to database"
+msgstr ""
+
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:424
+#: builtin/replace.c:454
+#, c-format
+msgid "not a valid object name: '%s'"
+msgstr ""
+
+#: builtin/replace.c:326
+#, c-format
+msgid "unable to get object type for %s"
+msgstr ""
+
+#: builtin/replace.c:342
+msgid "editing object file failed"
+msgstr ""
+
+#: builtin/replace.c:351
+#, c-format
+msgid "new object is the same as the old one: '%s'"
+msgstr ""
+
+#: builtin/replace.c:384
+#, c-format
+msgid "could not parse %s as a commit"
+msgstr ""
+
+#: builtin/replace.c:416
+#, c-format
+msgid "bad mergetag in commit '%s'"
+msgstr ""
+
+#: builtin/replace.c:418
+#, c-format
+msgid "malformed mergetag in commit '%s'"
+msgstr ""
+
+#: builtin/replace.c:430
+#, c-format
+msgid ""
+"original commit '%s' contains mergetag '%s' that is discarded; use --edit "
+"instead of --graft"
+msgstr ""
+
+#: builtin/replace.c:469
+#, c-format
+msgid "the original commit '%s' has a gpg signature"
+msgstr ""
+
+#: builtin/replace.c:470
+msgid "the signature will be removed in the replacement commit!"
+msgstr ""
+
+#: builtin/replace.c:480
+#, c-format
+msgid "could not write replacement commit for: '%s'"
+msgstr ""
+
+#: builtin/replace.c:488
+#, c-format
+msgid "graft for '%s' unnecessary"
+msgstr ""
+
+#: builtin/replace.c:492
+#, c-format
+msgid "new commit is the same as the old one: '%s'"
+msgstr ""
+
+#: builtin/replace.c:527
+#, c-format
+msgid ""
+"could not convert the following graft(s):\n"
+"%s"
+msgstr ""
+
+#: builtin/replace.c:548
+msgid "list replace refs"
+msgstr ""
+
+#: builtin/replace.c:549
+msgid "delete replace refs"
+msgstr ""
+
+#: builtin/replace.c:550
+msgid "edit existing object"
+msgstr ""
+
+#: builtin/replace.c:551
+msgid "change a commit's parents"
+msgstr ""
+
+#: builtin/replace.c:552
+msgid "convert existing graft file"
+msgstr ""
+
+#: builtin/replace.c:553
+msgid "replace the ref if it exists"
+msgstr ""
+
+#: builtin/replace.c:555
+msgid "do not pretty-print contents for --edit"
+msgstr ""
+
+#: builtin/replace.c:556
+msgid "use this format"
+msgstr ""
+
+#: builtin/replace.c:569
+msgid "--format cannot be used when not listing"
+msgstr ""
+
+#: builtin/replace.c:577
+msgid "-f only makes sense when writing a replacement"
+msgstr ""
+
+#: builtin/replace.c:581
+msgid "--raw only makes sense with --edit"
+msgstr ""
+
+#: builtin/replace.c:587
+msgid "-d needs at least one argument"
+msgstr ""
+
+#: builtin/replace.c:593
+msgid "bad number of arguments"
+msgstr ""
+
+#: builtin/replace.c:599
+msgid "-e needs exactly one argument"
+msgstr ""
+
+#: builtin/replace.c:605
+msgid "-g needs at least one argument"
+msgstr ""
+
+#: builtin/replace.c:611
+msgid "--convert-graft-file takes no argument"
+msgstr ""
+
+#: builtin/replace.c:617
+msgid "only one pattern can be given with -l"
+msgstr ""
+
+#: builtin/rerere.c:13
+msgid "git rerere [clear | forget <path>... | status | remaining | diff | gc]"
+msgstr ""
+
+#: builtin/rerere.c:60
+msgid "register clean resolutions in index"
+msgstr ""
+
+#: builtin/rerere.c:79
+msgid "'git rerere forget' without paths is deprecated"
+msgstr ""
+
+#: builtin/rerere.c:113
+#, c-format
+msgid "unable to generate diff for '%s'"
+msgstr ""
+
+#: builtin/reset.c:32
+msgid ""
+"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
+msgstr ""
+"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<komit>]"
+
+#: builtin/reset.c:33
+msgid "git reset [-q] [<tree-ish>] [--] <pathspec>..."
+msgstr "git reset [-q] [<mirip-pohon>] [--] <spek jalur>..."
+
+#: builtin/reset.c:34
+msgid ""
+"git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"
+msgstr ""
+"git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<mirip-pohon>]"
+
+#: builtin/reset.c:35
+msgid "git reset --patch [<tree-ish>] [--] [<pathspec>...]"
+msgstr "git reset --patch [<mirip-pohon>] [--] [<pathspec>...]"
+
+#: builtin/reset.c:41
+msgid "mixed"
+msgstr "campuran"
+
+#: builtin/reset.c:41
+msgid "soft"
+msgstr "lunak"
+
+#: builtin/reset.c:41
+msgid "hard"
+msgstr "keras"
+
+#: builtin/reset.c:41
+msgid "merge"
+msgstr "gabungan"
+
+#: builtin/reset.c:41
+msgid "keep"
+msgstr "simpan"
+
+#: builtin/reset.c:83
+msgid "You do not have a valid HEAD."
+msgstr "Anda tidak punya HEAD yang valid."
+
+#: builtin/reset.c:85
+msgid "Failed to find tree of HEAD."
+msgstr "Gagal menemukan pohon HEAD."
+
+#: builtin/reset.c:91
+#, c-format
+msgid "Failed to find tree of %s."
+msgstr "Gagal menemukan pohon dari %s."
+
+#: builtin/reset.c:116
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD sekarang pada %s"
+
+#: builtin/reset.c:195
+#, c-format
+msgid "Cannot do a %s reset in the middle of a merge."
+msgstr "Tidak dapat lakukan reset %s di tengah-tengah penggabungan."
+
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
+msgid "be quiet, only report errors"
+msgstr "diam, hanya laporkan kesalahan"
+
+#: builtin/reset.c:297
+msgid "reset HEAD and index"
+msgstr "setel ulang HEAD dan indeks"
+
+#: builtin/reset.c:298
+msgid "reset only HEAD"
+msgstr "hanya setel ulang HEAD"
+
+#: builtin/reset.c:300 builtin/reset.c:302
+msgid "reset HEAD, index and working tree"
+msgstr "setel ulang HEAD, indeks dan pohon kerja"
+
+#: builtin/reset.c:304
+msgid "reset HEAD but keep local changes"
+msgstr "setel ulang HEAD tapi simpan perubahan lokal"
+
+#: builtin/reset.c:310
+msgid "record only the fact that removed paths will be added later"
+msgstr "hanya rekam fakta bahwa jalur yang terhapus akan ditambahkan nanti"
+
+#: builtin/reset.c:344
+#, c-format
+msgid "Failed to resolve '%s' as a valid revision."
+msgstr "Gagal menguraikan '%s' sebagai revisi yang valid."
+
+#: builtin/reset.c:352
+#, c-format
+msgid "Failed to resolve '%s' as a valid tree."
+msgstr "Gagal menguraikan '%s' sebagaikan pohon yang valid."
+
+#: builtin/reset.c:361
+msgid "--patch is incompatible with --{hard,mixed,soft}"
+msgstr "--patch tidak kompatibel dengan --{hard,mixed,soft}"
+
+#: builtin/reset.c:371
+msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
+msgstr ""
+"--mixed dengan jalur usang; sebagai gantinya gunakan 'git reset --<jalur>'."
+
+#: builtin/reset.c:373
+#, c-format
+msgid "Cannot do %s reset with paths."
+msgstr "Tidak dapat lakukan reset %s dengan jalur."
+
+#: builtin/reset.c:388
+#, c-format
+msgid "%s reset is not allowed in a bare repository"
+msgstr "Reset %s tidak diperbolehkan dalam repositori bare"
+
+#: builtin/reset.c:392
+msgid "-N can only be used with --mixed"
+msgstr "-N hanya dapat digunakan dengan --mixed"
+
+#: builtin/reset.c:413
+msgid "Unstaged changes after reset:"
+msgstr "Perubahan tak tergelar setelah setel ulang:"
+
+#: builtin/reset.c:416
+#, c-format
+msgid ""
+"\n"
+"It 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"
+msgstr ""
+"\n"
+"Butuh %.2f detik untuk daftar perubahan tak tergelar setelah setel ulang.\n"
+"Anda dapat menggunakan '--quiet' untuk hindari hal ini. Setel konfigurasi\n"
+"reset.quiet ke true untuk membuat hal tersebut asali.\n"
+
+#: builtin/reset.c:434
+#, c-format
+msgid "Could not reset index file to revision '%s'."
+msgstr "Tidak dapat menyetel ulang berkas indeks ke revisi '%s'."
+
+#: builtin/reset.c:439
+msgid "Could not write new index file."
+msgstr "Tidak dapat menulis berkas indeks baru."
+
+#: builtin/rev-list.c:538
+msgid "cannot combine --exclude-promisor-objects and --missing"
+msgstr ""
+
+#: builtin/rev-list.c:599
+msgid "object filtering requires --objects"
+msgstr ""
+
+#: builtin/rev-list.c:659
+msgid "rev-list does not support display of notes"
+msgstr ""
+
+#: builtin/rev-list.c:664
+msgid "marked counting is incompatible with --objects"
+msgstr ""
+
+#: builtin/rev-parse.c:409
+msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
+msgstr ""
+
+#: builtin/rev-parse.c:414
+msgid "keep the `--` passed as an arg"
+msgstr ""
+
+#: builtin/rev-parse.c:416
+msgid "stop parsing after the first non-option argument"
+msgstr ""
+
+#: builtin/rev-parse.c:419
+msgid "output in stuck long form"
+msgstr ""
+
+#: builtin/rev-parse.c:552
+msgid ""
+"git rev-parse --parseopt [<options>] -- [<args>...]\n"
+"   or: git rev-parse --sq-quote [<arg>...]\n"
+"   or: git rev-parse [<options>] [<arg>...]\n"
+"\n"
+"Run \"git rev-parse --parseopt -h\" for more information on the first usage."
+msgstr ""
+
+#: builtin/revert.c:24
+msgid "git revert [<options>] <commit-ish>..."
+msgstr ""
+
+#: builtin/revert.c:25
+msgid "git revert <subcommand>"
+msgstr ""
+
+#: builtin/revert.c:30
+msgid "git cherry-pick [<options>] <commit-ish>..."
+msgstr ""
+
+#: builtin/revert.c:31
+msgid "git cherry-pick <subcommand>"
+msgstr ""
+
+#: builtin/revert.c:72
+#, c-format
+msgid "option `%s' expects a number greater than zero"
+msgstr ""
+
+#: builtin/revert.c:92
+#, c-format
+msgid "%s: %s cannot be used with %s"
+msgstr ""
+
+#: builtin/revert.c:102
+msgid "end revert or cherry-pick sequence"
+msgstr ""
+
+#: builtin/revert.c:103
+msgid "resume revert or cherry-pick sequence"
+msgstr ""
+
+#: builtin/revert.c:104
+msgid "cancel revert or cherry-pick sequence"
+msgstr ""
+
+#: builtin/revert.c:105
+msgid "skip current commit and continue"
+msgstr ""
+
+#: builtin/revert.c:107
+msgid "don't automatically commit"
+msgstr ""
+
+#: builtin/revert.c:108
+msgid "edit the commit message"
+msgstr ""
+
+#: builtin/revert.c:111
+msgid "parent-number"
+msgstr ""
+
+#: builtin/revert.c:112
+msgid "select mainline parent"
+msgstr ""
+
+#: builtin/revert.c:114
+msgid "merge strategy"
+msgstr ""
+
+#: builtin/revert.c:116
+msgid "option for merge strategy"
+msgstr ""
+
+#: builtin/revert.c:125
+msgid "append commit name"
+msgstr ""
+
+#: builtin/revert.c:127
+msgid "preserve initially empty commits"
+msgstr ""
+
+#: builtin/revert.c:129
+msgid "keep redundant, empty commits"
+msgstr ""
+
+#: builtin/revert.c:237
+msgid "revert failed"
+msgstr ""
+
+#: builtin/revert.c:250
+msgid "cherry-pick failed"
+msgstr ""
+
+#: builtin/rm.c:20
+msgid "git rm [<options>] [--] <file>..."
+msgstr "git rm [<opsi>] [--] <berkas>..."
+
+#: builtin/rm.c:208
+msgid ""
+"the following file has staged content different from both the\n"
+"file and the HEAD:"
+msgid_plural ""
+"the following files have staged content different from both the\n"
+"file and the HEAD:"
+msgstr[0] ""
+"berkas berikut punya konten tergelar yang berbeda dengan baik\n"
+"berkas dan HEAD:"
+msgstr[1] ""
+"berkas berikut punya konten tergelar yang berbeda dengan baik\n"
+"berkas dan HEAD:"
+
+#: builtin/rm.c:213
+msgid ""
+"\n"
+"(use -f to force removal)"
+msgstr ""
+"\n"
+"(gunakan -f untuk paksa hapus)"
+
+#: builtin/rm.c:217
+msgid "the following file has changes staged in the index:"
+msgid_plural "the following files have changes staged in the index:"
+msgstr[0] "berkas berikut punya perubahan tergelar dalam indeks:"
+msgstr[1] "berkas berikut punya perubahan tergelar dalam indeks:"
+
+#: builtin/rm.c:221 builtin/rm.c:230
+msgid ""
+"\n"
+"(use --cached to keep the file, or -f to force removal)"
+msgstr ""
+"\n"
+"(gunakan --cached untuk jaga berkas, atau -f untuk paksa hapus)"
+
+#: builtin/rm.c:227
+msgid "the following file has local modifications:"
+msgid_plural "the following files have local modifications:"
+msgstr[0] "berkas berikut punya modifikasi lokal:"
+msgstr[1] "berkas berikut punya modifikasi lokal:"
+
+#: builtin/rm.c:244
+msgid "do not list removed files"
+msgstr "jangan daftar berkas terhapus"
+
+#: builtin/rm.c:245
+msgid "only remove from the index"
+msgstr "hanya hapus dari indeks"
+
+#: builtin/rm.c:246
+msgid "override the up-to-date check"
+msgstr "timpa pemeriksaan terbaru"
+
+#: builtin/rm.c:247
+msgid "allow recursive removal"
+msgstr "perbolehkan penghapusan rekursif"
+
+#: builtin/rm.c:249
+msgid "exit with a zero status even if nothing matched"
+msgstr "keluar dengan nol bahkan jika tidak ada yang cocok"
+
+#: builtin/rm.c:283
+msgid "No pathspec was given. Which files should I remove?"
+msgstr ""
+"Tidak ada spek jalur yang diberikan. Berkas mana yang harusnya saya hapus?"
+
+#: builtin/rm.c:310
+msgid "please stage your changes to .gitmodules or stash them to proceed"
+msgstr ""
+"mohon gelar perubahan Anda ke .gitmodules atau stase itu untuk melanjutkan"
+
+#: builtin/rm.c:331
+#, c-format
+msgid "not removing '%s' recursively without -r"
+msgstr "tidak menghapus '%s' secara rekursif tanpa -r"
+
+#: builtin/rm.c:379
+#, c-format
+msgid "git rm: unable to remove %s"
+msgstr "git rm: tidak dapat menghapus %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."
+msgstr ""
+
+#: builtin/send-pack.c:188
+msgid "remote name"
+msgstr ""
+
+#: builtin/send-pack.c:201
+msgid "use stateless RPC protocol"
+msgstr ""
+
+#: builtin/send-pack.c:202
+msgid "read refs from stdin"
+msgstr ""
+
+#: builtin/send-pack.c:203
+msgid "print status from remote helper"
+msgstr ""
+
+#: builtin/shortlog.c:16
+msgid "git shortlog [<options>] [<revision-range>] [[--] <path>...]"
+msgstr ""
+
+#: builtin/shortlog.c:17
+msgid "git log --pretty=short | git shortlog [<options>]"
+msgstr ""
+
+#: builtin/shortlog.c:123
+msgid "using multiple --group options with stdin is not supported"
+msgstr ""
+
+#: builtin/shortlog.c:133
+msgid "using --group=trailer with stdin is not supported"
+msgstr ""
+
+#: builtin/shortlog.c:323
+#, c-format
+msgid "unknown group type: %s"
+msgstr ""
+
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr ""
+
+#: builtin/shortlog.c:354
+msgid "sort output according to the number of commits per author"
+msgstr ""
+
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr ""
+
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr ""
+
+#: builtin/shortlog.c:359
+msgid "<w>[,<i1>[,<i2>]]"
+msgstr ""
+
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr ""
+
+#: builtin/shortlog.c:362
+msgid "field"
+msgstr ""
+
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr ""
+
+#: builtin/shortlog.c:391
+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>)...]"
+msgstr ""
+
+#: builtin/show-branch.c:17
+msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
+msgstr ""
+
+#: builtin/show-branch.c:395
+#, c-format
+msgid "ignoring %s; cannot handle more than %d ref"
+msgid_plural "ignoring %s; cannot handle more than %d refs"
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/show-branch.c:548
+#, c-format
+msgid "no matching refs with %s"
+msgstr ""
+
+#: builtin/show-branch.c:645
+msgid "show remote-tracking and local branches"
+msgstr ""
+
+#: builtin/show-branch.c:647
+msgid "show remote-tracking branches"
+msgstr ""
+
+#: builtin/show-branch.c:649
+msgid "color '*!+-' corresponding to the branch"
+msgstr ""
+
+#: builtin/show-branch.c:651
+msgid "show <n> more commits after the common ancestor"
+msgstr ""
+
+#: builtin/show-branch.c:653
+msgid "synonym to more=-1"
+msgstr ""
+
+#: builtin/show-branch.c:654
+msgid "suppress naming strings"
+msgstr ""
+
+#: builtin/show-branch.c:656
+msgid "include the current branch"
+msgstr ""
+
+#: builtin/show-branch.c:658
+msgid "name commits with their object names"
+msgstr ""
+
+#: builtin/show-branch.c:660
+msgid "show possible merge bases"
+msgstr ""
+
+#: builtin/show-branch.c:662
+msgid "show refs unreachable from any other ref"
+msgstr ""
+
+#: builtin/show-branch.c:664
+msgid "show commits in topological order"
+msgstr ""
+
+#: builtin/show-branch.c:667
+msgid "show only commits not on the first branch"
+msgstr ""
+
+#: builtin/show-branch.c:669
+msgid "show merges reachable from only one tip"
+msgstr ""
+
+#: builtin/show-branch.c:671
+msgid "topologically sort, maintaining date order where possible"
+msgstr ""
+
+#: builtin/show-branch.c:674
+msgid "<n>[,<base>]"
+msgstr ""
+
+#: builtin/show-branch.c:675
+msgid "show <n> most recent ref-log entries starting at base"
+msgstr ""
+
+#: builtin/show-branch.c:711
+msgid ""
+"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
+msgstr ""
+
+#: builtin/show-branch.c:735
+msgid "no branches given, and HEAD is not valid"
+msgstr ""
+
+#: builtin/show-branch.c:738
+msgid "--reflog option needs one branch name"
+msgstr ""
+
+#: builtin/show-branch.c:741
+#, 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] ""
+msgstr[1] ""
+
+#: builtin/show-branch.c:745
+#, c-format
+msgid "no such ref %s"
+msgstr ""
+
+#: builtin/show-branch.c:831
+#, c-format
+msgid "cannot handle more than %d rev."
+msgid_plural "cannot handle more than %d revs."
+msgstr[0] ""
+msgstr[1] ""
+
+#: builtin/show-branch.c:835
+#, c-format
+msgid "'%s' is not a valid ref."
+msgstr ""
+
+#: builtin/show-branch.c:838
+#, c-format
+msgid "cannot find commit %s (%s)"
+msgstr ""
+
+#: builtin/show-index.c:21
+msgid "hash-algorithm"
+msgstr ""
+
+#: builtin/show-index.c:31
+msgid "Unknown hash algorithm"
+msgstr ""
+
+#: builtin/show-ref.c:12
+msgid ""
+"git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --"
+"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>...]"
+msgstr ""
+
+#: builtin/show-ref.c:13
+msgid "git show-ref --exclude-existing[=<pattern>]"
+msgstr ""
+
+#: builtin/show-ref.c:162
+msgid "only show tags (can be combined with heads)"
+msgstr ""
+
+#: builtin/show-ref.c:163
+msgid "only show heads (can be combined with tags)"
+msgstr ""
+
+#: builtin/show-ref.c:164
+msgid "stricter reference checking, requires exact ref path"
+msgstr ""
+
+#: builtin/show-ref.c:167 builtin/show-ref.c:169
+msgid "show the HEAD reference, even if it would be filtered out"
+msgstr ""
+
+#: builtin/show-ref.c:171
+msgid "dereference tags into object IDs"
+msgstr ""
+
+#: builtin/show-ref.c:173
+msgid "only show SHA1 hash using <n> digits"
+msgstr ""
+
+#: builtin/show-ref.c:177
+msgid "do not print results to stdout (useful with --verify)"
+msgstr ""
+
+#: builtin/show-ref.c:179
+msgid "show refs from stdin that aren't in local repository"
+msgstr ""
+
+#: builtin/sparse-checkout.c:22
+msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
+msgstr ""
+
+#: builtin/sparse-checkout.c:46
+msgid "git sparse-checkout list"
+msgstr ""
+
+#: builtin/sparse-checkout.c:72
+msgid "this worktree is not sparse (sparse-checkout file may not exist)"
+msgstr ""
+
+#: builtin/sparse-checkout.c:227
+msgid "failed to create directory for sparse-checkout file"
+msgstr ""
+
+#: builtin/sparse-checkout.c:268
+msgid "unable to upgrade repository format to enable worktreeConfig"
+msgstr ""
+
+#: builtin/sparse-checkout.c:270
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr ""
+
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr ""
+
+#: builtin/sparse-checkout.c:310
+msgid "initialize the sparse-checkout in cone mode"
+msgstr ""
+
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr ""
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr ""
+
+#: builtin/sparse-checkout.c:361
+#, c-format
+msgid "failed to open '%s'"
+msgstr ""
+
+#: builtin/sparse-checkout.c:419
+#, c-format
+msgid "could not normalize path %s"
+msgstr ""
+
+#: builtin/sparse-checkout.c:431
+msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
+msgstr ""
+
+#: builtin/sparse-checkout.c:456
+#, c-format
+msgid "unable to unquote C-style string '%s'"
+msgstr ""
+
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
+msgid "unable to load existing sparse-checkout patterns"
+msgstr ""
+
+#: builtin/sparse-checkout.c:579
+msgid "read patterns from standard in"
+msgstr ""
+
+#: builtin/sparse-checkout.c:594
+msgid "git sparse-checkout reapply"
+msgstr ""
+
+#: builtin/sparse-checkout.c:613
+msgid "git sparse-checkout disable"
+msgstr ""
+
+#: builtin/sparse-checkout.c:644
+msgid "error while refreshing working directory"
+msgstr ""
+
+#: builtin/stash.c:24 builtin/stash.c:40
+msgid "git stash list [<options>]"
+msgstr "git stash list [<opsi>]"
+
+#: builtin/stash.c:25 builtin/stash.c:45
+msgid "git stash show [<options>] [<stash>]"
+msgstr "git stash show [<opsi>] [<stase>]"
+
+#: builtin/stash.c:26 builtin/stash.c:50
+msgid "git stash drop [-q|--quiet] [<stash>]"
+msgstr "git stash drop [-q|--quiet] [<stase>]"
+
+#: builtin/stash.c:27
+msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
+msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stase>]"
+
+#: builtin/stash.c:28 builtin/stash.c:65
+msgid "git stash branch <branchname> [<stash>]"
+msgstr "git stash branch <nama cabang> [<stase>]"
+
+#: builtin/stash.c:29 builtin/stash.c:70
+msgid "git stash clear"
+msgstr "git stash clear"
+
+#: builtin/stash.c:30
+msgid ""
+"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
+"          [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
+"          [--] [<pathspec>...]]"
+msgstr ""
+"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <pesan>]\n"
+"          [--pathspec-from-file=<berkas> [--pathspec-file-nul]]\n"
+"          [--] [<spek jalur>...]]"
+
+#: builtin/stash.c:34 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] [<pesan>]"
+
+#: builtin/stash.c:55
+msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
+msgstr "git stash pop [--index] [-q|--quiet] [<stase>]"
+
+#: builtin/stash.c:60
+msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
+msgstr "git stash apply [--index] [-q|--quiet] [<stase>]"
+
+#: builtin/stash.c:75
+msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
+msgstr "git stash store [-m|--message <pesan>] [-q|--quiet] <komit>"
+
+#: builtin/stash.c:80
+msgid ""
+"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
+"          [--] [<pathspec>...]]"
+msgstr ""
+"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <pesan>]\n"
+"          [--] [<spek jalur>...]"
+
+#: builtin/stash.c:130
+#, c-format
+msgid "'%s' is not a stash-like commit"
+msgstr "'%s' bukan komit mirip stase"
+
+#: builtin/stash.c:150
+#, c-format
+msgid "Too many revisions specified:%s"
+msgstr "Terlalu banyak revisi disebutkan:%s"
+
+#: builtin/stash.c:164
+msgid "No stash entries found."
+msgstr "Tidak ada entri stase ditemukan."
+
+#: builtin/stash.c:178
+#, c-format
+msgid "%s is not a valid reference"
+msgstr "%s bukan referensi valid"
+
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
+msgstr "git stash clear dengan argument tak diimplementasikan"
+
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"PERINGATAN: Berkas tak terlacak dengan cara berkas terlacak! Menamakan "
+"ulang\n"
+"            %s -> %s\n"
+"         untuk buat ruang.\n"
+
+#: builtin/stash.c:492
+msgid "cannot apply a stash in the middle of a merge"
+msgstr "tidak dapat menerapkan stase di tengah-tengah penggabungan"
+
+#: builtin/stash.c:503
+#, c-format
+msgid "could not generate diff %s^!."
+msgstr "tidak dapat membuat diff %s^!."
+
+#: builtin/stash.c:510
+msgid "conflicts in index. Try without --index."
+msgstr "konflik dalam indeks. Coba tanpa --index."
+
+#: builtin/stash.c:516
+msgid "could not save index tree"
+msgstr "tidak dapat menyimpan pohon indeks"
+
+#: builtin/stash.c:525
+msgid "could not restore untracked files from stash"
+msgstr "tidak dapat mengembalikan berkas tak terlacak dari stase"
+
+#: builtin/stash.c:539
+#, c-format
+msgid "Merging %s with %s"
+msgstr "Menggabungkan %s dengan %s"
+
+#: builtin/stash.c:549
+msgid "Index was not unstashed."
+msgstr "Indeks tak dibatal-stasekan."
+
+#: builtin/stash.c:591 builtin/stash.c:689
+msgid "attempt to recreate the index"
+msgstr "coba membuat ulang indeks"
+
+#: builtin/stash.c:635
+#, c-format
+msgid "Dropped %s (%s)"
+msgstr "%s (%s) dijatuhkan"
+
+#: builtin/stash.c:638
+#, c-format
+msgid "%s: Could not drop stash entry"
+msgstr "%s: Tidak dapat menjatuhkan entri stase"
+
+#: builtin/stash.c:651
+#, c-format
+msgid "'%s' is not a stash reference"
+msgstr "'%s' bukan referensi stase"
+
+#: builtin/stash.c:701
+msgid "The stash entry is kept in case you need it again."
+msgstr "Entri stase disimpan jika Anda butuh itu lagi."
+
+#: builtin/stash.c:724
+msgid "No branch name specified"
+msgstr "Tidak ada nama cabang yang disebutkan"
+
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "gagal menguraikan pohon"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "gagal membongkar pohon"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "masukkan berkas tak terlacak ke dalam stase"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "hanya perlihatkan berkas tak terlacak dalam stase"
+
+#: builtin/stash.c:932 builtin/stash.c:969
+#, c-format
+msgid "Cannot update %s with %s"
+msgstr "Tidak dapat memperbarui %s dengan %s"
+
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
+msgid "stash message"
+msgstr "pesan stase"
+
+#: builtin/stash.c:960
+msgid "\"git stash store\" requires one <commit> argument"
+msgstr "\"git stash store\" butuh satu argumen <komit>"
+
+#: builtin/stash.c:1175
+msgid "No changes selected"
+msgstr "Tidak ada perubahan yang dipilih"
+
+#: builtin/stash.c:1275
+msgid "You do not have the initial commit yet"
+msgstr "Anda belum punya komit awal"
+
+#: builtin/stash.c:1302
+msgid "Cannot save the current index state"
+msgstr "Tidak dapat menyimpan keadaan indeks saat ini"
+
+#: builtin/stash.c:1311
+msgid "Cannot save the untracked files"
+msgstr "Tidak dapat menyimpan berkas tak terlacak"
+
+#: builtin/stash.c:1322 builtin/stash.c:1331
+msgid "Cannot save the current worktree state"
+msgstr "Tidak dapat menyimpang keadaan pohon kerja saat ini"
+
+#: builtin/stash.c:1359
+msgid "Cannot record working tree state"
+msgstr "Tidak dapat merekam keadaan pohon kerja"
+
+#: builtin/stash.c:1408
+msgid "Can't use --patch and --include-untracked or --all at the same time"
+msgstr ""
+"Tidak dapat menggunakan --patch dan --include-untracked atau --all pada "
+"waktu yang bersamaan"
+
+#: builtin/stash.c:1426
+msgid "Did you forget to 'git add'?"
+msgstr "Anda lupa untuk 'git add'?"
+
+#: builtin/stash.c:1441
+msgid "No local changes to save"
+msgstr "Tidak ada perubahan lokal untuk disimpan"
+
+#: builtin/stash.c:1448
+msgid "Cannot initialize stash"
+msgstr "Tidak dapat menginisialisasi stase"
+
+#: builtin/stash.c:1463
+msgid "Cannot save the current status"
+msgstr "Tidak dapat menyimpan status saat ini"
+
+#: builtin/stash.c:1468
+#, c-format
+msgid "Saved working directory and index state %s"
+msgstr "Direktori kerja dan keadaan indeks %s disimpan"
+
+#: builtin/stash.c:1558
+msgid "Cannot remove worktree changes"
+msgstr "Tidak dapat menghapus perubahaan pohon kerja"
+
+#: builtin/stash.c:1597 builtin/stash.c:1662
+msgid "keep index"
+msgstr "jaga indeks"
+
+#: builtin/stash.c:1599 builtin/stash.c:1664
+msgid "stash in patch mode"
+msgstr "stase dalam mode tambalan"
+
+#: builtin/stash.c:1600 builtin/stash.c:1665
+msgid "quiet mode"
+msgstr "mode hening"
+
+#: builtin/stash.c:1602 builtin/stash.c:1667
+msgid "include untracked files in stash"
+msgstr "masukkan berkas tak terlacak ke dalam stase"
+
+#: builtin/stash.c:1604 builtin/stash.c:1669
+msgid "include ignore files"
+msgstr "masukkan berkas ignore"
+
+#: builtin/stash.c:1704
+msgid ""
+"the stash.useBuiltin support has been removed!\n"
+"See its entry in 'git help config' for details."
+msgstr ""
+"Dukungan untuk stash.useBuiltin sudah dihapus!\n"
+"Lihat entri itu di 'git help config' untuk selengkapnya."
+
+#: builtin/stripspace.c:18
+msgid "git stripspace [-s | --strip-comments]"
+msgstr ""
+
+#: builtin/stripspace.c:19
+msgid "git stripspace [-c | --comment-lines]"
+msgstr ""
+
+#: builtin/stripspace.c:37
+msgid "skip and remove all lines starting with comment character"
+msgstr ""
+
+#: builtin/stripspace.c:40
+msgid "prepend comment character and space to each line"
+msgstr ""
+
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
+#, c-format
+msgid "Expecting a full ref name, got %s"
+msgstr "Mengharapkan nama referensi penuh, dapat %s"
+
+#: builtin/submodule--helper.c:64
+msgid "submodule--helper print-default-remote takes no arguments"
+msgstr "submodule--helper print-default-remote tidak membutuhkan argumen"
+
+#: builtin/submodule--helper.c:102
+#, c-format
+msgid "cannot strip one component off url '%s'"
+msgstr "tidak dapat mencopot satu komponen dari url '%s'"
+
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
+msgid "alternative anchor for relative paths"
+msgstr "jangkar alternatif untuk jalur relatif"
+
+#: builtin/submodule--helper.c:415
+msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper list [--prefix=<jalur>] [<jalur>...]"
+
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
+#, c-format
+msgid "No url found for submodule path '%s' in .gitmodules"
+msgstr ""
+"Tidak ada url yang ditemukan untuk jalur submodul '%s' dalam .gitmodules"
+
+#: builtin/submodule--helper.c:525
+#, c-format
+msgid "Entering '%s'\n"
+msgstr "Memasuki '%s'\n"
+
+#: builtin/submodule--helper.c:528
+#, c-format
+msgid ""
+"run_command returned non-zero status for %s\n"
+"."
+msgstr ""
+"run_command mengembalikan status bukan nol untuk %s\n"
+"."
+
+#: builtin/submodule--helper.c:550
+#, c-format
+msgid ""
+"run_command returned non-zero status while recursing in the nested "
+"submodules of %s\n"
+"."
+msgstr ""
+"run_command mengembalikan status bukan nol ketika merekursi dalam submodul "
+"bersarang %s\n"
+"."
+
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "sembunyikan keluaran memasuki setiap perintah submodul"
+
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "rekursi ke dalam submodul bersarang"
+
+#: builtin/submodule--helper.c:573
+msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
+msgstr ""
+"git submodule--helper foreach [--quiet] [--recursive] [--] [<perintah>]"
+
+#: builtin/submodule--helper.c:600
+#, c-format
+msgid ""
+"could not look up configuration '%s'. Assuming this repository is its own "
+"authoritative upstream."
+msgstr ""
+"tidak dapat mencari konfigurasi '%s'. Asumsi bahwa repositori ini adalah "
+"hulu otoritatif tersendiri."
+
+#: builtin/submodule--helper.c:667
+#, c-format
+msgid "Failed to register url for submodule path '%s'"
+msgstr "Gagal mendaftarkan url untuk jalur submodul '%s'"
+
+#: builtin/submodule--helper.c:671
+#, c-format
+msgid "Submodule '%s' (%s) registered for path '%s'\n"
+msgstr "Submodul '%s' (%s) didaftarkan untuk jalur '%s'\n"
+
+#: builtin/submodule--helper.c:681
+#, c-format
+msgid "warning: command update mode suggested for submodule '%s'\n"
+msgstr "peringatan: perintah mode pembaruan disarankan untuk submodul '%s'\n"
+
+#: builtin/submodule--helper.c:688
+#, c-format
+msgid "Failed to register update mode for submodule path '%s'"
+msgstr "Gagal mendaftarkan mode pembaruan untuk jalur submodul '%s'"
+
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "sembunyikan keluaran menginisialisasi submodul"
+
+#: builtin/submodule--helper.c:715
+msgid "git submodule--helper init [<options>] [<path>]"
+msgstr "git submodule--helper init [<opsi>] [<jalur>]"
+
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
+#, c-format
+msgid "no submodule mapping found in .gitmodules for path '%s'"
+msgstr "tidak ada pemetaan submodul ditemukan di .gitmodules untuk jalur '%s'"
+
+#: builtin/submodule--helper.c:836
+#, c-format
+msgid "could not resolve HEAD ref inside the submodule '%s'"
+msgstr "tidak dapat menguraikan referensi HEAD di dalam submodul '%s'"
+
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
+#, c-format
+msgid "failed to recurse into submodule '%s'"
+msgstr "gagal merekursi ke dalam submodul '%s'"
+
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "sembunyikan keluaran status submodul"
+
+#: builtin/submodule--helper.c:888
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
+msgstr ""
+"gunakan komit yang disimpan di dalam indeks daripada yang disimpan di dalam "
+"HEAD"
+
+#: builtin/submodule--helper.c:894
+msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
+msgstr "git submodule status [--quiet] [--cached] [--recursive] [<jalur>...]"
+
+#: builtin/submodule--helper.c:918
+msgid "git submodule--helper name <path>"
+msgstr "git submodule==helper name <jalur>"
+
+#: builtin/submodule--helper.c:990
+#, c-format
+msgid "* %s %s(blob)->%s(submodule)"
+msgstr "* %s %s(blob)->%s(submodul)"
+
+#: builtin/submodule--helper.c:993
+#, c-format
+msgid "* %s %s(submodule)->%s(blob)"
+msgstr "* %s %s(submodul)->%s(blob)"
+
+#: builtin/submodule--helper.c:1006
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: builtin/submodule--helper.c:1056
+#, c-format
+msgid "couldn't hash object from '%s'"
+msgstr "tidak dapat hash objek dari '%s'"
+
+#: builtin/submodule--helper.c:1060
+#, c-format
+msgid "unexpected mode %o\n"
+msgstr "mode tidak diharapkan %o\n"
+
+#: builtin/submodule--helper.c:1301
+msgid "use the commit stored in the index instead of the submodule HEAD"
+msgstr "gunakan komit yang disimpan di dalam indeks daripada HEAD submodul"
+
+#: builtin/submodule--helper.c:1303
+msgid "to compare the commit in the index with that in the submodule HEAD"
+msgstr ""
+"untuk membandingkan komit di dalam indeks dengan yang di dalam HEAD submodul"
+
+#: builtin/submodule--helper.c:1305
+msgid "skip submodules with 'ignore_config' value set to 'all'"
+msgstr "lewatkan submodul dengan nilai 'ignore_config' disetel ke 'all'"
+
+#: builtin/submodule--helper.c:1307
+msgid "limit the summary size"
+msgstr "batasi ukuran ringkasan"
+
+#: builtin/submodule--helper.c:1312
+msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
+msgstr "git submodule--helper summary [<opsi>] [<commit>] -- [<jalur>]"
+
+#: builtin/submodule--helper.c:1336
+msgid "could not fetch a revision for HEAD"
+msgstr "tidak dapat mengambil revisi untuk HEAD"
+
+#: builtin/submodule--helper.c:1341
+msgid "--cached and --files are mutually exclusive"
+msgstr "--cached dan --files saling eksklusif"
+
+#: builtin/submodule--helper.c:1408
+#, c-format
+msgid "Synchronizing submodule url for '%s'\n"
+msgstr "Mensinkronisasi url submodul untuk '%s'\n"
+
+#: builtin/submodule--helper.c:1414
+#, c-format
+msgid "failed to register url for submodule path '%s'"
+msgstr "gagal mendaftarkan url untuk jalur submodul '%s'"
+
+#: builtin/submodule--helper.c:1428
+#, c-format
+msgid "failed to get the default remote for submodule '%s'"
+msgstr "gagal mendapatkan remote asali untuk submodul '%s'"
+
+#: builtin/submodule--helper.c:1439
+#, c-format
+msgid "failed to update remote for submodule '%s'"
+msgstr "gagal memperbarui remote untuk submodul '%s'"
+
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "sembunyikan keluaran mensinkronisasi url submodul"
+
+#: builtin/submodule--helper.c:1493
+msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
+msgstr "git submodule--helper sync [--quiet] [--recursive] [<jalur>]"
+
+#: builtin/submodule--helper.c:1547
+#, c-format
+msgid ""
+"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
+"really want to remove it including all of its history)"
+msgstr ""
+"Pohon kerja submodul '%s' berisi direktori .git (gunakan 'rm -rf' bila Anda "
+"benar-benar ingin menghapus itu termasuk semua riwayatnya)"
+
+#: builtin/submodule--helper.c:1559
+#, c-format
+msgid ""
+"Submodule work tree '%s' contains local modifications; use '-f' to discard "
+"them"
+msgstr ""
+"Pohon kerja submodul '%s' berisi modifikasi lokal; gunakan '-f' untuk "
+"menyingkirkan itu"
+
+#: builtin/submodule--helper.c:1567
+#, c-format
+msgid "Cleared directory '%s'\n"
+msgstr "Direktori '%s' dibersihkan\n"
+
+#: builtin/submodule--helper.c:1569
+#, c-format
+msgid "Could not remove submodule work tree '%s'\n"
+msgstr "Tidak dapat menghapus pohon kerja submodul '%s'\n"
+
+#: builtin/submodule--helper.c:1580
+#, c-format
+msgid "could not create empty submodule directory %s"
+msgstr "tidak dapat membuat direktori submodul kosong %s"
+
+#: builtin/submodule--helper.c:1596
+#, c-format
+msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
+msgstr "Submodul '%s' (%s) tak terdaftar untuk jalur '%s'\n"
+
+#: builtin/submodule--helper.c:1625
+msgid "remove submodule working trees even if they contain local changes"
+msgstr "hapus pohon kerja submodul bahkan jika itu berisi perubahan lokal"
+
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "batal daftar semua submodul"
+
+#: builtin/submodule--helper.c:1631
+msgid ""
+"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
+msgstr ""
+"git submodule deinit [--quiet] [-f | --force] [--all | [--] [<jalur>...]]"
+
+#: builtin/submodule--helper.c:1645
+msgid "Use '--all' if you really want to deinitialize all submodules"
+msgstr ""
+"Gunakan '--all' jika Anda benar-benar ingin deinisialisasi semua submodul"
+
+#: builtin/submodule--helper.c:1714
+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"
+"submodule.alternateErrorStrategy to 'info' or, equivalently, clone with\n"
+"'--reference-if-able' instead of '--reference'."
+msgstr ""
+"Sebuah pengganti yang dihitung dari pengganti proyek super tidak valid.\n"
+"Untuk memperbolehkan Git untuk kloning tanpa pengganti dalam kasus seperti\n"
+" itu, setel submodule.alternateErrorStrategy ke 'info' atau yang sama,\n"
+"kloning degan '--reference-if-able' daripada '--reference'."
+
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
+#, c-format
+msgid "submodule '%s' cannot add alternate: %s"
+msgstr "submodul '%s' tidak dapat menambahkan pengganti: %s"
+
+#: builtin/submodule--helper.c:1792
+#, c-format
+msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
+msgstr "Nilai '%s' untuk submodule.alternateErrorStrategy tidak dikenal"
+
+#: builtin/submodule--helper.c:1799
+#, c-format
+msgid "Value '%s' for submodule.alternateLocation is not recognized"
+msgstr "Nilai '%s' untuk submodule.alternateLocation tidak dikenal"
+
+#: builtin/submodule--helper.c:1823
+msgid "where the new submodule will be cloned to"
+msgstr "di mana submodul baru akan dikloning"
+
+#: builtin/submodule--helper.c:1826
+msgid "name of the new submodule"
+msgstr "nama submodul baru"
+
+#: builtin/submodule--helper.c:1829
+msgid "url where to clone the submodule from"
+msgstr "url di mana submodul dikloning"
+
+#: builtin/submodule--helper.c:1837
+msgid "depth for shallow clones"
+msgstr "kedalaman untuk kloning dangkal"
+
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
+msgid "force cloning progress"
+msgstr "paksa perkembangan kloning"
+
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
+msgid "disallow cloning into non-empty directory"
+msgstr "tak perbolehkan kloning ke dalam direktori bukan kosong"
+
+#: builtin/submodule--helper.c:1849
+msgid ""
+"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
+"<url> --path <path>"
+msgstr ""
+"git submodule--helper clone [--prefix=<jalur>] [--quiet] [--reference "
+"<repositori>] [--name <nama>] [--depth <kedalaman>] [--single-branch] --url "
+"<url> --path <jalur>"
+
+#: builtin/submodule--helper.c:1874
+#, c-format
+msgid "refusing to create/use '%s' in another submodule's git dir"
+msgstr ""
+"menolak membuat/menggunakan '%s' di dalam direktori git submodul yang lain"
+
+#: builtin/submodule--helper.c:1885
+#, c-format
+msgid "clone of '%s' into submodule path '%s' failed"
+msgstr "gagal mengkloning '%s' ke dalam jalur submodul '%s'"
+
+#: builtin/submodule--helper.c:1889
+#, c-format
+msgid "directory not empty: '%s'"
+msgstr "direktori tidak kosong: '%s'"
+
+#: builtin/submodule--helper.c:1901
+#, c-format
+msgid "could not get submodule directory for '%s'"
+msgstr "tidak dapat mendapatkan direktori submodul untuk '%s'"
+
+#: builtin/submodule--helper.c:1937
+#, c-format
+msgid "Invalid update mode '%s' for submodule path '%s'"
+msgstr "Mode pembaruan '%s' tidak valid untuk jalur submodul '%s'"
+
+#: builtin/submodule--helper.c:1941
+#, c-format
+msgid "Invalid update mode '%s' configured for submodule path '%s'"
+msgstr "Mode pembaruan '%s' tidak valid untuk jalur submodul '%s'"
+
+#: builtin/submodule--helper.c:2042
+#, c-format
+msgid "Submodule path '%s' not initialized"
+msgstr "Jalur submodul '%s' tidak diinisialisasi"
+
+#: builtin/submodule--helper.c:2046
+msgid "Maybe you want to use 'update --init'?"
+msgstr "Mungkin Anda ingin menggunakan 'update --init'?"
+
+#: builtin/submodule--helper.c:2076
+#, c-format
+msgid "Skipping unmerged submodule %s"
+msgstr "Melewati submodul tak tergabung %s"
+
+#: builtin/submodule--helper.c:2105
+#, c-format
+msgid "Skipping submodule '%s'"
+msgstr "Melewati submodul '%s'"
+
+#: builtin/submodule--helper.c:2255
+#, c-format
+msgid "Failed to clone '%s'. Retry scheduled"
+msgstr "Gagal mengkloning '%s'. Percobaan ulang dijadwalkan"
+
+#: builtin/submodule--helper.c:2266
+#, c-format
+msgid "Failed to clone '%s' a second time, aborting"
+msgstr "Gagal mengkloning '%s' untuk kedua kalinya, batalkan"
+
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
+msgid "path into the working tree"
+msgstr "jalur ke dalam pohon kerja"
+
+#: builtin/submodule--helper.c:2331
+msgid "path into the working tree, across nested submodule boundaries"
+msgstr "jalur ke dalam pohon kerja, melintasi perbatasan submodul bersarang"
+
+#: builtin/submodule--helper.c:2335
+msgid "rebase, merge, checkout or none"
+msgstr "dasarkan ulang, gabungkan, checkout atau tidak sama sekali"
+
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "buat klon dangkal terpotong hingga sejumlah revisi yang disebutkan"
+
+#: builtin/submodule--helper.c:2344
+msgid "parallel jobs"
+msgstr "pekerjaan paralel"
+
+#: builtin/submodule--helper.c:2346
+msgid "whether the initial clone should follow the shallow recommendation"
+msgstr "apakah klon awal seharusnya mengikuti rekomendasi dangkal"
+
+#: builtin/submodule--helper.c:2347
+msgid "don't print cloning progress"
+msgstr "jangan cetak perkembangan pengkloningan"
+
+#: builtin/submodule--helper.c:2358
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr "git submodule--helper update-clone [--prefix=<jalur>] [<jalur>...]"
+
+#: builtin/submodule--helper.c:2371
+msgid "bad value for update parameter"
+msgstr "nilai jelek untuk parameter pembaruan"
+
+#: builtin/submodule--helper.c:2419
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Cabang submodul (%s) dikonfigurasikan untuk mewarisi cabang dari proyek "
+"super, tapi proyek super tidak pada cabang apapun"
+
+#: builtin/submodule--helper.c:2542
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "tidak dapat mendapat pegangan repositori untuk submodul '%s'"
+
+#: builtin/submodule--helper.c:2575
+msgid "recurse into submodules"
+msgstr "rekursi ke dalam submodul"
+
+#: builtin/submodule--helper.c:2581
+msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
+msgstr "giit submodule--helper absorb-git-dirs [<opsi>] [<jalur>...]"
+
+#: builtin/submodule--helper.c:2637
+msgid "check if it is safe to write to the .gitmodules file"
+msgstr "periksa apakah itu aman untuk menulis ke berkas .gitmodules"
+
+#: builtin/submodule--helper.c:2640
+msgid "unset the config in the .gitmodules file"
+msgstr "batal setel konfigurasi dalam berkas .gitmodules"
+
+#: builtin/submodule--helper.c:2645
+msgid "git submodule--helper config <name> [<value>]"
+msgstr "git submodule--helper config <nama> [<nilai>]"
+
+#: builtin/submodule--helper.c:2646
+msgid "git submodule--helper config --unset <name>"
+msgstr "git submodule--helper config --unset <nama>"
+
+#: builtin/submodule--helper.c:2647
+msgid "git submodule--helper config --check-writeable"
+msgstr "git submodule--helper config --check-writeable"
+
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
+#, sh-format
+msgid "please make sure that the .gitmodules file is in the working tree"
+msgstr "mohom pastikan berkas .gitmodules di dalam pohon kerja"
+
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "sembunyikan keluaran penyetelan url submodule"
+
+#: builtin/submodule--helper.c:2686
+msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
+msgstr "git submodule--helper set-url [--quiet] <jalur> <url baru>"
+
+#: builtin/submodule--helper.c:2719
+msgid "set the default tracking branch to master"
+msgstr "setel cabang pelacak asali ke master"
+
+#: builtin/submodule--helper.c:2721
+msgid "set the default tracking branch"
+msgstr "setel cabang pelacak asali"
+
+#: builtin/submodule--helper.c:2725
+msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
+msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <jalur>"
+
+#: builtin/submodule--helper.c:2726
+msgid ""
+"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
+msgstr ""
+"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <cabang> <jalur>"
+
+#: builtin/submodule--helper.c:2733
+msgid "--branch or --default required"
+msgstr "--branch atau --default dibutuhkan"
+
+#: builtin/submodule--helper.c:2736
+msgid "--branch and --default are mutually exclusive"
+msgstr "--branch dan --default saling eksklusif"
+
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
+#, c-format
+msgid "%s doesn't support --super-prefix"
+msgstr "%s tidak mendukung --super-prefix"
+
+#: builtin/submodule--helper.c:2799
+#, c-format
+msgid "'%s' is not a valid submodule--helper subcommand"
+msgstr "'%s' bukan subperintah submodule--helper valid"
+
+#: builtin/symbolic-ref.c:8
+msgid "git symbolic-ref [<options>] <name> [<ref>]"
+msgstr ""
+
+#: builtin/symbolic-ref.c:9
+msgid "git symbolic-ref -d [-q] <name>"
+msgstr ""
+
+#: builtin/symbolic-ref.c:42
+msgid "suppress error message for non-symbolic (detached) refs"
+msgstr ""
+
+#: builtin/symbolic-ref.c:43
+msgid "delete symbolic ref"
+msgstr ""
+
+#: builtin/symbolic-ref.c:44
+msgid "shorten ref output"
+msgstr ""
+
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+msgid "reason"
+msgstr ""
+
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+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>]"
+msgstr ""
+"git tag [-a | -s | -u <id kunci>] [-f] [-m <pesan | -F <berkas>]\n"
+"\t\t<nama tag> [<kepala>]"
+
+#: builtin/tag.c:27
+msgid "git tag -d <tagname>..."
+msgstr "git tag -d <nama tag>..."
+
+#: builtin/tag.c:28
+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>...]"
+msgstr ""
+"git tag -l [-n[<angka>]] [--contains <komit>] [--no-contains <komit>] [--"
+"points-at <objek>]\n"
+"\t\t[--format=<format>] [--merged <komit>] [--no-merged <komit>] [<pola>...]"
+
+#: builtin/tag.c:30
+msgid "git tag -v [--format=<format>] <tagname>..."
+msgstr "git tag -v [--format]<format>] <nama tag>..."
+
+#: builtin/tag.c:100
+#, c-format
+msgid "tag '%s' not found."
+msgstr "tag '%s' tidak ditemukan."
+
+#: builtin/tag.c:135
+#, c-format
+msgid "Deleted tag '%s' (was %s)\n"
+msgstr "Tag '%s' (yaitu %s) dihapus\n"
+
+#: builtin/tag.c:170
+#, c-format
+msgid ""
+"\n"
+"Write a message for tag:\n"
+"  %s\n"
+"Lines starting with '%c' will be ignored.\n"
+msgstr ""
+"\n"
+"Tulis pesan untuk tag:\n"
+"  %s\n"
+"Baris yang diawali dengan '%c' akan diabaikan.\n"
+
+#: builtin/tag.c:174
+#, c-format
+msgid ""
+"\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"
+msgstr ""
+"\n"
+"Tulis pesan untuk tag:\n"
+"  %s\n"
+"Baris yang diawali dengan '%c' akan disimpan; Anda dapat menghapus itu bila "
+"Anda mau.\n"
+
+#: builtin/tag.c:241
+msgid "unable to sign the tag"
+msgstr "tidak dapat menandatangani tag"
+
+#: builtin/tag.c:259
+#, c-format
+msgid ""
+"You have created a nested tag. The object referred to by your new tag is\n"
+"already a tag. If you meant to tag the object that it points to, use:\n"
+"\n"
+"\tgit tag -f %s %s^{}"
+msgstr ""
+"Anda telah membuat tag bersarang. Objek yang dirujuk oleh tag baru Anda\n"
+"sudah menjadi tag. Jika maksud Anda men-tag objek yang ditunjukkannya,\n"
+"gunakan:\n"
+"\n"
+"\tgit tag -f %s %s^{}"
+
+#: builtin/tag.c:275
+msgid "bad object type."
+msgstr "tipe objek jelek."
+
+#: builtin/tag.c:328
+msgid "no tag message?"
+msgstr "tidak ada pesan tag?"
+
+#: builtin/tag.c:335
+#, c-format
+msgid "The tag message has been left in %s\n"
+msgstr "Pesan tag dibiarkan di %s\n"
+
+#: builtin/tag.c:446
+msgid "list tag names"
+msgstr "daftarkan nama tag"
+
+#: builtin/tag.c:448
+msgid "print <n> lines of each tag message"
+msgstr "cetak <n> baris dari setiap pesan tag"
+
+#: builtin/tag.c:450
+msgid "delete tags"
+msgstr "hapus tag"
+
+#: builtin/tag.c:451
+msgid "verify tags"
+msgstr "verifikasi tag"
+
+#: builtin/tag.c:453
+msgid "Tag creation options"
+msgstr "Opsi pembuatan tag"
+
+#: builtin/tag.c:455
+msgid "annotated tag, needs a message"
+msgstr "tag bercatat, butuh sebuah pesan"
+
+#: builtin/tag.c:457
+msgid "tag message"
+msgstr "pesan tag"
+
+#: builtin/tag.c:459
+msgid "force edit of tag message"
+msgstr "paksa sunting pesan tag"
+
+#: builtin/tag.c:460
+msgid "annotated and GPG-signed tag"
+msgstr "tag bercatat dan bertandatangan GPG"
+
+#: builtin/tag.c:463
+msgid "use another key to sign the tag"
+msgstr "gunakan kunci yang lain untuk menandatangani tag"
+
+#: builtin/tag.c:464
+msgid "replace the tag if exists"
+msgstr "ganti tag jika ada"
+
+#: builtin/tag.c:465 builtin/update-ref.c:505
+msgid "create a reflog"
+msgstr "buat log referensi"
+
+#: builtin/tag.c:467
+msgid "Tag listing options"
+msgstr "Opsi daftar tag"
+
+#: builtin/tag.c:468
+msgid "show tag list in columns"
+msgstr "perlihatkan daftar tag dalam kolom"
+
+#: builtin/tag.c:469 builtin/tag.c:471
+msgid "print only tags that contain the commit"
+msgstr "hanya cetak tag yang berisi komit"
+
+#: builtin/tag.c:470 builtin/tag.c:472
+msgid "print only tags that don't contain the commit"
+msgstr "hanya cetak tag yang tidak berisi komit"
+
+#: builtin/tag.c:473
+msgid "print only tags that are merged"
+msgstr "hanya cetak tag yang tergabung"
+
+#: builtin/tag.c:474
+msgid "print only tags that are not merged"
+msgstr "hanya cetak tag yang tak tergabung"
+
+#: builtin/tag.c:478
+msgid "print only tags of the object"
+msgstr "hanya cetak tag dari objek"
+
+#: builtin/tag.c:526
+msgid "--column and -n are incompatible"
+msgstr "--column dan -n tidak kompatibel"
+
+#: builtin/tag.c:548
+msgid "-n option is only allowed in list mode"
+msgstr "opsi -n hanya diperbolehkan dalam mode daftar"
+
+#: builtin/tag.c:550
+msgid "--contains option is only allowed in list mode"
+msgstr "opsi --contains hanya diperbolehkan dalam mode daftar"
+
+#: builtin/tag.c:552
+msgid "--no-contains option is only allowed in list mode"
+msgstr "opsi --no-contains hanya diperbolehkan dalam mode daftar"
+
+#: builtin/tag.c:554
+msgid "--points-at option is only allowed in list mode"
+msgstr "opsi --points-at hanya diperbolehkan dalam mode daftar"
+
+#: builtin/tag.c:556
+msgid "--merged and --no-merged options are only allowed in list mode"
+msgstr "opsi --merged dan --no-merged hanya diperbolehkan dalam mode daftar"
+
+#: builtin/tag.c:567
+msgid "only one -F or -m option is allowed."
+msgstr "hanya satu opsi -F atau -m yang diperbolehkan."
+
+#: builtin/tag.c:592
+#, c-format
+msgid "'%s' is not a valid tag name."
+msgstr "'%s' bukan nama tag yang valid."
+
+#: builtin/tag.c:597
+#, c-format
+msgid "tag '%s' already exists"
+msgstr "tag '%s' sudah ada"
+
+#: builtin/tag.c:628
+#, c-format
+msgid "Updated tag '%s' (was %s)\n"
+msgstr "Tag '%s' diperbarui (yaitu %s)\n"
+
+#: builtin/unpack-objects.c:504
+msgid "Unpacking objects"
+msgstr ""
+
+#: builtin/update-index.c:84
+#, c-format
+msgid "failed to create directory %s"
+msgstr ""
+
+#: builtin/update-index.c:100
+#, c-format
+msgid "failed to create file %s"
+msgstr ""
+
+#: builtin/update-index.c:108
+#, c-format
+msgid "failed to delete file %s"
+msgstr ""
+
+#: builtin/update-index.c:115 builtin/update-index.c:221
+#, c-format
+msgid "failed to delete directory %s"
+msgstr ""
+
+#: builtin/update-index.c:140
+#, c-format
+msgid "Testing mtime in '%s' "
+msgstr ""
+
+#: builtin/update-index.c:154
+msgid "directory stat info does not change after adding a new file"
+msgstr ""
+
+#: builtin/update-index.c:167
+msgid "directory stat info does not change after adding a new directory"
+msgstr ""
+
+#: builtin/update-index.c:180
+msgid "directory stat info changes after updating a file"
+msgstr ""
+
+#: builtin/update-index.c:191
+msgid "directory stat info changes after adding a file inside subdirectory"
+msgstr ""
+
+#: builtin/update-index.c:202
+msgid "directory stat info does not change after deleting a file"
+msgstr ""
+
+#: builtin/update-index.c:215
+msgid "directory stat info does not change after deleting a directory"
+msgstr ""
+
+#: builtin/update-index.c:222
+msgid " OK"
+msgstr ""
+
+#: builtin/update-index.c:591
+msgid "git update-index [<options>] [--] [<file>...]"
+msgstr ""
+
+#: builtin/update-index.c:976
+msgid "continue refresh even when index needs update"
+msgstr ""
+
+#: builtin/update-index.c:979
+msgid "refresh: ignore submodules"
+msgstr ""
+
+#: builtin/update-index.c:982
+msgid "do not ignore new files"
+msgstr ""
+
+#: builtin/update-index.c:984
+msgid "let files replace directories and vice-versa"
+msgstr ""
+
+#: builtin/update-index.c:986
+msgid "notice files missing from worktree"
+msgstr ""
+
+#: builtin/update-index.c:988
+msgid "refresh even if index contains unmerged entries"
+msgstr ""
+
+#: builtin/update-index.c:991
+msgid "refresh stat information"
+msgstr ""
+
+#: builtin/update-index.c:995
+msgid "like --refresh, but ignore assume-unchanged setting"
+msgstr ""
+
+#: builtin/update-index.c:999
+msgid "<mode>,<object>,<path>"
+msgstr ""
+
+#: builtin/update-index.c:1000
+msgid "add the specified entry to the index"
+msgstr ""
+
+#: builtin/update-index.c:1010
+msgid "mark files as \"not changing\""
+msgstr ""
+
+#: builtin/update-index.c:1013
+msgid "clear assumed-unchanged bit"
+msgstr ""
+
+#: builtin/update-index.c:1016
+msgid "mark files as \"index-only\""
+msgstr ""
+
+#: builtin/update-index.c:1019
+msgid "clear skip-worktree bit"
+msgstr ""
+
+#: builtin/update-index.c:1022
+msgid "do not touch index-only entries"
+msgstr ""
+
+#: builtin/update-index.c:1024
+msgid "add to index only; do not add content to object database"
+msgstr ""
+
+#: builtin/update-index.c:1026
+msgid "remove named paths even if present in worktree"
+msgstr ""
+
+#: builtin/update-index.c:1028
+msgid "with --stdin: input lines are terminated by null bytes"
+msgstr ""
+
+#: builtin/update-index.c:1030
+msgid "read list of paths to be updated from standard input"
+msgstr ""
+
+#: builtin/update-index.c:1034
+msgid "add entries from standard input to the index"
+msgstr ""
+
+#: builtin/update-index.c:1038
+msgid "repopulate stages #2 and #3 for the listed paths"
+msgstr ""
+
+#: builtin/update-index.c:1042
+msgid "only update entries that differ from HEAD"
+msgstr ""
+
+#: builtin/update-index.c:1046
+msgid "ignore files missing from worktree"
+msgstr ""
+
+#: builtin/update-index.c:1049
+msgid "report actions to standard output"
+msgstr ""
+
+#: builtin/update-index.c:1051
+msgid "(for porcelains) forget saved unresolved conflicts"
+msgstr ""
+
+#: builtin/update-index.c:1055
+msgid "write index in this format"
+msgstr ""
+
+#: builtin/update-index.c:1057
+msgid "enable or disable split index"
+msgstr ""
+
+#: builtin/update-index.c:1059
+msgid "enable/disable untracked cache"
+msgstr ""
+
+#: builtin/update-index.c:1061
+msgid "test if the filesystem supports untracked cache"
+msgstr ""
+
+#: builtin/update-index.c:1063
+msgid "enable untracked cache without testing the filesystem"
+msgstr ""
+
+#: builtin/update-index.c:1065
+msgid "write out the index even if is not flagged as changed"
+msgstr ""
+
+#: builtin/update-index.c:1067
+msgid "enable or disable file system monitor"
+msgstr ""
+
+#: builtin/update-index.c:1069
+msgid "mark files as fsmonitor valid"
+msgstr ""
+
+#: builtin/update-index.c:1072
+msgid "clear fsmonitor valid bit"
+msgstr ""
+
+#: builtin/update-index.c:1175
+msgid ""
+"core.splitIndex is set to false; remove or change it, if you really want to "
+"enable split index"
+msgstr ""
+
+#: builtin/update-index.c:1184
+msgid ""
+"core.splitIndex is set to true; remove or change it, if you really want to "
+"disable split index"
+msgstr ""
+
+#: builtin/update-index.c:1196
+msgid ""
+"core.untrackedCache is set to true; remove or change it, if you really want "
+"to disable the untracked cache"
+msgstr ""
+
+#: builtin/update-index.c:1200
+msgid "Untracked cache disabled"
+msgstr ""
+
+#: builtin/update-index.c:1208
+msgid ""
+"core.untrackedCache is set to false; remove or change it, if you really want "
+"to enable the untracked cache"
+msgstr ""
+
+#: builtin/update-index.c:1212
+#, c-format
+msgid "Untracked cache enabled for '%s'"
+msgstr ""
+
+#: builtin/update-index.c:1220
+msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
+msgstr ""
+
+#: builtin/update-index.c:1224
+msgid "fsmonitor enabled"
+msgstr ""
+
+#: builtin/update-index.c:1227
+msgid ""
+"core.fsmonitor is set; remove it if you really want to disable fsmonitor"
+msgstr ""
+
+#: builtin/update-index.c:1231
+msgid "fsmonitor disabled"
+msgstr ""
+
+#: builtin/update-ref.c:10
+msgid "git update-ref [<options>] -d <refname> [<old-val>]"
+msgstr ""
+
+#: builtin/update-ref.c:11
+msgid "git update-ref [<options>]    <refname> <new-val> [<old-val>]"
+msgstr ""
+
+#: builtin/update-ref.c:12
+msgid "git update-ref [<options>] --stdin [-z]"
+msgstr ""
+
+#: builtin/update-ref.c:500
+msgid "delete the reference"
+msgstr ""
+
+#: builtin/update-ref.c:502
+msgid "update <refname> not the one it points to"
+msgstr ""
+
+#: builtin/update-ref.c:503
+msgid "stdin has NUL-terminated arguments"
+msgstr ""
+
+#: builtin/update-ref.c:504
+msgid "read updates from stdin"
+msgstr ""
+
+#: builtin/update-server-info.c:7
+msgid "git update-server-info [--force]"
+msgstr ""
+
+#: builtin/update-server-info.c:15
+msgid "update the info files from scratch"
+msgstr ""
+
+#: builtin/upload-pack.c:11
+msgid "git upload-pack [<options>] <dir>"
+msgstr ""
+
+#: builtin/upload-pack.c:23 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:27
+msgid "do not try <directory>/.git/ if <directory> is no Git directory"
+msgstr ""
+
+#: builtin/upload-pack.c:29
+msgid "interrupt transfer after <n> seconds of inactivity"
+msgstr ""
+
+#: builtin/verify-commit.c:19
+msgid "git verify-commit [-v | --verbose] <commit>..."
+msgstr ""
+
+#: builtin/verify-commit.c:68
+msgid "print commit contents"
+msgstr ""
+
+#: builtin/verify-commit.c:69 builtin/verify-tag.c:37
+msgid "print raw gpg status output"
+msgstr ""
+
+#: builtin/verify-pack.c:59
+msgid "git verify-pack [-v | --verbose] [-s | --stat-only] <pack>..."
+msgstr ""
+
+#: builtin/verify-pack.c:70
+msgid "verbose"
+msgstr ""
+
+#: builtin/verify-pack.c:72
+msgid "show statistics only"
+msgstr ""
+
+#: builtin/verify-tag.c:18
+msgid "git verify-tag [-v | --verbose] [--format=<format>] <tag>..."
+msgstr ""
+
+#: builtin/verify-tag.c:36
+msgid "print tag contents"
+msgstr ""
+
+#: builtin/worktree.c:18
+msgid "git worktree add [<options>] <path> [<commit-ish>]"
+msgstr ""
+
+#: builtin/worktree.c:19
+msgid "git worktree list [<options>]"
+msgstr ""
+
+#: builtin/worktree.c:20
+msgid "git worktree lock [<options>] <path>"
+msgstr ""
+
+#: builtin/worktree.c:21
+msgid "git worktree move <worktree> <new-path>"
+msgstr ""
+
+#: builtin/worktree.c:22
+msgid "git worktree prune [<options>]"
+msgstr ""
+
+#: builtin/worktree.c:23
+msgid "git worktree remove [<options>] <worktree>"
+msgstr ""
+
+#: builtin/worktree.c:24
+msgid "git worktree unlock <path>"
+msgstr ""
+
+#: builtin/worktree.c:61 builtin/worktree.c:935
+#, c-format
+msgid "failed to delete '%s'"
+msgstr ""
+
+#: builtin/worktree.c:74
+#, c-format
+msgid "Removing %s/%s: %s"
+msgstr ""
+
+#: builtin/worktree.c:149
+msgid "report pruned working trees"
+msgstr ""
+
+#: builtin/worktree.c:151
+msgid "expire working trees older than <time>"
+msgstr ""
+
+#: builtin/worktree.c:221
+#, c-format
+msgid "'%s' already exists"
+msgstr ""
+
+#: builtin/worktree.c:230
+#, c-format
+msgid "unusable worktree destination '%s'"
+msgstr ""
+
+#: builtin/worktree.c:235
+#, 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 ""
+
+#: builtin/worktree.c:237
+#, c-format
+msgid ""
+"'%s' is a missing but already registered worktree;\n"
+"use '%s -f' to override, or 'prune' or 'remove' to clear"
+msgstr ""
+
+#: builtin/worktree.c:288
+#, c-format
+msgid "could not create directory of '%s'"
+msgstr ""
+
+#: builtin/worktree.c:422 builtin/worktree.c:428
+#, c-format
+msgid "Preparing worktree (new branch '%s')"
+msgstr ""
+
+#: builtin/worktree.c:424
+#, c-format
+msgid "Preparing worktree (resetting branch '%s'; was at %s)"
+msgstr ""
+
+#: builtin/worktree.c:433
+#, c-format
+msgid "Preparing worktree (checking out '%s')"
+msgstr ""
+
+#: builtin/worktree.c:439
+#, c-format
+msgid "Preparing worktree (detached HEAD %s)"
+msgstr ""
+
+#: builtin/worktree.c:482
+msgid "checkout <branch> even if already checked out in other worktree"
+msgstr ""
+
+#: builtin/worktree.c:485
+msgid "create a new branch"
+msgstr ""
+
+#: builtin/worktree.c:487
+msgid "create or reset a branch"
+msgstr ""
+
+#: builtin/worktree.c:489
+msgid "populate the new working tree"
+msgstr ""
+
+#: builtin/worktree.c:490
+msgid "keep the new working tree locked"
+msgstr ""
+
+#: builtin/worktree.c:493
+msgid "set up tracking mode (see git-branch(1))"
+msgstr ""
+
+#: builtin/worktree.c:496
+msgid "try to match the new branch name with a remote-tracking branch"
+msgstr ""
+
+#: builtin/worktree.c:504
+msgid "-b, -B, and --detach are mutually exclusive"
+msgstr ""
+
+#: builtin/worktree.c:565
+msgid "--[no-]track can only be used if a new branch is created"
+msgstr ""
+
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr ""
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr ""
+
+#: builtin/worktree.c:720
+msgid "reason for locking"
+msgstr ""
+
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
+#, c-format
+msgid "'%s' is not a working tree"
+msgstr ""
+
+#: builtin/worktree.c:734 builtin/worktree.c:767
+msgid "The main working tree cannot be locked or unlocked"
+msgstr ""
+
+#: builtin/worktree.c:739
+#, c-format
+msgid "'%s' is already locked, reason: %s"
+msgstr ""
+
+#: builtin/worktree.c:741
+#, c-format
+msgid "'%s' is already locked"
+msgstr ""
+
+#: builtin/worktree.c:769
+#, c-format
+msgid "'%s' is not locked"
+msgstr ""
+
+#: builtin/worktree.c:810
+msgid "working trees containing submodules cannot be moved or removed"
+msgstr ""
+
+#: builtin/worktree.c:818
+msgid "force move even if worktree is dirty or locked"
+msgstr ""
+
+#: builtin/worktree.c:841 builtin/worktree.c:965
+#, c-format
+msgid "'%s' is a main working tree"
+msgstr ""
+
+#: builtin/worktree.c:846
+#, c-format
+msgid "could not figure out destination name from '%s'"
+msgstr ""
+
+#: builtin/worktree.c:859
+#, c-format
+msgid ""
+"cannot move a locked working tree, lock reason: %s\n"
+"use 'move -f -f' to override or unlock first"
+msgstr ""
+
+#: builtin/worktree.c:861
+msgid ""
+"cannot move a locked working tree;\n"
+"use 'move -f -f' to override or unlock first"
+msgstr ""
+
+#: builtin/worktree.c:864
+#, c-format
+msgid "validation failed, cannot move working tree: %s"
+msgstr ""
+
+#: builtin/worktree.c:869
+#, c-format
+msgid "failed to move '%s' to '%s'"
+msgstr ""
+
+#: builtin/worktree.c:915
+#, c-format
+msgid "failed to run 'git status' on '%s'"
+msgstr ""
+
+#: builtin/worktree.c:919
+#, c-format
+msgid "'%s' contains modified or untracked files, use --force to delete it"
+msgstr ""
+
+#: builtin/worktree.c:924
+#, c-format
+msgid "failed to run 'git status' on '%s', code %d"
+msgstr ""
+
+#: builtin/worktree.c:947
+msgid "force removal even if worktree is dirty or locked"
+msgstr ""
+
+#: builtin/worktree.c:970
+#, c-format
+msgid ""
+"cannot remove a locked working tree, lock reason: %s\n"
+"use 'remove -f -f' to override or unlock first"
+msgstr ""
+
+#: builtin/worktree.c:972
+msgid ""
+"cannot remove a locked working tree;\n"
+"use 'remove -f -f' to override or unlock first"
+msgstr ""
+
+#: builtin/worktree.c:975
+#, c-format
+msgid "validation failed, cannot remove working tree: %s"
+msgstr ""
+
+#: builtin/worktree.c:999
+#, c-format
+msgid "repair: %s: %s"
+msgstr ""
+
+#: builtin/worktree.c:1002
+#, c-format
+msgid "error: %s: %s"
+msgstr ""
+
+#: builtin/write-tree.c:15
+msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
+msgstr ""
+
+#: builtin/write-tree.c:28
+msgid "<prefix>/"
+msgstr ""
+
+#: builtin/write-tree.c:29
+msgid "write tree object for a subdirectory <prefix>"
+msgstr ""
+
+#: builtin/write-tree.c:31
+msgid "only useful for debugging"
+msgstr ""
+
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr ""
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr ""
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr ""
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr ""
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr ""
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr ""
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr ""
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr ""
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr ""
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr ""
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr ""
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr ""
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr ""
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr ""
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr ""
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr ""
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr ""
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr ""
+
+#: http-fetch.c:118
+#, c-format
+msgid "argument to --packfile must be a valid hash (got '%s')"
+msgstr ""
+
+#: http-fetch.c:128
+msgid "not a git repository"
+msgstr ""
+
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr ""
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr ""
+
+#: t/helper/test-fast-rebase.c:141
+msgid "unhandled options"
+msgstr ""
+
+#: t/helper/test-fast-rebase.c:146
+msgid "error preparing revisions"
+msgstr ""
+
+#: t/helper/test-reach.c:154
+#, c-format
+msgid "commit %s is not marked reachable"
+msgstr ""
+
+#: t/helper/test-reach.c:164
+msgid "too many commits marked reachable"
+msgstr ""
+
+#: t/helper/test-serve-v2.c:7
+msgid "test-tool serve-v2 [<options>]"
+msgstr ""
+
+#: t/helper/test-serve-v2.c:19
+msgid "exit immediately after advertising capabilities"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:688
+msgid ""
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr ""
+
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr ""
+
+#: http.c:399
+#, c-format
+msgid "negative value for http.postbuffer; defaulting to %d"
+msgstr ""
+
+#: http.c:420
+msgid "Delegation control is not supported with cURL < 7.22.0"
+msgstr ""
+
+#: http.c:429
+msgid "Public key pinning not supported with cURL < 7.44.0"
+msgstr ""
+
+#: http.c:910
+msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
+msgstr ""
+
+#: http.c:989
+msgid "Protocol restrictions not supported with cURL < 7.19.4"
+msgstr ""
+
+#: http.c:1132
+#, c-format
+msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
+msgstr ""
+
+#: http.c:1139
+#, c-format
+msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
+msgstr ""
+
+#: http.c:1143
+#, c-format
+msgid "Could not set SSL backend to '%s': already set"
+msgstr ""
+
+#: http.c:2035
+#, c-format
+msgid ""
+"unable to update url base from redirection:\n"
+"  asked for: %s\n"
+"   redirect: %s"
+msgstr ""
+
+#: remote-curl.c:183
+#, c-format
+msgid "invalid quoting in push-option value: '%s'"
+msgstr ""
+
+#: remote-curl.c:307
+#, c-format
+msgid "%sinfo/refs not valid: is this a git repository?"
+msgstr ""
+
+#: remote-curl.c:408
+msgid "invalid server response; expected service, got flush packet"
+msgstr ""
+
+#: remote-curl.c:439
+#, c-format
+msgid "invalid server response; got '%s'"
+msgstr ""
+
+#: remote-curl.c:499
+#, c-format
+msgid "repository '%s' not found"
+msgstr ""
+
+#: remote-curl.c:503
+#, c-format
+msgid "Authentication failed for '%s'"
+msgstr ""
+
+#: remote-curl.c:507
+#, c-format
+msgid "unable to access '%s': %s"
+msgstr ""
+
+#: remote-curl.c:513
+#, c-format
+msgid "redirecting to %s"
+msgstr ""
+
+#: remote-curl.c:642
+msgid "shouldn't have EOF when not gentle on EOF"
+msgstr ""
+
+#: remote-curl.c:654
+msgid "remote server sent stateless separator"
+msgstr ""
+
+#: remote-curl.c:724
+msgid "unable to rewind rpc post data - try increasing http.postBuffer"
+msgstr ""
+
+#: remote-curl.c:754
+#, c-format
+msgid "remote-curl: bad line length character: %.4s"
+msgstr ""
+
+#: remote-curl.c:756
+msgid "remote-curl: unexpected response end packet"
+msgstr ""
+
+#: remote-curl.c:832
+#, c-format
+msgid "RPC failed; %s"
+msgstr ""
+
+#: remote-curl.c:872
+msgid "cannot handle pushes this big"
+msgstr ""
+
+#: remote-curl.c:987
+#, c-format
+msgid "cannot deflate request; zlib deflate error %d"
+msgstr ""
+
+#: remote-curl.c:991
+#, c-format
+msgid "cannot deflate request; zlib end error %d"
+msgstr ""
+
+#: remote-curl.c:1041
+#, c-format
+msgid "%d bytes of length header were received"
+msgstr ""
+
+#: remote-curl.c:1043
+#, c-format
+msgid "%d bytes of body are still expected"
+msgstr ""
+
+#: remote-curl.c:1132
+msgid "dumb http transport does not support shallow capabilities"
+msgstr ""
+
+#: remote-curl.c:1147
+msgid "fetch failed."
+msgstr ""
+
+#: remote-curl.c:1193
+msgid "cannot fetch by sha1 over smart http"
+msgstr ""
+
+#: remote-curl.c:1237 remote-curl.c:1243
+#, c-format
+msgid "protocol error: expected sha/ref, got '%s'"
+msgstr ""
+
+#: remote-curl.c:1255 remote-curl.c:1373
+#, c-format
+msgid "http transport does not support %s"
+msgstr ""
+
+#: remote-curl.c:1291
+msgid "git-http-push failed"
+msgstr ""
+
+#: remote-curl.c:1479
+msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
+msgstr ""
+
+#: remote-curl.c:1511
+msgid "remote-curl: error reading command stream from git"
+msgstr ""
+
+#: remote-curl.c:1518
+msgid "remote-curl: fetch attempted without a local repo"
+msgstr ""
+
+#: remote-curl.c:1559
+#, c-format
+msgid "remote-curl: unknown command '%s' from git"
+msgstr ""
+
+#: compat/compiler.h:26
+msgid "no compiler information available\n"
+msgstr ""
+
+#: compat/compiler.h:38
+msgid "no libc information available\n"
+msgstr ""
+
+#: list-objects-filter-options.h:94
+msgid "args"
+msgstr ""
+
+#: list-objects-filter-options.h:95
+msgid "object filtering"
+msgstr ""
+
+#: parse-options.h:184
+msgid "expiry-date"
+msgstr ""
+
+#: parse-options.h:198
+msgid "no-op (backward compatibility)"
+msgstr ""
+
+#: parse-options.h:310
+msgid "be more verbose"
+msgstr ""
+
+#: parse-options.h:312
+msgid "be more quiet"
+msgstr ""
+
+#: parse-options.h:318
+msgid "use <n> digits to display object names"
+msgstr ""
+
+#: parse-options.h:337
+msgid "how to strip spaces and #comments from message"
+msgstr ""
+
+#: parse-options.h:338
+msgid "read pathspec from file"
+msgstr ""
+
+#: parse-options.h:339
+msgid ""
+"with --pathspec-from-file, pathspec elements are separated with NUL character"
+msgstr ""
+
+#: ref-filter.h:99
+msgid "key"
+msgstr ""
+
+#: ref-filter.h:99
+msgid "field name to sort on"
+msgstr ""
+
+#: rerere.h:44
+msgid "update the index with reused conflict resolution if possible"
+msgstr ""
+
+#: command-list.h:50
+msgid "Add file contents to the index"
+msgstr ""
+
+#: command-list.h:51
+msgid "Apply a series of patches from a mailbox"
+msgstr ""
+
+#: command-list.h:52
+msgid "Annotate file lines with commit information"
+msgstr ""
+
+#: command-list.h:53
+msgid "Apply a patch to files and/or to the index"
+msgstr ""
+
+#: command-list.h:54
+msgid "Import a GNU Arch repository into Git"
+msgstr ""
+
+#: command-list.h:55
+msgid "Create an archive of files from a named tree"
+msgstr ""
+
+#: command-list.h:56
+msgid "Use binary search to find the commit that introduced a bug"
+msgstr ""
+
+#: command-list.h:57
+msgid "Show what revision and author last modified each line of a file"
+msgstr ""
+
+#: command-list.h:58
+msgid "List, create, or delete branches"
+msgstr ""
+
+#: command-list.h:59
+msgid "Collect information for user to file a bug report"
+msgstr ""
+
+#: command-list.h:60
+msgid "Move objects and refs by archive"
+msgstr ""
+
+#: command-list.h:61
+msgid "Provide content or type and size information for repository objects"
+msgstr ""
+
+#: command-list.h:62
+msgid "Display gitattributes information"
+msgstr ""
+
+#: command-list.h:63
+msgid "Debug gitignore / exclude files"
+msgstr ""
+
+#: command-list.h:64
+msgid "Show canonical names and email addresses of contacts"
+msgstr ""
+
+#: command-list.h:65
+msgid "Switch branches or restore working tree files"
+msgstr ""
+
+#: command-list.h:66
+msgid "Copy files from the index to the working tree"
+msgstr ""
+
+#: command-list.h:67
+msgid "Ensures that a reference name is well formed"
+msgstr ""
+
+#: command-list.h:68
+msgid "Find commits yet to be applied to upstream"
+msgstr ""
+
+#: command-list.h:69
+msgid "Apply the changes introduced by some existing commits"
+msgstr ""
+
+#: command-list.h:70
+msgid "Graphical alternative to git-commit"
+msgstr ""
+
+#: command-list.h:71
+msgid "Remove untracked files from the working tree"
+msgstr ""
+
+#: command-list.h:72
+msgid "Clone a repository into a new directory"
+msgstr ""
+
+#: command-list.h:73
+msgid "Display data in columns"
+msgstr ""
+
+#: command-list.h:74
+msgid "Record changes to the repository"
+msgstr ""
+
+#: command-list.h:75
+msgid "Write and verify Git commit-graph files"
+msgstr ""
+
+#: command-list.h:76
+msgid "Create a new commit object"
+msgstr ""
+
+#: command-list.h:77
+msgid "Get and set repository or global options"
+msgstr ""
+
+#: command-list.h:78
+msgid "Count unpacked number of objects and their disk consumption"
+msgstr ""
+
+#: command-list.h:79
+msgid "Retrieve and store user credentials"
+msgstr ""
+
+#: command-list.h:80
+msgid "Helper to temporarily store passwords in memory"
+msgstr ""
+
+#: command-list.h:81
+msgid "Helper to store credentials on disk"
+msgstr ""
+
+#: command-list.h:82
+msgid "Export a single commit to a CVS checkout"
+msgstr ""
+
+#: command-list.h:83
+msgid "Salvage your data out of another SCM people love to hate"
+msgstr ""
+
+#: command-list.h:84
+msgid "A CVS server emulator for Git"
+msgstr ""
+
+#: command-list.h:85
+msgid "A really simple server for Git repositories"
+msgstr ""
+
+#: command-list.h:86
+msgid "Give an object a human readable name based on an available ref"
+msgstr ""
+
+#: command-list.h:87
+msgid "Show changes between commits, commit and working tree, etc"
+msgstr ""
+
+#: command-list.h:88
+msgid "Compares files in the working tree and the index"
+msgstr ""
+
+#: command-list.h:89
+msgid "Compare a tree to the working tree or index"
+msgstr ""
+
+#: command-list.h:90
+msgid "Compares the content and mode of blobs found via two tree objects"
+msgstr ""
+
+#: command-list.h:91
+msgid "Show changes using common diff tools"
+msgstr ""
+
+#: command-list.h:92
+msgid "Git data exporter"
+msgstr ""
+
+#: command-list.h:93
+msgid "Backend for fast Git data importers"
+msgstr ""
+
+#: command-list.h:94
+msgid "Download objects and refs from another repository"
+msgstr ""
+
+#: command-list.h:95
+msgid "Receive missing objects from another repository"
+msgstr ""
+
+#: command-list.h:96
+msgid "Rewrite branches"
+msgstr ""
+
+#: command-list.h:97
+msgid "Produce a merge commit message"
+msgstr ""
+
+#: command-list.h:98
+msgid "Output information on each ref"
+msgstr ""
+
+#: command-list.h:99
+msgid "Run a Git command on a list of repositories"
+msgstr ""
+
+#: command-list.h:100
+msgid "Prepare patches for e-mail submission"
+msgstr ""
+
+#: command-list.h:101
+msgid "Verifies the connectivity and validity of the objects in the database"
+msgstr ""
+
+#: command-list.h:102
+msgid "Cleanup unnecessary files and optimize the local repository"
+msgstr ""
+
+#: command-list.h:103
+msgid "Extract commit ID from an archive created using git-archive"
+msgstr ""
+
+#: command-list.h:104
+msgid "Print lines matching a pattern"
+msgstr ""
+
+#: command-list.h:105
+msgid "A portable graphical interface to Git"
+msgstr ""
+
+#: command-list.h:106
+msgid "Compute object ID and optionally creates a blob from a file"
+msgstr ""
+
+#: command-list.h:107
+msgid "Display help information about Git"
+msgstr ""
+
+#: command-list.h:108
+msgid "Server side implementation of Git over HTTP"
+msgstr ""
+
+#: command-list.h:109
+msgid "Download from a remote Git repository via HTTP"
+msgstr ""
+
+#: command-list.h:110
+msgid "Push objects over HTTP/DAV to another repository"
+msgstr ""
+
+#: command-list.h:111
+msgid "Send a collection of patches from stdin to an IMAP folder"
+msgstr ""
+
+#: command-list.h:112
+msgid "Build pack index file for an existing packed archive"
+msgstr ""
+
+#: command-list.h:113
+msgid "Create an empty Git repository or reinitialize an existing one"
+msgstr ""
+
+#: command-list.h:114
+msgid "Instantly browse your working repository in gitweb"
+msgstr ""
+
+#: command-list.h:115
+msgid "Add or parse structured information in commit messages"
+msgstr ""
+
+#: command-list.h:116
+msgid "The Git repository browser"
+msgstr ""
+
+#: command-list.h:117
+msgid "Show commit logs"
+msgstr ""
+
+#: command-list.h:118
+msgid "Show information about files in the index and the working tree"
+msgstr ""
+
+#: command-list.h:119
+msgid "List references in a remote repository"
+msgstr ""
+
+#: command-list.h:120
+msgid "List the contents of a tree object"
+msgstr ""
+
+#: command-list.h:121
+msgid "Extracts patch and authorship from a single e-mail message"
+msgstr ""
+
+#: command-list.h:122
+msgid "Simple UNIX mbox splitter program"
+msgstr ""
+
+#: command-list.h:123
+msgid "Run tasks to optimize Git repository data"
+msgstr ""
+
+#: command-list.h:124
+msgid "Join two or more development histories together"
+msgstr ""
+
+#: command-list.h:125
+msgid "Find as good common ancestors as possible for a merge"
+msgstr ""
+
+#: command-list.h:126
+msgid "Run a three-way file merge"
+msgstr ""
+
+#: command-list.h:127
+msgid "Run a merge for files needing merging"
+msgstr ""
+
+#: command-list.h:128
+msgid "The standard helper program to use with git-merge-index"
+msgstr ""
+
+#: command-list.h:129
+msgid "Run merge conflict resolution tools to resolve merge conflicts"
+msgstr ""
+
+#: command-list.h:130
+msgid "Show three-way merge without touching index"
+msgstr ""
+
+#: command-list.h:131
+msgid "Write and verify multi-pack-indexes"
+msgstr ""
+
+#: command-list.h:132
+msgid "Creates a tag object with extra validation"
+msgstr ""
+
+#: command-list.h:133
+msgid "Build a tree-object from ls-tree formatted text"
+msgstr ""
+
+#: command-list.h:134
+msgid "Move or rename a file, a directory, or a symlink"
+msgstr ""
+
+#: command-list.h:135
+msgid "Find symbolic names for given revs"
+msgstr ""
+
+#: command-list.h:136
+msgid "Add or inspect object notes"
+msgstr ""
+
+#: command-list.h:137
+msgid "Import from and submit to Perforce repositories"
+msgstr ""
+
+#: command-list.h:138
+msgid "Create a packed archive of objects"
+msgstr ""
+
+#: command-list.h:139
+msgid "Find redundant pack files"
+msgstr ""
+
+#: command-list.h:140
+msgid "Pack heads and tags for efficient repository access"
+msgstr ""
+
+#: command-list.h:141
+msgid "Compute unique ID for a patch"
+msgstr ""
+
+#: command-list.h:142
+msgid "Prune all unreachable objects from the object database"
+msgstr ""
+
+#: command-list.h:143
+msgid "Remove extra objects that are already in pack files"
+msgstr ""
+
+#: command-list.h:144
+msgid "Fetch from and integrate with another repository or a local branch"
+msgstr ""
+
+#: command-list.h:145
+msgid "Update remote refs along with associated objects"
+msgstr ""
+
+#: command-list.h:146
+msgid "Applies a quilt patchset onto the current branch"
+msgstr ""
+
+#: command-list.h:147
+msgid "Compare two commit ranges (e.g. two versions of a branch)"
+msgstr ""
+
+#: command-list.h:148
+msgid "Reads tree information into the index"
+msgstr ""
+
+#: command-list.h:149
+msgid "Reapply commits on top of another base tip"
+msgstr ""
+
+#: command-list.h:150
+msgid "Receive what is pushed into the repository"
+msgstr ""
+
+#: command-list.h:151
+msgid "Manage reflog information"
+msgstr ""
+
+#: command-list.h:152
+msgid "Manage set of tracked repositories"
+msgstr ""
+
+#: command-list.h:153
+msgid "Pack unpacked objects in a repository"
+msgstr ""
+
+#: command-list.h:154
+msgid "Create, list, delete refs to replace objects"
+msgstr ""
+
+#: command-list.h:155
+msgid "Generates a summary of pending changes"
+msgstr ""
+
+#: command-list.h:156
+msgid "Reuse recorded resolution of conflicted merges"
+msgstr ""
+
+#: command-list.h:157
+msgid "Reset current HEAD to the specified state"
+msgstr ""
+
+#: command-list.h:158
+msgid "Restore working tree files"
+msgstr ""
+
+#: command-list.h:159
+msgid "Revert some existing commits"
+msgstr ""
+
+#: command-list.h:160
+msgid "Lists commit objects in reverse chronological order"
+msgstr ""
+
+#: command-list.h:161
+msgid "Pick out and massage parameters"
+msgstr ""
+
+#: command-list.h:162
+msgid "Remove files from the working tree and from the index"
+msgstr ""
+
+#: command-list.h:163
+msgid "Send a collection of patches as emails"
+msgstr ""
+
+#: command-list.h:164
+msgid "Push objects over Git protocol to another repository"
+msgstr ""
+
+#: command-list.h:165
+msgid "Restricted login shell for Git-only SSH access"
+msgstr ""
+
+#: command-list.h:166
+msgid "Summarize 'git log' output"
+msgstr ""
+
+#: command-list.h:167
+msgid "Show various types of objects"
+msgstr ""
+
+#: command-list.h:168
+msgid "Show branches and their commits"
+msgstr ""
+
+#: command-list.h:169
+msgid "Show packed archive index"
+msgstr ""
+
+#: command-list.h:170
+msgid "List references in a local repository"
+msgstr ""
+
+#: command-list.h:171
+msgid "Git's i18n setup code for shell scripts"
+msgstr ""
+
+#: command-list.h:172
+msgid "Common Git shell script setup code"
+msgstr ""
+
+#: command-list.h:173
+msgid "Initialize and modify the sparse-checkout"
+msgstr ""
+
+#: command-list.h:174
+msgid "Stash the changes in a dirty working directory away"
+msgstr ""
+
+#: command-list.h:175
+msgid "Add file contents to the staging area"
+msgstr ""
+
+#: command-list.h:176
+msgid "Show the working tree status"
+msgstr ""
+
+#: command-list.h:177
+msgid "Remove unnecessary whitespace"
+msgstr ""
+
+#: command-list.h:178
+msgid "Initialize, update or inspect submodules"
+msgstr ""
+
+#: command-list.h:179
+msgid "Bidirectional operation between a Subversion repository and Git"
+msgstr ""
+
+#: command-list.h:180
+msgid "Switch branches"
+msgstr ""
+
+#: command-list.h:181
+msgid "Read, modify and delete symbolic refs"
+msgstr ""
+
+#: command-list.h:182
+msgid "Create, list, delete or verify a tag object signed with GPG"
+msgstr ""
+
+#: command-list.h:183
+msgid "Creates a temporary file with a blob's contents"
+msgstr ""
+
+#: command-list.h:184
+msgid "Unpack objects from a packed archive"
+msgstr ""
+
+#: command-list.h:185
+msgid "Register file contents in the working tree to the index"
+msgstr ""
+
+#: command-list.h:186
+msgid "Update the object name stored in a ref safely"
+msgstr ""
+
+#: command-list.h:187
+msgid "Update auxiliary info file to help dumb servers"
+msgstr ""
+
+#: command-list.h:188
+msgid "Send archive back to git-archive"
+msgstr ""
+
+#: command-list.h:189
+msgid "Send objects packed back to git-fetch-pack"
+msgstr ""
+
+#: command-list.h:190
+msgid "Show a Git logical variable"
+msgstr ""
+
+#: command-list.h:191
+msgid "Check the GPG signature of commits"
+msgstr ""
+
+#: command-list.h:192
+msgid "Validate packed Git archive files"
+msgstr ""
+
+#: command-list.h:193
+msgid "Check the GPG signature of tags"
+msgstr ""
+
+#: command-list.h:194
+msgid "Git web interface (web frontend to Git repositories)"
+msgstr ""
+
+#: command-list.h:195
+msgid "Show logs with difference each commit introduces"
+msgstr ""
+
+#: command-list.h:196
+msgid "Manage multiple working trees"
+msgstr ""
+
+#: command-list.h:197
+msgid "Create a tree object from the current index"
+msgstr ""
+
+#: command-list.h:198
+msgid "Defining attributes per path"
+msgstr ""
+
+#: command-list.h:199
+msgid "Git command-line interface and conventions"
+msgstr ""
+
+#: command-list.h:200
+msgid "A Git core tutorial for developers"
+msgstr ""
+
+#: command-list.h:201
+msgid "Providing usernames and passwords to Git"
+msgstr ""
+
+#: command-list.h:202
+msgid "Git for CVS users"
+msgstr ""
+
+#: command-list.h:203
+msgid "Tweaking diff output"
+msgstr ""
+
+#: command-list.h:204
+msgid "A useful minimum set of commands for Everyday Git"
+msgstr ""
+
+#: command-list.h:205
+msgid "Frequently asked questions about using Git"
+msgstr ""
+
+#: command-list.h:206
+msgid "A Git Glossary"
+msgstr ""
+
+#: command-list.h:207
+msgid "Hooks used by Git"
+msgstr ""
+
+#: command-list.h:208
+msgid "Specifies intentionally untracked files to ignore"
+msgstr ""
+
+#: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr ""
+
+#: command-list.h:210
+msgid "Defining submodule properties"
+msgstr ""
+
+#: command-list.h:211
+msgid "Git namespaces"
+msgstr ""
+
+#: command-list.h:212
+msgid "Helper programs to interact with remote repositories"
+msgstr ""
+
+#: command-list.h:213
+msgid "Git Repository Layout"
+msgstr ""
+
+#: command-list.h:214
+msgid "Specifying revisions and ranges for Git"
+msgstr ""
+
+#: command-list.h:215
+msgid "Mounting one repository inside another"
+msgstr ""
+
+#: command-list.h:216
+msgid "A tutorial introduction to Git: part two"
+msgstr ""
+
+#: command-list.h:217
+msgid "A tutorial introduction to Git"
+msgstr ""
+
+#: command-list.h:218
+msgid "An overview of recommended workflows with Git"
+msgstr ""
+
+#: git-bisect.sh:68
+msgid "bisect run failed: no command provided."
+msgstr ""
+
+#: git-bisect.sh:73
+#, sh-format
+msgid "running $command"
+msgstr ""
+
+#: git-bisect.sh:80
+#, sh-format
+msgid ""
+"bisect run failed:\n"
+"exit code $res from '$command' is < 0 or >= 128"
+msgstr ""
+
+#: 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 ""
+
+#: 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 "
+"merge"
+msgstr ""
+
+#: git-merge-octopus.sh:61
+msgid "Automated merge did not work."
+msgstr ""
+
+#: git-merge-octopus.sh:62
+msgid "Should not be doing an octopus."
+msgstr ""
+
+#: git-merge-octopus.sh:73
+#, sh-format
+msgid "Unable to find common commit with $pretty_name"
+msgstr ""
+
+#: git-merge-octopus.sh:77
+#, sh-format
+msgid "Already up to date with $pretty_name"
+msgstr ""
+
+#: git-merge-octopus.sh:89
+#, sh-format
+msgid "Fast-forwarding to: $pretty_name"
+msgstr ""
+
+#: git-merge-octopus.sh:97
+#, sh-format
+msgid "Trying simple merge with $pretty_name"
+msgstr ""
+
+#: git-merge-octopus.sh:102
+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 ""
+
+#: git-submodule.sh:208
+#, sh-format
+msgid "'$sm_path' already exists in the index"
+msgstr ""
+
+#: git-submodule.sh:211
+#, sh-format
+msgid "'$sm_path' already exists in the index and is not a submodule"
+msgstr ""
+
+#: git-submodule.sh:218
+#, sh-format
+msgid "'$sm_path' does not have a commit checked out"
+msgstr ""
+
+#: git-submodule.sh:249
+#, sh-format
+msgid "Adding existing repo at '$sm_path' to the index"
+msgstr ""
+
+#: git-submodule.sh:251
+#, sh-format
+msgid "'$sm_path' already exists and is not a valid git repo"
+msgstr ""
+
+#: git-submodule.sh:259
+#, sh-format
+msgid "A git directory for '$sm_name' is found locally with remote(s):"
+msgstr ""
+
+#: 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-submodule.sh:267
+#, sh-format
+msgid "Reactivating local git directory for submodule '$sm_name'."
+msgstr ""
+
+#: git-submodule.sh:279
+#, sh-format
+msgid "Unable to checkout submodule '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:284
+#, sh-format
+msgid "Failed to add submodule '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:293
+#, sh-format
+msgid "Failed to register submodule '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:568
+#, sh-format
+msgid "Unable to find current revision in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:578
+#, sh-format
+msgid "Unable to fetch in submodule path '$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:583
+#, sh-format
+msgid ""
+"Unable to find current ${remote_name}/${branch} revision in submodule path "
+"'$sm_path'"
+msgstr ""
+
+#: git-submodule.sh:601
+#, sh-format
+msgid ""
+"Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
+"$sha1:"
+msgstr ""
+
+#: 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 ""
+
+#: git-submodule.sh:614
+#, sh-format
+msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:615
+#, sh-format
+msgid "Submodule path '$displaypath': checked out '$sha1'"
+msgstr ""
+
+#: git-submodule.sh:619
+#, sh-format
+msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:620
+#, sh-format
+msgid "Submodule path '$displaypath': rebased into '$sha1'"
+msgstr ""
+
+#: git-submodule.sh:625
+#, sh-format
+msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:626
+#, sh-format
+msgid "Submodule path '$displaypath': merged in '$sha1'"
+msgstr ""
+
+#: git-submodule.sh:631
+#, sh-format
+msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
+msgstr ""
+
+#: git-submodule.sh:632
+#, sh-format
+msgid "Submodule path '$displaypath': '$command $sha1'"
+msgstr ""
+
+#: git-submodule.sh:663
+#, sh-format
+msgid "Failed to recurse into submodule path '$displaypath'"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:109
+msgid "Applied autostash."
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:112
+#, sh-format
+msgid "Cannot store $stash_sha1"
+msgstr ""
+
+#: 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 ""
+
+#: git-rebase--preserve-merges.sh:191
+#, sh-format
+msgid "Rebasing ($new_count/$total)"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: git-rebase--preserve-merges.sh:285
+#, sh-format
+msgid "$sha1: not a commit that can be picked"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:324
+#, sh-format
+msgid "Invalid commit name: $sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:354
+msgid "Cannot write current commit's replacement sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:405
+#, sh-format
+msgid "Fast-forward to $sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:407
+#, sh-format
+msgid "Cannot fast-forward to $sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:416
+#, sh-format
+msgid "Cannot move HEAD to $first_parent"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:421
+#, sh-format
+msgid "Refusing to squash a merge: $sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:439
+#, sh-format
+msgid "Error redoing merge $sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:448
+#, sh-format
+msgid "Could not pick $sha1"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:457
+#, sh-format
+msgid "This is the commit message #${n}:"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:462
+#, sh-format
+msgid "The commit message #${n} will be skipped:"
+msgstr ""
+
+#: 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] ""
+msgstr[1] ""
+
+#: git-rebase--preserve-merges.sh:482
+#, sh-format
+msgid "Cannot write $fixup_msg"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:485
+msgid "This is a combination of 2 commits."
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: git-rebase--preserve-merges.sh:616
+#, sh-format
+msgid "Stopped at $sha1_abbrev... $rest"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:631
+#, sh-format
+msgid "Cannot '$squash_style' without a previous commit"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:673
+#, sh-format
+msgid "Executing: $rest"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:681
+#, sh-format
+msgid "Execution failed: $rest"
+msgstr ""
+
+#: 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 ""
+
+#. 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 ""
+
+#: git-rebase--preserve-merges.sh:709
+#, sh-format
+msgid "Unknown command: $command $sha1 $rest"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:710
+msgid "Please fix this using 'git rebase --edit-todo'."
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:745
+#, sh-format
+msgid "Successfully rebased and updated $head_name."
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:802
+msgid "Could not remove CHERRY_PICK_HEAD"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: git-rebase--preserve-merges.sh:897
+msgid "No HEAD?"
+msgstr ""
+
+#: git-rebase--preserve-merges.sh:898
+#, sh-format
+msgid "Could not create temporary $state_dir"
+msgstr ""
+
+#: 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] ""
+msgstr[1] ""
+
+#: 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"
+msgstr ""
+
+#: git-sh-setup.sh:191
+#, sh-format
+msgid "Cannot chdir to $cdup, the toplevel of the working tree"
+msgstr ""
+
+#: git-sh-setup.sh:200 git-sh-setup.sh:207
+#, sh-format
+msgid "fatal: $program_name cannot be used without a working tree."
+msgstr ""
+
+#: 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
+#, sh-format
+msgid "Cannot $action: You have unstaged changes."
+msgstr ""
+
+#: 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
+#, sh-format
+msgid "Cannot $action: Your index contains uncommitted changes."
+msgstr ""
+
+#: git-sh-setup.sh:253
+msgid "Additionally, your index contains uncommitted changes."
+msgstr ""
+
+#: git-sh-setup.sh:373
+msgid "You need to run this command from the toplevel of the working tree."
+msgstr ""
+
+#: git-sh-setup.sh:378
+msgid "Unable to determine absolute path of git directory"
+msgstr ""
+
+#. TRANSLATORS: you can adjust this to align "git add -i" status menu
+#: git-add--interactive.perl:212
+#, perl-format
+msgid "%12s %12s %s"
+msgstr ""
+
+#: git-add--interactive.perl:632
+#, perl-format
+msgid "touched %d path\n"
+msgid_plural "touched %d paths\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: git-add--interactive.perl:1056
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be\n"
+"marked for staging."
+msgstr ""
+
+#: git-add--interactive.perl:1059
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be\n"
+"marked for stashing."
+msgstr ""
+
+#: git-add--interactive.perl:1062
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be\n"
+"marked for unstaging."
+msgstr ""
+
+#: git-add--interactive.perl:1065 git-add--interactive.perl:1074
+#: git-add--interactive.perl:1080
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be\n"
+"marked for applying."
+msgstr ""
+
+#: git-add--interactive.perl:1068 git-add--interactive.perl:1071
+#: git-add--interactive.perl:1077
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be\n"
+"marked for discarding."
+msgstr ""
+
+#: git-add--interactive.perl:1114
+#, perl-format
+msgid "failed to open hunk edit file for writing: %s"
+msgstr ""
+
+#: git-add--interactive.perl:1121
+#, perl-format
+msgid ""
+"---\n"
+"To remove '%s' lines, make them ' ' lines (context).\n"
+"To remove '%s' lines, delete them.\n"
+"Lines starting with %s will be removed.\n"
+msgstr ""
+
+#: git-add--interactive.perl:1143
+#, perl-format
+msgid "failed to open hunk edit file for reading: %s"
+msgstr ""
+
+#: git-add--interactive.perl:1251
+msgid ""
+"y - stage this hunk\n"
+"n - do not stage this hunk\n"
+"q - quit; do not stage this hunk or any of the remaining ones\n"
+"a - stage this hunk and all later hunks in the file\n"
+"d - do not stage this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1257
+msgid ""
+"y - stash this hunk\n"
+"n - do not stash this hunk\n"
+"q - quit; do not stash this hunk or any of the remaining ones\n"
+"a - stash this hunk and all later hunks in the file\n"
+"d - do not stash this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1263
+msgid ""
+"y - unstage this hunk\n"
+"n - do not unstage this hunk\n"
+"q - quit; do not unstage this hunk or any of the remaining ones\n"
+"a - unstage this hunk and all later hunks in the file\n"
+"d - do not unstage this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1269
+msgid ""
+"y - apply this hunk to index\n"
+"n - do not apply this hunk to index\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1275 git-add--interactive.perl:1293
+msgid ""
+"y - discard this hunk from worktree\n"
+"n - do not discard this hunk from worktree\n"
+"q - quit; do not discard this hunk or any of the remaining ones\n"
+"a - discard this hunk and all later hunks in the file\n"
+"d - do not discard this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1281
+msgid ""
+"y - discard this hunk from index and worktree\n"
+"n - do not discard this hunk from index and worktree\n"
+"q - quit; do not discard this hunk or any of the remaining ones\n"
+"a - discard this hunk and all later hunks in the file\n"
+"d - do not discard this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1287
+msgid ""
+"y - apply this hunk to index and worktree\n"
+"n - do not apply this hunk to index and worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1299
+msgid ""
+"y - apply this hunk to worktree\n"
+"n - do not apply this hunk to worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1314
+msgid ""
+"g - select a hunk to go to\n"
+"/ - search for a hunk matching the given regex\n"
+"j - leave this hunk undecided, see next undecided hunk\n"
+"J - leave this hunk undecided, see next hunk\n"
+"k - leave this hunk undecided, see previous undecided hunk\n"
+"K - leave this hunk undecided, see previous hunk\n"
+"s - split the current hunk into smaller hunks\n"
+"e - manually edit the current hunk\n"
+"? - print help\n"
+msgstr ""
+
+#: git-add--interactive.perl:1345
+msgid "The selected hunks do not apply to the index!\n"
+msgstr ""
+
+#: git-add--interactive.perl:1360
+#, perl-format
+msgid "ignoring unmerged: %s\n"
+msgstr ""
+
+#: git-add--interactive.perl:1479
+#, perl-format
+msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+
+#: git-add--interactive.perl:1480
+#, perl-format
+msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+
+#: git-add--interactive.perl:1481
+#, perl-format
+msgid "Apply addition to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+
+#: git-add--interactive.perl:1482
+#, perl-format
+msgid "Apply this hunk to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+
+#: git-add--interactive.perl:1599
+msgid "No other hunks to goto\n"
+msgstr ""
+
+#: git-add--interactive.perl:1617
+#, perl-format
+msgid "Invalid number: '%s'\n"
+msgstr ""
+
+#: git-add--interactive.perl:1622
+#, perl-format
+msgid "Sorry, only %d hunk available.\n"
+msgid_plural "Sorry, only %d hunks available.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: git-add--interactive.perl:1657
+msgid "No other hunks to search\n"
+msgstr ""
+
+#: git-add--interactive.perl:1674
+#, perl-format
+msgid "Malformed search regexp %s: %s\n"
+msgstr ""
+
+#: git-add--interactive.perl:1684
+msgid "No hunk matches the given pattern\n"
+msgstr ""
+
+#: git-add--interactive.perl:1696 git-add--interactive.perl:1718
+msgid "No previous hunk\n"
+msgstr ""
+
+#: git-add--interactive.perl:1705 git-add--interactive.perl:1724
+msgid "No next hunk\n"
+msgstr ""
+
+#: git-add--interactive.perl:1730
+msgid "Sorry, cannot split this hunk\n"
+msgstr ""
+
+#: git-add--interactive.perl:1736
+#, perl-format
+msgid "Split into %d hunk.\n"
+msgid_plural "Split into %d hunks.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#: git-add--interactive.perl:1746
+msgid "Sorry, cannot edit this hunk\n"
+msgstr ""
+
+#. TRANSLATORS: please do not translate the command names
+#. 'status', 'update', 'revert', etc.
+#: git-add--interactive.perl:1811
+msgid ""
+"status        - show paths with changes\n"
+"update        - add working tree state to the staged set of changes\n"
+"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"
+msgstr ""
+
+#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
+#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
+#: git-add--interactive.perl:1853 git-add--interactive.perl:1860
+#: git-add--interactive.perl:1864 git-add--interactive.perl:1870
+msgid "missing --"
+msgstr ""
+
+#: git-add--interactive.perl:1866
+#, perl-format
+msgid "unknown --patch mode: %s"
+msgstr ""
+
+#: git-add--interactive.perl:1872 git-add--interactive.perl:1878
+#, perl-format
+msgid "invalid argument %s, expecting --"
+msgstr ""
+
+#: git-send-email.perl:138
+msgid "local zone differs from GMT by a non-minute interval\n"
+msgstr ""
+
+#: git-send-email.perl:145 git-send-email.perl:151
+msgid "local time offset greater than or equal to 24 hours\n"
+msgstr ""
+
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr ""
+
+#: git-send-email.perl:235
+msgid "the editor exited uncleanly, aborting everything"
+msgstr ""
+
+#: git-send-email.perl:321
+#, perl-format
+msgid ""
+"'%s' contains an intermediate version of the email you were composing.\n"
+msgstr ""
+
+#: git-send-email.perl:326
+#, perl-format
+msgid "'%s.final' contains the composed email.\n"
+msgstr ""
+
+#: git-send-email.perl:419
+msgid "--dump-aliases incompatible with other options\n"
+msgstr ""
+
+#: git-send-email.perl:493
+msgid ""
+"fatal: found configuration options for 'sendmail'\n"
+"git-send-email is configured with the sendemail.* options - note the 'e'.\n"
+"Set sendemail.forbidSendmailVariables to false to disable this check.\n"
+msgstr ""
+
+#: git-send-email.perl:498 git-send-email.perl:700
+msgid "Cannot run git format-patch from outside a repository\n"
+msgstr ""
+
+#: git-send-email.perl:501
+msgid ""
+"`batch-size` and `relogin` must be specified together (via command-line or "
+"configuration option)\n"
+msgstr ""
+
+#: git-send-email.perl:514
+#, perl-format
+msgid "Unknown --suppress-cc field: '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:545
+#, perl-format
+msgid "Unknown --confirm setting: '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:573
+#, perl-format
+msgid "warning: sendmail alias with quotes is not supported: %s\n"
+msgstr ""
+
+#: git-send-email.perl:575
+#, perl-format
+msgid "warning: `:include:` not supported: %s\n"
+msgstr ""
+
+#: git-send-email.perl:577
+#, perl-format
+msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
+msgstr ""
+
+#: git-send-email.perl:582
+#, perl-format
+msgid "warning: sendmail line is not recognized: %s\n"
+msgstr ""
+
+#: git-send-email.perl:666
+#, perl-format
+msgid ""
+"File '%s' exists but it could also be the range of commits\n"
+"to produce patches for.  Please disambiguate by...\n"
+"\n"
+"    * Saying \"./%s\" if you mean a file; or\n"
+"    * Giving --format-patch option if you mean a range.\n"
+msgstr ""
+
+#: git-send-email.perl:687
+#, perl-format
+msgid "Failed to opendir %s: %s"
+msgstr ""
+
+#: git-send-email.perl:720
+msgid ""
+"\n"
+"No patch files specified!\n"
+"\n"
+msgstr ""
+
+#: git-send-email.perl:733
+#, perl-format
+msgid "No subject line in %s?"
+msgstr ""
+
+#: git-send-email.perl:743
+#, perl-format
+msgid "Failed to open for writing %s: %s"
+msgstr ""
+
+#: git-send-email.perl:754
+msgid ""
+"Lines beginning in \"GIT:\" will be removed.\n"
+"Consider including an overall diffstat or table of contents\n"
+"for the patch you are writing.\n"
+"\n"
+"Clear the body content if you don't wish to send a summary.\n"
+msgstr ""
+
+#: git-send-email.perl:778
+#, perl-format
+msgid "Failed to open %s: %s"
+msgstr ""
+
+#: git-send-email.perl:795
+#, perl-format
+msgid "Failed to open %s.final: %s"
+msgstr ""
+
+#: git-send-email.perl:838
+msgid "Summary email is empty, skipping it\n"
+msgstr ""
+
+#. TRANSLATORS: please keep [y/N] as is.
+#: git-send-email.perl:873
+#, perl-format
+msgid "Are you sure you want to use <%s> [y/N]? "
+msgstr ""
+
+#: git-send-email.perl:928
+msgid ""
+"The following files are 8bit, but do not declare a Content-Transfer-"
+"Encoding.\n"
+msgstr ""
+
+#: git-send-email.perl:933
+msgid "Which 8bit encoding should I declare [UTF-8]? "
+msgstr ""
+
+#: git-send-email.perl:941
+#, 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"
+msgstr ""
+
+#: git-send-email.perl:960
+msgid "To whom should the emails be sent (if anyone)?"
+msgstr ""
+
+#: git-send-email.perl:978
+#, perl-format
+msgid "fatal: alias '%s' expands to itself\n"
+msgstr ""
+
+#: git-send-email.perl:990
+msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
+msgstr ""
+
+#: git-send-email.perl:1048 git-send-email.perl:1056
+#, perl-format
+msgid "error: unable to extract a valid address from: %s\n"
+msgstr ""
+
+#. 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
+msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
+msgstr ""
+
+#: git-send-email.perl:1377
+#, perl-format
+msgid "CA path \"%s\" does not exist"
+msgstr ""
+
+#: git-send-email.perl:1460
+msgid ""
+"    The Cc list above has been expanded by additional\n"
+"    addresses found in the patch commit message. By default\n"
+"    send-email prompts before sending whenever this occurs.\n"
+"    This behavior is controlled by the sendemail.confirm\n"
+"    configuration setting.\n"
+"\n"
+"    For additional information, run 'git send-email --help'.\n"
+"    To retain the current behavior, but squelch this message,\n"
+"    run 'git config --global sendemail.confirm auto'.\n"
+"\n"
+msgstr ""
+
+#. 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
+msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
+msgstr ""
+
+#: git-send-email.perl:1478
+msgid "Send this email reply required"
+msgstr ""
+
+#: git-send-email.perl:1506
+msgid "The required SMTP server is not properly defined."
+msgstr ""
+
+#: git-send-email.perl:1553
+#, perl-format
+msgid "Server does not support STARTTLS! %s"
+msgstr ""
+
+#: git-send-email.perl:1558 git-send-email.perl:1562
+#, perl-format
+msgid "STARTTLS failed! %s"
+msgstr ""
+
+#: git-send-email.perl:1571
+msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
+msgstr ""
+
+#: git-send-email.perl:1589
+#, perl-format
+msgid "Failed to send %s\n"
+msgstr ""
+
+#: git-send-email.perl:1592
+#, perl-format
+msgid "Dry-Sent %s\n"
+msgstr ""
+
+#: git-send-email.perl:1592
+#, perl-format
+msgid "Sent %s\n"
+msgstr ""
+
+#: git-send-email.perl:1594
+msgid "Dry-OK. Log says:\n"
+msgstr ""
+
+#: git-send-email.perl:1594
+msgid "OK. Log says:\n"
+msgstr ""
+
+#: git-send-email.perl:1606
+msgid "Result: "
+msgstr ""
+
+#: git-send-email.perl:1609
+msgid "Result: OK\n"
+msgstr ""
+
+#: git-send-email.perl:1627
+#, perl-format
+msgid "can't open file %s"
+msgstr ""
+
+#: git-send-email.perl:1674 git-send-email.perl:1694
+#, perl-format
+msgid "(mbox) Adding cc: %s from line '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:1680
+#, perl-format
+msgid "(mbox) Adding to: %s from line '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:1737
+#, perl-format
+msgid "(non-mbox) Adding cc: %s from line '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:1772
+#, perl-format
+msgid "(body) Adding cc: %s from line '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:1883
+#, perl-format
+msgid "(%s) Could not execute '%s'"
+msgstr ""
+
+#: git-send-email.perl:1890
+#, perl-format
+msgid "(%s) Adding %s: %s from: '%s'\n"
+msgstr ""
+
+#: git-send-email.perl:1894
+#, perl-format
+msgid "(%s) failed to close pipe to '%s'"
+msgstr ""
+
+#: git-send-email.perl:1924
+msgid "cannot send message as 7bit"
+msgstr ""
+
+#: git-send-email.perl:1932
+msgid "invalid transfer encoding"
+msgstr ""
+
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
+#, perl-format
+msgid "unable to open %s: %s\n"
+msgstr ""
+
+#: git-send-email.perl:1979
+#, perl-format
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+
+#: git-send-email.perl:1997
+#, perl-format
+msgid "Skipping %s with backup suffix '%s'.\n"
+msgstr ""
+
+#. TRANSLATORS: please keep "[y|N]" as is.
+#: git-send-email.perl:2001
+#, perl-format
+msgid "Do you really want to send %s? [y|N]: "
+msgstr ""
+
+#~ msgid "Already up to date. Yeeah!"
+#~ msgstr "Sudah terbaru. Ya!"
+
+#~ msgid ""
+#~ "the rebase.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "dukungan untuk rebase.useBuiltin sudah dihapus!\n"
+#~ "Lihat entri itu di 'git help config' untuk selengkapnya."
diff --git a/po/pl.po b/po/pl.po
index 99517bd..6bb665e 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -53,13 +53,13 @@
 # Nie podoba się?  Bardzo chętnie zobaczę lepsze tłumaczenie.
 #
 # m4sk1n, m4sk1n@vivaldi.net, 2017.
-# Arusekk <arek_koz@o2.pl>, 2020.
+# Arusekk <arek_koz@o2.pl>, 2020, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-23 23:48+0100\n"
+"POT-Creation-Date: 2021-02-26 22:09+0800\n"
+"PO-Revision-Date: 2021-02-27 17:10+0100\n"
 "Last-Translator: Arusekk <arek_koz@o2.pl>\n"
 "Language-Team: Polish\n"
 "Language: pl\n"
@@ -68,16 +68,16 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10"
 " || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 20.08.3\n"
+"X-Generator: Lokalize 20.12.2\n"
 
 #: add-interactive.c:376
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Hę (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3292
+#: sequencer.c:3743 sequencer.c:3898 builtin/rebase.c:1538
+#: builtin/rebase.c:1963
 msgid "could not read index"
 msgstr "nie można odczytać indeksu"
 
@@ -105,7 +105,7 @@
 msgid "could not stage '%s'"
 msgstr "nie można przygotować „%s”"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3486
 msgid "could not write index"
 msgstr "nie można zapisać indeksu"
 
@@ -267,7 +267,7 @@
 
 #: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
 #: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
+#: builtin/fetch.c:150 builtin/merge.c:285 builtin/pull.c:190
 #: builtin/submodule--helper.c:409 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
@@ -847,7 +847,7 @@
 msgid "Exiting because of an unresolved conflict."
 msgstr "Wyjście z powodu nierozwiązanego konfliktu."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:281 builtin/merge.c:1370
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Nie zwieńczono scalania (MERGE_HEAD istnieje)."
 
@@ -1155,7 +1155,8 @@
 msgid "cannot checkout %s"
 msgstr "nie można wybrać %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 pack-revindex.c:213
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "nie można odczytać %s"
@@ -1316,7 +1317,7 @@
 msgid "unable to add cache entry for %s"
 msgstr "nie można dodać %s do pamięci podręcznej"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4374 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "nie można pisać do „%s”"
@@ -1353,7 +1354,7 @@
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "ucinanie nazwy pliku .rej do %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4576 builtin/fetch.c:933 builtin/fetch.c:1334
 #, c-format
 msgid "cannot open %s"
 msgstr "nie można otworzyć %s"
@@ -1410,7 +1411,7 @@
 msgstr[1] "Zastosowano %d wiersze po naprawieniu błędów białych znaków."
 msgstr[2] "Zastosowano %d wierszy po naprawieniu błędów białych znaków."
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4960 builtin/add.c:626 builtin/mv.c:304 builtin/rm.c:406
 msgid "Unable to write new index file"
 msgstr "Nie można zapisać nowego pliku indeksu"
 
@@ -1478,7 +1479,7 @@
 msgid "build a temporary index based on embedded index information"
 msgstr "zbuduj tymczasowy indeks oparty o wbudowane informacje indeksu"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5025 builtin/checkout-index.c:195 builtin/ls-files.c:540
 msgid "paths are separated with NUL character"
 msgstr "ścieżki są rozdzielone znakiem NUL"
 
@@ -1488,7 +1489,7 @@
 
 #: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: builtin/pack-objects.c:3577 builtin/rebase.c:1352
 msgid "action"
 msgstr "działanie"
 
@@ -1516,9 +1517,9 @@
 msgid "allow overlapping hunks"
 msgstr "zezwól, by skrawki na siebie nachodziły"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5045 builtin/add.c:337 builtin/check-ignore.c:22
+#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:757
+#: builtin/log.c:2286 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "więcej komunikatów"
 
@@ -1607,14 +1608,14 @@
 msgid "cannot read %s"
 msgstr "nie można odczytać %s"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: archive.c:345 sequencer.c:459 sequencer.c:1744 sequencer.c:2894
+#: sequencer.c:3335 sequencer.c:3444 builtin/am.c:249 builtin/commit.c:786
+#: builtin/merge.c:1139
 #, c-format
 msgid "could not read '%s'"
 msgstr "nie można odczytać „%s”"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:430 builtin/add.c:189 builtin/add.c:602 builtin/rm.c:315
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "ścieżka „%s” nie pasuje do żadnych plików"
@@ -1656,7 +1657,7 @@
 msgid "archive format"
 msgstr "format archiwum"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:556 builtin/log.c:1764
 msgid "prefix"
 msgstr "prefiks"
 
@@ -1664,11 +1665,11 @@
 msgid "prepend prefix to each pathname in the archive"
 msgstr "dodaj prefiks przed każdą ścieżką w archiwum"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: archive.c:558 archive.c:561 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
+#: builtin/fast-export.c:1213 builtin/grep.c:920 builtin/hash-object.c:105
+#: builtin/ls-files.c:576 builtin/ls-files.c:579 builtin/notes.c:412
 #: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
 msgid "file"
 msgstr "plik"
@@ -1833,12 +1834,12 @@
 msgid "a %s revision is needed"
 msgstr "potrzebna jest rewizja %s"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:287
 #, c-format
 msgid "could not create file '%s'"
 msgstr "nie można utworzyć pliku „%s”"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "nie można odczytać pliku „%s”"
@@ -1856,10 +1857,10 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Nie znaleziono sprawdzalnego zapisu.\n"
-"Może zaczęto ze złymi parametrami ścieżek?\n"
+"Może zaczęto ze złymi argumentami ścieżek?\n"
 
 #: bisect.c:1095
 #, c-format
@@ -1892,11 +1893,11 @@
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "--reverse i --first-parent razem wymagają podanego ostatniego zapisu"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: blame.c:2821 bundle.c:213 ref-filter.c:2202 remote.c:2041 sequencer.c:2146
+#: sequencer.c:4641 submodule.c:856 builtin/commit.c:1045 builtin/log.c:411
+#: builtin/log.c:1016 builtin/log.c:1624 builtin/log.c:2045 builtin/log.c:2335
+#: builtin/merge.c:424 builtin/pack-objects.c:3395 builtin/pack-objects.c:3410
+#: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "nie udało się przygotować przejścia rewizji"
 
@@ -2082,7 +2083,7 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "nierozpoznany nagłówek: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2398 sequencer.c:3184
 #: builtin/commit.c:814
 #, c-format
 msgid "could not open '%s'"
@@ -2128,40 +2129,36 @@
 msgid "pack-objects died"
 msgstr "pack-objects padł"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list padło"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referencja „%s” jest wyłączona przez opcje listy rewizji"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "nieobsługiwana wersja wiązki %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "nie można zapisać wersji wiązki %d z algorytmem %s"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1926 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "nierozpoznany argument: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Odmawiam utworzenia pustej wiązki."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "nie można utworzyć „%s”"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "index-pack padł"
 
@@ -2170,106 +2167,126 @@
 msgid "invalid color value: %.*s"
 msgstr "nieprawidłowa wartość koloru: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:198 midx.c:47
 msgid "invalid hash version"
 msgstr "nieprawidłowa wersja skrótu"
 
-#: commit-graph.c:246
+#: commit-graph.c:219
+msgid "repository contains replace objects; skipping commit-graph"
+msgstr "repozytorium zawiera obiekty zamienne; pomijanie grafu zapisów"
+
+#: commit-graph.c:228
+msgid "repository contains (deprecated) grafts; skipping commit-graph"
+msgstr "repozytorium zawiera (przestarzałe) szczepki; pomijanie grafu zapisów"
+
+#: commit-graph.c:233
+msgid "repository is shallow; skipping commit-graph"
+msgstr "źródłowe repozytorium jest płytkie, pomijanie grafu zapisów"
+
+#: commit-graph.c:264
 msgid "commit-graph file is too small"
 msgstr "plik grafu zapisów jest za mały"
 
-#: commit-graph.c:311
+#: commit-graph.c:329
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "podpis grafu zapisów %X nie zgadza się z podpisem %X"
 
-#: commit-graph.c:318
+#: commit-graph.c:336
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "wersja grafu zapisów %X nie zgadza się z wersją %X"
 
-#: commit-graph.c:325
+#: commit-graph.c:343
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "wersja skrótu grafu zapisów %X nie zgadza się z wersją %X"
 
-#: commit-graph.c:342
+#: commit-graph.c:360
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "plik grafu zapisów jest za mały, żeby przechować %u kawałków"
 
-#: commit-graph.c:361
+#: commit-graph.c:379
 #, c-format
 msgid "commit-graph improper chunk offset %08x%08x"
 msgstr "nieprawidłowe przesunięcie kawałka grafu zapisów %08x%08x"
 
-#: commit-graph.c:433
+#: commit-graph.c:465
 #, c-format
 msgid "commit-graph chunk id %08x appears multiple times"
 msgstr "identyfikator kawałka grafu zapisów %08x pojawia się wiele razy"
 
-#: commit-graph.c:499
+#: commit-graph.c:531
 msgid "commit-graph has no base graphs chunk"
 msgstr "graf zapisów nie ma podstawowego kawałka grafów"
 
-#: commit-graph.c:509
+#: commit-graph.c:541
 msgid "commit-graph chain does not match"
 msgstr "łańcuch grafu zapisów się nie zgadza"
 
-#: commit-graph.c:557
+#: commit-graph.c:589
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "nieprawidłowy łańcuch grafu zapisów: wiersz „%s” nie jest skrótem"
 
-#: commit-graph.c:581
+#: commit-graph.c:613
 msgid "unable to find all commit-graph files"
 msgstr "nie znaleziono wszystkich plików grafu zapisów"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:794 commit-graph.c:831
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "nieprawidłowa pozycja zapisu. Graf zapisów jest prawdopodobnie uszkodzony"
 
-#: commit-graph.c:742
+#: commit-graph.c:815
 #, c-format
 msgid "could not find commit %s"
 msgstr "nie znaleziono zapisu %s"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:848
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "graf zapisów wymaga danych przepełnionych pokoleń, ale ich nie ma"
+
+#: commit-graph.c:1121 builtin/am.c:1292
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "nie można przeanalizować zapisu %s"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1378 builtin/pack-objects.c:2872
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "nie można uzyskać rodzaju obiektu %s"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1409
 msgid "Loading known commits in commit graph"
 msgstr "Ładowanie znanych zapisów w graf zapisów"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1426
 msgid "Expanding reachable commits in commit graph"
 msgstr "Rozwijanie osiągalnych zapisów w grafie zapisów"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1446
 msgid "Clearing commit marks in commit graph"
 msgstr "Czyszczenie znamion zapisów w grafie zapisów"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1465
+msgid "Computing commit graph topological levels"
+msgstr "Obliczanie topologicznych poziomów grafu zapisów"
+
+#: commit-graph.c:1518
 msgid "Computing commit graph generation numbers"
 msgstr "Obliczanie numerów pokoleń grafu zapisów"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1599
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Obliczanie filtrów Blooma zmienionych ścieżek zapisu"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1676
 msgid "Collecting referenced commits"
 msgstr "Zbieranie wspominanych zapisów"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1701
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
@@ -2277,44 +2294,44 @@
 msgstr[1] "Znajdywanie zapisów do grafu zapisów w %d paczkach"
 msgstr[2] "Znajdywanie zapisów do grafu zapisów w %d paczkach"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "błąd przy dodawaniu paczki %s"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "błąd otwierania indeksu dla %s"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1755
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Znajdywanie zapisów do grafu zapisów wśród spakowanych obiektów"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1773
 msgid "Finding extra edges in commit graph"
 msgstr "Znajdywanie dodatkowych krawędzi w grafie zapisów"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1821
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 "nie można zapisać prawidłowej liczby podstawowych identyfikatorów grafu"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1863 midx.c:819
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "nie można utworzyć wiodących katalogów %s"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1876
 msgid "unable to create temporary graph layer"
 msgstr "nie można utworzyć tymczasowej warstwy grafu"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1881
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "nie można dostroić współdzielonych uprawnień „%s”"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1966
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
@@ -2322,86 +2339,86 @@
 msgstr[1] "Wypisywanie grafu zapisów w %d przebiegach"
 msgstr[2] "Wypisywanie grafu zapisów w %d przebiegach"
 
-#: commit-graph.c:1803
+#: commit-graph.c:2011
 msgid "unable to open commit-graph chain file"
 msgstr "nie można otworzyć pliku łańcucha grafu zapisów"
 
-#: commit-graph.c:1819
+#: commit-graph.c:2027
 msgid "failed to rename base commit-graph file"
 msgstr "nie można zmienić nazwy podstawowego pliku grafu zapisów"
 
-#: commit-graph.c:1839
+#: commit-graph.c:2047
 msgid "failed to rename temporary commit-graph file"
 msgstr "nie można zmienić nazwy tymczasowego pliku grafu zapisów"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2180
 msgid "Scanning merged commits"
 msgstr "Skanowanie scalonych zapisów"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2224
 msgid "Merging commit-graph"
 msgstr "Scalanie grafu zapisów"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2331
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr "próba wypisania grafu zapisów, ale „core.commitGraph” jest wyłączone"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2438
 msgid "too many commits to write graph"
 msgstr "za dużo zapisów, by wypisać graf"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2536
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "plik grafu zapisów ma nieprawidłową sumę kontrolną i jest prawdopodobnie "
 "uszkodzony"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2546
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "graf zapisów ma nieprawidłową kolejność OID: %s i wtedy %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2556 commit-graph.c:2571
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "graf zapisów ma nieprawidłową wartość fanout: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2563
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "nie można przetworzyć zapisu %s z grafu zapisów"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2581
 msgid "Verifying commits in commit graph"
 msgstr "Sprawdzanie zapisów w grafie zapisów"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2596
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "nie można przetworzyć zapisu %s z bazy danych obiektów do grafu zapisów"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2603
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "OID korzenia drzewa w zapisie %s w grafie zapisów to %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2613
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "lista rodziców grafu zapisów zapisu %s jest za długa"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2622
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "rodzic grafu zapisów zapisu %s to %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2636
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "lista rodziców grafu zapisów zapisu %s kończy się przedwcześnie"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2641
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2409,7 +2426,7 @@
 "graf zapisów ma numer pokolenia zerowy w zapisie %s, ale niezerowy gdzie "
 "indziej"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2645
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2417,18 +2434,18 @@
 "graf zapisów ma numer pokolenia niezerowy w zapisie %s, ale zerowy gdzie "
 "indziej"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2662
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "pokolenie grafu zapisów zapisu %s to %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "pokolenie grafu zapisów zapisu %s to %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2668
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "data złożenia w zapisie %s w grafie zapisów to %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
+#: commit.c:52 sequencer.c:2887 builtin/am.c:359 builtin/am.c:403
 #: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
 #, c-format
 msgid "could not parse %s"
@@ -2459,27 +2476,27 @@
 "Wyłącz ten komunikat uruchamiając\n"
 "„git config advice.graftFileDeprecated false”"
 
-#: commit.c:1172
+#: commit.c:1223
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "Zapis %s ma niezaufany podpis GPG rzekomo od %s."
 
-#: commit.c:1176
+#: commit.c:1227
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Zapis %s ma zły podpis GPG rzekomo od %s."
 
-#: commit.c:1179
+#: commit.c:1230
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Zapis %s nie ma podpisu GPG."
 
-#: commit.c:1182
+#: commit.c:1233
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Zapis %s ma dobry podpis GPG od %s\n"
 
-#: commit.c:1436
+#: commit.c:1487
 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"
@@ -2494,7 +2511,7 @@
 msgid "memory exhausted"
 msgstr "pamięć wyczerpana"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2509,292 +2526,336 @@
 "\t%s\n"
 "Może to być spowodowane cyklicznymi załączeniami."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "nie można rozwinąć ścieżki załączeń (include) „%s”"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "względne załączenia konfiguracji muszą pochodzić z plików"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "względne warunkowe załączenia konfiguracji muszą pochodzić z plików"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "nieprawidłowy format ustawień: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "brak nazwy zmiennej środowiska dla ustawienia „%.*s”"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "brak zmiennej środowiska „%s” dla ustawienia „%.*s”"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "klucz nie zawiera rozdziału: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "klucz nie zawiera nazwy zmiennej: %s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2588
 #, c-format
 msgid "invalid key: %s"
 msgstr "nieprawidłowy klucz: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "błędny klucz (nowy wiersz): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "pusty klucz ustawień"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "fałszywy parametr konfiguracji: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "fałszywy format %s"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "fałszywy licznik w %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "za dużo wpisów w %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "brak klucza ustawień %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "brakująca wartość ustawienia %s"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "zły wiersz konfiguracji %d w blobie %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "zły wiersz konfiguracji %d w pliku %s"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "zły wiersz konfiguracji %d na standardowym wejściu"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "zły wiersz konfiguracji %d w blobie pod-modułu %s"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "zły wiersz konfiguracji %d w wierszu poleceń %s"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "zły wiersz konfiguracji %d w %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "poza zakresem"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "nieprawidłowa jednostka"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "zła liczbowa wartość konfiguracji „%s” dla „%s”: %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "zła liczbowa wartość konfiguracji „%s” dla „%s” w blobie %s: %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "zła liczbowa wartość konfiguracji „%s” dla „%s” w pliku %s: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "zła liczbowa wartość konfiguracji „%s” dla „%s” na standardowym wejściu: %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "zła liczbowa wartość konfiguracji „%s” dla „%s” w blobie pod-modułu %s: %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "zła liczbowa wartość konfiguracji „%s” dla „%s” w wierszu poleceń %s: %s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "zła liczbowa wartość konfiguracji „%s” dla „%s” w %s: %s"
 
-#: config.c:1123
+#: config.c:1194
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "zła logiczna wartość konfiguracji „%s” w „%s”"
+
+#: config.c:1289
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "nie można rozwinąć katalogu użytkownika w: „%s”"
 
-#: config.c:1132
+#: config.c:1298
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "„%s” do „%s” nie jest prawidłowym znacznikiem czasu"
 
-#: config.c:1223
+#: config.c:1391
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "długość skrótu poza zakresem: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1405 config.c:1416
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "zły stopień kompresji zlib %d"
 
-#: config.c:1340
+#: config.c:1508
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar powinno być tylko jednym znakiem"
 
-#: config.c:1373
+#: config.c:1541
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "nieprawidłowy tryb utworzenia obiektu: %s"
 
-#: config.c:1445
+#: config.c:1613
 #, c-format
 msgid "malformed value for %s"
 msgstr "nieprawidłowa wartość %s"
 
-#: config.c:1471
+#: config.c:1639
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "nieprawidłowa wartość %s: %s"
 
-#: config.c:1472
+#: config.c:1640
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "musi być jednym z nothing, matching, simple, upstream lub current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1701 builtin/pack-objects.c:3666
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "zły stopień kompresji paczki %d"
 
-#: config.c:1655
+#: config.c:1823
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "nie można wczytać konfiguracyjnego obiektu blobu „%s”"
 
-#: config.c:1658
+#: config.c:1826
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referencja „%s” nie wskazuje blobu"
 
-#: config.c:1675
+#: config.c:1843
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "nie można rozwiązać blobu konfiguracji „%s”"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "nie można przetworzyć %s"
 
-#: config.c:1759
+#: config.c:1927
 msgid "unable to parse command-line config"
 msgstr "nie można przeanalizować konfiguracji wiersza poleceń"
 
-#: config.c:2122
+#: config.c:2290
 msgid "unknown error occurred while reading the configuration files"
 msgstr "wystąpił nieznany błąd podczas odczytywania plików konfiguracyjnych"
 
-#: config.c:2296
+#: config.c:2464
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Nieprawidłowy %s: „%s”"
 
-#: config.c:2341
+#: config.c:2509
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "wartość splitIndex.maxPercentChange „%d” powinna być pomiędzy 0 a 100"
 
-#: config.c:2387
+#: config.c:2555
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "nie można przetworzyć „%s” z konfiguracji wiersza poleceń"
 
-#: config.c:2389
+#: config.c:2557
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "zła zmienna konfiguracji „%s” w pliku „%s” w wierszu %d"
 
-#: config.c:2473
+#: config.c:2641
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nieprawidłowa nazwa rozdziału „%s”"
 
-#: config.c:2505
+#: config.c:2673
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s ma wiele wartości"
 
-#: config.c:2534
+#: config.c:2702
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "nie można zapisać nowego pliku konfiguracyjnego %s"
 
-#: config.c:2786 config.c:3112
+#: config.c:2954 config.c:3280
 #, c-format
 msgid "could not lock config file %s"
 msgstr "nie można zablokować pliku konfiguracyjnego %s"
 
-#: config.c:2797
+#: config.c:2965
 #, c-format
 msgid "opening %s"
 msgstr "otwieranie %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3002 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "nieprawidłowy wzorzec: %s"
 
-#: config.c:2859
+#: config.c:3027
 #, c-format
 msgid "invalid config file %s"
 msgstr "nieprawidłowy plik konfiguracyjny %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3040 config.c:3293
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat na %s nie powiódł się"
 
-#: config.c:2883
+#: config.c:3051
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "nie można wykonać mmap „%s”"
 
-#: config.c:2892 config.c:3130
+#: config.c:3060 config.c:3298
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod na %s nie powiodło się"
 
-#: config.c:2977 config.c:3227
+#: config.c:3145 config.c:3395
 #, c-format
 msgid "could not write config file %s"
 msgstr "nie można zapisać pliku konfiguracji %s"
 
-#: config.c:3011
+#: config.c:3179
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "nie można ustawić „%s” na „%s”"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3181 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "nie można usunąć ustawienia „%s”"
 
-#: config.c:3103
+#: config.c:3271
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nieprawidłowa nazwa rozdziału: %s"
 
-#: config.c:3270
+#: config.c:3438
 #, c-format
 msgid "missing value for '%s'"
 msgstr "brakująca wartość „%s”"
@@ -2856,45 +2917,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "błąd protokołu: nieoczekiwane „%s”"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "serwer podał nieznany format obiektu „%s”"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "nieprawidłowa odpowiedź ls-refs: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "oczekiwano wypróżnienia po wypisaniu referencji"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "oczekiwano pakietu końca odpowiedzi po wypisaniu referencji"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "protokół „%s” jest niewspierany"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "nie można ustawić w gnieździe SO_KEEPALIVE"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Odnajdywanie %s ... "
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "nie można odnaleźć %s (port %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2903,7 +2964,7 @@
 "gotowe.\n"
 "Łączenie z %s (port %s) ... "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2913,62 +2974,67 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "gotowe."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "nie odnaleziono %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "nieznany port %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "zablokowano dziwną nazwę hosta „%s”"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "zablokowano dziwny port „%s”"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "nie można uruchomić pośrednika %s"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 "nie podano ścieżki; zobacz składnię prawidłowych adresów w „git help pull”"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr ""
+"nie można użyć znaku nowego wiersza w adresach git:// i ścieżkach repozytoriów"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "wariant SSH „simple” nie wspiera -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "wariant SSH „simple” nie wspiera -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "wariant SSH „simple” nie wspiera ustawiania portu"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "zablokowano dziwną ścieżkę „%s”"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "nie można wykonać fork"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:191 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Sprawdzanie spójności"
 
@@ -3241,6 +3307,11 @@
 msgid "Marked %d islands, done.\n"
 msgstr "Oznaczono %d wysp, gotowe.\n"
 
+#: diff-merges.c:70
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "nierozpoznana wartość --diff-merges: %s"
+
 #: diff-lib.c:534
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base nie działa z zakresami"
@@ -3328,30 +3399,30 @@
 msgid "external diff died, stopping at %s"
 msgstr "zewnętrzny diff padł, zatrzymano na %s"
 
-#: diff.c:4625
+#: diff.c:4628
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check i -s się wykluczają"
 
-#: diff.c:4628
+#: diff.c:4631
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S i --find-object się wykluczają"
 
-#: diff.c:4707
+#: diff.c:4710
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow wymaga dokładnie jednej ścieżki"
 
-#: diff.c:4755
+#: diff.c:4758
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "nieprawidłowa wartość --stat: %s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: diff.c:4763 diff.c:4768 diff.c:4773 diff.c:4778 diff.c:5306
 #: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s oczekuje wartości liczbowej"
 
-#: diff.c:4792
+#: diff.c:4795
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3360,197 +3431,197 @@
 "Nie można przetworzyć parametru opcji --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4880
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "nieznana klasa zmian „%c” w --diff-filter=%s"
 
-#: diff.c:4901
+#: diff.c:4904
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "nieznana wartość po ws-error-highlight=%.*s"
 
-#: diff.c:4915
+#: diff.c:4918
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "nie można rozwiązać „%s”"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4968 diff.c:4974
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s oczekuje postaci <n>/<m>"
 
-#: diff.c:4983
+#: diff.c:4986
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s oczekuje znaku, otrzymano „%s”"
 
-#: diff.c:5004
+#: diff.c:5007
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "zły argument --color-moved: %s"
 
-#: diff.c:5023
+#: diff.c:5026
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "nieprawidłowy tryb „%s” w --color-moved-ws"
 
-#: diff.c:5063
+#: diff.c:5066
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 "opcja diff-algorithm przyjmuje „myers”, „minimal”, „patience” i „histogram”"
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5102 diff.c:5122
 #, c-format
 msgid "invalid argument to %s"
 msgstr "nieprawidłowy argument do %s"
 
-#: diff.c:5223
+#: diff.c:5226
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "w -I podano nieprawidłowe wyrażenie regularne: „%s”"
 
-#: diff.c:5272
+#: diff.c:5275
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "nie można przetworzyć parametru opcji --submodule: „%s”"
 
-#: diff.c:5328
+#: diff.c:5331
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "zły argument --word-diff: %s"
 
-#: diff.c:5351
+#: diff.c:5367
 msgid "Diff output format options"
 msgstr "Opcje formatu wyjściowego różnic"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5369 diff.c:5375
 msgid "generate patch"
 msgstr "wygeneruj łatkę"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5372 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "nie wypisuj różnic"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5377 diff.c:5491 diff.c:5498
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5378 diff.c:5381
 msgid "generate diffs with <n> lines context"
 msgstr "wygeneruj różnice z <n> wierszami kontekstu"
 
-#: diff.c:5367
+#: diff.c:5383
 msgid "generate the diff in raw format"
 msgstr "wygeneruj różnice w surowym formacie"
 
-#: diff.c:5370
+#: diff.c:5386
 msgid "synonym for '-p --raw'"
 msgstr "synonim do „-p --raw”"
 
-#: diff.c:5374
+#: diff.c:5390
 msgid "synonym for '-p --stat'"
 msgstr "synonim do „-p --stat”"
 
-#: diff.c:5378
+#: diff.c:5394
 msgid "machine friendly --stat"
 msgstr "--stat czytelne dla maszyny"
 
-#: diff.c:5381
+#: diff.c:5397
 msgid "output only the last line of --stat"
 msgstr "wypisz tylko ostatni wiersz --stat"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5399 diff.c:5407
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5384
+#: diff.c:5400
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "wypisz rozkład względnej ilości zmian w każdym podkatalogu"
 
-#: diff.c:5388
+#: diff.c:5404
 msgid "synonym for --dirstat=cumulative"
 msgstr "zamiennik na --dirstat=cumulative"
 
-#: diff.c:5392
+#: diff.c:5408
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonim do --dirstat=files,param1,param2..."
 
-#: diff.c:5396
+#: diff.c:5412
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "ostrzegaj, jeśli zmiany wprowadzają znaczniki konfliktów lub błędy białych "
 "znaków"
 
-#: diff.c:5399
+#: diff.c:5415
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "zwarte podsumowanie takie jak utworzenia czy zmiany nazw i trybów"
 
-#: diff.c:5402
+#: diff.c:5418
 msgid "show only names of changed files"
 msgstr "pokazuj tylko nazwy zmienionych plików"
 
-#: diff.c:5405
+#: diff.c:5421
 msgid "show only names and status of changed files"
 msgstr "pokazuj tylko nazwy i stan zmienionych plików"
 
-#: diff.c:5407
+#: diff.c:5423
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<szerokość>[,<szerokość-nazwy>[,<liczba>]]"
 
-#: diff.c:5408
+#: diff.c:5424
 msgid "generate diffstat"
 msgstr "wygeneruj statystyki różnic"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5426 diff.c:5429 diff.c:5432
 msgid "<width>"
 msgstr "<szerokość>"
 
-#: diff.c:5411
+#: diff.c:5427
 msgid "generate diffstat with a given width"
 msgstr "wygeneruj statystyki różnic o podanej szerokości"
 
-#: diff.c:5414
+#: diff.c:5430
 msgid "generate diffstat with a given name width"
 msgstr "wygeneruj statystyki różnic o podanej szerokości nazw"
 
-#: diff.c:5417
+#: diff.c:5433
 msgid "generate diffstat with a given graph width"
 msgstr "wygeneruj statystyki różnic o podanej szerokości grafu"
 
-#: diff.c:5419
+#: diff.c:5435
 msgid "<count>"
 msgstr "<liczba>"
 
-#: diff.c:5420
+#: diff.c:5436
 msgid "generate diffstat with limited lines"
 msgstr "wygeneruj statystyki różnic o ograniczonych wierszach"
 
-#: diff.c:5423
+#: diff.c:5439
 msgid "generate compact summary in diffstat"
 msgstr "wygeneruj zwięzłe podsumowanie w statystykach różnic"
 
-#: diff.c:5426
+#: diff.c:5442
 msgid "output a binary diff that can be applied"
 msgstr "wypisz binarne różnice, które mogą być zastosowane"
 
-#: diff.c:5429
+#: diff.c:5445
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "pokaż pełne nazwy obiektów wstępnego i końcowego obrazu w wierszach „index”"
 
-#: diff.c:5431
+#: diff.c:5447
 msgid "show colored diff"
 msgstr "pokaż kolorowe różnice"
 
-#: diff.c:5432
+#: diff.c:5448
 msgid "<kind>"
 msgstr "<rodzaj>"
 
-#: diff.c:5433
+#: diff.c:5449
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3558,94 +3629,94 @@
 "podświetl błędy białych znaków w rodzaju wierszy różnic: „context”, „old” "
 "lub „new”"
 
-#: diff.c:5436
+#: diff.c:5452
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 "nie męcz ścieżek i użyj znaków NUL do rozdzielenia pól w --raw lub --numstat"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5455 diff.c:5458 diff.c:5461 diff.c:5570
 msgid "<prefix>"
 msgstr "<prefiks>"
 
-#: diff.c:5440
+#: diff.c:5456
 msgid "show the given source prefix instead of \"a/\""
 msgstr "pokaż podany prefiks źródła zamiast „a/”"
 
-#: diff.c:5443
+#: diff.c:5459
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "pokaż podany prefiks celu zamiast „b/”"
 
-#: diff.c:5446
+#: diff.c:5462
 msgid "prepend an additional prefix to every line of output"
 msgstr "dodatkowy prefiks do dodania przed każdym wierszem wyjścia"
 
-#: diff.c:5449
+#: diff.c:5465
 msgid "do not show any source or destination prefix"
 msgstr "nie pokazuj żadnego prefiksu źródła ani celu"
 
-#: diff.c:5452
+#: diff.c:5468
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "pokaż kontekst między skrawkami różnic do podanej liczby wierszy"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5472 diff.c:5477 diff.c:5482
 msgid "<char>"
 msgstr "<znak>"
 
-#: diff.c:5457
+#: diff.c:5473
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "podaj znak wskazujący nowy wiersz zamiast „+”"
 
-#: diff.c:5462
+#: diff.c:5478
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "podaj znak wskazujący stary wiersz zamiast „-”"
 
-#: diff.c:5467
+#: diff.c:5483
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "podaj znak wskazujący kontekst zamiast odstępu „ ”"
 
-#: diff.c:5470
+#: diff.c:5486
 msgid "Diff rename options"
 msgstr "Opcje zmiany nazw różnic"
 
-#: diff.c:5471
+#: diff.c:5487
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5488
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "rozbij zmiany zupełnego przepisania na pary usunięć i utworzeń"
 
-#: diff.c:5476
+#: diff.c:5492
 msgid "detect renames"
 msgstr "wykrywaj zmiany nazw"
 
-#: diff.c:5480
+#: diff.c:5496
 msgid "omit the preimage for deletes"
 msgstr "omiń wstępny obraz przy usunięciach"
 
-#: diff.c:5483
+#: diff.c:5499
 msgid "detect copies"
 msgstr "wykrywaj kopie"
 
-#: diff.c:5487
+#: diff.c:5503
 msgid "use unmodified files as source to find copies"
 msgstr "użyj niezmodyfikowanych plików jako źródła do znalezienia kopii"
 
-#: diff.c:5489
+#: diff.c:5505
 msgid "disable rename detection"
 msgstr "wyłącz wykrywanie zmian nazw"
 
-#: diff.c:5492
+#: diff.c:5508
 msgid "use empty blobs as rename source"
 msgstr "użyj pustych blobów jako źródła zmiany nazwy"
 
-#: diff.c:5494
+#: diff.c:5510
 msgid "continue listing the history of a file beyond renames"
 msgstr "kontynuuj wypisywanie historii pliku poza zmianami nazw"
 
-#: diff.c:5497
+#: diff.c:5513
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3653,165 +3724,165 @@
 "powstrzymaj wykrywanie zmian nazw i kopii, jeśli liczba zmian nazw / kopii "
 "przekracza podaną granicę"
 
-#: diff.c:5499
+#: diff.c:5515
 msgid "Diff algorithm options"
 msgstr "Opcje algorytmu różnic"
 
-#: diff.c:5501
+#: diff.c:5517
 msgid "produce the smallest possible diff"
 msgstr "wyprodukuj najmniejsze możliwe różnice"
 
-#: diff.c:5504
+#: diff.c:5520
 msgid "ignore whitespace when comparing lines"
 msgstr "ignoruj zmiany w białych znakach przy porównywaniu plików"
 
-#: diff.c:5507
+#: diff.c:5523
 msgid "ignore changes in amount of whitespace"
 msgstr "ignoruj zmiany w liczbie białych znaków"
 
-#: diff.c:5510
+#: diff.c:5526
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignoruj zmiany w białych znakach na końcu wiersza"
 
-#: diff.c:5513
+#: diff.c:5529
 msgid "ignore carrier-return at the end of line"
 msgstr "ignoruj powrót karetki (CR) na końcu wiersza"
 
-#: diff.c:5516
+#: diff.c:5532
 msgid "ignore changes whose lines are all blank"
 msgstr "ignoruj zmiany, których wszystkie wiersze są puste"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5534 diff.c:5556 diff.c:5559 diff.c:5604
 msgid "<regex>"
 msgstr "<wyr-reg>"
 
-#: diff.c:5519
+#: diff.c:5535
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignoruj zmiany, których wszystkie wiersze pasują do <wyr-reg>"
 
-#: diff.c:5522
+#: diff.c:5538
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "heurystyka do przesunięcia granic skrawków różnic, aby ułatwić czytanie"
 
-#: diff.c:5525
+#: diff.c:5541
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "wygeneruj różnice używając algorytmu „cierpliwych różnic”"
 
-#: diff.c:5529
+#: diff.c:5545
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "wygeneruj różnice używając algorytmu „histogramu różnic”"
 
-#: diff.c:5531
+#: diff.c:5547
 msgid "<algorithm>"
 msgstr "<algorytm>"
 
-#: diff.c:5532
+#: diff.c:5548
 msgid "choose a diff algorithm"
 msgstr "wybierz algorytm różnic"
 
-#: diff.c:5534
+#: diff.c:5550
 msgid "<text>"
 msgstr "<tekst>"
 
-#: diff.c:5535
+#: diff.c:5551
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "wygeneruj różnice używając algorytmu „zakotwiczonych różnic”"
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5553 diff.c:5562 diff.c:5565
 msgid "<mode>"
 msgstr "<tryb>"
 
-#: diff.c:5538
+#: diff.c:5554
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "pokaż różnice słów, używając <trybu> do rozdzielenia zmienionych słów"
 
-#: diff.c:5541
+#: diff.c:5557
 msgid "use <regex> to decide what a word is"
 msgstr "użyj <wyr-reg>, aby zdecydować, czym jest słowo"
 
-#: diff.c:5544
+#: diff.c:5560
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "równoważne --word-diff=color --word-diff-regex=<wyr-reg>"
 
-#: diff.c:5547
+#: diff.c:5563
 msgid "moved lines of code are colored differently"
 msgstr "przeniesione wiersze kodu są kolorowane inaczej"
 
-#: diff.c:5550
+#: diff.c:5566
 msgid "how white spaces are ignored in --color-moved"
 msgstr "jak są ignorowane białe znaki w --color-moved"
 
-#: diff.c:5553
+#: diff.c:5569
 msgid "Other diff options"
 msgstr "Inne opcje różnic"
 
-#: diff.c:5555
+#: diff.c:5571
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "kiedy uruchomione z podkatalogu, pomiń zmiany poza nim i pokaż względne "
 "ścieżki"
 
-#: diff.c:5559
+#: diff.c:5575
 msgid "treat all files as text"
 msgstr "traktuj wszystkie pliki jako tekstowe"
 
-#: diff.c:5561
+#: diff.c:5577
 msgid "swap two inputs, reverse the diff"
 msgstr "zamień dwa wejścia, odwróć różnice"
 
-#: diff.c:5563
+#: diff.c:5579
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "wyjdź z 1 jeśli nie ma różnic, 0 w przeciwnym wypadku"
 
-#: diff.c:5565
+#: diff.c:5581
 msgid "disable all output of the program"
 msgstr "wyłącz całe wyjście programu"
 
-#: diff.c:5567
+#: diff.c:5583
 msgid "allow an external diff helper to be executed"
 msgstr "pozwól wykonać zewnętrzny pomocnik różnic"
 
-#: diff.c:5569
+#: diff.c:5585
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "wykonaj zewnętrzne filtry konwersji tekstu przy porównywaniu plików binarnych"
 
-#: diff.c:5571
+#: diff.c:5587
 msgid "<when>"
 msgstr "<kiedy>"
 
-#: diff.c:5572
+#: diff.c:5588
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignoruj zmiany w pod-modułach przy generowaniu różnic"
 
-#: diff.c:5575
+#: diff.c:5591
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5576
+#: diff.c:5592
 msgid "specify how differences in submodules are shown"
 msgstr "podaj, jak będą pokazywane różnice w pod-modułach"
 
-#: diff.c:5580
+#: diff.c:5596
 msgid "hide 'git add -N' entries from the index"
 msgstr "ukryj elementy „git add -N” z indeksu"
 
-#: diff.c:5583
+#: diff.c:5599
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "traktuj elementy „git add -N” jako prawdziwe w indeksie"
 
-#: diff.c:5585
+#: diff.c:5601
 msgid "<string>"
 msgstr "<łańcuch>"
 
-#: diff.c:5586
+#: diff.c:5602
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "szukaj różnic, które zmieniają liczbę wystąpień podanego łańcucha"
 
-#: diff.c:5589
+#: diff.c:5605
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3819,55 +3890,67 @@
 "szukaj różnic, które zmieniają liczbę wystąpień podanego wyrażenia "
 "regularnego"
 
-#: diff.c:5592
+#: diff.c:5608
 msgid "show all changes in the changeset with -S or -G"
 msgstr "pokaż wszystkie zmiany w zestawie z -S lub -G"
 
-#: diff.c:5595
+#: diff.c:5611
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "traktuj <łańcuch> w -S jako rozszerzone wyrażenie regularne POSIX"
 
-#: diff.c:5598
+#: diff.c:5614
 msgid "control the order in which files appear in the output"
 msgstr "ustaw kolejność, w jakiej pliki pojawią się na wyjściu"
 
-#: diff.c:5599
+#: diff.c:5615 diff.c:5618
+msgid "<path>"
+msgstr "<ścieżka>"
+
+#: diff.c:5616
+msgid "show the change in the specified path first"
+msgstr "pokaż najpierw zmianę w podanej ścieżce"
+
+#: diff.c:5619
+msgid "skip the output to the specified path"
+msgstr "pomiń wyjście do podanej ścieżki"
+
+#: diff.c:5621
 msgid "<object-id>"
 msgstr "<id-obiektu>"
 
-#: diff.c:5600
+#: diff.c:5622
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "szukaj różnic, które zmieniają liczbę wystąpień podanego obiektu"
 
-#: diff.c:5602
+#: diff.c:5624
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5625
 msgid "select files by diff type"
 msgstr "wybierz pliki według rodzaju różnic"
 
-#: diff.c:5605
+#: diff.c:5627
 msgid "<file>"
 msgstr "<plik>"
 
-#: diff.c:5606
+#: diff.c:5628
 msgid "Output to a specific file"
 msgstr "Wyjście do podanego pliku"
 
-#: diff.c:6263
+#: diff.c:6285
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "pominięto wykrywanie niedokładnych zmian nazw z powodu zbyt wielu plików."
 
-#: diff.c:6266
+#: diff.c:6288
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "znaleziono kopie tylko ze zmienionych ścieżek z powodu zbyt wielu plików."
 
-#: diff.c:6269
+#: diff.c:6291
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3879,10 +3962,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "nie można odczytać pliku kolejności „%s”"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:555
 msgid "Performing inexact rename detection"
 msgstr "Wykrywanie niedokładnych zmian nazw"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "W różnicy nie ma ścieżki „%s”"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3926,17 +4014,17 @@
 msgid "untracked cache is disabled on this system or location"
 msgstr "pamięć o nieśledzonych jest wyłączona w tym systemie lub położeniu"
 
-#: dir.c:3520
+#: dir.c:3537
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "uszkodzony plik indeksu w repozytorium %s"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3582 dir.c:3587
 #, c-format
 msgid "could not create directories for %s"
 msgstr "nie można utworzyć katalogów dla %s"
 
-#: dir.c:3599
+#: dir.c:3616
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "nie można zmigrować katalogu gita z „%s” do „%s”"
@@ -3955,12 +4043,12 @@
 msgid "could not stat file '%s'"
 msgstr "nie można wykonać stat na pliku „%s”"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "zła ścieżka przestrzeni nazw gita „%s”"
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "nie można ustawić GIT_DIR na „%s”"
@@ -3995,32 +4083,32 @@
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc wymaga multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:378 fetch-pack.c:1400
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "nieprawidłowy wiersz shallow: %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:384 fetch-pack.c:1406
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "nieprawidłowy wiersz unshallow: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:386 fetch-pack.c:1408
 #, c-format
 msgid "object not found: %s"
 msgstr "nie znaleziono obiektu: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:389 fetch-pack.c:1411
 #, c-format
 msgid "error in object: %s"
 msgstr "błąd w obiekcie: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:391 fetch-pack.c:1413
 #, c-format
 msgid "no shallow found: %s"
 msgstr "nie znaleziono shallow: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:394 fetch-pack.c:1417
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "oczekiwano shallow/unshallow, otrzymano %s"
@@ -4058,171 +4146,171 @@
 msgid "already have %s (%s)"
 msgstr "już mam %s (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:821
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: nie można uruchomić rozdzielania pasma bocznego"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:829
 msgid "protocol error: bad pack header"
 msgstr "błąd protokołu: zły nagłówek paczki"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:913
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: nie można uruchomić %s"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:931
 #, c-format
 msgid "%s failed"
 msgstr "%s nie powiodło się"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:933
 msgid "error in sideband demultiplexer"
 msgstr "błąd rozdzielania pasma bocznego"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:976
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Wersja serwera to %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: fetch-pack.c:984 fetch-pack.c:990 fetch-pack.c:993 fetch-pack.c:999
+#: fetch-pack.c:1003 fetch-pack.c:1007 fetch-pack.c:1011 fetch-pack.c:1015
+#: fetch-pack.c:1019 fetch-pack.c:1023 fetch-pack.c:1027 fetch-pack.c:1031
+#: fetch-pack.c:1037 fetch-pack.c:1043 fetch-pack.c:1048 fetch-pack.c:1053
 #, c-format
 msgid "Server supports %s"
 msgstr "Serwer wspiera %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:986
 msgid "Server does not support shallow clients"
 msgstr "Serwer nie wspiera płytkich klientów"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1046
 msgid "Server does not support --shallow-since"
 msgstr "Serwer nie wspiera --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1051
 msgid "Server does not support --shallow-exclude"
 msgstr "Serwer nie wspiera --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1055
 msgid "Server does not support --deepen"
 msgstr "Serwer nie wspiera --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1057
 msgid "Server does not support this repository's object format"
 msgstr "Serwer nie wspiera formatu obiektów z tego repozytorium"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1070
 msgid "no common commits"
 msgstr "brak wspólnych zapisów"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1082 fetch-pack.c:1622
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: pobieranie nie powiodło się."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1208
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "niezgodne algorytmy: klient %s; serwer %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1212
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "serwer nie wspiera algorytmu „%s”"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1232
 msgid "Server does not support shallow requests"
 msgstr "Serwer nie wspiera płytkich żądań"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1239
 msgid "Server supports filter"
 msgstr "Serwer wspiera filtrowanie"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1278
 msgid "unable to write request to remote"
 msgstr "nie można pisać żądania do zdalnej maszyny"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1296
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "błąd odczytu nagłówka rozdziału „%s”"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1302
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "oczekiwano „%s”, odebrano „%s”"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1363
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "nieoczekiwany wiersz potwierdzenia: „%s”"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1368
 #, c-format
 msgid "error processing acks: %d"
 msgstr "błąd przetwarzania potwierdzeń: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1378
 msgid "expected packfile to be sent after 'ready'"
 msgstr "oczekiwano pliku paczki wysłanego po „ready”"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1380
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "nie oczekiwano innych rozdziałów wysłanych po braku „ready”"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1422
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "błąd przetwarzania płytkich informacji: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1469
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "oczekiwano wanted-ref, otrzymano %s"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1474
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "nieoczekiwana wanted-ref: „%s”"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1479
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "błąd przetwarzania chcianych referencji: %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1509
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: oczekiwano pakietu końca odpowiedzi"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1891
 msgid "no matching remote head"
 msgstr "brak pasującego zdalnego czoła"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1914 builtin/clone.c:693
 msgid "remote did not send all necessary objects"
 msgstr "zdalna maszyna nie przysłała wszystkich potrzebnych obiektów"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:1941
 #, c-format
 msgid "no such remote ref %s"
 msgstr "nie ma takiej zdalnej referencji %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:1944
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Serwer nie pozwala na żądanie o nieogłoszony obiekt %s"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "nie można utworzyć pliku tymczasowego"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "nie można zapisać oddzielonego podpisu do „%s”"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg nie może podpisać danych"
 
@@ -4231,7 +4319,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignoruj nieprawidłowy kolor „%.*s” w log.graphColors"
 
-#: grep.c:640
+#: grep.c:543
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4239,18 +4327,18 @@
 "podany wzorzec zawiera znak NUL (przez -f <plik>). To jest wspierane tylko z "
 "-P pod PCRE v2"
 
-#: grep.c:2100
+#: grep.c:1906
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "„%s”: nie można przeczytać %s"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
+#: grep.c:1923 setup.c:176 builtin/clone.c:412 builtin/diff.c:90
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "nie można wykonać stat na „%s”'"
 
-#: grep.c:2128
+#: grep.c:1934
 #, c-format
 msgid "'%s': short read"
 msgstr "„%s”: przeczytano mniej niż powinno być"
@@ -4320,7 +4408,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "Oto częste polecenia Gita używane w różnych sytuacjach:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "nieobsługiwany rodzaj spisu poleceń „%s”"
@@ -4564,11 +4652,253 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "Nie można utworzyć „%s.lock”: %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "nieprawidłowa wartość „%s” lsrefs.unborn"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "oczekiwano wypróżnienia po argumentach ls-refs"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: merge-ort.c:855 merge-recursive.c:1191
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Nie można scalić pod-modułu %s (nie wybrano)"
+
+#: merge-ort.c:864 merge-recursive.c:1198
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Nie można scalić pod-modułu %s (brak zapisów)"
+
+#: merge-ort.c:873 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr "Nie można scalić pod-modułu %s (zapisy nie śledzą podstawy scalania)"
+
+#: merge-ort.c:883 merge-ort.c:890
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Uwaga: Przewinięcie pod-modułu %s do %s"
+
+#: merge-ort.c:911
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Nie można scalić pod-modułu %s"
+
+#: merge-ort.c:918
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Nie można scalić pod-modułu %s, ale istnieje możliwe rozwiązanie:\n"
+"%s\n"
+
+#: merge-ort.c:922 merge-recursive.c:1259
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Jeśli tak ma być, po prostu dodaj go do indeksu, na przykład\n"
+"przez:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"które przyjmie tylko tę sugestię.\n"
+
+#: merge-ort.c:935
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Nie można scalić pod-modułu %s, ale istnieją możliwe scalenia:\n"
+"%s"
+
+#: merge-ort.c:1094 merge-recursive.c:1341
+msgid "Failed to execute internal merge"
+msgstr "Nie można wykonać wewnętrznego scalenia"
+
+#: merge-ort.c:1099 merge-recursive.c:1346
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "Nie można dodać %s do bazy danych"
+
+#: merge-ort.c:1106 merge-recursive.c:1378
+#, c-format
+msgid "Auto-merging %s"
+msgstr "Auto-scalanie %s"
+
+#: merge-ort.c:1245 merge-recursive.c:2100
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"KONFLIKT (domyślna zmiana nazwy katalogu): Istniejący plik/katalog %s "
+"zawadza domyślnej zmianie nazwy wstawiając tam następujące ścieżki: %s."
+
+#: merge-ort.c:1255 merge-recursive.c:2110
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"KONFLIKT (domyślna zmiana nazwy katalogu): Nie można dopasować więcej niż "
+"jednej ścieżki do %s; domyślna zmiana nazwy próbowała wstawić tam "
+"następujące ścieżki: %s"
+
+#: merge-ort.c:1438
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"KONFLIKT (podział zmiany nazwy katalogu): Nie ma pewności, jak zmienić nazwę "
+"%s; jego nazwa została zmieniona na wiele innych katalogów, a "
+"żaden z celów nie dostał większości plików."
+
+#: merge-ort.c:1604 merge-recursive.c:2447
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"Ostrzeżenie: unikam zastosowania zmiany nazwy %s -> %s na %s, bo %s sam "
+"zmienił nazwę."
+
+#: merge-ort.c:1748 merge-recursive.c:3215
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Zaktualizowano ścieżkę: %s dodano w %s w katalogu, którego nazwa została "
+"zmieniona w %s; przenoszenie go do %s."
+
+#: merge-ort.c:1755 merge-recursive.c:3222
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Zaktualizowano ścieżkę: zmieniono nazwę %s na %s w %s w katalogu, którego "
+"nazwa została zmieniona w %s; przenoszenie go do %s."
+
+#: merge-ort.c:1768 merge-recursive.c:3218
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"KONFLIKT (położenie pliku): %s dodano w %s w katalogu, którego nazwa została "
+"zmieniona w %s, co sugeruje, że być może powinien trafić do %s."
+
+#: merge-ort.c:1776 merge-recursive.c:3225
+#, 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 ""
+"KONFLIKT (położenie pliku): zmieniono nazwę %s na %s w %s, w katalogu, "
+"którego nazwa została zmieniona w %s, co sugeruje, że być może powinien "
+"trafić do %s."
+
+#: merge-ort.c:1919
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"KONFLIKT (zmiana nazwy/zmiana nazwy): zmieniono nazwę %s na %s w %s, a na %s"
+" w %s."
+
+#: merge-ort.c:2014
+#, 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."
+msgstr ""
+"KONFLIKT (zmiana nazwy związana z kolizją): zmiana nazwy %s -> %s miała "
+"konflikty zawartości A TAKŻE koliduje z inną ścieżką; może to skutkować"
+" zagnieżdżonymi "
+"znacznikami konfliktu."
+
+#: merge-ort.c:2033 merge-ort.c:2057
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"KONFLIKT (zmiana nazwy/usunięcie): zmieniono nazwę %s na %s w %s, ale"
+" skasowano w %s."
+
+#: merge-ort.c:2683
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"KONFLIKT (plik/katalog): katalog zawadza %s z %s; zamiast tego przenoszenie "
+"do %s."
+
+#: merge-ort.c:2756
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed %s "
+"of them so each can be recorded somewhere."
+msgstr ""
+"KONFLIKT (różne typy): %s był różnego typu z każdej strony; zmieniono nazwę "
+"%s "
+"z nich, więc każdy może być gdzieś odnotowany."
+
+#: merge-ort.c:2760
+msgid "both"
+msgstr "obu"
+
+#: merge-ort.c:2760
+msgid "one"
+msgstr "jednej"
+
+#: merge-ort.c:2855 merge-recursive.c:3052
+msgid "content"
+msgstr "zawartość"
+
+#: merge-ort.c:2857 merge-recursive.c:3056
+msgid "add/add"
+msgstr "dodano/dodano"
+
+#: merge-ort.c:2859 merge-recursive.c:3101
+msgid "submodule"
+msgstr "pod-moduł"
+
+#: merge-ort.c:2861 merge-recursive.c:3102
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "KONFLIKT (%s): Konflikt scalania w %s"
+
+#: merge-ort.c:2886
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"KONFLIKT (zmiana/usunięcie): %s usunięto w %s a zmieniono w %s. Wersja %s "
+"pliku %s pozostaje w drzewie."
+
+#. 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:3354
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "nie można zebrać informacji o scaleniu w drzewach %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3661
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4642,21 +4972,6 @@
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "nie wiem, co zrobić z %06o %s „%s”"
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Nie można scalić pod-modułu %s (nie wybrano)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Nie można scalić pod-modułu %s (brak zapisów)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr "Nie można scalić pod-modułu %s (zapisy nie śledzą podstawy scalania)"
-
 #: merge-recursive.c:1213 merge-recursive.c:1225
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
@@ -4681,42 +4996,11 @@
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Znaleziono możliwe rozwiązanie scalenia dla pod-modułu:\n"
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Jeśli tak ma być, po prostu dodaj go do indeksu, na przykład\n"
-"przez:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"które przyjmie tylko tę sugestię.\n"
-
 #: merge-recursive.c:1268
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Nie można scalić pod-modułu %s (znaleziono wiele scaleń)"
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Nie można wykonać wewnętrznego scalenia"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "Nie można dodać %s do bazy danych"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "Auto-scalanie %s"
-
 #: merge-recursive.c:1402
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
@@ -4826,25 +5110,6 @@
 "%s, bo nazwa katalogu %s została zmieniona na wiele innych katalogów, a "
 "żaden z celów nie dostał większości plików."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"KONFLIKT (domyślna zmiana nazwy katalogu): Istniejący plik/katalog %s "
-"zawadza domyślnej zmianie nazwy wstawiając tam następujące ścieżki: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"KONFLIKT (domyślna zmiana nazwy katalogu): Nie można dopasować więcej niż "
-"jednej ścieżki do %s; domyślna zmiana nazwy próbowała wstawić tam "
-"następujące ścieżki: %s"
-
 #: merge-recursive.c:2202
 #, c-format
 msgid ""
@@ -4854,15 +5119,6 @@
 "KONFLIKT (zmiana nazwy/zmiana nazwy): Zmiana nazwy katalogu %s->%s w %s. "
 "Zmiana nazwy katalogu %s->%s w %s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"Ostrzeżenie: unikam zastosowania zmiany nazwy %s -> %s na %s, bo %s sam "
-"zmienił nazwę."
-
 #: merge-recursive.c:2973
 #, c-format
 msgid "cannot read object %s"
@@ -4881,70 +5137,16 @@
 msgid "modified"
 msgstr "zmieniono"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "zawartość"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "dodano/dodano"
-
 #: merge-recursive.c:3079
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Pominięto %s (scalono tak samo jak istniejące)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "pod-moduł"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "KONFLIKT (%s): Konflikt scalania w %s"
-
 #: merge-recursive.c:3132
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Dodawanie zamiast tego jako %s"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Zaktualizowano ścieżkę: %s dodano w %s w katalogu, którego nazwa została "
-"zmieniona w %s; przenoszenie go do %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"KONFLIKT (położenie pliku): %s dodano w %s w katalogu, którego nazwa została "
-"zmieniona w %s, co sugeruje, że być może powinien trafić do %s."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Zaktualizowano ścieżkę: zmieniono nazwę %s na %s w %s w katalogu, którego "
-"nazwa została zmieniona w %s; przenoszenie go do %s."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"KONFLIKT (położenie pliku): zmieniono nazwę %s na %s w %s, w katalogu, "
-"którego nazwa została zmieniona w %s, co sugeruje, że być może powinien "
-"trafić do %s."
-
 #: merge-recursive.c:3339
 #, c-format
 msgid "Removing %s"
@@ -4978,11 +5180,11 @@
 msgid "merging of trees %s and %s failed"
 msgstr "nie można scalić drzew %s i %s"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3539
 msgid "Merging:"
 msgstr "Scalanie:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3552
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
@@ -4990,16 +5192,17 @@
 msgstr[1] "znaleziono %u wspólnych przodków:"
 msgstr[2] "znaleziono %u wspólnych przodków:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3602
 msgid "merge returned no commit"
 msgstr "scalenie nie zwróciło żadnych zapisów"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3758
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Nie można przetworzyć obiektu „%s”"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3776 builtin/merge.c:712 builtin/merge.c:896
+#: builtin/stash.c:471
 msgid "Unable to write index."
 msgstr "Nie można zapisać indeksu."
 
@@ -5007,8 +5210,8 @@
 msgid "failed to read the cache"
 msgstr "nie można odczytać pamięci podręcznej"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
+#: merge.c:109 rerere.c:704 builtin/am.c:1883 builtin/am.c:1917
+#: builtin/checkout.c:575 builtin/checkout.c:828 builtin/clone.c:817
 #: builtin/stash.c:265
 msgid "unable to write new index file"
 msgstr "nie można zapisać nowego pliku indeksu"
@@ -5179,17 +5382,17 @@
 msgid "could not finish pack-objects"
 msgstr "nie można zakończyć pack-objects"
 
-#: name-hash.c:537
+#: name-hash.c:538
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "nie można utworzyć wątku lazy_dir: %s"
 
-#: name-hash.c:559
+#: name-hash.c:560
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "nie można utworzyć wątku lazy_name: %s"
 
-#: name-hash.c:565
+#: name-hash.c:566
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "nie można dołączyć do wątku lazy_name: %s"
@@ -5233,6 +5436,363 @@
 msgid "Bad %s value: '%s'"
 msgstr "Zła wartość %s: „%s”"
 
+#: object-file.c:480
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "katalog obiektów %s nie istnieje; sprawdź .git/objects/info/alternates"
+
+#: object-file.c:531
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "nie można znormalizować ścieżki alternatywnego obiektu: %s"
+
+#: object-file.c:603
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr ""
+"%s: ignorowanie alternatywnych magazynów obiektów, zagnieżdżenie za głębokie"
+
+#: object-file.c:610
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "nie można znormalizować katalogu obiektu: %s"
+
+#: object-file.c:653
+msgid "unable to fdopen alternates lockfile"
+msgstr "nie można wykonać fdopen na pliku blokady alternatywnych obiektów"
+
+#: object-file.c:671
+msgid "unable to read alternates file"
+msgstr "nie można odczytać pliku alternatywnych obiektów"
+
+#: object-file.c:678
+msgid "unable to move new alternates file into place"
+msgstr "nie można przenieść na miejsce nowego pliku alternatywnych obiektów"
+
+#: object-file.c:713
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "ścieżka „%s” nie istnieje"
+
+#: object-file.c:734
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"repozytorium odniesienia „%s” jako łączone wybranie nie jest jeszcze "
+"wspierane."
+
+#: object-file.c:740
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "repozytorium odniesienia „%s” nie jest lokalnym repozytorium."
+
+#: object-file.c:746
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "repozytorium odniesienia „%s” jest płytkie"
+
+#: object-file.c:754
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "repozytorium odniesienia „%s” jest szczepione"
+
+#: object-file.c:814
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "błędny wiersz przy przetwarzaniu alternatywnych referencji: %s"
+
+#: object-file.c:964
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "próba mmap %<PRIuMAX> ponad ograniczeniem %<PRIuMAX>"
+
+#: object-file.c:985
+msgid "mmap failed"
+msgstr "mmap nie powiodło się"
+
+#: object-file.c:1149
+#, c-format
+msgid "object file %s is empty"
+msgstr "plik obiektu %s jest pusty"
+
+#: object-file.c:1284 object-file.c:2477
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "uszkodzony wolny obiekt „%s”"
+
+#: object-file.c:1286 object-file.c:2481
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "śmieci na końcu wolnego obiektu „%s”"
+
+#: object-file.c:1328
+msgid "invalid object type"
+msgstr "zły rodzaj obiektu"
+
+#: object-file.c:1412
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "nie można rozpakować nagłówka %s z --allow-unknown-type"
+
+#: object-file.c:1415
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "nie można rozpakować nagłówka %s"
+
+#: object-file.c:1421
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "nie można przetworzyć nagłówka %s z --allow-unknown-type"
+
+#: object-file.c:1424
+#, c-format
+msgid "unable to parse %s header"
+msgstr "nie można przetworzyć nagłówka %s"
+
+#: object-file.c:1651
+#, c-format
+msgid "failed to read object %s"
+msgstr "nie można odczytać obiektu %s"
+
+#: object-file.c:1655
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "nie znaleziono zastępstwa %s dla %s"
+
+#: object-file.c:1659
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "wolny obiekt %s (przechowywany w %s) jest uszkodzony"
+
+#: object-file.c:1663
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "spakowany obiekt %s (przechowywany w %s) jest uszkodzony"
+
+#: object-file.c:1768
+#, c-format
+msgid "unable to write file %s"
+msgstr "nie można zapisać pliku %s"
+
+#: object-file.c:1775
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "nie można ustawić uprawnień na „%s”"
+
+#: object-file.c:1782
+msgid "file write error"
+msgstr "błąd zapisu pliku"
+
+#: object-file.c:1802
+msgid "error when closing loose object file"
+msgstr "błąd podczas zamykania pliku wolnego obiektu"
+
+#: object-file.c:1867
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"niewystarczające uprawnienia, aby dodać obiekt do bazy danych repozytorium %s"
+
+#: object-file.c:1869
+msgid "unable to create temporary file"
+msgstr "nie można utworzyć tymczasowego pliku"
+
+#: object-file.c:1893
+msgid "unable to write loose object file"
+msgstr "nie można zapisać pliku wolnego obiektu"
+
+#: object-file.c:1899
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "nie można skompresować nowego obiektu %s (%d)"
+
+#: object-file.c:1903
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "deflateEnd w obiekcie %s nie powiodło się (%d)"
+
+#: object-file.c:1907
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "zamieszanie przez dane źródłowe niestabilnego obiektu dla %s"
+
+#: object-file.c:1917 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "nie można wykonać utime() na %s"
+
+#: object-file.c:1994
+#, c-format
+msgid "cannot read object for %s"
+msgstr "nie można odczytać obiektu do %s"
+
+#: object-file.c:2045
+msgid "corrupt commit"
+msgstr "uszkodzony zapis"
+
+#: object-file.c:2053
+msgid "corrupt tag"
+msgstr "uszkodzony tag"
+
+#: object-file.c:2153
+#, c-format
+msgid "read error while indexing %s"
+msgstr "błąd odczytu podczas indeksowania %s"
+
+#: object-file.c:2156
+#, c-format
+msgid "short read while indexing %s"
+msgstr "przeczytano mniej niż oczekiwano przy indeksowaniu %s"
+
+#: object-file.c:2229 object-file.c:2239
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: nie można wstawić do bazy danych"
+
+#: object-file.c:2245
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: niewspierany typ pliku"
+
+#: object-file.c:2269
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s nie jest prawidłowym obiektem"
+
+#: object-file.c:2271
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s nie jest prawidłowym obiektem „%s”"
+
+#: object-file.c:2298 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "nie można otworzyć %s"
+
+#: object-file.c:2488 object-file.c:2541
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "niezgodne skróty %s (oczekiwano %s)"
+
+#: object-file.c:2512
+#, c-format
+msgid "unable to mmap %s"
+msgstr "nie można wykonać mmap %s"
+
+#: object-file.c:2517
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "nie można rozpakować nagłówka %s"
+
+#: object-file.c:2523
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "nie można przetworzyć nagłówka %s"
+
+#: object-file.c:2534
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "nie można rozpakować zawartości %s"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "krótki identyfikator %s jest niejednoznaczny"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Kandydaci to:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git normalnie nigdy nie tworzy referencji kończącej się czterdziestoma\n"
+"heksadecymalnymi znakami, bo byłyby ignorowane zawsze, gdy podasz\n"
+"tylko tych czterdzieści znaków. Te referencje mogą być utworzone przez\n"
+"pomyłkę.  Na przykład\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"gdzie „$br” jakoś okazuje się puste i tworzona jest taka nietypowa "
+"referencja.\n"
+"Sprawdź te referencje i może je usuń. Wyłącz ten komunikat za pomocą\n"
+"„git config advice.objectNameWarning false”"
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "dziennik „%.*s” sięga tylko %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "dziennik „%.*s” ma tylko %d wpisów"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "ścieżka „%s” istnieje na dysku, ale nie w „%.*s”"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"ścieżka „%s” istnieje, ale nie „%s”\n"
+"wskazówka: Czy chodziło o „%.*s:%s” czyli „%.*s:./%s”?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "ścieżka „%s” nie istnieje w „%.*s”"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"ścieżka „%s” jest w indeksie, ale nie na etapie %d\n"
+"wskazówka: Czy chodziło o „:%d:%s”?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"ścieżka „%s” jest w indeksie, ale nie „%s”\n"
+"wskazówka: Czy chodziło o „:%d:%s” czyli „:%d:./%s”?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "ścieżka „%s” istnieje na dysku, ale nie w indeksie"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "ścieżka „%s” nie istnieje (ani na dysku, ani w indeksie)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "składnia ścieżki względnej nie może być użyta poza drzewem roboczym"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "nieprawidłowa nazwa obiektu: „%.*s”."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5258,21 +5818,71 @@
 msgid "hash mismatch %s"
 msgstr "niezgodne skróty %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:843 pack-bitmap.c:849 builtin/pack-objects.c:2226
 #, c-format
 msgid "unable to get size of %s"
 msgstr "nie można uzyskać rozmiaru %s"
 
-#: packfile.c:615
+#: pack-bitmap.c:1489 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "nie można uzyskać użycia dysku %s"
+
+#: pack-revindex.c:220
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "plik odwrotnego indeksu %s jest za mały"
+
+#: pack-revindex.c:225
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "plik odwrotnego indeksu %s jest uszkodzony"
+
+#: pack-revindex.c:233
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "plik odwrotnego indeksu %s ma nieznaną sygnaturę"
+
+#: pack-revindex.c:237
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "plik odwrotnego indeksu %s ma niewspieraną wersję %<PRIu32>"
+
+#: pack-revindex.c:242
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr ""
+"plik odwrotnego indeksu %s ma niewspierany identyfikator skrótu %<PRIu32>"
+
+#: pack-write.c:236
+msgid "cannot both write and verify reverse index"
+msgstr "nie można i zapisać, i sprawdzić odwrotnego indeksu"
+
+#: pack-write.c:257
+#, c-format
+msgid "could not stat: %s"
+msgstr "nie można wykonać stat: %s"
+
+#: pack-write.c:269
+#, c-format
+msgid "failed to make %s readable"
+msgstr "nie można dodać praw do odczytu %s"
+
+#: pack-write.c:502
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "nie można pisać do obiecującego pliku „%s”"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "pozycja przed końcem pliku paczki (zepsuty .idx?)"
 
-#: packfile.c:1907
+#: packfile.c:1934
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "pozycja przed początkiem indeksu paczki dla %s (uszkodzony indeks?)"
 
-#: packfile.c:1911
+#: packfile.c:1938
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "pozycja za końcem indeksu paczki dla %s (ucięty indeks?)"
@@ -5532,7 +6142,7 @@
 msgid "unable to create threaded lstat: %s"
 msgstr "nie można utworzyć wątkowanego lstat: %s"
 
-#: pretty.c:983
+#: pretty.c:984
 msgid "unable to parse --pretty format"
 msgstr "nie można przetworzyć formatu --pretty"
 
@@ -5559,20 +6169,20 @@
 msgid "Removing duplicate objects"
 msgstr "Usuwanie zduplikowanych obiektów"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "nie można uruchomić „log”"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "nie można odczytać wyjścia „log”"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5318
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "nie można przetworzyć zapisu „%s”"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5581,16 +6191,20 @@
 "nie można przetworzyć pierwszego wiersza wyjścia „log”: nie zaczynał się od "
 "„zapis”: „%s”"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "nie można przetworzyć nagłówka gita „%.*s”"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "nie można wygenerować różnic"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only i --right-only się wykluczają"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "nie można przetworzyć dziennika do „%s”"
@@ -5704,10 +6318,10 @@
 msgid "unordered stage entries for '%s'"
 msgstr "nieuporządkowane elementy przygotowane w „%s”"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
+#: read-cache.c:1971 read-cache.c:2262 rerere.c:549 rerere.c:583 rerere.c:1095
+#: submodule.c:1634 builtin/add.c:546 builtin/check-ignore.c:181
+#: builtin/checkout.c:504 builtin/checkout.c:690 builtin/clean.c:991
+#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:505
 #: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
 #: builtin/submodule--helper.c:332
 msgid "index file corrupt"
@@ -5763,12 +6377,12 @@
 msgid "broken index, expect %s in %s, got %s"
 msgstr "zepsuty indeks, oczekiwano %s w %s, otrzymano %s"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1141
 #, c-format
 msgid "could not close '%s'"
 msgstr "nie można zamknąć „%s”"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3120 sequencer.c:2487 sequencer.c:4239
 #, c-format
 msgid "could not stat '%s'"
 msgstr "nie można wykonać stat na „%s”"
@@ -5897,14 +6511,14 @@
 "Jeśli jednak usuniesz wszystko, przestawianie zostanie przerwane.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: rebase-interactive.c:110 rerere.c:469 rerere.c:676 sequencer.c:3615
+#: sequencer.c:3641 sequencer.c:5424 builtin/fsck.c:329 builtin/rebase.c:272
 #, c-format
 msgid "could not write '%s'"
 msgstr "nie można pisać do „%s”"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:116 builtin/rebase.c:204 builtin/rebase.c:230
+#: builtin/rebase.c:254
 #, c-format
 msgid "could not write '%s'."
 msgstr "nie można pisać do „%s”."
@@ -5934,14 +6548,14 @@
 "Możliwe zachowania to: ignore, warn, error.\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2402
+#: builtin/rebase.c:190 builtin/rebase.c:215 builtin/rebase.c:241
+#: builtin/rebase.c:266
 #, c-format
 msgid "could not read '%s'."
 msgstr "nie można odczytać „%s”."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1975
 msgid "gone"
 msgstr "nie ma"
 
@@ -6133,24 +6747,34 @@
 msgid "malformed format string %s"
 msgstr "nieprawidłowy format %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1551
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "brak gałęzi, przestawianie %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(brak gałęzi, przestawianie %s)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1554
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "brak gałęzi, przestawianie odłączonego HEAD %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(brak gałęzi, przestawianie odłączonego HEAD %s)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1557
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "brak gałęzi, przeszukiwanie rozpoczęte od %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(brak gałęzi, przeszukiwanie rozpoczęte od %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "brak gałęzi"
+#: ref-filter.c:1561
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD odłączone na %s)"
+
+#: ref-filter.c:1564
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD odłączone od %s)"
+
+#: ref-filter.c:1567
+msgid "(no branch)"
+msgstr "(brak gałęzi)"
 
 #: ref-filter.c:1599 ref-filter.c:1808
 #, c-format
@@ -6162,32 +6786,32 @@
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer nie powiodło się na %s do %s"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1992
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "uszkodzony obiekt w „%s”"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2081
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorowanie referencji z zepsutą nazwą %s"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2086 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignorowanie zepsutej referencji %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2426
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: brakuje atomu %%(end)"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "nieprawidłowa nazwa obiektu %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "opcja „%s” musi wskazywać na zapis"
@@ -6218,8 +6842,8 @@
 "\tgit config --global init.defaultBranch <nazwa>\n"
 "\n"
 "Tradycyjnie było „master”, a inne popularne to „main”, „trunk”\n"
-"i „development”. Nazwę właśnie utworzonej gałęzi można zmienić tym"
-" poleceniem:\n"
+"i „development”. Nazwę właśnie utworzonej gałęzi można zmienić tym "
+"poleceniem:\n"
 "\n"
 "\tgit branch -m <nazwa>\n"
 
@@ -6238,50 +6862,50 @@
 msgid "ignoring dangling symref %s"
 msgstr "ignorowanie wiszącej referencji symbolicznej %s"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "dziennik referencji %s ma lukę po %s"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "dziennik referencji %s nieoczekiwanie się skończył na %s"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "dziennik dla %s jest pusty"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "odmawiam zaktualizowania referencji ze złą nazwą „%s”"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref nie powiodło się dla referencji „%s”: %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "wiele aktualizacji referencji „%s” niedozwolone"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "aktualizacje referencji zabronione w środowisku kwarantanny"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "aktualizacje referencji przerwane przez skrypt repozytorium"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "„%s” istnieje; nie można utworzyć „%s”"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "nie można przetworzyć jednocześnie „%s” i „%s”"
@@ -6345,12 +6969,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "wartość „%s” z wzorca nie miała „*”"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "źródłowa referencja %s nie pasuje do żadnej"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "źródłowa ścieżka %s pasuje do więcej niż jednej"
@@ -6359,7 +6983,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6383,7 +7007,7 @@
 "Żadne nie zadziałało, więc się poddaliśmy. Musisz uzupełnić pełną postać "
 "referencji."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6394,7 +7018,7 @@
 "Czy chodziło o utworzenie nowej gałęzi przez wypchnięcie na\n"
 "„%s:refs/heads/%s”?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6405,7 +7029,7 @@
 "Czy chodziło o utworzenie nowego tagu przez wypchnięcie na\n"
 "„%s:refs/tags/%s”?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6416,7 +7040,7 @@
 "Czy chodziło o utworzenie nowego drzewa przez wypchnięcie na\n"
 "„%s:refs/tags/%s”?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6427,105 +7051,105 @@
 "Czy chodziło o utworzenie nowego blobu przez wypchnięcie na\n"
 "„%s:refs/tags/%s”?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "nie można rozwiązać %s jako gałęzi"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "nie można usunąć „%s”: zdalna referencja nie istnieje"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "docelowa referencja %s pasuje do więcej niż jednej"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "docelowa referencja %s pobiera z więcej niż jednego źródła"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD nie wskazuje gałęzi"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "nie ma takiej gałęzi: „%s”"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "gałąź „%s” nie ma ustawionej gałęzi nadrzędnej"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "gałąź nadrzędna „%s” nie jest przechowana jako gałąź śledząca"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "cel wypchnięcia „%s” na zdalnym repozytorium „%s” nie ma lokalnej gałęzi "
 "śledzącej"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "Gałąź „%s” nie ma zdalnego repozytorium do wypychania"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "referencje wypychania do „%s” nie zawierają „%s”"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "wypchnięcie nie ma celu (push.default ma wartość „nothing”)"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "nie można rozwiązać „prostego” wypchnięcia do pojedynczego celu"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "nie znaleziono zdalnej referencji %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Pomijanie zabawnej referencji „%s” lokalnie"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Twoja gałąź jest oparta na „%s”, ale jej nadrzędna zniknęła.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (użyj „git branch --unset-upstream”, aby naprawić)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Twoja gałąź jest na bieżąco z „%s”.\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Twoja gałąź i „%s” odnoszą się do innych zapisów.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (więcej szczegółów w „%s”)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
@@ -6533,11 +7157,11 @@
 msgstr[1] "Twoja gałąź jest do przodu względem „%s” o %d zapisy.\n"
 msgstr[2] "Twoja gałąź jest do przodu względem „%s” o %d zapisów.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (użyj „git push”, aby opublikować swoje zapisy)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6546,11 +7170,11 @@
 msgstr[1] "Twoja gałąź jest za „%s” o %d zapisy i może zostać przewinięta.\n"
 msgstr[2] "Twoja gałąź jest za „%s” o %d zapisów i może zostać przewinięta.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (użyj „git pull”, aby zaktualizować lokalną gałąź)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6568,11 +7192,11 @@
 "Twoja gałąź i „%s” się rozeszły\n"
 "i mają odpowiednio %d i %d różnych zapisów.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (użyj „git pull”, aby scalić zdalną gałąź w swoją)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "nie można przetworzyć nazwy obiektu „%s”"
@@ -6592,96 +7216,96 @@
 msgid "replace depth too high for object %s"
 msgstr "zamień głębokość za dużą dla obiektu %s"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "uszkodzone MERGE_RR"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "nie można zapisać wpisu rerere"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "wystąpiły błędy przy zapisywaniu „%s” (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "nie można wypróżnić „%s”'"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "nie można przetworzyć skrawków konfliktu w „%s”"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "nie można wykonać utime() na „%s”"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "nie można zapisać „%s”"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "Przygotowano „%s” używając poprzedniego rozwiązania."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Zapamiętano rozwiązanie dla „%s”."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Rozwiązano „%s” przy użyciu poprzedniego rozwiązania."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "nie można usunąć bezpańskiego „%s”"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Zapamiętano wstępny obraz „%s”"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
+#: rerere.c:865 submodule.c:2088 builtin/log.c:1991
 #: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "nie można utworzyć katalogu „%s”"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "nie można zaktualizować skonfliktowanego stanu w „%s”"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "brak zapamiętanego wyniku scalenia dla „%s”"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "nie można usunąć „%s”"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Zaktualizowano wstępny obraz „%s”"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Zapomniano rozwiązanie dla „%s”\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "nie można otworzyć katalogu pamięci podręcznej rr-cache"
 
@@ -6689,43 +7313,38 @@
 msgid "could not determine HEAD revision"
 msgstr "nie można ustalić rewizji HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3468
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "nie znaleziono drzewa %s"
 
-#: revision.c:2336
+#: revision.c:2338
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<plik-paczki> nie jest już wspierany"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "nierozpoznana wartość --diff-merges: %s"
-
-#: revision.c:2694
+#: revision.c:2668
 msgid "your current branch appears to be broken"
 msgstr "twoja obecna gałąź wydaje się być uszkodzona"
 
-#: revision.c:2697
+#: revision.c:2671
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "twoja obecna gałąź „%s” nie ma jeszcze żadnych zapisów"
 
-#: revision.c:2907
+#: revision.c:2877
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L nie wspiera jeszcze formatów różnic oprócz -p i -s"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "otwarcie /dev/null nie powiodło się"
 
-#: run-command.c:1271
+#: run-command.c:1274
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "nie można utworzyć asynchronicznego wątku: %s"
 
-#: run-command.c:1335
+#: run-command.c:1338
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6787,7 +7406,7 @@
 msgid "could not delete '%s'"
 msgstr "nie można usunąć „%s”"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:343 builtin/rebase.c:757 builtin/rebase.c:1602 builtin/rm.c:385
 #, c-format
 msgid "could not remove '%s'"
 msgstr "nie można usunąć „%s”"
@@ -6827,13 +7446,13 @@
 "z „git add <ścieżki>” lub „git rm <ścieżki>”\n"
 "i złóż wynik za pomocą „git commit”"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:434 sequencer.c:3070
 #, c-format
 msgid "could not lock '%s'"
 msgstr "nie można zablokować „%s”"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:436 sequencer.c:2869 sequencer.c:3074 sequencer.c:3088
+#: sequencer.c:3345 sequencer.c:5334 strbuf.c:1168 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "nie można pisać do „%s”"
@@ -6843,8 +7462,8 @@
 msgid "could not write eol to '%s'"
 msgstr "nie można pisać końca wiersza do „%s”"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:446 sequencer.c:2874 sequencer.c:3076 sequencer.c:3090
+#: sequencer.c:3353
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "nie można sfinalizować „%s”"
@@ -6863,7 +7482,7 @@
 msgid "%s: fast-forward"
 msgstr "%s: przewijanie"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:560 builtin/tag.c:598
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Nieprawidłowy tryb czyszczenia %s"
@@ -6876,60 +7495,60 @@
 msgid "%s: Unable to write new index file"
 msgstr "%s: Nie można zapisać nowego pliku indeksu"
 
-#: sequencer.c:687
+#: sequencer.c:684
 msgid "unable to update cache tree"
 msgstr "nie można zaktualizować drzewa pamięci podręcznej"
 
-#: sequencer.c:701
+#: sequencer.c:698
 msgid "could not resolve HEAD commit"
 msgstr "nie można rozwiązać zapisu HEAD"
 
-#: sequencer.c:781
+#: sequencer.c:778
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "nie ma żadnego klucza w „%.*s”"
 
-#: sequencer.c:792
+#: sequencer.c:789
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "nie można odcytować wartości „%s”"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: sequencer.c:826 wrapper.c:201 wrapper.c:371 builtin/am.c:710
+#: builtin/am.c:802 builtin/merge.c:1136 builtin/rebase.c:910
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "nie można otworzyć „%s” do odczytu"
 
-#: sequencer.c:839
+#: sequencer.c:836
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "już podano „GIT_AUTHOR_NAME”"
 
-#: sequencer.c:844
+#: sequencer.c:841
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "już podano „GIT_AUTHOR_EMAIL”"
 
-#: sequencer.c:849
+#: sequencer.c:846
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "już podano „GIT_AUTHOR_DATE”"
 
-#: sequencer.c:853
+#: sequencer.c:850
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "nieznana zmienna „%s”"
 
-#: sequencer.c:858
+#: sequencer.c:855
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "brak „GIT_AUTHOR_NAME”"
 
-#: sequencer.c:860
+#: sequencer.c:857
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "brak „GIT_AUTHOR_EMAIL”"
 
-#: sequencer.c:862
+#: sequencer.c:859
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "brak „GIT_AUTHOR_DATE”"
 
-#: sequencer.c:927
+#: sequencer.c:924
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6958,11 +7577,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1211
 msgid "'prepare-commit-msg' hook failed"
 msgstr "skrypt „prepare-commit-msg” się nie powiódł"
 
-#: sequencer.c:1214
+#: sequencer.c:1217
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6990,7 +7609,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1230
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7015,340 +7634,340 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1272
 msgid "couldn't look up newly created commit"
 msgstr "nie odnaleziono nowo utworzonego zapisu"
 
-#: sequencer.c:1271
+#: sequencer.c:1274
 msgid "could not parse newly created commit"
 msgstr "nie można przetworzyć nowo utworzonego zapisu"
 
-#: sequencer.c:1317
+#: sequencer.c:1320
 msgid "unable to resolve HEAD after creating commit"
 msgstr "nie można rozwiązać HEAD po utworzeniu zapisu"
 
-#: sequencer.c:1319
+#: sequencer.c:1322
 msgid "detached HEAD"
 msgstr "oddzielone HEAD"
 
-#: sequencer.c:1323
+#: sequencer.c:1326
 msgid " (root-commit)"
 msgstr " (zapis-korzeń)"
 
-#: sequencer.c:1344
+#: sequencer.c:1347
 msgid "could not parse HEAD"
 msgstr "nie można przetworzyć HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1349
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s nie jest zapisem!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1353 sequencer.c:1431 builtin/commit.c:1577
 msgid "could not parse HEAD commit"
 msgstr "nie można przetworzyć zapisu HEAD"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1409 sequencer.c:2108
 msgid "unable to parse commit author"
 msgstr "nie można przetworzyć autora zapisu %s"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1420 builtin/am.c:1566 builtin/merge.c:702
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree nie może zapisać drzewa"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1453 sequencer.c:1573
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "nie można odczytać komunikatu zapisu z „%s”"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1484 sequencer.c:1516
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "nieprawidłowa tożsamość autora „%s”"
 
-#: sequencer.c:1482
+#: sequencer.c:1490
 msgid "corrupt author: missing date information"
 msgstr "uszkodzony autor: brakuje informacji o dacie"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1529 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:905
+#: builtin/merge.c:930 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "nie można zapisać obiektu zapisu"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1556 sequencer.c:4291 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "nie można zaktualizować „%s”"
 
-#: sequencer.c:1597
+#: sequencer.c:1605
 #, c-format
 msgid "could not parse commit %s"
 msgstr "nie można przetworzyć zapisu %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1610
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "nie można przetworzyć zapisu rodzica %s"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1693 sequencer.c:1804
 #, c-format
 msgid "unknown command: %d"
 msgstr "nieznane pod-polecenie: %d"
 
-#: sequencer.c:1743 sequencer.c:1768
+#: sequencer.c:1751 sequencer.c:1776
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "To jest połączenie %d zapisów."
 
-#: sequencer.c:1753
+#: sequencer.c:1761
 msgid "need a HEAD to fixup"
 msgstr "potrzeba HEAD do naprawienia"
 
-#: sequencer.c:1755 sequencer.c:3372
+#: sequencer.c:1763 sequencer.c:3380
 msgid "could not read HEAD"
 msgstr "nie można odczytać HEAD"
 
-#: sequencer.c:1757
+#: sequencer.c:1765
 msgid "could not read HEAD's commit message"
 msgstr "nie można odczytać komunikatu zapisu czoła HEAD"
 
-#: sequencer.c:1763
+#: sequencer.c:1771
 #, c-format
 msgid "cannot write '%s'"
 msgstr "nie można pisać do „%s”"
 
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1778 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "To jest komunikat pierwszego zapisu:"
 
-#: sequencer.c:1778
+#: sequencer.c:1786
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "nie można odczytać komunikatu zapisu %s"
 
-#: sequencer.c:1785
+#: sequencer.c:1793
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "To jest komunikat zapisu nr %d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1799
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Komunikat zapisu nr %d zostanie pominięty:"
 
-#: sequencer.c:1879
+#: sequencer.c:1887
 msgid "your index file is unmerged."
 msgstr "plik indeksu jest niescalony."
 
-#: sequencer.c:1886
+#: sequencer.c:1894
 msgid "cannot fixup root commit"
 msgstr "nie można poprawić zapisu korzenia"
 
-#: sequencer.c:1905
+#: sequencer.c:1913
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "zapis %s jest scaleniem, a nie podano opcji -m."
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:1921 sequencer.c:1929
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "zapis %s nie ma rodzica %d"
 
-#: sequencer.c:1927
+#: sequencer.c:1935
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "nie można uzyskać komunikatu zapisu dla %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:1954
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: nie można przetworzyć rodzica zapisu %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2019
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "nie można zmienić nazwy „%s” na „%s”"
 
-#: sequencer.c:2071
+#: sequencer.c:2079
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "nie można odwrócić %s... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2080
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "nie można zastosować %s... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2100
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "gubienie %s %s — zawartość łatki już wcielona w głównym nurcie\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2158
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: nie można odczytać indeksu"
 
-#: sequencer.c:2157
+#: sequencer.c:2165
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: nie można odświeżyć indeksu"
 
-#: sequencer.c:2234
+#: sequencer.c:2242
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s nie przyjmuje argumentów: „%s”"
 
-#: sequencer.c:2243
+#: sequencer.c:2251
 #, c-format
 msgid "missing arguments for %s"
 msgstr "brakujące argumenty dla %s"
 
-#: sequencer.c:2274
+#: sequencer.c:2282
 #, c-format
 msgid "could not parse '%s'"
 msgstr "nie można przetworzyć „%s”"
 
-#: sequencer.c:2335
+#: sequencer.c:2343
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "nieprawidłowy wiersz %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2354
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "nie można użyć „%s” bez poprzedniego zapisu"
 
-#: sequencer.c:2432
+#: sequencer.c:2440
 msgid "cancelling a cherry picking in progress"
 msgstr "przerywanie trwającego dobierania"
 
-#: sequencer.c:2441
+#: sequencer.c:2449
 msgid "cancelling a revert in progress"
 msgstr "przerywanie trwającego odwracania"
 
-#: sequencer.c:2485
+#: sequencer.c:2493
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "napraw to używając „git rebase --edit-todo”."
 
-#: sequencer.c:2487
+#: sequencer.c:2495
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "plik z instrukcjami się nie nadaje: „%s”"
 
-#: sequencer.c:2492
+#: sequencer.c:2500
 msgid "no commits parsed."
 msgstr "nie przetworzono żadnego zapisu."
 
-#: sequencer.c:2503
+#: sequencer.c:2511
 msgid "cannot cherry-pick during a revert."
 msgstr "nie można dobierać w czasie odwracania."
 
-#: sequencer.c:2505
+#: sequencer.c:2513
 msgid "cannot revert during a cherry-pick."
 msgstr "nie można odwrócić w czasie dobierania."
 
-#: sequencer.c:2583
+#: sequencer.c:2591
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "nieprawidłowa wartość %s: %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2698
 msgid "unusable squash-onto"
 msgstr "spłaszcz-na się nie nadaje"
 
-#: sequencer.c:2710
+#: sequencer.c:2718
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "nieprawidłowy plik opcji: „%s”"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:2811 sequencer.c:4644
 msgid "empty commit set passed"
 msgstr "podano pusty zbiór zapisów"
 
-#: sequencer.c:2820
+#: sequencer.c:2828
 msgid "revert is already in progress"
 msgstr "już trwa dobieranie"
 
-#: sequencer.c:2822
+#: sequencer.c:2830
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "spróbuj „git revert (--continue | %s--abort | --quit)”"
 
-#: sequencer.c:2825
+#: sequencer.c:2833
 msgid "cherry-pick is already in progress"
 msgstr "już trwa dobieranie"
 
-#: sequencer.c:2827
+#: sequencer.c:2835
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "spróbuj „git cherry-pick (--continue | %s--abort | --quit)”"
 
-#: sequencer.c:2841
+#: sequencer.c:2849
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "nie można utworzyć katalogu sekwencjonowania „%s”"
 
-#: sequencer.c:2856
+#: sequencer.c:2864
 msgid "could not lock HEAD"
 msgstr "nie można zablokować HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:2924 sequencer.c:4379
 msgid "no cherry-pick or revert in progress"
 msgstr "nie trwa dobieranie ani odwracanie"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:2926 sequencer.c:2937
 msgid "cannot resolve HEAD"
 msgstr "nie można rozwiązać HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:2928 sequencer.c:2972
 msgid "cannot abort from a branch yet to be born"
 msgstr "nie można przerwać z gałęzi, która dopiero ma powstać"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:2958 builtin/grep.c:757
 #, c-format
 msgid "cannot open '%s'"
 msgstr "nie można otworzyć „%s”"
 
-#: sequencer.c:2952
+#: sequencer.c:2960
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "nie można odczytać „%s”: %s"
 
-#: sequencer.c:2953
+#: sequencer.c:2961
 msgid "unexpected end of file"
 msgstr "nieoczekiwany koniec pliku"
 
-#: sequencer.c:2959
+#: sequencer.c:2967
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "zapisany plik HEAD sprzed dobierania „%s” jest uszkodzony"
 
-#: sequencer.c:2970
+#: sequencer.c:2978
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Wydaje się, że czoło HEAD się przesunęło.\n"
 "Nie cofam, sprawdź swoje HEAD!"
 
-#: sequencer.c:3011
+#: sequencer.c:3019
 msgid "no revert in progress"
 msgstr "nie trwa żadne odwracanie"
 
-#: sequencer.c:3020
+#: sequencer.c:3028
 msgid "no cherry-pick in progress"
 msgstr "nie trwa żadne dobieranie"
 
-#: sequencer.c:3030
+#: sequencer.c:3038
 msgid "failed to skip the commit"
 msgstr "nie udało się pominąć zapisu"
 
-#: sequencer.c:3037
+#: sequencer.c:3045
 msgid "there is nothing to skip"
 msgstr "nie ma nic do pominięcia"
 
-#: sequencer.c:3040
+#: sequencer.c:3048
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7357,16 +7976,16 @@
 "zapis już złożony?\n"
 "spróbuj „git %s --continue”"
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3210 sequencer.c:4271
 msgid "cannot read HEAD"
 msgstr "nie można odczytać HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3227
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "nie można skopiować „%s” do „%s”"
 
-#: sequencer.c:3227
+#: sequencer.c:3235
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7385,27 +8004,27 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3245
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Nie można zastosować %s... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3252
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Nie można scalić %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3266 sequencer.c:3270 builtin/difftool.c:640
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "nie można skopiować „%s” do „%s”"
 
-#: sequencer.c:3274
+#: sequencer.c:3282
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Wykonywanie: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3297
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7420,11 +8039,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3303
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "i pozostały zmiany w indeksie i/lub drzewie roboczym\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3309
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7441,90 +8060,90 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3370
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nieprawidłowa nazwa etykietki „%.*s”"
 
-#: sequencer.c:3416
+#: sequencer.c:3424
 msgid "writing fake root commit"
 msgstr "zapisywanie fałszywego zapisu korzenia"
 
-#: sequencer.c:3421
+#: sequencer.c:3429
 msgid "writing squash-onto"
 msgstr "zapisywanie spłaszcz-na"
 
-#: sequencer.c:3505
+#: sequencer.c:3513
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "nie można rozwiązać „%s”"
 
-#: sequencer.c:3538
+#: sequencer.c:3546
 msgid "cannot merge without a current revision"
 msgstr "nie można scalić bez bieżącej rewizji"
 
-#: sequencer.c:3560
+#: sequencer.c:3568
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "nie można przetworzyć „%.*s”"
 
-#: sequencer.c:3569
+#: sequencer.c:3577
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "nic do scalenia: „%.*s”"
 
-#: sequencer.c:3581
+#: sequencer.c:3589
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "nie można wykonać ośmiorniczego scalenia na szczycie [nowego korzenia]"
 
-#: sequencer.c:3597
+#: sequencer.c:3605
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "nie można uzyskać komunikatu zapisu „%s”"
 
-#: sequencer.c:3780
+#: sequencer.c:3788
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "nie można nawet spróbować scalić „%.*s”"
 
-#: sequencer.c:3796
+#: sequencer.c:3804
 msgid "merge: Unable to write new index file"
 msgstr "scalanie: Nie można zapisać nowego pliku indeksu"
 
-#: sequencer.c:3870
+#: sequencer.c:3878
 msgid "Cannot autostash"
 msgstr "Nie można automatycznie dodać do schowka"
 
-#: sequencer.c:3873
+#: sequencer.c:3881
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Nieoczekiwana odpowiedź schowka: „%s”"
 
-#: sequencer.c:3879
+#: sequencer.c:3887
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Nie można utworzyć katalogu dla „%s”"
 
-#: sequencer.c:3882
+#: sequencer.c:3890
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Automatycznie zapisano w schowku: %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:3894
 msgid "could not reset --hard"
 msgstr "nie można zresetować --hard"
 
-#: sequencer.c:3911
+#: sequencer.c:3919
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Zastosowano zmiany z automatycznego schowka.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:3931
 #, c-format
 msgid "cannot store %s"
 msgstr "nie można zapisać %s"
 
-#: sequencer.c:3926
+#: sequencer.c:3934
 #, c-format
 msgid ""
 "%s\n"
@@ -7535,30 +8154,30 @@
 "Twoje zmiany są bezpieczne w schowku.\n"
 "Możesz w każdej chwili wykonać „git stash pop” lub „git stash drop”.\n"
 
-#: sequencer.c:3931
+#: sequencer.c:3939
 msgid "Applying autostash resulted in conflicts."
 msgstr "Stosowanie zmian z automatycznego schowka spowodowało konflikty."
 
-#: sequencer.c:3932
+#: sequencer.c:3940
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 "W schowku istnieje automatyczny wpis; tworzenie nowego wpisu w schowku."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4033 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "nie można odłączyć HEAD"
 
-#: sequencer.c:4040
+#: sequencer.c:4048
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Zatrzymano przy HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4050
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Zatrzymano przy %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4058
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7579,58 +8198,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4104
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Przestawianie (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4149
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Zatrzymano na %s... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4220
 #, c-format
 msgid "unknown command %d"
 msgstr "nieznane polecenie %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4279
 msgid "could not read orig-head"
 msgstr "nie można odczytać pierwotnego czoła"
 
-#: sequencer.c:4276
+#: sequencer.c:4284
 msgid "could not read 'onto'"
 msgstr "nie można odczytać „onto”"
 
-#: sequencer.c:4290
+#: sequencer.c:4298
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "nie można zapisać HEAD do %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4358
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Pomyślnie przestawiono i zaktualizowano %s.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4391
 msgid "cannot rebase: You have unstaged changes."
 msgstr "nie można przestawić: Masz nieprzygotowane zmiany."
 
-#: sequencer.c:4392
+#: sequencer.c:4400
 msgid "cannot amend non-existing commit"
 msgstr "nie można poprawić nieistniejącego obiektu"
 
-#: sequencer.c:4394
+#: sequencer.c:4402
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "nieprawidłowy plik: „%s”"
 
-#: sequencer.c:4396
+#: sequencer.c:4404
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "nieprawidłowa zawartość: „%s”"
 
-#: sequencer.c:4399
+#: sequencer.c:4407
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7640,50 +8259,50 @@
 "Masz niezłożone zmiany w drzewie roboczym. Najpierw je złóż\n"
 "i wtedy ponownie wykonaj „git rebase --continue”."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4443 sequencer.c:4482
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "nie można zapisać pliku: „%s”"
 
-#: sequencer.c:4490
+#: sequencer.c:4498
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "nie można usunąć CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4505
 msgid "could not commit staged changes."
 msgstr "nie udało się złożyć zmian ze schowka."
 
-#: sequencer.c:4613
+#: sequencer.c:4621
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: nie można dobrać %s"
 
-#: sequencer.c:4617
+#: sequencer.c:4625
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: zła rewizja"
 
-#: sequencer.c:4652
+#: sequencer.c:4660
 msgid "can't revert as initial commit"
 msgstr "nie można odwrócić jako pierwszy zapis"
 
-#: sequencer.c:5129
+#: sequencer.c:5137
 msgid "make_script: unhandled options"
 msgstr "make_script: nieobsłużone opcje"
 
-#: sequencer.c:5132
+#: sequencer.c:5140
 msgid "make_script: error preparing revisions"
 msgstr "make_script: błąd przygotowania rewizji"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5382 sequencer.c:5399
 msgid "nothing to do"
 msgstr "nic do zrobienia"
 
-#: sequencer.c:5410
+#: sequencer.c:5418
 msgid "could not skip unnecessary pick commands"
 msgstr "nie można pominąć niepotrzebnych poleceń pick"
 
-#: sequencer.c:5504
+#: sequencer.c:5512
 msgid "the script was already rearranged."
 msgstr "kolejność skryptu została już zmieniona."
 
@@ -7851,363 +8470,6 @@
 msgid "setsid failed"
 msgstr "setsid nie powiodło się"
 
-#: sha1-file.c:480
-#, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "katalog obiektów %s nie istnieje; sprawdź .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "nie można znormalizować ścieżki alternatywnego obiektu: %s"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr ""
-"%s: ignorowanie alternatywnych magazynów obiektów, zagnieżdżenie za głębokie"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "nie można znormalizować katalogu obiektu: %s"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "nie można wykonać fdopen na pliku blokady alternatywnych obiektów"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "nie można odczytać pliku alternatywnych obiektów"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "nie można przenieść na miejsce nowego pliku alternatywnych obiektów"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "ścieżka „%s” nie istnieje"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"repozytorium odniesienia „%s” jako łączone wybranie nie jest jeszcze "
-"wspierane."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "repozytorium odniesienia „%s” nie jest lokalnym repozytorium."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "repozytorium odniesienia „%s” jest płytkie"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "repozytorium odniesienia „%s” jest szczepione"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "błędny wiersz przy przetwarzaniu alternatywnych referencji: %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "próba mmap %<PRIuMAX> ponad ograniczeniem %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap nie powiodło się"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "plik obiektu %s jest pusty"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "uszkodzony wolny obiekt „%s”"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "śmieci na końcu wolnego obiektu „%s”"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "zły rodzaj obiektu"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "nie można rozpakować nagłówka %s z --allow-unknown-type"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "nie można rozpakować nagłówka %s"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "nie można przetworzyć nagłówka %s z --allow-unknown-type"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "nie można przetworzyć nagłówka %s"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "nie można odczytać obiektu %s"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "nie znaleziono zastępstwa %s dla %s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "wolny obiekt %s (przechowywany w %s) jest uszkodzony"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "spakowany obiekt %s (przechowywany w %s) jest uszkodzony"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "nie można zapisać pliku %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "nie można ustawić uprawnień na „%s”"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "błąd zapisu pliku"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "błąd podczas zamykania pliku wolnego obiektu"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"niewystarczające uprawnienia, aby dodać obiekt do bazy danych repozytorium %s"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "nie można utworzyć tymczasowego pliku"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "nie można zapisać pliku wolnego obiektu"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "nie można skompresować nowego obiektu %s (%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "deflateEnd w obiekcie %s nie powiodło się (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "zamieszanie przez dane źródłowe niestabilnego obiektu dla %s"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "nie można wykonać utime() na %s"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "nie można odczytać obiektu do %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "uszkodzony zapis"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "uszkodzony tag"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "błąd odczytu podczas indeksowania %s"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "przeczytano mniej niż oczekiwano przy indeksowaniu %s"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: nie można wstawić do bazy danych"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: niewspierany typ pliku"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s nie jest prawidłowym obiektem"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s nie jest prawidłowym obiektem „%s”"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "nie można otworzyć %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "niezgodne skróty %s (oczekiwano %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "nie można wykonać mmap %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "nie można rozpakować nagłówka %s"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "nie można przetworzyć nagłówka %s"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "nie można rozpakować zawartości %s"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "krótkie SHA-1 %s jest niejednoznaczne"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Kandydaci to:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git normalnie nigdy nie tworzy referencji kończącej się czterdziestoma\n"
-"heksadecymalnymi znakami, bo byłyby ignorowane zawsze, gdy podasz\n"
-"tylko tych czterdzieści znaków. Te referencje mogą być utworzone przez\n"
-"pomyłkę.  Na przykład\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"gdzie „$br” jakoś okazuje się puste i tworzona jest taka nietypowa "
-"referencja.\n"
-"Sprawdź te referencje i może je usuń. Wyłącz ten komunikat za pomocą\n"
-"„git config advice.objectNameWarning false”"
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "dziennik „%.*s” sięga tylko %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "dziennik „%.*s” ma tylko %d wpisów"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "ścieżka „%s” istnieje na dysku, ale nie w „%.*s”"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"ścieżka „%s” istnieje, ale nie „%s”\n"
-"wskazówka: Czy chodziło o „%.*s:%s” czyli „%.*s:./%s”?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "ścieżka „%s” nie istnieje w „%.*s”"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"ścieżka „%s” jest w indeksie, ale nie na etapie %d\n"
-"wskazówka: Czy chodziło o „:%d:%s”?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"ścieżka „%s” jest w indeksie, ale nie „%s”\n"
-"wskazówka: Czy chodziło o „:%d:%s” czyli „:%d:./%s”?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "ścieżka „%s” istnieje na dysku, ale nie w indeksie"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "ścieżka „%s” nie istnieje (ani na dysku, ani w indeksie)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "składnia ścieżki względnej nie może być użyta poza drzewem roboczym"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "nieprawidłowa nazwa obiektu: „%.*s”."
-
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
 #: strbuf.c:848
 #, c-format
@@ -8263,7 +8525,7 @@
 msgstr[2] "%u bajtów/s"
 
 #: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "nie można otworzyć „%s” do zapisywania"
@@ -8326,12 +8588,12 @@
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Ścieżka „%s” jest w pod-module „%.*s”"
 
-#: submodule.c:434
+#: submodule.c:435
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "zły argument --ignore-submodules: %s"
 
-#: submodule.c:816
+#: submodule.c:817
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8340,12 +8602,12 @@
 "Pod-moduł w zapisie %s w ścieżce „%s” zderzył się z pod-modułem o tej samej "
 "nazwie. Pomijanie."
 
-#: submodule.c:919
+#: submodule.c:920
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "element pod-modułu „%s” (%s) nie jest zapisem, jest rodzaju %s"
 
-#: submodule.c:1004
+#: submodule.c:1005
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8354,36 +8616,36 @@
 "Nie można wykonać polecenia „git rev-list <zapisy> --not --remotes -n 1” w "
 "pod-module %s"
 
-#: submodule.c:1127
+#: submodule.c:1128
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "proces dla pod-modułu „%s” nie powiódł się"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1157 builtin/branch.c:689 builtin/submodule--helper.c:2469
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Nie można rozwiązać HEAD jako prawidłowej referencji."
 
-#: submodule.c:1167
+#: submodule.c:1168
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Wypychanie pod-modułu „%s”\n"
 
-#: submodule.c:1170
+#: submodule.c:1171
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Nie można wypchnąć pod-modułu „%s”\n"
 
-#: submodule.c:1462
+#: submodule.c:1463
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Pobieranie pod-modułu %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1497
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Nie można się dostać do pod-modułu „%s”\n"
 
-#: submodule.c:1646
+#: submodule.c:1652
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8392,61 +8654,61 @@
 "Błędy podczas pobierania pod-modułów:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1677
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "nie rozpoznano „%s” jako repozytorium gita"
 
-#: submodule.c:1688
+#: submodule.c:1694
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Nie można wykonać „git status --porcelain=2” w pod-module %s"
 
-#: submodule.c:1729
+#: submodule.c:1735
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "„git status --porcelain=2” nie powiódł się w pod-module %s"
 
-#: submodule.c:1804
+#: submodule.c:1810
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "nie można uruchomić „git status” w pod-module „%s”"
 
-#: submodule.c:1817
+#: submodule.c:1823
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "nie można wykonać „git status” w pod-module „%s”"
 
-#: submodule.c:1832
+#: submodule.c:1838
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Nie można usunąć ustawienia core.worktree w pod-module „%s”"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1865 submodule.c:2175
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "nie można zejść do pod-modułu „%s”"
 
-#: submodule.c:1880
+#: submodule.c:1886
 msgid "could not reset submodule index"
 msgstr "nie można zresetować indeksu pod-modułu"
 
-#: submodule.c:1922
+#: submodule.c:1928
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "pod-moduł „%s” ma brudny indeks"
 
-#: submodule.c:1974
+#: submodule.c:1980
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Nie można zaktualizować pod-modułu „%s”."
 
-#: submodule.c:2042
+#: submodule.c:2048
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "katalog gita pod-modułu „%s” jest w katalogu gita „%.*s”"
 
-#: submodule.c:2063
+#: submodule.c:2069
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8454,17 +8716,17 @@
 "relocate_gitdir dla pod-modułu „%s” z ponad jednym drzewem roboczym "
 "niewspierane"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2081 submodule.c:2140
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "nie odnaleziono nazwy pod-modułu „%s”"
 
-#: submodule.c:2079
+#: submodule.c:2085
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "odmawiam przeniesienia „%s” do istniejącego katalogu gita"
 
-#: submodule.c:2086
+#: submodule.c:2092
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8475,11 +8737,11 @@
 "„%s” do\n"
 "„%s”\n"
 
-#: submodule.c:2214
+#: submodule.c:2220
 msgid "could not start ls-files in .."
 msgstr "nie można uruchomić ls-files w .."
 
-#: submodule.c:2254
+#: submodule.c:2260
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree zwróciło nieoczekiwany kod wyjścia %d"
@@ -8510,7 +8772,7 @@
 msgid "could not read input file '%s'"
 msgstr "nie można odczytać pliku „%s”"
 
-#: trailer.c:751
+#: trailer.c:751 builtin/mktag.c:91
 msgid "could not read from stdin"
 msgstr "nie można czytać ze standardowego wejścia"
 
@@ -8583,7 +8845,7 @@
 msgid "error while running fast-import"
 msgstr "błąd wykonywania fast-import"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1237
 #, c-format
 msgid "could not read ref %s"
 msgstr "nie można odczytać referencji %s"
@@ -8601,7 +8863,7 @@
 msgid "invalid remote service path"
 msgstr "nieprawidłowa ścieżka zdalnej usługi"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1447
 msgid "operation not supported by protocol"
 msgstr "operacja niewspierana przez protokół"
 
@@ -8680,52 +8942,52 @@
 "Brak wspólnych referencji lub żadnych nie podano; brak działania.\n"
 "Pewnie należy podać jakąś gałąź.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1214
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "niewspierany format obiektu „%s”"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1223
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "nieprawidłowa odpowiedź na liście referencji: %s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1375
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) nie powiodło się"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1402
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) nie powiodło się"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1451
 #, c-format
 msgid "%s thread failed"
 msgstr "wątek %s nie powiódł się"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1455
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "wątek %s nie może się złączyć: %s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1474 transport-helper.c:1478
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "nie można uruchomić wątku do kopiowania danych: %s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1515
 #, c-format
 msgid "%s process failed to wait"
 msgstr "procesowi %s nie udało się zaczekać"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1519
 #, c-format
 msgid "%s process failed"
 msgstr "proces %s nie powiódł się"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1537 transport-helper.c:1546
 msgid "can't start thread for copying data"
 msgstr "nie można uruchomić wątku do kopiowania danych"
 
@@ -8814,23 +9076,23 @@
 msgid "Aborting."
 msgstr "Przerywanie."
 
-#: transport.c:1315
+#: transport.c:1316
 msgid "failed to push all needed submodules"
 msgstr "nie można wypchnąć wszystkich potrzebnych zagnieżdżonych pod-modułów"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "za krótki obiekt drzewa"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "nieprawidłowy tryb w elemencie drzewa"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "pusta nazwa pliku w elemencie drzewa"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "za krótki plik drzewa"
 
@@ -9086,7 +9348,7 @@
 msgid "Updating index flags"
 msgstr "Aktualizowanie flag indeksu"
 
-#: upload-pack.c:1550
+#: upload-pack.c:1543
 msgid "expected flush after fetch arguments"
 msgstr "oczekiwano wypróżnienia po argumentach pobrania"
 
@@ -9123,73 +9385,103 @@
 msgid "Fetching objects"
 msgstr "Pobieranie obiektów"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2103
 #, c-format
 msgid "failed to read '%s'"
 msgstr "nie można odczytać „%s”"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "„%s” w głównym drzewie roboczym nie jest katalogiem repozytorium"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "plik „%s” nie zawiera ścieżki bezwzględnej do położenia drzewa roboczego"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "„%s” nie istnieje"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "„%s” nie jest plikiem .git, kod błędu %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "„%s” nie wskazuje z powrotem na „%s”"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "nie jest katalogiem"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git nie jest plikiem"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr "plik .git zepsuty"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr "plik .git nieprawidłowy"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "nieprawidłowa ścieżka"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "nie odnaleziono repozytorium; .git nie jest plikiem"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "nie odnaleziono repozytorium; plik .git nie odnosi się do repozytorium"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "nie odnaleziono repozytorium; plik .git zepsuty"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "katalog gita nie do odczytania"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "katalog gita nieprawidłowy"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "nie jest prawidłowym katalogiem"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "plik gitdir nie istnieje"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "nie można odczytać pliku gitdir (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "przykrótki odczyt (oczekiwano %<PRIuMAX> bajtów, odczytano %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "nieprawidłowy plik gitdir"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "plik gitdir wskazuje nieistniejące położenie"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9233,11 +9525,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (użyj „git rm <plik>...” aby zaznaczyć rozwiązanie)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1072
 msgid "Changes to be committed:"
 msgstr "Zmiany do złożenia:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1081
 msgid "Changes not staged for commit:"
 msgstr "Zmiany nie przygotowane do złożenia:"
 
@@ -9336,7 +9628,7 @@
 msgid "untracked content, "
 msgstr "nieśledzona zawartość, "
 
-#: wt-status.c:903
+#: wt-status.c:905
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
@@ -9344,15 +9636,15 @@
 msgstr[1] "W schowku są obecnie %d elementy"
 msgstr[2] "W schowku jest obecnie %d elementów"
 
-#: wt-status.c:934
+#: wt-status.c:936
 msgid "Submodules changed but not updated:"
 msgstr "Pod-moduły zmienione, ale nie zaktualizowane:"
 
-#: wt-status.c:936
+#: wt-status.c:938
 msgid "Submodule changes to be committed:"
 msgstr "Zmiany w pod-modułach do złożenia:"
 
-#: wt-status.c:1018
+#: wt-status.c:1020
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9360,7 +9652,7 @@
 "Nie zmieniaj ani nie usuwaj wiersza powyżej.\n"
 "Wszystko po nim będzie pominięte."
 
-#: wt-status.c:1110
+#: wt-status.c:1112
 #, c-format
 msgid ""
 "\n"
@@ -9371,55 +9663,55 @@
 "Obliczenie wartości gałęzi przed/w tyle zajęło %.2f sekund.\n"
 "Możesz użyć „--no-ahead-behind”, aby tego uniknąć.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1142
 msgid "You have unmerged paths."
 msgstr "Masz niescalone ścieżki."
 
-#: wt-status.c:1143
+#: wt-status.c:1145
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (napraw konflikty i wykonaj „git commit”)"
 
-#: wt-status.c:1145
+#: wt-status.c:1147
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (użyj „git merge --abort”, aby przerwać scalanie)"
 
-#: wt-status.c:1149
+#: wt-status.c:1151
 msgid "All conflicts fixed but you are still merging."
 msgstr "Wszystkie konflikty naprawione, ale wciąż trwa scalanie."
 
-#: wt-status.c:1152
+#: wt-status.c:1154
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (użyj „git commit”, żeby zwieńczyć scalanie)"
 
-#: wt-status.c:1161
+#: wt-status.c:1163
 msgid "You are in the middle of an am session."
 msgstr "Jesteś w trakcie sesji am."
 
-#: wt-status.c:1164
+#: wt-status.c:1166
 msgid "The current patch is empty."
 msgstr "Obecna ścieżka jest pusta."
 
-#: wt-status.c:1168
+#: wt-status.c:1170
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (napraw konflikty i wykonaj „git am --continue”)"
 
-#: wt-status.c:1170
+#: wt-status.c:1172
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (użyj „git am --skip” aby pominąć tę łatkę)"
 
-#: wt-status.c:1172
+#: wt-status.c:1174
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (użyj „git am --abort”, aby przywrócić pierwotną gałąź)"
 
-#: wt-status.c:1305
+#: wt-status.c:1307
 msgid "git-rebase-todo is missing."
 msgstr "brakuje git-rebase-todo."
 
-#: wt-status.c:1307
+#: wt-status.c:1309
 msgid "No commands done."
 msgstr "Nie wykonano żadnych poleceń."
 
-#: wt-status.c:1310
+#: wt-status.c:1312
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
@@ -9427,16 +9719,16 @@
 msgstr[1] "Ostatnie polecenia wykonane (wykonano %d polecenia):"
 msgstr[2] "Ostatnie polecenia wykonane (wykonano %d poleceń):"
 
-#: wt-status.c:1321
+#: wt-status.c:1323
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (zobacz więcej w pliku %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1328
 msgid "No commands remaining."
 msgstr "Brak pozostałych poleceń."
 
-#: wt-status.c:1329
+#: wt-status.c:1331
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
@@ -9444,178 +9736,186 @@
 msgstr[1] "Następne polecenia do wykonania (pozostały %d polecenia):"
 msgstr[2] "Następne polecenia do wykonania (pozostało %d poleceń):"
 
-#: wt-status.c:1337
+#: wt-status.c:1339
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (użyj „git rebase --edit-todo”, aby wyświetlić i edytować)"
 
-#: wt-status.c:1349
+#: wt-status.c:1351
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Przestawiasz właśnie gałąź „%s” na „%s”."
 
-#: wt-status.c:1354
+#: wt-status.c:1356
 msgid "You are currently rebasing."
 msgstr "Jesteś w trakcie przestawiania."
 
-#: wt-status.c:1367
+#: wt-status.c:1369
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (napraw konflikty i wykonaj „git rebase --continue”)"
 
-#: wt-status.c:1369
+#: wt-status.c:1371
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (użyj „git rebase --skip” aby pominąć tę łatkę)"
 
-#: wt-status.c:1371
+#: wt-status.c:1373
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (użyj „git rebase --abort”, aby wybrać pierwotną gałąź)"
 
-#: wt-status.c:1378
+#: wt-status.c:1380
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (wszystkie konflikty naprawione: wykonaj „git rebase --continue”)"
 
-#: wt-status.c:1382
+#: wt-status.c:1384
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "Dzielisz właśnie zapis podczas przestawiania gałęzi „%s” na „%s”."
 
-#: wt-status.c:1387
+#: wt-status.c:1389
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Dzielisz właśnie zapis podczas przestawiania."
 
-#: wt-status.c:1390
+#: wt-status.c:1392
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Kiedy katalog roboczy będzie czysty, wykonaj „git rebase --continue”)"
 
-#: wt-status.c:1394
+#: wt-status.c:1396
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "Edytujesz właśnie zapis podczas przestawiania gałęzi „%s” na „%s”."
 
-#: wt-status.c:1399
+#: wt-status.c:1401
 msgid "You are currently editing a commit during a rebase."
 msgstr "Edytujesz właśnie zapis podczas przestawiania."
 
-#: wt-status.c:1402
+#: wt-status.c:1404
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (użyj „git commit --amend”, aby poprawić bieżący zapis)"
 
-#: wt-status.c:1404
+#: wt-status.c:1406
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (użyj „git rebase --continue”, kiedy zadowolisz się swoimi zmianami)"
 
-#: wt-status.c:1415
+#: wt-status.c:1417
 msgid "Cherry-pick currently in progress."
 msgstr "Trwa właśnie dobieranie."
 
-#: wt-status.c:1418
+#: wt-status.c:1420
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Dobierasz właśnie zapis %s."
 
-#: wt-status.c:1425
+#: wt-status.c:1427
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (napraw konflikty i wykonaj „git cherry-pick --continue”)"
 
-#: wt-status.c:1428
+#: wt-status.c:1430
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (wykonaj „git cherry-pick --continue”, aby kontynuować)"
 
-#: wt-status.c:1431
+#: wt-status.c:1433
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (wszystkie konflikty naprawione: wykonaj „git cherry-pick --continue”)"
 
-#: wt-status.c:1433
+#: wt-status.c:1435
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (użyj „git cherry-pick --skip”, aby pominąć tę łatkę)"
 
-#: wt-status.c:1435
+#: wt-status.c:1437
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (użyj „git cherry-pick --abort”, aby przerwać dobieranie)"
 
-#: wt-status.c:1445
+#: wt-status.c:1447
 msgid "Revert currently in progress."
 msgstr "Trwa właśnie odwracanie."
 
-#: wt-status.c:1448
+#: wt-status.c:1450
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Odwracasz właśnie zapis %s."
 
-#: wt-status.c:1454
+#: wt-status.c:1456
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (napraw konflikty i wykonaj „git revert --continue”)"
 
-#: wt-status.c:1457
+#: wt-status.c:1459
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (wykonaj „git revert --continue”, aby kontynuować)"
 
-#: wt-status.c:1460
+#: wt-status.c:1462
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (wszystkie konflikty naprawione: wykonaj „git revert --continue”)"
 
-#: wt-status.c:1462
+#: wt-status.c:1464
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (użyj „git revert --skip” aby pominąć tę łatkę)"
 
-#: wt-status.c:1464
+#: wt-status.c:1466
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (użyj „git revert --abort”, aby przerwać odwracanie)"
 
-#: wt-status.c:1474
+#: wt-status.c:1476
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Jesteś w trakcie przeszukiwania, począwszy od gałęzi „%s”."
 
-#: wt-status.c:1478
+#: wt-status.c:1480
 msgid "You are currently bisecting."
 msgstr "Jesteś w trakcie przeszukiwania."
 
-#: wt-status.c:1481
+#: wt-status.c:1483
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (użyj „git bisect reset”, aby powrócić na pierwotną gałąź)"
 
-#: wt-status.c:1492
+#: wt-status.c:1494
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "Jesteś w rzadkim wybraniu z obecnym %d%% śledzonych plików."
 
-#: wt-status.c:1731
+#: wt-status.c:1733
 msgid "On branch "
 msgstr "Na gałęzi "
 
-#: wt-status.c:1738
+#: wt-status.c:1740
 msgid "interactive rebase in progress; onto "
 msgstr "trwa interaktywne przestawianie na "
 
-#: wt-status.c:1740
+#: wt-status.c:1742
 msgid "rebase in progress; onto "
 msgstr "trwa przestawianie na "
 
-#: wt-status.c:1750
+#: wt-status.c:1747
+msgid "HEAD detached at "
+msgstr "HEAD odłączone na "
+
+#: wt-status.c:1749
+msgid "HEAD detached from "
+msgstr "HEAD odłączone od "
+
+#: wt-status.c:1752
 msgid "Not currently on any branch."
 msgstr "Nie jesteś na żadnej gałęzi."
 
-#: wt-status.c:1767
+#: wt-status.c:1769
 msgid "Initial commit"
 msgstr "Pierwszy zapis"
 
-#: wt-status.c:1768
+#: wt-status.c:1770
 msgid "No commits yet"
 msgstr "Jeszcze nie ma zapisów"
 
-#: wt-status.c:1782
+#: wt-status.c:1784
 msgid "Untracked files"
 msgstr "Nieśledzone pliki"
 
-#: wt-status.c:1784
+#: wt-status.c:1786
 msgid "Ignored files"
 msgstr "Ignorowane pliki"
 
-#: wt-status.c:1788
+#: wt-status.c:1790
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9626,30 +9926,30 @@
 "może to przyspieszyć, ale musisz wtedy pilnować dodawania\n"
 "nowych plików (zobacz „git help status”)."
 
-#: wt-status.c:1794
+#: wt-status.c:1796
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Nie wypisano nieśledzonych plików%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1798
 msgid " (use -u option to show untracked files)"
 msgstr " (użyj opcji -u, aby pokazać nieśledzone pliki)"
 
-#: wt-status.c:1802
+#: wt-status.c:1804
 msgid "No changes"
 msgstr "Brak zmian"
 
-#: wt-status.c:1807
+#: wt-status.c:1809
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "brak zmian dodanych do zapisu (użyj „git add” i/lub „git commit -a”)\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1813
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "brak zmian dodanych do zapisu\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1817
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9658,62 +9958,62 @@
 "nie dodano nic do złożenia, ale są nieśledzone pliki (użyj „git add”, aby "
 "śledzić)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1821
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "nie dodano nic do złożenia, ale są nieśledzone pliki\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1825
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "nic do złożenia (utwórz/wkopiuj pliki i użyj „git add”, aby śledzić)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1829 wt-status.c:1835
 #, c-format
 msgid "nothing to commit\n"
 msgstr "nic do złożenia\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1832
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "nic do złożenia (użyj -u, aby pokazać nieśledzone pliki)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1837
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "nic do złożenia, drzewo robocze czyste\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1942
 msgid "No commits yet on "
 msgstr "Jeszcze nie ma zapisów na "
 
-#: wt-status.c:1944
+#: wt-status.c:1946
 msgid "HEAD (no branch)"
 msgstr "HEAD (brak gałęzi)"
 
-#: wt-status.c:1975
+#: wt-status.c:1977
 msgid "different"
 msgstr "różne"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1979 wt-status.c:1987
 msgid "behind "
 msgstr "wstecz "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1982 wt-status.c:1985
 msgid "ahead "
 msgstr "do przodu "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2507
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "nie można wykonać %s: masz nieprzygotowane zmiany."
 
-#: wt-status.c:2511
+#: wt-status.c:2513
 msgid "additionally, your index contains uncommitted changes."
 msgstr "dodatkowo, twój indeks zawiera nieoddane zmiany."
 
-#: wt-status.c:2513
+#: wt-status.c:2515
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "nie można wykonać %s: Twój indeks zawiera niezłożone zmiany."
@@ -9727,126 +10027,131 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opcje>] [--] <ścieżka>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:58
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "nie można wykonać chmod %cx „%s”"
+
+#: builtin/add.c:96
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "niespodziewany stan diff %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:101 builtin/commit.c:285
 msgid "updating files failed"
 msgstr "aktualizacja plików nie powiodła się"
 
-#: builtin/add.c:103
+#: builtin/add.c:111
 #, c-format
 msgid "remove '%s'\n"
 msgstr "usuń „%s”\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:186
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Wycofane zmiany po odświeżeniu indeksu:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:280 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "Nie można odczytać indeksu"
 
-#: builtin/add.c:283
+#: builtin/add.c:291
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Nie można otworzyć „%s” do zapisywania."
 
-#: builtin/add.c:287
+#: builtin/add.c:295
 msgid "Could not write patch"
 msgstr "Nie można zapisać łatki"
 
-#: builtin/add.c:290
+#: builtin/add.c:298
 msgid "editing patch failed"
 msgstr "edycja łatki nie powiodła się"
 
-#: builtin/add.c:293
+#: builtin/add.c:301
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Nie można wykonać stat na „%s”"
 
-#: builtin/add.c:295
+#: builtin/add.c:303
 msgid "Empty patch. Aborted."
 msgstr "Pusta łatka. Przerwano."
 
-#: builtin/add.c:300
+#: builtin/add.c:308
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Nie można zastosować „%s”"
 
-#: builtin/add.c:308
+#: builtin/add.c:316
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Poniższe ścieżki są ignorowane przez jeden z plików .gitignore:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: builtin/add.c:336 builtin/clean.c:904 builtin/fetch.c:169 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
 #: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "na sucho"
 
-#: builtin/add.c:331
+#: builtin/add.c:339
 msgid "interactive picking"
 msgstr "interaktywne wybieranie"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:340 builtin/checkout.c:1546 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "wybierz skrawki interaktywnie"
 
-#: builtin/add.c:333
+#: builtin/add.c:341
 msgid "edit current diff and apply"
 msgstr "zmień bieżące różnice i zastosuj"
 
-#: builtin/add.c:334
+#: builtin/add.c:342
 msgid "allow adding otherwise ignored files"
 msgstr "pozwól na dodawanie inaczej ignorowanych plików"
 
-#: builtin/add.c:335
+#: builtin/add.c:343
 msgid "update tracked files"
 msgstr "aktualizuj śledzone pliki"
 
-#: builtin/add.c:336
+#: builtin/add.c:344
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "znormalizuj ponownie końce wierszy w śledzonych plikach (zakłada -u)"
 
-#: builtin/add.c:337
+#: builtin/add.c:345
 msgid "record only the fact that the path will be added later"
 msgstr "zapisz tylko, że ścieżka zostanie dodana później"
 
-#: builtin/add.c:338
+#: builtin/add.c:346
 msgid "add changes from all tracked and untracked files"
 msgstr "dodaj zmiany z plików śledzonych i nieśledzonych"
 
-#: builtin/add.c:341
+#: builtin/add.c:349
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "pomiń ścieżki usunięte w drzewie roboczym (to samo, co --no-all)"
 
-#: builtin/add.c:343
+#: builtin/add.c:351
 msgid "don't add, only refresh the index"
 msgstr "nie dodawaj, tylko odśwież indeks"
 
-#: builtin/add.c:344
+#: builtin/add.c:352
 msgid "just skip files which cannot be added because of errors"
 msgstr "po prostu pomiń pliki, których nie można dodać z powodu błędów"
 
-#: builtin/add.c:345
+#: builtin/add.c:353
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "sprawdź na sucho, czy pliki o takich ścieżkach byłyby ignorowane"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:355 builtin/update-index.c:1004
 msgid "override the executable bit of the listed files"
 msgstr "wymuś bit wykonywalności podanych plików"
 
-#: builtin/add.c:349
+#: builtin/add.c:357
 msgid "warn when adding an embedded repository"
 msgstr "ostrzegaj przed dodawaniem wbudowanego repozytorium"
 
-#: builtin/add.c:351
+#: builtin/add.c:359
 msgid "backend for `git stash -p`"
 msgstr "silnik do „git stash -p”"
 
-#: builtin/add.c:369
+#: builtin/add.c:377
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9877,12 +10182,12 @@
 "\n"
 "Więcej informacji w „git help submodule”."
 
-#: builtin/add.c:397
+#: builtin/add.c:405
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "dodawanie wbudowanego repozytorium gita: %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:424
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9892,47 +10197,47 @@
 "Wyłącz ten komunikat wykonując\n"
 "„git config advice.addIgnoredFile false”"
 
-#: builtin/add.c:425
+#: builtin/add.c:433
 msgid "adding files failed"
 msgstr "dodawanie plików nie powiodło się"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:461 builtin/commit.c:345
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file i --interactive/--patch się wykluczają"
 
-#: builtin/add.c:470
+#: builtin/add.c:478
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file i --edit się wykluczają"
 
-#: builtin/add.c:482
+#: builtin/add.c:490
 msgid "-A and -u are mutually incompatible"
 msgstr "-A i -u się wykluczają"
 
-#: builtin/add.c:485
+#: builtin/add.c:493
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "Opcja --ignore-missing może być użyta tylko z --dry-run"
 
-#: builtin/add.c:489
+#: builtin/add.c:497
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "parametr --chmod „%s” musi być „-x” albo „+x”"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:515 builtin/checkout.c:1714 builtin/commit.c:351
+#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1569
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file i argumenty ze ścieżkami się wykluczają"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:522 builtin/checkout.c:1726 builtin/commit.c:357
+#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1575
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul wymaga --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:526
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Nic nie podano, nic nie dodano.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:528
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10189,7 +10494,7 @@
 msgstr "zezwól na uciekanie się do trójstronnego scalania, jeśli potrzebne"
 
 #: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/repack.c:334 builtin/stash.c:882
 msgid "be quiet"
 msgstr "mniej komunikatów"
 
@@ -10233,17 +10538,17 @@
 msgstr "przepuść przez git-apply"
 
 #: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:904 builtin/merge.c:261
 #: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
+#: builtin/rebase.c:1347 builtin/repack.c:345 builtin/repack.c:349
+#: builtin/repack.c:351 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:436 parse-options.h:154 parse-options.h:175
 #: parse-options.h:316
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: builtin/am.c:2269 builtin/branch.c:670 builtin/bugreport.c:136
+#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:470
 #: builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
@@ -10269,12 +10574,12 @@
 msgstr "pomiń obecną ścieżkę"
 
 #: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr "przywróć pierwotną gałąź i przerwij łatanie."
+msgid "restore the original branch and abort the patching operation"
+msgstr "przywróć pierwotną gałąź i przerwij łatanie"
 
 #: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "przerwij operację łatania, ale zostaw HEAD, gdzie jest."
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "przerwij operację łatania, ale zostaw HEAD, gdzie jest"
 
 #: builtin/am.c:2294
 msgid "show the patch being applied"
@@ -10289,12 +10594,12 @@
 msgstr "użyj bieżącego znacznika czasu jako daty utworzenia"
 
 #: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:538
+#: builtin/rebase.c:1400 builtin/revert.c:117 builtin/tag.c:451
 msgid "key-id"
 msgstr "id-klucza"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2304 builtin/rebase.c:539 builtin/rebase.c:1401
 msgid "GPG-sign commits"
 msgstr "podpisuj zapisy GPG"
 
@@ -10376,28 +10681,12 @@
 msgstr "git bisect--helper --bisect-reset [<zapis>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <stan> <rewizja> "
-"<dobre_określenie> <złe_określenie>"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <polecenie> "
-"<dobre_określenie> <złe_określenie>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 "git bisect--helper --bisect-next-check <dobre_określenie> <złe_określenie> "
 "[<określenie>]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10405,7 +10694,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10415,89 +10704,93 @@
 "good}=<określenie>] [--no-checkout] [--first-parent] [<złe> [<dobre>...]] "
 "[--] [<ścieżki>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<rewizja>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-state (good|old) [<rewizja>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <nazwa-pliku>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<rewizja>|<zakres>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "nie można otworzyć pliku „%s” w trybie „%s”"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "nie można pisać do pliku „%s”"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "„%s” nie jest prawidłowym sformułowaniem"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "nie można użyć wbudowanego polecenia „%s” jako sformułowania"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "nie można zmienić znaczenia sformułowania „%s”"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "użyj dwóch różnych sformułowań"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "Teraz nie przeszukujemy.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "„%s” nie jest prawidłowym zapisem"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr ""
 "nie można wybrać pierwotnego HEAD „%s”. Spróbuj „git bisect reset <zapis>”."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Błędny argument bisect_write: %s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "nie można uzyskać oid rewizji „%s”"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "nie można otworzyć pliku „%s”"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Nieprawidłowe polecenie: przeszukujesz teraz %s/%s"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10506,7 +10799,7 @@
 "Wtedy podaj przynajmniej jedną rewizję %s i jedną %s.\n"
 "Możesz użyć do tego „git bisect %s” i „git bisect %s”."
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10517,7 +10810,7 @@
 "Wtedy podaj przynajmniej jedną rewizję %s i jedną %s.\n"
 "Możesz użyć do tego „git bisect %s” i „git bisect %s”."
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "przeszukiwanie tylko z zapisem %s"
@@ -10526,15 +10819,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Czy na pewno [Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "nie zdefiniowano sformułowań"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10543,7 +10836,7 @@
 "Bieżące sformułowania to %s na stary stan\n"
 "i %s na nowy stan.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10552,54 +10845,54 @@
 "nieprawidłowy argument %s do „git bisect terms”.\n"
 "Wspierane opcje to: --term-good | --term-old i --term-bad | --term-new."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1014
 msgid "revision walk setup failed\n"
 msgstr "nie udało się przygotować przejścia rewizji\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "nie można otworzyć „%s” do dopisywania"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "„” nie jest prawidłowym sformułowaniem"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "nierozpoznana opcja: „%s”"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "„%s” nie wydaje się być prawidłową rewizją"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "złe HEAD — potrzeba HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "wybieranie „%s” nie powiodło się. Spróbuj „git bisect start <prawidłowa-"
 "gałąź>”."
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "nie przeszukam na drzewie cg-seek'owanym"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "złe HEAD — dziwna referencja symboliczna"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "nieprawidłowa referencja: „%s”"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Musisz rozpocząć przez „git bisect start”\n"
 
@@ -10607,93 +10900,101 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Chcesz, żeby to teraz zrobić [Y/n]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Wywołaj „--bisect-state” z przynajmniej jednym argumentem"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "„git bisect %s” przyjmuje tylko jeden argument."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:878
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Błędne wejście rev: %s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:912
+msgid "We are not bisecting."
+msgstr "Teraz nie przeszukujemy."
+
+#: builtin/bisect--helper.c:962
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "„%s”?? o czym ty w ogóle mówisz?"
+
+#: builtin/bisect--helper.c:974
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "nie można odczytać „%s” do odtwarzania"
+
+#: builtin/bisect--helper.c:1047
 msgid "reset the bisection state"
 msgstr "zresetuj stan przeszukiwania"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "wypisz stan przeszukiwania w BISECT_LOG"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "sprawdź i ustaw określenia w stanie przeszukiwania"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1049
 msgid "check whether bad or good terms exist"
 msgstr "sprawdź, czy istnieją złe lub dobre określenia"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1051
 msgid "print out the bisect terms"
 msgstr "wypisz tylko określenia przeszukiwania"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1053
 msgid "start the bisect session"
 msgstr "rozpocznij sesję przeszukiwania"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1055
 msgid "find the next bisection commit"
 msgstr "znajdź kolejny zapis do przeszukiwania"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"sprawdź kolejny stan przeszukiwania, i wtedy wybierz kolejny zapis do "
-"przeszukiwania"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1057
 msgid "mark the state of ref (or refs)"
 msgstr "oznacz stan referencji"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1059
+msgid "list the bisection steps so far"
+msgstr "wypisz dotychczasowe kroki przeszukiwania"
+
+#: builtin/bisect--helper.c:1061
+msgid "replay the bisection process from the given file"
+msgstr "odtwórz proces przeszukiwania z podanego pliku"
+
+#: builtin/bisect--helper.c:1063
+msgid "skip some commits for checkout"
+msgstr "pomiń niektóre zapisy do wybrania"
+
+#: builtin/bisect--helper.c:1065
 msgid "no log for BISECT_WRITE"
 msgstr "brak dziennika do BISECT_WRITE"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1080
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset wymaga jako argumentu albo niczego albo zapisu"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write wymaga 4 albo 5 argumentów"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms wymaga 3 argumentów"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1085
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check wymaga 2 albo 3 argumentów"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1091
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms wymaga maksymalnie jednego argumentu"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1100
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next wymaga braku argumentów"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next wymaga braku argumentów"
+#: builtin/bisect--helper.c:1111
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log wymaga braku argumentów"
+
+#: builtin/bisect--helper.c:1116
+msgid "no logfile given"
+msgstr "nie podano pliku dziennika"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10712,137 +11013,140 @@
 msgid "must end with a color"
 msgstr "musi się kończyć kolorem"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "błędny kolor „%s” w color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "nieprawidłowa wartość blame.coloring"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "nie znaleziono rewizji %s do pominięcia"
 
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "pokaż elementy oskarżenia w miarę znajdywania, przyrostowo"
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "nie pokazuj nazw obiektów w brzegowych zapisach (domyślnie wyłączone)"
+
 #: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Pokaż elementy oskarżenia w miarę znajdywania, przyrostowo"
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "nie traktuj zapisów-korzeni jako granic (domyślnie wyłączone)"
 
 #: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
-msgstr "Nie pokazuj nazw obiektów w brzegowych zapisach (domyślnie wyłączone)"
+msgid "show work cost statistics"
+msgstr "pokaż statystyki kosztu pracy"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "Nie traktuj zapisów-korzeni jako granic (domyślnie wyłączone)"
+#: builtin/blame.c:871 builtin/checkout.c:1503 builtin/clone.c:92
+#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:175
+#: builtin/merge.c:297 builtin/multi-pack-index.c:27 builtin/pull.c:119
+#: builtin/push.c:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "wymuś zgłaszanie postępu"
 
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "Pokaż statystyki kosztu pracy"
+msgid "show output score for blame entries"
+msgstr "pokaż wynik wyjściowy elementów oskarżenia"
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Wymuś zgłaszanie postępu"
+msgid "show original filename (Default: auto)"
+msgstr "pokazuj pierwotną nazwę pliku (Domyślnie: automatycznie)"
 
 #: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "Pokaż wynik wyjściowy elementów oskarżenia"
+msgid "show original linenumber (Default: off)"
+msgstr "pokaż pierwotny numer wiersza (domyślnie wyłączone)"
 
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr "Pokazuj pierwotną nazwę pliku (Domyślnie: automatycznie)"
+msgid "show in a format designed for machine consumption"
+msgstr "pokaż w formacie zaprojektowanym do przetwarzania maszynowego"
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
-msgstr "Pokaż pierwotny numer wiersza (domyślnie wyłączone)"
+msgid "show porcelain format with per-line commit information"
+msgstr "pokaż w porcelanowym formacie z informacją o zapisie w każdym wierszu"
 
 #: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "Pokaż w formacie zaprojektowanym do przetwarzania maszynowego"
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "użyj tego samego trybu wyjścia, co git-annotate (domyślnie wyłączone)"
 
 #: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr "Pokaż w porcelanowym formacie z informacją o zapisie w każdym wierszu"
+msgid "show raw timestamp (Default: off)"
+msgstr "pokaż surowy znacznik czasu (domyślnie wyłączone)"
 
 #: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "Użyj tego samego trybu wyjścia, co git-annotate (domyślnie wyłączone)"
+msgid "show long commit SHA1 (Default: off)"
+msgstr "pokaż długie SHA-1 zapisu (domyślnie wyłączone)"
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Pokaż surowy znacznik czasu (domyślnie wyłączone)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "nie wypisuj nazwiska autora i znacznika czasu (domyślnie wyłączone)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Pokaż długie SHA-1 zapisu (domyślnie wyłączone)"
+msgid "show author email instead of name (Default: off)"
+msgstr "pokaż adres e-mail autora zamiast nazwiska (domyślnie wyłączone)"
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Nie wypisuj nazwiska autora i znacznika czasu (domyślnie wyłączone)"
+msgid "ignore whitespace differences"
+msgstr "ignoruj różnice w białych znakach"
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr "Pokaż adres e-mail autora zamiast nazwiska (domyślnie wyłączone)"
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Ignoruj różnice w białych znakach"
-
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1812
 msgid "rev"
 msgstr "rewizja"
 
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "pomiń <rewizję> przy obwinianiu"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "pomiń rewizje z <pliku>"
+
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "Pomiń <rewizję> przy obwinianiu"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "Pomiń rewizje z <pliku>"
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr "koloruj inaczej zbędne metadane z poprzedniego wiersza"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "koloruj wiersze według wieku"
 
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "poświęć dodatkowe cykle, aby znaleźć lepsze dopasowanie"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "użyj rewizji z <pliku> zamiast wołać git-rev-list"
+
 #: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Poświęć dodatkowe cykle, aby znaleźć lepsze dopasowanie"
+msgid "use <file>'s contents as the final image"
+msgstr "użyj zawartości <pliku> jako ostatecznego obrazu"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Użyj rewizji z <pliku> zamiast wołać git-rev-list"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "Użyj zawartości <pliku> jako ostatecznego obrazu"
-
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "wynik"
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "znajdź kopie wierszy w plikach i pomiędzy nimi"
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "znajdź ruchy wierszy w plikach i pomiędzy nimi"
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr "Znajdź kopie wierszy w plikach i pomiędzy nimi"
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr "Znajdź ruchy wierszy w plikach i pomiędzy nimi"
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr "zakres"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
-msgstr "Przetwórz tylko zakres <start>,<end> lub funkcję :<nazwa-funkcji>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
+msgstr "przetwórz tylko zakres <start>,<end> lub funkcję :<nazwa-funkcji>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "nie można użyć --progress z --incremental ani formatami porcelanowymi"
 
@@ -10854,11 +11158,11 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "4 lata, 11 miesięcy temu"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
@@ -10866,7 +11170,7 @@
 msgstr[1] "plik %s ma tylko %lu wiersze"
 msgstr[2] "plik %s ma tylko %lu wierszy"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Obwinianie wierszy"
 
@@ -10934,120 +11238,110 @@
 msgid "Update of config-file failed"
 msgstr "Aktualizacja pliku konfiguracyjnego nie powiodła się"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "-a i -d się wykluczają"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Nie odnaleziono obiektu zapisu HEAD"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Nie można usunąć gałęzi „%s” wybranej w „%s”"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "Nie znaleziono gałęzi śledzącej „%s”"
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "nie znaleziono gałęzi „%s”."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Błąd usuwania śledzącej gałęzi „%s”"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Błąd usuwania gałęzi „%s”"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Usunięto gałąź śledzącą %s (wskazywała %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Usunięto gałąź %s (wskazywała %s).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:438 builtin/tag.c:61
 msgid "unable to parse format string"
 msgstr "nie można przetworzyć łańcucha formatu"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:469
 msgid "could not resolve HEAD"
 msgstr "nie można rozwiązać HEAD"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:475
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) wskazuje poza refs/heads/"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:490
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Gałąź %s jest przestawiana na %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:494
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Gałąź %s jest przeszukiwana w %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:511
 msgid "cannot copy the current branch while not on any."
 msgstr "nie można skopiować bieżącej gałęzi, gdy nie ma żadnej bieżącej."
 
-#: builtin/branch.c:504
+#: builtin/branch.c:513
 msgid "cannot rename the current branch while not on any."
 msgstr "nie można zmienić nazwy bieżącej gałęzi, gdy nie ma żadnej bieżącej."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:524
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nieprawidłowa nazwa gałęzi: „%s”"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:553
 msgid "Branch rename failed"
 msgstr "Zmiana nazwy gałęzi nie powiodła się"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:555
 msgid "Branch copy failed"
 msgstr "Kopiowanie gałęzi nie powiodło się"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:559
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Skopiowano źle nazwaną gałąź „%s”"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:562
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Poprawiono nazwę gałęzi „%s”"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:568
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Nazwa gałęzi zmieniona na %s, ale czoło HEAD nie jest zaktualizowane!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:577
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "Zmieniono nazwę gałęzi, ale aktualizacja pliku konfiguracyjnego nie powiodła "
 "się"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:579
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "Skopiowano gałąź, ale aktualizacja pliku konfiguracyjnego nie powiodła się"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:595
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11058,180 +11352,180 @@
 "  %s\n"
 "Wiersze zaczynające się od „%c” zostaną wycięte.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:629
 msgid "Generic options"
 msgstr "Opcje ogólne"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:631
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "pokaż skrót i temat; podaj dwukrotnie, aby wypisać gałąź nadrzędną"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:632
 msgid "suppress informational messages"
 msgstr "pomiń komunikaty informacyjne"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:633
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "ustaw tryb śledzenia (zobacz git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:635
 msgid "do not use"
 msgstr "nie używaj"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:637 builtin/rebase.c:534
 msgid "upstream"
 msgstr "zdalne-repozytorium"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:637
 msgid "change the upstream info"
 msgstr "zmień gałąź nadrzędną"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:638
 msgid "unset the upstream info"
 msgstr "usuń informacje o gałęzi nadrzędnej"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:639
 msgid "use colored output"
 msgstr "użyj kolorowego wyjścia"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:640
 msgid "act on remote-tracking branches"
 msgstr "działaj na gałęziach śledzących"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:642 builtin/branch.c:644
 msgid "print only branches that contain the commit"
 msgstr "wypisz tylko gałęzie zawierające ten zapis"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:643 builtin/branch.c:645
 msgid "print only branches that don't contain the commit"
 msgstr "wypisz tylko gałęzie nie zawierające tego zapisu"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:648
 msgid "Specific git-branch actions:"
 msgstr "Działania typowe dla git-branch:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:649
 msgid "list both remote-tracking and local branches"
 msgstr "wypisz i śledzące i lokalne gałęzie"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:651
 msgid "delete fully merged branch"
 msgstr "usuń całkowicie scaloną gałąź"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:652
 msgid "delete branch (even if not merged)"
 msgstr "usuń gałąź (nawet niescaloną)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:653
 msgid "move/rename a branch and its reflog"
 msgstr "przenieś gałąź i jej dziennik referencji / zmień ich nazwę"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:654
 msgid "move/rename a branch, even if target exists"
 msgstr "przenieś gałąź / zmień jej nazwę, nawet jeśli cel istnieje"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:655
 msgid "copy a branch and its reflog"
 msgstr "skopiuj gałąź i jej dziennik referencji"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:656
 msgid "copy a branch, even if target exists"
 msgstr "skopiuj gałąź, nawet jeśli cel istnieje"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:657
 msgid "list branch names"
 msgstr "wypisz nazwy gałęzi"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:658
 msgid "show current branch name"
 msgstr "pokaż nazwę bieżącej gałęzi"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:659
 msgid "create the branch's reflog"
 msgstr "utwórz dziennik referencji gałęzi"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:661
 msgid "edit the description for the branch"
 msgstr "edytuj opis gałęzi"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:662
 msgid "force creation, move/rename, deletion"
 msgstr "wymuś utworzenie, przeniesienie/zmianę nazwy, usunięcie"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:663
 msgid "print only branches that are merged"
 msgstr "wypisz tylko scalone gałęzie"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:664
 msgid "print only branches that are not merged"
 msgstr "wypisz tylko niescalone gałęzie"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:665
 msgid "list branches in columns"
 msgstr "wypisz gałęzie w kolumnach"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: builtin/branch.c:667 builtin/for-each-ref.c:42 builtin/notes.c:415
 #: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:434
+#: builtin/tag.c:466
 msgid "object"
 msgstr "obiekt"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:668
 msgid "print only branches of the object"
 msgstr "wypisz tylko gałęzie obiektu"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:669 builtin/for-each-ref.c:48 builtin/tag.c:473
 msgid "sorting and filtering are case insensitive"
 msgstr "sortowanie i filtrowanie nie uwzględniają wielkości liter"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:670 builtin/for-each-ref.c:38 builtin/tag.c:471
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format do użycia na wyjściu"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:693 builtin/clone.c:790
 msgid "HEAD not found below refs/heads!"
 msgstr "nie znaleziono HEAD w refs/heads!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:717
 msgid "--column and --verbose are incompatible"
 msgstr "--column i --verbose się wykluczają"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:732 builtin/branch.c:788 builtin/branch.c:797
 msgid "branch name required"
 msgstr "wymagana nazwa gałęzi"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:764
 msgid "Cannot give description to detached HEAD"
 msgstr "Nie można nadać opisu odłączonemu HEAD"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:769
 msgid "cannot edit description of more than one branch"
 msgstr "nie można edytować opisu więcej niż jednej gałęzi"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:776
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Jeszcze nie ma zapisów na gałęzi „%s”."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:779
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Nie ma gałęzi „%s”."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:794
 msgid "too many branches for a copy operation"
 msgstr "za dużo gałęzi do operacji kopiowania"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:803
 msgid "too many arguments for a rename operation"
 msgstr "za dużo argumentów do operacji zmiany nazwy"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:808
 msgid "too many arguments to set new upstream"
 msgstr "za dużo argumentów do ustawienia nadrzędnej gałęzi"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:812
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11239,32 +11533,32 @@
 "nie można ustawić gałęzi nadrzędnej HEAD na %s, kiedy nie wskazuje ono na "
 "gałąź."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:815 builtin/branch.c:838
 #, c-format
 msgid "no such branch '%s'"
 msgstr "nie ma takiej gałęzi „%s”"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:819
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "gałąź „%s” nie istnieje"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:832
 msgid "too many arguments to unset upstream"
 msgstr "za dużo argumentów do usunięcia nadrzędnej gałęzi"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:836
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "nie można usunąć ustawienia gałęzi nadrzędnej HEAD, kiedy nie wskazuje ono "
 "żadnej gałęzi."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:842
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Gałąź „%s” nie ma informacji o gałęzi nadrzędnej"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:852
 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>?"
@@ -11272,7 +11566,7 @@
 "Opcje -a i -r do „git branch” nie przyjmują nazwy gałęzi.\n"
 "Czy chodziło o: -a | -r --list <wzorzec>?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:856
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11391,19 +11685,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <plik> [<referencja>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3495
 msgid "do not show progress meter"
 msgstr "nie pokazuj wskaźnika postępu"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3497
 msgid "show progress meter"
 msgstr "pokazuj wskaźnik postępu"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3499
 msgid "show progress meter during object writing phase"
 msgstr "pokaż miernik postępu podczas fazy zapisywania obiektów"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3502
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "podobne do --all-progress, kiedy pokazany jest wskaźnik postępu"
 
@@ -11547,8 +11841,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "zakończ wpisy wejścia i wyjścia znakiem NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1499 builtin/gc.c:549
+#: builtin/worktree.c:489
 msgid "suppress progress reporting"
 msgstr "nie zgłaszaj postępu"
 
@@ -11601,54 +11895,54 @@
 msgid "no contacts specified"
 msgstr "nie podano kontaktów"
 
-#: builtin/checkout-index.c:139
+#: builtin/checkout-index.c:152
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<opcje>] [--] [<plik>...]"
 
-#: builtin/checkout-index.c:156
+#: builtin/checkout-index.c:169
 msgid "stage should be between 1 and 3 or all"
 msgstr "przygotowanie powinno być pomiędzy 1 a 3 lub „all”"
 
-#: builtin/checkout-index.c:173
+#: builtin/checkout-index.c:186
 msgid "check out all files in the index"
 msgstr "wybierz wszystkie pliki z indeksu"
 
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:187
 msgid "force overwrite of existing files"
 msgstr "wymuś nadpisanie istniejących plików"
 
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:189
 msgid "no warning for existing files and files not in index"
 msgstr "nie ostrzegaj przed istniejącymi plikami i plikami nie w indeksie"
 
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:191
 msgid "don't checkout new files"
 msgstr "nie wybieraj nowych plików"
 
-#: builtin/checkout-index.c:180
+#: builtin/checkout-index.c:193
 msgid "update stat information in the index file"
 msgstr "zaktualizuj informacje stat w pliku indeksu"
 
-#: builtin/checkout-index.c:184
+#: builtin/checkout-index.c:197
 msgid "read list of paths from the standard input"
 msgstr "odczytaj listę ścieżek ze standardowego wejścia"
 
-#: builtin/checkout-index.c:186
+#: builtin/checkout-index.c:199
 msgid "write the content to temporary files"
 msgstr "zapisz zawartość do plików tymczasowych"
 
-#: builtin/checkout-index.c:187 builtin/column.c:31
+#: builtin/checkout-index.c:200 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:757
+#: builtin/worktree.c:717
 msgid "string"
 msgstr "ciąg znaków"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:201
 msgid "when creating files, prepend <string>"
 msgstr "przy tworzeniu plików, dodaj <łańcuch> z przodu"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:203
 msgid "copy out the files from named stage"
 msgstr "wykopiuj pliki z nazwanego przygotowania"
 
@@ -11754,16 +12048,16 @@
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "nie można użyć „%s” ani „%s” z %s"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:543 builtin/checkout.c:550
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "ścieżka „%s” jest niescalona"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:718
 msgid "you need to resolve your current index first"
 msgstr "musisz najpierw rozwiązać bieżący indeks"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:772
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11772,50 +12066,50 @@
 "nie można kontynuować z przygotowanymi zmianami w następujących plikach:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:865
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "nie można wykonać reflog na „%s”: %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:907
 msgid "HEAD is now at"
 msgstr "HEAD wskazuje teraz na"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:911 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "nie można zaktualizować HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:915
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Zresetuj gałąź „%s”\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:918
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Już jesteś na „%s”\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:922
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Przełączono na gałąź „%s” i zresetowano ją\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:924 builtin/checkout.c:1355
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Przełączono na nową gałąź „%s”\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:926
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Przełączono na gałąź „%s”\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:977
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... i %d innych.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:983
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11843,7 +12137,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1002
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11876,19 +12170,19 @@
 " git branch <nazwa-nowej-gałęzi> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1037
 msgid "internal error in revision walk"
 msgstr "wewnętrzny błąd w przechodzeniu rewizji"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1041
 msgid "Previous HEAD position was"
 msgstr "Poprzednim wskazaniem HEAD było"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1081 builtin/checkout.c:1350
 msgid "You are on a branch yet to be born"
 msgstr "Jesteś na gałęzi, która dopiero ma powstać"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1163
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11897,7 +12191,7 @@
 "„%s” może być jednocześnie lokalnym plikiem i gałęzią śledzącą.\n"
 "Użyj -- (i opcjonalnie --no-guess), żeby ujednoznacznić"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1170
 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"
@@ -11917,51 +12211,51 @@
 "<nazw> preferowały jedno zdalne repozytorium, rozważ ustawienie\n"
 "checkout.defaultRemote=origin w swoich ustawieniach."
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1180
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "„%s” pasuje do wielu (%d) gałęzi śledzących"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1246
 msgid "only one reference expected"
 msgstr "oczekiwano tylko jednej referencji"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1263
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "oczekiwano tylko jednej referencji, podano %d."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1309 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "nieprawidłowa referencja: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1322 builtin/checkout.c:1688
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "referencja nie jest drzewem: %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1369
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "oczekiwano gałęzi, otrzymano tag „%s”"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1371
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "oczekiwano gałęzi, otrzymano zdalną gałąź „%s”"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1372 builtin/checkout.c:1380
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "oczekiwano gałęzi, otrzymano „%s”"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1375
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "oczekiwano gałęzi, otrzymano zapis „%s”"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1391
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11969,7 +12263,7 @@
 "Nie można przełączyć gałęzi w trakcie scalania\n"
 "Rozważ „git merge --quit” lub „git worktree add”."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1395
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11977,7 +12271,7 @@
 "Nie można przełączyć gałęzi w trakcie sesji am\n"
 "Rozważ „git am --quit” lub „git worktree add”."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1399
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11985,7 +12279,7 @@
 "Nie można przełączyć gałęzi w trakcie przestawiania\n"
 "Rozważ „git rebase --quit” lub „git worktree add”."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1403
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11993,7 +12287,7 @@
 "Nie można przełączyć gałęzi w trakcie dobierania\n"
 "Rozważ „git cherry-pick --quit” lub „git worktree add”."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1407
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12001,144 +12295,137 @@
 "Nie można przełączyć gałęzi w trakcie odwracania\n"
 "Rozważ „git revert --quit” lub „git worktree add”."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1411
 msgid "you are switching branch while bisecting"
 msgstr "zmiana gałęzi w trakcie przeszukiwania"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1418
 msgid "paths cannot be used with switching branches"
 msgstr "ścieżki nie mogą być podane z przełączaniem gałęzi"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1421 builtin/checkout.c:1425 builtin/checkout.c:1429
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "„%s” nie może być użyte z przełączaniem gałęzi"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1433 builtin/checkout.c:1436 builtin/checkout.c:1439
+#: builtin/checkout.c:1444 builtin/checkout.c:1449
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "„%s” i „%s” wykluczają się"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1446
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "„%s” nie może przyjąć <punktu-startowego>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1454
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Nie można przełączyć gałęzi na nie-zapis „%s”"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1461
 msgid "missing branch or commit argument"
 msgstr "brakuje argumentu gałęzi lub zapisu"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "wymuś zgłaszanie postępu"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1504
 msgid "perform a 3-way merge with the new branch"
 msgstr "dokonaj trójstronnego scalenia z nową gałęzią"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1505 builtin/log.c:1799 parse-options.h:322
 msgid "style"
 msgstr "styl"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1506
 msgid "conflict style (merge or diff3)"
 msgstr "styl konfliktów (merge lub diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1518 builtin/worktree.c:486
 msgid "detach HEAD at named commit"
 msgstr "odłącz HEAD na podanym zapisie"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1519
 msgid "set upstream info for new branch"
 msgstr "ustaw gałąź nadrzędną nowej gałęzi"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1521
 msgid "force checkout (throw away local modifications)"
 msgstr "wymuś wybranie (wyrzuć lokalne zmiany)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1523
 msgid "new-branch"
 msgstr "nowa-gałąź"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1523
 msgid "new unparented branch"
 msgstr "nowa gałąź bez rodzica"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1525 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "aktualizuj ignorowane pliki (domyślnie)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1528
 msgid "do not check if another worktree is holding the given ref"
 msgstr "nie sprawdzaj, czy inne drzewo robocze trzyma podaną referencję"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1541
 msgid "checkout our version for unmerged files"
 msgstr "wybierz „naszą” wersję niescalonych plików"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1544
 msgid "checkout their version for unmerged files"
 msgstr "wybierz „ich” wersję niescalonych plików"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1548
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "nie ograniczaj ścieżek tylko do rzadkich elementów"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1603
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c i --orphan się wykluczają"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1607
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p i --overlay się wykluczają"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1644
 msgid "--track needs a branch name"
 msgstr "--track potrzebuje nazwy gałęzi"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1649
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "brakuje nazwy gałęzi; spróbuj -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1681
 #, c-format
 msgid "could not resolve %s"
 msgstr "nie można rozwiązać %s"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1697
 msgid "invalid path specification"
 msgstr "nieprawidłowa ścieżka"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1704
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "„%s” nie jest zapisem, a nie można z niego utworzyć gałęzi „%s”"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1708
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach nie przyjmuje argumentu ścieżki „%s”"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1717
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file i --detach się wykluczają"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1720 builtin/reset.c:325 builtin/stash.c:1566
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file i --patch się wykluczają"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1733
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12146,70 +12433,70 @@
 "git checkout: --ours/--theirs, --force i --merge się wykluczają, gdy\n"
 "wybieranie z indeksu."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1738
 msgid "you must specify path(s) to restore"
 msgstr "musisz podać ścieżkę (ścieżki) do przywrócenia"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: builtin/checkout.c:1764 builtin/checkout.c:1766 builtin/checkout.c:1815
+#: builtin/checkout.c:1817 builtin/clone.c:122 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:482
+#: builtin/worktree.c:484
 msgid "branch"
 msgstr "gałąź"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1765
 msgid "create and checkout a new branch"
 msgstr "utwórz i wybierz nową gałąź"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1767
 msgid "create/reset and checkout a branch"
 msgstr "utwórz/zresetuj i wybierz gałąź"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1768
 msgid "create reflog for new branch"
 msgstr "utwórz dziennik referencji nowej gałęzi"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1770
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "spróbuj zgadnąć „git checkout <nieistniejąca-gałąź>” (domyślnie)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1771
 msgid "use overlay mode (default)"
 msgstr "użyj trybu nakładki (domyślnie)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1816
 msgid "create and switch to a new branch"
 msgstr "utwórz i przełącz na nową gałąź"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1818
 msgid "create/reset and switch to a branch"
 msgstr "utwórz/zresetuj i przełącz na gałąź"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1820
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "spróbuj zgadnąć „git switch <nieistniejąca-gałąź>”"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1822
 msgid "throw away local modifications"
 msgstr "wyrzuć lokalne zmiany"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1856
 msgid "which tree-ish to checkout from"
 msgstr "z którego drzewa wybrać"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1858
 msgid "restore the index"
 msgstr "przywróć indeks"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1860
 msgid "restore the working tree (default)"
 msgstr "przywróć drzewo robocze (domyślnie)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1862
 msgid "ignore unmerged entries"
 msgstr "pomiń niescalone elementy"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1863
 msgid "use overlay mode"
 msgstr "użyj trybu nakładki"
 
@@ -12355,8 +12642,8 @@
 msgstr "usuwaj całe katalogi"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/grep.c:922 builtin/log.c:184 builtin/log.c:186
+#: builtin/ls-files.c:573 builtin/name-rev.c:526 builtin/name-rev.c:528
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "wzorzec"
@@ -12452,7 +12739,7 @@
 msgstr "użyj --reference tylko podczas klonowania"
 
 #: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3561 builtin/repack.c:357
 msgid "name"
 msgstr "nazwa"
 
@@ -12468,7 +12755,7 @@
 msgid "path to git-upload-pack on the remote"
 msgstr "ścieżka do git-upload-pack na zdalnej maszynie"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:126 builtin/fetch.c:176 builtin/grep.c:861
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "głębokość"
@@ -12477,7 +12764,7 @@
 msgid "create a shallow clone of that depth"
 msgstr "utwórz płytki klon o tej głębokości"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:128 builtin/fetch.c:178 builtin/pack-objects.c:3550
 #: builtin/pull.c:211
 msgid "time"
 msgstr "czas"
@@ -12486,12 +12773,12 @@
 msgid "create a shallow clone since a specific time"
 msgstr "utwórz płytki klon od podanego czasu"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/fetch.c:203
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1323
 msgid "revision"
 msgstr "rewizja"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:131 builtin/fetch.c:181 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "pogłęb historię płytkiego klonu pomijając rewizję"
 
@@ -12526,22 +12813,22 @@
 msgid "set config inside the new repository"
 msgstr "ustaw konfigurację w nowym repozytorium"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
 #: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
 msgid "server-specific"
 msgstr "zależne-od-serwera"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/clone.c:143 builtin/fetch.c:198 builtin/ls-remote.c:77
 #: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
 msgid "option to transmit"
 msgstr "nadaj opcję"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:144 builtin/fetch.c:199 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "używaj tylko adresów IPv4"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:146 builtin/fetch.c:201 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "używaj tylko adresów IPv6"
@@ -12642,115 +12929,115 @@
 msgid "cannot unlink temporary alternates file"
 msgstr "nie można wykonać unlink na tymczasowym pliku alternatywnych położeń"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:993 builtin/receive-pack.c:2493
 msgid "Too many arguments."
 msgstr "Zbyt dużo argumentów."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:997
 msgid "You must specify a repository to clone."
 msgstr "Musisz określić repozytorium do sklonowania."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1010
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "opcje --bare i --origin %s wykluczają się."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1013
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare i --separate-git-dir się wykluczają."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1026
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "repozytorium „%s” nie istnieje"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1030 builtin/fetch.c:1951
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "głębokość %s nie jest liczbą dodatnią"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1040
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "docelowa ścieżka „%s” już istnieje i nie jest pustym katalogiem."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1046
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "ścieżka repozytorium „%s” już istnieje i nie jest pustym katalogiem."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1060
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "drzewo robocze „%s” już istnieje."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1075 builtin/clone.c:1096 builtin/difftool.c:271
+#: builtin/log.c:1986 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "nie można utworzyć wiodących katalogów „%s”"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1080
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "nie można utworzyć katalogu drzewa roboczego „%s”"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1100
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klonowanie do suchego repozytorium „%s”...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1102
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klonowanie do „%s”...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1126
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr "clone --recursive nie pasuje do --reference ani do --reference-if-able"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1170 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "„%s” nie jest prawidłową nazwą zdalnego repozytorium"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1211
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth jest ignorowana w lokalnych klonach; użyj zamiast tego file://"
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1213
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since jest ignorowana w lokalnych klonach; użyj zamiast tego "
 "file://"
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1215
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude jest ignorowane w lokalnych klonach; użyj zamiast tego "
 "file://"
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1217
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "--filter jest ignorowany w lokalnych klonach; użyj zamiast tego file://"
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1220
 msgid "source repository is shallow, ignoring --local"
 msgstr "źródłowe repozytorium jest płytkie, ignorowanie --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1225
 msgid "--local is ignored"
 msgstr "--local jest ignorowane"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1315 builtin/clone.c:1323
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Nie znaleziono zdalnej gałęzi %s w repozytorium %s"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1326
 msgid "You appear to have cloned an empty repository."
 msgstr "Wygląda na to, że sklonowano puste repozytorium."
 
@@ -12809,14 +13096,14 @@
 msgstr "nie znaleziono katalogu obiektów pasującego do „%s”"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:187 builtin/log.c:1768
 msgid "dir"
 msgstr "katalog"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
-msgstr "Katalog obiektów do przechowania grafu"
+msgid "the object directory to store the graph"
+msgstr "katalog obiektów do przechowania grafu"
 
 #: builtin/commit-graph.c:83
 msgid "if the commit-graph is split, only verify the tip file"
@@ -12904,7 +13191,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "zignorowano powtórzonego rodzica %s"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:557
 #, c-format
 msgid "not a valid object name %s"
 msgstr "nieprawidłowa nazwa obiektu %s"
@@ -12932,9 +13219,9 @@
 msgid "id of a parent commit object"
 msgstr "identyfikator obiektu zapisu rodzica"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:282
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1537
+#: builtin/tag.c:445
 msgid "message"
 msgstr "komunikat"
 
@@ -12946,7 +13233,7 @@
 msgid "read commit log message from file"
 msgstr "odczytaj komunikat dziennika zapisu z pliku"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "podpisz zapis GPG"
@@ -13101,7 +13388,7 @@
 msgid "could not lookup commit %s"
 msgstr "nie odnaleziono zapisu %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:729 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(czytanie komunikatu dziennika ze standardowego wejścia)\n"
@@ -13198,7 +13485,7 @@
 msgid "Error building trees"
 msgstr "Błąd budowania drzew"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1011 builtin/tag.c:308
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Należy podać komunikat przy użyciu opcji -m lub -F.\n"
@@ -13290,7 +13577,7 @@
 msgstr "wersja"
 
 #: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/worktree.c:679
 msgid "machine-readable output"
 msgstr "wyjście czytelne dla maszyny"
 
@@ -13304,7 +13591,7 @@
 
 #: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
 #: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1412 parse-options.h:336
 msgid "mode"
 msgstr "tryb"
 
@@ -13362,7 +13649,7 @@
 msgid "Commit message options"
 msgstr "Opcje komunikatu zapisu"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1501 builtin/merge.c:286 builtin/tag.c:447
 msgid "read message from file"
 msgstr "odczytaj komunikat z pliku"
 
@@ -13374,7 +13661,7 @@
 msgid "override author for commit"
 msgstr "nadpisz autora w zapisie"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1503 builtin/gc.c:550
 msgid "date"
 msgstr "data"
 
@@ -13383,7 +13670,7 @@
 msgstr "nadpisz datę zapisu"
 
 #: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:90
 msgid "commit"
 msgstr "zapis"
 
@@ -13411,7 +13698,7 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "ten zapis jest teraz mojego autorstwa (do użycia z -C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1510 builtin/log.c:1743 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "dodaj końcówkę Signed-off-by"
@@ -14050,41 +14337,41 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base działa tylko z dwoma zapisami"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "„%s”: nie jest zwykłym plikiem ani dowiązaniem"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "nieprawidłowa opcja: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: brak podstawy scalenia"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "To nie jest repozytorium gita"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:682
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "podano nieprawidłowy obiekt „%s”."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "podano ponad dwa bloby: „%s”"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "otrzymano nieobsługiwany obiekt „%s”."
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: wiele podstaw scalenia, używanie %s"
@@ -14265,40 +14552,40 @@
 msgstr "wybierz traktowanie komunikatów zapisów w alternatywnym kodowaniu"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "Zrzuć znaczniki to tego pliku"
+msgid "dump marks to this file"
+msgstr "zrzuć znaczniki to tego pliku"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
-msgstr "Wczytaj znaczniki z tego pliku"
+msgid "import marks from this file"
+msgstr "wczytaj znaczniki z tego pliku"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "Wczytaj znaczniki z tego pliku, jeśli istnieje"
+msgid "import marks from this file if it exists"
+msgstr "wczytaj znaczniki z tego pliku, jeśli istnieje"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "Zmyśl tagującego w tagach, które go nie mają"
+msgid "fake a tagger when tags lack one"
+msgstr "zmyśl tagującego w tagach, które go nie mają"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "Wypisz pełne drzewo dla każdego zapisu"
+msgid "output full tree for each commit"
+msgstr "wypisz pełne drzewo dla każdego zapisu"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "Użyj funkcji done, żeby zakończyć strumień"
+msgid "use the done feature to terminate the stream"
+msgstr "użyj funkcji done, żeby zakończyć strumień"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "Pomiń wypisywanie danych binarnych"
+msgid "skip output of blob data"
+msgstr "pomiń wypisywanie danych binarnych"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1815
 msgid "refspec"
 msgstr "referencja"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "Zastosuj referencję do wyeksportowanych referencji"
+msgid "apply refspec to exported refs"
+msgstr "zastosuj referencję do wyeksportowanych referencji"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14313,18 +14600,18 @@
 msgstr "zamień <z> na <na> w zanonimizowanym wyjściu"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
-"Odwołaj się do rodziców, którzy nie są w strumieniu szybkiego eksportu, "
+"odwołaj się do rodziców, którzy nie są w strumieniu szybkiego eksportu, "
 "według identyfikatora obiektu"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "Pokaż pierwotne identyfikatory obiektów blobów/zapisów"
+msgid "show original object ids of blobs/commits"
+msgstr "pokaż pierwotne identyfikatory obiektów blobów/zapisów"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "Oznacz tagi identyfikatorami znaczników"
+msgid "label tags with mark ids"
+msgstr "oznacz tagi identyfikatorami znaczników"
 
 #: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
@@ -14364,7 +14651,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "funkcja „%s” zabroniona na wejściu bez --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Utworzono plik blokady, ale go nie zgłoszono: %s"
@@ -14385,94 +14672,98 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opcje>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:120
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel nie może być ujemne"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:143 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "pobierz ze wszystkich zdalnych repozytoriów"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:145 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "ustaw gałąź nadrzędną do git pull/fetch"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:147 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "dopisz do .git/FETCH_HEAD zamiast nadpisywać"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:149
+msgid "use atomic transaction to update references"
+msgstr "zażądaj atomowej transakcji do aktualizacji referencji"
+
+#: builtin/fetch.c:151 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "ścieżka do wysyłania paczki po zdalnej stronie"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:152
 msgid "force overwrite of local reference"
 msgstr "wymuś nadpisanie lokalnej referencji"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:154
 msgid "fetch from multiple remotes"
 msgstr "pobierz z wielu zdalnych repozytoriów"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:156 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "pobierz wszystkie tagi i powiązane obiekty"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:158
 msgid "do not fetch all tags (--no-tags)"
 msgstr "nie pobieraj wszystkich tagów (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:160
 msgid "number of submodules fetched in parallel"
 msgstr "liczba pod-modułów pobieranych równolegle"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:162 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "przytnij gałęzie śledzące usunięte ze zdalnego repozytorium"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:164
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "przytnij lokalne tagi, których już nie ma w zdalnym repozytorium, i nadpisz "
 "zmienione tagi"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:165 builtin/fetch.c:190 builtin/pull.c:122
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:166
 msgid "control recursive fetching of submodules"
 msgstr "steruj rekurencyjnym pobieraniem pod-modułów"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:171
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "zapisz pobrane referencje do pliku FETCH_HEAD"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:172 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "zachowaj pobraną paczkę"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:174
 msgid "allow updating of HEAD ref"
 msgstr "zezwól na aktualizację referencji HEAD"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:177 builtin/fetch.c:183 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "pogłęb historię płytkiego klonu"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:179 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "pogłęb historię płytkiego repozytorium według czasu"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:185 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "przekształć w pełne repozytorium"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:188
 msgid "prepend this to submodule path output"
 msgstr "dodaj to przed wyjściem ścieżki pod-modułu"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:191
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14480,100 +14771,100 @@
 "domyślnie w rekurencyjnym pobieraniu pod-modułów (niższy priorytet niż pliki "
 "konfiguracji)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:195 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "przyjmuj referencje, które aktualizują .git/shallow"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:196 builtin/pull.c:226
 msgid "refmap"
 msgstr "mapowanie"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:197 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "podaj mapę referencji do pobrania"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:204 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "zgłaszaj, że mamy tylko obiekty osiągalne z tego obiektu"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:207 builtin/fetch.c:209
 msgid "run 'maintenance --auto' after fetching"
 msgstr "wykonaj „maintenance --auto” po pobraniu"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:211 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr ""
 "sprawdź na wszystkich zaktualizowanych gałęziach, czy wystąpiły wymuszone "
 "aktualizacje"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:213
 msgid "write the commit-graph after fetching"
 msgstr "wypisz graf zapisów po pobraniu"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:215
 msgid "accept refspecs from stdin"
 msgstr "przyjmuj referencje ze standardowego wejścia"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:526
 msgid "Couldn't find remote ref HEAD"
 msgstr "Nie znaleziono zdalnej referencji HEAD"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:697
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "ustawienie fetch.output zawiera nieprawidłową wartość %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:796
 #, c-format
 msgid "object %s not found"
 msgstr "nie znaleziono obiektu %s"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:800
 msgid "[up to date]"
 msgstr "[aktualne]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:813 builtin/fetch.c:829 builtin/fetch.c:901
 msgid "[rejected]"
 msgstr "[odrzucono]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:814
 msgid "can't fetch in current branch"
 msgstr "nie można pobrać na bieżącej gałęzi"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:824
 msgid "[tag update]"
 msgstr "[aktualizacja tagu]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:825 builtin/fetch.c:862 builtin/fetch.c:884
+#: builtin/fetch.c:896
 msgid "unable to update local ref"
 msgstr "nie można zaktualizować lokalnej referencji"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:829
 msgid "would clobber existing tag"
 msgstr "nadpisałoby istniejący tag"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:851
 msgid "[new tag]"
 msgstr "[nowy tag]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:854
 msgid "[new branch]"
 msgstr "[nowa gałąź]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:857
 msgid "[new ref]"
 msgstr "[nowa referencja]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:896
 msgid "forced update"
 msgstr "wymuszona aktualizacja"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:901
 msgid "non-fast-forward"
 msgstr "nieprzewinięte"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1005
 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"
@@ -14584,7 +14875,7 @@
 "użyj flagi „--show-forced-updates” lub wykonaj\n"
 "„git fetch.showForcedUpdates true”."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1009
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14597,22 +14888,22 @@
 "false”\n"
 " aby uniknąć tego sprawdzenia.\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1041
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s nie wysłał wszystkich potrzebnych obiektów\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1069
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "odrzucanie %s, bo nie można aktualizować płytkich korzeni"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1146 builtin/fetch.c:1297
 #, c-format
 msgid "From %.*s\n"
 msgstr "Z %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1168
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14621,56 +14912,56 @@
 "nie można zaktualizować niektórych lokalnych referencji;\n"
 " spróbuj wykonać „git remote prune %s”, aby usunąć stare niepasujące gałęzie"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1267
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s będzie wiszący)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1268
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s stał się wiszący)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1300
 msgid "[deleted]"
 msgstr "[usunięto]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1301 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(brak)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1324
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Odmawiam pobrania na bieżącą gałąź %s nie-suchego repozytorium"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1343
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "W opcji „%s” wartość „%s” jest nieprawidłowa przy %s"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1346
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Opcja „%s” jest ignorowana przez %s\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1558
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "wykryto wiele gałęzi, wyklucza się to z --set-upstream"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1573
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "nie ustawiam gałęzi nadrzędnej w gałęzi śledzącej"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1575
 msgid "not setting upstream for a remote tag"
 msgstr "nie ustawiam głównego nurtu w zdalnym tagu"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1577
 msgid "unknown branch type"
 msgstr "nieznany rodzaj gałęzi"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1579
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14678,22 +14969,22 @@
 "nie znaleziono gałęzi źródłowej.\n"
 "należy podać dokładnie jedną gałąź z opcją --set-upstream."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1708 builtin/fetch.c:1771
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Pobieranie %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1718 builtin/fetch.c:1773 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Nie można pobrać %s"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1730
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "nie można pobrać „%s” (kod wyjścia: %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1834
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14701,44 +14992,44 @@
 "Nie ustawiono zdalnego repozytorium.  Podaj adres URL lub\n"
 "nazwę zdalnego repozytorium, z którego mają być pobrane nowe rewizje."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1870
 msgid "You need to specify a tag name."
 msgstr "Musisz określić nazwę tagu."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1935
 msgid "Negative depth in --deepen is not supported"
 msgstr "ujemna głębokość w --deepen nie jest wspierana"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1937
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepend i --depth się wykluczają"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:1942
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth i --unshallow wykluczają się"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:1944
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow w pełnym repozytorium nie ma sensu"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:1961
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all nie przyjmuje argumentów z repozytoriów"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:1963
 msgid "fetch --all does not make sense with refspecs"
 msgstr "--all i referencje się wykluczają"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:1972
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Nie ma takiego zdalnego repozytorium ani ich grupy: %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:1979
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "pobieranie grupy i podanie referencji nie ma sensu"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:1997
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -14746,7 +15037,12 @@
 "można użyć --filter tylko ze zdalnym repozytorium ustawionym w extensions."
 "partialclone"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2001
+msgid "--atomic can only be used when fetching from one remote"
+msgstr ""
+"można użyć --atomic tylko przy pobieraniu z jednego zdalnego repozytorium"
+
+#: builtin/fetch.c:2005
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
 "można użyć --stdin tylko przy pobieraniu z jednego zdalnego repozytorium"
@@ -14813,7 +15109,7 @@
 msgid "show only <n> matched refs"
 msgstr "pokazuj tylko <n> pasujących referencji"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:39 builtin/tag.c:472
 msgid "respect format colors"
 msgstr "uszanuj kolory formatu"
 
@@ -14853,32 +15149,32 @@
 msgid "missing --config=<config>"
 msgstr "brakuje --config=<konfiguracja>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:130 builtin/fsck.c:131
 msgid "unknown"
 msgstr "nieznane"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:83 builtin/fsck.c:103
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "błąd w %s %s: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:97
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "ostrzeżenie w %s %s:%s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:126 builtin/fsck.c:129
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "zepsute łącze z %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:138
 msgid "wrong object type in link"
 msgstr "zły rodzaj obiektu w łączu"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:154
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14887,211 +15183,211 @@
 "zepsute łącze z %7s %s\n"
 "             do %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:265
 #, c-format
 msgid "missing %s %s"
 msgstr "brakujący %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:292
 #, c-format
 msgid "unreachable %s %s"
 msgstr "nieosiągalny %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:312
 #, c-format
 msgid "dangling %s %s"
 msgstr "wiszące %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:322
 msgid "could not create lost-found"
 msgstr "nie można utworzyć biura obiektów znalezionych"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:333
 #, c-format
 msgid "could not finish '%s'"
 msgstr "nie można zakończyć „%s”"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:350
 #, c-format
 msgid "Checking %s"
 msgstr "Sprawdzanie %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:388
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Sprawdzanie spójności (%d obiektów)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:407
 #, c-format
 msgid "Checking %s %s"
 msgstr "Sprawdzanie %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:412
 msgid "broken links"
 msgstr "zepsute łącza"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:421
 #, c-format
 msgid "root %s"
 msgstr "korzeń %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:429
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "otagowano %s %s (%s) w %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:458
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: brakujący lub uszkodzony obiekt"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:483
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: nieprawidłowy element dziennika referencji %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:497
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Sprawdzanie dziennika referencji %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:531
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: nieprawidłowy wskaźnik SHA-1 %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:538
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: nie jest zapisem"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:592
 msgid "notice: No default references"
 msgstr "uwaga: Brak domyślnych referencji"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:607
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: brakujący lub uszkodzony obiekt: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:620
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: nie można przetworzyć obiektu: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:640
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "zły plik SHA-1: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:655
 msgid "Checking object directory"
 msgstr "Sprawdzanie katalogu obiektów"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:658
 msgid "Checking object directories"
 msgstr "Sprawdzanie katalogów obiektów"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:673
 #, c-format
 msgid "Checking %s link"
 msgstr "Sprawdzanie połączenia %s"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:678 builtin/index-pack.c:865
 #, c-format
 msgid "invalid %s"
 msgstr "błędny %s"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:685
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s wskazuje na coś dziwnego (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:691
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: oddzielone HEAD niczego nie wskazuje"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:695
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "uwaga: %s wskazuje nienarodzoną gałąź (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:707
 msgid "Checking cache tree"
 msgstr "Sprawdzanie drzewa pamięci podręcznej"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:712
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: nieprawidłowy wskaźnik SHA-1 w drzewie pamięci podręcznej"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:721
 msgid "non-tree in cache-tree"
 msgstr "nie-drzewo w drzewie pamięci podręcznej"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:752
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<opcje>] [<obiekt>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:758
 msgid "show unreachable objects"
 msgstr "pokazuj nieosiągalne obiekty"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:759
 msgid "show dangling objects"
 msgstr "pokaż wiszące obiekty"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:760
 msgid "report tags"
 msgstr "zgłaszaj tagi"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:761
 msgid "report root nodes"
 msgstr "zgłaszaj węzły korzenia"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:762
 msgid "make index objects head nodes"
 msgstr "dodaj obiekty indeksu do naczelnych węzłów"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:763
 msgid "make reflogs head nodes (default)"
 msgstr "dodaj dzienniki referencji do węzłów naczelnych (domyślnie)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:764
 msgid "also consider packs and alternate objects"
 msgstr "przejrzyj też paczki i obiekty alternatywne"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:765
 msgid "check only connectivity"
 msgstr "sprawdź tylko spójność"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:766 builtin/mktag.c:78
 msgid "enable more strict checking"
 msgstr "włącz ściślejsze sprawdzanie"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:768
 msgid "write dangling objects in .git/lost-found"
 msgstr "zapisz wiszące obiekty w .git/lost-found"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:769 builtin/prune.c:134
 msgid "show progress"
 msgstr "pokazuj postęp"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:770
 msgid "show verbose names for reachable objects"
 msgstr "pokaż rozwlekłe nazwy osiągalnych obiektów"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:829 builtin/index-pack.c:261
 msgid "Checking objects"
 msgstr "Sprawdzanie obiektów"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:857
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: brakujący obiekt"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:868
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "nieprawidłowy parametr: oczekiwano SHA-1, otrzymano „%s”"
@@ -15100,27 +15396,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<opcje>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Nie można wykonać fstat na %s: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "nie można przetworzyć wartości „%s” „%s”"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:58
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "nie można wykonać stat na „%s”"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:562
 #, c-format
 msgid "cannot read '%s'"
 msgstr "nie można odczytać „%s”"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15136,198 +15432,225 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "przytnij niewskazywane obiekty"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "bądź dokładniejszy (dłuższy czas działania)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "włącz automatyczne zbieranie śmieci"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "wymuś uruchomienie gc, nawet jeśli inne może być właśnie w trakcie"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "przepakuj wszystkie pozostałe paczki oprócz największej"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "nie można przetworzyć wartości gc.logexpiry %s"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "nie można przetworzyć wartości wygaśnięcia przycięć %s"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "Automatyczne pakowanie repozytorium w tle dla optymalnej wydajności.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Automatyczne pakowanie repozytorium dla optymalnej wydajności.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Zobacz „git help gc”, aby utrzymywać repozytorium ręcznie.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
 "gc już działa na maszynie „%s” pid %<PRIuMAX> (użyj --force, jeśli nie)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Jest za dużo nieosiągalnych luźnych obiektów; wykonaj „git prune”, aby je "
 "usunąć."
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<zadanie>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule nie jest dozwolone"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "nierozpoznany argument --schedule „%s”"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "nie można wypisać grafu zapisów"
 
-#: builtin/gc.c:901
+#: builtin/gc.c:914
 msgid "failed to fill remotes"
 msgstr "nie można wypełnić zdalnych repozytoriów"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1037
 msgid "failed to start 'git pack-objects' process"
 msgstr "nie można uruchomić procesu „git pack-objects”"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1054
 msgid "failed to finish 'git pack-objects' process"
 msgstr "nie można ukończyć procesu „git pack-objects”"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1106
 msgid "failed to write multi-pack-index"
 msgstr "nie można zapisać indeksu wielu paczek"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1124
 msgid "'git multi-pack-index expire' failed"
 msgstr "„git multi-pack-index expire” nie powiodło się"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1185
 msgid "'git multi-pack-index repack' failed"
 msgstr "„git multi-pack-index repack” nie powiodło się"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1194
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 "pomijanie zadania przyrostowego przepakowania, bo core.multiPackIndex jest "
 "wyłączone"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1298
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "istnieje plik blokady „%s”, pomijanie porządków"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1328
 #, c-format
 msgid "task '%s' failed"
 msgstr "zadanie „%s” nie powiodło się"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1410
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "„%s” nie jest prawidłowym zadaniem"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1415
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "nie można wybrać wiele razy zadania „%s”"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1430
 msgid "run tasks based on the state of the repository"
 msgstr "uruchamiaj zadania w oparciu o stan repozytorium"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1431
 msgid "frequency"
 msgstr "częstotliwość"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1432
 msgid "run tasks based on frequency"
 msgstr "uruchamiaj zadania w oparciu o częstotliwość"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1435
 msgid "do not report progress or other information over stderr"
 msgstr ""
 "nie zgłaszaj postępu ani innych informacji na standardowe wyjście "
 "diagnostyczne"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1436
 msgid "task"
 msgstr "zadanie"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1437
 msgid "run a specific task"
 msgstr "uruchom konkretne zadanie"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1454
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "--auto i --schedule=<frequency> się wykluczają"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1497
 msgid "failed to run 'git config'"
 msgstr "nie można wykonać „git config”"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "inny proces planuje porządki w tle"
+#: builtin/gc.c:1562
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "nie można rozwinąć ścieżki „%s”"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1591
+msgid "failed to start launchctl"
+msgstr "nie można uruchomić launchctl"
+
+#: builtin/gc.c:1628
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "nie można utworzyć katalogów na „%s”"
+
+#: builtin/gc.c:1689
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "nie można wydostać usługi %s"
+
+#: builtin/gc.c:1760
+msgid "failed to create temp xml file"
+msgstr "nie można utworzyć tymczasowego pliku XML"
+
+#: builtin/gc.c:1850
+msgid "failed to start schtasks"
+msgstr "nie można uruchomić schtasks"
+
+#: builtin/gc.c:1894
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr "nie można wykonać „crontab -l”; ten system może nie wspierać crona"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1911
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr "nie można wykonać „crontab”; ten system może nie wspierać crona"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1915
 msgid "failed to open stdin of 'crontab'"
 msgstr "nie można otworzyć standardowego wejścia „crontab”"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1956
 msgid "'crontab' died"
 msgstr "„crontab” padł"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1990
+msgid "another process is scheduling background maintenance"
+msgstr "inny proces planuje porządki w tle"
+
+#: builtin/gc.c:2009
 msgid "failed to add repo to global config"
 msgstr "nie można dodać repozytorium do globalnej konfiguracji"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2019
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <pod-polecenie> [<opcje>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2038
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "nieprawidłowe pod-polecenie: %s"
@@ -15336,12 +15659,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opcje>] [-e] <wzorzec> [<rewizja>...] [[--] <ścieżka>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: nie można utworzyć wątku: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "podano nieprawidłową liczbę wątków (%d) do %s"
@@ -15350,258 +15673,258 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1589 builtin/index-pack.c:1792
+#: builtin/pack-objects.c:2944
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "brak obsługi wątków, ignorowanie %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:601 builtin/grep.c:641
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "nie można odczytać drzewa (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:656
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "nie można przeprowadzić grep z obiektu rodzaju %s"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:737
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "przełącznik „%c” oczekuje wartości liczbowej"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:836
 msgid "search in index instead of in the work tree"
 msgstr "wyszukaj w indeksie zamiast w drzewie roboczym"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:838
 msgid "find in contents not managed by git"
 msgstr "znajdź w zawartości nie zarządzanej przez gita"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:840
 msgid "search in both tracked and untracked files"
 msgstr "szukaj i w plikach śledzonych i nieśledzonych"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:842
 msgid "ignore files specified via '.gitignore'"
 msgstr "pomiń pliki wymienione w „.gitignore”"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:844
 msgid "recursively search in each submodule"
 msgstr "wyszukaj rekurencyjnie w każdym pod-module"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:847
 msgid "show non-matching lines"
 msgstr "pokaż niepasujące wiersze"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:849
 msgid "case insensitive matching"
 msgstr "ignorowanie wielkości liter przy dopasowaniu"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:851
 msgid "match patterns only at word boundaries"
 msgstr "dopasuj wzorce tylko na brzegach słów"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:853
 msgid "process binary files as text"
 msgstr "przetwarzaj pliki binarne jako tekst"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:855
 msgid "don't match patterns in binary files"
 msgstr "nie dopasowuj wzorców w plikach binarnych"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "process binary files with textconv filters"
 msgstr "przetwarzaj pliki binarne filtrami textconv"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "search in subdirectories (default)"
 msgstr "wyszukaj w pod-katalogach (domyślnie)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:862
 msgid "descend at most <depth> levels"
 msgstr "zejdź o co najwyżej <głębokość> poziomów"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:866
 msgid "use extended POSIX regular expressions"
 msgstr "użyj rozszerzonych wyrażeń regularnych POSIX"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "use basic POSIX regular expressions (default)"
 msgstr "użyj podstawowych wyrażeń regularnych POSIX (domyślnie)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:872
 msgid "interpret patterns as fixed strings"
 msgstr "interpretuj wzorce jako stałe łańcuchy"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:875
 msgid "use Perl-compatible regular expressions"
 msgstr "użyj wyrażeń regularnych kompatybilnych z Perlem"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "show line numbers"
 msgstr "pokaż numery wierszy"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:879
 msgid "show column number of first match"
 msgstr "pokaż numer kolumny pierwszego dopasowania"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:880
 msgid "don't show filenames"
 msgstr "nie pokazuj nazw plików"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:881
 msgid "show filenames"
 msgstr "pokaż nazwy plików"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:883
 msgid "show filenames relative to top directory"
 msgstr "pokaż nazwy plików względem głównego katalogu"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "show only filenames instead of matching lines"
 msgstr "pokazuj tylko nazwy plików zamiast pasujących wierszy"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:887
 msgid "synonym for --files-with-matches"
 msgstr "zamiennik na --files-with-matches"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:890
 msgid "show only the names of files without match"
 msgstr "pokazuj tylko nazwy plików bez trafień"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:892
 msgid "print NUL after filenames"
 msgstr "wypisuj NUL po nazwach plików"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show only matching parts of a line"
 msgstr "pokaż tylko pasujące fragmenty wiersza"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show the number of matches instead of matching lines"
 msgstr "pokaż liczbę dopasowań zamiast pasujących wierszy"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:898
 msgid "highlight matches"
 msgstr "podświetl dopasowania"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:900
 msgid "print empty line between matches from different files"
 msgstr "wypisz pusty wiersz pomiędzy dopasowaniami z różnych plików"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:902
 msgid "show filename only once above matches from same file"
 msgstr "pokaż nazwę pliku tylko raz nad dopasowaniami z jednego pliku"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:905
 msgid "show <n> context lines before and after matches"
 msgstr "pokaż <n> wierszy kontekstu przed dopasowaniami i po nich"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "show <n> context lines before matches"
 msgstr "pokaż <n> wierszy kontekstu przed dopasowaniami"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:910
 msgid "show <n> context lines after matches"
 msgstr "pokaż <n> wierszy kontekstu po dopasowaniach"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:912
 msgid "use <n> worker threads"
 msgstr "użyj <n> wątków roboczych"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "shortcut for -C NUM"
 msgstr "skrót na -C ILE"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "show a line with the function name before matches"
 msgstr "pokaż wiersz z nazwą funkcji przed dopasowaniami"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show the surrounding function"
 msgstr "pokaż okalającą funkcję"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "read patterns from file"
 msgstr "wczytaj wzorce z pliku"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:923
 msgid "match <pattern>"
 msgstr "dopasuj <wzorzec>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:925
 msgid "combine patterns specified with -e"
 msgstr "łącz wzorce podane przez -e"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "indicate hit with exit status without output"
 msgstr "zgłoś trafienie kodem wyjścia bez wypisywania"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "show only matches from files that match all patterns"
 msgstr "pokaż tylko dopasowania z plików, które pasują do wszystkich wzorców"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "pokaż drzewo przetwarzania w wyrażeniu grepa"
-
-#: builtin/grep.c:944
+#: builtin/grep.c:942
 msgid "pager"
 msgstr "czytnik"
 
-#: builtin/grep.c:944
+#: builtin/grep.c:942
 msgid "show matching files in the pager"
 msgstr "pokaż pasujące pliki w czytniku"
 
-#: builtin/grep.c:948
+#: builtin/grep.c:946
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "pozwól wykonać grep(1) (ignorowane w tej wersji)"
 
-#: builtin/grep.c:1014
+#: builtin/grep.c:1012
 msgid "no pattern given"
 msgstr "nie podano wzorca"
 
-#: builtin/grep.c:1050
+#: builtin/grep.c:1048
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index i --untracked wykluczają się z rewizjami"
 
-#: builtin/grep.c:1058
+#: builtin/grep.c:1056
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "nie można rozwiązać rewizji: %s"
 
-#: builtin/grep.c:1088
+#: builtin/grep.c:1086
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked niewspierane z --recurse-submodules"
 
-#: builtin/grep.c:1092
+#: builtin/grep.c:1090
 msgid "invalid option combination, ignoring --threads"
 msgstr "nieprawidłowe połączenie opcji, pomijanie --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1093 builtin/pack-objects.c:3672
 msgid "no threads support, ignoring --threads"
 msgstr "brak obsługi wątków, ignorowanie --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1096 builtin/index-pack.c:1586 builtin/pack-objects.c:2941
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "podano nieprawidłową liczbę wątków (%d)"
 
-#: builtin/grep.c:1132
+#: builtin/grep.c:1130
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager działa tylko w drzewie roboczym"
 
-#: builtin/grep.c:1158
+#: builtin/grep.c:1156
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached i --untracked wykluczają się z --no-index"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1159
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked i --cached się wykluczają"
+
+#: builtin/grep.c:1165
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "Nie można użyć --[no-]exclude-standard do śledzonej zawartości"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1173
 msgid "both --cached and trees are given"
 msgstr "podano jednocześnie --cached i drzewa"
 
@@ -15734,12 +16057,12 @@
 msgid "no info viewer handled the request"
 msgstr "żaden czytnik podręcznika info nie obsłużył żądania"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:340
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "„%s” jest skrótem na „%s”"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:372
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "zły łańcuch alias.%s: %s"
@@ -15788,7 +16111,7 @@
 msgid "used more bytes than were available"
 msgstr "użyto więcej bajtów niż było dostępnych"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:324 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "paczka za duża na obecną definicję off_t"
 
@@ -15796,7 +16119,7 @@
 msgid "pack exceeds maximum allowed size"
 msgstr "paczka przekracza maksymalny dozwolony rozmiar"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:342
 #, c-format
 msgid "unable to create '%s'"
 msgstr "nie można utworzyć „%s”"
@@ -15922,7 +16245,7 @@
 msgid "Resolving deltas"
 msgstr "Rozwiązywanie delt"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2707
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "nie można utworzyć wątku: %s"
@@ -15962,10 +16285,10 @@
 msgid "local object %s is corrupt"
 msgstr "lokalny obiekt %s jest uszkodzony"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1445
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "nazwa pliku paczki „%s” nie kończy się na „.pack”"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "nazwa pliku paczki „%s” nie kończy się na „.%s”"
 
 #: builtin/index-pack.c:1469
 #, c-format
@@ -15977,34 +16300,38 @@
 msgid "cannot close written %s file '%s'"
 msgstr "nie można zamknąć zapisanego pliku %s „%s”"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1503
 msgid "error while closing pack file"
 msgstr "błąd podczas zamykania pliku paczki"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1517
 msgid "cannot store pack file"
 msgstr "nie można zapisać pliku paczki"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1525
 msgid "cannot store index file"
 msgstr "nie można zapisać pliku indeksu"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1534
+msgid "cannot store reverse index file"
+msgstr "nie można zapisać pliku odwrotnego indeksu"
+
+#: builtin/index-pack.c:1580 builtin/pack-objects.c:2952
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "zła wartość pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Nie można otworzyć istniejącego pliku paczki „%s”"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1652
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Nie można otworzyć istniejącego pliku idx paczki dla „%s”"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1700
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
@@ -16012,7 +16339,7 @@
 msgstr[1] "nie delta: %d obiekty"
 msgstr[2] "nie delta: %d obiektów"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1707
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
@@ -16020,38 +16347,38 @@
 msgstr[1] "długość łańcucha = %d: %lu obiekty"
 msgstr[2] "długość łańcucha = %d: %lu obiektów"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1749
 msgid "Cannot come back to cwd"
 msgstr "Nie można wrócić do cwd"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1803 builtin/index-pack.c:1806
+#: builtin/index-pack.c:1822 builtin/index-pack.c:1826
 #, c-format
 msgid "bad %s"
 msgstr "błędny %s"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1832 builtin/init-db.c:392 builtin/init-db.c:625
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "nieznany algorytm skrótu „%s”"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1851
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin i --stdin wykluczają się"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1853
 msgid "--stdin requires a git repository"
 msgstr "--stdin wymaga repozytorium gita"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1855
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format i --stdin wykluczają się"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1870
 msgid "--verify with no packfile name given"
 msgstr "--verify bez podanej nazwy pliku paczki"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1936 builtin/unpack-objects.c:582
 msgid "fsck error in pack objects"
 msgstr "błąd fsck w obiektach paczek"
 
@@ -16269,130 +16596,130 @@
 msgid "no input file given for in-place editing"
 msgstr "nie podano pliku wejściowego do edycji w miejscu"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opcje>] [<zakres-rewizji>] [[--] <ścieżka>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opcje>] <obiekt>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "nieprawidłowa opcja --decorate: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "pokaż źródło"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
-msgstr "Użyj pliku mapy adresów"
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "użyj pliku mapy adresów"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "dekoruj tylko referencje pasujące do <wzorca>"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "nie dekoruj referencji pasujących do <wzorca>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "opcje dekoracyjne"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
-"Śledź ewolucję zakresu wierszy <start>,<end> lub funkcji :<nazwa-funkcji> w "
+"śledź ewolucję zakresu wierszy <start>,<end> lub funkcji :<nazwa-funkcji> w "
 "<pliku>"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<zakres>:<plik> i ścieżki się wykluczają"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Ostateczne wyjście: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:566
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: zły plik"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:581 builtin/log.c:671
 #, c-format
 msgid "could not read object %s"
 msgstr "nie można odczytać obiektu %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:696
 #, c-format
 msgid "unknown type: %d"
 msgstr "nieznany rodzaj: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:841
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: nieprawidłowy tryb listu motywacyjnego z opisu"
 
-#: builtin/log.c:855
+#: builtin/log.c:848
 msgid "format.headers without value"
 msgstr "format.headers bez wartości"
 
-#: builtin/log.c:984
+#: builtin/log.c:977
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "nie można otworzyć pliku łatki %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:994
 msgid "need exactly one range"
 msgstr "potrzeba dokładnie jednego zakresu"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1004
 msgid "not a range"
 msgstr "to nie jest zakres"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1168
 msgid "cover letter needs email format"
 msgstr "list motywacyjny wymaga formatu e-mail"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1174
 msgid "failed to create cover-letter file"
 msgstr "nie można utworzyć pliku z listem motywacyjnym"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1261
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "szalone in-reply-to: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1288
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opcje>] [<od-kiedy> | <zakres-rewizji>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1346
 msgid "two output directories?"
 msgstr "dwa katalogi wyjściowe?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1497 builtin/log.c:2317 builtin/log.c:2319 builtin/log.c:2331
 #, c-format
 msgid "unknown commit %s"
 msgstr "nieznany zapis %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1508 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "nie można rozwiązać „%s” jako prawidłowej referencji"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1517
 msgid "could not find exact merge base"
 msgstr "nie znaleziono dokładnej podstawy scalania"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1527
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16403,288 +16730,288 @@
 "zdalną gałąź.\n"
 "Albo możesz podać zapis podstawy ręcznie przez --base=<id-zapisu-podstawy>"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1550
 msgid "failed to find exact merge base"
 msgstr "nie znaleziono dokładnej podstawy scalania"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1567
 msgid "base commit should be the ancestor of revision list"
 msgstr "podstawowy zapis powinien być przodkiem listy rewizji"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1577
 msgid "base commit shouldn't be in revision list"
 msgstr "podstawowy zapis nie powinien być na liście rewizji"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1635
 msgid "cannot get patch id"
 msgstr "nie można uzyskać identyfikatora łatki"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1692
 msgid "failed to infer range-diff origin of current series"
 msgstr "nie można wywnioskować źródła różnic zakresów z bieżącej serii"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1694
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "użycie „%s” jako źródła różnic zakresów z bieżącej serii"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1738
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "użyj [PATCH n/m] nawet przy pojedynczej łatce"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1741
 msgid "use [PATCH] even with multiple patches"
 msgstr "użyj [PATCH] nawet przy wielu łatkach"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1745
 msgid "print patches to standard out"
 msgstr "wypisz łatki na standardowe wyjście"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1747
 msgid "generate a cover letter"
 msgstr "wygeneruj list motywacyjny"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1749
 msgid "use simple number sequence for output file names"
 msgstr "użyj tylko numerów w nazwach wynikowych plików"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1750
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1751
 msgid "use <sfx> instead of '.patch'"
 msgstr "użyj <sfx> zamiast „.patch”"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1753
 msgid "start numbering patches at <n> instead of 1"
 msgstr "zacznij numerować łatki od <n> zamiast od 1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1755
 msgid "mark the series as Nth re-roll"
 msgstr "oznacz serię jako N-te podejście"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1757
 msgid "max length of output filename"
 msgstr "maksymalna długość nazwy wynikowego pliku"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Użyj [RFC PATCH] zamiast [PATCH]"
+#: builtin/log.c:1759
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "użyj [RFC PATCH] zamiast [PATCH]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1762
 msgid "cover-from-description-mode"
 msgstr "tryb-listu-z-opisu"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1763
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "wygeneruj części listu motywacyjnego w oparciu o opis gałęzi"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Użyj [<prefiksu>] zamiast [PATCH]"
+#: builtin/log.c:1765
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "użyj [<prefiksu>] zamiast [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1768
 msgid "store resulting files in <dir>"
 msgstr "zachowaj wynikowe pliki w <katalogu>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1771
 msgid "don't strip/add [PATCH]"
 msgstr "nie usuwaj/nie dodawaj [PATCH]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1774
 msgid "don't output binary diffs"
 msgstr "nie wypisuj binarnych różnic"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1776
 msgid "output all-zero hash in From header"
 msgstr "wypisz skrót z samych zer w nagłówku Od"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1778
 msgid "don't include a patch matching a commit upstream"
 msgstr "nie uwzględniaj łatki pasującej do już istniejącego zapisu"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1780
 msgid "show patch format instead of default (patch + stat)"
 msgstr "pokaż format łatki zamiast domyślnego (łatka + statystyki)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1782
 msgid "Messaging"
 msgstr "Wiadomości"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1783
 msgid "header"
 msgstr "nagłówek"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1784
 msgid "add email header"
 msgstr "dodaj nagłówek e-maila"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1785 builtin/log.c:1786
 msgid "email"
 msgstr "e-mail"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1785
 msgid "add To: header"
 msgstr "dodaj pole Do:"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1786
 msgid "add Cc: header"
 msgstr "dodaj pole DW:"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1787
 msgid "ident"
 msgstr "tożsamość"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1788
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "ustaw adres Od na <tożsamość> (lub tożsamość składającego, jeśli nie podano)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1790
 msgid "message-id"
 msgstr "id-wiadomości"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1791
 msgid "make first mail a reply to <message-id>"
 msgstr "niech pierwszy list będzie odpowiedzią na <id-wiadomości>"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1792 builtin/log.c:1795
 msgid "boundary"
 msgstr "granica/boundary"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1793
 msgid "attach the patch"
 msgstr "załącz łatkę"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1796
 msgid "inline the patch"
 msgstr "umieść łatkę w treści"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1800
 msgid "enable message threading, styles: shallow, deep"
 msgstr "zezwól na wątkowanie komunikatów, style: shallow, deep"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1802
 msgid "signature"
 msgstr "podpis"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1803
 msgid "add a signature"
 msgstr "dodaj podpis"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1804
 msgid "base-commit"
 msgstr "zapis-podstawy"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1805
 msgid "add prerequisite tree info to the patch series"
 msgstr "dodaj informacje o wymaganym początkowym drzewie do serii łatek"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1808
 msgid "add a signature from a file"
 msgstr "dodaj podpis z pliku"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1809
 msgid "don't print the patch filenames"
 msgstr "nie wypisuj nazw plików łatek"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1811
 msgid "show progress while generating patches"
 msgstr "pokaż postęp podczas generowania łatek"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1813
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "pokaż zmiany względem <rewizji> w liście motywacyjnym lub pojedynczej łatce"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1816
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "pokaż zmiany względem <referencji> w liście motywacyjnym lub pojedynczej "
 "łatce"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1818
 msgid "percentage by which creation is weighted"
 msgstr "procent, według jakiego ważone jest tworzenie"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1904
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "błędny wiersz tożsamości: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1919
 msgid "-n and -k are mutually exclusive"
 msgstr "-n i -k się wykluczają"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1921
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc i -k się wykluczają"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1929
 msgid "--name-only does not make sense"
 msgstr "--name-only nie ma sensu"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1931
 msgid "--name-status does not make sense"
 msgstr "--name-status nie ma sensu"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1933
 msgid "--check does not make sense"
 msgstr "--check nie ma sensu"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1955
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "--stdout, --output i --output-directory się wykluczają"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2078
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff wymaga --cover-letter lub pojedynczej łatki"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2082
 msgid "Interdiff:"
 msgstr "Różnice w różnicach:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2083
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Różnice w różnicach względem v%d:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2089
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor wymaga --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2093
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff wymaga --cover-letter lub pojedynczej łatki"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2101
 msgid "Range-diff:"
 msgstr "Różnice zakresów:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2102
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Różnice zakresów względem v%d:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2113
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "nie można odczytać pliku podpisu „%s”"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2149
 msgid "Generating patches"
 msgstr "Generowanie łatek"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2193
 msgid "failed to create output files"
 msgstr "nie można utworzyć plików wyjściowych"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2252
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<nadrzędna> [<czoło> [<limit>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2306
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16692,111 +17019,115 @@
 "Nie znaleziono śledzonej zdalnej gałęzi, podaj ręcznie <zdalne-"
 "repozytorium>.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:486
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<opcje>] [<plik>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:542
 msgid "identify the file status with tags"
 msgstr "opisz stan pliku tagami"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:544
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "użyj małych liter do plików o „założonej niezmienności”"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:546
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "użyj małych liter do plików „prawidłowo monitorowanych”"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:548
 msgid "show cached files in the output (default)"
 msgstr "pokaż w wyjściu zapamiętane pliki (domyślnie)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:550
 msgid "show deleted files in the output"
 msgstr "pokaż w wyjściu usunięte pliki"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:552
 msgid "show modified files in the output"
 msgstr "pokaż w wyjściu zmienione pliki"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:554
 msgid "show other files in the output"
 msgstr "pokazuj pliki innego typu w wyjściu"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:556
 msgid "show ignored files in the output"
 msgstr "pokaż w wyjściu ignorowane pliki"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:559
 msgid "show staged contents' object name in the output"
 msgstr "pokaż w wyjściu nazwę obiektu przygotowanej zawartości"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:561
 msgid "show files on the filesystem that need to be removed"
 msgstr "pokaż pliki w systemie plików, które należy skasować"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:563
 msgid "show 'other' directories' names only"
 msgstr "pokaż tylko nazwy nieśledzonych katalogów"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:565
 msgid "show line endings of files"
 msgstr "pokaż zakończenia wierszy w plikach"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:567
 msgid "don't show empty directories"
 msgstr "nie pokazuj pustych katalogów"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:570
 msgid "show unmerged files in the output"
 msgstr "pokaż niescalone pliki w wyjściu"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:572
 msgid "show resolve-undo information"
 msgstr "pokaż informacje o resolve-undo"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:574
 msgid "skip files matching pattern"
 msgstr "pomiń pliki spełniające kryteria"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:577
 msgid "exclude patterns are read from <file>"
 msgstr "wzorce wyłączające czytane są z <pliku>"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:580
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr ""
 "odczytaj dodatkowe wzorce wyłączające z poszczególnych katalogów w <pliku>"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:582
 msgid "add the standard git exclusions"
 msgstr "dodaj standardowe wyjątki gita"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:586
 msgid "make the output relative to the project top directory"
 msgstr "podawaj wyjście względem głównego katalogu projektu"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:589
 msgid "recurse through submodules"
 msgstr "schodź do pod-modułów"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:591
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "jeśli którykolwiek <plik> nie jest w indeksie, potraktuj to jako błąd"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:592
 msgid "tree-ish"
 msgstr "drzewo"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:593
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr "udawaj, że ścieżki usunięte po <drzewie> są nadal obecne"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:595
 msgid "show debugging data"
 msgstr "pokaż dane diagnostyczne"
 
+#: builtin/ls-files.c:597
+msgid "suppress duplicate entries"
+msgstr "ukryj podwójne wpisy"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16807,39 +17138,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<repozytorium> [<referencje>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "nie wyświetlaj adresu repozytorium"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1404
 msgid "exec"
 msgstr "program"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "ścieżka git-upload-pack na zdalnej maszynie"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "ogranicz do tagów"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "ogranicz do głównych gałęzi"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "nie pokazuj obranych tagów"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "weź pod uwagę url.<podstawa>.insteadOf"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "zwróć kod wyjścia 2, jeśli nie znaleziono pasujących referencji"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "pokaż referencję podłoża oprócz obiektu wskazywanego przez nią"
 
@@ -16996,191 +17327,191 @@
 msgid "Merging %s with %s\n"
 msgstr "Scalanie %s z %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<opcje>] [<zapis>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "przełącznik „m” wymaga wartości"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "opcja „%s” wymaga wartości"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Nie znaleziono strategii scalania „%s”.\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Dostępne strategie:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Dostępne niestandardowe strategie:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "nie pokazuj statystyk różnic pod koniec scalenia"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "pokaż statystyki różnic pod koniec scalenia"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(synonim do --stat)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "dodaj (co najwyżej <n>) wpisy z krótkiego dziennika do komunikatu zapisu "
 "scalenia"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "utwórz pojedynczy zapis zamiast scalać"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "złóż zapis, jeśli scalenie się powiedzie (domyślnie)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "edytuj komunikat przed złożeniem"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "zezwól na przewijanie (domyślne)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "przerwij, jeśli przewinięcie nie jest możliwe"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
-msgstr "weryfikuj, czy podane rozwiązanie ma prawidłową sygnaturę GPG"
+msgstr "zweryfikuj, czy podany zapis ma prawidłowy podpis GPG"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:541 builtin/rebase.c:1418 builtin/revert.c:114
 msgid "strategy"
 msgstr "strategia"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "strategia scalania"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "opcja=wartość"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "opcja wybranej strategii scalania"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "komunikat zapisu scalenia (do nieprzewiniętego scalenia)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "przerwij bieżące trwające scalanie"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "jak --abort, ale zostaw w spokoju indeks i drzewo robocze"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "kontynuuj bieżące trwające scalanie"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "zezwól na scalenie niepowiązanych historii"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "omiń skrypty pre-merge-commit i commit-msg"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "nie można wykonać dodania do schowka."
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "dodanie zmian do schowka nie powiodło się"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "nieprawidłowy obiekt: %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree nie powiodło się"
 
-#: builtin/merge.c:398
+#: builtin/merge.c:399
 msgid " (nothing to squash)"
 msgstr " (nic do spłaszczenia)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:410
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Spłaszczony zapis — nie aktualizowanie HEAD\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:460
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Brak komunikatu scalenia — nie aktualizowanie HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:511
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "„%s” nie wskazuje na zapis"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:598
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Zły łańcuch branch.%s.mergeoptions: %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:724
 msgid "Not handling anything other than two heads merge."
 msgstr "Nie rozpatrywanie niczego poza scalaniem dwóch czół."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:737
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Nieznana opcja merge-recursive: -X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:756 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "nie można zapisać %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:808
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Nie można odczytać „%s”"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:817
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr "Nie składanie scalenia; użyj „git commit”, aby ukończyć scalanie.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:823
 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"
@@ -17190,11 +17521,11 @@
 "zwłaszcza jeśli scala zaktualizowaną gałąź nadrzędną z gałęzią tematyczną.\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:828
 msgid "An empty message aborts the commit.\n"
 msgstr "Pusty komunikat przerywa zapis.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:831
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17203,73 +17534,73 @@
 "Wiersze zaczynające się od „%c” będą ignorowane, a pusty komunikat\n"
 "przerwie zapis.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:884
 msgid "Empty commit message."
 msgstr "Pusty komunikat zapisu."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:899
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Wspaniale.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:960
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Automatyczne scalanie nie powiodło się; napraw konflikty i złóż wynik.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:999
 msgid "No current branch."
 msgstr "Nie ma bieżącej gałęzi."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1001
 msgid "No remote for the current branch."
 msgstr "Bieżąca gałąź nie ma zdalnego repozytorium."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1003
 msgid "No default upstream defined for the current branch."
 msgstr "Nie zdefiniowano gałęzi nadrzędnej wobec bieżącej."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1008
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Brak gałęzi śledzącej dla %s z %s"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1065
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Błędna wartość „%s” w środowisku „%s”"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1168
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "to nie jest coś, co można scalić w %s: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1202
 msgid "not something we can merge"
 msgstr "to nie jest coś, co można scalić"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1312
 msgid "--abort expects no arguments"
 msgstr "--abort nie przyjmuje argumentów"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1316
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Nie ma scalenia, które można by przerwać (brak MERGE_HEAD)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1334
 msgid "--quit expects no arguments"
 msgstr "--quit nie przyjmuje argumentów"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1347
 msgid "--continue expects no arguments"
 msgstr "--continue nie przyjmuje argumentów"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1351
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Nie trwa żadne scalenie (brak MERGE_HEAD)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1367
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17277,7 +17608,7 @@
 "Nie zwieńczono scalania (MERGE_HEAD istnieje).\n"
 "Złóż swoje zmiany przed scaleniem."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1374
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17285,102 +17616,144 @@
 "Nie zwieńczono dobierania (CHERRY_PICK_HEAD istnieje).\n"
 "Złóż swoje zmiany przed scaleniem."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1377
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Nie zwieńczono dobierania (CHERRY_PICK_HEAD istnieje)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1391
 msgid "You cannot combine --squash with --no-ff."
 msgstr "--squash i --no-ff się wykluczają."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1393
 msgid "You cannot combine --squash with --commit."
 msgstr "--squash i --commit się wykluczają."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1409
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Nie podano zapisu, a nie ustawiono merge.defaultToUpstream."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1426
 msgid "Squash commit into empty head not supported yet"
 msgstr "Spłaszczenie zapisu w puste czoło nie jest jeszcze wspierane"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1428
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Nieprzewinięty zapis nie ma sensu przy pustym czele (HEAD) gałęzi"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1433
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s — nie jest czymś, co możemy scalić"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1435
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Można scalić tylko dokładnie jeden zapis w puste czoło"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1516
 msgid "refusing to merge unrelated histories"
 msgstr "odmawiam scalenia niepowiązanych historii"
 
-#: builtin/merge.c:1524
+#: builtin/merge.c:1525
 msgid "Already up to date."
 msgstr "Już aktualne."
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1535
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Aktualizowanie %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1581
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Próba naprawdę trywialnego scalenia w indeksie...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1588
 #, c-format
 msgid "Nope.\n"
 msgstr "O nie.\n"
 
-#: builtin/merge.c:1612
+#: builtin/merge.c:1613
 msgid "Already up to date. Yeeah!"
 msgstr "Już aktualne. Hurra!"
 
-#: builtin/merge.c:1618
+#: builtin/merge.c:1619
 msgid "Not possible to fast-forward, aborting."
 msgstr "Nie da się przewinąć, przerywanie."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1647 builtin/merge.c:1712
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Cofanie drzewa do nieskalanego stanu...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1651
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Próba strategii scalania %s...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1703
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Żadna strategia scalania nie podołała temu scalaniu.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1705
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Scalanie ze strategią %s nie powiodło się.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1714
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Użycie %s, żeby przygotować ręczne rozwiązywanie.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1728
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Automatyczne scalanie powiodło się; zatrzymano przez złożeniem, jak "
 "polecono\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:30
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "ostrzeżenie: wejście tagu nie przechodzi sprawdzenia fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "błąd: wejście tagu nie przechodzi sprawdzenia fsck: %s"
+
+#: builtin/mktag.c:44
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) nie powinno nigdy wyzwolić tej funkcji zwrotnej"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "nie można odczytać otagowanego obiektu „%s”"
+
+#: builtin/mktag.c:62
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "obiekt „%s” otagowany jako „%s”, ale jest rodzaju „%s”"
+
+#: builtin/mktag.c:99
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+"tag na standardowym wejściu nie przeszedł naszego ścisłego sprawdzenia fsck"
+
+#: builtin/mktag.c:102
+msgid "tag on stdin did not refer to a valid object"
+msgstr "tag na standardowym wejściu nie odnosił się do prawidłowego obiektu"
+
+#: builtin/mktag.c:105 builtin/tag.c:232
+msgid "unable to write tag file"
+msgstr "nie można zapisać pliku tagu"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17417,7 +17790,10 @@
 "podczas przepakowania zbierz pliki paczek mniejszego rozmiaru w porcję "
 "większą niż ten rozmiar"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
+#: builtin/multi-pack-index.c:50 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:575
 msgid "too many arguments"
 msgstr "za dużo argumentów"
 
@@ -17522,7 +17898,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "Zmiana nazwy z %s na %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:483
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "nie można zmienić nazwy „%s”"
@@ -17713,7 +18089,7 @@
 msgid "the note contents have been left in %s"
 msgstr "pozostawiono zawartość uwagi w %s"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:565
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "nie można otworzyć lub odczytać „%s”"
@@ -17753,12 +18129,6 @@
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "notes %s: odmawiam wykonania w %s (poza 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
-msgid "too many parameters"
-msgstr "zbyt wiele parametrów"
-
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
 msgid "no note found for object %s."
@@ -17816,8 +18186,8 @@
 msgstr "wczytaj ustawienia przepisywania dla <polecenia> (zakłada --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "zbyt mało argumentów"
+msgid "too few arguments"
+msgstr "za mało argumentów"
 
 #: builtin/notes.c:538
 #, c-format
@@ -17945,7 +18315,7 @@
 "wynik przez „git notes merge --commit”, lub przerwij scalanie przez „git "
 "notes merge --abort”.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:578
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Nie można rozwiązać „%s” jako prawidłowej referencji."
@@ -17963,7 +18333,7 @@
 msgid "read object names from the standard input"
 msgstr "odczytaj nazwy obiektów ze standardowego wejścia"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "nie usuwaj, tylko pokaż"
 
@@ -17979,7 +18349,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "użyj uwag z <referencja-uwagi>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1671
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "nieznana podkomenda: %s"
@@ -17998,102 +18368,116 @@
 "git pack-objects [<opcje>...] <baza> [< <lista-referencji> | < <lista-"
 "obiektów>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: nie odnaleziono %s, oczekiwano na pozycji %<PRIuMAX> w "
+"paczce %s"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "zły CRC spakowanego obiektu dla %s"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "uszkodzony spakowany obiekt dla %s"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "wykryto rekurencyjną deltę dla obiektu %s"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "zamówiono %u obiektów, oczekiwano %<PRIu32>"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "oczekiwano obiektu na pozycji %<PRIuMAX> w paczce %s"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "wyłączone zapisywanie bitmapy, paczki są dzielone według pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Zapisywanie obiektów"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "nie można wykonać stat na „%s”"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "wypisano %<PRIu32> obiektów, a oczekiwano %<PRIu32>"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1358
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "wyłączanie zapisywania bitmapy, niektóre obiekty nie są pakowane"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1806
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "przepełnienie podstawowego przesunięcia delty w paczce w %s"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1815
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "podstawowe przesunięcie delty poza zakresem w %s"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2096
 msgid "Counting objects"
 msgstr "Zliczanie obiektów"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2241
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "nie można przetworzyć nagłówka obiektu %s"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2311 builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2337
 #, c-format
 msgid "object %s cannot be read"
 msgstr "nie można odczytać obiektu %s"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2314 builtin/pack-objects.c:2341
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "niespójna długość obiektu %s (%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2351
 msgid "suboptimal pack - out of memory"
 msgstr "nieoptymalna paczka — brak pamięci"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2666
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Kompresja delt z użyciem do %d wątków"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2805
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "nie można spakować obiektów osiągalnych z tagu %s"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2891
 msgid "Compressing objects"
 msgstr "Kompresowanie obiektów"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2897
 msgid "inconsistency with delta count"
 msgstr "niespójność z liczbą delt"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:2976
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18102,14 +18486,14 @@
 "wartość uploadpack.blobpackfileuri musi być postaci „<skrót-obiektu> <skrót-"
 "paczki> <uri>” (otrzymano „%s”)"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:2979
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 "już ustawiono obiekt w innym uploadpack.blobpackfileuri (otrzymano „%s”)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3008
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18118,7 +18502,7 @@
 "oczekiwano identyfikatora obiektu krawędzi, otrzymano śmieci:\n"
 "%s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3014
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18127,235 +18511,235 @@
 "oczekiwano identyfikatora obiektu, otrzymano śmieci:\n"
 "%s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3112
 msgid "invalid value for --missing"
 msgstr "nieprawidłowa wartość --missing"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3171 builtin/pack-objects.c:3279
 msgid "cannot open pack index"
 msgstr "nie można otworzyć indeksu paczki"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3202
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "nie można przebadać wolnego obiektu w %s"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3287
 msgid "unable to force loose object"
 msgstr "nie można wymusić wolnego obiektu"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3380
 #, c-format
 msgid "not a rev '%s'"
 msgstr "nie jest rewizją „%s”"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3383
 #, c-format
 msgid "bad revision '%s'"
 msgstr "zła rewizja „%s”"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3408
 msgid "unable to add recent objects"
 msgstr "nie można dodać ostatnich obiektów"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3461
 #, c-format
 msgid "unsupported index version %s"
 msgstr "nieobsługiwana wersja indeksu %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3465
 #, c-format
 msgid "bad index version '%s'"
 msgstr "zła wersja indeksu „%s”"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3503
 msgid "<version>[,<offset>]"
 msgstr "<wersja>[,<pozycja>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3504
 msgid "write the pack index file in the specified idx format version"
 msgstr "zapisz plik indeksu paczek w podanej wersji formatu indeksu"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3507
 msgid "maximum size of each output pack file"
 msgstr "maksymalny rozmiar pojedynczego wyjściowego pliku paczki"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3509
 msgid "ignore borrowed objects from alternate object store"
 msgstr "pomiń pożyczone obiekty z alternatywnych zbiorów obiektów"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3511
 msgid "ignore packed objects"
 msgstr "ignoruj spakowane obiekty"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3513
 msgid "limit pack window by objects"
 msgstr "ogranicz okno paczki w obiektach"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3515
 msgid "limit pack window by memory in addition to object limit"
 msgstr "ogranicz okno paczki w pamięci oprócz limitu w obiektach"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3517
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "maksymalna długość łańcucha delt dopuszczona w wynikowej paczce"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3519
 msgid "reuse existing deltas"
 msgstr "użyj ponownie istniejących delt"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3521
 msgid "reuse existing objects"
 msgstr "użyj ponownie istniejących obiektów"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3523
 msgid "use OFS_DELTA objects"
 msgstr "użyj obiektów OFS_DELTA"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3525
 msgid "use threads when searching for best delta matches"
 msgstr "użyj wątków przy wyszukiwaniu najlepiej dopasowanych delt"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3527
 msgid "do not create an empty pack output"
 msgstr "nie można utworzyć pustej paczki na wyjściu"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3529
 msgid "read revision arguments from standard input"
 msgstr "odczytaj argumenty rewizji ze standardowego wejścia"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3531
 msgid "limit the objects to those that are not yet packed"
 msgstr "ogranicz obiekty do jeszcze nie spakowanych"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3534
 msgid "include objects reachable from any reference"
 msgstr "uwzględnij obiekty osiągalne z dowolnej referencji"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3537
 msgid "include objects referred by reflog entries"
 msgstr "uwzględnij obiekty z odniesieniami z wpisów dziennika referencji"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3540
 msgid "include objects referred to by the index"
 msgstr "uwzględnij obiekty z odniesieniami z indeksu"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3543
 msgid "output pack to stdout"
 msgstr "wypisz paczkę na standardowe wyjście"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3545
 msgid "include tag objects that refer to objects to be packed"
 msgstr "uwzględnij obiekty tagów odnoszące się do pakowanych obiektów"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3547
 msgid "keep unreachable objects"
 msgstr "zachowaj nieosiągalne obiekty"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3549
 msgid "pack loose unreachable objects"
 msgstr "spakuj luźnie nieosiągalne obiekty"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3551
 msgid "unpack unreachable objects newer than <time>"
 msgstr "rozpakuj nieosiągalne obiekty nowsze niż <czas>"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3554
 msgid "use the sparse reachability algorithm"
 msgstr "użyj rzadkiego algorytmu osiągalności"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3556
 msgid "create thin packs"
 msgstr "twórz wąskie paczki"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3558
 msgid "create packs suitable for shallow fetches"
 msgstr "utwórz paczki odpowiednie do płytkich pobrań"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3560
 msgid "ignore packs that have companion .keep file"
 msgstr "pomiń paczki, którym towarzyszy plik .keep"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3562
 msgid "ignore this pack"
 msgstr "pomiń tę paczkę"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3564
 msgid "pack compression level"
 msgstr "stopień kompresji paczki"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3566
 msgid "do not hide commits by grafts"
 msgstr "nie ukrywaj przeszczepionych zapisów"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3568
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "użyj indeksu bitmapy, jeśli dostępny, żeby przyspieszyć zliczanie obiektów"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3570
 msgid "write a bitmap index together with the pack index"
 msgstr "zapisz indeks bitmapy razem z indeksem paczek"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3574
 msgid "write a bitmap index if possible"
 msgstr "zapisz indeks bitmapy jeśli możliwe"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3578
 msgid "handling for missing objects"
 msgstr "traktowanie brakujących obiektów"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3581
 msgid "do not pack objects in promisor packfiles"
 msgstr "nie pakuj obiektów w obiecujące pliki paczek"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3583
 msgid "respect islands during delta compression"
 msgstr "uszanuj wyspy podczas kompresji delt"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3585
 msgid "protocol"
 msgstr "protokół"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3586
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "wyłącz w tym protokole wszystkie ustawione uploadpack.blobpackfileuri"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3617
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "łańcuch delt za głęboki: %d, wymuszanie %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3622
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit za wysoki, wymuszanie %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3676
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "nie można użyć --max-pack-size do budowania paczki do przesyłu"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3678
 msgid "minimum pack size limit is 1 MiB"
 msgstr "minimalna granica rozmiaru paczki to 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3683
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "nie można użyć --thin, aby zbudować indeksowalną paczkę"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3686
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable i --unpack-unreachable się wykluczają"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3692
 msgid "cannot use --filter without --stdout"
 msgstr "nie można użyć --filter bez --stdout"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3752
 msgid "Enumerating objects"
 msgstr "Wymienianie obiektów"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:3783
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18364,6 +18748,20 @@
 "Razem %<PRIu32> (delty %<PRIu32>), użyte ponownie %<PRIu32> (delty "
 "%<PRIu32>), paczki użyte ponownie %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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” naznaczono do usunięcia.\n"
+"Jeśli nadal używasz tego polecenia, dodaj dodatkową\n"
+"opcję, „--i-still-use-this”, w wierszu poleceń\n"
+"i daj znać, że nadal jej używasz wysyłając list e-mail\n"
+"na <git@vger.kernel.org>.  Dzięki.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<opcje>]"
@@ -18421,7 +18819,7 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "wciel zmiany przez przestawienie, a nie scalanie"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:492 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "zezwól na przewijanie"
 
@@ -18446,7 +18844,91 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Nieprawidłowa wartość pull.ff: %s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr "Wśród właśnie pobranych referencji nie ma kandydata na przestawianie."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr "Wśród właśnie pobranych referencji nie ma kandydatów na scalanie."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Zwykle oznacza to, że podano referencję z globem bez dopasowań\n"
+"po zdalnej stronie."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Kazano zaciągnąć zmiany ze zdalnego repozytorium „%s”, ale nie podano\n"
+"gałęzi.  Ponieważ nie jest to domyślne ustawione repozytorium zdalne\n"
+"dla bieżącej gałęzi, musisz podać gałąź w wierszu poleceń."
+
+#: builtin/pull.c:456 builtin/rebase.c:1253
+msgid "You are not currently on a branch."
+msgstr "Nie jesteś obecnie w gałęzi."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Podaj, względem jakiej gałęzi przestawić."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Podaj, z jaką gałęzią scalić."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Więcej szczegółów w git-pull(1)."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1259
+msgid "<remote>"
+msgstr "<zdalne-repozytorium>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<gałąź>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1251
+msgid "There is no tracking information for the current branch."
+msgstr "Bieżąca gałąź nie ma informacji o śledzeniu."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Jeśli chcesz ustawić informacje o śledzeniu w tej gałęzi, możesz to zrobić "
+"przez:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Konfiguracja podaje, żeby scalić z referencją „%s”\n"
+"ze zdalnego repozytorium, ale nie pobrano stamtąd żadnej takiej."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "brak dostępu do zapisu %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "pomijanie --verify-signatures przy przestawianiu"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18475,103 +18957,19 @@
 "lub --ff-only w wierszu poleceń, aby zmienić ustawione zachowanie\n"
 "w jednym wywołaniu.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr "Wśród właśnie pobranych referencji nie ma kandydata na przestawianie."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr "Wśród właśnie pobranych referencji nie ma kandydatów na scalanie."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Zwykle oznacza to, że podano referencję z globem bez dopasowań\n"
-"po zdalnej stronie."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Kazano zaciągnąć zmiany ze zdalnego repozytorium „%s”, ale nie podano\n"
-"gałęzi.  Ponieważ nie jest to domyślne ustawione repozytorium zdalne\n"
-"dla bieżącej gałęzi, musisz podać gałąź w wierszu poleceń."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Nie jesteś obecnie w gałęzi."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "Podaj, względem jakiej gałęzi przestawić."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Podaj, z jaką gałęzią scalić."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Więcej szczegółów w git-pull(1)."
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<zdalne-repozytorium>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<gałąź>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Bieżąca gałąź nie ma informacji o śledzeniu."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Jeśli chcesz ustawić informacje o śledzeniu w tej gałęzi, możesz to zrobić "
-"przez:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Konfiguracja podaje, żeby scalić z referencją „%s”\n"
-"ze zdalnego repozytorium, ale nie pobrano stamtąd żadnej takiej."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "brak dostępu do zapisu %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "pomijanie --verify-signatures przy przestawianiu"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Aktualizowanie nienarodzonej gałęzi o zmiany dodane do indeksu."
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "zaciągnij z przestawieniem"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "złóż je lub dodaj do schowka."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18582,7 +18980,7 @@
 "przewijanie drzewa roboczego\n"
 "z zapisu %s."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18599,15 +18997,15 @@
 "$ git reset --hard\n"
 "by się pozbierać."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Nie można scalić wielu gałęzi w puste czoło."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Nie można przestawić na wiele gałęzi."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "nie można przestawić z lokalnie zapisanymi zmianami pod-modułów"
 
@@ -18914,46 +19312,54 @@
 msgid "push options must not have new line characters"
 msgstr "opcje wypychania nie mogą zawierać znaków końca wiersza"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 "git range-diff [<opcje>] <stara-podstawa>..<stary-czubek> <nowa-podstawa>.."
 "<nowy-czubek>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<opcje>] <stary-czubek>...<nowy-czubek>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<opcje>] <podstawa> <stary-czubek> <nowy-czubek>"
 
-#: builtin/range-diff.c:22
+#: builtin/range-diff.c:28
 msgid "Percentage by which creation is weighted"
 msgstr "Procent, według jakiego ważone jest tworzenie"
 
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "użyj prostych kolorów zmian"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "uwagi"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "przekazywane do „git log”"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "brak .. w zakresie: „%s”"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "daj tylko wyjście powiązane z pierwszym zakresem"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "daj tylko wyjście powiązane z drugim zakresem"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "nie jest zakresem zapisów: „%s”"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "format w pojedynczym argumencie musi być symetrycznym zakresem"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "potrzeba dwóch zakresów zapisów"
 
@@ -19058,193 +19464,193 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:195 builtin/rebase.c:219 builtin/rebase.c:246
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "lista zadań do zrobienia się nie nadaje: „%s”"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:312
 #, c-format
 msgid "could not create temporary %s"
 msgstr "nie można utworzyć tymczasowego %s"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:318
 msgid "could not mark as interactive"
 msgstr "nie można oznaczyć jako interaktywne"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:371
 msgid "could not generate todo list"
 msgstr "nie można wygenerować listy zadań do zrobienia"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:413
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "zapis podstawy należy podać z --upstream lub --onto"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:482
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<opcje>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:495 builtin/rebase.c:1394
 msgid "keep commits which start empty"
 msgstr "zachowaj zapisy, które zaczynają puste"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:499 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "pozwól na zapisy z pustymi komunikatami"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:501
 msgid "rebase merge commits"
 msgstr "przestawiaj zapisy scaleń"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:503
 msgid "keep original branch points of cousins"
 msgstr "zachowaj pierwotne rozgałęzienia kuzynów"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:505
 msgid "move commits that begin with squash!/fixup!"
 msgstr "przenieś zapisy, które zaczynają się od squash!/fixup!"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:506
 msgid "sign commits"
 msgstr "podpisuj zapisy"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:508 builtin/rebase.c:1333
 msgid "display a diffstat of what changed upstream"
 msgstr "wyświetl statystyki zmian nadrzędnych"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:510
 msgid "continue rebase"
 msgstr "kontynuuj przestawianie"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:512
 msgid "skip commit"
 msgstr "pomiń zapis"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:513
 msgid "edit the todo list"
 msgstr "edytuj listę zadań do zrobienia"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:515
 msgid "show the current patch"
 msgstr "pokaż bieżącą łatkę"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:518
 msgid "shorten commit ids in the todo list"
 msgstr "skróć identyfikatory zapisów na liście zadań do zrobienia"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:520
 msgid "expand commit ids in the todo list"
 msgstr "rozwiń identyfikatory zapisów na liście zadań do zrobienia"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:522
 msgid "check the todo list"
 msgstr "sprawdź listę zadań do zrobienia"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:524
 msgid "rearrange fixup/squash lines"
 msgstr "zmień kolejność wierszy fixup/squash"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:526
 msgid "insert exec commands in todo list"
 msgstr "wstaw polecenia exec na listę zadań do zrobienia"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:527
 msgid "onto"
 msgstr "na"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:530
 msgid "restrict-revision"
 msgstr "ogranicz-rewizję"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:530
 msgid "restrict revision"
 msgstr "ogranicz rewizję"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:532
 msgid "squash-onto"
 msgstr "spłaszcz-na"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:533
 msgid "squash onto"
 msgstr "spłaszcz na"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:535
 msgid "the upstream commit"
 msgstr "zapis głównego nurtu"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:537
 msgid "head-name"
 msgstr "nazwa-czoła"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:537
 msgid "head name"
 msgstr "nazwa czoła"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:542
 msgid "rebase strategy"
 msgstr "strategia przestawiania"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:543
 msgid "strategy-opts"
 msgstr "opcje-strategii"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:544
 msgid "strategy options"
 msgstr "opcje strategii"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:545
 msgid "switch-to"
 msgstr "przełącz-na"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:546
 msgid "the branch or commit to checkout"
 msgstr "gałąź lub zapis do wybrania"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:547
 msgid "onto-name"
 msgstr "nazwa-na"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:547
 msgid "onto name"
 msgstr "nazwa rewizji „na”"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:548
 msgid "cmd"
 msgstr "polecenie"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:548
 msgid "the command to run"
 msgstr "polecenie do wykonania"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:551 builtin/rebase.c:1427
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "automatycznie przeplanuj każdy nieudany „exec”"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:567
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins nic nie robi bez --rebase-merges"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:583
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s wymaga silnika scalenia"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:626
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "nie można uzyskać „onto”: „%s”"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:643
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "nieprawidłowe pierwotne czoło: „%s”"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:668
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "pomijanie błędnego allow_rerere_autoupdate: „%s”"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19258,7 +19664,7 @@
 "Aby przerwać i powrócić do stanu sprzed „git rebase”, wykonaj „git rebase --"
 "abort”."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19277,7 +19683,7 @@
 "\n"
 "Z tego powodu git nie może ich przestawić."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1227
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19286,7 +19692,7 @@
 "nierozpoznany pusty rodzaj „%s”; prawidłowe wartości to „drop”, „keep” i "
 "„ask”."
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1245
 #, c-format
 msgid ""
 "%s\n"
@@ -19303,7 +19709,7 @@
 "    git rebase '<gałąź>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1261
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19316,147 +19722,147 @@
 "    git branch --set-upstream-to=%s/<gałąź> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1291
 msgid "exec commands cannot contain newlines"
 msgstr "polecenia exec nie mogą zawierać znaków nowego wiersza"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1295
 msgid "empty exec command"
 msgstr "puste polecenie exec"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1324
 msgid "rebase onto given branch instead of upstream"
 msgstr "przestaw na podaną gałąź zamiast na główny nurt"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1326
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "użyj podstawy scalania głównego nurtu i gałęzi jako bieżącej podstawy"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1328
 msgid "allow pre-rebase hook to run"
 msgstr "pozwól wykonać skrypt pre-rebase"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1330
 msgid "be quiet. implies --no-stat"
 msgstr "bądź cicho. zakłada --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1336
 msgid "do not show diffstat of what changed upstream"
 msgstr "nie pokazuj statystyk różnic ze zmian głównego nurtu"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1339
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "dodaj końcówkę Signed-off-by do każdego zapisu"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1342
 msgid "make committer date match author date"
 msgstr "ustaw datę złożenia na datę utworzenia"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1344
 msgid "ignore author date and use current date"
 msgstr "pomiń datę utworzenia i użyj bieżącej"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1346
 msgid "synonym of --reset-author-date"
 msgstr "zamiennik na --reset-author-date"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1348 builtin/rebase.c:1352
 msgid "passed to 'git apply'"
 msgstr "przekaż do „git apply”"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1350
 msgid "ignore changes in whitespace"
 msgstr "ignoruj zmiany w białych znakach"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1354 builtin/rebase.c:1357
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "dobierz wszystkie zapisy, nawet jeśli niezmienione"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1359
 msgid "continue"
 msgstr "kontynuuj"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1362
 msgid "skip current patch and continue"
 msgstr "pomiń obecną łatkę i kontynuuj"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1364
 msgid "abort and check out the original branch"
 msgstr "przerwij i wybierz pierwotną gałąź"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1367
 msgid "abort but keep HEAD where it is"
 msgstr "przerwij, ale zostaw HEAD, gdzie jest"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1368
 msgid "edit the todo list during an interactive rebase"
 msgstr "edytuj listę zadań do zrobienia podczas interaktywnego przestawiania"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1371
 msgid "show the patch file being applied or merged"
 msgstr "pokaż plik łatki właśnie stosowanej lub scalanej"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1374
 msgid "use apply strategies to rebase"
 msgstr "użyj strategii stosowania do przestawiania"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1378
 msgid "use merging strategies to rebase"
 msgstr "użyj strategii scalania do przestawiania"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1382
 msgid "let the user edit the list of commits to rebase"
 msgstr "pozwól użytkownikowi edytować listę zapisów do przestawienia"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1386
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(PRZESTARZAŁE) spróbuj odtworzyć scalenia zamiast je pomijać"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1391
 msgid "how to handle commits that become empty"
 msgstr "jak traktować zapisy, które staną się puste"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1398
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "przenieś zapisy, które zaczynają się od squash!/fixup! pod -i"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1405
 msgid "add exec lines after each commit of the editable list"
 msgstr "dodaj wiersz exec po każdym zapisie z edytowalnej listy"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1409
 msgid "allow rebasing commits with empty messages"
 msgstr "pozwól przestawiać zapisy z pustymi komunikatami"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1413
 msgid "try to rebase merges instead of skipping them"
 msgstr "spróbuj przestawić scalenia zamiast je pomijać"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1416
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "użyj „git merge-base --fork-point”, aby poprawić gałąź nadrzędną"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1418
 msgid "use the given merge strategy"
 msgstr "użyj podanej strategii scalania"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1420 builtin/revert.c:115
 msgid "option"
 msgstr "opcja"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1421
 msgid "pass the argument through to the merge strategy"
 msgstr "przekaż argument do strategii scalania"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1424
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "przestaw wszystkie osiągalne zapisy aż do korzenia"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1429
 msgid "apply all changes, even those already present upstream"
 msgstr "zastosuj wszystkie zmiany, nawet te już obecne w głównym nurcie"
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1446
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -19464,43 +19870,43 @@
 "wsparcie rebase.useBuiltin zostało usunięte!\n"
 "Zobacz szczegóły pod jego opisem w „git help config”."
 
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1452
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Wygląda, że trwa „git am”. Nie można przestawić."
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1493
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges jest przestarzałe. Użyj zamiast tego --rebase-"
 "merges."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1498
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "„--keep-base” i „--onto” się wykluczają."
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1500
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "„--keep-base” i „--root” się wykluczają."
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1504
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "„--keep-base” i „--fork-point” się wykluczają."
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1507
 msgid "No rebase in progress?"
 msgstr "Nie trwa żadne przestawianie?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1511
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Akcja --edit-todo może być użyta tylko podczas interaktywnego przestawiania."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1534 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Nie można odczytać HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1546
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19508,16 +19914,16 @@
 "Musisz edytować wszystkie konflikty scalania\n"
 "i oznaczyć je jako rozwiązane przy pomocy git add"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1565
 msgid "could not discard worktree changes"
 msgstr "nie można odrzucić zmian w drzewie roboczym"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1584
 #, c-format
 msgid "could not move back to %s"
 msgstr "nie można cofnąć do %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1630
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19538,131 +19944,131 @@
 "i wykonaj mnie ponownie. Przerywam na wypadek, gdyby było tam\n"
 "coś cennego.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1658
 msgid "switch `C' expects a numerical value"
 msgstr "przełącznik „C” oczekuje wartości liczbowej"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1700
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Nieznany tryb: %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1739
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy wymaga --merge lub --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1769
 msgid "cannot combine apply options with merge options"
 msgstr "nie można łączyć opcji stosowania z opcjami scalania"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1782
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Nieznany silnik przestawiania: %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1812
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed wymaga --exec lub --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1832
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "„--preserve-merges” i „--rebase-merges” się wykluczają"
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1836
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr "błąd: „--preserve-merges” i „--reschedule-failed-exec” się wykluczają"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1860
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "nieprawidłowa gałąź nadrzędna „%s”"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1866
 msgid "Could not create new root commit"
 msgstr "Nie można utworzyć nowego zapisu korzenia"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1892
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "„%s”: potrzeba dokładnie jednej podstawy scalania z gałęzią"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1895
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "„%s”: potrzeba dokładnie jednej podstawy scalania"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1903
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Nie wskazuje na prawidłowy zapis „%s”"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1931
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "błąd krytyczny: brak gałęzi/zapisu „%s”"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
+#: builtin/rebase.c:1939 builtin/submodule--helper.c:40
 #: builtin/submodule--helper.c:2414
 #, c-format
 msgid "No such ref: %s"
 msgstr "Nie ma takiej referencji: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1950
 msgid "Could not resolve HEAD to a revision"
 msgstr "Nie można rozwiązać HEAD do rewizji"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1971
 msgid "Please commit or stash them."
 msgstr "Złóż je lub dodaj do schowka."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:2007
 #, c-format
 msgid "could not switch to %s"
 msgstr "nie można przełączyć na %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date."
 msgstr "HEAD jest aktualne."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Obecna gałąź %s jest aktualna.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2028
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD jest aktualne, wymuszono przestawianie."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2030
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Bieżąca gałąź %s jest aktualna, wymuszono przestawianie.\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2038
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Skrypt pre-rebase odmówił przestawiania."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2045
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Zmiany w %s:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2048
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Zmiany z %s na %s:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2073
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr "Najpierw cofanie czoła gałęzi, aby odtworzyć na nim pracę...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2082
 msgid "Could not detach HEAD"
 msgstr "Nie można odłączyć HEAD"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2091
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Przewinięto %s do %s.\n"
@@ -19756,36 +20162,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "„%s” nie jest prawidłowym znacznikiem czasu"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Oznaczanie osiągalnych obiektów..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s nigdzie nie wskazuje!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "nie podano dziennika referencji do skasowania"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "nie jest dziennikiem referencji: %s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "„%s” nie ma dziennika referencji"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "nieprawidłowy format referencji: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -20306,11 +20712,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "Nie skasuje wszystkich adresów nie do wypychania"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<opcje>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20318,118 +20724,118 @@
 "Przyrostowe przepakowania są niekompatybilne z indeksami bitmap.  Użyj\n"
 "--no-write-bitmap-index lub wyłącz konfigurację pack.writebitmaps."
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "nie można uruchomić pack-objects, żeby przepakować obiecujące obiekty"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:446
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Oczekiwano tylko wierszy z pełnych szesnastkowych identyfikatorów "
 "obiektów z pack-objects."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "nie można ukończyć pack-objects, żeby przepakować obiecujące obiekty"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:322
 msgid "pack everything in a single pack"
 msgstr "spakuj wszystko w jedną paczkę"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:324
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "to samo, co -a, i zamień nieosiągalne obiekty w luźne"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:327
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "usuń zbędne paczki i wykonaj git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:329
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "przekaż --no-reuse-delta do git-pack-objects"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:331
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "przekaż --no-reuse-object do git-pack-objects"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:333
 msgid "do not run git-update-server-info"
 msgstr "nie wykonuj git-update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:336
 msgid "pass --local to git-pack-objects"
 msgstr "przekaż --local do git-pack-objects"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:338
 msgid "write bitmap index"
 msgstr "zapisz indeks bitmapy"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:340
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "przekaż --delta-islands do git-pack-objects"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:341
 msgid "approxidate"
 msgstr "przybliżona-data"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:342
 msgid "with -A, do not loosen objects older than this"
 msgstr "z -A, nie luzuj obiektów starszych niż podana data"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:344
 msgid "with -a, repack unreachable objects"
 msgstr "z -a przepakuj wszystkie nieosiągalne obiekty"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:346
 msgid "size of the window used for delta compression"
 msgstr "rozmiar okna użytego do kompresji delt"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:347 builtin/repack.c:353
 msgid "bytes"
 msgstr "bajty"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:348
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "jak wyżej, ale ogranicz rozmiar pamięci zamiast liczby elementów"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:350
 msgid "limits the maximum delta depth"
 msgstr "ogranicza maksymalną głębokość delty"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:352
 msgid "limits the maximum number of threads"
 msgstr "ogranicza maksymalną liczbę wątków"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:354
 msgid "maximum size of each packfile"
 msgstr "maksymalny rozmiar pojedynczego pliku paczki"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:356
 msgid "repack objects in packs marked with .keep"
 msgstr "przepakuj obiekty w paczki oznaczone przez .keep"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:358
 msgid "do not repack this pack"
 msgstr "nie przepakowuj tej paczki"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:368
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "nie można usuwać paczek w repozytorium o cennych obiektach"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:372
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable i -A się wykluczają"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:455
 msgid "Nothing new to pack."
 msgstr "Nic nowego do spakowania."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:485
 #, c-format
 msgid "missing required file: %s"
 msgstr "brakuje wymaganego pliku: %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:487
 #, c-format
 msgid "could not unlink: %s"
 msgstr "nie można usunąć przez unlink: %s"
@@ -20588,7 +20994,7 @@
 
 #: builtin/replace.c:470
 msgid "the signature will be removed in the replacement commit!"
-msgstr "sygnatura zostanie usunięta w zastępczym rozwiązaniu!"
+msgstr "podpis zostanie usunięty w zastępczym zapisie!"
 
 #: builtin/replace.c:480
 #, c-format
@@ -20762,8 +21168,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Nie można wykonać resetu %s podczas scalania."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:587 builtin/stash.c:661
+#: builtin/stash.c:685
 msgid "be quiet, only report errors"
 msgstr "mniej komunikatów, wypisuj tylko błędy"
 
@@ -20847,19 +21253,19 @@
 msgid "Could not write new index file."
 msgstr "Nie można zapisać nowego pliku indeksu."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:534
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "--exclude-promisor-objects i --missing się wykluczają"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:595
 msgid "object filtering requires --objects"
 msgstr "filtrowanie obiektów wymaga --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:651
 msgid "rev-list does not support display of notes"
 msgstr "rev-list nie wspiera wyświetlania uwag"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:656
 msgid "marked counting is incompatible with --objects"
 msgstr "znaczone zliczanie i --objects się wykluczają"
 
@@ -21106,52 +21512,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<opcje>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "użycie wielu opcji --group ze standardowym wejściem nie jest wspierane"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "użycie --group=trailer ze standardowym wejściem nie jest wspierane"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "nieznany rodzaj grupy: %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Grupuj według składającego, a nie autora"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "grupuj według składającego, a nie autora"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "posortuj wyjście według liczby zapisów na autora"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Pomiń opisy zapisów, podaje tylko liczbę zapisów"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "pomiń opisy zapisów, podaje tylko liczbę zapisów"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Pokazuj adres e-mail każdego autora"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "pokazuj adres e-mail każdego autora"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr "Zawijaj wiersze wyjścia"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "zawijaj wiersze wyjścia"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "pole"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Grupuj według pola"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "grupuj według pola"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "podano zbyt wiele argumentów poza repozytorium"
 
@@ -21354,71 +21760,71 @@
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <opcje>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:45
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:71
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "to drzewo robocze nie jest rzadkie (plik rzadkiego wybrania może nie istnieć)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:223
 msgid "failed to create directory for sparse-checkout file"
 msgstr "nie można utworzyć katalogu dla pliku rzadkiego wybrania"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:264
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr "nie można podnieść formatu repozytorium, aby włączyć worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:266
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "nie można ustawić konfiguracji extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:288
+#: builtin/sparse-checkout.c:283
 msgid "git sparse-checkout init [--cone]"
 msgstr "git sparse-checkout init [--cone]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:302
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "zainicjuj rzadkie wybranie w trybie stożka"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:339
 #, c-format
 msgid "failed to open '%s'"
 msgstr "nie można otworzyć „%s”"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:396
 #, c-format
 msgid "could not normalize path %s"
 msgstr "nie można unormować ścieżki %s"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:408
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <wzorce>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:433
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "nie można odcytować łańcucha w stylu C „%s”"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:487 builtin/sparse-checkout.c:511
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "nie można załadować istniejących wzorców rzadkiego wybrania"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:556
 msgid "read patterns from standard in"
 msgstr "wczytaj wzorce ze standardowego wejścia"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:571
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:590
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:618
 msgid "error while refreshing working directory"
 msgstr "błąd podczas odświeżania katalogu roboczego"
 
@@ -21508,153 +21914,164 @@
 msgstr "%s nie jest prawidłową referencją."
 
 #: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr "Nie zaimplementowano parametrów w git stash clear"
+msgid "git stash clear with arguments is unimplemented"
+msgstr "nie zaimplementowano parametrów w git stash clear"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:429
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"OSTRZEŻENIE: Nieśledzony plik zawadza śledzonemu plikowi!  Zmienianie nazwy\n"
+"            %s -> %s\n"
+"         aby zwolnić miejsce.\n"
+
+#: builtin/stash.c:490
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "nie można zastosować zmian ze schowka podczas scalania"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:501
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "nie można wygenerować zmian %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:508
 msgid "conflicts in index. Try without --index."
 msgstr "konflikty w indeksie. Spróbuj bez --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:514
 msgid "could not save index tree"
 msgstr "nie można zapisać drzewa indeksu"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:523
 msgid "could not restore untracked files from stash"
 msgstr "nie można przywrócić nieśledzonych plików ze schowka"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:537
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Scalanie %s z %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:547
 msgid "Index was not unstashed."
 msgstr "Indeks nie został wyjęty ze schowka."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:589 builtin/stash.c:687
 msgid "attempt to recreate the index"
 msgstr "spróbuj odtworzyć indeks"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:633
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Porzucono %s (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:636
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Nie można porzucić wpisu ze schowka"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:649
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "„%s” nie wskazuje na zmiany ze schowka"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:699
 msgid "The stash entry is kept in case you need it again."
 msgstr "Wpis pozostaje w schowku w razie, gdyby miał być znów potrzebny."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:722
 msgid "No branch name specified"
 msgstr "Nie określono nazwy gałęzi"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:866 builtin/stash.c:903
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Nie można zaktualizować %s o %s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:884 builtin/stash.c:1538 builtin/stash.c:1603
 msgid "stash message"
 msgstr "komunikat skrytki"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:894
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "„git stash store” wymaga jednego argumentu z <zapisem>"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1109
 msgid "No changes selected"
 msgstr "Nie wybrano zmian"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1209
 msgid "You do not have the initial commit yet"
 msgstr "Nie masz jeszcze początkowego zapisu"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1236
 msgid "Cannot save the current index state"
 msgstr "Nie można zapisać bieżącego stanu indeksu"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1245
 msgid "Cannot save the untracked files"
 msgstr "Nie można zapisać nieśledzonych plików"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1256 builtin/stash.c:1265
 msgid "Cannot save the current worktree state"
 msgstr "Nie można zapisać bieżącego stanu drzewa roboczego"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1293
 msgid "Cannot record working tree state"
 msgstr "Nie można zapisać stanu drzewa roboczego"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1342
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Nie można jednocześnie użyć --patch i --include-untracked lub --all"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1358
 msgid "Did you forget to 'git add'?"
 msgstr "Czyżby zabrakło „git add”?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1373
 msgid "No local changes to save"
 msgstr "Brak lokalnych zmian do zapisania"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1380
 msgid "Cannot initialize stash"
 msgstr "Nie można zainicjować schowka"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1395
 msgid "Cannot save the current status"
 msgstr "Nie można zachować bieżącego stanu"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1400
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Zapisano katalog roboczy i stan indeksu %s"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1490
 msgid "Cannot remove worktree changes"
 msgstr "Nie można usunąć zmian w drzewie roboczym"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1529 builtin/stash.c:1594
 msgid "keep index"
 msgstr "zachowaj indeks"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1531 builtin/stash.c:1596
 msgid "stash in patch mode"
 msgstr "dodaj do schowka w trybie łatki"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1532 builtin/stash.c:1597
 msgid "quiet mode"
 msgstr "tryb cichy"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1534 builtin/stash.c:1599
 msgid "include untracked files in stash"
 msgstr "uwzględnij nieśledzone pliki w schowku"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1536 builtin/stash.c:1601
 msgid "include ignore files"
 msgstr "uwzględnij pomijane pliki"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1636
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21732,12 +22149,13 @@
 "."
 
 #: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Powstrzymaj wyjście przy podawaniu każdego polecenia pod-modułu"
+msgid "suppress output of entering each submodule command"
+msgstr "powstrzymaj wyjście przy podawaniu każdego polecenia pod-modułu"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Schodź do zagnieżdżonych pod-modułów"
+#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:888
+#: builtin/submodule--helper.c:1487
+msgid "recurse into nested submodules"
+msgstr "schodź do zagnieżdżonych pod-modułów"
 
 #: builtin/submodule--helper.c:572
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
@@ -21774,8 +22192,8 @@
 msgstr "Nie można zarejestrować trybu aktualizacji do ścieżki pod-modułu „%s”"
 
 #: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Powstrzymaj wyjście przy inicjalizacji pod-modułu"
+msgid "suppress output for initializing a submodule"
+msgstr "powstrzymaj wyjście przy inicjalizacji pod-modułu"
 
 #: builtin/submodule--helper.c:714
 msgid "git submodule--helper init [<options>] [<path>]"
@@ -21797,18 +22215,14 @@
 msgstr "Nie można zejść do pod-modułu „%s”"
 
 #: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Powstrzymaj wyjście stanu pod-modułów"
+msgid "suppress submodule status output"
+msgstr "powstrzymaj wyjście stanu pod-modułów"
 
 #: builtin/submodule--helper.c:887
 msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
-msgstr "Użyj zapisu z indeksu zamiast tego z HEAD pod-modułu"
-
-#: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "schodź do zagnieżdżonych pod-modułów"
+msgstr "użyj zapisu z indeksu zamiast tego z HEAD pod-modułu"
 
 #: builtin/submodule--helper.c:893
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
@@ -21892,8 +22306,8 @@
 msgstr "nie można zaktualizować zdalnego repozytorium pod-modułu „%s”"
 
 #: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Powstrzymaj wyjście przy synchronizacji adresu pod-modułu"
+msgid "suppress output of synchronizing submodule url"
+msgstr "powstrzymaj wyjście przy synchronizacji adresu pod-modułu"
 
 #: builtin/submodule--helper.c:1492
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
@@ -21938,12 +22352,12 @@
 msgstr "Wyrejestrowano pod-moduł „%s” (%s) ze ścieżki „%s”\n"
 
 #: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr "Usuń drzewa robocze pod-modułów nawet jeśli zawierają lokalne zmiany"
+msgid "remove submodule working trees even if they contain local changes"
+msgstr "usuń drzewa robocze pod-modułów, nawet jeśli zawierają lokalne zmiany"
 
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Wyrejestruj wszystkie pod-moduły"
+msgid "unregister all submodules"
+msgstr "wyrejestruj wszystkie pod-moduły"
 
 #: builtin/submodule--helper.c:1630
 msgid ""
@@ -22091,8 +22505,8 @@
 msgstr "rebase, merge, checkout lub none"
 
 #: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Utwórz płytki klon ucięty do podanej liczby rewizji"
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "utwórz płytki klon ucięty do podanej liczby rewizji"
 
 #: builtin/submodule--helper.c:2343
 msgid "parallel jobs"
@@ -22162,8 +22576,8 @@
 msgstr "upewnij się, że plik .gitmodules jest w drzewie roboczym"
 
 #: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Powstrzymaj wyjście przy ustawianiu adresu pod-modułu"
+msgid "suppress output for setting url of a submodule"
+msgstr "powstrzymaj wyjście przy ustawianiu adresu pod-modułu"
 
 #: builtin/submodule--helper.c:2685
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
@@ -22195,7 +22609,7 @@
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch i --default się wykluczają"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2792 git.c:441 git.c:714
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s nie wspiera --super-prefix"
@@ -22266,12 +22680,12 @@
 msgid "tag '%s' not found."
 msgstr "nie znaleziono tagu „%s”."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:124
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Usunięto tag „%s” (wskazywał %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:159
 #, c-format
 msgid ""
 "\n"
@@ -22284,7 +22698,7 @@
 "  %s\n"
 "Wiersze zaczynające się od „%c” zostaną zignorowane.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:163
 #, c-format
 msgid ""
 "\n"
@@ -22299,15 +22713,11 @@
 "Wiersze zaczynające się od „%c” będą zachowane; możesz je sam(a) usunąć, "
 "jeśli chcesz.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:230
 msgid "unable to sign the tag"
 msgstr "nie można podpisać tagu"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "nie można zapisać pliku tagu"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:248
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22320,138 +22730,134 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:264
 msgid "bad object type."
 msgstr "zły rodzaj obiektu."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:317
 msgid "no tag message?"
 msgstr "brak komunikatu tagu?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:324
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Pozostawiono komunikat tagu w %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:435
 msgid "list tag names"
 msgstr "wypisz nazwy tagów"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:437
 msgid "print <n> lines of each tag message"
 msgstr "wypisz <n> wierszy każdego komunikatu tagu"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:439
 msgid "delete tags"
 msgstr "usuń tagi"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:440
 msgid "verify tags"
 msgstr "weryfikuj tagi"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:442
 msgid "Tag creation options"
 msgstr "Opcje tworzenia tagów"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:444
 msgid "annotated tag, needs a message"
 msgstr "opisz tag, potrzebuje komunikatu"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:446
 msgid "tag message"
 msgstr "wiadomość tagu"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:448
 msgid "force edit of tag message"
 msgstr "wymuś edycję komunikatu tagu"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:449
 msgid "annotated and GPG-signed tag"
 msgstr "tag opisany i podpisany GPG"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:452
 msgid "use another key to sign the tag"
 msgstr "użyj innego klucza do podpisania tagu"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:453
 msgid "replace the tag if exists"
 msgstr "zamień tag, jeśli istnieje"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:454 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "utwórz dziennik referencji"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:456
 msgid "Tag listing options"
 msgstr "Opcje wypisywania tagów"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:457
 msgid "show tag list in columns"
 msgstr "pokaż listę tagów w kolumnach"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:458 builtin/tag.c:460
 msgid "print only tags that contain the commit"
 msgstr "wypisz tylko tagi zawierające ten zapis"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:459 builtin/tag.c:461
 msgid "print only tags that don't contain the commit"
 msgstr "wypisz tylko tagi nie zawierające tego zapisu"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:462
 msgid "print only tags that are merged"
 msgstr "wypisz tylko scalone tagi"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:463
 msgid "print only tags that are not merged"
 msgstr "wypisz tylko niescalone tagi"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:467
 msgid "print only tags of the object"
 msgstr "wypisz tylko tagi tego obiektu"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:515
 msgid "--column and -n are incompatible"
 msgstr "--column i -n się wykluczają"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:537
 msgid "-n option is only allowed in list mode"
 msgstr "opcja -n może być użyta tylko w trybie wymieniania"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:539
 msgid "--contains option is only allowed in list mode"
 msgstr "opcja --contains może być użyta tylko w trybie wymieniania"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:541
 msgid "--no-contains option is only allowed in list mode"
 msgstr "opcja --no-contains może być użyta tylko w trybie wymieniania"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:543
 msgid "--points-at option is only allowed in list mode"
 msgstr "opcja --points-at może być użyta tylko w trybie wymieniania"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:545
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "opcje --merged i --no-merged mogą być użyte tylko w trybie wymieniania"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:556
 msgid "only one -F or -m option is allowed."
 msgstr "-F i -m się wykluczają."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "zbyt wiele parametrów"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:581
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "„%s” nie jest prawidłową nazwą tagu."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:586
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "tag „%s” już istnieje"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:617
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Zaktualizowano tag „%s” (wskazywał %s)\n"
@@ -22805,89 +23211,63 @@
 msgid "print tag contents"
 msgstr "wypisz zawartość tagu"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opcje>] <ścieżka> [<zapis>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opcje>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opcje>] <ścieżka>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <drzewo-robocze> <nowa-ścieżka>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opcje>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opcje>] <drzewo-robocze>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <ścieżka>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:933
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "nie można skasować „%s”"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "nie jest prawidłowym katalogiem"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "plik gitdir nie istnieje"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "nie można odczytać pliku gitdir (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "przykrótki odczyt (oczekiwano %<PRIuMAX> bajtów, odczytano %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "nieprawidłowy plik gitdir"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "plik gitdir wskazuje nieistniejące położenie"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Usuwanie %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "zgłaszaj przycięte drzewa robocze"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "wygaś drzewa robocze starsze niż <czas>"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "„%s” już istnieje"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "cel drzewa roboczego „%s” nie nadaje się do użytku"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22897,7 +23277,7 @@
 "użyj „%s -f -f”, aby wymusić, lub „unlock” i „prune” lub „remove”, aby "
 "wyczyścić"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22906,117 +23286,129 @@
 "„%s” jest brakującym, ale już zarejestrowanym drzewem roboczym;\n"
 "użyj „%s -f”, aby wymusić, bądź „prune” lub „remove”, aby wyczyścić"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "nie można utworzyć katalogu „%s”"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Przygotowywanie drzewa roboczego (nowa gałąź „%s”)"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Przygotowywanie drzewa roboczego (resetowanie gałęzi „%s”; była na %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Przygotowywanie drzewa roboczego (wybieranie „%s”)"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Przygotowywanie drzewa roboczego (oddzielone HEAD %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:480
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "wybierz <gałąź> nawet jeśli już jest wybrana w innym drzewie roboczym"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:483
 msgid "create a new branch"
 msgstr "utwórz nową gałąź"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:485
 msgid "create or reset a branch"
 msgstr "utwórz lub zresetuj gałąź"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:487
 msgid "populate the new working tree"
 msgstr "wypełnij nowe drzewo robocze"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:488
 msgid "keep the new working tree locked"
 msgstr "pozostaw nowe drzewo robocze zablokowane"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:491
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "ustaw tryb śledzenia (zobacz git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:494
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "spróbuj dopasować nazwę nowej gałęzi do gałęzi śledzącej"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:502
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B i --detach się wykluczają"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:563
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track można użyć tylko przy tworzeniu nowej gałęzi"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:680
+msgid "show extended annotations and reasons, if available"
+msgstr "pokaż rozszerzone adnotacje i powody, jeśli dostępne"
+
+#: builtin/worktree.c:682
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr "oznacz drzewa robocze starsze niż <czas> jako „do przycięcia”"
+
+#: builtin/worktree.c:691
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose i --porcelain się wykluczają"
+
+#: builtin/worktree.c:718
 msgid "reason for locking"
 msgstr "powód blokady"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:730 builtin/worktree.c:763 builtin/worktree.c:837
+#: builtin/worktree.c:961
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "„%s” nie jest drzewem roboczym"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:732 builtin/worktree.c:765
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Główne drzewo robocze nie może być blokowane ani odblokowywane"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:737
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "„%s” już jest zablokowany, powód: %s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked"
 msgstr "„%s” już jest zablokowany"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:767
 #, c-format
 msgid "'%s' is not locked"
 msgstr "„%s” nie jest zablokowany"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:808
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "nie można przenosić ani usuwać drzew roboczych zawierających pod-moduły"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:816
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "wymuś przeniesienie, nawet jeśli drzewo robocze jest brudne lub zablokowane"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:839 builtin/worktree.c:963
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "„%s” jest głównym drzewem roboczym"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:844
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "nie można uzyskać nazwy celu z „%s”"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:857
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -23025,7 +23417,7 @@
 "nie można przenieść zablokowanego drzewa roboczego, powód blokady: %s\n"
 "użyj „move -f -f”, żeby to wymusić lub najpierw odblokować"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:859
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23033,38 +23425,38 @@
 "nie można przenieść zablokowanego drzewa roboczego;\n"
 "użyj „move -f -f”, żeby to wymusić lub najpierw odblokować"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:862
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "sprawdzenie nie powiodło się, nie można przenieść drzewa roboczego: %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:867
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "nie można przenieść „%s” do „%s”"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:913
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "nie można wykonać „git status” na „%s”"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:917
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "„%s” zawiera zmienione lub nieśledzone pliki, użyj --force, aby skasować"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:922
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "nie można wykonać „git status” na „%s”, kod %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:945
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "wymuś usunięcie, nawet jeśli drzewo robocze jest brudne lub zablokowane"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:968
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23073,7 +23465,7 @@
 "nie można usunąć zablokowanego drzewa roboczego, powód blokady: %s\n"
 "użyj „remove -f -f”, żeby to wymusić lub najpierw odblokować"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:970
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23081,17 +23473,17 @@
 "nie można usunąć zablokowanego drzewa roboczego;\n"
 "użyj „remove -f -f”, żeby to wymusić lub najpierw odblokować"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:973
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "sprawdzenie nie powiodło się, nie można usunąć drzewa roboczego: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:997
 #, c-format
 msgid "repair: %s: %s"
 msgstr "naprawa: %s: %s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1000
 #, c-format
 msgid "error: %s: %s"
 msgstr "błąd: %s: %s"
@@ -23153,18 +23545,20 @@
 "           [-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>]"
 msgstr ""
 "git [--version] [--help] [-C <ścieżka>] [-c <nazwa>=<wartość>]\n"
-"           [--exec-path[=<ścieżka>]] [--html-path] [--man-path] [--info-"
-"path]\n"
+"           [--exec-path[=<ścieżka>]] [--html-path] [--man-path]"
+" [--info-path]\n"
 "           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
 "bare]\n"
-"           [--git-dir=<ścieżka>] [--work-tree=<ścieżka>] [--"
-"namespace=<nazwa>]\n"
+"           [--git-dir=<ścieżka>] [--work-tree=<ścieżka>] [--namespace=<nazwa"
+">]\n"
+"           [--super-prefix=<ścieżka>] [--config-env=<nazwa>=<zmśrod>]\n"
 "           <polecenie> [<argumenty>]"
 
-#: git.c:35
+#: git.c:36
 msgid ""
 "'git help -a' and 'git help -g' list available subcommands and some\n"
 "concept guides. See 'git help <command>' or 'git help <concept>'\n"
@@ -23178,47 +23572,47 @@
 "aby poczytać o konkretnym poleceniu lub pojęciu.\n"
 "W „git help git” znajdziesz przegląd systemu."
 
-#: git.c:187
+#: git.c:188
 #, c-format
 msgid "no directory given for --git-dir\n"
 msgstr "nie podano katalogu do --git-dir\n"
 
-#: git.c:201
+#: git.c:202
 #, c-format
 msgid "no namespace given for --namespace\n"
 msgstr "nie podano przestrzeni nazw do --namespace\n"
 
-#: git.c:215
+#: git.c:216
 #, c-format
 msgid "no directory given for --work-tree\n"
 msgstr "nie podano katalogu do --work-tree\n"
 
-#: git.c:229
+#: git.c:230
 #, c-format
 msgid "no prefix given for --super-prefix\n"
 msgstr "nie podano prefiksu do --super-prefix\n"
 
-#: git.c:251
+#: git.c:252
 #, c-format
 msgid "-c expects a configuration string\n"
 msgstr "-c oczekuje łańcucha konfiguracji\n"
 
-#: git.c:289
+#: git.c:292
 #, c-format
 msgid "no directory given for -C\n"
 msgstr "nie podano katalogu do -C\n"
 
-#: git.c:315
+#: git.c:318
 #, c-format
 msgid "unknown option: %s\n"
 msgstr "nieznana opcja: %s\n"
 
-#: git.c:364
+#: git.c:367
 #, c-format
 msgid "while expanding alias '%s': '%s'"
 msgstr "podczas rozszerzania skrótu „%s”: „%s”"
 
-#: git.c:373
+#: git.c:376
 #, c-format
 msgid ""
 "alias '%s' changes environment variables.\n"
@@ -23227,39 +23621,39 @@
 "skrót „%s” zmienia zmienne środowiska.\n"
 "Aby to zrobić, możesz użyć w skrócie „!git”"
 
-#: git.c:380
+#: git.c:383
 #, c-format
 msgid "empty alias for %s"
 msgstr "pusty skrót dla %s"
 
-#: git.c:383
+#: git.c:386
 #, c-format
 msgid "recursive alias: %s"
 msgstr "rekurencyjny skrót: %s"
 
-#: git.c:465
+#: git.c:468
 msgid "write failure on standard output"
 msgstr "błąd wypisywania na standardowe wyjście"
 
-#: git.c:467
+#: git.c:470
 msgid "unknown write failure on standard output"
 msgstr "nieznany błąd wypisywania na standardowe wyjście"
 
-#: git.c:469
+#: git.c:472
 msgid "close failed on standard output"
 msgstr "nie można zamknąć standardowego wyjścia"
 
-#: git.c:820
+#: git.c:823
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "wykryto pętlę skrótów: rozwijanie „%s” nie kończy się: %s"
 
-#: git.c:870
+#: git.c:873
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "nie można obsłużyć %s jako polecenia wbudowanego"
 
-#: git.c:883
+#: git.c:886
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -23268,13 +23662,13 @@
 "użycie: %s\n"
 "\n"
 
-#: git.c:903
+#: git.c:906
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "rozwinięcie skrótu „%s” nie powiodło się; „%s” nie jest poleceniem gita\n"
 
-#: git.c:915
+#: git.c:918
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "nie można wykonać polecenia „%s”: %s\n"
@@ -23511,11 +23905,11 @@
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "przy --pathspec-from-file ścieżki są rozdzielone znakiem NUL"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "klucz"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "nazwa pola, według którego należy posortować"
 
@@ -23525,14 +23919,6 @@
 "jeśli to możliwe, zaktualizuj indeks używając ponownie starych rozwiązań "
 "konfliktów"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD odłączone na "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD odłączone od "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Dodaj zawartość pliku do indeksu"
@@ -23870,8 +24256,8 @@
 msgstr "Wypisz i sprawdź indeksy multi-pack"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Tworzy obiekt tagu"
+msgid "Creates a tag object with extra validation"
+msgstr "Tworzy obiekt tagu z dodatkowymi sprawdzeniami"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24178,69 +24564,56 @@
 msgstr "Podaje celowo nieśledzone pliki do pomijania"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr ""
+"Przypisz nazwiska autorów/składających i/lub ich adresy poczty elektronicznej"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Definiowanie właściwości pod-modułów"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Przestrzenie nazw Gita"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Pomocnicze programy do interakcji ze zdalnymi repozytoriami"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Układ repozytorium Gita"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Podawanie Gitowi rewizji i zakresów"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Montowanie jednego repozytorium w drugim"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Samouczek wprowadzenia do Gita: część druga"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Samouczek wprowadzenia do Gita"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Przegląd zalecanych przepływów pracy z Gitem"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Błędne wejście rev: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Nie podano pliku dziennika"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "nie można odczytać $file do odtwarzania"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? o czym ty w ogóle mówisz?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "przeszukanie nie powiodło się: nie podano polecenia."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "wykonywanie $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24249,11 +24622,11 @@
 "przeszukanie nie powiodło się:\n"
 "kod wyjścia $res z „$command” jest <0 lub >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "przeszukanie nie może już kontynuować"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24262,14 +24635,10 @@
 "przeszukanie nie powiodło się:\n"
 "„bisect-state $state” zakończyło się z kodem błędu $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "przeszukanie pomyślne"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "Teraz nie przeszukujemy."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25568,6 +25937,77 @@
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Czy na pewno wysłać %s? [y | N]: "
 
+#~ msgid "rev-list died"
+#~ msgstr "rev-list padło"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-write [--no-log] <state> <revision> "
+#~ "<good_term> <bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-write [--no-log] <stan> <rewizja> "
+#~ "<dobre_określenie> <złe_określenie>"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
+#~ "<bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-check-and-set-terms <polecenie> "
+#~ "<dobre_określenie> <złe_określenie>"
+
+#~ msgid "git bisect--helper --bisect-auto-next"
+#~ msgstr "git bisect--helper --bisect-auto-next"
+
+#~ msgid "write out the bisection state in BISECT_LOG"
+#~ msgstr "wypisz stan przeszukiwania w BISECT_LOG"
+
+#~ msgid "check and set terms in a bisection state"
+#~ msgstr "sprawdź i ustaw określenia w stanie przeszukiwania"
+
+#~ msgid ""
+#~ "verify the next bisection state then checkout the next bisection commit"
+#~ msgstr ""
+#~ "sprawdź kolejny stan przeszukiwania, i wtedy wybierz kolejny zapis do "
+#~ "przeszukiwania"
+
+#~ msgid "--bisect-write requires either 4 or 5 arguments"
+#~ msgstr "--bisect-write wymaga 4 albo 5 argumentów"
+
+#~ msgid "--check-and-set-terms requires 3 arguments"
+#~ msgstr "--check-and-set-terms wymaga 3 argumentów"
+
+#~ msgid "--bisect-auto-next requires 0 arguments"
+#~ msgstr "--bisect-auto-next wymaga braku argumentów"
+
+#~ msgid "Force progress reporting"
+#~ msgstr "Wymuś zgłaszanie postępu"
+
+#, c-format
+#~ msgid "Error deleting remote-tracking branch '%s'"
+#~ msgstr "Błąd usuwania śledzącej gałęzi „%s”"
+
+#, c-format
+#~ msgid "Error deleting branch '%s'"
+#~ msgstr "Błąd usuwania gałęzi „%s”"
+
+#~ msgid "show parse tree for grep expression"
+#~ msgstr "pokaż drzewo przetwarzania w wyrażeniu grepa"
+
+#~ msgid "too many parameters"
+#~ msgstr "zbyt wiele parametrów"
+
+#~ msgid "too few parameters"
+#~ msgstr "zbyt mało argumentów"
+
+#~ msgid "Recurse into nested submodules"
+#~ msgstr "Schodź do zagnieżdżonych pod-modułów"
+
+#~ msgid "too many params"
+#~ msgstr "zbyt wiele parametrów"
+
+#, sh-format
+#~ msgid "Bad rev input: $arg"
+#~ msgstr "Błędne wejście rev: $arg"
+
 #~ msgid "Counting distinct commits in commit graph"
 #~ msgstr "Zliczanie rozróżnialnych zapisów w grafie zapisów"
 
@@ -25810,12 +26250,6 @@
 #~ msgid "change upstream info"
 #~ msgstr "zmień gałąź nadrzędną"
 
-#~ msgid "(HEAD detached from %s)"
-#~ msgstr "(HEAD odłączone od %s)"
-
-#~ msgid "(HEAD detached at %s)"
-#~ msgstr "(HEAD odłączone na %s)"
-
 #~ msgid " **** invalid ref ****"
 #~ msgstr " **** nieprawidłowa referencja ****"
 
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 61ff13f..f068d0e 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -1,264 +1,390 @@
-# Portuguese translations for Git package.
-# Copyright (C) 2012 Marco Sousa <marcomsousa AT gmail.com>
-# Copyright (C) 2016 Vasco Almeida <vascomalmeida@sapo.pt>
+# Portugual's Portuguese translations for Git package.
+# Copyright (C) 2020 Daniel Santos <hello@brighterdan.com> 
 # This file is distributed under the same license as the Git package.
 # Contributors:
-# - Marco Sousa <marcomsousa AT gmail.com>
-# Vasco Almeida <vascomalmeida@sapo.pt>, 2016, 2017.
+#   - Daniel Santos <hello@brighterdan.com>
+# Past Contributors:
+#   - Marco Sousa <marcomsousa AT gmail.com>
+#   - Vasco Almeida <vascomalmeida@sapo.pt>, 2016, 2017.
+#
+#  Git glossary for Portuguese translators
+#
+#   English                          |  Portuguese
+#   ---------------------------------+--------------------------------------
+#   3-way merge                      |  tri-junção
+#   abbreviate                       |  
+#   alternate object database        |  
+#   amend                            |  
+#   ancestor                         |  
+#   annotated tag                    |  
+#   bare repository                  |  repositório nú
+#   bisect                           |  
+#   blob object                      |  
+#   bloom filter                     |  
+#   branch                           |  ramo 
+#   bundle                           |  
+#   bypass                           |  
+#   cache                            |  cache
+#   chain                            |  
+#   changeset                        |  
+#   checkout                         |  
+#   checksum                         |  
+#   cherry-picking                   |  apanhar
+#   clean                            |  
+#   clone                            |  
+#   commit                           |  memorizar
+#   commit message                   |  mensagem de memória
+#   commit object                    |  objeto da memória
+#   commit-ish (also committish)     |  mnemónica
+#   conflict                         |  conflito
+#   core Git                         |  
+#   cover letter                     |  
+#   DAG                              |  DAG
+#   dangling object                  |  objeto DAG
+#   detached HEAD                    |  HEAD solta
+#   directory                        |  pasta
+#   dirty                            |  
+#   dumb HTTP protocol               |  
+#   evil merge                       |  
+#   fast-forward                     |  
+#   fetch                            |  buscar
+#   file system                      |  
+#   fork                             |  aforquilhar
+#   Git archive                      |  
+#   gitfile                          |  
+#   grafts                           |  
+#   hash                             |  
+#   HEAD                             |  HEAD
+#   head                             |  
+#   head ref                         |  
+#   header                           |  cabeçalho
+#   hook                             |  
+#   hunk                             |  pedaço
+#   index                            |  
+#   index entry                      |  
+#   loose object                     |  
+#   loose refs                       |  
+#   master                           |  
+#   merge                            |  junção 
+#   object                           |  
+#   object database                  |  
+#   object identifier                |  
+#   object name                      |  
+#   object type                      |  
+#   octopus                          |  
+#   origin                           |  
+#   pack                             |  
+#   pack index                       |  
+#   packfile                         |  
+#   parent                           |  
+#   patch                            |  
+#   pathspec                         |  
+#   pattern                          |  pattern
+#   pickaxe                          |  
+#   plumbing                         |  
+#   porcelain                        |  
+#   precious-objects repo            |  
+#   prune                            |  
+#   pull                             |  agarrar
+#   push                             |  atirar
+#   reachable                        |  
+#   rebase                           |  
+#   ref                              |  
+#   reflog                           |  
+#   refspec                          |  
+#   remote                           |  
+#   remote-tracking branch           |  
+#   replay                           |  
+#   repo                             |  repo
+#   repository                       |  repositório
+#   reset                            |  reposição
+#   resolve                          |  
+#   revert                           |  reverter
+#   revision                         |  revisão
+#   rewind                           |  
+#   SCM                              |  
+#   SHA-1                            |  SHA-1
+#   shallow repository               |  
+#   signed tag                       |  
+#   smart HTTP protocol              |  
+#   squash                           |  
+#   squelch                          |  suprimir
+#   stage                            |  preparar
+#   stash                            |  arrumos
+#   submodule                        |  
+#   symref                           |  
+#   tag                              |  
+#   tag object                       |  
+#   tagger                           |  
+#   topic branch                     |  
+#   track                            |  seguir
+#   trailer                          |  
+#   tree                             |  
+#   tree object                      |  
+#   tree-ish (also treeish)          |  
+#   unmerged index                   |  
+#   unpack                           |  
+#   unreachable object               |  
+#   unstage                          |  despreparar
+#   upstream                         |  upstream
+#   upstream branch                  |  ramo upstream
+#   working tree                     |  
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-10-10 09:32+0800\n"
-"PO-Revision-Date: 2017-05-01 21:17+0000\n"
-"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
-"Language-Team: Portuguese\n"
-"Language: pt\n"
+"POT-Creation-Date: 2020-12-15 16:27+0800\n"
+"PO-Revision-Date: 2020-10-14 11:43+0100\n"
+"Last-Translator: Daniel Santos <hello@brighterdan.com>\n"
+"Language-Team: Git L10N Português <https://github.com/git-l10n-pt-PT/>\n"
+"Language: pt-PT\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.1\n"
 
-#: add-interactive.c:368
+#: add-interactive.c:376
 #, fuzzy, c-format
 msgid "Huh (%s)?"
-msgstr "O quê (%s)?\n"
+msgstr "O quê (%s)?"
 
-#: add-interactive.c:521 add-interactive.c:822 reset.c:65 sequencer.c:3250
-#: sequencer.c:3698 sequencer.c:3840 builtin/rebase.c:1526
-#: builtin/rebase.c:1944
+#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
+#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
+#: builtin/rebase.c:1955
 msgid "could not read index"
-msgstr "não foi possível ler o índice"
+msgstr "incapaz de ler index"
 
-#: add-interactive.c:576 git-add--interactive.perl:269
+#: add-interactive.c:584 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binário"
 
-#: add-interactive.c:634 git-add--interactive.perl:278
+#: add-interactive.c:642 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "nada"
 
-#: add-interactive.c:635 git-add--interactive.perl:314
+#: add-interactive.c:643 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
-msgstr "não alterado"
+msgstr "inalterado"
 
-#: add-interactive.c:672 git-add--interactive.perl:643
+#: add-interactive.c:680 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Atualizar"
 
-#: add-interactive.c:689 add-interactive.c:877
+#: add-interactive.c:697 add-interactive.c:885
 #, fuzzy, c-format
 msgid "could not stage '%s'"
-msgstr "não foi possível obter stat de '%s'"
+msgstr "inacapaz de stage '%s'"
 
-#: add-interactive.c:695 add-interactive.c:884 reset.c:89 sequencer.c:3444
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
 #, fuzzy
 msgid "could not write index"
-msgstr "não foi possível ler o índice"
+msgstr "incapaz de escrever index"
 
-#: add-interactive.c:698 git-add--interactive.perl:628
+#: add-interactive.c:706 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
-msgstr[0] "%d caminho atualizado\n"
-msgstr[1] "%d caminhos atualizados\n"
+msgstr[0] "actualizou %d path\n"
+msgstr[1] "actualizou %d paths\n"
 
-#: add-interactive.c:716 git-add--interactive.perl:678
+#: add-interactive.c:724 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
-msgstr "nota: %s é agora não controlado.\n"
+msgstr "nota: %s agora está por seguir.\n"
 
-#: add-interactive.c:721 apply.c:4127 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:295
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
-msgstr "falha ao invocar make_cache_entry em '%s'"
+msgstr "make_cache_entry falhou para path '%s'"
 
-#: add-interactive.c:751 git-add--interactive.perl:655
+#: add-interactive.c:759 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Reverter"
 
-#: add-interactive.c:767
+#: add-interactive.c:775
 #, fuzzy
 msgid "Could not parse HEAD^{tree}"
-msgstr "não foi possível analisar o commit HEAD"
+msgstr "Incapaz de parse HEAD^{tree}"
 
-#: add-interactive.c:805 git-add--interactive.perl:631
+#: add-interactive.c:813 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
-msgstr[0] "%d caminho revertido\n"
-msgstr[1] "%d caminhos revertidos\n"
+msgstr[0] "reverti %d path\n"
+msgstr[1] "reverti %d paths\n"
 
-#: add-interactive.c:856 git-add--interactive.perl:695
+#: add-interactive.c:864 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
-msgstr "Nenhum ficheiros não controlado.\n"
+msgstr "Nenhuns ficheiros untracked.\n"
 
-#: add-interactive.c:860 git-add--interactive.perl:689
+#: add-interactive.c:868 git-add--interactive.perl:687
 msgid "Add untracked"
-msgstr "Adicionar não controlados"
+msgstr "Adiciona untracked"
 
-#: add-interactive.c:887 git-add--interactive.perl:625
+#: add-interactive.c:895 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
-msgstr[0] "%d caminho adicionar\n"
-msgstr[1] "%d caminhos adicionados\n"
+msgstr[0] "adicionei %d path\n"
+msgstr[1] "adicionei %d paths\n"
 
-#: add-interactive.c:917
+#: add-interactive.c:925
 #, fuzzy, c-format
 msgid "ignoring unmerged: %s"
-msgstr "ignorado não integrado: %s\n"
+msgstr "ignorando unmerged: %s"
 
-#: add-interactive.c:929 add-patch.c:1738 git-add--interactive.perl:1371
+#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
 #, c-format
 msgid "Only binary files changed.\n"
-msgstr "Apenas ficheiros binários alterados.\n"
+msgstr "Apenas ficheiros binários mudaram.\n"
 
-#: add-interactive.c:931 add-patch.c:1736 git-add--interactive.perl:1373
+#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
 #, c-format
 msgid "No changes.\n"
-msgstr "Sem alterações.\n"
+msgstr "Sem modificação.\n"
 
-#: add-interactive.c:935 git-add--interactive.perl:1381
+#: add-interactive.c:943 git-add--interactive.perl:1379
 msgid "Patch update"
 msgstr "Atualizar patch"
 
-#: add-interactive.c:974 git-add--interactive.perl:1794
+#: add-interactive.c:982 git-add--interactive.perl:1792
 msgid "Review diff"
 msgstr "Rever diff"
 
-#: add-interactive.c:1002
-#, fuzzy
-msgid "show paths with changes"
-msgstr "mostrar ficheiros com correspondências no paginador"
-
-#: add-interactive.c:1004
-msgid "add working tree state to the staged set of changes"
-msgstr ""
-
-#: add-interactive.c:1006
-msgid "revert staged set of changes back to the HEAD version"
-msgstr ""
-
-#: add-interactive.c:1008
-#, fuzzy
-msgid "pick hunks and update selectively"
-msgstr "selecionar blocos interativamente"
-
 #: add-interactive.c:1010
 #, fuzzy
-msgid "view diff between HEAD and index"
-msgstr "repor HEAD e índice"
+msgid "show paths with changes"
+msgstr "mostrar paths modificados"
 
 #: add-interactive.c:1012
+msgid "add working tree state to the staged set of changes"
+msgstr "adicionar estado de working tree para conjunto das modificações staged"
+
+#: add-interactive.c:1014
+msgid "revert staged set of changes back to the HEAD version"
+msgstr "reverter conjunto das modificações staged de volta para a versão HEAD"
+
+#: add-interactive.c:1016
+#, fuzzy
+msgid "pick hunks and update selectively"
+msgstr "apanha os pedaços e atualiza selectivamente"
+
+#: add-interactive.c:1018
+#, fuzzy
+msgid "view diff between HEAD and index"
+msgstr "ver diff entre HEAD e índex"
+
+#: add-interactive.c:1020
 msgid "add contents of untracked files to the staged set of changes"
 msgstr ""
+"adiciona conteúdo de ficheiros untracked para conjunto das modificações "
+"staged"
 
-#: add-interactive.c:1020 add-interactive.c:1069
+#: add-interactive.c:1028 add-interactive.c:1077
 msgid "Prompt help:"
-msgstr ""
-
-#: add-interactive.c:1022
-#, fuzzy
-msgid "select a single item"
-msgstr "selecionar pai principal"
-
-#: add-interactive.c:1024
-#, fuzzy
-msgid "select a range of items"
-msgstr "selecionar o tratamento de tags assinadas"
-
-#: add-interactive.c:1026
-#, fuzzy
-msgid "select multiple ranges"
-msgstr "%s tem múltiplos valores"
-
-#: add-interactive.c:1028 add-interactive.c:1073
-msgid "select item based on unique prefix"
-msgstr ""
+msgstr "Prompt ajuda:"
 
 #: add-interactive.c:1030
 #, fuzzy
-msgid "unselect specified items"
-msgstr "usar ficheiro de modelo especificado"
+msgid "select a single item"
+msgstr "seleciona um único item"
 
 #: add-interactive.c:1032
-msgid "choose all items"
-msgstr ""
+#, fuzzy
+msgid "select a range of items"
+msgstr "seleciona um conjunto de items"
 
 #: add-interactive.c:1034
+#, fuzzy
+msgid "select multiple ranges"
+msgstr "seleciona múltiplos conjuntos"
+
+#: add-interactive.c:1036 add-interactive.c:1081
+msgid "select item based on unique prefix"
+msgstr "seleciona item tendo base o prefixo único"
+
+#: add-interactive.c:1038
+#, fuzzy
+msgid "unselect specified items"
+msgstr "tira a seleção de items especificados"
+
+#: add-interactive.c:1040
+msgid "choose all items"
+msgstr "escolhe todos items"
+
+#: add-interactive.c:1042
 msgid "(empty) finish selecting"
-msgstr ""
+msgstr "(vazio) acaba de selecionar"
 
-#: add-interactive.c:1071
+#: add-interactive.c:1079
 msgid "select a numbered item"
-msgstr ""
+msgstr "seleciona item numerado"
 
-#: add-interactive.c:1075
+#: add-interactive.c:1083
 msgid "(empty) select nothing"
-msgstr ""
+msgstr "(vazio) seleciona nada"
 
-#: add-interactive.c:1083 builtin/clean.c:816 git-add--interactive.perl:1891
+#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
 msgid "*** Commands ***"
 msgstr "*** Comandos ***"
 
-#: add-interactive.c:1084 builtin/clean.c:817 git-add--interactive.perl:1888
+#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
 msgid "What now"
 msgstr "E agora"
 
-#: add-interactive.c:1136 git-add--interactive.perl:213
+#: add-interactive.c:1144 git-add--interactive.perl:213
 msgid "staged"
-msgstr "preparado"
+msgstr "staged"
 
-#: add-interactive.c:1136 git-add--interactive.perl:213
+#: add-interactive.c:1144 git-add--interactive.perl:213
 msgid "unstaged"
-msgstr "não preparado"
+msgstr "unstaged"
 
-#: add-interactive.c:1136 apply.c:4984 apply.c:4987 builtin/am.c:2270
-#: builtin/am.c:2273 builtin/bugreport.c:133 builtin/clone.c:123
-#: builtin/fetch.c:147 builtin/merge.c:275 builtin/pull.c:190
+#: add-interactive.c:1144 apply.c:4989 apply.c:4992 builtin/am.c:2257
+#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
+#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
 #: builtin/submodule--helper.c:409 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
 #: git-add--interactive.perl:213
 msgid "path"
-msgstr "caminho"
+msgstr "path"
 
-#: add-interactive.c:1143
+#: add-interactive.c:1151
 #, fuzzy
 msgid "could not refresh index"
-msgstr "não foi possível ler o índice"
+msgstr "incapaz de reactualizar o index"
 
-#: add-interactive.c:1157 builtin/clean.c:781 git-add--interactive.perl:1805
+#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
 #, c-format
 msgid "Bye.\n"
 msgstr "Adeus.\n"
 
-#: add-patch.c:34 git-add--interactive.perl:1433
+#: add-patch.c:34 git-add--interactive.perl:1431
 #, fuzzy, c-format, perl-format
 msgid "Stage mode change [y,n,q,a,d%s,?]? "
-msgstr "Preparar alteração de modo [y,n,q,a,d,/%s,?]? "
+msgstr "Stage modo de modificação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:35 git-add--interactive.perl:1434
+#: add-patch.c:35 git-add--interactive.perl:1432
 #, fuzzy, c-format, perl-format
 msgid "Stage deletion [y,n,q,a,d%s,?]? "
-msgstr "Preparar eliminação [y,n,q,a,d,/%s,?]? "
+msgstr "Eliminação stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:36 git-add--interactive.perl:1435
+#: add-patch.c:36 git-add--interactive.perl:1433
 #, fuzzy, c-format, perl-format
 msgid "Stage addition [y,n,q,a,d%s,?]? "
-msgstr "Preparar eliminação [y,n,q,a,d,/%s,?]? "
+msgstr "Adição stage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:37 git-add--interactive.perl:1436
+#: add-patch.c:37 git-add--interactive.perl:1434
 #, fuzzy, c-format, perl-format
 msgid "Stage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Preparar este excerto [y,n,q,a,d,/%s,?]? "
+msgstr "Stage este pedaço [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:39
 #, fuzzy
@@ -266,8 +392,8 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "staging."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"como preparado imediatamente."
+"Se o patch submete-se corretamente, o pedaço editado será marcado para stage "
+"imediatamente."
 
 #: add-patch.c:42
 #, fuzzy
@@ -278,31 +404,31 @@
 "a - stage this hunk and all later hunks in the file\n"
 "d - do not stage this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - preparar este excerto\n"
-"n - não preparar este excerto\n"
-"q - sair; não preparar este excerto nem os restantes\n"
-"a - preparar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não preparar este excerto nem os excertos seguintes no ficheiro"
+"y - stage este pedaço\n"
+"n - o stage deste pedaço será retirado\n"
+"q - sair; retirar de stage este pedaço e qualquer um dos que permaneçam\n"
+"a - stage este pedaço e qualquer próximo pedaço neste ficheiro\n"
+"d - retirar o stage deste pedaço e qualquer próximo pedaço neste ficheiro\n"
 
-#: add-patch.c:56 git-add--interactive.perl:1439
+#: add-patch.c:56 git-add--interactive.perl:1437
 #, fuzzy, c-format, perl-format
 msgid "Stash mode change [y,n,q,a,d%s,?]? "
-msgstr "Esconder alteração de modo [y,n,q,a,d,/%s,?]? "
+msgstr "Esconder modo de modificação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:57 git-add--interactive.perl:1440
+#: add-patch.c:57 git-add--interactive.perl:1438
 #, fuzzy, c-format, perl-format
 msgid "Stash deletion [y,n,q,a,d%s,?]? "
-msgstr "Esconder eliminação [y,n,q,a,d,/%s,?]? "
+msgstr "Eliminação da arrumação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:58 git-add--interactive.perl:1441
+#: add-patch.c:58 git-add--interactive.perl:1439
 #, fuzzy, c-format, perl-format
 msgid "Stash addition [y,n,q,a,d%s,?]? "
-msgstr "Esconder eliminação [y,n,q,a,d,/%s,?]? "
+msgstr "Adição da arrumação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:59 git-add--interactive.perl:1442
+#: add-patch.c:59 git-add--interactive.perl:1440
 #, fuzzy, c-format, perl-format
 msgid "Stash this hunk [y,n,q,a,d%s,?]? "
-msgstr "Esconder este excerto [y,n,q,a,d,/%s,?]? "
+msgstr "Esconde este pedaço [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:61
 #, fuzzy
@@ -310,8 +436,8 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "stashing."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"como escondido imediatamente."
+"Se o patch submete-se corretamente, o pedaço editado será marcado para "
+"arrumação imediatamente."
 
 #: add-patch.c:64
 #, fuzzy
@@ -322,31 +448,31 @@
 "a - stash this hunk and all later hunks in the file\n"
 "d - do not stash this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - esconder este excerto\n"
-"n - não esconder este excerto\n"
-"q - sair; não esconder este excerto nem os restantes\n"
-"a - esconder este excerto e todos os seguintes no ficheiro\n"
-"d - não esconder este excerto nem os excertos seguintes no ficheiro"
+"y - arrumar este pedaço\n"
+"n - mostrar este pedaço\n"
+"q - sair; mostrar este pedaço e qualquer outro restante\n"
+"a - arrumar este pedaço e qualquer próximo deste ficheiro\n"
+"d - mostrar este pedaço e qualquer próximo deste ficheiro\n"
 
-#: add-patch.c:80 git-add--interactive.perl:1445
+#: add-patch.c:80 git-add--interactive.perl:1443
 #, fuzzy, c-format, perl-format
 msgid "Unstage mode change [y,n,q,a,d%s,?]? "
-msgstr "Não preparar alteração de modo [y,n,q,a,d,/%s,?]? "
+msgstr "Unstage modo de modificação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:81 git-add--interactive.perl:1446
+#: add-patch.c:81 git-add--interactive.perl:1444
 #, fuzzy, c-format, perl-format
 msgid "Unstage deletion [y,n,q,a,d%s,?]? "
-msgstr "Não preparar eliminação [y,n,q,a,d,/%s,?]? "
+msgstr "Eliminação do unstage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:82 git-add--interactive.perl:1447
+#: add-patch.c:82 git-add--interactive.perl:1445
 #, fuzzy, c-format, perl-format
 msgid "Unstage addition [y,n,q,a,d%s,?]? "
-msgstr "Não preparar eliminação [y,n,q,a,d,/%s,?]? "
+msgstr "Adição do unstage [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:83 git-add--interactive.perl:1448
+#: add-patch.c:83 git-add--interactive.perl:1446
 #, fuzzy, c-format, perl-format
 msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Não preparar este excerto [y,n,q,a,d,/%s,?]? "
+msgstr "Unstage este pedaço [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:85
 #, fuzzy
@@ -354,8 +480,8 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "unstaging."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"como não preparado imediatamente."
+"Se patch submete-se corretamente, o pedaço editado será imediatamente "
+"marcado para unstage."
 
 #: add-patch.c:88
 #, fuzzy
@@ -366,31 +492,32 @@
 "a - unstage this hunk and all later hunks in the file\n"
 "d - do not unstage this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - despreparar este excerto\n"
-"n - não despreparar este excerto\n"
-"q - sair; não despreparar este excerto nem outros restantes\n"
-"a - despreparar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não despreparar este excerto nem os excertos seguintes no ficheiro"
+"y - unstage este pedaço\n"
+"n - o unstage deste pedaço será retirado\n"
+"q - sair; retirar de unstage este pedaço e qualquer outro restante\n"
+"a - unstage este pedaço e todos próximos pedaços deste ficheiro\n"
+"d - retirar este pedaço da arrumação e qualquer próximo pedaço deste "
+"ficheiro\n"
 
-#: add-patch.c:103 git-add--interactive.perl:1451
+#: add-patch.c:103 git-add--interactive.perl:1449
 #, fuzzy, c-format, perl-format
 msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar alteração de modo ao índice [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter modo de modificação para index [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:104 git-add--interactive.perl:1452
+#: add-patch.c:104 git-add--interactive.perl:1450
 #, fuzzy, c-format, perl-format
 msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar eliminação ao índice [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter eliminação para index [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:105 git-add--interactive.perl:1453
+#: add-patch.c:105 git-add--interactive.perl:1451
 #, fuzzy, c-format, perl-format
 msgid "Apply addition to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar eliminação ao índice [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter adição para index [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:106 git-add--interactive.perl:1454
+#: add-patch.c:106 git-add--interactive.perl:1452
 #, fuzzy, c-format, perl-format
 msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
-msgstr "Aplicar este excerto ao índice [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter este pedaço para index [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:108 add-patch.c:176 add-patch.c:221
 #, fuzzy
@@ -398,8 +525,8 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "applying."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"para ser aplicado imediatamente."
+"Se o patch aplica-se corretamente, o pedaço editado será marcado para a "
+"submissão imediatamente."
 
 #: add-patch.c:111
 #, fuzzy
@@ -410,35 +537,35 @@
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - aplicar este excerto ao índice\n"
-"n - não aplicar este excerto ao índice\n"
-"q - sair; não aplicar este excerto nem os restantes\n"
-"a - aplicar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não aplicar este excerto nem os excertos seguintes no ficheiro"
+"y - submeter este pedaço para index\n"
+"n - declinar este pedaço para index\n"
+"q - sair; declinar este pedaço e qualquer outro restante\n"
+"a - submeter este pedaço e qualquer próximo deste ficheiro\n"
+"d - declinar este pedaço e qualquer próximo deste ficheiro\n"
 
-#: add-patch.c:126 git-add--interactive.perl:1457
-#: git-add--interactive.perl:1475
+#: add-patch.c:126 git-add--interactive.perl:1455
+#: git-add--interactive.perl:1473
 #, fuzzy, c-format, perl-format
 msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar alteração de modo da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar modo de modificação da worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:127 git-add--interactive.perl:1458
-#: git-add--interactive.perl:1476
+#: add-patch.c:127 git-add--interactive.perl:1456
+#: git-add--interactive.perl:1474
 #, fuzzy, c-format, perl-format
 msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar eliminação da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar eliminação da worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:128 git-add--interactive.perl:1459
-#: git-add--interactive.perl:1477
+#: add-patch.c:128 git-add--interactive.perl:1457
+#: git-add--interactive.perl:1475
 #, fuzzy, c-format, perl-format
 msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar eliminação da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar adição da worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:129 git-add--interactive.perl:1460
-#: git-add--interactive.perl:1478
+#: add-patch.c:129 git-add--interactive.perl:1458
+#: git-add--interactive.perl:1476
 #, fuzzy, c-format, perl-format
 msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar este excerto da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar este pedaço da worktree [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:131 add-patch.c:154 add-patch.c:199
 #, fuzzy
@@ -446,8 +573,8 @@
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "discarding."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"para ser descartado imediatamente."
+"Se o patch aplica-se corretamente, o pedaço editado será marcado para ser "
+"descartado imediatamente."
 
 #: add-patch.c:134 add-patch.c:202
 #, fuzzy
@@ -458,36 +585,31 @@
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - descartar este excerto da árvore de trabalho\n"
-"n - não descartar este excerto da árvore de trabalho\n"
-"q - sair; não descartar este excerto nem os restantes\n"
-"a - descartar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não descartar este excerto nem os excertos seguintes no ficheiro"
+"y - descartar este pedaço de worktree\n"
+"n - aceitar este pedaço de worktree\n"
+"q - sair; aceitar este pedaço e qualquer outro restante\n"
+"a - descartar este pedaço e qualquer próximo deste ficheiro\n"
+"d - aceitar este pedaço e qualquer próximo deste ficheiro\n"
 
-#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1463
+#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
 #, fuzzy, c-format, perl-format
 msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Descartar alteração de modo do índice e da árvore de trabalho [y,n,q,a,d,/"
-"%s,?]? "
+msgstr "Descartar modo de modficação de index e worktree [y,n,q,a,d%s,?]?"
 
-#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1464
+#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1462
 #, fuzzy, c-format, perl-format
 msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Descartar eliminação do índice e da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar eliminação de index e worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1465
+#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
 #, fuzzy, c-format, perl-format
 msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Descartar eliminação do índice e da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar adição de index e worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1466
+#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
 #, fuzzy, c-format, perl-format
 msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Descartar este excerto do índice e da árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Descartar este pedaço de index e worktree [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:157
 #, fuzzy
@@ -498,36 +620,31 @@
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - descartar este excerto do índice e da árvore de trabalho\n"
-"n - não descartar este excerto do índice nem da árvore de trabalho\n"
-"q - sair; não descartar este excerto nem nenhum dos restantes\n"
-"a - descartar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não descartar este excerto nem os excertos seguintes no ficheiro"
+"y - descartar este pedaço de index e worktree\n"
+"n - aceitar este pedaço de index e worktree\n"
+"q - sair; aceitar este pedaço e qualquer outro restante\n"
+"a - descartar este pedaço e qualquer próximo deste ficheiro\n"
+"d - aceitar este pedaço e qualquer próximo deste ficheiro\n"
 
-#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1469
+#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
 #, fuzzy, c-format, perl-format
 msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar alteração de modo ao índice e à árvore de trabalho [y,n,q,a,d,/"
-"%s,?]? "
+msgstr "Submeter modo de modificação para index e worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1470
+#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1468
 #, fuzzy, c-format, perl-format
 msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar eliminação ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter eliminação para index e worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1471
+#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
 #, fuzzy, c-format, perl-format
 msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar eliminação ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter adição para index e worktree [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1472
+#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
 #, fuzzy, c-format, perl-format
 msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar este excerto ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter este pedaço para index e worktree [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:179
 #, fuzzy
@@ -538,11 +655,11 @@
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - aplicar este excerto ao índice e à árvore de trabalho\n"
-"n - não aplicar este excerto ao índice e à árvore de trabalho\n"
-"q - sair; não aplicar este excerto ou restantes\n"
-"a - aplicar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não aplicar este excerto nem os excertos seguintes no ficheiro"
+"y - submeter este pedaço para index e worktree\n"
+"n - declinar este pedaço para index e worktree\n"
+"q - sair; declinar este pedaço e qualquer outro restante\n"
+"a - submeter este pedaço e qualquer próximo deste ficheiro\n"
+"d - declinar este pedaço e qualquer próximo deste ficheiro\n"
 
 #: add-patch.c:224
 #, fuzzy
@@ -553,55 +670,59 @@
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - aplicar este excerto ao índice e à árvore de trabalho\n"
-"n - não aplicar este excerto ao índice e à árvore de trabalho\n"
-"q - sair; não aplicar este excerto ou restantes\n"
-"a - aplicar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não aplicar este excerto nem os excertos seguintes no ficheiro"
+"y - submeter este pedaço para worktree\n"
+"n - declinar este pedaço para worktree\n"
+"q - sair; declinar este pedaço e qualquer outro restantes\n"
+"a - submeter este pedaço e qualquer próximo deste ficheiro\n"
+"d - declinar este pedaço e qualquer próximo deste ficheiro\n"
 
 #: add-patch.c:342
 #, fuzzy, c-format
 msgid "could not parse hunk header '%.*s'"
-msgstr "não foi possível analisar o patch '%s'"
+msgstr "incapaz de analisar ínicio de pedaço '%s'"
 
 #: add-patch.c:361 add-patch.c:365
 #, fuzzy, c-format
 msgid "could not parse colored hunk header '%.*s'"
-msgstr "não foi possível abrir ou ler '%s'"
+msgstr "incapaz de analizar início de pedaço colorido '%.*s'"
 
 #: add-patch.c:419
 #, fuzzy
 msgid "could not parse diff"
-msgstr "não foi possível analisar %s"
+msgstr "incapaz de analisar diff"
 
 #: add-patch.c:438
 #, fuzzy
 msgid "could not parse colored diff"
-msgstr "Não foi possível analisar a linha %d."
+msgstr "incapaz de analisar diff colorido"
 
 #: add-patch.c:452
 #, fuzzy, c-format
 msgid "failed to run '%s'"
-msgstr "falha ao invocar unlink de '%s'"
+msgstr "falha ao executar '%s'"
 
 #: add-patch.c:611
 msgid "mismatched output from interactive.diffFilter"
-msgstr ""
+msgstr "sem match de output de interactive.diffFilter"
 
 #: add-patch.c:612
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
 msgstr ""
+"O teu filtro tem de manter uma correspondência exata\n"
+"entre seu input e linhas output."
 
-#: add-patch.c:785
+#: add-patch.c:790
 #, fuzzy, c-format
 msgid ""
 "expected context line #%d in\n"
 "%.*s"
-msgstr "linha de configuração %d incorreta em %s"
+msgstr ""
+"linha de contexto esperada #%d em\n"
+"%.*s"
 
-#: add-patch.c:800
+#: add-patch.c:805
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -609,12 +730,16 @@
 "\tdoes not end with:\n"
 "%.*s"
 msgstr ""
+"pedaços sem overlap:\n"
+"%.*s\n"
+"\ttermina sem:\n"
+"%.*s"
 
-#: add-patch.c:1076 git-add--interactive.perl:1117
+#: add-patch.c:1081 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
-msgstr "Modo de edição manual de excerto -- ver guia rápido abaixo no final.\n"
+msgstr "Modo de edição manual de pedaço -- ver final para guia rápido.\n"
 
-#: add-patch.c:1080
+#: add-patch.c:1085
 #, fuzzy, c-format
 msgid ""
 "---\n"
@@ -623,29 +748,29 @@
 "Lines starting with %c will be removed.\n"
 msgstr ""
 "---\n"
-"Para remover linhas '%s', torne-as linhas ' ' (contexto).\n"
-"Para remover linhas '%s', elimine-as.\n"
-"Linhas começadas com %s serão removidas.\n"
+"Para remover '%c' linhas, torna-as linhas ' ' (contexto).\n"
+"Para remover '%c' linhas, elimina-as.\n"
+"Linhas começadas com %c serão removidas.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1094 git-add--interactive.perl:1131
+#: add-patch.c:1099 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"
 "aborted and the hunk is left unchanged.\n"
 msgstr ""
-"Se não se aplicar corretamente, ser-lhe-á dada oportunidade para editar\n"
-"de novo.  Se todas as linhas do excerto forem removidas, a edição é\n"
-"abortada e o exceto é deixado inalterado.\n"
+"Se falha na submissão correta, ser-lhe-á dada nova oportunidade para\n"
+"editar. Se todas as linhas deste pedaço forem removidas, então a edição\n"
+"é abortada e este pedaço é deixado inalterado.\n"
 
-#: add-patch.c:1127
+#: add-patch.c:1132
 #, fuzzy
 msgid "could not parse hunk header"
-msgstr "não foi possível analisar %s"
+msgstr "incapaz interpretar início de pedaço"
 
-#: add-patch.c:1172
+#: add-patch.c:1177
 msgid "'git apply --cached' failed"
-msgstr ""
+msgstr "'git apply --cached' falhou"
 
 #. TRANSLATORS: do not translate [y/n]
 #. The program will only accept that input at this point.
@@ -659,27 +784,27 @@
 #. 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:1241 git-add--interactive.perl:1244
+#: add-patch.c:1246 git-add--interactive.perl:1242
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
-"O excerto que editou não aplica.\n"
-"Edite de novo (responder \"não\" descarta!) [y/n]? "
+"Problema na submissão de pedaço editado. Editar de novo (responder "
+"\"n\" para \"não\" descarta!) [y/n]? "
 
-#: add-patch.c:1284
+#: add-patch.c:1289
 #, fuzzy
 msgid "The selected hunks do not apply to the index!"
-msgstr "Os excertos selecionados não aplicam ao índice!\n"
+msgstr "Submissão incorreta de pedaços selecionados para index!"
 
-#: add-patch.c:1285 git-add--interactive.perl:1348
+#: add-patch.c:1290 git-add--interactive.perl:1346
 msgid "Apply them to the worktree anyway? "
-msgstr "Aplicá-los à árvore de trabalho mesmo assim? "
+msgstr "Submetê-los para worktree mesmo assim? "
 
-#: add-patch.c:1292 git-add--interactive.perl:1351
+#: add-patch.c:1297 git-add--interactive.perl:1349
 msgid "Nothing was applied.\n"
-msgstr "Não foi aplicado nada.\n"
+msgstr "Nada foi submetido.\n"
 
-#: add-patch.c:1349
+#: add-patch.c:1354
 #, fuzzy
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
@@ -692,149 +817,150 @@
 "e - manually edit the current hunk\n"
 "? - print help\n"
 msgstr ""
-"g - selecionar um excerto para ir\n"
-"/ - procurar por um excerto correspondendo à regex dada\n"
-"j - deixar este excerto indecidido, ver excerto seguinte indecidido\n"
-"J - deixar este excerto indecidido, ver excerto seguinte\n"
-"k - deixar este excerto indecidido, ver excerto anterior indecidido\n"
-"K - deixar este excerto indecidido, ver excerto anterior\n"
-"s - dividir o excerto atual em excertos mais pequenos\n"
-"e - editar manualmente o excerto atual\n"
-"? - imprimir ajuda\n"
-
-#: add-patch.c:1511 add-patch.c:1521
-#, fuzzy
-msgid "No previous hunk"
-msgstr "Nenhum excerto anterior\n"
+"j - deixar este pedaço indecidido, ver próximo pedaço indecidido\n"
+"J - deixar este pedaço indecidido, ver próximo pedaço\n"
+"k - deixar este pedaço indecidido, ver pedaço indecidido anterior\n"
+"K - deixar este pedaço indecidido, ver pedaço anterior\n"
+"g - selecionar próximo pedaço\n"
+"/ - procurar por pedaço correspondendo à regex\n"
+"s - dividir o pedaço atual em pedaços mais pequenos\n"
+"e - editar manualmente o pedaço atual\n"
+"? - mostrar ajuda\n"
 
 #: add-patch.c:1516 add-patch.c:1526
 #, fuzzy
+msgid "No previous hunk"
+msgstr "Sem pedaço anterior"
+
+#: add-patch.c:1521 add-patch.c:1531
+#, fuzzy
 msgid "No next hunk"
-msgstr "Nenhum excerto seguinte\n"
+msgstr "Sem próximo pedaço"
 
-#: add-patch.c:1532
+#: add-patch.c:1537
 msgid "No other hunks to goto"
-msgstr ""
+msgstr "Sem qualquer outro pedaço"
 
-#: add-patch.c:1543 git-add--interactive.perl:1608
+#: add-patch.c:1548 git-add--interactive.perl:1606
 msgid "go to which hunk (<ret> to see more)? "
-msgstr "ir para que excerto (<ret> para ver mais)? "
+msgstr "ir para qual pedaço (<ret> para ver mais)? "
 
-#: add-patch.c:1544 git-add--interactive.perl:1610
+#: add-patch.c:1549 git-add--interactive.perl:1608
 msgid "go to which hunk? "
-msgstr "ir para que excerto? "
-
-#: add-patch.c:1555
-#, fuzzy, c-format
-msgid "Invalid number: '%s'"
-msgstr "Número inválido: '%s'\n"
+msgstr "ir para qual pedaço? "
 
 #: add-patch.c:1560
 #, fuzzy, c-format
+msgid "Invalid number: '%s'"
+msgstr "Número inválido: '%s'"
+
+#: add-patch.c:1565
+#, fuzzy, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
-msgstr[0] "Lamento, apenas %d excerto disponível.\n"
-msgstr[1] "Lamento, apenas %d excertos disponíveis.\n"
+msgstr[0] "Lamento, apenas %d pedaço disponível."
+msgstr[1] "Lamento, apenas %d pedaços disponíveis."
 
-#: add-patch.c:1569
+#: add-patch.c:1574
 msgid "No other hunks to search"
-msgstr ""
+msgstr "Sem outro pedaço a procurar"
 
-#: add-patch.c:1575 git-add--interactive.perl:1663
+#: add-patch.c:1580 git-add--interactive.perl:1661
 msgid "search for regex? "
 msgstr "procurar por regex? "
 
-#: add-patch.c:1590
+#: add-patch.c:1595
 #, fuzzy, c-format
 msgid "Malformed search regexp %s: %s"
-msgstr "Regexp de pesquisa malformada %s: %s\n"
+msgstr "Pesquisa regexp deformada %s: %s"
 
-#: add-patch.c:1607
+#: add-patch.c:1612
 #, fuzzy
 msgid "No hunk matches the given pattern"
-msgstr "Nenhum excerto corresponde ao padrão fornecido\n"
+msgstr "Sem pedaço correspondente ao padrão fornecido"
 
-#: add-patch.c:1614
+#: add-patch.c:1619
 msgid "Sorry, cannot split this hunk"
-msgstr ""
+msgstr "Lamento, incapaz de dividir este pedaço"
 
-#: add-patch.c:1618
+#: add-patch.c:1623
 #, fuzzy, c-format
 msgid "Split into %d hunks."
-msgstr "Dividir em %d excerto.\n"
+msgstr "Dividir em %d pedaços."
 
-#: add-patch.c:1622
+#: add-patch.c:1627
 msgid "Sorry, cannot edit this hunk"
-msgstr ""
+msgstr "Lamento, incapaz de editar este pedaço"
 
-#: add-patch.c:1674
+#: add-patch.c:1679
 #, fuzzy
 msgid "'git apply' failed"
-msgstr "falha ao executar o comando stash"
+msgstr "'git apply' falhou"
 
-#: advice.c:140
+#: advice.c:143
 #, c-format
 msgid ""
 "\n"
 "Disable this message with \"git config advice.%s false\""
 msgstr ""
+"\n"
+"Desative este mensagem com \"git config advice.%s false\""
 
-#: advice.c:156
+#: advice.c:159
 #, fuzzy, c-format
 msgid "%shint: %.*s%s\n"
-msgstr "dica: %.*s\n"
+msgstr "%sdica: %.*s%s\n"
 
-#: advice.c:247
+#: advice.c:250
 msgid "Cherry-picking is not possible because you have unmerged files."
-msgstr ""
-"Não é possível efetuar cherry-pick porque tem ficheiros não integrados."
+msgstr "Cherry-picking é impossível porque tem ficheiros em separado."
 
-#: advice.c:249
+#: advice.c:252
 msgid "Committing is not possible because you have unmerged files."
-msgstr "Não é possível submeter porque tem ficheiros não integrados."
+msgstr "Cometer é impossível porque tem ficheiros em separado."
 
-#: advice.c:251
+#: advice.c:254
 msgid "Merging is not possible because you have unmerged files."
-msgstr "Não é possível integrar porque tem ficheiros não integrados."
+msgstr "Juntar é impossível porque tem ficheiros em separado."
 
-#: advice.c:253
+#: advice.c:256
 msgid "Pulling is not possible because you have unmerged files."
-msgstr "Não é possível puxar porque tem ficheiros não integrados."
+msgstr "Puxar é impossível porque tem ficheiros em separado."
 
-#: advice.c:255
+#: advice.c:258
 msgid "Reverting is not possible because you have unmerged files."
-msgstr "Não é possível reverte porque tem ficheiros não integrados."
+msgstr "Reverter é impossível porque tem ficheiros em separado."
 
-#: advice.c:257
+#: advice.c:260
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
-msgstr "Não é possível efetuar %s porque tem ficheiros não integrados."
+msgstr "É impossível fazer %s porque tem ficheiros em separado."
 
-#: advice.c:265
+#: advice.c:268
 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."
 msgstr ""
-"Corrija-os na árvore de trabalho e use 'git add/rm <ficheiro>'\n"
-"conforme apropriado para marcá-los como resolvidos e submeta."
+"Corrija-os em worktree, e use 'git add/rm <ficheiro>' apropriadamente\n"
+"para marcar resolução e fazer uma memória."
 
-#: advice.c:273
+#: advice.c:276
 msgid "Exiting because of an unresolved conflict."
-msgstr "A terminar devido a conflito não resolvido."
+msgstr "Saindo devido a conflito por resolver."
 
-#: advice.c:278 builtin/merge.c:1349
+#: advice.c:281 builtin/merge.c:1369
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
-msgstr "Não concluído a integração (MERGE_HEAD presente)."
+msgstr "O teu juntar ficou por concluír (MERGE_HEAD presente)."
 
-#: advice.c:280
+#: advice.c:283
 msgid "Please, commit your changes before merging."
-msgstr "Submeta as suas alterações antes de integrar."
+msgstr "Por favor, memoriza as tuas modificações antes de juntar."
 
-#: advice.c:281
+#: advice.c:284
 msgid "Exiting because of unfinished merge."
-msgstr "A terminar devido a integração incompleta."
+msgstr "Saindo devido a juntar inacabado."
 
-#: advice.c:287
+#: advice.c:290
 #, fuzzy, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -856,44 +982,51 @@
 "false\n"
 "\n"
 msgstr ""
-"Nota: a extrair '%s'.\n"
+"Nota: trocando para '%s'.\n"
 "\n"
-"Encontra-se em estado 'HEAD destacada'. Pode inspecionar, fazer alterações\n"
-"experimentais e submetê-las e pode descartar qualquer commit que faça neste\n"
-"estado sem interferir outro ramo se extrair outro ramo.\n"
+"Está em 'HEAD solta'. Podes olhar, fazer mudanças experimentais e\n"
+"memorizá-las, e, neste estado, podes descartar qualquer memória que faças\n"
+"sem interferir em qualquer ramo fazendo um switch de ramos.\n"
 "\n"
-"Se deseja criar um novo ramo para reter os commits que criou, pode fazê-lo\n"
-"(agora ou mais tarde) usando -b com o comando checkout outra vez. Exemplo:\n"
+"Se queres criar um novo ramo para reter as memórias que criaste, podes\n"
+"fazer (agora ou mais tarde) usando -c com o comando switch. Exemplo:\n"
 "\n"
-"  git checkout -b <novo-nome-ramo>\n"
+"  git switch -c <novo-nome-de-branch>\n"
+"\n"
+"Ou desfazer esta operação com:\n"
+"\n"
+"  git switch -\n"
+"\n"
+"Desliga este conselho pondo a variável de config advice.detachedHead em"
+"false\n"
 "\n"
 
 #: alias.c:50
 #, fuzzy
 msgid "cmdline ends with \\"
-msgstr "terminar entradas com NUL"
+msgstr "cmdline termina com \\"
 
 #: alias.c:51
 msgid "unclosed quote"
-msgstr ""
+msgstr "aspa aberta"
 
 #: apply.c:69
 #, c-format
 msgid "unrecognized whitespace option '%s'"
-msgstr "opção de espaço em branco não reconhecida '%s'"
+msgstr "opção de whitespace desconhecida '%s'"
 
 #: apply.c:85
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
-msgstr "opção de ignorar espaço em branco não reconhecida '%s'"
+msgstr "opção de ignorar whitespace desconhecida '%s'"
 
 #: apply.c:135
 msgid "--reject and --3way cannot be used together."
-msgstr "--reject e --3way não podem ser usados juntos."
+msgstr "--reject e --3way só podem ser usados separadamente."
 
 #: apply.c:137
 msgid "--cached and --3way cannot be used together."
-msgstr "--cached e --3way não podem ser usados juntos."
+msgstr "--cached e --3way só podem ser usados separadamente."
 
 #: apply.c:140
 msgid "--3way outside a repository"
@@ -910,53 +1043,50 @@
 #: apply.c:801
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
-msgstr "Não é possível preparar a regexp de carimbo de data/hora %s"
+msgstr "Incapaz preparar timestamp de regexp %s"
 
 #: apply.c:810
 #, c-format
 msgid "regexec returned %d for input: %s"
-msgstr "regexec retornou %d para a entra: %s"
+msgstr "regexec devolveu %d para input: %s"
 
 #: apply.c:884
 #, c-format
 msgid "unable to find filename in patch at line %d"
-msgstr "não foi possível encontrar o nome do ficheiro no patch na linha %d"
+msgstr "incapaz de encontrar o nome do ficheiro no patch da linha %d"
 
 #: apply.c:922
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
-msgstr ""
-"git apply: git-diff incorreto - esperava-se /dev/null, obteve-se %s na linha "
+msgstr "git apply: git-diff incorreto - esperava /dev/null, tive %s na linha "
 "%d"
 
 #: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
-msgstr ""
-"git apply: git-diff incorreto - o nome do novo ficheiro na linha %d é "
-"inconsistente"
+msgstr "git apply: git-diff incorreto - novo nome de ficheiro inconsistente "
+"na linha %d"
 
 #: apply.c:929
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
-msgstr ""
-"git apply: git-diff incorreto - o nome do ficheiro antigo na linha %d é "
-"inconsistente"
+msgstr "git apply: git-diff incorreto - antigo nome de ficheiro inconsistente "
+"na linha %d"
 
 #: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
-msgstr "git apply: git-diff incorreto - esperava-se /dev/null na linha %d"
+msgstr "git apply: git-diff incorreto - esperava /dev/null na linha %d"
 
 #: apply.c:963
 #, fuzzy, c-format
 msgid "invalid mode on line %d: %s"
-msgstr "linha de identidade inválida: %s"
+msgstr "modo inválido na linha %d: %s"
 
 #: apply.c:1282
 #, c-format
 msgid "inconsistent header lines %d and %d"
-msgstr ""
+msgstr "linhas de cabeçalho %d e %d inconsistentes"
 
 #: apply.c:1372
 #, c-format
@@ -967,16 +1097,16 @@
 "git diff header lacks filename information when removing %d leading pathname "
 "components (line %d)"
 msgstr[0] ""
-"o cabeçalho do git diff não revelou o nome do ficheiro depois de se remover "
-"%d componente do caminho (linha %d)"
+"cabeçalho do git diff falta informação de nome de ficheiro quando removendo"
+"%d componente do pathname (linha %d)"
 msgstr[1] ""
-"o cabeçalho do git diff não revelou o nome do ficheiro depois de se remover "
-"%d componentes de caminho (linha %d)"
+"cabeçalho do git diff falta informação de nome de ficheiro quando removendo "
+"%d componentes do pathname (linha %d)"
 
 #: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
-msgstr "o cabeçalho do git diff não revela o nome do ficheiro (linha %d)"
+msgstr "cabeçalho do git diff falta informação de nome de ficheiro (linha %d)"
 
 #: apply.c:1481
 #, c-format
@@ -990,56 +1120,56 @@
 
 #: apply.c:1753
 msgid "new file depends on old contents"
-msgstr "o novo ficheiro depende de conteúdos antigos"
+msgstr "novo ficheiro depende de conteúdos antigos"
 
 #: apply.c:1755
 msgid "deleted file still has contents"
-msgstr "o ficheiro eliminado ainda tem conteúdos"
+msgstr "ficheiro eliminado ainda tem conteúdos"
 
 #: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
-msgstr "patch corrompido na linha %d"
+msgstr "patch roto na linha %d"
 
 #: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
-msgstr "o novo ficheiro %s depende de conteúdos antigos"
+msgstr "novo ficheiro %s depende de conteúdos antigos"
 
 #: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
-msgstr "o ficheiro eliminado %s ainda tem conteúdos"
+msgstr "ficheiro apagado %s ainda tem conteúdos"
 
 #: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
-msgstr "** aviso: o ficheiro %s ficará vazio, mas não será eliminado"
+msgstr "** aviso: ficheiro %s fica vazio e mantêm-se"
 
 #: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
-msgstr "patch binário corrompido na linha %d: %.*s"
+msgstr "patch binário roto na linha %d: %.*s"
 
 #: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
-msgstr "patch binário não reconhecido na linha %d"
+msgstr "patch binário irreconhecível na linha %d"
 
 #: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
-msgstr "patch incompreensível na linha %d"
+msgstr "patch com apenas lixo na linha %d"
 
 #: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
-msgstr "não é possível ler a ligação simbólica %s"
+msgstr "incapaz de ler ligação simbólica %s"
 
 #: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
-msgstr "não é possível abrir ou ler %s"
+msgstr "incapaz de abrir ou ler %s"
 
 #: apply.c:2936
 #, c-format
@@ -1050,13 +1180,13 @@
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
-msgstr[0] "Excerto nº%d bem sucedido na linha %d (%d linha deslocada)."
-msgstr[1] "Excerto nº%d bem sucedido na linha %d (%d linhas deslocadas)."
+msgstr[0] "Pedaço #%d apareceu em %d (%d offset de linha)."
+msgstr[1] "Pedaço #%d apareceu em %d (%d offset de linhas)."
 
 #: apply.c:3069
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
-msgstr "Contexto reduzido para (%ld/%ld) para aplicar o fragmento em %d"
+msgstr "Contexto reduzido a (%ld/%ld) para submeter fragmento em %d"
 
 #: apply.c:3075
 #, c-format
@@ -1064,96 +1194,91 @@
 "while searching for:\n"
 "%.*s"
 msgstr ""
-"ao procura por:\n"
+"procurando por:\n"
 "%.*s"
 
 #: apply.c:3097
 #, c-format
 msgid "missing binary patch data for '%s'"
-msgstr "falta de dados do patch binário '%s'"
+msgstr "faltando patch binário para '%s'"
 
 #: apply.c:3105
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
-msgstr ""
-"não é possível aplicar o reverso de um patch binário a '%s' sem o excerto "
-"reverso"
+msgstr "incapaz submeter-inversamente patch binário sem pedaço "
+"inverso a '%s'"
 
 #: apply.c:3152
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
-msgstr ""
-"não é possível aplicar patch binário a '%s' sem linha de índice completa"
+msgstr "incapaz submeter patch binário a '%s' sem a linha completa de index"
 
 #: apply.c:3163
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
-"o patch aplica-se a '%s' (%s), que não corresponde aos conteúdos atuais."
+"o patch submete-se a '%s' (%s), que corresponde a conteúdo actual nenhum."
 
 #: apply.c:3171
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
-msgstr "o patch aplica-se a um '%s' vazio mas não está vazio"
+msgstr "o patch submete-se a um '%s' vazio mas tem conteúdo"
 
 #: apply.c:3189
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
-msgstr "não é possível ler a postimage necessária %s de '%s'"
+msgstr "incapaz ler a postimage necessária %s para '%s'"
 
 #: apply.c:3202
 #, c-format
 msgid "binary patch does not apply to '%s'"
-msgstr "o patch binário não foi aplicado corretamente a '%s'"
+msgstr "path binário submete-se a '%s' de maneira nenhuma"
 
 #: apply.c:3209
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
-msgstr ""
-"o patch binário aplicado a '%s' gera resultados incorretos (esperava-se %s, "
-"obteve-se %s)"
+msgstr "patch binário para '%s' cria resultado incorreto (esperei %s, "
+"recebi %s)"
 
 #: apply.c:3230
 #, c-format
 msgid "patch failed: %s:%ld"
-msgstr "falha ao aplicar o patch: %s:%ld"
+msgstr "patch falhou: %s:%ld"
 
 #: apply.c:3353
 #, c-format
 msgid "cannot checkout %s"
-msgstr "não é possível extrair %s"
+msgstr "incapaz de checkout %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:72 setup.c:308
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
 #, c-format
 msgid "failed to read %s"
-msgstr "falha ao ler %s"
+msgstr "falha a ler %s"
 
 #: apply.c:3413
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
-msgstr "a ler '%s' indicado por uma ligação simbólica"
+msgstr "lendo '%s' além de uma ligação simbólica"
 
 #: apply.c:3442 apply.c:3685
 #, c-format
 msgid "path %s has been renamed/deleted"
-msgstr "o caminho %s foi eliminado ou mudou de nome"
+msgstr "path %s mudou de nome ou foi eliminado"
 
 #: apply.c:3528 apply.c:3700
 #, c-format
 msgid "%s: does not exist in index"
-msgstr "%s: não existe no índice"
+msgstr "%s: tem inexistência no index"
 
 #: apply.c:3537 apply.c:3708 apply.c:3953
 #, c-format
 msgid "%s: does not match index"
-msgstr "%s: não tem correspondência no índice"
+msgstr "%s: no index há correspondência nenhuma"
 
 #: apply.c:3572
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr ""
-"o repositório não tem o blob necessário para recorrer a integração com 3 "
-"pontos."
+msgstr "repositório falta o blob necessário para recorrer à tri-junção."
 
 #: apply.c:3575
 #, c-format
@@ -1163,7 +1288,7 @@
 #: apply.c:3591 apply.c:3595
 #, c-format
 msgid "cannot read the current contents of '%s'"
-msgstr "não é possível ler o conteúdo atual de '%s'"
+msgstr "incapaz ler conteúdo atual de '%s'"
 
 #: apply.c:3607
 #, c-format
@@ -1213,12 +1338,12 @@
 #: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
-msgstr "o novo modo (%o) de %s não corresponde ao modo antigo (%o)"
+msgstr "novo modo (%o) de %s é incorrespondente ao modo antigo (%o)"
 
 #: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
-msgstr "o novo modo (%o) de %s não corresponde ao modo antigo (%o) de %s"
+msgstr "novo modo (%o) de %s é incorrespondente ao modo antigo (%o) de %s"
 
 #: apply.c:4001
 #, c-format
@@ -1228,7 +1353,7 @@
 #: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
-msgstr "%s: patch não se aplica com sucesso"
+msgstr "%s: patch submete-se de maneira nenhuma"
 
 #: apply.c:4020
 #, c-format
@@ -1238,32 +1363,32 @@
 #: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
-msgstr "falta informação de sha1 ou não é útil para o submódulo %s"
+msgstr "sha1 tem falta informação ou é inútil para o submódulo %s"
 
 #: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
-msgstr "alteração de modo de %s que não está na HEAD atual"
+msgstr "alteração de modo para %s, que está fora da HEAD atual"
 
 #: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
-msgstr "falta informação de sha1 ou não é útil (%s)."
+msgstr "informação de sha1 está faltando ou é inútil (%s)."
 
 #: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
-msgstr "não foi possível adicionar %s ao índice temporário"
+msgstr "incapaz adicionar %s ao índex temporário"
 
 #: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
-msgstr "não foi possível escrever índice temporário para %s"
+msgstr "incapaz escrever index temporário para %s"
 
 #: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
-msgstr "não é possível remover %s do índice"
+msgstr "impossível remover %s de index"
 
 #: apply.c:4313
 #, c-format
@@ -1273,33 +1398,32 @@
 #: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
-msgstr "não é possível obter estado do novo ficheiro criado '%s'"
+msgstr "incapaz obter estatutário de ficheiro recém-criado '%s'"
 
 #: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
-msgstr ""
-"não é possível criar armazenamento de segurança do ficheiro recém-criado %s"
+msgstr "incapaz criar armazenamento de backup para ficheiro recém-criado %s"
 
 #: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
-msgstr "não é possível adicionar %s à cache"
+msgstr "incapaz adicionar entrada de cache para %s"
 
-#: apply.c:4376 builtin/bisect--helper.c:537
+#: apply.c:4376 builtin/bisect--helper.c:524
 #, c-format
 msgid "failed to write to '%s'"
-msgstr "falha ao escrever para '%s'"
+msgstr "falha a escrever para '%s'"
 
 #: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
-msgstr "a fechar o ficheiro '%s'"
+msgstr "fechando ficheiro '%s'"
 
 #: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
-msgstr "não é possível escrever o ficheiro '%s' com o modo %o"
+msgstr "incapaz escrever ficheiro '%s' com modo %o"
 
 #: apply.c:4548
 #, c-format
@@ -1325,7 +1449,7 @@
 #: apply.c:4578 builtin/fetch.c:927 builtin/fetch.c:1228
 #, c-format
 msgid "cannot open %s"
-msgstr "não é possível abrir %s"
+msgstr "incapaz abrir %s"
 
 #: apply.c:4592
 #, c-format
@@ -1337,196 +1461,196 @@
 msgid "Rejected hunk #%d."
 msgstr "Excerto nº%d rejeitado."
 
-#: apply.c:4715
+#: apply.c:4720
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Patch '%s' ignorado."
 
-#: apply.c:4723
+#: apply.c:4728
 msgid "unrecognized input"
-msgstr "entrada não reconhecida"
+msgstr "input desconhecido"
 
-#: apply.c:4743
+#: apply.c:4748
 msgid "unable to read index file"
-msgstr "não foi possível ler o ficheiro de índice"
+msgstr "incapaz ler ficheiro index"
 
-#: apply.c:4900
+#: apply.c:4905
 #, c-format
 msgid "can't open patch '%s': %s"
-msgstr "não é possível abrir o patch '%s': %s"
+msgstr "incapaz abrir patch '%s': %s"
 
-#: apply.c:4927
+#: apply.c:4932
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d erro de espaço em branco reprimido"
 msgstr[1] "%d erros de espaço em branco reprimidos"
 
-#: apply.c:4933 apply.c:4948
+#: apply.c:4938 apply.c:4953
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d linha adiciona erros de espaço em branco."
 msgstr[1] "%d linhas adicionam erros de espaço em branco."
 
-#: apply.c:4941
+#: apply.c:4946
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d linha aplicada depois de corrigir erros de espaço em branco."
 msgstr[1] "%d linhas aplicadas depois de corrigir erros de espaço em branco."
 
-#: apply.c:4957 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4962 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
 msgid "Unable to write new index file"
-msgstr "Não foi possível escrever novo ficheiro de índice"
+msgstr "Incapaz de escrever novo ficheiro index"
 
-#: apply.c:4985
+#: apply.c:4990
 msgid "don't apply changes matching the given path"
-msgstr "não aplicar alterações que correspondam ao caminho fornecido"
+msgstr "submeter de maneira nenhuma alterações correspondentes a path fornecido"
 
-#: apply.c:4988
+#: apply.c:4993
 msgid "apply changes matching the given path"
-msgstr "aplicar alterações que correspondam ao caminho fornecido"
+msgstr "submeter alterações correspondentes a path fornecido"
 
-#: apply.c:4990 builtin/am.c:2279
+#: apply.c:4995 builtin/am.c:2266
 msgid "num"
 msgstr "num"
 
-#: apply.c:4991
+#: apply.c:4996
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "remover <num> barras à esquerda dos caminhos de diff tradicional"
 
-#: apply.c:4994
+#: apply.c:4999
 msgid "ignore additions made by the patch"
 msgstr "ignorar adições feitas pelo patch"
 
-#: apply.c:4996
+#: apply.c:5001
 msgid "instead of applying the patch, output diffstat for the input"
-msgstr "em vez de aplicar o patch, mostrar o diffstat da entrada"
+msgstr "invés aplicada patch, output diffstat para "
 
-#: apply.c:5000
+#: apply.c:5005
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "mostrar número de linhas adicionadas e removidas em notação decimal"
 
-#: apply.c:5002
+#: apply.c:5007
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "em vez de aplicar o patch, mostrar um resumo da entrada"
 
-#: apply.c:5004
+#: apply.c:5009
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "em vez de aplicar o patch, verificar se o patch pode ser aplicado"
 
-#: apply.c:5006
+#: apply.c:5011
 msgid "make sure the patch is applicable to the current index"
 msgstr "garantir que o patch pode ser aplicado ao índice atual"
 
-#: apply.c:5008
+#: apply.c:5013
 msgid "mark new files with `git add --intent-to-add`"
 msgstr ""
 
-#: apply.c:5010
+#: apply.c:5015
 msgid "apply a patch without touching the working tree"
 msgstr "aplicar um patch sem tocar na árvore de trabalho"
 
-#: apply.c:5012
+#: apply.c:5017
 msgid "accept a patch that touches outside the working area"
 msgstr "aceitar patches que alteram ficheiros fora da área de trabalho"
 
-#: apply.c:5015
+#: apply.c:5020
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "aplicar o patch também (use com --stat/--summary/--check)"
 
-#: apply.c:5017
+#: apply.c:5022
 msgid "attempt three-way merge if a patch does not apply"
-msgstr "tentar integração com três pontos se um patch não se aplica com êxito"
+msgstr "tentar tri-junção se um patch submete-se de maneira nenhuma"
 
-#: apply.c:5019
+#: apply.c:5024
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "construir um índice temporário baseado na informação incorporada do índice"
 
-#: apply.c:5022 builtin/checkout-index.c:173 builtin/ls-files.c:525
+#: apply.c:5027 builtin/checkout-index.c:182 builtin/ls-files.c:525
 msgid "paths are separated with NUL character"
 msgstr "os caminhos estão separados por caracteres NUL"
 
-#: apply.c:5024
+#: apply.c:5029
 msgid "ensure at least <n> lines of context match"
 msgstr "garantir que, pelo menos, <n> linhas de contexto coincidem"
 
-#: apply.c:5025 builtin/am.c:2258 builtin/interpret-trailers.c:98
+#: apply.c:5030 builtin/am.c:2245 builtin/interpret-trailers.c:98
 #: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1340
+#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
 msgid "action"
 msgstr "ação"
 
-#: apply.c:5026
+#: apply.c:5031
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "detetar linhas novas ou modificadas que tenham espaços em branco"
 
-#: apply.c:5029 apply.c:5032
+#: apply.c:5034 apply.c:5037
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorar alterações de espaço em branco ao procurar contexto"
 
-#: apply.c:5035
+#: apply.c:5040
 msgid "apply the patch in reverse"
 msgstr "aplicar o patch em reverso"
 
-#: apply.c:5037
+#: apply.c:5042
 msgid "don't expect at least one line of context"
-msgstr "não esperar nenhuma linha de contexto"
+msgstr "conta com linha de contexto nenhuma"
 
-#: apply.c:5039
+#: apply.c:5044
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "deixar os excertos rejeitados nos respetivos ficheiros *.rej"
 
-#: apply.c:5041
+#: apply.c:5046
 msgid "allow overlapping hunks"
 msgstr "permitir a sobreposição de excertos"
 
-#: apply.c:5042 builtin/add.c:329 builtin/check-ignore.c:22
+#: apply.c:5047 builtin/add.c:329 builtin/check-ignore.c:22
 #: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2270 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "ser verboso"
 
-#: apply.c:5044
+#: apply.c:5049
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "tolerar deteções incorretas de falta de nova linha no final do ficheiro"
 
-#: apply.c:5047
+#: apply.c:5052
 msgid "do not trust the line counts in the hunk headers"
-msgstr "não confiar na contagem de linhas no cabeçalho dos excertos"
+msgstr "desconfia da contagem de linhas nos headers de pedaços"
 
-#: apply.c:5049 builtin/am.c:2267
+#: apply.c:5054 builtin/am.c:2254
 msgid "root"
 msgstr "raiz"
 
-#: apply.c:5050
+#: apply.c:5055
 msgid "prepend <root> to all filenames"
 msgstr "preceder <root> a todos os nomes de ficheiro"
 
 #: archive-tar.c:125 archive-zip.c:345
 #, fuzzy, c-format
 msgid "cannot stream blob %s"
-msgstr "não é possível guardar %s"
+msgstr "incapaz streamar blob %s"
 
 #: archive-tar.c:265 archive-zip.c:358
 #, fuzzy, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
-msgstr "versão de índice %s não suportada"
+msgstr "modo de ficheiro fora de suporte: 0%o (SHA1: %s)"
 
-#: archive-tar.c:449
+#: archive-tar.c:450
 #, fuzzy, c-format
 msgid "unable to start '%s' filter"
-msgstr "não foi possível criar '%s'"
+msgstr "incapaz iniciar filtro '%s'"
 
-#: archive-tar.c:452
+#: archive-tar.c:453
 #, fuzzy
 msgid "unable to redirect descriptor"
-msgstr "não foi possível refrescar o índice"
+msgstr "incapaz redirecionar descritor"
 
-#: archive-tar.c:459
+#: archive-tar.c:460
 #, c-format
 msgid "'%s' filter reported error"
 msgstr ""
@@ -1573,19 +1697,19 @@
 #: archive.c:192
 #, fuzzy, c-format
 msgid "cannot read %s"
-msgstr "não é possível ler '%s'"
+msgstr "incapaz ler '%s'"
 
-#: archive.c:345 sequencer.c:445 sequencer.c:1706 sequencer.c:2852
-#: sequencer.c:3293 sequencer.c:3402 builtin/am.c:263 builtin/commit.c:786
-#: builtin/merge.c:1124
+#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
+#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
+#: builtin/merge.c:1138
 #, c-format
 msgid "could not read '%s'"
-msgstr "não foi possível ler '%s'"
+msgstr "incapaz ler '%s'"
 
 #: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
 #, c-format
 msgid "pathspec '%s' did not match any files"
-msgstr "o especificador de caminho '%s' não corresponde a nenhum ficheiro"
+msgstr "especificador de path '%s' correspondeu a ficheiro nenhum"
 
 #: archive.c:454
 #, fuzzy, c-format
@@ -1595,142 +1719,135 @@
 #: archive.c:460
 #, fuzzy, c-format
 msgid "not a valid object name: %s"
-msgstr "%s não é um nome de objeto válido"
+msgstr "nome de objeto inválido: %s"
 
 #: archive.c:473
 #, fuzzy, c-format
 msgid "not a tree object: %s"
-msgstr "nome de objeto inválido: %s"
+msgstr "é objeto árvore nenhum: %s"
 
 #: archive.c:485
 #, fuzzy
 msgid "current working directory is untracked"
-msgstr "não é possível de obter o diretório de trabalho atual"
+msgstr "pasta de trabalho atual está por seguir"
 
 #: archive.c:526
 #, fuzzy, c-format
 msgid "File not found: %s"
-msgstr "objeto não encontrado: %s"
+msgstr "ficheiro por encontrar: %s"
 
 #: archive.c:528
 #, fuzzy, c-format
 msgid "Not a regular file: %s"
-msgstr "o ficheiro %s não é um ficheiro regular"
+msgstr "É ficheiro normal nenhum: %s"
 
-#: archive.c:553
+#: archive.c:555
 msgid "fmt"
 msgstr "fmt"
 
-#: archive.c:553
+#: archive.c:555
 msgid "archive format"
 msgstr "formato do arquivo"
 
-#: archive.c:554 builtin/log.c:1760
+#: archive.c:556 builtin/log.c:1765
 msgid "prefix"
 msgstr "prefixo"
 
-#: archive.c:555
+#: archive.c:557
 msgid "prepend prefix to each pathname in the archive"
 msgstr "preceder o prefixo a cada nome de caminho dentro do arquivo"
 
-#: archive.c:556 archive.c:559 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:133
+#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
+#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
 #: builtin/fast-export.c:1208 builtin/fast-export.c:1210
-#: builtin/fast-export.c:1214 builtin/grep.c:908 builtin/hash-object.c:105
+#: builtin/fast-export.c:1214 builtin/grep.c:919 builtin/hash-object.c:105
 #: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
 #: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
 msgid "file"
 msgstr "ficheiro"
 
-#: archive.c:557
+#: archive.c:559
 #, fuzzy
 msgid "add untracked file to archive"
-msgstr "Modo inválido de ficheiros não controlados '%s'"
+msgstr "adiciona ficheiro por seguir a arquivo"
 
-#: archive.c:560 builtin/archive.c:90
+#: archive.c:562 builtin/archive.c:90
 msgid "write the archive to this file"
-msgstr "escrever o arquivo para este ficheiro"
+msgstr "escreve arquivo para este ficheiro"
 
-#: archive.c:562
+#: archive.c:564
 msgid "read .gitattributes in working directory"
 msgstr "ler .gitattributes do diretório de trabalho"
 
-#: archive.c:563
+#: archive.c:565
 msgid "report archived files on stderr"
 msgstr "listar ficheiros arquivados para stderr"
 
-#: archive.c:564
-msgid "store only"
-msgstr "armazenar apenas"
+#: archive.c:567
+#, fuzzy
+msgid "set compression level"
+msgstr "nível de compactação do pacote"
 
-#: archive.c:565
-msgid "compress faster"
-msgstr "compressão rápida"
-
-#: archive.c:573
-msgid "compress better"
-msgstr "compressão ótima"
-
-#: archive.c:576
+#: archive.c:570
 msgid "list supported archive formats"
 msgstr "listar formatos de arquivo suportados"
 
-#: archive.c:578 builtin/archive.c:91 builtin/clone.c:113 builtin/clone.c:116
+#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
 #: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
 msgid "repo"
 msgstr "repo"
 
-#: archive.c:579 builtin/archive.c:92
+#: archive.c:573 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "obter o arquivo a partir do repositório remoto <repo>"
 
-#: archive.c:580 builtin/archive.c:93 builtin/difftool.c:715
+#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
 #: builtin/notes.c:498
 msgid "command"
 msgstr "comando"
 
-#: archive.c:581 builtin/archive.c:94
+#: archive.c:575 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "caminho para o comando git-upload-archive no remoto"
 
-#: archive.c:588
+#: archive.c:582
 msgid "Unexpected option --remote"
 msgstr "Opção inesperada --remote"
 
-#: archive.c:590
+#: archive.c:584
 msgid "Option --exec can only be used together with --remote"
 msgstr "A opção --exec só pode ser usada em conjunto com --remote"
 
-#: archive.c:592
+#: archive.c:586
 msgid "Unexpected option --output"
 msgstr "Opção inesperada --output"
 
-#: archive.c:594
+#: archive.c:588
 #, fuzzy
 msgid "Options --add-file and --remote cannot be used together"
-msgstr "As opções --squash e --fixup não podem ser usadas juntas"
+msgstr "Opções --add-file e --remote podem nada ser usadas juntas"
 
-#: archive.c:616
+#: archive.c:610
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Formato de arquivo desconhecido '%s'"
 
-#: archive.c:623
+#: archive.c:619
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
-msgstr "Argumento não suportado para o formato '%s': -%d"
+msgstr "Argumento por ser suportado para formato '%s': -%d"
 
-#: attr.c:212
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
-msgstr "%.*s não é um nome de atributo válido"
+msgstr "%.*s é nome de atributo inválido"
 
-#: attr.c:369
+#: attr.c:359
 #, fuzzy, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "falha ao aplicar o patch: %s:%ld"
 
-#: attr.c:409
+#: attr.c:399
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1738,22 +1855,22 @@
 "Os padrões negativos são ignorados nos atributos do git\n"
 "Use '\\!' para uma exclamação literal à esquerda."
 
-#: bisect.c:476
+#: bisect.c:489
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Conteúdo incorretamente citado no ficheiro '%s': %s"
 
-#: bisect.c:686
+#: bisect.c:699
 #, c-format
 msgid "We cannot bisect more!\n"
-msgstr "Não se está a bissetar mais!\n"
+msgstr "Conseguimos bisectar mais nenhum!\n"
 
-#: bisect.c:753
+#: bisect.c:766
 #, c-format
 msgid "Not a valid commit name %s"
-msgstr "%s não é um nome de commit válido"
+msgstr "Nome de commit inválido %s"
 
-#: bisect.c:778
+#: bisect.c:791
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1762,7 +1879,7 @@
 "A base de integração %s é má (bad).\n"
 "Significa que o bug foi corrigido entre %s e [%s].\n"
 
-#: bisect.c:783
+#: bisect.c:796
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1771,7 +1888,7 @@
 "A base de integração %s é nova (new).\n"
 "A propriedade foi mudada entre %s e [%s].\n"
 
-#: bisect.c:788
+#: bisect.c:801
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1780,59 +1897,58 @@
 "A base de integração %s é %s.\n"
 "Significa que o primeiro commit '%s' está entre %s e [%s].\n"
 
-#: bisect.c:796
+#: bisect.c:809
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
 "git bisect cannot work properly in this case.\n"
 "Maybe you mistook %s and %s revs?\n"
 msgstr ""
-"Algumas revisões %s não antecedem a revisão %s.\n"
-"git bisect não pode funcionar corretamente nesta situação.\n"
-"Talvez confundiu revisões %s e %s?\n"
+"Algumas revisões %s são sucessores da revisão %s.\n"
+"git bisect pode funcionar incorretamente nesta situação.\n"
+"Talvez tenhas confundido revisões %s e %s?\n"
 
-#: bisect.c:809
+#: bisect.c:822
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
 "So we cannot be sure the first %s commit is between %s and %s.\n"
 "We continue anyway."
 msgstr ""
-"tem-se que saltar a base de integração entre %s e [%s].\n"
-"Portanto não se pode ter a certeza que o primeiro commit %s está entre %s e "
-"%s.\n"
-"Continua-se de qualquer maneira."
+"a base de junção entre %s e [%s] tem de ser saltada.\n"
+"Portanto temos incerteza quanto a o primeiro commit %s estar entre %s e %s.\n"
+"Continuemos de qualquer maneira."
 
-#: bisect.c:848
+#: bisect.c:861
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "A bissetar: uma base de integração tem de ser testada\n"
 
-#: bisect.c:898
+#: bisect.c:911
 #, c-format
 msgid "a %s revision is needed"
 msgstr "precisa-se de uma revisão %s"
 
-#: bisect.c:928 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
 #, c-format
 msgid "could not create file '%s'"
-msgstr "não foi possível criar o ficheiro '%s'"
+msgstr "incapaz criar ficheiro '%s'"
 
-#: bisect.c:974 builtin/merge.c:150
+#: bisect.c:987 builtin/merge.c:152
 #, c-format
 msgid "could not read file '%s'"
-msgstr "não foi possível ler o ficheiro '%s'"
+msgstr "incapaz ler ficheiro '%s'"
 
-#: bisect.c:1014
+#: bisect.c:1027
 msgid "reading bisect refs failed"
 msgstr "falha ao ler referências bissetadas"
 
-#: bisect.c:1044
+#: bisect.c:1057
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s era %s e %s em simultâneo\n"
 
-#: bisect.c:1053
+#: bisect.c:1066
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1841,7 +1957,7 @@
 "Nenhum commit testável encontrado.\n"
 "Talvez tenha começado com parâmetros de caminho incorretos?\n"
 
-#: bisect.c:1082
+#: bisect.c:1095
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1851,49 +1967,49 @@
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1088
+#: bisect.c:1101
 #, 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"
 msgstr[0] "A bissetar: falta %d revisão para testar depois desta %s\n"
 msgstr[1] "A bissetar: faltam %d revisões para testar depois desta %s\n"
 
-#: blame.c:2778
+#: blame.c:2777
 msgid "--contents and --reverse do not blend well."
-msgstr "--contents e --reverse não se misturam bem."
+msgstr "--contents e --reverse são imiscíveis."
 
-#: blame.c:2792
+#: blame.c:2791
 msgid "cannot use --contents with final commit object name"
-msgstr "não é possível usar --contents com nome de objeto commit final"
+msgstr "usar --contents com nome de objeto commit final é impossível"
 
-#: blame.c:2813
+#: blame.c:2812
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse e --first-parent juntos requer que se especifique o último commit"
 
-#: blame.c:2822 bundle.c:213 ref-filter.c:2264 remote.c:2020 sequencer.c:2105
-#: sequencer.c:4606 submodule.c:855 builtin/commit.c:1045 builtin/log.c:404
-#: builtin/log.c:1020 builtin/log.c:1622 builtin/log.c:2029 builtin/log.c:2319
-#: builtin/merge.c:414 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:320
+#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
+#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
+#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
+#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
+#: builtin/shortlog.c:267
 msgid "revision walk setup failed"
 msgstr "falha ao configurar percurso de revisões"
 
-#: blame.c:2840
+#: blame.c:2839
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent juntos requer intervalo ao longo do primeiro-pai"
 
-#: blame.c:2851
+#: blame.c:2850
 #, c-format
 msgid "no such path %s in %s"
-msgstr "o caminho %s não existe em %s"
+msgstr "path %s inexistente em %s"
 
-#: blame.c:2862
+#: blame.c:2861
 #, c-format
 msgid "cannot read blob %s for path %s"
-msgstr "não é possível ler o blob %s do caminho %s"
+msgstr "incapaz ler blob %s para path %s"
 
 #: branch.c:53
 #, c-format
@@ -1911,7 +2027,7 @@
 #: branch.c:67
 #, c-format
 msgid "Not setting branch %s as its own upstream."
-msgstr "O ramo %s não foi configurado com ramo a montante dele próprio."
+msgstr "Indefinindo ramo %s como seu próprio upstream."
 
 #: branch.c:93
 #, fuzzy, c-format
@@ -1955,17 +2071,17 @@
 
 #: branch.c:119
 msgid "Unable to write upstream branch configuration"
-msgstr "Não foi possível escrever a configuração do ramo a montante"
+msgstr "Incapaz de escrever configuração de ramo upstream"
 
 #: branch.c:156
 #, c-format
 msgid "Not tracking: ambiguous information for ref %s"
-msgstr "Não seguido: informação da referência %s ambígua"
+msgstr "Incapaz de seguir: informação ambígua para ref %s"
 
 #: branch.c:189
 #, c-format
 msgid "'%s' is not a valid branch name."
-msgstr "'%s' não é um nome válido para um ramo."
+msgstr "'%s' é um nome inválido para ramo."
 
 #: branch.c:208
 #, c-format
@@ -1974,18 +2090,17 @@
 
 #: branch.c:213
 msgid "Cannot force update the current branch."
-msgstr "Não é possível forçar a atualização do ramo atual."
+msgstr "Incapaz de forçar a atualização do ramo atual."
 
 #: branch.c:233
 #, c-format
 msgid "Cannot setup tracking information; starting point '%s' is not a branch."
-msgstr ""
-"Não é possível configurar ramo a seguir; o ponto inicial '%s' não é um ramo."
+msgstr "Impossível configurar informação sobre seguir; o ponto inicial '%s' é ramo nenhum."
 
 #: branch.c:235
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
-msgstr "o ramo a montante solicitado '%s' não existe"
+msgstr "o ramo upstream solicitado '%s' é inexistente"
 
 #: branch.c:237
 msgid ""
@@ -2003,7 +2118,7 @@
 "a montante que já existe no remoto, pode ser necessário\n"
 "executar \"git fetch\" para obtê-lo.\n"
 "\n"
-"Se pretende publicar um novo ramo local que irá seguir\n"
+"Se pretende atirar um novo ramo local que irá seguir\n"
 "o seu homólogo remoto, pode usar \"git push -u\" para configurar\n"
 "o respetivo ramo a montante, ao mesmo tempo que publica."
 
@@ -2030,42 +2145,42 @@
 #: branch.c:388
 #, c-format
 msgid "HEAD of working tree %s is not updated"
-msgstr "HEAD da árvore de trabalho %s não está atualizada"
+msgstr "HEAD da working tree %s está desatualizada"
 
 #: bundle.c:41
 #, fuzzy, c-format
 msgid "unrecognized bundle hash algorithm: %s"
-msgstr "patch binário não reconhecido na linha %d"
+msgstr "algoritmo hash de bundle irreconhecível: %s"
 
 #: bundle.c:45
 #, fuzzy, c-format
 msgid "unknown capability '%s'"
-msgstr "Commit desconhecido %s"
+msgstr "capacidade desconhecida '%s'"
 
 #: bundle.c:71
 #, fuzzy, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
-msgstr "'%s' não parece ser um ficheiro bundle v2"
+msgstr "'%s' parece-se com ficheiro bundle v2 ou v3 nenhum"
 
 #: bundle.c:110
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
-msgstr "cabeçalho não reconhecido: %s%s (%d)"
+msgstr "cabeçalho irreconhecível: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2357 sequencer.c:3142
+#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
 #: builtin/commit.c:814
 #, c-format
 msgid "could not open '%s'"
-msgstr "não foi possível abrir '%s'"
+msgstr "incapaz abrir '%s'"
 
 #: bundle.c:189
 msgid "Repository lacks these prerequisite commits:"
-msgstr "O repositório não possuí estes commits pré-requisitados:"
+msgstr "Falta ao repositório estes pré-requisitos de commits:"
 
 #: bundle.c:192
 #, fuzzy
 msgid "need a repository to verify a bundle"
-msgstr "É necessário um repositório para criar um bundle."
+msgstr "é preciso repositório para verificar um bundle."
 
 #: bundle.c:243
 #, c-format
@@ -2088,15 +2203,15 @@
 #: bundle.c:319
 #, fuzzy
 msgid "unable to dup bundle descriptor"
-msgstr "não foi possível atualizar %s"
+msgstr "incapaz de dup descritor de bundle"
 
 #: bundle.c:326
 msgid "Could not spawn pack-objects"
-msgstr "Não foi possível lançar pack-objects"
+msgstr "Impossível gerar pack-objects"
 
 #: bundle.c:337
 msgid "pack-objects died"
-msgstr "pack-objects terminou inesperadamente"
+msgstr "pack-objects terminaram inesperadamente"
 
 #: bundle.c:379
 msgid "rev-list died"
@@ -2110,17 +2225,17 @@
 #: bundle.c:498
 #, fuzzy, c-format
 msgid "unsupported bundle version %d"
-msgstr "versão de índice %s não suportada"
+msgstr "fora de suporte versão bundle %d"
 
 #: bundle.c:500
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr ""
 
-#: bundle.c:522 builtin/log.c:207 builtin/log.c:1918 builtin/shortlog.c:461
+#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
 #, c-format
 msgid "unrecognized argument: %s"
-msgstr "argumento não reconhecido: %s"
+msgstr "argumento irreconhecível: %s"
 
 #: bundle.c:530
 msgid "Refusing to create empty bundle."
@@ -2129,7 +2244,7 @@
 #: bundle.c:540
 #, c-format
 msgid "cannot create '%s'"
-msgstr "não é possível criar '%s'"
+msgstr "incapaz criar '%s'"
 
 #: bundle.c:565
 msgid "index-pack died"
@@ -2140,7 +2255,7 @@
 msgid "invalid color value: %.*s"
 msgstr "valor de cor inválido: %.*s"
 
-#: commit-graph.c:188 midx.c:46
+#: commit-graph.c:188 midx.c:47
 #, fuzzy
 msgid "invalid hash version"
 msgstr "especificação de caminho inválida"
@@ -2152,12 +2267,12 @@
 #: commit-graph.c:311
 #, fuzzy, c-format
 msgid "commit-graph signature %X does not match signature %X"
-msgstr "O commit %s não tem uma assinatura GPG."
+msgstr "assinatura commit-graph %X corresponde a assinatura %X nenhuma"
 
 #: commit-graph.c:318
 #, fuzzy, c-format
 msgid "commit-graph version %X does not match version %X"
-msgstr "o commit %s não tem o pai %d"
+msgstr "commit-graph versão %X corresponde a versão %X nenhuma"
 
 #: commit-graph.c:325
 #, c-format
@@ -2195,7 +2310,7 @@
 #: commit-graph.c:581
 #, fuzzy
 msgid "unable to find all commit-graph files"
-msgstr "não foi possível analisar o commit %s"
+msgstr "incapaz de encontrar todos ficheiros commit-graph"
 
 #: commit-graph.c:721 commit-graph.c:785
 msgid "invalid commit position. commit-graph is likely corrupt"
@@ -2204,17 +2319,17 @@
 #: commit-graph.c:742
 #, fuzzy, c-format
 msgid "could not find commit %s"
-msgstr "não foi possível analisar o commit %s\n"
+msgstr "incapaz encontrar commit %s"
 
-#: commit-graph.c:1042 builtin/am.c:1306
+#: commit-graph.c:1042 builtin/am.c:1292
 #, c-format
 msgid "unable to parse commit %s"
-msgstr "não foi possível analisar o commit %s"
+msgstr "incapaz analisar commit %s"
 
 #: commit-graph.c:1265 builtin/pack-objects.c:2864
 #, fuzzy, c-format
 msgid "unable to get type of object %s"
-msgstr "não foi possível analisar o objeto: %s"
+msgstr "incapaz obter tipo de objeto %s"
 
 #: commit-graph.c:1301
 msgid "Loading known commits in commit graph"
@@ -2239,7 +2354,7 @@
 #: commit-graph.c:1501
 #, fuzzy
 msgid "Collecting referenced commits"
-msgstr "Não foi possível inicializar commits reescritos"
+msgstr "Recolhendo commits referênciados"
 
 #: commit-graph.c:1526
 #, c-format
@@ -2274,20 +2389,20 @@
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 
-#: commit-graph.c:1720 midx.c:826
+#: commit-graph.c:1720 midx.c:819
 #, fuzzy, c-format
 msgid "unable to create leading directories of %s"
-msgstr "não foi possível criar os diretórios superiores de '%s'"
+msgstr "incapaz criar as pastas superiores a %s"
 
 #: commit-graph.c:1733
 #, fuzzy
 msgid "unable to create temporary graph layer"
-msgstr "não foi possível criar índice temporário"
+msgstr "incapaz criar camada de grafo temporária"
 
 #: commit-graph.c:1738
 #, fuzzy, c-format
 msgid "unable to adjust shared permissions for '%s'"
-msgstr "Não é possível adicionar os resultados da integração de '%s'"
+msgstr "incapaz de ajustar permissão partilhada para '%s'"
 
 #: commit-graph.c:1808
 #, c-format
@@ -2299,7 +2414,7 @@
 #: commit-graph.c:1853
 #, fuzzy
 msgid "unable to open commit-graph chain file"
-msgstr "não é possível abrir ou ler %s"
+msgstr "incapaz abrir ficheiro commit-graph chain"
 
 #: commit-graph.c:1869
 #, fuzzy
@@ -2309,112 +2424,111 @@
 #: commit-graph.c:1889
 #, fuzzy
 msgid "failed to rename temporary commit-graph file"
-msgstr "não é possível escrever ficheiro de índice temporário"
+msgstr "falha a renomear ficheiro commit-graph temporário"
 
 #: commit-graph.c:2015
 #, fuzzy
 msgid "Scanning merged commits"
 msgstr "A adicionar %s integrado"
 
-#: commit-graph.c:2026
-#, fuzzy, c-format
-msgid "unexpected duplicate commit id %s"
-msgstr "não foi possível analisar o commit %s"
-
-#: commit-graph.c:2049
+#: commit-graph.c:2059
 msgid "Merging commit-graph"
 msgstr ""
 
-#: commit-graph.c:2259
+#: commit-graph.c:2165
+msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
+msgstr ""
+
+#: commit-graph.c:2274
 #, c-format
 msgid "the commit graph format cannot write %d commits"
 msgstr ""
 
-#: commit-graph.c:2270
+#: commit-graph.c:2285
 #, fuzzy
 msgid "too many commits to write graph"
-msgstr "mostrar apenas commits não presentes no primeiro ramo"
+msgstr "demasiados commits para escrever grafo"
 
-#: commit-graph.c:2363
+#: commit-graph.c:2378
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:2373
+#: commit-graph.c:2388
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 
-#: commit-graph.c:2383 commit-graph.c:2398
+#: commit-graph.c:2398 commit-graph.c:2413
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 
-#: commit-graph.c:2390
+#: commit-graph.c:2405
 #, fuzzy, c-format
 msgid "failed to parse commit %s from commit-graph"
-msgstr "não foi possível analisar o commit %s"
+msgstr "incapaz analisar commit %s de commit-graph"
 
-#: commit-graph.c:2408
+#: commit-graph.c:2423
 msgid "Verifying commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:2423
+#: commit-graph.c:2438
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 
-#: commit-graph.c:2430
+#: commit-graph.c:2445
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2440
+#: commit-graph.c:2455
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 
-#: commit-graph.c:2449
+#: commit-graph.c:2464
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2463
+#: commit-graph.c:2478
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 
-#: commit-graph.c:2468
+#: commit-graph.c:2483
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2472
+#: commit-graph.c:2487
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2488
+#: commit-graph.c:2503
 #, c-format
 msgid "commit-graph generation for commit %s is %u != %u"
 msgstr ""
 
-#: commit-graph.c:2494
+#: commit-graph.c:2509
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 
-#: commit.c:52 sequencer.c:2845 builtin/am.c:373 builtin/am.c:417
-#: builtin/am.c:1385 builtin/am.c:2031 builtin/replace.c:457
+#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
+#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
 #, c-format
 msgid "could not parse %s"
-msgstr "não foi possível analisar %s"
+msgstr "incapaz analisar %s"
 
 #: commit.c:54
 #, c-format
 msgid "%s %s is not a commit!"
-msgstr "%s %s não é um commit!"
+msgstr "%s %s é commit nenhum!"
 
 #: commit.c:194
 msgid ""
@@ -2431,25 +2545,22 @@
 #: commit.c:1172
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
-msgstr ""
-"A assinatura GPG do commit %s, alegadamente assinada por %s, não é de "
-"confiança."
+msgstr "Commit %s tem assinatura GPG desconfiada, alegadamente por %s."
 
 #: commit.c:1176
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
-msgstr ""
-"A assinatura GPG do commit %s, alegadamente assinada por %s, está incorreta."
+msgstr "Commit %s tem assinatura GPG incorreta, alegadamente por %s."
 
 #: commit.c:1179
 #, c-format
 msgid "Commit %s does not have a GPG signature."
-msgstr "O commit %s não tem uma assinatura GPG."
+msgstr "Commit %s tem assinatura GPG nenhuma."
 
 #: commit.c:1182
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
-msgstr "A assinatura GPG do commit %s por %s está correta\n"
+msgstr "Commit %s tem assinatura correta, por %s\n"
 
 #: commit.c:1436
 msgid ""
@@ -2457,10 +2568,10 @@
 "You may want to amend it after fixing the message, or set the config\n"
 "variable i18n.commitencoding to the encoding your project uses.\n"
 msgstr ""
-"aviso: a mensagem de commit não conforma com UTF-8.\n"
-"Pode querer emendá-lo depois de corrigir a mensagem ou definir a\n"
-"variável de configuração i18n.commitencoding com a codificação que\n"
-"o seu projeto utiliza.\n"
+"aviso: a mensagem de commit é inconforme com UTF-8.\n"
+"Podes querer emendá-lo depois de corrigir a mensagem, ou definir a\n"
+"variável de config i18n.commitencoding com a codificação que o teu\n"
+"projeto usa.\n"
 
 #: compat/obstack.c:406 compat/obstack.c:408
 msgid "memory exhausted"
@@ -2479,7 +2590,7 @@
 #: config.c:141
 #, fuzzy, c-format
 msgid "could not expand include path '%s'"
-msgstr "não foi possível analisar o patch '%s'"
+msgstr "incapaz de expandir include path '%s'"
 
 #: config.c:152
 #, fuzzy
@@ -2495,14 +2606,14 @@
 #: config.c:378
 #, fuzzy, c-format
 msgid "key does not contain a section: %s"
-msgstr "Não foi possível remover a secção de configuração '%s'"
+msgstr "chave contém secção nenhuma: %s"
 
 #: config.c:384
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr ""
 
-#: config.c:408 sequencer.c:2547
+#: config.c:408 sequencer.c:2580
 #, c-format
 msgid "invalid key: %s"
 msgstr "chave inválida: %s"
@@ -2607,7 +2718,7 @@
 #: config.c:1132
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
-msgstr "'%s' em '%s' não é um carimbo de data/hora válido"
+msgstr "'%s' em '%s' é carimbo de data/hora inválido"
 
 #: config.c:1223
 #, c-format
@@ -2631,7 +2742,7 @@
 #: config.c:1445
 #, fuzzy, c-format
 msgid "malformed value for %s"
-msgstr "valor inválido de %s"
+msgstr "valor desformado para %s"
 
 #: config.c:1471
 #, fuzzy, c-format
@@ -2650,26 +2761,26 @@
 #: config.c:1655
 #, fuzzy, c-format
 msgid "unable to load config blob object '%s'"
-msgstr "não foi possível iniciar o comando 'show' sobre o objeto '%s'"
+msgstr "incapaz carregar objeto blob config '%s'"
 
 #: config.c:1658
 #, fuzzy, c-format
 msgid "reference '%s' does not point to a blob"
-msgstr "'%s' não aponta para um commit"
+msgstr "referência '%s' aponta para blob nenhum"
 
 #: config.c:1675
 #, fuzzy, c-format
 msgid "unable to resolve config blob '%s'"
-msgstr "não foi possível resolver revisão: %s"
+msgstr "incapaz resolver blog config '%s'"
 
 #: config.c:1705
 #, fuzzy, c-format
 msgid "failed to parse %s"
-msgstr "falha ao ler %s"
+msgstr "falha a analisar %s"
 
 #: config.c:1759
 msgid "unable to parse command-line config"
-msgstr "não é possível analisar configuração de linha de comandos"
+msgstr "incapaz analisar config de linha de comandos"
 
 #: config.c:2122
 msgid "unknown error occurred while reading the configuration files"
@@ -2689,84 +2800,84 @@
 #: config.c:2387
 #, c-format
 msgid "unable to parse '%s' from command-line config"
-msgstr "não é possível analisar '%s' da configuração de linha de comandos"
+msgstr "incapaz analisar '%s' da configuração de linha de comandos"
 
 #: config.c:2389
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "variável de configuração '%s' incorreta no ficheiro '%s' na linha %d"
 
-#: config.c:2470
+#: config.c:2473
 #, fuzzy, c-format
 msgid "invalid section name '%s'"
 msgstr "conteúdo inválido: '%s'"
 
-#: config.c:2502
+#: config.c:2505
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s tem múltiplos valores"
 
-#: config.c:2531
+#: config.c:2534
 #, fuzzy, c-format
 msgid "failed to write new configuration file %s"
-msgstr "não é possível criar o ficheiro de configuração %s"
+msgstr "falha a escrever novo ficheiro configuração %s"
 
-#: config.c:2783 config.c:3107
+#: config.c:2786 config.c:3112
 #, fuzzy, c-format
 msgid "could not lock config file %s"
-msgstr "não é possível fechar o ficheiro %s"
+msgstr "incapaz trancar ficheiro config %s"
 
-#: config.c:2794
+#: config.c:2797
 #, fuzzy, c-format
 msgid "opening %s"
-msgstr "A eliminar %s"
+msgstr "abrindo %s"
 
-#: config.c:2829 builtin/config.c:354
+#: config.c:2834 builtin/config.c:361
 #, fuzzy, c-format
 msgid "invalid pattern: %s"
-msgstr "opção inválida: %s"
+msgstr "padrão inválido: %s"
 
-#: config.c:2854
+#: config.c:2859
 #, fuzzy, c-format
 msgid "invalid config file %s"
-msgstr "ficheiro inválido: '%s'"
+msgstr "ficheiro config inválido %s"
 
-#: config.c:2867 config.c:3120
+#: config.c:2872 config.c:3125
 #, c-format
 msgid "fstat on %s failed"
 msgstr "falha de fstat de %s"
 
-#: config.c:2878
+#: config.c:2883
 #, fuzzy, c-format
 msgid "unable to mmap '%s'"
-msgstr "não é possível aceder a '%s'"
+msgstr "incapaz mmap '%s'"
 
-#: config.c:2887 config.c:3125
+#: config.c:2892 config.c:3130
 #, fuzzy, c-format
 msgid "chmod on %s failed"
 msgstr "falha de fstat de %s"
 
-#: config.c:2972 config.c:3222
+#: config.c:2977 config.c:3227
 #, fuzzy, c-format
 msgid "could not write config file %s"
-msgstr "não é possível ler o ficheiro de log '%s'"
+msgstr "incapaz escrever ficheiro config %s"
 
-#: config.c:3006
+#: config.c:3011
 #, c-format
 msgid "could not set '%s' to '%s'"
-msgstr "não foi possível definir '%s' como '%s'"
+msgstr "incapaz definir '%s' como '%s'"
 
-#: config.c:3008 builtin/remote.c:656 builtin/remote.c:850 builtin/remote.c:858
+#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
-msgstr "não foi possível reiniciar '%s'"
+msgstr "incapaz desdefinir '%s'"
 
-#: config.c:3098
+#: config.c:3103
 #, fuzzy, c-format
 msgid "invalid section name: %s"
 msgstr "opção inválida: %s"
 
-#: config.c:3265
+#: config.c:3270
 #, fuzzy, c-format
 msgid "missing value for '%s'"
 msgstr "valor inválido de %s"
@@ -2783,20 +2894,20 @@
 "Please make sure you have the correct access rights\n"
 "and the repository exists."
 msgstr ""
-"Não foi possível ler do repositório remoto.\n"
+"Incapaz de ler o repositório remoto.\n"
 "\n"
-"Certifica-se que tem os direitos de acesso corretos\n"
+"Certifica-te que tem as permissões de acesso corretas\n"
 "e que o repositório existe."
 
 #: connect.c:81
 #, fuzzy, c-format
 msgid "server doesn't support '%s'"
-msgstr "O servidor não suporta STARTTLS! %s"
+msgstr "servidor tem fora de suporte '%s'"
 
 #: connect.c:118
 #, fuzzy, c-format
 msgid "server doesn't support feature '%s'"
-msgstr "O servidor não suporta --deepen"
+msgstr "servidor tem fora suporte a característica '%s'"
 
 #: connect.c:129
 msgid "expected flush after capabilities"
@@ -2833,7 +2944,7 @@
 #: connect.c:473
 #, c-format
 msgid "unknown object format '%s' specified by server"
-msgstr ""
+msgstr "objeto desconhecido '%s' pelo formato em servidor."
 
 #: connect.c:500
 #, fuzzy, c-format
@@ -2851,7 +2962,7 @@
 #: connect.c:640
 #, fuzzy, c-format
 msgid "protocol '%s' is not supported"
-msgstr "'%s' não está trancada"
+msgstr "protocolo '%s' é insustentado"
 
 #: connect.c:691
 msgid "unable to set SO_KEEPALIVE on socket"
@@ -2865,7 +2976,7 @@
 #: connect.c:735
 #, fuzzy, c-format
 msgid "unable to look up %s (port %s) (%s)"
-msgstr "não foi possível mover %s para %s"
+msgstr "incapaz procurar %s (porta %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
 #: connect.c:739 connect.c:810
@@ -2880,18 +2991,20 @@
 msgid ""
 "unable to connect to %s:\n"
 "%s"
-msgstr "não é possível abrir %s: %s\n"
+msgstr ""
+"impossível conetar a %s:\n"
+"%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
 #: connect.c:767 connect.c:844
 #, fuzzy
 msgid "done."
-msgstr "concluído.\n"
+msgstr "concluído."
 
 #: connect.c:798
 #, fuzzy, c-format
 msgid "unable to look up %s (%s)"
-msgstr "não é possível abrir %s: %s\n"
+msgstr "incapaz procurar %s (%s)"
 
 #: connect.c:804
 #, fuzzy, c-format
@@ -2911,7 +3024,7 @@
 #: connect.c:953
 #, fuzzy, c-format
 msgid "cannot start proxy %s"
-msgstr "não é possível invocar stat sobre '%s'"
+msgstr "incapaz começar proxy %s"
 
 #: connect.c:1024
 msgid "no path specified; see 'git help pull' for valid url syntax"
@@ -2928,7 +3041,7 @@
 #: connect.c:1248
 #, fuzzy
 msgid "ssh variant 'simple' does not support setting port"
-msgstr "o recetor não suporta publicação com --signed"
+msgstr "ssh variant 'simple' insustenta definir porta"
 
 #: connect.c:1360
 #, c-format
@@ -2938,7 +3051,7 @@
 #: connect.c:1408
 #, fuzzy
 msgid "unable to fork"
-msgstr "não foi possível analisar o formato"
+msgstr "incapaz de aforquilhar"
 
 #: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
 msgid "Checking connectivity"
@@ -2946,7 +3059,7 @@
 
 #: connected.c:120
 msgid "Could not run 'git rev-list'"
-msgstr "Não foi possível executar 'git rev-list'"
+msgstr "Impossível executar 'git rev-list'"
 
 #: connected.c:144
 msgid "failed write to rev-list"
@@ -3026,17 +3139,17 @@
 #: convert.c:665
 #, fuzzy, c-format
 msgid "cannot fork to run external filter '%s'"
-msgstr "não é possível escrever o ficheiro de conservação '%s'"
+msgstr "incapaz aforquilhar para correr filtro externo '%s'"
 
 #: convert.c:685
 #, fuzzy, c-format
 msgid "cannot feed the input to external filter '%s'"
-msgstr "não é possível ler o conteúdo atual de '%s'"
+msgstr "incapaz introduzir input para filtro externo '%s'"
 
 #: convert.c:692
 #, fuzzy, c-format
 msgid "external filter '%s' failed %d"
-msgstr "falha ao mudar o nome de '%s'"
+msgstr "filtro externo '%s' falhou %d"
 
 #: convert.c:727 convert.c:730
 #, c-format
@@ -3104,7 +3217,7 @@
 #: credential.c:511
 #, fuzzy, c-format
 msgid "credential url cannot be parsed: %s"
-msgstr "não foi possível analisar %s"
+msgstr "incapaz analisar url credencial: %s"
 
 #: date.c:138
 msgid "in the future"
@@ -3198,6 +3311,27 @@
 msgid "Marked %d islands, done.\n"
 msgstr ""
 
+#: diff-lib.c:534
+msgid "--merge-base does not work with ranges"
+msgstr ""
+
+#: diff-lib.c:536
+msgid "--merge-base only works with commits"
+msgstr ""
+
+#: diff-lib.c:553
+#, fuzzy
+msgid "unable to get HEAD"
+msgstr "incapaz obter HEAD"
+
+#: diff-lib.c:560
+msgid "no merge base found"
+msgstr ""
+
+#: diff-lib.c:562
+msgid "multiple merge bases found"
+msgstr ""
+
 #: diff-no-index.c:238
 #, fuzzy
 msgid "git diff --no-index [<options>] <path> <path>"
@@ -3252,36 +3386,36 @@
 "Erros encontrados na variável de configuração 'diff.dirstat':\n"
 "%s"
 
-#: diff.c:4269
+#: diff.c:4276
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "o diff externo terminou inesperadamente, interrompido em %s"
 
-#: diff.c:4618
+#: diff.c:4625
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check e -s são mutuamente exclusivos"
 
-#: diff.c:4621
+#: diff.c:4628
 #, fuzzy
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-b, -B e --detach são mutuamente exclusivos"
 
-#: diff.c:4699
+#: diff.c:4706
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow requer exatamente um único especificador de caminho"
 
-#: diff.c:4747
+#: diff.c:4754
 #, fuzzy, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor de cor inválido: %.*s"
 
-#: diff.c:4752 diff.c:4757 diff.c:4762 diff.c:4767 diff.c:5279
+#: diff.c:4759 diff.c:4764 diff.c:4769 diff.c:4774 diff.c:5302
 #: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
 #, fuzzy, c-format
 msgid "%s expects a numerical value"
 msgstr "a opção '%c' espera um valor numérico"
 
-#: diff.c:4784
+#: diff.c:4791
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3290,529 +3424,539 @@
 "Falha ao analisar parâmetro da opção --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4869
+#: diff.c:4876
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr ""
 
-#: diff.c:4893
+#: diff.c:4900
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr ""
 
-#: diff.c:4907
+#: diff.c:4914
 #, fuzzy, c-format
 msgid "unable to resolve '%s'"
-msgstr "não foi possível criar '%s'"
+msgstr "incapaz resolver '%s'"
 
-#: diff.c:4957 diff.c:4963
+#: diff.c:4964 diff.c:4970
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 
-#: diff.c:4975
+#: diff.c:4982
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr ""
 
-#: diff.c:4996
+#: diff.c:5003
 #, fuzzy, c-format
 msgid "bad --color-moved argument: %s"
-msgstr "argumento não reconhecido: %s"
+msgstr "argumento incorreto --color-moved: %s"
 
-#: diff.c:5015
+#: diff.c:5022
 #, fuzzy, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "objeto inválido '%s' fornecido."
 
-#: diff.c:5055
+#: diff.c:5062
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 
-#: diff.c:5091 diff.c:5111
+#: diff.c:5098 diff.c:5118
 #, fuzzy, c-format
 msgid "invalid argument to %s"
 msgstr "valor inválido de %s"
 
-#: diff.c:5248
+#: diff.c:5222
+#, fuzzy, c-format
+msgid "invalid regex given to -I: '%s'"
+msgstr "valor inválido de %s"
+
+#: diff.c:5271
 #, fuzzy, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "Falha ao analisar parâmetro da opção --submodule: '%s'"
 
-#: diff.c:5304
+#: diff.c:5327
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr ""
 
-#: diff.c:5327
+#: diff.c:5350
 msgid "Diff output format options"
 msgstr ""
 
-#: diff.c:5329 diff.c:5335
+#: diff.c:5352 diff.c:5358
 #, fuzzy
 msgid "generate patch"
 msgstr "incorporar o patch"
 
-#: diff.c:5332 builtin/log.c:176
+#: diff.c:5355 builtin/log.c:178
 msgid "suppress diff output"
 msgstr "suprimir saída do diff"
 
-#: diff.c:5337 diff.c:5451 diff.c:5458
+#: diff.c:5360 diff.c:5474 diff.c:5481
 msgid "<n>"
 msgstr ""
 
-#: diff.c:5338 diff.c:5341
+#: diff.c:5361 diff.c:5364
 #, fuzzy
 msgid "generate diffs with <n> lines context"
 msgstr "garantir que, pelo menos, <n> linhas de contexto coincidem"
 
-#: diff.c:5343
+#: diff.c:5366
 msgid "generate the diff in raw format"
 msgstr ""
 
-#: diff.c:5346
+#: diff.c:5369
 #, fuzzy
 msgid "synonym for '-p --raw'"
 msgstr "(sinónimo de --stat)"
 
-#: diff.c:5350
+#: diff.c:5373
 #, fuzzy
 msgid "synonym for '-p --stat'"
 msgstr "(sinónimo de --stat)"
 
-#: diff.c:5354
+#: diff.c:5377
 #, fuzzy
 msgid "machine friendly --stat"
 msgstr "saída inteligível por máquina"
 
-#: diff.c:5357
+#: diff.c:5380
 msgid "output only the last line of --stat"
 msgstr ""
 
-#: diff.c:5359 diff.c:5367
+#: diff.c:5382 diff.c:5390
 msgid "<param1,param2>..."
 msgstr ""
 
-#: diff.c:5360
+#: diff.c:5383
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 
-#: diff.c:5364
+#: diff.c:5387
 #, fuzzy
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinónimo de --files-with-matches"
 
-#: diff.c:5368
+#: diff.c:5391
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr ""
 
-#: diff.c:5372
+#: diff.c:5395
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 
-#: diff.c:5375
+#: diff.c:5398
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 
-#: diff.c:5378
+#: diff.c:5401
 #, fuzzy
 msgid "show only names of changed files"
 msgstr "mostrar apenas nomes de ficheiro em vez de linhas correspondidas"
 
-#: diff.c:5381
+#: diff.c:5404
 #, fuzzy
 msgid "show only names and status of changed files"
 msgstr "mostrar apenas nomes de ficheiro em vez de linhas correspondidas"
 
-#: diff.c:5383
+#: diff.c:5406
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr ""
 
-#: diff.c:5384
-#, fuzzy
-msgid "generate diffstat"
-msgstr "diff status inesperado %c"
-
-#: diff.c:5386 diff.c:5389 diff.c:5392
-msgid "<width>"
-msgstr ""
-
-#: diff.c:5387
-msgid "generate diffstat with a given width"
-msgstr ""
-
-#: diff.c:5390
-msgid "generate diffstat with a given name width"
-msgstr ""
-
-#: diff.c:5393
-msgid "generate diffstat with a given graph width"
-msgstr ""
-
-#: diff.c:5395
-msgid "<count>"
-msgstr ""
-
-#: diff.c:5396
-msgid "generate diffstat with limited lines"
-msgstr ""
-
-#: diff.c:5399
-msgid "generate compact summary in diffstat"
-msgstr ""
-
-#: diff.c:5402
-msgid "output a binary diff that can be applied"
-msgstr ""
-
-#: diff.c:5405
-msgid "show full pre- and post-image object names on the \"index\" lines"
-msgstr ""
-
 #: diff.c:5407
 #, fuzzy
+msgid "generate diffstat"
+msgstr "diff status inesperado %c"
+
+#: diff.c:5409 diff.c:5412 diff.c:5415
+msgid "<width>"
+msgstr ""
+
+#: diff.c:5410
+msgid "generate diffstat with a given width"
+msgstr ""
+
+#: diff.c:5413
+msgid "generate diffstat with a given name width"
+msgstr ""
+
+#: diff.c:5416
+msgid "generate diffstat with a given graph width"
+msgstr ""
+
+#: diff.c:5418
+msgid "<count>"
+msgstr ""
+
+#: diff.c:5419
+msgid "generate diffstat with limited lines"
+msgstr ""
+
+#: diff.c:5422
+msgid "generate compact summary in diffstat"
+msgstr ""
+
+#: diff.c:5425
+msgid "output a binary diff that can be applied"
+msgstr ""
+
+#: diff.c:5428
+msgid "show full pre- and post-image object names on the \"index\" lines"
+msgstr ""
+
+#: diff.c:5430
+#, fuzzy
 msgid "show colored diff"
 msgstr "mostrar ficheiros ignorados"
 
-#: diff.c:5408
+#: diff.c:5431
 msgid "<kind>"
 msgstr ""
 
-#: diff.c:5409
+#: diff.c:5432
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 
-#: diff.c:5412
+#: diff.c:5435
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 
-#: diff.c:5415 diff.c:5418 diff.c:5421 diff.c:5527
+#: diff.c:5438 diff.c:5441 diff.c:5444 diff.c:5553
 #, fuzzy
 msgid "<prefix>"
 msgstr "<prefixo>/"
 
-#: diff.c:5416
+#: diff.c:5439
 msgid "show the given source prefix instead of \"a/\""
 msgstr ""
 
-#: diff.c:5419
+#: diff.c:5442
 msgid "show the given destination prefix instead of \"b/\""
 msgstr ""
 
-#: diff.c:5422
+#: diff.c:5445
 #, fuzzy
 msgid "prepend an additional prefix to every line of output"
 msgstr "preceder o nomebase do projeto pai na saída"
 
-#: diff.c:5425
+#: diff.c:5448
 msgid "do not show any source or destination prefix"
 msgstr ""
 
-#: diff.c:5428
+#: diff.c:5451
 #, fuzzy
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "criar um clone raso, truncado ao número especificado de revisões"
 
-#: diff.c:5432 diff.c:5437 diff.c:5442
+#: diff.c:5455 diff.c:5460 diff.c:5465
 msgid "<char>"
 msgstr ""
 
-#: diff.c:5433
+#: diff.c:5456
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 
-#: diff.c:5438
+#: diff.c:5461
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 
-#: diff.c:5443
+#: diff.c:5466
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 
-#: diff.c:5446
+#: diff.c:5469
 #, fuzzy
 msgid "Diff rename options"
 msgstr "Opções genéricas"
 
-#: diff.c:5447
+#: diff.c:5470
 #, fuzzy
 msgid "<n>[/<m>]"
 msgstr "<n>[,<base>]"
 
-#: diff.c:5448
+#: diff.c:5471
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 
-#: diff.c:5452
+#: diff.c:5475
 #, fuzzy
 msgid "detect renames"
 msgstr "nome do remoto"
 
-#: diff.c:5456
+#: diff.c:5479
 msgid "omit the preimage for deletes"
 msgstr ""
 
-#: diff.c:5459
+#: diff.c:5482
 msgid "detect copies"
 msgstr ""
 
-#: diff.c:5463
+#: diff.c:5486
 msgid "use unmodified files as source to find copies"
 msgstr ""
 
-#: diff.c:5465
+#: diff.c:5488
 #, fuzzy
 msgid "disable rename detection"
 msgstr "Deteção de mudança de nome inexata em curso"
 
-#: diff.c:5468
+#: diff.c:5491
 msgid "use empty blobs as rename source"
 msgstr ""
 
-#: diff.c:5470
+#: diff.c:5493
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 
-#: diff.c:5473
+#: diff.c:5496
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 
-#: diff.c:5475
+#: diff.c:5498
 #, fuzzy
 msgid "Diff algorithm options"
 msgstr "opção inválida: %s"
 
-#: diff.c:5477
+#: diff.c:5500
 msgid "produce the smallest possible diff"
 msgstr ""
 
-#: diff.c:5480
+#: diff.c:5503
 #, fuzzy
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorar alterações de espaço em branco ao procurar contexto"
 
-#: diff.c:5483
+#: diff.c:5506
 #, fuzzy
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorar alterações de espaço em branco ao procurar contexto"
 
-#: diff.c:5486
+#: diff.c:5509
 #, fuzzy
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorar alterações de espaço em branco ao procurar contexto"
 
-#: diff.c:5489
+#: diff.c:5512
 msgid "ignore carrier-return at the end of line"
 msgstr ""
 
-#: diff.c:5492
+#: diff.c:5515
 msgid "ignore changes whose lines are all blank"
 msgstr ""
 
-#: diff.c:5495
+#: diff.c:5517 diff.c:5539 diff.c:5542 diff.c:5587
+msgid "<regex>"
+msgstr ""
+
+#: diff.c:5518
+#, fuzzy
+msgid "ignore changes whose all lines match <regex>"
+msgstr "ignorar alterações de espaço em branco ao procurar contexto"
+
+#: diff.c:5521
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 
-#: diff.c:5498
+#: diff.c:5524
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr ""
 
-#: diff.c:5502
+#: diff.c:5528
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 
-#: diff.c:5504
+#: diff.c:5530
 msgid "<algorithm>"
 msgstr ""
 
-#: diff.c:5505
+#: diff.c:5531
 msgid "choose a diff algorithm"
 msgstr ""
 
-#: diff.c:5507
+#: diff.c:5533
 #, fuzzy
 msgid "<text>"
 msgstr "texto"
 
-#: diff.c:5508
+#: diff.c:5534
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr ""
 
-#: diff.c:5510 diff.c:5519 diff.c:5522
+#: diff.c:5536 diff.c:5545 diff.c:5548
 #, fuzzy
 msgid "<mode>"
 msgstr "modo"
 
-#: diff.c:5511
+#: diff.c:5537
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 
-#: diff.c:5513 diff.c:5516 diff.c:5561
-msgid "<regex>"
-msgstr ""
-
-#: diff.c:5514
+#: diff.c:5540
 msgid "use <regex> to decide what a word is"
 msgstr ""
 
-#: diff.c:5517
+#: diff.c:5543
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 
-#: diff.c:5520
+#: diff.c:5546
 msgid "moved lines of code are colored differently"
 msgstr ""
 
-#: diff.c:5523
+#: diff.c:5549
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 
-#: diff.c:5526
+#: diff.c:5552
 #, fuzzy
 msgid "Other diff options"
 msgstr "Opções genéricas"
 
-#: diff.c:5528
+#: diff.c:5554
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 
-#: diff.c:5532
+#: diff.c:5558
 #, fuzzy
 msgid "treat all files as text"
 msgstr "processar ficheiros binários como texto"
 
-#: diff.c:5534
+#: diff.c:5560
 msgid "swap two inputs, reverse the diff"
 msgstr ""
 
-#: diff.c:5536
+#: diff.c:5562
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 
-#: diff.c:5538
+#: diff.c:5564
 msgid "disable all output of the program"
 msgstr ""
 
-#: diff.c:5540
+#: diff.c:5566
 msgid "allow an external diff helper to be executed"
 msgstr ""
 
-#: diff.c:5542
+#: diff.c:5568
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 
-#: diff.c:5544
+#: diff.c:5570
 #, fuzzy
 msgid "<when>"
 msgstr "quando"
 
-#: diff.c:5545
+#: diff.c:5571
 #, fuzzy
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 "ignorar alterações em submódulos, quando é opcional: all, dirty, untracked. "
 "(Predefinição: all)"
 
-#: diff.c:5548
+#: diff.c:5574
 #, fuzzy
 msgid "<format>"
 msgstr "formato"
 
-#: diff.c:5549
+#: diff.c:5575
 msgid "specify how differences in submodules are shown"
 msgstr ""
 
-#: diff.c:5553
+#: diff.c:5579
 #, fuzzy
 msgid "hide 'git add -N' entries from the index"
 msgstr "usar .gitattributes apenas a partir do índice"
 
-#: diff.c:5556
+#: diff.c:5582
 msgid "treat 'git add -N' entries as real in the index"
 msgstr ""
 
-#: diff.c:5558
+#: diff.c:5584
 #, fuzzy
 msgid "<string>"
 msgstr "cadeia"
 
-#: diff.c:5559
+#: diff.c:5585
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr ""
 
-#: diff.c:5562
+#: diff.c:5588
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr ""
 
-#: diff.c:5565
+#: diff.c:5591
 #, fuzzy
 msgid "show all changes in the changeset with -S or -G"
 msgstr "mostrar ficheiros com correspondências no paginador"
 
-#: diff.c:5568
+#: diff.c:5594
 #, fuzzy
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "usar expressões regulares estendidas do POSIX"
 
-#: diff.c:5571
+#: diff.c:5597
 #, fuzzy
 msgid "control the order in which files appear in the output"
 msgstr "mostrar outros ficheiros na saída"
 
-#: diff.c:5572
+#: diff.c:5598
 #, fuzzy
 msgid "<object-id>"
 msgstr "objeto"
 
-#: diff.c:5573
+#: diff.c:5599
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr ""
 
-#: diff.c:5575
+#: diff.c:5601
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr ""
 
-#: diff.c:5576
+#: diff.c:5602
 msgid "select files by diff type"
 msgstr ""
 
-#: diff.c:5578
+#: diff.c:5604
 #, fuzzy
 msgid "<file>"
 msgstr "ficheiro"
 
-#: diff.c:5579
+#: diff.c:5605
 #, fuzzy
 msgid "Output to a specific file"
 msgstr "submeter somente os ficheiros especificados"
 
-#: diff.c:6236
+#: diff.c:6262
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "a deteção mudança de nome inexata foi omitida devido a demasiados ficheiros."
 
-#: diff.c:6239
+#: diff.c:6265
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "só foram encontradas cópias de caminhos modificados devido a demasiados "
 "ficheiros."
 
-#: diff.c:6242
+#: diff.c:6268
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3831,17 +3975,18 @@
 #: dir.c:578
 #, fuzzy, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
-msgstr "o especificador de caminho '%s' não corresponde a nenhum ficheiro"
+msgstr "especificador de path '%s' correspondeu a ficheiro nenhum "
+"conhecido pelo git"
 
 #: dir.c:718 dir.c:747 dir.c:760
 #, fuzzy, c-format
 msgid "unrecognized pattern: '%s'"
-msgstr "argumento não reconhecido: %s"
+msgstr "padrão irreconhecível: '%s'"
 
 #: dir.c:777 dir.c:791
 #, fuzzy, c-format
 msgid "unrecognized negative pattern: '%s'"
-msgstr "opção de espaço em branco não reconhecida '%s'"
+msgstr "por reconhecer padrão negativo: '%s'"
 
 #: dir.c:809
 #, c-format
@@ -3855,12 +4000,12 @@
 #: dir.c:1198
 #, fuzzy, c-format
 msgid "cannot use %s as an exclude file"
-msgstr "não é possível guardar o ficheiro índice"
+msgstr "incapaz usar %s como ficheiro de exclusão"
 
 #: dir.c:2305
 #, fuzzy, c-format
 msgid "could not open directory '%s'"
-msgstr "não foi possível criar o diretório '%s'"
+msgstr "incapaz abrir pasta '%s'"
 
 #: dir.c:2605
 msgid "failed to get kernel name and information"
@@ -3869,7 +4014,7 @@
 #: dir.c:2729
 #, fuzzy
 msgid "untracked cache is disabled on this system or location"
-msgstr "A cache não controlada está desativada neste sistema ou localização."
+msgstr "cache untracked está desativada neste sistema ou localização."
 
 #: dir.c:3520
 #, fuzzy, c-format
@@ -3879,12 +4024,12 @@
 #: dir.c:3565 dir.c:3570
 #, c-format
 msgid "could not create directories for %s"
-msgstr "não foi possível criar o diretórios para %s"
+msgstr "incapaz criar pasta para %s"
 
 #: dir.c:3599
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
-msgstr "não foi possível migrar o diretório git de '%s' para '%s'"
+msgstr "incapaz migrar pasta git de '%s' para '%s'"
 
 #: editor.c:74
 #, c-format
@@ -3899,7 +4044,7 @@
 #: entry.c:478
 #, c-format
 msgid "could not stat file '%s'"
-msgstr "não foi possível obter stat do ficheiro '%s'"
+msgstr "incapaz obter estatutário de ficheiro '%s'"
 
 #: environment.c:150
 #, c-format
@@ -3909,267 +4054,267 @@
 #: environment.c:337
 #, fuzzy, c-format
 msgid "could not set GIT_DIR to '%s'"
-msgstr "não foi possível definir '%s' como '%s'"
+msgstr "incapaz definir GIT_DIR para '%s'"
 
 #: exec-cmd.c:363
 #, fuzzy, c-format
 msgid "too many args to run %s"
 msgstr "Demasiados argumentos."
 
-#: fetch-pack.c:176
+#: fetch-pack.c:177
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: esperava-se lista rasa"
 
-#: fetch-pack.c:179
+#: fetch-pack.c:180
 #, fuzzy
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: esperava-se lista rasa"
 
-#: fetch-pack.c:190
+#: fetch-pack.c:191
 #, fuzzy
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: esperava-se ACK/NAK, obteve-se '%s'"
 
-#: fetch-pack.c:210
+#: fetch-pack.c:211
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: esperava-se ACK/NAK, obteve-se '%s'"
 
-#: fetch-pack.c:221
+#: fetch-pack.c:222
 #, fuzzy
 msgid "unable to write to remote"
-msgstr "não foi possível escrever o ficheiro da tag"
+msgstr "incapaz escrever para remoto"
 
-#: fetch-pack.c:282
+#: fetch-pack.c:283
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc requer multi_ack_detailed"
 
-#: fetch-pack.c:375 fetch-pack.c:1397
+#: fetch-pack.c:378 fetch-pack.c:1406
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "linha rasa inválida: %s"
 
-#: fetch-pack.c:381 fetch-pack.c:1403
+#: fetch-pack.c:384 fetch-pack.c:1412
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "linha para aprofundar inválida: %s"
 
-#: fetch-pack.c:383 fetch-pack.c:1405
+#: fetch-pack.c:386 fetch-pack.c:1414
 #, c-format
 msgid "object not found: %s"
-msgstr "objeto não encontrado: %s"
+msgstr "objeto perdido: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1408
+#: fetch-pack.c:389 fetch-pack.c:1417
 #, c-format
 msgid "error in object: %s"
 msgstr "erro no objeto: %s"
 
-#: fetch-pack.c:388 fetch-pack.c:1410
+#: fetch-pack.c:391 fetch-pack.c:1419
 #, c-format
 msgid "no shallow found: %s"
-msgstr "raso não encontrado: %s"
+msgstr "shallow perdido: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1414
+#: fetch-pack.c:394 fetch-pack.c:1423
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "esperava-se raso/aprofundar, obteve-se %s"
 
-#: fetch-pack.c:431
+#: fetch-pack.c:434
 #, c-format
 msgid "got %s %d %s"
 msgstr "obteve-se %s %d %s"
 
-#: fetch-pack.c:448
+#: fetch-pack.c:451
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit inválido %s"
 
-#: fetch-pack.c:479
+#: fetch-pack.c:482
 msgid "giving up"
 msgstr "desistência"
 
-#: fetch-pack.c:492 progress.c:339
+#: fetch-pack.c:495 progress.c:339
 msgid "done"
 msgstr "concluído"
 
-#: fetch-pack.c:504
+#: fetch-pack.c:507
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "obteve-se %s (%d) %s"
 
-#: fetch-pack.c:540
+#: fetch-pack.c:543
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Marcado %s como completo"
 
-#: fetch-pack.c:755
+#: fetch-pack.c:758
 #, c-format
 msgid "already have %s (%s)"
 msgstr "já se tem %s (%s)"
 
-#: fetch-pack.c:824
+#: fetch-pack.c:827
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
-msgstr "fetch-pack: não é possível efetuar fork de sideband demultiplexer"
+msgstr "fetch-pack: incapaz de aforquilhar demultiplexer sideband"
 
-#: fetch-pack.c:832
+#: fetch-pack.c:835
 msgid "protocol error: bad pack header"
 msgstr "erro de protocolo: cabeçalho de pacote incorreto"
 
-#: fetch-pack.c:916
+#: fetch-pack.c:919
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
-msgstr "fetch-pack: não é possível criar processo filho %s"
+msgstr "fetch-pack: incapaz de aforquilhar %s"
 
-#: fetch-pack.c:933
+#: fetch-pack.c:937
 #, c-format
 msgid "%s failed"
 msgstr "%s falhou"
 
-#: fetch-pack.c:935
+#: fetch-pack.c:939
 msgid "error in sideband demultiplexer"
-msgstr "erro no sideband demultiplexer"
+msgstr "erro em demultiplexer sideband"
 
-#: fetch-pack.c:978
+#: fetch-pack.c:982
 #, c-format
 msgid "Server version is %.*s"
 msgstr "A versão do servidor é %.*s"
 
-#: fetch-pack.c:983 fetch-pack.c:989 fetch-pack.c:992 fetch-pack.c:998
-#: fetch-pack.c:1002 fetch-pack.c:1006 fetch-pack.c:1010 fetch-pack.c:1014
-#: fetch-pack.c:1018 fetch-pack.c:1022 fetch-pack.c:1026 fetch-pack.c:1030
-#: fetch-pack.c:1036 fetch-pack.c:1042 fetch-pack.c:1047 fetch-pack.c:1052
+#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
+#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
+#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
+#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
 #, fuzzy, c-format
 msgid "Server supports %s"
 msgstr "O servidor suporta side-band"
 
-#: fetch-pack.c:985
+#: fetch-pack.c:992
 msgid "Server does not support shallow clients"
-msgstr "O servidor não suporta clientes rasos"
+msgstr "Servidor insustenta clientes shallow"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1052
 msgid "Server does not support --shallow-since"
-msgstr "O servidor não suporta --shallow-since"
+msgstr "Servidor insustenta --shallow-since"
 
-#: fetch-pack.c:1050
+#: fetch-pack.c:1057
 msgid "Server does not support --shallow-exclude"
-msgstr "O servidor não suporta --shallow-exclude"
+msgstr "Servidor insustenta --shallow-exclude"
 
-#: fetch-pack.c:1054
+#: fetch-pack.c:1061
 msgid "Server does not support --deepen"
-msgstr "O servidor não suporta --deepen"
+msgstr "Servidor insustenta --deepen"
 
-#: fetch-pack.c:1056
+#: fetch-pack.c:1063
 #, fuzzy
 msgid "Server does not support this repository's object format"
-msgstr "O servidor não suporta --deepen"
+msgstr "Servidor insustenta formato de objeto deste repositório"
 
-#: fetch-pack.c:1069
+#: fetch-pack.c:1076
 msgid "no common commits"
-msgstr "nenhum commit em comum"
+msgstr "commits comuns nenhuns"
 
-#: fetch-pack.c:1081 fetch-pack.c:1619
+#: fetch-pack.c:1088 fetch-pack.c:1628
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: falha ao obter."
 
-#: fetch-pack.c:1205
+#: fetch-pack.c:1214
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr ""
 
-#: fetch-pack.c:1209
+#: fetch-pack.c:1218
 #, fuzzy, c-format
 msgid "the server does not support algorithm '%s'"
-msgstr "O servidor não suporta clientes rasos"
+msgstr "o servidor insustenta algoritmo '%s'"
 
-#: fetch-pack.c:1229
+#: fetch-pack.c:1238
 #, fuzzy
 msgid "Server does not support shallow requests"
-msgstr "O servidor não suporta clientes rasos"
+msgstr "Servidor insustenta pedidos shallow"
 
-#: fetch-pack.c:1236
+#: fetch-pack.c:1245
 #, fuzzy
 msgid "Server supports filter"
-msgstr "O servidor suporta ofs-delta"
+msgstr "Servidor sustenta filtro"
 
-#: fetch-pack.c:1275
+#: fetch-pack.c:1284
 #, fuzzy
 msgid "unable to write request to remote"
-msgstr "não foi possível escrever os parâmetros no ficheiro de configuração"
+msgstr "incapaz escrever pedidos para remoto"
 
-#: fetch-pack.c:1293
+#: fetch-pack.c:1302
 #, c-format
 msgid "error reading section header '%s'"
 msgstr ""
 
-#: fetch-pack.c:1299
+#: fetch-pack.c:1308
 #, fuzzy, c-format
 msgid "expected '%s', received '%s'"
 msgstr "blob para %s '%s' esperado"
 
-#: fetch-pack.c:1360
+#: fetch-pack.c:1369
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1365
+#: fetch-pack.c:1374
 #, c-format
 msgid "error processing acks: %d"
 msgstr ""
 
-#: fetch-pack.c:1375
+#: fetch-pack.c:1384
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1377
+#: fetch-pack.c:1386
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1419
+#: fetch-pack.c:1428
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr ""
 
-#: fetch-pack.c:1466
+#: fetch-pack.c:1475
 #, fuzzy, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "esperava-se raso/aprofundar, obteve-se %s"
 
-#: fetch-pack.c:1471
+#: fetch-pack.c:1480
 #, fuzzy, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "fim de ficheiro inesperado"
 
-#: fetch-pack.c:1476
+#: fetch-pack.c:1485
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr ""
 
-#: fetch-pack.c:1506
+#: fetch-pack.c:1515
 #, fuzzy
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: esperava-se lista rasa"
 
-#: fetch-pack.c:1887
+#: fetch-pack.c:1897
 msgid "no matching remote head"
-msgstr "nenhuma cabeça remota correspondente"
+msgstr "corresponde a remote head nenhuma"
 
-#: fetch-pack.c:1910 builtin/clone.c:692
+#: fetch-pack.c:1920 builtin/clone.c:693
 msgid "remote did not send all necessary objects"
-msgstr "o remoto não enviou todos os objetos necessários"
+msgstr "remoto faltou enviar todos objetos necessários"
 
-#: fetch-pack.c:1937
+#: fetch-pack.c:1947
 #, c-format
 msgid "no such remote ref %s"
 msgstr "referência remota %s inexistente"
 
-#: fetch-pack.c:1940
+#: fetch-pack.c:1950
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
-msgstr "O servidor não permite pedido do objeto não anunciado %s"
+msgstr "Servidor proíbe pedido de objeto por anunciar %s"
 
 #: gpg-interface.c:272
 msgid "could not create temporary file"
-msgstr "não foi possível criar ficheiro temporário"
+msgstr "incapaz criar ficheiro temporário"
 
 #: gpg-interface.c:275
 #, c-format
@@ -4178,31 +4323,31 @@
 
 #: gpg-interface.c:457
 msgid "gpg failed to sign the data"
-msgstr "gpg não assinou os dados"
+msgstr "gpg falhou assinar os dados"
 
 #: graph.c:98
 #, c-format
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignorar cor inválida '%.*s' em log.graphColors"
 
-#: grep.c:668
+#: grep.c:640
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
 msgstr ""
 
-#: grep.c:2128
+#: grep.c:2100
 #, c-format
 msgid "'%s': unable to read %s"
-msgstr "'%s': não foi possível ler %s"
+msgstr "'%s': incapaz ler %s"
 
-#: grep.c:2145 setup.c:176 builtin/clone.c:411 builtin/diff.c:89
+#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "falha ao invocar stat de '%s'"
 
-#: grep.c:2156
+#: grep.c:2128
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': leitura truncada"
@@ -4275,12 +4420,12 @@
 #: help.c:365 git.c:99
 #, fuzzy, c-format
 msgid "unsupported command listing type '%s'"
-msgstr "versão de índice %s não suportada"
+msgstr "insustento para listagem tipo comandos '%s'"
 
 #: help.c:405
 #, fuzzy
 msgid "The Git concept guides are:"
-msgstr "Os guias comuns do Git:\n"
+msgstr "Os guias comuns do Git:"
 
 #: help.c:429
 msgid "See 'git help <command>' to read about a specific subcommand"
@@ -4295,42 +4440,40 @@
 msgid "Command aliases"
 msgstr ""
 
-#: help.c:513
+#: help.c:527
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
 "able to execute it. Maybe git-%s is broken?"
 msgstr ""
-"'%s' parece ser um comando do git, mas não é possível\n"
-"executá-lo. Talvez git-%s esteja danificado?"
+"'%s' parece ser comando git, mas incapaz executá-lo.\n"
+"Talvez git-%s esteja danificado?"
 
-#: help.c:572
+#: help.c:543 help.c:631
+#, c-format
+msgid "git: '%s' is not a git command. See 'git --help'."
+msgstr "git: '%s' é comando git nenhum. Vê 'git --help'."
+
+#: help.c:591
 msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Oh não. Não há nenhum comando do Git disponível no sistema."
+msgstr "Carago. Teu sistema reporta comandos Git nenhuns."
 
-#: help.c:594
+#: help.c:613
 #, fuzzy, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
-msgstr ""
-"AVISO: Invocou um comando do Git designado '%s' que não existe.\n"
-"Continuando, assumindo que queria dizer '%s'"
+msgstr "AVISO: Chamou comando Git designado '%s', que é inexistente."
 
-#: help.c:599
+#: help.c:618
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr ""
 
-#: help.c:604
+#: help.c:623
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 
-#: help.c:612
-#, c-format
-msgid "git: '%s' is not a git command. See 'git --help'."
-msgstr "git: '%s' não é um comando do git. Consulte 'git --help'."
-
-#: help.c:616
+#: help.c:635
 msgid ""
 "\n"
 "The most similar command is"
@@ -4340,17 +4483,17 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: help.c:656
+#: help.c:675
 #, fuzzy
 msgid "git version [<options>]"
 msgstr "git column [<opções>]"
 
-#: help.c:711
+#: help.c:730
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:715
+#: help.c:734
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4400,32 +4543,31 @@
 
 #: ident.c:397
 msgid "no email was given and auto-detection is disabled"
-msgstr "nenhum e-mail indicado e a deteção automática está desativada"
+msgstr "foi dado email nenhum e deteção automática está desativada"
 
 #: ident.c:402
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
-msgstr ""
-"não é possível detetar automaticamente endereço de e-mail (obteve-se '%s')"
+msgstr "incapaz auto-detetar endereço de e-mail (recebi '%s')"
 
 #: ident.c:419
 msgid "no name was given and auto-detection is disabled"
-msgstr "nenhum nome indicado e a deteção automática está desativada"
+msgstr "foi dado nome nenhum e deteção automática está desativada"
 
 #: ident.c:425
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
-msgstr "não é possível detetar automaticamente o nome (obteve-se '%s')"
+msgstr "incapaz auto-detetar nome (recebi '%s')"
 
 #: ident.c:433
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
-msgstr "nome de identificação vazio (de <%s>) não é permitido"
+msgstr "nome de identação vazio (para <%s>) proíbido"
 
 #: ident.c:439
 #, c-format
 msgid "name consists only of disallowed characters: %s"
-msgstr "nome consiste apenas de caracteres não permitidos: %s"
+msgstr "nome consiste apenas de caracteres proíbidos: %s"
 
 #: ident.c:454 builtin/commit.c:634
 #, c-format
@@ -4465,12 +4607,12 @@
 #: list-objects-filter.c:492
 #, fuzzy, c-format
 msgid "unable to access sparse blob in '%s'"
-msgstr "não é possível aceder a '%s'"
+msgstr "incapaz acessar blob sparse em '%s'"
 
 #: list-objects-filter.c:495
 #, fuzzy, c-format
 msgid "unable to parse sparse filter data in %s"
-msgstr "não foi possível analisar o formato de --pretty"
+msgstr "incapaz analisar dados de filtro sparse em %s"
 
 #: list-objects.c:127
 #, c-format
@@ -4485,7 +4627,7 @@
 #: list-objects.c:375
 #, fuzzy, c-format
 msgid "unable to load root tree for commit %s"
-msgstr "não foi possível analisar o commit %s"
+msgstr "incapaz carregar raiz de árvore para commit %s"
 
 #: lockfile.c:152
 #, c-format
@@ -4498,23 +4640,38 @@
 "may have crashed in this repository earlier:\n"
 "remove the file manually to continue."
 msgstr ""
-"Não é possível criar '%s.lock': %s.\n"
+"Incapaz de criar '%s.lock': %s.\n"
 "\n"
-"Outro processo git parece estar a executar neste repositório, e.g.\n"
-"um editor aberto por 'git commit'. Certifique-se que todos os processos\n"
-"terminaram e tente de novo. Se ainda assim falhar, um processo git\n"
-"pode ter falhado anteriormente no repositório:\n"
-"remova o ficheiro manualmente para continuar."
+"Outro processo git parece estar a correr neste repositório, e.g.\n"
+"um editor aberto por 'git commit'. Por favor, certifica-te que todos\n"
+"os processos são terminados e tenta de novo. Se ainda assim falhar,\n"
+"um processo git anterior pode ter crashado neste repositório:\n"
+"remove o ficheiro manualmente para continuar."
 
 #: lockfile.c:160
 #, c-format
 msgid "Unable to create '%s.lock': %s"
-msgstr "Não é foi possível criar '%s.lock': %s"
+msgstr "Incapaz de criar '%s.lock': %s"
 
 #: ls-refs.c:109
 msgid "expected flush after ls-refs arguments"
 msgstr ""
 
+#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#, fuzzy, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+"As suas alterações locais nos seguintes ficheiros seriam substituídas ao "
+"integrar:\n"
+"%%s"
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3436
+#, fuzzy, c-format
+msgid "Already up to date!"
+msgstr "Já está atualizado!"
+
 #: merge-recursive.c:356
 msgid "(bad commit)\n"
 msgstr "(commit incorreto)\n"
@@ -4546,12 +4703,12 @@
 #: merge-recursive.c:908
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
-msgstr "perda de ficheiro não controlado em '%s' recusada"
+msgstr "recusando perder ficheiro untracked em '%s'"
 
 #: merge-recursive.c:949 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
-msgstr "não é possível ler o objeto %s: '%s'"
+msgstr "incapaz ler objeto %s '%s'"
 
 #: merge-recursive.c:954
 #, c-format
@@ -4571,7 +4728,7 @@
 #: merge-recursive.c:995
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
-msgstr "não sei o que fazer com %06o %s '%s'"
+msgstr "desconheço que fazer com %06o %s '%s'"
 
 #: merge-recursive.c:1191
 #, fuzzy, c-format
@@ -4635,7 +4792,7 @@
 #: merge-recursive.c:1346
 #, c-format
 msgid "Unable to add %s to database"
-msgstr "Não é possível adicionar %s à base de dados"
+msgstr "Incapaz de adicionar %s à base de dados"
 
 #: merge-recursive.c:1378
 #, c-format
@@ -4645,7 +4802,8 @@
 #: merge-recursive.c:1402
 #, fuzzy, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
-msgstr "perda de ficheiro não controlado em '%s' recusada"
+msgstr "Erro: Recusando perder ficheiro untracked de '%s'; escrevendo "
+"invés para %s"
 
 #: merge-recursive.c:1474
 #, c-format
@@ -4694,12 +4852,13 @@
 #: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
 #, fuzzy, c-format
 msgid "Refusing to lose dirty file at %s"
-msgstr "perda de ficheiro não controlado em '%s' recusada"
+msgstr "Recusando perder ficheiro sujo de %s"
 
 #: merge-recursive.c:1587
 #, fuzzy, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
-msgstr "perda de ficheiro não controlado em '%s' recusada"
+msgstr "Recusando perder ficheiro untracked de %s, apesar de este estar "
+"no caminho."
 
 #: merge-recursive.c:1645
 #, fuzzy, c-format
@@ -4716,7 +4875,8 @@
 #: merge-recursive.c:1681
 #, fuzzy, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
-msgstr "perda de ficheiro não controlado em '%s' recusada"
+msgstr "Recusando perder ficheiro untracked de %s; adicionado-o como %s "
+"invés"
 
 #: merge-recursive.c:1708
 #, c-format
@@ -4779,12 +4939,12 @@
 #: merge-recursive.c:2973
 #, c-format
 msgid "cannot read object %s"
-msgstr "não foi possível ler o objeto %s"
+msgstr "incapaz ler objeto %s"
 
 #: merge-recursive.c:2976
 #, c-format
 msgid "object %s is not a blob"
-msgstr "o objeto %s não é um blob"
+msgstr "objeto %s é blob nenhum"
 
 #: merge-recursive.c:3040
 msgid "modify"
@@ -4878,11 +5038,6 @@
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLITO (%s): conflito de integração em %s"
 
-#: merge-recursive.c:3436
-#, fuzzy
-msgid "Already up to date!"
-msgstr "Já está atualizado!"
-
 #: merge-recursive.c:3445
 #, c-format
 msgid "merging of trees %s and %s failed"
@@ -4901,222 +5056,208 @@
 
 #: merge-recursive.c:3613
 msgid "merge returned no commit"
-msgstr "a integração não retornou nenhum commit"
-
-#: merge-recursive.c:3672
-#, fuzzy, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas ao "
-"integrar:\n"
-"%%s"
+msgstr "junção retornou commit nenhum"
 
 #: merge-recursive.c:3769
 #, c-format
 msgid "Could not parse object '%s'"
-msgstr "Não foi possível analisar o objeto '%s'"
+msgstr "Incapaz de analisar objeto '%s'"
 
-#: merge-recursive.c:3787 builtin/merge.c:702 builtin/merge.c:881
+#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
 msgid "Unable to write index."
-msgstr "Não é possível escrever no índice."
+msgstr "Incapaz de escrever no index."
 
 #: merge.c:41
 msgid "failed to read the cache"
 msgstr "falha ao ler a cache"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1896 builtin/am.c:1930
-#: builtin/checkout.c:560 builtin/checkout.c:816 builtin/clone.c:816
+#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
+#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
 #: builtin/stash.c:265
 msgid "unable to write new index file"
-msgstr "não foi possível escrever novo ficheiro de índice"
+msgstr "incapaz escrever novo ficheiro index"
 
-#: midx.c:79
+#: midx.c:80
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr ""
 
-#: midx.c:95
+#: midx.c:96
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 
-#: midx.c:100
+#: midx.c:101
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr ""
 
-#: midx.c:105
+#: midx.c:106
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 
-#: midx.c:122
+#: midx.c:123
 msgid "invalid chunk offset (too large)"
 msgstr ""
 
-#: midx.c:146
+#: midx.c:147
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 
-#: midx.c:159
+#: midx.c:160
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr ""
 
-#: midx.c:161
+#: midx.c:162
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr ""
 
-#: midx.c:163
+#: midx.c:164
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr ""
 
-#: midx.c:165
+#: midx.c:166
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr ""
 
-#: midx.c:179
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 
-#: midx.c:222
+#: midx.c:223
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 
-#: midx.c:272
+#: midx.c:273
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 
-#: midx.c:300
-msgid "error preparing packfile from multi-pack-index"
-msgstr ""
-
-#: midx.c:485
+#: midx.c:480
 #, fuzzy, c-format
 msgid "failed to add packfile '%s'"
 msgstr "falha ao ler o ficheiro de comando '%s'"
 
-#: midx.c:491
+#: midx.c:486
 #, fuzzy, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "falha ao abrir '%s'"
 
-#: midx.c:551
+#: midx.c:546
 #, fuzzy, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "Falha ao criar os ficheiros de saída"
 
-#: midx.c:853
+#: midx.c:846
 msgid "Adding packfiles to multi-pack-index"
 msgstr ""
 
-#: midx.c:886
+#: midx.c:879
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr ""
 
-#: midx.c:938
+#: midx.c:931
 #, fuzzy
 msgid "no pack files to index."
-msgstr "Não é possível escrever no índice."
+msgstr "pack files nenhuns para index."
 
-#: midx.c:990
+#: midx.c:982
 msgid "Writing chunks to multi-pack-index"
 msgstr ""
 
-#: midx.c:1068
+#: midx.c:1060
 #, fuzzy, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "falha ao limpar o índice"
 
-#: midx.c:1124
+#: midx.c:1116
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr ""
 
-#: midx.c:1132
+#: midx.c:1124
 msgid "Looking for referenced packfiles"
 msgstr ""
 
-#: midx.c:1147
+#: midx.c:1139
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 
-#: midx.c:1152
+#: midx.c:1144
 msgid "the midx contains no oid"
 msgstr ""
 
-#: midx.c:1161
+#: midx.c:1153
 msgid "Verifying OID order in multi-pack-index"
 msgstr ""
 
-#: midx.c:1170
+#: midx.c:1162
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 
-#: midx.c:1190
+#: midx.c:1182
 #, fuzzy
 msgid "Sorting objects by packfile"
 msgstr "A escrever objetos"
 
-#: midx.c:1197
+#: midx.c:1189
 #, fuzzy
 msgid "Verifying object offsets"
 msgstr "A escrever objetos"
 
-#: midx.c:1213
+#: midx.c:1205
 #, fuzzy, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
-msgstr "não é possível adicionar %s à cache"
+msgstr "falhou carregar entrada pack para oid[%d] = %s"
 
-#: midx.c:1219
+#: midx.c:1211
 #, fuzzy, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "falha ao ler o ficheiro de comando '%s'"
 
-#: midx.c:1228
+#: midx.c:1220
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 
-#: midx.c:1253
+#: midx.c:1245
 #, fuzzy
 msgid "Counting referenced objects"
-msgstr "eliminar ficheiros não referenciados"
+msgstr "Contando objetos referenciados"
 
-#: midx.c:1263
+#: midx.c:1255
 msgid "Finding and deleting unreferenced packfiles"
 msgstr ""
 
-#: midx.c:1454
+#: midx.c:1446
 #, fuzzy
 msgid "could not start pack-objects"
-msgstr "Não foi possível lançar pack-objects"
+msgstr "incapaz de começar pack-objects"
 
-#: midx.c:1474
+#: midx.c:1466
 #, fuzzy
 msgid "could not finish pack-objects"
-msgstr "Não foi possível lançar pack-objects"
+msgstr "incapaz de terminar pack-objects"
 
 #: name-hash.c:537
 #, fuzzy, c-format
 msgid "unable to create lazy_dir thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz criar thread lazy_dir: %s"
 
 #: name-hash.c:559
 #, fuzzy, c-format
 msgid "unable to create lazy_name thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz criar thread lazy_name: %s"
 
 #: name-hash.c:565
 #, fuzzy, c-format
 msgid "unable to join lazy_name thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz juntar a thread lazy_name: %s"
 
 #: notes-merge.c:277
 #, c-format
@@ -5125,19 +5266,18 @@
 "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 ""
-"Não concluíu a integração de notas anterior (%s existe).\n"
-"Use 'git notes merge --commit' ou 'git notes merge --abort' para submeter/"
-"abortar a integração anterior antes de começar uma nova integração de notas."
+"Ficou por concluír a anterior junção de notas (%s existe).\n"
+"Por favor, usa 'git notes merge --commit' ou 'git notes merge --abort' para "
+"commitar/abortar a junção anterior antes de começares uma nova junção de notas."
 
 #: notes-merge.c:284
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
-msgstr "Não concluído a integração de integração de notas (%s presente)."
+msgstr "Ficou por concluír a tua junção de notas (%s existe)."
 
 #: notes-utils.c:46
 msgid "Cannot commit uninitialized/unreferenced notes tree"
-msgstr ""
-"Não é possível submeter árvore de notas não inicializada ou não referenciada"
+msgstr "Impossível commit notas de árvore que estejam por iniciar/por referênciar"
 
 #: notes-utils.c:105
 #, c-format
@@ -5166,7 +5306,7 @@
 #: object.c:173
 #, fuzzy, c-format
 msgid "object %s is a %s, not a %s"
-msgstr "o objeto %s não é um blob"
+msgstr "objeto %s é %s, é %s nenhum(a)"
 
 #: object.c:233
 #, fuzzy, c-format
@@ -5176,7 +5316,7 @@
 #: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
-msgstr "não foi possível analisar o objeto: %s"
+msgstr "incapaz analisar objeto: %s"
 
 #: object.c:266 object.c:278
 #, c-format
@@ -5186,18 +5326,18 @@
 #: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
 #, fuzzy, c-format
 msgid "unable to get size of %s"
-msgstr "não foi possível mover %s para %s"
+msgstr "incapaz obter tamanho de %s"
 
-#: packfile.c:630
+#: packfile.c:615
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset antes do fim do ficheiro de pacote (.idx danificado?)"
 
-#: packfile.c:1922
+#: packfile.c:1907
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "offset antes do início do índice do pacote %s (índice corrompido?)"
 
-#: packfile.c:1926
+#: packfile.c:1911
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "offset depois do fim do índice do pacote %s (índice truncado?)"
@@ -5245,7 +5385,7 @@
 #: parse-options.c:94
 #, fuzzy, c-format
 msgid "%s isn't available"
-msgstr "a tag anotada %s não está disponível"
+msgstr "%s está indisponível"
 
 #: parse-options.c:217
 #, c-format
@@ -5280,7 +5420,7 @@
 #: parse-options.c:866
 #, fuzzy, c-format
 msgid "unknown non-ascii option in string: `%s'"
-msgstr "Definidição --confirm desconhecida: '%s'\n"
+msgstr "Definidição --confirm desconhecida: '%s'"
 
 #: parse-options.c:890
 msgid "..."
@@ -5311,13 +5451,11 @@
 #: path.c:915
 #, c-format
 msgid "Could not make %s writable by group"
-msgstr "Não foi possível dar permissão de escrita ao grupo a %s"
+msgstr "Incapaz de fazer %s escrevível ao grupo"
 
 #: pathspec.c:130
 msgid "Escape character '\\' not allowed as last character in attr value"
-msgstr ""
-"O carácter de escape '\\' não pode ser usado como último carácter no valor "
-"de attr"
+msgstr "Carácter de escape '\\' é proíbido como último carácter no valor attr"
 
 #: pathspec.c:148
 msgid "Only one 'attr:' specification is allowed."
@@ -5325,7 +5463,7 @@
 
 #: pathspec.c:151
 msgid "attr spec must not be empty"
-msgstr "especificador attr não pode estar vazio"
+msgstr "attr spec tem de ter algum conteúdo"
 
 #: pathspec.c:194
 #, c-format
@@ -5363,7 +5501,7 @@
 #: pathspec.c:370
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
-msgstr "Mágica de especificador de caminho '%c' em '%s' não implementada"
+msgstr "Por implementar, magic pathspec '%c' em '%s'"
 
 #: pathspec.c:429
 #, c-format
@@ -5383,8 +5521,7 @@
 #: pathspec.c:531
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
-msgstr ""
-"%s: mágica de especificador de caminho não suportada por este comando: %s"
+msgstr "%s: magic pathspec insustentado por este comando: %s"
 
 #: pathspec.c:598
 #, c-format
@@ -5399,22 +5536,22 @@
 #: pkt-line.c:92
 #, fuzzy
 msgid "unable to write flush packet"
-msgstr "não foi possível escrever %s"
+msgstr "incapaz escrever pacote flush"
 
 #: pkt-line.c:99
 #, fuzzy
 msgid "unable to write delim packet"
-msgstr "não é possível escrever o ficheiro de índice"
+msgstr "incapaz escrever pacote delim"
 
 #: pkt-line.c:106
 #, fuzzy
 msgid "unable to write stateless separator packet"
-msgstr "não é possível escrever o objeto de nota"
+msgstr "incapaz escrever pacote de separador sem estado"
 
 #: pkt-line.c:113
 #, fuzzy
 msgid "flush packet write failed"
-msgstr "não foi possível escrever o ficheiro da tag"
+msgstr "escrita de pacote flush falhou"
 
 #: pkt-line.c:153 pkt-line.c:239
 msgid "protocol error: impossibly long line"
@@ -5423,7 +5560,7 @@
 #: pkt-line.c:169 pkt-line.c:171
 #, fuzzy
 msgid "packet write with format failed"
-msgstr "não foi possível escrever o ficheiro da tag"
+msgstr "escrita de pacote com formato falhou"
 
 #: pkt-line.c:203
 msgid "packet write failed - data exceeds max packet size"
@@ -5432,7 +5569,7 @@
 #: pkt-line.c:210 pkt-line.c:217
 #, fuzzy
 msgid "packet write failed"
-msgstr "não foi possível escrever o ficheiro da tag"
+msgstr "escrita de pacote falhou"
 
 #: pkt-line.c:302
 #, fuzzy
@@ -5454,7 +5591,7 @@
 msgid "protocol error: bad line length %d"
 msgstr "erro de protocolo: cabeçalho de pacote incorreto"
 
-#: pkt-line.c:373 sideband.c:150
+#: pkt-line.c:373 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "erro remoto: %s"
@@ -5462,16 +5599,16 @@
 #: preload-index.c:119
 #, fuzzy
 msgid "Refreshing index"
-msgstr "não foi possível refrescar o índice"
+msgstr "Refrescando index"
 
 #: preload-index.c:138
 #, fuzzy, c-format
 msgid "unable to create threaded lstat: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz criar thread de lstat: %s"
 
 #: pretty.c:983
 msgid "unable to parse --pretty format"
-msgstr "não foi possível analisar o formato de --pretty"
+msgstr "incapaz analisar formato de --pretty"
 
 #: promisor-remote.c:30
 msgid "promisor-remote: unable to fork off fetch subprocess"
@@ -5497,17 +5634,17 @@
 #: range-diff.c:77
 #, fuzzy
 msgid "could not start `log`"
-msgstr "não foi possível obter stat de %s"
+msgstr "incapaz começar `log`"
 
 #: range-diff.c:79
 #, fuzzy
 msgid "could not read `log` output"
-msgstr "não foi possível ler a saída do comando 'show'"
+msgstr "incapaz ler output de `log`"
 
-#: range-diff.c:98 sequencer.c:5283
+#: range-diff.c:98 sequencer.c:5310
 #, fuzzy, c-format
 msgid "could not parse commit '%s'"
-msgstr "não foi possível analisar o commit %s\n"
+msgstr "incapaz analisar commit '%s'"
 
 #: range-diff.c:112
 #, c-format
@@ -5519,17 +5656,17 @@
 #: range-diff.c:137
 #, fuzzy, c-format
 msgid "could not parse git header '%.*s'"
-msgstr "não foi possível analisar o patch '%s'"
+msgstr "incapaz analisar cabeçalho git '%.*s'"
 
-#: range-diff.c:301
+#: range-diff.c:299
 #, fuzzy
 msgid "failed to generate diff"
 msgstr "falha ao criar o ficheiro %s"
 
-#: range-diff.c:534 range-diff.c:536
+#: range-diff.c:532 range-diff.c:534
 #, fuzzy, c-format
 msgid "could not parse log for '%s'"
-msgstr "não é possível ler o ficheiro de log '%s'"
+msgstr "incapaz analisar log para '%s'"
 
 #: read-cache.c:682
 #, fuzzy, c-format
@@ -5549,32 +5686,32 @@
 #: read-cache.c:725
 #, fuzzy, c-format
 msgid "'%s' does not have a commit checked out"
-msgstr "'%s' não aponta para um commit"
+msgstr "'%s' tem commit checked out nenhum"
 
 #: read-cache.c:777
 #, fuzzy, c-format
 msgid "unable to index file '%s'"
-msgstr "não foi possível ler o ficheiro de índice"
+msgstr "incapaz indexar ficheiro '%s'"
 
 #: read-cache.c:796
 #, fuzzy, c-format
 msgid "unable to add '%s' to index"
-msgstr "Não é possível adicionar %s à base de dados"
+msgstr "incapaz adicionar %s a index"
 
 #: read-cache.c:807
 #, fuzzy, c-format
 msgid "unable to stat '%s'"
-msgstr "não foi possível criar '%s'"
+msgstr "incapaz obter estatutário de '%s'"
 
 #: read-cache.c:1318
 #, fuzzy, c-format
 msgid "'%s' appears as both a file and as a directory"
-msgstr "%s existe e não é um diretório"
+msgstr "'%s' aparece ambo como ficheiro e como pasta"
 
 #: read-cache.c:1524
 #, fuzzy
 msgid "Refresh index"
-msgstr "não foi possível refrescar o índice"
+msgstr "Refresca index"
 
 #: read-cache.c:1639
 #, c-format
@@ -5636,17 +5773,17 @@
 #: read-cache.c:1862
 #, fuzzy, c-format
 msgid "multiple stage entries for merged file '%s'"
-msgstr "extrair a versão deles dos ficheiros não integrados"
+msgstr "multíplas entradas de estágio para ficheiro juntado '%s'"
 
 #: read-cache.c:1865
 #, fuzzy, c-format
 msgid "unordered stage entries for '%s'"
-msgstr "não foi possível criar o diretórios para %s"
+msgstr "entradas de estágio desordenadas para '%s'"
 
 #: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
 #: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:489 builtin/checkout.c:675 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:121 builtin/grep.c:507
+#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
+#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
 #: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
 #: builtin/submodule--helper.c:332
 msgid "index file corrupt"
@@ -5655,12 +5792,12 @@
 #: read-cache.c:2115
 #, fuzzy, c-format
 msgid "unable to create load_cache_entries thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz criar thread load_cache_entries: %s"
 
 #: read-cache.c:2128
 #, fuzzy, c-format
 msgid "unable to join load_cache_entries thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz juntar a thread load_cache_entries: %s"
 
 #: read-cache.c:2161
 #, fuzzy, c-format
@@ -5670,7 +5807,7 @@
 #: read-cache.c:2165
 #, fuzzy, c-format
 msgid "%s: cannot stat the open index"
-msgstr "não é possível ler o índice"
+msgstr "%s: incapaz obter estatutário de index aberto"
 
 #: read-cache.c:2169
 #, c-format
@@ -5680,57 +5817,57 @@
 #: read-cache.c:2173
 #, fuzzy, c-format
 msgid "%s: unable to map index file"
-msgstr "não foi possível ler o ficheiro de índice"
+msgstr "%s: incapaz mapear ficheiro index"
 
 #: read-cache.c:2215
 #, fuzzy, c-format
 msgid "unable to create load_index_extensions thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz criar thread load_index_extensions: %s"
 
 #: read-cache.c:2242
 #, fuzzy, c-format
 msgid "unable to join load_index_extensions thread: %s"
-msgstr "não foi possível criar thread: %s"
+msgstr "incapaz juntar a thread load_index_extensions: %s"
 
 #: read-cache.c:2274
 #, fuzzy, c-format
 msgid "could not freshen shared index '%s'"
-msgstr "não foi possível ler o ficheiro '%s'"
+msgstr "incapaz refrescar index partilhado '%s'"
 
 #: read-cache.c:2321
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1126
+#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
 #, c-format
 msgid "could not close '%s'"
-msgstr "não foi possível fechar '%s'"
+msgstr "incapaz fechar '%s'"
 
-#: read-cache.c:3120 sequencer.c:2446 sequencer.c:4185
+#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
 #, fuzzy, c-format
 msgid "could not stat '%s'"
-msgstr "não foi possível obter stat de '%s'"
+msgstr "incapaz obter estatutário '%s'"
 
 #: read-cache.c:3133
 #, c-format
 msgid "unable to open git dir: %s"
-msgstr "não é possível diretório git: %s"
+msgstr "incapaz abrir pasta git: %s"
 
 #: read-cache.c:3145
 #, c-format
 msgid "unable to unlink: %s"
-msgstr "não é possível invocar unlink: %s"
+msgstr "incapaz deslinkar: %s"
 
 #: read-cache.c:3170
 #, fuzzy, c-format
 msgid "cannot fix permission bits on '%s'"
-msgstr "não é possível abrir o ficheiro '%s'"
+msgstr "incapaz arranjar bits de permissão em '%s'"
 
 #: read-cache.c:3319
 #, fuzzy, c-format
 msgid "%s: cannot drop to stage #0"
-msgstr "não é possível mudar para o diretório %s"
+msgstr "%s: incapaz baixar para estágio #0"
 
 #: rebase-interactive.c:11
 #, fuzzy
@@ -5740,7 +5877,7 @@
 "Or you can abort the rebase with 'git rebase --abort'.\n"
 msgstr ""
 "Pode corrí-lo com 'git rebase --edit-todo' e depois executar 'git rebase --"
-"continue'."
+"continue'.\n"
 
 #: rebase-interactive.c:33
 #, fuzzy, c-format
@@ -5797,7 +5934,7 @@
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 "\n"
-"Não remover nenhum linha. Use 'drop' explicitamente para remover um commit.\n"
+"Remove linha nenhuma. Usa explicitamente 'drop' para remover um commit.\n"
 
 #: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
 msgid ""
@@ -5831,17 +5968,17 @@
 "No entanto, se remover tudo, o rebase será abortado.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3571
-#: sequencer.c:3597 sequencer.c:5389 builtin/fsck.c:347 builtin/rebase.c:264
+#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
+#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
 #, fuzzy, c-format
 msgid "could not write '%s'"
-msgstr "não foi possível escrever em '%s'"
+msgstr "incapaz escrever '%s'"
 
-#: rebase-interactive.c:116 builtin/rebase.c:196 builtin/rebase.c:222
-#: builtin/rebase.c:246
+#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
+#: builtin/rebase.c:252
 #, fuzzy, c-format
 msgid "could not write '%s'."
-msgstr "não foi possível escrever em '%s'"
+msgstr "incapaz escrever '%s'."
 
 #: rebase-interactive.c:193
 #, fuzzy, c-format
@@ -5850,7 +5987,7 @@
 "Dropped commits (newer to older):\n"
 msgstr ""
 "Aviso: alguns commits podem ter sido descartados acidentalmente.\n"
-"Commits descartados (mais novo para o mais velho):"
+"Commits descartados (mais novo para o mais velho):\n"
 
 #: rebase-interactive.c:200
 #, fuzzy, c-format
@@ -5866,18 +6003,19 @@
 "explicitamente.\n"
 "\n"
 "Use 'git config rebase.missingCommitsCheck' para mudar o nível de avisos.\n"
-"O comportamentos possíveis são: ignore, warn, error."
+"O comportamentos possíveis são: ignore, warn, error.\n"
+"\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2361
-#: builtin/rebase.c:182 builtin/rebase.c:207 builtin/rebase.c:233
-#: builtin/rebase.c:258
+#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
+#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
+#: builtin/rebase.c:264
 #, c-format
 msgid "could not read '%s'."
-msgstr "não foi possível ler '%s'."
+msgstr "incapaz ler '%s'."
 
 #: ref-filter.c:42 wt-status.c:1973
 msgid "gone"
-msgstr "desaparecido"
+msgstr "desapareceu"
 
 #: ref-filter.c:43
 #, c-format
@@ -5902,7 +6040,7 @@
 #: ref-filter.c:171
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
-msgstr "cor não reconhecida: %%(color:%s)"
+msgstr "cor desconhecida: %%(color:%s)"
 
 #: ref-filter.c:193
 #, c-format
@@ -5917,37 +6055,37 @@
 #: ref-filter.c:199
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
-msgstr "argumento de %%(%s) não reconhecido: %s"
+msgstr "argumento %%(%s) desconhecido: %s"
 
 #: ref-filter.c:254
 #, fuzzy, c-format
 msgid "%%(objecttype) does not take arguments"
-msgstr "%%(subject) não leva argumentos"
+msgstr "%%(objecttype) leva argumentos nenhuns"
 
 #: ref-filter.c:276
 #, fuzzy, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
-msgstr "argumento de %%(objectname) não reconhecido: %s"
+msgstr "argumento %%(objectsize) desconhecido: %s"
 
 #: ref-filter.c:284
 #, fuzzy, c-format
 msgid "%%(deltabase) does not take arguments"
-msgstr "%%(trailers) não leva argumentos"
+msgstr "%%(deltabase) leva argumentos nenhuns"
 
 #: ref-filter.c:296
 #, c-format
 msgid "%%(body) does not take arguments"
-msgstr "%%(body) não leva argumentos"
+msgstr "%%(body) leva argumentos nenhuns"
 
 #: ref-filter.c:309
 #, fuzzy, c-format
 msgid "unrecognized %%(subject) argument: %s"
-msgstr "argumento de %%(objectname) não reconhecido: %s"
+msgstr "argumento %%(subject) desconhecido: %s"
 
 #: ref-filter.c:330
 #, fuzzy, c-format
 msgid "unknown %%(trailers) argument: %s"
-msgstr "argumento de mirror desconhecido: %s"
+msgstr "argumento %%(trailers) desconhecido: %s"
 
 #: ref-filter.c:363
 #, c-format
@@ -5957,7 +6095,7 @@
 #: ref-filter.c:365
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
-msgstr "argumento de %%(contents) não reconhecido: %s"
+msgstr "argumento %%(contents) desconhecido: %s"
 
 #: ref-filter.c:380
 #, fuzzy, c-format
@@ -5967,12 +6105,12 @@
 #: ref-filter.c:384
 #, fuzzy, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
-msgstr "argumento não reconhecido: %s"
+msgstr "argumento '%s' desconhecido em %%(%s)"
 
 #: ref-filter.c:398
 #, fuzzy, c-format
 msgid "unrecognized email option: %s"
-msgstr "posição não reconhecida:%s"
+msgstr "opção de email desconhecida: %s"
 
 #: ref-filter.c:428
 #, c-format
@@ -5982,17 +6120,17 @@
 #: ref-filter.c:440
 #, c-format
 msgid "unrecognized position:%s"
-msgstr "posição não reconhecida:%s"
+msgstr "posição desconhecida: %s"
 
 #: ref-filter.c:447
 #, c-format
 msgid "unrecognized width:%s"
-msgstr "largura não reconhecida:%s"
+msgstr "largura desconhecida: %s"
 
 #: ref-filter.c:456
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
-msgstr "argumento de %%(align) não reconhecido: %s"
+msgstr "argumento %%(align) desconhecido: %s"
 
 #: ref-filter.c:464
 #, c-format
@@ -6002,7 +6140,7 @@
 #: ref-filter.c:482
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
-msgstr "argumento de %%(if) não reconhecido: %s"
+msgstr "argumento %%(if) desconhecido: %s"
 
 #: ref-filter.c:584
 #, c-format
@@ -6065,152 +6203,151 @@
 msgid "malformed format string %s"
 msgstr "cadeia malformada %s"
 
-#: ref-filter.c:1541
+#: ref-filter.c:1549
 #, fuzzy, c-format
 msgid "no branch, rebasing %s"
-msgstr "(nenhum ramo, a efetuar rebase de %s)"
+msgstr "(ramo nenhum, rebaseando %s)"
 
-#: ref-filter.c:1544
+#: ref-filter.c:1552
 #, fuzzy, c-format
 msgid "no branch, rebasing detached HEAD %s"
-msgstr "(nenhum ramo, a efetuar rebase de %s)"
+msgstr "(ramo nenhum, rebaseando HEAD solta %s)"
 
-#: ref-filter.c:1547
+#: ref-filter.c:1555
 #, fuzzy, c-format
 msgid "no branch, bisect started on %s"
-msgstr "(nenhum ramo, bissecção iniciada em %s)"
+msgstr "(ramo nenhum, bisseção iniciada em %s)"
 
-#: ref-filter.c:1557
+#: ref-filter.c:1565
 #, fuzzy
 msgid "no branch"
-msgstr "(nenhum ramo)"
+msgstr "(ramo nenhum)"
 
-#: ref-filter.c:1591 ref-filter.c:1800
+#: ref-filter.c:1599 ref-filter.c:1808
 #, c-format
 msgid "missing object %s for %s"
 msgstr "falta o objeto %s de %s"
 
-#: ref-filter.c:1601
+#: ref-filter.c:1609
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "falha ao invocar parse_object_buffer sobre %s de %s"
 
-#: ref-filter.c:2054
+#: ref-filter.c:2062
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objeto malformado em '%s'"
 
-#: ref-filter.c:2143
+#: ref-filter.c:2151
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "a referência %s com nome danificado foi ignorada"
 
-#: ref-filter.c:2148 refs.c:657
+#: ref-filter.c:2156 refs.c:660
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "a referência %s danificada foi ignorada"
 
-#: ref-filter.c:2464
+#: ref-filter.c:2472
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "formato: falta átomo %%(end)"
 
-#: ref-filter.c:2563
+#: ref-filter.c:2571
 #, c-format
 msgid "malformed object name %s"
 msgstr "nome de objeto malformado %s"
 
-#: ref-filter.c:2568
+#: ref-filter.c:2576
 #, fuzzy, c-format
 msgid "option `%s' must point to a commit"
-msgstr "'%s' não aponta para um commit"
+msgstr "opção '%s' tem apontar para um commit"
 
 #: refs.c:264
 #, fuzzy, c-format
 msgid "%s does not point to a valid object!"
-msgstr "'%s' não aponta para um commit"
+msgstr "'%s' aponta para objeto válido nenhum!"
 
-#: refs.c:572
+#: refs.c:575
 #, fuzzy, c-format
 msgid "could not retrieve `%s`"
-msgstr "não foi possível remover '%s'"
+msgstr "incapaz recuperar '%s'"
 
-#: refs.c:579
+#: refs.c:582
 #, fuzzy, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "Nome de ramo inválido: '%s'"
 
-#: refs.c:655
+#: refs.c:658
 #, fuzzy, c-format
 msgid "ignoring dangling symref %s"
 msgstr "a referência %s danificada foi ignorada"
 
-#: refs.c:892
+#: refs.c:895
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr ""
 
-#: refs.c:898
+#: refs.c:901
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr ""
 
-#: refs.c:957
+#: refs.c:960
 #, c-format
 msgid "log for %s is empty"
 msgstr ""
 
-#: refs.c:1049
+#: refs.c:1052
 #, fuzzy, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "a referência %s com nome danificado foi ignorada"
 
-#: refs.c:1120
+#: refs.c:1123
 #, fuzzy, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "falha ao abrir '%s': %s"
 
-#: refs.c:1944
+#: refs.c:1947
 #, fuzzy, c-format
 msgid "multiple updates for ref '%s' not allowed"
-msgstr "nome de identificação vazio (de <%s>) não é permitido"
+msgstr "atualizações múltiplas para ref '%s' proíbidas"
 
-#: refs.c:2024
+#: refs.c:2027
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 
-#: refs.c:2035
+#: refs.c:2038
 msgid "ref updates aborted by hook"
 msgstr ""
 
-#: refs.c:2135 refs.c:2165
+#: refs.c:2138 refs.c:2168
 #, fuzzy, c-format
 msgid "'%s' exists; cannot create '%s'"
-msgstr "não é possível criar '%s'"
+msgstr "'%s' existe; incapaz criar '%s'"
 
-#: refs.c:2141 refs.c:2176
+#: refs.c:2144 refs.c:2179
 #, fuzzy, c-format
 msgid "cannot process '%s' and '%s' at the same time"
-msgstr ""
-"Não é possível atualizar os caminhos e mudar para o ramo '%s' ao mesmo tempo."
+msgstr "incapaz processar '%s' e '%s' ao mesmo tempo"
 
 #: refs/files-backend.c:1228
 #, c-format
 msgid "could not remove reference %s"
-msgstr "não foi possível eliminar a referência %s"
+msgstr "incapaz remover referência %s"
 
 #: refs/files-backend.c:1242 refs/packed-backend.c:1542
 #: refs/packed-backend.c:1552
 #, c-format
 msgid "could not delete reference %s: %s"
-msgstr "não foi possível eliminar a referência %s: %s"
+msgstr "incapaz apagar referência %s: %s"
 
 #: refs/files-backend.c:1245 refs/packed-backend.c:1555
 #, c-format
 msgid "could not delete references: %s"
-msgstr "não foi possível eliminar as referências: %s"
+msgstr "incapaz apagar referências: %s"
 
-#: refspec.c:167
+#: refspec.c:170
 #, fuzzy, c-format
 msgid "invalid refspec '%s'"
 msgstr "ficheiro inválido: '%s'"
@@ -6231,12 +6368,12 @@
 #: remote.c:590
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
-msgstr "Não é possível obter %s e %s ao mesmo tempo para %s"
+msgstr "Incapaz buscar ambos %s e %s para %s"
 
 #: remote.c:594
 #, c-format
 msgid "%s usually tracks %s, not %s"
-msgstr "%s geralmente segue %s, não %s"
+msgstr "%s geralmente segue %s, invés de %s"
 
 #: remote.c:598
 #, c-format
@@ -6256,7 +6393,7 @@
 #: remote.c:1073
 #, fuzzy, c-format
 msgid "src refspec %s does not match any"
-msgstr "%s: não tem correspondência no índice"
+msgstr "src refspec %s corresponde a nenhum"
 
 #: remote.c:1078
 #, c-format
@@ -6316,12 +6453,12 @@
 #: remote.c:1164
 #, fuzzy, c-format
 msgid "%s cannot be resolved to branch"
-msgstr "'%s' não pode ser usado ao mudar de ramo"
+msgstr "%s incapaz ser resolvido para ramo"
 
 #: remote.c:1175
 #, fuzzy, c-format
 msgid "unable to delete '%s': remote ref does not exist"
-msgstr "não é possível escrever o ficheiro '%s' com o modo %o"
+msgstr "incapaz apagar '%s': ref remoto é inexistente"
 
 #: remote.c:1187
 #, c-format
@@ -6333,99 +6470,94 @@
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 
-#: remote.c:1703 remote.c:1804
+#: remote.c:1714 remote.c:1815
 msgid "HEAD does not point to a branch"
-msgstr "HEAD não aponta para um ramo"
+msgstr "HEAD aponta para ramo nenhum"
 
-#: remote.c:1712
+#: remote.c:1723
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "ramo inexistente: '%s'"
 
-#: remote.c:1715
+#: remote.c:1726
 #, c-format
 msgid "no upstream configured for branch '%s'"
-msgstr "nenhum ramo a montante configurado para o ramo '%s'"
+msgstr "configurado upstream nenhum para ramo '%s'"
 
-#: remote.c:1721
+#: remote.c:1732
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
-msgstr ""
-"o ramo a montante '%s' não está guardado como um ramo de monitorização remoto"
+msgstr "incapaz gravar ramo upstream '%s' como ramo remote-tracking"
 
-#: remote.c:1736
+#: remote.c:1747
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
-msgstr ""
-"o destino de publicação '%s' no remoto '%s' não é seguido por nenhum ramo "
-"local"
+msgstr "destino de atirar '%s' em remoto '%s' tem ramo de tracking local nenhum"
 
-#: remote.c:1748
+#: remote.c:1759
 #, c-format
 msgid "branch '%s' has no remote for pushing"
-msgstr "o ramo '%s' não tem nenhum remoto para publicar"
+msgstr "ramo '%s' tem remoto para atirar nenhum"
 
-#: remote.c:1758
+#: remote.c:1769
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
-msgstr ""
-"'%2$s' não faz parte dos especificadores de referência de '%1$s' para "
-"publicação"
+msgstr "refspecs de atirar para '%s'incluí '%s' nenhum"
 
-#: remote.c:1771
+#: remote.c:1782
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "publicação sem destino (push.default é 'nothing')"
 
-#: remote.c:1793
+#: remote.c:1804
 msgid "cannot resolve 'simple' push to a single destination"
-msgstr "não é possível resolver a publicação 'simple' num único destino"
+msgstr "incapaz resolver atiranço 'simple' para destino único"
 
-#: remote.c:1922
+#: remote.c:1933
 #, fuzzy, c-format
 msgid "couldn't find remote ref %s"
-msgstr "Referência remota HEAD não encontrada"
+msgstr "incapaz encontrar ref remoto %s"
 
-#: remote.c:1935
+#: remote.c:1946
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr ""
 
-#: remote.c:2098
+#: remote.c:2109
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "A base do seu ramo é '%s', mas o ramo a montante desapareceu.\n"
 
-#: remote.c:2102
+#: remote.c:2113
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (use \"git branch --unset-upstream\" para corrigir)\n"
 
-#: remote.c:2105
+#: remote.c:2116
 #, fuzzy, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "O seu ramo está atualizado com '%s'.\n"
 
-#: remote.c:2109
+#: remote.c:2120
 #, fuzzy, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "O seu ramo está à frente de '%s' por %d commit.\n"
 
-#: remote.c:2112
+#: remote.c:2123
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr ""
 
-#: remote.c:2116
+#: remote.c:2127
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "O seu ramo está à frente de '%s' por %d commit.\n"
 msgstr[1] "O seu ramo está à frente de '%s' por %d commits.\n"
 
-#: remote.c:2122
+#: remote.c:2133
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (use \"git push\" para publicar os commits locais)\n"
 
-#: remote.c:2125
+#: remote.c:2136
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6437,11 +6569,11 @@
 "O seu ramo está atrás de '%s' por %d commits, podendo ser atualizado com "
 "avanço rápido.\n"
 
-#: remote.c:2133
+#: remote.c:2144
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (use \"git pull\" para atualizar o seu ramo local)\n"
 
-#: remote.c:2136
+#: remote.c:2147
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6456,14 +6588,14 @@
 "O seu ramo e '%s' divergiram,\n"
 "tendo cada um %d e %d commits diferentes, respetivamente.\n"
 
-#: remote.c:2146
+#: remote.c:2157
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (use \"git pull\" para integrar o ramo remoto no seu ramo)\n"
 
-#: remote.c:2337
+#: remote.c:2348
 #, fuzzy, c-format
 msgid "cannot parse expected object name '%s'"
-msgstr "não é possível ler o objeto %s: '%s'"
+msgstr "incapaz analisar nome de objeto esperado '%s'"
 
 #: replace-object.c:21
 #, fuzzy, c-format
@@ -6487,7 +6619,7 @@
 #: rerere.c:264 rerere.c:269
 #, fuzzy
 msgid "unable to write rerere record"
-msgstr "não é possível escrever o objeto de nota"
+msgstr "incapaz escrever registro rerere"
 
 #: rerere.c:495
 #, c-format
@@ -6502,7 +6634,7 @@
 #: rerere.c:503 rerere.c:1039
 #, fuzzy, c-format
 msgid "could not parse conflict hunks in '%s'"
-msgstr "não foi possível analisar o objeto '%s'"
+msgstr "incapaz analisar pedaços conflituosos em '%s'"
 
 #: rerere.c:684
 #, fuzzy, c-format
@@ -6532,18 +6664,18 @@
 #: rerere.c:803
 #, fuzzy, c-format
 msgid "cannot unlink stray '%s'"
-msgstr "não é possível criar a ligação simbólica '%s' '%s'"
+msgstr "incapaz deslinkar o perdido '%s'"
 
 #: rerere.c:807
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr ""
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1975
+#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
 #: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
 #, c-format
 msgid "could not create directory '%s'"
-msgstr "não foi possível criar o diretório '%s'"
+msgstr "incapaz criar pasta '%s'"
 
 #: rerere.c:1057
 #, fuzzy, c-format
@@ -6553,12 +6685,12 @@
 #: rerere.c:1068 rerere.c:1075
 #, fuzzy, c-format
 msgid "no remembered resolution for '%s'"
-msgstr "Não é possível adicionar os resultados da integração de '%s'"
+msgstr "a faltar a lembrança da solução para '%s'"
 
 #: rerere.c:1077
 #, fuzzy, c-format
 msgid "cannot unlink '%s'"
-msgstr "não é possível ler (readlink) '%s'"
+msgstr "incapaz de deslinkar '%s'"
 
 #: rerere.c:1087
 #, c-format
@@ -6568,90 +6700,90 @@
 #: rerere.c:1096
 #, fuzzy, c-format
 msgid "Forgot resolution for '%s'\n"
-msgstr "não foi possível resolver a referência %s"
+msgstr "Está esquecida resolução para '%s'\n"
 
 #: rerere.c:1199
 #, fuzzy
 msgid "unable to open rr-cache directory"
-msgstr "não é possível de obter o diretório de trabalho atual"
+msgstr "incapaz abrir pasta rr-cache"
 
 #: reset.c:42
 #, fuzzy
 msgid "could not determine HEAD revision"
-msgstr "não foi possível destacar HEAD"
+msgstr "incapaz determinar revisão de HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3426
+#: reset.c:70 reset.c:76 sequencer.c:3460
 #, fuzzy, c-format
 msgid "failed to find tree of %s"
 msgstr "Falha ao procurar árvore de %s."
 
-#: revision.c:2344
+#: revision.c:2336
 msgid "--unpacked=<packfile> no longer supported"
 msgstr ""
 
-#: revision.c:2364
+#: revision.c:2356
 #, fuzzy, c-format
 msgid "unknown value for --diff-merges: %s"
 msgstr "valor desconhecido '%s' da chave '%s'"
 
-#: revision.c:2702
+#: revision.c:2694
 msgid "your current branch appears to be broken"
 msgstr "o ramo atual parece estar danificado"
 
-#: revision.c:2705
+#: revision.c:2697
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
-msgstr "o ramo atual '%s' ainda não contém nenhum commit"
+msgstr "teu ramo atual '%s' ainda contém commits nenhuns"
 
-#: revision.c:2915
+#: revision.c:2907
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 
-#: run-command.c:763
+#: run-command.c:764
 msgid "open /dev/null failed"
 msgstr "falha ao abrir /dev/null"
 
-#: run-command.c:1270
+#: run-command.c:1271
 #, fuzzy, c-format
 msgid "cannot create async thread: %s"
 msgstr "não foi possível criar thread: %s"
 
-#: run-command.c:1334
+#: run-command.c:1335
 #, 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 ""
 
-#: send-pack.c:145
+#: send-pack.c:146
 #, fuzzy
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "não é possível analisar status de descompactação remota: %s"
 
-#: send-pack.c:147
+#: send-pack.c:148
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "não é possível analisar status de descompactação remota: %s"
 
-#: send-pack.c:149
+#: send-pack.c:150
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "descompactação remota falhou: %s"
 
-#: send-pack.c:372
+#: send-pack.c:374
 msgid "failed to sign the push certificate"
 msgstr "falha ao assinar o certificado de publicação"
 
-#: send-pack.c:460
+#: send-pack.c:467
 #, fuzzy
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "o recetor não suporta opções de publicação"
 
-#: send-pack.c:469
+#: send-pack.c:476
 msgid "the receiving end does not support --signed push"
 msgstr "o recetor não suporta publicação com --signed"
 
-#: send-pack.c:471
+#: send-pack.c:478
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -6659,48 +6791,48 @@
 "certificado de publicação não enviado uma vez que o recetor não suporta "
 "publicação com --signed"
 
-#: send-pack.c:483
+#: send-pack.c:490
 msgid "the receiving end does not support --atomic push"
 msgstr "o recetor não suporta publicação com --atomic"
 
-#: send-pack.c:488
+#: send-pack.c:495
 msgid "the receiving end does not support push options"
 msgstr "o recetor não suporta opções de publicação"
 
-#: sequencer.c:194
+#: sequencer.c:195
 #, fuzzy, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "Modo de limpeza inválido %s"
 
-#: sequencer.c:308
+#: sequencer.c:323
 #, fuzzy, c-format
 msgid "could not delete '%s'"
-msgstr "Não foi possível eliminar %s"
+msgstr "incapaz de apagar '%s'"
 
-#: sequencer.c:329 builtin/rebase.c:749 builtin/rebase.c:1590 builtin/rm.c:385
+#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
 #, c-format
 msgid "could not remove '%s'"
 msgstr "não foi possível remover '%s'"
 
-#: sequencer.c:339
+#: sequencer.c:353
 msgid "revert"
 msgstr "reverter"
 
-#: sequencer.c:341
+#: sequencer.c:355
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:343
+#: sequencer.c:357
 #, fuzzy
 msgid "rebase"
 msgstr "rebase -i"
 
-#: sequencer.c:345
+#: sequencer.c:359
 #, fuzzy, c-format
 msgid "unknown action: %d"
 msgstr "Ação desconhecida: %d"
 
-#: sequencer.c:404
+#: sequencer.c:418
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6708,7 +6840,7 @@
 "depois de resolver os conflitos, marque os caminhos corrigidos\n"
 "com 'git add <caminhos>' ou 'git rm <caminhos>'"
 
-#: sequencer.c:407
+#: sequencer.c:421
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6718,43 +6850,43 @@
 "com 'git add <caminhos>' ou 'git rm <caminhos>'\n"
 "e submeta o resultado com 'git commit'"
 
-#: sequencer.c:420 sequencer.c:3028
+#: sequencer.c:434 sequencer.c:3062
 #, c-format
 msgid "could not lock '%s'"
 msgstr "não foi possível bloquear '%s'"
 
-#: sequencer.c:422 sequencer.c:2827 sequencer.c:3032 sequencer.c:3046
-#: sequencer.c:3303 sequencer.c:5299 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
+#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "não foi possível escrever em '%s'"
 
-#: sequencer.c:427
+#: sequencer.c:441
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "não foi possível escrever fim de linha em '%s'"
 
-#: sequencer.c:432 sequencer.c:2832 sequencer.c:3034 sequencer.c:3048
-#: sequencer.c:3311
+#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
+#: sequencer.c:3345
 #, fuzzy, c-format
 msgid "failed to finalize '%s'"
 msgstr "falha ao finalizar '%s'."
 
-#: sequencer.c:471
+#: sequencer.c:485
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "as suas alterações locais serão substituídas ao %s."
 
-#: sequencer.c:475
+#: sequencer.c:489
 msgid "commit your changes or stash them to proceed."
 msgstr "submeta ou esconda as suas alterações para continuar."
 
-#: sequencer.c:507
+#: sequencer.c:521
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: avanço rápido"
 
-#: sequencer.c:546 builtin/tag.c:566
+#: sequencer.c:560 builtin/tag.c:566
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Modo de limpeza inválido %s"
@@ -6762,67 +6894,67 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:640
+#: sequencer.c:670
 #, c-format
 msgid "%s: Unable to write new index file"
-msgstr "%s: Não foi possível escrever novo ficheiro de índice"
+msgstr "%s: Incapaz de escrever novo ficheiro index"
 
-#: sequencer.c:657
+#: sequencer.c:687
 #, fuzzy
 msgid "unable to update cache tree"
-msgstr "não foi possível atualizar a árvore de cache\n"
+msgstr "não foi possível atualizar a árvore de cache"
 
-#: sequencer.c:671
+#: sequencer.c:701
 #, fuzzy
 msgid "could not resolve HEAD commit"
-msgstr "não foi possível resolver o commit HEAD\n"
+msgstr "não foi possível resolver o commit HEAD"
 
-#: sequencer.c:751
+#: sequencer.c:781
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr ""
 
-#: sequencer.c:762
+#: sequencer.c:792
 #, fuzzy, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "não é possível detetar automaticamente o nome (obteve-se '%s')"
 
-#: sequencer.c:799 wrapper.c:201 wrapper.c:371 builtin/am.c:724
-#: builtin/am.c:816 builtin/merge.c:1121 builtin/rebase.c:902
+#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
+#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "não foi possível abrir '%s' para leitura"
 
-#: sequencer.c:809
+#: sequencer.c:839
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr ""
 
-#: sequencer.c:814
+#: sequencer.c:844
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr ""
 
-#: sequencer.c:819
+#: sequencer.c:849
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr ""
 
-#: sequencer.c:823
+#: sequencer.c:853
 #, fuzzy, c-format
 msgid "unknown variable '%s'"
 msgstr "Formato de arquivo desconhecido '%s'"
 
-#: sequencer.c:828
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr ""
 
-#: sequencer.c:830
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr ""
 
-#: sequencer.c:832
+#: sequencer.c:862
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr ""
 
-#: sequencer.c:897
+#: sequencer.c:927
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6851,11 +6983,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1178
+#: sequencer.c:1208
 msgid "'prepare-commit-msg' hook failed"
 msgstr ""
 
-#: sequencer.c:1184
+#: sequencer.c:1214
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6881,7 +7013,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1197
+#: sequencer.c:1227
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6905,365 +7037,365 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1239
+#: sequencer.c:1269
 msgid "couldn't look up newly created commit"
 msgstr "não foi possível consultar o commit recém-criado"
 
-#: sequencer.c:1241
+#: sequencer.c:1271
 msgid "could not parse newly created commit"
 msgstr "não foi possível analisar o commit recém-criado"
 
-#: sequencer.c:1287
+#: sequencer.c:1317
 #, fuzzy
 msgid "unable to resolve HEAD after creating commit"
-msgstr "não foi possível resolver o commit HEAD\n"
+msgstr "não foi possível resolver o commit HEAD"
 
-#: sequencer.c:1289
+#: sequencer.c:1319
 msgid "detached HEAD"
 msgstr "HEAD destacada"
 
-#: sequencer.c:1293
+#: sequencer.c:1323
 msgid " (root-commit)"
 msgstr " (commit-raiz)"
 
-#: sequencer.c:1314
+#: sequencer.c:1344
 #, fuzzy
 msgid "could not parse HEAD"
 msgstr "não foi possível ler HEAD"
 
-#: sequencer.c:1316
+#: sequencer.c:1346
 #, fuzzy, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "%s %s não é um commit!"
 
-#: sequencer.c:1320 sequencer.c:1395 builtin/commit.c:1577
+#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
 msgid "could not parse HEAD commit"
 msgstr "não foi possível analisar o commit HEAD"
 
-#: sequencer.c:1373 sequencer.c:2067
+#: sequencer.c:1403 sequencer.c:2100
 #, fuzzy
 msgid "unable to parse commit author"
 msgstr "não foi possível analisar o commit %s"
 
-#: sequencer.c:1384 builtin/am.c:1580 builtin/merge.c:692
+#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree falhou ao escrever uma árvore"
 
-#: sequencer.c:1417 sequencer.c:1535
+#: sequencer.c:1447 sequencer.c:1565
 #, fuzzy, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "não foi possível ler a mensagem de commit de %s"
 
-#: sequencer.c:1446 sequencer.c:1478
+#: sequencer.c:1476 sequencer.c:1508
 #, fuzzy, c-format
 msgid "invalid author identity '%s'"
 msgstr "caminho inválido '%s'"
 
-#: sequencer.c:1452
+#: sequencer.c:1482
 msgid "corrupt author: missing date information"
 msgstr ""
 
-#: sequencer.c:1491 builtin/am.c:1606 builtin/commit.c:1678 builtin/merge.c:890
-#: builtin/merge.c:915
+#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
+#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "falha ao escrever objeto de commit"
 
-#: sequencer.c:1518 sequencer.c:4237
+#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "não foi possível atualizar %s"
 
-#: sequencer.c:1567
+#: sequencer.c:1597
 #, fuzzy, c-format
 msgid "could not parse commit %s"
 msgstr "não foi possível analisar o commit %s\n"
 
-#: sequencer.c:1572
+#: sequencer.c:1602
 #, fuzzy, c-format
 msgid "could not parse parent commit %s"
 msgstr "não foi possível analisar o commit pai %s\n"
 
-#: sequencer.c:1655 sequencer.c:1766
+#: sequencer.c:1685 sequencer.c:1796
 #, c-format
 msgid "unknown command: %d"
 msgstr "comando desconhecido: %d"
 
-#: sequencer.c:1713 sequencer.c:1738
+#: sequencer.c:1743 sequencer.c:1768
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Isto é a combinação de %d commits."
 
-#: sequencer.c:1723
+#: sequencer.c:1753
 msgid "need a HEAD to fixup"
 msgstr "necessária uma HEAD para fixup"
 
-#: sequencer.c:1725 sequencer.c:3338
+#: sequencer.c:1755 sequencer.c:3372
 msgid "could not read HEAD"
 msgstr "não foi possível ler HEAD"
 
-#: sequencer.c:1727
+#: sequencer.c:1757
 msgid "could not read HEAD's commit message"
 msgstr "não foi possível ler a mensagem de commit de HEAD"
 
-#: sequencer.c:1733
+#: sequencer.c:1763
 #, c-format
 msgid "cannot write '%s'"
 msgstr "não é possível escrever '%s'"
 
-#: sequencer.c:1740 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Esta é a 1ª mensagem de commit:"
 
-#: sequencer.c:1748
+#: sequencer.c:1778
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "não foi possível ler a mensagem de commit de %s"
 
-#: sequencer.c:1755
+#: sequencer.c:1785
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Esta é a mensagem de commit nº%d:"
 
-#: sequencer.c:1761
+#: sequencer.c:1791
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "A mensagem de commit #%d será ignorada:"
 
-#: sequencer.c:1849
+#: sequencer.c:1879
 msgid "your index file is unmerged."
 msgstr "ficheiro de índice não integrado."
 
-#: sequencer.c:1856
+#: sequencer.c:1886
 #, fuzzy
 msgid "cannot fixup root commit"
 msgstr "não é possível encontrar o commit %s (%s)"
 
-#: sequencer.c:1875
+#: sequencer.c:1905
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "o commit %s é uma integração mas não foi fornecida a opção -m."
 
-#: sequencer.c:1883 sequencer.c:1891
+#: sequencer.c:1913 sequencer.c:1921
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "o commit %s não tem o pai %d"
 
-#: sequencer.c:1897
+#: sequencer.c:1927
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "não é possível obter a mensagem de commit de %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1916
+#: sequencer.c:1946
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: não foi possível analisar o commit pai %s"
 
-#: sequencer.c:1981
+#: sequencer.c:2011
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "não foi possível mudar o nome de '%s' para '%s'"
 
-#: sequencer.c:2038
+#: sequencer.c:2071
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "não foi possível reverter %s... %s"
 
-#: sequencer.c:2039
+#: sequencer.c:2072
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "não foi possível aplicar %s... %s"
 
-#: sequencer.c:2059
+#: sequencer.c:2092
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr ""
 
-#: sequencer.c:2117
+#: sequencer.c:2150
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: falha ao ler o índice"
 
-#: sequencer.c:2124
+#: sequencer.c:2157
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: falha ao atualizar o índice"
 
-#: sequencer.c:2201
+#: sequencer.c:2234
 #, fuzzy, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%%(body) não leva argumentos"
 
-#: sequencer.c:2210
+#: sequencer.c:2243
 #, fuzzy, c-format
 msgid "missing arguments for %s"
 msgstr "falta o objeto %s de %s"
 
-#: sequencer.c:2241
+#: sequencer.c:2274
 #, fuzzy, c-format
 msgid "could not parse '%s'"
 msgstr "não foi possível analisar %s"
 
-#: sequencer.c:2302
+#: sequencer.c:2335
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "linha %d inválida: %.*s"
 
-#: sequencer.c:2313
+#: sequencer.c:2346
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "não é possível efetuar '%s' sem um commit anterior"
 
-#: sequencer.c:2399
+#: sequencer.c:2432
 #, fuzzy
 msgid "cancelling a cherry picking in progress"
-msgstr "nenhum cherry-pick ou revert em curso"
+msgstr "cancelando um cherry picking em curso"
 
-#: sequencer.c:2408
+#: sequencer.c:2441
 #, fuzzy
 msgid "cancelling a revert in progress"
-msgstr "nenhum cherry-pick ou revert em curso"
+msgstr "cancelando uma reversão em curso"
 
-#: sequencer.c:2452
+#: sequencer.c:2485
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "corrija-o usando 'git rebase --edit-todo'."
 
-#: sequencer.c:2454
+#: sequencer.c:2487
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "folha de instruções inutilizável: '%s'"
 
-#: sequencer.c:2459
+#: sequencer.c:2492
 msgid "no commits parsed."
-msgstr "nenhum commit analisado."
+msgstr "commits nenhuns analisados."
 
-#: sequencer.c:2470
+#: sequencer.c:2503
 msgid "cannot cherry-pick during a revert."
 msgstr "não é possível efetuar cherry-pick durante uma reversão."
 
-#: sequencer.c:2472
+#: sequencer.c:2505
 msgid "cannot revert during a cherry-pick."
 msgstr "não é possível reverter durante um cherry-pick."
 
-#: sequencer.c:2550
+#: sequencer.c:2583
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "valor inválido de %s: %s"
 
-#: sequencer.c:2657
+#: sequencer.c:2690
 msgid "unusable squash-onto"
 msgstr ""
 
-#: sequencer.c:2677
+#: sequencer.c:2710
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "folha de opções malformada: '%s'"
 
-#: sequencer.c:2769 sequencer.c:4609
+#: sequencer.c:2803 sequencer.c:4636
 msgid "empty commit set passed"
 msgstr "o conjunto de commits especificado está vazio"
 
-#: sequencer.c:2786
+#: sequencer.c:2820
 #, fuzzy
 msgid "revert is already in progress"
 msgstr "cherry-pick ou revert em curso"
 
-#: sequencer.c:2788
+#: sequencer.c:2822
 #, fuzzy, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "tente \"git cherry-pick (--continue | --quit |--abort)\""
 
-#: sequencer.c:2791
+#: sequencer.c:2825
 #, fuzzy
 msgid "cherry-pick is already in progress"
 msgstr "cherry-pick ou revert em curso"
 
-#: sequencer.c:2793
+#: sequencer.c:2827
 #, fuzzy, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "tente \"git cherry-pick (--continue | --quit |--abort)\""
 
-#: sequencer.c:2807
+#: sequencer.c:2841
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "não foi possível criar o diretório do sequenciador '%s'"
 
-#: sequencer.c:2822
+#: sequencer.c:2856
 msgid "could not lock HEAD"
 msgstr "não foi possível bloquear HEAD"
 
-#: sequencer.c:2882 sequencer.c:4325
+#: sequencer.c:2916 sequencer.c:4371
 msgid "no cherry-pick or revert in progress"
-msgstr "nenhum cherry-pick ou revert em curso"
+msgstr "sem cherry-pick ou revert em curso"
 
-#: sequencer.c:2884 sequencer.c:2895
+#: sequencer.c:2918 sequencer.c:2929
 msgid "cannot resolve HEAD"
 msgstr "não é possível resolver HEAD"
 
-#: sequencer.c:2886 sequencer.c:2930
+#: sequencer.c:2920 sequencer.c:2964
 msgid "cannot abort from a branch yet to be born"
 msgstr "não é possível abortar um ramo ainda não criado"
 
-#: sequencer.c:2916 builtin/grep.c:745
+#: sequencer.c:2950 builtin/grep.c:756
 #, c-format
 msgid "cannot open '%s'"
 msgstr "não é possível abrir '%s'"
 
-#: sequencer.c:2918
+#: sequencer.c:2952
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "não é possível ler '%s': %s"
 
-#: sequencer.c:2919
+#: sequencer.c:2953
 msgid "unexpected end of file"
 msgstr "fim de ficheiro inesperado"
 
-#: sequencer.c:2925
+#: sequencer.c:2959
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "o ficheiro HEAD de pre-cherry-pick '%s' está corrompido"
 
-#: sequencer.c:2936
+#: sequencer.c:2970
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
-msgstr "Parece que a HEAD se moveu. Não recuando, verifique a HEAD."
+msgstr "Parece que moveste a HEAD. Recusando rebobinar, verifique a tua HEAD!"
 
-#: sequencer.c:2977
+#: sequencer.c:3011
 #, fuzzy
 msgid "no revert in progress"
 msgstr "Rebase não está em curso?"
 
-#: sequencer.c:2986
+#: sequencer.c:3020
 #, fuzzy
 msgid "no cherry-pick in progress"
-msgstr "nenhum cherry-pick ou revert em curso"
+msgstr "cherry-pick nenhum em curso"
 
-#: sequencer.c:2996
+#: sequencer.c:3030
 #, fuzzy
 msgid "failed to skip the commit"
 msgstr "falha ao escrever objeto de commit"
 
-#: sequencer.c:3003
+#: sequencer.c:3037
 msgid "there is nothing to skip"
 msgstr ""
 
-#: sequencer.c:3006
+#: sequencer.c:3040
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
 msgstr ""
 
-#: sequencer.c:3168 sequencer.c:4217
+#: sequencer.c:3202 sequencer.c:4263
 msgid "cannot read HEAD"
 msgstr "não é possível ler HEAD"
 
-#: sequencer.c:3185
+#: sequencer.c:3219
 #, fuzzy, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "não foi possível copiar '%s' para '%s'"
 
-#: sequencer.c:3193
+#: sequencer.c:3227
 #, fuzzy, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7276,33 +7408,33 @@
 msgstr ""
 "Pode emendar o commit agora, com\n"
 "\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
+"  git commit --amend %s\n"
 "\n"
 "Assim que estiver satisfeito com as alterações, execute\n"
 "\n"
-"\tgit rebase --continue"
+"  git rebase --continue\n"
 
-#: sequencer.c:3203
+#: sequencer.c:3237
 #, fuzzy, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "não foi possível aplicar %s... %s"
 
-#: sequencer.c:3210
+#: sequencer.c:3244
 #, fuzzy, c-format
 msgid "Could not merge %.*s"
-msgstr "Não foi possível ler %s."
+msgstr "Incapaz de juntar %.*s"
 
-#: sequencer.c:3224 sequencer.c:3228 builtin/difftool.c:641
+#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "não foi possível copiar '%s' para '%s'"
 
-#: sequencer.c:3240
+#: sequencer.c:3274
 #, fuzzy, c-format
 msgid "Executing: %s\n"
-msgstr "A executar: $rest"
+msgstr "A executar: %s\n"
 
-#: sequencer.c:3255
+#: sequencer.c:3289
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7317,11 +7449,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3261
+#: sequencer.c:3295
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "e fez alterações ao índice e/ou à árvore de trabalho\n"
 
-#: sequencer.c:3267
+#: sequencer.c:3301
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7338,136 +7470,128 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3328
+#: sequencer.c:3362
 #, fuzzy, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nome de ficheiro malformado: %.*s"
 
-#: sequencer.c:3382
+#: sequencer.c:3416
 #, fuzzy
 msgid "writing fake root commit"
-msgstr "não há nada para submeter\n"
+msgstr "escrevendo commit de raíz falso"
 
-#: sequencer.c:3387
+#: sequencer.c:3421
 msgid "writing squash-onto"
 msgstr ""
 
-#: sequencer.c:3471
+#: sequencer.c:3505
 #, fuzzy, c-format
 msgid "could not resolve '%s'"
 msgstr "não foi possível remover '%s'"
 
-#: sequencer.c:3502
+#: sequencer.c:3538
 #, fuzzy
 msgid "cannot merge without a current revision"
 msgstr "não é possível efetuar '%s' sem um commit anterior"
 
-#: sequencer.c:3524
+#: sequencer.c:3560
 #, fuzzy, c-format
 msgid "unable to parse '%.*s'"
 msgstr "não foi possível criar '%s'"
 
-#: sequencer.c:3533
+#: sequencer.c:3569
 #, fuzzy, c-format
 msgid "nothing to merge: '%.*s'"
-msgstr "ignorado não integrado: %s\n"
+msgstr "ignorado não integrado: '%.*s'"
 
-#: sequencer.c:3545
+#: sequencer.c:3581
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 
-#: sequencer.c:3561
+#: sequencer.c:3597
 #, fuzzy, c-format
 msgid "could not get commit message of '%s'"
 msgstr "não foi possível ler a mensagem de commit de %s"
 
-#: sequencer.c:3730
+#: sequencer.c:3780
 #, fuzzy, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "não foi possível validar a tag '%s'"
 
-#: sequencer.c:3746
+#: sequencer.c:3796
 #, fuzzy
 msgid "merge: Unable to write new index file"
-msgstr "%s: Não foi possível escrever novo ficheiro de índice"
+msgstr "merge: Incapaz de escrever novo ficheiro index"
 
-#: sequencer.c:3820
+#: sequencer.c:3870
 msgid "Cannot autostash"
-msgstr "Não é possível empilhar automaticamente (autostash)"
+msgstr "Incapaz de arrumar automaticamente (autostash)"
 
-#: sequencer.c:3823
+#: sequencer.c:3873
 #, fuzzy, c-format
 msgid "Unexpected stash response: '%s'"
-msgstr ""
-"1ª linha inesperada da mensagem de squash:\n"
-"\n"
-"\t%.*s"
+msgstr "Resposta de squash inexperada: '%s'"
 
-#: sequencer.c:3829
+#: sequencer.c:3879
 #, fuzzy, c-format
 msgid "Could not create directory for '%s'"
-msgstr "Não foi possível criar o diretório '%s'"
+msgstr "Incapaz de criar a pasta para '%s'"
 
-#: sequencer.c:3832
+#: sequencer.c:3882
 #, fuzzy, c-format
 msgid "Created autostash: %s\n"
-msgstr "Pilha automática (autostash) criada: $stash_abbrev"
+msgstr "Criado autostash: %s\n"
 
-#: sequencer.c:3836
+#: sequencer.c:3886
 #, fuzzy
 msgid "could not reset --hard"
 msgstr "não foi possível ler orig-head"
 
-#: sequencer.c:3861
+#: sequencer.c:3911
 #, fuzzy, c-format
 msgid "Applied autostash.\n"
-msgstr "Pilha automática (autostash) aplicada."
+msgstr "Autostash aplicado.\n"
 
-#: sequencer.c:3873
+#: sequencer.c:3923
 #, c-format
 msgid "cannot store %s"
 msgstr "não é possível guardar %s"
 
-#: sequencer.c:3876
+#: sequencer.c:3926
 #, fuzzy, c-format
 msgid ""
 "%s\n"
 "Your changes are safe in the stash.\n"
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
-"Surgiram conflitos ao aplicar a pilha automática (autostash).\n"
+"%s\n"
 "As suas alterações estão guardadas na pilha.\n"
 "Pode executar \"git stash pop\" ou \"git stash drop\" oportunamente.\n"
 
-#: sequencer.c:3881
+#: sequencer.c:3931
 #, fuzzy
 msgid "Applying autostash resulted in conflicts."
-msgstr "Patch aplicado a '%s' com conflitos.\n"
+msgstr "Patch aplicado a '%s' com conflitos."
 
-#: sequencer.c:3882
+#: sequencer.c:3932
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 
-#: sequencer.c:3974
-#, fuzzy, c-format
-msgid "%s: not a valid OID"
-msgstr "'%s' não é uma referência válida."
-
-#: sequencer.c:3979 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "não foi possível destacar HEAD"
 
-#: sequencer.c:3994
+#: sequencer.c:4040
 #, fuzzy, c-format
 msgid "Stopped at HEAD\n"
-msgstr "Parou a %s...  %.*s\n"
+msgstr "Parou no HEAD\n"
 
-#: sequencer.c:3996
+#: sequencer.c:4042
 #, fuzzy, c-format
 msgid "Stopped at %s\n"
 msgstr "Parou a %s...  %.*s\n"
 
-#: sequencer.c:4004
+#: sequencer.c:4050
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7480,58 +7604,58 @@
 "    git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:4050
+#: sequencer.c:4096
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr ""
 
-#: sequencer.c:4095
+#: sequencer.c:4141
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
-msgstr "Parou a %s...  %.*s\n"
+msgstr "Parou no %s...  %.*s\n"
 
-#: sequencer.c:4166
+#: sequencer.c:4212
 #, c-format
 msgid "unknown command %d"
 msgstr "comando desconhecido %d"
 
-#: sequencer.c:4225
+#: sequencer.c:4271
 msgid "could not read orig-head"
 msgstr "não foi possível ler orig-head"
 
-#: sequencer.c:4230
+#: sequencer.c:4276
 msgid "could not read 'onto'"
 msgstr "não foi possível ler 'onto'"
 
-#: sequencer.c:4244
+#: sequencer.c:4290
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "não foi possível atualizar HEAD para %s"
 
-#: sequencer.c:4304
+#: sequencer.c:4350
 #, fuzzy, c-format
 msgid "Successfully rebased and updated %s.\n"
-msgstr "$head_name rebaseado e atualizado com sucesso."
+msgstr "O %s foi rebaseado e atualizado com sucesso.\n"
 
-#: sequencer.c:4337
+#: sequencer.c:4383
 msgid "cannot rebase: You have unstaged changes."
 msgstr "não é possível rebasear: tem alterações não preparadas."
 
-#: sequencer.c:4346
+#: sequencer.c:4392
 msgid "cannot amend non-existing commit"
 msgstr "não é possível emendar commit não-existente"
 
-#: sequencer.c:4348
+#: sequencer.c:4394
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "ficheiro inválido: '%s'"
 
-#: sequencer.c:4350
+#: sequencer.c:4396
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "conteúdo inválido: '%s'"
 
-#: sequencer.c:4353
+#: sequencer.c:4399
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7541,57 +7665,52 @@
 "Tem alterações por submeter na árvore de trabalho. Submeta-as primeiro\n"
 "e execute 'git rebase --continue' de novo."
 
-#: sequencer.c:4389 sequencer.c:4428
+#: sequencer.c:4435 sequencer.c:4474
 #, fuzzy, c-format
 msgid "could not write file: '%s'"
 msgstr "não foi possível criar o ficheiro '%s'"
 
-#: sequencer.c:4444
+#: sequencer.c:4490
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "não foi possível remover CHERRY_PICK_HEAD"
 
-#: sequencer.c:4451
+#: sequencer.c:4497
 msgid "could not commit staged changes."
 msgstr "não foi possível submeter as alterações preparadas."
 
-#: sequencer.c:4477
-#, fuzzy, c-format
-msgid "invalid committer '%s'"
-msgstr "commit inválido %s"
-
-#: sequencer.c:4586
+#: sequencer.c:4613
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: não é possível efetuar cherry-pick de %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4617
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisão incorreta"
 
-#: sequencer.c:4625
+#: sequencer.c:4652
 msgid "can't revert as initial commit"
 msgstr "não é possível reverter como commit inicial"
 
-#: sequencer.c:5102
+#: sequencer.c:5129
 msgid "make_script: unhandled options"
 msgstr ""
 
-#: sequencer.c:5105
+#: sequencer.c:5132
 msgid "make_script: error preparing revisions"
 msgstr ""
 
-#: sequencer.c:5347 sequencer.c:5364
+#: sequencer.c:5374 sequencer.c:5391
 #, fuzzy
 msgid "nothing to do"
-msgstr "não há nada para submeter\n"
+msgstr "nada a fazer"
 
-#: sequencer.c:5383
+#: sequencer.c:5410
 #, fuzzy
 msgid "could not skip unnecessary pick commands"
-msgstr "Não foi possível saltar comandos pick desnecessários"
+msgstr "incapaz de saltar comandos pick desnecessários"
 
-#: sequencer.c:5480
+#: sequencer.c:5504
 msgid "the script was already rearranged."
 msgstr ""
 
@@ -7606,9 +7725,9 @@
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
-"%s: não há tal caminho na árvore de trabalho.\n"
-"Use 'git <comando> -- <caminho>...' para especificar caminhos que não "
-"existem localmente."
+"%s: sem tal path na working tree.\n"
+"Use 'git <comando> -- <path>...' para especificar caminhos inexistentes "
+"localmente."
 
 #: setup.c:198
 #, c-format
@@ -7684,12 +7803,12 @@
 #: setup.c:708
 #, fuzzy, c-format
 msgid "no path in gitfile: %s"
-msgstr "Não é possível abrir o ficheiro de patch %s"
+msgstr "gitfile sem path: %s"
 
 #: setup.c:710
 #, fuzzy, c-format
 msgid "not a git repository: %s"
-msgstr "Não é um repositório git"
+msgstr "é repositório git nenhum: %s"
 
 #: setup.c:812
 #, c-format
@@ -7699,7 +7818,7 @@
 #: setup.c:826
 #, fuzzy, c-format
 msgid "not a git repository: '%s'"
-msgstr "Não é um repositório git"
+msgstr "é repositório git nenhum: '%s'"
 
 #: setup.c:855 setup.c:857 setup.c:888
 #, fuzzy, c-format
@@ -7709,7 +7828,7 @@
 #: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
 #, fuzzy
 msgid "cannot come back to cwd"
-msgstr "Não é possível voltar ao diretório de trabalho atual"
+msgstr "incapaz de voltar para cwd"
 
 #: setup.c:987
 #, fuzzy, c-format
@@ -7718,7 +7837,7 @@
 
 #: setup.c:1225
 msgid "Unable to read current working directory"
-msgstr "Não é possível ler o diretório de trabalho atual"
+msgstr "Incapaz de ler pasta atual de trabalho"
 
 #: setup.c:1234 setup.c:1240
 #, fuzzy, c-format
@@ -7728,7 +7847,7 @@
 #: setup.c:1245
 #, fuzzy, c-format
 msgid "not a git repository (or any of the parent directories): %s"
-msgstr "Não é um repositório git (ou um dos diretórios pai): %s"
+msgstr "é repositório git nenhum (ou em pastas parente nenhuma): %s"
 
 #: setup.c:1251
 #, fuzzy, c-format
@@ -7736,9 +7855,9 @@
 "not a git repository (or any parent up to mount point %s)\n"
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
-"Não é um repositório git (ou um diretório pai até ao ponto de montagem %s)\n"
-"Interrompido no limite do sistema de ficheiros "
-"(GIT_DISCOVERY_ACROSS_FILESYSTEM não definido)."
+"é repositório git nenhum (ou em pai nenhum até ao ponto de montagem %s)\n"
+"Parando na fronteira do sistema de ficheiros (GIT_DISCOVERY_ACROSS_FILESYSTEM "
+"indefinido)."
 
 #: setup.c:1362
 #, fuzzy, c-format
@@ -7764,269 +7883,269 @@
 msgid "setsid failed"
 msgstr "falha ao executar o comando stash"
 
-#: sha1-file.c:470
+#: sha1-file.c:480
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 
-#: sha1-file.c:521
+#: sha1-file.c:531
 #, fuzzy, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "não foi possível analisar o objeto: %s"
 
-#: sha1-file.c:593
+#: sha1-file.c:603
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 
-#: sha1-file.c:600
+#: sha1-file.c:610
 #, fuzzy, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "não foi possível analisar o objeto: %s"
 
-#: sha1-file.c:643
+#: sha1-file.c:653
 #, fuzzy
 msgid "unable to fdopen alternates lockfile"
 msgstr "não foi possível escrever os parâmetros no ficheiro de configuração"
 
-#: sha1-file.c:661
+#: sha1-file.c:671
 #, fuzzy
 msgid "unable to read alternates file"
 msgstr "não foi possível ler o ficheiro de índice"
 
-#: sha1-file.c:668
+#: sha1-file.c:678
 #, fuzzy
 msgid "unable to move new alternates file into place"
 msgstr "não foi possível escrever novo ficheiro de índice"
 
-#: sha1-file.c:703
+#: sha1-file.c:713
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "o caminho '%s' não existe"
 
-#: sha1-file.c:724
+#: sha1-file.c:734
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "ainda não é suportada a funcionalidade que permite ter o repositório de "
 "referência '%s' como uma extração ligada."
 
-#: sha1-file.c:730
+#: sha1-file.c:740
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "o repositório de referência '%s' não é um repositório local."
 
-#: sha1-file.c:736
+#: sha1-file.c:746
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "o repositório de referência '%s' é raso"
 
-#: sha1-file.c:744
+#: sha1-file.c:754
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "o repositório de referência '%s' está enxertado"
 
-#: sha1-file.c:804
+#: sha1-file.c:814
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 
-#: sha1-file.c:954
+#: sha1-file.c:964
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 
-#: sha1-file.c:975
+#: sha1-file.c:985
 #, fuzzy
 msgid "mmap failed"
 msgstr "%s falhou"
 
-#: sha1-file.c:1139
+#: sha1-file.c:1149
 #, fuzzy, c-format
 msgid "object file %s is empty"
 msgstr "objeto local %s corrompido"
 
-#: sha1-file.c:1274 sha1-file.c:2467
+#: sha1-file.c:1284 sha1-file.c:2477
 #, fuzzy, c-format
 msgid "corrupt loose object '%s'"
 msgstr "não foi possível analisar o objeto '%s'"
 
-#: sha1-file.c:1276 sha1-file.c:2471
+#: sha1-file.c:1286 sha1-file.c:2481
 #, fuzzy, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "não foi possível analisar o objeto: %s"
 
-#: sha1-file.c:1318
+#: sha1-file.c:1328
 #, fuzzy
 msgid "invalid object type"
 msgstr "tipo de objeto incorreto."
 
-#: sha1-file.c:1402
+#: sha1-file.c:1412
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr ""
 
-#: sha1-file.c:1405
+#: sha1-file.c:1415
 #, fuzzy, c-format
 msgid "unable to unpack %s header"
 msgstr "não foi possível atualizar %s"
 
-#: sha1-file.c:1411
+#: sha1-file.c:1421
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr ""
 
-#: sha1-file.c:1414
+#: sha1-file.c:1424
 #, fuzzy, c-format
 msgid "unable to parse %s header"
 msgstr "não foi possível atualizar %s"
 
-#: sha1-file.c:1641
+#: sha1-file.c:1651
 #, fuzzy, c-format
 msgid "failed to read object %s"
 msgstr "falha ao ler o objeto '%s'."
 
-#: sha1-file.c:1645
+#: sha1-file.c:1655
 #, fuzzy, c-format
 msgid "replacement %s not found for %s"
 msgstr "modelos não encontrados em %s"
 
-#: sha1-file.c:1649
+#: sha1-file.c:1659
 #, fuzzy, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "objeto local %s corrompido"
 
-#: sha1-file.c:1653
+#: sha1-file.c:1663
 #, fuzzy, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "objeto local %s corrompido"
 
-#: sha1-file.c:1758
+#: sha1-file.c:1768
 #, fuzzy, c-format
 msgid "unable to write file %s"
 msgstr "não foi possível escrever %s"
 
-#: sha1-file.c:1765
+#: sha1-file.c:1775
 #, fuzzy, c-format
 msgid "unable to set permission to '%s'"
 msgstr "não foi possível resolver revisão: %s"
 
-#: sha1-file.c:1772
+#: sha1-file.c:1782
 #, fuzzy
 msgid "file write error"
 msgstr "falha ao escrever para rev-list"
 
-#: sha1-file.c:1792
+#: sha1-file.c:1802
 #, fuzzy
 msgid "error when closing loose object file"
 msgstr "erro ao fechar ficheiro de pacote"
 
-#: sha1-file.c:1857
+#: sha1-file.c:1867
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 
-#: sha1-file.c:1859
+#: sha1-file.c:1869
 #, fuzzy
 msgid "unable to create temporary file"
 msgstr "não foi possível criar índice temporário"
 
-#: sha1-file.c:1883
+#: sha1-file.c:1893
 #, fuzzy
 msgid "unable to write loose object file"
 msgstr "não é possível escrever o objeto de nota"
 
-#: sha1-file.c:1889
+#: sha1-file.c:1899
 #, fuzzy, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "não é possível compactar objeto acrescentado (%d)"
 
-#: sha1-file.c:1893
+#: sha1-file.c:1903
 #, fuzzy, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "falha de fstat de %s"
 
-#: sha1-file.c:1897
+#: sha1-file.c:1907
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr ""
 
-#: sha1-file.c:1907 builtin/pack-objects.c:1086
+#: sha1-file.c:1917 builtin/pack-objects.c:1086
 #, fuzzy, c-format
 msgid "failed utime() on %s"
 msgstr "falha ao abrir '%s'"
 
-#: sha1-file.c:1984
+#: sha1-file.c:1994
 #, fuzzy, c-format
 msgid "cannot read object for %s"
 msgstr "não foi possível ler o objeto %s"
 
-#: sha1-file.c:2035
+#: sha1-file.c:2045
 #, fuzzy
 msgid "corrupt commit"
 msgstr "substituir autor do commit"
 
-#: sha1-file.c:2043
+#: sha1-file.c:2053
 #, fuzzy
 msgid "corrupt tag"
 msgstr "mostrar tags"
 
-#: sha1-file.c:2143
+#: sha1-file.c:2153
 #, c-format
 msgid "read error while indexing %s"
 msgstr ""
 
-#: sha1-file.c:2146
+#: sha1-file.c:2156
 #, fuzzy, c-format
 msgid "short read while indexing %s"
 msgstr "não é possível ler o índice"
 
-#: sha1-file.c:2219 sha1-file.c:2229
+#: sha1-file.c:2229 sha1-file.c:2239
 #, fuzzy, c-format
 msgid "%s: failed to insert into database"
 msgstr "gpg não assinou os dados"
 
-#: sha1-file.c:2235
+#: sha1-file.c:2245
 #, fuzzy, c-format
 msgid "%s: unsupported file type"
 msgstr "versão de índice %s não suportada"
 
-#: sha1-file.c:2259
+#: sha1-file.c:2269
 #, fuzzy, c-format
 msgid "%s is not a valid object"
 msgstr "%s não é um objeto '%s' válido"
 
-#: sha1-file.c:2261
+#: sha1-file.c:2271
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s não é um objeto '%s' válido"
 
-#: sha1-file.c:2288 builtin/index-pack.c:192
+#: sha1-file.c:2298 builtin/index-pack.c:192
 #, c-format
 msgid "unable to open %s"
 msgstr "não foi possível abrir %s"
 
-#: sha1-file.c:2478 sha1-file.c:2531
+#: sha1-file.c:2488 sha1-file.c:2541
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr ""
 
-#: sha1-file.c:2502
+#: sha1-file.c:2512
 #, fuzzy, c-format
 msgid "unable to mmap %s"
 msgstr "não foi possível abrir %s"
 
-#: sha1-file.c:2507
+#: sha1-file.c:2517
 #, fuzzy, c-format
 msgid "unable to unpack header of %s"
 msgstr "não foi possível atualizar %s"
 
-#: sha1-file.c:2513
+#: sha1-file.c:2523
 #, fuzzy, c-format
 msgid "unable to parse header of %s"
 msgstr "não foi possível ler %s"
 
-#: sha1-file.c:2524
+#: sha1-file.c:2534
 #, fuzzy, c-format
 msgid "unable to unpack contents of %s"
 msgstr "não é possível analisar o contacto: %s"
@@ -8053,18 +8172,15 @@
 "examine these refs and maybe delete them. Turn this message off by\n"
 "running \"git config advice.objectNameWarning false\""
 msgstr ""
-"Normalmente o Git nunca cria referências que terminem em 40 caracteres "
-"hexadecimais,\n"
-"pois uma referência destas seria ignorada se indicasse só 40 caracteres "
-"hexadecimais.\n"
-"Estas referências podem ser criadas por engano. Como no exemplo,\n"
+"Normalmente o Git nunca cria refs que terminem em 40 caracteres\n"
+"hexadecimais, porque será ignorada quando apenas se indica 40-hex.\n"
+"Poderam-se criar estas refs por engano. Como no exemplo,\n"
 "\n"
-"  git checkout -b $br $(git rev-parse ...)\n"
+"  git switch -c $br $(git rev-parse ...)\n"
 "\n"
-"onde \"$br\" está vazio e é criada uma referência de 40 caracteres "
-"hexadecimais.\n"
-"Analise estas referências e elimine-as se desejar. Desative esta\n"
-"mensagem executando \"git config advice.objectNameWarning false\""
+"onde \"$br\" fica vazio e uma ref de 40-hex é criada. Por favor\n"
+"examine estas refs e talvez apague-as. Desative esta mensagem\n"
+"executando \"git config advice.objectNameWarning false\""
 
 #: sha1-name.c:916
 #, c-format
@@ -8181,8 +8297,8 @@
 msgstr[0] "bytes"
 msgstr[1] "bytes"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:733
-#: builtin/rebase.c:858
+#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
+#: builtin/rebase.c:864
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "não foi possível abrir '%s' para escrita"
@@ -8215,13 +8331,12 @@
 #: submodule-config.c:766
 #, c-format
 msgid "Could not update .gitmodules entry %s"
-msgstr "Não foi possível atualizar o elemento %s de .gitmodules"
+msgstr "Incapaz de atualizar entrada de .gitmodules %s"
 
 #: submodule.c:114 submodule.c:143
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
-msgstr ""
-"Não é possível alterar .gitmodules não integrado, resolva primeiro os "
-"conflitos de integração"
+msgstr "Incapaz de alterar .gitmodules por juntar, resolve os conflitos "
+"de junção primeiro"
 
 #: submodule.c:118 submodule.c:147
 #, c-format
@@ -8231,7 +8346,7 @@
 #: submodule.c:154
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
-msgstr "Não foi possível remover o elemento %s de .gitmodules"
+msgstr "Incapaz de remover a entrada de .gitmodules para %s"
 
 #: submodule.c:165
 msgid "staging updated .gitmodules failed"
@@ -8283,29 +8398,31 @@
 #: submodule.c:1167
 #, fuzzy, c-format
 msgid "Pushing submodule '%s'\n"
-msgstr "A ignorar submódulo '%s'"
+msgstr "A ignorar submódulo '%s'\n"
 
 #: submodule.c:1170
 #, fuzzy, c-format
 msgid "Unable to push submodule '%s'\n"
-msgstr "Não foi possível extrair o submódulo '$sm_path'"
+msgstr "Impossível enviar submódulo '%s'\n"
 
 #: submodule.c:1462
 #, fuzzy, c-format
 msgid "Fetching submodule %s%s\n"
-msgstr "A ignorar submódulo '%s'"
+msgstr "Buscando submódulo %s%s\n"
 
 #: submodule.c:1492
 #, fuzzy, c-format
 msgid "Could not access submodule '%s'\n"
-msgstr "não foi possível percorrer recursivamente o submódulo '%s'"
+msgstr "Submódulo '%s' inacessível\n"
 
 #: submodule.c:1646
 #, fuzzy, c-format
 msgid ""
 "Errors during submodule fetch:\n"
 "%s"
-msgstr "percorrer submódulos recursivamente"
+msgstr ""
+"Erros na busca do submódulo:\n"
+"%s"
 
 #: submodule.c:1671
 #, c-format
@@ -8335,7 +8452,7 @@
 #: submodule.c:1832
 #, fuzzy, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
-msgstr "Não foi possível definir core.worktree em %s"
+msgstr "Incapaz de remover a definição core.worktree em submódulo '%s'"
 
 #: submodule.c:1859 submodule.c:2169
 #, c-format
@@ -8411,7 +8528,7 @@
 msgid "unknown value '%s' for key '%s'"
 msgstr "valor desconhecido '%s' da chave '%s'"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:298 builtin/remote.c:323
+#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "mais do que um %s"
@@ -8462,7 +8579,7 @@
 #: transport-helper.c:145
 #, fuzzy, c-format
 msgid "unable to find remote helper for '%s'"
-msgstr "Não é possível adicionar os resultados da integração de '%s'"
+msgstr "incapaz de encontrar helper remoto para '%s'"
 
 #: transport-helper.c:161 transport-helper.c:575
 msgid "can't dup helper output fd"
@@ -8499,15 +8616,15 @@
 msgid "error while running fast-import"
 msgstr "erro ao fechar ficheiro de pacote"
 
-#: transport-helper.c:549 transport-helper.c:1226
+#: transport-helper.c:549 transport-helper.c:1236
 #, fuzzy, c-format
 msgid "could not read ref %s"
-msgstr "Não foi possível ler a referência %s"
+msgstr "incapaz de ler ref %s"
 
 #: transport-helper.c:594
 #, fuzzy, c-format
 msgid "unknown response to connect: %s"
-msgstr "Não sei como clonar %s"
+msgstr "resposta de conexão desconhecida: %s"
 
 #: transport-helper.c:616
 msgid "setting remote service path not supported by protocol"
@@ -8518,7 +8635,7 @@
 msgid "invalid remote service path"
 msgstr "referência inválida: %s"
 
-#: transport-helper.c:661 transport.c:1428
+#: transport-helper.c:661 transport.c:1446
 #, fuzzy
 msgid "operation not supported by protocol"
 msgstr "opção não suportada com --recurse-submodules."
@@ -8537,108 +8654,113 @@
 msgid "expected ok/error, helper said '%s'"
 msgstr "blob para %s '%s' esperado"
 
-#: transport-helper.c:841
+#: transport-helper.c:845
 #, fuzzy, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "ls-tree retornou código de retorno inesperado %d"
 
-#: transport-helper.c:924
+#: transport-helper.c:928
 #, fuzzy, c-format
 msgid "helper %s does not support dry-run"
 msgstr "O servidor não suporta --deepen"
 
-#: transport-helper.c:927
+#: transport-helper.c:931
 #, fuzzy, c-format
 msgid "helper %s does not support --signed"
 msgstr "O servidor não suporta --shallow-since"
 
-#: transport-helper.c:930
+#: transport-helper.c:934
 #, fuzzy, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "o recetor não suporta publicação com --signed"
 
-#: transport-helper.c:935
+#: transport-helper.c:939
 #, fuzzy, c-format
 msgid "helper %s does not support --atomic"
 msgstr "O servidor não suporta --shallow-since"
 
-#: transport-helper.c:941
+#: transport-helper.c:943
+#, fuzzy, c-format
+msgid "helper %s does not support --%s"
+msgstr "O servidor não suporta --shallow-since"
+
+#: transport-helper.c:950
 #, fuzzy, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "o recetor não suporta opções de publicação"
 
-#: transport-helper.c:1040
+#: transport-helper.c:1050
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 
-#: transport-helper.c:1045
+#: transport-helper.c:1055
 #, fuzzy, c-format
 msgid "helper %s does not support 'force'"
 msgstr "O servidor não suporta --deepen"
 
-#: transport-helper.c:1092
+#: transport-helper.c:1102
 #, fuzzy
 msgid "couldn't run fast-export"
 msgstr "não foi possível executar o comando stash."
 
-#: transport-helper.c:1097
+#: transport-helper.c:1107
 #, fuzzy
 msgid "error while running fast-export"
 msgstr "erro ao fechar ficheiro de pacote"
 
-#: transport-helper.c:1122
+#: transport-helper.c:1132
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
 "Perhaps you should specify a branch.\n"
 msgstr ""
 
-#: transport-helper.c:1203
+#: transport-helper.c:1213
 #, fuzzy, c-format
 msgid "unsupported object format '%s'"
 msgstr "objeto malformado em '%s'"
 
-#: transport-helper.c:1212
+#: transport-helper.c:1222
 #, fuzzy, c-format
 msgid "malformed response in ref list: %s"
 msgstr "folha de opções malformada: '%s'"
 
-#: transport-helper.c:1364
+#: transport-helper.c:1374
 #, fuzzy, c-format
 msgid "read(%s) failed"
 msgstr "%s falhou"
 
-#: transport-helper.c:1391
+#: transport-helper.c:1401
 #, fuzzy, c-format
 msgid "write(%s) failed"
 msgstr "%s falhou"
 
-#: transport-helper.c:1440
+#: transport-helper.c:1450
 #, fuzzy, c-format
 msgid "%s thread failed"
 msgstr "%s falhou"
 
-#: transport-helper.c:1444
+#: transport-helper.c:1454
 #, fuzzy, c-format
 msgid "%s thread failed to join: %s"
 msgstr "falha ao abrir '%s'"
 
-#: transport-helper.c:1463 transport-helper.c:1467
+#: transport-helper.c:1473 transport-helper.c:1477
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr ""
 
-#: transport-helper.c:1504
+#: transport-helper.c:1514
 #, c-format
 msgid "%s process failed to wait"
 msgstr ""
 
-#: transport-helper.c:1508
+#: transport-helper.c:1518
 #, fuzzy, c-format
 msgid "%s process failed"
 msgstr "%s falhou"
 
-#: transport-helper.c:1526 transport-helper.c:1535
+#: transport-helper.c:1536 transport-helper.c:1545
 msgid "can't start thread for copying data"
 msgstr ""
 
@@ -8665,39 +8787,39 @@
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:712
+#: transport.c:727
 #, fuzzy
 msgid "could not parse transport.color.* config"
 msgstr "não foi possível analisar o autor do script"
 
-#: transport.c:785
+#: transport.c:802
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:919
+#: transport.c:936
 #, fuzzy, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valor desconhecido '%s' da chave '%s'"
 
-#: transport.c:985
+#: transport.c:1002
 #, fuzzy, c-format
 msgid "transport '%s' not allowed"
 msgstr "ramo '%s' não encontrado."
 
-#: transport.c:1038
+#: transport.c:1055
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1140
+#: transport.c:1157
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr ""
-"Os seguintes caminhos de submódulo contêm alterações que\n"
-"não puderam ser encontradas a nenhum remoto:\n"
+"Os seguintes paths de submódulo contêm alterações que\n"
+"puderam ser encontradas em remoto nenhum:\n"
 
-#: transport.c:1144
+#: transport.c:1161
 #, c-format
 msgid ""
 "\n"
@@ -8724,11 +8846,11 @@
 "para publicá-las no remoto.\n"
 "\n"
 
-#: transport.c:1152
+#: transport.c:1169
 msgid "Aborting."
 msgstr "Abortado."
 
-#: transport.c:1297
+#: transport.c:1315
 #, fuzzy
 msgid "failed to push all needed submodules"
 msgstr "Falha ao adicionar o submódulo '$sm_path'"
@@ -8847,7 +8969,7 @@
 msgstr ""
 "Os seguintes ficheiros não controlados na árvore de trabalho seriam "
 "removidos ao integrar:\n"
-"%%sMova ou remova-os antes de integrar."
+"%%sPor favor, mova ou remova-os antes de integrar."
 
 #: unpack-trees.c:141
 #, c-format
@@ -8944,7 +9066,7 @@
 #: unpack-trees.c:172
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
-msgstr "A entrada '%s' sobrepõe-se com '%s'. Não é possível vincular."
+msgstr "Entrada '%s' sobrepõe-se a '%s'. Impossível vincular."
 
 #: unpack-trees.c:175
 #, c-format
@@ -8952,7 +9074,7 @@
 "Cannot update submodule:\n"
 "%s"
 msgstr ""
-"Não é possível atualizar submódulo:\n"
+"Impossível atualizar submódulo:\n"
 "%s"
 
 #: unpack-trees.c:178
@@ -8968,7 +9090,10 @@
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
 "%s"
-msgstr "Os seguintes caminhos estão ignorados por algum ficheiro .gitignore:\n"
+msgstr ""
+"Os seguintes caminhos estão unmerged e foram abandonados, apesar de sparse "
+"patterns:\n"
+"%s"
 
 #: unpack-trees.c:182
 #, c-format
@@ -9007,7 +9132,7 @@
 msgid "Updating index flags"
 msgstr "A atualizar %s"
 
-#: upload-pack.c:1516
+#: upload-pack.c:1550
 msgid "expected flush after fetch arguments"
 msgstr ""
 
@@ -9045,7 +9170,7 @@
 msgid "Fetching objects"
 msgstr "A verificar objetos"
 
-#: worktree.c:236 builtin/am.c:2116
+#: worktree.c:236 builtin/am.c:2103
 #, c-format
 msgid "failed to read '%s'"
 msgstr "falha ao ler '%s'"
@@ -9078,7 +9203,7 @@
 #: worktree.c:587
 #, fuzzy
 msgid "not a directory"
-msgstr "Não é um repositório git"
+msgstr "é pasta nenhuma"
 
 #: worktree.c:596
 #, fuzzy
@@ -9292,8 +9417,8 @@
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
 msgstr ""
-"Não altere a linha acima.\n"
-"Tudo o que estiver abaixo será removido."
+"Deixe estar a linha acima.\n"
+"Tudo abaixo será ignorado."
 
 #: wt-status.c:1110
 #, c-format
@@ -9447,7 +9572,7 @@
 #: wt-status.c:1415
 #, fuzzy
 msgid "Cherry-pick currently in progress."
-msgstr "nenhum cherry-pick ou revert em curso"
+msgstr "Cherry-pick atualmente em curso"
 
 #: wt-status.c:1418
 #, c-format
@@ -9544,16 +9669,16 @@
 
 #: wt-status.c:1750
 msgid "Not currently on any branch."
-msgstr "Não se encontra em nenhum ramo neste momento."
+msgstr "Atualmente em ramo nenhum."
 
 #: wt-status.c:1767
 msgid "Initial commit"
-msgstr "Commit inicial"
+msgstr "Memória inicial"
 
 #: wt-status.c:1768
 #, fuzzy
 msgid "No commits yet"
-msgstr "nenhum commit analisado."
+msgstr "Ainda commits nenhuns"
 
 #: wt-status.c:1782
 msgid "Untracked files"
@@ -9591,14 +9716,13 @@
 #: wt-status.c:1807
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
-msgstr ""
-"nenhuma alteração adicionada para submeter (use \"git add\" e/ou \"git "
+msgstr "foi adicionado a commit alteração nenhuma (usa \"git add\" e/ou \"git "
 "commit -a\")\n"
 
 #: wt-status.c:1811
 #, c-format
 msgid "no changes added to commit\n"
-msgstr "nenhuma alteração adicionada para submeter\n"
+msgstr "foi adicionado a commit alteração nenhuma\n"
 
 #: wt-status.c:1815
 #, c-format
@@ -9606,39 +9730,33 @@
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr ""
-"não foi adicionado nada para submeter, mas existem ficheiros não controlados "
-"(use \"git add\" para controlá-los)\n"
+"nada adicionado para commit mas há ficheiros por seguir presentes (usa"
+"(\"git add\" para seguir)\n"
 
 #: wt-status.c:1819
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
-msgstr ""
-"não foi adicionado nada para submeter, mas existem ficheiros não "
-"controlados\n"
+msgstr "nada adicionado para commit mas ficheiros por seguir presentes\n"
 
 #: wt-status.c:1823
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
-msgstr ""
-"não há nada para submeter (crie/copie ficheiros e use \"git add\" para "
-"controlá-los)\n"
+msgstr "nada a commit (cria/copia ficheiros e usa \"git add\" para seguir)\n"
 
 #: wt-status.c:1827 wt-status.c:1833
 #, c-format
 msgid "nothing to commit\n"
-msgstr "não há nada para submeter\n"
+msgstr "nada a commit\n"
 
 #: wt-status.c:1830
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr ""
-"não há nada para submeter (use -u para mostrar os ficheiros não "
-"controlados)\n"
+msgstr "nada a commit (use -u para mostrar ficheiros por seguir)\n"
 
 #: wt-status.c:1835
 #, c-format
 msgid "nothing to commit, working tree clean\n"
-msgstr "não há nada para submeter, árvore de trabalho limpa\n"
+msgstr "nada a commitar, worktree limpa\n"
 
 #: wt-status.c:1940
 #, fuzzy
@@ -9647,11 +9765,11 @@
 
 #: wt-status.c:1944
 msgid "HEAD (no branch)"
-msgstr "HEAD (nenhum ramo)"
+msgstr "HEAD (ramo nenhum)"
 
 #: wt-status.c:1975
 msgid "different"
-msgstr ""
+msgstr "diferente"
 
 #: wt-status.c:1977 wt-status.c:1985
 msgid "behind "
@@ -9676,7 +9794,7 @@
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "não é possível efetuar %s: o índice contém alterações não submetidas."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:456
+#: compat/precompose_utf8.c:58 builtin/clone.c:457
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "falha ao invocar unlink de '%s'"
@@ -9697,33 +9815,33 @@
 #: builtin/add.c:103
 #, c-format
 msgid "remove '%s'\n"
-msgstr "remover '%s'\n"
+msgstr "remove '%s'\n"
 
 #: builtin/add.c:178
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Alterações não preparadas depois de atualizar o índice:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:904
+#: builtin/add.c:272 builtin/rev-parse.c:908
 msgid "Could not read the index"
-msgstr "Não foi possível ler o índice"
+msgstr "Incapaz ler o index"
 
 #: builtin/add.c:283
 #, c-format
 msgid "Could not open '%s' for writing."
-msgstr "Não foi possível abrir '%s' para escrita."
+msgstr "Incapaz de abrir '%s' para escrita."
 
 #: builtin/add.c:287
 msgid "Could not write patch"
-msgstr "Não foi possível escrever patch"
+msgstr "Incapaz de escrever patch"
 
 #: builtin/add.c:290
 msgid "editing patch failed"
-msgstr "falha ao editar patch"
+msgstr "edição de patch falhou"
 
 #: builtin/add.c:293
 #, c-format
 msgid "Could not stat '%s'"
-msgstr "Não foi possível obter stat de '%s'"
+msgstr "Impossível fazer stat de '%s'"
 
 #: builtin/add.c:295
 msgid "Empty patch. Aborted."
@@ -9732,15 +9850,15 @@
 #: builtin/add.c:300
 #, c-format
 msgid "Could not apply '%s'"
-msgstr "Não foi possível aplicar '%s'"
+msgstr "Impossível submeter '%s'"
 
 #: builtin/add.c:308
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Os seguintes caminhos estão ignorados por algum ficheiro .gitignore:\n"
 
 #: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:538
-#: builtin/remote.c:1422 builtin/rm.c:242 builtin/send-pack.c:184
+#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
+#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "simular ação"
 
@@ -9748,7 +9866,7 @@
 msgid "interactive picking"
 msgstr "seleção interativa"
 
-#: builtin/add.c:332 builtin/checkout.c:1529 builtin/reset.c:308
+#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "selecionar blocos interativamente"
 
@@ -9864,21 +9982,21 @@
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "o parâmetro '%s' de --chmod tem de ser -x ou +x"
 
-#: builtin/add.c:507 builtin/checkout.c:1697 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1503
+#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
+#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
 #, fuzzy
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--patch é incompatível com --{hard,mixed,soft}"
 
-#: builtin/add.c:514 builtin/checkout.c:1709 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1509
+#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
+#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr ""
 
 #: builtin/add.c:518
 #, c-format
 msgid "Nothing specified, nothing added.\n"
-msgstr "Não foi especificado nada, nada adicionado.\n"
+msgstr ".\n"
 
 #: builtin/add.c:520
 msgid ""
@@ -9887,142 +10005,137 @@
 "\"git config advice.addEmptyPathspec false\""
 msgstr ""
 
-#: builtin/am.c:160
-#, fuzzy, c-format
-msgid "invalid committer: %s"
-msgstr "commit inválido %s"
-
-#: builtin/am.c:366
+#: builtin/am.c:352
 msgid "could not parse author script"
 msgstr "não foi possível analisar o autor do script"
 
-#: builtin/am.c:450
+#: builtin/am.c:436
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' foi eliminado pelo hook applypatch-msg"
 
-#: builtin/am.c:492
+#: builtin/am.c:478
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Linha de entrada malformada: '%s'."
 
-#: builtin/am.c:530
+#: builtin/am.c:516
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Falha ao copiar notas de '%s' para '%s'"
 
-#: builtin/am.c:556
+#: builtin/am.c:542
 msgid "fseek failed"
 msgstr "falha ao invocar fseek"
 
-#: builtin/am.c:744
+#: builtin/am.c:730
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "não foi possível analisar o patch '%s'"
 
-#: builtin/am.c:809
+#: builtin/am.c:795
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Só pode ser aplicada uma série de patches StGIT duma só vez"
 
-#: builtin/am.c:857
+#: builtin/am.c:843
 msgid "invalid timestamp"
 msgstr "carimbo de data/hora inválido"
 
-#: builtin/am.c:862 builtin/am.c:874
+#: builtin/am.c:848 builtin/am.c:860
 msgid "invalid Date line"
 msgstr "linha de Data inválida"
 
-#: builtin/am.c:869
+#: builtin/am.c:855
 msgid "invalid timezone offset"
 msgstr "mudança de fuso horário inválida"
 
-#: builtin/am.c:962
+#: builtin/am.c:948
 msgid "Patch format detection failed."
 msgstr "Falha ao detetar o formato do patch."
 
-#: builtin/am.c:967 builtin/clone.c:409
+#: builtin/am.c:953 builtin/clone.c:410
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "falha ao criar o diretório '%s'"
 
-#: builtin/am.c:972
+#: builtin/am.c:958
 msgid "Failed to split patches."
 msgstr "Falha ao dividir patches."
 
-#: builtin/am.c:1103
+#: builtin/am.c:1089
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Após resolver este problema, execute \"%s --continue\"."
 
-#: builtin/am.c:1104
+#: builtin/am.c:1090
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Se preferir ignorar este patch, execute \"%s --skip\"."
 
-#: builtin/am.c:1105
+#: builtin/am.c:1091
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Para restaurar o ramo original e interromper a aplicação dos patches, "
 "execute \"%s --abort\"."
 
-#: builtin/am.c:1188
+#: builtin/am.c:1174
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 
-#: builtin/am.c:1216
+#: builtin/am.c:1202
 #, fuzzy
 msgid "Patch is empty."
 msgstr "O patch atual está vazio."
 
-#: builtin/am.c:1281
+#: builtin/am.c:1267
 #, fuzzy, c-format
 msgid "missing author line in commit %s"
 msgstr "Autor em falta: %s"
 
-#: builtin/am.c:1284
+#: builtin/am.c:1270
 #, fuzzy, c-format
 msgid "invalid ident line: %.*s"
 msgstr "linha de identidade inválida: %s"
 
-#: builtin/am.c:1503
+#: builtin/am.c:1489
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "O repositório não tem os blobs necessários para recorrer a integração com 3 "
 "pontos."
 
-#: builtin/am.c:1505
+#: builtin/am.c:1491
 msgid "Using index info to reconstruct a base tree..."
 msgstr "A usar informação do índice para reconstruir uma árvore de base..."
 
-#: builtin/am.c:1524
+#: builtin/am.c:1510
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr ""
-"Editou o patch manualmente?\n"
-"Não é possível aplicá-lo aos blobs registados no índice."
+"Editaste o patch manualmente?\n"
+"No registo de index, aplica-se a blobs nenhuns."
 
-#: builtin/am.c:1530
+#: builtin/am.c:1516
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 "A recorrer a uma de base para aplicação de patches e integração com 3 "
 "pontos..."
 
-#: builtin/am.c:1556
+#: builtin/am.c:1542
 msgid "Failed to merge in the changes."
 msgstr "Falha ao integrar as alterações."
 
-#: builtin/am.c:1588
+#: builtin/am.c:1574
 msgid "applying to an empty history"
 msgstr "a aplicar a um histórico vazio"
 
-#: builtin/am.c:1639 builtin/am.c:1643
+#: builtin/am.c:1626 builtin/am.c:1630
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "não é possível continuar: %s não existe."
 
-#: builtin/am.c:1661
+#: builtin/am.c:1648
 msgid "Commit Body is:"
 msgstr "Corpo do commit:"
 
@@ -10030,49 +10143,49 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1671
+#: builtin/am.c:1658
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Aplicar? [y]sim/[n]ão/[e]ditar/[v]er patch/[a]ceitar todos: "
 
-#: builtin/am.c:1717 builtin/commit.c:395
+#: builtin/am.c:1704 builtin/commit.c:395
 msgid "unable to write index file"
 msgstr "não é possível escrever o ficheiro de índice"
 
-#: builtin/am.c:1721
+#: builtin/am.c:1708
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Índice modificado: não é possível aplicar patches (modificado: %s)"
 
-#: builtin/am.c:1761 builtin/am.c:1829
+#: builtin/am.c:1748 builtin/am.c:1816
 #, c-format
 msgid "Applying: %.*s"
 msgstr "A aplicar: %.*s"
 
-#: builtin/am.c:1778
+#: builtin/am.c:1765
 msgid "No changes -- Patch already applied."
 msgstr "Nenhuma alteração -- Já foi aplicado o patch."
 
-#: builtin/am.c:1784
+#: builtin/am.c:1771
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Falha ao aplicar o patch em %s %.*s"
 
-#: builtin/am.c:1788
+#: builtin/am.c:1775
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 
-#: builtin/am.c:1832
+#: builtin/am.c:1819
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
-"Sem alterações - esqueceu-se de usar 'git add'?\n"
-"Se não há nada por preparar, provavelmente essas mesmas alterações\n"
-"já foram introduzidas; pode querer ignorar este patch."
+"Sem alterações - esqueceste-te de usar 'git add'?\n"
+"Se há mais nada por preparar, provavelmente essas mesmas alterações\n"
+"já foram introduzidas; poderás querer saltar este patch."
 
-#: builtin/am.c:1839
+#: builtin/am.c:1826
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10080,175 +10193,176 @@
 "You might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr ""
 
-#: builtin/am.c:1946 builtin/am.c:1950 builtin/am.c:1962 builtin/reset.c:347
+#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
-msgstr "Não foi possível analisar o objeto '%s'."
+msgstr "Incapaz analisar objeto '%s'."
 
-#: builtin/am.c:1998
+#: builtin/am.c:1985
 msgid "failed to clean index"
 msgstr "falha ao limpar o índice"
 
-#: builtin/am.c:2042
+#: builtin/am.c:2029
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr ""
-"Parece que a HEAD foi movida desde a última vez que o 'am' falhou.\n"
-"Não recuando a ORIG_HEAD"
+"Parece que moveste HEAD desde a última falha de 'am'.\n"
+"Recusando rebobinar até ORIG_HEAD"
 
-#: builtin/am.c:2149
+#: builtin/am.c:2136
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Valor inválido de --patch-format: %s"
 
-#: builtin/am.c:2191
+#: builtin/am.c:2178
 #, fuzzy, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Valor inválido de --patch-format: %s"
 
-#: builtin/am.c:2195
+#: builtin/am.c:2182
 #, fuzzy, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--first-parent é incompatível com --bisect"
 
-#: builtin/am.c:2226
+#: builtin/am.c:2213
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opções>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2214
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opções>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2233
+#: builtin/am.c:2220
 msgid "run interactively"
 msgstr "executar interativamente"
 
-#: builtin/am.c:2235
+#: builtin/am.c:2222
 msgid "historical option -- no-op"
 msgstr "opção histórica -- sem-ação"
 
-#: builtin/am.c:2237
+#: builtin/am.c:2224
 msgid "allow fall back on 3way merging if needed"
 msgstr "permitir recorrer a integração com 3 pontos se necessário"
 
-#: builtin/am.c:2238 builtin/init-db.c:558 builtin/prune-packed.c:16
-#: builtin/repack.c:309 builtin/stash.c:816
+#: builtin/am.c:2225 builtin/init-db.c:558 builtin/prune-packed.c:16
+#: builtin/repack.c:335 builtin/stash.c:815
 msgid "be quiet"
 msgstr "silencioso"
 
-#: builtin/am.c:2240
-msgid "add a Signed-off-by line to the commit message"
+#: builtin/am.c:2227
+#, fuzzy
+msgid "add a Signed-off-by trailer to the commit message"
 msgstr "adicionar uma linha com Signed-of-by no fim da mensagem de commit"
 
-#: builtin/am.c:2243
+#: builtin/am.c:2230
 msgid "recode into utf8 (default)"
 msgstr "recodificar em utf8 (predefinição)"
 
-#: builtin/am.c:2245
+#: builtin/am.c:2232
 msgid "pass -k flag to git-mailinfo"
 msgstr "passar a opção -k ao git-mailinfo"
 
-#: builtin/am.c:2247
+#: builtin/am.c:2234
 msgid "pass -b flag to git-mailinfo"
 msgstr "passar a opção -b ao git-mailinfo"
 
-#: builtin/am.c:2249
+#: builtin/am.c:2236
 msgid "pass -m flag to git-mailinfo"
 msgstr "passar a opção -m ao git-mailinfo"
 
-#: builtin/am.c:2251
+#: builtin/am.c:2238
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passar a opção --keep-cr ao gitmailsplit para formato de mbox"
 
-#: builtin/am.c:2254
+#: builtin/am.c:2241
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "não passar a opção --keep-cr ao git-mailsplit independentemente de am.keepcr"
 
-#: builtin/am.c:2257
+#: builtin/am.c:2244
 msgid "strip everything before a scissors line"
 msgstr "retirar todo o conteúdo antes da linha de tesoura"
 
-#: builtin/am.c:2259 builtin/am.c:2262 builtin/am.c:2265 builtin/am.c:2268
-#: builtin/am.c:2271 builtin/am.c:2274 builtin/am.c:2277 builtin/am.c:2280
-#: builtin/am.c:2286
+#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
+#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
+#: builtin/am.c:2273
 msgid "pass it through git-apply"
 msgstr "transmitir ao git-apply"
 
-#: builtin/am.c:2276 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:892 builtin/merge.c:251
+#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
 #: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1335 builtin/repack.c:320 builtin/repack.c:324
-#: builtin/repack.c:326 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
+#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
 #: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
 #: parse-options.h:316
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2282 builtin/branch.c:659 builtin/bugreport.c:135
+#: builtin/am.c:2269 builtin/branch.c:659 builtin/bugreport.c:136
 #: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
 #: builtin/verify-tag.c:38
 msgid "format"
 msgstr "formato"
 
-#: builtin/am.c:2283
+#: builtin/am.c:2270
 msgid "format the patch(es) are in"
 msgstr "formato de apresentação de patches"
 
-#: builtin/am.c:2289
+#: builtin/am.c:2276
 msgid "override error message when patch failure occurs"
 msgstr "substituir a mensagem de erro quando a aplicação do patch falha"
 
-#: builtin/am.c:2291
+#: builtin/am.c:2278
 msgid "continue applying patches after resolving a conflict"
 msgstr "continuar a aplicar os patches depois de resolver os conflitos"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2281
 msgid "synonyms for --continue"
 msgstr "sinónimo de --continue"
 
-#: builtin/am.c:2297
+#: builtin/am.c:2284
 msgid "skip the current patch"
 msgstr "ignorar o patch atual"
 
-#: builtin/am.c:2300
+#: builtin/am.c:2287
 msgid "restore the original branch and abort the patching operation."
 msgstr "restaurar o ramo original e abortar a operação de patch."
 
-#: builtin/am.c:2303
+#: builtin/am.c:2290
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr ""
 
-#: builtin/am.c:2307
+#: builtin/am.c:2294
 #, fuzzy
 msgid "show the patch being applied"
 msgstr "mostrar linhas não correspondidas"
 
-#: builtin/am.c:2312
+#: builtin/am.c:2299
 msgid "lie about committer date"
 msgstr "mentir sobre a data de commit"
 
-#: builtin/am.c:2314
+#: builtin/am.c:2301
 msgid "use current timestamp for author date"
 msgstr "usar a data e hora atual como data de autor"
 
-#: builtin/am.c:2316 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:288 builtin/pull.c:175 builtin/rebase.c:530
-#: builtin/rebase.c:1388 builtin/revert.c:117 builtin/tag.c:419
+#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
+#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
+#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
 msgid "key-id"
 msgstr "id-chave"
 
-#: builtin/am.c:2317 builtin/rebase.c:531 builtin/rebase.c:1389
+#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
 msgid "GPG-sign commits"
 msgstr "assinar os commits com GPG"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2307
 msgid "(internal use for git-rebase)"
 msgstr "(uso interno de git-rebase)"
 
-#: builtin/am.c:2338
+#: builtin/am.c:2325
 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."
@@ -10256,17 +10370,17 @@
 "A opção -b/--binary há muito que é ignorada e será\n"
 "futuramente removida. Por favor não a use."
 
-#: builtin/am.c:2345
+#: builtin/am.c:2332
 msgid "failed to read the index"
 msgstr "falha ao ler o índice"
 
-#: builtin/am.c:2360
+#: builtin/am.c:2347
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "o diretório de rebesa anterior %s ainda existe, mas foi fornecida uma mbox."
 
-#: builtin/am.c:2384
+#: builtin/am.c:2371
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10275,11 +10389,11 @@
 "Diretório abandonado %s encontrado.\n"
 "Use \"git am --abort\" para o remover."
 
-#: builtin/am.c:2390
+#: builtin/am.c:2377
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "A operação de resolução não está em curso, não retomando."
 
-#: builtin/am.c:2400
+#: builtin/am.c:2387
 msgid "interactive mode requires patches on the command line"
 msgstr ""
 
@@ -10320,139 +10434,129 @@
 
 #: builtin/bisect--helper.c:23
 #, fuzzy
-msgid "git bisect--helper --next-all"
-msgstr "git bisect--helper --next-all [--no-checkout]"
-
-#: builtin/bisect--helper.c:24
-msgid "git bisect--helper --write-terms <bad_term> <good_term>"
-msgstr ""
-
-#: builtin/bisect--helper.c:25
-#, fuzzy
-msgid "git bisect--helper --bisect-clean-state"
-msgstr "git bisect--helper --next-all [--no-checkout]"
-
-#: builtin/bisect--helper.c:26
-#, fuzzy
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --next-all [--no-checkout]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:24
 msgid ""
 "git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
 "<bad_term>"
 msgstr ""
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
 "<bad_term>"
 msgstr ""
 
-#: builtin/bisect--helper.c:29
+#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:27
 #, fuzzy
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 msgstr ""
-"argumento inválido $arg de 'git bisect terms'.\n"
-"Opções suportadas: --term-good|--term-old e --term-bad|--term-new."
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
+"term-new]"
 
-#: builtin/bisect--helper.c:31
+#: builtin/bisect--helper.c:28
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
 "[<paths>...]"
 msgstr ""
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 #, fuzzy
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --next-all [--no-checkout]"
 
-#: builtin/bisect--helper.c:34
+#: builtin/bisect--helper.c:31
 #, fuzzy
 msgid "git bisect--helper --bisect-auto-next"
 msgstr "git bisect--helper --next-all [--no-checkout]"
 
-#: builtin/bisect--helper.c:35
+#: builtin/bisect--helper.c:32
 #, fuzzy
-msgid "git bisect--helper --bisect-autostart"
+msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --next-all [--no-checkout]"
 
-#: builtin/bisect--helper.c:97
+#: builtin/bisect--helper.c:33
+#, fuzzy
+msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
+msgstr "git bisect--helper --next-all [--no-checkout]"
+
+#: builtin/bisect--helper.c:108
 #, fuzzy, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "não é possível abrir o ficheiro '%s'"
 
-#: builtin/bisect--helper.c:104
+#: builtin/bisect--helper.c:115
 #, fuzzy, c-format
 msgid "could not write to file '%s'"
 msgstr "não foi possível escrever em '%s'"
 
-#: builtin/bisect--helper.c:143
+#: builtin/bisect--helper.c:154
 #, fuzzy, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' não é uma referência válida."
 
-#: builtin/bisect--helper.c:147
+#: builtin/bisect--helper.c:158
 #, fuzzy, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "não é possível usar o comando '$term' como um termo"
 
-#: builtin/bisect--helper.c:157
+#: builtin/bisect--helper.c:168
 #, fuzzy, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "não é possível alterar o significado do termo '$term'"
 
-#: builtin/bisect--helper.c:167
+#: builtin/bisect--helper.c:178
 msgid "please use two different terms"
-msgstr "use dois termos diferentes"
+msgstr "por favor, usa dois termos diferentes"
 
-#: builtin/bisect--helper.c:207
+#: builtin/bisect--helper.c:194
 #, fuzzy, c-format
 msgid "We are not bisecting.\n"
-msgstr "Não se está a bissetar."
+msgstr "Estamos bissetando nada.\n"
 
-#: builtin/bisect--helper.c:215
+#: builtin/bisect--helper.c:202
 #, fuzzy, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' não é um commit"
 
-#: builtin/bisect--helper.c:224
+#: builtin/bisect--helper.c:211
 #, fuzzy, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr ""
-"Não foi possível extrair a HEAD original de '$branch'.\n"
-"Tente 'git bisect reset <commit>'."
+"pude check out HEAD original '%s' nenhuma. Tenta 'git bisect reset <commit>'."
 
-#: builtin/bisect--helper.c:268
+#: builtin/bisect--helper.c:255
 #, fuzzy, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Argumento de bisect_write incorreto: $state"
 
-#: builtin/bisect--helper.c:273
+#: builtin/bisect--helper.c:260
 #, fuzzy, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "não foi possível criar o diretório de árvore de trabalho '%s'"
 
-#: builtin/bisect--helper.c:285
+#: builtin/bisect--helper.c:272
 #, fuzzy, c-format
 msgid "couldn't open the file '%s'"
-msgstr "Não foi possível abrir o ficheiro '%s'"
+msgstr "incapaz abrir o ficheiro '%s'"
 
-#: builtin/bisect--helper.c:311
+#: builtin/bisect--helper.c:298
 #, fuzzy, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr ""
 "Comando inválido: está-se a bissetar usando os termos $TERM_BAD/$TERM_GOOD."
 
-#: builtin/bisect--helper.c:338
+#: builtin/bisect--helper.c:325
 #, fuzzy, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10461,7 +10565,7 @@
 "Deve indicar pelo menos uma revisão $bad_syn e uma revisão $good_syn.\n"
 "(Pode usar \"git bisect $bad_syn\" e \"git bisect $good_syn\" para esse fim.)"
 
-#: builtin/bisect--helper.c:342
+#: builtin/bisect--helper.c:329
 #, fuzzy, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10472,7 +10576,7 @@
 "Indique pelo menos uma revisão $good_syn e uma revisão $bad_syn.\n"
 "(Pode usar \"git bisect $bad_syn\" e \"git bisect $good_syn\" para esse fim.)"
 
-#: builtin/bisect--helper.c:362
+#: builtin/bisect--helper.c:349
 #, fuzzy, c-format
 msgid "bisecting only with a %s commit"
 msgstr "Aviso: a bissetar só com um commit $TERM_BAD."
@@ -10481,199 +10585,183 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:370
+#: builtin/bisect--helper.c:357
 msgid "Are you sure [Y/n]? "
 msgstr "Tem a certeza [Y/n]? "
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:418
 msgid "no terms defined"
-msgstr "nenhum termo definido"
+msgstr "termo nenhum definido"
 
-#: builtin/bisect--helper.c:434
+#: builtin/bisect--helper.c:421
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
 "and %s for the new state.\n"
 msgstr ""
 
-#: builtin/bisect--helper.c:444
+#: builtin/bisect--helper.c:431
 #, fuzzy, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
 "Supported options are: --term-good|--term-old and --term-bad|--term-new."
 msgstr ""
-"argumento inválido $arg de 'git bisect terms'.\n"
+"argumento inválido %s para 'git bisect terms'.\n"
 "Opções suportadas: --term-good|--term-old e --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:511
+#: builtin/bisect--helper.c:498
 #, fuzzy
 msgid "revision walk setup failed\n"
-msgstr "falha ao configurar percurso de revisões"
+msgstr "falha ao configurar percurso de revisões\n"
 
-#: builtin/bisect--helper.c:533
+#: builtin/bisect--helper.c:520
 #, fuzzy, c-format
 msgid "could not open '%s' for appending"
 msgstr "não foi possível abrir '%s' para leitura"
 
-#: builtin/bisect--helper.c:651 builtin/bisect--helper.c:664
+#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
 #, fuzzy
 msgid "'' is not a valid term"
 msgstr "'$term' não é um termo válido"
 
-#: builtin/bisect--helper.c:674
+#: builtin/bisect--helper.c:662
 #, fuzzy, c-format
 msgid "unrecognized option: '%s'"
 msgstr "posição não reconhecida:%s"
 
-#: builtin/bisect--helper.c:678
+#: builtin/bisect--helper.c:666
 #, fuzzy, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'$arg' não parecer ser uma revisão válida"
 
-#: builtin/bisect--helper.c:709
+#: builtin/bisect--helper.c:697
 #, fuzzy
 msgid "bad HEAD - I need a HEAD"
 msgstr "HEAD incorreta - é necessário uma HEAD"
 
-#: builtin/bisect--helper.c:724
+#: builtin/bisect--helper.c:712
 #, fuzzy, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "Falha ao extrair '$start_head'. Tente 'git bisect reset <ramo-válido>'."
 
-#: builtin/bisect--helper.c:745
+#: builtin/bisect--helper.c:733
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "não é possível bissetar numa árvore \"cg-seek'ed\""
 
-#: builtin/bisect--helper.c:748
+#: builtin/bisect--helper.c:736
 #, fuzzy
 msgid "bad HEAD - strange symbolic ref"
 msgstr "HEAD incorreta - referência simbólica desconhecida"
 
-#: builtin/bisect--helper.c:775
+#: builtin/bisect--helper.c:756
 #, fuzzy, c-format
 msgid "invalid ref: '%s'"
 msgstr "ficheiro inválido: '%s'"
 
-#: builtin/bisect--helper.c:827
+#: builtin/bisect--helper.c:814
 #, fuzzy
 msgid "You need to start by \"git bisect start\"\n"
-msgstr "Deve começar por executar \"git bisect start\""
+msgstr "Deve começar por executar \"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:838
+#: builtin/bisect--helper.c:825
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Quer que o Git o faça por si [Y/n]? "
 
-#: builtin/bisect--helper.c:866
-msgid "perform 'git bisect next'"
-msgstr "executar 'git bisect next'"
+#: builtin/bisect--helper.c:843
+#, fuzzy
+msgid "Please call `--bisect-state` with at least one argument"
+msgstr "Invoque 'bisect_state' com pelo menos um argumento."
 
-#: builtin/bisect--helper.c:868
-msgid "write the terms to .git/BISECT_TERMS"
-msgstr ""
+#: builtin/bisect--helper.c:856
+#, fuzzy, c-format
+msgid "'git bisect %s' can take only one argument."
+msgstr "'git bisect $TERM_BAD' só leva um argumento."
 
-#: builtin/bisect--helper.c:870
-msgid "cleanup the bisection state"
-msgstr ""
+#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#, fuzzy, c-format
+msgid "Bad rev input: %s"
+msgstr "Revisão incorreta na entrada: $arg"
 
-#: builtin/bisect--helper.c:872
-msgid "check for expected revs"
-msgstr ""
-
-#: builtin/bisect--helper.c:874
+#: builtin/bisect--helper.c:924
 #, fuzzy
 msgid "reset the bisection state"
 msgstr "remover uma secção: nome"
 
-#: builtin/bisect--helper.c:876
+#: builtin/bisect--helper.c:926
 msgid "write out the bisection state in BISECT_LOG"
 msgstr ""
 
-#: builtin/bisect--helper.c:878
+#: builtin/bisect--helper.c:928
 msgid "check and set terms in a bisection state"
 msgstr ""
 
-#: builtin/bisect--helper.c:880
+#: builtin/bisect--helper.c:930
 msgid "check whether bad or good terms exist"
 msgstr ""
 
-#: builtin/bisect--helper.c:882
+#: builtin/bisect--helper.c:932
 #, fuzzy
 msgid "print out the bisect terms"
 msgstr "imprimir apenas as tags do objeto"
 
-#: builtin/bisect--helper.c:884
+#: builtin/bisect--helper.c:934
 msgid "start the bisect session"
 msgstr ""
 
-#: builtin/bisect--helper.c:886
+#: builtin/bisect--helper.c:936
 #, fuzzy
 msgid "find the next bisection commit"
 msgstr "não é possível emendar commit não-existente"
 
-#: builtin/bisect--helper.c:888
+#: builtin/bisect--helper.c:938
 msgid "verify the next bisection state then checkout the next bisection commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:890
-msgid "start the bisection if it has not yet been started"
+#: builtin/bisect--helper.c:940
+msgid "mark the state of ref (or refs)"
 msgstr ""
 
-#: builtin/bisect--helper.c:892
+#: builtin/bisect--helper.c:942
 msgid "no log for BISECT_WRITE"
 msgstr ""
 
-#: builtin/bisect--helper.c:910
-#, fuzzy
-msgid "--write-terms requires two arguments"
-msgstr "--abort não leva argumentos"
-
-#: builtin/bisect--helper.c:914
-#, fuzzy
-msgid "--bisect-clean-state requires no arguments"
-msgstr "--continue não leva argumentos"
-
-#: builtin/bisect--helper.c:921
+#: builtin/bisect--helper.c:957
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:925
+#: builtin/bisect--helper.c:961
 #, fuzzy
 msgid "--bisect-write requires either 4 or 5 arguments"
 msgstr ":strip= requer um inteiro positivo como argumento"
 
-#: builtin/bisect--helper.c:931
+#: builtin/bisect--helper.c:967
 msgid "--check-and-set-terms requires 3 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:937
+#: builtin/bisect--helper.c:973
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:943
+#: builtin/bisect--helper.c:979
 #, fuzzy
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr ":strip= requer um inteiro positivo como argumento"
 
-#: builtin/bisect--helper.c:952
+#: builtin/bisect--helper.c:988
 #, fuzzy
 msgid "--bisect-next requires 0 arguments"
 msgstr "--continue não leva argumentos"
 
-#: builtin/bisect--helper.c:958
+#: builtin/bisect--helper.c:994
 #, fuzzy
 msgid "--bisect-auto-next requires 0 arguments"
 msgstr "--continue não leva argumentos"
 
-#: builtin/bisect--helper.c:964
-#, fuzzy
-msgid "--bisect-autostart does not accept arguments"
-msgstr "%%(subject) não leva argumentos"
-
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<opções>] [<rev-opções>] [<rev>] [--] <ficheiro>"
@@ -10701,134 +10789,136 @@
 msgid "invalid value for blame.coloring"
 msgstr "valor inválido de %s"
 
-#: builtin/blame.c:845
+#: builtin/blame.c:847
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr ""
 
-#: builtin/blame.c:867
+#: builtin/blame.c:869
 msgid "Show blame entries as we find them, incrementally"
 msgstr ""
 "Mostrar entradas de culpa à medida que forem encontradas, incrementalmente"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:870
 #, fuzzy
 msgid "Do not show object names of boundary commits (Default: off)"
 msgstr "Mostar SHA-1 dos commits limite em branco (Predefinição: desativado)"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:871
 msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "Não tratar os commits raiz como limites (Predefinição: desativado)"
+msgstr "Tratar commits raiz como limite nenhum (Predefinição: desativado)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:872
 msgid "Show work cost statistics"
 msgstr "Mostrar estatísticas de custo de atividade"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:873
 msgid "Force progress reporting"
 msgstr "Forçar informação de progresso"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:874
 msgid "Show output score for blame entries"
 msgstr "Mostrar a pontuação das entradas de culpa"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:875
 msgid "Show original filename (Default: auto)"
 msgstr "Mostrar o nome do ficheiro original (Predefinição: auto)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:876
 msgid "Show original linenumber (Default: off)"
 msgstr "Mostrar números de linha originais (Predefinição: desativado)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:877
 msgid "Show in a format designed for machine consumption"
 msgstr "Mostrar em formato próprio para ser consumo por uma máquina"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:878
 msgid "Show porcelain format with per-line commit information"
 msgstr "Mostrar em formato de porcelana com informações de commit por linha"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:879
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Usar o mesmo modo de saída que git-annotate (Predefinição: desativado)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:880
 msgid "Show raw timestamp (Default: off)"
 msgstr "Mostrar carimbo de data/hora em bruto (Predefinição: desativado)"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:881
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Mostrar SHA1 longo de commit (Predefinição: desativado)"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:882
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr ""
 "Suprimir nome de autor e carimbo de data/hora (Predefinição: desativado)"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:883
 msgid "Show author email instead of name (Default: off)"
 msgstr "Mostrar o email do autor em vez do nome (Predefinição: desativado)"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:884
 msgid "Ignore whitespace differences"
 msgstr "Ignorar as diferenças de espaço em branco"
 
-#: builtin/blame.c:883 builtin/log.c:1808
+#: builtin/blame.c:885 builtin/log.c:1813
 #, fuzzy
 msgid "rev"
 msgstr "reverter"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:885
 #, fuzzy
 msgid "Ignore <rev> when blaming"
 msgstr "ignorar o índice ao verificar"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:886
 #, fuzzy
 msgid "Ignore revisions from <file>"
 msgstr "ler mensagem de um ficheiro"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 
-#: builtin/blame.c:886
+#: builtin/blame.c:888
 msgid "color lines by age"
 msgstr ""
 
-#: builtin/blame.c:887
+#: builtin/blame.c:889
 msgid "Spend extra cycles to find better match"
 msgstr "Despender ciclos extra para encontrar uma melhor correspondência"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:890
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Usar revisões do <ficheiro> em vez de invocar git-rev-list"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:891
 msgid "Use <file>'s contents as the final image"
 msgstr "Usar o conteúdo do <ficheiro> como imagem final"
 
-#: builtin/blame.c:890 builtin/blame.c:891
+#: builtin/blame.c:892 builtin/blame.c:893
 msgid "score"
 msgstr "pontuação"
 
-#: builtin/blame.c:890
+#: builtin/blame.c:892
 msgid "Find line copies within and across files"
 msgstr "Localizar linhas copiadas dentro e entre ficheiros"
 
-#: builtin/blame.c:891
+#: builtin/blame.c:893
 msgid "Find line movements within and across files"
 msgstr "Localizar linhas movidas dentro e entre ficheiros"
 
-#: builtin/blame.c:892
-msgid "n,m"
-msgstr "n,m"
+#: builtin/blame.c:894
+#, fuzzy
+msgid "range"
+msgstr "intervalo"
 
-#: builtin/blame.c:892
-msgid "Process only line range n,m, counting from 1"
+#: builtin/blame.c:895
+#, fuzzy
+msgid "Process only line range <start>,<end> or function :<funcname>"
 msgstr "Processar apenas o intervalo de linhas n,m, a cantar de 1"
 
-#: builtin/blame.c:944
+#: builtin/blame.c:947
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress não pode ser usado com --incremental ou formatos de porcelana"
@@ -10841,18 +10931,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:995
+#: builtin/blame.c:998
 msgid "4 years, 11 months ago"
 msgstr "há 4 anos e 11 meses atrás"
 
-#: builtin/blame.c:1110
+#: builtin/blame.c:1114
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "o ficheiro %s só tem %lu linha"
 msgstr[1] "o ficheiro %s só tem %lu linhas"
 
-#: builtin/blame.c:1156
+#: builtin/blame.c:1159
 msgid "Blaming lines"
 msgstr "Linhas de culpa"
 
@@ -10907,7 +10997,7 @@
 #: builtin/branch.c:172
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
-msgstr "Não foi possível pesquisar pelo objeto commit de '%s'"
+msgstr "Incapaz pesquisar objeto commit para '%s'"
 
 #: builtin/branch.c:176
 #, c-format
@@ -10928,12 +11018,12 @@
 
 #: builtin/branch.c:226
 msgid "Couldn't look up commit object for HEAD"
-msgstr "Não foi possível pesquisar pelo objeto commit de HEAD"
+msgstr "Incapaz de pesquisar objeto commit para HEAD"
 
 #: builtin/branch.c:240
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
-msgstr "Não é possível eliminar o ramo '%s' extraído em '%s'"
+msgstr "Impossível apagar ramo '%s' checked out em '%s'"
 
 #: builtin/branch.c:255
 #, c-format
@@ -10973,7 +11063,7 @@
 #: builtin/branch.c:460
 #, fuzzy
 msgid "could not resolve HEAD"
-msgstr "não foi possível resolver o commit HEAD\n"
+msgstr "não foi possível resolver o commit HEAD"
 
 #: builtin/branch.c:466
 #, fuzzy, c-format
@@ -11073,7 +11163,7 @@
 msgid "do not use"
 msgstr "esquema a usar"
 
-#: builtin/branch.c:626 builtin/rebase.c:526
+#: builtin/branch.c:626 builtin/rebase.c:532
 msgid "upstream"
 msgstr "a montante"
 
@@ -11188,7 +11278,7 @@
 msgid "format to use for the output"
 msgstr "formato a usar na saída"
 
-#: builtin/branch.c:682 builtin/clone.c:789
+#: builtin/branch.c:682 builtin/clone.c:790
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD não encontrada em refs/heads!"
 
@@ -11202,7 +11292,7 @@
 
 #: builtin/branch.c:751
 msgid "Cannot give description to detached HEAD"
-msgstr "Não é possível atribuir descrição a HEAD destacada"
+msgstr "Impossível dar descrição a HEAD solta"
 
 #: builtin/branch.c:756
 msgid "cannot edit description of more than one branch"
@@ -11216,7 +11306,7 @@
 #: builtin/branch.c:766
 #, c-format
 msgid "No branch named '%s'."
-msgstr "Não há nenhum ramo denominado '%s'."
+msgstr "Ramo nenhum denominado '%s'."
 
 #: builtin/branch.c:781
 #, fuzzy
@@ -11273,7 +11363,8 @@
 "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 ""
-"as opções -a e -r de 'git branch' não fazem sentido com um nome de ramo"
+"As opções -a, e -r, em 'git branch' levam nome de branch nenhum.\n"
+"Quiseste utilizar: -a|-r --list <pattern>? "
 
 #: builtin/branch.c:843
 #, fuzzy
@@ -11281,13 +11372,13 @@
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
 msgstr ""
-"A opção --set-upstream é obsoleta e será removida. Considere o uso de --"
-"track ou --set-upstream-to\n"
+"A opção --set-upstream está obsoleta. Por favor, usa '--track' ou '--set-"
+"upstream-to' invés."
 
 #: builtin/bugreport.c:15
 #, fuzzy
 msgid "git version:\n"
-msgstr "versão"
+msgstr "versão git:\n"
 
 #: builtin/bugreport.c:21
 #, c-format
@@ -11329,39 +11420,39 @@
 "You can delete any lines you don't wish to share.\n"
 msgstr ""
 
-#: builtin/bugreport.c:134
+#: builtin/bugreport.c:135
 msgid "specify a destination for the bugreport file"
 msgstr ""
 
-#: builtin/bugreport.c:136
+#: builtin/bugreport.c:137
 msgid "specify a strftime format suffix for the filename"
 msgstr ""
 
-#: builtin/bugreport.c:158
+#: builtin/bugreport.c:159
 #, fuzzy, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "não foi possível criar os diretórios superiores de '%s'"
 
-#: builtin/bugreport.c:165
+#: builtin/bugreport.c:166
 msgid "System Info"
 msgstr ""
 
-#: builtin/bugreport.c:168
+#: builtin/bugreport.c:169
 #, fuzzy
 msgid "Enabled Hooks"
 msgstr "não foi possível abrir %s"
 
-#: builtin/bugreport.c:175
+#: builtin/bugreport.c:176
 #, fuzzy, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "não foi possível criar o ficheiro '%s'"
 
-#: builtin/bugreport.c:178
+#: builtin/bugreport.c:179
 #, fuzzy, c-format
 msgid "unable to write to %s"
 msgstr "não foi possível escrever %s"
 
-#: builtin/bugreport.c:188
+#: builtin/bugreport.c:189
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr ""
@@ -11416,17 +11507,17 @@
 #: builtin/bundle.c:122
 #, c-format
 msgid "%s is okay\n"
-msgstr "%s está correto\n"
+msgstr "%s está ok\n"
 
 #: builtin/bundle.c:163
 msgid "Need a repository to unbundle."
 msgstr "É preciso um repositório para desempacotar."
 
-#: builtin/bundle.c:171 builtin/remote.c:1687
+#: builtin/bundle.c:171 builtin/remote.c:1700
 msgid "be verbose; must be placed before a subcommand"
 msgstr "ser verboso; deve ser colocado antes de um subcomando"
 
-#: builtin/bundle.c:193 builtin/remote.c:1718
+#: builtin/bundle.c:193 builtin/remote.c:1731
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Subcomando desconhecido: %s"
@@ -11543,7 +11634,7 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "terminar registos da entrada e da saída com um carácter NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1482 builtin/gc.c:538
+#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
 #: builtin/worktree.c:561
 msgid "suppress progress reporting"
 msgstr "suprimir informação de progresso"
@@ -11566,7 +11657,7 @@
 
 #: builtin/check-ignore.c:168
 msgid "no path specified"
-msgstr "nenhum caminho especificado"
+msgstr "path nenhum especificado"
 
 #: builtin/check-ignore.c:172
 msgid "--quiet is only valid with a single pathname"
@@ -11595,58 +11686,58 @@
 
 #: builtin/check-mailmap.c:48
 msgid "no contacts specified"
-msgstr "nenhum contacto especificado"
+msgstr "contato nenhum especificado"
 
-#: builtin/checkout-index.c:131
+#: builtin/checkout-index.c:139
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<opções>] [--] [<ficheiro>...]"
 
-#: builtin/checkout-index.c:148
+#: builtin/checkout-index.c:156
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage deve ser um número entre 1 e 3 ou o parâmetro all"
 
-#: builtin/checkout-index.c:164
+#: builtin/checkout-index.c:173
 msgid "check out all files in the index"
 msgstr "extrair todos os ficheiros presentes no índice"
 
-#: builtin/checkout-index.c:165
+#: builtin/checkout-index.c:174
 msgid "force overwrite of existing files"
 msgstr "forçar substituição dos ficheiros existentes"
 
-#: builtin/checkout-index.c:167
+#: builtin/checkout-index.c:176
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "não mostrar aviso para ficheiros existentes e ficheiros não presentes no "
 "índice"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:178
 msgid "don't checkout new files"
 msgstr "não extrair novos ficheiros"
 
-#: builtin/checkout-index.c:171
+#: builtin/checkout-index.c:180
 msgid "update stat information in the index file"
 msgstr "atualizar informação de stat no ficheiro de índice"
 
-#: builtin/checkout-index.c:175
+#: builtin/checkout-index.c:184
 msgid "read list of paths from the standard input"
 msgstr "ler lista de caminhos da entrada padrão"
 
-#: builtin/checkout-index.c:177
+#: builtin/checkout-index.c:186
 msgid "write the content to temporary files"
 msgstr "escrever o conteúdo em ficheiros temporários"
 
-#: builtin/checkout-index.c:178 builtin/column.c:31
+#: builtin/checkout-index.c:187 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:754
+#: builtin/worktree.c:757
 msgid "string"
 msgstr "cadeia"
 
-#: builtin/checkout-index.c:179
+#: builtin/checkout-index.c:188
 msgid "when creating files, prepend <string>"
 msgstr "preceder <cadeia> ao criar ficheiros"
 
-#: builtin/checkout-index.c:181
+#: builtin/checkout-index.c:190
 msgid "copy out the files from named stage"
 msgstr "copiar os ficheiros do estágio indicado"
 
@@ -11696,7 +11787,7 @@
 #: builtin/checkout.c:291
 #, c-format
 msgid "Unable to add merge result for '%s'"
-msgstr "Não é possível adicionar os resultados da integração de '%s'"
+msgstr "Impossível adicionar o resultado da junção para '%s'"
 
 #: builtin/checkout.c:396
 #, c-format
@@ -11709,8 +11800,8 @@
 #, fuzzy, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
-msgstr[0] "%d caminho atualizado\n"
-msgstr[1] "%d caminhos atualizados\n"
+msgstr[0] "%d caminho atualizado"
+msgstr[1] "%d caminhos atualizados"
 
 #: builtin/checkout.c:408
 #, fuzzy, c-format
@@ -11733,8 +11824,7 @@
 #: builtin/checkout.c:451
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
-msgstr ""
-"Não é possível atualizar os caminhos e mudar para o ramo '%s' ao mesmo tempo."
+msgstr "Incapaz atualizar paths e mudar para ramo '%s' ao mesmo tempo."
 
 #: builtin/checkout.c:455
 #, c-format
@@ -11751,66 +11841,66 @@
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "%s: %s não pode ser usado com %s"
 
-#: builtin/checkout.c:528 builtin/checkout.c:535
+#: builtin/checkout.c:541 builtin/checkout.c:548
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "o caminho '%s' não foi integrado"
 
-#: builtin/checkout.c:703
+#: builtin/checkout.c:716
 msgid "you need to resolve your current index first"
 msgstr "primeiro deve resolver o índice atual"
 
-#: builtin/checkout.c:757
+#: builtin/checkout.c:770
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
 
-#: builtin/checkout.c:853
+#: builtin/checkout.c:866
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
-msgstr "Não é possível efetuar reflog de '%s': %s\n"
+msgstr "Incapaz fazer reflog para '%s': %s\n"
 
-#: builtin/checkout.c:895
+#: builtin/checkout.c:908
 msgid "HEAD is now at"
 msgstr "HEAD está agora em"
 
-#: builtin/checkout.c:899 builtin/clone.c:720
+#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "não foi possível atualizar HEAD"
 
-#: builtin/checkout.c:903
+#: builtin/checkout.c:916
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Repor ramo '%s'\n"
 
-#: builtin/checkout.c:906
+#: builtin/checkout.c:919
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Já em '%s'\n"
 
-#: builtin/checkout.c:910
+#: builtin/checkout.c:923
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Mudou para e repôs o ramo '%s'\n"
 
-#: builtin/checkout.c:912 builtin/checkout.c:1338
+#: builtin/checkout.c:925 builtin/checkout.c:1356
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Mudou para o novo ramo '%s'\n"
 
-#: builtin/checkout.c:914
+#: builtin/checkout.c:927
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Mudou para o ramo '%s'\n"
 
-#: builtin/checkout.c:965
+#: builtin/checkout.c:978
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... e mais %d.\n"
 
-#: builtin/checkout.c:971
+#: builtin/checkout.c:984
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11823,15 +11913,17 @@
 "\n"
 "%s\n"
 msgstr[0] ""
-"Aviso: deixa %d commit para trás, não ligado a nenhum ramo:\n"
+"Aviso: estás deixando %d commit para trás, desconetado a qualquer dos "
+"teus ramos:\n"
 "\n"
 "%s\n"
 msgstr[1] ""
-"Aviso: deixa %d commits para trás, não ligados a nenhum ramo:\n"
+"Aviso: estás deixando %d commits para trás, desconetado a qualquer "
+"dos teus ramos:\n"
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:990
+#: builtin/checkout.c:1003
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11858,26 +11950,26 @@
 " git branch <nome-do-novo-ramo> %s\n"
 "\n"
 
-#: builtin/checkout.c:1025
+#: builtin/checkout.c:1038
 msgid "internal error in revision walk"
 msgstr "erro interno durante o curso de revisões"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 msgid "Previous HEAD position was"
 msgstr "A posição anterior de HEAD era"
 
-#: builtin/checkout.c:1069 builtin/checkout.c:1333
+#: builtin/checkout.c:1082 builtin/checkout.c:1351
 msgid "You are on a branch yet to be born"
 msgstr "Está num ramo ainda não criado"
 
-#: builtin/checkout.c:1146
+#: builtin/checkout.c:1164
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
 "Please use -- (and optionally --no-guess) to disambiguate"
 msgstr ""
 
-#: builtin/checkout.c:1153
+#: builtin/checkout.c:1171
 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"
@@ -11889,225 +11981,225 @@
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 
-#: builtin/checkout.c:1163
+#: builtin/checkout.c:1181
 #, fuzzy, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "atuar sobre ramos de monitorização remotos"
 
-#: builtin/checkout.c:1229
+#: builtin/checkout.c:1247
 #, fuzzy
 msgid "only one reference expected"
 msgstr "esperava-se apenas uma referência, %d fornecidas."
 
-#: builtin/checkout.c:1246
+#: builtin/checkout.c:1264
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "esperava-se apenas uma referência, %d fornecidas."
 
-#: builtin/checkout.c:1292 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referência inválida: %s"
 
-#: builtin/checkout.c:1305 builtin/checkout.c:1671
+#: builtin/checkout.c:1323 builtin/checkout.c:1689
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "a referência não é uma árvore: %s"
 
-#: builtin/checkout.c:1352
+#: builtin/checkout.c:1370
 #, fuzzy, c-format
 msgid "a branch is expected, got tag '%s'"
-msgstr "Não é possível eliminar o ramo '%s' extraído em '%s'"
+msgstr "esperado um ramo, recebi tag '%s'"
 
-#: builtin/checkout.c:1354
+#: builtin/checkout.c:1372
 #, fuzzy, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "Ramo %s configurado para seguir o ramo remoto %s de %s."
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1363
+#: builtin/checkout.c:1373 builtin/checkout.c:1381
 #, fuzzy, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "O ramo %s está a ser bissetado em %s"
 
-#: builtin/checkout.c:1358
+#: builtin/checkout.c:1376
 #, fuzzy, c-format
 msgid "a branch is expected, got commit '%s'"
-msgstr "O seu ramo está atualizado com '%s'.\n"
+msgstr "é suposto um branch, recebi um commit '%s'"
 
-#: builtin/checkout.c:1374
+#: builtin/checkout.c:1392
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1378
+#: builtin/checkout.c:1396
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1382
+#: builtin/checkout.c:1400
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1386
+#: builtin/checkout.c:1404
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1390
+#: builtin/checkout.c:1408
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1394
+#: builtin/checkout.c:1412
 #, fuzzy
 msgid "you are switching branch while bisecting"
 msgstr "Está a bissetar neste momento."
 
-#: builtin/checkout.c:1401
+#: builtin/checkout.c:1419
 msgid "paths cannot be used with switching branches"
 msgstr "não podem ser usados caminhos ao mudar de ramo"
 
-#: builtin/checkout.c:1404 builtin/checkout.c:1408 builtin/checkout.c:1412
+#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' não pode ser usado ao mudar de ramo"
 
-#: builtin/checkout.c:1416 builtin/checkout.c:1419 builtin/checkout.c:1422
-#: builtin/checkout.c:1427 builtin/checkout.c:1432
+#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
+#: builtin/checkout.c:1445 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' não pode ser usado com '%s'"
 
-#: builtin/checkout.c:1429
+#: builtin/checkout.c:1447
 #, fuzzy, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' não pode ser usado com caminhos em atualização"
 
-#: builtin/checkout.c:1437
+#: builtin/checkout.c:1455
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
-msgstr "Não é possível mudar de ramo para '%s', visto que não é um commit"
+msgstr "Incapaz mudar ramo para '%s', pois está fora de ser um commit"
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 #, fuzzy
 msgid "missing branch or commit argument"
 msgstr "Falta um nome dum ramo; tente -b"
 
-#: builtin/checkout.c:1486 builtin/clone.c:91 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:287
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:551
-#: builtin/send-pack.c:192
+#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
+#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
+#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
+#: builtin/send-pack.c:198
 msgid "force progress reporting"
 msgstr "forçar informação de progresso"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 msgid "perform a 3-way merge with the new branch"
 msgstr "realizar uma integração com 3 pontos com o novo ramo"
 
-#: builtin/checkout.c:1488 builtin/log.c:1795 parse-options.h:322
+#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
 msgid "style"
 msgstr "estilo"
 
-#: builtin/checkout.c:1489
+#: builtin/checkout.c:1507
 msgid "conflict style (merge or diff3)"
 msgstr "estilo de conflito (merge ou diff3)"
 
-#: builtin/checkout.c:1501 builtin/worktree.c:558
+#: builtin/checkout.c:1519 builtin/worktree.c:558
 msgid "detach HEAD at named commit"
 msgstr "destacar HEAD no commit indicado"
 
-#: builtin/checkout.c:1502
+#: builtin/checkout.c:1520
 msgid "set upstream info for new branch"
 msgstr "definir a informação do ramo a montante do novo ramo"
 
-#: builtin/checkout.c:1504
+#: builtin/checkout.c:1522
 msgid "force checkout (throw away local modifications)"
 msgstr "forçar extração (descartar modificações locais)"
 
-#: builtin/checkout.c:1506
+#: builtin/checkout.c:1524
 msgid "new-branch"
 msgstr "novo-ramo"
 
-#: builtin/checkout.c:1506
+#: builtin/checkout.c:1524
 msgid "new unparented branch"
 msgstr "novo ramo sem pai"
 
-#: builtin/checkout.c:1508 builtin/merge.c:291
+#: builtin/checkout.c:1526 builtin/merge.c:300
 msgid "update ignored files (default)"
 msgstr "atualizar ficheiros ignorados (predefinição)"
 
-#: builtin/checkout.c:1511
+#: builtin/checkout.c:1529
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "não verificar se outra árvore de trabalho contém a referência fornecida"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1542
 msgid "checkout our version for unmerged files"
 msgstr "extrair a nossa versão dos ficheiros não integrados"
 
-#: builtin/checkout.c:1527
+#: builtin/checkout.c:1545
 msgid "checkout their version for unmerged files"
 msgstr "extrair a versão deles dos ficheiros não integrados"
 
-#: builtin/checkout.c:1531
+#: builtin/checkout.c:1549
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "não restringir especificadores de caminho a entradas esparsas"
 
-#: builtin/checkout.c:1586
+#: builtin/checkout.c:1604
 #, fuzzy, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-b, -B e --orphan são mutuamente exclusivos"
 
-#: builtin/checkout.c:1590
+#: builtin/checkout.c:1608
 #, fuzzy
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-b, -B e --orphan são mutuamente exclusivos"
 
-#: builtin/checkout.c:1627
+#: builtin/checkout.c:1645
 msgid "--track needs a branch name"
 msgstr "--track requer um nome dum ramo"
 
-#: builtin/checkout.c:1632
+#: builtin/checkout.c:1650
 #, fuzzy, c-format
 msgid "missing branch name; try -%c"
 msgstr "Falta um nome dum ramo; tente -b"
 
-#: builtin/checkout.c:1664
+#: builtin/checkout.c:1682
 #, fuzzy, c-format
 msgid "could not resolve %s"
 msgstr "não foi possível remover '%s'"
 
-#: builtin/checkout.c:1680
+#: builtin/checkout.c:1698
 msgid "invalid path specification"
 msgstr "especificação de caminho inválida"
 
-#: builtin/checkout.c:1687
+#: builtin/checkout.c:1705
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 
-#: builtin/checkout.c:1691
+#: builtin/checkout.c:1709
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach não aceita um caminho como argumento '%s'"
 
-#: builtin/checkout.c:1700
+#: builtin/checkout.c:1718
 #, fuzzy
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--first-parent é incompatível com --bisect"
 
-#: builtin/checkout.c:1703 builtin/reset.c:325 builtin/stash.c:1500
+#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
 #, fuzzy
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--first-parent é incompatível com --bisect"
 
-#: builtin/checkout.c:1716
+#: builtin/checkout.c:1734
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12115,80 +12207,80 @@
 "git checkout: --ours/--theirs, --force e --merge são incompatíveis\n"
 "durante a extração do índice."
 
-#: builtin/checkout.c:1721
+#: builtin/checkout.c:1739
 #, fuzzy
 msgid "you must specify path(s) to restore"
 msgstr "Deve especificar um diretório."
 
-#: builtin/checkout.c:1747 builtin/checkout.c:1749 builtin/checkout.c:1798
-#: builtin/checkout.c:1800 builtin/clone.c:121 builtin/remote.c:170
+#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
+#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
 #: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
 #: builtin/worktree.c:556
 msgid "branch"
 msgstr "ramo"
 
-#: builtin/checkout.c:1748
+#: builtin/checkout.c:1766
 msgid "create and checkout a new branch"
 msgstr "criar e extrair um novo ramo"
 
-#: builtin/checkout.c:1750
+#: builtin/checkout.c:1768
 msgid "create/reset and checkout a branch"
 msgstr "criar/repor e extrair um ramo"
 
-#: builtin/checkout.c:1751
+#: builtin/checkout.c:1769
 msgid "create reflog for new branch"
 msgstr "criar reflog do novo ramo"
 
-#: builtin/checkout.c:1753
+#: builtin/checkout.c:1771
 #, fuzzy
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "tentar adivinhar 'git checkout <ramo-inexistente>'"
 
-#: builtin/checkout.c:1754
+#: builtin/checkout.c:1772
 #, fuzzy
 msgid "use overlay mode (default)"
 msgstr "eliminar referências soltas (predefinição)"
 
-#: builtin/checkout.c:1799
+#: builtin/checkout.c:1817
 #, fuzzy
 msgid "create and switch to a new branch"
 msgstr "criar e extrair um novo ramo"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1819
 #, fuzzy
 msgid "create/reset and switch to a branch"
 msgstr "criar/repor e extrair um ramo"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1821
 #, fuzzy
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "tentar adivinhar 'git checkout <ramo-inexistente>'"
 
-#: builtin/checkout.c:1805
+#: builtin/checkout.c:1823
 #, fuzzy
 msgid "throw away local modifications"
 msgstr "forçar extração (descartar modificações locais)"
 
-#: builtin/checkout.c:1839
+#: builtin/checkout.c:1857
 msgid "which tree-ish to checkout from"
 msgstr ""
 
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1859
 #, fuzzy
 msgid "restore the index"
 msgstr "falha ao ler o índice"
 
-#: builtin/checkout.c:1843
+#: builtin/checkout.c:1861
 #, fuzzy
 msgid "restore the working tree (default)"
 msgstr "Mostrar o estado da árvores de trabalho"
 
-#: builtin/checkout.c:1845
+#: builtin/checkout.c:1863
 #, fuzzy
 msgid "ignore unmerged entries"
-msgstr "ignorado não integrado: %s\n"
+msgstr "ignora unmerged entries"
 
-#: builtin/checkout.c:1846
+#: builtin/checkout.c:1864
 msgid "use overlay mode"
 msgstr ""
 
@@ -12226,9 +12318,9 @@
 #: builtin/clean.c:38
 #, fuzzy, c-format
 msgid "could not lstat %s\n"
-msgstr "não foi possível obter stat de %s"
+msgstr "não foi possível obter stat de %s\n"
 
-#: builtin/clean.c:302 git-add--interactive.perl:595
+#: builtin/clean.c:302 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12239,9 +12331,9 @@
 "Ajuda de linha de comandos:\n"
 "1          - selecionar um item numerado\n"
 "foo        - selecionar item baseado no prefixo único\n"
-"           - (vazio) não seleciona nada\n"
+"           - (vazio) seleciona nada\n"
 
-#: builtin/clean.c:306 git-add--interactive.perl:604
+#: builtin/clean.c:306 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12262,8 +12354,8 @@
 "*          - escolher todos os itens\n"
 "           - (vazio) concluir seleção\n"
 
-#: builtin/clean.c:521 git-add--interactive.perl:570
-#: git-add--interactive.perl:575
+#: builtin/clean.c:521 git-add--interactive.perl:568
+#: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "O quê (%s)?\n"
@@ -12314,7 +12406,7 @@
 
 #: builtin/clean.c:841
 msgid "No more files to clean, exiting."
-msgstr "Não há mais ficheiros por limpar, a terminar."
+msgstr "Mais ficheiro por limpar nenhum, saindo."
 
 #: builtin/clean.c:903
 msgid "do not print names of files removed"
@@ -12333,7 +12425,7 @@
 msgstr "remover diretórios inteiros"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:910 builtin/log.c:181 builtin/log.c:183
+#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
 #: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
 #: builtin/show-ref.c:179
 msgid "pattern"
@@ -12357,7 +12449,7 @@
 "clean"
 msgstr ""
 "clean.requireForce definido como true e nenhum -i, -n, ou -f fornecido; "
-"limpeza recusada"
+"recusando limpar"
 
 #: builtin/clean.c:932
 msgid ""
@@ -12365,7 +12457,7 @@
 "refusing to clean"
 msgstr ""
 "clean.requireForce predefinido como true e nenhum -i, -n, ou -f fornecido; "
-"limpeza recusada"
+"recusando limpar"
 
 #: builtin/clean.c:944
 msgid "-x and -X cannot be used together"
@@ -12375,206 +12467,206 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opções>] [--] <repo> [<dir>]"
 
-#: builtin/clone.c:93
+#: builtin/clone.c:94
 msgid "don't create a checkout"
 msgstr "não criar uma extração"
 
-#: builtin/clone.c:94 builtin/clone.c:96 builtin/init-db.c:553
+#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:553
 msgid "create a bare repository"
 msgstr "criar um repositório nu"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:99
 msgid "create a mirror repository (implies bare)"
 msgstr "criar um repositório espelhado (implica repositório nu)"
 
-#: builtin/clone.c:100
+#: builtin/clone.c:101
 msgid "to clone from a local repository"
 msgstr "para clonar de um repositório local"
 
-#: builtin/clone.c:102
+#: builtin/clone.c:103
 msgid "don't use local hardlinks, always copy"
 msgstr "não usar ligações fixas, copiar sempre"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:105
 msgid "setup as shared repository"
 msgstr "configurar como repositório partilhado"
 
-#: builtin/clone.c:106
+#: builtin/clone.c:107
 msgid "pathspec"
 msgstr "pathspec"
 
-#: builtin/clone.c:106
+#: builtin/clone.c:107
 msgid "initialize submodules in the clone"
 msgstr "inicializar submódulos no clone"
 
-#: builtin/clone.c:110
+#: builtin/clone.c:111
 msgid "number of submodules cloned in parallel"
 msgstr "número de submódulos clonados em paralelo"
 
-#: builtin/clone.c:111 builtin/init-db.c:550
+#: builtin/clone.c:112 builtin/init-db.c:550
 msgid "template-directory"
 msgstr "diretório-modelo"
 
-#: builtin/clone.c:112 builtin/init-db.c:551
+#: builtin/clone.c:113 builtin/init-db.c:551
 msgid "directory from which templates will be used"
 msgstr "diretório que contém os modelos usados"
 
-#: builtin/clone.c:114 builtin/clone.c:116 builtin/submodule--helper.c:1831
+#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
 #: builtin/submodule--helper.c:2336
 msgid "reference repository"
 msgstr "repositório de referência"
 
-#: builtin/clone.c:118 builtin/submodule--helper.c:1833
+#: builtin/clone.c:119 builtin/submodule--helper.c:1833
 #: builtin/submodule--helper.c:2338
 msgid "use --reference only while cloning"
 msgstr "usar --reference apenas para clonar"
 
-#: builtin/clone.c:119 builtin/column.c:27 builtin/init-db.c:561
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:332
+#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:561
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
 msgid "name"
 msgstr "nome"
 
-#: builtin/clone.c:120
+#: builtin/clone.c:121
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "usar <nome> em vez de 'origin' para seguir o ramo a montante"
 
-#: builtin/clone.c:122
+#: builtin/clone.c:123
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "extrair <ramo> em vez da HEAD do remoto"
 
-#: builtin/clone.c:124
+#: builtin/clone.c:125
 msgid "path to git-upload-pack on the remote"
 msgstr "caminho para git-upload-pack no remoto"
 
-#: builtin/clone.c:125 builtin/fetch.c:173 builtin/grep.c:849
+#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "profundidade"
 
-#: builtin/clone.c:126
+#: builtin/clone.c:127
 msgid "create a shallow clone of that depth"
 msgstr "criar um clone raso com essa profundidade"
 
-#: builtin/clone.c:127 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
 #: builtin/pull.c:211
 msgid "time"
 msgstr "hora"
 
-#: builtin/clone.c:128
+#: builtin/clone.c:129
 msgid "create a shallow clone since a specific time"
 msgstr "criar um clone raso desde uma data específica"
 
-#: builtin/clone.c:129 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1311
+#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
 msgid "revision"
 msgstr "revisão"
 
-#: builtin/clone.c:130 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "aprofundar o histórico de um clone raso, excluindo a revisão"
 
-#: builtin/clone.c:132 builtin/submodule--helper.c:1843
+#: builtin/clone.c:133 builtin/submodule--helper.c:1843
 #: builtin/submodule--helper.c:2352
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clonar apenas um ramo, HEAD ou --branch"
 
-#: builtin/clone.c:134
+#: builtin/clone.c:135
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 
-#: builtin/clone.c:136
+#: builtin/clone.c:137
 msgid "any cloned submodules will be shallow"
 msgstr "qualquer submódulo clonado será raso"
 
-#: builtin/clone.c:137 builtin/init-db.c:559
+#: builtin/clone.c:138 builtin/init-db.c:559
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:138 builtin/init-db.c:560
+#: builtin/clone.c:139 builtin/init-db.c:560
 msgid "separate git dir from working tree"
 msgstr "separar o repositório git da árvore de trabalho"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:140
 msgid "key=value"
 msgstr "chave=valor"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:141
 msgid "set config inside the new repository"
 msgstr "definir configuração dentro do novo repositório"
 
-#: builtin/clone.c:142 builtin/fetch.c:195 builtin/ls-remote.c:76
-#: builtin/pull.c:230 builtin/push.c:560 builtin/send-pack.c:190
+#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
 msgid "server-specific"
 msgstr "específico do servidor"
 
-#: builtin/clone.c:142 builtin/fetch.c:195 builtin/ls-remote.c:76
-#: builtin/pull.c:231 builtin/push.c:560 builtin/send-pack.c:191
+#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
 msgid "option to transmit"
 msgstr "opção para transmitir"
 
-#: builtin/clone.c:143 builtin/fetch.c:196 builtin/pull.c:234
-#: builtin/push.c:561
+#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "usar apenas endereços IPv4"
 
-#: builtin/clone.c:145 builtin/fetch.c:198 builtin/pull.c:237
-#: builtin/push.c:563
+#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "usar apenas endereços IPv6"
 
-#: builtin/clone.c:149
+#: builtin/clone.c:150
 #, fuzzy
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "qualquer submódulo clonado será raso"
 
-#: builtin/clone.c:151
+#: builtin/clone.c:152
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 
-#: builtin/clone.c:287
+#: builtin/clone.c:288
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
 msgstr ""
-"Não foi possível adivinhar o nome do diretório.\n"
-"Especifique um diretório na linha de comandos"
+"Incapaz adivinhar nome de pasta.\n"
+"Por favor especifique uma pasta na linha de comandos"
 
-#: builtin/clone.c:340
+#: builtin/clone.c:341
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
-msgstr "info: Não foi possível adicionar sobressalente de '%s': %s\n"
+msgstr "info: Incapaz adicionar sobressalente para '%s': %s\n"
 
-#: builtin/clone.c:413
+#: builtin/clone.c:414
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe e não é um diretório"
 
-#: builtin/clone.c:431
+#: builtin/clone.c:432
 #, fuzzy, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "falha ao escrever para '%s'"
 
-#: builtin/clone.c:462
+#: builtin/clone.c:463
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "falha ao criar a ligação '%s'"
 
-#: builtin/clone.c:466
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "falha ao copiar o ficheiro para '%s'"
 
-#: builtin/clone.c:471
+#: builtin/clone.c:472
 #, fuzzy, c-format
 msgid "failed to iterate over '%s'"
 msgstr "falha ao remover '%s'"
 
-#: builtin/clone.c:498
+#: builtin/clone.c:499
 #, c-format
 msgid "done.\n"
 msgstr "concluído.\n"
 
-#: builtin/clone.c:512
+#: builtin/clone.c:513
 #, fuzzy
 msgid ""
 "Clone succeeded, but checkout failed.\n"
@@ -12585,108 +12677,107 @@
 "Pode inspecionar o que foi extraído com 'git status'\n"
 "e repetir a extração com 'git checkout -f HEAD'\n"
 
-#: builtin/clone.c:589
+#: builtin/clone.c:590
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Ramo remoto %s não encontrado para clonar."
 
-#: builtin/clone.c:708
+#: builtin/clone.c:709
 #, c-format
 msgid "unable to update %s"
 msgstr "não foi possível atualizar %s"
 
-#: builtin/clone.c:756
+#: builtin/clone.c:757
 #, fuzzy
 msgid "failed to initialize sparse-checkout"
 msgstr "falha ao finalizar integração de notas"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:780
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
-"a HEAD remota referencia uma referência inexistente, não é possível "
-"extrair.\n"
+"remote HEAD refere-se a referência inexistente, impossível fazer checkout.\n"
 
-#: builtin/clone.c:811
+#: builtin/clone.c:812
 msgid "unable to checkout working tree"
 msgstr "não foi possível extrair a árvore de trabalho"
 
-#: builtin/clone.c:868
+#: builtin/clone.c:887
 msgid "unable to write parameters to config file"
 msgstr "não foi possível escrever os parâmetros no ficheiro de configuração"
 
-#: builtin/clone.c:931
+#: builtin/clone.c:950
 msgid "cannot repack to clean up"
 msgstr "não é possível reempacotar para limpar"
 
-#: builtin/clone.c:933
+#: builtin/clone.c:952
 msgid "cannot unlink temporary alternates file"
 msgstr ""
 "não é possível invocar unlink sobre o ficheiro sobressalente temporário"
 
-#: builtin/clone.c:970 builtin/receive-pack.c:2434
+#: builtin/clone.c:992 builtin/receive-pack.c:2493
 msgid "Too many arguments."
 msgstr "Demasiados argumentos."
 
-#: builtin/clone.c:974
+#: builtin/clone.c:996
 msgid "You must specify a repository to clone."
 msgstr "Deve especificar um repositório para clonar."
 
-#: builtin/clone.c:987
+#: builtin/clone.c:1009
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "as opções --bare e --origin %s são incompatíveis."
 
-#: builtin/clone.c:990
+#: builtin/clone.c:1012
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare e --separate-git-dir são incompatíveis."
 
-#: builtin/clone.c:1006
+#: builtin/clone.c:1025
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "o repositório '%s' não existe"
 
-#: builtin/clone.c:1010 builtin/fetch.c:1841
+#: builtin/clone.c:1029 builtin/fetch.c:1841
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "profundidade %s não é um número positivo"
 
-#: builtin/clone.c:1020
+#: builtin/clone.c:1039
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "o caminho de destino '%s' já existe e não é um diretório vazio."
 
-#: builtin/clone.c:1026
+#: builtin/clone.c:1045
 #, fuzzy, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "o caminho de destino '%s' já existe e não é um diretório vazio."
 
-#: builtin/clone.c:1040
+#: builtin/clone.c:1059
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "a árvore de trabalho '%s' já existe."
 
-#: builtin/clone.c:1055 builtin/clone.c:1076 builtin/difftool.c:271
-#: builtin/log.c:1970 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
+#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "não foi possível criar os diretórios superiores de '%s'"
 
-#: builtin/clone.c:1060
+#: builtin/clone.c:1079
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "não foi possível criar o diretório de árvore de trabalho '%s'"
 
-#: builtin/clone.c:1080
+#: builtin/clone.c:1099
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "A clonar no repositório nu '%s'...\n"
 
-#: builtin/clone.c:1082
+#: builtin/clone.c:1101
 #, c-format
 msgid "Cloning into '%s'...\n"
-msgstr "A clonar em '%s'...\n"
+msgstr "Clonando em '%s'...\n"
 
-#: builtin/clone.c:1106
+#: builtin/clone.c:1125
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -12694,37 +12785,42 @@
 "clone --recursive não é compatível com ambos --reference e --reference-if-"
 "able"
 
-#: builtin/clone.c:1170
+#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#, c-format
+msgid "'%s' is not a valid remote name"
+msgstr "'%s' não é um nome de remoto válido"
+
+#: builtin/clone.c:1210
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth é ignorado em clones locais; use file:// ."
 
-#: builtin/clone.c:1172
+#: builtin/clone.c:1212
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since é ignorado em clones locais; use file:// ."
 
-#: builtin/clone.c:1174
+#: builtin/clone.c:1214
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude é ignorado em clones locais; use file:// ."
 
-#: builtin/clone.c:1176
+#: builtin/clone.c:1216
 #, fuzzy
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--depth é ignorado em clones locais; use file:// ."
 
-#: builtin/clone.c:1179
+#: builtin/clone.c:1219
 msgid "source repository is shallow, ignoring --local"
 msgstr "o repositório de origem é raso, --local ignorado"
 
-#: builtin/clone.c:1184
+#: builtin/clone.c:1224
 msgid "--local is ignored"
 msgstr "--local ignorado"
 
-#: builtin/clone.c:1268 builtin/clone.c:1276
+#: builtin/clone.c:1308 builtin/clone.c:1316
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "O ramo remoto %s não foi encontrado no repositório a montante %s"
 
-#: builtin/clone.c:1279
+#: builtin/clone.c:1319
 msgid "You appear to have cloned an empty repository."
 msgstr "Parece foi clonado um repositório vazio."
 
@@ -12778,7 +12874,7 @@
 msgstr "não foi possível ler o objeto %s da ligação simbólica %s"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1764
+#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
 msgid "dir"
 msgstr "dir"
 
@@ -12794,7 +12890,7 @@
 #: builtin/commit-graph.c:106
 #, fuzzy, c-format
 msgid "Could not open commit-graph '%s'"
-msgstr "Não foi possível abrir o ficheiro '%s'"
+msgstr "Incapaz abrir commit-graph '%s'"
 
 #: builtin/commit-graph.c:142
 #, fuzzy, c-format
@@ -12871,7 +12967,7 @@
 msgid "duplicate parent %s ignored"
 msgstr ""
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:546
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
 #, fuzzy, c-format
 msgid "not a valid object name %s"
 msgstr "%s não é um nome de objeto válido"
@@ -12901,8 +12997,8 @@
 msgid "id of a parent commit object"
 msgstr "falha ao escrever objeto de commit"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:272
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1471
+#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
 #: builtin/tag.c:413
 msgid "message"
 msgstr "mensagem"
@@ -12916,7 +13012,7 @@
 msgid "read commit log message from file"
 msgstr "ler mensagem de um ficheiro"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:289
+#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "assinar o commit com GPG"
@@ -12958,8 +13054,8 @@
 "\n"
 msgstr ""
 "O cherry-pick anterior está vazio, possivelmente devido a resolução de "
-"conflitos.\n"
-"Se deseja submeter de qualquer forma, use:\n"
+"conflito.\n"
+"Se ainda desejas commit, usa:\n"
 "\n"
 "    git commit --allow-empty\n"
 "\n"
@@ -13068,7 +13164,7 @@
 msgid "could not lookup commit %s"
 msgstr "não foi possível consultar o commit %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:478
+#: builtin/commit.c:729 builtin/shortlog.c:425
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(a ler mensagem de log da entrada padrão)\n"
@@ -13106,8 +13202,8 @@
 "\n"
 "Parece que está a submeter uma integração.\n"
 "Se não for o caso, remova o ficheiro\n"
-"\t%s\n"
-"e tente de novo.\n"
+"\tgit update-ref -d MERGE_HEAD\n"
+"e tenta de novo.\n"
 
 #: builtin/commit.c:858
 #, fuzzy
@@ -13121,8 +13217,8 @@
 "\n"
 "Parece que está a submeter um cherry-pick.\n"
 "Se não é o caso, remova o ficheiro\n"
-"\t%s\n"
-"e tente outra vez.\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
+"e tenta de novo.\n"
 
 #: builtin/commit.c:868
 #, c-format
@@ -13162,7 +13258,7 @@
 
 #: builtin/commit.c:926
 msgid "Cannot read index"
-msgstr "Não é possível ler o índice"
+msgstr "Incapaz ler index"
 
 #: builtin/commit.c:997
 msgid "Error building trees"
@@ -13171,7 +13267,7 @@
 #: builtin/commit.c:1011 builtin/tag.c:276
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
-msgstr "Indique a mensagem usando as opções -m ou -F.\n"
+msgstr "Indique a mensagem usando apenas as opções -m ou -F.\n"
 
 #: builtin/commit.c:1055
 #, c-format
@@ -13196,11 +13292,11 @@
 
 #: builtin/commit.c:1171
 msgid "Using both --reset-author and --author does not make sense"
-msgstr "Não faz sentido usar --reset-author e --author ao mesmo tempo"
+msgstr "Usar ambos --reset-author e --author faz sentido nenhum"
 
 #: builtin/commit.c:1180
 msgid "You have nothing to amend."
-msgstr "Não há nada para emendar."
+msgstr "Tens nada para emendar."
 
 #: builtin/commit.c:1183
 msgid "You are in the middle of a merge -- cannot amend."
@@ -13263,8 +13359,8 @@
 msgid "version"
 msgstr "versão"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:539
-#: builtin/worktree.c:722
+#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
+#: builtin/worktree.c:725
 msgid "machine-readable output"
 msgstr "saída inteligível por máquina"
 
@@ -13278,7 +13374,7 @@
 
 #: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
 #: builtin/fast-export.c:1199 builtin/fast-export.c:1202
-#: builtin/fast-export.c:1205 builtin/rebase.c:1400 parse-options.h:336
+#: builtin/fast-export.c:1205 builtin/rebase.c:1406 parse-options.h:336
 msgid "mode"
 msgstr "modo"
 
@@ -13338,7 +13434,7 @@
 msgid "Commit message options"
 msgstr "Opções de mensagem de commit"
 
-#: builtin/commit.c:1501 builtin/merge.c:276 builtin/tag.c:415
+#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
 msgid "read message from file"
 msgstr "ler mensagem de um ficheiro"
 
@@ -13350,7 +13446,7 @@
 msgid "override author for commit"
 msgstr "substituir autor do commit"
 
-#: builtin/commit.c:1503 builtin/gc.c:539
+#: builtin/commit.c:1503 builtin/gc.c:542
 msgid "date"
 msgstr "data"
 
@@ -13385,9 +13481,10 @@
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "agora sou eu o autor do commit (usado com C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1741 builtin/merge.c:292
+#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
 #: builtin/pull.c:145 builtin/revert.c:110
-msgid "add Signed-off-by:"
+#, fuzzy
+msgid "add a Signed-off-by trailer"
 msgstr "adicionar Signed-off-by:"
 
 #: builtin/commit.c:1511
@@ -13489,223 +13586,233 @@
 msgid "git config [<options>]"
 msgstr "git config [<opções>]"
 
-#: builtin/config.c:107 builtin/env--helper.c:27
+#: builtin/config.c:109 builtin/env--helper.c:27
 #, fuzzy, c-format
 msgid "unrecognized --type argument, %s"
 msgstr "argumento não reconhecido: %s"
 
-#: builtin/config.c:119
+#: builtin/config.c:121
 #, fuzzy
 msgid "only one type at a time"
 msgstr "imprimir apenas correspondências exatas"
 
-#: builtin/config.c:128
+#: builtin/config.c:130
 msgid "Config file location"
 msgstr "Localização do ficheiro de configuração"
 
-#: builtin/config.c:129
+#: builtin/config.c:131
 msgid "use global config file"
 msgstr "usar ficheiro de configuração global"
 
-#: builtin/config.c:130
+#: builtin/config.c:132
 msgid "use system config file"
 msgstr "usar ficheiro de configuração do sistema"
 
-#: builtin/config.c:131
+#: builtin/config.c:133
 msgid "use repository config file"
 msgstr "usar ficheiro de configuração do repositório"
 
-#: builtin/config.c:132
+#: builtin/config.c:134
 #, fuzzy
 msgid "use per-worktree config file"
 msgstr "usar ficheiro de configuração do repositório"
 
-#: builtin/config.c:133
+#: builtin/config.c:135
 msgid "use given config file"
 msgstr "usar ficheiro de configuração fornecido"
 
-#: builtin/config.c:134
+#: builtin/config.c:136
 msgid "blob-id"
 msgstr "id-blob"
 
-#: builtin/config.c:134
+#: builtin/config.c:136
 msgid "read config from given blob object"
 msgstr "ler configuração a partir do objeto blob fornecido"
 
-#: builtin/config.c:135
+#: builtin/config.c:137
 msgid "Action"
 msgstr "Ação"
 
-#: builtin/config.c:136
-msgid "get value: name [value-regex]"
+#: builtin/config.c:138
+#, fuzzy
+msgid "get value: name [value-pattern]"
 msgstr "obter valor: nome [regex-do-valor]"
 
-#: builtin/config.c:137
-msgid "get all values: key [value-regex]"
+#: builtin/config.c:139
+#, fuzzy
+msgid "get all values: key [value-pattern]"
 msgstr "obter todos os valores: chave [regex-do-valor]"
 
-#: builtin/config.c:138
-msgid "get values for regexp: name-regex [value-regex]"
+#: builtin/config.c:140
+#, fuzzy
+msgid "get values for regexp: name-regex [value-pattern]"
 msgstr "obter valores para a regexp: regex-do-nome [regex-do-valor]"
 
-#: builtin/config.c:139
+#: builtin/config.c:141
 msgid "get value specific for the URL: section[.var] URL"
 msgstr "obter valor do URL especificado: section[.var] URL"
 
-#: builtin/config.c:140
-msgid "replace all matching variables: name value [value_regex]"
+#: builtin/config.c:142
+#, fuzzy
+msgid "replace all matching variables: name value [value-pattern]"
 msgstr ""
 "substituir todos as variáveis correspondentes: nome valor [regex-do-valor]"
 
-#: builtin/config.c:141
+#: builtin/config.c:143
 msgid "add a new variable: name value"
 msgstr "adicionar uma nova variável: nome valor"
 
-#: builtin/config.c:142
-msgid "remove a variable: name [value-regex]"
+#: builtin/config.c:144
+#, fuzzy
+msgid "remove a variable: name [value-pattern]"
 msgstr "remover uma variável: nome [regex-do-valor]"
 
-#: builtin/config.c:143
-msgid "remove all matches: name [value-regex]"
+#: builtin/config.c:145
+#, fuzzy
+msgid "remove all matches: name [value-pattern]"
 msgstr "remover todas as correspondências: nome [regex-do-valor]"
 
-#: builtin/config.c:144
+#: builtin/config.c:146
 msgid "rename section: old-name new-name"
 msgstr "mudar o nome da secção: nome-antigo novo-nome"
 
-#: builtin/config.c:145
+#: builtin/config.c:147
 msgid "remove a section: name"
 msgstr "remover uma secção: nome"
 
-#: builtin/config.c:146
+#: builtin/config.c:148
 msgid "list all"
 msgstr "listar todos"
 
-#: builtin/config.c:147
+#: builtin/config.c:149
+msgid "use string equality when comparing values to 'value-pattern'"
+msgstr ""
+
+#: builtin/config.c:150
 msgid "open an editor"
 msgstr "abrir um editor"
 
-#: builtin/config.c:148
+#: builtin/config.c:151
 msgid "find the color configured: slot [default]"
 msgstr "encontrar a cor configurada: slot [predefinição]"
 
-#: builtin/config.c:149
+#: builtin/config.c:152
 msgid "find the color setting: slot [stdout-is-tty]"
 msgstr "encontrar a definição de cor: slot [stdout-é-tty]"
 
-#: builtin/config.c:150
+#: builtin/config.c:153
 msgid "Type"
 msgstr "Tipo"
 
-#: builtin/config.c:151 builtin/env--helper.c:43
+#: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr ""
 
-#: builtin/config.c:152
+#: builtin/config.c:155
 msgid "value is \"true\" or \"false\""
 msgstr "o valor é \"true\" (verdadeiro) ou \"false\" (falso)"
 
-#: builtin/config.c:153
+#: builtin/config.c:156
 msgid "value is decimal number"
 msgstr "o valor é um número decimal"
 
-#: builtin/config.c:154
+#: builtin/config.c:157
 msgid "value is --bool or --int"
 msgstr "o valor é --bool ou --int"
 
-#: builtin/config.c:155
+#: builtin/config.c:158
 #, fuzzy
 msgid "value is --bool or string"
 msgstr "o valor é --bool ou --int"
 
-#: builtin/config.c:156
+#: builtin/config.c:159
 msgid "value is a path (file or directory name)"
 msgstr "o valor é um caminho (nome dum ficheiro ou diretório)"
 
-#: builtin/config.c:157
+#: builtin/config.c:160
 msgid "value is an expiry date"
 msgstr ""
 
-#: builtin/config.c:158
+#: builtin/config.c:161
 msgid "Other"
 msgstr "Outro"
 
-#: builtin/config.c:159
+#: builtin/config.c:162
 msgid "terminate values with NUL byte"
 msgstr "terminar valores com o byte NUL"
 
-#: builtin/config.c:160
+#: builtin/config.c:163
 msgid "show variable names only"
 msgstr "mostrar apenas os nomes das variáveis"
 
-#: builtin/config.c:161
+#: builtin/config.c:164
 msgid "respect include directives on lookup"
 msgstr "respeitar diretivas de inclusão ao pesquisar"
 
-#: builtin/config.c:162
+#: builtin/config.c:165
 msgid "show origin of config (file, standard input, blob, command line)"
 msgstr ""
 "mostrar a origem da configuração (ficheiro, entrada padrão, blob, linha de "
 "comandos)"
 
-#: builtin/config.c:163
+#: builtin/config.c:166
 msgid "show scope of config (worktree, local, global, system, command)"
 msgstr ""
 
-#: builtin/config.c:164 builtin/env--helper.c:45
+#: builtin/config.c:167 builtin/env--helper.c:45
 #, fuzzy
 msgid "value"
 msgstr "chave=valor"
 
-#: builtin/config.c:164
+#: builtin/config.c:167
 msgid "with --get, use default value when missing entry"
 msgstr ""
 
-#: builtin/config.c:178
+#: builtin/config.c:181
 #, c-format
 msgid "wrong number of arguments, should be %d"
 msgstr ""
 
-#: builtin/config.c:180
+#: builtin/config.c:183
 #, c-format
 msgid "wrong number of arguments, should be from %d to %d"
 msgstr ""
 
-#: builtin/config.c:334
+#: builtin/config.c:339
 #, fuzzy, c-format
 msgid "invalid key pattern: %s"
 msgstr "chave inválida: %s"
 
-#: builtin/config.c:370
+#: builtin/config.c:377
 #, fuzzy, c-format
 msgid "failed to format default config value: %s"
 msgstr "falha ao criar o ficheiro %s"
 
-#: builtin/config.c:434
+#: builtin/config.c:441
 #, fuzzy, c-format
 msgid "cannot parse color '%s'"
 msgstr "não é possível abrir o ficheiro '%s'"
 
-#: builtin/config.c:476
+#: builtin/config.c:483
 msgid "unable to parse default color value"
 msgstr "não é possível analisar o valor de cor por omissão"
 
-#: builtin/config.c:529 builtin/config.c:789
+#: builtin/config.c:536 builtin/config.c:833
 #, fuzzy
 msgid "not in a git directory"
-msgstr "Não é um repositório git"
+msgstr "está fora de pasta git"
 
-#: builtin/config.c:532
+#: builtin/config.c:539
 #, fuzzy
 msgid "writing to stdin is not supported"
-msgstr "Não é suportada profundidade negativa em --deepen"
+msgstr "escrever para stdin tem suporte nenhum"
 
-#: builtin/config.c:535
+#: builtin/config.c:542
 #, fuzzy
 msgid "writing config blobs is not supported"
-msgstr "aviso: sendmail alias com aspas não é suportado: %s\n"
+msgstr "escrever config blobs tem suporte nenhum"
 
-#: builtin/config.c:620
+#: builtin/config.c:627
 #, c-format
 msgid ""
 "# This is Git's per-user configuration file.\n"
@@ -13720,93 +13827,97 @@
 "#\tname = %s\n"
 "#\temail = %s\n"
 
-#: builtin/config.c:644
+#: builtin/config.c:652
 msgid "only one config file at a time"
 msgstr ""
 
-#: builtin/config.c:650
+#: builtin/config.c:658
 #, fuzzy
 msgid "--local can only be used inside a git repository"
 msgstr "--cached fora de um repositório"
 
-#: builtin/config.c:652
+#: builtin/config.c:660
 #, fuzzy
 msgid "--blob can only be used inside a git repository"
 msgstr "--cached fora de um repositório"
 
-#: builtin/config.c:654
+#: builtin/config.c:662
 #, fuzzy
 msgid "--worktree can only be used inside a git repository"
 msgstr "'%s' não é reconhecido como um repositório git"
 
-#: builtin/config.c:676
+#: builtin/config.c:684
 msgid "$HOME not set"
 msgstr ""
 
-#: builtin/config.c:700
+#: builtin/config.c:708
 msgid ""
 "--worktree cannot be used with multiple working trees unless the config\n"
 "extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
 "section in \"git help worktree\" for details"
 msgstr ""
 
-#: builtin/config.c:735
+#: builtin/config.c:743
 msgid "--get-color and variable type are incoherent"
 msgstr ""
 
-#: builtin/config.c:740
+#: builtin/config.c:748
 msgid "only one action at a time"
 msgstr ""
 
-#: builtin/config.c:753
+#: builtin/config.c:761
 msgid "--name-only is only applicable to --list or --get-regexp"
 msgstr ""
 
-#: builtin/config.c:759
+#: builtin/config.c:767
 msgid ""
 "--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
 "list"
 msgstr ""
 
-#: builtin/config.c:765
+#: builtin/config.c:773
 msgid "--default is only applicable to --get"
 msgstr ""
 
-#: builtin/config.c:778
+#: builtin/config.c:806
+msgid "--fixed-value only applies with 'value-pattern'"
+msgstr ""
+
+#: builtin/config.c:822
 #, fuzzy, c-format
 msgid "unable to read config file '%s'"
 msgstr "não é possível ler o ficheiro de assinatura '%s'"
 
-#: builtin/config.c:781
+#: builtin/config.c:825
 #, fuzzy
 msgid "error processing config file(s)"
 msgstr "usar ficheiro de configuração do repositório"
 
-#: builtin/config.c:791
+#: builtin/config.c:835
 #, fuzzy
 msgid "editing stdin is not supported"
-msgstr "Não é suportada profundidade negativa em --deepen"
+msgstr "editar stdin tem suporte nenhum"
 
-#: builtin/config.c:793
+#: builtin/config.c:837
 #, fuzzy
 msgid "editing blobs is not supported"
-msgstr "Não é suportada profundidade negativa em --deepen"
+msgstr "editar blobs tem suporte nenhum"
 
-#: builtin/config.c:807
+#: builtin/config.c:851
 #, c-format
 msgid "cannot create configuration file %s"
 msgstr "não é possível criar o ficheiro de configuração %s"
 
-#: builtin/config.c:820
+#: builtin/config.c:864
 #, c-format
 msgid ""
 "cannot overwrite multiple values with a single value\n"
 "       Use a regexp, --add or --replace-all to change %s."
 msgstr ""
 "não é possível substituir múltiplos valores por um único valor\n"
-"\tUse uma regexp, --add ou --replace-all para alterar %s."
+"       Usa uma regexp, --add ou --replace-all para alterar %s."
 
-#: builtin/config.c:894 builtin/config.c:905
+#: builtin/config.c:943 builtin/config.c:954
 #, fuzzy, c-format
 msgid "no such section: %s"
 msgstr "referência inexistente %s"
@@ -13845,6 +13956,11 @@
 msgid "credential-cache unavailable; no unix socket support"
 msgstr ""
 
+#: builtin/credential-store.c:66
+#, fuzzy, c-format
+msgid "unable to get credential storage lock in %d ms"
+msgstr "não é possível de obter o diretório de trabalho atual"
+
 #: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<opções>] [<commit-etc>...]"
@@ -13878,7 +13994,7 @@
 #: builtin/describe.c:328
 #, c-format
 msgid "no tag exactly matches '%s'"
-msgstr "nenhuma tag corresponde exatamente a '%s'"
+msgstr "tag nenhuma corresponde exatamente a '%s'"
 
 #: builtin/describe.c:330
 #, c-format
@@ -13896,8 +14012,8 @@
 "No annotated tags can describe '%s'.\n"
 "However, there were unannotated tags: try --tags."
 msgstr ""
-"Não é possível usar tags anotadas para descrever '%s'.\n"
-"No entanto, é possível com tags não anotadas: tente --tags."
+"'%s' pode ser descrição de tag anotada nenhuma.\n"
+"No entanto, houve fora das tags anotadas: tenta --tags."
 
 #: builtin/describe.c:428
 #, c-format
@@ -13905,8 +14021,8 @@
 "No tags can describe '%s'.\n"
 "Try --always, or create some tags."
 msgstr ""
-"Não é possível usar tags para descrever '%s'.\n"
-"Tente --always, ou crie algumas tags."
+"'%s' pode ser descrição de tag nenhuma.\n"
+"Tenta --always, ou cria algumas tags."
 
 #: builtin/describe.c:458
 #, c-format
@@ -14013,41 +14129,50 @@
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken é incompatível com commits ou semelhantes"
 
+#: builtin/diff-tree.c:155
+#, fuzzy
+msgid "--stdin and --merge-base are mutually exclusive"
+msgstr "-b, -B e --orphan são mutuamente exclusivos"
+
+#: builtin/diff-tree.c:157
+msgid "--merge-base only works with two commits"
+msgstr ""
+
 #: builtin/diff.c:91
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s': não é um ficheiro regular nem uma ligação simbólica"
 
-#: builtin/diff.c:241
+#: builtin/diff.c:258
 #, c-format
 msgid "invalid option: %s"
 msgstr "opção inválida: %s"
 
-#: builtin/diff.c:358
+#: builtin/diff.c:375
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr ""
 
-#: builtin/diff.c:468
+#: builtin/diff.c:485
 msgid "Not a git repository"
-msgstr "Não é um repositório git"
+msgstr "É repositório git nenhum"
 
-#: builtin/diff.c:513
+#: builtin/diff.c:530 builtin/grep.c:681
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objeto inválido '%s' fornecido."
 
-#: builtin/diff.c:524
+#: builtin/diff.c:541
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "mais do que dois blobs fornecidos: '%s'"
 
-#: builtin/diff.c:529
+#: builtin/diff.c:546
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "objeto sem tratamento '%s' fornecido."
 
-#: builtin/diff.c:563
+#: builtin/diff.c:580
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr ""
@@ -14076,7 +14201,7 @@
 msgid "could not read object %s for symlink %s"
 msgstr "não foi possível ler o objeto %s da ligação simbólica %s"
 
-#: builtin/difftool.c:413
+#: builtin/difftool.c:412
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14084,55 +14209,55 @@
 "formatos diff combinado('-c' e '--cc') não são suportados em\n"
 "modo diff diretório ('-d' e '--dir-diff')."
 
-#: builtin/difftool.c:634
+#: builtin/difftool.c:633
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "ambos os ficheiros modificados: '%s' e '%s'."
 
-#: builtin/difftool.c:636
+#: builtin/difftool.c:635
 msgid "working tree file has been left."
 msgstr "ficheiro de árvore de trabalho foi deixado."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:646
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "existem ficheiros temporários em '%s'."
 
-#: builtin/difftool.c:648
+#: builtin/difftool.c:647
 msgid "you may want to cleanup or recover these."
 msgstr "pode querer limpar ou recuperá-los."
 
-#: builtin/difftool.c:697
+#: builtin/difftool.c:696
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "use 'diff.guitool' em vez de 'diff.tool'"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:698
 msgid "perform a full-directory diff"
 msgstr "efetuar diff diretório completo"
 
-#: builtin/difftool.c:701
+#: builtin/difftool.c:700
 msgid "do not prompt before launching a diff tool"
 msgstr "não perguntar antes de lançar uma ferramenta diff"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:705
 msgid "use symlinks in dir-diff mode"
 msgstr "usar symlinks no modi dir-diff"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:706
 #, fuzzy
 msgid "tool"
 msgstr "<ferramenta>"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:707
 msgid "use the specified diff tool"
 msgstr "usar a ferramenta diff especificada"
 
-#: builtin/difftool.c:710
+#: builtin/difftool.c:709
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "imprimir uma lista de ferramentas diff que podem ser usadas com '--tool'"
 
-#: builtin/difftool.c:713
+#: builtin/difftool.c:712
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -14140,35 +14265,35 @@
 "fazer com que 'git-difftool' termine quando uma ferramenta diff invocada "
 "retorna um código de saída não nulo"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:715
 msgid "specify a custom command for viewing diffs"
 msgstr "especificar um comando personalizado para ver diffs"
 
-#: builtin/difftool.c:717
+#: builtin/difftool.c:716
 msgid "passed to `diff`"
 msgstr ""
 
-#: builtin/difftool.c:732
+#: builtin/difftool.c:731
 msgid "difftool requires worktree or --no-index"
 msgstr ""
 
-#: builtin/difftool.c:739
+#: builtin/difftool.c:738
 #, fuzzy
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dirty é incompatível com commits ou semelhantes"
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:741
 #, fuzzy
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "-b, -B e --detach são mutuamente exclusivos"
 
-#: builtin/difftool.c:750
+#: builtin/difftool.c:749
 msgid "no <tool> given for --tool=<tool>"
-msgstr "nenhuma <ferramenta> dada a --tool=<ferramenta>"
+msgstr "<ferramenta> nenhuma dada a --tool=<ferramenta>"
 
-#: builtin/difftool.c:757
+#: builtin/difftool.c:756
 msgid "no <cmd> given for --extcmd=<cmd>"
-msgstr "nenhum <cmd> dado a --extcmd=<cmd>"
+msgstr "<cmd> nenhum dado a --extcmd=<cmd>"
 
 #: builtin/env--helper.c:6
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
@@ -14256,7 +14381,7 @@
 msgid "Skip output of blob data"
 msgstr "Ignorar a exibição de dados de blob"
 
-#: builtin/fast-export.c:1223 builtin/log.c:1811
+#: builtin/fast-export.c:1223 builtin/log.c:1816
 msgid "refspec"
 msgstr "especificador de referência"
 
@@ -14297,31 +14422,31 @@
 msgid "Cannot pass both --import-marks and --import-marks-if-exists"
 msgstr ""
 
-#: builtin/fast-import.c:3086
+#: builtin/fast-import.c:3088
 #, fuzzy, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "A ignorar submódulo '%s'"
 
-#: builtin/fast-import.c:3088
+#: builtin/fast-import.c:3090
 #, fuzzy, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "A ignorar submódulo '%s'"
 
-#: builtin/fast-import.c:3223
+#: builtin/fast-import.c:3225
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr ""
 
-#: builtin/fast-import.c:3228
+#: builtin/fast-import.c:3230
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr ""
 
-#: builtin/fast-import.c:3320
+#: builtin/fast-import.c:3322
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr ""
 
-#: builtin/fast-import.c:3374
+#: builtin/fast-import.c:3377
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
@@ -14591,7 +14716,7 @@
 msgid "[deleted]"
 msgstr "[eliminado]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1113
+#: builtin/fetch.c:1195 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(nenhum)"
 
@@ -14644,12 +14769,12 @@
 #: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
-msgstr "Não foi possível obter de %s"
+msgstr "Incapaz buscar %s"
 
 #: builtin/fetch.c:1620
 #, fuzzy, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
-msgstr "não foi possível definir '%s' como '%s'"
+msgstr "fetch '%s' impossível (exit code: %d)\n"
 
 #: builtin/fetch.c:1724
 msgid ""
@@ -14665,7 +14790,7 @@
 
 #: builtin/fetch.c:1825
 msgid "Negative depth in --deepen is not supported"
-msgstr "Não é suportada profundidade negativa em --deepen"
+msgstr "Profundidade negativa em --deepen tem suporte nenhum"
 
 #: builtin/fetch.c:1827
 msgid "--deepen and --depth are mutually exclusive"
@@ -14694,7 +14819,7 @@
 
 #: builtin/fetch.c:1869
 msgid "Fetching a group and specifying refspecs does not make sense"
-msgstr "Não faz sentido obter um grupo e especificar uma referência"
+msgstr "Buscar um grupo e especificar refspecs faz sentido nenhum"
 
 #: builtin/fetch.c:1887
 msgid ""
@@ -14799,6 +14924,22 @@
 msgid "print only refs which don't contain the commit"
 msgstr "imprimir apenas referências que não contenham o commit"
 
+#: builtin/for-each-repo.c:9
+msgid "git for-each-repo --config=<config> <command-args>"
+msgstr ""
+
+#: builtin/for-each-repo.c:37
+msgid "config"
+msgstr ""
+
+#: builtin/for-each-repo.c:38
+msgid "config key storing a list of repository paths"
+msgstr ""
+
+#: builtin/for-each-repo.c:46
+msgid "missing --config=<config>"
+msgstr ""
+
 #: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
 #, fuzzy
 msgid "unknown"
@@ -14846,7 +14987,7 @@
 #: builtin/fsck.c:330
 #, fuzzy, c-format
 msgid "dangling %s %s"
-msgstr "A atualizar %s..%s\n"
+msgstr "balanceando %s %s"
 
 #: builtin/fsck.c:340
 #, fuzzy
@@ -14900,7 +15041,7 @@
 #: builtin/fsck.c:515
 #, fuzzy, c-format
 msgid "Checking reflog %s->%s"
-msgstr "A verificar a mudança de nome de '%s' para '%s'\n"
+msgstr "Verificando reflog %s->%s"
 
 #: builtin/fsck.c:549
 #, fuzzy, c-format
@@ -15046,31 +15187,31 @@
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "parâmetro inválido na mágica 'prefix' do especificador de caminho"
 
-#: builtin/gc.c:36
+#: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<opções>]"
 
-#: builtin/gc.c:91
+#: builtin/gc.c:94
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "falha ao invocar fstat sobre %s: %s"
 
-#: builtin/gc.c:127
+#: builtin/gc.c:130
 #, fuzzy, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "falha ao abrir '%s': %s"
 
-#: builtin/gc.c:476 builtin/init-db.c:58
+#: builtin/gc.c:479 builtin/init-db.c:58
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "não é possível invocar stat sobre '%s'"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
 #, c-format
 msgid "cannot read '%s'"
 msgstr "não é possível ler '%s'"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:495
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15085,54 +15226,53 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:543
 msgid "prune unreferenced objects"
 msgstr "eliminar ficheiros não referenciados"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:545
 msgid "be more thorough (increased runtime)"
 msgstr "ser mais minucioso (aumenta o tempo de execução)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:546
 msgid "enable auto-gc mode"
 msgstr "ativar modo auto-gc"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:549
 msgid "force running gc even if there may be another gc running"
 msgstr "forçar a execução do gc mesmo que haja outro gc a executar"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:552
 msgid "repack all other packs except the largest pack"
 msgstr ""
 
-#: builtin/gc.c:566
+#: builtin/gc.c:569
 #, fuzzy, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "falha ao analisar o valor %s de gc.logexpiry"
 
-#: builtin/gc.c:577
+#: builtin/gc.c:580
 #, fuzzy, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "falha ao analisar o valor %s de gc.logexpiry"
 
-#: builtin/gc.c:597
+#: builtin/gc.c:600
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
-"A autocompactar o repositório em segundo plano para obter um melhor "
-"desempenho.\n"
+"Autocompactando o repositório para desempenho ótimizado, em segundo plano.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:602
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
-msgstr "A autocompactar o repositório para obter um melhor desempenho.\n"
+msgstr "Autocompactando o repositório para desempenho ótimizado.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:603
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
-msgstr "Consulte \"git help gc\" para ler sobre manutenção manual.\n"
+msgstr "Vê \"git help gc\" para manual de manutenção.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:643
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15140,65 +15280,152 @@
 "gc já a executar na máquina '%s' pid %<PRIuMAX> (use --force se não for o "
 "caso)"
 
-#: builtin/gc.c:695
+#: builtin/gc.c:698
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Existem demasiados objeto soltos inalcançáveis; execute 'git prune' para os "
 "remover."
 
-#: builtin/gc.c:705
-msgid "git maintenance run [--auto] [--[no-]quiet] [--task=<task>]"
+#: builtin/gc.c:708
+msgid ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 
-#: builtin/gc.c:812
+#: builtin/gc.c:738
+msgid "--no-schedule is not allowed"
+msgstr ""
+
+#: builtin/gc.c:743
+#, fuzzy, c-format
+msgid "unrecognized --schedule argument '%s'"
+msgstr "argumento não reconhecido: %s"
+
+#: builtin/gc.c:862
 #, fuzzy
 msgid "failed to write commit-graph"
 msgstr "falha ao escrever objeto de commit"
 
-#: builtin/gc.c:905
+#: builtin/gc.c:901
+#, fuzzy
+msgid "failed to fill remotes"
+msgstr "falha ao remover %s"
+
+#: builtin/gc.c:1024
+#, fuzzy
+msgid "failed to start 'git pack-objects' process"
+msgstr "começar processo 'git pack-objects' falhou"
+
+#: builtin/gc.c:1041
+#, fuzzy
+msgid "failed to finish 'git pack-objects' process"
+msgstr "terminar processo 'git pack-objects' falhou"
+
+#: builtin/gc.c:1093
+#, fuzzy
+msgid "failed to write multi-pack-index"
+msgstr "falha ao limpar o índice"
+
+#: builtin/gc.c:1111
+msgid "'git multi-pack-index expire' failed"
+msgstr ""
+
+#: builtin/gc.c:1172
+#, fuzzy
+msgid "'git multi-pack-index repack' failed"
+msgstr "falha ao ler o ficheiro de comando '%s'"
+
+#: builtin/gc.c:1181
+msgid ""
+"skipping incremental-repack task because core.multiPackIndex is disabled"
+msgstr ""
+
+#: builtin/gc.c:1279
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr ""
 
-#: builtin/gc.c:932
+#: builtin/gc.c:1309
 #, fuzzy, c-format
 msgid "task '%s' failed"
 msgstr "falha ao mudar o nome de '%s'"
 
-#: builtin/gc.c:979
+#: builtin/gc.c:1389
 #, fuzzy, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' não é uma referência válida."
 
-#: builtin/gc.c:984
+#: builtin/gc.c:1394
 #, fuzzy, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "'%s' não pode ser usado com %s"
 
-#: builtin/gc.c:999
+#: builtin/gc.c:1409
 msgid "run tasks based on the state of the repository"
 msgstr ""
 
-#: builtin/gc.c:1001
+#: builtin/gc.c:1410
+msgid "frequency"
+msgstr ""
+
+#: builtin/gc.c:1411
+msgid "run tasks based on frequency"
+msgstr ""
+
+#: builtin/gc.c:1414
 msgid "do not report progress or other information over stderr"
 msgstr ""
 
-#: builtin/gc.c:1002
+#: builtin/gc.c:1415
 msgid "task"
 msgstr ""
 
-#: builtin/gc.c:1003
+#: builtin/gc.c:1416
 #, fuzzy
 msgid "run a specific task"
-msgstr "nenhum caminho especificado"
+msgstr "corre uma tarefa específica"
 
-#: builtin/gc.c:1026
+#: builtin/gc.c:1433
+msgid "use at most one of --auto and --schedule=<frequency>"
+msgstr ""
+
+#: builtin/gc.c:1467
 #, fuzzy
-msgid "git maintenance run [<options>]"
+msgid "failed to run 'git config'"
+msgstr "falha ao escrever para '%s'"
+
+#: builtin/gc.c:1512
+msgid "another process is scheduling background maintenance"
+msgstr ""
+
+#: builtin/gc.c:1525
+msgid "failed to run 'crontab -l'; your system might not support 'cron'"
+msgstr ""
+
+#: builtin/gc.c:1544
+msgid "failed to run 'crontab'; your system might not support 'cron'"
+msgstr ""
+
+#: builtin/gc.c:1550
+#, fuzzy
+msgid "failed to open stdin of 'crontab'"
+msgstr "falha ao abrir '%s'"
+
+#: builtin/gc.c:1592
+msgid "'crontab' died"
+msgstr ""
+
+#: builtin/gc.c:1605
+#, fuzzy
+msgid "failed to add repo to global config"
+msgstr "falha ao ler o ficheiro de comando '%s'"
+
+#: builtin/gc.c:1615
+#, fuzzy
+msgid "git maintenance <subcommand> [<options>]"
 msgstr "git notes prune [<opções>]"
 
-#: builtin/gc.c:1037
+#: builtin/gc.c:1634
 #, fuzzy, c-format
 msgid "invalid subcommand: %s"
 msgstr "commit inválido %s"
@@ -15237,255 +15464,255 @@
 msgid "unable to grep from object of type %s"
 msgstr "não foi possível efetuar grep de objetos do tipo %s"
 
-#: builtin/grep.c:725
+#: builtin/grep.c:736
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "a opção '%c' espera um valor numérico"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:835
 msgid "search in index instead of in the work tree"
 msgstr "procurar no índice em vez de procurar na árvore de trabalho"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:837
 msgid "find in contents not managed by git"
 msgstr "procurar em conteúdos não geridos pelo git"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:839
 msgid "search in both tracked and untracked files"
 msgstr "procurar em ficheiros controlados e não controlados"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:841
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorar ficheiros especificados via '.gitignore'"
 
-#: builtin/grep.c:832
+#: builtin/grep.c:843
 msgid "recursively search in each submodule"
 msgstr "procurar recursivamente em cada submódulo"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:846
 msgid "show non-matching lines"
 msgstr "mostrar linhas não correspondidas"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:848
 msgid "case insensitive matching"
 msgstr "não diferenciar maiúsculas de minúsculas"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:850
 msgid "match patterns only at word boundaries"
 msgstr "corresponder padrões apenas a palavras"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:852
 msgid "process binary files as text"
 msgstr "processar ficheiros binários como texto"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:854
 msgid "don't match patterns in binary files"
 msgstr "ignorar ficheiros binários"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:857
 msgid "process binary files with textconv filters"
 msgstr "processar ficheiros binários com filtros textconv"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:859
 #, fuzzy
 msgid "search in subdirectories (default)"
 msgstr "eliminar referências soltas (predefinição)"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:861
 msgid "descend at most <depth> levels"
 msgstr "descer no máximo até <profundidade>"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:865
 msgid "use extended POSIX regular expressions"
 msgstr "usar expressões regulares estendidas do POSIX"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:868
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usar expressões regulares básicas do POSIX (predefinição)"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:871
 msgid "interpret patterns as fixed strings"
 msgstr "interpretar padrões como cadeias de caracteres fixas"
 
-#: builtin/grep.c:863
+#: builtin/grep.c:874
 msgid "use Perl-compatible regular expressions"
 msgstr "usar expressões regulares compatíveis com Perl"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:877
 msgid "show line numbers"
 msgstr "mostrar números de linha"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:878
 #, fuzzy
 msgid "show column number of first match"
 msgstr "mostrar apenas nomes de ficheiro sem correspondência"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:879
 msgid "don't show filenames"
 msgstr "não mostrar nomes de ficheiro"
 
-#: builtin/grep.c:869
+#: builtin/grep.c:880
 msgid "show filenames"
 msgstr "mostrar nomes de ficheiro"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:882
 msgid "show filenames relative to top directory"
 msgstr "mostrar nomes de ficheiro relativamente ao diretório superior"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:884
 msgid "show only filenames instead of matching lines"
 msgstr "mostrar apenas nomes de ficheiro em vez de linhas correspondidas"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:886
 msgid "synonym for --files-with-matches"
 msgstr "sinónimo de --files-with-matches"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:889
 msgid "show only the names of files without match"
 msgstr "mostrar apenas nomes de ficheiro sem correspondência"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:891
 msgid "print NUL after filenames"
 msgstr "imprimir NUL depois dos nomes de ficheiro"
 
-#: builtin/grep.c:883
+#: builtin/grep.c:894
 #, fuzzy
 msgid "show only matching parts of a line"
 msgstr "mostrar linhas não correspondidas"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:896
 msgid "show the number of matches instead of matching lines"
 msgstr "mostrar o número de correspondências em vez das linha correspondidas"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:897
 msgid "highlight matches"
 msgstr "realçar correspondências"
 
-#: builtin/grep.c:888
+#: builtin/grep.c:899
 msgid "print empty line between matches from different files"
 msgstr ""
 "imprimir uma linha em branco entre correspondências de diferentes ficheiros"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:901
 msgid "show filename only once above matches from same file"
 msgstr ""
 "mostrar só uma vez o nome do ficheiro acima das correspondências dentro do "
 "mesmo ficheiro"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:904
 msgid "show <n> context lines before and after matches"
 msgstr "mostrar <n> linhas de contexto antes e depois das correspondências"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:907
 msgid "show <n> context lines before matches"
 msgstr "mostrar <n> linhas de contexto antes das correspondências"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:909
 msgid "show <n> context lines after matches"
 msgstr "mostrar <n> linhas de contexto depois das correspondências"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:911
 msgid "use <n> worker threads"
 msgstr "usar <n> threads de trabalho"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:912
 msgid "shortcut for -C NUM"
 msgstr "atalho para -C NUM"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:915
 msgid "show a line with the function name before matches"
 msgstr "mostrar uma linha com o nome da função antes das correspondências"
 
-#: builtin/grep.c:906
+#: builtin/grep.c:917
 msgid "show the surrounding function"
 msgstr "mostrar a função circundante"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:920
 msgid "read patterns from file"
 msgstr "ler padrões do ficheiro"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:922
 msgid "match <pattern>"
 msgstr "procurar <padrão>"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:924
 msgid "combine patterns specified with -e"
 msgstr "combinar padrões especificados com -e"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:936
 msgid "indicate hit with exit status without output"
 msgstr "indicar padrão encontrado no valor de saída, mas não imprimir"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:938
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "mostrar apenas correspondências de ficheiro que tenham todos os padrões"
 
-#: builtin/grep.c:929
+#: builtin/grep.c:940
 msgid "show parse tree for grep expression"
 msgstr "mostrar árvore de analise da expressões grep"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:944
 msgid "pager"
 msgstr "paginador"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:944
 msgid "show matching files in the pager"
 msgstr "mostrar ficheiros com correspondências no paginador"
 
-#: builtin/grep.c:937
+#: builtin/grep.c:948
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permitir invocar grep(1) (ignorado nesta compilação)"
 
-#: builtin/grep.c:1004
+#: builtin/grep.c:1014
 #, fuzzy
 msgid "no pattern given"
-msgstr "nenhum padrão fornecido."
+msgstr "fornecido pattern nenhum"
 
-#: builtin/grep.c:1040
+#: builtin/grep.c:1050
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index ou --untracked não podem ser usados em revisões"
 
-#: builtin/grep.c:1048
+#: builtin/grep.c:1058
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "não foi possível resolver revisão: %s"
 
-#: builtin/grep.c:1078
+#: builtin/grep.c:1088
 #, fuzzy
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "opção não suportada com --recurse-submodules."
 
-#: builtin/grep.c:1082
+#: builtin/grep.c:1092
 msgid "invalid option combination, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1085 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3655
 #, fuzzy
 msgid "no threads support, ignoring --threads"
 msgstr "sem suporte de threads, %s ignorado"
 
-#: builtin/grep.c:1088 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "número de threads especificado inválido (%d)"
 
-#: builtin/grep.c:1122
+#: builtin/grep.c:1132
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager só funciona na árvore de trabalho"
 
-#: builtin/grep.c:1148
+#: builtin/grep.c:1158
 #, fuzzy
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached ou --untracked não podem ser usados com --no-index."
 
-#: builtin/grep.c:1154
+#: builtin/grep.c:1164
 #, fuzzy
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "--[no-]exclude-standard não podem ser usados em conteúdos não controlados."
 
-#: builtin/grep.c:1162
+#: builtin/grep.c:1172
 #, fuzzy
 msgid "both --cached and trees are given"
 msgstr "--cached e árvores foram fornecidos simultaneamente."
@@ -15605,8 +15832,8 @@
 "'%s': cmd for supported man viewer.\n"
 "Please consider using 'man.<tool>.path' instead."
 msgstr ""
-"'%s': comando de visualizador de manual suportado.\n"
-"Considere usar 'man.<ferramenta>.path'."
+"'%s': comando para visualizador de man.\n"
+"Considera usar 'man.<ferramenta>.path' invés."
 
 #: builtin/help.c:436
 #, c-format
@@ -15615,11 +15842,11 @@
 
 #: builtin/help.c:453
 msgid "no man viewer handled the request"
-msgstr "nenhum visualizador de manual atendeu o pedido"
+msgstr "atendeu ao pedido visualizador de man nenhum"
 
 #: builtin/help.c:461
 msgid "no info viewer handled the request"
-msgstr "nenhum visualizador de info atendeu o pedido"
+msgstr "atendeu ao pedido visualizador de info nenhum"
 
 #: builtin/help.c:520 builtin/help.c:531 git.c:337
 #, fuzzy, c-format
@@ -15682,7 +15909,7 @@
 msgid "pack exceeds maximum allowed size"
 msgstr "o pacote excede o tamanho máximo permitido"
 
-#: builtin/index-pack.c:342 builtin/repack.c:254
+#: builtin/index-pack.c:342 builtin/repack.c:286
 #, c-format
 msgid "unable to create '%s'"
 msgstr "não foi possível criar '%s'"
@@ -15881,12 +16108,12 @@
 #: builtin/index-pack.c:1631
 #, c-format
 msgid "Cannot open existing pack file '%s'"
-msgstr "Não é possível abrir o ficheiro de pacote '%s' existente"
+msgstr "Incapaz abrir ficheiro pack existente '%s'"
 
 #: builtin/index-pack.c:1633
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
-msgstr "Não é possível abrir o ficheiro de índice do pacote existente de '%s'"
+msgstr "Incapaz abrir ficheiro idx existente para '%s'"
 
 #: builtin/index-pack.c:1681
 #, c-format
@@ -15904,13 +16131,13 @@
 
 #: builtin/index-pack.c:1728
 msgid "Cannot come back to cwd"
-msgstr "Não é possível voltar ao diretório de trabalho atual"
+msgstr "Incapaz voltar a cwd"
 
 #: builtin/index-pack.c:1777 builtin/index-pack.c:1780
 #: builtin/index-pack.c:1796 builtin/index-pack.c:1800
 #, c-format
 msgid "bad %s"
-msgstr "%s incorreto"
+msgstr "mau %s"
 
 #: builtin/index-pack.c:1806 builtin/init-db.c:391 builtin/init-db.c:623
 #, fuzzy, c-format
@@ -16011,22 +16238,22 @@
 #: builtin/init-db.c:474
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
-msgstr "Repositório Git partilhado e existente reinicializado em %s%s\n"
+msgstr "Reiniciei respositório partilhado existente de Git em %s%s\n"
 
 #: builtin/init-db.c:475
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
-msgstr "Repositório Git existem reinicializado em %s%s\n"
+msgstr "Reiniciei repositório existente de Git em %s%s\n"
 
 #: builtin/init-db.c:479
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
-msgstr "Repositório Git vazio e partilhado inicializado em %s%s\n"
+msgstr "Iniciei repositório vazio partilhado de Git em %s%s\n"
 
 #: builtin/init-db.c:480
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
-msgstr "Repositório Git vazio inicializado em %s%s\n"
+msgstr "Iniciei repositório vazio de Git em %s%s\n"
 
 #: builtin/init-db.c:529
 msgid ""
@@ -16085,12 +16312,12 @@
 #: builtin/init-db.c:688
 #, c-format
 msgid "Cannot access work tree '%s'"
-msgstr "Não é possível aceder à árvore de trabalho '%s'"
+msgstr "Incapaz aceder work tree '%s'"
 
 #: builtin/init-db.c:693
 #, fuzzy
 msgid "--separate-git-dir incompatible with bare repository"
-msgstr "--first-parent é incompatível com --bisect"
+msgstr "--separate-git-dir incompatível com repositório nú"
 
 #: builtin/interpret-trailers.c:16
 msgid ""
@@ -16159,136 +16386,139 @@
 
 #: builtin/interpret-trailers.c:133
 msgid "no input file given for in-place editing"
-msgstr "nenhum ficheiro de entrada fornecido para edição no local"
+msgstr "fornecido para edição in-place, ficheiro de entrada nenhum"
 
-#: builtin/log.c:56
+#: builtin/log.c:58
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opções>] [<intervalo-de-revisões>] [[--] <caminho>...]"
 
-#: builtin/log.c:57
+#: builtin/log.c:59
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opções>] <objeto>..."
 
-#: builtin/log.c:110
+#: builtin/log.c:112
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "opção --decorate inválida: %s"
 
-#: builtin/log.c:177
+#: builtin/log.c:179
 msgid "show source"
 msgstr "mostrar origem"
 
-#: builtin/log.c:178
+#: builtin/log.c:180
 msgid "Use mail map file"
 msgstr "usar ficheiro de mapeamento de correio"
 
-#: builtin/log.c:181
+#: builtin/log.c:183
 #, fuzzy
 msgid "only decorate refs that match <pattern>"
 msgstr "usar apenas referência que correspondam ao <padrão>"
 
-#: builtin/log.c:183
+#: builtin/log.c:185
 #, fuzzy
 msgid "do not decorate refs that match <pattern>"
 msgstr "não considerar tags que correspondam ao <padrão>"
 
-#: builtin/log.c:184
+#: builtin/log.c:186
 msgid "decorate options"
 msgstr "opções de decoração"
 
-#: builtin/log.c:187
-msgid "Process line range n,m in file, counting from 1"
-msgstr "processar intervalo de linhas n,m, a contar a partir de 1"
+#: builtin/log.c:189
+msgid ""
+"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"<file>"
+msgstr ""
 
-#: builtin/log.c:297
+#: builtin/log.c:212
+#, fuzzy
+msgid "-L<range>:<file> cannot be used with pathspec"
+msgstr "%s: %s não pode ser usado com %s"
+
+#: builtin/log.c:302
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Resultado final: %d %s\n"
 
-#: builtin/log.c:555
+#: builtin/log.c:564
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: ficheiro incorreto"
 
-#: builtin/log.c:570 builtin/log.c:665
+#: builtin/log.c:579 builtin/log.c:674
 #, fuzzy, c-format
 msgid "could not read object %s"
-msgstr "Não foi possível ler o objeto %s"
+msgstr "incapaz ler objeto %s"
 
-#: builtin/log.c:690
+#: builtin/log.c:699
 #, fuzzy, c-format
 msgid "unknown type: %d"
 msgstr "Tipo desconhecido: %d"
 
-#: builtin/log.c:839
+#: builtin/log.c:848
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr ""
 
-#: builtin/log.c:846
+#: builtin/log.c:855
 msgid "format.headers without value"
 msgstr "format.headers sem valor"
 
-#: builtin/log.c:965
-msgid "name of output directory is too long"
-msgstr "o nome do diretório de saída é demasiado longo"
-
-#: builtin/log.c:981
+#: builtin/log.c:984
 #, fuzzy, c-format
 msgid "cannot open patch file %s"
-msgstr "Não é possível abrir o ficheiro de patch %s"
+msgstr "incapaz abrir ficheiro patch %s"
 
-#: builtin/log.c:998
+#: builtin/log.c:1001
 #, fuzzy
 msgid "need exactly one range"
 msgstr "É necessário exatamente um intervalo."
 
-#: builtin/log.c:1008
+#: builtin/log.c:1011
 #, fuzzy
 msgid "not a range"
-msgstr "Não é um intervalo."
+msgstr "é intervalo nenhum"
 
-#: builtin/log.c:1172
+#: builtin/log.c:1175
 #, fuzzy
 msgid "cover letter needs email format"
 msgstr "A carta de apresentação precisa de um formato de e-mail"
 
-#: builtin/log.c:1178
+#: builtin/log.c:1181
 #, fuzzy
 msgid "failed to create cover-letter file"
 msgstr "Falha ao criar os ficheiros de saída"
 
-#: builtin/log.c:1259
+#: builtin/log.c:1262
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to incorreto: %s"
 
-#: builtin/log.c:1286
+#: builtin/log.c:1289
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opções>] [<desde> | <intervalo-de-revisões>]"
 
-#: builtin/log.c:1344
+#: builtin/log.c:1347
 #, fuzzy
 msgid "two output directories?"
 msgstr "Dois diretórios de saída?"
 
-#: builtin/log.c:1495 builtin/log.c:2301 builtin/log.c:2303 builtin/log.c:2315
+#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
 #, fuzzy, c-format
 msgid "unknown commit %s"
 msgstr "Commit desconhecido %s"
 
-#: builtin/log.c:1506 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, fuzzy, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "falha ao resolver '%s' como uma referência válida."
 
-#: builtin/log.c:1515
+#: builtin/log.c:1518
 #, fuzzy
 msgid "could not find exact merge base"
-msgstr "Não foi possível encontrar a base exata de integração."
+msgstr "incapaz encontrar a exata base de junção."
 
-#: builtin/log.c:1525
+#: builtin/log.c:1528
 #, fuzzy
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
@@ -16300,291 +16530,297 @@
 "use branch --set-upstream-to para seguir um ramo remoto.\n"
 "Ou pode especificar o commit base com --base=<base-commit-id> manualmente."
 
-#: builtin/log.c:1548
+#: builtin/log.c:1551
 #, fuzzy
 msgid "failed to find exact merge base"
 msgstr "Falha ao procurar base exata de integração"
 
-#: builtin/log.c:1565
+#: builtin/log.c:1568
 msgid "base commit should be the ancestor of revision list"
 msgstr "o commit base deve ser o antecessor da lista de revisões"
 
-#: builtin/log.c:1575
+#: builtin/log.c:1578
 msgid "base commit shouldn't be in revision list"
 msgstr "o commit base não deve fazer parte da lista de revisões"
 
-#: builtin/log.c:1633
+#: builtin/log.c:1636
 msgid "cannot get patch id"
 msgstr "não é possível obter o id do patch"
 
-#: builtin/log.c:1690
+#: builtin/log.c:1693
 #, fuzzy
 msgid "failed to infer range-diff origin of current series"
 msgstr "falha ao guardar ligação à referência de notas atual (%s)"
 
-#: builtin/log.c:1692
+#: builtin/log.c:1695
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1736
+#: builtin/log.c:1739
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "usar [PATCH n/m] mesmo com um único patch"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1742
 msgid "use [PATCH] even with multiple patches"
 msgstr "usar [PATCH] mesmo com múltiplos patches"
 
-#: builtin/log.c:1743
+#: builtin/log.c:1746
 msgid "print patches to standard out"
 msgstr "imprimir patches para a saída padrão"
 
-#: builtin/log.c:1745
+#: builtin/log.c:1748
 msgid "generate a cover letter"
 msgstr "gerar uma carta de apresentação"
 
-#: builtin/log.c:1747
+#: builtin/log.c:1750
 msgid "use simple number sequence for output file names"
 msgstr ""
 "usar uma sequência de números simples para denominar os ficheiros gerados"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1751
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1749
+#: builtin/log.c:1752
 msgid "use <sfx> instead of '.patch'"
 msgstr "usar <sfx> em vez de '.patch'"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1754
 msgid "start numbering patches at <n> instead of 1"
 msgstr "começar a numerar os patches em <n> em vez de 1"
 
-#: builtin/log.c:1753
+#: builtin/log.c:1756
 msgid "mark the series as Nth re-roll"
 msgstr "marcar a série como a n-ésima reiteração"
 
-#: builtin/log.c:1755
+#: builtin/log.c:1758
+#, fuzzy
+msgid "max length of output filename"
+msgstr "tamanho máximo de cada ficheiro de pacote gerado"
+
+#: builtin/log.c:1760
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Usar [RFC PATCH] em vez de [PATCH]"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1763
 msgid "cover-from-description-mode"
 msgstr ""
 
-#: builtin/log.c:1759
+#: builtin/log.c:1764
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 
-#: builtin/log.c:1761
+#: builtin/log.c:1766
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "usar [<prefixo>] em vez de [PATCH]"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1769
 msgid "store resulting files in <dir>"
 msgstr "guardar os ficheiros resultantes em <dir>"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1772
 msgid "don't strip/add [PATCH]"
 msgstr "não tirar/inserir [PATCH]"
 
-#: builtin/log.c:1770
+#: builtin/log.c:1775
 msgid "don't output binary diffs"
 msgstr "não gerar diffs binários"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1777
 msgid "output all-zero hash in From header"
 msgstr "preencher o cabeçalho From com hash de zeros"
 
-#: builtin/log.c:1774
+#: builtin/log.c:1779
 msgid "don't include a patch matching a commit upstream"
 msgstr "não incluir um patch que coincida com um commit a montante"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1781
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "mostrar no formato de patch em vez de no formato por omissão (patch + stat)"
 
-#: builtin/log.c:1778
+#: builtin/log.c:1783
 msgid "Messaging"
 msgstr "Mensagem"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1784
 msgid "header"
 msgstr "cabeçalho"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1785
 msgid "add email header"
 msgstr "adicionar cabeçalho de e-mail"
 
-#: builtin/log.c:1781 builtin/log.c:1782
+#: builtin/log.c:1786 builtin/log.c:1787
 msgid "email"
 msgstr "e-mail"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1786
 msgid "add To: header"
 msgstr "adicionar cabeçalho To:"
 
-#: builtin/log.c:1782
+#: builtin/log.c:1787
 msgid "add Cc: header"
 msgstr "adicionar cabeçalho Cc:"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1788
 msgid "ident"
 msgstr "identidade"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1789
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "definir o endereço From como <identidade> (ou como identidade do committer "
 "se não indicado)"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1791
 msgid "message-id"
 msgstr "id-mensagem"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1792
 msgid "make first mail a reply to <message-id>"
 msgstr "usar o primeiro email para responder a <id-mensagem>"
 
-#: builtin/log.c:1788 builtin/log.c:1791
+#: builtin/log.c:1793 builtin/log.c:1796
 msgid "boundary"
 msgstr "limite"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1794
 msgid "attach the patch"
 msgstr "anexar o patch"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1797
 msgid "inline the patch"
 msgstr "incorporar o patch"
 
-#: builtin/log.c:1796
+#: builtin/log.c:1801
 msgid "enable message threading, styles: shallow, deep"
 msgstr "ativar mensagens por tópicos, estilos: shallow (raso), deep (profundo)"
 
-#: builtin/log.c:1798
+#: builtin/log.c:1803
 msgid "signature"
 msgstr "assinatura"
 
-#: builtin/log.c:1799
+#: builtin/log.c:1804
 msgid "add a signature"
 msgstr "adicionar uma assinatura"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1805
 msgid "base-commit"
 msgstr "commit-base"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1806
 msgid "add prerequisite tree info to the patch series"
 msgstr "adicionar informação pré-requisito da árvore à série de patches"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1809
 msgid "add a signature from a file"
 msgstr "adicionar uma assinatura de um ficheiro"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1810
 msgid "don't print the patch filenames"
 msgstr "não imprimir os nomes dos ficheiros de patch"
 
-#: builtin/log.c:1807
+#: builtin/log.c:1812
 #, fuzzy
 msgid "show progress while generating patches"
 msgstr "mostrar medidor de progresso durante a fase de escrita de objetos"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1814
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1812
+#: builtin/log.c:1817
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1814
+#: builtin/log.c:1819
 msgid "percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/log.c:1896
+#: builtin/log.c:1905
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "linha de identidade inválida: %s"
 
-#: builtin/log.c:1911
+#: builtin/log.c:1920
 #, fuzzy
 msgid "-n and -k are mutually exclusive"
 msgstr "-n e -k são mutuamente exclusivos."
 
-#: builtin/log.c:1913
+#: builtin/log.c:1922
 #, fuzzy
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc e -k são mutuamente exclusivos."
 
-#: builtin/log.c:1921
+#: builtin/log.c:1930
 msgid "--name-only does not make sense"
 msgstr "--name-only não faz sentido"
 
-#: builtin/log.c:1923
+#: builtin/log.c:1932
 msgid "--name-status does not make sense"
 msgstr "--name-status não faz sentido"
 
-#: builtin/log.c:1925
+#: builtin/log.c:1934
 msgid "--check does not make sense"
 msgstr "--check não faz sentido"
 
-#: builtin/log.c:1958
-msgid "standard output, or directory, which one?"
-msgstr "saída padrão, ou diretório, qual deles?"
+#: builtin/log.c:1956
+#, fuzzy
+msgid "--stdout, --output, and --output-directory are mutually exclusive"
+msgstr "-b, -B e --detach são mutuamente exclusivos"
 
-#: builtin/log.c:2062
+#: builtin/log.c:2079
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2066
+#: builtin/log.c:2083
 msgid "Interdiff:"
 msgstr ""
 
-#: builtin/log.c:2067
+#: builtin/log.c:2084
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2073
+#: builtin/log.c:2090
 msgid "--creation-factor requires --range-diff"
 msgstr ""
 
-#: builtin/log.c:2077
+#: builtin/log.c:2094
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2085
+#: builtin/log.c:2102
 msgid "Range-diff:"
 msgstr ""
 
-#: builtin/log.c:2086
+#: builtin/log.c:2103
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2097
+#: builtin/log.c:2114
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "não é possível ler o ficheiro de assinatura '%s'"
 
-#: builtin/log.c:2133
+#: builtin/log.c:2150
 #, fuzzy
 msgid "Generating patches"
 msgstr "falha ao editar patch"
 
-#: builtin/log.c:2177
+#: builtin/log.c:2194
 #, fuzzy
 msgid "failed to create output files"
 msgstr "Falha ao criar os ficheiros de saída"
 
-#: builtin/log.c:2236
+#: builtin/log.c:2253
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<ramo-a-montante> [<head> [<limite>]]]"
 
-#: builtin/log.c:2290
+#: builtin/log.c:2307
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16717,7 +16953,7 @@
 msgid "do not print remote URL"
 msgstr "não imprimir URL remoto"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1392
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
 msgid "exec"
 msgstr "exec"
 
@@ -16903,300 +17139,295 @@
 msgid "Merging %s with %s\n"
 msgstr "A integrar %s com %s\n"
 
-#: builtin/merge.c:56
+#: builtin/merge.c:57
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<opções>] [<commit>...]"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:120
+#: builtin/merge.c:122
 msgid "switch `m' requires a value"
 msgstr "a opção 'm' requer um valor"
 
-#: builtin/merge.c:143
+#: builtin/merge.c:145
 #, fuzzy, c-format
 msgid "option `%s' requires a value"
 msgstr "a opção '%s' requer um valor"
 
-#: builtin/merge.c:189
+#: builtin/merge.c:198
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Estratégia de integração '%s' não encontrada.\n"
 
-#: builtin/merge.c:190
+#: builtin/merge.c:199
 #, c-format
 msgid "Available strategies are:"
 msgstr "Estratégias disponíveis:"
 
-#: builtin/merge.c:195
+#: builtin/merge.c:204
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Estratégias personalizadas disponíveis:"
 
-#: builtin/merge.c:246 builtin/pull.c:133
+#: builtin/merge.c:255 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "não apresentar um diffstat ao fim da integração"
 
-#: builtin/merge.c:249 builtin/pull.c:136
+#: builtin/merge.c:258 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "mostrar um diffstat ao fim da integração"
 
-#: builtin/merge.c:250 builtin/pull.c:139
+#: builtin/merge.c:259 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(sinónimo de --stat)"
 
-#: builtin/merge.c:252 builtin/pull.c:142
+#: builtin/merge.c:261 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "adicionar (no máximo <n>) entradas do shortlog à mensagem de commit da "
 "integração"
 
-#: builtin/merge.c:255 builtin/pull.c:148
+#: builtin/merge.c:264 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "criar um único commit em vez de realizar uma integração"
 
-#: builtin/merge.c:257 builtin/pull.c:151
+#: builtin/merge.c:266 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "realizar um commit se a integração for bem sucedida (predefinição)"
 
-#: builtin/merge.c:259 builtin/pull.c:154
+#: builtin/merge.c:268 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "editar a mensagem antes de submeter"
 
-#: builtin/merge.c:261
+#: builtin/merge.c:270
 msgid "allow fast-forward (default)"
 msgstr "permitir avanço rápido (predefinição)"
 
-#: builtin/merge.c:263 builtin/pull.c:161
+#: builtin/merge.c:272 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "abortar se não é possível efetuar avanço rápido"
 
-#: builtin/merge.c:267 builtin/pull.c:164
+#: builtin/merge.c:276 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "verificar se o commit tem uma assinatura GPG válida"
 
-#: builtin/merge.c:268 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:533 builtin/rebase.c:1406 builtin/revert.c:114
+#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
 msgid "strategy"
 msgstr "estratégia"
 
-#: builtin/merge.c:269 builtin/pull.c:169
+#: builtin/merge.c:278 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "estratégia de integração a usar"
 
-#: builtin/merge.c:270 builtin/pull.c:172
+#: builtin/merge.c:279 builtin/pull.c:172
 msgid "option=value"
 msgstr "opção=valor"
 
-#: builtin/merge.c:271 builtin/pull.c:173
+#: builtin/merge.c:280 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "opções da estratégia de integração selecionada"
 
-#: builtin/merge.c:273
+#: builtin/merge.c:282
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "mensagem de commit (de integração não suscetível a avanço rápido)"
 
-#: builtin/merge.c:280
+#: builtin/merge.c:289
 msgid "abort the current in-progress merge"
 msgstr "abortar integração em curso"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:291
 #, fuzzy
 msgid "--abort but leave index and working tree alone"
 msgstr "repor HEAD, índice e árvore de trabalho"
 
-#: builtin/merge.c:284
+#: builtin/merge.c:293
 msgid "continue the current in-progress merge"
 msgstr "continuar a integração em curso"
 
-#: builtin/merge.c:286 builtin/pull.c:180
+#: builtin/merge.c:295 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "permitir integração de históricos não relacionados"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:302
 #, fuzzy
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "ignorar pre-commit e commit-msg hooks"
 
-#: builtin/merge.c:310
+#: builtin/merge.c:319
 msgid "could not run stash."
 msgstr "não foi possível executar o comando stash."
 
-#: builtin/merge.c:315
+#: builtin/merge.c:324
 msgid "stash failed"
 msgstr "falha ao executar o comando stash"
 
-#: builtin/merge.c:320
+#: builtin/merge.c:329
 #, c-format
 msgid "not a valid object: %s"
 msgstr "nome de objeto inválido: %s"
 
-#: builtin/merge.c:342 builtin/merge.c:359
+#: builtin/merge.c:351 builtin/merge.c:368
 msgid "read-tree failed"
 msgstr "falha ao executar o comando read-tree"
 
-#: builtin/merge.c:389
+#: builtin/merge.c:398
 msgid " (nothing to squash)"
-msgstr " (não há nada para esmagar)"
+msgstr " (nada para esmagar)"
 
-#: builtin/merge.c:400
+#: builtin/merge.c:409
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Commit esmagado -- HEAD não atualizada\n"
 
-#: builtin/merge.c:450
+#: builtin/merge.c:459
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Nenhuma mensagem de integração -- HEAD não atualizada\n"
 
-#: builtin/merge.c:501
+#: builtin/merge.c:510
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' não aponta para um commit"
 
-#: builtin/merge.c:588
+#: builtin/merge.c:597
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Valor de branch.%s.mergeoptions incorreto: %s"
 
-#: builtin/merge.c:713
+#: builtin/merge.c:723
 msgid "Not handling anything other than two heads merge."
-msgstr "Não se processa outra coisa senão incorporação de duas cabeças."
+msgstr "Lidando nada além da junção de duas heads."
 
-#: builtin/merge.c:726
+#: builtin/merge.c:736
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Opção desconhecida de merge-recursive: -X%s"
 
-#: builtin/merge.c:741
+#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "não foi possível escrever %s"
 
-#: builtin/merge.c:793
+#: builtin/merge.c:807
 #, c-format
 msgid "Could not read from '%s'"
-msgstr "Não foi possível ler '%s'"
+msgstr "Incapaz ler de '%s'"
 
-#: builtin/merge.c:802
+#: builtin/merge.c:816
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
-msgstr ""
-"Commit de integração não realizado; use 'git commit' para concluir a "
-"integração.\n"
+msgstr "Usa 'git commit' para completar a junção. Committando junção nenhuma.\n"
 
-#: builtin/merge.c:808
+#: builtin/merge.c:822
 #, fuzzy
 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 ""
-"Introduza uma mensagem de commit, explicando por que esta integração é "
-"necessário,\n"
-"sobretudo se incorpora um ramo a montante atualizado, num ramo tópico.\n"
+"Introduza uma mensagem de commit, explicando o porquê desta integração\n"
+"ser necessária, especialmente se é merge de updated stream para topic "
+"branch.\n"
 "\n"
-"Linhas começadas com '%c' são ignoradas e uma mensagem vazia\n"
-"aborta o commit.\n"
 
-#: builtin/merge.c:813
+#: builtin/merge.c:827
 #, fuzzy
 msgid "An empty message aborts the commit.\n"
-msgstr "editar a mensagem antes de submeter"
+msgstr "Uma mensagem vazia aborta o commit.\n"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:830
 #, fuzzy, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr ""
-"Introduza a mensagem de commit das suas alterações.\n"
-"Linhas começadas com '%c' serão ignoradas, e uma mensagem vazia\n"
-"aborta o commit.\n"
+"Linhas começadas com '%c' são ignoradas, e uma messagem vazia aborta\n"
+"o commit.\n"
 
-#: builtin/merge.c:869
+#: builtin/merge.c:883
 msgid "Empty commit message."
-msgstr "Mensagem de commit vazia."
+msgstr "Mensagem commit vazia."
 
-#: builtin/merge.c:884
+#: builtin/merge.c:898
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Maravilhoso.\n"
 
-#: builtin/merge.c:945
+#: builtin/merge.c:959
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
-"Falha ao realizar integração automática; corrija os conflitos e submeta o "
+"Merge automático falhou; resolve os conflitos e depois podes commitar o "
 "resultado.\n"
 
-#: builtin/merge.c:984
+#: builtin/merge.c:998
 msgid "No current branch."
 msgstr "Nenhum ramo atual."
 
-#: builtin/merge.c:986
+#: builtin/merge.c:1000
 msgid "No remote for the current branch."
-msgstr "Não há um remoto para o ramo atual."
+msgstr "Ŕamo atual de remoto nenhum."
 
-#: builtin/merge.c:988
+#: builtin/merge.c:1002
 msgid "No default upstream defined for the current branch."
-msgstr "Não está definido nenhum ramo a montante para o ramo atual."
+msgstr "Ramo atual sem upstream default definido."
 
-#: builtin/merge.c:993
+#: builtin/merge.c:1007
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Nenhum ramo de monitorização remoto seguido por %s de %s"
 
-#: builtin/merge.c:1050
+#: builtin/merge.c:1064
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor '%s' incorreto no ambiente '%s'"
 
-#: builtin/merge.c:1153
+#: builtin/merge.c:1167
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "não se pode integrar em %s: %s"
 
-#: builtin/merge.c:1187
+#: builtin/merge.c:1201
 msgid "not something we can merge"
 msgstr "não se pode integrar"
 
-#: builtin/merge.c:1291
+#: builtin/merge.c:1311
 msgid "--abort expects no arguments"
 msgstr "--abort não leva argumentos"
 
-#: builtin/merge.c:1295
+#: builtin/merge.c:1315
 msgid "There is no merge to abort (MERGE_HEAD missing)."
-msgstr "Não há nenhuma integração para se abortar (MERGE_HEAD não presente)."
+msgstr "Há junção nenhuma para abortar (MERGE_HEAD faltando)."
 
-#: builtin/merge.c:1313
+#: builtin/merge.c:1333
 #, fuzzy
 msgid "--quit expects no arguments"
 msgstr "--abort não leva argumentos"
 
-#: builtin/merge.c:1326
+#: builtin/merge.c:1346
 msgid "--continue expects no arguments"
 msgstr "--continue não leva argumentos"
 
-#: builtin/merge.c:1330
+#: builtin/merge.c:1350
 msgid "There is no merge in progress (MERGE_HEAD missing)."
-msgstr "Não há nenhuma integração em curso (MERGE_HEAD não presente)."
+msgstr "Há junção nenhuma em curso (MERGE_HEAD faltando)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1366
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
-"Não concluiu a integração (MERGE_HEAD presente).\n"
-"Submeta as suas alterações antes de integrar."
+"Junção está por concluir (MERGE_HEAD existe).\n"
+"Por favor, faz commit das tuas alterações antes de juntar."
 
-#: builtin/merge.c:1353
+#: builtin/merge.c:1373
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17204,106 +17435,102 @@
 "Cherry-pick não concluído (CHERRY_PICK_HEAD presente).\n"
 "Submeta as suas alterações antes de integrar."
 
-#: builtin/merge.c:1356
+#: builtin/merge.c:1376
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Cherry-pick não concluído (CHERRY_PICK_HEAD presente)."
 
-#: builtin/merge.c:1370
+#: builtin/merge.c:1390
 msgid "You cannot combine --squash with --no-ff."
-msgstr "Não é possível combinar --squash e --no-ff."
+msgstr "Impossível combinar --squash com --no-ff."
 
-#: builtin/merge.c:1372
+#: builtin/merge.c:1392
 #, fuzzy
 msgid "You cannot combine --squash with --commit."
-msgstr "Não é possível combinar --squash e --no-ff."
+msgstr "Impossível combinar --squash com --commit."
 
-#: builtin/merge.c:1388
+#: builtin/merge.c:1408
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Nenhum commit especificado e merge.defaultToUpstream não definido."
 
-#: builtin/merge.c:1405
+#: builtin/merge.c:1425
 msgid "Squash commit into empty head not supported yet"
-msgstr "Esmagar um commit numa cabeça vazia ainda não é suportado"
+msgstr "Esmagar commit para uma cabeça vazia por enquanto tem suporte nenhum"
 
-#: builtin/merge.c:1407
+#: builtin/merge.c:1427
 msgid "Non-fast-forward commit does not make sense into an empty head"
-msgstr ""
-"Não faz sentido submeter de modo não suscetível a avanço rápido, numa cabeça "
-"vazia"
+msgstr "Non-fast-forward commit para uma cabeça vazia faz sentido nenhum"
 
-#: builtin/merge.c:1412
+#: builtin/merge.c:1432
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - não é algo se possa integrar"
 
-#: builtin/merge.c:1414
+#: builtin/merge.c:1434
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Só se pode integrar exatamente um commit numa cabeça vazia"
 
-#: builtin/merge.c:1495
+#: builtin/merge.c:1515
 msgid "refusing to merge unrelated histories"
 msgstr "integração de históricos não relacionados recusada"
 
-#: builtin/merge.c:1504
+#: builtin/merge.c:1524
 #, fuzzy
 msgid "Already up to date."
 msgstr "Já está atualizado."
 
-#: builtin/merge.c:1514
+#: builtin/merge.c:1534
 #, c-format
 msgid "Updating %s..%s\n"
-msgstr "A atualizar %s..%s\n"
+msgstr "Atualizando %s..%s\n"
 
-#: builtin/merge.c:1560
+#: builtin/merge.c:1580
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "A tentar integração mesmo trivial no interior do índice...\n"
 
-#: builtin/merge.c:1567
+#: builtin/merge.c:1587
 #, c-format
 msgid "Nope.\n"
-msgstr "Não.\n"
+msgstr "Nada.\n"
 
-#: builtin/merge.c:1592
+#: builtin/merge.c:1612
 #, fuzzy
 msgid "Already up to date. Yeeah!"
 msgstr "Já está atualizado. Sim!"
 
-#: builtin/merge.c:1598
+#: builtin/merge.c:1618
 msgid "Not possible to fast-forward, aborting."
-msgstr "Não é possível avançar rapidamente, a abortar."
+msgstr "Impossível fazer fast-forward, abortando."
 
-#: builtin/merge.c:1626 builtin/merge.c:1691
+#: builtin/merge.c:1646 builtin/merge.c:1711
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
-msgstr "A recuar a árvore ao seu estado original...\n"
+msgstr "Recuando a árvore para estado pristino...\n"
 
-#: builtin/merge.c:1630
+#: builtin/merge.c:1650
 #, c-format
 msgid "Trying merge strategy %s...\n"
-msgstr "A tentar a estratégia de integração %s...\n"
+msgstr "Tentando estratégia merge %s...\n"
 
-#: builtin/merge.c:1682
+#: builtin/merge.c:1702
 #, c-format
 msgid "No merge strategy handled the merge.\n"
-msgstr "Nenhuma estratégia de integração conseguiu processar a integração.\n"
+msgstr "A junção lidou com estratégia de junção nenhuma.\n"
 
-#: builtin/merge.c:1684
+#: builtin/merge.c:1704
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Falha ao integrar com a estratégia %s.\n"
 
-#: builtin/merge.c:1693
+#: builtin/merge.c:1713
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "A usar %s para preparar resolução manual.\n"
 
-#: builtin/merge.c:1707
+#: builtin/merge.c:1727
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
-msgstr ""
-"A integração automática foi bem sucedida; interrompida antes de submeter "
-"como solicitado\n"
+msgstr "Merge automática correu bem; parei antes de commitar como pedido\n"
 
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
@@ -17358,7 +17585,7 @@
 #: builtin/mv.c:83
 #, c-format
 msgid "Directory %s is in index and no submodule?"
-msgstr "O diretório %s está no índice porém nenhum submódulo?"
+msgstr "A pasta %s está no index porém submódulo nenhum?"
 
 #: builtin/mv.c:85
 msgid "Please stage your changes to .gitmodules or stash them to proceed"
@@ -17406,7 +17633,7 @@
 
 #: builtin/mv.c:225
 msgid "not under version control"
-msgstr "não está no controlo de versões"
+msgstr ""
 
 #: builtin/mv.c:227
 msgid "conflicted"
@@ -17423,7 +17650,7 @@
 
 #: builtin/mv.c:241
 msgid "Cannot overwrite"
-msgstr "Não é possível substituir"
+msgstr "Incapaz subscrever"
 
 #: builtin/mv.c:244
 msgid "multiple sources for the same target"
@@ -17443,7 +17670,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "A mudar de nome de %s para %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:782 builtin/repack.c:518
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "falha ao mudar o nome de '%s'"
@@ -17684,7 +17911,7 @@
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
 msgid "no note found for object %s."
-msgstr "nenhuma nota encontrada para o objeto %s."
+msgstr "Encontrada nota nenhuma para objeto %s."
 
 #: builtin/notes.c:410 builtin/notes.c:576
 msgid "note contents as a string"
@@ -17716,22 +17943,22 @@
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
-"Não é possível adicionar notas. Notas do objeto %s encontradas. Use '-f' "
-"para substituí-las."
+"Incapaz adicionar notas. Encontrei notas existentes para objeto %s. Usa '-f' "
+"para subscrever notas existentes"
 
 #: builtin/notes.c:463 builtin/notes.c:544
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
-msgstr "A substituir as notas existentes do objeto %s\n"
+msgstr "Gravando por cima, notas existentes para objeto %s\n"
 
 #: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
 #, c-format
 msgid "Removing note for object %s\n"
-msgstr "A remover a nota do objeto %s\n"
+msgstr "Removendo nota para objeto %s\n"
 
 #: builtin/notes.c:497
 msgid "read objects from stdin"
-msgstr "ler objetos da entrada padrão"
+msgstr "ler objetos de stdin"
 
 #: builtin/notes.c:499
 msgid "load rewriting config for <command> (implies --stdin)"
@@ -17747,13 +17974,13 @@
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
-"Não é possível copiar notas. Notas do objeto %s encontradas. Use '-f' para "
-"substituí-las."
+"Incapaz copiar notas. Encontrei Notas existentes para objeto %s. Usa '-f' para "
+"subscrever notas existentes"
 
 #: builtin/notes.c:550
 #, c-format
 msgid "missing notes on source object %s. Cannot copy."
-msgstr "faltam notas no objeto de origem %s. Não é possível copiar."
+msgstr "faltando notas para objeto fonte %s. Incapaz copiar."
 
 #: builtin/notes.c:603
 #, c-format
@@ -17875,7 +18102,7 @@
 #: builtin/notes.c:900
 #, c-format
 msgid "Object %s has no note\n"
-msgstr "O objeto %s não tem nenhuma nota\n"
+msgstr "O objeto %s tem nota nenhuma\n"
 
 #: builtin/notes.c:912
 msgid "attempt to remove non-existent note is not an error"
@@ -17901,7 +18128,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "usar notas de <notes-ref>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1605
+#: builtin/notes.c:1034 builtin/stash.c:1604
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subcomando desconhecido: %s"
@@ -18355,7 +18582,7 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "incorporar alterações por rebase em vez de integrar"
 
-#: builtin/pull.c:158 builtin/rebase.c:484 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "permitir avanço rápido"
 
@@ -18374,7 +18601,7 @@
 
 #: builtin/pull.c:201
 msgid "number of submodules pulled in parallel"
-msgstr "número de submódulos puxados em paralelo"
+msgstr "número de submódulos com pull em paralelo"
 
 #: builtin/pull.c:317
 #, c-format
@@ -18403,23 +18630,21 @@
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
 msgstr ""
-"Não há nenhum candidato com o qual realizar rebase de entre as referências "
-"que se acabaram de obter."
+"As refs que obteste tem candidato nenhum para onde rebasear."
 
 #: builtin/pull.c:460
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr ""
-"Não há nenhum candidato com o qual integrar de entre as referências que se "
-"acabaram obter."
+"As refs que obteste tem candidato nenhum para junção."
 
 #: builtin/pull.c:461
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
 msgstr ""
-"Geralmente, significa que forneceu um especificador de referência\n"
-"com um carácter universal (wildcard) que não corresponde a nenhum remoto."
+"Normalmente isto significa que forneceste um wildcard especificador de ref\n"
+"que tem correspondência nenhuma no lado do remoto."
 
 #: builtin/pull.c:464
 #, c-format
@@ -18432,15 +18657,15 @@
 "Uma vez que este não é o remoto configurado por predefinição\n"
 "do ramo atual, deve especificar um ramo na linha de comandos."
 
-#: builtin/pull.c:469 builtin/rebase.c:1240 git-parse-remote.sh:73
+#: builtin/pull.c:469 builtin/rebase.c:1246
 msgid "You are not currently on a branch."
-msgstr "Não se encontra em nenhum ramo de momento."
+msgstr "Atualmente estás em ramo nenhum."
 
-#: builtin/pull.c:471 builtin/pull.c:486 git-parse-remote.sh:79
+#: builtin/pull.c:471 builtin/pull.c:486
 msgid "Please specify which branch you want to rebase against."
 msgstr "Especifique o ramo sobre o qual pretende realizar rebase."
 
-#: builtin/pull.c:473 builtin/pull.c:488 git-parse-remote.sh:82
+#: builtin/pull.c:473 builtin/pull.c:488
 msgid "Please specify which branch you want to merge with."
 msgstr "Especifique o ramo com o qual pretende integrar."
 
@@ -18449,20 +18674,19 @@
 msgstr "Consulte git-pull(1) para obter mais detalhes."
 
 #: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1246 git-parse-remote.sh:64
+#: builtin/rebase.c:1252
 msgid "<remote>"
 msgstr "<remoto>"
 
 #: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-#: git-parse-remote.sh:65
 msgid "<branch>"
 msgstr "<ramo>"
 
-#: builtin/pull.c:484 builtin/rebase.c:1238 git-parse-remote.sh:75
+#: builtin/pull.c:484 builtin/rebase.c:1244
 msgid "There is no tracking information for the current branch."
-msgstr "O ramo atual não segue nenhum ramo."
+msgstr "O ramo atual tem informação de tracking nenhuma."
 
-#: builtin/pull.c:493 git-parse-remote.sh:95
+#: builtin/pull.c:493
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
@@ -18483,25 +18707,25 @@
 msgid "unable to access commit %s"
 msgstr "não foi possível analisar o commit %s"
 
-#: builtin/pull.c:894
+#: builtin/pull.c:915
 msgid "ignoring --verify-signatures for rebase"
 msgstr "ignorado --verify-signatures para rebase"
 
-#: builtin/pull.c:954
+#: builtin/pull.c:972
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "A atualizar um ramo que ainda não foi criado e com alterações adicionadas ao "
 "índice."
 
-#: builtin/pull.c:958
+#: builtin/pull.c:976
 msgid "pull with rebase"
-msgstr "puxar com rebase"
+msgstr "pull com rebase"
 
-#: builtin/pull.c:959
+#: builtin/pull.c:977
 msgid "please commit or stash them."
 msgstr "submeta ou esconda-as."
 
-#: builtin/pull.c:984
+#: builtin/pull.c:1002
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18512,7 +18736,7 @@
 "a avançar a árvore de trabalho a partir do\n"
 "commit %s."
 
-#: builtin/pull.c:990
+#: builtin/pull.c:1008
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18522,22 +18746,22 @@
 "$ git reset --hard\n"
 "to recover."
 msgstr ""
-"Não é possível avançar rapidamente a árvore de trabalho.\n"
-"Depois de guardar todas as alterações importantes indicadas por\n"
+"Incapaz de fast-forward a tua working tree.\n"
+"Após confirmares que guardaste algo precioso do resultado de\n"
 "$ git diff %s\n"
 "execute\n"
 "$ git reset --hard\n"
 "para recuperar."
 
-#: builtin/pull.c:1005
+#: builtin/pull.c:1023
 msgid "Cannot merge multiple branches into empty head."
-msgstr "Não é possível integrar múltiplos ramos numa cabeça vazia."
+msgstr "Incapaz de juntar ramos múltiplos para head vazia."
 
-#: builtin/pull.c:1009
+#: builtin/pull.c:1027
 msgid "Cannot rebase onto multiple branches."
-msgstr "Não é possível efetuar rebase sobre múltiplos ramos."
+msgstr "Incapaz de rebasear sobre ramos múltiplos."
 
-#: builtin/pull.c:1017
+#: builtin/pull.c:1041
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 
@@ -18595,11 +18819,10 @@
 "\n"
 "    git push %s HEAD:<name-of-remote-branch>\n"
 msgstr ""
-"Não se encontra em nenhum ramo neste momento.\n"
-"Para publicar o histórico que conduziu ao estado atual (de HEAD\n"
-"destacada), use\n"
+"Atualmente estás em ramo nenhum.\n"
+"Para atirar a história que leva ao estado atual (HEAD solta), usa\n"
 "\n"
-"    git push %s HEAD:<name-of-remote-branch>\n"
+"    git push %s HEAD:<nome-de-ramo-remoto>\n"
 
 #: builtin/push.c:194
 #, c-format
@@ -18609,8 +18832,8 @@
 "\n"
 "    git push --set-upstream %s %s\n"
 msgstr ""
-"O ramo atual %s não tem nenhum ramo a montante.\n"
-"Para publicar o ramo atual e definir o remoto a montante, use\n"
+"O ramo atual %s tem ramo upstream nenhum.\n"
+"Para atirar o ramo atual e definir o remoto como upstream, usa\n"
 "\n"
 "    git push --set-upstream %s %s\n"
 
@@ -18634,8 +18857,7 @@
 msgid ""
 "You didn't specify any refspecs to push, and push.default is \"nothing\"."
 msgstr ""
-"Não indicou nenhum especificador de referência para publicar e o valor de "
-"push.default é \"nothing\"."
+"Indicou refspecs nenhum para atirar, e push.default é \"nothing\"."
 
 #: builtin/push.c:267
 msgid ""
@@ -18669,12 +18891,11 @@
 "(e.g., 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"As atualizações foram rejeitadas porque o remoto contém alterações que\n"
-"não tem localmente. Habitualmente, acontece porque outro repositório "
-"publicou\n"
-"na mesma referência. Pode integrar primeiro as alterações remotas\n"
-"(e.g., 'git pull ...') antes de publicar de novo.\n"
-"Consulte 'Note about fast-forwards' em 'git push --help' para obter detalhes."
+"Atualizações foram rejeitadas porque o remoto contém trabalho diferente\n"
+"do teu trabalho local. A causa, normalmente, é um push para a mesma ref.\n"
+"Podes tentar integrar as diferenças remotas (p.e., 'git pull ...') antes\n"
+"de fazeres novo push.\n"
+"Vê a 'Note about fast-forwards' do 'git push --help' para detalhes."
 
 #: builtin/push.c:286
 msgid "Updates were rejected because the tag already exists in the remote."
@@ -18686,104 +18907,121 @@
 "or update a remote ref to make it point at a non-commit object,\n"
 "without using the '--force' option.\n"
 msgstr ""
-"Não é possível atualizar uma referência remota que aponte para um\n"
-"objeto não commit, ou atualizar uma referência remota fazendo-a\n"
-"apontar para um objeto não commit, sem usar a opção '--force'.\n"
+"És impedido de atualizar uma ref remota que aponte para um objecto\n"
+"fora de commit, ou atualizar uma ref remota fazendo-a apontar para um\n"
+"objeto fora de commit, sem usar a opção '--force'.\n"
 
-#: builtin/push.c:351
+#: builtin/push.c:294
+#, fuzzy
+msgid ""
+"Updates were rejected because the tip of the remote-tracking\n"
+"branch has been updated since the last checkout. You may want\n"
+"to integrate those changes locally (e.g., 'git pull ...')\n"
+"before forcing an update.\n"
+msgstr ""
+"As atualizações foram rejeitadas porque a ponta do ramo atual está atrasada\n"
+"em relação ao homólogo remoto. Integre as alterações remotas (e.g.\n"
+"'git pull ...') antes de publicar de novo.\n"
+"Consulte 'Note about fast-forwards' em 'git push --help' para obter detalhes."
+
+#: builtin/push.c:364
 #, c-format
 msgid "Pushing to %s\n"
-msgstr "A publicar em %s\n"
+msgstr "Fazendo push para %s\n"
 
-#: builtin/push.c:358
+#: builtin/push.c:371
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "falha ao publicar algumas referências em '%s'"
 
-#: builtin/push.c:532
+#: builtin/push.c:553
 msgid "repository"
 msgstr "repositório"
 
-#: builtin/push.c:533 builtin/send-pack.c:183
+#: builtin/push.c:554 builtin/send-pack.c:189
 msgid "push all refs"
 msgstr "publicar todas as referências"
 
-#: builtin/push.c:534 builtin/send-pack.c:185
+#: builtin/push.c:555 builtin/send-pack.c:191
 msgid "mirror all refs"
 msgstr "replicar todas as referências"
 
-#: builtin/push.c:536
+#: builtin/push.c:557
 msgid "delete refs"
 msgstr "eliminar referências"
 
-#: builtin/push.c:537
+#: builtin/push.c:558
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "publicar tags (não pode ser usado com --all ou --mirror)"
 
-#: builtin/push.c:540 builtin/send-pack.c:186
+#: builtin/push.c:561 builtin/send-pack.c:192
 msgid "force updates"
 msgstr "forçar atualização"
 
-#: builtin/push.c:541 builtin/send-pack.c:198
+#: builtin/push.c:562 builtin/send-pack.c:204
 #, fuzzy
 msgid "<refname>:<expect>"
 msgstr "nome da referência>:<esperado"
 
-#: builtin/push.c:542 builtin/send-pack.c:199
+#: builtin/push.c:563 builtin/send-pack.c:205
 msgid "require old value of ref to be at this value"
 msgstr "exigir que o antigo valor da referência tenha este valor"
 
-#: builtin/push.c:545
+#: builtin/push.c:566 builtin/send-pack.c:208
+msgid "require remote updates to be integrated locally"
+msgstr ""
+
+#: builtin/push.c:569
 msgid "control recursive pushing of submodules"
 msgstr "controlar a publicação recursiva de submódulos"
 
-#: builtin/push.c:546 builtin/send-pack.c:193
+#: builtin/push.c:570 builtin/send-pack.c:199
 msgid "use thin pack"
 msgstr "usar pacote fino"
 
-#: builtin/push.c:547 builtin/push.c:548 builtin/send-pack.c:180
-#: builtin/send-pack.c:181
+#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
+#: builtin/send-pack.c:187
 msgid "receive pack program"
 msgstr "programa receive pack"
 
-#: builtin/push.c:549
+#: builtin/push.c:573
 msgid "set upstream for git pull/status"
 msgstr "definir o ramo a montante usado com git pull/status"
 
-#: builtin/push.c:552
+#: builtin/push.c:576
 msgid "prune locally removed refs"
 msgstr "eliminar referências removidas localmente"
 
-#: builtin/push.c:554
+#: builtin/push.c:578
 msgid "bypass pre-push hook"
 msgstr "ignorar pre-push hook"
 
-#: builtin/push.c:555
+#: builtin/push.c:579
 msgid "push missing but relevant tags"
 msgstr "publicar tags perdidas mas relevantes"
 
-#: builtin/push.c:557 builtin/send-pack.c:187
+#: builtin/push.c:581 builtin/send-pack.c:193
 msgid "GPG sign the push"
 msgstr "assinar publicação com GPG"
 
-#: builtin/push.c:559 builtin/send-pack.c:194
+#: builtin/push.c:583 builtin/send-pack.c:200
 msgid "request atomic transaction on remote side"
 msgstr "solicitar transação atómica no servidor remoto"
 
-#: builtin/push.c:577
+#: builtin/push.c:601
 msgid "--delete is incompatible with --all, --mirror and --tags"
 msgstr "--delete é incompatível com --all, --mirror e --tags"
 
-#: builtin/push.c:579
+#: builtin/push.c:603
 msgid "--delete doesn't make sense without any refs"
 msgstr "--delete não faz sentido sem uma referência"
 
-#: builtin/push.c:599
+#: builtin/push.c:623
 #, c-format
 msgid "bad repository '%s'"
 msgstr "repositório '%s' incorreto"
 
-#: builtin/push.c:600
+#: builtin/push.c:624
 msgid ""
 "No configured push destination.\n"
 "Either specify the URL from the command-line or configure a remote "
@@ -18805,27 +19043,27 @@
 "\n"
 "    git push <nome>\n"
 
-#: builtin/push.c:615
+#: builtin/push.c:639
 msgid "--all and --tags are incompatible"
 msgstr "--all e --tags são incompatíveis"
 
-#: builtin/push.c:617
+#: builtin/push.c:641
 msgid "--all can't be combined with refspecs"
 msgstr "--all não pode ser combinado com especificadores de referências"
 
-#: builtin/push.c:621
+#: builtin/push.c:645
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror e --tags são incompatíveis"
 
-#: builtin/push.c:623
+#: builtin/push.c:647
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror não pode ser combinado com especificadores de referências"
 
-#: builtin/push.c:626
+#: builtin/push.c:650
 msgid "--all and --mirror are incompatible"
 msgstr "--all e --mirror são incompatíveis"
 
-#: builtin/push.c:630
+#: builtin/push.c:657
 msgid "push options must not have new line characters"
 msgstr "as opções de publicação não podem ter carateres de nova linha"
 
@@ -18978,213 +19216,213 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git am [<opções>] (--continue | --skip | --abort)"
 
-#: builtin/rebase.c:187 builtin/rebase.c:211 builtin/rebase.c:238
+#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
 #, fuzzy, c-format
 msgid "unusable todo list: '%s'"
 msgstr "não é possível invocar unlink: %s"
 
-#: builtin/rebase.c:304
+#: builtin/rebase.c:310
 #, fuzzy, c-format
 msgid "could not create temporary %s"
 msgstr "não foi possível criar ficheiro temporário"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:316
 #, fuzzy
 msgid "could not mark as interactive"
-msgstr "Não foi possível marcar como interativo"
+msgstr "incapaz marcar como interativo"
 
-#: builtin/rebase.c:364
+#: builtin/rebase.c:369
 #, fuzzy
 msgid "could not generate todo list"
 msgstr "não foi possível escrever para %s"
 
-#: builtin/rebase.c:405
+#: builtin/rebase.c:411
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:480
 #, fuzzy
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--helper [<opções>]"
 
-#: builtin/rebase.c:487 builtin/rebase.c:1382
+#: builtin/rebase.c:493 builtin/rebase.c:1388
 msgid "keep commits which start empty"
 msgstr ""
 
-#: builtin/rebase.c:491 builtin/revert.c:128
+#: builtin/rebase.c:497 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "permitir commits com mensagens vazias"
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:499
 #, fuzzy
 msgid "rebase merge commits"
 msgstr "mergetag incorreta no commit '%s'"
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:501
 msgid "keep original branch points of cousins"
 msgstr ""
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:503
 msgid "move commits that begin with squash!/fixup!"
 msgstr ""
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:504
 #, fuzzy
 msgid "sign commits"
 msgstr "assinar os commits com GPG"
 
-#: builtin/rebase.c:500 builtin/rebase.c:1321
+#: builtin/rebase.c:506 builtin/rebase.c:1327
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:502
+#: builtin/rebase.c:508
 msgid "continue rebase"
 msgstr "continuar rebase"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:510
 #, fuzzy
 msgid "skip commit"
 msgstr "commit"
 
-#: builtin/rebase.c:505
+#: builtin/rebase.c:511
 #, fuzzy
 msgid "edit the todo list"
 msgstr "falha ao escrever para rev-list"
 
-#: builtin/rebase.c:507
+#: builtin/rebase.c:513
 #, fuzzy
 msgid "show the current patch"
 msgstr "ignorar o patch atual"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:516
 msgid "shorten commit ids in the todo list"
 msgstr ""
 
-#: builtin/rebase.c:512
+#: builtin/rebase.c:518
 msgid "expand commit ids in the todo list"
 msgstr ""
 
-#: builtin/rebase.c:514
+#: builtin/rebase.c:520
 msgid "check the todo list"
 msgstr ""
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:522
 msgid "rearrange fixup/squash lines"
 msgstr ""
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:524
 msgid "insert exec commands in todo list"
 msgstr ""
 
-#: builtin/rebase.c:519
+#: builtin/rebase.c:525
 msgid "onto"
 msgstr ""
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:528
 #, fuzzy
 msgid "restrict-revision"
 msgstr "revisão"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:528
 #, fuzzy
 msgid "restrict revision"
 msgstr "revisão"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:530
 msgid "squash-onto"
 msgstr ""
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:531
 msgid "squash onto"
 msgstr ""
 
-#: builtin/rebase.c:527
+#: builtin/rebase.c:533
 #, fuzzy
 msgid "the upstream commit"
 msgstr "Remover a informação do ramo a montante"
 
-#: builtin/rebase.c:529
+#: builtin/rebase.c:535
 #, fuzzy
 msgid "head-name"
 msgstr "mudar nome"
 
-#: builtin/rebase.c:529
+#: builtin/rebase.c:535
 #, fuzzy
 msgid "head name"
 msgstr "à frente "
 
-#: builtin/rebase.c:534
+#: builtin/rebase.c:540
 #, fuzzy
 msgid "rebase strategy"
 msgstr "estratégia de integração"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:541
 #, fuzzy
 msgid "strategy-opts"
 msgstr "estratégia"
 
-#: builtin/rebase.c:536
+#: builtin/rebase.c:542
 #, fuzzy
 msgid "strategy options"
 msgstr "opções de decoração"
 
-#: builtin/rebase.c:537
+#: builtin/rebase.c:543
 msgid "switch-to"
 msgstr ""
 
-#: builtin/rebase.c:538
+#: builtin/rebase.c:544
 msgid "the branch or commit to checkout"
 msgstr ""
 
-#: builtin/rebase.c:539
+#: builtin/rebase.c:545
 #, fuzzy
 msgid "onto-name"
 msgstr "nome"
 
-#: builtin/rebase.c:539
+#: builtin/rebase.c:545
 #, fuzzy
 msgid "onto name"
 msgstr "nome do remoto"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:546
 #, fuzzy
 msgid "cmd"
 msgstr "comando"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:546
 #, fuzzy
 msgid "the command to run"
 msgstr "Nenhum comando concluído."
 
-#: builtin/rebase.c:543 builtin/rebase.c:1415
+#: builtin/rebase.c:549 builtin/rebase.c:1421
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 
-#: builtin/rebase.c:559
+#: builtin/rebase.c:565
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr ""
 
-#: builtin/rebase.c:575
+#: builtin/rebase.c:581
 #, c-format
 msgid "%s requires the merge backend"
 msgstr ""
 
-#: builtin/rebase.c:618
+#: builtin/rebase.c:624
 #, fuzzy, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "não foi possível definir '%s' como '%s'"
 
-#: builtin/rebase.c:635
+#: builtin/rebase.c:641
 #, fuzzy, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "ficheiro inválido: '%s'"
 
-#: builtin/rebase.c:660
+#: builtin/rebase.c:666
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:805 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
 #, fuzzy
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
@@ -19198,7 +19436,7 @@
 "Para extrair o ramo original e interromper o rebase, execute \"git rebase --"
 "abort\"."
 
-#: builtin/rebase.c:888
+#: builtin/rebase.c:894
 #, c-format
 msgid ""
 "\n"
@@ -19210,14 +19448,14 @@
 "As a result, git cannot rebase them."
 msgstr ""
 
-#: builtin/rebase.c:1214
+#: builtin/rebase.c:1220
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr ""
 
-#: builtin/rebase.c:1232
+#: builtin/rebase.c:1238
 #, fuzzy, c-format
 msgid ""
 "%s\n"
@@ -19226,9 +19464,15 @@
 "\n"
 "    git rebase '<branch>'\n"
 "\n"
-msgstr "Especifique o ramo sobre o qual pretende realizar rebase."
+msgstr ""
+"%s\n"
+"Por favor, diz o branch sobre o qual queres rebasear.\n"
+"Vê git-rebase(1) para detalhes.\n"
+"\n"
+"    git rebase '<branch>'\n"
+"\n"
 
-#: builtin/rebase.c:1248
+#: builtin/rebase.c:1254
 #, fuzzy, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19236,210 +19480,214 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 msgstr ""
-"Se deseja definir o ramo que deve ser seguido por este ramo, pode fazê-lo "
-"com:"
+"Se desejas por tracking information neste branch, podes fazer com:\n"
+"\n"
+"    git branch --set-upstream-to=%s/<branch> %s\n"
+"\n"
 
-#: builtin/rebase.c:1278
+#: builtin/rebase.c:1284
 msgid "exec commands cannot contain newlines"
 msgstr ""
 
-#: builtin/rebase.c:1282
+#: builtin/rebase.c:1288
 msgid "empty exec command"
 msgstr ""
 
-#: builtin/rebase.c:1312
+#: builtin/rebase.c:1318
 #, fuzzy
 msgid "rebase onto given branch instead of upstream"
 msgstr "demasiados ramos para remover a definição de ramo a montante"
 
-#: builtin/rebase.c:1314
+#: builtin/rebase.c:1320
 #, fuzzy
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "o ramo a montante solicitado '%s' não existe"
 
-#: builtin/rebase.c:1316
+#: builtin/rebase.c:1322
 #, fuzzy
 msgid "allow pre-rebase hook to run"
 msgstr "Rebase recusado pelo hook pre-rebase."
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1324
 msgid "be quiet. implies --no-stat"
 msgstr ""
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1330
 #, fuzzy
 msgid "do not show diffstat of what changed upstream"
 msgstr "não apresentar um diffstat ao fim da integração"
 
-#: builtin/rebase.c:1327
+#: builtin/rebase.c:1333
 #, fuzzy
-msgid "add a Signed-off-by: line to each commit"
+msgid "add a Signed-off-by trailer to each commit"
 msgstr "adicionar uma linha com Signed-of-by no fim da mensagem de commit"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1336
 #, fuzzy
 msgid "make committer date match author date"
 msgstr "agrupar por committer em vez de autor"
 
-#: builtin/rebase.c:1332
+#: builtin/rebase.c:1338
 msgid "ignore author date and use current date"
 msgstr ""
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1340
 #, fuzzy
 msgid "synonym of --reset-author-date"
 msgstr "sinónimo de --files-with-matches"
 
-#: builtin/rebase.c:1336 builtin/rebase.c:1340
+#: builtin/rebase.c:1342 builtin/rebase.c:1346
 #, fuzzy
 msgid "passed to 'git apply'"
 msgstr "transmitir ao git-apply"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1344
 #, fuzzy
 msgid "ignore changes in whitespace"
 msgstr "ignorar alterações de espaço em branco ao procurar contexto"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1345
+#: builtin/rebase.c:1348 builtin/rebase.c:1351
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 
-#: builtin/rebase.c:1347
+#: builtin/rebase.c:1353
 #, fuzzy
 msgid "continue"
 msgstr "continuar rebase"
 
-#: builtin/rebase.c:1350
+#: builtin/rebase.c:1356
 #, fuzzy
 msgid "skip current patch and continue"
 msgstr "ignorar o patch atual"
 
-#: builtin/rebase.c:1352
+#: builtin/rebase.c:1358
 #, fuzzy
 msgid "abort and check out the original branch"
 msgstr "  (use \"git rebase --abort\" para restaurar o ramo original)"
 
-#: builtin/rebase.c:1355
+#: builtin/rebase.c:1361
 msgid "abort but keep HEAD where it is"
 msgstr ""
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1362
 #, fuzzy
 msgid "edit the todo list during an interactive rebase"
 msgstr "A ação --edit-todo só pode ser usada durante um rebase interativo."
 
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1365
 msgid "show the patch file being applied or merged"
 msgstr ""
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1368
 msgid "use apply strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1372
 #, fuzzy
 msgid "use merging strategies to rebase"
 msgstr "estratégia de integração a usar"
 
-#: builtin/rebase.c:1370
+#: builtin/rebase.c:1376
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1374
+#: builtin/rebase.c:1380
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 
-#: builtin/rebase.c:1379
+#: builtin/rebase.c:1385
 msgid "how to handle commits that become empty"
 msgstr ""
 
-#: builtin/rebase.c:1386
+#: builtin/rebase.c:1392
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1399
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 
-#: builtin/rebase.c:1397
+#: builtin/rebase.c:1403
 #, fuzzy
 msgid "allow rebasing commits with empty messages"
 msgstr "permitir commits com mensagens vazias"
 
-#: builtin/rebase.c:1401
+#: builtin/rebase.c:1407
 msgid "try to rebase merges instead of skipping them"
 msgstr ""
 
-#: builtin/rebase.c:1404
+#: builtin/rebase.c:1410
 #, fuzzy
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "git merge-base --fork-point <referência> [<commit>]"
 
-#: builtin/rebase.c:1406
+#: builtin/rebase.c:1412
 #, fuzzy
 msgid "use the given merge strategy"
 msgstr "opção de estratégia de integração"
 
-#: builtin/rebase.c:1408 builtin/revert.c:115
+#: builtin/rebase.c:1414 builtin/revert.c:115
 msgid "option"
 msgstr "opção"
 
-#: builtin/rebase.c:1409
+#: builtin/rebase.c:1415
 msgid "pass the argument through to the merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1418
 msgid "rebase all reachable commits up to the root(s)"
 msgstr ""
 
-#: builtin/rebase.c:1417
+#: builtin/rebase.c:1423
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1440
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
 msgstr ""
+"o suporte a rebase.useBuiltin foi removido!\n"
+"Vê essa entry em 'git help config' para detalhes."
 
-#: builtin/rebase.c:1440
+#: builtin/rebase.c:1446
 #, fuzzy
 msgid "It looks like 'git am' is in progress. Cannot rebase."
-msgstr "Parece que o git-am está em curso. Não é possível efetuar rebase."
+msgstr "Parece que 'git am' está em curso. Incapaz de rebasear."
 
-#: builtin/rebase.c:1481
+#: builtin/rebase.c:1487
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 
-#: builtin/rebase.c:1486
-#, fuzzy
-msgid "cannot combine '--keep-base' with '--onto'"
-msgstr "Não é possível combinar --squash e --no-ff."
-
-#: builtin/rebase.c:1488
-#, fuzzy
-msgid "cannot combine '--keep-base' with '--root'"
-msgstr "Não é possível combinar --squash e --no-ff."
-
 #: builtin/rebase.c:1492
 #, fuzzy
-msgid "cannot combine '--root' with '--fork-point'"
-msgstr "Não é possível combinar --squash e --no-ff."
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr "incapaz de combinar '--keep-base' com '--onto'"
 
-#: builtin/rebase.c:1495
+#: builtin/rebase.c:1494
+#, fuzzy
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr "incapaz de combinar '--keep-base' com '--root'"
+
+#: builtin/rebase.c:1498
+#, fuzzy
+msgid "cannot combine '--root' with '--fork-point'"
+msgstr "incapaz de combinar '--root' com '--fork-point'"
+
+#: builtin/rebase.c:1501
 msgid "No rebase in progress?"
 msgstr "Rebase não está em curso?"
 
-#: builtin/rebase.c:1499
+#: builtin/rebase.c:1505
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "A ação --edit-todo só pode ser usada durante um rebase interativo."
 
-#: builtin/rebase.c:1522
+#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
-msgstr "Não é possível ler HEAD"
+msgstr "Incapaz ler HEAD"
 
-#: builtin/rebase.c:1534
+#: builtin/rebase.c:1540
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19447,17 +19695,17 @@
 "Deve editar todos os conflitos da integração\n"
 "e marcá-los como resolvidos usando git add"
 
-#: builtin/rebase.c:1553
+#: builtin/rebase.c:1559
 #, fuzzy
 msgid "could not discard worktree changes"
-msgstr "Não é possível remover as alterações da árvore de trabalho"
+msgstr "incapaz de descartar alterações de worktree"
 
-#: builtin/rebase.c:1572
+#: builtin/rebase.c:1578
 #, fuzzy, c-format
 msgid "could not move back to %s"
-msgstr "Não foi possível voltar para $head_name"
+msgstr "incapaz de retroceder a %s"
 
-#: builtin/rebase.c:1618
+#: builtin/rebase.c:1624
 #, fuzzy, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19469,156 +19717,155 @@
 "and run me again.  I am stopping in case you still have something\n"
 "valuable there.\n"
 msgstr ""
-"Parece que já existe um diretório $state_dir_base e\n"
+"Parece que já existe um diretório %s, e\n"
 "é possível que outro processo de rebase já esteja em curso.\n"
 "Se for o caso, tente\n"
-"\t$cmd_live_rebase\n"
+"\t%s\n"
 "Se não for o caso,\n"
-"\t$cmd_clear_stale_rebase\n"
+"\t%s\n"
 "e execute o comando de novo. A execução foi interrompida no caso de\n"
-"ainda ter algo importante nesse sítio."
+"ainda ter algo importante nesse sítio.\n"
 
-#: builtin/rebase.c:1646
+#: builtin/rebase.c:1652
 #, fuzzy
 msgid "switch `C' expects a numerical value"
 msgstr "a opção '%c' espera um valor numérico"
 
-#: builtin/rebase.c:1688
+#: builtin/rebase.c:1694
 #, fuzzy, c-format
 msgid "Unknown mode: %s"
 msgstr "Mode de --patch desconhecido: %s"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1733
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1757
+#: builtin/rebase.c:1763
 msgid "cannot combine apply options with merge options"
 msgstr ""
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1776
 #, fuzzy, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Subcomando desconhecido: %s"
 
-#: builtin/rebase.c:1795
+#: builtin/rebase.c:1806
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1815
+#: builtin/rebase.c:1826
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr ""
 
-#: builtin/rebase.c:1819
+#: builtin/rebase.c:1830
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 
-#: builtin/rebase.c:1843
+#: builtin/rebase.c:1854
 #, fuzzy, c-format
 msgid "invalid upstream '%s'"
 msgstr "caminho inválido '%s'"
 
-#: builtin/rebase.c:1849
+#: builtin/rebase.c:1860
 #, fuzzy
 msgid "Could not create new root commit"
 msgstr "não foi possível analisar o commit recém-criado"
 
-#: builtin/rebase.c:1875
+#: builtin/rebase.c:1886
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr ""
 
-#: builtin/rebase.c:1878
+#: builtin/rebase.c:1889
 #, fuzzy, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "É necessário exatamente um intervalo."
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1897
 #, fuzzy, c-format
 msgid "Does not point to a valid commit '%s'"
-msgstr "Não aponta para um commit válido: $onto_name"
+msgstr "Aponta nada para commit válido '%s'"
 
-#: builtin/rebase.c:1912
+#: builtin/rebase.c:1923
 #, fuzzy, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "o ramo '%s' não existe"
 
-#: builtin/rebase.c:1920 builtin/submodule--helper.c:40
+#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
 #: builtin/submodule--helper.c:2414
 #, c-format
 msgid "No such ref: %s"
 msgstr "Referência inexistente: %s"
 
-#: builtin/rebase.c:1931
+#: builtin/rebase.c:1942
 #, fuzzy
 msgid "Could not resolve HEAD to a revision"
-msgstr "não foi possível resolver o commit HEAD\n"
+msgstr "Foi impossível resolver HEAD para uma revisão"
 
-#: builtin/rebase.c:1952
+#: builtin/rebase.c:1963
 msgid "Please commit or stash them."
 msgstr "Submeta ou esconda-as."
 
-#: builtin/rebase.c:1988
+#: builtin/rebase.c:1999
 #, fuzzy, c-format
 msgid "could not switch to %s"
 msgstr "não foi possível escrever para %s"
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:2010
 #, fuzzy
 msgid "HEAD is up to date."
 msgstr "HEAD está agora em"
 
-#: builtin/rebase.c:2001
+#: builtin/rebase.c:2012
 #, fuzzy, c-format
 msgid "Current branch %s is up to date.\n"
-msgstr "O ramo atual $branch_name está atualizado."
+msgstr "Branch atual %s está atualizado.\n"
 
-#: builtin/rebase.c:2009
+#: builtin/rebase.c:2020
 #, fuzzy
 msgid "HEAD is up to date, rebase forced."
 msgstr "O ramo atual $branch_name está atualizado, rebase forçado."
 
-#: builtin/rebase.c:2011
+#: builtin/rebase.c:2022
 #, fuzzy, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
-msgstr "O ramo atual $branch_name está atualizado, rebase forçado."
+msgstr "Branch actual %s está atualizado, rebase forçado.\n"
 
-#: builtin/rebase.c:2019
+#: builtin/rebase.c:2030
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Rebase recusado pelo hook pre-rebase."
 
-#: builtin/rebase.c:2026
+#: builtin/rebase.c:2037
 #, fuzzy, c-format
 msgid "Changes to %s:\n"
-msgstr "A publicar em %s\n"
+msgstr "Modificações para %s:\n"
 
-#: builtin/rebase.c:2029
+#: builtin/rebase.c:2040
 #, fuzzy, c-format
 msgid "Changes from %s to %s:\n"
-msgstr "Alterações de $mb para $onto:"
+msgstr "Modificações de %s para %s:\n"
 
-#: builtin/rebase.c:2054
+#: builtin/rebase.c:2065
 #, fuzzy, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
-msgstr ""
-"Primeiro, a recuar a cabeça para replicar as suas alterações no topo dela..."
+msgstr "Primeiro, recuando head para refazer o teu trabalho em cima dela...\n"
 
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:2074
 #, fuzzy
 msgid "Could not detach HEAD"
 msgstr "não foi possível destacar HEAD"
 
-#: builtin/rebase.c:2072
+#: builtin/rebase.c:2083
 #, fuzzy, c-format
 msgid "Fast-forwarded %s to %s.\n"
-msgstr "Avanço-rápido para $sha1"
+msgstr "Avançei-rápido %s para %s.\n"
 
 #: builtin/receive-pack.c:34
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-dir>"
 
-#: builtin/receive-pack.c:1224
+#: builtin/receive-pack.c:1276
 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"
@@ -19645,10 +19892,10 @@
 "consiga de outra forma atualizar a árvore de trabalho dele para\n"
 "refletir o que publicou.\n"
 "\n"
-"Para suprimir esta mensagem e manter o comportamento predefinido, defina a "
-"variável de configuração 'receive.denyCurrentBranch' como 'refuse'."
+"Para suprimir esta mensagem e manter o comportamento predefinido, defina\n"
+"a variável de configuração 'receive.denyCurrentBranch' como 'refuse'."
 
-#: builtin/receive-pack.c:1244
+#: builtin/receive-pack.c:1296
 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"
@@ -19659,20 +19906,20 @@
 "\n"
 "To squelch this message, you can set it to 'refuse'."
 msgstr ""
-"Por predefinição, eliminar o ramo atual é proibido, porque o próximo\n"
-"'git clone' não resultará em nenhum ficheiro extraído, causando confusão.\n"
+"Por predefinição, apagar o ramo atual é proibido, porque o próximo\n"
+"'git clone' resultará em ficheiro nenhum checked out, causando confusão.\n"
 "\n"
-"Pode definir a variável de configuração 'receive.denyDeleteCurrent' como\n"
+"Podes definir a variável de configuração 'receive.denyDeleteCurrent' como\n"
 "'warn' ou 'ignore' no repositório remoto para permitir eliminar o\n"
-"ramo atual, com ou sem uma mensagem de aviso.\n"
+"ramo atual, com ou sem a mensagem de aviso.\n"
 "\n"
-"Para suprimir esta mensagem, pode definí-la como 'refuse'."
+"Para suprimir esta mensagem, podes definí-la como 'refuse'."
 
-#: builtin/receive-pack.c:2422
+#: builtin/receive-pack.c:2481
 msgid "quiet"
 msgstr "silencioso"
 
-#: builtin/receive-pack.c:2436
+#: builtin/receive-pack.c:2495
 msgid "You must specify a directory."
 msgstr "Deve especificar um diretório."
 
@@ -19711,22 +19958,22 @@
 #: builtin/reflog.c:696
 #, fuzzy
 msgid "no reflog specified to delete"
-msgstr "nenhum remoto especificado"
+msgstr "especificado reflog nenhum para apagar"
 
 #: builtin/reflog.c:705
 #, fuzzy, c-format
 msgid "not a reflog: %s"
-msgstr "Referência inválida: %s"
+msgstr "reflog inválido: %s"
 
 #: builtin/reflog.c:710
 #, fuzzy, c-format
 msgid "no reflog for '%s'"
-msgstr "Não é possível efetuar reflog de '%s': %s\n"
+msgstr "reflog nenhum para '%s'"
 
 #: builtin/reflog.c:756
 #, fuzzy, c-format
 msgid "invalid ref format: %s"
-msgstr "formato de data inválido: %s"
+msgstr "formato de ref inválido: %s"
 
 #: builtin/reflog.c:765
 msgid "git reflog [ show | expire | delete | exists ]"
@@ -19824,8 +20071,8 @@
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
 msgstr ""
-"--mirror é perigoso e obsoleto;\n"
-"\t use --mirror=fetch ou --mirror=push"
+"--mirror é perigoso e obsoleto; por favor\n"
+"\t usa --mirror=fetch ou --mirror=push invés"
 
 #: builtin/remote.c:148
 #, c-format
@@ -19842,7 +20089,7 @@
 
 #: builtin/remote.c:169
 msgid "or do not fetch any tag at all (--no-tags)"
-msgstr "ou não obter nenhuma tag (--no-tags)"
+msgstr "ou busca tag nenhuma (--no-tags)"
 
 #: builtin/remote.c:171
 msgid "branch(es) to track"
@@ -19864,41 +20111,35 @@
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "especificar ramos para seguir só faz sentido com fetch mirrors"
 
-#: builtin/remote.c:195 builtin/remote.c:697
+#: builtin/remote.c:195 builtin/remote.c:700
 #, c-format
 msgid "remote %s already exists."
 msgstr "o remoto %s já existe."
 
-#: builtin/remote.c:199 builtin/remote.c:701
-#, c-format
-msgid "'%s' is not a valid remote name"
-msgstr "'%s' não é um nome de remoto válido"
-
-#: builtin/remote.c:239
+#: builtin/remote.c:240
 #, c-format
 msgid "Could not setup master '%s'"
-msgstr "Não foi possível configuração o ramo mestre '%s'"
+msgstr "Incapaz configurar master '%s'"
 
-#: builtin/remote.c:354
+#: builtin/remote.c:355
 #, c-format
 msgid "Could not get fetch map for refspec %s"
-msgstr ""
-"Não foi possível obter o mapa de fetch do especificador de referência %s"
+msgstr "Incapaz de obter mapa de busca para refspec %s"
 
-#: builtin/remote.c:453 builtin/remote.c:461
+#: builtin/remote.c:454 builtin/remote.c:462
 msgid "(matching)"
 msgstr "(correspondente)"
 
-#: builtin/remote.c:465
+#: builtin/remote.c:466
 msgid "(delete)"
-msgstr "(eliminado)"
+msgstr "(apagar)"
 
-#: builtin/remote.c:654
+#: builtin/remote.c:655
 #, fuzzy, c-format
 msgid "could not set '%s'"
 msgstr "não foi possível reiniciar '%s'"
 
-#: builtin/remote.c:659
+#: builtin/remote.c:660
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -19906,18 +20147,17 @@
 "now names the non-existent remote '%s'"
 msgstr ""
 
-#: builtin/remote.c:690 builtin/remote.c:833 builtin/remote.c:941
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
 #, fuzzy, c-format
 msgid "No such remote: '%s'"
 msgstr "Remoto inexistente '%s'"
 
-#: builtin/remote.c:707
+#: builtin/remote.c:710
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
-msgstr ""
-"Não foi possível mudar o nome da secção de configuração de '%s' para '%s'"
+msgstr "Incapaz de mudar o nome a secção de configuração '%s' para '%s'"
 
-#: builtin/remote.c:727
+#: builtin/remote.c:730
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -19929,17 +20169,17 @@
 "\t%s\n"
 "\tAtualize a configuração manualmente se necessário."
 
-#: builtin/remote.c:767
+#: builtin/remote.c:770
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "falha ao eliminar '%s'"
 
-#: builtin/remote.c:801
+#: builtin/remote.c:804
 #, c-format
 msgid "creating '%s' failed"
 msgstr "falha ao criar '%s'"
 
-#: builtin/remote.c:877
+#: builtin/remote.c:882
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -19953,298 +20193,298 @@
 "Nota: alguns ramos fora da hierarquia refs/remotes/ não foram removidos;\n"
 "para os remover, use:"
 
-#: builtin/remote.c:891
+#: builtin/remote.c:896
 #, c-format
 msgid "Could not remove config section '%s'"
-msgstr "Não foi possível remover a secção de configuração '%s'"
+msgstr "Incapaz remover secção de configuração '%s'"
 
-#: builtin/remote.c:994
+#: builtin/remote.c:999
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " novo (os próxima objetos obtidos serão guardados em remotes/%s)"
 
-#: builtin/remote.c:997
+#: builtin/remote.c:1002
 msgid " tracked"
 msgstr " seguido"
 
-#: builtin/remote.c:999
+#: builtin/remote.c:1004
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " obsoleto (use 'git remote prune' para remover)"
 
-#: builtin/remote.c:1001
+#: builtin/remote.c:1006
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1042
+#: builtin/remote.c:1047
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr ""
 "branch.%s.merge inválido; não é possível rebasear sobre mais do que um ramo"
 
-#: builtin/remote.c:1051
+#: builtin/remote.c:1056
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "rebaseia interativamente sobre %s do remoto"
 
-#: builtin/remote.c:1053
+#: builtin/remote.c:1058
 #, fuzzy, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "rebaseia interativamente sobre %s do remoto"
 
-#: builtin/remote.c:1056
+#: builtin/remote.c:1061
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "rebaseia sobre %s do remoto"
 
-#: builtin/remote.c:1060
+#: builtin/remote.c:1065
 #, c-format
 msgid " merges with remote %s"
 msgstr " integra com %s do remoto"
 
-#: builtin/remote.c:1063
+#: builtin/remote.c:1068
 #, c-format
 msgid "merges with remote %s"
 msgstr "integra com %s do remoto"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1071
 #, c-format
 msgid "%-*s    and with remote %s\n"
-msgstr "%-*s    e com o %s do remoto\n"
+msgstr "%-*s    e com o %s remote\n"
 
-#: builtin/remote.c:1109
+#: builtin/remote.c:1114
 msgid "create"
 msgstr "criado"
 
-#: builtin/remote.c:1112
+#: builtin/remote.c:1117
 msgid "delete"
 msgstr "eliminado"
 
-#: builtin/remote.c:1116
+#: builtin/remote.c:1121
 msgid "up to date"
 msgstr "atualizado"
 
-#: builtin/remote.c:1119
+#: builtin/remote.c:1124
 msgid "fast-forwardable"
 msgstr "pode ser avançado rapidamente"
 
-#: builtin/remote.c:1122
+#: builtin/remote.c:1127
 msgid "local out of date"
 msgstr "local desatualizado"
 
-#: builtin/remote.c:1129
+#: builtin/remote.c:1134
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s força em %-*s (%s)"
 
-#: builtin/remote.c:1132
+#: builtin/remote.c:1137
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s publica em %-*s (%s)"
 
-#: builtin/remote.c:1136
+#: builtin/remote.c:1141
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s força em %s"
 
-#: builtin/remote.c:1139
+#: builtin/remote.c:1144
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s publica em %s"
 
-#: builtin/remote.c:1207
+#: builtin/remote.c:1212
 msgid "do not query remotes"
 msgstr "não consultar remotos"
 
-#: builtin/remote.c:1234
+#: builtin/remote.c:1239
 #, c-format
 msgid "* remote %s"
 msgstr "* remoto %s"
 
-#: builtin/remote.c:1235
+#: builtin/remote.c:1240
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  Obter    do URL: %s"
 
-#: builtin/remote.c:1236 builtin/remote.c:1252 builtin/remote.c:1391
+#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
 msgid "(no URL)"
-msgstr "(nenhum URL)"
+msgstr "(URL nenhum)"
 
 #. TRANSLATORS: the colon ':' should align
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1250 builtin/remote.c:1252
+#: builtin/remote.c:1255 builtin/remote.c:1257
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  Publicar no URL: %s"
 
-#: builtin/remote.c:1254 builtin/remote.c:1256 builtin/remote.c:1258
+#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Ramo HEAD: %s"
 
-#: builtin/remote.c:1254
+#: builtin/remote.c:1259
 msgid "(not queried)"
 msgstr "(não consultado)"
 
-#: builtin/remote.c:1256
+#: builtin/remote.c:1261
 msgid "(unknown)"
 msgstr "(desconhecido)"
 
-#: builtin/remote.c:1260
+#: builtin/remote.c:1265
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
-msgstr "  Ramo HEAD (o remoto HEAD é ambíguo, pode ser um dos seguintes):\n"
+msgstr "  HEAD branch (HEAD remote é ambíguo, pode ser um dos seguintes):\n"
 
-#: builtin/remote.c:1272
+#: builtin/remote.c:1277
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Ramo remoto:%s"
 msgstr[1] "  Ramos remotos:%s"
 
-#: builtin/remote.c:1275 builtin/remote.c:1301
+#: builtin/remote.c:1280 builtin/remote.c:1306
 msgid " (status not queried)"
 msgstr " (estado não consultado)"
 
-#: builtin/remote.c:1284
+#: builtin/remote.c:1289
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Ramo local configurado para 'git pull':"
 msgstr[1] "  Ramos locais configurados para 'git pull':"
 
-#: builtin/remote.c:1292
+#: builtin/remote.c:1297
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Referências locais serão refletidas (mirror) por 'git push'"
 
-#: builtin/remote.c:1298
+#: builtin/remote.c:1303
 #, 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 para 'git push'%s:"
 msgstr[1] "  Referências locais configuradas para 'git push'%s:"
 
-#: builtin/remote.c:1319
+#: builtin/remote.c:1324
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "definir refs/remotes/<nome>/HEAD de acordo com o remoto"
 
-#: builtin/remote.c:1321
+#: builtin/remote.c:1326
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "eliminar refs/remotes/<nome>/HEAD"
 
-#: builtin/remote.c:1336
+#: builtin/remote.c:1341
 msgid "Cannot determine remote HEAD"
-msgstr "Não é possível determinar o remoto HEAD"
+msgstr "Incapaz de determinar o HEAD remoto"
 
-#: builtin/remote.c:1338
+#: builtin/remote.c:1343
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Múltiplos ramos HEAD remotos. Escolha um explicitamente com:"
 
-#: builtin/remote.c:1348
+#: builtin/remote.c:1353
 #, c-format
 msgid "Could not delete %s"
-msgstr "Não foi possível eliminar %s"
+msgstr "Incapaz eliminar %s"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1361
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Referência inválida: %s"
 
-#: builtin/remote.c:1358
+#: builtin/remote.c:1363
 #, c-format
 msgid "Could not setup %s"
-msgstr "Não foi possível configurar %s"
+msgstr "Incapaz configurar %s"
 
-#: builtin/remote.c:1376
+#: builtin/remote.c:1381
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s ficará suspenso!"
 
-#: builtin/remote.c:1377
+#: builtin/remote.c:1382
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s ficou suspenso!"
 
-#: builtin/remote.c:1387
+#: builtin/remote.c:1392
 #, c-format
 msgid "Pruning %s"
 msgstr "A eliminar %s"
 
-#: builtin/remote.c:1388
+#: builtin/remote.c:1393
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1404
+#: builtin/remote.c:1409
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [eliminaria] %s"
 
-#: builtin/remote.c:1407
+#: builtin/remote.c:1412
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [eliminado] %s"
 
-#: builtin/remote.c:1452
+#: builtin/remote.c:1457
 msgid "prune remotes after fetching"
 msgstr "eliminar remotos depois de obter"
 
-#: builtin/remote.c:1515 builtin/remote.c:1569 builtin/remote.c:1637
+#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Remoto inexistente '%s'"
 
-#: builtin/remote.c:1531
+#: builtin/remote.c:1539
 msgid "add branch"
 msgstr "adicionar ramo"
 
-#: builtin/remote.c:1538
+#: builtin/remote.c:1546
 msgid "no remote specified"
-msgstr "nenhum remoto especificado"
+msgstr "especificado remoto nenhum"
 
-#: builtin/remote.c:1555
+#: builtin/remote.c:1563
 msgid "query push URLs rather than fetch URLs"
 msgstr "consultar URLs de publicação em vez de URLs utilizados para obter"
 
-#: builtin/remote.c:1557
+#: builtin/remote.c:1565
 msgid "return all URLs"
 msgstr "retornar todos os URLs"
 
-#: builtin/remote.c:1585
+#: builtin/remote.c:1595
 #, c-format
 msgid "no URLs configured for remote '%s'"
-msgstr "o remoto '%s' não tem nenhum URL configurado"
+msgstr "o remoto '%s' tem configurado URL nenhum"
 
-#: builtin/remote.c:1611
+#: builtin/remote.c:1621
 msgid "manipulate push URLs"
 msgstr "manipular URLs de publicação"
 
-#: builtin/remote.c:1613
+#: builtin/remote.c:1623
 msgid "add URL"
 msgstr "adicionar URL"
 
-#: builtin/remote.c:1615
+#: builtin/remote.c:1625
 msgid "delete URLs"
 msgstr "eliminar URLs"
 
-#: builtin/remote.c:1622
+#: builtin/remote.c:1632
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete não faz sentido"
 
-#: builtin/remote.c:1661
+#: builtin/remote.c:1673
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Padrão de URL antigo inválido: %s"
 
-#: builtin/remote.c:1669
+#: builtin/remote.c:1681
 #, c-format
 msgid "No such URL found: %s"
 msgstr "URL não encontrado: %s"
 
-#: builtin/remote.c:1671
+#: builtin/remote.c:1683
 msgid "Will not delete all non-push URLs"
-msgstr "Não é possível remover todos os URLs de não publicação"
+msgstr "Eliminarei apenas alguns URLs de não-atirar"
 
 #: builtin/repack.c:25
 msgid "git repack [<options>]"
@@ -20255,134 +20495,127 @@
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
-"Repacks incrementais são incompatíveis com índices bitmap. Use\n"
+"Repacks incrementais são incompatíveis com bitmap indexes. Usa\n"
 "--no-write-bitmap-índex ou desative a configuração pack.writebitmaps."
 
 #: builtin/repack.c:197
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:236 builtin/repack.c:421
+#: builtin/repack.c:268 builtin/repack.c:447
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 
-#: builtin/repack.c:260
+#: builtin/repack.c:295
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:297
+#: builtin/repack.c:323
 msgid "pack everything in a single pack"
 msgstr "compactar tudo num único pacote"
 
-#: builtin/repack.c:299
+#: builtin/repack.c:325
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "o mesmo que -a, e soltar objetos inalcançáveis"
 
-#: builtin/repack.c:302
+#: builtin/repack.c:328
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "remover pacotes redundantes e executar git-prune-packed"
 
-#: builtin/repack.c:304
+#: builtin/repack.c:330
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passar --no-reuse-delta ao git-pack-objects"
 
-#: builtin/repack.c:306
+#: builtin/repack.c:332
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passar --no-reuse-object ao git-pack-objects"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:334
 msgid "do not run git-update-server-info"
 msgstr "não executar git-update-server-info"
 
-#: builtin/repack.c:311
+#: builtin/repack.c:337
 msgid "pass --local to git-pack-objects"
 msgstr "passar --local ao git-pack-objects"
 
-#: builtin/repack.c:313
+#: builtin/repack.c:339
 msgid "write bitmap index"
 msgstr "escrever índice de mapa de bits"
 
-#: builtin/repack.c:315
+#: builtin/repack.c:341
 #, fuzzy
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passar --local ao git-pack-objects"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:342
 msgid "approxidate"
 msgstr "aproximar"
 
-#: builtin/repack.c:317
+#: builtin/repack.c:343
 msgid "with -A, do not loosen objects older than this"
 msgstr "com -A, não soltar mais objetos além destes"
 
-#: builtin/repack.c:319
+#: builtin/repack.c:345
 msgid "with -a, repack unreachable objects"
 msgstr "com -a, reempacotar objetos inalcançáveis"
 
-#: builtin/repack.c:321
+#: builtin/repack.c:347
 msgid "size of the window used for delta compression"
 msgstr "dimensão da janela usada em compressão de deltas"
 
-#: builtin/repack.c:322 builtin/repack.c:328
+#: builtin/repack.c:348 builtin/repack.c:354
 msgid "bytes"
 msgstr "bytes"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:349
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "o mesmo que o anterior, mas limitar a memória usada em vez do número de "
 "entradas"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:351
 msgid "limits the maximum delta depth"
 msgstr "limitar a profundidade máxima de delta"
 
-#: builtin/repack.c:327
+#: builtin/repack.c:353
 #, fuzzy
 msgid "limits the maximum number of threads"
 msgstr "limitar a profundidade máxima de delta"
 
-#: builtin/repack.c:329
+#: builtin/repack.c:355
 msgid "maximum size of each packfile"
 msgstr "tamanho máximo de cada ficheiro de pacote"
 
-#: builtin/repack.c:331
+#: builtin/repack.c:357
 msgid "repack objects in packs marked with .keep"
 msgstr "reempacotar objetos em pacotes marcados com .keep"
 
-#: builtin/repack.c:333
+#: builtin/repack.c:359
 #, fuzzy
 msgid "do not repack this pack"
 msgstr "criar pacotes finos"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:369
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "não é possível eliminar pacotes num repositório de objetos-preciosos"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:373
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable e -A são incompatíveis"
 
-#: builtin/repack.c:430
+#: builtin/repack.c:456
 msgid "Nothing new to pack."
 msgstr ""
 
 #: builtin/repack.c:486
-#, c-format
-msgid ""
-"WARNING: Some packs in use have been renamed by\n"
-"WARNING: prefixing old- to their name, in order to\n"
-"WARNING: replace them with the new version of the\n"
-"WARNING: file.  But the operation failed, and the\n"
-"WARNING: attempt to rename them back to their\n"
-"WARNING: original names also failed.\n"
-"WARNING: Please rename them in %s manually:\n"
-msgstr ""
+#, fuzzy, c-format
+msgid "missing required file: %s"
+msgstr "falta o objeto %s de %s"
 
-#: builtin/repack.c:534
-#, c-format
-msgid "failed to remove '%s'"
-msgstr "falha ao remover '%s'"
+#: builtin/repack.c:488
+#, fuzzy, c-format
+msgid "could not unlink: %s"
+msgstr "não foi possível bloquear '%s'"
 
 #: builtin/replace.c:22
 msgid "git replace [-f] <object> <replacement>"
@@ -20562,7 +20795,9 @@
 msgid ""
 "could not convert the following graft(s):\n"
 "%s"
-msgstr "Removeria o seguinte item:"
+msgstr ""
+"Impossível converter os seguinte(s) graft(s):\n"
+"%s"
 
 #: builtin/replace.c:548
 msgid "list replace refs"
@@ -20719,10 +20954,10 @@
 #: builtin/reset.c:195
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
-msgstr "Não é possível repor de modo %s durante uma integração."
+msgstr "Incapaz de fazer uma reposição %s durante uma junção."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:595
-#: builtin/stash.c:619
+#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
+#: builtin/stash.c:618
 msgid "be quiet, only report errors"
 msgstr "silencioso, só reportar erros"
 
@@ -20768,12 +21003,12 @@
 #: builtin/reset.c:373
 #, c-format
 msgid "Cannot do %s reset with paths."
-msgstr "Não é possível repor de modo %s com caminhos."
+msgstr "Incapaz de fazer uma reposição %s com paths."
 
 #: builtin/reset.c:388
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
-msgstr "Não é permitido repor de modo %s num repositório nu"
+msgstr "%s reset é proíbido num repositório nú"
 
 #: builtin/reset.c:392
 msgid "-N can only be used with --mixed"
@@ -20795,11 +21030,11 @@
 #: builtin/reset.c:434
 #, c-format
 msgid "Could not reset index file to revision '%s'."
-msgstr "Não foi possível repor o ficheiro índice para a revisão '%s'."
+msgstr "Incapaz repor ficheiro index para a revisão '%s'."
 
 #: builtin/reset.c:439
 msgid "Could not write new index file."
-msgstr "Não foi possível escrever novo ficheiro de índice."
+msgstr "Incapaz escrever novo ficheiro index."
 
 #: builtin/rev-list.c:499
 msgid "cannot combine --exclude-promisor-objects and --missing"
@@ -20843,11 +21078,11 @@
 "Run \"git rev-parse --parseopt -h\" for more information on the first usage."
 msgstr ""
 "git rev-parse --parseopt [<opções>] -- [<argumentos>...]\n"
-"   or: git rev-parse --sq-quote [<argumentos>...]\n"
-"   or: git rev-parse [<opções>] [<argumentos>...]\n"
+"   ou: git rev-parse --sq-quote [<argumentos>...]\n"
+"   ou: git rev-parse [<opções>] [<argumentos>...]\n"
 "\n"
-"Execute \"git rev-parse --parseopt -h\" para obter mais informação sobre a "
-"primeira utilização."
+"Execute \"git rev-parse --parseopt -h\" para mais informação com a primeira "
+"utilização."
 
 #: builtin/revert.c:24
 msgid "git revert [<options>] <commit-ish>..."
@@ -20928,11 +21163,11 @@
 msgid "keep redundant, empty commits"
 msgstr "manter commits redundantes e vazios"
 
-#: builtin/revert.c:232
+#: builtin/revert.c:239
 msgid "revert failed"
 msgstr "falha ao reverter"
 
-#: builtin/revert.c:245
+#: builtin/revert.c:252
 msgid "cherry-pick failed"
 msgstr "falha ao efetuar cherry-pick"
 
@@ -20948,11 +21183,11 @@
 "the following files have staged content different from both the\n"
 "file and the HEAD:"
 msgstr[0] ""
-"o seguinte ficheiro tem conteúdo preparado no índice diferente\n"
-"do conteúdo no ficheiro e em HEAD:"
+"o seguinte ficheiro tem staged content diferente quer no ficheiro\n"
+"quer em HEAD:"
 msgstr[1] ""
-"os seguintes ficheiros têm conteúdo preparado no índice diferente\n"
-"do conteúdo no ficheiro e em HEAD:"
+"os seguintes ficheiros têm staged content diferente quer no ficheiro\n"
+"quer em HEAD:"
 
 #: builtin/rm.c:212
 msgid ""
@@ -20960,7 +21195,7 @@
 "(use -f to force removal)"
 msgstr ""
 "\n"
-"(use -f para forçar remoção)"
+"(usa -f para forçar remoção)"
 
 #: builtin/rm.c:216
 msgid "the following file has changes staged in the index:"
@@ -21031,83 +21266,82 @@
 msgstr ""
 "git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
 "receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<diretório> "
-"[<referência>...]\n"
-"  --all e especificação explicita duma <referência> são mutuamente "
-"exclusivos."
+"[<ref>...]\n"
+"  --all e <ref> explícito são mutuamente exclusivos."
 
-#: builtin/send-pack.c:182
+#: builtin/send-pack.c:188
 msgid "remote name"
 msgstr "nome do remoto"
 
-#: builtin/send-pack.c:195
+#: builtin/send-pack.c:201
 msgid "use stateless RPC protocol"
 msgstr "use protocolo RPC sem estado"
 
-#: builtin/send-pack.c:196
+#: builtin/send-pack.c:202
 msgid "read refs from stdin"
 msgstr "ler referências do stdin"
 
-#: builtin/send-pack.c:197
+#: builtin/send-pack.c:203
 msgid "print status from remote helper"
 msgstr "imprimir estado do programa auxiliar remoto"
 
-#: builtin/shortlog.c:15
+#: builtin/shortlog.c:16
 #, fuzzy
 msgid "git shortlog [<options>] [<revision-range>] [[--] <path>...]"
 msgstr ""
 "git shortlog [<opções>] [<intervalo-de-revisões>] [[--] [<caminho>...]]"
 
-#: builtin/shortlog.c:16
+#: builtin/shortlog.c:17
 #, fuzzy
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git worktree list [<opções>]"
 
-#: builtin/shortlog.c:134
+#: builtin/shortlog.c:135
 msgid "using multiple --group options with stdin is not supported"
 msgstr ""
 
-#: builtin/shortlog.c:144
+#: builtin/shortlog.c:145
 msgid "using --group=trailer with stdin is not supported"
 msgstr ""
 
-#: builtin/shortlog.c:388
+#: builtin/shortlog.c:335
 #, fuzzy, c-format
 msgid "unknown group type: %s"
 msgstr "Tipo desconhecido: %d"
 
-#: builtin/shortlog.c:416
+#: builtin/shortlog.c:363
 msgid "Group by committer rather than author"
 msgstr "agrupar por committer em vez de autor"
 
-#: builtin/shortlog.c:419
+#: builtin/shortlog.c:366
 msgid "sort output according to the number of commits per author"
 msgstr "ordenar saída de acordo com o número de commits por autor"
 
-#: builtin/shortlog.c:421
+#: builtin/shortlog.c:368
 msgid "Suppress commit descriptions, only provides commit count"
 msgstr "suprimir a descrição dos commits, fornecer apenas o número de commits"
 
-#: builtin/shortlog.c:423
+#: builtin/shortlog.c:370
 msgid "Show the email address of each author"
 msgstr "Mostrar o endereço de e-mail de cada autor"
 
-#: builtin/shortlog.c:424
+#: builtin/shortlog.c:371
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr ""
 
-#: builtin/shortlog.c:425
+#: builtin/shortlog.c:372
 msgid "Linewrap output"
 msgstr "ajustar linhas"
 
-#: builtin/shortlog.c:427
+#: builtin/shortlog.c:374
 msgid "field"
 msgstr ""
 
-#: builtin/shortlog.c:428
+#: builtin/shortlog.c:375
 msgid "Group by field"
 msgstr ""
 
-#: builtin/shortlog.c:456
+#: builtin/shortlog.c:403
 #, fuzzy
 msgid "too many arguments given outside repository"
 msgstr "%s: '%s' está fora do repositório"
@@ -21138,7 +21372,7 @@
 #: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
-msgstr "nenhuma referência corresponde com %s"
+msgstr "correspondência de refs com %s nenhuma"
 
 #: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
@@ -21213,7 +21447,7 @@
 
 #: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
-msgstr "nenhum ramo fornecido e HEAD não é válida"
+msgstr "fornecido ramo nenhum, e HEAD é inválida"
 
 #: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
@@ -21465,7 +21699,7 @@
 #: builtin/stash.c:404
 #, fuzzy
 msgid "cannot apply a stash in the middle of a merge"
-msgstr "Não é possível aplicar uma pilha durante uma integração"
+msgstr "incapaz aplicar arrumação durante uma junção"
 
 #: builtin/stash.c:415
 #, fuzzy, c-format
@@ -21474,150 +21708,149 @@
 
 #: builtin/stash.c:422
 #, fuzzy
-msgid "conflicts in index.Try without --index."
+msgid "conflicts in index. Try without --index."
 msgstr "Conflitos no índice. Tente sem --index."
 
 #: builtin/stash.c:428
 #, fuzzy
 msgid "could not save index tree"
-msgstr "Não foi possível guardar árvore do índice"
+msgstr "incapaz guardar árvore index"
 
 #: builtin/stash.c:437
 #, fuzzy
 msgid "could not restore untracked files from stash"
-msgstr "Não foi possível restaurar os ficheiros não controlados da pilha"
+msgstr "incapaz restaurar ficheiros por controlar de arrumos"
 
 #: builtin/stash.c:451
 #, fuzzy, c-format
 msgid "Merging %s with %s"
-msgstr "A integrar %s com %s\n"
+msgstr "Juntando %s com %s"
 
 #: builtin/stash.c:461
 msgid "Index was not unstashed."
 msgstr "O índice não foi reposto."
 
-#: builtin/stash.c:522 builtin/stash.c:621
+#: builtin/stash.c:522 builtin/stash.c:620
 #, fuzzy
 msgid "attempt to recreate the index"
 msgstr "falha ao ler o índice"
 
-#: builtin/stash.c:555
+#: builtin/stash.c:566
 #, fuzzy, c-format
 msgid "Dropped %s (%s)"
 msgstr "A descartar ${REV} ($s)"
 
-#: builtin/stash.c:558
+#: builtin/stash.c:569
 #, fuzzy, c-format
 msgid "%s: Could not drop stash entry"
-msgstr "${REV}: Não foi possível descartar elemento da pilha"
+msgstr "%s: Incapaz descartar entrada de arrumos"
 
-#: builtin/stash.c:583
+#: builtin/stash.c:582
 #, fuzzy, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'$args' não é uma referência de pilha"
 
-#: builtin/stash.c:633
+#: builtin/stash.c:632
 #, fuzzy
 msgid "The stash entry is kept in case you need it again."
 msgstr "A pilha é guarda no caso de precisar dela de novo."
 
-#: builtin/stash.c:656
+#: builtin/stash.c:655
 msgid "No branch name specified"
 msgstr "Nenhum nome de ramo especificado"
 
-#: builtin/stash.c:800 builtin/stash.c:837
+#: builtin/stash.c:799 builtin/stash.c:836
 #, fuzzy, c-format
 msgid "Cannot update %s with %s"
-msgstr "Não é possível atualizar $ref_stash com $w_commit"
+msgstr "Incapaz atualizar %s com %s"
 
-#: builtin/stash.c:818 builtin/stash.c:1472 builtin/stash.c:1537
+#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
 #, fuzzy
 msgid "stash message"
 msgstr "mensagem da tag"
 
-#: builtin/stash.c:828
+#: builtin/stash.c:827
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr ""
 
-#: builtin/stash.c:1043
+#: builtin/stash.c:1042
 msgid "No changes selected"
 msgstr "Nenhuma alteração selecionada"
 
-#: builtin/stash.c:1143
+#: builtin/stash.c:1142
 msgid "You do not have the initial commit yet"
 msgstr "O commit inicial ainda não existe"
 
-#: builtin/stash.c:1170
+#: builtin/stash.c:1169
 msgid "Cannot save the current index state"
-msgstr "Não é possível guardar o estado atual do índice"
+msgstr "Incapaz guardar estado atual de index"
 
-#: builtin/stash.c:1179
+#: builtin/stash.c:1178
 msgid "Cannot save the untracked files"
-msgstr "Não é possível guardar os ficheiros não controlados"
+msgstr "Incapaz de guardar ficheiros por controlar"
 
-#: builtin/stash.c:1190 builtin/stash.c:1199
+#: builtin/stash.c:1189 builtin/stash.c:1198
 msgid "Cannot save the current worktree state"
-msgstr "Não é possível guardar o estado atual da árvore de trabalho"
+msgstr "Incapaz guardar o estado atual de worktree"
 
-#: builtin/stash.c:1227
+#: builtin/stash.c:1226
 msgid "Cannot record working tree state"
-msgstr "Não é possível gravar o estado da árvore de trabalho"
+msgstr "Incapaz gravar o estado de worktree"
 
-#: builtin/stash.c:1276
+#: builtin/stash.c:1275
 msgid "Can't use --patch and --include-untracked or --all at the same time"
-msgstr ""
-"Não é possível usar --patch e --include-untracked ou --all ao mesmo tempo"
+msgstr "Impossível usar --patch e --include-untracked ou --all ao mesmo tempo"
 
-#: builtin/stash.c:1292
+#: builtin/stash.c:1291
 #, fuzzy
 msgid "Did you forget to 'git add'?"
-msgstr "Queria dizer 'git add .'?\n"
+msgstr "Será que falta 'git add'?"
 
-#: builtin/stash.c:1307
+#: builtin/stash.c:1306
 msgid "No local changes to save"
-msgstr "Não há alterações locais para guardar"
+msgstr "Com alterações locais para guardar nenhumas"
 
-#: builtin/stash.c:1314
+#: builtin/stash.c:1313
 msgid "Cannot initialize stash"
-msgstr "Não é possível inicializar a pilha"
+msgstr "Incapaz inicializar arrumos"
 
-#: builtin/stash.c:1329
+#: builtin/stash.c:1328
 msgid "Cannot save the current status"
-msgstr "Não é possível guardar o estado atual"
+msgstr "Incapaz guardar o estado atual"
 
-#: builtin/stash.c:1334
+#: builtin/stash.c:1333
 #, fuzzy, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Diretório de trabalho e estado do índice $stash_msg guardados"
 
-#: builtin/stash.c:1424
+#: builtin/stash.c:1423
 msgid "Cannot remove worktree changes"
-msgstr "Não é possível remover as alterações da árvore de trabalho"
+msgstr "Incapaz remover alterações de worktree"
 
-#: builtin/stash.c:1463 builtin/stash.c:1528
+#: builtin/stash.c:1462 builtin/stash.c:1527
 msgid "keep index"
 msgstr ""
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1464 builtin/stash.c:1529
 msgid "stash in patch mode"
 msgstr ""
 
-#: builtin/stash.c:1466 builtin/stash.c:1531
+#: builtin/stash.c:1465 builtin/stash.c:1530
 #, fuzzy
 msgid "quiet mode"
 msgstr "silencioso"
 
-#: builtin/stash.c:1468 builtin/stash.c:1533
+#: builtin/stash.c:1467 builtin/stash.c:1532
 #, fuzzy
 msgid "include untracked files in stash"
 msgstr "listar ficheiros não controlados em colunas"
 
-#: builtin/stash.c:1470 builtin/stash.c:1535
+#: builtin/stash.c:1469 builtin/stash.c:1534
 #, fuzzy
 msgid "include ignore files"
 msgstr "mostrar ficheiros ignorados"
 
-#: builtin/stash.c:1570
+#: builtin/stash.c:1569
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21671,7 +21904,7 @@
 #: builtin/submodule--helper.c:524
 #, fuzzy, c-format
 msgid "Entering '%s'\n"
-msgstr "a substituir '%s'"
+msgstr "Entrando em '%s'\n"
 
 #: builtin/submodule--helper.c:527
 #, c-format
@@ -21719,12 +21952,12 @@
 #: builtin/submodule--helper.c:670
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
-msgstr "Submódulo '%s' (%s) registado com caminho '%s'\n"
+msgstr "Submódulo '%s' (%s) registado para path '%s'\n"
 
 #: builtin/submodule--helper.c:680
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
-msgstr "aviso: modo de atualização do comando sugerido para o submódulo '%s'\n"
+msgstr "aviso: modo command update sugerido para submódulo '%s'\n"
 
 #: builtin/submodule--helper.c:687
 #, c-format
@@ -21743,8 +21976,7 @@
 #: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
-msgstr ""
-"nenhum mapeamento de submódulo do caminho '%s' encontrado em .gitmodules"
+msgstr "para path '%s' encontrei em .gitmodules, mapeamento de submódulo nenhum"
 
 #: builtin/submodule--helper.c:835
 #, fuzzy, c-format
@@ -21804,7 +22036,7 @@
 #: builtin/submodule--helper.c:1059
 #, fuzzy, c-format
 msgid "unexpected mode %o\n"
-msgstr "modo inesperado $mod_dst"
+msgstr "estou à espera de um modo diferente de %o\n"
 
 #: builtin/submodule--helper.c:1300
 #, fuzzy
@@ -21842,7 +22074,7 @@
 #: builtin/submodule--helper.c:1407
 #, fuzzy, c-format
 msgid "Synchronizing submodule url for '%s'\n"
-msgstr "A sincronizar o URL do submódulo '$displaypath'"
+msgstr "Sincronizando URL do submódule '%s'\n"
 
 #: builtin/submodule--helper.c:1413
 #, fuzzy, c-format
@@ -21875,8 +22107,8 @@
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
 "really want to remove it including all of its history)"
 msgstr ""
-"A árvore de trabalho do submódulo '$displaypath' contém um diretório .git\n"
-"(use 'rm -rf' se pretende mesmo removê-lo, incluindo todo o seu histórico)"
+"Submodule work tree '%s' tem uma pasta .git (usa 'rm -rf' se queres mesmo "
+"removê-la e remover toda a história)"
 
 #: builtin/submodule--helper.c:1558
 #, fuzzy, c-format
@@ -21890,23 +22122,22 @@
 #: builtin/submodule--helper.c:1566
 #, fuzzy, c-format
 msgid "Cleared directory '%s'\n"
-msgstr "Diretório '$displaypath' limpo"
+msgstr "Pasta '%s' limpa\n"
 
 #: builtin/submodule--helper.c:1568
 #, fuzzy, c-format
 msgid "Could not remove submodule work tree '%s'\n"
-msgstr ""
-"Não foi possível remover a árvore de trabalho do submódulo '$displaypath'"
+msgstr "Impossível remover submodule work tree '%s'\n"
 
 #: builtin/submodule--helper.c:1579
 #, fuzzy, c-format
 msgid "could not create empty submodule directory %s"
-msgstr "Não foi possível criar o diretório vazio do submódulo '$displaypath'"
+msgstr "incapaz criar pasta vazio de submódulo %s"
 
 #: builtin/submodule--helper.c:1595
 #, fuzzy, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
-msgstr "Submódulo '%s' (%s) registado com caminho '%s'\n"
+msgstr "Submódulo '%s' (%s) unregistred para caminho '%s'\n"
 
 #: builtin/submodule--helper.c:1624
 msgid "Remove submodule working trees even if they contain local changes"
@@ -22089,8 +22320,8 @@
 "Submodule (%s) branch configured to inherit branch from superproject, but "
 "the superproject is not on any branch"
 msgstr ""
-"O ramo do submódulo (%s) foi configurado para herdar o ramo do superprojeto, "
-"mas o superprojeto não está em nenhum ramo"
+"Ramo de submódulo (%s) foi configurado para herdar o ramo do superprojeto, "
+"mas o superprojeto está em ramo nenhum"
 
 #: builtin/submodule--helper.c:2541
 #, fuzzy, c-format
@@ -22130,7 +22361,7 @@
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper init [<caminho>]"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:151
+#: builtin/submodule--helper.c:2665 git-submodule.sh:150
 #, fuzzy, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
@@ -22177,7 +22408,7 @@
 msgid "--branch and --default are mutually exclusive"
 msgstr "--deepen e --depth são mutuamente exclusivos"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:710
+#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s não suporta --super-prefix"
@@ -22208,11 +22439,11 @@
 msgid "shorten ref output"
 msgstr "encurtar a apresentação de referências"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:486
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
 msgid "reason"
 msgstr "razão"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:486
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "razão da atualização"
 
@@ -22222,8 +22453,8 @@
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "\t\t<tagname> [<head>]"
 msgstr ""
-"git tag [-a | -s | -u <id-chave>] [-f] [-m <msg> | -F <ficheiro>] <nome-da-"
-"tag> [<head>]"
+"git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <ficheiro>]\n"
+"\t\t<tagname> [<head>]"
 
 #: builtin/tag.c:27
 msgid "git tag -d <tagname>..."
@@ -22239,7 +22470,8 @@
 msgstr ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <objeto>]\n"
-"\t\t[--format=<formato>] [--[no-]merged [<commit>]] [<padrão>...]"
+"\t\t[--format=<formato>] [--merged [<commit>] [--no-merged <commit>] "
+"[<pattern>...]"
 
 #: builtin/tag.c:30
 msgid "git tag -v [--format=<format>] <tagname>..."
@@ -22253,7 +22485,7 @@
 #: builtin/tag.c:105
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
-msgstr "Tag '%s' eliminada (era %s)\n"
+msgstr "Apaguei tag '%s' (era %s)\n"
 
 #: builtin/tag.c:135
 #, c-format
@@ -22264,7 +22496,7 @@
 "Lines starting with '%c' will be ignored.\n"
 msgstr ""
 "\n"
-"Escreva a mensagem da tag:\n"
+"Escreve mensagem para tag:\n"
 "  %s\n"
 "Linha começadas com '%c' serão ignoradas.\n"
 
@@ -22278,9 +22510,9 @@
 "want to.\n"
 msgstr ""
 "\n"
-"Escreva a mensagem da tag:\n"
+"Escreve mensagem para tag:\n"
 "  %s\n"
-"Linhas começadas com '%c' serão mantidas; pode removê-las se o desejar.\n"
+"Linhas começadas com '%c' serão mantidas; se queres, podes apagá-las.\n"
 
 #: builtin/tag.c:198
 msgid "unable to sign the tag"
@@ -22310,7 +22542,7 @@
 #: builtin/tag.c:292
 #, c-format
 msgid "The tag message has been left in %s\n"
-msgstr "A mensagem da tag foi guardada em %s\n"
+msgstr "Deixei a mensagem da tag em %s\n"
 
 #: builtin/tag.c:403
 msgid "list tag names"
@@ -22357,7 +22589,7 @@
 msgid "replace the tag if exists"
 msgstr "substituir a tag se esta existir"
 
-#: builtin/tag.c:422 builtin/update-ref.c:492
+#: builtin/tag.c:422 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "criar um reflog"
 
@@ -22434,7 +22666,7 @@
 #: builtin/tag.c:585
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
-msgstr "Tag '%s' atualizada (era %s)\n"
+msgstr "Atualizei tag '%s' (era %s)\n"
 
 #: builtin/unpack-objects.c:502
 msgid "Unpacking objects"
@@ -22725,20 +22957,20 @@
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [<opções>] --stdin [-z]"
 
-#: builtin/update-ref.c:487
+#: builtin/update-ref.c:500
 msgid "delete the reference"
 msgstr "eliminar a referência"
 
-#: builtin/update-ref.c:489
+#: builtin/update-ref.c:502
 msgid "update <refname> not the one it points to"
 msgstr ""
 "atualizar a referência <nome-da-referência>, não a referência que esta aponta"
 
-#: builtin/update-ref.c:490
+#: builtin/update-ref.c:503
 msgid "stdin has NUL-terminated arguments"
 msgstr "os argumentos da entrada padrão terminam em NUL"
 
-#: builtin/update-ref.c:491
+#: builtin/update-ref.c:504
 msgid "read updates from stdin"
 msgstr "ler atualizações da entrada padrão"
 
@@ -22833,7 +23065,7 @@
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <caminho>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:970
+#: builtin/worktree.c:60 builtin/worktree.c:973
 #, fuzzy, c-format
 msgid "failed to delete '%s'"
 msgstr "falha ao executar '%s'"
@@ -22974,120 +23206,120 @@
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "A ação --edit-todo só pode ser usada durante um rebase interativo."
 
-#: builtin/worktree.c:755
+#: builtin/worktree.c:758
 msgid "reason for locking"
 msgstr "razão de trancar"
 
-#: builtin/worktree.c:767 builtin/worktree.c:800 builtin/worktree.c:874
-#: builtin/worktree.c:998
+#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
+#: builtin/worktree.c:1001
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' não é uma árvore de trabalho"
 
-#: builtin/worktree.c:769 builtin/worktree.c:802
+#: builtin/worktree.c:772 builtin/worktree.c:805
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "A árvore de trabalho principal não pode ser trancada nem destrancada"
 
-#: builtin/worktree.c:774
+#: builtin/worktree.c:777
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' já está trancada, razão: %s"
 
-#: builtin/worktree.c:776
+#: builtin/worktree.c:779
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' já está trancada"
 
-#: builtin/worktree.c:804
+#: builtin/worktree.c:807
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' não está trancada"
 
-#: builtin/worktree.c:845
+#: builtin/worktree.c:848
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 
-#: builtin/worktree.c:853
+#: builtin/worktree.c:856
 #, fuzzy
 msgid "force move even if worktree is dirty or locked"
 msgstr "forçar mover/mudar o nome mesmo que o destino exista"
 
-#: builtin/worktree.c:876 builtin/worktree.c:1000
+#: builtin/worktree.c:879 builtin/worktree.c:1003
 #, fuzzy, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' não é uma árvore de trabalho"
 
-#: builtin/worktree.c:881
+#: builtin/worktree.c:884
 #, fuzzy, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "não foi possível migrar o diretório git de '%s' para '%s'"
 
-#: builtin/worktree.c:894
+#: builtin/worktree.c:897
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:896
+#: builtin/worktree.c:899
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:902
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:904
+#: builtin/worktree.c:907
 #, fuzzy, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "falha ao abrir '%s': %s"
 
-#: builtin/worktree.c:950
+#: builtin/worktree.c:953
 #, fuzzy, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "falha ao escrever para '%s'"
 
-#: builtin/worktree.c:954
+#: builtin/worktree.c:957
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 
-#: builtin/worktree.c:959
+#: builtin/worktree.c:962
 #, fuzzy, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "não foi possível executar 'git status' no submódulo '%s'"
 
-#: builtin/worktree.c:982
+#: builtin/worktree.c:985
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:1005
+#: builtin/worktree.c:1008
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:1007
+#: builtin/worktree.c:1010
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:1013
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:1034
+#: builtin/worktree.c:1037
 #, fuzzy, c-format
 msgid "repair: %s: %s"
 msgstr "%s: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:1040
 #, fuzzy, c-format
 msgid "error: %s: %s"
 msgstr "%s: %s"
@@ -23116,7 +23348,17 @@
 #: http-fetch.c:122
 #, fuzzy
 msgid "not a git repository"
-msgstr "Não é um repositório git"
+msgstr "é repositório git nenhum"
+
+#: t/helper/test-fast-rebase.c:141
+#, fuzzy
+msgid "unhandled options"
+msgstr "Opções gerais"
+
+#: t/helper/test-fast-rebase.c:146
+#, fuzzy
+msgid "error preparing revisions"
+msgstr "Erro ao rematar %s."
 
 #: t/helper/test-reach.c:154
 #, fuzzy, c-format
@@ -23155,9 +23397,10 @@
 "to read about a specific subcommand or concept.\n"
 "See 'git help git' for an overview of the system."
 msgstr ""
-"'git help -a' e 'git help -g' listam os subcomandos disponíveis e alguns\n"
-"guias de conceitos. Consulte 'git help <comando>' ou 'git help <conceito>'\n"
-"para ler sobre um subcomando ou conceito específico."
+"'git help -a' e 'git help -g' listam subcomandos disponíveis e alguns\n"
+"guias de conceitos. Consulta 'git help <comando>' ou 'git help <conceito>'\n"
+"para ler sobre um subcomando específico ou conceito específico.\n"
+"Vê 'git help git' para visão geral do sistema."
 
 #: git.c:187
 #, c-format
@@ -23177,7 +23420,7 @@
 #: git.c:229
 #, fuzzy, c-format
 msgid "no prefix given for --super-prefix\n"
-msgstr "%s não suporta --super-prefix"
+msgstr "--super-prefix recebeu prefixo nenhum\n"
 
 #: git.c:251
 #, c-format
@@ -23192,7 +23435,7 @@
 #: git.c:315
 #, fuzzy, c-format
 msgid "unknown option: %s\n"
-msgstr "opção desconhecido %s"
+msgstr "desconheço opção: %s\n"
 
 #: git.c:364
 #, c-format
@@ -23231,32 +23474,34 @@
 msgid "close failed on standard output"
 msgstr "enviar resultados para a saída padrão"
 
-#: git.c:819
+#: git.c:820
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 
-#: git.c:869
+#: git.c:870
 #, fuzzy, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "não é possível enviar mensagem como 7bit"
 
-#: git.c:882
+#: git.c:883
 #, fuzzy, c-format
 msgid ""
 "usage: %s\n"
 "\n"
-msgstr "utilização: %s"
+msgstr ""
+"utilização: %s\n"
+"\n"
 
-#: git.c:902
+#: git.c:903
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 
-#: git.c:914
+#: git.c:915
 #, fuzzy, c-format
 msgid "failed to run command '%s': %s\n"
-msgstr "falha ao abrir '%s': %s"
+msgstr "incapaz de executar comando '%s': %s\n"
 
 #: http.c:399
 #, c-format
@@ -23265,21 +23510,21 @@
 
 #: http.c:420
 msgid "Delegation control is not supported with cURL < 7.22.0"
-msgstr "Não é suportado delegar controlo com cURL < 7.22.0"
+msgstr "Delegação de controlo tem suporte nenhum com cURL < 7.22.0"
 
 #: http.c:429
 msgid "Public key pinning not supported with cURL < 7.44.0"
-msgstr "Não é suportado afixar chaves públicas com cURL < 7.44.0"
+msgstr "Afixar chaves públicas tem suporte nenhum com cURL < 7.44.0"
 
 #: http.c:910
 #, fuzzy
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "Não é suportado afixar chaves públicas com cURL < 7.44.0"
+msgstr "CURLSSLOPT_NO_REVOKE tem suporte nenhum com cURL < 7.44.0"
 
 #: http.c:989
 #, fuzzy
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
-msgstr "Não é suportado afixar chaves públicas com cURL < 7.44.0"
+msgstr "Restrição protocolar tem suporte nenhum com cURL < 7.44.0"
 
 #: http.c:1132
 #, c-format
@@ -23294,7 +23539,7 @@
 #: http.c:1143
 #, fuzzy, c-format
 msgid "Could not set SSL backend to '%s': already set"
-msgstr "Não foi possível voltar para $head_name"
+msgstr "Incapaz de definir backend SSL para '%s': já definido"
 
 #: http.c:2025
 #, c-format
@@ -23303,142 +23548,142 @@
 "  asked for: %s\n"
 "   redirect: %s"
 msgstr ""
-"não é possível atualizar base de url de redireção:\n"
-"  pedido para: %s\n"
-"    redireção: %s"
+"incapaz de atualizar base url da redireção:\n"
+"  pedi: %s\n"
+"   redireção: %s"
 
-#: remote-curl.c:174
+#: remote-curl.c:183
 #, fuzzy, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "opção inválida: %s"
 
-#: remote-curl.c:298
+#: remote-curl.c:307
 #, fuzzy, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "'%s' não é reconhecido como um repositório git"
 
-#: remote-curl.c:399
+#: remote-curl.c:408
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 
-#: remote-curl.c:430
+#: remote-curl.c:439
 #, fuzzy, c-format
 msgid "invalid server response; got '%s'"
 msgstr "referência inválida: %s"
 
-#: remote-curl.c:490
+#: remote-curl.c:499
 #, fuzzy, c-format
 msgid "repository '%s' not found"
 msgstr "o repositório '%s' não existe"
 
-#: remote-curl.c:494
+#: remote-curl.c:503
 #, fuzzy, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Falha ao executar: $rest"
 
-#: remote-curl.c:498
+#: remote-curl.c:507
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "não é possível aceder a '%s': %s"
 
-#: remote-curl.c:504
+#: remote-curl.c:513
 #, c-format
 msgid "redirecting to %s"
 msgstr "a redirecionar para %s "
 
-#: remote-curl.c:633
+#: remote-curl.c:642
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 
-#: remote-curl.c:645
+#: remote-curl.c:654
 msgid "remote server sent stateless separator"
 msgstr ""
 
-#: remote-curl.c:715
+#: remote-curl.c:724
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 
-#: remote-curl.c:745
+#: remote-curl.c:754
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr ""
 
-#: remote-curl.c:747
+#: remote-curl.c:756
 msgid "remote-curl: unexpected response end packet"
 msgstr ""
 
-#: remote-curl.c:823
+#: remote-curl.c:832
 #, fuzzy, c-format
 msgid "RPC failed; %s"
 msgstr "falha: %d"
 
-#: remote-curl.c:863
+#: remote-curl.c:872
 #, fuzzy
 msgid "cannot handle pushes this big"
 msgstr "não é possível processar mais do que %d revisão."
 
-#: remote-curl.c:978
+#: remote-curl.c:987
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 
-#: remote-curl.c:982
+#: remote-curl.c:991
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 
-#: remote-curl.c:1032
+#: remote-curl.c:1041
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr ""
 
-#: remote-curl.c:1034
+#: remote-curl.c:1043
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr ""
 
-#: remote-curl.c:1123
+#: remote-curl.c:1132
 #, fuzzy
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "O servidor não suporta clientes rasos"
 
-#: remote-curl.c:1138
+#: remote-curl.c:1147
 #, fuzzy
 msgid "fetch failed."
 msgstr "falha ao executar o comando stash"
 
-#: remote-curl.c:1184
+#: remote-curl.c:1193
 msgid "cannot fetch by sha1 over smart http"
 msgstr ""
 
-#: remote-curl.c:1228 remote-curl.c:1234
+#: remote-curl.c:1237 remote-curl.c:1243
 #, fuzzy, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "erro de protocolo: cabeçalho de pacote incorreto"
 
-#: remote-curl.c:1246 remote-curl.c:1361
+#: remote-curl.c:1255 remote-curl.c:1373
 #, fuzzy, c-format
 msgid "http transport does not support %s"
 msgstr "O servidor não suporta STARTTLS! %s"
 
-#: remote-curl.c:1282
+#: remote-curl.c:1291
 #, fuzzy
 msgid "git-http-push failed"
 msgstr "falha ao executar o comando stash"
 
-#: remote-curl.c:1467
+#: remote-curl.c:1479
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr ""
 
-#: remote-curl.c:1499
+#: remote-curl.c:1511
 msgid "remote-curl: error reading command stream from git"
 msgstr ""
 
-#: remote-curl.c:1506
+#: remote-curl.c:1518
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr ""
 
-#: remote-curl.c:1547
+#: remote-curl.c:1559
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr ""
@@ -23450,7 +23695,7 @@
 #: compat/compiler.h:38
 #, fuzzy
 msgid "no libc information available\n"
-msgstr "mostrar informação do ramo"
+msgstr "informação libc indisponível\n"
 
 #: list-objects-filter-options.h:91
 msgid "args"
@@ -23731,187 +23976,185 @@
 msgstr "atualizar informação de stat no ficheiro de índice"
 
 #: command-list.h:99
-msgid "Prepare patches for e-mail submission"
+msgid "Run a Git command on a list of repositories"
 msgstr ""
 
 #: command-list.h:100
+msgid "Prepare patches for e-mail submission"
+msgstr ""
+
+#: command-list.h:101
 #, fuzzy
 msgid "Verifies the connectivity and validity of the objects in the database"
 msgstr "escrever o objeto na base de dados de objetos"
 
-#: command-list.h:101
+#: command-list.h:102
 msgid "Cleanup unnecessary files and optimize the local repository"
 msgstr ""
 
-#: command-list.h:102
+#: command-list.h:103
 msgid "Extract commit ID from an archive created using git-archive"
 msgstr ""
 
-#: command-list.h:103
+#: command-list.h:104
 msgid "Print lines matching a pattern"
 msgstr "Imprimir linhas que correspondam a um padrão"
 
-#: command-list.h:104
+#: command-list.h:105
 msgid "A portable graphical interface to Git"
 msgstr ""
 
-#: command-list.h:105
+#: command-list.h:106
 msgid "Compute object ID and optionally creates a blob from a file"
 msgstr ""
 
-#: command-list.h:106
+#: command-list.h:107
 msgid "Display help information about Git"
 msgstr ""
 
-#: command-list.h:107
+#: command-list.h:108
 msgid "Server side implementation of Git over HTTP"
 msgstr ""
 
-#: command-list.h:108
+#: command-list.h:109
 #, fuzzy
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Transferir objetos e referências doutro repositório"
 
-#: command-list.h:109
+#: command-list.h:110
 #, fuzzy
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Transferir objetos e referências doutro repositório"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Build pack index file for an existing packed archive"
 msgstr ""
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Criar um repositório Git vazio ou reinicializar um já existente"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Instantly browse your working repository in gitweb"
 msgstr ""
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Add or parse structured information in commit messages"
 msgstr ""
 
-#: command-list.h:115
+#: command-list.h:116
 #, fuzzy
 msgid "The Git repository browser"
-msgstr "Não é um repositório git"
+msgstr "O browser de repositórios Git"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Mostrar histórico de commits"
 
-#: command-list.h:117
+#: command-list.h:118
 #, fuzzy
 msgid "Show information about files in the index and the working tree"
 msgstr "e fez alterações ao índice e/ou à árvore de trabalho"
 
-#: command-list.h:118
+#: command-list.h:119
 #, fuzzy
 msgid "List references in a remote repository"
 msgstr "repositório de referência"
 
-#: command-list.h:119
+#: command-list.h:120
 #, fuzzy
 msgid "List the contents of a tree object"
 msgstr "imprimir apenas as tags do objeto"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr ""
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr ""
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr ""
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Juntar duas ou mais histórias de desenvolvimento numa só"
 
-#: command-list.h:124
+#: command-list.h:125
 #, fuzzy
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "encontrar antecessores de uma única integração com n pontos"
 
-#: command-list.h:125
-#, fuzzy
-msgid "Run a three-way file merge"
-msgstr "A recorrer a integração com 3 pontos...\n"
-
 #: command-list.h:126
 #, fuzzy
-msgid "Run a merge for files needing merging"
-msgstr ""
-"integrar com 3 pontos se a integração ao nível de ficheiros não for "
-"necessária"
+msgid "Run a three-way file merge"
+msgstr "Faz uma junção por três de ficheiro"
 
 #: command-list.h:127
+#, fuzzy
+msgid "Run a merge for files needing merging"
+msgstr "Faz um merge de ficheiros precisando de merge"
+
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr ""
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Show three-way merge without touching index"
 msgstr ""
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Write and verify multi-pack-indexes"
 msgstr ""
 
-#: command-list.h:131
+#: command-list.h:132
 #, fuzzy
 msgid "Creates a tag object"
 msgstr "outro objeto tag"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr ""
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Mover ou mudar o nome de um ficheiro, diretório ou ligação simbólica"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr ""
 
-#: command-list.h:135
+#: command-list.h:136
 #, fuzzy
 msgid "Add or inspect object notes"
 msgstr "o objeto esperado %s não foi recebido"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr ""
 
-#: command-list.h:137
+#: command-list.h:138
 #, fuzzy
 msgid "Create a packed archive of objects"
 msgstr "ignorar objetos compactados"
 
-#: command-list.h:138
+#: command-list.h:139
 #, fuzzy
 msgid "Find redundant pack files"
 msgstr "não é possível invocar pread sobre o ficheiro de pacote"
 
-#: command-list.h:139
-msgid "Pack heads and tags for efficient repository access"
-msgstr ""
-
 #: command-list.h:140
-msgid "Routines to help parsing remote repository access parameters"
+msgid "Pack heads and tags for efficient repository access"
 msgstr ""
 
 #: command-list.h:141
@@ -23938,7 +24181,7 @@
 #: command-list.h:146
 #, fuzzy
 msgid "Applies a quilt patchset onto the current branch"
-msgstr "Não está definido nenhum ramo a montante para o ramo atual."
+msgstr "Submete a mistura de patchset para o ramo atual."
 
 #: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
@@ -24090,7 +24333,7 @@
 #: command-list.h:180
 #, fuzzy
 msgid "Switch branches"
-msgstr "Mudou para o ramo '%s'\n"
+msgstr "Troca branches"
 
 #: command-list.h:181
 #, fuzzy
@@ -24251,77 +24494,62 @@
 msgid "An overview of recommended workflows with Git"
 msgstr "Uma descrição geral dos fluxos de trabalho recomendados para o Git"
 
-#: git-bisect.sh:79
+#: git-bisect.sh:48
 #, sh-format
 msgid "Bad rev input: $arg"
 msgstr "Revisão incorreta na entrada: $arg"
 
-#: git-bisect.sh:99
-#, sh-format
-msgid "Bad rev input: $bisected_head"
-msgstr "Revisão incorreta na entrada: $bisected_head"
-
-#: git-bisect.sh:108
-#, sh-format
-msgid "Bad rev input: $rev"
-msgstr "Revisão incorreta na entrada: $rev"
-
-#: git-bisect.sh:117
-#, sh-format
-msgid "'git bisect $TERM_BAD' can take only one argument."
-msgstr "'git bisect $TERM_BAD' só leva um argumento."
-
-#: git-bisect.sh:149
+#: git-bisect.sh:82
 msgid "No logfile given"
 msgstr "Nenhum ficheiro de log fornecido"
 
-#: git-bisect.sh:150
+#: git-bisect.sh:83
 #, sh-format
 msgid "cannot read $file for replaying"
 msgstr "não é possível ler $file para reproduzir"
 
-#: git-bisect.sh:173
+#: git-bisect.sh:105
 msgid "?? what are you talking about?"
 msgstr "?? do que é que está a falar?"
 
-#: git-bisect.sh:183
+#: git-bisect.sh:115
 msgid "bisect run failed: no command provided."
 msgstr ""
 
-#: git-bisect.sh:188
+#: git-bisect.sh:120
 #, sh-format
 msgid "running $command"
 msgstr "a executar $command"
 
-#: git-bisect.sh:195
+#: git-bisect.sh:127
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "exit code $res from '$command' is < 0 or >= 128"
 msgstr ""
-"falha ao bissetar:\n"
-"código de saída $res de '$command' é < 0 ou >= 128"
+"bissetar impossível:\n"
+"exit code $res de '$command' é < 0 ou >= 128"
 
-#: git-bisect.sh:221
+#: git-bisect.sh:152
 msgid "bisect run cannot continue any more"
 msgstr "não é possível continuar a bissetar"
 
-#: git-bisect.sh:227
-#, sh-format
+#: git-bisect.sh:158
+#, fuzzy, sh-format
 msgid ""
 "bisect run failed:\n"
-"'bisect_state $state' exited with error code $res"
+"'bisect-state $state' exited with error code $res"
 msgstr ""
-"falha ao bissetar:\n"
-"'bisect_state $state' retornou com o código de erro $res"
+"bisseção impossível:\n"
+"'bisect_state $state' retornou código $res de erro"
 
-#: git-bisect.sh:234
+#: git-bisect.sh:165
 msgid "bisect run success"
 msgstr "bissecção concluída com sucesso"
 
-#: git-bisect.sh:242
+#: git-bisect.sh:173
 msgid "We are not bisecting."
-msgstr "Não se está a bissetar."
+msgstr "Estamos bissetando nada."
 
 #: git-merge-octopus.sh:46
 msgid ""
@@ -24337,12 +24565,12 @@
 
 #: git-merge-octopus.sh:62
 msgid "Should not be doing an octopus."
-msgstr "Não se deviria estar a fazer um polvo."
+msgstr "Deverias estar a fazer polvo nenhum."
 
 #: git-merge-octopus.sh:73
 #, sh-format
 msgid "Unable to find common commit with $pretty_name"
-msgstr "Não é possível encontrar commit comum com $pretty_name"
+msgstr "Incapaz de encontrar commit comum com $pretty_name"
 
 #: git-merge-octopus.sh:77
 #, fuzzy, sh-format
@@ -24363,49 +24591,49 @@
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "A integração simples não funcionou, a tentar integração automática."
 
-#: git-submodule.sh:180
+#: git-submodule.sh:179
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "Os caminhos relativos só podem ser usados a partir do topo da árvore de "
 "trabalho"
 
-#: git-submodule.sh:190
+#: git-submodule.sh:189
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr "URL do repositório: '$repo' deve ser absoluto ou começar com ./|../"
 
-#: git-submodule.sh:209
+#: git-submodule.sh:208
 #, sh-format
 msgid "'$sm_path' already exists in the index"
 msgstr "'$sm_path' já existe no índice"
 
-#: git-submodule.sh:212
+#: git-submodule.sh:211
 #, sh-format
 msgid "'$sm_path' already exists in the index and is not a submodule"
 msgstr "'$sm_path' já existe no índicee não é um submódulo"
 
-#: git-submodule.sh:219
+#: git-submodule.sh:218
 #, fuzzy, sh-format
 msgid "'$sm_path' does not have a commit checked out"
 msgstr "o caminho '%s' não tem a versão deles"
 
-#: git-submodule.sh:250
+#: git-submodule.sh:249
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
 msgstr "A adicionar repositório existente em '$sm_path' ao índice"
 
-#: git-submodule.sh:252
+#: git-submodule.sh:251
 #, sh-format
 msgid "'$sm_path' already exists and is not a valid git repo"
 msgstr "'$sm_path' já existe e não é uma repositório git válido"
 
-#: git-submodule.sh:260
+#: git-submodule.sh:259
 #, sh-format
 msgid "A git directory for '$sm_name' is found locally with remote(s):"
 msgstr ""
 "Um diretório git de '$sm_name' foi encontrado localmente com os remotos:"
 
-#: git-submodule.sh:262
+#: git-submodule.sh:261
 #, sh-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -24415,61 +24643,59 @@
 "or you are unsure what this means choose another name with the '--name' "
 "option."
 msgstr ""
-"Se quer reutilizar este diretório git local em vez de clonar de novo de\n"
+"Se queres reutilizar esta past git local, em vez de voltares a clonar\n"
 "  $realrepo\n"
-"use a opção '--force'. Se o diretório git local não é o repo correto\n"
-"ou não tem a certeza o que isto significa escolha outro nome com a opção '--"
-"name'."
+"usa a opção --force. Se a pasta git local é o repo incorreto ou\n"
+"se tens pouca certeza sobre o que isto significa, podes mudar o nome com a "
+"opção '--name'."
 
-#: git-submodule.sh:268
+#: git-submodule.sh:267
 #, sh-format
 msgid "Reactivating local git directory for submodule '$sm_name'."
 msgstr "A reativar o diretório git local do submódulo '$sm_name'."
 
-#: git-submodule.sh:280
+#: git-submodule.sh:279
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
-msgstr "Não foi possível extrair o submódulo '$sm_path'"
+msgstr "Incapaz de checkout submódulo '$sm_path'"
 
-#: git-submodule.sh:285
+#: git-submodule.sh:284
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
 msgstr "Falha ao adicionar o submódulo '$sm_path'"
 
-#: git-submodule.sh:294
+#: git-submodule.sh:293
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
 msgstr "Falha ao registar o submódulo '$sm_path'"
 
-#: git-submodule.sh:567
+#: git-submodule.sh:568
 #, sh-format
 msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-"Não foi possível encontrar a revisão atual no caminho de submódulo "
-"'$displaypath'"
+msgstr "Incapaz encontrar revisão atual em path de submódulo '$displaypath'"
 
-#: git-submodule.sh:577
+#: git-submodule.sh:578
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Não foi possível obter no caminho de submódulo '$sm_path'"
+msgstr "Incapaz de buscar em path de submódulo '$sm_path'"
 
-#: git-submodule.sh:582
+#: git-submodule.sh:583
 #, sh-format
 msgid ""
 "Unable to find current ${remote_name}/${branch} revision in submodule path "
 "'$sm_path'"
-msgstr ""
-"Não foi possível encontrar a revisão atual ${remote_name}/${branch} no "
-"caminho de submódulo '$sm_path'"
+msgstr "Incapaz de encontrar revisão atual ${remote_name}/${branch} em path de "
+"submódulo '$sm_path'"
 
-#: git-submodule.sh:600
+#: git-submodule.sh:601
 #, fuzzy, sh-format
 msgid ""
 "Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
 "$sha1:"
-msgstr "Não é possível obter no caminho de submódulo '$displaypath'"
+msgstr "Incapaz de buscar em path de submódulo '$displaypath'; tentando "
+"buscar $sha1 directamente:"
 
-#: git-submodule.sh:606
+#: git-submodule.sh:607
 #, sh-format
 msgid ""
 "Fetched in submodule path '$displaypath', but it did not contain $sha1. "
@@ -24478,59 +24704,52 @@
 "Obteve-se no caminho de submódulo '$displaypath', mas não continha $sha1. "
 "Falha ao obter aquele commit diretamente."
 
-#: git-submodule.sh:613
+#: git-submodule.sh:614
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr "Não é possível extrair '$sha1' no caminho de submódulo '$displaypath'"
+msgstr "Incapaz de checkout '$sha1' no path de submódulo '$displaypath'"
 
-#: git-submodule.sh:614
+#: git-submodule.sh:615
 #, sh-format
 msgid "Submodule path '$displaypath': checked out '$sha1'"
 msgstr "Caminho de submódulo '$displaypath': '$sha1' extraído"
 
-#: git-submodule.sh:618
+#: git-submodule.sh:619
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
-msgstr ""
-"Não foi possível efetuar rebase de '$sha1' no caminho de submódulo "
-"'$displaypath'"
+msgstr "Incapaz de rebasear '$sha1' em path de submódulo '$displaypath'"
 
-#: git-submodule.sh:619
+#: git-submodule.sh:620
 #, sh-format
 msgid "Submodule path '$displaypath': rebased into '$sha1'"
 msgstr "Caminho de submódulo '$displaypath': rebase concluído em '$sha1'"
 
-#: git-submodule.sh:624
+#: git-submodule.sh:625
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr "Não é possível integrar '$sha1' no caminho de submódulo '$displaypath'"
+msgstr "Incapaz juntar '$sha1' em path de submódulo '$displaypath'"
 
-#: git-submodule.sh:625
+#: git-submodule.sh:626
 #, sh-format
 msgid "Submodule path '$displaypath': merged in '$sha1'"
 msgstr "Caminho de submódulo '$displaypath': integrado em '$sha1'"
 
-#: git-submodule.sh:630
+#: git-submodule.sh:631
 #, sh-format
 msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
 msgstr ""
 "Falha ao executar '$command $sha1' no caminho de submódulo '$displaypath'"
 
-#: git-submodule.sh:631
+#: git-submodule.sh:632
 #, sh-format
 msgid "Submodule path '$displaypath': '$command $sha1'"
 msgstr "Caminho de submódulo '$displaypath': '$command $sha1'"
 
-#: git-submodule.sh:662
+#: git-submodule.sh:663
 #, sh-format
 msgid "Failed to recurse into submodule path '$displaypath'"
 msgstr "Falha ao percorrer o caminho de submódulo '$displaypath'"
 
-#: git-parse-remote.sh:89
-#, sh-format
-msgid "See git-${cmd}(1) for details."
-msgstr "Consulte git-${cmd}(1) para obter mais detalhes."
-
 #: git-rebase--preserve-merges.sh:109
 msgid "Applied autostash."
 msgstr "Pilha automática (autostash) aplicada."
@@ -24538,7 +24757,7 @@
 #: git-rebase--preserve-merges.sh:112
 #, sh-format
 msgid "Cannot store $stash_sha1"
-msgstr "Não é possível guardar $stash_sha1"
+msgstr "Incapaz guardar $stash_sha1"
 
 #: git-rebase--preserve-merges.sh:113
 msgid ""
@@ -24546,9 +24765,9 @@
 "Your changes are safe in the stash.\n"
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
-"Surgiram conflitos ao aplicar a pilha automática (autostash).\n"
-"As suas alterações estão guardadas na pilha.\n"
-"Pode executar \"git stash pop\" ou \"git stash drop\" oportunamente.\n"
+"Realizando autostash existem sobreposições.\n"
+"As tuas mudanças estão salvas na stash.\n"
+"Podes executar \"git stash pop\" ou \"git stash drop\" oportunamente.\n"
 
 #: git-rebase--preserve-merges.sh:191
 #, sh-format
@@ -24578,15 +24797,21 @@
 msgstr ""
 "\n"
 "Comandos:\n"
-" p, pick = usar commit\n"
-" r, reword = usar commit, mas editar a mensagem de commit\n"
-" e, edit = usar commit, mas parar para emendar\n"
-" s, squash = usar commit, mas fundir com o commit anterior\n"
-" f, fixup = como \"squash\", mas descartar a mensagem deste commit\n"
-" x, exec = executar o comando (o resto da linha) usando a shell\n"
-" d, drop = remover commit\n"
+"p, pick <commit> = usa commit\n"
+"r, reword <commit> = usa commit, editando a mensagem commit\n"
+"e, edit <commit> = usa commit, mas pára para emendar\n"
+"s, squash <commit> = usa commit, fundindo no commit anterior\n"
+"f, fixup <commit> = como \"squash\", mas descarta mensagem deste commit\n"
+"x, exec <commit> = executa comando (do resto da linha) usando a shell\n"
+"d, drop <commit> = larga commit\n"
+"l, label <label> = dá um label a HEAD atual\n"
+"t, reset <label> = reinicia a HEAD em label\n"
+"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
+".       cria merge commit usando a commit message original (a única\n"
+".       linha também poderá ser utlilizada). Usa -c <commit> para \n"
+".       modificar a commit message.\n"
 "\n"
-"Estas linhas pode ser reordenadas; são executadas de cima para baixo.\n"
+"Estas linhas podem ser reordenadas; são executadas de cima para baixo.\n"
 
 #: git-rebase--preserve-merges.sh:260
 #, sh-format
@@ -24599,11 +24824,11 @@
 "\n"
 "\tgit rebase --continue"
 msgstr ""
-"Pode emendar o commit agora, com\n"
+"Podes emendar o commit agora, com\n"
 "\n"
 "\tgit commit --amend $gpg_sign_opt_quoted\n"
 "\n"
-"Assim que estiver satisfeito com as alterações, execute\n"
+"Quando modificações estão correctas, executa\n"
 "\n"
 "\tgit rebase --continue"
 
@@ -24619,7 +24844,7 @@
 
 #: git-rebase--preserve-merges.sh:354
 msgid "Cannot write current commit's replacement sha1"
-msgstr "Não é possível escrever o sha1 substituto do commit"
+msgstr "Incapaz escrever sha1 substituto de commit"
 
 #: git-rebase--preserve-merges.sh:405
 #, sh-format
@@ -24629,12 +24854,12 @@
 #: git-rebase--preserve-merges.sh:407
 #, sh-format
 msgid "Cannot fast-forward to $sha1"
-msgstr "Não é possível avançar rapidamente para $sha1"
+msgstr "Incapaz fast-forward até $sha1"
 
 #: git-rebase--preserve-merges.sh:416
 #, sh-format
 msgid "Cannot move HEAD to $first_parent"
-msgstr "Não é possível mover HEAD para $first_parent"
+msgstr "Incapaz mover HEAD até $first_parent"
 
 #: git-rebase--preserve-merges.sh:421
 #, sh-format
@@ -24649,7 +24874,7 @@
 #: git-rebase--preserve-merges.sh:448
 #, sh-format
 msgid "Could not pick $sha1"
-msgstr "Não foi possível apanhar $sha1"
+msgstr "Incapaz apanhar $sha1"
 
 #: git-rebase--preserve-merges.sh:457
 #, sh-format
@@ -24671,7 +24896,7 @@
 #: git-rebase--preserve-merges.sh:482
 #, sh-format
 msgid "Cannot write $fixup_msg"
-msgstr "Não é possível escrever $fixup_msg"
+msgstr "Incapaz escrever $fixup_msg"
 
 #: git-rebase--preserve-merges.sh:485
 msgid "This is a combination of 2 commits."
@@ -24681,7 +24906,7 @@
 #: git-rebase--preserve-merges.sh:572
 #, sh-format
 msgid "Could not apply $sha1... $rest"
-msgstr "Não foi possível aplicar $sha1... $rest"
+msgstr "Incapaz submeter $sha1... $rest"
 
 #: git-rebase--preserve-merges.sh:601
 #, sh-format
@@ -24692,13 +24917,10 @@
 "before\n"
 "you are able to reword the commit."
 msgstr ""
-"Não foi possível emendar o commit depois de apanhar com sucesso $sha1... "
-"$rest\n"
-"Deve-se provavelmente a uma mensagem de commit vazia ou o pre-commit hook "
-"falhou.\n"
-"Se o pre-commit hook falhou, pode precisar de resolver o problema ante de "
-"poder\n"
-"reformular a mensagem do commit."
+"Impossível emendar commit pós um sucesso do picking $sha1... $rest\n"
+" devido a um commit message vazio, ou o pre-commit hook falhou. Se o \n"
+"pre-commit hook falhou, pode ser preciso resolver o issue antes de \n"
+"tentares modificar a mensagem commit."
 
 #: git-rebase--preserve-merges.sh:616
 #, sh-format
@@ -24708,7 +24930,7 @@
 #: git-rebase--preserve-merges.sh:631
 #, sh-format
 msgid "Cannot '$squash_style' without a previous commit"
-msgstr "Não é possível efetuar '$squash_style' sem um commit anterior"
+msgstr "Incapaz '$squash_style' sem um commit anterior"
 
 #: git-rebase--preserve-merges.sh:673
 #, sh-format
@@ -24730,7 +24952,7 @@
 "\n"
 "\tgit rebase --continue"
 msgstr ""
-"Pode corrigir o problema e executar\n"
+"Podes resolver o problema, e executar\n"
 "\n"
 "\tgit rebase --continue"
 
@@ -24745,8 +24967,8 @@
 "\tgit rebase --continue"
 msgstr ""
 "Executado com sucesso: $rest\n"
-"mas deixou alterações no índice e/ou na árvore de trabalho\n"
-"Submeta ou esconda as alterações e execute\n"
+"e tens alterações em índice e/ou em working tree\n"
+"Põe no commit ou stash, e corre\n"
 "\n"
 "\tgit rebase --continue"
 
@@ -24766,7 +24988,7 @@
 
 #: git-rebase--preserve-merges.sh:802
 msgid "Could not remove CHERRY_PICK_HEAD"
-msgstr "Não foi possível remover CHERRY_PICK_HEAD"
+msgstr "Incapaz remover CHERRY_PICK_HEAD"
 
 #: git-rebase--preserve-merges.sh:807
 #, sh-format
@@ -24785,17 +25007,17 @@
 "\n"
 "  git rebase --continue\n"
 msgstr ""
-"Tem alterações preparadas na árvore de trabalho.\n"
-"Se tenciona esmagar estas alterações\n"
-"no commit anterior, execute:\n"
+"Tens modificações staged na working tree.\n"
+"Se tenciona squash as modificações no último\n"
+"commit, execute:\n"
 "\n"
 "  git commit --amend $gpg_sign_opt_quoted\n"
 "\n"
-"Se tenciona pô-las num novo commit, execute:\n"
+"Se tenciona pô-las em novo commit, execute:\n"
 "\n"
 "  git commit $gpg_sign_opt_quoted\n"
 "\n"
-"Em ambos os casos, quando estiver pronto, continue com:\n"
+"Em ambos os casos, quando feito, continue com:\n"
 "\n"
 "  git rebase --continue\n"
 
@@ -24813,29 +25035,29 @@
 
 #: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
 msgid "Could not commit staged changes."
-msgstr "Não foi possível submeter as alterações preparadas."
+msgstr "Incapaz de commit alterações preparadas."
 
 #: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
 msgid "Could not execute editor"
-msgstr "Não foi possível executar o editor"
+msgstr "Incapaz executar editor"
 
 #: git-rebase--preserve-merges.sh:890
 #, sh-format
 msgid "Could not checkout $switch_to"
-msgstr "Não foi possível extrair $switch_to"
+msgstr "Incapaz checkout $switch_to"
 
 #: git-rebase--preserve-merges.sh:897
 msgid "No HEAD?"
-msgstr "Sem HEAD?"
+msgstr "HEAD nenhuma?"
 
 #: git-rebase--preserve-merges.sh:898
 #, sh-format
 msgid "Could not create temporary $state_dir"
-msgstr "Não foi possível criar $state_dir temporário"
+msgstr "Incapaz criar $state_dir temporário"
 
 #: git-rebase--preserve-merges.sh:901
 msgid "Could not mark as interactive"
-msgstr "Não foi possível marcar como interativo"
+msgstr "Incapaz marcar como interativo"
 
 #: git-rebase--preserve-merges.sh:933
 #, sh-format
@@ -24850,7 +25072,7 @@
 
 #: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
 msgid "Could not init rewritten commits"
-msgstr "Não foi possível inicializar commits reescritos"
+msgstr "Incapaz inicializar commits reescritos"
 
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
@@ -24860,8 +25082,7 @@
 #: git-sh-setup.sh:191
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
-msgstr ""
-"Não é possível mudar de diretório para $cdup, o topo da árvore de trabalho"
+msgstr "Incapaz chdir para $cdup, o topo da working tree"
 
 #: git-sh-setup.sh:200 git-sh-setup.sh:207
 #, sh-format
@@ -24870,35 +25091,33 @@
 
 #: git-sh-setup.sh:221
 msgid "Cannot rebase: You have unstaged changes."
-msgstr "Não é possível rebasear: tem alterações não preparadas."
+msgstr "Incapaz rebasear: Tens alterações despreparadas."
 
 #: git-sh-setup.sh:224
 msgid "Cannot rewrite branches: You have unstaged changes."
-msgstr "Não é possível reescrever ramos: tem alterações não preparadas."
+msgstr "Incapaz reescrever ramos: Tens alterações despreparadas."
 
 #: git-sh-setup.sh:227
 msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr "Não é possível puxar com rebase: tem alterações não preparadas."
+msgstr "Incapaz agarrar com rebase: Tens alterações despreparadas."
 
 #: git-sh-setup.sh:230
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
-msgstr "Não é possível efetuar $action: tem alterações não preparadas."
+msgstr "Incapaz $action: Tens alterações despreparadas."
 
 #: git-sh-setup.sh:243
 msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "Não é possível rebasear: o índice contém alterações não submetidas."
+msgstr "Incapaz rebasear: Teu index contém alterações por commitar."
 
 #: git-sh-setup.sh:246
 msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr ""
-"Não é possível puxar com rebase: o índice contém alterações não submetidas."
+msgstr "Incapaz agarrar com rebase: Teu index contém alterações por commitar."
 
 #: git-sh-setup.sh:249
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
-msgstr ""
-"Não é possível efetuar $action: o índice contém alterações não submetidas."
+msgstr "Incapaz $action: Teu index contém alterações por commitar."
 
 #: git-sh-setup.sh:253
 msgid "Additionally, your index contains uncommitted changes."
@@ -24911,7 +25130,7 @@
 
 #: git-sh-setup.sh:378
 msgid "Unable to determine absolute path of git directory"
-msgstr "Não é possível determinar o caminho absoluto do diretório git"
+msgstr "Incapaz determinar caminho absoluto de pasta git"
 
 #. TRANSLATORS: you can adjust this to align "git add -i" status menu
 #: git-add--interactive.perl:212
@@ -24919,62 +25138,62 @@
 msgid "%12s %12s %s"
 msgstr "%12s %12s %s"
 
-#: git-add--interactive.perl:634
+#: git-add--interactive.perl:632
 #, perl-format
 msgid "touched %d path\n"
 msgid_plural "touched %d paths\n"
 msgstr[0] "%d caminho afetado\n"
 msgstr[1] "%d caminhos afetados\n"
 
-#: git-add--interactive.perl:1058
+#: git-add--interactive.perl:1056
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for staging."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"como preparado imediatamente."
+"Se patch aplica-se correctamente, a edição do hunk será marcada\n"
+"imediatamente como preparado."
 
-#: git-add--interactive.perl:1061
+#: git-add--interactive.perl:1059
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for stashing."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"como escondido imediatamente."
+"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
+"imediatamente como stashed."
 
-#: git-add--interactive.perl:1064
+#: git-add--interactive.perl:1062
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for unstaging."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"como não preparado imediatamente."
+"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
+"imediatamente como despreparada."
 
-#: git-add--interactive.perl:1067 git-add--interactive.perl:1076
-#: git-add--interactive.perl:1082
+#: git-add--interactive.perl:1065 git-add--interactive.perl:1074
+#: git-add--interactive.perl:1080
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for applying."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"para ser aplicado imediatamente."
+"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
+"imediatamente como aplicada."
 
-#: git-add--interactive.perl:1070 git-add--interactive.perl:1073
-#: git-add--interactive.perl:1079
+#: git-add--interactive.perl:1068 git-add--interactive.perl:1071
+#: git-add--interactive.perl:1077
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for discarding."
 msgstr ""
-"Se o patch se aplicar corretamente, o excerto editado será marcado\n"
-"para ser descartado imediatamente."
+"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
+"imediatamente como descartada."
 
-#: git-add--interactive.perl:1116
+#: git-add--interactive.perl:1114
 #, perl-format
 msgid "failed to open hunk edit file for writing: %s"
 msgstr ""
 "não foi possível abrir o ficheiro de edição do excerto para escrita: %s"
 
-#: git-add--interactive.perl:1123
+#: git-add--interactive.perl:1121
 #, perl-format
 msgid ""
 "---\n"
@@ -24983,17 +25202,17 @@
 "Lines starting with %s will be removed.\n"
 msgstr ""
 "---\n"
-"Para remover linhas '%s', torne-as linhas ' ' (contexto).\n"
-"Para remover linhas '%s', elimine-as.\n"
+"Removendo linhas '%s', torna-as linhas ' ' (contexto).\n"
+"Removendo linhas '%s', elimina-as.\n"
 "Linhas começadas com %s serão removidas.\n"
 
-#: git-add--interactive.perl:1145
+#: git-add--interactive.perl:1143
 #, perl-format
 msgid "failed to open hunk edit file for reading: %s"
 msgstr ""
 "não foi possível abrir o ficheiro de edição do excerto para leitura: %s"
 
-#: git-add--interactive.perl:1253
+#: git-add--interactive.perl:1251
 msgid ""
 "y - stage this hunk\n"
 "n - do not stage this hunk\n"
@@ -25007,7 +25226,7 @@
 "a - preparar este excerto e todos os excertos seguintes no ficheiro\n"
 "d - não preparar este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1259
+#: git-add--interactive.perl:1257
 msgid ""
 "y - stash this hunk\n"
 "n - do not stash this hunk\n"
@@ -25021,7 +25240,7 @@
 "a - esconder este excerto e todos os seguintes no ficheiro\n"
 "d - não esconder este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1265
+#: git-add--interactive.perl:1263
 msgid ""
 "y - unstage this hunk\n"
 "n - do not unstage this hunk\n"
@@ -25035,7 +25254,7 @@
 "a - despreparar este excerto e todos os excertos seguintes no ficheiro\n"
 "d - não despreparar este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1271
+#: git-add--interactive.perl:1269
 msgid ""
 "y - apply this hunk to index\n"
 "n - do not apply this hunk to index\n"
@@ -25049,7 +25268,7 @@
 "a - aplicar este excerto e todos os excertos seguintes no ficheiro\n"
 "d - não aplicar este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1277 git-add--interactive.perl:1295
+#: git-add--interactive.perl:1275 git-add--interactive.perl:1293
 msgid ""
 "y - discard this hunk from worktree\n"
 "n - do not discard this hunk from worktree\n"
@@ -25063,7 +25282,7 @@
 "a - descartar este excerto e todos os excertos seguintes no ficheiro\n"
 "d - não descartar este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1283
+#: git-add--interactive.perl:1281
 msgid ""
 "y - discard this hunk from index and worktree\n"
 "n - do not discard this hunk from index and worktree\n"
@@ -25071,13 +25290,13 @@
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file"
 msgstr ""
-"y - descartar este excerto do índice e da árvore de trabalho\n"
-"n - não descartar este excerto do índice nem da árvore de trabalho\n"
-"q - sair; não descartar este excerto nem nenhum dos restantes\n"
-"a - descartar este excerto e todos os excertos seguintes no ficheiro\n"
-"d - não descartar este excerto nem os excertos seguintes no ficheiro"
+"y - descartar este pedaço de index e worktree\n"
+"n - manter este pedeço no index e worktree\n"
+"q - sair; manter este pedaço e qualquer outro restante\n"
+"a - descartar este pedaço e qualquer próximo deste ficheiro\n"
+"d - manter este pedaço e qualquer próximo deste ficheiro"
 
-#: git-add--interactive.perl:1289
+#: git-add--interactive.perl:1287
 msgid ""
 "y - apply this hunk to index and worktree\n"
 "n - do not apply this hunk to index and worktree\n"
@@ -25091,7 +25310,7 @@
 "a - aplicar este excerto e todos os excertos seguintes no ficheiro\n"
 "d - não aplicar este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1301
+#: git-add--interactive.perl:1299
 #, fuzzy
 msgid ""
 "y - apply this hunk to worktree\n"
@@ -25106,7 +25325,7 @@
 "a - aplicar este excerto e todos os excertos seguintes no ficheiro\n"
 "d - não aplicar este excerto nem os excertos seguintes no ficheiro"
 
-#: git-add--interactive.perl:1316
+#: git-add--interactive.perl:1314
 msgid ""
 "g - select a hunk to go to\n"
 "/ - search for a hunk matching the given regex\n"
@@ -25128,95 +25347,95 @@
 "e - editar manualmente o excerto atual\n"
 "? - imprimir ajuda\n"
 
-#: git-add--interactive.perl:1347
+#: git-add--interactive.perl:1345
 msgid "The selected hunks do not apply to the index!\n"
 msgstr "Os excertos selecionados não aplicam ao índice!\n"
 
-#: git-add--interactive.perl:1362
+#: git-add--interactive.perl:1360
 #, perl-format
 msgid "ignoring unmerged: %s\n"
 msgstr "ignorado não integrado: %s\n"
 
-#: git-add--interactive.perl:1481
+#: git-add--interactive.perl:1479
 #, fuzzy, perl-format
 msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
 msgstr ""
 "Aplicar alteração de modo ao índice e à árvore de trabalho [y,n,q,a,d,/"
 "%s,?]? "
 
-#: git-add--interactive.perl:1482
+#: git-add--interactive.perl:1480
 #, fuzzy, perl-format
 msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
 msgstr ""
 "Aplicar eliminação ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
 
-#: git-add--interactive.perl:1483
+#: git-add--interactive.perl:1481
 #, fuzzy, perl-format
 msgid "Apply addition to worktree [y,n,q,a,d%s,?]? "
 msgstr ""
 "Aplicar eliminação ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
 
-#: git-add--interactive.perl:1484
+#: git-add--interactive.perl:1482
 #, fuzzy, perl-format
 msgid "Apply this hunk to worktree [y,n,q,a,d%s,?]? "
 msgstr ""
 "Aplicar este excerto ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
 
-#: git-add--interactive.perl:1601
+#: git-add--interactive.perl:1599
 msgid "No other hunks to goto\n"
 msgstr ""
 
-#: git-add--interactive.perl:1619
+#: git-add--interactive.perl:1617
 #, perl-format
 msgid "Invalid number: '%s'\n"
 msgstr "Número inválido: '%s'\n"
 
-#: git-add--interactive.perl:1624
+#: git-add--interactive.perl:1622
 #, perl-format
 msgid "Sorry, only %d hunk available.\n"
 msgid_plural "Sorry, only %d hunks available.\n"
 msgstr[0] "Lamento, apenas %d excerto disponível.\n"
 msgstr[1] "Lamento, apenas %d excertos disponíveis.\n"
 
-#: git-add--interactive.perl:1659
+#: git-add--interactive.perl:1657
 msgid "No other hunks to search\n"
 msgstr ""
 
-#: git-add--interactive.perl:1676
+#: git-add--interactive.perl:1674
 #, perl-format
 msgid "Malformed search regexp %s: %s\n"
 msgstr "Regexp de pesquisa malformada %s: %s\n"
 
-#: git-add--interactive.perl:1686
+#: git-add--interactive.perl:1684
 msgid "No hunk matches the given pattern\n"
 msgstr "Nenhum excerto corresponde ao padrão fornecido\n"
 
-#: git-add--interactive.perl:1698 git-add--interactive.perl:1720
+#: git-add--interactive.perl:1696 git-add--interactive.perl:1718
 msgid "No previous hunk\n"
 msgstr "Nenhum excerto anterior\n"
 
-#: git-add--interactive.perl:1707 git-add--interactive.perl:1726
+#: git-add--interactive.perl:1705 git-add--interactive.perl:1724
 msgid "No next hunk\n"
 msgstr "Nenhum excerto seguinte\n"
 
-#: git-add--interactive.perl:1732
+#: git-add--interactive.perl:1730
 msgid "Sorry, cannot split this hunk\n"
 msgstr ""
 
-#: git-add--interactive.perl:1738
+#: git-add--interactive.perl:1736
 #, perl-format
 msgid "Split into %d hunk.\n"
 msgid_plural "Split into %d hunks.\n"
 msgstr[0] "Dividir em %d excerto.\n"
 msgstr[1] "Dividir em %d excertos.\n"
 
-#: git-add--interactive.perl:1748
+#: git-add--interactive.perl:1746
 msgid "Sorry, cannot edit this hunk\n"
 msgstr ""
 
 #. TRANSLATORS: please do not translate the command names
 #. 'status', 'update', 'revert', etc.
-#: git-add--interactive.perl:1813
+#: git-add--interactive.perl:1811
 msgid ""
 "status        - show paths with changes\n"
 "update        - add working tree state to the staged set of changes\n"
@@ -25236,19 +25455,19 @@
 "add untracked - adicionar conteúdos de ficheiros não controlados ao conjunto "
 "de alterações preparadas\n"
 
-#: git-add--interactive.perl:1830 git-add--interactive.perl:1835
-#: git-add--interactive.perl:1838 git-add--interactive.perl:1845
-#: git-add--interactive.perl:1848 git-add--interactive.perl:1855
-#: git-add--interactive.perl:1859 git-add--interactive.perl:1865
+#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
+#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
+#: git-add--interactive.perl:1853 git-add--interactive.perl:1860
+#: git-add--interactive.perl:1864 git-add--interactive.perl:1870
 msgid "missing --"
 msgstr "falta --"
 
-#: git-add--interactive.perl:1861
+#: git-add--interactive.perl:1866
 #, perl-format
 msgid "unknown --patch mode: %s"
 msgstr "Mode de --patch desconhecido: %s"
 
-#: git-add--interactive.perl:1867 git-add--interactive.perl:1873
+#: git-add--interactive.perl:1872 git-add--interactive.perl:1878
 #, perl-format
 msgid "invalid argument %s, expecting --"
 msgstr "argumento inválido %s, esperava-se --"
@@ -25289,7 +25508,7 @@
 
 #: git-send-email.perl:489 git-send-email.perl:691
 msgid "Cannot run git format-patch from outside a repository\n"
-msgstr "Não é possível executar git format-patch fora de um repositório\n"
+msgstr "Incapaz executar git format-patch fora de um repositório\n"
 
 #: git-send-email.perl:492
 msgid ""
@@ -25354,7 +25573,7 @@
 "warning: no patches were sent\n"
 msgstr ""
 "fatal: %s: %s\n"
-"aviso: nenhum patch foi enviado\n"
+"aviso: enviado patch nenhum\n"
 
 #: git-send-email.perl:713
 msgid ""
@@ -25519,9 +25738,7 @@
 
 #: git-send-email.perl:1564
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
-msgstr ""
-"Não é possível inicializar SMTP devidamente. Verifique a configuração e use "
-"--smtp-debug."
+msgstr "Incapaz inicializar SMTP devidamente. Verifica configuração e usa --smtp-debug."
 
 #: git-send-email.perl:1582
 #, perl-format
@@ -25582,7 +25799,7 @@
 #: git-send-email.perl:1876
 #, perl-format
 msgid "(%s) Could not execute '%s'"
-msgstr "(%s) Não foi possível executar '%s'"
+msgstr "(%s) Incapaz executar '%s'"
 
 #: git-send-email.perl:1883
 #, perl-format
@@ -25623,6 +25840,86 @@
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Deseja mesmo enviar %s? [y|N]: "
 
+#~ msgid "store only"
+#~ msgstr "armazenar apenas"
+
+#~ msgid "compress faster"
+#~ msgstr "compressão rápida"
+
+#~ msgid "compress better"
+#~ msgstr "compressão ótima"
+
+#, fuzzy, c-format
+#~ msgid "unexpected duplicate commit id %s"
+#~ msgstr "não foi possível analisar o commit %s"
+
+#, fuzzy, c-format
+#~ msgid "%s: not a valid OID"
+#~ msgstr "'%s' não é uma referência válida."
+
+#, fuzzy, c-format
+#~ msgid "invalid committer '%s'"
+#~ msgstr "commit inválido %s"
+
+#, fuzzy, c-format
+#~ msgid "invalid committer: %s"
+#~ msgstr "commit inválido %s"
+
+#, fuzzy
+#~ msgid "git bisect--helper --next-all"
+#~ msgstr "git bisect--helper --next-all [--no-checkout]"
+
+#, fuzzy
+#~ msgid "git bisect--helper --bisect-clean-state"
+#~ msgstr "git bisect--helper --next-all [--no-checkout]"
+
+#, fuzzy
+#~ msgid "git bisect--helper --bisect-autostart"
+#~ msgstr "git bisect--helper --next-all [--no-checkout]"
+
+#~ msgid "perform 'git bisect next'"
+#~ msgstr "executar 'git bisect next'"
+
+#, fuzzy
+#~ msgid "--write-terms requires two arguments"
+#~ msgstr "--abort não leva argumentos"
+
+#, fuzzy
+#~ msgid "--bisect-clean-state requires no arguments"
+#~ msgstr "--continue não leva argumentos"
+
+#, fuzzy
+#~ msgid "--bisect-autostart does not accept arguments"
+#~ msgstr "%%(subject) não leva argumentos"
+
+#~ msgid "n,m"
+#~ msgstr "n,m"
+
+#~ msgid "Process line range n,m in file, counting from 1"
+#~ msgstr "processar intervalo de linhas n,m, a contar a partir de 1"
+
+#~ msgid "name of output directory is too long"
+#~ msgstr "o nome do diretório de saída é demasiado longo"
+
+#~ msgid "standard output, or directory, which one?"
+#~ msgstr "saída padrão, ou diretório, qual deles?"
+
+#, c-format
+#~ msgid "failed to remove '%s'"
+#~ msgstr "falha ao remover '%s'"
+
+#, sh-format
+#~ msgid "Bad rev input: $bisected_head"
+#~ msgstr "Revisão incorreta na entrada: $bisected_head"
+
+#, sh-format
+#~ msgid "Bad rev input: $rev"
+#~ msgstr "Revisão incorreta na entrada: $rev"
+
+#, sh-format
+#~ msgid "See git-${cmd}(1) for details."
+#~ msgstr "Consulte git-${cmd}(1) para obter mais detalhes."
+
 #, c-format
 #~ msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
 #~ msgstr ""
@@ -25671,7 +25968,7 @@
 
 #, c-format
 #~ msgid "Could not open '%s' for writing"
-#~ msgstr "Não foi possível abrir '%s' para escrita"
+#~ msgstr "Incapaz abrir '%s' para escrita"
 
 #, c-format
 #~ msgid "positive value expected objectname:short=%s"
@@ -25715,8 +26012,8 @@
 #~ "Cannot update sparse checkout: the following entries are not up-to-date:\n"
 #~ "%s"
 #~ msgstr ""
-#~ "Não é possível extrair esparsamente: as seguintes entradas não estão "
-#~ "atualizadas:\n"
+#~ "Impossível actualizar sparse checkout: estas entradas estão "
+#~ "desactualizadas:\n"
 #~ "%s"
 
 #, c-format
@@ -25803,8 +26100,7 @@
 #~ "Cannot update paths and switch to branch '%s' at the same time.\n"
 #~ "Did you intend to checkout '%s' which can not be resolved as commit?"
 #~ msgstr ""
-#~ "Não é possível atualizar os caminho e mudar para o ramo '%s' ao mesmo "
-#~ "tempo.\n"
+#~ " possível atualizar os caminho e mudar para o ramo '%s' ao mesmo tempo.\n"
 #~ "Pretendia extrair '%s' o qual não pode ser resolvido como commit?"
 
 #, c-format
@@ -25834,7 +26130,7 @@
 
 #, c-format
 #~ msgid "annotated tag %s has no embedded name"
-#~ msgstr "a tag anotada %s não tem nenhum nome incorporado"
+#~ msgstr "tag anotada %s falta o nome incorporado"
 
 #~ msgid "<command>"
 #~ msgstr "<comando>"
@@ -25844,7 +26140,7 @@
 
 #, c-format
 #~ msgid "Don't know how to fetch from %s"
-#~ msgstr "Não sei como obter de %s"
+#~ msgstr "Desconheço como buscar de %s"
 
 #, c-format
 #~ msgid "Can't stat %s"
@@ -25916,7 +26212,7 @@
 
 #, sh-format
 #~ msgid "$onto_name: there is no merge base"
-#~ msgstr "$onto_name: não há nenhuma base de integração"
+#~ msgstr "$onto_name: há base de junção nenhuma"
 
 #, sh-format
 #~ msgid "fatal: no such branch: $branch_name"
@@ -25927,15 +26223,15 @@
 #~ msgstr "$branch_name avançado rapidamente para $onto_name."
 
 #~ msgid "Cannot remove temporary index (can't happen)"
-#~ msgstr "Não é possível remover o índice temporário (não pode acontecer)"
+#~ msgstr "Incapaz remover index temporário (pode acontecer de maneira nenhuma)"
 
 #, sh-format
 #~ msgid ""
 #~ "error: unknown option for 'stash save': $option\n"
 #~ "       To provide a message, use git stash save -- '$option'"
 #~ msgstr ""
-#~ "erro: opção desconhecida de 'stash save': $option\n"
-#~ "      Para fornecer uma mensagem, use git stash save -- '$option'"
+#~ "erro: desconheço opção de 'stash save': $option\n"
+#~ "       Fornecendo mensagem, usa git stash save -- '$option'"
 
 #, sh-format
 #~ msgid "unknown option: $opt"
@@ -25946,7 +26242,7 @@
 #~ msgstr "$reference não é uma referência válida"
 
 #~ msgid "Cannot unstage modified files"
-#~ msgstr "Não é possível despreparar os ficheiros modificado"
+#~ msgstr "Incapaz despreparar ficheiros modificado"
 
 #~ msgid "(To restore them type \"git stash apply\")"
 #~ msgstr "(Para os restaurar execute \"git stash apply\")"
@@ -26027,8 +26323,8 @@
 #~ "There is nothing to exclude from by :(exclude) patterns.\n"
 #~ "Perhaps you forgot to add either ':/' or '.' ?"
 #~ msgstr ""
-#~ "Não há nada para excluir de acordo com o padrão :(excluir).\n"
-#~ "Talvez se tenha esquecido de acrescentar ':/' ou '.' ?"
+#~ "Há nada a excluir de acordo com a pattern :(exclude).\n"
+#~ "Talvez tenhas-te esquecido de acrescentar ':/' ou '.' ?"
 
 #~ msgid "unrecognized format: %%(%s)"
 #~ msgstr "formato não reconhecido: %%(%s)"
@@ -26100,7 +26396,7 @@
 #~ "(use 'rm -rf' se pretende mesmo removê-lo, incluindo todo o seu histórico)"
 
 #~ msgid "Could not write to %s"
-#~ msgstr "Não foi possível escrever em %s"
+#~ msgstr "Incapaz escrever em %s"
 
 #~ msgid "Error wrapping up %s."
 #~ msgstr "Erro ao rematar %s."
@@ -26109,18 +26405,16 @@
 #~ msgstr "As suas alterações locais serão substituídas por cherry-pick."
 
 #~ msgid "Cannot revert during another revert."
-#~ msgstr "Não é possível reverter durante outra reversão."
+#~ msgstr "Incapaz reverter durante outra reversão."
 
 #~ msgid "Cannot cherry-pick during another cherry-pick."
-#~ msgstr ""
-#~ "Não é possível efetuar cherry-pick durante outro cherry-pick. durante um "
-#~ "cherry-pick."
+#~ msgstr "Incapaz apanhar durante outra apanha."
 
 #~ msgid "Could not open %s"
-#~ msgstr "Não foi possível abrir %s"
+#~ msgstr "Incapaz abrir %s"
 
 #~ msgid "Could not format %s."
-#~ msgstr "Não foi possível formatar %s."
+#~ msgstr "Incapaz formatar %s."
 
 #~ msgid "You need to set your committer info first"
 #~ msgstr "Primeiro tem de definir a sua informação de committer"
@@ -26258,10 +26552,10 @@
 #~ msgstr "Caminho não processado??? %s"
 
 #~ msgid "Cannot %s during a %s"
-#~ msgstr "Não foi possível efetuar %s durante %s"
+#~ msgstr "Incapaz %s durante %s"
 
 #~ msgid "Can't cherry-pick into empty head"
-#~ msgstr "Não é possível efetuar cherry-pick numa cabeça vazia"
+#~ msgstr "Incapaz apanhar para uma head vazia"
 
 #~ msgid "could not write branch description template"
 #~ msgstr "não foi possível escrever o modelo da descrição do ramo"
@@ -26302,9 +26596,6 @@
 #~ msgid "removing '%s' failed"
 #~ msgstr "falha ao remover '%s'"
 
-#~ msgid "Please call 'bisect_state' with at least one argument."
-#~ msgstr "Invoque 'bisect_state' com pelo menos um argumento."
-
 #~ msgid ""
 #~ "If you want to reuse this local git directory instead of cloning again "
 #~ "from"
@@ -26417,7 +26708,7 @@
 #~ msgstr "check|on-demand|no"
 
 #~ msgid "Could not append '%s'"
-#~ msgstr "Não foi possível acrescentar '%s'"
+#~ msgstr "Incapaz acrescentar '%s'"
 
 #~ msgid "Testing "
 #~ msgstr "A testar "
@@ -26461,10 +26752,10 @@
 #~ msgstr ", atrás "
 
 #~ msgid "no files added"
-#~ msgstr "nenhum ficheiros adicionado"
+#~ msgstr "adicionado ficheiro nenhum"
 
 #~ msgid "Could not extract email from committer identity."
-#~ msgstr "Não foi possível extrair a identidade do committer do e-mail."
+#~ msgstr "Incapaz extrair email apartir identidade committer."
 
 #~ msgid "option %s does not accept negative form"
 #~ msgstr "opção %s não aceita formato negativo"
diff --git a/po/ru.po b/po/ru.po
index a77b462..993d106 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -3,16 +3,19 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2014-2019
-# insolor, 2014
-# insolor, 2014
+# Alexander Golubev <fatzer2@gmail.com>, 2020
+# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2014-2021
+# Mike Manturov, 2014
+# Mike Manturov, 2014
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2020
+# Sergey Kuznetsov <votkinsk@gmail.com>, 2021
 # Чук Таблицоменделеев <aurum444an@gmail.com>, 2019
 msgid ""
 msgstr ""
 "Project-Id-Version: Git Russian Localization Project\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2019-06-04 08:24+0800\n"
-"PO-Revision-Date: 2019-06-21 17:28+0000\n"
+"POT-Creation-Date: 2020-12-21 07:10+0800\n"
+"PO-Revision-Date: 2021-01-29 19:33+0000\n"
 "Last-Translator: Dimitriy Ryazantcev <DJm00n@mail.ru>\n"
 "Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -21,73 +24,736 @@
 "Language: ru\n"
 "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
 
-#: advice.c:103
+#: add-interactive.c:376
+#, c-format
+msgid "Huh (%s)?"
+msgstr "Хм (%s)?"
+
+#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
+#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
+#: builtin/rebase.c:1955
+msgid "could not read index"
+msgstr "не удалось прочитать индекс"
+
+#: add-interactive.c:584 git-add--interactive.perl:269
+#: git-add--interactive.perl:294
+msgid "binary"
+msgstr "двоичный"
+
+#: add-interactive.c:642 git-add--interactive.perl:278
+#: git-add--interactive.perl:332
+msgid "nothing"
+msgstr "ничего"
+
+#: add-interactive.c:643 git-add--interactive.perl:314
+#: git-add--interactive.perl:329
+msgid "unchanged"
+msgstr "нет изменений"
+
+#: add-interactive.c:680 git-add--interactive.perl:641
+msgid "Update"
+msgstr "Обновить"
+
+#: add-interactive.c:697 add-interactive.c:885
+#, c-format
+msgid "could not stage '%s'"
+msgstr " не удалось проиндексировать «%s»"
+
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+msgid "could not write index"
+msgstr "не удалось записать индекс"
+
+#: add-interactive.c:706 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"
+msgstr[2] "обновлено %d путей\n"
+msgstr[3] "обновлено %d пути\n"
+
+#: add-interactive.c:724 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:4125 builtin/checkout.c:295
+#: builtin/reset.c:145
+#, c-format
+msgid "make_cache_entry failed for path '%s'"
+msgstr "сбой make_cache_entry для пути «%s»"
+
+#: add-interactive.c:759 git-add--interactive.perl:653
+msgid "Revert"
+msgstr "Обратить изменения"
+
+#: add-interactive.c:775
+msgid "Could not parse HEAD^{tree}"
+msgstr "Не удалось разобрать HEAD^{tree}"
+
+#: add-interactive.c:813 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"
+msgstr[2] "обращены изменения %d путей\n"
+msgstr[3] "обращены изменения %d путей\n"
+
+#: add-interactive.c:864 git-add--interactive.perl:693
+#, c-format
+msgid "No untracked files.\n"
+msgstr "Нет неотслеживаемых файлов.\n"
+
+#: add-interactive.c:868 git-add--interactive.perl:687
+msgid "Add untracked"
+msgstr "Добавить неотслеживаемый"
+
+#: add-interactive.c:895 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"
+msgstr[2] "добавлено %d путей\n"
+msgstr[3] "добавлено %d пути\n"
+
+#: add-interactive.c:925
+#, c-format
+msgid "ignoring unmerged: %s"
+msgstr "игнорирую не слитое: %s"
+
+#: add-interactive.c:937 add-patch.c:1751 git-add--interactive.perl:1369
+#, c-format
+msgid "Only binary files changed.\n"
+msgstr "Только изменения двоичных файлов.\n"
+
+#: add-interactive.c:939 add-patch.c:1749 git-add--interactive.perl:1371
+#, c-format
+msgid "No changes.\n"
+msgstr "Нет изменений.\n"
+
+#: add-interactive.c:943 git-add--interactive.perl:1379
+msgid "Patch update"
+msgstr "Обновление патча"
+
+#: add-interactive.c:982 git-add--interactive.perl:1792
+msgid "Review diff"
+msgstr "Просмотреть список изменений"
+
+#: add-interactive.c:1010
+msgid "show paths with changes"
+msgstr "показать пути с изменениями"
+
+#: add-interactive.c:1012
+msgid "add working tree state to the staged set of changes"
+msgstr "добавить содержимое рабочего каталога к списку проиндексированных изменений"
+
+#: add-interactive.c:1014
+msgid "revert staged set of changes back to the HEAD version"
+msgstr "вернуть проиндексированные изменения назад к HEAD-версии"
+
+#: add-interactive.c:1016
+msgid "pick hunks and update selectively"
+msgstr "выбрать отдельные блоки изменений и обновить выборочно"
+
+#: add-interactive.c:1018
+msgid "view diff between HEAD and index"
+msgstr "просмотреть список изменений между HEAD и индексом"
+
+#: add-interactive.c:1020
+msgid "add contents of untracked files to the staged set of changes"
+msgstr "добавить содержимое неотслеживаемых файлов к списку проиндексированных изменений"
+
+#: add-interactive.c:1028 add-interactive.c:1077
+msgid "Prompt help:"
+msgstr "Справка:"
+
+#: add-interactive.c:1030
+msgid "select a single item"
+msgstr "выбрать один элемент"
+
+#: add-interactive.c:1032
+msgid "select a range of items"
+msgstr "выбрать диапазон элементов"
+
+#: add-interactive.c:1034
+msgid "select multiple ranges"
+msgstr "выбрать несколько диапазонов"
+
+#: add-interactive.c:1036 add-interactive.c:1081
+msgid "select item based on unique prefix"
+msgstr "выбрать элемент на основе уникального префикса"
+
+#: add-interactive.c:1038
+msgid "unselect specified items"
+msgstr "убрать выбор указанных элементов"
+
+#: add-interactive.c:1040
+msgid "choose all items"
+msgstr "выбрать все элементы"
+
+#: add-interactive.c:1042
+msgid "(empty) finish selecting"
+msgstr "(пусто) закончить выбор"
+
+#: add-interactive.c:1079
+msgid "select a numbered item"
+msgstr "выбрать элемент по номеру"
+
+#: add-interactive.c:1083
+msgid "(empty) select nothing"
+msgstr "(пусто) ничего не выбирать"
+
+#: add-interactive.c:1091 builtin/clean.c:816 git-add--interactive.perl:1896
+msgid "*** Commands ***"
+msgstr "*** Команды ***"
+
+#: add-interactive.c:1092 builtin/clean.c:817 git-add--interactive.perl:1893
+msgid "What now"
+msgstr "Что теперь"
+
+#: add-interactive.c:1144 git-add--interactive.perl:213
+msgid "staged"
+msgstr "в индексе"
+
+#: add-interactive.c:1144 git-add--interactive.perl:213
+msgid "unstaged"
+msgstr "не в индексе"
+
+#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
+#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
+#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
+#: builtin/submodule--helper.c:409 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
+#: git-add--interactive.perl:213
+msgid "path"
+msgstr "путь"
+
+#: add-interactive.c:1151
+msgid "could not refresh index"
+msgstr "не удалось обновить индекс"
+
+#: add-interactive.c:1165 builtin/clean.c:781 git-add--interactive.perl:1803
+#, c-format
+msgid "Bye.\n"
+msgstr "До свидания.\n"
+
+#: add-patch.c:34 git-add--interactive.perl:1431
+#, c-format, perl-format
+msgid "Stage mode change [y,n,q,a,d%s,?]? "
+msgstr "Проиндексировать изменение режима доступа [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:35 git-add--interactive.perl:1432
+#, c-format, perl-format
+msgid "Stage deletion [y,n,q,a,d%s,?]? "
+msgstr "Проиндексировать удаление [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:36 git-add--interactive.perl:1433
+#, c-format, perl-format
+msgid "Stage addition [y,n,q,a,d%s,?]? "
+msgstr "Добавить к индексу [y,n,q,a,d%s,?]?"
+
+#: add-patch.c:37 git-add--interactive.perl:1434
+#, c-format, perl-format
+msgid "Stage this hunk [y,n,q,a,d%s,?]? "
+msgstr "Проиндексировать этот блок изменений [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:39
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" staging."
+msgstr "При чистом наложении патча изменённая часть сразу будет отмечена для индексирования."
+
+#: add-patch.c:42
+msgid ""
+"y - stage this hunk\n"
+"n - do not stage this hunk\n"
+"q - quit; do not stage this hunk or any of the remaining ones\n"
+"a - stage this hunk and all later hunks in the file\n"
+"d - do not stage this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:56 git-add--interactive.perl:1437
+#, c-format, perl-format
+msgid "Stash mode change [y,n,q,a,d%s,?]? "
+msgstr "Спрятать изменение режима доступа [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:57 git-add--interactive.perl:1438
+#, c-format, perl-format
+msgid "Stash deletion [y,n,q,a,d%s,?]? "
+msgstr "Спрятать удаление файла [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:58 git-add--interactive.perl:1439
+#, c-format, perl-format
+msgid "Stash addition [y,n,q,a,d%s,?]? "
+msgstr "Добавить к спрятанному [y,n,q,a,d%s,?]?"
+
+#: add-patch.c:59 git-add--interactive.perl:1440
+#, c-format, perl-format
+msgid "Stash this hunk [y,n,q,a,d%s,?]? "
+msgstr "Спрятать этот блок изменений [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:61
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" stashing."
+msgstr "При чистом наложении патча изменённая часть сразу будет отмечена для скрытия."
+
+#: add-patch.c:64
+msgid ""
+"y - stash this hunk\n"
+"n - do not stash this hunk\n"
+"q - quit; do not stash this hunk or any of the remaining ones\n"
+"a - stash this hunk and all later hunks in the file\n"
+"d - do not stash this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:80 git-add--interactive.perl:1443
+#, c-format, perl-format
+msgid "Unstage mode change [y,n,q,a,d%s,?]? "
+msgstr "Убрать изменения режима доступа из индекса [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:81 git-add--interactive.perl:1444
+#, c-format, perl-format
+msgid "Unstage deletion [y,n,q,a,d%s,?]? "
+msgstr "Убрать удаление из индекса [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:82 git-add--interactive.perl:1445
+#, c-format, perl-format
+msgid "Unstage addition [y,n,q,a,d%s,?]? "
+msgstr "Убрать из индекса [y,n,q,a,d%s,?]?"
+
+#: add-patch.c:83 git-add--interactive.perl:1446
+#, c-format, perl-format
+msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
+msgstr "Убрать из индекса этот блок измений [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:85
+msgid ""
+"If the patch applies cleanly, the edited hunk will immediately be marked for"
+" unstaging."
+msgstr "При чистом наложении патча изменённая часть сразу будет отмечена для удаления из индекса."
+
+#: add-patch.c:88
+msgid ""
+"y - unstage this hunk\n"
+"n - do not unstage this hunk\n"
+"q - quit; do not unstage this hunk or any of the remaining ones\n"
+"a - unstage this hunk and all later hunks in the file\n"
+"d - do not unstage this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:103 git-add--interactive.perl:1449
+#, c-format, perl-format
+msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
+msgstr "Применить изменение режима доступа к индексу [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:104 git-add--interactive.perl:1450
+#, c-format, perl-format
+msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
+msgstr "Применить удаление к индексу [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:105 git-add--interactive.perl:1451
+#, c-format, perl-format
+msgid "Apply addition to index [y,n,q,a,d%s,?]? "
+msgstr "Применить добавление к индексу [y,n,q,a,d%s,?]?"
+
+#: add-patch.c:106 git-add--interactive.perl:1452
+#, c-format, perl-format
+msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
+msgstr "Применить этот блок к индексу [y,n,q,a,d%s,?]? "
+
+#: 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."
+msgstr "При чистом наложении патча изменённая часть сразу будет отмечена для применения."
+
+#: add-patch.c:111
+msgid ""
+"y - apply this hunk to index\n"
+"n - do not apply this hunk to index\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:126 git-add--interactive.perl:1455
+#: git-add--interactive.perl:1473
+#, c-format, perl-format
+msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
+msgstr "Отменить изменения режима доступа в рабочем каталоге [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:127 git-add--interactive.perl:1456
+#: git-add--interactive.perl:1474
+#, c-format, perl-format
+msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
+msgstr "Отменить удаление в рабочем каталоге [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:128 git-add--interactive.perl:1457
+#: git-add--interactive.perl:1475
+#, c-format, perl-format
+msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
+msgstr "Отменить добавления из рабочего каталога [y,n,q,a,d%s,?]?"
+
+#: add-patch.c:129 git-add--interactive.perl:1458
+#: git-add--interactive.perl:1476
+#, c-format, perl-format
+msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
+msgstr "Отменить изменения этого блока в рабочем каталоге [y,n,q,a,d%s,?]? "
+
+#: 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."
+msgstr "При чистом наложении патча изменённая часть сразу будет отмечена для отмены."
+
+#: add-patch.c:134 add-patch.c:202
+msgid ""
+"y - discard this hunk from worktree\n"
+"n - do not discard this hunk from worktree\n"
+"q - quit; do not discard this hunk or any of the remaining ones\n"
+"a - discard this hunk and all later hunks in the file\n"
+"d - do not discard this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
+#, c-format, perl-format
+msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Отменить изменения режима доступа в индексе и рабочем каталоге [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 "Отменить удаление в индексе и рабочем каталоге [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
+#, c-format, perl-format
+msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+
+#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
+#, c-format, perl-format
+msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Отменить изменения этого блока в индексе и рабочем каталоге [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:157
+msgid ""
+"y - discard this hunk from index and worktree\n"
+"n - do not discard this hunk from index and worktree\n"
+"q - quit; do not discard this hunk or any of the remaining ones\n"
+"a - discard this hunk and all later hunks in the file\n"
+"d - do not discard this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
+#, c-format, perl-format
+msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Применить изменения режима доступа к индексу и рабочему каталогу [y,n,q,a,d%s,?]? "
+
+#: 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 "Применить удаление к индексу и рабочему каталогу [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
+#, c-format, perl-format
+msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+
+#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
+#, c-format, perl-format
+msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
+msgstr "Применить изменения этого блока к индексу и рабочему каталогу [y,n,q,a,d%s,?]? "
+
+#: add-patch.c:179
+msgid ""
+"y - apply this hunk to index and worktree\n"
+"n - do not apply this hunk to index and worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:224
+msgid ""
+"y - apply this hunk to worktree\n"
+"n - do not apply this hunk to worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file\n"
+msgstr ""
+
+#: add-patch.c:342
+#, c-format
+msgid "could not parse hunk header '%.*s'"
+msgstr "не удалось разобрать заголовок блока изменений «%.*s»"
+
+#: add-patch.c:361 add-patch.c:365
+#, c-format
+msgid "could not parse colored hunk header '%.*s'"
+msgstr "не удалось разобрать цветной заголовок блока изменений «%.*s»"
+
+#: add-patch.c:419
+msgid "could not parse diff"
+msgstr "не удалось разобрать список изменений (diff)"
+
+#: add-patch.c:438
+msgid "could not parse colored diff"
+msgstr "не удалось разобрать цветной список изменений (diff)"
+
+#: add-patch.c:452
+#, c-format
+msgid "failed to run '%s'"
+msgstr ""
+
+#: add-patch.c:611
+msgid "mismatched output from interactive.diffFilter"
+msgstr ""
+
+#: add-patch.c:612
+msgid ""
+"Your filter must maintain a one-to-one correspondence\n"
+"between its input and output lines."
+msgstr ""
+
+#: add-patch.c:790
+#, c-format
+msgid ""
+"expected context line #%d in\n"
+"%.*s"
+msgstr "на %d строке ожидалась информация о контексте\n%.*s"
+
+#: add-patch.c:805
+#, c-format
+msgid ""
+"hunks do not overlap:\n"
+"%.*s\n"
+"\tdoes not end with:\n"
+"%.*s"
+msgstr "блоки изменений не пересекаются:\n%.*s\n\tне заканчивается на:\n%.*s"
+
+#: add-patch.c:1081 git-add--interactive.perl:1115
+msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
+msgstr "Ручной режим редактирования блока изменений — смотрите ниже для небольшого руководства.\n"
+
+#: add-patch.c:1085
+#, c-format
+msgid ""
+"---\n"
+"To remove '%c' lines, make them ' ' lines (context).\n"
+"To remove '%c' lines, delete them.\n"
+"Lines starting with %c will be removed.\n"
+msgstr "---\nЧтобы убрать «%c»-строки, сделайте их ' '-строками (контекстными).\nЧтобы убрать «%c»-строки, удалите их.\nСтроки, начинающиеся с %cбудут удалены.\n"
+
+#. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
+#: add-patch.c:1099 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"
+"aborted and the hunk is left unchanged.\n"
+msgstr "Если патч не применяется без ошибок, вам будет дана\nвозможность изменить его снова. Если все строки блока\nизменений удалены, то редактирование будет отменено\nи блок останется без изменений.\n"
+
+#: add-patch.c:1132
+msgid "could not parse hunk header"
+msgstr ""
+
+#: add-patch.c:1177
+msgid "'git apply --cached' failed"
+msgstr ""
+
+#. 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.
+#. 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
+msgid ""
+"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]?"
+" "
+msgstr "Изменённый вами блок не применяется. Редактировать снова (ответ «y» означает «нет»!) [y/n]? "
+
+#: add-patch.c:1289
+msgid "The selected hunks do not apply to the index!"
+msgstr ""
+
+#: add-patch.c:1290 git-add--interactive.perl:1346
+msgid "Apply them to the worktree anyway? "
+msgstr "Все равно применить их к рабочему каталогу? "
+
+#: add-patch.c:1297 git-add--interactive.perl:1349
+msgid "Nothing was applied.\n"
+msgstr "Ничего не применено.\n"
+
+#: add-patch.c:1354
+msgid ""
+"j - leave this hunk undecided, see next undecided hunk\n"
+"J - leave this hunk undecided, see next hunk\n"
+"k - leave this hunk undecided, see previous undecided hunk\n"
+"K - leave this hunk undecided, see previous hunk\n"
+"g - select a hunk to go to\n"
+"/ - search for a hunk matching the given regex\n"
+"s - split the current hunk into smaller hunks\n"
+"e - manually edit the current hunk\n"
+"? - print help\n"
+msgstr ""
+
+#: add-patch.c:1516 add-patch.c:1526
+msgid "No previous hunk"
+msgstr ""
+
+#: add-patch.c:1521 add-patch.c:1531
+msgid "No next hunk"
+msgstr ""
+
+#: add-patch.c:1537
+msgid "No other hunks to goto"
+msgstr ""
+
+#: add-patch.c:1548 git-add--interactive.perl:1606
+msgid "go to which hunk (<ret> to see more)? "
+msgstr "на какой блок перейти (нажмите <ввод> чтобы увидеть еще)? "
+
+#: add-patch.c:1549 git-add--interactive.perl:1608
+msgid "go to which hunk? "
+msgstr "на какой блок перейти? "
+
+#: add-patch.c:1560
+#, c-format
+msgid "Invalid number: '%s'"
+msgstr ""
+
+#: add-patch.c:1565
+#, c-format
+msgid "Sorry, only %d hunk available."
+msgid_plural "Sorry, only %d hunks available."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: add-patch.c:1574
+msgid "No other hunks to search"
+msgstr ""
+
+#: add-patch.c:1580 git-add--interactive.perl:1661
+msgid "search for regex? "
+msgstr "искать с помощью регулярного выражения? "
+
+#: add-patch.c:1595
+#, c-format
+msgid "Malformed search regexp %s: %s"
+msgstr ""
+
+#: add-patch.c:1612
+msgid "No hunk matches the given pattern"
+msgstr ""
+
+#: add-patch.c:1619
+msgid "Sorry, cannot split this hunk"
+msgstr ""
+
+#: add-patch.c:1623
+#, c-format
+msgid "Split into %d hunks."
+msgstr ""
+
+#: add-patch.c:1627
+msgid "Sorry, cannot edit this hunk"
+msgstr ""
+
+#: add-patch.c:1679
+msgid "'git apply' failed"
+msgstr ""
+
+#: advice.c:143
+#, c-format
+msgid ""
+"\n"
+"Disable this message with \"git config advice.%s false\""
+msgstr ""
+
+#: advice.c:159
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sподсказка: %.*s%s\n"
 
-#: advice.c:156
+#: advice.c:250
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Невозможно выполнить копирование коммита в текущую ветку, так как у вас имеются не слитые файлы."
 
-#: advice.c:158
+#: advice.c:252
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Невозможно закоммитить, так как у вас имеются не слитые файлы."
 
-#: advice.c:160
+#: advice.c:254
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Невозможно выполнить слияние, так как у вас имеются не слитые файлы."
 
-#: advice.c:162
+#: advice.c:256
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Невозможно выполнить получение, так как у вас имеются не слитые файлы."
 
-#: advice.c:164
+#: advice.c:258
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Невозможно обратить изменения, так как у вас имеются не слитые файлы."
 
-#: advice.c:166
+#: advice.c:260
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "Невозможно выполнить %s, так как у вас имеются не слитые файлы."
 
-#: advice.c:174
+#: advice.c:268
 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."
 msgstr "Исправьте их в рабочем каталоге, затем запустите «git add/rm <файл>»,\nчтобы пометить исправление и сделайте коммит."
 
-#: advice.c:182
+#: advice.c:276
 msgid "Exiting because of an unresolved conflict."
 msgstr "Выход из-за неразрешенного конфликта."
 
-#: advice.c:187 builtin/merge.c:1320
+#: advice.c:281 builtin/merge.c:1369
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD)."
 
-#: advice.c:189
+#: advice.c:283
 msgid "Please, commit your changes before merging."
 msgstr "Перед слиянием, выполните коммит ваших изменений."
 
-#: advice.c:190
+#: advice.c:284
 msgid "Exiting because of unfinished merge."
 msgstr "Выход из-за незавершенного слияния."
 
-#: advice.c:196
+#: advice.c:290
 #, c-format
 msgid ""
-"Note: checking out '%s'.\n"
+"Note: switching to '%s'.\n"
 "\n"
 "You are in 'detached HEAD' state. You can look around, make experimental\n"
 "changes and commit them, and you can discard any commits you make in this\n"
-"state without impacting any branches by performing another checkout.\n"
+"state without impacting any branches by switching back to a branch.\n"
 "\n"
 "If you want to create a new branch to retain commits you create, you may\n"
-"do so (now or later) by using -b with the checkout command again. Example:\n"
+"do so (now or later) by using -c with the switch command. Example:\n"
 "\n"
-"  git checkout -b <new-branch-name>\n"
+"  git switch -c <new-branch-name>\n"
 "\n"
-msgstr "Примечание: переход на «%s».\n\nВы сейчас в состоянии «отделённого HEAD». Вы можете осмотреться, сделать\nэкспериментальные изменения и закоммитить их, также вы можете отменить\nизменения любых коммитов в этом состоянии не затрагивая любые ветки и\nне переходя на них.\n\nЕсли вы хотите создать новую ветку и сохранить свои коммиты, то вы\nможете сделать это (сейчас или позже) вызвав команду checkout снова,\nно с параметром -b. Например:\n\n  git checkout -b <имя-новой-ветки>\n\n"
+"Or undo this operation with:\n"
+"\n"
+"  git switch -\n"
+"\n"
+"Turn off this advice by setting config variable advice.detachedHead to false\n"
+"\n"
+msgstr ""
 
 #: alias.c:50
 msgid "cmdline ends with \\"
@@ -97,92 +763,82 @@
 msgid "unclosed quote"
 msgstr "пропущена закрывающая кавычка"
 
-#: apply.c:63
+#: apply.c:69
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "неопознанная опция для пробелов «%s»"
 
-#: apply.c:79
+#: apply.c:85
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "неопознанная опция для игнорирования пробелов «%s»"
 
-#: apply.c:129
+#: apply.c:135
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject и --3way нельзя использовать одновременно."
 
-#: apply.c:131
+#: apply.c:137
 msgid "--cached and --3way cannot be used together."
 msgstr "--cached и --3way нельзя использовать одновременно."
 
-#: apply.c:134
+#: apply.c:140
 msgid "--3way outside a repository"
 msgstr "--3way вне репозитория"
 
-#: apply.c:145
+#: apply.c:151
 msgid "--index outside a repository"
 msgstr "--index вне репозитория"
 
-#: apply.c:148
+#: apply.c:154
 msgid "--cached outside a repository"
 msgstr "--cached вне репозитория"
 
-#: apply.c:829
+#: apply.c:801
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Не удалось подготовить регулярное выражение для метки времени %s"
 
-#: apply.c:838
+#: apply.c:810
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec возвратил %d для ввода: %s"
 
-#: apply.c:912
+#: apply.c:884
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "не удалось найти имя файла в строке патча %d"
 
-#: apply.c:950
+#: apply.c:922
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply: плохой git-diff — ожидалось /dev/null, получено %s на строке %d"
 
-#: apply.c:956
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: плохой git-diff — не согласующееся новое имя файла на строке %d"
 
-#: apply.c:957
+#: apply.c:929
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: плохой git-diff — не согласующееся старое имя файла на строке %d"
 
-#: apply.c:962
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: плохой git-diff  — ожидалось /dev/null на строке %d"
 
-#: apply.c:991
+#: apply.c:963
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "недопустимый режим %d: %s"
 
-#: apply.c:1310
+#: apply.c:1282
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "противоречивые строки заголовка %d и %d"
 
-#: apply.c:1482
-#, c-format
-msgid "recount: unexpected line: %.*s"
-msgstr "recount: не ожидаемая строка: %.*s"
-
-#: apply.c:1551
-#, c-format
-msgid "patch fragment without header at line %d: %.*s"
-msgstr "фрагмент изменений без заголовка на строке %d: %.*s"
-
-#: apply.c:1571
+#: apply.c:1372
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname"
@@ -195,70 +851,80 @@
 msgstr[2] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
 msgstr[3] "заголовок git diff не нашел информацию об имени файла при удалении %d ведущих компонент пути к файлу (строка %d)"
 
-#: apply.c:1584
+#: apply.c:1385
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "заголовок git diff не содержит информации об имени файла (строка %d)"
 
-#: apply.c:1772
+#: apply.c:1481
+#, c-format
+msgid "recount: unexpected line: %.*s"
+msgstr "recount: не ожидаемая строка: %.*s"
+
+#: apply.c:1550
+#, c-format
+msgid "patch fragment without header at line %d: %.*s"
+msgstr "фрагмент изменений без заголовка на строке %d: %.*s"
+
+#: apply.c:1753
 msgid "new file depends on old contents"
 msgstr "новый файл зависит от старого содержимого"
 
-#: apply.c:1774
+#: apply.c:1755
 msgid "deleted file still has contents"
 msgstr "удаленный файл все еще имеет содержимое"
 
-#: apply.c:1808
+#: apply.c:1789
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "патч поврежден на строке %d"
 
-#: apply.c:1845
+#: apply.c:1826
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "новый файл %s зависит от старого содержимого"
 
-#: apply.c:1847
+#: apply.c:1828
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "удаленный файл %s все еще имеет содержимое"
 
-#: apply.c:1850
+#: apply.c:1831
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** предупреждение: файл %s становится пустым, но не удаляется"
 
-#: apply.c:1997
+#: apply.c:1978
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "поврежденный двоичный патч на строке %d: %.*s"
 
-#: apply.c:2034
+#: apply.c:2015
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "неопознанный двоичный патч на строке %d"
 
-#: apply.c:2196
+#: apply.c:2177
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "патч с мусором на строке %d"
 
-#: apply.c:2282
+#: apply.c:2263
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "не удалось прочитать символьную ссылку %s"
 
-#: apply.c:2286
+#: apply.c:2267
 #, c-format
 msgid "unable to open or read %s"
 msgstr "не удалось открыть или прочесть %s"
 
-#: apply.c:2945
+#: apply.c:2936
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "неправильное начало строки: «%c»"
 
-#: apply.c:3066
+#: apply.c:3057
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -267,258 +933,253 @@
 msgstr[2] "Часть #%d успешно применена на %d (со сдвигом в %d строк)."
 msgstr[3] "Часть #%d успешно применена на %d (со сдвигом в %d строк)."
 
-#: apply.c:3078
+#: apply.c:3069
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Контекст сужен до (%ld/%ld), чтобы применить фрагмент на %d строке"
 
-#: apply.c:3084
+#: apply.c:3075
 #, c-format
 msgid ""
 "while searching for:\n"
 "%.*s"
 msgstr "при поиске:\n%.*s"
 
-#: apply.c:3106
+#: apply.c:3097
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "пропущены данные двоичного патча для «%s»"
 
-#: apply.c:3114
+#: apply.c:3105
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "невозможно выполнить reverse-apply для двоичного патча, без обращения изменений блока «%s»"
 
-#: apply.c:3161
+#: apply.c:3152
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "невозможно применить двоичный патч «%s» без строки с указанной полной версией индекса"
 
-#: apply.c:3171
+#: apply.c:3163
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "патч применятся к файлу «%s» (%s), но его текущее содержимое не соотвествует ожидаемому."
 
-#: apply.c:3179
+#: apply.c:3171
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "патч применяется к пустому файлу «%s», но файл не пустой"
 
-#: apply.c:3197
+#: apply.c:3189
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "не удалось прочитать необходимую посылку %s для «%s»"
 
-#: apply.c:3210
+#: apply.c:3202
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "не удалось применить двоичный патч к «%s»"
 
-#: apply.c:3216
+#: apply.c:3209
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "после применения двоичного патча для «%s» был получен неправильный результат (ожидалось %s, получено %s)"
 
-#: apply.c:3237
+#: apply.c:3230
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "ошибка применения изменений: %s:%ld"
 
-#: apply.c:3360
+#: apply.c:3353
 #, c-format
 msgid "cannot checkout %s"
 msgstr "не удалось переключить состояние на %s"
 
-#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:59 setup.c:279
+#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "не удалось прочитать %s"
 
-#: apply.c:3420
+#: apply.c:3413
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "чтение из «%s» за символической ссылкой"
 
-#: apply.c:3449 apply.c:3692
+#: apply.c:3442 apply.c:3685
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "путь %s был переименован/удален"
 
-#: apply.c:3535 apply.c:3707
+#: apply.c:3528 apply.c:3700
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: нет в индексе"
 
-#: apply.c:3544 apply.c:3715
+#: apply.c:3537 apply.c:3708 apply.c:3952
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: не совпадает с индексом"
 
-#: apply.c:3579
+#: apply.c:3572
 msgid "repository lacks the necessary blob to fall back on 3-way merge."
 msgstr "в репозитории отсутствует необходимый двоичный объект для отката к трёхходовому слиянию."
 
-#: apply.c:3582
+#: apply.c:3575
 #, c-format
 msgid "Falling back to three-way merge...\n"
 msgstr "Откат к трёхходовому слиянию…\n"
 
-#: apply.c:3598 apply.c:3602
+#: apply.c:3591 apply.c:3595
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "не удалось прочитать текущее содержимое «%s»"
 
-#: apply.c:3614
+#: apply.c:3607
 #, c-format
 msgid "Failed to fall back on three-way merge...\n"
 msgstr "Не удалось откатиться к трёхходовому слиянию…\n"
 
-#: apply.c:3628
+#: apply.c:3621
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Патч применен к «%s» с конфликтами.\n"
 
-#: apply.c:3633
+#: apply.c:3626
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Патч применен к «%s» без ошибок.\n"
 
-#: apply.c:3659
+#: apply.c:3652
 msgid "removal patch leaves file contents"
 msgstr "патч удаления не удалил содержимое файла"
 
-#: apply.c:3732
+#: apply.c:3725
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: неправильный тип"
 
-#: apply.c:3734
+#: apply.c:3727
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s имеет тип %o, а ожидался %o"
 
-#: apply.c:3885 apply.c:3887 read-cache.c:830 read-cache.c:856
-#: read-cache.c:1309
+#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
+#: read-cache.c:1313
 #, c-format
 msgid "invalid path '%s'"
 msgstr "неправильный путь «%s»"
 
-#: apply.c:3943
+#: apply.c:3950
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: уже содержится в индексе"
 
-#: apply.c:3946
+#: apply.c:3954
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: уже содержится в рабочем каталоге"
 
-#: apply.c:3966
+#: apply.c:3974
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "новый режим доступа (%o) для %s не соответствует старому режиму доступа (%o)"
 
-#: apply.c:3971
+#: apply.c:3979
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "новый режим доступа (%o) для %s не соответствует старому режиму доступа (%o) для %s"
 
-#: apply.c:3991
+#: apply.c:3999
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "затронутый файл «%s» находится за символической ссылкой"
 
-#: apply.c:3995
+#: apply.c:4003
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: не удалось применить патч"
 
-#: apply.c:4010
+#: apply.c:4018
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Проверка патча %s…"
 
-#: apply.c:4102
+#: apply.c:4110
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "информация об sha1 отсутствует или бесполезна для подмодуля %s"
 
-#: apply.c:4109
+#: apply.c:4117
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "изменен режим для %s, который не находится в текущем HEAD"
 
-#: apply.c:4112
+#: apply.c:4120
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "информация об sha1 отсутствует или бесполезна (%s)."
 
-#: apply.c:4117 builtin/checkout.c:257 builtin/reset.c:143
-#, c-format
-msgid "make_cache_entry failed for path '%s'"
-msgstr "сбой make_cache_entry для пути «%s»"
-
-#: apply.c:4121
+#: apply.c:4129
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "не удалось добавить %s во временный индекс"
 
-#: apply.c:4131
+#: apply.c:4139
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "не удалось записать временный индкекс в %s"
 
-#: apply.c:4269
+#: apply.c:4277
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "не удалось удалить %s из индекса"
 
-#: apply.c:4303
+#: apply.c:4311
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "поврежденный патч для подмодуля %s"
 
-#: apply.c:4309
+#: apply.c:4317
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "не удалось выполнить stat для созданного файла «%s»"
 
-#: apply.c:4317
+#: apply.c:4325
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "не удалось создать вспомогательный файл для созданного файла %s"
 
-#: apply.c:4323 apply.c:4468
+#: apply.c:4331 apply.c:4476
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "не удалось создать запись в кэше для %s"
 
-#: apply.c:4366
+#: apply.c:4374 builtin/bisect--helper.c:524
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "не удалось записать в «%s»"
 
-#: apply.c:4370
+#: apply.c:4378
 #, c-format
 msgid "closing file '%s'"
 msgstr "закрытие файла «%s»"
 
-#: apply.c:4440
+#: apply.c:4448
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "не удалось записать файл «%s» с режимом доступа %o"
 
-#: apply.c:4538
+#: apply.c:4546
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Патч %s применен без ошибок."
 
-#: apply.c:4546
+#: apply.c:4554
 msgid "internal error"
 msgstr "внутренняя ошибка"
 
-#: apply.c:4549
+#: apply.c:4557
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
@@ -527,45 +1188,45 @@
 msgstr[2] "Применение патча %%s с %d отказами…"
 msgstr[3] "Применение патча %%s с %d отказами…"
 
-#: apply.c:4560
+#: apply.c:4568
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "усечение имени .rej файла до %.*s.rej"
 
-#: apply.c:4568 builtin/fetch.c:837 builtin/fetch.c:1118
+#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
 #, c-format
 msgid "cannot open %s"
 msgstr "не удалось открыть %s"
 
-#: apply.c:4582
+#: apply.c:4590
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Блок №%d применен без ошибок."
 
-#: apply.c:4586
+#: apply.c:4594
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Блок №%d отклонен."
 
-#: apply.c:4696
+#: apply.c:4718
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Патч «%s» пропущен."
 
-#: apply.c:4704
+#: apply.c:4726
 msgid "unrecognized input"
 msgstr "не распознанный ввод"
 
-#: apply.c:4724
+#: apply.c:4746
 msgid "unable to read index file"
 msgstr "не удалось прочитать файл индекса"
 
-#: apply.c:4879
+#: apply.c:4903
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "не удалось открыть патч «%s»: %s"
 
-#: apply.c:4906
+#: apply.c:4930
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
@@ -574,7 +1235,7 @@
 msgstr[2] "пропущено %d ошибок в пробельных символах"
 msgstr[3] "пропущено %d ошибок в пробельных символах"
 
-#: apply.c:4912 apply.c:4927
+#: apply.c:4936 apply.c:4951
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
@@ -583,7 +1244,7 @@
 msgstr[2] "%d строк добавили ошибки в пробельных символах."
 msgstr[3] "%d строк добавили ошибки в пробельных символах."
 
-#: apply.c:4920
+#: apply.c:4944
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -592,143 +1253,178 @@
 msgstr[2] "%d строк добавлено после исправления ошибок в пробелах."
 msgstr[3] "%d строки добавлено после исправления ошибок в пробелах."
 
-#: apply.c:4936 builtin/add.c:540 builtin/mv.c:301 builtin/rm.c:390
+#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
 msgid "Unable to write new index file"
 msgstr "Не удалось записать новый файл индекса"
 
-#: apply.c:4963 apply.c:4966 builtin/am.c:2210 builtin/am.c:2213
-#: builtin/clone.c:120 builtin/fetch.c:118 builtin/merge.c:271
-#: builtin/pull.c:207 builtin/submodule--helper.c:407
-#: builtin/submodule--helper.c:1366 builtin/submodule--helper.c:1369
-#: builtin/submodule--helper.c:1849 builtin/submodule--helper.c:1852
-#: builtin/submodule--helper.c:2091 git-add--interactive.perl:197
-msgid "path"
-msgstr "путь"
-
-#: apply.c:4964
+#: apply.c:4988
 msgid "don't apply changes matching the given path"
 msgstr "не применять изменения по указанному пути"
 
-#: apply.c:4967
+#: apply.c:4991
 msgid "apply changes matching the given path"
 msgstr "применять изменения по указанному пути"
 
-#: apply.c:4969 builtin/am.c:2219
+#: apply.c:4993 builtin/am.c:2266
 msgid "num"
 msgstr "количество"
 
-#: apply.c:4970
+#: apply.c:4994
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "удалить <количество> ведущих косых черт из традиционных путей списка изменений"
 
-#: apply.c:4973
+#: apply.c:4997
 msgid "ignore additions made by the patch"
 msgstr "игнорировать добавления, сделанные этим патчем"
 
-#: apply.c:4975
+#: apply.c:4999
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "вместо применения патча вывести статистику добавлений и удалений для ввода"
 
-#: apply.c:4979
+#: apply.c:5003
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "показать количество добавленных и удаленных строк в десятичном представлении"
 
-#: apply.c:4981
+#: apply.c:5005
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "вместо применения патча вывести сводку изменений для ввода"
 
-#: apply.c:4983
+#: apply.c:5007
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "вместо применения патча проверить подходит ли он"
 
-#: apply.c:4985
+#: apply.c:5009
 msgid "make sure the patch is applicable to the current index"
 msgstr "проверить, что патч применяется к текущему индексу"
 
-#: apply.c:4987
+#: apply.c:5011
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "помечать новые файлы с «git add --intent-to-add»"
 
-#: apply.c:4989
+#: apply.c:5013
 msgid "apply a patch without touching the working tree"
 msgstr "применить патч, не изменяя рабочий каталог"
 
-#: apply.c:4991
+#: apply.c:5015
 msgid "accept a patch that touches outside the working area"
 msgstr "принять патч, который затрагивает файлы за рабочим каталогом"
 
-#: apply.c:4994
+#: apply.c:5018
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "а также применить патч (используйте с --stat/--summary/--check)"
 
-#: apply.c:4996
+#: apply.c:5020
 msgid "attempt three-way merge if a patch does not apply"
 msgstr "попытаться сделать трехходовое слияние, если патч не применяется"
 
-#: apply.c:4998
+#: apply.c:5022
 msgid "build a temporary index based on embedded index information"
 msgstr "построить временный индекс, основанный на встроенной информации об индексе"
 
-#: apply.c:5001 builtin/checkout-index.c:173 builtin/ls-files.c:524
+#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
 msgid "paths are separated with NUL character"
 msgstr "пути, отделённые НУЛЕВЫМ символом"
 
-#: apply.c:5003
+#: apply.c:5027
 msgid "ensure at least <n> lines of context match"
 msgstr "удостовериться, что по крайней мере <n> строк контекста совпадают"
 
-#: apply.c:5004 builtin/am.c:2198 builtin/interpret-trailers.c:97
-#: builtin/interpret-trailers.c:99 builtin/interpret-trailers.c:101
-#: builtin/pack-objects.c:3317 builtin/rebase.c:1415
+#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
+#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
+#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
 msgid "action"
 msgstr "действие"
 
-#: apply.c:5005
+#: apply.c:5029
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "определять новые или модифицированные строки, у которых есть ошибки в пробельных символах"
 
-#: apply.c:5008 apply.c:5011
+#: apply.c:5032 apply.c:5035
 msgid "ignore changes in whitespace when finding context"
 msgstr "игнорировать изменения в пробельных символах при поиске контекста"
 
-#: apply.c:5014
+#: apply.c:5038
 msgid "apply the patch in reverse"
 msgstr "применить патч с обращением изменений"
 
-#: apply.c:5016
+#: apply.c:5040
 msgid "don't expect at least one line of context"
 msgstr "не ожидать как минимум одной строки контекста"
 
-#: apply.c:5018
+#: apply.c:5042
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "оставить отклоненные блоки изменений в соответствующих *.rej файлах"
 
-#: apply.c:5020
+#: apply.c:5044
 msgid "allow overlapping hunks"
 msgstr "разрешить перекрывающиеся блоки изменений"
 
-#: apply.c:5021 builtin/add.c:291 builtin/check-ignore.c:22
-#: builtin/commit.c:1317 builtin/count-objects.c:98 builtin/fsck.c:786
-#: builtin/log.c:2045 builtin/mv.c:123 builtin/read-tree.c:128
+#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
+#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
+#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
 msgid "be verbose"
 msgstr "быть многословнее"
 
-#: apply.c:5023
+#: apply.c:5047
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "разрешить некорректно определенные пропущенные пустые строки в конце файла"
 
-#: apply.c:5026
+#: apply.c:5050
 msgid "do not trust the line counts in the hunk headers"
 msgstr "не доверять количеству строк из заголовка блока изменений"
 
-#: apply.c:5028 builtin/am.c:2207
+#: apply.c:5052 builtin/am.c:2254
 msgid "root"
 msgstr "корень"
 
-#: apply.c:5029
+#: apply.c:5053
 msgid "prepend <root> to all filenames"
 msgstr "добавить <корень> спереди ко всем именам файлов"
 
+#: archive-tar.c:125 archive-zip.c:345
+#, c-format
+msgid "cannot stream blob %s"
+msgstr "не удалось создать поток двоичного объекта %s"
+
+#: archive-tar.c:265 archive-zip.c:358
+#, c-format
+msgid "unsupported file mode: 0%o (SHA1: %s)"
+msgstr "неподдерживаемый режим доступа к файлу: 0%o (SHA1: %s)"
+
+#: archive-tar.c:450
+#, c-format
+msgid "unable to start '%s' filter"
+msgstr "не удалось запустить фильтр «%s»"
+
+#: archive-tar.c:453
+msgid "unable to redirect descriptor"
+msgstr "не удалось перенаправить дескриптор"
+
+#: archive-tar.c:460
+#, c-format
+msgid "'%s' filter reported error"
+msgstr "фильтр «%s» сообщил об ошибке"
+
+#: archive-zip.c:318
+#, c-format
+msgid "path is not valid UTF-8: %s"
+msgstr "путь не является действительным UTF-8: %s"
+
+#: archive-zip.c:322
+#, c-format
+msgid "path too long (%d chars, SHA1: %s): %s"
+msgstr "путь слишком длинный (%d символов, SHA1: %s): %s"
+
+#: archive-zip.c:469 builtin/pack-objects.c:244 builtin/pack-objects.c:247
+#, c-format
+msgid "deflate error (%d)"
+msgstr "ошибка сжатия (%d)"
+
+#: archive-zip.c:603
+#, c-format
+msgid "timestamp too large for this system: %<PRIuMAX>"
+msgstr "отметка времени слишком большая для этой системы: %<PRIuMAX>"
+
 #: archive.c:14
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<опции>] <указатель-дерева> [<путь>…]"
@@ -747,224 +1443,198 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <репозиторий> [--exec <команда>] --list"
 
-#: archive.c:372 builtin/add.c:177 builtin/add.c:516 builtin/rm.c:299
-#, c-format
-msgid "pathspec '%s' did not match any files"
-msgstr "спецификатор пути «%s» не соответствует ни одному файлу"
-
-#: archive.c:396
-#, c-format
-msgid "no such ref: %.*s"
-msgstr "нет такой ссылки: %.*s"
-
-#: archive.c:401
-#, c-format
-msgid "not a valid object name: %s"
-msgstr "недопустимое имя объекта: %s"
-
-#: archive.c:414
-#, c-format
-msgid "not a tree object: %s"
-msgstr "недействительный объект дерева: %s"
-
-#: archive.c:424
-msgid "current working directory is untracked"
-msgstr "текущий рабочий каталог не отслеживается"
-
-#: archive.c:455
-msgid "fmt"
-msgstr "формат"
-
-#: archive.c:455
-msgid "archive format"
-msgstr "формат архива"
-
-#: archive.c:456 builtin/log.c:1557
-msgid "prefix"
-msgstr "префикс"
-
-#: archive.c:457
-msgid "prepend prefix to each pathname in the archive"
-msgstr "добавлять префикс перед каждым путем файла в архиве"
-
-#: archive.c:458 builtin/blame.c:821 builtin/blame.c:822
-#: builtin/commit-tree.c:117 builtin/config.c:129 builtin/fast-export.c:1091
-#: builtin/fast-export.c:1093 builtin/grep.c:895 builtin/hash-object.c:105
-#: builtin/ls-files.c:560 builtin/ls-files.c:563 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:177
-msgid "file"
-msgstr "файл"
-
-#: archive.c:459 builtin/archive.c:90
-msgid "write the archive to this file"
-msgstr "запись архива в этот файл"
-
-#: archive.c:461
-msgid "read .gitattributes in working directory"
-msgstr "читать .gitattributes в рабочем каталоге"
-
-#: archive.c:462
-msgid "report archived files on stderr"
-msgstr "отчет об архивированных файлах в stderr"
-
-#: archive.c:463
-msgid "store only"
-msgstr "только хранение"
-
-#: archive.c:464
-msgid "compress faster"
-msgstr "сжимать быстрее"
-
-#: archive.c:472
-msgid "compress better"
-msgstr "сжимать лучше"
-
-#: archive.c:475
-msgid "list supported archive formats"
-msgstr "перечислить поддерживаемые форматы архивов"
-
-#: archive.c:477 builtin/archive.c:91 builtin/clone.c:110 builtin/clone.c:113
-#: builtin/submodule--helper.c:1378 builtin/submodule--helper.c:1858
-msgid "repo"
-msgstr "репозиторий"
-
-#: archive.c:478 builtin/archive.c:92
-msgid "retrieve the archive from remote repository <repo>"
-msgstr "получить архив из внешнего <репозитория>"
-
-#: archive.c:479 builtin/archive.c:93 builtin/difftool.c:707
-#: builtin/notes.c:498
-msgid "command"
-msgstr "команда"
-
-#: archive.c:480 builtin/archive.c:94
-msgid "path to the remote git-upload-archive command"
-msgstr "путь к команде git-upload-archive на машине с внешним репозиторием"
-
-#: archive.c:487
-msgid "Unexpected option --remote"
-msgstr "Неожиданная опция --remote"
-
-#: archive.c:489
-msgid "Option --exec can only be used together with --remote"
-msgstr "Опция --exec может использоваться только вместе с --remote"
-
-#: archive.c:491
-msgid "Unexpected option --output"
-msgstr "Неожиданная опция --output"
-
-#: archive.c:513
-#, c-format
-msgid "Unknown archive format '%s'"
-msgstr "Неизвестный формат архива «%s»"
-
-#: archive.c:520
-#, c-format
-msgid "Argument not supported for format '%s': -%d"
-msgstr "Аргумент не поддерживается для формата «%s»: -%d"
-
-#: archive-tar.c:125 archive-zip.c:345
-#, c-format
-msgid "cannot stream blob %s"
-msgstr "не удалось создать поток двоичного объекта %s"
-
-#: archive-tar.c:260 archive-zip.c:363
-#, c-format
-msgid "unsupported file mode: 0%o (SHA1: %s)"
-msgstr "неподдерживаемый режим доступа к файлу: 0%o (SHA1: %s)"
-
-#: archive-tar.c:287 archive-zip.c:353
+#: archive.c:192
 #, c-format
 msgid "cannot read %s"
 msgstr "не удалось прочитать %s"
 
-#: archive-tar.c:459
+#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
+#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
+#: builtin/merge.c:1138
 #, c-format
-msgid "unable to start '%s' filter"
-msgstr "не удалось запустить фильтр «%s»"
+msgid "could not read '%s'"
+msgstr "не удалось прочитать «%s»"
 
-#: archive-tar.c:462
-msgid "unable to redirect descriptor"
-msgstr "не удалось перенаправить дескриптор"
-
-#: archive-tar.c:469
+#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
 #, c-format
-msgid "'%s' filter reported error"
-msgstr "фильтр «%s» сообщил об ошибке"
+msgid "pathspec '%s' did not match any files"
+msgstr "спецификатор пути «%s» не соответствует ни одному файлу"
 
-#: archive-zip.c:314
+#: archive.c:454
 #, c-format
-msgid "path is not valid UTF-8: %s"
-msgstr "путь не является действительным UTF-8: %s"
+msgid "no such ref: %.*s"
+msgstr "нет такой ссылки: %.*s"
 
-#: archive-zip.c:318
+#: archive.c:460
 #, c-format
-msgid "path too long (%d chars, SHA1: %s): %s"
-msgstr "путь слишком длинный (%d символов, SHA1: %s): %s"
+msgid "not a valid object name: %s"
+msgstr "недопустимое имя объекта: %s"
 
-#: archive-zip.c:474 builtin/pack-objects.c:226 builtin/pack-objects.c:229
+#: archive.c:473
 #, c-format
-msgid "deflate error (%d)"
-msgstr "ошибка сжатия (%d)"
+msgid "not a tree object: %s"
+msgstr "недействительный объект дерева: %s"
 
-#: archive-zip.c:609
+#: archive.c:485
+msgid "current working directory is untracked"
+msgstr "текущий рабочий каталог не отслеживается"
+
+#: archive.c:526
 #, c-format
-msgid "timestamp too large for this system: %<PRIuMAX>"
-msgstr "отметка времени слишком большая для этой системы: %<PRIuMAX>"
+msgid "File not found: %s"
+msgstr ""
 
-#: attr.c:211
+#: archive.c:528
+#, c-format
+msgid "Not a regular file: %s"
+msgstr ""
+
+#: archive.c:555
+msgid "fmt"
+msgstr "формат"
+
+#: archive.c:555
+msgid "archive format"
+msgstr "формат архива"
+
+#: archive.c:556 builtin/log.c:1765
+msgid "prefix"
+msgstr "префикс"
+
+#: archive.c:557
+msgid "prepend prefix to each pathname in the archive"
+msgstr "добавлять префикс перед каждым путем файла в архиве"
+
+#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
+#: builtin/blame.c:891 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:919 builtin/hash-object.c:105
+#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
+#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+msgid "file"
+msgstr "файл"
+
+#: archive.c:559
+msgid "add untracked file to archive"
+msgstr ""
+
+#: archive.c:562 builtin/archive.c:90
+msgid "write the archive to this file"
+msgstr "запись архива в этот файл"
+
+#: archive.c:564
+msgid "read .gitattributes in working directory"
+msgstr "читать .gitattributes в рабочем каталоге"
+
+#: archive.c:565
+msgid "report archived files on stderr"
+msgstr "отчет об архивированных файлах в stderr"
+
+#: archive.c:567
+msgid "set compression level"
+msgstr ""
+
+#: archive.c:570
+msgid "list supported archive formats"
+msgstr "перечислить поддерживаемые форматы архивов"
+
+#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
+#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+msgid "repo"
+msgstr "репозиторий"
+
+#: archive.c:573 builtin/archive.c:92
+msgid "retrieve the archive from remote repository <repo>"
+msgstr "получить архив из внешнего <репозитория>"
+
+#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: builtin/notes.c:498
+msgid "command"
+msgstr "команда"
+
+#: archive.c:575 builtin/archive.c:94
+msgid "path to the remote git-upload-archive command"
+msgstr "путь к команде git-upload-archive на машине с внешним репозиторием"
+
+#: archive.c:582
+msgid "Unexpected option --remote"
+msgstr "Неожиданная опция --remote"
+
+#: archive.c:584
+msgid "Option --exec can only be used together with --remote"
+msgstr "Опция --exec может использоваться только вместе с --remote"
+
+#: archive.c:586
+msgid "Unexpected option --output"
+msgstr "Неожиданная опция --output"
+
+#: archive.c:588
+msgid "Options --add-file and --remote cannot be used together"
+msgstr ""
+
+#: archive.c:610
+#, c-format
+msgid "Unknown archive format '%s'"
+msgstr "Неизвестный формат архива «%s»"
+
+#: archive.c:619
+#, c-format
+msgid "Argument not supported for format '%s': -%d"
+msgstr "Аргумент не поддерживается для формата «%s»: -%d"
+
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s не является допустимым именем атрибута"
 
-#: attr.c:368
+#: attr.c:359
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s не разрешено: %s:%d"
 
-#: attr.c:408
+#: attr.c:399
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
 msgstr "Отрицающие шаблоны в атрибутах git игнорируются.\nИспользуйте «\\!» для буквального использования символа в значении «восклицательный знак»."
 
-#: bisect.c:468
+#: bisect.c:489
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Плохое содержимое файла «%s»: %s"
 
-#: bisect.c:678
+#: bisect.c:699
 #, c-format
 msgid "We cannot bisect more!\n"
 msgstr "Невозможно продолжить бинарный поиск!\n"
 
-#: bisect.c:733
+#: bisect.c:766
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "Недопустимое имя коммита %s"
 
-#: bisect.c:758
+#: bisect.c:791
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
 "This means the bug has been fixed between %s and [%s].\n"
 msgstr "База слияния %s является плохим коммитом.\nЭто значит, что ошибка была исправлена где-то между %s и [%s].\n"
 
-#: bisect.c:763
+#: bisect.c:796
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
 "The property has changed between %s and [%s].\n"
 msgstr "База слияния %s является новой.\nСвойство было изменено где-то между %s и [%s].\n"
 
-#: bisect.c:768
+#: bisect.c:801
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
 "This means the first '%s' commit is between %s and [%s].\n"
 msgstr "База слияния %s является %s.\nЭто значит, что «%s» коммит находится где-то между %s и [%s].\n"
 
-#: bisect.c:776
+#: bisect.c:809
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -972,7 +1642,7 @@
 "Maybe you mistook %s and %s revs?\n"
 msgstr "Несколько %s коммитов не являются предками %s коммита.\nВ этом случае git bisect не может работать правильно.\nВозможно, вы перепутали редакции %s и %s местами?\n"
 
-#: bisect.c:789
+#: bisect.c:822
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -980,43 +1650,43 @@
 "We continue anyway."
 msgstr "База слияния между %s и [%s] должно быть пропущена.\nПоэтому мы не можем быть уверены, что первый %s коммит находится между %s и %s.\nНо все же продолжаем поиск."
 
-#: bisect.c:822
+#: bisect.c:861
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Бинарный поиск: база слияния должна быть проверена\n"
 
-#: bisect.c:865
+#: bisect.c:911
 #, c-format
 msgid "a %s revision is needed"
 msgstr "нужно указать %s редакцию"
 
-#: bisect.c:884 builtin/notes.c:177 builtin/tag.c:248
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
 #, c-format
 msgid "could not create file '%s'"
 msgstr "не удалось создать файл «%s»"
 
-#: bisect.c:928 builtin/merge.c:146
+#: bisect.c:987 builtin/merge.c:152
 #, c-format
 msgid "could not read file '%s'"
 msgstr "не удалось прочитать файл «%s»"
 
-#: bisect.c:958
+#: bisect.c:1027
 msgid "reading bisect refs failed"
 msgstr "сбой при чтении ссылок двоичного поиска"
 
-#: bisect.c:977
+#: bisect.c:1057
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s была одновременно и %s и %s\n"
 
-#: bisect.c:985
+#: bisect.c:1066
 #, c-format
 msgid ""
 "No testable commit found.\n"
 "Maybe you started with bad path parameters?\n"
 msgstr "Тестируемый коммит не найден.\nВозможно, вы начали поиск с указанием неправильного параметра пути?\n"
 
-#: bisect.c:1004
+#: bisect.c:1095
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1027,7 +1697,7 @@
 
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
-#: bisect.c:1010
+#: bisect.c:1101
 #, 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"
@@ -1036,37 +1706,37 @@
 msgstr[2] "Бинарный поиск: %d редакций осталось проверить после этой %s\n"
 msgstr[3] "Бинарный поиск: %d редакций осталось проверить после этой %s\n"
 
-#: blame.c:1794
+#: blame.c:2777
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents и --reverse не очень сочетаются."
 
-#: blame.c:1808
+#: blame.c:2791
 msgid "cannot use --contents with final commit object name"
 msgstr "нельзя использовать --contents с указанием финального имени объекта"
 
-#: blame.c:1829
+#: blame.c:2812
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "при --reverse и --first-parent вместе нужно указывать конкретный последний коммит"
 
-#: blame.c:1838 bundle.c:164 ref-filter.c:2077 remote.c:1938 sequencer.c:2030
-#: sequencer.c:4224 builtin/commit.c:1017 builtin/log.c:382 builtin/log.c:940
-#: builtin/log.c:1428 builtin/log.c:1804 builtin/log.c:2094
-#: builtin/merge.c:415 builtin/pack-objects.c:3140 builtin/pack-objects.c:3155
-#: builtin/shortlog.c:192
+#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
+#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
+#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
+#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
+#: builtin/shortlog.c:267
 msgid "revision walk setup failed"
 msgstr "сбой инициализации прохода по редакциям"
 
-#: blame.c:1856
+#: blame.c:2839
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr "при указании --reverse и --first-parent вместе, требуется также указать диапазон по цепочке первого родителя"
 
-#: blame.c:1867
+#: blame.c:2850
 #, c-format
 msgid "no such path %s in %s"
 msgstr "нет такого пути %s в %s"
 
-#: blame.c:1878
+#: blame.c:2861
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "невозможно прочитать объект %s для пути %s"
@@ -1186,37 +1856,51 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Недопустимая точка ветки: «%s»."
 
-#: branch.c:359
+#: branch.c:365
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "«%s» уже находится на «%s»"
 
-#: branch.c:382
+#: branch.c:388
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD рабочего каталога %s не обновлён"
 
-#: bundle.c:36
+#: bundle.c:41
 #, c-format
-msgid "'%s' does not look like a v2 bundle file"
-msgstr "«%s» не похож на файл пакета версии 2"
+msgid "unrecognized bundle hash algorithm: %s"
+msgstr ""
 
-#: bundle.c:64
+#: bundle.c:45
+#, c-format
+msgid "unknown capability '%s'"
+msgstr ""
+
+#: bundle.c:71
+#, c-format
+msgid "'%s' does not look like a v2 or v3 bundle file"
+msgstr ""
+
+#: bundle.c:110
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "неопознанный заголовок: %s%s (%d)"
 
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2281 sequencer.c:2916
-#: builtin/commit.c:788
+#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
+#: builtin/commit.c:814
 #, c-format
 msgid "could not open '%s'"
 msgstr "не удалось открыть «%s»"
 
-#: bundle.c:143
+#: bundle.c:189
 msgid "Repository lacks these prerequisite commits:"
 msgstr "В репозитории отсутствуют необходимые коммиты:"
 
-#: bundle.c:194
+#: bundle.c:192
+msgid "need a repository to verify a bundle"
+msgstr ""
+
+#: bundle.c:243
 #, c-format
 msgid "The bundle contains this ref:"
 msgid_plural "The bundle contains these %d refs:"
@@ -1225,11 +1909,11 @@
 msgstr[2] "Пакет содержит эти %d ссылок:"
 msgstr[3] "Пакет содержит эти %d ссылок:"
 
-#: bundle.c:201
+#: bundle.c:250
 msgid "The bundle records a complete history."
 msgstr "Пакет содержит полную историю."
 
-#: bundle.c:203
+#: bundle.c:252
 #, c-format
 msgid "The bundle requires this ref:"
 msgid_plural "The bundle requires these %d refs:"
@@ -1238,62 +1922,324 @@
 msgstr[2] "Пакет требует эти %d ссылок:"
 msgstr[3] "Пакет требует эти %d ссылок:"
 
-#: bundle.c:269
+#: bundle.c:319
 msgid "unable to dup bundle descriptor"
 msgstr "не удалось дублировать дескриптор пакета"
 
-#: bundle.c:276
+#: bundle.c:326
 msgid "Could not spawn pack-objects"
 msgstr "Не удалось создать объекты пакета"
 
-#: bundle.c:287
+#: bundle.c:337
 msgid "pack-objects died"
 msgstr "критическая ошибка pack-objects"
 
-#: bundle.c:329
+#: bundle.c:379
 msgid "rev-list died"
 msgstr "критическая ошибка rev-list"
 
-#: bundle.c:378
+#: bundle.c:428
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "ссылка «%s» исключена в соответствии с опциями rev-list"
 
-#: bundle.c:457 builtin/log.c:197 builtin/log.c:1709 builtin/shortlog.c:306
+#: bundle.c:498
+#, c-format
+msgid "unsupported bundle version %d"
+msgstr ""
+
+#: bundle.c:500
+#, c-format
+msgid "cannot write bundle version %d with algorithm %s"
+msgstr ""
+
+#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "неопознанный аргумент: %s"
 
-#: bundle.c:465
+#: bundle.c:530
 msgid "Refusing to create empty bundle."
 msgstr "Отклонение создания пустого пакета."
 
-#: bundle.c:475
+#: bundle.c:540
 #, c-format
 msgid "cannot create '%s'"
 msgstr "не удалось создать «%s»"
 
-#: bundle.c:500
+#: bundle.c:565
 msgid "index-pack died"
 msgstr "критическая ошибка index-pack"
 
-#: color.c:296
+#: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "недопустимое значение цвета: %.*s"
 
-#: commit.c:50 sequencer.c:2697 builtin/am.c:355 builtin/am.c:399
-#: builtin/am.c:1377 builtin/am.c:2022 builtin/replace.c:455
+#: commit-graph.c:188 midx.c:47
+msgid "invalid hash version"
+msgstr ""
+
+#: commit-graph.c:246
+msgid "commit-graph file is too small"
+msgstr "файл commit-graph слишком маленький"
+
+#: commit-graph.c:311
+#, c-format
+msgid "commit-graph signature %X does not match signature %X"
+msgstr "подпись commit-graph файла %X не соотвествует подписи %X"
+
+#: commit-graph.c:318
+#, c-format
+msgid "commit-graph version %X does not match version %X"
+msgstr "версия commit-graph файла %X не соотвествует версии %X"
+
+#: commit-graph.c:325
+#, c-format
+msgid "commit-graph hash version %X does not match version %X"
+msgstr "версия хэш-функции commit-graph файла %X не соответствует версии %X"
+
+#: commit-graph.c:342
+#, c-format
+msgid "commit-graph file is too small to hold %u chunks"
+msgstr ""
+
+#: commit-graph.c:361
+#, c-format
+msgid "commit-graph improper chunk offset %08x%08x"
+msgstr "некорректное смещение части в commit-graph файле %08x%08x"
+
+#: commit-graph.c:433
+#, c-format
+msgid "commit-graph chunk id %08x appears multiple times"
+msgstr "часть файла commit-graph с идентификатором %08x появляется несколько раз"
+
+#: commit-graph.c:499
+msgid "commit-graph has no base graphs chunk"
+msgstr ""
+
+#: commit-graph.c:509
+msgid "commit-graph chain does not match"
+msgstr ""
+
+#: commit-graph.c:557
+#, c-format
+msgid "invalid commit-graph chain: line '%s' not a hash"
+msgstr ""
+
+#: commit-graph.c:581
+msgid "unable to find all commit-graph files"
+msgstr ""
+
+#: commit-graph.c:721 commit-graph.c:785
+msgid "invalid commit position. commit-graph is likely corrupt"
+msgstr ""
+
+#: commit-graph.c:742
+#, c-format
+msgid "could not find commit %s"
+msgstr "не удалось найти коммит %s"
+
+#: commit-graph.c:1036 builtin/am.c:1292
+#, c-format
+msgid "unable to parse commit %s"
+msgstr "не удалось разобрать коммит %s"
+
+#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#, c-format
+msgid "unable to get type of object %s"
+msgstr "не удалось получить тип объекта %s"
+
+#: commit-graph.c:1283
+msgid "Loading known commits in commit graph"
+msgstr "Загрузка известных коммитов на граф коммитов"
+
+#: commit-graph.c:1300
+msgid "Expanding reachable commits in commit graph"
+msgstr "Расширение достижимых коммитов на граф коммитов"
+
+#: commit-graph.c:1320
+msgid "Clearing commit marks in commit graph"
+msgstr "Очистка пометок коммитов на графе коммитов"
+
+#: commit-graph.c:1339
+msgid "Computing commit graph generation numbers"
+msgstr "Вычисление номеров поколений на графе коммитов"
+
+#: commit-graph.c:1406
+msgid "Computing commit changed paths Bloom filters"
+msgstr ""
+
+#: commit-graph.c:1483
+msgid "Collecting referenced commits"
+msgstr ""
+
+#: commit-graph.c:1508
+#, 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 пакетах"
+msgstr[2] "Поиск коммитов для графа коммитов в %d пакетах"
+msgstr[3] "Поиск коммитов для графа коммитов в %d пакетах"
+
+#: commit-graph.c:1521
+#, c-format
+msgid "error adding pack %s"
+msgstr "ошибка добавления пакета %s"
+
+#: commit-graph.c:1525
+#, c-format
+msgid "error opening index for %s"
+msgstr "ошибка открытия индекса для %s"
+
+#: commit-graph.c:1562
+msgid "Finding commits for commit graph among packed objects"
+msgstr "Поиск коммитов для графа коммитов среди упакованных объектов"
+
+#: commit-graph.c:1580
+msgid "Finding extra edges in commit graph"
+msgstr "Поиск дополнительных ребер на графе коммитов"
+
+#: commit-graph.c:1628
+msgid "failed to write correct number of base graph ids"
+msgstr ""
+
+#: commit-graph.c:1670 midx.c:819
+#, c-format
+msgid "unable to create leading directories of %s"
+msgstr "не удалось создать родительские каталоги для %s"
+
+#: commit-graph.c:1683
+msgid "unable to create temporary graph layer"
+msgstr ""
+
+#: commit-graph.c:1688
+#, c-format
+msgid "unable to adjust shared permissions for '%s'"
+msgstr ""
+
+#: commit-graph.c:1758
+#, 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 прохода"
+msgstr[2] "Запись графа коммитов в %d проходов"
+msgstr[3] "Запись графа коммитов в %d прохода"
+
+#: commit-graph.c:1803
+msgid "unable to open commit-graph chain file"
+msgstr ""
+
+#: commit-graph.c:1819
+msgid "failed to rename base commit-graph file"
+msgstr ""
+
+#: commit-graph.c:1839
+msgid "failed to rename temporary commit-graph file"
+msgstr ""
+
+#: commit-graph.c:1965
+msgid "Scanning merged commits"
+msgstr ""
+
+#: commit-graph.c:2009
+msgid "Merging commit-graph"
+msgstr ""
+
+#: commit-graph.c:2115
+msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
+msgstr ""
+
+#: commit-graph.c:2214
+msgid "too many commits to write graph"
+msgstr "слишком много коммитов для записи графа"
+
+#: commit-graph.c:2307
+msgid "the commit-graph file has incorrect checksum and is likely corrupt"
+msgstr "файл commit-graph содержит неправильную контрольную сумму и скорее всего поврежден"
+
+#: commit-graph.c:2317
+#, c-format
+msgid "commit-graph has incorrect OID order: %s then %s"
+msgstr "файл commit-graph содержит неправильный порядок OID: %s, а затем %s"
+
+#: commit-graph.c:2327 commit-graph.c:2342
+#, c-format
+msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
+msgstr "файл commit-graph содержит неправильное значение fanout: fanout[%d] = %u != %u"
+
+#: commit-graph.c:2334
+#, c-format
+msgid "failed to parse commit %s from commit-graph"
+msgstr "не удалось разобрать коммит %s из файла commit-graph"
+
+#: commit-graph.c:2352
+msgid "Verifying commits in commit graph"
+msgstr "Проверка коммитов на графе коммитов"
+
+#: commit-graph.c:2367
+#, c-format
+msgid "failed to parse commit %s from object database for commit-graph"
+msgstr "не удалось разобрать коммит %s из базы объектов файла commit-graph"
+
+#: commit-graph.c:2374
+#, c-format
+msgid "root tree OID for commit %s in commit-graph is %s != %s"
+msgstr "в файле commit-graph OID корня дерева для коммита %s является %s != %s"
+
+#: commit-graph.c:2384
+#, c-format
+msgid "commit-graph parent list for commit %s is too long"
+msgstr "слишком большой список родителей файле commit-graph для коммита %s"
+
+#: commit-graph.c:2393
+#, c-format
+msgid "commit-graph parent for %s is %s != %s"
+msgstr "в файле commit-graph родитель для %s является %s != %s"
+
+#: commit-graph.c:2407
+#, c-format
+msgid "commit-graph parent list for commit %s terminates early"
+msgstr "в файле commit-graph список родителей для коммита %s закончился слишком рано"
+
+#: commit-graph.c:2412
+#, c-format
+msgid ""
+"commit-graph has generation number zero for commit %s, but non-zero "
+"elsewhere"
+msgstr "в файле commit-graph содержится нулевой номер поколения для коммита %s, но ненулевой в остальных случаях"
+
+#: commit-graph.c:2416
+#, c-format
+msgid ""
+"commit-graph has non-zero generation number for commit %s, but zero "
+"elsewhere"
+msgstr "в файле commit-graph содержится ненулевой номер поколения для коммита %s, но нулевой в остальных случаях"
+
+#: commit-graph.c:2432
+#, c-format
+msgid "commit-graph generation for commit %s is %u != %u"
+msgstr "в файле commit-graph номер поколения для коммита %s является %u != %u"
+
+#: commit-graph.c:2438
+#, c-format
+msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
+msgstr "в файле commit-graph дата коммита %s является %<PRIuMAX> != %<PRIuMAX>"
+
+#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
+#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
 #, c-format
 msgid "could not parse %s"
 msgstr "не удалось разобрать %s"
 
-#: commit.c:52
+#: commit.c:54
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s не является коммитом!"
 
-#: commit.c:193
+#: commit.c:194
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -1305,232 +2251,38 @@
 "\"git config advice.graftFileDeprecated false\""
 msgstr "Поддержка <GIT_DIR>/info/grafts устарела и будет удалена в следующих версиях Git.\n\nИспользуйте «git replace --convert-graft-file» для  конвертации сращений (grafts) на ссылки замены.\n\nЧтобы скрыть это сообщение запустите «git config advice.graftFileDeprecated false»"
 
-#: commit.c:1128
+#: commit.c:1172
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "Коммит %s содержит не доверенную GPG подпись, предположительно от %s."
 
-#: commit.c:1131
+#: commit.c:1176
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Коммит %s содержит плохую GPG подпись, предположительно от %s."
 
-#: commit.c:1134
+#: commit.c:1179
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Коммит %s не содержит GPG подпись."
 
-#: commit.c:1137
+#: commit.c:1182
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Коммит %s содержит действительную GPG подпись, от %s.\n"
 
-#: commit.c:1391
+#: commit.c:1436
 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"
 "variable i18n.commitencoding to the encoding your project uses.\n"
 msgstr "Предупреждение: сообщение коммита не соответствует UTF-8.\nВозможно, вы захотите исправить его после исправления сообщения\nили настроить опцию i18n.commitencoding и указать кодировку\nсообщений, которую использует ваш проект.\n"
 
-#: commit-graph.c:105
-msgid "commit-graph file is too small"
-msgstr "файл commit-graph слишком маленький"
-
-#: commit-graph.c:170
-#, c-format
-msgid "commit-graph signature %X does not match signature %X"
-msgstr "подпись commit-graph файла %X не соотвествует подписи %X"
-
-#: commit-graph.c:177
-#, c-format
-msgid "commit-graph version %X does not match version %X"
-msgstr "версия commit-graph файла %X не соотвествует версии %X"
-
-#: commit-graph.c:184
-#, c-format
-msgid "commit-graph hash version %X does not match version %X"
-msgstr "версия хеш-суммы commit-graph файла %X не соответствует версии %X"
-
-#: commit-graph.c:207
-msgid "commit-graph chunk lookup table entry missing; file may be incomplete"
-msgstr "не найдена таблица расположения частей в файле commit-graph; возможно файл повреждён"
-
-#: commit-graph.c:218
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "некорректное смещение части в commit-graph файле %08x%08x"
-
-#: commit-graph.c:255
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "часть файла commit-graph с идентификатором %08x появляется несколько раз"
-
-#: commit-graph.c:390
-#, c-format
-msgid "could not find commit %s"
-msgstr "не удалось найти коммит %s"
-
-#: commit-graph.c:732 builtin/pack-objects.c:2649
-#, c-format
-msgid "unable to get type of object %s"
-msgstr "не удалось получить тип объекта %s"
-
-#: commit-graph.c:765
-msgid "Loading known commits in commit graph"
-msgstr "Загрузка известных коммитов на граф коммитов"
-
-#: commit-graph.c:781
-msgid "Expanding reachable commits in commit graph"
-msgstr "Расширение достижимых коммитов на граф коммитов"
-
-#: commit-graph.c:793
-msgid "Clearing commit marks in commit graph"
-msgstr "Очистка пометок коммитов на графе коммитов"
-
-#: commit-graph.c:813
-msgid "Computing commit graph generation numbers"
-msgstr "Вычисление номеров поколений на графе коммитов"
-
-#: commit-graph.c:930
-#, 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 пакетах"
-msgstr[2] "Поиск коммитов для графа коммитов в %d пакетах"
-msgstr[3] "Поиск коммитов для графа коммитов в %d пакетах"
-
-#: commit-graph.c:943
-#, c-format
-msgid "error adding pack %s"
-msgstr "ошибка добавления пакета %s"
-
-#: commit-graph.c:945
-#, c-format
-msgid "error opening index for %s"
-msgstr "ошибка открытия индекса для %s"
-
-#: commit-graph.c:959
-#, c-format
-msgid "Finding commits for commit graph from %d ref"
-msgid_plural "Finding commits for commit graph from %d refs"
-msgstr[0] "Поиск коммитов для графа коммитов по %d ссылке"
-msgstr[1] "Поиск коммитов для графа коммитов по %d ссылкам"
-msgstr[2] "Поиск коммитов для графа коммитов по %d ссылкам"
-msgstr[3] "Поиск коммитов для графа коммитов по %d ссылкам"
-
-#: commit-graph.c:991
-msgid "Finding commits for commit graph among packed objects"
-msgstr "Поиск коммитов для графа коммитов среди упакованных объектов"
-
-#: commit-graph.c:1004
-msgid "Counting distinct commits in commit graph"
-msgstr "Вычисление количества отдельных коммитов на графе коммитов"
-
-#: commit-graph.c:1017
-#, c-format
-msgid "the commit graph format cannot write %d commits"
-msgstr "программе форматирования графа коммитов не удалось записать %d коммитов"
-
-#: commit-graph.c:1026
-msgid "Finding extra edges in commit graph"
-msgstr "Поиск дополнительных ребер на графе коммитов"
-
-#: commit-graph.c:1050
-msgid "too many commits to write graph"
-msgstr "слишком много коммитов для записи графа"
-
-#: commit-graph.c:1057 midx.c:819
-#, c-format
-msgid "unable to create leading directories of %s"
-msgstr "не удалось создать родительские каталоги для %s"
-
-#: commit-graph.c:1097
-#, 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 прохода"
-msgstr[2] "Запись графа коммитов в %d проходов"
-msgstr[3] "Запись графа коммитов в %d прохода"
-
-#: commit-graph.c:1162
-msgid "the commit-graph file has incorrect checksum and is likely corrupt"
-msgstr "файл commit-graph содержит неправильную контрольную сумму и скорее всего поврежден"
-
-#: commit-graph.c:1172
-#, c-format
-msgid "commit-graph has incorrect OID order: %s then %s"
-msgstr "файл commit-graph содержит неправильный порядок OID: %s, а затем %s"
-
-#: commit-graph.c:1182 commit-graph.c:1197
-#, c-format
-msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
-msgstr "файл commit-graph содержит неправильное значение fanout: fanout[%d] = %u != %u"
-
-#: commit-graph.c:1189
-#, c-format
-msgid "failed to parse commit %s from commit-graph"
-msgstr "не удалось разобрать коммит %s из файла commit-graph"
-
-#: commit-graph.c:1206
-msgid "Verifying commits in commit graph"
-msgstr "Проверка коммитов на графе коммитов"
-
-#: commit-graph.c:1219
-#, c-format
-msgid "failed to parse commit %s from object database for commit-graph"
-msgstr "не удалось разобрать коммит %s из базы объектов файла commit-graph"
-
-#: commit-graph.c:1226
-#, c-format
-msgid "root tree OID for commit %s in commit-graph is %s != %s"
-msgstr " в файле commit-graph OID корня дерева для коммита %s является %s != %s"
-
-#: commit-graph.c:1236
-#, c-format
-msgid "commit-graph parent list for commit %s is too long"
-msgstr "слишком большой список родителей файле commit-graph для коммита %s"
-
-#: commit-graph.c:1242
-#, c-format
-msgid "commit-graph parent for %s is %s != %s"
-msgstr "в файле commit-graph родитель для %s является %s != %s"
-
-#: commit-graph.c:1255
-#, c-format
-msgid "commit-graph parent list for commit %s terminates early"
-msgstr "в файле commit-graph список родителей для коммита %s закончился слишком рано"
-
-#: commit-graph.c:1260
-#, c-format
-msgid ""
-"commit-graph has generation number zero for commit %s, but non-zero "
-"elsewhere"
-msgstr "в файле commit-graph содержится нулевой номер поколения для коммита %s, но ненулевой в остальных случаях"
-
-#: commit-graph.c:1264
-#, c-format
-msgid ""
-"commit-graph has non-zero generation number for commit %s, but zero "
-"elsewhere"
-msgstr "в файле commit-graph содержится ненулевой номер поколения для коммита %s, но нулевой в остальных случаях"
-
-#: commit-graph.c:1279
-#, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "в файле commit-graph номер поколения для коммита %s является %u != %u"
-
-#: commit-graph.c:1285
-#, c-format
-msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
-msgstr "в файле commit-graph дата коммита %s является %<PRIuMAX> != %<PRIuMAX>"
-
 #: compat/obstack.c:406 compat/obstack.c:408
 msgid "memory exhausted"
 msgstr "память исчерпана"
 
-#: config.c:123
+#: config.c:125
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -1540,294 +2292,290 @@
 "This might be due to circular includes."
 msgstr ""
 
-#: config.c:139
+#: config.c:141
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "не удалось раскрыть путь включения «%s»"
 
-#: config.c:150
+#: config.c:152
 msgid "relative config includes must come from files"
 msgstr "относительные включения конфигурации должны исходить из файлов"
 
-#: config.c:190
+#: config.c:198
 msgid "relative config include conditionals must come from files"
 msgstr "относительные условные включения конфигурации должны исходить из файлов"
 
-#: config.c:348
+#: config.c:378
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr ""
 
-#: config.c:354
+#: config.c:384
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr ""
 
-#: config.c:378 sequencer.c:2459
+#: config.c:408 sequencer.c:2580
 #, c-format
 msgid "invalid key: %s"
 msgstr "недействительный ключ: %s"
 
-#: config.c:384
+#: config.c:414
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr ""
 
-#: config.c:420 config.c:432
+#: config.c:450 config.c:462
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr ""
 
-#: config.c:467
+#: config.c:497
 #, c-format
 msgid "bogus format in %s"
 msgstr ""
 
-#: config.c:793
+#: config.c:836
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "ошибка в %d строке двоичного объекта %s"
 
-#: config.c:797
+#: config.c:840
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "ошибка в %d строке файла %s"
 
-#: config.c:801
+#: config.c:844
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "ошибка в %d строке стандартного ввода"
 
-#: config.c:805
+#: config.c:848
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "ошибка в %d строке двоичного объекта подмодуля %s"
 
-#: config.c:809
+#: config.c:852
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "ошибка в %d строке коммандной строки %s"
 
-#: config.c:813
+#: config.c:856
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "ошибка в %d строке в %s"
 
-#: config.c:952
+#: config.c:993
 msgid "out of range"
 msgstr "вне диапазона"
 
-#: config.c:952
+#: config.c:993
 msgid "invalid unit"
 msgstr "неправильное число"
 
-#: config.c:958
+#: config.c:994
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "неправильное числовое значение «%s» для «%s»: %s"
 
-#: config.c:963
+#: config.c:1013
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "неправильное числовое значение «%s» для «%s» в двоичном объекте %s: %s"
 
-#: config.c:966
+#: config.c:1016
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "неправильное числовое значение «%s» для «%s» в файле %s: %s"
 
-#: config.c:969
+#: config.c:1019
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "неправильное числовое значение «%s» для «%s» на стандартном вводе: %s"
 
-#: config.c:972
+#: config.c:1022
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "неправильное числовое значение «%s» для «%s» в двоичном объекте подмодуля %s: %s"
 
-#: config.c:975
+#: config.c:1025
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "неправильное числовое значение «%s» для «%s» на коммандной строке %s: %s"
 
-#: config.c:978
+#: config.c:1028
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "неправильное числовое значение «%s» для «%s» в %s: %s"
 
-#: config.c:1073
+#: config.c:1123
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "сбой разворачивания пути каталога пользователя: «%s»"
 
-#: config.c:1082
+#: config.c:1132
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "«%s» для «%s» не является допустимой меткой даты/времени"
 
-#: config.c:1173
+#: config.c:1223
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr ""
 
-#: config.c:1187 config.c:1198
+#: config.c:1237 config.c:1248
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "неправильный уровень сжатия zlib %d"
 
-#: config.c:1290
+#: config.c:1340
 msgid "core.commentChar should only be one character"
 msgstr ""
 
-#: config.c:1323
+#: config.c:1373
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "недопустимый режим создания объекта: %s"
 
-#: config.c:1395
+#: config.c:1445
 #, c-format
 msgid "malformed value for %s"
 msgstr ""
 
-#: config.c:1421
+#: config.c:1471
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr ""
 
-#: config.c:1422
+#: config.c:1472
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 
-#: config.c:1483 builtin/pack-objects.c:3397
+#: config.c:1533 builtin/pack-objects.c:3649
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "неправильный уровень сжатия пакета %d"
 
-#: config.c:1604
+#: config.c:1655
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr ""
 
-#: config.c:1607
+#: config.c:1658
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr ""
 
-#: config.c:1624
+#: config.c:1675
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr ""
 
-#: config.c:1654
+#: config.c:1705
 #, c-format
 msgid "failed to parse %s"
 msgstr ""
 
-#: config.c:1710
+#: config.c:1759
 msgid "unable to parse command-line config"
 msgstr "не удалось разобрать конфигурацию из командной строки"
 
-#: config.c:2059
+#: config.c:2122
 msgid "unknown error occurred while reading the configuration files"
 msgstr "произошла неизвестная ошибка при чтении файлов конфигурации"
 
-#: config.c:2229
+#: config.c:2296
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Недействительный %s: «%s»"
 
-#: config.c:2272
-#, c-format
-msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
-msgstr "неизвестное значение «%s» для core.untrackedCache; использую стандартное значение «keep»"
-
-#: config.c:2298
+#: config.c:2341
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "значение «%d» для splitIndex.maxPercentChange должно быть от 0 до 100"
 
-#: config.c:2344
+#: config.c:2387
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "не удалось разобрать «%s» в конфигурации из командной строки"
 
-#: config.c:2346
+#: config.c:2389
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "неправильная переменная конфигурации «%s» в файле «%s» на строке %d"
 
-#: config.c:2427
+#: config.c:2473
 #, c-format
 msgid "invalid section name '%s'"
 msgstr ""
 
-#: config.c:2459
+#: config.c:2505
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s имеет несколько значений"
 
-#: config.c:2488
+#: config.c:2534
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr ""
 
-#: config.c:2740 config.c:3064
+#: config.c:2786 config.c:3112
 #, c-format
 msgid "could not lock config file %s"
 msgstr ""
 
-#: config.c:2751
+#: config.c:2797
 #, c-format
 msgid "opening %s"
 msgstr ""
 
-#: config.c:2786 builtin/config.c:328
+#: config.c:2834 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr ""
 
-#: config.c:2811
+#: config.c:2859
 #, c-format
 msgid "invalid config file %s"
 msgstr ""
 
-#: config.c:2824 config.c:3077
+#: config.c:2872 config.c:3125
 #, c-format
 msgid "fstat on %s failed"
 msgstr "сбой при выполнении fstat на файле %s"
 
-#: config.c:2835
+#: config.c:2883
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr ""
 
-#: config.c:2844 config.c:3082
+#: config.c:2892 config.c:3130
 #, c-format
 msgid "chmod on %s failed"
 msgstr ""
 
-#: config.c:2929 config.c:3179
+#: config.c:2977 config.c:3227
 #, c-format
 msgid "could not write config file %s"
 msgstr ""
 
-#: config.c:2963
+#: config.c:3011
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "не удалось установить «%s» в «%s»"
 
-#: config.c:2965 builtin/remote.c:782
+#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855
+#: builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "не удалось сбросить значение для «%s»"
 
-#: config.c:3055
+#: config.c:3103
 #, c-format
 msgid "invalid section name: %s"
 msgstr ""
 
-#: config.c:3222
+#: config.c:3270
 #, c-format
 msgid "missing value for '%s'"
 msgstr ""
@@ -1849,79 +2597,88 @@
 msgid "server doesn't support '%s'"
 msgstr ""
 
-#: connect.c:103
+#: connect.c:118
 #, c-format
 msgid "server doesn't support feature '%s'"
 msgstr ""
 
-#: connect.c:114
+#: connect.c:129
 msgid "expected flush after capabilities"
 msgstr ""
 
-#: connect.c:233
+#: connect.c:263
 #, c-format
 msgid "ignoring capabilities after first line '%s'"
 msgstr ""
 
-#: connect.c:252
+#: connect.c:284
 msgid "protocol error: unexpected capabilities^{}"
 msgstr ""
 
-#: connect.c:273
+#: connect.c:306
 #, c-format
 msgid "protocol error: expected shallow sha-1, got '%s'"
 msgstr ""
 
-#: connect.c:275
+#: connect.c:308
 msgid "repository on the other end cannot be shallow"
 msgstr ""
 
-#: connect.c:313
+#: connect.c:347
 msgid "invalid packet"
 msgstr ""
 
-#: connect.c:333
+#: connect.c:367
 #, c-format
 msgid "protocol error: unexpected '%s'"
 msgstr ""
 
-#: connect.c:441
+#: connect.c:473
+#, c-format
+msgid "unknown object format '%s' specified by server"
+msgstr ""
+
+#: connect.c:500
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr ""
 
-#: connect.c:445
+#: connect.c:504
 msgid "expected flush after ref listing"
 msgstr ""
 
-#: connect.c:544
+#: connect.c:507
+msgid "expected response end packet after ref listing"
+msgstr ""
+
+#: connect.c:640
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr ""
 
-#: connect.c:595
+#: connect.c:691
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr ""
 
-#: connect.c:635 connect.c:698
+#: connect.c:731 connect.c:794
 #, c-format
 msgid "Looking up %s ... "
 msgstr ""
 
-#: connect.c:639
+#: connect.c:735
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr ""
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:643 connect.c:714
+#: connect.c:739 connect.c:810
 #, c-format
 msgid ""
 "done.\n"
 "Connecting to %s (port %s) ... "
 msgstr ""
 
-#: connect.c:665 connect.c:742
+#: connect.c:761 connect.c:838
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -1929,116 +2686,116 @@
 msgstr ""
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:671 connect.c:748
+#: connect.c:767 connect.c:844
 msgid "done."
 msgstr ""
 
-#: connect.c:702
+#: connect.c:798
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr ""
 
-#: connect.c:708
+#: connect.c:804
 #, c-format
 msgid "unknown port %s"
 msgstr ""
 
-#: connect.c:845 connect.c:1171
+#: connect.c:941 connect.c:1271
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr ""
 
-#: connect.c:847
+#: connect.c:943
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr ""
 
-#: connect.c:857
+#: connect.c:953
 #, c-format
 msgid "cannot start proxy %s"
 msgstr ""
 
-#: connect.c:924
+#: connect.c:1024
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
 
-#: connect.c:1119
+#: connect.c:1219
 msgid "ssh variant 'simple' does not support -4"
 msgstr ""
 
-#: connect.c:1131
+#: connect.c:1231
 msgid "ssh variant 'simple' does not support -6"
 msgstr ""
 
-#: connect.c:1148
+#: connect.c:1248
 msgid "ssh variant 'simple' does not support setting port"
 msgstr ""
 
-#: connect.c:1260
+#: connect.c:1360
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr ""
 
-#: connect.c:1307
+#: connect.c:1408
 msgid "unable to fork"
 msgstr ""
 
-#: connected.c:85 builtin/fsck.c:221 builtin/prune.c:43
+#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Проверка соединения"
 
-#: connected.c:97
+#: connected.c:120
 msgid "Could not run 'git rev-list'"
 msgstr "Не удалось запустить «git rev-list»"
 
-#: connected.c:117
+#: connected.c:144
 msgid "failed write to rev-list"
 msgstr "сбой записи в rev-list"
 
-#: connected.c:124
+#: connected.c:149
 msgid "failed to close rev-list's stdin"
 msgstr "сбой закрытия стандартного ввода у rev-list"
 
-#: convert.c:193
+#: convert.c:194
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr ""
 
-#: convert.c:206
+#: convert.c:207
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr ""
 
-#: convert.c:208
+#: convert.c:209
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 
-#: convert.c:216
+#: convert.c:217
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF будет заменен на CRLF в %s"
 
-#: convert.c:218
+#: convert.c:219
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
 "The file will have its original line endings in your working directory"
 msgstr ""
 
-#: convert.c:279
+#: convert.c:284
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM запрещен в «%s», если кодируется как %s"
 
-#: convert.c:286
+#: convert.c:291
 #, c-format
 msgid ""
-"The file '%s' contains a byte order mark (BOM). Please use UTF-%s as "
+"The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
 "working-tree-encoding."
-msgstr "Файл «%s» содержит маркер последовательности байтов (BOM). Используйте UTF-%s как кодировку рабочего каталога."
+msgstr ""
 
 #: convert.c:304
 #, c-format
@@ -2052,75 +2809,103 @@
 "UTF-%sLE (depending on the byte order) as working-tree-encoding."
 msgstr "Файл «%s» не содержит маркер последовательности байтов (BOM).  Используйте UTF-%sBE или UTF-%sLE (в зависимости от порядка байтов) как кодировку рабочего каталога."
 
-#: convert.c:424 convert.c:495
+#: convert.c:419 convert.c:490
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "не удалось перекодировать «%s» из %s в %s"
 
-#: convert.c:467
+#: convert.c:462
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "перекодирование «%s» из %s в %s и обратно не одно и то же"
 
-#: convert.c:673
+#: convert.c:665
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr ""
 
-#: convert.c:693
+#: convert.c:685
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr ""
 
-#: convert.c:700
+#: convert.c:692
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr ""
 
-#: convert.c:735 convert.c:738
+#: convert.c:727 convert.c:730
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr ""
 
-#: convert.c:741 convert.c:796
+#: convert.c:733 convert.c:788
 #, c-format
 msgid "external filter '%s' failed"
 msgstr ""
 
-#: convert.c:844
+#: convert.c:837
 msgid "unexpected filter type"
 msgstr ""
 
-#: convert.c:855
+#: convert.c:848
 msgid "path name too long for external filter"
 msgstr ""
 
-#: convert.c:929
+#: convert.c:940
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr ""
 
-#: convert.c:1228
+#: convert.c:1240
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false не является допустимым значением для working-tree-encoding"
 
-#: convert.c:1398 convert.c:1432
+#: convert.c:1428 convert.c:1462
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr ""
 
-#: convert.c:1476
+#: convert.c:1508
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr ""
 
-#: date.c:137
+#: credential.c:96
+#, c-format
+msgid "skipping credential lookup for key: credential.%s"
+msgstr ""
+
+#: credential.c:112
+msgid "refusing to work with credential missing host field"
+msgstr ""
+
+#: credential.c:114
+msgid "refusing to work with credential missing protocol field"
+msgstr ""
+
+#: credential.c:394
+#, c-format
+msgid "url contains a newline in its %s component: %s"
+msgstr ""
+
+#: credential.c:438
+#, c-format
+msgid "url has no scheme: %s"
+msgstr ""
+
+#: credential.c:511
+#, c-format
+msgid "credential url cannot be parsed: %s"
+msgstr ""
+
+#: date.c:138
 msgid "in the future"
 msgstr "в будущем"
 
-#: date.c:143
+#: date.c:144
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
@@ -2129,7 +2914,7 @@
 msgstr[2] "%<PRIuMAX> секунд назад"
 msgstr[3] "%<PRIuMAX> секунды назад"
 
-#: date.c:150
+#: date.c:151
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
@@ -2138,7 +2923,7 @@
 msgstr[2] "%<PRIuMAX> минут назад"
 msgstr[3] "%<PRIuMAX> минуты назад"
 
-#: date.c:157
+#: date.c:158
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
@@ -2147,7 +2932,7 @@
 msgstr[2] "%<PRIuMAX> часов назад"
 msgstr[3] "%<PRIuMAX> часа назад"
 
-#: date.c:164
+#: date.c:165
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
@@ -2156,7 +2941,7 @@
 msgstr[2] "%<PRIuMAX> дней назад"
 msgstr[3] "%<PRIuMAX> дня назад"
 
-#: date.c:170
+#: date.c:171
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
@@ -2165,7 +2950,7 @@
 msgstr[2] "%<PRIuMAX> недель назад"
 msgstr[3] "%<PRIuMAX> недели назад"
 
-#: date.c:177
+#: date.c:178
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
@@ -2174,7 +2959,7 @@
 msgstr[2] "%<PRIuMAX> месяцев назад"
 msgstr[3] "%<PRIuMAX> месяца назад"
 
-#: date.c:188
+#: date.c:189
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2184,7 +2969,7 @@
 msgstr[3] "%<PRIuMAX> года"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:191
+#: date.c:192
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
@@ -2193,7 +2978,7 @@
 msgstr[2] "%s, %<PRIuMAX> месяцев назад"
 msgstr[3] "%s, %<PRIuMAX> месяца назад"
 
-#: date.c:196 date.c:201
+#: date.c:197 date.c:202
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -2221,19 +3006,30 @@
 msgid "island regex from config has too many capture groups (max=%d)"
 msgstr ""
 
-#: delta-islands.c:466
+#: delta-islands.c:467
 #, c-format
 msgid "Marked %d islands, done.\n"
 msgstr ""
 
-#: diffcore-order.c:24
-#, c-format
-msgid "failed to read orderfile '%s'"
-msgstr "сбой чтения orderfile «%s»"
+#: diff-lib.c:534
+msgid "--merge-base does not work with ranges"
+msgstr ""
 
-#: diffcore-rename.c:544
-msgid "Performing inexact rename detection"
-msgstr "Выполняется неточное определение переименования"
+#: diff-lib.c:536
+msgid "--merge-base only works with commits"
+msgstr ""
+
+#: diff-lib.c:553
+msgid "unable to get HEAD"
+msgstr ""
+
+#: diff-lib.c:560
+msgid "no merge base found"
+msgstr ""
+
+#: diff-lib.c:562
+msgid "multiple merge bases found"
+msgstr ""
 
 #: diff-no-index.c:238
 msgid "git diff --no-index [<options>] <path> <path>"
@@ -2245,615 +3041,652 @@
 "tree"
 msgstr ""
 
-#: diff.c:155
+#: diff.c:156
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  Сбой разбора величины среза (cut-off) у dirstat «%s»\n"
 
-#: diff.c:160
+#: diff.c:161
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
-msgstr "Неизвестный параметр dirstat: «%s»\n"
+msgstr " Неизвестный параметр dirstat: «%s»\n"
 
-#: diff.c:296
+#: diff.c:297
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
 msgstr ""
 
-#: diff.c:324
+#: diff.c:325
 #, 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'"
 msgstr ""
 
-#: diff.c:332
+#: diff.c:333
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr ""
 
-#: diff.c:405
+#: diff.c:410
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Неизвестное значения для переменной «diff.submodule»: «%s»"
 
-#: diff.c:465
+#: diff.c:470
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
 "%s"
 msgstr "Найдены ошибки в переменной «diff.dirstat»:\n%s"
 
-#: diff.c:4210
+#: diff.c:4276
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "критическая ошибка при внешнем сравнении, останов на %s"
 
-#: diff.c:4555
+#: diff.c:4625
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check и -s нельзя использовать одновременно"
 
-#: diff.c:4558
+#: diff.c:4628
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S и --find-object нельзя использовать одновременно"
 
-#: diff.c:4636
+#: diff.c:4707
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow требует ровно одного спецификатора пути"
 
-#: diff.c:4684
+#: diff.c:4755
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr ""
 
-#: diff.c:4689 diff.c:4694 diff.c:4699 diff.c:4704 diff.c:5217
-#: parse-options.c:199 parse-options.c:203
+#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
 #, c-format
 msgid "%s expects a numerical value"
 msgstr ""
 
-#: diff.c:4721
+#: diff.c:4792
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
 msgstr "Сбой разбора параметра опции --dirstat/-X :\n%s"
 
-#: diff.c:4806
+#: diff.c:4877
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr ""
 
-#: diff.c:4830
+#: diff.c:4901
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr ""
 
-#: diff.c:4844
+#: diff.c:4915
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr ""
 
-#: diff.c:4894 diff.c:4900
+#: diff.c:4965 diff.c:4971
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 
-#: diff.c:4912
+#: diff.c:4983
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr ""
 
-#: diff.c:4933
+#: diff.c:5004
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr ""
 
-#: diff.c:4952
+#: diff.c:5023
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr ""
 
-#: diff.c:4992
+#: diff.c:5063
 msgid "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and \"histogram\""
 msgstr ""
 
-#: diff.c:5028 diff.c:5048
+#: diff.c:5099 diff.c:5119
 #, c-format
 msgid "invalid argument to %s"
 msgstr ""
 
-#: diff.c:5186
+#: diff.c:5223
+#, c-format
+msgid "invalid regex given to -I: '%s'"
+msgstr ""
+
+#: diff.c:5272
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr ""
 
-#: diff.c:5242
+#: diff.c:5328
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr ""
 
-#: diff.c:5265
+#: diff.c:5351
 msgid "Diff output format options"
 msgstr ""
 
-#: diff.c:5267 diff.c:5273
+#: diff.c:5353 diff.c:5359
 msgid "generate patch"
 msgstr ""
 
-#: diff.c:5270 builtin/log.c:167
+#: diff.c:5356 builtin/log.c:178
 msgid "suppress diff output"
 msgstr "не выводить список изменений"
 
-#: diff.c:5275 diff.c:5389 diff.c:5396
+#: diff.c:5361 diff.c:5475 diff.c:5482
 msgid "<n>"
 msgstr ""
 
-#: diff.c:5276 diff.c:5279
+#: diff.c:5362 diff.c:5365
 msgid "generate diffs with <n> lines context"
 msgstr ""
 
-#: diff.c:5281
+#: diff.c:5367
 msgid "generate the diff in raw format"
 msgstr ""
 
-#: diff.c:5284
+#: diff.c:5370
 msgid "synonym for '-p --raw'"
 msgstr ""
 
-#: diff.c:5288
+#: diff.c:5374
 msgid "synonym for '-p --stat'"
 msgstr ""
 
-#: diff.c:5292
+#: diff.c:5378
 msgid "machine friendly --stat"
 msgstr ""
 
-#: diff.c:5295
+#: diff.c:5381
 msgid "output only the last line of --stat"
 msgstr ""
 
-#: diff.c:5297 diff.c:5305
+#: diff.c:5383 diff.c:5391
 msgid "<param1,param2>..."
 msgstr ""
 
-#: diff.c:5298
+#: diff.c:5384
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 
-#: diff.c:5302
+#: diff.c:5388
 msgid "synonym for --dirstat=cumulative"
 msgstr ""
 
-#: diff.c:5306
+#: diff.c:5392
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr ""
 
-#: diff.c:5310
+#: diff.c:5396
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 
-#: diff.c:5313
+#: diff.c:5399
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "краткая сводка изменений, вроде созданий, переименований или изменений режима доступа"
 
-#: diff.c:5316
+#: diff.c:5402
 msgid "show only names of changed files"
 msgstr ""
 
-#: diff.c:5319
+#: diff.c:5405
 msgid "show only names and status of changed files"
 msgstr ""
 
-#: diff.c:5321
+#: diff.c:5407
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr ""
 
-#: diff.c:5322
+#: diff.c:5408
 msgid "generate diffstat"
 msgstr ""
 
-#: diff.c:5324 diff.c:5327 diff.c:5330
+#: diff.c:5410 diff.c:5413 diff.c:5416
 msgid "<width>"
 msgstr ""
 
-#: diff.c:5325
+#: diff.c:5411
 msgid "generate diffstat with a given width"
 msgstr ""
 
-#: diff.c:5328
+#: diff.c:5414
 msgid "generate diffstat with a given name width"
 msgstr ""
 
-#: diff.c:5331
+#: diff.c:5417
 msgid "generate diffstat with a given graph width"
 msgstr ""
 
-#: diff.c:5333
+#: diff.c:5419
 msgid "<count>"
 msgstr ""
 
-#: diff.c:5334
+#: diff.c:5420
 msgid "generate diffstat with limited lines"
 msgstr ""
 
-#: diff.c:5337
+#: diff.c:5423
 msgid "generate compact summary in diffstat"
-msgstr "генерация компактной сводки изменений в diffstat"
+msgstr "генерация компактной сводки в diffstat"
 
-#: diff.c:5340
+#: diff.c:5426
 msgid "output a binary diff that can be applied"
 msgstr ""
 
-#: diff.c:5343
+#: diff.c:5429
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 
-#: diff.c:5345
+#: diff.c:5431
 msgid "show colored diff"
 msgstr ""
 
-#: diff.c:5346
+#: diff.c:5432
 msgid "<kind>"
 msgstr ""
 
-#: diff.c:5347
+#: diff.c:5433
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 
-#: diff.c:5350
+#: diff.c:5436
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 
-#: diff.c:5353 diff.c:5356 diff.c:5359 diff.c:5465
+#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
 msgid "<prefix>"
 msgstr ""
 
-#: diff.c:5354
+#: diff.c:5440
 msgid "show the given source prefix instead of \"a/\""
 msgstr ""
 
-#: diff.c:5357
+#: diff.c:5443
 msgid "show the given destination prefix instead of \"b/\""
 msgstr ""
 
-#: diff.c:5360
+#: diff.c:5446
 msgid "prepend an additional prefix to every line of output"
 msgstr ""
 
-#: diff.c:5363
+#: diff.c:5449
 msgid "do not show any source or destination prefix"
 msgstr ""
 
-#: diff.c:5366
+#: diff.c:5452
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 
-#: diff.c:5370 diff.c:5375 diff.c:5380
+#: diff.c:5456 diff.c:5461 diff.c:5466
 msgid "<char>"
 msgstr ""
 
-#: diff.c:5371
+#: diff.c:5457
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 
-#: diff.c:5376
+#: diff.c:5462
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 
-#: diff.c:5381
+#: diff.c:5467
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 
-#: diff.c:5384
+#: diff.c:5470
 msgid "Diff rename options"
 msgstr ""
 
-#: diff.c:5385
+#: diff.c:5471
 msgid "<n>[/<m>]"
 msgstr ""
 
-#: diff.c:5386
+#: diff.c:5472
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 
-#: diff.c:5390
+#: diff.c:5476
 msgid "detect renames"
 msgstr ""
 
-#: diff.c:5394
+#: diff.c:5480
 msgid "omit the preimage for deletes"
 msgstr ""
 
-#: diff.c:5397
+#: diff.c:5483
 msgid "detect copies"
 msgstr ""
 
-#: diff.c:5401
+#: diff.c:5487
 msgid "use unmodified files as source to find copies"
 msgstr ""
 
-#: diff.c:5403
+#: diff.c:5489
 msgid "disable rename detection"
 msgstr ""
 
-#: diff.c:5406
+#: diff.c:5492
 msgid "use empty blobs as rename source"
 msgstr ""
 
-#: diff.c:5408
+#: diff.c:5494
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 
-#: diff.c:5411
+#: diff.c:5497
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 
-#: diff.c:5413
+#: diff.c:5499
 msgid "Diff algorithm options"
 msgstr ""
 
-#: diff.c:5415
+#: diff.c:5501
 msgid "produce the smallest possible diff"
 msgstr ""
 
-#: diff.c:5418
+#: diff.c:5504
 msgid "ignore whitespace when comparing lines"
 msgstr ""
 
-#: diff.c:5421
+#: diff.c:5507
 msgid "ignore changes in amount of whitespace"
 msgstr ""
 
-#: diff.c:5424
+#: diff.c:5510
 msgid "ignore changes in whitespace at EOL"
 msgstr ""
 
-#: diff.c:5427
+#: diff.c:5513
 msgid "ignore carrier-return at the end of line"
 msgstr ""
 
-#: diff.c:5430
+#: diff.c:5516
 msgid "ignore changes whose lines are all blank"
 msgstr ""
 
-#: diff.c:5433
-msgid "heuristic to shift diff hunk boundaries for easy reading"
-msgstr ""
-
-#: diff.c:5436
-msgid "generate diff using the \"patience diff\" algorithm"
-msgstr ""
-
-#: diff.c:5440
-msgid "generate diff using the \"histogram diff\" algorithm"
-msgstr ""
-
-#: diff.c:5442
-msgid "<algorithm>"
-msgstr ""
-
-#: diff.c:5443
-msgid "choose a diff algorithm"
-msgstr ""
-
-#: diff.c:5445
-msgid "<text>"
-msgstr ""
-
-#: diff.c:5446
-msgid "generate diff using the \"anchored diff\" algorithm"
-msgstr ""
-
-#: diff.c:5448 diff.c:5457 diff.c:5460
-msgid "<mode>"
-msgstr ""
-
-#: diff.c:5449
-msgid "show word diff, using <mode> to delimit changed words"
-msgstr ""
-
-#: diff.c:5451 diff.c:5454 diff.c:5499
+#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
 msgid "<regex>"
 msgstr ""
 
-#: diff.c:5452
+#: diff.c:5519
+msgid "ignore changes whose all lines match <regex>"
+msgstr ""
+
+#: diff.c:5522
+msgid "heuristic to shift diff hunk boundaries for easy reading"
+msgstr ""
+
+#: diff.c:5525
+msgid "generate diff using the \"patience diff\" algorithm"
+msgstr ""
+
+#: diff.c:5529
+msgid "generate diff using the \"histogram diff\" algorithm"
+msgstr ""
+
+#: diff.c:5531
+msgid "<algorithm>"
+msgstr ""
+
+#: diff.c:5532
+msgid "choose a diff algorithm"
+msgstr ""
+
+#: diff.c:5534
+msgid "<text>"
+msgstr ""
+
+#: diff.c:5535
+msgid "generate diff using the \"anchored diff\" algorithm"
+msgstr ""
+
+#: diff.c:5537 diff.c:5546 diff.c:5549
+msgid "<mode>"
+msgstr ""
+
+#: diff.c:5538
+msgid "show word diff, using <mode> to delimit changed words"
+msgstr ""
+
+#: diff.c:5541
 msgid "use <regex> to decide what a word is"
 msgstr ""
 
-#: diff.c:5455
+#: diff.c:5544
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 
-#: diff.c:5458
+#: diff.c:5547
 msgid "moved lines of code are colored differently"
 msgstr ""
 
-#: diff.c:5461
+#: diff.c:5550
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 
-#: diff.c:5464
+#: diff.c:5553
 msgid "Other diff options"
 msgstr ""
 
-#: diff.c:5466
+#: diff.c:5555
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 
-#: diff.c:5470
+#: diff.c:5559
 msgid "treat all files as text"
 msgstr ""
 
-#: diff.c:5472
+#: diff.c:5561
 msgid "swap two inputs, reverse the diff"
 msgstr ""
 
-#: diff.c:5474
+#: diff.c:5563
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 
-#: diff.c:5476
+#: diff.c:5565
 msgid "disable all output of the program"
 msgstr ""
 
-#: diff.c:5478
+#: diff.c:5567
 msgid "allow an external diff helper to be executed"
 msgstr ""
 
-#: diff.c:5480
+#: diff.c:5569
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 
-#: diff.c:5482
+#: diff.c:5571
 msgid "<when>"
 msgstr ""
 
-#: diff.c:5483
+#: diff.c:5572
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 
-#: diff.c:5486
+#: diff.c:5575
 msgid "<format>"
 msgstr ""
 
-#: diff.c:5487
+#: diff.c:5576
 msgid "specify how differences in submodules are shown"
 msgstr ""
 
-#: diff.c:5491
+#: diff.c:5580
 msgid "hide 'git add -N' entries from the index"
 msgstr ""
 
-#: diff.c:5494
+#: diff.c:5583
 msgid "treat 'git add -N' entries as real in the index"
 msgstr ""
 
-#: diff.c:5496
+#: diff.c:5585
 msgid "<string>"
 msgstr ""
 
-#: diff.c:5497
+#: diff.c:5586
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr ""
 
-#: diff.c:5500
+#: diff.c:5589
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr ""
 
-#: diff.c:5503
+#: diff.c:5592
 msgid "show all changes in the changeset with -S or -G"
 msgstr ""
 
-#: diff.c:5506
+#: diff.c:5595
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 
-#: diff.c:5509
+#: diff.c:5598
 msgid "control the order in which files appear in the output"
 msgstr ""
 
-#: diff.c:5510
+#: diff.c:5599
 msgid "<object-id>"
 msgstr ""
 
-#: diff.c:5511
+#: diff.c:5600
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr ""
 
-#: diff.c:5513
+#: diff.c:5602
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr ""
 
-#: diff.c:5514
+#: diff.c:5603
 msgid "select files by diff type"
 msgstr ""
 
-#: diff.c:5516
+#: diff.c:5605
 msgid "<file>"
 msgstr ""
 
-#: diff.c:5517
+#: diff.c:5606
 msgid "Output to a specific file"
 msgstr ""
 
-#: diff.c:6150
+#: diff.c:6263
 msgid "inexact rename detection was skipped due to too many files."
 msgstr "неточное определение переименования было пропущено из-за слишком большого количества файлов."
 
-#: diff.c:6153
+#: diff.c:6266
 msgid "only found copies from modified paths due to too many files."
 msgstr "найдены только копии из измененных путей из-за слишком большого количества файлов."
 
-#: diff.c:6156
+#: diff.c:6269
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
 msgstr "возможно вы захотите установить переменную %s в как минимум значение %d и повторить вызов команды."
 
-#: dir.c:537
+#: diffcore-order.c:24
+#, c-format
+msgid "failed to read orderfile '%s'"
+msgstr "сбой чтения orderfile «%s»"
+
+#: diffcore-rename.c:592
+msgid "Performing inexact rename detection"
+msgstr "Выполняется неточное определение переименования"
+
+#: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
 msgstr ""
 
-#: dir.c:926
+#: dir.c:718 dir.c:747 dir.c:760
+#, c-format
+msgid "unrecognized pattern: '%s'"
+msgstr ""
+
+#: dir.c:777 dir.c:791
+#, c-format
+msgid "unrecognized negative pattern: '%s'"
+msgstr ""
+
+#: dir.c:809
+#, c-format
+msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
+msgstr ""
+
+#: dir.c:819
+msgid "disabling cone pattern matching"
+msgstr ""
+
+#: dir.c:1198
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr ""
 
-#: dir.c:1843
+#: dir.c:2305
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "не удалось открыть каталог «%s»"
 
-#: dir.c:2085
+#: dir.c:2605
 msgid "failed to get kernel name and information"
 msgstr "не удалось получить имя ядра и информацию"
 
-#: dir.c:2209
+#: dir.c:2729
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 
-#: dir.c:3013
+#: dir.c:3520
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr ""
 
-#: dir.c:3058 dir.c:3063
+#: dir.c:3565 dir.c:3570
 #, c-format
 msgid "could not create directories for %s"
 msgstr "не удалось создать каталоги для %s"
 
-#: dir.c:3092
+#: dir.c:3599
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "не удалось переместить каталог git с «%s» в «%s»"
 
-#: editor.c:73
+#: editor.c:74
 #, c-format
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "подсказка: Ожидание, пока вы закроете редактор с файлом…%c"
 
-#: entry.c:178
+#: entry.c:177
 msgid "Filtering content"
 msgstr "Фильтруется содержимое"
 
-#: entry.c:476
+#: entry.c:478
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "не удалось выполнить stat для файла «%s»"
@@ -2863,7 +3696,7 @@
 msgid "bad git namespace path \"%s\""
 msgstr ""
 
-#: environment.c:332
+#: environment.c:337
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr ""
@@ -2873,289 +3706,285 @@
 msgid "too many args to run %s"
 msgstr ""
 
-#: fetch-object.c:17
-msgid "Remote with no URL"
-msgstr "Внешний репозиторий без URL"
-
-#: fetch-pack.c:151
+#: fetch-pack.c:177
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: ожидается передача списка для получение части"
 
-#: fetch-pack.c:154
+#: fetch-pack.c:180
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr ""
 
-#: fetch-pack.c:165
+#: fetch-pack.c:191
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: ожидается ACK/NAK, а получен пустой пакет"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:211
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: ожидается ACK/NAK, а получено «%s»"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:222
 msgid "unable to write to remote"
 msgstr ""
 
-#: fetch-pack.c:258
+#: fetch-pack.c:283
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc требует multi_ack_detailed"
 
-#: fetch-pack.c:360 fetch-pack.c:1271
+#: fetch-pack.c:378 fetch-pack.c:1406
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "неправильная строка частичного получения: %s"
 
-#: fetch-pack.c:366 fetch-pack.c:1277
+#: fetch-pack.c:384 fetch-pack.c:1412
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "неправильная строка полного получения: %s"
 
-#: fetch-pack.c:368 fetch-pack.c:1279
+#: fetch-pack.c:386 fetch-pack.c:1414
 #, c-format
 msgid "object not found: %s"
 msgstr "объект не найден: %s"
 
-#: fetch-pack.c:371 fetch-pack.c:1282
+#: fetch-pack.c:389 fetch-pack.c:1417
 #, c-format
 msgid "error in object: %s"
 msgstr "ошибка в объекте: %s"
 
-#: fetch-pack.c:373 fetch-pack.c:1284
+#: fetch-pack.c:391 fetch-pack.c:1419
 #, c-format
 msgid "no shallow found: %s"
 msgstr "частичный клон не найден: %s"
 
-#: fetch-pack.c:376 fetch-pack.c:1288
+#: fetch-pack.c:394 fetch-pack.c:1423
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "ожидалось shallow/unshallow, а получено %s"
 
-#: fetch-pack.c:417
+#: fetch-pack.c:434
 #, c-format
 msgid "got %s %d %s"
 msgstr "получено %s %d %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:451
 #, c-format
 msgid "invalid commit %s"
 msgstr "недопустимый коммит %s"
 
-#: fetch-pack.c:465
+#: fetch-pack.c:482
 msgid "giving up"
 msgstr "останавливаю дальнейшие попытки"
 
-#: fetch-pack.c:477 progress.c:284
+#: fetch-pack.c:495 progress.c:339
 msgid "done"
 msgstr "готово"
 
-#: fetch-pack.c:489
+#: fetch-pack.c:507
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "получено %s (%d) %s"
 
-#: fetch-pack.c:535
+#: fetch-pack.c:543
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Помечаю %s как завершенный"
 
-#: fetch-pack.c:744
+#: fetch-pack.c:758
 #, c-format
 msgid "already have %s (%s)"
 msgstr "уже есть %s (%s)"
 
-#: fetch-pack.c:783
+#: fetch-pack.c:827
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: не удалось запустить программу разбора данных"
 
-#: fetch-pack.c:791
+#: fetch-pack.c:835
 msgid "protocol error: bad pack header"
 msgstr "ошибка протокола: неправильный заголовок потока"
 
-#: fetch-pack.c:859
+#: fetch-pack.c:919
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: не удалось запустить программу %s"
 
-#: fetch-pack.c:875
+#: fetch-pack.c:937
 #, c-format
 msgid "%s failed"
 msgstr "%s завершен с ошибкой"
 
-#: fetch-pack.c:877
+#: fetch-pack.c:939
 msgid "error in sideband demultiplexer"
 msgstr "произошла  ошибка в  программе разбора данных"
 
-#: fetch-pack.c:906
-msgid "Server does not support shallow clients"
-msgstr "Сервер не поддерживает клиентов с частичным клонированием"
-
-#: fetch-pack.c:910
-msgid "Server supports multi_ack_detailed"
-msgstr "Сервер поддерживает multi_ack_detailed"
-
-#: fetch-pack.c:913
-msgid "Server supports no-done"
-msgstr "Сервер поддерживает no-done"
-
-#: fetch-pack.c:919
-msgid "Server supports multi_ack"
-msgstr "Сервер поддерживает multi_ack"
-
-#: fetch-pack.c:923
-msgid "Server supports side-band-64k"
-msgstr "Сервер поддерживает side-band-64k"
-
-#: fetch-pack.c:927
-msgid "Server supports side-band"
-msgstr "Сервер поддерживает side-band"
-
-#: fetch-pack.c:931
-msgid "Server supports allow-tip-sha1-in-want"
-msgstr "Сервер поддерживает allow-tip-sha1-in-want"
-
-#: fetch-pack.c:935
-msgid "Server supports allow-reachable-sha1-in-want"
-msgstr "Сервер поддерживает allow-reachable-sha1-in-want"
-
-#: fetch-pack.c:945
-msgid "Server supports ofs-delta"
-msgstr "Сервер поддерживает ofs-delta"
-
-#: fetch-pack.c:951 fetch-pack.c:1144
-msgid "Server supports filter"
-msgstr "Сервер поддерживает фильтрацию"
-
-#: fetch-pack.c:959
+#: fetch-pack.c:982
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Версия сервера %.*s"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
+#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
+#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
+#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#, c-format
+msgid "Server supports %s"
+msgstr ""
+
+#: fetch-pack.c:992
+msgid "Server does not support shallow clients"
+msgstr "Сервер не поддерживает клиентов с частичным клонированием"
+
+#: fetch-pack.c:1052
 msgid "Server does not support --shallow-since"
 msgstr "Сервер не поддерживает --shallow-since"
 
-#: fetch-pack.c:969
+#: fetch-pack.c:1057
 msgid "Server does not support --shallow-exclude"
 msgstr "Сервер не поддерживает --shallow-exclude"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:1061
 msgid "Server does not support --deepen"
 msgstr "Сервер не поддерживает --deepen"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:1063
+msgid "Server does not support this repository's object format"
+msgstr ""
+
+#: fetch-pack.c:1076
 msgid "no common commits"
 msgstr "не общих коммитов"
 
-#: fetch-pack.c:1000 fetch-pack.c:1449
+#: fetch-pack.c:1088 fetch-pack.c:1628
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: ошибка при получении данных."
 
-#: fetch-pack.c:1138
+#: fetch-pack.c:1214
+#, c-format
+msgid "mismatched algorithms: client %s; server %s"
+msgstr ""
+
+#: fetch-pack.c:1218
+#, c-format
+msgid "the server does not support algorithm '%s'"
+msgstr ""
+
+#: fetch-pack.c:1238
 msgid "Server does not support shallow requests"
 msgstr "Сервер не поддерживает частичные запросы"
 
-#: fetch-pack.c:1171
+#: fetch-pack.c:1245
+msgid "Server supports filter"
+msgstr "Сервер поддерживает фильтрацию"
+
+#: fetch-pack.c:1284
 msgid "unable to write request to remote"
 msgstr ""
 
-#: fetch-pack.c:1189
+#: fetch-pack.c:1302
 #, c-format
 msgid "error reading section header '%s'"
 msgstr ""
 
-#: fetch-pack.c:1195
+#: fetch-pack.c:1308
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr ""
 
-#: fetch-pack.c:1234
+#: fetch-pack.c:1369
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1239
+#: fetch-pack.c:1374
 #, c-format
 msgid "error processing acks: %d"
 msgstr ""
 
-#: fetch-pack.c:1249
+#: fetch-pack.c:1384
 msgid "expected packfile to be sent after 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1251
+#: fetch-pack.c:1386
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 
-#: fetch-pack.c:1293
+#: fetch-pack.c:1428
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr ""
 
-#: fetch-pack.c:1340
+#: fetch-pack.c:1475
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr ""
 
-#: fetch-pack.c:1345
+#: fetch-pack.c:1480
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1350
+#: fetch-pack.c:1485
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr ""
 
-#: fetch-pack.c:1676
+#: fetch-pack.c:1515
+msgid "git fetch-pack: expected response end packet"
+msgstr ""
+
+#: fetch-pack.c:1897
 msgid "no matching remote head"
 msgstr "нет соотвествующего внешнего указателя на ветку"
 
-#: fetch-pack.c:1699 builtin/clone.c:673
+#: fetch-pack.c:1920 builtin/clone.c:693
 msgid "remote did not send all necessary objects"
 msgstr "внешний репозиторий прислал не все необходимые объекты"
 
-#: fetch-pack.c:1726
+#: fetch-pack.c:1947
 #, c-format
 msgid "no such remote ref %s"
 msgstr "нет такой внешней ссылки %s"
 
-#: fetch-pack.c:1729
+#: fetch-pack.c:1950
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Сервер не поддерживает запрос необъявленного объекта %s"
 
-#: gpg-interface.c:318
-msgid "gpg failed to sign the data"
-msgstr "gpg не удалось подписать данные"
-
-#: gpg-interface.c:344
+#: gpg-interface.c:272
 msgid "could not create temporary file"
 msgstr "не удалось создать временный файл"
 
-#: gpg-interface.c:347
+#: gpg-interface.c:275
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "сбой записи отсоединенной подписи в «%s»"
 
-#: graph.c:97
+#: gpg-interface.c:457
+msgid "gpg failed to sign the data"
+msgstr "gpg не удалось подписать данные"
+
+#: graph.c:98
 #, c-format
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "игнорирую недопустимый цвет «%.*s» в log.graphColors"
 
-#: grep.c:2113
+#: grep.c:640
+msgid ""
+"given pattern contains NULL byte (via -f <file>). This is only supported "
+"with -P under PCRE v2"
+msgstr ""
+
+#: grep.c:2100
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "«%s»: не удалось прочесть %s"
 
-#: grep.c:2130 setup.c:164 builtin/clone.c:411 builtin/diff.c:82
+#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
 #: builtin/rm.c:135
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "не удалось выполнить stat «%s»"
 
-#: grep.c:2141
+#: grep.c:2128
 #, c-format
 msgid "'%s': short read"
 msgstr "«%s»: слишком мало данных прочитано"
@@ -3205,79 +4034,79 @@
 msgstr "Низкоуровневые команды / Запросчики"
 
 #: help.c:37
-msgid "Low-level Commands / Synching Repositories"
-msgstr "Низкоуровневые команды / Синхронизация репозиториев"
+msgid "Low-level Commands / Syncing Repositories"
+msgstr ""
 
 #: help.c:38
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Низкоуровневые команды / Внутренние вспомогательные"
 
-#: help.c:298
+#: help.c:300
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "доступные команды git в «%s»"
 
-#: help.c:305
+#: help.c:307
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "команды git, доступные в других местах вашего $PATH"
 
-#: help.c:314
+#: help.c:316
 msgid "These are common Git commands used in various situations:"
 msgstr "Стандартные команды Git используемые в различных ситуациях:"
 
-#: help.c:363 git.c:97
+#: help.c:365 git.c:99
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "неподдерживаемый тип списка команд «%s»"
 
-#: help.c:403
-msgid "The common Git guides are:"
-msgstr "Основные руководства Git:"
+#: help.c:405
+msgid "The Git concept guides are:"
+msgstr ""
 
-#: help.c:512
+#: help.c:429
 msgid "See 'git help <command>' to read about a specific subcommand"
 msgstr "Запустите «git help <команда>», чтобы прочесть о конкретной подкоманде"
 
-#: help.c:517
+#: help.c:434
 msgid "External commands"
 msgstr ""
 
-#: help.c:532
+#: help.c:449
 msgid "Command aliases"
 msgstr ""
 
-#: help.c:596
+#: help.c:527
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
 "able to execute it. Maybe git-%s is broken?"
 msgstr "«%s» похоже на команду git, но нам не удалось ее запустить. Возможно, git-%s  не работает?"
 
-#: help.c:655
-msgid "Uh oh. Your system reports no Git commands at all."
-msgstr "Ой-ёй! Ваша система не сообщает ни о каких командах Git вообще."
-
-#: help.c:677
-#, c-format
-msgid "WARNING: You called a Git command named '%s', which does not exist."
-msgstr "Внимание: Вы запустили не существующую команду Git «%s»."
-
-#: help.c:682
-#, c-format
-msgid "Continuing under the assumption that you meant '%s'."
-msgstr "Продолжаю, предполагая, что вы имели в виду «%s»."
-
-#: help.c:687
-#, c-format
-msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
-msgstr "Продолжу через %0.1f секунд, предполагая, что вы имели в виду «%s»."
-
-#: help.c:695
+#: help.c:543 help.c:631
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: «%s» не является командой git. Смотрите «git --help»."
 
-#: help.c:699
+#: help.c:591
+msgid "Uh oh. Your system reports no Git commands at all."
+msgstr "Ой-ёй! Ваша система не сообщает ни о каких командах Git вообще."
+
+#: help.c:613
+#, c-format
+msgid "WARNING: You called a Git command named '%s', which does not exist."
+msgstr "Внимание: Вы запустили не существующую команду Git «%s»."
+
+#: help.c:618
+#, c-format
+msgid "Continuing under the assumption that you meant '%s'."
+msgstr "Продолжаю, предполагая, что вы имели в виду «%s»."
+
+#: help.c:623
+#, c-format
+msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
+msgstr "Продолжу через %0.1f секунд, предполагая, что вы имели в виду «%s»."
+
+#: help.c:635
 msgid ""
 "\n"
 "The most similar command is"
@@ -3289,16 +4118,16 @@
 msgstr[2] "\nСамые похожие команды:"
 msgstr[3] "\nСамые похожие команды:"
 
-#: help.c:714
+#: help.c:675
 msgid "git version [<options>]"
 msgstr "git version [<options>]"
 
-#: help.c:782
+#: help.c:730
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s — %s"
 
-#: help.c:786
+#: help.c:734
 msgid ""
 "\n"
 "Did you mean this?"
@@ -3310,7 +4139,15 @@
 msgstr[2] "\nВозможно, вы имели в виду что-то из этого?"
 msgstr[3] "\nВозможно, вы имели в виду что-то из этого?"
 
-#: ident.c:349
+#: ident.c:353
+msgid "Author identity unknown\n"
+msgstr ""
+
+#: ident.c:356
+msgid "Committer identity unknown\n"
+msgstr ""
+
+#: ident.c:362
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -3325,71 +4162,95 @@
 "\n"
 msgstr "\n*** Пожалуйста, скажите мне кто вы есть.\n\nЗапустите\n\n  git config --global user.email \"you@example.com\"\n  git config --global user.name \"Ваше Имя\"\n\nдля указания идентификационных данных аккаунта по умолчанию.\nПропустите параметр --global для указания данных только для этого репозитория.\n\n"
 
-#: ident.c:379
+#: ident.c:397
 msgid "no email was given and auto-detection is disabled"
 msgstr "адрес электронной почты не указан и автоопределение отключено"
 
-#: ident.c:384
+#: ident.c:402
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "не удалось выполнить автоопределение адреса электронной почты (получено «%s»)"
 
-#: ident.c:401
+#: ident.c:419
 msgid "no name was given and auto-detection is disabled"
 msgstr "имя не указано и автоопределение отключено"
 
-#: ident.c:407
+#: ident.c:425
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "не удалось выполнить автоопределение имени (получено «%s»)"
 
-#: ident.c:415
+#: ident.c:433
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "пустое имя идентификатора (для <%s>) не разрешено"
 
-#: ident.c:421
+#: ident.c:439
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "имя состоит только из неразрешенных симоволов: %s"
 
-#: ident.c:436 builtin/commit.c:608
+#: ident.c:454 builtin/commit.c:634
 #, c-format
 msgid "invalid date format: %s"
 msgstr "неправильный формат даты: %s"
 
-#: list-objects.c:129
+#: list-objects-filter-options.c:81
+msgid "expected 'tree:<depth>'"
+msgstr ""
+
+#: list-objects-filter-options.c:96
+msgid "sparse:path filters support has been dropped"
+msgstr ""
+
+#: list-objects-filter-options.c:109
+#, c-format
+msgid "invalid filter-spec '%s'"
+msgstr ""
+
+#: list-objects-filter-options.c:125
+#, c-format
+msgid "must escape char in sub-filter-spec: '%c'"
+msgstr ""
+
+#: list-objects-filter-options.c:167
+msgid "expected something after combine:"
+msgstr ""
+
+#: list-objects-filter-options.c:249
+msgid "multiple filter-specs cannot be combined"
+msgstr "невозможно объединять фильтрацию с помощью нескольких спецификаций"
+
+#: list-objects-filter-options.c:361
+msgid "unable to upgrade repository format to support partial clone"
+msgstr ""
+
+#: list-objects-filter.c:492
+#, c-format
+msgid "unable to access sparse blob in '%s'"
+msgstr ""
+
+#: list-objects-filter.c:495
+#, c-format
+msgid "unable to parse sparse filter data in %s"
+msgstr ""
+
+#: list-objects.c:127
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 
-#: list-objects.c:142
+#: list-objects.c:140
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 
-#: list-objects.c:378
+#: list-objects.c:375
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr ""
 
-#: list-objects-filter-options.c:36
-msgid "multiple filter-specs cannot be combined"
-msgstr "невозможно объединять фильтрацию с помощью нескольких спецификаций"
-
-#: list-objects-filter-options.c:58
-msgid "expected 'tree:<depth>'"
-msgstr ""
-
-#: list-objects-filter-options.c:84
-msgid "sparse:path filters support has been dropped"
-msgstr ""
-
-#: list-objects-filter-options.c:158
-msgid "cannot change partial clone promisor remote"
-msgstr "нельзя изменить внешний репозиторий при частичном клонировании"
-
-#: lockfile.c:151
+#: lockfile.c:152
 #, c-format
 msgid ""
 "Unable to create '%s.lock': %s.\n"
@@ -3401,123 +4262,125 @@
 "remove the file manually to continue."
 msgstr "Не удалось создать «%s.lock»: %s.\n\nПохоже, что другой процесс git запущен в этом репозитории,\nнапример редактор открыт из «git commit». Пожалуйста, убедитесь,\nчто все процессы были завершены и потом попробуйте снова.\nЕсли это не поможет, то возможно процесс git был ранее завершен\nс ошибкой в этом репозитории: \nудалите файл вручную для продолжения."
 
-#: lockfile.c:159
+#: lockfile.c:160
 #, c-format
 msgid "Unable to create '%s.lock': %s"
 msgstr "Не удалось создать «%s.lock»: %s"
 
-#: merge.c:41
-msgid "failed to read the cache"
-msgstr "сбой чтения кэша"
+#: ls-refs.c:109
+msgid "expected flush after ls-refs arguments"
+msgstr ""
 
-#: merge.c:107 rerere.c:720 builtin/am.c:1887 builtin/am.c:1921
-#: builtin/checkout.c:461 builtin/checkout.c:811 builtin/clone.c:773
-#: builtin/stash.c:264
-msgid "unable to write new index file"
-msgstr "не удалось записать новый файл индекса"
+#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
 
-#: merge-recursive.c:322
+#: merge-ort-wrappers.c:33 merge-recursive.c:3436
+#, c-format
+msgid "Already up to date!"
+msgstr "Уже обновлено!"
+
+#: merge-recursive.c:356
 msgid "(bad commit)\n"
 msgstr "(плохой коммит)\n"
 
-#: merge-recursive.c:345
+#: merge-recursive.c:379
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "сбой add_cacheinfo для пути «%s»; отмена слияния."
 
-#: merge-recursive.c:354
+#: merge-recursive.c:388
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr "сбой обновления add_cacheinfo для пути «%s»; отмена слияния."
 
-#: merge-recursive.c:437
-msgid "error building trees"
-msgstr "ошибка при построении деревьев"
-
-#: merge-recursive.c:861
+#: merge-recursive.c:874
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "не удалось создать путь «%s»%s"
 
-#: merge-recursive.c:872
+#: merge-recursive.c:885
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Удаление %s, чтобы освободить место для подкаталогов\n"
 
-#: merge-recursive.c:886 merge-recursive.c:905
+#: merge-recursive.c:899 merge-recursive.c:918
 msgid ": perhaps a D/F conflict?"
 msgstr ": возможно, конфликт каталогов/файлов?"
 
-#: merge-recursive.c:895
+#: merge-recursive.c:908
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "отказ потери неотслеживаемого файла в «%s»"
 
-#: merge-recursive.c:936 builtin/cat-file.c:40
+#: merge-recursive.c:949 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "невозможно прочитать объект %s «%s»"
 
-#: merge-recursive.c:939
+#: merge-recursive.c:954
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "ожидается двоичный объект для %s «%s»"
 
-#: merge-recursive.c:963
+#: merge-recursive.c:979
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "не удалось открыть «%s»: %s"
 
-#: merge-recursive.c:974
+#: merge-recursive.c:990
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "не удалось создать символьную ссылку «%s»: %s"
 
-#: merge-recursive.c:979
+#: merge-recursive.c:995
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "не понятно, что делать с %06o %s «%s»"
 
-#: merge-recursive.c:1175
+#: merge-recursive.c:1191
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Не удалось слить подмодуль %s (состояние не забрано)"
 
-#: merge-recursive.c:1182
+#: merge-recursive.c:1198
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Не удалось слить подмодуль %s (нет коммитов)"
 
-#: merge-recursive.c:1189
+#: merge-recursive.c:1205
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "Не удалось слить подмодуль %s (у коммитов другая база слияния)"
 
-#: merge-recursive.c:1197 merge-recursive.c:1209
+#: merge-recursive.c:1213 merge-recursive.c:1225
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Перемотка вперед подмодуля %s до указанного коммита:"
 
-#: merge-recursive.c:1200 merge-recursive.c:1212
+#: merge-recursive.c:1216 merge-recursive.c:1228
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Перемотка вперед подмодуля %s"
 
-#: merge-recursive.c:1235
+#: merge-recursive.c:1251
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr "Не удалось слить подмодуль %s (нет указанных коммитов для слияния)"
 
-#: merge-recursive.c:1239
+#: merge-recursive.c:1255
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Не удалось слить подмодуль %s (нельзя сделать перемотку вперед)"
 
-#: merge-recursive.c:1240
+#: merge-recursive.c:1256
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Найдено возможное разрешение слиятия для подмодуля:\n"
 
-#: merge-recursive.c:1243
+#: merge-recursive.c:1259
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -3528,108 +4391,108 @@
 "which will accept this suggestion.\n"
 msgstr "Если оно верное, то просто добавьте его в индекс, например так:\n\n  git update-index --cacheinfo 160000 %s \"%s\"\n\nтем самым принимая это предположение.\n"
 
-#: merge-recursive.c:1252
+#: merge-recursive.c:1268
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Не удалось слить подмодуль %s (найдено несколько слияний)"
 
-#: merge-recursive.c:1325
+#: merge-recursive.c:1341
 msgid "Failed to execute internal merge"
 msgstr "Не удалось запустить внутреннее слияние"
 
-#: merge-recursive.c:1330
+#: merge-recursive.c:1346
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Не удалось добавить %s в базу данных"
 
-#: merge-recursive.c:1362
+#: merge-recursive.c:1378
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Автослияние %s"
 
-#: merge-recursive.c:1385
+#: merge-recursive.c:1402
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Ошибка: Отказ потери неотслеживаемого файла %s; запись в %s взамен."
 
-#: merge-recursive.c:1457
+#: merge-recursive.c:1474
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree."
 msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и %s в %s. Версия %s из %s оставлена в дереве."
 
-#: merge-recursive.c:1462
+#: merge-recursive.c:1479
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree."
 msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и от %s до %s в %s. Версия %s из %s оставлена в дереве."
 
-#: merge-recursive.c:1469
+#: merge-recursive.c:1486
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree at %s."
 msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и %s в %s. Версия %s из %s оставлена в дереве на %s."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1491
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree at %s."
 msgstr "КОНФЛИКТ (%s/удаление): %s удалено в %s и от %s до %s в %s. Версия %s из %s оставлена в дереве на %s."
 
-#: merge-recursive.c:1509
+#: merge-recursive.c:1526
 msgid "rename"
 msgstr "переименование"
 
-#: merge-recursive.c:1509
+#: merge-recursive.c:1526
 msgid "renamed"
 msgstr "переименовано"
 
-#: merge-recursive.c:1589 merge-recursive.c:2445 merge-recursive.c:3085
+#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Отказ потери изменённого файла %s"
 
-#: merge-recursive.c:1599
+#: merge-recursive.c:1587
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "Отказ потери неотслеживаемого файла %s, даже с учетом его наличия."
 
-#: merge-recursive.c:1657
+#: merge-recursive.c:1645
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 
-#: merge-recursive.c:1687
+#: merge-recursive.c:1676
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s — это каталог в %s, добавляем как %s вместо этого"
 
-#: merge-recursive.c:1692
+#: merge-recursive.c:1681
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Отказ потери неотслеживаемого файла %s; добавление как %s взамен."
 
-#: merge-recursive.c:1711
+#: merge-recursive.c:1708
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
 "\"%s\"->\"%s\" in \"%s\"%s"
 msgstr "КОНФЛИКТ (переименование/переименование): Переименование «%s»→«%s» в ветке «%s» и переименование «%s»→«%s» в ветке «%s»%s"
 
-#: merge-recursive.c:1716
+#: merge-recursive.c:1713
 msgid " (left unresolved)"
 msgstr " (оставлено неразрешенным)"
 
-#: merge-recursive.c:1825
+#: merge-recursive.c:1805
 #, 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:2030
+#: merge-recursive.c:2068
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3637,157 +4500,146 @@
 "getting a majority of the files."
 msgstr ""
 
-#: merge-recursive.c:2062
+#: merge-recursive.c:2100
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
 "implicit directory rename(s) putting the following path(s) there: %s."
 msgstr ""
 
-#: merge-recursive.c:2072
+#: merge-recursive.c:2110
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
 "implicit directory renames tried to put these paths there: %s"
 msgstr ""
 
-#: merge-recursive.c:2164
+#: merge-recursive.c:2202
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory "
 "%s->%s in %s"
 msgstr ""
 
-#: merge-recursive.c:2408
+#: merge-recursive.c:2447
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr ""
 
-#: merge-recursive.c:2929
+#: merge-recursive.c:2973
 #, c-format
 msgid "cannot read object %s"
 msgstr "невозможно прочитать объект «%s»"
 
-#: merge-recursive.c:2932
+#: merge-recursive.c:2976
 #, c-format
 msgid "object %s is not a blob"
 msgstr "объект %s не является двоичным объектом"
 
-#: merge-recursive.c:2996
+#: merge-recursive.c:3040
 msgid "modify"
 msgstr "изменение"
 
-#: merge-recursive.c:2996
+#: merge-recursive.c:3040
 msgid "modified"
 msgstr "изменено"
 
-#: merge-recursive.c:3008
+#: merge-recursive.c:3052
 msgid "content"
 msgstr "содержимое"
 
-#: merge-recursive.c:3012
+#: merge-recursive.c:3056
 msgid "add/add"
 msgstr "добавление/добавление"
 
-#: merge-recursive.c:3035
+#: merge-recursive.c:3079
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Пропуск %s (слиты одинаковые изменения как существующие)"
 
-#: merge-recursive.c:3057 git-submodule.sh:937
+#: merge-recursive.c:3101
 msgid "submodule"
 msgstr "подмодуль"
 
-#: merge-recursive.c:3058
+#: merge-recursive.c:3102
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "КОНФЛИКТ (%s): Конфликт слияния в %s"
 
-#: merge-recursive.c:3088
+#: merge-recursive.c:3132
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Добавление вместо этого как %s"
 
-#: merge-recursive.c:3170
+#: merge-recursive.c:3215
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
 "moving it to %s."
 msgstr ""
 
-#: merge-recursive.c:3173
+#: merge-recursive.c:3218
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed"
 " in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-recursive.c:3177
+#: merge-recursive.c:3222
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in"
 " %s; moving it to %s."
 msgstr ""
 
-#: merge-recursive.c:3180
+#: merge-recursive.c:3225
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
 "was renamed in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-recursive.c:3294
+#: merge-recursive.c:3339
 #, c-format
 msgid "Removing %s"
 msgstr "Удаление %s"
 
-#: merge-recursive.c:3317
+#: merge-recursive.c:3362
 msgid "file/directory"
 msgstr "файл/каталог"
 
-#: merge-recursive.c:3322
+#: merge-recursive.c:3367
 msgid "directory/file"
 msgstr "каталог/файл"
 
-#: merge-recursive.c:3329
+#: merge-recursive.c:3374
 #, 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:3338
+#: merge-recursive.c:3383
 #, c-format
 msgid "Adding %s"
 msgstr "Добавление %s"
 
-#: merge-recursive.c:3347
+#: merge-recursive.c:3392
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr ""
 
-#: merge-recursive.c:3385
-#, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-
-#: merge-recursive.c:3396
-msgid "Already up to date!"
-msgstr "Уже обновлено!"
-
-#: merge-recursive.c:3405
+#: merge-recursive.c:3445
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "сбой слияния деревьев «%s» и «%s»"
 
-#: merge-recursive.c:3504
+#: merge-recursive.c:3550
 msgid "Merging:"
 msgstr "Слияние:"
 
-#: merge-recursive.c:3517
+#: merge-recursive.c:3563
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
@@ -3796,154 +4648,201 @@
 msgstr[2] "найдено %u общих предков:"
 msgstr[3] "найдено %u общих предков:"
 
-#: merge-recursive.c:3556
+#: merge-recursive.c:3613
 msgid "merge returned no commit"
 msgstr "слияние не вернуло коммит"
 
-#: merge-recursive.c:3622
+#: merge-recursive.c:3769
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Не удалось разобрать объект «%s»"
 
-#: merge-recursive.c:3638 builtin/merge.c:702 builtin/merge.c:873
+#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
 msgid "Unable to write index."
 msgstr "Не удается записать индекс."
 
-#: midx.c:66
+#: merge.c:41
+msgid "failed to read the cache"
+msgstr "сбой чтения кэша"
+
+#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
+#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
+#: builtin/stash.c:265
+msgid "unable to write new index file"
+msgstr "не удалось записать новый файл индекса"
+
+#: midx.c:80
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr ""
 
-#: midx.c:82
+#: midx.c:96
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 
-#: midx.c:87
+#: midx.c:101
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr ""
 
-#: midx.c:92
-#, c-format
-msgid "hash version %u does not match"
-msgstr "версия хеш-суммы %u не соответсвует"
-
 #: midx.c:106
+#, c-format
+msgid "multi-pack-index hash version %u does not match version %u"
+msgstr ""
+
+#: midx.c:123
 msgid "invalid chunk offset (too large)"
 msgstr ""
 
-#: midx.c:130
+#: midx.c:147
 msgid "terminating multi-pack-index chunk id appears earlier than expected"
 msgstr ""
 
-#: midx.c:143
+#: midx.c:160
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr ""
 
-#: midx.c:145
+#: midx.c:162
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr ""
 
-#: midx.c:147
+#: midx.c:164
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr ""
 
-#: midx.c:149
+#: midx.c:166
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr ""
 
-#: midx.c:163
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 
-#: midx.c:208
+#: midx.c:223
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 
-#: midx.c:258
+#: midx.c:273
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 
-#: midx.c:286
-msgid "error preparing packfile from multi-pack-index"
-msgstr ""
-
-#: midx.c:457
+#: midx.c:480
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr ""
 
-#: midx.c:463
+#: midx.c:486
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr ""
 
-#: midx.c:557
+#: midx.c:546
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr ""
 
-#: midx.c:993
+#: midx.c:846
+msgid "Adding packfiles to multi-pack-index"
+msgstr ""
+
+#: midx.c:879
+#, c-format
+msgid "did not see pack-file %s to drop"
+msgstr ""
+
+#: midx.c:931
+msgid "no pack files to index."
+msgstr ""
+
+#: midx.c:982
+msgid "Writing chunks to multi-pack-index"
+msgstr ""
+
+#: midx.c:1060
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr ""
 
-#: midx.c:1048
+#: midx.c:1116
+msgid "multi-pack-index file exists, but failed to parse"
+msgstr ""
+
+#: midx.c:1124
 msgid "Looking for referenced packfiles"
 msgstr ""
 
-#: midx.c:1063
+#: midx.c:1139
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 
-#: midx.c:1067
-msgid "Verifying OID order in MIDX"
+#: midx.c:1144
+msgid "the midx contains no oid"
 msgstr ""
 
-#: midx.c:1076
+#: midx.c:1153
+msgid "Verifying OID order in multi-pack-index"
+msgstr ""
+
+#: midx.c:1162
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 
-#: midx.c:1095
+#: midx.c:1182
 msgid "Sorting objects by packfile"
 msgstr ""
 
-#: midx.c:1101
+#: midx.c:1189
 msgid "Verifying object offsets"
 msgstr ""
 
-#: midx.c:1117
+#: midx.c:1205
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr ""
 
-#: midx.c:1123
+#: midx.c:1211
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr ""
 
-#: midx.c:1132
+#: midx.c:1220
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 
-#: name-hash.c:531
+#: midx.c:1245
+msgid "Counting referenced objects"
+msgstr ""
+
+#: midx.c:1255
+msgid "Finding and deleting unreferenced packfiles"
+msgstr ""
+
+#: midx.c:1446
+msgid "could not start pack-objects"
+msgstr ""
+
+#: midx.c:1466
+msgid "could not finish pack-objects"
+msgstr ""
+
+#: name-hash.c:537
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr ""
 
-#: name-hash.c:553
+#: name-hash.c:559
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr ""
 
-#: name-hash.c:559
+#: name-hash.c:565
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr ""
@@ -3982,130 +4881,50 @@
 msgid "Bad %s value: '%s'"
 msgstr "Неправильное значение переменной %s: «%s»"
 
-#: object.c:54
+#: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
 msgstr ""
 
-#: object.c:174
+#: object.c:173
 #, c-format
 msgid "object %s is a %s, not a %s"
 msgstr ""
 
-#: object.c:234
+#: object.c:233
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr ""
 
-#: object.c:247
+#: object.c:246
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "не удалось разобрать объект: %s"
 
-#: object.c:267 object.c:278
+#: object.c:266 object.c:278
 #, c-format
 msgid "hash mismatch %s"
-msgstr "несоответствие хеш-суммы %s"
+msgstr "несоответствие хэш-кода %s"
 
-#: packfile.c:617
+#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#, c-format
+msgid "unable to get size of %s"
+msgstr "не удалось получить размер %s"
+
+#: packfile.c:615
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "сдвиг до конца файла пакета (возможно, повреждён файл .idx?)"
 
-#: packfile.c:1868
+#: packfile.c:1907
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "сдвиг до начала индекса пакета для %s (повреждён индекс?)"
 
-#: packfile.c:1872
+#: packfile.c:1911
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "сдвиг за пределами индекса пакета для %s (обрезан индекс?)"
 
-#: parse-options.c:38
-#, c-format
-msgid "%s requires a value"
-msgstr ""
-
-#: parse-options.c:73
-#, c-format
-msgid "%s is incompatible with %s"
-msgstr ""
-
-#: parse-options.c:78
-#, c-format
-msgid "%s : incompatible with something else"
-msgstr ""
-
-#: parse-options.c:92 parse-options.c:96 parse-options.c:319
-#, c-format
-msgid "%s takes no value"
-msgstr ""
-
-#: parse-options.c:94
-#, c-format
-msgid "%s isn't available"
-msgstr ""
-
-#: parse-options.c:219
-#, c-format
-msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
-msgstr ""
-
-#: parse-options.c:389
-#, c-format
-msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
-msgstr ""
-
-#: parse-options.c:423 parse-options.c:431
-#, c-format
-msgid "did you mean `--%s` (with two dashes ?)"
-msgstr ""
-
-#: parse-options.c:859
-#, c-format
-msgid "unknown option `%s'"
-msgstr ""
-
-#: parse-options.c:861
-#, c-format
-msgid "unknown switch `%c'"
-msgstr ""
-
-#: parse-options.c:863
-#, c-format
-msgid "unknown non-ascii option in string: `%s'"
-msgstr ""
-
-#: parse-options.c:887
-msgid "..."
-msgstr "…"
-
-#: parse-options.c:906
-#, c-format
-msgid "usage: %s"
-msgstr "использование: %s"
-
-#. TRANSLATORS: the colon here should align with the
-#. one in "usage: %s" translation.
-#: parse-options.c:912
-#, c-format
-msgid "   or: %s"
-msgstr "          или: %s"
-
-#: parse-options.c:915
-#, c-format
-msgid "    %s"
-msgstr "            %s"
-
-#: parse-options.c:954
-msgid "-NUM"
-msgstr "-КОЛИЧЕСТВО"
-
-#: parse-options.c:968
-#, c-format
-msgid "alias of --%s"
-msgstr ""
-
 #: parse-options-cb.c:20 parse-options-cb.c:24
 #, c-format
 msgid "option `%s' expects a numerical value"
@@ -4121,87 +4940,177 @@
 msgid "option `%s' expects \"always\", \"auto\", or \"never\""
 msgstr ""
 
-#: parse-options-cb.c:130 parse-options-cb.c:147
+#: parse-options-cb.c:132 parse-options-cb.c:149
 #, c-format
 msgid "malformed object name '%s'"
 msgstr "Неправильное имя объекта «%s»"
 
-#: path.c:897
+#: parse-options.c:38
+#, c-format
+msgid "%s requires a value"
+msgstr ""
+
+#: parse-options.c:73
+#, c-format
+msgid "%s is incompatible with %s"
+msgstr ""
+
+#: parse-options.c:78
+#, c-format
+msgid "%s : incompatible with something else"
+msgstr ""
+
+#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#, c-format
+msgid "%s takes no value"
+msgstr ""
+
+#: parse-options.c:94
+#, c-format
+msgid "%s isn't available"
+msgstr ""
+
+#: parse-options.c:217
+#, c-format
+msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
+msgstr ""
+
+#: parse-options.c:386
+#, c-format
+msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
+msgstr ""
+
+#: parse-options.c:420 parse-options.c:428
+#, c-format
+msgid "did you mean `--%s` (with two dashes)?"
+msgstr ""
+
+#: parse-options.c:666 parse-options.c:971
+#, c-format
+msgid "alias of --%s"
+msgstr ""
+
+#: parse-options.c:862
+#, c-format
+msgid "unknown option `%s'"
+msgstr ""
+
+#: parse-options.c:864
+#, c-format
+msgid "unknown switch `%c'"
+msgstr ""
+
+#: parse-options.c:866
+#, c-format
+msgid "unknown non-ascii option in string: `%s'"
+msgstr ""
+
+#: parse-options.c:890
+msgid "..."
+msgstr "…"
+
+#: parse-options.c:909
+#, c-format
+msgid "usage: %s"
+msgstr "использование: %s"
+
+#. TRANSLATORS: the colon here should align with the
+#. one in "usage: %s" translation.
+#: parse-options.c:915
+#, c-format
+msgid "   or: %s"
+msgstr "          или: %s"
+
+#: parse-options.c:918
+#, c-format
+msgid "    %s"
+msgstr "            %s"
+
+#: parse-options.c:957
+msgid "-NUM"
+msgstr "-КОЛИЧЕСТВО"
+
+#: path.c:915
 #, c-format
 msgid "Could not make %s writable by group"
 msgstr "Не удалось предоставить доступ к %s на запись"
 
-#: pathspec.c:128
+#: pathspec.c:130
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "Управляющий символ «\\» не разрешен как последний символ в значении attr"
 
-#: pathspec.c:146
+#: pathspec.c:148
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Разрешен только один спецификатор «attr:»."
 
-#: pathspec.c:149
+#: pathspec.c:151
 msgid "attr spec must not be empty"
 msgstr "спецификатор attr не должен быть пустой"
 
-#: pathspec.c:192
+#: pathspec.c:194
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "недопустимое имя атрибута %s"
 
-#: pathspec.c:257
+#: pathspec.c:259
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr "глобальные опции спецификаторов пути «glob» и «noglob» нельзя использовать одновременно"
 
-#: pathspec.c:264
+#: pathspec.c:266
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
 msgstr "глобальная опция спецификатора пути «literal» не совместима с другими глобальными спецификаторами доступа"
 
-#: pathspec.c:304
+#: pathspec.c:306
 msgid "invalid parameter for pathspec magic 'prefix'"
-msgstr "неправильный параметр для магического слова «prefix» в спецификаторе пути "
+msgstr "неправильный параметр для магического слова «prefix» в спецификаторе пути"
 
-#: pathspec.c:325
+#: pathspec.c:327
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "неправильное магическое слово «%.*s» в спецификаторе пути «%s»"
 
-#: pathspec.c:330
+#: pathspec.c:332
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Пропущено «)» в конце магического слова спецификатора пути «%s»"
 
-#: pathspec.c:368
+#: pathspec.c:370
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Нереализованное магическое слово «%c» спецификатора пути «%s»"
 
-#: pathspec.c:427
+#: pathspec.c:429
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: «literal» и «glob» не совместимы"
 
-#: pathspec.c:440
+#: pathspec.c:445
 #, c-format
-msgid "%s: '%s' is outside repository"
-msgstr "%s: «%s» вне репозитория"
+msgid "%s: '%s' is outside repository at '%s'"
+msgstr ""
 
-#: pathspec.c:514
+#: pathspec.c:521
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "«%s» (мнемоника: «%c»)"
 
-#: pathspec.c:524
+#: pathspec.c:531
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: магические слова в спецификаторе пути не поддерживаются командой: %s"
 
-#: pathspec.c:591
+#: pathspec.c:598
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "спецификатор пути «%s» находится за символической ссылкой"
 
+#: pathspec.c:643
+#, c-format
+msgid "line is badly quoted: %s"
+msgstr ""
+
 #: pkt-line.c:92
 msgid "unable to write flush packet"
 msgstr ""
@@ -4211,44 +5120,48 @@
 msgstr ""
 
 #: pkt-line.c:106
+msgid "unable to write stateless separator packet"
+msgstr ""
+
+#: pkt-line.c:113
 msgid "flush packet write failed"
 msgstr ""
 
-#: pkt-line.c:146 pkt-line.c:232
+#: pkt-line.c:153 pkt-line.c:239
 msgid "protocol error: impossibly long line"
 msgstr ""
 
-#: pkt-line.c:162 pkt-line.c:164
+#: pkt-line.c:169 pkt-line.c:171
 msgid "packet write with format failed"
 msgstr ""
 
-#: pkt-line.c:196
+#: pkt-line.c:203
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 
-#: pkt-line.c:203 pkt-line.c:210
+#: pkt-line.c:210 pkt-line.c:217
 msgid "packet write failed"
 msgstr ""
 
-#: pkt-line.c:295
+#: pkt-line.c:302
 msgid "read error"
 msgstr ""
 
-#: pkt-line.c:303
+#: pkt-line.c:310
 msgid "the remote end hung up unexpectedly"
 msgstr ""
 
-#: pkt-line.c:331
+#: pkt-line.c:338
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr ""
 
-#: pkt-line.c:341 pkt-line.c:346
+#: pkt-line.c:352 pkt-line.c:357
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr ""
 
-#: pkt-line.c:362
+#: pkt-line.c:373 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "ошибка внешнего репозитория: %s"
@@ -4262,233 +5175,272 @@
 msgid "unable to create threaded lstat: %s"
 msgstr ""
 
-#: pretty.c:966
+#: pretty.c:983
 msgid "unable to parse --pretty format"
 msgstr "не удалось разобрать формат для --pretty"
 
-#: range-diff.c:56
+#: promisor-remote.c:30
+msgid "promisor-remote: unable to fork off fetch subprocess"
+msgstr ""
+
+#: promisor-remote.c:35 promisor-remote.c:37
+msgid "promisor-remote: could not write to fetch subprocess"
+msgstr ""
+
+#: promisor-remote.c:41
+msgid "promisor-remote: could not close stdin to fetch subprocess"
+msgstr ""
+
+#: promisor-remote.c:53
+#, c-format
+msgid "promisor remote name cannot begin with '/': %s"
+msgstr ""
+
+#: prune-packed.c:35
+msgid "Removing duplicate objects"
+msgstr "Удаление дублирующихся объектов"
+
+#: range-diff.c:77
 msgid "could not start `log`"
 msgstr ""
 
-#: range-diff.c:59
+#: range-diff.c:79
 msgid "could not read `log` output"
 msgstr ""
 
-#: range-diff.c:74 sequencer.c:4897
+#: range-diff.c:98 sequencer.c:5310
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "не удалось разобрать коммит «%s»"
 
-#: range-diff.c:224
+#: range-diff.c:112
+#, c-format
+msgid ""
+"could not parse first line of `log` output: did not start with 'commit ': "
+"'%s'"
+msgstr ""
+
+#: range-diff.c:137
+#, c-format
+msgid "could not parse git header '%.*s'"
+msgstr ""
+
+#: range-diff.c:299
 msgid "failed to generate diff"
 msgstr ""
 
-#: range-diff.c:455 range-diff.c:457
+#: range-diff.c:532 range-diff.c:534
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr ""
 
-#: read-cache.c:680
+#: read-cache.c:682
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 
-#: read-cache.c:696
+#: read-cache.c:698
 msgid "cannot create an empty blob in the object database"
 msgstr ""
 
-#: read-cache.c:718
+#: read-cache.c:720
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 
-#: read-cache.c:723
+#: read-cache.c:725
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr ""
 
-#: read-cache.c:775
+#: read-cache.c:777
 #, c-format
 msgid "unable to index file '%s'"
 msgstr ""
 
-#: read-cache.c:794
+#: read-cache.c:796
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr ""
 
-#: read-cache.c:805
+#: read-cache.c:807
 #, c-format
 msgid "unable to stat '%s'"
 msgstr ""
 
-#: read-cache.c:1314
+#: read-cache.c:1318
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr ""
 
-#: read-cache.c:1499
+#: read-cache.c:1524
 msgid "Refresh index"
 msgstr ""
 
-#: read-cache.c:1613
+#: read-cache.c:1639
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr "index.version указан, но значение недействительное.\nИспользую версию %i"
 
-#: read-cache.c:1623
+#: read-cache.c:1649
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr "GIT_INDEX_VERSION указан, но значение недействительное.\nИспользую версию %i"
 
-#: read-cache.c:1679
+#: read-cache.c:1705
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr ""
 
-#: read-cache.c:1682
+#: read-cache.c:1708
 #, c-format
 msgid "bad index version %d"
 msgstr ""
 
-#: read-cache.c:1691
+#: read-cache.c:1717
 msgid "bad index file sha1 signature"
 msgstr ""
 
-#: read-cache.c:1721
+#: read-cache.c:1747
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 
-#: read-cache.c:1723
+#: read-cache.c:1749
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr ""
 
-#: read-cache.c:1760
+#: read-cache.c:1786
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr ""
 
-#: read-cache.c:1776
+#: read-cache.c:1802
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr ""
 
-#: read-cache.c:1833
+#: read-cache.c:1859
 msgid "unordered stage entries in index"
 msgstr ""
 
-#: read-cache.c:1836
+#: read-cache.c:1862
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr ""
 
-#: read-cache.c:1839
+#: read-cache.c:1865
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr ""
 
-#: read-cache.c:1946 read-cache.c:2234 rerere.c:565 rerere.c:599 rerere.c:1111
-#: builtin/add.c:460 builtin/check-ignore.c:178 builtin/checkout.c:358
-#: builtin/checkout.c:672 builtin/checkout.c:1060 builtin/clean.c:955
-#: builtin/commit.c:344 builtin/diff-tree.c:120 builtin/grep.c:498
-#: builtin/mv.c:145 builtin/reset.c:245 builtin/rm.c:271
-#: builtin/submodule--helper.c:330
+#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
+#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
+#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
+#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
+#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: builtin/submodule--helper.c:332
 msgid "index file corrupt"
 msgstr "файл индекса поврежден"
 
-#: read-cache.c:2087
+#: read-cache.c:2115
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2100
+#: read-cache.c:2128
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2133
+#: read-cache.c:2161
 #, c-format
 msgid "%s: index file open failed"
 msgstr ""
 
-#: read-cache.c:2137
+#: read-cache.c:2165
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr ""
 
-#: read-cache.c:2141
+#: read-cache.c:2169
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr ""
 
-#: read-cache.c:2145
+#: read-cache.c:2173
 #, c-format
 msgid "%s: unable to map index file"
 msgstr ""
 
-#: read-cache.c:2187
+#: read-cache.c:2215
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2214
+#: read-cache.c:2242
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2246
+#: read-cache.c:2274
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr ""
 
-#: read-cache.c:2293
+#: read-cache.c:2321
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:2989 wrapper.c:658 builtin/merge.c:1117
+#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
 #, c-format
 msgid "could not close '%s'"
 msgstr "не удалось закрыть «%s»"
 
-#: read-cache.c:3092 sequencer.c:2354 sequencer.c:3807
+#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
 #, c-format
 msgid "could not stat '%s'"
 msgstr "не удалось выполнить stat для «%s»"
 
-#: read-cache.c:3105
+#: read-cache.c:3133
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "не удалось открыть каталог git: %s"
 
-#: read-cache.c:3117
+#: read-cache.c:3145
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "не удалось отсоединить: %s"
 
-#: read-cache.c:3142
+#: read-cache.c:3170
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr ""
 
-#: read-cache.c:3291
+#: read-cache.c:3319
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr ""
 
-#: rebase-interactive.c:26
+#: rebase-interactive.c:11
+msgid ""
+"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.\n"
+"Or you can abort the rebase with 'git rebase --abort'.\n"
+msgstr "Вы можете исправить это с помощью «git rebase --edit-todo», а потом запустив «git rebase --continue».\nИли вы можете прервать процесс перемещения, выполнив «git rebase --abort»\n"
+
+#: rebase-interactive.c:33
 #, c-format
 msgid ""
 "unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
 msgstr "нераспознанная настройка %s для опции rebase.missingCommitsCheck. Игнорирую."
 
-#: rebase-interactive.c:35
+#: rebase-interactive.c:42
 msgid ""
 "\n"
 "Commands:\n"
@@ -4510,7 +5462,7 @@
 "These lines can be re-ordered; they are executed from top to bottom.\n"
 msgstr "\nКоманды:\np, pick <коммит> = использовать коммит\nr, reword <коммит> = использовать коммит, но изменить сообщение коммита\ne, edit <коммит> = использовать коммит, но остановиться для исправления\ns, squash <коммит> = использовать коммит, но объединить с предыдущим коммитом\nf, fixup <коммит> = как «squash», но пропустить сообщение коммита\nx, exec <команда> = выполнить команду (остаток строки) с помощью командной оболочки\nb, break = остановиться здесь (продолжить с помощью «git rebase --continue»)\nd, drop <коммит> = удалить коммит\nl, label <метка> = дать имя текущему HEAD\nt, reset <метка> = сбросить HEAD к указанной метке\nm, merge [-C <коммит> | -c <коммит>] <метка> [# <строка>]\n. создать слияние используя сообщение коммита оригинального\n. слияния (или использовать указанную строку, если оригинальное\n. слияние не указано). Используйте -c <коммит> чтобы изменить\n. сообщение коммита.\n\nЭти строки можно перемещать; они будут выполнены сверху вниз.\n"
 
-#: rebase-interactive.c:56
+#: rebase-interactive.c:63
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
@@ -4519,19 +5471,19 @@
 msgstr[2] ""
 msgstr[3] ""
 
-#: rebase-interactive.c:65 git-rebase--preserve-merges.sh:173
+#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr "\nНе удаляйте строки. Используйте «drop», чтобы явно удалить коммит.\n"
 
-#: rebase-interactive.c:68 git-rebase--preserve-merges.sh:177
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
 msgstr "\nЕсли вы удалите строку здесь, то УКАЗАННЫЙ КОММИТ БУДЕТ УТЕРЯН.\n"
 
-#: rebase-interactive.c:74 git-rebase--preserve-merges.sh:816
+#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -4540,36 +5492,33 @@
 "\n"
 msgstr "\nВы сейчас редактируете файл со списком дел для интерактивного перемещения.\nДля продолжения перемещения, после редактирования файла запустите:\n    git rebase --continue\n\n"
 
-#: rebase-interactive.c:79 git-rebase--preserve-merges.sh:893
+#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
 "\n"
 msgstr "\nНо если вы удалите все, то процесс перемещения будет будет прерван.\n\n"
 
-#: rebase-interactive.c:85 git-rebase--preserve-merges.sh:900
-msgid "Note that empty commits are commented out"
-msgstr "Заметьте, что пустые коммиты закомментированны"
-
-#: rebase-interactive.c:105 rerere.c:485 rerere.c:692 sequencer.c:3339
-#: sequencer.c:3365 sequencer.c:4996 builtin/fsck.c:356 builtin/rebase.c:235
+#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
+#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
 #, c-format
 msgid "could not write '%s'"
 msgstr "не удалось записать «%s»"
 
-#: rebase-interactive.c:108
+#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
+#: builtin/rebase.c:252
 #, c-format
-msgid "could not copy '%s' to '%s'."
-msgstr ""
+msgid "could not write '%s'."
+msgstr "не удалось записать «%s»."
 
-#: rebase-interactive.c:173
+#: rebase-interactive.c:193
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
 "Dropped commits (newer to older):\n"
 msgstr "Внимание: некоторые коммиты могли быть отброшены по ошибке.\nОтброшенные коммиты (от новых к старым):\n"
 
-#: rebase-interactive.c:180
+#: rebase-interactive.c:200
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -4579,430 +5528,410 @@
 "\n"
 msgstr "Чтобы избежать этого сообщения, используйте «drop» чтобы явно удалить коммит.\n\nИспользуйте опцию «git config rebase.missingCommitsCheck» для изменения количества предупреждений.\nВозможные значения: ignore, warn, error.\n\n"
 
-#: refs.c:192
+#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
+#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
+#: builtin/rebase.c:264
 #, c-format
-msgid "%s does not point to a valid object!"
-msgstr ""
+msgid "could not read '%s'."
+msgstr "не удалось прочитать «%s»."
 
-#: refs.c:597
-#, c-format
-msgid "ignoring dangling symref %s"
-msgstr ""
-
-#: refs.c:599 ref-filter.c:1982
-#, c-format
-msgid "ignoring broken ref %s"
-msgstr "игнорирую неправильную ссылку %s"
-
-#: refs.c:734
-#, c-format
-msgid "could not open '%s' for writing: %s"
-msgstr "не удалось открыть «%s» для записи: %s"
-
-#: refs.c:744 refs.c:795
-#, c-format
-msgid "could not read ref '%s'"
-msgstr ""
-
-#: refs.c:750
-#, c-format
-msgid "ref '%s' already exists"
-msgstr ""
-
-#: refs.c:755
-#, c-format
-msgid "unexpected object ID when writing '%s'"
-msgstr ""
-
-#: refs.c:763 sequencer.c:400 sequencer.c:2679 sequencer.c:2805
-#: sequencer.c:2819 sequencer.c:3076 sequencer.c:4913 wrapper.c:656
-#, c-format
-msgid "could not write to '%s'"
-msgstr "не удалось записать в «%s»"
-
-#: refs.c:790 wrapper.c:225 wrapper.c:395 builtin/am.c:715
-#: builtin/rebase.c:993
-#, c-format
-msgid "could not open '%s' for writing"
-msgstr "не удалось открыть «%s» для записи"
-
-#: refs.c:797
-#, c-format
-msgid "unexpected object ID when deleting '%s'"
-msgstr ""
-
-#: refs.c:928
-#, c-format
-msgid "log for ref %s has gap after %s"
-msgstr ""
-
-#: refs.c:934
-#, c-format
-msgid "log for ref %s unexpectedly ended on %s"
-msgstr ""
-
-#: refs.c:993
-#, c-format
-msgid "log for %s is empty"
-msgstr ""
-
-#: refs.c:1085
-#, c-format
-msgid "refusing to update ref with bad name '%s'"
-msgstr ""
-
-#: refs.c:1161
-#, c-format
-msgid "update_ref failed for ref '%s': %s"
-msgstr ""
-
-#: refs.c:1942
-#, c-format
-msgid "multiple updates for ref '%s' not allowed"
-msgstr ""
-
-#: refs.c:1974
-msgid "ref updates forbidden inside quarantine environment"
-msgstr "обновление ссылок запрещено в изолированном окружении"
-
-#: refs.c:2070 refs.c:2100
-#, c-format
-msgid "'%s' exists; cannot create '%s'"
-msgstr ""
-
-#: refs.c:2076 refs.c:2111
-#, c-format
-msgid "cannot process '%s' and '%s' at the same time"
-msgstr ""
-
-#: refs/files-backend.c:1234
-#, c-format
-msgid "could not remove reference %s"
-msgstr "не удалось удалить ссылки %s"
-
-#: refs/files-backend.c:1248 refs/packed-backend.c:1532
-#: refs/packed-backend.c:1542
-#, c-format
-msgid "could not delete reference %s: %s"
-msgstr "не удалось удалить ссылку %s: %s"
-
-#: refs/files-backend.c:1251 refs/packed-backend.c:1545
-#, c-format
-msgid "could not delete references: %s"
-msgstr "не удалось удалить ссылки: %s"
-
-#: refspec.c:137
-#, c-format
-msgid "invalid refspec '%s'"
-msgstr ""
-
-#: ref-filter.c:39 wt-status.c:1909
+#: ref-filter.c:42 wt-status.c:1973
 msgid "gone"
 msgstr "исчез"
 
-#: ref-filter.c:40
+#: ref-filter.c:43
 #, c-format
 msgid "ahead %d"
 msgstr "впереди %d"
 
-#: ref-filter.c:41
+#: ref-filter.c:44
 #, c-format
 msgid "behind %d"
 msgstr "позади %d"
 
-#: ref-filter.c:42
+#: ref-filter.c:45
 #, c-format
 msgid "ahead %d, behind %d"
 msgstr "впереди %d, позади %d"
 
-#: ref-filter.c:138
+#: ref-filter.c:169
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "ожидаемый формат: %%(color:<color>)"
 
-#: ref-filter.c:140
+#: ref-filter.c:171
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "неопознанный цвет: %%(color:%s)"
 
-#: ref-filter.c:162
+#: ref-filter.c:193
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Ожидается целочисленное значение refname:lstrip=%s"
 
-#: ref-filter.c:166
+#: ref-filter.c:197
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Ожидается целочисленное значение refname:rstrip=%s"
 
-#: ref-filter.c:168
+#: ref-filter.c:199
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "неопознанный аргумент %%(%s): %s"
 
-#: ref-filter.c:223
+#: ref-filter.c:254
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:245
+#: ref-filter.c:276
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr ""
 
-#: ref-filter.c:253
+#: ref-filter.c:284
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr ""
 
-#: ref-filter.c:265
+#: ref-filter.c:296
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "параметр %%(body) не принимает аргументы"
 
-#: ref-filter.c:274
+#: ref-filter.c:309
 #, c-format
-msgid "%%(subject) does not take arguments"
-msgstr "параметр %%(subject) не принимает аргументы"
+msgid "unrecognized %%(subject) argument: %s"
+msgstr ""
 
-#: ref-filter.c:296
+#: ref-filter.c:330
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "неизвестный аргумент для %%(trailers): %s"
 
-#: ref-filter.c:325
+#: ref-filter.c:363
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "положительное значение ожидает contents:lines=%s"
 
-#: ref-filter.c:327
+#: ref-filter.c:365
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "неопознанный аргумент %%(contents): %s"
 
-#: ref-filter.c:342
+#: ref-filter.c:380
 #, c-format
-msgid "positive value expected objectname:short=%s"
-msgstr "ожидается положительное значение objectname:short=%s"
+msgid "positive value expected '%s' in %%(%s)"
+msgstr ""
 
-#: ref-filter.c:346
+#: ref-filter.c:384
 #, c-format
-msgid "unrecognized %%(objectname) argument: %s"
-msgstr "неопознанный аргумент %%(objectname): %s"
+msgid "unrecognized argument '%s' in %%(%s)"
+msgstr ""
 
-#: ref-filter.c:376
+#: ref-filter.c:398
+#, c-format
+msgid "unrecognized email option: %s"
+msgstr ""
+
+#: ref-filter.c:428
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "ожидаемый формат: %%(align:<width>,<position>)"
 
-#: ref-filter.c:388
+#: ref-filter.c:440
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "неопознанная позиция:%s"
 
-#: ref-filter.c:395
+#: ref-filter.c:447
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "неопознанная ширина:%s"
 
-#: ref-filter.c:404
+#: ref-filter.c:456
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "неопознанный аргумент %%(align): %s"
 
-#: ref-filter.c:412
+#: ref-filter.c:464
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "ожидается положительная ширина с указанием частицы %%(align)"
 
-#: ref-filter.c:430
+#: ref-filter.c:482
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "неопознанный аргумент %%(if): %s"
 
-#: ref-filter.c:531
+#: ref-filter.c:584
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "неправильное имя поля: %.*s"
 
-#: ref-filter.c:558
+#: ref-filter.c:611
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "неизвестное имя поля: %.*s"
 
-#: ref-filter.c:562
+#: ref-filter.c:615
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 
-#: ref-filter.c:686
+#: ref-filter.c:739
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "формат: частица %%(if) использована без частицы %%(then)"
 
-#: ref-filter.c:749
+#: ref-filter.c:802
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "формат: частица %%(then) использована без частицы %%(if)"
 
-#: ref-filter.c:751
+#: ref-filter.c:804
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "формат: частица %%(then) использована более одного раза"
 
-#: ref-filter.c:753
+#: ref-filter.c:806
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "формат: частица %%(then) использована после %%(else)"
 
-#: ref-filter.c:781
+#: ref-filter.c:834
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "формат: частица %%(else) использована без частицы %%(if)"
 
-#: ref-filter.c:783
+#: ref-filter.c:836
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "формат: частица %%(else) использована без частицы %%(then)"
 
-#: ref-filter.c:785
+#: ref-filter.c:838
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "формат: частица %%(else) использована более одного раза"
 
-#: ref-filter.c:800
+#: ref-filter.c:853
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "формат: частица %%(end) использована без соответствующей частицы"
 
-#: ref-filter.c:857
+#: ref-filter.c:910
 #, c-format
 msgid "malformed format string %s"
 msgstr "неправильная строка формата %s"
 
-#: ref-filter.c:1453
+#: ref-filter.c:1549
 #, c-format
-msgid "(no branch, rebasing %s)"
-msgstr "(нет ветки, перемещение %s)"
+msgid "no branch, rebasing %s"
+msgstr ""
 
-#: ref-filter.c:1456
+#: ref-filter.c:1552
 #, c-format
-msgid "(no branch, rebasing detached HEAD %s)"
-msgstr "(нет ветки перемещение отделённого HEAD %s)"
+msgid "no branch, rebasing detached HEAD %s"
+msgstr ""
 
-#: ref-filter.c:1459
+#: ref-filter.c:1555
 #, c-format
-msgid "(no branch, bisect started on %s)"
-msgstr "(нет ветки, двоичный поиск начат на %s)"
+msgid "no branch, bisect started on %s"
+msgstr ""
 
-#. TRANSLATORS: make sure this matches "HEAD
-#. detached at " in wt-status.c
-#: ref-filter.c:1467
-#, c-format
-msgid "(HEAD detached at %s)"
-msgstr "(HEAD отделён на %s)"
+#: ref-filter.c:1565
+msgid "no branch"
+msgstr ""
 
-#. TRANSLATORS: make sure this matches "HEAD
-#. detached from " in wt-status.c
-#: ref-filter.c:1474
-#, c-format
-msgid "(HEAD detached from %s)"
-msgstr "(HEAD отделён начиная с %s)"
-
-#: ref-filter.c:1478
-msgid "(no branch)"
-msgstr "(нет ветки)"
-
-#: ref-filter.c:1512 ref-filter.c:1669
+#: ref-filter.c:1599 ref-filter.c:1808
 #, c-format
 msgid "missing object %s for %s"
 msgstr "не найден объект %s для %s"
 
-#: ref-filter.c:1522
+#: ref-filter.c:1609
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "сбой при выполнении parse_object_buffer на %s для %s"
 
-#: ref-filter.c:1888
+#: ref-filter.c:2062
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "Повреждённый объект «%s»"
 
-#: ref-filter.c:1977
+#: ref-filter.c:2151
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "игнорирую ссылку с неправильным именем %s"
 
-#: ref-filter.c:2263
+#: ref-filter.c:2156 refs.c:676
+#, c-format
+msgid "ignoring broken ref %s"
+msgstr "игнорирую неправильную ссылку %s"
+
+#: ref-filter.c:2472
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: пропущена частица %%(end)"
 
-#: ref-filter.c:2363
-#, c-format
-msgid "option `%s' is incompatible with --merged"
-msgstr ""
-
-#: ref-filter.c:2366
-#, c-format
-msgid "option `%s' is incompatible with --no-merged"
-msgstr ""
-
-#: ref-filter.c:2376
+#: ref-filter.c:2571
 #, c-format
 msgid "malformed object name %s"
 msgstr "неправильное имя объекта %s"
 
-#: ref-filter.c:2381
+#: ref-filter.c:2576
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr ""
 
-#: remote.c:363
+#: refs.c:264
+#, c-format
+msgid "%s does not point to a valid object!"
+msgstr ""
+
+#: refs.c:566
+#, 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"
+"of your new repositories, which will suppress this warning, call:\n"
+"\n"
+"\tgit config --global init.defaultBranch <name>\n"
+"\n"
+"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
+"'development'. The just-created branch can be renamed via this command:\n"
+"\n"
+"\tgit branch -m <name>\n"
+msgstr ""
+
+#: refs.c:588
+#, c-format
+msgid "could not retrieve `%s`"
+msgstr ""
+
+#: refs.c:598
+#, c-format
+msgid "invalid branch name: %s = %s"
+msgstr ""
+
+#: refs.c:674
+#, c-format
+msgid "ignoring dangling symref %s"
+msgstr ""
+
+#: refs.c:911
+#, c-format
+msgid "log for ref %s has gap after %s"
+msgstr ""
+
+#: refs.c:917
+#, c-format
+msgid "log for ref %s unexpectedly ended on %s"
+msgstr ""
+
+#: refs.c:976
+#, c-format
+msgid "log for %s is empty"
+msgstr ""
+
+#: refs.c:1068
+#, c-format
+msgid "refusing to update ref with bad name '%s'"
+msgstr ""
+
+#: refs.c:1139
+#, c-format
+msgid "update_ref failed for ref '%s': %s"
+msgstr ""
+
+#: refs.c:1963
+#, c-format
+msgid "multiple updates for ref '%s' not allowed"
+msgstr ""
+
+#: refs.c:2043
+msgid "ref updates forbidden inside quarantine environment"
+msgstr "обновление ссылок запрещено в изолированном окружении"
+
+#: refs.c:2054
+msgid "ref updates aborted by hook"
+msgstr ""
+
+#: refs.c:2154 refs.c:2184
+#, c-format
+msgid "'%s' exists; cannot create '%s'"
+msgstr ""
+
+#: refs.c:2160 refs.c:2195
+#, c-format
+msgid "cannot process '%s' and '%s' at the same time"
+msgstr ""
+
+#: refs/files-backend.c:1228
+#, 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
+#, c-format
+msgid "could not delete reference %s: %s"
+msgstr "не удалось удалить ссылку %s: %s"
+
+#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#, c-format
+msgid "could not delete references: %s"
+msgstr "не удалось удалить ссылки: %s"
+
+#: refspec.c:170
+#, c-format
+msgid "invalid refspec '%s'"
+msgstr ""
+
+#: remote.c:351
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 
-#: remote.c:410
+#: remote.c:399
 msgid "more than one receivepack given, using the first"
 msgstr ""
 
-#: remote.c:418
+#: remote.c:407
 msgid "more than one uploadpack given, using the first"
 msgstr ""
 
-#: remote.c:608
+#: remote.c:590
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Нельзя извлечь одновременно %s и %s в %s"
 
-#: remote.c:612
+#: remote.c:594
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s обычно отслеживает %s, а не %s"
 
-#: remote.c:616
+#: remote.c:598
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s отслеживает и %s и %s"
 
-#: remote.c:684
+#: remote.c:666
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr ""
 
-#: remote.c:694
+#: remote.c:676
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr ""
 
-#: remote.c:1000
+#: remote.c:1073
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr ""
 
-#: remote.c:1005
+#: remote.c:1078
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -5010,7 +5939,7 @@
 #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
-#: remote.c:1020
+#: remote.c:1093
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -5024,7 +5953,7 @@
 "Neither worked, so we gave up. You must fully qualify the ref."
 msgstr ""
 
-#: remote.c:1040
+#: remote.c:1113
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -5032,7 +5961,7 @@
 "'%s:refs/heads/%s'?"
 msgstr ""
 
-#: remote.c:1045
+#: remote.c:1118
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -5040,7 +5969,7 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1050
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -5048,7 +5977,7 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1055
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -5056,103 +5985,103 @@
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1091
+#: remote.c:1164
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr ""
 
-#: remote.c:1102
+#: remote.c:1175
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr ""
 
-#: remote.c:1114
+#: remote.c:1187
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 
-#: remote.c:1121
+#: remote.c:1194
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 
-#: remote.c:1624 remote.c:1725
+#: remote.c:1714 remote.c:1815
 msgid "HEAD does not point to a branch"
 msgstr "HEAD не указывает на ветку"
 
-#: remote.c:1633
+#: remote.c:1723
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "нет такой ветки: «%s»"
 
-#: remote.c:1636
+#: remote.c:1726
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "вышестоящая ветка не настроена для ветки «%s»"
 
-#: remote.c:1642
+#: remote.c:1732
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "вышестоящая ветка «%s» не сохранена как отслеживаемая ветка"
 
-#: remote.c:1657
+#: remote.c:1747
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "назначение для отправки «%s» на внешнем сервере «%s» не имеет локальной отслеживаемой ветки"
 
-#: remote.c:1669
+#: remote.c:1759
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "ветка «%s» не имеет внешнего сервера для отправки"
 
-#: remote.c:1679
+#: remote.c:1769
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "спецификаторы пути для отправки «%s» не включают в себя «%s»"
 
-#: remote.c:1692
+#: remote.c:1782
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "отправка не имеет точки назначения (push.default выставлен в «nothing»)"
 
-#: remote.c:1714
+#: remote.c:1804
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "не удалось выполнить «simple» отправку в единственную точку назначения"
 
-#: remote.c:1840
+#: remote.c:1933
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr ""
 
-#: remote.c:1853
+#: remote.c:1946
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr ""
 
-#: remote.c:2016
+#: remote.c:2109
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Ваша ветка базируется на «%s», но вышестоящий репозиторий исчез.\n"
 
-#: remote.c:2020
+#: remote.c:2113
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
-msgstr "(для исправления запустите «git branch --unset-upstream»)\n"
+msgstr " (для исправления запустите «git branch --unset-upstream»)\n"
 
-#: remote.c:2023
+#: remote.c:2116
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Ваша ветка обновлена в соответствии с «%s».\n"
 
-#: remote.c:2027
+#: remote.c:2120
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Ваша ветка и «%s» указывают на разные коммиты.\n"
 
-#: remote.c:2030
+#: remote.c:2123
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (используйте «%s» для просмотра описания)\n"
 
-#: remote.c:2034
+#: remote.c:2127
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
@@ -5161,11 +6090,11 @@
 msgstr[2] "Ваша ветка опережает «%s» на %d коммитов.\n"
 msgstr[3] "Ваша ветка опережает «%s» на %d коммитов.\n"
 
-#: remote.c:2040
+#: remote.c:2133
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (используйте «git push», чтобы опубликовать ваши локальные коммиты)\n"
 
-#: remote.c:2043
+#: remote.c:2136
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -5175,11 +6104,11 @@
 msgstr[2] "Ваша ветка отстает от «%s» на %d коммитов и может быть перемотана вперед.\n"
 msgstr[3] "Ваша ветка отстает от «%s» на %d коммитов и может быть перемотана вперед.\n"
 
-#: remote.c:2051
+#: remote.c:2144
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (используйте «git pull», чтобы обновить вашу локальную ветку)\n"
 
-#: remote.c:2054
+#: remote.c:2147
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -5192,11 +6121,11 @@
 msgstr[2] "Ваша ветка и «%s» разделились\nи теперь имеют %d и %d разных коммитов в каждой соответственно.\n"
 msgstr[3] "Ваша ветка и «%s» разделились\nи теперь имеют %d и %d разных коммитов в каждой соответственно.\n"
 
-#: remote.c:2064
+#: remote.c:2157
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (используйте «git pull», чтобы слить внешнюю ветку в вашу)\n"
 
-#: remote.c:2247
+#: remote.c:2349
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr ""
@@ -5211,7 +6140,7 @@
 msgid "duplicate replace ref: %s"
 msgstr ""
 
-#: replace-object.c:73
+#: replace-object.c:82
 #, c-format
 msgid "replace depth too high for object %s"
 msgstr ""
@@ -5274,8 +6203,8 @@
 msgid "Recorded preimage for '%s'"
 msgstr ""
 
-#: rerere.c:881 submodule.c:2024 builtin/log.c:1750
-#: builtin/submodule--helper.c:1417 builtin/submodule--helper.c:1427
+#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
+#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "не удалось создать каталог «%s»"
@@ -5309,223 +6238,240 @@
 msgid "unable to open rr-cache directory"
 msgstr ""
 
-#: revision.c:2476
+#: reset.c:42
+msgid "could not determine HEAD revision"
+msgstr ""
+
+#: reset.c:70 reset.c:76 sequencer.c:3460
+#, c-format
+msgid "failed to find tree of %s"
+msgstr "не удалось найти дерево для %s"
+
+#: revision.c:2336
+msgid "--unpacked=<packfile> no longer supported"
+msgstr ""
+
+#: revision.c:2356
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr ""
+
+#: revision.c:2694
 msgid "your current branch appears to be broken"
 msgstr "похоже, ваша текущая ветка повреждена"
 
-#: revision.c:2479
+#: revision.c:2697
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "ваша текущая ветка «%s» еще не содержит ни одного коммита"
 
-#: revision.c:2679
-msgid "--first-parent is incompatible with --bisect"
-msgstr "опцию --first-parent нельзя использовать одновременно с --bisect"
-
-#: revision.c:2683
+#: revision.c:2907
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 
-#: run-command.c:763
+#: run-command.c:764
 msgid "open /dev/null failed"
 msgstr "сбой открытия /dev/null"
 
-#: run-command.c:1269
+#: run-command.c:1271
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr ""
 
-#: run-command.c:1333
+#: run-command.c:1335
 #, 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Вы можете отключить это предупреждение с помощью команды «git config advice.ignoredHook false»."
 
-#: send-pack.c:141
+#: send-pack.c:146
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "неожиданный пустой пакет при чтении статуса внешней распаковки"
 
-#: send-pack.c:143
+#: send-pack.c:148
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "не удалось разобрать статус внешней распаковки: %s"
 
-#: send-pack.c:145
+#: send-pack.c:150
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "сбой при внешней распаковке %s"
 
-#: send-pack.c:306
+#: send-pack.c:374
 msgid "failed to sign the push certificate"
 msgstr "сбой подписания сертификата отправки"
 
-#: send-pack.c:420
+#: send-pack.c:467
+msgid "the receiving end does not support this repository's hash algorithm"
+msgstr ""
+
+#: send-pack.c:476
 msgid "the receiving end does not support --signed push"
 msgstr "принимающая сторона не поддерживает отправку с опцией --signed"
 
-#: send-pack.c:422
+#: send-pack.c:478
 msgid ""
 "not sending a push certificate since the receiving end does not support "
 "--signed push"
 msgstr "не отправляем сертификат для отправки, так как принимающая сторона не поддерживает отправку с опцией --signed"
 
-#: send-pack.c:434
+#: send-pack.c:490
 msgid "the receiving end does not support --atomic push"
 msgstr "принимающая сторона не поддерживает отправку с опцией --atomic"
 
-#: send-pack.c:439
+#: send-pack.c:495
 msgid "the receiving end does not support push options"
 msgstr "принимающая сторона не поддерживает отправку с опциями"
 
-#: sequencer.c:187
+#: sequencer.c:195
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "неправильный режим очистки сообщения коммита «%s»"
 
-#: sequencer.c:292
+#: sequencer.c:323
 #, c-format
 msgid "could not delete '%s'"
 msgstr "не удалось удалить «%s»"
 
-#: sequencer.c:318
+#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#, c-format
+msgid "could not remove '%s'"
+msgstr "не удалось удалить «%s»"
+
+#: sequencer.c:353
 msgid "revert"
 msgstr "обратить изменения"
 
-#: sequencer.c:320
+#: sequencer.c:355
 msgid "cherry-pick"
 msgstr "копировать коммит"
 
-#: sequencer.c:322
-msgid "rebase -i"
-msgstr "rebase -i"
+#: sequencer.c:357
+msgid "rebase"
+msgstr ""
 
-#: sequencer.c:324
+#: sequencer.c:359
 #, c-format
 msgid "unknown action: %d"
 msgstr ""
 
-#: sequencer.c:382
+#: sequencer.c:418
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
 msgstr "после разрешения конфликтов, пометьте исправленные пути\nс помощью «git add <пути>» или «git rm <пути>»"
 
-#: sequencer.c:385
+#: sequencer.c:421
 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 "после разрешения конфликтов, пометьте исправленные пути\nс помощью «git add <пути>» или «git rm <пути>»\nи сделайте коммит с помощью «git commit»"
 
-#: sequencer.c:398 sequencer.c:2801
+#: sequencer.c:434 sequencer.c:3062
 #, c-format
 msgid "could not lock '%s'"
 msgstr "не удалось заблокировать «%s»"
 
-#: sequencer.c:405
+#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
+#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#, c-format
+msgid "could not write to '%s'"
+msgstr "не удалось записать в «%s»"
+
+#: sequencer.c:441
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "не удалось записать eol в «%s»"
 
-#: sequencer.c:410 sequencer.c:2684 sequencer.c:2807 sequencer.c:2821
-#: sequencer.c:3084
+#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
+#: sequencer.c:3345
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "не удалось завершить «%s»"
 
-#: sequencer.c:433 sequencer.c:978 sequencer.c:1652 sequencer.c:2704
-#: sequencer.c:3066 sequencer.c:3175 builtin/am.c:245 builtin/commit.c:760
-#: builtin/merge.c:1115 builtin/rebase.c:567
-#, c-format
-msgid "could not read '%s'"
-msgstr "не удалось прочитать «%s»"
-
-#: sequencer.c:459
+#: sequencer.c:485
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "ваши локальные изменения будут перезаписаны %s."
 
-#: sequencer.c:463
+#: sequencer.c:489
 msgid "commit your changes or stash them to proceed."
 msgstr "для продолжения закоммитьте ваши изменения или спрячьте их."
 
-#: sequencer.c:495
+#: sequencer.c:521
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: перемотка вперед"
 
-#: sequencer.c:534 builtin/tag.c:555
+#: sequencer.c:560 builtin/tag.c:566
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Неправильное значение режима очистки %s"
 
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
-#. "rebase -i".
-#: sequencer.c:629
+#. "rebase".
+#: sequencer.c:670
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Не удалось записать файл индекса"
 
-#: sequencer.c:646
+#: sequencer.c:687
 msgid "unable to update cache tree"
 msgstr "не удалось обновить дерево кэша"
 
-#: sequencer.c:660
+#: sequencer.c:701
 msgid "could not resolve HEAD commit"
 msgstr "не удалось распознать HEAD коммит"
 
-#: sequencer.c:740
+#: sequencer.c:781
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr ""
 
-#: sequencer.c:751
+#: sequencer.c:792
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr ""
 
-#: sequencer.c:788 wrapper.c:227 wrapper.c:397 builtin/am.c:706
-#: builtin/am.c:798 builtin/merge.c:1112 builtin/rebase.c:1035
+#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
+#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "не удалось открыть «%s» для чтения"
 
-#: sequencer.c:798
+#: sequencer.c:839
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr ""
 
-#: sequencer.c:803
+#: sequencer.c:844
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr ""
 
-#: sequencer.c:808
+#: sequencer.c:849
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr ""
 
-#: sequencer.c:812
+#: sequencer.c:853
 #, c-format
 msgid "unknown variable '%s'"
 msgstr ""
 
-#: sequencer.c:817
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr ""
 
-#: sequencer.c:819
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr ""
 
-#: sequencer.c:821
+#: sequencer.c:862
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr ""
 
-#: sequencer.c:881
-#, c-format
-msgid "invalid date format '%s' in '%s'"
-msgstr ""
-
-#: sequencer.c:898
+#: sequencer.c:927
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -5542,15 +6488,11 @@
 "  git rebase --continue\n"
 msgstr "у вас имеются проиндексированные изменения в рабочем каталоге. Если эти изменения должны быть объеденены с предыдущим коммитом, то запустите:\n\n  git commit --amend %s\n\nЕсли же они должны быть помещены в новый коммит, то запустите:\n\n  git commit %s\n\nВ любом случае, после того как вы закончите, продолжить перемещение можно выполнив:\n\n  git rebase --continue\n"
 
-#: sequencer.c:992
-msgid "writing root commit"
-msgstr "запись коневого коммита"
-
-#: sequencer.c:1213
+#: sequencer.c:1208
 msgid "'prepare-commit-msg' hook failed"
 msgstr "ошибка при вызове перехватчика «prepare-commit-msg»"
 
-#: sequencer.c:1220
+#: sequencer.c:1214
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5565,7 +6507,7 @@
 "    git commit --amend --reset-author\n"
 msgstr "Ваше имя или электронная почта настроены автоматически на основании вашего\nимени пользователя и имени машины. Пожалуйста, проверьте, что они \nопределены правильно.\nВы можете отключить это уведомление установив их напрямую. Запустите следующую\nкоманду и следуйте инструкциям вашего текстового редактора, для\nредактирования вашего файла конфигурации:\n\n    git config --global --edit\n\nПосле этого, изменить авторство этой коммита можно будет с помощью команды:\n\n    git commit --amend --reset-author\n"
 
-#: sequencer.c:1233
+#: sequencer.c:1227
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -5579,305 +6521,354 @@
 "    git commit --amend --reset-author\n"
 msgstr "Ваше имя или электронная почта настроены автоматически на основании вашего\nимени пользователя и имени машины. Пожалуйста, проверьте, что они \nопределены правильно.\nВы можете отключить это уведомление установив их напрямую:\n\n    git config --global user.name \"Ваше Имя\"\n    git config --global user.email you@example.com\n\nПосле этого, изменить авторство этой коммита можно будет с помощью команды:\n\n    git commit --amend --reset-author\n"
 
-#: sequencer.c:1275
+#: sequencer.c:1269
 msgid "couldn't look up newly created commit"
 msgstr "нельзя запросить новосозданный коммит"
 
-#: sequencer.c:1277
+#: sequencer.c:1271
 msgid "could not parse newly created commit"
 msgstr "нельзя разобрать новосозданный коммит"
 
-#: sequencer.c:1323
+#: sequencer.c:1317
 msgid "unable to resolve HEAD after creating commit"
 msgstr "не удалось найти HEAD после создания коммита"
 
-#: sequencer.c:1325
+#: sequencer.c:1319
 msgid "detached HEAD"
 msgstr "отделённый HEAD"
 
-#: sequencer.c:1329
+#: sequencer.c:1323
 msgid " (root-commit)"
 msgstr " (корневой коммит)"
 
-#: sequencer.c:1350
+#: sequencer.c:1344
 msgid "could not parse HEAD"
 msgstr "не удалось разобрать HEAD"
 
-#: sequencer.c:1352
+#: sequencer.c:1346
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s не является коммитом!"
 
-#: sequencer.c:1356 builtin/commit.c:1551
+#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
 msgid "could not parse HEAD commit"
 msgstr "не удалось разобрать HEAD коммит"
 
-#: sequencer.c:1408 sequencer.c:2001
+#: sequencer.c:1403 sequencer.c:2100
 msgid "unable to parse commit author"
 msgstr "не удалось разобрать автора коммита"
 
-#: sequencer.c:1418 builtin/am.c:1572 builtin/merge.c:688
+#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree не удалось записать дерево"
 
-#: sequencer.c:1435 sequencer.c:1496
+#: sequencer.c:1447 sequencer.c:1565
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "не удалось прочитать сообщение коммита из «%s»"
 
-#: sequencer.c:1462 builtin/am.c:1594 builtin/commit.c:1650
-#: builtin/merge.c:882 builtin/merge.c:906
+#: sequencer.c:1476 sequencer.c:1508
+#, c-format
+msgid "invalid author identity '%s'"
+msgstr ""
+
+#: sequencer.c:1482
+msgid "corrupt author: missing date information"
+msgstr ""
+
+#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678
+#: builtin/merge.c:904 builtin/merge.c:929 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "сбой записи объекта коммита"
 
-#: sequencer.c:1523
+#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#, c-format
+msgid "could not update %s"
+msgstr "не удалось обновить %s"
+
+#: sequencer.c:1597
 #, c-format
 msgid "could not parse commit %s"
 msgstr "не удалось разобрать коммит %s"
 
-#: sequencer.c:1528
+#: sequencer.c:1602
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "не удалось разобрать родительский коммит %s"
 
-#: sequencer.c:1602 sequencer.c:1712
+#: sequencer.c:1685 sequencer.c:1796
 #, c-format
 msgid "unknown command: %d"
 msgstr "неизвестная команда: %d"
 
-#: sequencer.c:1659 sequencer.c:1684
+#: sequencer.c:1743 sequencer.c:1768
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Это объединение %d коммитов."
 
-#: sequencer.c:1669
+#: sequencer.c:1753
 msgid "need a HEAD to fixup"
 msgstr "нужен HEAD для исправления"
 
-#: sequencer.c:1671 sequencer.c:3111
+#: sequencer.c:1755 sequencer.c:3372
 msgid "could not read HEAD"
 msgstr "не удалось прочитать HEAD"
 
-#: sequencer.c:1673
+#: sequencer.c:1757
 msgid "could not read HEAD's commit message"
 msgstr "не удалось прочитать сообщение коммита текущего HEAD"
 
-#: sequencer.c:1679
+#: sequencer.c:1763
 #, c-format
 msgid "cannot write '%s'"
 msgstr "не удалось записать «%s»"
 
-#: sequencer.c:1686 git-rebase--preserve-merges.sh:441
+#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Это 1-е сообщение коммита:"
 
-#: sequencer.c:1694
+#: sequencer.c:1778
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "не удалось прочитать сообщение коммита для %s"
 
-#: sequencer.c:1701
+#: sequencer.c:1785
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Это сообщение коммита номер #%d:"
 
-#: sequencer.c:1707
+#: sequencer.c:1791
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Сообщение коммита номер #%d будет пропущено:"
 
-#: sequencer.c:1795
+#: sequencer.c:1879
 msgid "your index file is unmerged."
 msgstr "ваш индекс не слит."
 
-#: sequencer.c:1802
+#: sequencer.c:1886
 msgid "cannot fixup root commit"
 msgstr "нельзя исправить корневой коммит"
 
-#: sequencer.c:1821
+#: sequencer.c:1905
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "коммит %s — это коммит-слияние, но опция -m не указана."
 
-#: sequencer.c:1829 sequencer.c:1837
+#: sequencer.c:1913 sequencer.c:1921
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "у коммита %s нет предка %d"
 
-#: sequencer.c:1843
+#: sequencer.c:1927
 #, 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:1862
+#: sequencer.c:1946
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: не удалось разобрать родительский коммит для %s"
 
-#: sequencer.c:1927
+#: sequencer.c:2011
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "не удалось переименовать «%s» в «%s»"
 
-#: sequencer.c:1982
+#: sequencer.c:2071
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "не удалось обратить изменения коммита %s… %s"
 
-#: sequencer.c:1983
+#: sequencer.c:2072
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "не удалось применить коммит %s… %s"
 
-#: sequencer.c:2042
+#: sequencer.c:2092
+#, c-format
+msgid "dropping %s %s -- patch contents already upstream\n"
+msgstr ""
+
+#: sequencer.c:2150
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: сбой чтения индекса"
 
-#: sequencer.c:2049
+#: sequencer.c:2157
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: сбой обновления индекса"
 
-#: sequencer.c:2118
+#: sequencer.c:2234
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "параметр %s не принимает аргументы: «%s»"
 
-#: sequencer.c:2127
+#: sequencer.c:2243
 #, c-format
 msgid "missing arguments for %s"
 msgstr "пропущены аргументы для %s"
 
-#: sequencer.c:2164
+#: sequencer.c:2274
 #, c-format
-msgid "could not parse '%.*s'"
+msgid "could not parse '%s'"
 msgstr ""
 
-#: sequencer.c:2226
+#: sequencer.c:2335
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "неправильная строка %d: %.*s"
 
-#: sequencer.c:2237
+#: sequencer.c:2346
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "нельзя выполнить «%s» без указания предыдущего коммита"
 
-#: sequencer.c:2285 builtin/rebase.c:153 builtin/rebase.c:178
-#: builtin/rebase.c:204 builtin/rebase.c:229
-#, c-format
-msgid "could not read '%s'."
-msgstr "не удалось прочитать «%s»."
+#: sequencer.c:2432
+msgid "cancelling a cherry picking in progress"
+msgstr ""
 
-#: sequencer.c:2360
+#: sequencer.c:2441
+msgid "cancelling a revert in progress"
+msgstr ""
+
+#: sequencer.c:2485
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "пожалуйста исправьте это с помощью «git rebase --edit-todo»."
 
-#: sequencer.c:2362
+#: sequencer.c:2487
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "непригодная для использования карта с инструкциями: «%s»"
 
-#: sequencer.c:2367
+#: sequencer.c:2492
 msgid "no commits parsed."
 msgstr "коммиты не разобраны."
 
-#: sequencer.c:2378
+#: sequencer.c:2503
 msgid "cannot cherry-pick during a revert."
 msgstr "нельзя скопировать коммит во время процесса обращения коммита."
 
-#: sequencer.c:2380
+#: sequencer.c:2505
 msgid "cannot revert during a cherry-pick."
 msgstr "нельзя обратить изменения коммита во время копирования коммита."
 
-#: sequencer.c:2462
+#: sequencer.c:2583
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "неправильное значение %s: %s"
 
-#: sequencer.c:2549
+#: sequencer.c:2690
 msgid "unusable squash-onto"
 msgstr "непригодный для использования уплотнить-над"
 
-#: sequencer.c:2565
+#: sequencer.c:2710
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "испорченная карта с опциями: «%s»"
 
-#: sequencer.c:2648 sequencer.c:4227
+#: sequencer.c:2803 sequencer.c:4636
 msgid "empty commit set passed"
 msgstr "передан пустой набор коммитов"
 
-#: sequencer.c:2656
-msgid "a cherry-pick or revert is already in progress"
-msgstr "копирование или обращение изменений коммита уже выполняются"
+#: sequencer.c:2820
+msgid "revert is already in progress"
+msgstr ""
 
-#: sequencer.c:2657
-msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
-msgstr "попробуйте «git cherry-pick (--continue | --quit | --abort)»"
+#: sequencer.c:2822
+#, c-format
+msgid "try \"git revert (--continue | %s--abort | --quit)\""
+msgstr ""
 
-#: sequencer.c:2660
+#: sequencer.c:2825
+msgid "cherry-pick is already in progress"
+msgstr ""
+
+#: sequencer.c:2827
+#, c-format
+msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
+msgstr ""
+
+#: sequencer.c:2841
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "не удалось создать каталог для указателя следования коммитов «%s»"
 
-#: sequencer.c:2674
+#: sequencer.c:2856
 msgid "could not lock HEAD"
 msgstr "не удалось заблокировать HEAD"
 
-#: sequencer.c:2729 sequencer.c:3979
+#: sequencer.c:2916 sequencer.c:4371
 msgid "no cherry-pick or revert in progress"
 msgstr "копирование или обращение изменений коммита уже выполняются"
 
-#: sequencer.c:2731
+#: sequencer.c:2918 sequencer.c:2929
 msgid "cannot resolve HEAD"
 msgstr "не удалось определить HEAD"
 
-#: sequencer.c:2733 sequencer.c:2768
+#: sequencer.c:2920 sequencer.c:2964
 msgid "cannot abort from a branch yet to be born"
 msgstr "нельзя отменить изменения с ветки, которая еще не создана"
 
-#: sequencer.c:2754 builtin/grep.c:732
+#: sequencer.c:2950 builtin/grep.c:756
 #, c-format
 msgid "cannot open '%s'"
 msgstr "не удалось открыть «%s»"
 
-#: sequencer.c:2756
+#: sequencer.c:2952
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "не удалось прочитать «%s»: %s"
 
-#: sequencer.c:2757
+#: sequencer.c:2953
 msgid "unexpected end of file"
 msgstr "неожиданный конец файла"
 
-#: sequencer.c:2763
+#: sequencer.c:2959
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "сохраненный файл с HEAD перед копированием коммита «%s» поврежден"
 
-#: sequencer.c:2774
+#: sequencer.c:2970
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "Похоже, что вы переместили HEAD. Перемотка не выполняется, проверьте свой указатель HEAD!"
 
-#: sequencer.c:2903 sequencer.c:3894
-#, c-format
-msgid "could not update %s"
-msgstr "не удалось обновить %s"
+#: sequencer.c:3011
+msgid "no revert in progress"
+msgstr ""
 
-#: sequencer.c:2941 sequencer.c:3874
+#: sequencer.c:3020
+msgid "no cherry-pick in progress"
+msgstr ""
+
+#: sequencer.c:3030
+msgid "failed to skip the commit"
+msgstr ""
+
+#: sequencer.c:3037
+msgid "there is nothing to skip"
+msgstr ""
+
+#: sequencer.c:3040
+#, c-format
+msgid ""
+"have you committed already?\n"
+"try \"git %s --continue\""
+msgstr ""
+
+#: sequencer.c:3202 sequencer.c:4263
 msgid "cannot read HEAD"
 msgstr "не удалось прочитать HEAD"
 
-#: sequencer.c:2958
+#: sequencer.c:3219
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:2966
+#: sequencer.c:3227
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -5889,27 +6880,27 @@
 "  git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:2976
+#: sequencer.c:3237
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr ""
 
-#: sequencer.c:2983
+#: sequencer.c:3244
 #, c-format
 msgid "Could not merge %.*s"
 msgstr ""
 
-#: sequencer.c:2997 sequencer.c:3001 builtin/difftool.c:633
+#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "не удалось скопировать «%s» в «%s»"
 
-#: sequencer.c:3023 sequencer.c:3446 builtin/rebase.c:839
-#: builtin/rebase.c:1580 builtin/rebase.c:1940 builtin/rebase.c:1995
-msgid "could not read index"
-msgstr "не удалось прочитать индекс"
+#: sequencer.c:3274
+#, c-format
+msgid "Executing: %s\n"
+msgstr ""
 
-#: sequencer.c:3028
+#: sequencer.c:3289
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -5919,11 +6910,11 @@
 "\n"
 msgstr "ошибка выполнения: %s\n%sВы можете исправить ошибку, а затем запустить\n\n  git rebase --continue\n\n"
 
-#: sequencer.c:3034
+#: sequencer.c:3295
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "и были сделаны изменения в индексе и/или в рабочем каталоге\n"
 
-#: sequencer.c:3040
+#: sequencer.c:3301
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -5934,108 +6925,120 @@
 "\n"
 msgstr "успешное выполнение: %s\nно остались изменения в индексе и/или в рабочем каталоге\nСделайте коммит или спрячьте ваши изменения, а затем выполните\n\n  git rebase --continue\n\n"
 
-#: sequencer.c:3101
+#: sequencer.c:3362
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3155
+#: sequencer.c:3416
 msgid "writing fake root commit"
 msgstr "запись поддельного корневого коммита"
 
-#: sequencer.c:3160
+#: sequencer.c:3421
 msgid "writing squash-onto"
 msgstr "запить уплотнить-над"
 
-#: sequencer.c:3198 builtin/rebase.c:844 builtin/rebase.c:850
-#, c-format
-msgid "failed to find tree of %s"
-msgstr "не удалось найти дерево для %s"
-
-#: sequencer.c:3216 builtin/rebase.c:863
-msgid "could not write index"
-msgstr "не удалось записать индекс"
-
-#: sequencer.c:3243
+#: sequencer.c:3505
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "не удалось распознать «%s»"
 
-#: sequencer.c:3271
+#: sequencer.c:3538
 msgid "cannot merge without a current revision"
 msgstr "нельзя слить без текущей редакции"
 
-#: sequencer.c:3293
+#: sequencer.c:3560
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr ""
 
-#: sequencer.c:3302
+#: sequencer.c:3569
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3314
+#: sequencer.c:3581
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 
-#: sequencer.c:3329
+#: sequencer.c:3597
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "не удалось получить сообщение коммита для «%s»"
 
-#: sequencer.c:3478
+#: sequencer.c:3780
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "не удалось даже попытаться слить «%.*s»"
 
-#: sequencer.c:3494
+#: sequencer.c:3796
 msgid "merge: Unable to write new index file"
 msgstr "слияние: Не удалось записать файл индекса"
 
-#: sequencer.c:3562 builtin/rebase.c:711
+#: sequencer.c:3870
+msgid "Cannot autostash"
+msgstr "Не удалось автоматически спрятать изменения"
+
+#: sequencer.c:3873
+#, c-format
+msgid "Unexpected stash response: '%s'"
+msgstr ""
+
+#: sequencer.c:3879
+#, c-format
+msgid "Could not create directory for '%s'"
+msgstr ""
+
+#: sequencer.c:3882
+#, c-format
+msgid "Created autostash: %s\n"
+msgstr ""
+
+#: sequencer.c:3886
+msgid "could not reset --hard"
+msgstr ""
+
+#: sequencer.c:3911
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Применены автоматически спрятанные изменения.\n"
 
-#: sequencer.c:3574
+#: sequencer.c:3923
 #, c-format
 msgid "cannot store %s"
 msgstr "не удалось сохранить %s"
 
-#: sequencer.c:3577 builtin/rebase.c:727
+#: sequencer.c:3926
 #, c-format
 msgid ""
-"Applying autostash resulted in conflicts.\n"
+"%s\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Ваши изменения спрятаны и в безопасности.\nВы можете выполнить «git stash pop» или «git stash drop» в любой момент.\n"
-
-#: sequencer.c:3638
-#, c-format
-msgid "could not checkout %s"
 msgstr ""
 
-#: sequencer.c:3652
-#, c-format
-msgid "%s: not a valid OID"
+#: sequencer.c:3931
+msgid "Applying autostash resulted in conflicts."
 msgstr ""
 
-#: sequencer.c:3657 git-rebase--preserve-merges.sh:724
+#: sequencer.c:3932
+msgid "Autostash exists; creating a new stash entry."
+msgstr ""
+
+#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "не удалось отделить HEAD"
 
-#: sequencer.c:3672
+#: sequencer.c:4040
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr ""
 
-#: sequencer.c:3674
+#: sequencer.c:4042
 #, c-format
 msgid "Stopped at %s\n"
 msgstr ""
 
-#: sequencer.c:3682
+#: sequencer.c:4050
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -6048,120 +7051,124 @@
 "    git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:3759
+#: sequencer.c:4096
+#, c-format
+msgid "Rebasing (%d/%d)%s"
+msgstr ""
+
+#: sequencer.c:4141
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Остановлено на %s …  %.*s\n"
 
-#: sequencer.c:3837
+#: sequencer.c:4212
 #, c-format
 msgid "unknown command %d"
 msgstr "неизвестная команда %d"
 
-#: sequencer.c:3882
+#: sequencer.c:4271
 msgid "could not read orig-head"
 msgstr "не удалось прочитать orig-head"
 
-#: sequencer.c:3887
+#: sequencer.c:4276
 msgid "could not read 'onto'"
 msgstr "не удалось прочитать «onto»"
 
-#: sequencer.c:3901
+#: sequencer.c:4290
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "не удалось обновить HEAD на %s"
 
-#: sequencer.c:3991
+#: sequencer.c:4350
+#, c-format
+msgid "Successfully rebased and updated %s.\n"
+msgstr ""
+
+#: sequencer.c:4383
 msgid "cannot rebase: You have unstaged changes."
 msgstr "не удалось выполнить перемещение коммитов: У вас есть непроиндексированные изменения."
 
-#: sequencer.c:4000
+#: sequencer.c:4392
 msgid "cannot amend non-existing commit"
 msgstr "не удалось исправить несуществующий коммит"
 
-#: sequencer.c:4002
+#: sequencer.c:4394
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "недопустимый файл: «%s»"
 
-#: sequencer.c:4004
+#: sequencer.c:4396
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "недопустимое содержимое: «%s»"
 
-#: sequencer.c:4007
+#: sequencer.c:4399
 msgid ""
 "\n"
 "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» снова."
 
-#: sequencer.c:4043 sequencer.c:4081
+#: sequencer.c:4435 sequencer.c:4474
 #, c-format
 msgid "could not write file: '%s'"
 msgstr ""
 
-#: sequencer.c:4096
+#: sequencer.c:4490
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "не удалось удалить CHERRY_PICK_HEAD"
 
-#: sequencer.c:4103
+#: sequencer.c:4497
 msgid "could not commit staged changes."
 msgstr "не удалось закоммитить проиндексированные изменения."
 
-#: sequencer.c:4204
+#: sequencer.c:4613
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: не удалось скопировать коммит %s"
 
-#: sequencer.c:4208
+#: sequencer.c:4617
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: плохая редакция"
 
-#: sequencer.c:4243
+#: sequencer.c:4652
 msgid "can't revert as initial commit"
 msgstr "нельзя возвратить изначальный коммит"
 
-#: sequencer.c:4686
+#: sequencer.c:5129
 msgid "make_script: unhandled options"
 msgstr "make_script: не обработанные опции"
 
-#: sequencer.c:4689
+#: sequencer.c:5132
 msgid "make_script: error preparing revisions"
 msgstr "make_script: ошибка при обновлении редакций"
 
-#: sequencer.c:4847
-msgid ""
-"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.\n"
-"Or you can abort the rebase with 'git rebase --abort'.\n"
-msgstr "Вы можете исправить это с помощью «git rebase --edit-todo», а потом запустив «git rebase --continue».\nИли вы можете прервать процесс перемещения, выполнив «git rebase --abort»\n"
-
-#: sequencer.c:4959 sequencer.c:4976
+#: sequencer.c:5374 sequencer.c:5391
 msgid "nothing to do"
 msgstr ""
 
-#: sequencer.c:4990
+#: sequencer.c:5410
 msgid "could not skip unnecessary pick commands"
 msgstr ""
 
-#: sequencer.c:5073
+#: sequencer.c:5504
 msgid "the script was already rearranged."
 msgstr "сценарий уже был перестроен."
 
-#: setup.c:123
+#: setup.c:133
 #, c-format
-msgid "'%s' is outside repository"
-msgstr "«%s» вне репозитория"
+msgid "'%s' is outside repository at '%s'"
+msgstr ""
 
-#: setup.c:173
+#: setup.c:185
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr "%s: нет такого пути в рабочем каталоге.\nИспользуйте «git <команда> -- <путь>…» для указания путей, которые не существуют локально."
 
-#: setup.c:186
+#: setup.c:198
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -6169,12 +7176,12 @@
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr "неоднозначный аргумент «%s»: неизвестная редакция или не путь в рабочем каталоге.\nИспользуйте «--» для отделения путей от редакций, вот так:\n«git <команда> [<редакция>…] -- [<файл>…]»"
 
-#: setup.c:235
+#: setup.c:264
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 
-#: setup.c:254
+#: setup.c:283
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -6182,387 +7189,547 @@
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr "неоднозначный аргумент «%s»: является одновременно и редакцией и именем файла.\nИспользуйте «--» для отделения путей от редакций, вот так:\n«git <команда> [<редакция>…] -- [<файл>…]»"
 
-#: setup.c:390
+#: setup.c:419
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 
-#: setup.c:394
+#: setup.c:423
 msgid "this operation must be run in a work tree"
 msgstr ""
 
-#: setup.c:540
+#: setup.c:661
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Ожидаемая версия git репозитория <= %d, а обнаружена %d"
 
-#: setup.c:548
+#: setup.c:669
 msgid "unknown repository extensions found:"
 msgstr "обнаружены неизвестные расширения репозитория:"
 
-#: setup.c:567
+#: setup.c:681
+msgid "repo version is 0, but v1-only extensions found:"
+msgstr ""
+
+#: setup.c:700
 #, c-format
 msgid "error opening '%s'"
 msgstr "ошибка открытия «%s»"
 
-#: setup.c:569
+#: setup.c:702
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "файл слишком большой как для .git файла: «%s»"
 
-#: setup.c:571
+#: setup.c:704
 #, c-format
 msgid "error reading %s"
 msgstr "ошибка чтения %s"
 
-#: setup.c:573
+#: setup.c:706
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "неправильный формат файла gitfile: %s"
 
-#: setup.c:575
+#: setup.c:708
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "нет пути в gitfile: %s"
 
-#: setup.c:577
+#: setup.c:710
 #, c-format
 msgid "not a git repository: %s"
 msgstr "не является репозиторием git: %s"
 
-#: setup.c:676
+#: setup.c:812
 #, c-format
 msgid "'$%s' too big"
 msgstr "«$%s» слишком большой"
 
-#: setup.c:690
+#: setup.c:826
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "не является репозиторием git: «%s»"
 
-#: setup.c:719 setup.c:721 setup.c:752
+#: setup.c:855 setup.c:857 setup.c:888
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "не удалось выполнить chdir в «%s»"
 
-#: setup.c:724 setup.c:780 setup.c:790 setup.c:829 setup.c:837
+#: setup.c:860 setup.c:916 setup.c:926 setup.c:965 setup.c:973
 msgid "cannot come back to cwd"
 msgstr "не удалось вернуться в cwd"
 
-#: setup.c:851
+#: setup.c:987
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "не удалось выполнить stat для «%*s%s%s»"
 
-#: setup.c:1083
+#: setup.c:1225
 msgid "Unable to read current working directory"
 msgstr "Не удалось прочитать текущий рабочий каталог"
 
-#: setup.c:1092 setup.c:1098
+#: setup.c:1234 setup.c:1240
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "не удалось изменить на «%s»"
 
-#: setup.c:1103
+#: setup.c:1245
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "не найден git репозиторий (или один из родительских каталогов): %s"
 
-#: setup.c:1109
+#: setup.c:1251
 #, 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 "не найден git репозиторий (или один из его каталогов вплоть до точки монтирования %s)\nОстанавливаю поиск на границе файловой системы (так как GIT_DISCOVERY_ACROSS_FILESYSTEM не установлен)."
 
-#: setup.c:1220
+#: setup.c:1362
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
 
-#: setup.c:1264
+#: setup.c:1409
 msgid "open /dev/null or dup failed"
 msgstr "сбой открытия /dev/null или дублирования дескриптора"
 
-#: setup.c:1279
+#: setup.c:1424
 msgid "fork failed"
 msgstr "сбой при выполнении fork"
 
-#: setup.c:1284
+#: setup.c:1429
 msgid "setsid failed"
 msgstr "сбой при выполнении setsid"
 
-#: sha1-file.c:453
+#: sha1-file.c:480
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 
-#: sha1-file.c:504
+#: sha1-file.c:531
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr ""
 
-#: sha1-file.c:576
+#: sha1-file.c:603
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 
-#: sha1-file.c:583
+#: sha1-file.c:610
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr ""
 
-#: sha1-file.c:626
+#: sha1-file.c:653
 msgid "unable to fdopen alternates lockfile"
 msgstr ""
 
-#: sha1-file.c:644
+#: sha1-file.c:671
 msgid "unable to read alternates file"
 msgstr ""
 
-#: sha1-file.c:651
+#: sha1-file.c:678
 msgid "unable to move new alternates file into place"
 msgstr ""
 
-#: sha1-file.c:686
+#: sha1-file.c:713
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "путь «%s» не существует"
 
-#: sha1-file.c:712
+#: sha1-file.c:734
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "ссылаемый репозиторий «%s» как связанное состояние, пока не поддерживается."
 
-#: sha1-file.c:718
+#: sha1-file.c:740
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "ссылаемый репозиторий «%s» не является локальным."
 
-#: sha1-file.c:724
+#: sha1-file.c:746
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "ссылаемый репозиторий «%s» является частичным"
 
-#: sha1-file.c:732
+#: sha1-file.c:754
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "ссылаемый репозиторий «%s» является сращенным"
 
-#: sha1-file.c:846
+#: sha1-file.c:814
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr ""
+
+#: sha1-file.c:964
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 
-#: sha1-file.c:871
+#: sha1-file.c:985
 msgid "mmap failed"
 msgstr ""
 
-#: sha1-file.c:1035
+#: sha1-file.c:1149
 #, c-format
 msgid "object file %s is empty"
 msgstr ""
 
-#: sha1-file.c:1159 sha1-file.c:2297
+#: sha1-file.c:1284 sha1-file.c:2477
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr ""
 
-#: sha1-file.c:1161 sha1-file.c:2301
+#: sha1-file.c:1286 sha1-file.c:2481
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr ""
 
-#: sha1-file.c:1203
+#: sha1-file.c:1328
 msgid "invalid object type"
 msgstr ""
 
-#: sha1-file.c:1287
+#: sha1-file.c:1412
 #, c-format
 msgid "unable to unpack %s header with --allow-unknown-type"
 msgstr ""
 
-#: sha1-file.c:1290
+#: sha1-file.c:1415
 #, c-format
 msgid "unable to unpack %s header"
 msgstr ""
 
-#: sha1-file.c:1296
+#: sha1-file.c:1421
 #, c-format
 msgid "unable to parse %s header with --allow-unknown-type"
 msgstr ""
 
-#: sha1-file.c:1299
+#: sha1-file.c:1424
 #, c-format
 msgid "unable to parse %s header"
 msgstr ""
 
-#: sha1-file.c:1490
+#: sha1-file.c:1651
 #, c-format
 msgid "failed to read object %s"
 msgstr ""
 
-#: sha1-file.c:1494
+#: sha1-file.c:1655
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr ""
 
-#: sha1-file.c:1498
+#: sha1-file.c:1659
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: sha1-file.c:1502
+#: sha1-file.c:1663
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: sha1-file.c:1604
+#: sha1-file.c:1768
 #, c-format
 msgid "unable to write file %s"
 msgstr ""
 
-#: sha1-file.c:1611
+#: sha1-file.c:1775
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr ""
 
-#: sha1-file.c:1618
+#: sha1-file.c:1782
 msgid "file write error"
 msgstr ""
 
-#: sha1-file.c:1637
+#: sha1-file.c:1802
 msgid "error when closing loose object file"
 msgstr ""
 
-#: sha1-file.c:1702
+#: sha1-file.c:1867
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 
-#: sha1-file.c:1704
+#: sha1-file.c:1869
 msgid "unable to create temporary file"
 msgstr ""
 
-#: sha1-file.c:1728
+#: sha1-file.c:1893
 msgid "unable to write loose object file"
 msgstr ""
 
-#: sha1-file.c:1734
+#: sha1-file.c:1899
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr ""
 
-#: sha1-file.c:1738
+#: sha1-file.c:1903
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr ""
 
-#: sha1-file.c:1742
+#: sha1-file.c:1907
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr ""
 
-#: sha1-file.c:1752 builtin/pack-objects.c:920
+#: sha1-file.c:1917 builtin/pack-objects.c:1086
 #, c-format
 msgid "failed utime() on %s"
 msgstr ""
 
-#: sha1-file.c:1827
+#: sha1-file.c:1994
 #, c-format
 msgid "cannot read object for %s"
 msgstr ""
 
-#: sha1-file.c:1867
+#: sha1-file.c:2045
 msgid "corrupt commit"
 msgstr ""
 
-#: sha1-file.c:1875
+#: sha1-file.c:2053
 msgid "corrupt tag"
 msgstr ""
 
-#: sha1-file.c:1974
+#: sha1-file.c:2153
 #, c-format
 msgid "read error while indexing %s"
 msgstr ""
 
-#: sha1-file.c:1977
+#: sha1-file.c:2156
 #, c-format
 msgid "short read while indexing %s"
 msgstr ""
 
-#: sha1-file.c:2050 sha1-file.c:2059
+#: sha1-file.c:2229 sha1-file.c:2239
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr ""
 
-#: sha1-file.c:2065
+#: sha1-file.c:2245
 #, c-format
 msgid "%s: unsupported file type"
 msgstr ""
 
-#: sha1-file.c:2089
+#: sha1-file.c:2269
 #, c-format
 msgid "%s is not a valid object"
 msgstr ""
 
-#: sha1-file.c:2091
+#: sha1-file.c:2271
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s не является действительным объектом «%s»"
 
-#: sha1-file.c:2118 builtin/index-pack.c:154
+#: sha1-file.c:2298 builtin/index-pack.c:192
 #, c-format
 msgid "unable to open %s"
 msgstr "не удалось открыть %s"
 
-#: sha1-file.c:2308 sha1-file.c:2360
+#: sha1-file.c:2488 sha1-file.c:2541
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
-msgstr "несоответствие хеш-суммы %s (ожидается %s)"
+msgstr "несоответствие хэш-кода %s (ожидается %s)"
 
-#: sha1-file.c:2332
+#: sha1-file.c:2512
 #, c-format
 msgid "unable to mmap %s"
 msgstr ""
 
-#: sha1-file.c:2337
+#: sha1-file.c:2517
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr ""
 
-#: sha1-file.c:2343
+#: sha1-file.c:2523
 #, c-format
 msgid "unable to parse header of %s"
 msgstr ""
 
-#: sha1-file.c:2354
+#: sha1-file.c:2534
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr ""
 
-#: sha1-name.c:490
+#: sha1-name.c:486
 #, c-format
 msgid "short SHA1 %s is ambiguous"
 msgstr "сокращённый SHA1 идентификатор %s неоднозначен"
 
-#: sha1-name.c:501
+#: sha1-name.c:497
 msgid "The candidates are:"
 msgstr "Возможно, вы имели в виду:"
 
-#: sha1-name.c:800
+#: sha1-name.c:796
 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"
 "may be created by mistake. For example,\n"
 "\n"
-"  git checkout -b $br $(git rev-parse ...)\n"
+"  git switch -c $br $(git rev-parse ...)\n"
 "\n"
 "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
 "examine these refs and maybe delete them. Turn this message off by\n"
 "running \"git config advice.objectNameWarning false\""
-msgstr "Обычно Git не создает ссылки, оканчивающиеся на 40 шестнадцатеричных\nсимволов, потому, что они будут игнорироваться, когда вы просто\nукажете это 40-символьное шестнадцатеричное число. Такие ссылки\nмогли быть созданы по ошибке. Например, с помощью:\n\n  git checkout -b $br $(git rev-parse …)\n\n, если «$br» оказался пустым, то ссылка с 40-символьным\nшестнадцатеричным числом будет создана. Пожалуйста, просмотрите эти\nссылки и, возможно, удалите их. Вы можете отключить это сообщение\nзапустив «git config advice.objectNameWarning false»"
+msgstr ""
+
+#: sha1-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr ""
+
+#: sha1-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr ""
+
+#: sha1-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr ""
+
+#: sha1-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+
+#: sha1-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr ""
+
+#: sha1-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+
+#: sha1-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+
+#: sha1-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr ""
+
+#: sha1-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr ""
+
+#: sha1-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr ""
+
+#: sha1-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr ""
+
+#. TRANSLATORS: IEC 80000-13:2008 gibibyte
+#: strbuf.c:848
+#, c-format
+msgid "%u.%2.2u GiB"
+msgstr "%u.%2.2u ГиБ"
+
+#. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
+#: strbuf.c:850
+#, c-format
+msgid "%u.%2.2u GiB/s"
+msgstr "%u.%2.2u ГиБ/с"
+
+#. TRANSLATORS: IEC 80000-13:2008 mebibyte
+#: strbuf.c:858
+#, c-format
+msgid "%u.%2.2u MiB"
+msgstr "%u.%2.2u МиБ"
+
+#. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
+#: strbuf.c:860
+#, c-format
+msgid "%u.%2.2u MiB/s"
+msgstr "%u.%2.2u МиБ/с"
+
+#. TRANSLATORS: IEC 80000-13:2008 kibibyte
+#: strbuf.c:867
+#, c-format
+msgid "%u.%2.2u KiB"
+msgstr "%u.%2.2u КиБ"
+
+#. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
+#: strbuf.c:869
+#, c-format
+msgid "%u.%2.2u KiB/s"
+msgstr "%u.%2.2u КиБ/с"
+
+#. TRANSLATORS: IEC 80000-13:2008 byte
+#: strbuf.c:875
+#, c-format
+msgid "%u byte"
+msgid_plural "%u bytes"
+msgstr[0] "%u байт"
+msgstr[1] "%u байта"
+msgstr[2] "%u байтов"
+msgstr[3] "%u байта"
+
+#. TRANSLATORS: IEC 80000-13:2008 byte/second
+#: strbuf.c:877
+#, c-format
+msgid "%u byte/s"
+msgid_plural "%u bytes/s"
+msgstr[0] "%u байт/с"
+msgstr[1] "%u байта/с"
+msgstr[2] "%u байтов/с"
+msgstr[3] "%u байта/с"
+
+#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
+#: builtin/rebase.c:864
+#, c-format
+msgid "could not open '%s' for writing"
+msgstr "не удалось открыть «%s» для записи"
+
+#: strbuf.c:1175
+#, c-format
+msgid "could not edit '%s'"
+msgstr ""
+
+#: submodule-config.c:237
+#, c-format
+msgid "ignoring suspicious submodule name: %s"
+msgstr "игнорирую подозрительный подмодуль с именем: %s"
+
+#: submodule-config.c:304
+msgid "negative values not allowed for submodule.fetchjobs"
+msgstr "нельзя использовать отрицательные значения для submodule.fetchjobs"
+
+#: submodule-config.c:402
+#, c-format
+msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
+msgstr ""
+
+#: submodule-config.c:499
+#, c-format
+msgid "invalid value for %s"
+msgstr "неправильное значение %s"
+
+#: submodule-config.c:766
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr "Не удалось обновить .gitmodules запись %s"
 
 #: submodule.c:114 submodule.c:143
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
@@ -6592,62 +7759,137 @@
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Спецификатор пути «%s» в подмодуле «%.*s»"
 
-#: submodule.c:910
+#: submodule.c:434
+#, c-format
+msgid "bad --ignore-submodules argument: %s"
+msgstr ""
+
+#: submodule.c:816
+#, c-format
+msgid ""
+"Submodule in commit %s at path: '%s' collides with a submodule named the "
+"same. Skipping it."
+msgstr ""
+
+#: submodule.c:919
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "запись подмодуля «%s» (%s) является %s, а не является коммитом"
 
-#: submodule.c:1147 builtin/branch.c:672 builtin/submodule--helper.c:1988
+#: submodule.c:1004
+#, c-format
+msgid ""
+"Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
+"submodule %s"
+msgstr ""
+
+#: submodule.c:1127
+#, c-format
+msgid "process for submodule '%s' failed"
+msgstr ""
+
+#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Не удалось определить HEAD как действительную ссылку."
 
-#: submodule.c:1481
+#: submodule.c:1167
 #, c-format
-msgid "Could not access submodule '%s'"
+msgid "Pushing submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1651
+#: submodule.c:1170
+#, c-format
+msgid "Unable to push submodule '%s'\n"
+msgstr ""
+
+#: submodule.c:1462
+#, c-format
+msgid "Fetching submodule %s%s\n"
+msgstr ""
+
+#: submodule.c:1492
+#, c-format
+msgid "Could not access submodule '%s'\n"
+msgstr ""
+
+#: submodule.c:1646
+#, c-format
+msgid ""
+"Errors during submodule fetch:\n"
+"%s"
+msgstr ""
+
+#: submodule.c:1671
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "«%s» не распознан как репозиторий git"
 
-#: submodule.c:1789
+#: submodule.c:1688
+#, c-format
+msgid "Could not run 'git status --porcelain=2' in submodule %s"
+msgstr ""
+
+#: submodule.c:1729
+#, c-format
+msgid "'git status --porcelain=2' failed in submodule %s"
+msgstr ""
+
+#: submodule.c:1804
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "не удалось запустить «git status» в подмодуле «%s»"
 
-#: submodule.c:1802
+#: submodule.c:1817
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "не удалось запустить «git status» в подмодуле «%s»"
 
-#: submodule.c:1817
+#: submodule.c:1832
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1907
+#: submodule.c:1859 submodule.c:2169
+#, c-format
+msgid "could not recurse into submodule '%s'"
+msgstr "не удалось рекурсивно зайти в подмодуль «%s»"
+
+#: submodule.c:1880
+msgid "could not reset submodule index"
+msgstr ""
+
+#: submodule.c:1922
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "подмодуль «%s» имеет изменённый индекс"
 
-#: submodule.c:1959
+#: submodule.c:1974
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr ""
 
-#: submodule.c:2008
+#: submodule.c:2042
+#, c-format
+msgid "submodule git dir '%s' is inside git dir '%.*s'"
+msgstr ""
+
+#: submodule.c:2063
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr "relocate_gitdir для подмодуля «%s» с указанием более одного рабочего дерева не поддерживается"
 
-#: submodule.c:2020 submodule.c:2076
+#: submodule.c:2075 submodule.c:2134
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "не удалось запросить имя подмодуля «%s»"
 
-#: submodule.c:2027
+#: submodule.c:2079
+#, c-format
+msgid "refusing to move '%s' into an existing git dir"
+msgstr ""
+
+#: submodule.c:2086
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -6655,151 +7897,308 @@
 "'%s'\n"
 msgstr "Перемещение каталога git для «%s%s» из\n«%s» в\n«%s»\n"
 
-#: submodule.c:2111
-#, c-format
-msgid "could not recurse into submodule '%s'"
-msgstr "не удалось рекурсивно зайти в подмодуль «%s»"
-
-#: submodule.c:2155
+#: submodule.c:2214
 msgid "could not start ls-files in .."
 msgstr "не удалось выполнить stat ls-files в .."
 
-#: submodule.c:2194
+#: submodule.c:2254
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree вернул неожиданный код %d"
 
-#: submodule-config.c:232
-#, c-format
-msgid "ignoring suspicious submodule name: %s"
-msgstr "игнорирую подозрительный подмодуль с именем: %s"
-
-#: submodule-config.c:299
-msgid "negative values not allowed for submodule.fetchjobs"
-msgstr "нельзя использовать отрицательные значения для submodule.fetchjobs"
-
-#: submodule-config.c:397
-#, c-format
-msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
-msgstr ""
-
-#: submodule-config.c:486
-#, c-format
-msgid "invalid value for %s"
-msgstr "неправильное значение %s"
-
-#: submodule-config.c:755
-#, c-format
-msgid "Could not update .gitmodules entry %s"
-msgstr " Не удалось обновить .gitmodules запись %s"
-
-#: trailer.c:238
+#: trailer.c:236
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "сбой при запуске команды завершителя «%s»"
 
-#: trailer.c:485 trailer.c:490 trailer.c:495 trailer.c:549 trailer.c:553
-#: trailer.c:557
+#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
+#: trailer.c:555
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "неизвестное значение «%s» для ключа «%s»"
 
-#: trailer.c:539 trailer.c:544 builtin/remote.c:295
+#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "больше одного %s"
 
-#: trailer.c:730
+#: trailer.c:728
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "пустая последняя лексема в завершителе «%.*s»"
 
-#: trailer.c:750
+#: trailer.c:748
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "не удалось прочитать входной файл «%s»"
 
-#: trailer.c:753
+#: trailer.c:751
 msgid "could not read from stdin"
 msgstr "не удалось прочитать из стандартного ввода"
 
-#: trailer.c:1011 wrapper.c:701
+#: trailer.c:1009 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "не удалось выполнить stat для %s"
 
-#: trailer.c:1013
+#: trailer.c:1011
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "файл %s не является обычным файлом"
 
-#: trailer.c:1015
+#: trailer.c:1013
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "файл %s не доступен на запись пользователю"
 
-#: trailer.c:1027
+#: trailer.c:1025
 msgid "could not open temporary file"
 msgstr "не удалось создать временный файл"
 
-#: trailer.c:1067
+#: trailer.c:1065
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "не удалось переименовать временный файл в %s"
 
+#: transport-helper.c:62 transport-helper.c:91
+msgid "full write to remote helper failed"
+msgstr ""
+
+#: transport-helper.c:145
+#, c-format
+msgid "unable to find remote helper for '%s'"
+msgstr ""
+
+#: transport-helper.c:161 transport-helper.c:575
+msgid "can't dup helper output fd"
+msgstr ""
+
+#: transport-helper.c:214
+#, c-format
+msgid ""
+"unknown mandatory capability %s; this remote helper probably needs newer "
+"version of Git"
+msgstr ""
+
+#: transport-helper.c:220
+msgid "this remote helper should implement refspec capability"
+msgstr ""
+
+#: transport-helper.c:287 transport-helper.c:429
+#, c-format
+msgid "%s unexpectedly said: '%s'"
+msgstr ""
+
+#: transport-helper.c:417
+#, c-format
+msgid "%s also locked %s"
+msgstr ""
+
+#: transport-helper.c:497
+msgid "couldn't run fast-import"
+msgstr ""
+
+#: transport-helper.c:520
+msgid "error while running fast-import"
+msgstr ""
+
+#: transport-helper.c:549 transport-helper.c:1236
+#, c-format
+msgid "could not read ref %s"
+msgstr ""
+
+#: transport-helper.c:594
+#, c-format
+msgid "unknown response to connect: %s"
+msgstr ""
+
+#: transport-helper.c:616
+msgid "setting remote service path not supported by protocol"
+msgstr ""
+
+#: transport-helper.c:618
+msgid "invalid remote service path"
+msgstr ""
+
+#: transport-helper.c:661 transport.c:1446
+msgid "operation not supported by protocol"
+msgstr ""
+
+#: transport-helper.c:664
+#, c-format
+msgid "can't connect to subservice %s"
+msgstr ""
+
+#: transport-helper.c:745
+msgid "'option' without a matching 'ok/error' directive"
+msgstr ""
+
+#: transport-helper.c:788
+#, c-format
+msgid "expected ok/error, helper said '%s'"
+msgstr ""
+
+#: transport-helper.c:845
+#, c-format
+msgid "helper reported unexpected status of %s"
+msgstr ""
+
+#: transport-helper.c:928
+#, c-format
+msgid "helper %s does not support dry-run"
+msgstr ""
+
+#: transport-helper.c:931
+#, c-format
+msgid "helper %s does not support --signed"
+msgstr ""
+
+#: transport-helper.c:934
+#, c-format
+msgid "helper %s does not support --signed=if-asked"
+msgstr ""
+
+#: transport-helper.c:939
+#, c-format
+msgid "helper %s does not support --atomic"
+msgstr ""
+
+#: transport-helper.c:943
+#, c-format
+msgid "helper %s does not support --%s"
+msgstr ""
+
+#: transport-helper.c:950
+#, c-format
+msgid "helper %s does not support 'push-option'"
+msgstr ""
+
+#: transport-helper.c:1050
+msgid "remote-helper doesn't support push; refspec needed"
+msgstr ""
+
+#: transport-helper.c:1055
+#, c-format
+msgid "helper %s does not support 'force'"
+msgstr ""
+
+#: transport-helper.c:1102
+msgid "couldn't run fast-export"
+msgstr ""
+
+#: transport-helper.c:1107
+msgid "error while running fast-export"
+msgstr ""
+
+#: transport-helper.c:1132
+#, c-format
+msgid ""
+"No refs in common and none specified; doing nothing.\n"
+"Perhaps you should specify a branch.\n"
+msgstr ""
+
+#: transport-helper.c:1213
+#, c-format
+msgid "unsupported object format '%s'"
+msgstr ""
+
+#: transport-helper.c:1222
+#, c-format
+msgid "malformed response in ref list: %s"
+msgstr ""
+
+#: transport-helper.c:1374
+#, c-format
+msgid "read(%s) failed"
+msgstr ""
+
+#: transport-helper.c:1401
+#, c-format
+msgid "write(%s) failed"
+msgstr ""
+
+#: transport-helper.c:1450
+#, c-format
+msgid "%s thread failed"
+msgstr ""
+
+#: transport-helper.c:1454
+#, c-format
+msgid "%s thread failed to join: %s"
+msgstr ""
+
+#: transport-helper.c:1473 transport-helper.c:1477
+#, c-format
+msgid "can't start thread for copying data: %s"
+msgstr ""
+
+#: transport-helper.c:1514
+#, c-format
+msgid "%s process failed to wait"
+msgstr ""
+
+#: transport-helper.c:1518
+#, c-format
+msgid "%s process failed"
+msgstr ""
+
+#: transport-helper.c:1536 transport-helper.c:1545
+msgid "can't start thread for copying data"
+msgstr ""
+
 #: transport.c:116
 #, c-format
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Будет установлен вышестоящий репозиторий для «%s» на «%s» с «%s»\n"
 
-#: transport.c:142
+#: transport.c:145
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr ""
 
-#: transport.c:208
+#: transport.c:220
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "транспорт: неправильный параметр глубины «%s»"
 
-#: transport.c:259
+#: transport.c:269
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 
-#: transport.c:260
+#: transport.c:270
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:625
+#: transport.c:727
 msgid "could not parse transport.color.* config"
 msgstr "не удалось разобрать опцию transport.color.*"
 
-#: transport.c:698
+#: transport.c:802
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:825
+#: transport.c:936
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr ""
 
-#: transport.c:891
+#: transport.c:1002
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr ""
 
-#: transport.c:945
+#: transport.c:1055
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1040
+#: transport.c:1157
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr "Подмодули по указанным путям содержат изменения, которые не найдены ни на одном из внешних репозиториев:\n"
 
-#: transport.c:1044
+#: transport.c:1161
 #, c-format
 msgid ""
 "\n"
@@ -6815,384 +8214,227 @@
 "\n"
 msgstr "\nПопробуйте выполнить\n\n\tgit push --recurse-submodules=on-demand\n\nили перейти в каталог с помощью команды cd и выполнить\n\n\tgit push\n\nдля их отправки на внешний репозиторий.\n"
 
-#: transport.c:1052
+#: transport.c:1169
 msgid "Aborting."
 msgstr "Прерываю."
 
-#: transport.c:1193
+#: transport.c:1315
 msgid "failed to push all needed submodules"
 msgstr ""
 
-#: transport.c:1326 transport-helper.c:645
-msgid "operation not supported by protocol"
-msgstr ""
-
-#: transport.c:1430
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr ""
-
-#: transport-helper.c:51 transport-helper.c:80
-msgid "full write to remote helper failed"
-msgstr ""
-
-#: transport-helper.c:134
-#, c-format
-msgid "unable to find remote helper for '%s'"
-msgstr ""
-
-#: transport-helper.c:150 transport-helper.c:559
-msgid "can't dup helper output fd"
-msgstr ""
-
-#: transport-helper.c:201
-#, c-format
-msgid ""
-"unknown mandatory capability %s; this remote helper probably needs newer "
-"version of Git"
-msgstr ""
-
-#: transport-helper.c:207
-msgid "this remote helper should implement refspec capability"
-msgstr ""
-
-#: transport-helper.c:274 transport-helper.c:414
-#, c-format
-msgid "%s unexpectedly said: '%s'"
-msgstr ""
-
-#: transport-helper.c:403
-#, c-format
-msgid "%s also locked %s"
-msgstr ""
-
-#: transport-helper.c:481
-msgid "couldn't run fast-import"
-msgstr ""
-
-#: transport-helper.c:504
-msgid "error while running fast-import"
-msgstr ""
-
-#: transport-helper.c:533 transport-helper.c:1099
-#, c-format
-msgid "could not read ref %s"
-msgstr ""
-
-#: transport-helper.c:578
-#, c-format
-msgid "unknown response to connect: %s"
-msgstr ""
-
-#: transport-helper.c:600
-msgid "setting remote service path not supported by protocol"
-msgstr ""
-
-#: transport-helper.c:602
-msgid "invalid remote service path"
-msgstr ""
-
-#: transport-helper.c:648
-#, c-format
-msgid "can't connect to subservice %s"
-msgstr ""
-
-#: transport-helper.c:720
-#, c-format
-msgid "expected ok/error, helper said '%s'"
-msgstr ""
-
-#: transport-helper.c:773
-#, c-format
-msgid "helper reported unexpected status of %s"
-msgstr ""
-
-#: transport-helper.c:834
-#, c-format
-msgid "helper %s does not support dry-run"
-msgstr ""
-
-#: transport-helper.c:837
-#, c-format
-msgid "helper %s does not support --signed"
-msgstr ""
-
-#: transport-helper.c:840
-#, c-format
-msgid "helper %s does not support --signed=if-asked"
-msgstr ""
-
-#: transport-helper.c:847
-#, c-format
-msgid "helper %s does not support 'push-option'"
-msgstr ""
-
-#: transport-helper.c:939
-msgid "remote-helper doesn't support push; refspec needed"
-msgstr ""
-
-#: transport-helper.c:944
-#, c-format
-msgid "helper %s does not support 'force'"
-msgstr ""
-
-#: transport-helper.c:991
-msgid "couldn't run fast-export"
-msgstr ""
-
-#: transport-helper.c:996
-msgid "error while running fast-export"
-msgstr ""
-
-#: transport-helper.c:1021
-#, c-format
-msgid ""
-"No refs in common and none specified; doing nothing.\n"
-"Perhaps you should specify a branch such as 'master'.\n"
-msgstr ""
-
-#: transport-helper.c:1085
-#, c-format
-msgid "malformed response in ref list: %s"
-msgstr ""
-
-#: transport-helper.c:1238
-#, c-format
-msgid "read(%s) failed"
-msgstr ""
-
-#: transport-helper.c:1265
-#, c-format
-msgid "write(%s) failed"
-msgstr ""
-
-#: transport-helper.c:1314
-#, c-format
-msgid "%s thread failed"
-msgstr ""
-
-#: transport-helper.c:1318
-#, c-format
-msgid "%s thread failed to join: %s"
-msgstr ""
-
-#: transport-helper.c:1337 transport-helper.c:1341
-#, c-format
-msgid "can't start thread for copying data: %s"
-msgstr ""
-
-#: transport-helper.c:1378
-#, c-format
-msgid "%s process failed to wait"
-msgstr ""
-
-#: transport-helper.c:1382
-#, c-format
-msgid "%s process failed"
-msgstr ""
-
-#: transport-helper.c:1400 transport-helper.c:1409
-msgid "can't start thread for copying data"
-msgstr ""
-
-#: tree-walk.c:33
+#: tree-walk.c:32
 msgid "too-short tree object"
 msgstr "слишком  короткий объект дерева"
 
-#: tree-walk.c:39
+#: tree-walk.c:38
 msgid "malformed mode in tree entry"
 msgstr "неправильный режим в записи дерева"
 
-#: tree-walk.c:43
+#: tree-walk.c:42
 msgid "empty filename in tree entry"
 msgstr "пустое имя файла в записи дерева"
 
-#: tree-walk.c:116
+#: tree-walk.c:117
 msgid "too-short tree file"
 msgstr "слишком  короткий файл дерева"
 
-#: unpack-trees.c:111
+#: unpack-trees.c:113
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%sPlease commit your changes or stash them before you switch branches."
 msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние:\n%%sСделайте коммит или спрячьте ваши изменения перед переключением веток."
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%s"
 msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при переключении на состояние:\n%%s"
 
-#: unpack-trees.c:116
+#: unpack-trees.c:118
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%sPlease commit your changes or stash them before you merge."
 msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:\n%%sСделайте коммит или спрячьте ваши изменения перед слиянием веток."
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%s"
 msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:\n%%s"
 
-#: unpack-trees.c:121
+#: unpack-trees.c:123
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
 "%%sPlease commit your changes or stash them before you %s."
 msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при %s:\n%%sСделайте коммит или спрячьте ваши изменения перед %s."
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
 "%%s"
 msgstr "Ваши локальные изменения в указанных файлах будут перезаписаны при %s:\n%%s"
 
-#: unpack-trees.c:128
+#: unpack-trees.c:130
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
 "%s"
 msgstr "Обновление указанных каталогов приведет к потере неотслеживаемых файлов в них:\n%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:134
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при переключении на состояние:\n%%sПереместите эти файлы или удалите их перед переключением веток."
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%s"
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при переключении на состояние:\n%%s"
 
-#: unpack-trees.c:137
+#: unpack-trees.c:139
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при слиянии:\n%%sПереместите эти файлы или удалите их перед переключением веток."
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%s"
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при слиянии:\n%%s"
 
-#: unpack-trees.c:142
+#: unpack-trees.c:144
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при %s:\n%%sПереместите эти файлы или удалите их перед %s."
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%s"
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут удалены при %s:\n%%s"
 
-#: unpack-trees.c:150
+#: unpack-trees.c:152
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при переключении на состояние:\n%%sПереместите эти файлы или удалите их перед переключением веток."
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by checkout:\n"
 "%%s"
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при переключении на состояние:\n%%s"
 
-#: unpack-trees.c:155
+#: unpack-trees.c:157
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при слиянии:\n%%sПереместите эти файлы или удалите их перед переключением веток."
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%s"
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при слиянии:\n%%s"
 
-#: unpack-trees.c:160
+#: unpack-trees.c:162
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при %s:\n%%sПереместите эти файлы или удалите их перед %s."
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%s"
 msgstr "Указанные неотслеживаемые файлы в рабочем каталоге будут перезаписаны при %s:\n%%s"
 
-#: unpack-trees.c:170
+#: unpack-trees.c:172
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Запись «%s» частично совпадает с «%s».  Не удалось назначить соответствие."
 
-#: unpack-trees.c:173
-#, c-format
-msgid ""
-"Cannot update sparse checkout: the following entries are not up to date:\n"
-"%s"
-msgstr "Не удалось обновить частичное состояние: следующие элементы не последней версии:\n%s"
-
 #: unpack-trees.c:175
 #, c-format
 msgid ""
-"The following working tree files would be overwritten by sparse checkout update:\n"
-"%s"
-msgstr "Указанные файлы из рабочего каталога будут перезаписаны при обновлении частичного состояния:\n%s"
-
-#: unpack-trees.c:177
-#, c-format
-msgid ""
-"The following working tree files would be removed by sparse checkout update:\n"
-"%s"
-msgstr "Указанные файлы из рабочего каталога будут удалены при обновлении частичного состояния:\n%s"
-
-#: unpack-trees.c:179
-#, c-format
-msgid ""
 "Cannot update submodule:\n"
 "%s"
 msgstr "Не удолось обновить подмодуль:\n%s"
 
-#: unpack-trees.c:256
+#: unpack-trees.c:178
+#, c-format
+msgid ""
+"The following paths are not up to date and were left despite sparse patterns:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:180
+#, c-format
+msgid ""
+"The following paths are unmerged and were left despite sparse patterns:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:182
+#, c-format
+msgid ""
+"The following paths were already present and thus not updated despite sparse patterns:\n"
+"%s"
+msgstr ""
+
+#: unpack-trees.c:262
 #, c-format
 msgid "Aborting\n"
 msgstr "Прерываю\n"
 
-#: unpack-trees.c:318
-msgid "Checking out files"
-msgstr "Распаковка файлов"
+#: unpack-trees.c:289
+#, c-format
+msgid ""
+"After fixing the above paths, you may want to run `git sparse-checkout "
+"reapply`.\n"
+msgstr "После исправления указанных путей вы можете запустить «git sparse-checkout reapply».\n"
 
 #: unpack-trees.c:350
+msgid "Updating files"
+msgstr ""
+
+#: unpack-trees.c:382
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
 "colliding group is in the working tree:\n"
 msgstr ""
 
+#: unpack-trees.c:1498
+msgid "Updating index flags"
+msgstr ""
+
+#: upload-pack.c:1550
+msgid "expected flush after fetch arguments"
+msgstr ""
+
 #: urlmatch.c:163
 msgid "invalid URL scheme name or missing '://' suffix"
 msgstr "Неправильная имя URL схемы или пропущен суффикс «://»"
@@ -7222,179 +8464,221 @@
 msgid "invalid '..' path segment"
 msgstr "неправильная часть пути «..»"
 
-#: worktree.c:255 builtin/am.c:2097
+#: walker.c:170
+msgid "Fetching objects"
+msgstr ""
+
+#: worktree.c:236 builtin/am.c:2103
 #, c-format
 msgid "failed to read '%s'"
 msgstr "не удалось прочитать «%s»"
 
-#: worktree.c:301
+#: worktree.c:283
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr ""
 
-#: worktree.c:312
+#: worktree.c:294
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 
-#: worktree.c:324
+#: worktree.c:306
 #, c-format
 msgid "'%s' does not exist"
 msgstr "«%s» не существует"
 
-#: worktree.c:330
+#: worktree.c:312
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr ""
 
-#: worktree.c:338
+#: worktree.c:321
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr ""
 
-#: wrapper.c:223 wrapper.c:393
+#: worktree.c:587
+msgid "not a directory"
+msgstr ""
+
+#: worktree.c:596
+msgid ".git is not a file"
+msgstr ""
+
+#: worktree.c:598
+msgid ".git file broken"
+msgstr ""
+
+#: worktree.c:600
+msgid ".git file incorrect"
+msgstr ""
+
+#: worktree.c:670
+msgid "not a valid path"
+msgstr ""
+
+#: worktree.c:676
+msgid "unable to locate repository; .git is not a file"
+msgstr ""
+
+#: worktree.c:679
+msgid "unable to locate repository; .git file broken"
+msgstr ""
+
+#: worktree.c:685
+msgid "gitdir unreadable"
+msgstr ""
+
+#: worktree.c:689
+msgid "gitdir incorrect"
+msgstr ""
+
+#: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "не удалось открыть «%s» для чтения и записи"
 
-#: wrapper.c:424 wrapper.c:624
+#: wrapper.c:398 wrapper.c:599
 #, c-format
 msgid "unable to access '%s'"
 msgstr "«%s» недоступно"
 
-#: wrapper.c:632
+#: wrapper.c:607
 msgid "unable to get current working directory"
 msgstr "не удалось получить текущий рабочий каталог"
 
-#: wt-status.c:156
+#: wt-status.c:158
 msgid "Unmerged paths:"
 msgstr "Не слитые пути:"
 
-#: wt-status.c:183 wt-status.c:210
-#, c-format
-msgid "  (use \"git reset %s <file>...\" to unstage)"
-msgstr "  (используйте «git reset %s <файл>…», чтобы убрать из индекса)"
+#: wt-status.c:187 wt-status.c:219
+msgid "  (use \"git restore --staged <file>...\" to unstage)"
+msgstr "  (используйте «git restore --staged <файл>…», чтобы убрать из индекса)"
 
-#: wt-status.c:185 wt-status.c:212
+#: wt-status.c:190 wt-status.c:222
+#, c-format
+msgid "  (use \"git restore --source=%s --staged <file>...\" to unstage)"
+msgstr "  (используйте «git restore --source=%s --staged <файл>…», чтобы убрать из индекса)"
+
+#: wt-status.c:193 wt-status.c:225
 msgid "  (use \"git rm --cached <file>...\" to unstage)"
 msgstr "  (используйте «git rm --cached <файл>…», чтобы убрать из индекса)"
 
-#: wt-status.c:189
+#: wt-status.c:197
 msgid "  (use \"git add <file>...\" to mark resolution)"
 msgstr "  (используйте «git add <файл>…», чтобы пометить разрешение конфликта)"
 
-#: wt-status.c:191 wt-status.c:195
+#: wt-status.c:199 wt-status.c:203
 msgid "  (use \"git add/rm <file>...\" as appropriate to mark resolution)"
 msgstr "  (используйте «git add/rm <файл>…», чтобы пометить выбранное разрешение конфликта)"
 
-#: wt-status.c:193
+#: wt-status.c:201
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (используйте «git rm <файл>…», чтобы пометить разрешение конфликта)"
 
-#: wt-status.c:204 wt-status.c:1064
+#: wt-status.c:211 wt-status.c:1070
 msgid "Changes to be committed:"
 msgstr "Изменения, которые будут включены в коммит:"
 
-#: wt-status.c:222 wt-status.c:1073
+#: wt-status.c:234 wt-status.c:1079
 msgid "Changes not staged for commit:"
 msgstr "Изменения, которые не в индексе для коммита:"
 
-#: wt-status.c:226
+#: wt-status.c:238
 msgid "  (use \"git add <file>...\" to update what will be committed)"
 msgstr "  (используйте «git add <файл>…», чтобы добавить файл в индекс)"
 
-#: wt-status.c:228
+#: wt-status.c:240
 msgid "  (use \"git add/rm <file>...\" to update what will be committed)"
 msgstr "  (используйте «git add/rm <файл>…», чтобы добавить или удалить файл из индекса)"
 
-#: wt-status.c:229
-msgid ""
-"  (use \"git checkout -- <file>...\" to discard changes in working "
-"directory)"
-msgstr "  (используйте «git checkout -- <файл>…», чтобы отменить изменения\n   в рабочем каталоге)"
+#: wt-status.c:241
+msgid "  (use \"git restore <file>...\" to discard changes in working directory)"
+msgstr "  (используйте «git restore <файл>…», чтобы отменить изменения в рабочем каталоге)"
 
-#: wt-status.c:231
+#: wt-status.c:243
 msgid "  (commit or discard the untracked or modified content in submodules)"
 msgstr "  (сделайте коммит или отмените изменения в неотслеживаемом или измененном содержимом в подмодулях)"
 
-#: wt-status.c:243
+#: wt-status.c:254
 #, c-format
 msgid "  (use \"git %s <file>...\" to include in what will be committed)"
 msgstr "  (используйте «git %s <файл>…», чтобы добавить в то, что будет включено в коммит)"
 
-#: wt-status.c:258
+#: wt-status.c:266
 msgid "both deleted:"
 msgstr "оба удалены:"
 
-#: wt-status.c:260
+#: wt-status.c:268
 msgid "added by us:"
 msgstr "добавлено нами:"
 
-#: wt-status.c:262
+#: wt-status.c:270
 msgid "deleted by them:"
 msgstr "удалено ими:"
 
-#: wt-status.c:264
+#: wt-status.c:272
 msgid "added by them:"
 msgstr "добавлено ими:"
 
-#: wt-status.c:266
+#: wt-status.c:274
 msgid "deleted by us:"
 msgstr "удалено нами:"
 
-#: wt-status.c:268
+#: wt-status.c:276
 msgid "both added:"
 msgstr "оба добавлены:"
 
-#: wt-status.c:270
+#: wt-status.c:278
 msgid "both modified:"
 msgstr "оба изменены:"
 
-#: wt-status.c:280
+#: wt-status.c:288
 msgid "new file:"
 msgstr "новый файл:"
 
-#: wt-status.c:282
+#: wt-status.c:290
 msgid "copied:"
 msgstr "скопировано:"
 
-#: wt-status.c:284
+#: wt-status.c:292
 msgid "deleted:"
 msgstr "удалено:"
 
-#: wt-status.c:286
+#: wt-status.c:294
 msgid "modified:"
 msgstr "изменено:"
 
-#: wt-status.c:288
+#: wt-status.c:296
 msgid "renamed:"
 msgstr "переименовано:"
 
-#: wt-status.c:290
+#: wt-status.c:298
 msgid "typechange:"
 msgstr "изменен тип:"
 
-#: wt-status.c:292
+#: wt-status.c:300
 msgid "unknown:"
 msgstr "неизвестно:"
 
-#: wt-status.c:294
+#: wt-status.c:302
 msgid "unmerged:"
 msgstr "не слитые:"
 
-#: wt-status.c:374
+#: wt-status.c:382
 msgid "new commits, "
 msgstr "новые коммиты, "
 
-#: wt-status.c:376
+#: wt-status.c:384
 msgid "modified content, "
 msgstr "изменено содержимое, "
 
-#: wt-status.c:378
+#: wt-status.c:386
 msgid "untracked content, "
 msgstr "неотслеживаемое содержимое, "
 
-#: wt-status.c:896
+#: wt-status.c:903
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
@@ -7403,69 +8687,77 @@
 msgstr[2] "У вас сейчас спрятано %d записей"
 msgstr[3] "У вас сейчас спрятаны %d записи"
 
-#: wt-status.c:928
+#: wt-status.c:934
 msgid "Submodules changed but not updated:"
 msgstr "Измененные, но не обновленные подмодули:"
 
-#: wt-status.c:930
+#: wt-status.c:936
 msgid "Submodule changes to be committed:"
 msgstr "Изменения в подмодулях, которые будут закоммичены:"
 
-#: wt-status.c:1012
+#: wt-status.c:1018
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
 msgstr "Не изменяйте или удаляйте строку выше этой.\nВсё, что ниже — будет проигнорировано."
 
-#: wt-status.c:1119
+#: wt-status.c:1110
+#, c-format
+msgid ""
+"\n"
+"It took %.2f seconds to compute the branch ahead/behind values.\n"
+"You can use '--no-ahead-behind' to avoid this.\n"
+msgstr ""
+
+#: wt-status.c:1140
 msgid "You have unmerged paths."
 msgstr "У вас есть не слитые пути."
 
-#: wt-status.c:1122
+#: wt-status.c:1143
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (разрешите конфликты, затем запустите «git commit»)"
 
-#: wt-status.c:1124
+#: wt-status.c:1145
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (используйте «git merge --abort», чтобы остановить операцию слияния)"
 
-#: wt-status.c:1128
+#: wt-status.c:1149
 msgid "All conflicts fixed but you are still merging."
 msgstr "Все конфликты исправлены, но вы все еще в процессе слияния."
 
-#: wt-status.c:1131
+#: wt-status.c:1152
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (используйте «git commit», чтобы завершить слияние)"
 
-#: wt-status.c:1140
+#: wt-status.c:1161
 msgid "You are in the middle of an am session."
 msgstr "Вы в процессе сессии am."
 
-#: wt-status.c:1143
+#: wt-status.c:1164
 msgid "The current patch is empty."
 msgstr "Текущий патч пустой."
 
-#: wt-status.c:1147
+#: wt-status.c:1168
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git am --continue»)"
 
-#: wt-status.c:1149
+#: wt-status.c:1170
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (используйте «git am --skip», чтобы пропустить этот патч)"
 
-#: wt-status.c:1151
+#: wt-status.c:1172
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (используйте «git am --abort», чтобы восстановить оригинальную ветку)"
 
-#: wt-status.c:1284
+#: wt-status.c:1305
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo отсутствует."
 
-#: wt-status.c:1286
+#: wt-status.c:1307
 msgid "No commands done."
 msgstr "Команды не выполнены."
 
-#: wt-status.c:1289
+#: wt-status.c:1310
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
@@ -7474,16 +8766,16 @@
 msgstr[2] "Последняя команда выполнена (%d команд выполнено):"
 msgstr[3] "Последняя команда выполнена (%d команд выполнено):"
 
-#: wt-status.c:1300
+#: wt-status.c:1321
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (смотрите дополнительно в файле %s)"
 
-#: wt-status.c:1305
+#: wt-status.c:1326
 msgid "No commands remaining."
 msgstr "Команд больше не осталось."
 
-#: wt-status.c:1308
+#: wt-status.c:1329
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
@@ -7492,170 +8784,175 @@
 msgstr[2] "Следующая команда для выполнения (%d команд осталось):"
 msgstr[3] "Следующая команда для выполнения (%d команд осталось):"
 
-#: wt-status.c:1316
+#: wt-status.c:1337
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
-msgstr "  (используйте «git rebase --edit-todo», чтобы просмотреть и изменить)"
+msgstr "  (используйте «git rebase --edit-todo», чтобы просмотреть или изменить их)"
 
-#: wt-status.c:1328
+#: wt-status.c:1349
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Вы сейчас перемещаете ветку «%s» над «%s»."
 
-#: wt-status.c:1333
+#: wt-status.c:1354
 msgid "You are currently rebasing."
 msgstr "Вы сейчас перемещаете ветку."
 
-#: wt-status.c:1346
+#: wt-status.c:1367
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git rebase --continue»)"
 
-#: wt-status.c:1348
+#: wt-status.c:1369
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (используйте «git rebase --skip», чтобы пропустить этот патч)"
 
-#: wt-status.c:1350
+#: wt-status.c:1371
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (используйте «git rebase --abort», чтобы перейти на оригинальную ветку)"
 
-#: wt-status.c:1357
+#: wt-status.c:1378
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (все конфликты разрешены: запустите «git rebase --continue»)"
 
-#: wt-status.c:1361
+#: wt-status.c:1382
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "Вы сейчас разделяете коммит при перемещении ветки  «%s» над «%s»."
 
-#: wt-status.c:1366
+#: wt-status.c:1387
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Вы сейчас разделяете коммит при перемещении ветки."
 
-#: wt-status.c:1369
+#: wt-status.c:1390
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
-msgstr "(Как только ваш рабочий каталог будет чистый, запустите «git rebase --continue»)"
+msgstr "  (Как только ваш рабочий каталог будет чистый, запустите «git rebase --continue»)"
 
-#: wt-status.c:1373
+#: wt-status.c:1394
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "Вы сейчас редактируете коммит при перемещении ветки  «%s» над «%s»."
 
-#: wt-status.c:1378
+#: wt-status.c:1399
 msgid "You are currently editing a commit during a rebase."
 msgstr "Вы сейчас редактируете коммит при перемещении ветки."
 
-#: wt-status.c:1381
+#: wt-status.c:1402
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (используйте «git commit --amend», чтобы исправить текущий коммит)"
 
-#: wt-status.c:1383
+#: wt-status.c:1404
 msgid "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (используйте «git rebase --continue», когда будете довольны изменениями)"
 
-#: wt-status.c:1394
+#: wt-status.c:1415
 msgid "Cherry-pick currently in progress."
 msgstr ""
 
-#: wt-status.c:1397
+#: wt-status.c:1418
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Вы копируете коммит %s."
 
-#: wt-status.c:1404
+#: wt-status.c:1425
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git cherry-pick --continue»)"
 
-#: wt-status.c:1407
+#: wt-status.c:1428
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1410
+#: wt-status.c:1431
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (все конфликты разрешены: запустите «git cherry-pick --continue»)"
 
-#: wt-status.c:1412
+#: wt-status.c:1433
+msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
+msgstr ""
+
+#: wt-status.c:1435
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (используйте «git cherry-pick --abort», чтобы отменить копирования коммита)"
 
-#: wt-status.c:1422
+#: wt-status.c:1445
 msgid "Revert currently in progress."
 msgstr ""
 
-#: wt-status.c:1425
+#: wt-status.c:1448
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Вы сейчас обращаете изменения коммита %s."
 
-#: wt-status.c:1431
+#: wt-status.c:1454
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (разрешите конфликты, затем запустите «git revert --continue»)"
 
-#: wt-status.c:1434
+#: wt-status.c:1457
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1437
+#: wt-status.c:1460
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (все конфликты разрешены: запустите «git revert --continue»)"
 
-#: wt-status.c:1439
+#: wt-status.c:1462
+msgid "  (use \"git revert --skip\" to skip this patch)"
+msgstr ""
+
+#: wt-status.c:1464
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (используйте «git revert --abort», чтобы отменить операцию обращения изменений коммита)"
 
-#: wt-status.c:1449
+#: wt-status.c:1474
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Вы сейчас в процессе двоичного поиска, начатого с ветки «%s»."
 
-#: wt-status.c:1453
+#: wt-status.c:1478
 msgid "You are currently bisecting."
 msgstr "Вы сейчас в процессе двоичного поиска."
 
-#: wt-status.c:1456
+#: wt-status.c:1481
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (используйте «git bisect reset», чтобы вернуться на исходную ветку)"
 
-#: wt-status.c:1665
+#: wt-status.c:1492
+#, c-format
+msgid "You are in a sparse checkout with %d%% of tracked files present."
+msgstr ""
+
+#: wt-status.c:1731
 msgid "On branch "
 msgstr "На ветке "
 
-#: wt-status.c:1672
+#: wt-status.c:1738
 msgid "interactive rebase in progress; onto "
 msgstr "интерактивное перемещение в процессе; над "
 
-#: wt-status.c:1674
+#: wt-status.c:1740
 msgid "rebase in progress; onto "
 msgstr "перемещение в процессе; над "
 
-#: wt-status.c:1679
-msgid "HEAD detached at "
-msgstr "HEAD отделён на "
-
-#: wt-status.c:1681
-msgid "HEAD detached from "
-msgstr "HEAD отделён начиная с "
-
-#: wt-status.c:1684
+#: wt-status.c:1750
 msgid "Not currently on any branch."
 msgstr "Сейчас ни на одной из веток"
 
-#: wt-status.c:1701
+#: wt-status.c:1767
 msgid "Initial commit"
 msgstr "Начальный коммит"
 
-#: wt-status.c:1702
+#: wt-status.c:1768
 msgid "No commits yet"
 msgstr "Еще нет коммитов"
 
-#: wt-status.c:1716
+#: wt-status.c:1782
 msgid "Untracked files"
 msgstr "Неотслеживаемые файлы"
 
-#: wt-status.c:1718
+#: wt-status.c:1784
 msgid "Ignored files"
 msgstr "Игнорируемые файлы"
 
-#: wt-status.c:1722
+#: wt-status.c:1788
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -7663,216 +8960,225 @@
 "new files yourself (see 'git help status')."
 msgstr "%.2f секунды занял вывод списка неотслеживаемых файлов. «status -uno» возможно может ускорить это, но будьте внимательны, и не забудьте добавить новые файлы вручную (смотрите «git help status» для подробностей)."
 
-#: wt-status.c:1728
+#: wt-status.c:1794
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Неотслеживаемые файлы не показаны%s"
 
-#: wt-status.c:1730
+#: wt-status.c:1796
 msgid " (use -u option to show untracked files)"
-msgstr "(используйте опцию «-u», чтобы показать неотслеживаемые файлы)"
+msgstr " (используйте опцию «-u», чтобы показать неотслеживаемые файлы)"
 
-#: wt-status.c:1736
+#: wt-status.c:1802
 msgid "No changes"
 msgstr "Нет изменений"
 
-#: wt-status.c:1741
+#: wt-status.c:1807
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "нет изменений добавленных для коммита\n(используйте «git add» и/или «git commit -a»)\n"
 
-#: wt-status.c:1744
+#: wt-status.c:1811
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "нет изменений добавленных для коммита\n"
 
-#: wt-status.c:1747
+#: wt-status.c:1815
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "ничего не добавлено в коммит, но есть неотслеживаемые файлы (используйте «git add», чтобы отслеживать их)\n"
 
-#: wt-status.c:1750
+#: wt-status.c:1819
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "ничего не добавлено в коммит, но есть неотслеживаемые файлы\n"
 
-#: wt-status.c:1753
+#: wt-status.c:1823
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "нечего коммитить (создайте/скопируйте файлы, затем запустите «git add», чтобы отслеживать их)\n"
 
-#: wt-status.c:1756 wt-status.c:1761
+#: wt-status.c:1827 wt-status.c:1833
 #, c-format
 msgid "nothing to commit\n"
 msgstr "нечего коммитить\n"
 
-#: wt-status.c:1759
+#: wt-status.c:1830
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "нечего коммитить (используйте опцию «-u», чтобы показать неотслеживаемые файлы)\n"
 
-#: wt-status.c:1763
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "нечего коммитить, нет изменений в рабочем каталоге\n"
 
-#: wt-status.c:1876
+#: wt-status.c:1940
 msgid "No commits yet on "
-msgstr "Еще нет коммитов в"
+msgstr "Еще нет коммитов в "
 
-#: wt-status.c:1880
+#: wt-status.c:1944
 msgid "HEAD (no branch)"
 msgstr "HEAD (нет ветки)"
 
-#: wt-status.c:1911
+#: wt-status.c:1975
 msgid "different"
 msgstr "отличается"
 
-#: wt-status.c:1913 wt-status.c:1921
+#: wt-status.c:1977 wt-status.c:1985
 msgid "behind "
-msgstr "позади"
+msgstr "позади "
 
-#: wt-status.c:1916 wt-status.c:1919
+#: wt-status.c:1980 wt-status.c:1983
 msgid "ahead "
 msgstr "впереди "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2443
+#: wt-status.c:2505
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "не удалось выполнить %s: У вас есть непроиндексированные изменения."
 
-#: wt-status.c:2449
+#: wt-status.c:2511
 msgid "additionally, your index contains uncommitted changes."
 msgstr "к тому же, в вашем индексе есть незакоммиченные изменения."
 
-#: wt-status.c:2451
+#: wt-status.c:2513
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "не удалось выполнить %s: В вашем индексе есть незакоммиченные изменения."
 
-#: builtin/add.c:25
+#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "сбой отсоединения «%s»"
+
+#: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<опции>] [--] <спецификатор-пути>…"
 
-#: builtin/add.c:84
+#: builtin/add.c:88
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "неожиданный статус утилиты сравнения %c"
 
-#: builtin/add.c:89 builtin/commit.c:285
+#: builtin/add.c:93 builtin/commit.c:285
 msgid "updating files failed"
 msgstr "сбой при обновлении файлов"
 
-#: builtin/add.c:99
+#: builtin/add.c:103
 #, c-format
 msgid "remove '%s'\n"
 msgstr "удалить «%s»\n"
 
-#: builtin/add.c:174
+#: builtin/add.c:178
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Непроиндексированные изменения после обновления индекса:"
 
-#: builtin/add.c:234 builtin/rev-parse.c:896
+#: builtin/add.c:272 builtin/rev-parse.c:908
 msgid "Could not read the index"
 msgstr "Не удалось прочитать индекс"
 
-#: builtin/add.c:245
+#: builtin/add.c:283
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Не удалось открыть «%s» для записи."
 
-#: builtin/add.c:249
+#: builtin/add.c:287
 msgid "Could not write patch"
 msgstr "Не удалось записать патч"
 
-#: builtin/add.c:252
+#: builtin/add.c:290
 msgid "editing patch failed"
 msgstr "сбой при редактировании патча"
 
-#: builtin/add.c:255
+#: builtin/add.c:293
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Не удалось выполнить stat для «%s»"
 
-#: builtin/add.c:257
+#: builtin/add.c:295
 msgid "Empty patch. Aborted."
 msgstr "Пустой патч. Операция прервана."
 
-#: builtin/add.c:262
+#: builtin/add.c:300
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Не удалось применить «%s»"
 
-#: builtin/add.c:270
+#: builtin/add.c:308
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Следующие пути игнорируются одним из ваших файлов .gitignore:\n"
 
-#: builtin/add.c:290 builtin/clean.c:908 builtin/fetch.c:137 builtin/mv.c:124
-#: builtin/prune-packed.c:56 builtin/pull.c:221 builtin/push.c:560
-#: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
+#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:559
+#: builtin/remote.c:1427 builtin/rm.c:242 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "пробный запуск"
 
-#: builtin/add.c:293
+#: builtin/add.c:331
 msgid "interactive picking"
 msgstr "интерактивный выбор"
 
-#: builtin/add.c:294 builtin/checkout.c:1379 builtin/reset.c:306
+#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "интерактивный выбор блоков"
 
-#: builtin/add.c:295
+#: builtin/add.c:333
 msgid "edit current diff and apply"
 msgstr "отредактировать текущий файл списка изменений и применить его"
 
-#: builtin/add.c:296
+#: builtin/add.c:334
 msgid "allow adding otherwise ignored files"
 msgstr "разрешить добавление игнорируемых иначе файлов"
 
-#: builtin/add.c:297
+#: builtin/add.c:335
 msgid "update tracked files"
 msgstr "обновить отслеживаемые файлы"
 
-#: builtin/add.c:298
+#: builtin/add.c:336
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "перенормализировать концы строк (EOL) отслеживаемых файлов (подразумевает -u)"
 
-#: builtin/add.c:299
+#: builtin/add.c:337
 msgid "record only the fact that the path will be added later"
 msgstr "записать только факт, что путь будет добавлен позже"
 
-#: builtin/add.c:300
+#: builtin/add.c:338
 msgid "add changes from all tracked and untracked files"
 msgstr "добавить изменения из всех отслеживаемых и неотслеживаемых файлов"
 
-#: builtin/add.c:303
+#: builtin/add.c:341
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "игнорировать пути удаленные из рабочего каталога (тоже, что и --no-all)"
 
-#: builtin/add.c:305
+#: builtin/add.c:343
 msgid "don't add, only refresh the index"
 msgstr "не добавлять, только обновить индекс"
 
-#: builtin/add.c:306
+#: builtin/add.c:344
 msgid "just skip files which cannot be added because of errors"
 msgstr "пропускать файлы, которые не могут быть добавлены из-за ошибок"
 
-#: builtin/add.c:307
+#: builtin/add.c:345
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "удостовериться, что даже недостающие файлы будут проигнорированы при  пробном запуске"
 
-#: builtin/add.c:309 builtin/update-index.c:1001
+#: builtin/add.c:347 builtin/update-index.c:1004
 msgid "override the executable bit of the listed files"
 msgstr "переопределить бит выполнения на указанных файлах"
 
-#: builtin/add.c:311
+#: builtin/add.c:349
 msgid "warn when adding an embedded repository"
 msgstr "предупреждать при добавлении встроенного git репозитория"
 
-#: builtin/add.c:326
+#: builtin/add.c:351
+msgid "backend for `git stash -p`"
+msgstr ""
+
+#: builtin/add.c:369
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -7890,399 +9196,434 @@
 "See \"git help submodule\" for more information."
 msgstr "Вы добавили другой репозиторий git внутри текущего репозитория\nКлоны внешнего репозитория не будут содержать внутренний\nрепозиторий и не будут знать как его получить.\nЕсли вы хотели добавить подмодуль, то запустите:\n\n\tgit submodule add <url> %s\n\nЕсли бы добавили этот путь по ошибке, то вы можете удалить его\nиз индекса с помощью:\n\n\tgit rm --cached %s\n\nДля дополнительной информации смотрите «git help submodule»."
 
-#: builtin/add.c:354
+#: builtin/add.c:397
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "добавление встроенного git репозитория: %s"
 
-#: builtin/add.c:372
-#, c-format
-msgid "Use -f if you really want to add them.\n"
-msgstr "Используйте -f, если вы действительно хотите добавить их.\n"
+#: builtin/add.c:416
+msgid ""
+"Use -f if you really want to add them.\n"
+"Turn this message off by running\n"
+"\"git config advice.addIgnoredFile false\""
+msgstr ""
 
-#: builtin/add.c:379
+#: builtin/add.c:425
 msgid "adding files failed"
 msgstr "ошибка при добавлении файлов"
 
-#: builtin/add.c:419
+#: builtin/add.c:453 builtin/commit.c:345
+msgid "--pathspec-from-file is incompatible with --interactive/--patch"
+msgstr ""
+
+#: builtin/add.c:470
+msgid "--pathspec-from-file is incompatible with --edit"
+msgstr ""
+
+#: builtin/add.c:482
 msgid "-A and -u are mutually incompatible"
 msgstr "-A и -u нельзя использовать одновременно"
 
-#: builtin/add.c:426
+#: builtin/add.c:485
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "Опция --ignore-missing может использоваться только вместе с --dry-run"
 
-#: builtin/add.c:430
+#: builtin/add.c:489
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "параметр --chmod «%s» должен быть -x или +x"
 
-#: builtin/add.c:445
+#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
+#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+msgid "--pathspec-from-file is incompatible with pathspec arguments"
+msgstr ""
+
+#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
+#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+msgid "--pathspec-file-nul requires --pathspec-from-file"
+msgstr ""
+
+#: builtin/add.c:518
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Ничего не указано, ничего не добавлено.\n"
 
-#: builtin/add.c:446
-#, c-format
-msgid "Maybe you wanted to say 'git add .'?\n"
-msgstr "Возможно, вы имели в виду «git add .»?\n"
+#: builtin/add.c:520
+msgid ""
+"Maybe you wanted to say 'git add .'?\n"
+"Turn this message off by running\n"
+"\"git config advice.addEmptyPathspec false\""
+msgstr ""
 
-#: builtin/am.c:348
+#: builtin/am.c:352
 msgid "could not parse author script"
 msgstr "не удалось разобрать сценарий авторства"
 
-#: builtin/am.c:432
+#: builtin/am.c:436
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "«%s» был удален перехватчиком applypatch-msg"
 
-#: builtin/am.c:474
+#: builtin/am.c:478
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Неправильная строка ввода: «%s»."
 
-#: builtin/am.c:512
+#: builtin/am.c:516
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Не удалось скопировать заметку из «%s» в «%s»"
 
-#: builtin/am.c:538
+#: builtin/am.c:542
 msgid "fseek failed"
 msgstr "сбой при выполнении fseek"
 
-#: builtin/am.c:726
+#: builtin/am.c:730
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "не удалось разобрать патч «%s»"
 
-#: builtin/am.c:791
+#: builtin/am.c:795
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Только серия патчей StGIT может быть применена за раз"
 
-#: builtin/am.c:839
+#: builtin/am.c:843
 msgid "invalid timestamp"
 msgstr "недопустимая метка даты/времени"
 
-#: builtin/am.c:844 builtin/am.c:856
+#: builtin/am.c:848 builtin/am.c:860
 msgid "invalid Date line"
 msgstr "недопустимая строка даты"
 
-#: builtin/am.c:851
+#: builtin/am.c:855
 msgid "invalid timezone offset"
 msgstr "недопустимое смещение часового пояса"
 
-#: builtin/am.c:944
+#: builtin/am.c:948
 msgid "Patch format detection failed."
 msgstr "Сбой определения формата патча."
 
-#: builtin/am.c:949 builtin/clone.c:409
+#: builtin/am.c:953 builtin/clone.c:410
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "не удалось создать каталог «%s»"
 
-#: builtin/am.c:954
+#: builtin/am.c:958
 msgid "Failed to split patches."
 msgstr "Не удалось разделить патчи на части."
 
-#: builtin/am.c:1084 builtin/commit.c:371
-msgid "unable to write index file"
-msgstr "не удалось записать индекс"
-
-#: builtin/am.c:1098
+#: builtin/am.c:1089
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Когда вы устраните эту проблему, запустите «%s --continue»."
 
-#: builtin/am.c:1099
+#: builtin/am.c:1090
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Если вы хотите пропустить этот патч, то запустите «%s --skip»."
 
-#: builtin/am.c:1100
+#: builtin/am.c:1091
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "Чтобы вернуться на предыдущую ветку и остановить применение изменений, запустите «%s --abort»."
 
-#: builtin/am.c:1183
+#: builtin/am.c:1174
 msgid ""
 "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 
-#: builtin/am.c:1211
+#: builtin/am.c:1202
 msgid "Patch is empty."
 msgstr "Патч пустой."
 
-#: builtin/am.c:1277
+#: builtin/am.c:1267
+#, c-format
+msgid "missing author line in commit %s"
+msgstr ""
+
+#: builtin/am.c:1270
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "неправильная строка идентификации: %.*s"
 
-#: builtin/am.c:1299
-#, c-format
-msgid "unable to parse commit %s"
-msgstr "не удалось разобрать коммит %s"
-
-#: builtin/am.c:1495
+#: builtin/am.c:1489
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "В репозитории отсутствуют двоичные объекты, необходимые для отката к трехходовому слиянию."
 
-#: builtin/am.c:1497
+#: builtin/am.c:1491
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Использую индекс для реконструкции базового дерева…"
 
-#: builtin/am.c:1516
+#: builtin/am.c:1510
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr "Вы вручную изменяли патч?\nОн не накладывается без ошибок на двоичные объекты, записанные в его заголовке."
 
-#: builtin/am.c:1522
+#: builtin/am.c:1516
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Откат к применению изменений к базовому коммиту с помощью трехходового слияния…"
 
-#: builtin/am.c:1548
+#: builtin/am.c:1542
 msgid "Failed to merge in the changes."
 msgstr "Не удалось слить изменения."
 
-#: builtin/am.c:1580
+#: builtin/am.c:1574
 msgid "applying to an empty history"
 msgstr "применение к пустой истории"
 
-#: builtin/am.c:1627 builtin/am.c:1631
+#: builtin/am.c:1626 builtin/am.c:1630
 #, c-format
 msgid "cannot resume: %s does not exist."
-msgstr "нельзя продолжнить: %s не существует "
+msgstr "нельзя продолжнить: %s не существует."
 
-#: builtin/am.c:1647
-msgid "cannot be interactive without stdin connected to a terminal."
-msgstr "не удалось использовать интерактивное поведение, без stdin подключенного к терминалу."
-
-#: builtin/am.c:1652
+#: builtin/am.c:1648
 msgid "Commit Body is:"
 msgstr "Тело коммита:"
 
 #. 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:1662
+#: builtin/am.c:1658
+#, 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:1712
+#: builtin/am.c:1704 builtin/commit.c:395
+msgid "unable to write index file"
+msgstr "не удалось записать индекс"
+
+#: builtin/am.c:1708
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Индекс изменён: нельзя применять патчи (изменено: %s)"
 
-#: builtin/am.c:1752 builtin/am.c:1820
+#: builtin/am.c:1748 builtin/am.c:1816
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Применение: %.*s"
 
-#: builtin/am.c:1769
+#: builtin/am.c:1765
 msgid "No changes -- Patch already applied."
 msgstr "Нет изменений — Патч уже применен."
 
-#: builtin/am.c:1775
+#: builtin/am.c:1771
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Ошибка применения изменений на %s %.*s"
 
-#: builtin/am.c:1779
-msgid "Use 'git am --show-current-patch' to see the failed patch"
+#: builtin/am.c:1775
+msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 
-#: builtin/am.c:1823
+#: builtin/am.c:1819
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr "Нет изменений — возможно, вы забыли вызвать «git add»?\nЕсли ничего не осталось для индексации, то, скорее всего, что-то другое уже сделало те же изменения; возможно, вам следует пропустить этот патч."
 
-#: builtin/am.c:1830
+#: builtin/am.c:1826
 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 might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr "У вас есть не слитые пути в индексе.\nВы должны выполнить «git add» для каждого файла с разрешенными конфликтами, чтобы пометить их таковыми.\nВы можете запустить «git rm» с именем файла, чтобы пометить его как «удалено ими»."
 
-#: builtin/am.c:1937 builtin/am.c:1941 builtin/am.c:1953 builtin/reset.c:329
-#: builtin/reset.c:337
+#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Не удалось разобрать объект «%s»."
 
-#: builtin/am.c:1989
+#: builtin/am.c:1985
 msgid "failed to clean index"
 msgstr "не удалось очистить индекс"
 
-#: builtin/am.c:2033
+#: builtin/am.c:2029
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr "Похоже, что вы переместили HEAD с момента последней ошибки выполнения «am».\nПеремотка на ORIG_HEAD не выполняется"
 
-#: builtin/am.c:2130
+#: builtin/am.c:2136
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Неправильное значение для --patch-format: %s"
 
-#: builtin/am.c:2166
+#: builtin/am.c:2178
+#, c-format
+msgid "Invalid value for --show-current-patch: %s"
+msgstr ""
+
+#: builtin/am.c:2182
+#, c-format
+msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
+msgstr ""
+
+#: builtin/am.c:2213
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<опции>] [(<mbox> | <Maildir>)…]"
 
-#: builtin/am.c:2167
+#: builtin/am.c:2214
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<опции>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2173
+#: builtin/am.c:2220
 msgid "run interactively"
 msgstr "запустить в интерактивном режиме"
 
-#: builtin/am.c:2175
+#: builtin/am.c:2222
 msgid "historical option -- no-op"
 msgstr "историческая опция — ничего не делает"
 
-#: builtin/am.c:2177
+#: builtin/am.c:2224
 msgid "allow fall back on 3way merging if needed"
 msgstr "разрешить откатиться к трехходовому слиянию, если нужно"
 
-#: builtin/am.c:2178 builtin/init-db.c:494 builtin/prune-packed.c:58
-#: builtin/repack.c:306 builtin/stash.c:805
+#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
+#: builtin/repack.c:335 builtin/stash.c:815
 msgid "be quiet"
 msgstr "тихий режим"
 
-#: builtin/am.c:2180
-msgid "add a Signed-off-by line to the commit message"
-msgstr "добавить строку Signed-off-by к сообщению коммита"
+#: builtin/am.c:2227
+msgid "add a Signed-off-by trailer to the commit message"
+msgstr ""
 
-#: builtin/am.c:2183
+#: builtin/am.c:2230
 msgid "recode into utf8 (default)"
 msgstr "перекодировать в utf8 (по умолчанию)"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2232
 msgid "pass -k flag to git-mailinfo"
 msgstr "передать флаг -k в git-mailinfo"
 
-#: builtin/am.c:2187
+#: builtin/am.c:2234
 msgid "pass -b flag to git-mailinfo"
 msgstr "передать флаг -b в git-mailinfo"
 
-#: builtin/am.c:2189
+#: builtin/am.c:2236
 msgid "pass -m flag to git-mailinfo"
 msgstr "передать флаг -m в git-mailinfo"
 
-#: builtin/am.c:2191
+#: builtin/am.c:2238
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "передать флаг --keep-cr в git-mailsplit для формата mbox"
 
-#: builtin/am.c:2194
+#: builtin/am.c:2241
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "не передавать --keep-cr флаг в git-mailsplit вне зависимости от am.keepcr"
 
-#: builtin/am.c:2197
+#: builtin/am.c:2244
 msgid "strip everything before a scissors line"
 msgstr "обрезать все до строки обрезки"
 
-#: builtin/am.c:2199 builtin/am.c:2202 builtin/am.c:2205 builtin/am.c:2208
-#: builtin/am.c:2211 builtin/am.c:2214 builtin/am.c:2217 builtin/am.c:2220
-#: builtin/am.c:2226
+#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
+#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
+#: builtin/am.c:2273
 msgid "pass it through git-apply"
 msgstr "передать его в git-apply"
 
-#: builtin/am.c:2216 builtin/commit.c:1348 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:879 builtin/merge.c:247
-#: builtin/pull.c:158 builtin/pull.c:217 builtin/rebase.c:1412
-#: builtin/repack.c:317 builtin/repack.c:321 builtin/repack.c:323
-#: builtin/show-branch.c:651 builtin/show-ref.c:172 builtin/tag.c:397
-#: parse-options.h:141 parse-options.h:162 parse-options.h:311
+#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
+#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
+#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
+#: parse-options.h:316
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2222 builtin/branch.c:653 builtin/for-each-ref.c:38
-#: builtin/replace.c:554 builtin/tag.c:431 builtin/verify-tag.c:39
+#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
+#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: builtin/verify-tag.c:38
 msgid "format"
 msgstr "формат"
 
-#: builtin/am.c:2223
+#: builtin/am.c:2270
 msgid "format the patch(es) are in"
 msgstr "формат, в котором находятся патчи"
 
-#: builtin/am.c:2229
+#: builtin/am.c:2276
 msgid "override error message when patch failure occurs"
 msgstr "переопределить сообщение об ошибке, если не удалось наложить изменения"
 
-#: builtin/am.c:2231
+#: builtin/am.c:2278
 msgid "continue applying patches after resolving a conflict"
 msgstr "продолжить применение изменений после разрешения конфиликта"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2281
 msgid "synonyms for --continue"
 msgstr "синоним для --continue"
 
-#: builtin/am.c:2237
+#: builtin/am.c:2284
 msgid "skip the current patch"
 msgstr "пропустить текущий патч"
 
-#: builtin/am.c:2240
+#: builtin/am.c:2287
 msgid "restore the original branch and abort the patching operation."
 msgstr "восстановить оригинальную ветку и отменить операцию применения изменений."
 
-#: builtin/am.c:2243
+#: builtin/am.c:2290
 msgid "abort the patching operation but keep HEAD where it is."
 msgstr ""
 
-#: builtin/am.c:2246
-msgid "show the patch being applied."
+#: builtin/am.c:2294
+msgid "show the patch being applied"
 msgstr ""
 
-#: builtin/am.c:2250
+#: builtin/am.c:2299
 msgid "lie about committer date"
 msgstr "соврать о дате коммитера"
 
-#: builtin/am.c:2252
+#: builtin/am.c:2301
 msgid "use current timestamp for author date"
 msgstr "использовать текущее время как время авторства"
 
-#: builtin/am.c:2254 builtin/commit-tree.c:120 builtin/commit.c:1491
-#: builtin/merge.c:282 builtin/pull.c:192 builtin/rebase.c:489
-#: builtin/rebase.c:1453 builtin/revert.c:116 builtin/tag.c:412
+#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
+#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
+#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2255 builtin/rebase.c:490 builtin/rebase.c:1454
+#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
 msgid "GPG-sign commits"
 msgstr "подписать коммиты с помощью GPG"
 
-#: builtin/am.c:2258
+#: builtin/am.c:2307
 msgid "(internal use for git-rebase)"
 msgstr "(внутреннее использование для git-rebase)"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2325
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
 msgstr "Опция -b/--binary уже долгое время ничего не делает и будет удалена с следующих версиях Git. Пожалуйста, не используйте ее."
 
-#: builtin/am.c:2283
+#: builtin/am.c:2332
 msgid "failed to read the index"
 msgstr "сбой чтения индекса"
 
-#: builtin/am.c:2298
+#: builtin/am.c:2347
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "предыдущий каталог перемещения %s еще существует, но передан mbox."
 
-#: builtin/am.c:2322
+#: builtin/am.c:2371
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
 "Use \"git am --abort\" to remove it."
 msgstr "Найден забытый каталог %s.\nИспользуйте «git am --abort», чтобы удалить его."
 
-#: builtin/am.c:2328
+#: builtin/am.c:2377
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Операция разрешения конфликтов не в процессе выполнения, не продолжаем."
 
+#: builtin/am.c:2387
+msgid "interactive mode requires patches on the command line"
+msgstr ""
+
 #: builtin/apply.c:8
 msgid "git apply [<options>] [<patch>...]"
 msgstr "git apply [<опции>] [<патч>…]"
@@ -8317,118 +9658,128 @@
 msgid "git archive: expected a flush"
 msgstr "git archive: ожидался сброс буфера"
 
-#: builtin/bisect--helper.c:22
-msgid "git bisect--helper --next-all [--no-checkout]"
-msgstr "git bisect--helper --next-all [--no-checkout]"
-
 #: builtin/bisect--helper.c:23
-msgid "git bisect--helper --write-terms <bad_term> <good_term>"
-msgstr "git bisect--helper --write-terms <плохое-определение> <хорошее-определение>"
-
-#: builtin/bisect--helper.c:24
-msgid "git bisect--helper --bisect-clean-state"
-msgstr "git bisect--helper --bisect-clean-state"
-
-#: builtin/bisect--helper.c:25
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr ""
 
-#: builtin/bisect--helper.c:26
+#: builtin/bisect--helper.c:24
 msgid ""
 "git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
 "<bad_term>"
 msgstr ""
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
 "<bad_term>"
 msgstr ""
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 
-#: builtin/bisect--helper.c:29
+#: builtin/bisect--helper.c:27
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
 "--term-new]"
 msgstr ""
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid ""
-"git bisect--helper --bisect-start [--term-{old,good}=<term> "
-"--term-{new,bad}=<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>...]"
+msgstr "git bisect--helper --bisect-start [--term-{new,bad}=<термин> --term-{old,good}=<термин>] [--no-checkout] [--first-parent] [<плохая-редация> [<хорошая-редация>…]] [--] [<пути>…]"
+
+#: builtin/bisect--helper.c:30
+msgid "git bisect--helper --bisect-next"
 msgstr ""
 
-#: builtin/bisect--helper.c:86
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-auto-next"
+msgstr ""
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
+msgstr ""
+
+#: builtin/bisect--helper.c:33
+msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
+msgstr ""
+
+#: builtin/bisect--helper.c:108
+#, c-format
+msgid "cannot open file '%s' in mode '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:115
+#, c-format
+msgid "could not write to file '%s'"
+msgstr ""
+
+#: builtin/bisect--helper.c:154
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "«%s» не является допустимым определением"
 
-#: builtin/bisect--helper.c:90
+#: builtin/bisect--helper.c:158
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "нельзя использовать встроенную команду «%s» как определение"
 
-#: builtin/bisect--helper.c:100
+#: builtin/bisect--helper.c:168
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "нельзя изменить значение определения «%s»"
 
-#: builtin/bisect--helper.c:111
+#: builtin/bisect--helper.c:178
 msgid "please use two different terms"
 msgstr "используйте два разных определения"
 
-#: builtin/bisect--helper.c:118
-msgid "could not open the file BISECT_TERMS"
-msgstr "не удалось открыть файл BISECT_TERMS"
-
-#: builtin/bisect--helper.c:155
+#: builtin/bisect--helper.c:194
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr ""
 
-#: builtin/bisect--helper.c:163
+#: builtin/bisect--helper.c:202
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:174
+#: builtin/bisect--helper.c:211
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr ""
 
-#: builtin/bisect--helper.c:215
+#: builtin/bisect--helper.c:255
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr ""
 
-#: builtin/bisect--helper.c:220
+#: builtin/bisect--helper.c:260
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:232
+#: builtin/bisect--helper.c:272
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:258
+#: builtin/bisect--helper.c:298
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr ""
 
-#: builtin/bisect--helper.c:285
+#: builtin/bisect--helper.c:325
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
 "You can use \"git bisect %s\" and \"git bisect %s\" for that."
 msgstr ""
 
-#: builtin/bisect--helper.c:289
+#: builtin/bisect--helper.c:329
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -8436,7 +9787,7 @@
 "You can use \"git bisect %s\" and \"git bisect %s\" for that."
 msgstr ""
 
-#: builtin/bisect--helper.c:321
+#: builtin/bisect--helper.c:349
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr ""
@@ -8444,131 +9795,167 @@
 #. 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:329
+#: builtin/bisect--helper.c:357
 msgid "Are you sure [Y/n]? "
 msgstr "Вы уверены [Y - да/n - нет]? "
 
-#: builtin/bisect--helper.c:376
+#: builtin/bisect--helper.c:418
 msgid "no terms defined"
 msgstr "определения не заданы"
 
-#: builtin/bisect--helper.c:379
+#: builtin/bisect--helper.c:421
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
 "and %s for the new state.\n"
 msgstr ""
 
-#: builtin/bisect--helper.c:389
+#: builtin/bisect--helper.c:431
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
 "Supported options are: --term-good|--term-old and --term-bad|--term-new."
 msgstr ""
 
-#: builtin/bisect--helper.c:475
+#: builtin/bisect--helper.c:498
+msgid "revision walk setup failed\n"
+msgstr ""
+
+#: builtin/bisect--helper.c:520
+#, c-format
+msgid "could not open '%s' for appending"
+msgstr ""
+
+#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+msgid "'' is not a valid term"
+msgstr ""
+
+#: builtin/bisect--helper.c:662
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr ""
 
-#: builtin/bisect--helper.c:479
+#: builtin/bisect--helper.c:666
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr ""
 
-#: builtin/bisect--helper.c:511
+#: builtin/bisect--helper.c:697
 msgid "bad HEAD - I need a HEAD"
 msgstr ""
 
-#: builtin/bisect--helper.c:526
+#: builtin/bisect--helper.c:712
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 
-#: builtin/bisect--helper.c:547
+#: builtin/bisect--helper.c:733
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "нельзя выполнить двоичный поиск на дереве после cg-seek"
 
-#: builtin/bisect--helper.c:550
+#: builtin/bisect--helper.c:736
 msgid "bad HEAD - strange symbolic ref"
 msgstr ""
 
-#: builtin/bisect--helper.c:627
-msgid "perform 'git bisect next'"
-msgstr "выполнить «git bisect next»"
+#: builtin/bisect--helper.c:756
+#, c-format
+msgid "invalid ref: '%s'"
+msgstr ""
 
-#: builtin/bisect--helper.c:629
-msgid "write the terms to .git/BISECT_TERMS"
-msgstr "записать определения в .git/BISECT_TERMS"
+#: builtin/bisect--helper.c:814
+msgid "You need to start by \"git bisect start\"\n"
+msgstr ""
 
-#: builtin/bisect--helper.c:631
-msgid "cleanup the bisection state"
-msgstr "очистить состояние двоичного поиска"
+#. 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:825
+msgid "Do you want me to do it for you [Y/n]? "
+msgstr "Вы уверены, что хотите, чтобы я сделал это [Y] - да/[n] - нет? "
 
-#: builtin/bisect--helper.c:633
-msgid "check for expected revs"
-msgstr "проверить ожидаемые редакции"
+#: builtin/bisect--helper.c:843
+msgid "Please call `--bisect-state` with at least one argument"
+msgstr ""
 
-#: builtin/bisect--helper.c:635
+#: builtin/bisect--helper.c:856
+#, c-format
+msgid "'git bisect %s' can take only one argument."
+msgstr ""
+
+#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#, c-format
+msgid "Bad rev input: %s"
+msgstr ""
+
+#: builtin/bisect--helper.c:924
 msgid "reset the bisection state"
 msgstr ""
 
-#: builtin/bisect--helper.c:637
+#: builtin/bisect--helper.c:926
 msgid "write out the bisection state in BISECT_LOG"
 msgstr ""
 
-#: builtin/bisect--helper.c:639
+#: builtin/bisect--helper.c:928
 msgid "check and set terms in a bisection state"
 msgstr ""
 
-#: builtin/bisect--helper.c:641
+#: builtin/bisect--helper.c:930
 msgid "check whether bad or good terms exist"
 msgstr ""
 
-#: builtin/bisect--helper.c:643
+#: builtin/bisect--helper.c:932
 msgid "print out the bisect terms"
 msgstr ""
 
-#: builtin/bisect--helper.c:645
+#: builtin/bisect--helper.c:934
 msgid "start the bisect session"
 msgstr ""
 
-#: builtin/bisect--helper.c:647
-msgid "update BISECT_HEAD instead of checking out the current commit"
-msgstr "обновить BISECT_HEAD вместо перехода на текущий коммит"
+#: builtin/bisect--helper.c:936
+msgid "find the next bisection commit"
+msgstr ""
 
-#: builtin/bisect--helper.c:649
+#: builtin/bisect--helper.c:938
+msgid ""
+"verify the next bisection state then checkout the next bisection commit"
+msgstr ""
+
+#: builtin/bisect--helper.c:940
+msgid "mark the state of ref (or refs)"
+msgstr ""
+
+#: builtin/bisect--helper.c:942
 msgid "no log for BISECT_WRITE"
 msgstr ""
 
-#: builtin/bisect--helper.c:666
-msgid "--write-terms requires two arguments"
-msgstr "--write-terms требует указания двух параметров"
-
-#: builtin/bisect--helper.c:670
-msgid "--bisect-clean-state requires no arguments"
-msgstr "--bisect-clean-state не требует указания параметров"
-
-#: builtin/bisect--helper.c:677
+#: builtin/bisect--helper.c:957
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:681
+#: builtin/bisect--helper.c:961
 msgid "--bisect-write requires either 4 or 5 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:687
+#: builtin/bisect--helper.c:967
 msgid "--check-and-set-terms requires 3 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:693
+#: builtin/bisect--helper.c:973
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:699
+#: builtin/bisect--helper.c:979
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr ""
 
+#: builtin/bisect--helper.c:988
+msgid "--bisect-next requires 0 arguments"
+msgstr ""
+
+#: builtin/bisect--helper.c:994
+msgid "--bisect-auto-next requires 0 arguments"
+msgstr ""
+
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
 msgstr "git blame [<опции>] [<опции-редакции>] [<редакция>] [--] <файл>"
@@ -8577,133 +9964,146 @@
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<опции-rev-list> документированы в git-rev-list(1)"
 
-#: builtin/blame.c:407
+#: builtin/blame.c:410
 #, c-format
 msgid "expecting a color: %s"
 msgstr "ожидается цвет: %s"
 
-#: builtin/blame.c:414
+#: builtin/blame.c:417
 msgid "must end with a color"
 msgstr "должно заканчиваться на цвет"
 
-#: builtin/blame.c:701
+#: builtin/blame.c:730
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr ""
 
-#: builtin/blame.c:719
+#: builtin/blame.c:748
 msgid "invalid value for blame.coloring"
 msgstr ""
 
-#: builtin/blame.c:794
+#: builtin/blame.c:847
+#, c-format
+msgid "cannot find revision %s to ignore"
+msgstr ""
+
+#: builtin/blame.c:869
 msgid "Show blame entries as we find them, incrementally"
 msgstr "Показать записи авторства постепенно, в процессе нахождения"
 
-#: builtin/blame.c:795
-msgid "Show blank SHA-1 for boundary commits (Default: off)"
-msgstr "Не показывать SHA-1 для коммитов, не входящих в границы запроса (По умолчанию: отключено)"
+#: builtin/blame.c:870
+msgid "Do not show object names of boundary commits (Default: off)"
+msgstr ""
 
-#: builtin/blame.c:796
+#: builtin/blame.c:871
 msgid "Do not treat root commits as boundaries (Default: off)"
 msgstr "Не воспринимать корневые коммиты как граничные (По умолчанию: отключено)"
 
-#: builtin/blame.c:797
+#: builtin/blame.c:872
 msgid "Show work cost statistics"
 msgstr "Показать статистику расходов на выполнение запроса"
 
-#: builtin/blame.c:798
+#: builtin/blame.c:873
 msgid "Force progress reporting"
 msgstr "Принудительно выводить прогресс выполнения"
 
-#: builtin/blame.c:799
+#: builtin/blame.c:874
 msgid "Show output score for blame entries"
 msgstr "Показать оценку для записей авторства"
 
-#: builtin/blame.c:800
+#: builtin/blame.c:875
 msgid "Show original filename (Default: auto)"
 msgstr "Показать оригинальное имя файла (По умолчанию: автоматически)"
 
-#: builtin/blame.c:801
+#: builtin/blame.c:876
 msgid "Show original linenumber (Default: off)"
 msgstr "Показать оригинальные номера строк (По умолчанию: отключено)"
 
-#: builtin/blame.c:802
+#: builtin/blame.c:877
 msgid "Show in a format designed for machine consumption"
 msgstr "Показать в формате для программного разбора"
 
-#: builtin/blame.c:803
+#: builtin/blame.c:878
 msgid "Show porcelain format with per-line commit information"
 msgstr "Показать в машиночитаемом формате, с построчной информацией о коммите"
 
-#: builtin/blame.c:804
+#: builtin/blame.c:879
 msgid "Use the same output mode as git-annotate (Default: off)"
 msgstr "Использовать такой же формат вывода, как и git-annotate (По умолчанию: отключено)"
 
-#: builtin/blame.c:805
+#: builtin/blame.c:880
 msgid "Show raw timestamp (Default: off)"
 msgstr "Показать необработанные временные метки (По умолчанию: отключено)"
 
-#: builtin/blame.c:806
+#: builtin/blame.c:881
 msgid "Show long commit SHA1 (Default: off)"
 msgstr "Показать длинный SHA1 идентификатор коммита (По умолчанию: отключено)"
 
-#: builtin/blame.c:807
+#: builtin/blame.c:882
 msgid "Suppress author name and timestamp (Default: off)"
 msgstr "Не показывать имя автора и временные метки (По умолчанию: отключено)"
 
-#: builtin/blame.c:808
+#: builtin/blame.c:883
 msgid "Show author email instead of name (Default: off)"
 msgstr "Показать почту автора вместо имени (По умолчанию: отключено)"
 
-#: builtin/blame.c:809
+#: builtin/blame.c:884
 msgid "Ignore whitespace differences"
 msgstr "Игнорировать различия в пробелах"
 
-#: builtin/blame.c:810
+#: builtin/blame.c:885 builtin/log.c:1813
+msgid "rev"
+msgstr ""
+
+#: builtin/blame.c:885
+msgid "Ignore <rev> when blaming"
+msgstr ""
+
+#: builtin/blame.c:886
+msgid "Ignore revisions from <file>"
+msgstr ""
+
+#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 
-#: builtin/blame.c:811
+#: builtin/blame.c:888
 msgid "color lines by age"
 msgstr ""
 
-#: builtin/blame.c:818
-msgid "Use an experimental heuristic to improve diffs"
-msgstr "Использовать эксперементальную эвристику, чтобы улучшить файлы списка изменений"
-
-#: builtin/blame.c:820
+#: builtin/blame.c:889
 msgid "Spend extra cycles to find better match"
 msgstr "Потратить больше времени, для нахождения лучших совпадений"
 
-#: builtin/blame.c:821
+#: builtin/blame.c:890
 msgid "Use revisions from <file> instead of calling git-rev-list"
 msgstr "Использовать редакции из <файла> вместо вызова git-rev-list"
 
-#: builtin/blame.c:822
+#: builtin/blame.c:891
 msgid "Use <file>'s contents as the final image"
 msgstr "Использовать содержимое <файла> как финальный снимок"
 
-#: builtin/blame.c:823 builtin/blame.c:824
+#: builtin/blame.c:892 builtin/blame.c:893
 msgid "score"
 msgstr "мин-длина"
 
-#: builtin/blame.c:823
+#: builtin/blame.c:892
 msgid "Find line copies within and across files"
 msgstr "Найти копирование строк в пределах и между файлами"
 
-#: builtin/blame.c:824
+#: builtin/blame.c:893
 msgid "Find line movements within and across files"
 msgstr "Найти перемещения строк в пределах и между файлами"
 
-#: builtin/blame.c:825
-msgid "n,m"
-msgstr "начало,конец"
+#: builtin/blame.c:894
+msgid "range"
+msgstr ""
 
-#: builtin/blame.c:825
-msgid "Process only line range n,m, counting from 1"
-msgstr "Обработать только строки в диапазоне начало,конец, начиная с 1"
+#: builtin/blame.c:895
+msgid "Process only line range <start>,<end> or function :<funcname>"
+msgstr ""
 
-#: builtin/blame.c:876
+#: builtin/blame.c:947
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress нельзя использовать одновременно с --incremental или машиночитаемым (porcelain) форматом"
 
@@ -8714,11 +10114,11 @@
 #. among various forms of relative timestamps, but
 #. your language may need more or fewer display
 #. columns.
-#: builtin/blame.c:927
+#: builtin/blame.c:998
 msgid "4 years, 11 months ago"
 msgstr "4 года и 11 месяцев назад"
 
-#: builtin/blame.c:1031
+#: builtin/blame.c:1114
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
@@ -8727,13 +10127,13 @@
 msgstr[2] "файл %s содержит только %lu строк"
 msgstr[3] "файл %s содержит только %lu строки"
 
-#: builtin/blame.c:1077
+#: builtin/blame.c:1159
 msgid "Blaming lines"
 msgstr "Просмотр авторов строк"
 
 #: builtin/branch.c:29
-msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
-msgstr "git branch [<опции>] [-r | -a] [--merged | --no-merged]"
+msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
+msgstr ""
 
 #: builtin/branch.c:30
 msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
@@ -8759,147 +10159,147 @@
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<опции>] [-r | -a] [--format]"
 
-#: builtin/branch.c:151
+#: builtin/branch.c:154
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
 "         '%s', but not yet merged to HEAD."
 msgstr "удаление ветки «%s», которая была слита с\n         «%s», но не слита с HEAD."
 
-#: builtin/branch.c:155
+#: builtin/branch.c:158
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
 "         '%s', even though it is merged to HEAD."
 msgstr "не удаление ветки «%s», которая еще не слита с\n         «%s», хотя уже слита с HEAD."
 
-#: builtin/branch.c:169
+#: builtin/branch.c:172
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "Не удалось найти объект коммита для «%s»"
 
-#: builtin/branch.c:173
+#: builtin/branch.c:176
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
 "If you are sure you want to delete it, run 'git branch -D %s'."
 msgstr "Ветка «%s» не слита полностью.\nЕсли вы уверены, что хотите ее удалить, запустите «git branch -D %s»."
 
-#: builtin/branch.c:186
+#: builtin/branch.c:189
 msgid "Update of config-file failed"
 msgstr "Не удалось обновить файл конфигурации"
 
-#: builtin/branch.c:217
+#: builtin/branch.c:220
 msgid "cannot use -a with -d"
 msgstr "нельзя использовать одновременно ключи -a и -d"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:226
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Не удалось найти объект коммита для HEAD"
 
-#: builtin/branch.c:237
+#: builtin/branch.c:240
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Нельзя удалить ветку «%s» т.к. она активна на «%s»"
 
-#: builtin/branch.c:252
+#: builtin/branch.c:255
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "внешняя отслеживаемая ветка «%s» не найдена."
 
-#: builtin/branch.c:253
+#: builtin/branch.c:256
 #, c-format
 msgid "branch '%s' not found."
 msgstr "ветка «%s» не найдена."
 
-#: builtin/branch.c:268
+#: builtin/branch.c:271
 #, c-format
 msgid "Error deleting remote-tracking branch '%s'"
 msgstr "Ошибка удаления внешней отслеживаемой ветки «%s»"
 
-#: builtin/branch.c:269
+#: builtin/branch.c:272
 #, c-format
 msgid "Error deleting branch '%s'"
 msgstr "Ошибка удаления ветки «%s»"
 
-#: builtin/branch.c:276
+#: builtin/branch.c:279
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Внешняя отслеживаемая ветка %s удалена (была %s).\n"
 
-#: builtin/branch.c:277
+#: builtin/branch.c:280
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Ветка %s удалена (была %s).\n"
 
-#: builtin/branch.c:421 builtin/tag.c:60
+#: builtin/branch.c:429 builtin/tag.c:61
 msgid "unable to parse format string"
 msgstr "не удалось разобрать строку формата"
 
-#: builtin/branch.c:452
+#: builtin/branch.c:460
 msgid "could not resolve HEAD"
-msgstr ""
+msgstr "не удалось получить HEAD"
 
-#: builtin/branch.c:458
+#: builtin/branch.c:466
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
-msgstr ""
+msgstr "HEAD (%s) указывает за пределы refs/heads/"
 
-#: builtin/branch.c:473
+#: builtin/branch.c:481
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Производится перемещение ветки %s на %s"
 
-#: builtin/branch.c:477
+#: builtin/branch.c:485
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Производится двоичный поиск в ветке %s на %s"
 
-#: builtin/branch.c:494
+#: builtin/branch.c:502
 msgid "cannot copy the current branch while not on any."
 msgstr "невозможно скопировать текущую ветку, если вы не находитесь ни на одной из веток."
 
-#: builtin/branch.c:496
+#: builtin/branch.c:504
 msgid "cannot rename the current branch while not on any."
 msgstr "невозможно переименовать текущую ветку, если вы не находитесь ни на одной из них."
 
-#: builtin/branch.c:507
+#: builtin/branch.c:515
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Недействительное имя ветки: «%s»"
 
-#: builtin/branch.c:534
+#: builtin/branch.c:544
 msgid "Branch rename failed"
 msgstr "Сбой переименования ветки"
 
-#: builtin/branch.c:536
+#: builtin/branch.c:546
 msgid "Branch copy failed"
 msgstr "Сбой копирования ветки"
 
-#: builtin/branch.c:540
+#: builtin/branch.c:550
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Создана копия неправильно названной ветки «%s»"
 
-#: builtin/branch.c:543
+#: builtin/branch.c:553
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Переименована неправильно названная ветка «%s»"
 
-#: builtin/branch.c:549
+#: builtin/branch.c:559
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Ветка переименована в %s, но HEAD не обновлен!"
 
-#: builtin/branch.c:558
+#: builtin/branch.c:568
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Ветка переименована, но произошел сбой обновления файла конфигурации"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:570
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Ветка скопирована, но произошел сбой обновления файла конфигурации"
 
-#: builtin/branch.c:576
+#: builtin/branch.c:586
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -8907,308 +10307,439 @@
 "Lines starting with '%c' will be stripped.\n"
 msgstr "Измените описание для ветки:\n  %s\nСтроки, начинающиеся с «%c» будут вырезаны.\n"
 
-#: builtin/branch.c:610
+#: builtin/branch.c:620
 msgid "Generic options"
 msgstr "Общие параметры"
 
-#: builtin/branch.c:612
+#: builtin/branch.c:622
 msgid "show hash and subject, give twice for upstream branch"
-msgstr "показывать хеш-сумму и тему, укажите дважды для вышестоящей ветки"
+msgstr "показывать хэш-код и тему, укажите дважды для вышестоящей ветки"
 
-#: builtin/branch.c:613
+#: builtin/branch.c:623
 msgid "suppress informational messages"
 msgstr "не выводить информационные сообщения"
 
-#: builtin/branch.c:614
+#: builtin/branch.c:624
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "установить режим отслеживания вышестоящей ветки (см. git-pull(1))"
 
-#: builtin/branch.c:616
+#: builtin/branch.c:626
 msgid "do not use"
 msgstr "не используйте"
 
-#: builtin/branch.c:618 builtin/rebase.c:485
+#: builtin/branch.c:628 builtin/rebase.c:532
 msgid "upstream"
 msgstr "вышестоящая"
 
-#: builtin/branch.c:618
+#: builtin/branch.c:628
 msgid "change the upstream info"
 msgstr "изменить информацию о вышестоящей ветке"
 
-#: builtin/branch.c:619
-msgid "Unset the upstream info"
-msgstr "Убрать информацию о вышестоящей ветке"
+#: builtin/branch.c:629
+msgid "unset the upstream info"
+msgstr ""
 
-#: builtin/branch.c:620
+#: builtin/branch.c:630
 msgid "use colored output"
 msgstr "использовать цветной вывод"
 
-#: builtin/branch.c:621
+#: builtin/branch.c:631
 msgid "act on remote-tracking branches"
 msgstr "выполнить действия на отслеживаемых внешних ветках"
 
-#: builtin/branch.c:623 builtin/branch.c:625
+#: builtin/branch.c:633 builtin/branch.c:635
 msgid "print only branches that contain the commit"
-msgstr "вывод только веток, которые содержат коммит"
+msgstr "вывести только ветки, которые содержат коммит"
 
-#: builtin/branch.c:624 builtin/branch.c:626
+#: builtin/branch.c:634 builtin/branch.c:636
 msgid "print only branches that don't contain the commit"
-msgstr "вывод только веток, которые не содержат коммит"
+msgstr "вывести только ветки, которые не содержат коммит"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:639
 msgid "Specific git-branch actions:"
 msgstr "Специфичные для git-branch действия:"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:640
 msgid "list both remote-tracking and local branches"
-msgstr "показать список и отслеживаемых и локальных веток"
+msgstr "вывести списки отслеживаемых и локальных веток"
 
-#: builtin/branch.c:632
+#: builtin/branch.c:642
 msgid "delete fully merged branch"
 msgstr "удалить полностью слитую ветку"
 
-#: builtin/branch.c:633
+#: builtin/branch.c:643
 msgid "delete branch (even if not merged)"
 msgstr "удалить ветку (даже никуда не слитую)"
 
-#: builtin/branch.c:634
+#: builtin/branch.c:644
 msgid "move/rename a branch and its reflog"
 msgstr "переместить/переименовать ветки и ее журнал ссылок"
 
-#: builtin/branch.c:635
+#: builtin/branch.c:645
 msgid "move/rename a branch, even if target exists"
 msgstr "переместить/переименовать ветку, даже если целевое имя уже существует"
 
-#: builtin/branch.c:636
+#: builtin/branch.c:646
 msgid "copy a branch and its reflog"
 msgstr "скопировать ветку и её журнал ссылок"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:647
 msgid "copy a branch, even if target exists"
 msgstr "скопировать ветку, даже если целевое имя уже существует"
 
-#: builtin/branch.c:638
+#: builtin/branch.c:648
 msgid "list branch names"
-msgstr "показать список имен веток"
+msgstr "показать список имён веток"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:649
 msgid "show current branch name"
-msgstr ""
+msgstr "вывести имя текущей ветки"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:650
 msgid "create the branch's reflog"
 msgstr "создать журнал ссылок ветки"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:652
 msgid "edit the description for the branch"
 msgstr "изменить описание ветки"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:653
 msgid "force creation, move/rename, deletion"
 msgstr "принудительное создание, перемещение или удаление ветки"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:654
 msgid "print only branches that are merged"
 msgstr "вывод только слитых веток"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:655
 msgid "print only branches that are not merged"
 msgstr "вывод только не слитых веток"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:656
 msgid "list branches in columns"
 msgstr "показать список веток по столбцам"
 
-#: builtin/branch.c:649 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
 #: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:427
+#: builtin/tag.c:434
 msgid "object"
 msgstr "объект"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:659
 msgid "print only branches of the object"
 msgstr "вывод только веток, определенного объекта"
 
-#: builtin/branch.c:652 builtin/for-each-ref.c:48 builtin/tag.c:434
+#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
 msgid "sorting and filtering are case insensitive"
 msgstr "сортировка и фильтрация не зависят от регистра"
 
-#: builtin/branch.c:653 builtin/for-each-ref.c:38 builtin/tag.c:432
-#: builtin/verify-tag.c:39
+#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "использовать формат для вывода"
 
-#: builtin/branch.c:676 builtin/clone.c:748
+#: builtin/branch.c:684 builtin/clone.c:790
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD не найден в refs/heads!"
 
-#: builtin/branch.c:700
+#: builtin/branch.c:708
 msgid "--column and --verbose are incompatible"
 msgstr "--column и --verbose нельзя использовать одновременно"
 
-#: builtin/branch.c:715 builtin/branch.c:769 builtin/branch.c:778
+#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
 msgid "branch name required"
 msgstr "требуется имя ветки"
 
-#: builtin/branch.c:745
+#: builtin/branch.c:753
 msgid "Cannot give description to detached HEAD"
 msgstr "Нельзя дать описание отделённому HEAD"
 
-#: builtin/branch.c:750
+#: builtin/branch.c:758
 msgid "cannot edit description of more than one branch"
 msgstr "нельзя изменить описание более одной ветки за раз"
 
-#: builtin/branch.c:757
+#: builtin/branch.c:765
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Еще нет коммита на ветке «%s»."
 
-#: builtin/branch.c:760
+#: builtin/branch.c:768
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Нет ветки с именем «%s»."
 
-#: builtin/branch.c:775
+#: builtin/branch.c:783
 msgid "too many branches for a copy operation"
 msgstr "слишком много веток для операции копирования"
 
-#: builtin/branch.c:784
+#: builtin/branch.c:792
 msgid "too many arguments for a rename operation"
 msgstr "слишком много аргументов для операции переименования"
 
-#: builtin/branch.c:789
+#: builtin/branch.c:797
 msgid "too many arguments to set new upstream"
 msgstr "слишком много аргументов для указания новой вышестоящей ветки"
 
-#: builtin/branch.c:793
+#: builtin/branch.c:801
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr "невозможно установить вышестоящий репозиторий для HEAD на %s, так как он не указывает ни на одну ветку."
 
-#: builtin/branch.c:796 builtin/branch.c:819
+#: builtin/branch.c:804 builtin/branch.c:827
 #, c-format
 msgid "no such branch '%s'"
 msgstr "нет такой ветки «%s»"
 
-#: builtin/branch.c:800
+#: builtin/branch.c:808
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "ветка «%s» не существует"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:821
 msgid "too many arguments to unset upstream"
 msgstr "слишком много аргументов для сброса указания вышестоящей ветки"
 
-#: builtin/branch.c:817
+#: builtin/branch.c:825
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "невозможно убрать вышестоящий репозиторий для HEAD, так как он не указывает ни на одну ветку."
 
-#: builtin/branch.c:823
+#: builtin/branch.c:831
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Ветка «%s» не имеет информации о вышестоящей ветке"
 
-#: builtin/branch.c:833
-msgid "-a and -r options to 'git branch' do not make sense with a branch name"
-msgstr "параметры -a и -r для «git branch» не имеют смысла с указанием имени ветки"
+#: builtin/branch.c:841
+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 ""
 
-#: builtin/branch.c:836
+#: builtin/branch.c:845
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
 msgstr "опция --set-upstream больше не поддерживается. Вместо неё используйте «--track» или «--set-upstream-to»"
 
-#: builtin/bundle.c:45
+#: builtin/bugreport.c:15
+msgid "git version:\n"
+msgstr ""
+
+#: builtin/bugreport.c:21
+#, c-format
+msgid "uname() failed with error '%s' (%d)\n"
+msgstr ""
+
+#: builtin/bugreport.c:31
+msgid "compiler info: "
+msgstr ""
+
+#: builtin/bugreport.c:34
+msgid "libc info: "
+msgstr ""
+
+#: builtin/bugreport.c:80
+msgid "not run from a git repository - no hooks to show\n"
+msgstr ""
+
+#: builtin/bugreport.c:90
+msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
+msgstr ""
+
+#: builtin/bugreport.c:97
+msgid ""
+"Thank you for filling out a Git bug report!\n"
+"Please answer the following questions to help us understand your issue.\n"
+"\n"
+"What did you do before the bug happened? (Steps to reproduce your issue)\n"
+"\n"
+"What did you expect to happen? (Expected behavior)\n"
+"\n"
+"What happened instead? (Actual behavior)\n"
+"\n"
+"What's different between what you expected and what actually happened?\n"
+"\n"
+"Anything else you want to add:\n"
+"\n"
+"Please review the rest of the bug report below.\n"
+"You can delete any lines you don't wish to share.\n"
+msgstr ""
+
+#: builtin/bugreport.c:135
+msgid "specify a destination for the bugreport file"
+msgstr ""
+
+#: builtin/bugreport.c:137
+msgid "specify a strftime format suffix for the filename"
+msgstr ""
+
+#: builtin/bugreport.c:159
+#, c-format
+msgid "could not create leading directories for '%s'"
+msgstr ""
+
+#: builtin/bugreport.c:166
+msgid "System Info"
+msgstr ""
+
+#: builtin/bugreport.c:169
+msgid "Enabled Hooks"
+msgstr ""
+
+#: builtin/bugreport.c:176
+#, c-format
+msgid "couldn't create a new file at '%s'"
+msgstr ""
+
+#: builtin/bugreport.c:179
+#, c-format
+msgid "unable to write to %s"
+msgstr ""
+
+#: builtin/bugreport.c:189
+#, c-format
+msgid "Created new report at '%s'.\n"
+msgstr ""
+
+#: builtin/bundle.c:15 builtin/bundle.c:23
+msgid "git bundle create [<options>] <file> <git-rev-list args>"
+msgstr ""
+
+#: builtin/bundle.c:16 builtin/bundle.c:28
+msgid "git bundle verify [<options>] <file>"
+msgstr ""
+
+#: builtin/bundle.c:17 builtin/bundle.c:33
+msgid "git bundle list-heads <file> [<refname>...]"
+msgstr ""
+
+#: builtin/bundle.c:18 builtin/bundle.c:38
+msgid "git bundle unbundle <file> [<refname>...]"
+msgstr ""
+
+#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+msgid "do not show progress meter"
+msgstr "не выводить прогресс выполнения"
+
+#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+msgid "show progress meter"
+msgstr "показать прогресс выполнения"
+
+#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+msgid "show progress meter during object writing phase"
+msgstr "показать прогресс выполнения во время записи объектов"
+
+#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+msgid "similar to --all-progress when progress meter is shown"
+msgstr "похоже на --all-progress при включенном прогрессе выполнения"
+
+#: builtin/bundle.c:76
+msgid "specify bundle format version"
+msgstr ""
+
+#: builtin/bundle.c:96
+msgid "Need a repository to create a bundle."
+msgstr "Требуется репозиторий для создания пакета."
+
+#: builtin/bundle.c:107
+msgid "do not show bundle details"
+msgstr ""
+
+#: builtin/bundle.c:122
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s в порядке\n"
 
-#: builtin/bundle.c:58
-msgid "Need a repository to create a bundle."
-msgstr "Требуется репозиторий для создания пакета."
-
-#: builtin/bundle.c:62
+#: builtin/bundle.c:163
 msgid "Need a repository to unbundle."
 msgstr "Требуется репозиторий для распаковки."
 
-#: builtin/cat-file.c:593
+#: builtin/bundle.c:171 builtin/remote.c:1700
+msgid "be verbose; must be placed before a subcommand"
+msgstr "быть многословнее; должно стоять перед подкомандой"
+
+#: builtin/bundle.c:193 builtin/remote.c:1731
+#, c-format
+msgid "Unknown subcommand: %s"
+msgstr "Неизвестная подкоманда: %s"
+
+#: builtin/cat-file.c:598
 msgid ""
 "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 | <тип> | --textconv | --filters) [--path=<путь>] <объект>"
 
-#: builtin/cat-file.c:594
+#: builtin/cat-file.c:599
 msgid ""
-"git cat-file (--batch | --batch-check) [--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]"
+msgstr ""
 
-#: builtin/cat-file.c:615
+#: builtin/cat-file.c:620
 msgid "only one batch option may be specified"
 msgstr ""
 
-#: builtin/cat-file.c:633
+#: builtin/cat-file.c:638
 msgid "<type> can be one of: blob, tree, commit, tag"
 msgstr "<тип> может быть одним из: blob, tree, commit, tag"
 
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:639
 msgid "show object type"
 msgstr "показать тип объекта"
 
-#: builtin/cat-file.c:635
+#: builtin/cat-file.c:640
 msgid "show object size"
 msgstr "показать размер объекта"
 
-#: builtin/cat-file.c:637
+#: builtin/cat-file.c:642
 msgid "exit with zero when there's no error"
 msgstr "выйти с нулевым кодом возврата, если нет ошибки"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:643
 msgid "pretty-print object's content"
 msgstr "структурированный вывод содержимого объекта"
 
-#: builtin/cat-file.c:640
+#: builtin/cat-file.c:645
 msgid "for blob objects, run textconv on object's content"
-msgstr "запустить texconv на содержимом двоичных объектов "
+msgstr "запустить texconv на содержимом двоичных объектов"
 
-#: builtin/cat-file.c:642
+#: builtin/cat-file.c:647
 msgid "for blob objects, run filters on object's content"
-msgstr "запуск фильтров на содержимом двоичных объектов "
+msgstr "запуск фильтров на содержимом двоичных объектов"
 
-#: builtin/cat-file.c:643 git-submodule.sh:936
+#: builtin/cat-file.c:648
 msgid "blob"
 msgstr "двоичный объект"
 
-#: builtin/cat-file.c:644
+#: builtin/cat-file.c:649
 msgid "use a specific path for --textconv/--filters"
 msgstr "использовать определенный путь для --textconv/--filters"
 
-#: builtin/cat-file.c:646
+#: builtin/cat-file.c:651
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "разрешить -s и -t работать с повреждёнными объектами"
 
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:652
 msgid "buffer --batch output"
 msgstr "буфферировать вывод --batch"
 
-#: builtin/cat-file.c:649
+#: builtin/cat-file.c:654
 msgid "show info and content of objects fed from the standard input"
 msgstr "показать информацию и содержимое объектов, переданных из стандартного ввода"
 
-#: builtin/cat-file.c:653
+#: builtin/cat-file.c:658
 msgid "show info about objects fed from the standard input"
 msgstr "показать информацию об объектах, переданных из стандартного ввода"
 
-#: builtin/cat-file.c:657
+#: builtin/cat-file.c:662
 msgid "follow in-tree symlinks (used with --batch or --batch-check)"
 msgstr "переходить по символьным ссылкам внутри дерева (используется с опциями --batch и --batch-check)"
 
-#: builtin/cat-file.c:659
+#: builtin/cat-file.c:664
 msgid "show all objects with --batch or --batch-check"
 msgstr "показать все объекты с опциями --batch или --batch-check"
 
-#: builtin/cat-file.c:661
+#: builtin/cat-file.c:666
 msgid "do not order --batch-all-objects output"
 msgstr ""
 
@@ -9236,8 +10767,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "окончание ввода и вывода записей по НУЛЕВОМУ символу"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1355 builtin/gc.c:538
-#: builtin/worktree.c:499
+#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
+#: builtin/worktree.c:561
 msgid "suppress progress reporting"
 msgstr "не выводить прогресс выполнения"
 
@@ -9249,27 +10780,27 @@
 msgid "ignore index when checking"
 msgstr "игнорировать индекс при проверке"
 
-#: builtin/check-ignore.c:160
+#: builtin/check-ignore.c:163
 msgid "cannot specify pathnames with --stdin"
 msgstr "нельзя указывать пути вместе с параметром --stdin"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:166
 msgid "-z only makes sense with --stdin"
 msgstr "-z имеет смысл только вместе с параметром --stdin"
 
-#: builtin/check-ignore.c:165
+#: builtin/check-ignore.c:168
 msgid "no path specified"
 msgstr "не указан путь"
 
-#: builtin/check-ignore.c:169
+#: builtin/check-ignore.c:172
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet можно использовать только при указании одного пути"
 
-#: builtin/check-ignore.c:171
+#: builtin/check-ignore.c:174
 msgid "cannot have both --quiet and --verbose"
 msgstr "нельзя использовать одновременно --quiet и --verbose"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:177
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching можно использовать только вместе с --verbose"
 
@@ -9290,117 +10821,104 @@
 msgid "no contacts specified"
 msgstr "не указаны контакты"
 
-#: builtin/checkout-index.c:131
+#: builtin/checkout-index.c:139
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<опции>] [--] [<файл>…]"
 
-#: builtin/checkout-index.c:148
+#: builtin/checkout-index.c:156
 msgid "stage should be between 1 and 3 or all"
 msgstr "индекс должен быть между 1 и 3 или all"
 
-#: builtin/checkout-index.c:164
+#: builtin/checkout-index.c:173
 msgid "check out all files in the index"
 msgstr "переключиться на состояние всех файлов из индекса"
 
-#: builtin/checkout-index.c:165
+#: builtin/checkout-index.c:174
 msgid "force overwrite of existing files"
 msgstr "принудительная перезапись существующих файлов"
 
-#: builtin/checkout-index.c:167
+#: builtin/checkout-index.c:176
 msgid "no warning for existing files and files not in index"
 msgstr "не выводить предупреждения для существующих и непроиндексированных файлов"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:178
 msgid "don't checkout new files"
 msgstr "не создавать новые файлы"
 
-#: builtin/checkout-index.c:171
+#: builtin/checkout-index.c:180
 msgid "update stat information in the index file"
 msgstr "обновить статистику доступа в файле индекса"
 
-#: builtin/checkout-index.c:175
+#: builtin/checkout-index.c:184
 msgid "read list of paths from the standard input"
 msgstr "прочитать список путей из стандартного ввода"
 
-#: builtin/checkout-index.c:177
+#: builtin/checkout-index.c:186
 msgid "write the content to temporary files"
 msgstr "записать содержимое во временные файлы"
 
-#: builtin/checkout-index.c:178 builtin/column.c:31
-#: builtin/submodule--helper.c:1372 builtin/submodule--helper.c:1375
-#: builtin/submodule--helper.c:1383 builtin/submodule--helper.c:1856
-#: builtin/worktree.c:672
+#: builtin/checkout-index.c:187 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:757
 msgid "string"
 msgstr "строка"
 
-#: builtin/checkout-index.c:179
+#: builtin/checkout-index.c:188
 msgid "when creating files, prepend <string>"
 msgstr "добавить спереди <строку> при создании файлов"
 
-#: builtin/checkout-index.c:181
+#: builtin/checkout-index.c:190
 msgid "copy out the files from named stage"
 msgstr "копировать файлы из указанного индекса"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:31
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<опции>] <ветка>"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:32
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<опции>] [<ветка>] -- <файл>…"
 
-#: builtin/checkout.c:151 builtin/checkout.c:190
+#: builtin/checkout.c:37
+msgid "git switch [<options>] [<branch>]"
+msgstr ""
+
+#: builtin/checkout.c:42
+msgid "git restore [<options>] [--source=<branch>] <file>..."
+msgstr "git restore [<опции>] [--source=<ветка>] <файл>…"
+
+#: builtin/checkout.c:188 builtin/checkout.c:227
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "путь «%s» не имеет нашей версии"
 
-#: builtin/checkout.c:153 builtin/checkout.c:192
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "путь «%s» не имеет их версии"
 
-#: builtin/checkout.c:169
+#: builtin/checkout.c:206
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "путь «%s» не имеет всех необходимых версий"
 
-#: builtin/checkout.c:219
+#: builtin/checkout.c:258
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "путь «%s» не имеет необходимых версий"
 
-#: builtin/checkout.c:237
+#: builtin/checkout.c:275
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "путь «%s»: не удалось слить"
 
-#: builtin/checkout.c:253
+#: builtin/checkout.c:291
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Не удалось добавить результат слияния «%s»"
 
-#: builtin/checkout.c:331 builtin/checkout.c:334 builtin/checkout.c:337
-#: builtin/checkout.c:340
-#, c-format
-msgid "'%s' cannot be used with updating paths"
-msgstr "«%s» нельзя использовать при обновлении путей"
-
-#: builtin/checkout.c:343 builtin/checkout.c:346
-#, c-format
-msgid "'%s' cannot be used with %s"
-msgstr "«%s» нельзя использовать одновременно с %s"
-
-#: builtin/checkout.c:349
-#, c-format
-msgid "Cannot update paths and switch to branch '%s' at the same time."
-msgstr "Нельзя обновлять пути и переключаться на ветку «%s» одновременно."
-
-#: builtin/checkout.c:396 builtin/checkout.c:403
-#, c-format
-msgid "path '%s' is unmerged"
-msgstr "путь «%s» не слит"
-
-#: builtin/checkout.c:442
+#: builtin/checkout.c:396
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
@@ -9409,7 +10927,7 @@
 msgstr[2] ""
 msgstr[3] ""
 
-#: builtin/checkout.c:447
+#: builtin/checkout.c:401
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
@@ -9418,7 +10936,7 @@
 msgstr[2] ""
 msgstr[3] ""
 
-#: builtin/checkout.c:454
+#: builtin/checkout.c:408
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
@@ -9427,66 +10945,97 @@
 msgstr[2] ""
 msgstr[3] ""
 
-#: builtin/checkout.c:695
+#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
+#: builtin/checkout.c:441
+#, c-format
+msgid "'%s' cannot be used with updating paths"
+msgstr "«%s» нельзя использовать при обновлении путей"
+
+#: builtin/checkout.c:444 builtin/checkout.c:447
+#, c-format
+msgid "'%s' cannot be used with %s"
+msgstr "«%s» нельзя использовать одновременно с %s"
+
+#: builtin/checkout.c:451
+#, c-format
+msgid "Cannot update paths and switch to branch '%s' at the same time."
+msgstr "Нельзя обновлять пути и переключаться на ветку «%s» одновременно."
+
+#: builtin/checkout.c:455
+#, c-format
+msgid "neither '%s' or '%s' is specified"
+msgstr ""
+
+#: builtin/checkout.c:459
+#, c-format
+msgid "'%s' must be used when '%s' is not specified"
+msgstr ""
+
+#: builtin/checkout.c:464 builtin/checkout.c:469
+#, c-format
+msgid "'%s' or '%s' cannot be used with %s"
+msgstr ""
+
+#: builtin/checkout.c:541 builtin/checkout.c:548
+#, c-format
+msgid "path '%s' is unmerged"
+msgstr "путь «%s» не слит"
+
+#: builtin/checkout.c:716
 msgid "you need to resolve your current index first"
 msgstr "сначала нужно разрешить конфликты в вашем текущем индексе"
 
-#: builtin/checkout.c:744
+#: builtin/checkout.c:770
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
 
-#: builtin/checkout.c:751
-#, c-format
-msgid "staged changes in the following files may be lost: %s"
-msgstr ""
-
-#: builtin/checkout.c:848
+#: builtin/checkout.c:866
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Не удалось создать журнал ссылок для «%s»: %s\n"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:908
 msgid "HEAD is now at"
 msgstr "HEAD сейчас на"
 
-#: builtin/checkout.c:894 builtin/clone.c:701
+#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "не удалось обновить HEAD"
 
-#: builtin/checkout.c:898
+#: builtin/checkout.c:916
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Сброс ветки «%s»\n"
 
-#: builtin/checkout.c:901
+#: builtin/checkout.c:919
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Уже на «%s»\n"
 
-#: builtin/checkout.c:905
+#: builtin/checkout.c:923
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Переключение и сброс ветки «%s»\n"
 
-#: builtin/checkout.c:907 builtin/checkout.c:1283
+#: builtin/checkout.c:925 builtin/checkout.c:1356
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Переключено на новую ветку «%s»\n"
 
-#: builtin/checkout.c:909
+#: builtin/checkout.c:927
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Переключено на ветку «%s»\n"
 
-#: builtin/checkout.c:960
+#: builtin/checkout.c:978
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " … и еще %d.\n"
 
-#: builtin/checkout.c:966
+#: builtin/checkout.c:984
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -9503,7 +11052,7 @@
 msgstr[2] "Предупреждение: вы оставляете позади %d коммитов не соединенные ни с одной из ваших веток:\n\n%s\n"
 msgstr[3] "Предупреждение: вы оставляете позади %d коммитов не соединенные ни с одной из ваших веток:\n\n%s\n"
 
-#: builtin/checkout.c:985
+#: builtin/checkout.c:1003
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -9522,187 +11071,27 @@
 msgstr[2] "Если вы хотите сохранить их с помощью создания новой ветки, то сейчас самое время\nсделать это с помощью:\n\n git branch <имя-новой-ветки> %s\n"
 msgstr[3] "Если вы хотите сохранить их с помощью создания новой ветки, то сейчас самое время\nсделать это с помощью:\n\n git branch <имя-новой-ветки> %s\n"
 
-#: builtin/checkout.c:1017
+#: builtin/checkout.c:1038
 msgid "internal error in revision walk"
 msgstr "внутренняя ошибка при хождении по редакциям"
 
-#: builtin/checkout.c:1021
+#: builtin/checkout.c:1042
 msgid "Previous HEAD position was"
 msgstr "Предыдущая позиция HEAD была"
 
-#: builtin/checkout.c:1052 builtin/checkout.c:1278
+#: builtin/checkout.c:1082 builtin/checkout.c:1351
 msgid "You are on a branch yet to be born"
 msgstr "Вы находитесь на еще не созданной ветке"
 
-#: builtin/checkout.c:1173
-#, c-format
-msgid "only one reference expected, %d given."
-msgstr "ожидается только одна ссылка, а передано %d."
-
-#: builtin/checkout.c:1209
+#: builtin/checkout.c:1164
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
 "Please use -- (and optionally --no-guess) to disambiguate"
 msgstr ""
 
-#: builtin/checkout.c:1222 builtin/worktree.c:290 builtin/worktree.c:448
-#, c-format
-msgid "invalid reference: %s"
-msgstr "неправильная ссылка: %s"
-
-#: builtin/checkout.c:1251
-#, c-format
-msgid "reference is not a tree: %s"
-msgstr "в дереве нет такой ссылки: %s"
-
-#: builtin/checkout.c:1292
-msgid "paths cannot be used with switching branches"
-msgstr "нельзя использовать пути при переключении веток"
-
-#: builtin/checkout.c:1295 builtin/checkout.c:1299 builtin/checkout.c:1303
-#, c-format
-msgid "'%s' cannot be used with switching branches"
-msgstr "нельзя использовать «%s» при переключении веток"
-
-#: builtin/checkout.c:1307 builtin/checkout.c:1310 builtin/checkout.c:1315
-#: builtin/checkout.c:1318
-#, c-format
-msgid "'%s' cannot be used with '%s'"
-msgstr "«%s» нельзя использовать одновременно с «%s»"
-
-#: builtin/checkout.c:1323
-#, c-format
-msgid "Cannot switch branch to a non-commit '%s'"
-msgstr "Нельзя переключить ветку на не коммит «%s»"
-
-#: builtin/checkout.c:1356 builtin/checkout.c:1358 builtin/clone.c:118
-#: builtin/remote.c:169 builtin/remote.c:171 builtin/worktree.c:492
-#: builtin/worktree.c:494
-msgid "branch"
-msgstr "ветка"
-
-#: builtin/checkout.c:1357
-msgid "create and checkout a new branch"
-msgstr "создать и переключиться на новую ветку"
-
-#: builtin/checkout.c:1359
-msgid "create/reset and checkout a branch"
-msgstr "создать/сбросить и перключиться на новую ветку"
-
-#: builtin/checkout.c:1360
-msgid "create reflog for new branch"
-msgstr "создать журнал ссылок для новой ветки"
-
-#: builtin/checkout.c:1361 builtin/worktree.c:496
-msgid "detach HEAD at named commit"
-msgstr "отсоединить HEAD на указанном коммите"
-
-#: builtin/checkout.c:1362
-msgid "set upstream info for new branch"
-msgstr "установить информацию о вышестоящей ветке для новой ветки"
-
-#: builtin/checkout.c:1364
-msgid "new-branch"
-msgstr "новая-ветка"
-
-#: builtin/checkout.c:1364
-msgid "new unparented branch"
-msgstr "новая ветка без родителей"
-
-#: builtin/checkout.c:1366
-msgid "checkout our version for unmerged files"
-msgstr "переключиться на нашу версию для не слитых файлов"
-
-#: builtin/checkout.c:1369
-msgid "checkout their version for unmerged files"
-msgstr "переключиться на их версию для не слитых файлов"
-
-#: builtin/checkout.c:1371
-msgid "force checkout (throw away local modifications)"
-msgstr "принудительное переключение на состояние (отбрасывает все локальные изменения)"
-
-#: builtin/checkout.c:1373
-msgid "perform a 3-way merge with the new branch"
-msgstr "выполнить трехходовое слияние с новой веткой"
-
-#: builtin/checkout.c:1375 builtin/merge.c:284
-msgid "update ignored files (default)"
-msgstr "обновить игнорируемые файлы (по умолчанию)"
-
-#: builtin/checkout.c:1377 builtin/log.c:1594 parse-options.h:317
-msgid "style"
-msgstr "стиль"
-
-#: builtin/checkout.c:1378
-msgid "conflict style (merge or diff3)"
-msgstr "стиль конфликтов слияния (merge или diff3)"
-
-#: builtin/checkout.c:1381
-msgid "do not limit pathspecs to sparse entries only"
-msgstr "не ограничивать спецификаторы пути только частичными записями"
-
-#: builtin/checkout.c:1383
-msgid "do not second guess 'git checkout <no-such-branch>'"
-msgstr ""
-
-#: builtin/checkout.c:1385
-msgid "do not check if another worktree is holding the given ref"
-msgstr "не проверять, что другое дерево уже содержит указанную ссылку"
-
-#: builtin/checkout.c:1389 builtin/clone.c:88 builtin/fetch.c:141
-#: builtin/merge.c:281 builtin/pull.c:136 builtin/push.c:575
-#: builtin/send-pack.c:174
-msgid "force progress reporting"
-msgstr "принудительно выводить прогресс"
-
-#: builtin/checkout.c:1390
-msgid "use overlay mode (default)"
-msgstr ""
-
-#: builtin/checkout.c:1422
-msgid "-b, -B and --orphan are mutually exclusive"
-msgstr "-b, -B и --orphan нельзя использовать одновременно"
-
-#: builtin/checkout.c:1425
-msgid "-p and --overlay are mutually exclusive"
-msgstr ""
-
-#: builtin/checkout.c:1442
-msgid "--track needs a branch name"
-msgstr "--track требует имя ветки"
-
-#: builtin/checkout.c:1447
-msgid "missing branch name; try -b"
-msgstr "пропущено имя ветки; попробуйте -b"
-
-#: builtin/checkout.c:1484
-msgid "invalid path specification"
-msgstr "недопустимый спецификатор пути"
-
-#: builtin/checkout.c:1491
-#, c-format
-msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
-msgstr "«%s» не является коммитом, поэтому невозможно создать из него ветку «%s»"
-
-#: builtin/checkout.c:1495
-#, c-format
-msgid "git checkout: --detach does not take a path argument '%s'"
-msgstr "git checkout: --detach не принимает путь «%s» как аргумент"
-
-#: builtin/checkout.c:1499
+#: builtin/checkout.c:1171
 msgid ""
-"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
-"checking out of the index."
-msgstr "git checkout: --ours/--theirs, --force and --merge нельзя использовать одновременно при применении состояния индекса."
-
-#: builtin/checkout.c:1519
-#, c-format
-msgid ""
-"'%s' matched more than one remote tracking branch.\n"
-"We found %d remotes with a reference that matched. So we fell back\n"
-"on trying to resolve the argument as a path, but failed there too!\n"
-"\n"
 "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"
@@ -9713,37 +11102,326 @@
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 
-#: builtin/clean.c:28
+#: builtin/checkout.c:1181
+#, c-format
+msgid "'%s' matched multiple (%d) remote tracking branches"
+msgstr ""
+
+#: builtin/checkout.c:1247
+msgid "only one reference expected"
+msgstr ""
+
+#: builtin/checkout.c:1264
+#, c-format
+msgid "only one reference expected, %d given."
+msgstr "ожидается только одна ссылка, а передано %d."
+
+#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#, c-format
+msgid "invalid reference: %s"
+msgstr "неправильная ссылка: %s"
+
+#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#, c-format
+msgid "reference is not a tree: %s"
+msgstr "в дереве нет такой ссылки: %s"
+
+#: builtin/checkout.c:1370
+#, c-format
+msgid "a branch is expected, got tag '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1372
+#, c-format
+msgid "a branch is expected, got remote branch '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#, c-format
+msgid "a branch is expected, got '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1376
+#, c-format
+msgid "a branch is expected, got commit '%s'"
+msgstr ""
+
+#: builtin/checkout.c:1392
+msgid ""
+"cannot switch branch while merging\n"
+"Consider \"git merge --quit\" or \"git worktree add\"."
+msgstr ""
+
+#: builtin/checkout.c:1396
+msgid ""
+"cannot switch branch in the middle of an am session\n"
+"Consider \"git am --quit\" or \"git worktree add\"."
+msgstr ""
+
+#: builtin/checkout.c:1400
+msgid ""
+"cannot switch branch while rebasing\n"
+"Consider \"git rebase --quit\" or \"git worktree add\"."
+msgstr ""
+
+#: builtin/checkout.c:1404
+msgid ""
+"cannot switch branch while cherry-picking\n"
+"Consider \"git cherry-pick --quit\" or \"git worktree add\"."
+msgstr ""
+
+#: builtin/checkout.c:1408
+msgid ""
+"cannot switch branch while reverting\n"
+"Consider \"git revert --quit\" or \"git worktree add\"."
+msgstr ""
+
+#: builtin/checkout.c:1412
+msgid "you are switching branch while bisecting"
+msgstr ""
+
+#: builtin/checkout.c:1419
+msgid "paths cannot be used with switching branches"
+msgstr "нельзя использовать пути при переключении веток"
+
+#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#, c-format
+msgid "'%s' cannot be used with switching branches"
+msgstr "нельзя использовать «%s» при переключении веток"
+
+#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
+#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#, c-format
+msgid "'%s' cannot be used with '%s'"
+msgstr "«%s» нельзя использовать одновременно с «%s»"
+
+#: builtin/checkout.c:1447
+#, c-format
+msgid "'%s' cannot take <start-point>"
+msgstr ""
+
+#: builtin/checkout.c:1455
+#, c-format
+msgid "Cannot switch branch to a non-commit '%s'"
+msgstr "Нельзя переключить ветку на не коммит «%s»"
+
+#: builtin/checkout.c:1462
+msgid "missing branch or commit argument"
+msgstr ""
+
+#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
+#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
+#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
+#: builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "принудительно выводить прогресс"
+
+#: builtin/checkout.c:1505
+msgid "perform a 3-way merge with the new branch"
+msgstr "выполнить трехходовое слияние с новой веткой"
+
+#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+msgid "style"
+msgstr "стиль"
+
+#: builtin/checkout.c:1507
+msgid "conflict style (merge or diff3)"
+msgstr "стиль конфликтов слияния (merge или diff3)"
+
+#: builtin/checkout.c:1519 builtin/worktree.c:558
+msgid "detach HEAD at named commit"
+msgstr "отсоединить HEAD на указанном коммите"
+
+#: builtin/checkout.c:1520
+msgid "set upstream info for new branch"
+msgstr "установить информацию о вышестоящей ветке для новой ветки"
+
+#: builtin/checkout.c:1522
+msgid "force checkout (throw away local modifications)"
+msgstr "принудительное переключение на состояние (отбрасывает все локальные изменения)"
+
+#: builtin/checkout.c:1524
+msgid "new-branch"
+msgstr "новая-ветка"
+
+#: builtin/checkout.c:1524
+msgid "new unparented branch"
+msgstr "новая ветка без родителей"
+
+#: builtin/checkout.c:1526 builtin/merge.c:300
+msgid "update ignored files (default)"
+msgstr "обновить игнорируемые файлы (по умолчанию)"
+
+#: builtin/checkout.c:1529
+msgid "do not check if another worktree is holding the given ref"
+msgstr "не проверять, что другое дерево уже содержит указанную ссылку"
+
+#: builtin/checkout.c:1542
+msgid "checkout our version for unmerged files"
+msgstr "переключиться на нашу версию для не слитых файлов"
+
+#: builtin/checkout.c:1545
+msgid "checkout their version for unmerged files"
+msgstr "переключиться на их версию для не слитых файлов"
+
+#: builtin/checkout.c:1549
+msgid "do not limit pathspecs to sparse entries only"
+msgstr "не ограничивать спецификаторы пути только частичными записями"
+
+#: builtin/checkout.c:1604
+#, c-format
+msgid "-%c, -%c and --orphan are mutually exclusive"
+msgstr ""
+
+#: builtin/checkout.c:1608
+msgid "-p and --overlay are mutually exclusive"
+msgstr ""
+
+#: builtin/checkout.c:1645
+msgid "--track needs a branch name"
+msgstr "--track требует имя ветки"
+
+#: builtin/checkout.c:1650
+#, c-format
+msgid "missing branch name; try -%c"
+msgstr ""
+
+#: builtin/checkout.c:1682
+#, c-format
+msgid "could not resolve %s"
+msgstr ""
+
+#: builtin/checkout.c:1698
+msgid "invalid path specification"
+msgstr "недопустимый спецификатор пути"
+
+#: builtin/checkout.c:1705
+#, c-format
+msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
+msgstr "«%s» не является коммитом, поэтому невозможно создать из него ветку «%s»"
+
+#: builtin/checkout.c:1709
+#, c-format
+msgid "git checkout: --detach does not take a path argument '%s'"
+msgstr "git checkout: --detach не принимает путь «%s» как аргумент"
+
+#: builtin/checkout.c:1718
+msgid "--pathspec-from-file is incompatible with --detach"
+msgstr ""
+
+#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+msgid "--pathspec-from-file is incompatible with --patch"
+msgstr ""
+
+#: builtin/checkout.c:1734
+msgid ""
+"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
+"checking out of the index."
+msgstr "git checkout: --ours/--theirs, --force and --merge нельзя использовать одновременно при применении состояния индекса."
+
+#: builtin/checkout.c:1739
+msgid "you must specify path(s) to restore"
+msgstr ""
+
+#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
+#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
+#: builtin/remote.c:172 builtin/submodule--helper.c:2719
+#: builtin/worktree.c:554 builtin/worktree.c:556
+msgid "branch"
+msgstr "ветка"
+
+#: builtin/checkout.c:1766
+msgid "create and checkout a new branch"
+msgstr "создать и переключиться на новую ветку"
+
+#: builtin/checkout.c:1768
+msgid "create/reset and checkout a branch"
+msgstr "создать/сбросить и перключиться на новую ветку"
+
+#: builtin/checkout.c:1769
+msgid "create reflog for new branch"
+msgstr "создать журнал ссылок для новой ветки"
+
+#: builtin/checkout.c:1771
+msgid "second guess 'git checkout <no-such-branch>' (default)"
+msgstr ""
+
+#: builtin/checkout.c:1772
+msgid "use overlay mode (default)"
+msgstr ""
+
+#: builtin/checkout.c:1817
+msgid "create and switch to a new branch"
+msgstr ""
+
+#: builtin/checkout.c:1819
+msgid "create/reset and switch to a branch"
+msgstr ""
+
+#: builtin/checkout.c:1821
+msgid "second guess 'git switch <no-such-branch>'"
+msgstr ""
+
+#: builtin/checkout.c:1823
+msgid "throw away local modifications"
+msgstr ""
+
+#: builtin/checkout.c:1857
+msgid "which tree-ish to checkout from"
+msgstr ""
+
+#: builtin/checkout.c:1859
+msgid "restore the index"
+msgstr ""
+
+#: builtin/checkout.c:1861
+msgid "restore the working tree (default)"
+msgstr ""
+
+#: builtin/checkout.c:1863
+msgid "ignore unmerged entries"
+msgstr ""
+
+#: builtin/checkout.c:1864
+msgid "use overlay mode"
+msgstr ""
+
+#: builtin/clean.c:29
 msgid ""
 "git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
 msgstr "git clean [-d] [-f] [-i] [-n] [-q] [-e <шаблон>] [-x | -X] [--] <пути>…"
 
-#: builtin/clean.c:32
+#: builtin/clean.c:33
 #, c-format
 msgid "Removing %s\n"
 msgstr "Удаление %s\n"
 
-#: builtin/clean.c:33
+#: builtin/clean.c:34
 #, c-format
 msgid "Would remove %s\n"
 msgstr "Будет удалено %s\n"
 
-#: builtin/clean.c:34
+#: builtin/clean.c:35
 #, c-format
 msgid "Skipping repository %s\n"
 msgstr "Пропуск репозитория %s\n"
 
-#: builtin/clean.c:35
+#: builtin/clean.c:36
 #, c-format
 msgid "Would skip repository %s\n"
 msgstr "Будет пропущен репозиторий %s\n"
 
-#: builtin/clean.c:36
+#: builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "сбой удаления %s"
 
-#: builtin/clean.c:299 git-add--interactive.perl:579
+#: builtin/clean.c:38
+#, c-format
+msgid "could not lstat %s\n"
+msgstr ""
+
+#: builtin/clean.c:302 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -9752,7 +11430,7 @@
 "           - (empty) select nothing\n"
 msgstr "Справка по выделению:\n1          - выбрать указанный элемент\nfoo        - выбрать элемент с указанным префиксом\n           - (пусто) не выбирать ничего\n"
 
-#: builtin/clean.c:303 git-add--interactive.perl:588
+#: builtin/clean.c:306 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -9765,8 +11443,8 @@
 "           - (empty) finish selecting\n"
 msgstr "Справка по выделению:\n1          - выбрать один элемент\n3-5        - выбрать диапазон элементов\n2-3,6-9    - выбрать несколько диапазонов\nfoo        - выбрать элемент с указанным префиксом\n-…       - убрать выделение с указанных элементов\n*          - выбрать все элементы\n           - (пусто) завершить выделение\n"
 
-#: builtin/clean.c:519 git-add--interactive.perl:554
-#: git-add--interactive.perl:559
+#: builtin/clean.c:521 git-add--interactive.perl:568
+#: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "Хм (%s)?\n"
@@ -9776,27 +11454,22 @@
 msgid "Input ignore patterns>> "
 msgstr "Шаблоны игнорирования ввода>> "
 
-#: builtin/clean.c:698
+#: builtin/clean.c:696
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: Не удалось найти элементы соответствующие: %s"
 
-#: builtin/clean.c:719
+#: builtin/clean.c:717
 msgid "Select items to delete"
 msgstr "Укажите элементы для удаления"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:760
+#: builtin/clean.c:758
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Удалить %s [y - да/N - нет]? "
 
-#: builtin/clean.c:785 git-add--interactive.perl:1717
-#, c-format
-msgid "Bye.\n"
-msgstr "До свидания.\n"
-
-#: builtin/clean.c:793
+#: builtin/clean.c:789
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -9807,15 +11480,7 @@
 "?                   - help for prompt selection"
 msgstr "clean               - начать очистку\nfilter by pattern   - исключить удаление элементов\nselect by numbers   - исключить удаление элементов по номерам\nask each            - запрашивать подтверждение на удаление каждого элемента (как «rm -i»)\nquit                - прекратить очистку\nhelp                - этот экран\n?                   - справка по выделению"
 
-#: builtin/clean.c:820 git-add--interactive.perl:1793
-msgid "*** Commands ***"
-msgstr "*** Команды ***"
-
-#: builtin/clean.c:821 git-add--interactive.perl:1790
-msgid "What now"
-msgstr "Что теперь"
-
-#: builtin/clean.c:829
+#: builtin/clean.c:825
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Удалить следующие элементы:"
@@ -9823,387 +11488,406 @@
 msgstr[2] "Удалить следующие элементы:"
 msgstr[3] "Удалить следующие элементы:"
 
-#: builtin/clean.c:845
+#: builtin/clean.c:841
 msgid "No more files to clean, exiting."
 msgstr "Больше нет файлов для очистки, выходим."
 
-#: builtin/clean.c:907
+#: builtin/clean.c:903
 msgid "do not print names of files removed"
 msgstr "не выводить имена удаляемых файлов"
 
-#: builtin/clean.c:909
+#: builtin/clean.c:905
 msgid "force"
 msgstr "принудительно"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:906
 msgid "interactive cleaning"
 msgstr "интерактивная очистка"
 
-#: builtin/clean.c:912
+#: builtin/clean.c:908
 msgid "remove whole directories"
 msgstr "удалить каталоги полностью"
 
-#: builtin/clean.c:913 builtin/describe.c:546 builtin/describe.c:548
-#: builtin/grep.c:897 builtin/log.c:171 builtin/log.c:173
-#: builtin/ls-files.c:557 builtin/name-rev.c:417 builtin/name-rev.c:419
+#: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
+#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
+#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "шаблон"
 
-#: builtin/clean.c:914
+#: builtin/clean.c:910
 msgid "add <pattern> to ignore rules"
 msgstr "добавить <шаблон> в правила игнорирования"
 
-#: builtin/clean.c:915
+#: builtin/clean.c:911
 msgid "remove ignored files, too"
 msgstr "также удалить игнорируемые файлы"
 
-#: builtin/clean.c:917
+#: builtin/clean.c:913
 msgid "remove only ignored files"
 msgstr "удалить только игнорируемые файлы"
 
-#: builtin/clean.c:935
-msgid "-x and -X cannot be used together"
-msgstr "нельзя использовать одновременно -x и -X"
-
-#: builtin/clean.c:939
+#: builtin/clean.c:929
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to"
 " clean"
 msgstr "clean.requireForce установлен как true и ни одна из опций -i, -n или -f не указана; отказ очистки"
 
-#: builtin/clean.c:942
+#: builtin/clean.c:932
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
 msgstr "clean.requireForce установлен по умолчанию как true и ни одна из опций -i, -n или -f не указана; отказ очистки"
 
-#: builtin/clone.c:44
+#: builtin/clean.c:944
+msgid "-x and -X cannot be used together"
+msgstr "нельзя использовать одновременно -x и -X"
+
+#: builtin/clone.c:45
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<опции>] [--] <репозиторий> [<каталог>]"
 
-#: builtin/clone.c:90
+#: builtin/clone.c:94
 msgid "don't create a checkout"
 msgstr "не переключать рабочую копию на HEAD"
 
-#: builtin/clone.c:91 builtin/clone.c:93 builtin/init-db.c:489
+#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
 msgid "create a bare repository"
 msgstr "создать голый репозиторий"
 
-#: builtin/clone.c:95
+#: builtin/clone.c:99
 msgid "create a mirror repository (implies bare)"
 msgstr "создать зеркало репозитория (включает в себя и параметр bare)"
 
-#: builtin/clone.c:97
+#: builtin/clone.c:101
 msgid "to clone from a local repository"
 msgstr "для клонирования из локального репозитория"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "don't use local hardlinks, always copy"
 msgstr "не использовать жесткие ссылки, всегда копировать файлы"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "setup as shared repository"
 msgstr "настроить как общедоступный репозиторий"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:107
 msgid "pathspec"
 msgstr "спецификатор-пути"
 
-#: builtin/clone.c:104
+#: builtin/clone.c:107
 msgid "initialize submodules in the clone"
 msgstr "инициализировать подмодули в клоне"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "number of submodules cloned in parallel"
 msgstr "количество подмодулей, которые будут клонированы парралельно"
 
-#: builtin/clone.c:108 builtin/init-db.c:486
+#: builtin/clone.c:112 builtin/init-db.c:552
 msgid "template-directory"
 msgstr "каталог-шаблонов"
 
-#: builtin/clone.c:109 builtin/init-db.c:487
+#: builtin/clone.c:113 builtin/init-db.c:553
 msgid "directory from which templates will be used"
 msgstr "каталог, шаблоны из которого будут использованы"
 
-#: builtin/clone.c:111 builtin/clone.c:113 builtin/submodule--helper.c:1379
-#: builtin/submodule--helper.c:1859
+#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
+#: builtin/submodule--helper.c:2336
 msgid "reference repository"
 msgstr "ссылаемый репозиторий"
 
-#: builtin/clone.c:115 builtin/submodule--helper.c:1381
-#: builtin/submodule--helper.c:1861
+#: builtin/clone.c:119 builtin/submodule--helper.c:1833
+#: builtin/submodule--helper.c:2338
 msgid "use --reference only while cloning"
 msgstr "используйте --reference только при клонировании"
 
-#: builtin/clone.c:116 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3306 builtin/repack.c:329
+#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
+#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
 msgid "name"
 msgstr "имя"
 
-#: builtin/clone.c:117
+#: builtin/clone.c:121
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "использовать <имя> вместо «origin» для отслеживания вышестоящего репозитория"
 
-#: builtin/clone.c:119
+#: builtin/clone.c:123
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "переключиться на <ветку>, вместо HEAD внешнего репозитория"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "path to git-upload-pack on the remote"
 msgstr "путь к git-upload-pack на внешнем репозитории"
 
-#: builtin/clone.c:122 builtin/fetch.c:142 builtin/grep.c:836
-#: builtin/pull.c:225
+#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/pull.c:208
 msgid "depth"
 msgstr "глубина"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "create a shallow clone of that depth"
 msgstr "сделать частичный клон указанной глубины"
 
-#: builtin/clone.c:124 builtin/fetch.c:144 builtin/pack-objects.c:3295
+#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/pull.c:211
 msgid "time"
 msgstr "время"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "create a shallow clone since a specific time"
 msgstr "сделать частичный клон до определенного времени"
 
-#: builtin/clone.c:126 builtin/fetch.c:146 builtin/fetch.c:169
-#: builtin/rebase.c:1389
+#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
 msgid "revision"
 msgstr "редакция"
 
-#: builtin/clone.c:127 builtin/fetch.c:147
+#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "углубить историю частичного клона исключая редакцию"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133 builtin/submodule--helper.c:1843
+#: builtin/submodule--helper.c:2352
 msgid "clone only one branch, HEAD or --branch"
 msgstr "клонировать только одну ветку, HEAD или --branch"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "не клонировать метки, а также настроить, чтобы не клонировались и в дальнейшем"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "any cloned submodules will be shallow"
 msgstr "все склонированные подмодули будут частичными клонами"
 
-#: builtin/clone.c:134 builtin/init-db.c:495
+#: builtin/clone.c:138 builtin/init-db.c:561
 msgid "gitdir"
 msgstr "каталог-git"
 
-#: builtin/clone.c:135 builtin/init-db.c:496
+#: builtin/clone.c:139 builtin/init-db.c:562
 msgid "separate git dir from working tree"
 msgstr "разместить каталог git отдельно от рабочей копии"
 
-#: builtin/clone.c:136
+#: builtin/clone.c:140
 msgid "key=value"
 msgstr "ключ=значение"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "set config inside the new repository"
 msgstr "установить параметры внутри нового репозитория"
 
-#: builtin/clone.c:139 builtin/fetch.c:164 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:172
+#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/pull.c:230 builtin/push.c:584 builtin/send-pack.c:196
 msgid "server-specific"
 msgstr "зависит-от-сервера"
 
-#: builtin/clone.c:139 builtin/fetch.c:164 builtin/ls-remote.c:76
-#: builtin/push.c:585 builtin/send-pack.c:173
+#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: builtin/pull.c:231 builtin/push.c:584 builtin/send-pack.c:197
 msgid "option to transmit"
 msgstr "передаваемые опции"
 
-#: builtin/clone.c:140 builtin/fetch.c:165 builtin/pull.c:238
-#: builtin/push.c:586
+#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "использовать только IPv4 адреса"
 
-#: builtin/clone.c:142 builtin/fetch.c:167 builtin/pull.c:241
-#: builtin/push.c:588
+#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "использовать только IPv6 адреса"
 
-#: builtin/clone.c:280
+#: builtin/clone.c:150
+msgid "any cloned submodules will use their remote-tracking branch"
+msgstr ""
+
+#: builtin/clone.c:152
+msgid "initialize sparse-checkout file to include only files at root"
+msgstr ""
+
+#: builtin/clone.c:288
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
 msgstr "Имя каталога не может быть угадано.\nУкажите имя каталога с помощью параметра командной строки"
 
-#: builtin/clone.c:333
+#: builtin/clone.c:341
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "информация: Не удалось добавить альтернативу для «%s»: %s\n"
 
-#: builtin/clone.c:405
-#, c-format
-msgid "failed to open '%s'"
-msgstr "не удалось открыть «%s»"
-
-#: builtin/clone.c:413
+#: builtin/clone.c:414
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s уже существует и не является каталогом"
 
-#: builtin/clone.c:427
+#: builtin/clone.c:432
 #, c-format
-msgid "failed to stat %s\n"
-msgstr "не удалось выполнить stat %s\n"
+msgid "failed to start iterator over '%s'"
+msgstr ""
 
-#: builtin/clone.c:444
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "сбой отсоединения «%s»"
-
-#: builtin/clone.c:449
+#: builtin/clone.c:463
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "не удалось создать ссылку «%s»"
 
-#: builtin/clone.c:453
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "не удалось копировать файл в «%s»"
 
-#: builtin/clone.c:479
+#: builtin/clone.c:472
+#, c-format
+msgid "failed to iterate over '%s'"
+msgstr ""
+
+#: builtin/clone.c:499
 #, c-format
 msgid "done.\n"
 msgstr "готово.\n"
 
-#: builtin/clone.c:493
+#: builtin/clone.c:513
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
-"and retry the checkout with 'git checkout -f HEAD'\n"
-msgstr "Клонирование прошло успешно, но во время переключения состояния произошла ошибка.\nС помощь команды «git status» вы можете просмотреть, какие файлы были обновлены,\nа с помощью «git checkout -f HEAD» можно повторить попытку переключения на ветку \n"
+"and retry with 'git restore --source=HEAD :/'\n"
+msgstr "Клонирование прошло успешно, но во время переключения на состояние произошла ошибка.\nС помощь команды «git status» вы можете просмотреть какие файлы были обновлены,\nа повторить попытку перехода на версию можно с помощью «git restore --source=HEAD :/»\n"
 
-#: builtin/clone.c:570
+#: builtin/clone.c:590
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Не удалось найти внешнюю ветку %s для клонирования."
 
-#: builtin/clone.c:689
+#: builtin/clone.c:709
 #, c-format
 msgid "unable to update %s"
 msgstr "не удалось обновить %s"
 
-#: builtin/clone.c:739
-msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
-msgstr "внешний HEAD ссылается на несуществующую ссылку, нельзя переключиться на такую версию.\n"
+#: builtin/clone.c:757
+msgid "failed to initialize sparse-checkout"
+msgstr ""
 
-#: builtin/clone.c:770
+#: builtin/clone.c:780
+msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
+msgstr "внешний HEAD ссылается на несуществующую ссылку, нельзя переключиться на такое состояние.\n"
+
+#: builtin/clone.c:812
 msgid "unable to checkout working tree"
 msgstr "не удалось переключиться на версию в рабочем каталоге"
 
-#: builtin/clone.c:815
+#: builtin/clone.c:887
 msgid "unable to write parameters to config file"
 msgstr "не удалось записать параметры в файл конфигурации"
 
-#: builtin/clone.c:878
+#: builtin/clone.c:950
 msgid "cannot repack to clean up"
 msgstr "не удалось выполнить перепаковку для очистки"
 
-#: builtin/clone.c:880
+#: builtin/clone.c:952
 msgid "cannot unlink temporary alternates file"
 msgstr "не удалось отсоединить временные альтернативные файлы"
 
-#: builtin/clone.c:920 builtin/receive-pack.c:1952
+#: builtin/clone.c:992 builtin/receive-pack.c:2493
 msgid "Too many arguments."
 msgstr "Слишком много аргументов."
 
-#: builtin/clone.c:924
+#: builtin/clone.c:996
 msgid "You must specify a repository to clone."
 msgstr "Вы должны указать репозиторий для клонирования."
 
-#: builtin/clone.c:937
+#: builtin/clone.c:1009
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "--bare и --origin %s нельзя использовать одновременно."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:1012
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare и --separate-git-dir нельзя использовать одновременно."
 
-#: builtin/clone.c:953
+#: builtin/clone.c:1025
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "репозиторий «%s» не существует"
 
-#: builtin/clone.c:959 builtin/fetch.c:1610
+#: builtin/clone.c:1029 builtin/fetch.c:1841
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "глубина %s не является положительным числом"
 
-#: builtin/clone.c:969
+#: builtin/clone.c:1039
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "целевой путь «%s» уже существует и не является пустым каталогом."
 
-#: builtin/clone.c:979
+#: builtin/clone.c:1045
+#, c-format
+msgid "repository path '%s' already exists and is not an empty directory."
+msgstr ""
+
+#: builtin/clone.c:1059
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "рабочий каталог «%s» уже существует."
 
-#: builtin/clone.c:994 builtin/clone.c:1015 builtin/difftool.c:264
-#: builtin/worktree.c:296 builtin/worktree.c:328
+#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
+#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "не удалось создать родительские каталоги для «%s»"
 
-#: builtin/clone.c:999
+#: builtin/clone.c:1079
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "не удалось создать рабочий каталог «%s»"
 
-#: builtin/clone.c:1019
+#: builtin/clone.c:1099
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Клонирование в голый репозиторий «%s»…\n"
 
-#: builtin/clone.c:1021
+#: builtin/clone.c:1101
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Клонирование в «%s»…\n"
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1125
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-"
 "if-able"
 msgstr "клонирование с параметром --recursive нельзя использовать одновременно ни с --reference, ни с --reference-if-able"
 
-#: builtin/clone.c:1106
+#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#, c-format
+msgid "'%s' is not a valid remote name"
+msgstr "«%s» не является допустимым именем внешнего репозитория."
+
+#: builtin/clone.c:1210
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth игнорируется на локальных клонах; вместо этого используйте file://."
 
-#: builtin/clone.c:1108
+#: builtin/clone.c:1212
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since игнорируется на локальных клонах; используйте file:// вместо этого."
 
-#: builtin/clone.c:1110
+#: builtin/clone.c:1214
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude игнорируется на локальных клонах; используйте file:// вместо этого."
 
-#: builtin/clone.c:1112
+#: builtin/clone.c:1216
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1115
+#: builtin/clone.c:1219
 msgid "source repository is shallow, ignoring --local"
 msgstr "исходный репозиторий является частичным, --local игнорируется"
 
-#: builtin/clone.c:1120
+#: builtin/clone.c:1224
 msgid "--local is ignored"
 msgstr "--local игнорируется"
 
-#: builtin/clone.c:1197 builtin/clone.c:1205
+#: builtin/clone.c:1311 builtin/clone.c:1319
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Внешняя ветка %s не найдена в вышестоящем репозитории %s"
 
-#: builtin/clone.c:1208
+#: builtin/clone.c:1322
 msgid "You appear to have cloned an empty repository."
 msgstr "Похоже, что вы клонировали пустой репозиторий."
 
@@ -10239,6 +11923,107 @@
 msgid "--command must be the first argument"
 msgstr "параметр --command должен быть первым"
 
+#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+msgid ""
+"git commit-graph verify [--object-dir <objdir>] [--shallow] "
+"[--[no-]progress]"
+msgstr ""
+
+#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
+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>"
+msgstr ""
+
+#: builtin/commit-graph.c:64
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr ""
+
+#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
+#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+msgid "dir"
+msgstr "каталог"
+
+#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
+#: builtin/commit-graph.c:317
+msgid "The object directory to store the graph"
+msgstr "Каталог объектов для сохранения графа"
+
+#: builtin/commit-graph.c:83
+msgid "if the commit-graph is split, only verify the tip file"
+msgstr ""
+
+#: builtin/commit-graph.c:106
+#, c-format
+msgid "Could not open commit-graph '%s'"
+msgstr "Не удалось открыть файл commit-graph «%s»"
+
+#: builtin/commit-graph.c:142
+#, c-format
+msgid "unrecognized --split argument, %s"
+msgstr ""
+
+#: builtin/commit-graph.c:155
+#, c-format
+msgid "unexpected non-hex object ID: %s"
+msgstr ""
+
+#: builtin/commit-graph.c:160
+#, c-format
+msgid "invalid object: %s"
+msgstr ""
+
+#: builtin/commit-graph.c:213
+msgid "start walk at all refs"
+msgstr "начать со всех ссылок"
+
+#: builtin/commit-graph.c:215
+msgid "scan pack-indexes listed by stdin for commits"
+msgstr "искать коммиты в pack-indexes, перечисленных на стандартном вводе"
+
+#: builtin/commit-graph.c:217
+msgid "start walk at commits listed by stdin"
+msgstr "начать с коммитов, перечисленных на стандартном вводе"
+
+#: builtin/commit-graph.c:219
+msgid "include all commits already in the commit-graph file"
+msgstr "включить все коммиты, которые уже есть в файле commit-graph"
+
+#: builtin/commit-graph.c:221
+msgid "enable computation for changed paths"
+msgstr ""
+
+#: builtin/commit-graph.c:224
+msgid "allow writing an incremental commit-graph file"
+msgstr ""
+
+#: builtin/commit-graph.c:228
+msgid "maximum number of commits in a non-base split commit-graph"
+msgstr ""
+
+#: builtin/commit-graph.c:230
+msgid "maximum ratio between two levels of a split commit-graph"
+msgstr ""
+
+#: builtin/commit-graph.c:232
+msgid "only expire files older than a given date-time"
+msgstr ""
+
+#: builtin/commit-graph.c:234
+msgid "maximum number of changed-path Bloom filters to compute"
+msgstr ""
+
+#: builtin/commit-graph.c:255
+msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
+msgstr "используйте что-то одно из --reachable, --stdin-commits и --stdin-packs"
+
+#: builtin/commit-graph.c:287
+msgid "Collecting commits from input"
+msgstr ""
+
 #: builtin/commit-tree.c:18
 msgid ""
 "git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
@@ -10250,7 +12035,7 @@
 msgid "duplicate parent %s ignored"
 msgstr ""
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:520
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
 #, c-format
 msgid "not a valid object name %s"
 msgstr ""
@@ -10258,17 +12043,17 @@
 #: builtin/commit-tree.c:93
 #, c-format
 msgid "git commit-tree: failed to open '%s'"
-msgstr ""
+msgstr "git commit-tree: сбой при открытии «%s»"
 
 #: builtin/commit-tree.c:96
 #, c-format
 msgid "git commit-tree: failed to read '%s'"
-msgstr ""
+msgstr "git commit-tree: сбой при чтении «%s»"
 
 #: builtin/commit-tree.c:98
 #, c-format
 msgid "git commit-tree: failed to close '%s'"
-msgstr ""
+msgstr "git commit-tree: сбой при закрытии «%s»"
 
 #: builtin/commit-tree.c:111
 msgid "parent"
@@ -10278,32 +12063,32 @@
 msgid "id of a parent commit object"
 msgstr ""
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1480 builtin/merge.c:268
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1473
-#: builtin/tag.c:406
+#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
+#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
+#: builtin/tag.c:413
 msgid "message"
 msgstr "сообщение"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1480
+#: builtin/commit-tree.c:115 builtin/commit.c:1504
 msgid "commit message"
 msgstr "сообщение коммита"
 
 #: builtin/commit-tree.c:118
 msgid "read commit log message from file"
-msgstr ""
+msgstr "прочитать сообщение коммита из файла"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1492 builtin/merge.c:283
-#: builtin/pull.c:193 builtin/revert.c:117
+#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "подписать коммит с помощью GPG"
 
 #: builtin/commit-tree.c:133
 msgid "must give exactly one tree"
-msgstr ""
+msgstr "необходимо указать одно дерево"
 
 #: builtin/commit-tree.c:140
 msgid "git commit-tree: failed to read"
-msgstr ""
+msgstr "git commit-tree: сбой при чтении"
 
 #: builtin/commit.c:41
 msgid "git commit [<options>] [--] <pathspec>..."
@@ -10330,138 +12115,155 @@
 msgstr "Копируемый коммит теперь пуст, возможно после разрешения конфликтов.\nЕсли вы все равно хотите сделать пустой коммит, используйте:\n\n    git commit --allow-empty\n\n"
 
 #: builtin/commit.c:63
-msgid "Otherwise, please use 'git reset'\n"
-msgstr "В противном случае, используйте «git reset»\n"
+msgid "Otherwise, please use 'git rebase --skip'\n"
+msgstr "В противном случае, используйте «git rebase --skip»\n"
 
 #: builtin/commit.c:66
+msgid "Otherwise, please use 'git cherry-pick --skip'\n"
+msgstr ""
+
+#: builtin/commit.c:69
 msgid ""
+"and then use:\n"
+"\n"
+"    git cherry-pick --continue\n"
+"\n"
+"to resume cherry-picking the remaining commits.\n"
 "If you wish to skip this commit, use:\n"
 "\n"
-"    git reset\n"
+"    git cherry-pick --skip\n"
 "\n"
-"Then \"git cherry-pick --continue\" will resume cherry-picking\n"
-"the remaining commits.\n"
-msgstr "Если вы хотите пропустит этот коммит, используйте команду:\n\n    git reset\n\nПосле этого «git cherry-pick --continue» продолжит копирование оставшихся коммитов.\n"
+msgstr ""
 
 #: builtin/commit.c:312
 msgid "failed to unpack HEAD tree object"
 msgstr "сбой распаковки объекта дерева HEAD"
 
-#: builtin/commit.c:353
+#: builtin/commit.c:348
+msgid "--pathspec-from-file with -a does not make sense"
+msgstr ""
+
+#: builtin/commit.c:361
+msgid "No paths with --include/--only does not make sense."
+msgstr "Указание путей каталогов с опциями --include/--only не имеет смысла."
+
+#: builtin/commit.c:373
 msgid "unable to create temporary index"
 msgstr "не удалось создать временный индекс"
 
-#: builtin/commit.c:359
+#: builtin/commit.c:382
 msgid "interactive add failed"
 msgstr "сбой интерактивного добавления"
 
-#: builtin/commit.c:373
+#: builtin/commit.c:397
 msgid "unable to update temporary index"
 msgstr "не удалось обновить временный индекс"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:399
 msgid "Failed to update main cache tree"
 msgstr "Сбой при обновлении основного кэша дерева"
 
-#: builtin/commit.c:400 builtin/commit.c:423 builtin/commit.c:469
+#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
 msgid "unable to write new_index file"
 msgstr "не удалось записать файл new_index"
 
-#: builtin/commit.c:452
+#: builtin/commit.c:476
 msgid "cannot do a partial commit during a merge."
 msgstr "нельзя создать частичный коммит во время слияния."
 
-#: builtin/commit.c:454
+#: builtin/commit.c:478
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "нельзя создать частичный коммит во время копирования коммита."
 
-#: builtin/commit.c:462
+#: builtin/commit.c:480
+msgid "cannot do a partial commit during a rebase."
+msgstr ""
+
+#: builtin/commit.c:488
 msgid "cannot read the index"
 msgstr "не удалось прочитать индекс"
 
-#: builtin/commit.c:481
+#: builtin/commit.c:507
 msgid "unable to write temporary index file"
 msgstr "не удалось записать временный файл индекса"
 
-#: builtin/commit.c:579
+#: builtin/commit.c:605
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "у коммита «%s» отсутствует автор в заголовке"
 
-#: builtin/commit.c:581
+#: builtin/commit.c:607
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "у коммита «%s» строка автора в неправильном формате"
 
-#: builtin/commit.c:600
+#: builtin/commit.c:626
 msgid "malformed --author parameter"
 msgstr "параметр --author в неправильном формате"
 
-#: builtin/commit.c:653
+#: builtin/commit.c:679
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr "нельзя выбрать символ комментария, который\nне используется в текущем сообщении коммита"
 
-#: builtin/commit.c:691 builtin/commit.c:724 builtin/commit.c:1069
+#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "не удалось запросить коммит %s"
 
-#: builtin/commit.c:703 builtin/shortlog.c:319
+#: builtin/commit.c:729 builtin/shortlog.c:425
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(чтение файла журнала из стандартного ввода)\n"
 
-#: builtin/commit.c:705
+#: builtin/commit.c:731
 msgid "could not read log from standard input"
 msgstr "не удалось прочитать файл журнала из стандартного ввода"
 
-#: builtin/commit.c:709
+#: builtin/commit.c:735
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "не удалось прочитать файл журнала «%s»"
 
-#: builtin/commit.c:740 builtin/commit.c:756
+#: builtin/commit.c:766 builtin/commit.c:782
 msgid "could not read SQUASH_MSG"
 msgstr "не удалось прочитать SQUASH_MSG"
 
-#: builtin/commit.c:747
+#: builtin/commit.c:773
 msgid "could not read MERGE_MSG"
 msgstr "не удалось прочитать MERGE_MSG"
 
-#: builtin/commit.c:807
+#: builtin/commit.c:833
 msgid "could not write commit template"
 msgstr "не удалось записать шаблон описания коммита"
 
-#: builtin/commit.c:826
-#, c-format
+#: builtin/commit.c:853
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d MERGE_HEAD\n"
 "and try again.\n"
-msgstr "\nПохоже, что вы пытаетесь закоммитить слияние.\nЕсли это ошибка, пожалуйста удалите файл\n\t%s\nи попробуйте снова.\n"
+msgstr ""
 
-#: builtin/commit.c:831
-#, c-format
+#: builtin/commit.c:858
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
-"If this is not correct, please remove the file\n"
-"\t%s\n"
+"If this is not correct, please run\n"
+"\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "and try again.\n"
-msgstr "\nПохоже, что вы пытаетесь закоммитить при копировании коммита.\nЕсли это не так, то удалите файл\n\t%s\nи попробуйте снова.\n"
+msgstr ""
 
-#: builtin/commit.c:844
+#: builtin/commit.c:868
 #, 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 "Пожалуйста, введите сообщение коммита для ваших изменений. Строки,\nначинающиеся с «%c» будут проигнорированы, а пустое сообщение\nотменяет процесс коммита.\n"
 
-#: builtin/commit.c:852
+#: builtin/commit.c:876
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -10469,583 +12271,541 @@
 "An empty message aborts the commit.\n"
 msgstr "Пожалуйста, введите сообщение коммита для ваших изменений. Строки,\nначинающиеся с «%c» будут оставлены; вы можете удалить их вручную,\nесли хотите. Пустое сообщение отменяет процесс коммита.\n"
 
-#: builtin/commit.c:869
+#: builtin/commit.c:893
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sАвтор:     %.*s <%.*s>"
 
-#: builtin/commit.c:877
+#: builtin/commit.c:901
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sДата:      %s"
 
-#: builtin/commit.c:884
+#: builtin/commit.c:908
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sКоммитер:  %.*s <%.*s>"
 
-#: builtin/commit.c:902
+#: builtin/commit.c:926
 msgid "Cannot read index"
 msgstr "Не удалось прочитать индекс"
 
-#: builtin/commit.c:969
+#: builtin/commit.c:997
 msgid "Error building trees"
 msgstr "Ошибка при построении деревьев"
 
-#: builtin/commit.c:983 builtin/tag.c:269
+#: builtin/commit.c:1011 builtin/tag.c:276
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Пожалуйста, укажите сообщение, при указании опций -m или -F.\n"
 
-#: builtin/commit.c:1027
+#: builtin/commit.c:1055
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr "--author «%s» не в формате «Имя <почта>» и не совпадает с существующим автором"
 
-#: builtin/commit.c:1041
+#: builtin/commit.c:1069
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Недопустимый режим показа игнорируемых файлов «%s»"
 
-#: builtin/commit.c:1059 builtin/commit.c:1284
+#: builtin/commit.c:1087 builtin/commit.c:1331
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Неправильный режим неотслеживаемых файлов «%s»"
 
-#: builtin/commit.c:1097
+#: builtin/commit.c:1127
 msgid "--long and -z are incompatible"
 msgstr "--long и -z нельзя использовать одновременно"
 
-#: builtin/commit.c:1130
+#: builtin/commit.c:1171
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Указание одновременно опций --reset-author и --author не имеет смысла"
 
-#: builtin/commit.c:1139
+#: builtin/commit.c:1180
 msgid "You have nothing to amend."
 msgstr "Нечего исправлять."
 
-#: builtin/commit.c:1142
+#: builtin/commit.c:1183
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Вы в процессе слияния —  сейчас нельзя исправлять."
 
-#: builtin/commit.c:1144
+#: builtin/commit.c:1185
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Вы в процессе копирования коммита —  сейчас нельзя исправлять."
 
-#: builtin/commit.c:1147
+#: builtin/commit.c:1187
+msgid "You are in the middle of a rebase -- cannot amend."
+msgstr ""
+
+#: builtin/commit.c:1190
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Опции --squash и --fixup не могут использоваться одновременно"
 
-#: builtin/commit.c:1157
+#: builtin/commit.c:1200
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Может использоваться только одна из опций -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1159
+#: builtin/commit.c:1202
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr ""
 
-#: builtin/commit.c:1167
+#: builtin/commit.c:1211
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author может использоваться только одновременно с опциями -C, -c или --amend."
 
-#: builtin/commit.c:1184
+#: builtin/commit.c:1229
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr "Может использоваться только одна из опций --include/--only/--all/--interactive/--patch."
 
-#: builtin/commit.c:1186
-msgid "No paths with --include/--only does not make sense."
-msgstr "Указание путей каталогов с опциями --include/--only не имеет смысла."
-
-#: builtin/commit.c:1192
+#: builtin/commit.c:1235
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr ""
 
-#: builtin/commit.c:1319 builtin/commit.c:1503
+#: builtin/commit.c:1366 builtin/commit.c:1527
 msgid "show status concisely"
 msgstr "кратко показать статус"
 
-#: builtin/commit.c:1321 builtin/commit.c:1505
+#: builtin/commit.c:1368 builtin/commit.c:1529
 msgid "show branch information"
 msgstr "показать информацию о версии"
 
-#: builtin/commit.c:1323
+#: builtin/commit.c:1370
 msgid "show stash information"
 msgstr "показать информацию о спрятанном"
 
-#: builtin/commit.c:1325 builtin/commit.c:1507
+#: builtin/commit.c:1372 builtin/commit.c:1531
 msgid "compute full ahead/behind values"
 msgstr ""
 
-#: builtin/commit.c:1327
+#: builtin/commit.c:1374
 msgid "version"
 msgstr "версия"
 
-#: builtin/commit.c:1327 builtin/commit.c:1509 builtin/push.c:561
-#: builtin/worktree.c:643
+#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
+#: builtin/worktree.c:725
 msgid "machine-readable output"
 msgstr "машиночитаемый вывод"
 
-#: builtin/commit.c:1330 builtin/commit.c:1511
+#: builtin/commit.c:1377 builtin/commit.c:1535
 msgid "show status in long format (default)"
 msgstr "показать статус в длинном формате (по умолчанию)"
 
-#: builtin/commit.c:1333 builtin/commit.c:1514
+#: builtin/commit.c:1380 builtin/commit.c:1538
 msgid "terminate entries with NUL"
 msgstr "завершать записи НУЛЕВЫМ байтом"
 
-#: builtin/commit.c:1335 builtin/commit.c:1339 builtin/commit.c:1517
-#: builtin/fast-export.c:1085 builtin/fast-export.c:1088 builtin/rebase.c:1465
-#: parse-options.h:331
+#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
+#: builtin/fast-export.c:1204 builtin/rebase.c:1406 parse-options.h:336
 msgid "mode"
 msgstr "режим"
 
-#: builtin/commit.c:1336 builtin/commit.c:1517
+#: builtin/commit.c:1383 builtin/commit.c:1541
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "показать неотслеживаемые файлы, опциональные режимы: all (все), normal (как обычно), no (нет). (По умолчанию: all)"
 
-#: builtin/commit.c:1340
+#: builtin/commit.c:1387
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
 msgstr "показывать игнорируемые файлы, с опциональным режимом: traditional (традиционный), matching (только совпадающие), no (не показывать). (По умолчанию: traditional)"
 
-#: builtin/commit.c:1342 parse-options.h:179
+#: builtin/commit.c:1389 parse-options.h:192
 msgid "when"
 msgstr "когда"
 
-#: builtin/commit.c:1343
+#: builtin/commit.c:1390
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr "игнорировать изменения в подмодулях, опционально когда: all (всегда), dirty (изменённые), untracked (неотслеживаемые). (По умолчанию: all)"
 
-#: builtin/commit.c:1345
+#: builtin/commit.c:1392
 msgid "list untracked files in columns"
 msgstr "показать неотслеживаемые файлы по столбцам"
 
-#: builtin/commit.c:1346
+#: builtin/commit.c:1393
 msgid "do not detect renames"
 msgstr "не определять переименования"
 
-#: builtin/commit.c:1348
+#: builtin/commit.c:1395
 msgid "detect renames, optionally set similarity index"
 msgstr "определять переименования, опционально устанавливать рейтинг сходства"
 
-#: builtin/commit.c:1368
+#: builtin/commit.c:1415
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "Неподдерживаемая комбинация аргументов отображения игнорируемых и неотслеживаемых файлов"
 
-#: builtin/commit.c:1473
+#: builtin/commit.c:1497
 msgid "suppress summary after successful commit"
 msgstr "не выводить сводку изменений после успешного коммита"
 
-#: builtin/commit.c:1474
+#: builtin/commit.c:1498
 msgid "show diff in commit message template"
 msgstr "добавить список изменений в шаблон сообщения коммита"
 
-#: builtin/commit.c:1476
+#: builtin/commit.c:1500
 msgid "Commit message options"
 msgstr "Опции сообщения коммита"
 
-#: builtin/commit.c:1477 builtin/merge.c:272 builtin/tag.c:408
+#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
 msgid "read message from file"
 msgstr "прочитать сообщение из файла"
 
-#: builtin/commit.c:1478
+#: builtin/commit.c:1502
 msgid "author"
 msgstr "автор"
 
-#: builtin/commit.c:1478
+#: builtin/commit.c:1502
 msgid "override author for commit"
 msgstr "подменить автора коммита"
 
-#: builtin/commit.c:1479 builtin/gc.c:539
+#: builtin/commit.c:1503 builtin/gc.c:542
 msgid "date"
 msgstr "дата"
 
-#: builtin/commit.c:1479
+#: builtin/commit.c:1503
 msgid "override date for commit"
 msgstr "подменить дату коммита"
 
-#: builtin/commit.c:1481 builtin/commit.c:1482 builtin/commit.c:1483
-#: builtin/commit.c:1484 parse-options.h:323 ref-filter.h:92
+#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
+#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
 msgid "commit"
 msgstr "коммит"
 
-#: builtin/commit.c:1481
+#: builtin/commit.c:1505
 msgid "reuse and edit message from specified commit"
 msgstr "использовать и отредактировать сообщение от указанного коммита"
 
-#: builtin/commit.c:1482
+#: builtin/commit.c:1506
 msgid "reuse message from specified commit"
 msgstr "использовать сообщение указанного коммита"
 
-#: builtin/commit.c:1483
+#: builtin/commit.c:1507
 msgid "use autosquash formatted message to fixup specified commit"
 msgstr "использовать форматированное сообщение автоуплотнения для исправления указанного коммита"
 
-#: builtin/commit.c:1484
+#: builtin/commit.c:1508
 msgid "use autosquash formatted message to squash specified commit"
 msgstr "использовать форматированное сообщение автоуплотнения для уплотнения указанного коммита"
 
-#: builtin/commit.c:1485
+#: builtin/commit.c:1509
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "коммит теперь за моим авторством (используется с -C/-c/--amend)"
 
-#: builtin/commit.c:1486 builtin/log.c:1541 builtin/merge.c:285
-#: builtin/pull.c:162 builtin/revert.c:109
-msgid "add Signed-off-by:"
-msgstr "добавить Signed-off-by:"
+#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/pull.c:145 builtin/revert.c:110
+msgid "add a Signed-off-by trailer"
+msgstr ""
 
-#: builtin/commit.c:1487
+#: builtin/commit.c:1511
 msgid "use specified template file"
 msgstr "использовать указанный файл шаблона"
 
-#: builtin/commit.c:1488
+#: builtin/commit.c:1512
 msgid "force edit of commit"
 msgstr "принудительно редактировать коммит"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1514
 msgid "include status in commit message template"
 msgstr "включить статус файлов в шаблон сообщения коммита"
 
-#: builtin/commit.c:1495
+#: builtin/commit.c:1519
 msgid "Commit contents options"
 msgstr "Опции содержимого коммита"
 
-#: builtin/commit.c:1496
+#: builtin/commit.c:1520
 msgid "commit all changed files"
 msgstr "закоммитить все измененные файлы"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1521
 msgid "add specified files to index for commit"
 msgstr "добавить указанные файлы в индекс для коммита"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1522
 msgid "interactively add files"
 msgstr "интерактивное добавление файлов"
 
-#: builtin/commit.c:1499
+#: builtin/commit.c:1523
 msgid "interactively add changes"
 msgstr "интерактивное добавление изменений"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1524
 msgid "commit only specified files"
 msgstr "закоммитить только указанные файлы"
 
-#: builtin/commit.c:1501
+#: builtin/commit.c:1525
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "пропустить перехватчик pre-commit и commit-msg"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1526
 msgid "show what would be committed"
 msgstr "показать, что будет закоммичено"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1539
 msgid "amend previous commit"
 msgstr "исправить предыдущий коммит"
 
-#: builtin/commit.c:1516
+#: builtin/commit.c:1540
 msgid "bypass post-rewrite hook"
 msgstr "пропустить перехватчик post-rewrite"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1547
 msgid "ok to record an empty change"
 msgstr "разрешить запись пустого коммита"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1549
 msgid "ok to record a change with an empty message"
 msgstr "разрешить запись изменений с пустым сообщением"
 
-#: builtin/commit.c:1596
+#: builtin/commit.c:1622
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Файл MERGE_HEAD поврежден (%s)"
 
-#: builtin/commit.c:1603
+#: builtin/commit.c:1629
 msgid "could not read MERGE_MODE"
 msgstr "не удалось прочитать MERGE_MODE"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1650
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "не удалось открыть сообщение коммита: %s"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1657
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Отмена коммита из-за пустого сообщения коммита.\n"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1662
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Отмена коммита; вы не изменили сообщение.\n"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1696
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
-"not exceeded, and then \"git reset HEAD\" to recover."
-msgstr "репозиторий был обновлен, но не удалось записать файл new_index. Удостоверьтесь, что на диске есть свободное место и квота не исчерпана, а после этого запустите «git reset HEAD» для восстановления."
-
-#: builtin/commit-graph.c:10
-msgid "git commit-graph [--object-dir <objdir>]"
-msgstr "git commit-graph [--object-dir <каталог-объектов>]"
-
-#: builtin/commit-graph.c:11 builtin/commit-graph.c:23
-msgid "git commit-graph read [--object-dir <objdir>]"
-msgstr "git commit-graph read [--object-dir <каталог-объектов>]"
-
-#: builtin/commit-graph.c:12 builtin/commit-graph.c:18
-msgid "git commit-graph verify [--object-dir <objdir>]"
-msgstr "git commit-graph verify [--object-dir <каталог-объектов>]"
-
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:28
-msgid ""
-"git commit-graph write [--object-dir <objdir>] [--append] [--reachable"
-"|--stdin-packs|--stdin-commits]"
-msgstr "git commit-graph write [--object-dir <каталог-объектов>] [--append] [--reachable|--stdin-packs|--stdin-commits]"
-
-#: builtin/commit-graph.c:51 builtin/commit-graph.c:89
-#: builtin/commit-graph.c:147 builtin/commit-graph.c:205 builtin/fetch.c:153
-#: builtin/log.c:1561
-msgid "dir"
-msgstr "каталог"
-
-#: builtin/commit-graph.c:52 builtin/commit-graph.c:90
-#: builtin/commit-graph.c:148 builtin/commit-graph.c:206
-msgid "The object directory to store the graph"
-msgstr "Каталог объектов для сохранения графа"
-
-#: builtin/commit-graph.c:68 builtin/commit-graph.c:105
-#, c-format
-msgid "Could not open commit-graph '%s'"
-msgstr "Не удалось открыть файл commit-graph «%s»"
-
-#: builtin/commit-graph.c:150
-msgid "start walk at all refs"
-msgstr "начать со всех ссылок"
-
-#: builtin/commit-graph.c:152
-msgid "scan pack-indexes listed by stdin for commits"
-msgstr "искать коммиты в pack-indexes, перечисленных на стандартном вводе"
-
-#: builtin/commit-graph.c:154
-msgid "start walk at commits listed by stdin"
-msgstr "начать с коммитов, перечисленных на стандартном вводе"
-
-#: builtin/commit-graph.c:156
-msgid "include all commits already in the commit-graph file"
-msgstr "включить все коммиты, которые уже есть в файле commit-graph"
-
-#: builtin/commit-graph.c:165
-msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
-msgstr "используйте что-то одно из --reachable, --stdin-commits и --stdin-packs"
+"not exceeded, and then \"git restore --staged :/\" to recover."
+msgstr "репозиторий был обновлен, но не удалось записать файл new_index. Удостоверьтесь, что на диске есть свободное место и квота не исчерпана, а после этого запустите «git restore --staged :/» для восстановления."
 
 #: builtin/config.c:11
 msgid "git config [<options>]"
 msgstr "git config [<опции>]"
 
-#: builtin/config.c:103
+#: builtin/config.c:109 builtin/env--helper.c:27
 #, c-format
 msgid "unrecognized --type argument, %s"
 msgstr ""
 
-#: builtin/config.c:115
+#: builtin/config.c:121
 msgid "only one type at a time"
 msgstr ""
 
-#: builtin/config.c:124
+#: builtin/config.c:130
 msgid "Config file location"
 msgstr "Размещение файла конфигурации"
 
-#: builtin/config.c:125
+#: builtin/config.c:131
 msgid "use global config file"
 msgstr "использовать глобальный файл конфигурации"
 
-#: builtin/config.c:126
+#: builtin/config.c:132
 msgid "use system config file"
 msgstr "использовать системный файл конфигурации"
 
-#: builtin/config.c:127
+#: builtin/config.c:133
 msgid "use repository config file"
 msgstr "использовать файл конфигурации репозитория"
 
-#: builtin/config.c:128
+#: builtin/config.c:134
 msgid "use per-worktree config file"
 msgstr ""
 
-#: builtin/config.c:129
+#: builtin/config.c:135
 msgid "use given config file"
 msgstr "использовать указанный файл конфигурации"
 
-#: builtin/config.c:130
+#: builtin/config.c:136
 msgid "blob-id"
 msgstr "идент-двоичн-объекта"
 
-#: builtin/config.c:130
+#: builtin/config.c:136
 msgid "read config from given blob object"
 msgstr "прочитать настройки из указанного двоичного объекта"
 
-#: builtin/config.c:131
+#: builtin/config.c:137
 msgid "Action"
 msgstr "Действие"
 
-#: builtin/config.c:132
-msgid "get value: name [value-regex]"
-msgstr "получить значение: имя [шаблон-значений]"
+#: builtin/config.c:138
+msgid "get value: name [value-pattern]"
+msgstr ""
 
-#: builtin/config.c:133
-msgid "get all values: key [value-regex]"
-msgstr "получить все значения: ключ [шаблон-значений]"
+#: builtin/config.c:139
+msgid "get all values: key [value-pattern]"
+msgstr ""
 
-#: builtin/config.c:134
-msgid "get values for regexp: name-regex [value-regex]"
-msgstr "получить значения по шаблону: шаблон-имен [шаблон-значений]"
+#: builtin/config.c:140
+msgid "get values for regexp: name-regex [value-pattern]"
+msgstr ""
 
-#: builtin/config.c:135
+#: builtin/config.c:141
 msgid "get value specific for the URL: section[.var] URL"
 msgstr "получить значение, специфичное для URL: раздел[.переменная] URL"
 
-#: builtin/config.c:136
-msgid "replace all matching variables: name value [value_regex]"
-msgstr "заменить все соответствующие переменные: имя значение [шаблон-значений]"
+#: builtin/config.c:142
+msgid "replace all matching variables: name value [value-pattern]"
+msgstr ""
 
-#: builtin/config.c:137
+#: builtin/config.c:143
 msgid "add a new variable: name value"
 msgstr "добавить новую переменную: имя значение"
 
-#: builtin/config.c:138
-msgid "remove a variable: name [value-regex]"
-msgstr "удалить переменную: имя [шаблон-значений]"
+#: builtin/config.c:144
+msgid "remove a variable: name [value-pattern]"
+msgstr ""
 
-#: builtin/config.c:139
-msgid "remove all matches: name [value-regex]"
-msgstr "удалить все совпадающие: имя [шаблон-значений]"
+#: builtin/config.c:145
+msgid "remove all matches: name [value-pattern]"
+msgstr ""
 
-#: builtin/config.c:140
+#: builtin/config.c:146
 msgid "rename section: old-name new-name"
 msgstr "переименовать раздел: старое-имя новое-имя"
 
-#: builtin/config.c:141
+#: builtin/config.c:147
 msgid "remove a section: name"
 msgstr "удалить раздел: имя"
 
-#: builtin/config.c:142
+#: builtin/config.c:148
 msgid "list all"
 msgstr "показать весь список"
 
-#: builtin/config.c:143
+#: builtin/config.c:149
+msgid "use string equality when comparing values to 'value-pattern'"
+msgstr ""
+
+#: builtin/config.c:150
 msgid "open an editor"
 msgstr "открыть в редакторе"
 
-#: builtin/config.c:144
+#: builtin/config.c:151
 msgid "find the color configured: slot [default]"
 msgstr "найти настроенный цвет: раздел [по-умолчанию]"
 
-#: builtin/config.c:145
+#: builtin/config.c:152
 msgid "find the color setting: slot [stdout-is-tty]"
 msgstr "проверить, существует ли настроенный цвет: раздел [stdout-есть-tty]"
 
-#: builtin/config.c:146
+#: builtin/config.c:153
 msgid "Type"
 msgstr "Тип"
 
-#: builtin/config.c:147
+#: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr ""
 
-#: builtin/config.c:148
+#: builtin/config.c:155
 msgid "value is \"true\" or \"false\""
 msgstr "значение — это «true» (правда) или «false» (ложь)"
 
-#: builtin/config.c:149
+#: builtin/config.c:156
 msgid "value is decimal number"
 msgstr "значение — это десятичное число"
 
-#: builtin/config.c:150
+#: builtin/config.c:157
 msgid "value is --bool or --int"
 msgstr "значение — это --bool или --int"
 
-#: builtin/config.c:151
+#: builtin/config.c:158
+msgid "value is --bool or string"
+msgstr ""
+
+#: builtin/config.c:159
 msgid "value is a path (file or directory name)"
 msgstr "значение — это путь (к файлу или каталогу)"
 
-#: builtin/config.c:152
+#: builtin/config.c:160
 msgid "value is an expiry date"
 msgstr "значение - это дата окончания срока действия"
 
-#: builtin/config.c:153
+#: builtin/config.c:161
 msgid "Other"
 msgstr "Другое"
 
-#: builtin/config.c:154
+#: builtin/config.c:162
 msgid "terminate values with NUL byte"
 msgstr "завершать значения НУЛЕВЫМ байтом"
 
-#: builtin/config.c:155
+#: builtin/config.c:163
 msgid "show variable names only"
 msgstr "показывать только имена переменных"
 
-#: builtin/config.c:156
+#: builtin/config.c:164
 msgid "respect include directives on lookup"
 msgstr "учитывать директивы include (включения файлов) при запросе"
 
-#: builtin/config.c:157
+#: builtin/config.c:165
 msgid "show origin of config (file, standard input, blob, command line)"
 msgstr "показать источник настройки (файл, стандартный ввод, двоичный объект, командная строка)"
 
-#: builtin/config.c:158
+#: builtin/config.c:166
+msgid "show scope of config (worktree, local, global, system, command)"
+msgstr ""
+
+#: builtin/config.c:167 builtin/env--helper.c:45
 msgid "value"
 msgstr ""
 
-#: builtin/config.c:158
+#: builtin/config.c:167
 msgid "with --get, use default value when missing entry"
 msgstr ""
 
-#: builtin/config.c:172
+#: builtin/config.c:181
 #, c-format
 msgid "wrong number of arguments, should be %d"
 msgstr ""
 
-#: builtin/config.c:174
+#: builtin/config.c:183
 #, c-format
 msgid "wrong number of arguments, should be from %d to %d"
 msgstr ""
 
-#: builtin/config.c:308
+#: builtin/config.c:339
 #, c-format
 msgid "invalid key pattern: %s"
 msgstr ""
 
-#: builtin/config.c:344
+#: builtin/config.c:377
 #, c-format
 msgid "failed to format default config value: %s"
 msgstr ""
 
-#: builtin/config.c:401
+#: builtin/config.c:441
 #, c-format
 msgid "cannot parse color '%s'"
 msgstr ""
 
-#: builtin/config.c:443
+#: builtin/config.c:483
 msgid "unable to parse default color value"
 msgstr "не удалось разобрать значение цвета по умолчанию"
 
-#: builtin/config.c:496 builtin/config.c:742
+#: builtin/config.c:536 builtin/config.c:833
 msgid "not in a git directory"
 msgstr ""
 
-#: builtin/config.c:499
+#: builtin/config.c:539
 msgid "writing to stdin is not supported"
 msgstr ""
 
-#: builtin/config.c:502
+#: builtin/config.c:542
 msgid "writing config blobs is not supported"
 msgstr ""
 
-#: builtin/config.c:587
+#: builtin/config.c:627
 #, c-format
 msgid ""
 "# This is Git's per-user configuration file.\n"
@@ -11055,81 +12815,89 @@
 "#\temail = %s\n"
 msgstr "# Это файл конфигурации пользователя Git.\n[user]\n# Пожалуйста, адаптируйте и раскомментируйте следующие строки:\n#\tuser = %s\n#\temail = %s\n"
 
-#: builtin/config.c:611
+#: builtin/config.c:652
 msgid "only one config file at a time"
 msgstr ""
 
-#: builtin/config.c:616
+#: builtin/config.c:658
 msgid "--local can only be used inside a git repository"
 msgstr "--local можно использовать только внутри git репозитория"
 
-#: builtin/config.c:619
+#: builtin/config.c:660
 msgid "--blob can only be used inside a git repository"
 msgstr ""
 
-#: builtin/config.c:638
+#: builtin/config.c:662
+msgid "--worktree can only be used inside a git repository"
+msgstr ""
+
+#: builtin/config.c:684
 msgid "$HOME not set"
 msgstr ""
 
-#: builtin/config.c:658
+#: builtin/config.c:708
 msgid ""
 "--worktree cannot be used with multiple working trees unless the config\n"
 "extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
 "section in \"git help worktree\" for details"
 msgstr ""
 
-#: builtin/config.c:688
+#: builtin/config.c:743
 msgid "--get-color and variable type are incoherent"
 msgstr ""
 
-#: builtin/config.c:693
+#: builtin/config.c:748
 msgid "only one action at a time"
 msgstr ""
 
-#: builtin/config.c:706
+#: builtin/config.c:761
 msgid "--name-only is only applicable to --list or --get-regexp"
 msgstr ""
 
-#: builtin/config.c:712
+#: builtin/config.c:767
 msgid ""
 "--show-origin is only applicable to --get, --get-all, --get-regexp, and "
 "--list"
 msgstr ""
 
-#: builtin/config.c:718
+#: builtin/config.c:773
 msgid "--default is only applicable to --get"
 msgstr ""
 
-#: builtin/config.c:731
+#: builtin/config.c:806
+msgid "--fixed-value only applies with 'value-pattern'"
+msgstr ""
+
+#: builtin/config.c:822
 #, c-format
 msgid "unable to read config file '%s'"
 msgstr ""
 
-#: builtin/config.c:734
+#: builtin/config.c:825
 msgid "error processing config file(s)"
 msgstr ""
 
-#: builtin/config.c:744
+#: builtin/config.c:835
 msgid "editing stdin is not supported"
 msgstr ""
 
-#: builtin/config.c:746
+#: builtin/config.c:837
 msgid "editing blobs is not supported"
 msgstr ""
 
-#: builtin/config.c:760
+#: builtin/config.c:851
 #, c-format
 msgid "cannot create configuration file %s"
 msgstr "не удалось создать файл конфигурации %s"
 
-#: builtin/config.c:773
+#: builtin/config.c:864
 #, c-format
 msgid ""
 "cannot overwrite multiple values with a single value\n"
 "       Use a regexp, --add or --replace-all to change %s."
 msgstr "нельзя перезаписать несколько значений одним\n       Используйте регулярные выражения, параметры --add или --replace-all, чтобы изменить %s."
 
-#: builtin/config.c:847 builtin/config.c:858
+#: builtin/config.c:943 builtin/config.c:954
 #, c-format
 msgid "no such section: %s"
 msgstr ""
@@ -11142,11 +12910,37 @@
 msgid "print sizes in human readable format"
 msgstr "вывод размеров в удобочитаемом для человека виде"
 
-#: builtin/describe.c:27
+#: builtin/credential-cache--daemon.c:226
+#, c-format
+msgid ""
+"The permissions on your socket directory are too loose; other\n"
+"users may be able to read your cached credentials. Consider running:\n"
+"\n"
+"\tchmod 0700 %s"
+msgstr "Права доступа к вашему каталогу сокетов слишком свободны; друге пользователи могуи читать ваши закэшированные пароли доступа. Обдумайте запуск команды:\n\n\tchmod 0700 %s"
+
+#: builtin/credential-cache--daemon.c:275
+msgid "print debugging messages to stderr"
+msgstr "вывод отладочных сообщений на stderr"
+
+#: builtin/credential-cache--daemon.c:315
+msgid "credential-cache--daemon unavailable; no unix socket support"
+msgstr ""
+
+#: builtin/credential-cache.c:154
+msgid "credential-cache unavailable; no unix socket support"
+msgstr ""
+
+#: builtin/credential-store.c:66
+#, c-format
+msgid "unable to get credential storage lock in %d ms"
+msgstr ""
+
+#: builtin/describe.c:26
 msgid "git describe [<options>] [<commit-ish>...]"
 msgstr "git describe [<опции>] [<указатель-коммита>…]"
 
-#: builtin/describe.c:28
+#: builtin/describe.c:27
 msgid "git describe [<options>] --dirty"
 msgstr "git describe [<опции>] --dirty"
 
@@ -11162,659 +12956,840 @@
 msgid "annotated"
 msgstr "аннотированный"
 
-#: builtin/describe.c:273
+#: builtin/describe.c:277
 #, c-format
 msgid "annotated tag %s not available"
 msgstr "аннотированная метка %s не доступна"
 
-#: builtin/describe.c:277
+#: builtin/describe.c:281
 #, c-format
-msgid "annotated tag %s has no embedded name"
-msgstr "аннотированная метка %s не содержит встроенного названия"
+msgid "tag '%s' is externally known as '%s'"
+msgstr ""
 
-#: builtin/describe.c:279
-#, c-format
-msgid "tag '%s' is really '%s' here"
-msgstr "метка «%s» уже здесь «%s»"
-
-#: builtin/describe.c:323
+#: builtin/describe.c:328
 #, c-format
 msgid "no tag exactly matches '%s'"
 msgstr "нет меток, точно соответствующих «%s»"
 
-#: builtin/describe.c:325
+#: builtin/describe.c:330
 #, c-format
 msgid "No exact match on refs or tags, searching to describe\n"
 msgstr "Нет точных совпадений по ссылкам или тегам, ищу описания\n"
 
-#: builtin/describe.c:379
+#: builtin/describe.c:397
 #, c-format
 msgid "finished search at %s\n"
 msgstr "поиск окончен на %s\n"
 
-#: builtin/describe.c:405
+#: builtin/describe.c:424
 #, c-format
 msgid ""
 "No annotated tags can describe '%s'.\n"
 "However, there were unannotated tags: try --tags."
 msgstr "Нет аннотированных меток, которые могут описать «%s».\nНо имеются неаннотированные метки: попробуйте добавить параметр --tags."
 
-#: builtin/describe.c:409
+#: builtin/describe.c:428
 #, c-format
 msgid ""
 "No tags can describe '%s'.\n"
 "Try --always, or create some tags."
 msgstr "Нет меток, которые могут описать «%s….\nПопробуйте добавить параметр --always или создать какие-нибудь метки."
 
-#: builtin/describe.c:439
+#: builtin/describe.c:458
 #, c-format
 msgid "traversed %lu commits\n"
 msgstr "посещено %lu коммитов\n"
 
-#: builtin/describe.c:442
+#: builtin/describe.c:461
 #, c-format
 msgid ""
 "more than %i tags found; listed %i most recent\n"
 "gave up search at %s\n"
 msgstr "более %i меток найдено; показано последние %i\nостановлен поиск после %s\n"
 
-#: builtin/describe.c:510
+#: builtin/describe.c:529
 #, c-format
 msgid "describe %s\n"
 msgstr "описать %s\n"
 
-#: builtin/describe.c:513
+#: builtin/describe.c:532
 #, c-format
 msgid "Not a valid object name %s"
 msgstr "Недопустимое имя объекта %s"
 
-#: builtin/describe.c:521
+#: builtin/describe.c:540
 #, c-format
 msgid "%s is neither a commit nor blob"
 msgstr "%s не является коммитом или двоичным объектом"
 
-#: builtin/describe.c:535
+#: builtin/describe.c:554
 msgid "find the tag that comes after the commit"
 msgstr "поиск метки, которая идет после коммита"
 
-#: builtin/describe.c:536
+#: builtin/describe.c:555
 msgid "debug search strategy on stderr"
 msgstr "вывод отладочной информации стратегии поиска на стандартный вывод"
 
-#: builtin/describe.c:537
+#: builtin/describe.c:556
 msgid "use any ref"
 msgstr "использовать любую ссылку"
 
-#: builtin/describe.c:538
+#: builtin/describe.c:557
 msgid "use any tag, even unannotated"
 msgstr "использовать любую метку, даже неаннотированную"
 
-#: builtin/describe.c:539
+#: builtin/describe.c:558
 msgid "always use long format"
 msgstr "всегда использовать длинный формат вывода"
 
-#: builtin/describe.c:540
+#: builtin/describe.c:559
 msgid "only follow first parent"
 msgstr "следовать только за первым родителем"
 
-#: builtin/describe.c:543
+#: builtin/describe.c:562
 msgid "only output exact matches"
 msgstr "выводить только точные совпадения"
 
-#: builtin/describe.c:545
+#: builtin/describe.c:564
 msgid "consider <n> most recent tags (default: 10)"
 msgstr "рассматривать последние <n> меток (по умолчанию: 10)"
 
-#: builtin/describe.c:547
+#: builtin/describe.c:566
 msgid "only consider tags matching <pattern>"
 msgstr "рассматривать только метки по <шаблону>"
 
-#: builtin/describe.c:549
+#: builtin/describe.c:568
 msgid "do not consider tags matching <pattern>"
 msgstr "не учитывать метки, которые соответствуют <шаблону>"
 
-#: builtin/describe.c:551 builtin/name-rev.c:426
+#: builtin/describe.c:570 builtin/name-rev.c:535
 msgid "show abbreviated commit object as fallback"
 msgstr "если не найдено, показать сокращенный номер редакции коммита"
 
-#: builtin/describe.c:552 builtin/describe.c:555
+#: builtin/describe.c:571 builtin/describe.c:574
 msgid "mark"
 msgstr "пометка"
 
-#: builtin/describe.c:553
+#: builtin/describe.c:572
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
 msgstr "добавить <пометку> при изменённом рабочем каталоге (по умолчанию: «-dirty»)"
 
-#: builtin/describe.c:556
+#: builtin/describe.c:575
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr "добавить <пометку> на повреждённое рабочее дерево (по умолчанию: «-broken»)"
 
-#: builtin/describe.c:574
+#: builtin/describe.c:593
 msgid "--long is incompatible with --abbrev=0"
 msgstr "--long несовместимо с --abbrev=0"
 
-#: builtin/describe.c:603
+#: builtin/describe.c:622
 msgid "No names found, cannot describe anything."
 msgstr "Имена не найдены, не могу ничего описать."
 
-#: builtin/describe.c:654
+#: builtin/describe.c:673
 msgid "--dirty is incompatible with commit-ishes"
 msgstr "--dirty несовместимо с указанием указателей коммитов"
 
-#: builtin/describe.c:656
+#: builtin/describe.c:675
 msgid "--broken is incompatible with commit-ishes"
 msgstr "--broken несовместимо с указанием указателей коммитов"
 
-#: builtin/diff.c:84
+#: builtin/diff-tree.c:155
+msgid "--stdin and --merge-base are mutually exclusive"
+msgstr ""
+
+#: builtin/diff-tree.c:157
+msgid "--merge-base only works with two commits"
+msgstr ""
+
+#: builtin/diff.c:91
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "«%s»: не является обычным файлом или символьной ссылкой"
 
-#: builtin/diff.c:235
+#: builtin/diff.c:258
 #, c-format
 msgid "invalid option: %s"
 msgstr "неправильный параметр: %s"
 
-#: builtin/diff.c:350
+#: builtin/diff.c:375
+#, c-format
+msgid "%s...%s: no merge base"
+msgstr ""
+
+#: builtin/diff.c:485
 msgid "Not a git repository"
 msgstr "Не найден git репозиторий"
 
-#: builtin/diff.c:394
+#: builtin/diff.c:530 builtin/grep.c:681
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "передан неправильный объект «%s»."
 
-#: builtin/diff.c:403
+#: builtin/diff.c:541
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "передано больше двух двоичных объектов: «%s»"
 
-#: builtin/diff.c:408
+#: builtin/diff.c:546
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "передан необработанный объект «%s»."
 
+#: builtin/diff.c:580
+#, c-format
+msgid "%s...%s: multiple merge bases, using %s"
+msgstr ""
+
 #: builtin/difftool.c:30
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<опции>] [<коммит> [<коммит>]] [--] [<путь>…]"
 
-#: builtin/difftool.c:253
+#: builtin/difftool.c:260
 #, c-format
 msgid "failed: %d"
 msgstr "сбой: %d"
 
-#: builtin/difftool.c:295
+#: builtin/difftool.c:302
 #, c-format
 msgid "could not read symlink %s"
 msgstr "не удалось прочитать символьную ссылку %s"
 
-#: builtin/difftool.c:297
+#: builtin/difftool.c:304
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "не удалось прочитать файл символьной ссылки %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:312
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "не удалось прочитать объект %s для символьной ссылки %s"
 
-#: builtin/difftool.c:406
+#: builtin/difftool.c:412
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
 msgstr "комбинированные форматы файлов списка изменений(«-c» и «--cc») не поддерживаются в режиме сравнения каталогов(«-d» и «--dir-diff»)."
 
-#: builtin/difftool.c:626
+#: builtin/difftool.c:633
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "оба файла изменены: «%s» и «%s»."
 
-#: builtin/difftool.c:628
+#: builtin/difftool.c:635
 msgid "working tree file has been left."
 msgstr "рабочий каталог был покинут."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:646
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "временные файлы уже находятся в «%s»."
 
-#: builtin/difftool.c:640
+#: builtin/difftool.c:647
 msgid "you may want to cleanup or recover these."
 msgstr "возможно вы хотите их удалить или восстановить."
 
-#: builtin/difftool.c:689
+#: builtin/difftool.c:696
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "использовать «diff.guitool» вместо «diff.tool»"
 
-#: builtin/difftool.c:691
+#: builtin/difftool.c:698
 msgid "perform a full-directory diff"
 msgstr "выполнить пофайловое сравнение всего каталога"
 
-#: builtin/difftool.c:693
+#: builtin/difftool.c:700
 msgid "do not prompt before launching a diff tool"
 msgstr "не спрашивать перед запуском утилиты сравнения"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:705
 msgid "use symlinks in dir-diff mode"
 msgstr "использовать символьные ссылки в режиме сравнения каталога"
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:706
 msgid "tool"
 msgstr ""
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:707
 msgid "use the specified diff tool"
 msgstr "использовать указанную утилиту сравнения"
 
-#: builtin/difftool.c:702
+#: builtin/difftool.c:709
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "вывести список утилит, которые можно использовать с параметром «--tool»"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:712
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit"
 " code"
 msgstr "выходить из «git-difftool», если вызванная утилита сравнения вернула не нулевой код возврата"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:715
 msgid "specify a custom command for viewing diffs"
 msgstr "использовать особую команду для просмотра изменений"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:716
 msgid "passed to `diff`"
 msgstr ""
 
-#: builtin/difftool.c:724
+#: builtin/difftool.c:731
 msgid "difftool requires worktree or --no-index"
 msgstr ""
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:738
 msgid "--dir-diff is incompatible with --no-index"
 msgstr ""
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:741
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr ""
 
-#: builtin/difftool.c:742
+#: builtin/difftool.c:749
 msgid "no <tool> given for --tool=<tool>"
 msgstr "не передана <утилита> для --tool=<утилита>"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:756
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "не передана <команда> для --extcmd=<команда>"
 
+#: builtin/env--helper.c:6
+msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
+msgstr ""
+
+#: builtin/env--helper.c:42 builtin/hash-object.c:98
+msgid "type"
+msgstr "тип"
+
+#: builtin/env--helper.c:46
+msgid "default for git_env_*(...) to fall back on"
+msgstr ""
+
+#: builtin/env--helper.c:48
+msgid "be quiet only use git_env_*() value as exit code"
+msgstr ""
+
+#: builtin/env--helper.c:67
+#, c-format
+msgid ""
+"option `--default' expects a boolean value with `--type=bool`, not `%s`"
+msgstr ""
+
+#: builtin/env--helper.c:82
+#, c-format
+msgid ""
+"option `--default' expects an unsigned long value with `--type=ulong`, not "
+"`%s`"
+msgstr ""
+
 #: builtin/fast-export.c:29
 msgid "git fast-export [rev-list-opts]"
 msgstr "git fast-export [опции-rev-list]"
 
-#: builtin/fast-export.c:1084
+#: builtin/fast-export.c:868
+msgid "Error: Cannot export nested tags unless --mark-tags is specified."
+msgstr ""
+
+#: builtin/fast-export.c:1177
+msgid "--anonymize-map token cannot be empty"
+msgstr ""
+
+#: builtin/fast-export.c:1197
 msgid "show progress after <n> objects"
 msgstr "показать прогресс после <n> объектов"
 
-#: builtin/fast-export.c:1086
+#: builtin/fast-export.c:1199
 msgid "select handling of signed tags"
 msgstr "выбор обработки подписанных меток"
 
-#: builtin/fast-export.c:1089
+#: builtin/fast-export.c:1202
 msgid "select handling of tags that tag filtered objects"
 msgstr "выбор обработки меток, которыми помечены отфильтрованные объекты"
 
-#: builtin/fast-export.c:1092
+#: builtin/fast-export.c:1205
+msgid "select handling of commit messages in an alternate encoding"
+msgstr ""
+
+#: builtin/fast-export.c:1208
 msgid "Dump marks to this file"
 msgstr "Записать пометки в этот файл"
 
-#: builtin/fast-export.c:1094
+#: builtin/fast-export.c:1210
 msgid "Import marks from this file"
 msgstr "Импортировать пометки из этого файла"
 
-#: builtin/fast-export.c:1096
+#: builtin/fast-export.c:1214
+msgid "Import marks from this file if it exists"
+msgstr ""
+
+#: builtin/fast-export.c:1216
 msgid "Fake a tagger when tags lack one"
 msgstr "Подделать автора метки, если у метки он отсутствует"
 
-#: builtin/fast-export.c:1098
+#: builtin/fast-export.c:1218
 msgid "Output full tree for each commit"
 msgstr "Вывести полное дерево для каждого коммита"
 
-#: builtin/fast-export.c:1100
+#: builtin/fast-export.c:1220
 msgid "Use the done feature to terminate the stream"
 msgstr "Использовать пометку завершения в конце потока"
 
-#: builtin/fast-export.c:1101
+#: builtin/fast-export.c:1221
 msgid "Skip output of blob data"
 msgstr "Пропустить вывод данных двоичных объектов"
 
-#: builtin/fast-export.c:1102 builtin/log.c:1609
+#: builtin/fast-export.c:1222 builtin/log.c:1816
 msgid "refspec"
 msgstr "спецификатор ссылки"
 
-#: builtin/fast-export.c:1103
+#: builtin/fast-export.c:1223
 msgid "Apply refspec to exported refs"
 msgstr "Применить спецификатор ссылки к экспортируемым ссылкам"
 
-#: builtin/fast-export.c:1104
+#: builtin/fast-export.c:1224
 msgid "anonymize output"
 msgstr "сделать вывод анонимным"
 
-#: builtin/fast-export.c:1106
+#: builtin/fast-export.c:1225
+msgid "from:to"
+msgstr ""
+
+#: builtin/fast-export.c:1226
+msgid "convert <from> to <to> in anonymized output"
+msgstr ""
+
+#: builtin/fast-export.c:1229
 msgid "Reference parents which are not in fast-export stream by object id"
 msgstr ""
 
-#: builtin/fast-export.c:1108
+#: builtin/fast-export.c:1231
 msgid "Show original object ids of blobs/commits"
 msgstr ""
 
-#: builtin/fetch.c:28
+#: builtin/fast-export.c:1233
+msgid "Label tags with mark ids"
+msgstr ""
+
+#: builtin/fast-export.c:1256
+msgid "--anonymize-map without --anonymize does not make sense"
+msgstr ""
+
+#: builtin/fast-export.c:1271
+msgid "Cannot pass both --import-marks and --import-marks-if-exists"
+msgstr ""
+
+#: builtin/fast-import.c:3088
+#, c-format
+msgid "Missing from marks for submodule '%s'"
+msgstr ""
+
+#: builtin/fast-import.c:3090
+#, c-format
+msgid "Missing to marks for submodule '%s'"
+msgstr ""
+
+#: builtin/fast-import.c:3225
+#, c-format
+msgid "Expected 'mark' command, got %s"
+msgstr ""
+
+#: builtin/fast-import.c:3230
+#, c-format
+msgid "Expected 'to' command, got %s"
+msgstr ""
+
+#: builtin/fast-import.c:3322
+msgid "Expected format name:filename for submodule rewrite option"
+msgstr ""
+
+#: builtin/fast-import.c:3377
+#, c-format
+msgid "feature '%s' forbidden in input without --allow-unsafe-features"
+msgstr ""
+
+#: builtin/fetch-pack.c:241
+#, c-format
+msgid "Lockfile created but not reported: %s"
+msgstr ""
+
+#: builtin/fetch.c:35
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<опции>] [<репозиторий> [<спецификатор-ссылки>…]]"
 
-#: builtin/fetch.c:29
+#: builtin/fetch.c:36
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<опции>] <группа>"
 
-#: builtin/fetch.c:30
+#: builtin/fetch.c:37
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<опции>] [(<репозиторий> | <группа>)…]"
 
-#: builtin/fetch.c:31
+#: builtin/fetch.c:38
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<опции>]"
 
-#: builtin/fetch.c:115 builtin/pull.c:202
+#: builtin/fetch.c:119
+msgid "fetch.parallel cannot be negative"
+msgstr ""
+
+#: builtin/fetch.c:142 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "извлечь со всех внешних репозиториев"
 
-#: builtin/fetch.c:117 builtin/pull.c:205
+#: builtin/fetch.c:144 builtin/pull.c:245
+msgid "set upstream for git pull/fetch"
+msgstr ""
+
+#: builtin/fetch.c:146 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "дописать к .git/FETCH_HEAD вместо перезаписи"
 
-#: builtin/fetch.c:119 builtin/pull.c:208
+#: builtin/fetch.c:148 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "путь к программе упаковки пакета на машине с внешним репозиторием"
 
-#: builtin/fetch.c:120
+#: builtin/fetch.c:149
 msgid "force overwrite of local reference"
 msgstr ""
 
-#: builtin/fetch.c:122
+#: builtin/fetch.c:151
 msgid "fetch from multiple remotes"
 msgstr "извлечь с нескольких внешних репозиториев"
 
-#: builtin/fetch.c:124 builtin/pull.c:212
+#: builtin/fetch.c:153 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "извлечь все метки и связанные объекты"
 
-#: builtin/fetch.c:126
+#: builtin/fetch.c:155
 msgid "do not fetch all tags (--no-tags)"
 msgstr "не извлекать все метки (--no-tags)"
 
-#: builtin/fetch.c:128
+#: builtin/fetch.c:157
 msgid "number of submodules fetched in parallel"
 msgstr "количество подмодулей, которые будут скачаны парралельно"
 
-#: builtin/fetch.c:130 builtin/pull.c:215
+#: builtin/fetch.c:159 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "почистить отслеживаемые внешние ветки, которых уже нет на внешнем репозитории"
 
-#: builtin/fetch.c:132
+#: builtin/fetch.c:161
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 
-#: builtin/fetch.c:133 builtin/fetch.c:156 builtin/pull.c:139
+#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
 msgid "on-demand"
 msgstr "по требованию"
 
-#: builtin/fetch.c:134
+#: builtin/fetch.c:163
 msgid "control recursive fetching of submodules"
 msgstr "управление рекурсивным извлечением подмодулей"
 
-#: builtin/fetch.c:138 builtin/pull.c:223
+#: builtin/fetch.c:168
+msgid "write fetched references to the FETCH_HEAD file"
+msgstr ""
+
+#: builtin/fetch.c:169 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "оставить загруженный пакет данных"
 
-#: builtin/fetch.c:140
+#: builtin/fetch.c:171
 msgid "allow updating of HEAD ref"
 msgstr "разрешить обновление ссылки HEAD"
 
-#: builtin/fetch.c:143 builtin/fetch.c:149 builtin/pull.c:226
+#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/pull.c:218
 msgid "deepen history of shallow clone"
-msgstr "улугубить историю частичного клона"
+msgstr "углубить историю частичного клона"
 
-#: builtin/fetch.c:145
+#: builtin/fetch.c:176 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "углубить историю частичного клона основываясь на времени"
 
-#: builtin/fetch.c:151 builtin/pull.c:229
+#: builtin/fetch.c:182 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "преобразовать в полный репозиторий"
 
-#: builtin/fetch.c:154
+#: builtin/fetch.c:185
 msgid "prepend this to submodule path output"
 msgstr "присоединять это спереди к выводу путей подмодуля"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:188
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr "настроить по умолчанию рекурсивное извлечение подмодулей (более низкий приоритет, чем файлы конфигурации)"
 
-#: builtin/fetch.c:161 builtin/pull.c:232
+#: builtin/fetch.c:192 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "принимать ссылки, которые обновляют .git/shallow"
 
-#: builtin/fetch.c:162 builtin/pull.c:234
+#: builtin/fetch.c:193 builtin/pull.c:226
 msgid "refmap"
 msgstr "соответствие-ссылок"
 
-#: builtin/fetch.c:163 builtin/pull.c:235
+#: builtin/fetch.c:194 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "указать соответствие ссылок при извлечении"
 
-#: builtin/fetch.c:170
+#: builtin/fetch.c:201 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 
-#: builtin/fetch.c:469
+#: builtin/fetch.c:204 builtin/fetch.c:206
+msgid "run 'maintenance --auto' after fetching"
+msgstr ""
+
+#: builtin/fetch.c:208 builtin/pull.c:243
+msgid "check for forced-updates on all updated branches"
+msgstr ""
+
+#: builtin/fetch.c:210
+msgid "write the commit-graph after fetching"
+msgstr ""
+
+#: builtin/fetch.c:212
+msgid "accept refspecs from stdin"
+msgstr ""
+
+#: builtin/fetch.c:523
 msgid "Couldn't find remote ref HEAD"
 msgstr "Не удалось найти ссылку HEAD на внешнем репозитории"
 
-#: builtin/fetch.c:608
+#: builtin/fetch.c:677
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "опция fetch.output содержит неправильное значение для %s"
 
-#: builtin/fetch.c:705
+#: builtin/fetch.c:775
 #, c-format
 msgid "object %s not found"
 msgstr "объект %s не найден"
 
-#: builtin/fetch.c:709
+#: builtin/fetch.c:779
 msgid "[up to date]"
 msgstr "[актуально]"
 
-#: builtin/fetch.c:722 builtin/fetch.c:738 builtin/fetch.c:801
+#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
 msgid "[rejected]"
 msgstr "[отклонено]"
 
-#: builtin/fetch.c:723
+#: builtin/fetch.c:793
 msgid "can't fetch in current branch"
 msgstr "нельзя извлечь текущую ветку"
 
-#: builtin/fetch.c:733
+#: builtin/fetch.c:803
 msgid "[tag update]"
 msgstr "[обновление метки]"
 
-#: builtin/fetch.c:734 builtin/fetch.c:771 builtin/fetch.c:784
-#: builtin/fetch.c:796
+#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
+#: builtin/fetch.c:875
 msgid "unable to update local ref"
 msgstr "не удалось обновить локальную ссылку"
 
-#: builtin/fetch.c:738
+#: builtin/fetch.c:808
 msgid "would clobber existing tag"
 msgstr ""
 
-#: builtin/fetch.c:760
+#: builtin/fetch.c:830
 msgid "[new tag]"
 msgstr "[новая метка]"
 
-#: builtin/fetch.c:763
+#: builtin/fetch.c:833
 msgid "[new branch]"
 msgstr "[новая ветка]"
 
-#: builtin/fetch.c:766
+#: builtin/fetch.c:836
 msgid "[new ref]"
 msgstr "[новая ссылка]"
 
-#: builtin/fetch.c:796
+#: builtin/fetch.c:875
 msgid "forced update"
 msgstr "принудительное обновление"
 
-#: builtin/fetch.c:801
+#: builtin/fetch.c:880
 msgid "non-fast-forward"
 msgstr "без перемотки вперед"
 
-#: builtin/fetch.c:847
+#: builtin/fetch.c:901
+msgid ""
+"Fetch normally indicates which branches had a forced update,\n"
+"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
+"flag or run 'git config fetch.showForcedUpdates true'."
+msgstr ""
+
+#: builtin/fetch.c:905
+#, c-format
+msgid ""
+"It took %.2f seconds to check forced updates. You can use\n"
+"'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates false'\n"
+" to avoid this check.\n"
+msgstr ""
+
+#: builtin/fetch.c:939
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s не отправил все необходимые объекты\n"
 
-#: builtin/fetch.c:868
+#: builtin/fetch.c:960
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "%s отклонено из-за того, что частичные корни не разрешено обновлять"
 
-#: builtin/fetch.c:959 builtin/fetch.c:1081
+#: builtin/fetch.c:1053 builtin/fetch.c:1191
 #, c-format
 msgid "From %.*s\n"
 msgstr "Из %.*s\n"
 
-#: builtin/fetch.c:970
+#: builtin/fetch.c:1064
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr "не удалось обновить некоторые локальные ссылки; попробуйте запустить «git remote prune %s», чтобы почистить старые, конфликтующие ветки"
 
-#: builtin/fetch.c:1051
+#: builtin/fetch.c:1161
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s будет висящей веткой)"
 
-#: builtin/fetch.c:1052
+#: builtin/fetch.c:1162
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s стала висящей веткой)"
 
-#: builtin/fetch.c:1084
+#: builtin/fetch.c:1194
 msgid "[deleted]"
 msgstr "[удалено]"
 
-#: builtin/fetch.c:1085 builtin/remote.c:1036
+#: builtin/fetch.c:1195 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(нет)"
 
-#: builtin/fetch.c:1108
+#: builtin/fetch.c:1218
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Отказ получения в текущую ветку %s не голого репозитория"
 
-#: builtin/fetch.c:1127
+#: builtin/fetch.c:1237
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Неправильное значение «%2$s» для параметра «%1$s» для %3$s"
 
-#: builtin/fetch.c:1130
+#: builtin/fetch.c:1240
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Параметр «%s» игнорируется для %s\n"
 
-#: builtin/fetch.c:1434
+#: builtin/fetch.c:1448
+msgid "multiple branches detected, incompatible with --set-upstream"
+msgstr ""
+
+#: builtin/fetch.c:1463
+msgid "not setting upstream for a remote remote-tracking branch"
+msgstr ""
+
+#: builtin/fetch.c:1465
+msgid "not setting upstream for a remote tag"
+msgstr ""
+
+#: builtin/fetch.c:1467
+msgid "unknown branch type"
+msgstr ""
+
+#: builtin/fetch.c:1469
+msgid ""
+"no source branch found.\n"
+"you need to specify exactly one branch with the --set-upstream option."
+msgstr ""
+
+#: builtin/fetch.c:1598 builtin/fetch.c:1661
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Извлечение из %s\n"
 
-#: builtin/fetch.c:1436 builtin/remote.c:100
+#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Не удалось извлечь %s"
 
-#: builtin/fetch.c:1482
-msgid ""
-"--filter can only be used with the remote configured in "
-"extensions.partialClone"
+#: builtin/fetch.c:1620
+#, c-format
+msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr ""
 
-#: builtin/fetch.c:1506
+#: builtin/fetch.c:1724
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr "Не указан внешний репозиторий. Укажите URL или имя внешнего репозитория из которого должны извлекаться новые редакции."
 
-#: builtin/fetch.c:1543
+#: builtin/fetch.c:1760
 msgid "You need to specify a tag name."
 msgstr "Вам нужно указать имя метки."
 
-#: builtin/fetch.c:1594
+#: builtin/fetch.c:1825
 msgid "Negative depth in --deepen is not supported"
 msgstr "Отрицательная грубина для --deepen не поддерживается"
 
-#: builtin/fetch.c:1596
+#: builtin/fetch.c:1827
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen и --depth нельзя использовать одновременно"
 
-#: builtin/fetch.c:1601
+#: builtin/fetch.c:1832
 msgid "--depth and --unshallow cannot be used together"
 msgstr "нельзя использовать одновременно --depth и --unshallow"
 
-#: builtin/fetch.c:1603
+#: builtin/fetch.c:1834
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow не имеет смысла на полном репозитории"
 
-#: builtin/fetch.c:1619
+#: builtin/fetch.c:1851
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all не принимает имя репозитория как аргумент"
 
-#: builtin/fetch.c:1621
+#: builtin/fetch.c:1853
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all не имеет смысла при указании спецификаторов ссылок"
 
-#: builtin/fetch.c:1630
+#: builtin/fetch.c:1862
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Нет такого внешнего репозитория или группы: %s"
 
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1869
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Получение группы и указание спецификаций ссылок не имеет смысла"
 
-#: builtin/fetch.c:1653
+#: builtin/fetch.c:1887
 msgid ""
 "--filter can only be used with the remote configured in "
 "extensions.partialclone"
 msgstr ""
 
-#: builtin/fmt-merge-msg.c:18
+#: builtin/fetch.c:1891
+msgid "--stdin can only be used when fetching from one remote"
+msgstr ""
+
+#: builtin/fmt-merge-msg.c:7
 msgid ""
 "git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
 msgstr "git fmt-merge-msg [-m <сообщение>] [--log[=<n>] | --no-log] [--file <файл>]"
 
-#: builtin/fmt-merge-msg.c:672
+#: builtin/fmt-merge-msg.c:18
 msgid "populate log with at most <n> entries from shortlog"
 msgstr "отправить в журнал <n> записей из короткого журнала"
 
-#: builtin/fmt-merge-msg.c:675
+#: builtin/fmt-merge-msg.c:21
 msgid "alias for --log (deprecated)"
 msgstr "сокращение для --log (устаревшее)"
 
-#: builtin/fmt-merge-msg.c:678
+#: builtin/fmt-merge-msg.c:24
 msgid "text"
 msgstr "текст"
 
-#: builtin/fmt-merge-msg.c:679
+#: builtin/fmt-merge-msg.c:25
 msgid "use <text> as start of message"
 msgstr "использовать <текст> как начальное сообщение"
 
-#: builtin/fmt-merge-msg.c:680
+#: builtin/fmt-merge-msg.c:26
 msgid "file to read from"
 msgstr "файл для чтения"
 
@@ -11827,8 +13802,8 @@
 msgstr "git for-each-ref [--points-at <объект>]"
 
 #: builtin/for-each-ref.c:12
-msgid "git for-each-ref [(--merged | --no-merged) [<commit>]]"
-msgstr "git for-each-ref [(--merged | --no-merged) [<коммит>]]"
+msgid "git for-each-ref [--merged [<commit>]] [--no-merged [<commit>]]"
+msgstr ""
 
 #: builtin/for-each-ref.c:13
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
@@ -11854,7 +13829,7 @@
 msgid "show only <n> matched refs"
 msgstr "показать только <n> совпадающих ссылок"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:433
+#: builtin/for-each-ref.c:39 builtin/tag.c:440
 msgid "respect format colors"
 msgstr "использовать цвета из формата"
 
@@ -11878,272 +13853,288 @@
 msgid "print only refs which don't contain the commit"
 msgstr "вывод только ссылок, которые не содержат коммит"
 
-#: builtin/fsck.c:88 builtin/fsck.c:160 builtin/fsck.c:161
+#: builtin/for-each-repo.c:9
+msgid "git for-each-repo --config=<config> <command-args>"
+msgstr ""
+
+#: builtin/for-each-repo.c:37
+msgid "config"
+msgstr ""
+
+#: builtin/for-each-repo.c:38
+msgid "config key storing a list of repository paths"
+msgstr ""
+
+#: builtin/for-each-repo.c:46
+msgid "missing --config=<config>"
+msgstr ""
+
+#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
 msgid "unknown"
 msgstr ""
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:120 builtin/fsck.c:136
+#: builtin/fsck.c:101 builtin/fsck.c:121
 #, c-format
 msgid "error in %s %s: %s"
 msgstr ""
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:131
+#: builtin/fsck.c:115
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr ""
 
-#: builtin/fsck.c:157 builtin/fsck.c:159
+#: builtin/fsck.c:144 builtin/fsck.c:147
 #, c-format
 msgid "broken link from %7s %s"
 msgstr ""
 
-#: builtin/fsck.c:168
+#: builtin/fsck.c:156
 msgid "wrong object type in link"
 msgstr ""
 
-#: builtin/fsck.c:184
+#: builtin/fsck.c:172
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
 "              to %7s %s"
 msgstr ""
 
-#: builtin/fsck.c:295
+#: builtin/fsck.c:283
 #, c-format
 msgid "missing %s %s"
 msgstr ""
 
-#: builtin/fsck.c:321
+#: builtin/fsck.c:310
 #, c-format
 msgid "unreachable %s %s"
 msgstr ""
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:330
 #, c-format
 msgid "dangling %s %s"
 msgstr ""
 
-#: builtin/fsck.c:349
+#: builtin/fsck.c:340
 msgid "could not create lost-found"
 msgstr ""
 
-#: builtin/fsck.c:360
+#: builtin/fsck.c:351
 #, c-format
 msgid "could not finish '%s'"
 msgstr "не удалось закончить '%s'"
 
-#: builtin/fsck.c:377
+#: builtin/fsck.c:368
 #, c-format
 msgid "Checking %s"
 msgstr ""
 
-#: builtin/fsck.c:415
+#: builtin/fsck.c:406
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr ""
 
-#: builtin/fsck.c:434
+#: builtin/fsck.c:425
 #, c-format
 msgid "Checking %s %s"
 msgstr ""
 
-#: builtin/fsck.c:438
+#: builtin/fsck.c:430
 msgid "broken links"
 msgstr ""
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:439
 #, c-format
 msgid "root %s"
 msgstr ""
 
-#: builtin/fsck.c:455
+#: builtin/fsck.c:447
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr ""
 
-#: builtin/fsck.c:484
+#: builtin/fsck.c:476
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr ""
 
-#: builtin/fsck.c:509
+#: builtin/fsck.c:501
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr ""
 
-#: builtin/fsck.c:523
+#: builtin/fsck.c:515
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr ""
 
-#: builtin/fsck.c:557
+#: builtin/fsck.c:549
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr ""
 
-#: builtin/fsck.c:564
+#: builtin/fsck.c:556
 #, c-format
 msgid "%s: not a commit"
 msgstr ""
 
-#: builtin/fsck.c:619
+#: builtin/fsck.c:610
 msgid "notice: No default references"
 msgstr ""
 
-#: builtin/fsck.c:634
+#: builtin/fsck.c:625
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr ""
 
-#: builtin/fsck.c:647
+#: builtin/fsck.c:638
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr ""
 
-#: builtin/fsck.c:667
+#: builtin/fsck.c:658
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr ""
 
-#: builtin/fsck.c:682
+#: builtin/fsck.c:673
 msgid "Checking object directory"
 msgstr ""
 
-#: builtin/fsck.c:685
+#: builtin/fsck.c:676
 msgid "Checking object directories"
 msgstr "Проверка каталогов объектов"
 
-#: builtin/fsck.c:700
+#: builtin/fsck.c:691
 #, c-format
 msgid "Checking %s link"
 msgstr ""
 
-#: builtin/fsck.c:705 builtin/index-pack.c:841
+#: builtin/fsck.c:696 builtin/index-pack.c:865
 #, c-format
 msgid "invalid %s"
 msgstr "неправильный %s"
 
-#: builtin/fsck.c:712
+#: builtin/fsck.c:703
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr ""
 
-#: builtin/fsck.c:718
+#: builtin/fsck.c:709
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr ""
 
-#: builtin/fsck.c:722
+#: builtin/fsck.c:713
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr ""
 
-#: builtin/fsck.c:734
+#: builtin/fsck.c:725
 msgid "Checking cache tree"
 msgstr ""
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:730
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr ""
 
-#: builtin/fsck.c:750
+#: builtin/fsck.c:739
 msgid "non-tree in cache-tree"
 msgstr ""
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:770
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<опции>] [<объект>…]"
 
-#: builtin/fsck.c:787
+#: builtin/fsck.c:776
 msgid "show unreachable objects"
 msgstr "показать недоступные объекты"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:777
 msgid "show dangling objects"
 msgstr "показать объекты, на которые нет ссылок"
 
-#: builtin/fsck.c:789
+#: builtin/fsck.c:778
 msgid "report tags"
 msgstr "вывести отчет по меткам"
 
-#: builtin/fsck.c:790
+#: builtin/fsck.c:779
 msgid "report root nodes"
 msgstr "вывести отчет по корневым узлам"
 
-#: builtin/fsck.c:791
+#: builtin/fsck.c:780
 msgid "make index objects head nodes"
 msgstr "воспринимать объекты в индексе как корневые узлы"
 
-#: builtin/fsck.c:792
+#: builtin/fsck.c:781
 msgid "make reflogs head nodes (default)"
 msgstr "создать корневые узлы журналов ссылок (по умолчанию)"
 
-#: builtin/fsck.c:793
+#: builtin/fsck.c:782
 msgid "also consider packs and alternate objects"
 msgstr "также проверять пакеты и альтернативные объекты"
 
-#: builtin/fsck.c:794
+#: builtin/fsck.c:783
 msgid "check only connectivity"
 msgstr "только проверить соединение"
 
-#: builtin/fsck.c:795
+#: builtin/fsck.c:784
 msgid "enable more strict checking"
 msgstr "использовать более строгую проверку"
 
-#: builtin/fsck.c:797
+#: builtin/fsck.c:786
 msgid "write dangling objects in .git/lost-found"
 msgstr "записать объекты на которые нет ссылок в .git/lost-found"
 
-#: builtin/fsck.c:798 builtin/prune.c:132
+#: builtin/fsck.c:787 builtin/prune.c:134
 msgid "show progress"
 msgstr "показать прогресс выполнения"
 
-#: builtin/fsck.c:799
+#: builtin/fsck.c:788
 msgid "show verbose names for reachable objects"
 msgstr "показать подробные имена для недоступных объектов"
 
-#: builtin/fsck.c:859 builtin/index-pack.c:224
+#: builtin/fsck.c:847 builtin/index-pack.c:261
 msgid "Checking objects"
 msgstr "Проверка объектов"
 
-#: builtin/fsck.c:887
+#: builtin/fsck.c:875
 #, c-format
 msgid "%s: object missing"
 msgstr ""
 
-#: builtin/fsck.c:899
+#: builtin/fsck.c:886
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr ""
 
-#: builtin/gc.c:34
+#: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<опции>]"
 
-#: builtin/gc.c:90
+#: builtin/gc.c:94
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Не удалось выполнить fstat %s: %s"
 
-#: builtin/gc.c:126
+#: builtin/gc.c:130
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr ""
 
-#: builtin/gc.c:476 builtin/init-db.c:55
+#: builtin/gc.c:479 builtin/init-db.c:58
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "не удалось выполнить stat для «%s»"
 
-#: builtin/gc.c:485 builtin/notes.c:240 builtin/tag.c:519
+#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
 #, c-format
 msgid "cannot read '%s'"
 msgstr "не удалось прочитать «%s»"
 
-#: builtin/gc.c:492
+#: builtin/gc.c:495
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -12153,64 +14144,196 @@
 "%s"
 msgstr "Последний запуск gc сообщил следующее. Пожалуйста, исправьте ошибку и удалите %s.\nАвтоматическая очистка репозитория не будет производиться, пока этот файл не удалён.\n\n%s"
 
-#: builtin/gc.c:540
+#: builtin/gc.c:543
 msgid "prune unreferenced objects"
 msgstr "почистить объекты, на которые нет ссылок"
 
-#: builtin/gc.c:542
+#: builtin/gc.c:545
 msgid "be more thorough (increased runtime)"
 msgstr "проверять более внимательно (занимает больше времени)"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:546
 msgid "enable auto-gc mode"
 msgstr "включить режим auto-gc"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:549
 msgid "force running gc even if there may be another gc running"
 msgstr "принудительно запустить gc, даже есть другая копия gc уже запущена"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:552
 msgid "repack all other packs except the largest pack"
 msgstr ""
 
-#: builtin/gc.c:566
+#: builtin/gc.c:569
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr ""
 
-#: builtin/gc.c:577
+#: builtin/gc.c:580
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr ""
 
-#: builtin/gc.c:597
+#: builtin/gc.c:600
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "Автоматическая упаковка репозитория в фоне, для оптимальной производительности.\n"
 
-#: builtin/gc.c:599
+#: builtin/gc.c:602
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Автоматическая упаковка репозитория, для оптимальной производительности.\n"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:603
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Смотрите «git help gc» руководства по ручной очистке.\n"
 
-#: builtin/gc.c:640
+#: builtin/gc.c:643
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr "gc уже запущен на этом компьютере «%s» pid %<PRIuMAX> (если нет, используйте --force)"
 
-#: builtin/gc.c:693
+#: builtin/gc.c:698
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove "
 "them."
 msgstr "Имеется слишком много объектов, на которые нет ссылок; запустите «git prune» для их удаления."
 
-#: builtin/grep.c:29
+#: builtin/gc.c:708
+msgid ""
+"git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
+msgstr ""
+
+#: builtin/gc.c:738
+msgid "--no-schedule is not allowed"
+msgstr ""
+
+#: builtin/gc.c:743
+#, c-format
+msgid "unrecognized --schedule argument '%s'"
+msgstr ""
+
+#: builtin/gc.c:862
+msgid "failed to write commit-graph"
+msgstr ""
+
+#: builtin/gc.c:901
+msgid "failed to fill remotes"
+msgstr ""
+
+#: builtin/gc.c:1024
+msgid "failed to start 'git pack-objects' process"
+msgstr ""
+
+#: builtin/gc.c:1041
+msgid "failed to finish 'git pack-objects' process"
+msgstr ""
+
+#: builtin/gc.c:1093
+msgid "failed to write multi-pack-index"
+msgstr ""
+
+#: builtin/gc.c:1111
+msgid "'git multi-pack-index expire' failed"
+msgstr ""
+
+#: builtin/gc.c:1172
+msgid "'git multi-pack-index repack' failed"
+msgstr ""
+
+#: builtin/gc.c:1181
+msgid ""
+"skipping incremental-repack task because core.multiPackIndex is disabled"
+msgstr ""
+
+#: builtin/gc.c:1279
+#, c-format
+msgid "lock file '%s' exists, skipping maintenance"
+msgstr ""
+
+#: builtin/gc.c:1309
+#, c-format
+msgid "task '%s' failed"
+msgstr ""
+
+#: builtin/gc.c:1389
+#, c-format
+msgid "'%s' is not a valid task"
+msgstr ""
+
+#: builtin/gc.c:1394
+#, c-format
+msgid "task '%s' cannot be selected multiple times"
+msgstr ""
+
+#: builtin/gc.c:1409
+msgid "run tasks based on the state of the repository"
+msgstr ""
+
+#: builtin/gc.c:1410
+msgid "frequency"
+msgstr ""
+
+#: builtin/gc.c:1411
+msgid "run tasks based on frequency"
+msgstr ""
+
+#: builtin/gc.c:1414
+msgid "do not report progress or other information over stderr"
+msgstr ""
+
+#: builtin/gc.c:1415
+msgid "task"
+msgstr ""
+
+#: builtin/gc.c:1416
+msgid "run a specific task"
+msgstr ""
+
+#: builtin/gc.c:1433
+msgid "use at most one of --auto and --schedule=<frequency>"
+msgstr ""
+
+#: builtin/gc.c:1467
+msgid "failed to run 'git config'"
+msgstr ""
+
+#: builtin/gc.c:1512
+msgid "another process is scheduling background maintenance"
+msgstr ""
+
+#: builtin/gc.c:1525
+msgid "failed to run 'crontab -l'; your system might not support 'cron'"
+msgstr ""
+
+#: builtin/gc.c:1544
+msgid "failed to run 'crontab'; your system might not support 'cron'"
+msgstr ""
+
+#: builtin/gc.c:1550
+msgid "failed to open stdin of 'crontab'"
+msgstr ""
+
+#: builtin/gc.c:1592
+msgid "'crontab' died"
+msgstr ""
+
+#: builtin/gc.c:1605
+msgid "failed to add repo to global config"
+msgstr ""
+
+#: builtin/gc.c:1615
+msgid "git maintenance <subcommand> [<options>]"
+msgstr ""
+
+#: builtin/gc.c:1634
+#, c-format
+msgid "invalid subcommand: %s"
+msgstr ""
+
+#: builtin/grep.c:30
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<опции>] [-e] <шаблон> [<редакция>…] [[--] <путь>…]"
 
@@ -12227,258 +14350,258 @@
 #. TRANSLATORS: %s is the configuration
 #. variable for tweaking threads, currently
 #. grep.threads
-#: builtin/grep.c:287 builtin/index-pack.c:1514 builtin/index-pack.c:1705
-#: builtin/pack-objects.c:2720
+#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
+#: builtin/pack-objects.c:2936
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "нет поддержки потоков, игнорирование %s"
 
-#: builtin/grep.c:466 builtin/grep.c:590 builtin/grep.c:631
+#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "не удалось прочитать дерево (%s)"
 
-#: builtin/grep.c:646
+#: builtin/grep.c:655
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "не удалось выполнить grep из объекта типа %s"
 
-#: builtin/grep.c:712
+#: builtin/grep.c:736
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "параметр «%c» ожидает числовое значение"
 
-#: builtin/grep.c:811
+#: builtin/grep.c:835
 msgid "search in index instead of in the work tree"
 msgstr "искать в индексе, а не в рабочем каталоге"
 
-#: builtin/grep.c:813
+#: builtin/grep.c:837
 msgid "find in contents not managed by git"
 msgstr "искать в содержимом не управляемым git"
 
-#: builtin/grep.c:815
+#: builtin/grep.c:839
 msgid "search in both tracked and untracked files"
 msgstr "искать и в отслеживаемых, и в неотслеживаемых файлах"
 
-#: builtin/grep.c:817
+#: builtin/grep.c:841
 msgid "ignore files specified via '.gitignore'"
 msgstr "игнорировать файлы указанные в «.gitignore»"
 
-#: builtin/grep.c:819
+#: builtin/grep.c:843
 msgid "recursively search in each submodule"
 msgstr "рекурсивный поиск по всем подмодулям"
 
-#: builtin/grep.c:822
+#: builtin/grep.c:846
 msgid "show non-matching lines"
 msgstr "искать в несовпадающих строках"
 
-#: builtin/grep.c:824
+#: builtin/grep.c:848
 msgid "case insensitive matching"
 msgstr "без учета регистра"
 
-#: builtin/grep.c:826
+#: builtin/grep.c:850
 msgid "match patterns only at word boundaries"
 msgstr "искать совпадения шаблона только на границах слов"
 
-#: builtin/grep.c:828
+#: builtin/grep.c:852
 msgid "process binary files as text"
 msgstr "обработка двоичных файлов как текста"
 
-#: builtin/grep.c:830
+#: builtin/grep.c:854
 msgid "don't match patterns in binary files"
 msgstr "не искать совпадения шаблона в двоичных файлах"
 
-#: builtin/grep.c:833
+#: builtin/grep.c:857
 msgid "process binary files with textconv filters"
 msgstr "обрабатываться двоичные файлы с помощью фильтров textconv"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:859
 msgid "search in subdirectories (default)"
 msgstr ""
 
-#: builtin/grep.c:837
+#: builtin/grep.c:861
 msgid "descend at most <depth> levels"
 msgstr "на глубине максиму <глубина> уровней"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:865
 msgid "use extended POSIX regular expressions"
 msgstr "использовать расширенные регулярные выражения POSIX"
 
-#: builtin/grep.c:844
+#: builtin/grep.c:868
 msgid "use basic POSIX regular expressions (default)"
 msgstr "использовать базовые регулярные выражения POSIX (по умолчанию)"
 
-#: builtin/grep.c:847
+#: builtin/grep.c:871
 msgid "interpret patterns as fixed strings"
 msgstr "интерпретировать шаблоны как фиксированные строки"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:874
 msgid "use Perl-compatible regular expressions"
 msgstr "использовать Perl-совместимые регулярные выражения"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:877
 msgid "show line numbers"
 msgstr "вывести номера строк"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:878
 msgid "show column number of first match"
 msgstr ""
 
-#: builtin/grep.c:855
+#: builtin/grep.c:879
 msgid "don't show filenames"
 msgstr "не выводить имена файлов"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:880
 msgid "show filenames"
 msgstr "выводить имена файлов"
 
-#: builtin/grep.c:858
+#: builtin/grep.c:882
 msgid "show filenames relative to top directory"
 msgstr "выводить имена файлов относительно каталога репозитория"
 
-#: builtin/grep.c:860
+#: builtin/grep.c:884
 msgid "show only filenames instead of matching lines"
 msgstr "выводить только имена файлов, а не совпадающие строки"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:886
 msgid "synonym for --files-with-matches"
 msgstr "синоним для --files-with-matches"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:889
 msgid "show only the names of files without match"
 msgstr "выводить только несовпадающие имена файлов"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:891
 msgid "print NUL after filenames"
 msgstr "выводить двоичный НОЛЬ после списка имен файлов"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:894
 msgid "show only matching parts of a line"
 msgstr ""
 
-#: builtin/grep.c:872
+#: builtin/grep.c:896
 msgid "show the number of matches instead of matching lines"
 msgstr "выводить количество совпадений, а не совпадающие строки"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:897
 msgid "highlight matches"
 msgstr "подсвечивать совпадения"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:899
 msgid "print empty line between matches from different files"
 msgstr "выводить пустую строку после совпадений из разных файлов"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:901
 msgid "show filename only once above matches from same file"
 msgstr "выводить имя файла только раз на несколько совпадений в одном файле"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:904
 msgid "show <n> context lines before and after matches"
 msgstr "показать <n> строк контекста перед и после совпадения"
 
-#: builtin/grep.c:883
+#: builtin/grep.c:907
 msgid "show <n> context lines before matches"
 msgstr "показать <n> строк контекста перед совпадением"
 
-#: builtin/grep.c:885
+#: builtin/grep.c:909
 msgid "show <n> context lines after matches"
 msgstr "показать <n> строк контекста после совпадения"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:911
 msgid "use <n> worker threads"
 msgstr "использовать <кол> рабочих потоков"
 
-#: builtin/grep.c:888
+#: builtin/grep.c:912
 msgid "shortcut for -C NUM"
 msgstr "тоже, что и -C КОЛИЧЕСТВО"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:915
 msgid "show a line with the function name before matches"
 msgstr "показать строку с именем функции перед совпадением"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:917
 msgid "show the surrounding function"
 msgstr "показать окружающую функцию"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:920
 msgid "read patterns from file"
 msgstr "прочитать шаблоны из файла"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:922
 msgid "match <pattern>"
 msgstr "поиск соответствий с <шаблоном>"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:924
 msgid "combine patterns specified with -e"
 msgstr "объединить шаблоны указанные с помощью -e"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:936
 msgid "indicate hit with exit status without output"
 msgstr "ничего не выводить, указать на совпадение с помощью кода выхода"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:938
 msgid "show only matches from files that match all patterns"
 msgstr "показать только совпадения из файлов в которых совпадают все шаблоны"
 
-#: builtin/grep.c:916
+#: builtin/grep.c:940
 msgid "show parse tree for grep expression"
 msgstr "показать дерево разбора для выражения поиска"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:944
 msgid "pager"
 msgstr "пейджер"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:944
 msgid "show matching files in the pager"
 msgstr "показать совпадающие файлы с помощью программы-пейджера"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:948
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "разрешить вызов grep(1) (игнорируется в этой сборке)"
 
-#: builtin/grep.c:988
+#: builtin/grep.c:1014
 msgid "no pattern given"
 msgstr ""
 
-#: builtin/grep.c:1024
+#: builtin/grep.c:1050
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index или --untracked нельзя использовать одновременно с указанием ревизии"
 
-#: builtin/grep.c:1032
+#: builtin/grep.c:1058
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "не удалось определить редакцию: %s"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1088
+msgid "--untracked not supported with --recurse-submodules"
+msgstr ""
+
+#: builtin/grep.c:1092
 msgid "invalid option combination, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1066 builtin/pack-objects.c:3403
+#: builtin/grep.c:1095 builtin/pack-objects.c:3655
 msgid "no threads support, ignoring --threads"
 msgstr "нет поддержки потоков, игнорирование --threads"
 
-#: builtin/grep.c:1069 builtin/index-pack.c:1511 builtin/pack-objects.c:2717
+#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "указано неправильное количество потоков (%d)"
 
-#: builtin/grep.c:1092
+#: builtin/grep.c:1132
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager работает только в рабочем каталоге"
 
-#: builtin/grep.c:1115
-msgid "option not supported with --recurse-submodules"
-msgstr ""
-
-#: builtin/grep.c:1121
+#: builtin/grep.c:1158
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr ""
 
-#: builtin/grep.c:1127
+#: builtin/grep.c:1164
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 
-#: builtin/grep.c:1135
+#: builtin/grep.c:1172
 msgid "both --cached and trees are given"
 msgstr ""
 
@@ -12493,10 +14616,6 @@
 msgstr "git hash-object  --stdin-paths"
 
 #: builtin/hash-object.c:98
-msgid "type"
-msgstr "тип"
-
-#: builtin/hash-object.c:98
 msgid "object type"
 msgstr "тип объекта"
 
@@ -12515,133 +14634,133 @@
 #: builtin/hash-object.c:104
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
-msgstr "хешировать любой мусор и создавать поврежденные объекты для отладки Git"
+msgstr "хэшировать любой мусор и создавать поврежденные объекты для отладки Git"
 
 #: builtin/hash-object.c:105
 msgid "process file as it were from this path"
 msgstr "обработать файл так, будто он находится по указанному пути"
 
-#: builtin/help.c:46
+#: builtin/help.c:47
 msgid "print all available commands"
 msgstr "вывести список всех доступных команд"
 
-#: builtin/help.c:47
+#: builtin/help.c:48
 msgid "exclude guides"
 msgstr "исключить руководства"
 
-#: builtin/help.c:48
+#: builtin/help.c:49
 msgid "print list of useful guides"
 msgstr "вывести список полезных руководств"
 
-#: builtin/help.c:49
+#: builtin/help.c:50
 msgid "print all configuration variable names"
 msgstr ""
 
-#: builtin/help.c:51
+#: builtin/help.c:52
 msgid "show man page"
 msgstr "открыть руководство в формате man"
 
-#: builtin/help.c:52
+#: builtin/help.c:53
 msgid "show manual in web browser"
 msgstr "открыть руководство в веб-браузере"
 
-#: builtin/help.c:54
+#: builtin/help.c:55
 msgid "show info page"
 msgstr "открыть руководство в формате info"
 
-#: builtin/help.c:56
+#: builtin/help.c:57
 msgid "print command description"
 msgstr ""
 
-#: builtin/help.c:61
+#: builtin/help.c:62
 msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
 msgstr "git help [--all] [--guides] [--man | --web | --info] [<команда>]"
 
-#: builtin/help.c:77
+#: builtin/help.c:163
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "неопознанный формат руководства «%s»"
 
-#: builtin/help.c:104
+#: builtin/help.c:190
 msgid "Failed to start emacsclient."
 msgstr "Сбой при запуске emacsclient."
 
-#: builtin/help.c:117
+#: builtin/help.c:203
 msgid "Failed to parse emacsclient version."
 msgstr "Сбой при определении версии emacsclient."
 
-#: builtin/help.c:125
+#: builtin/help.c:211
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "версия emacsclient «%d» слишком старая (< 22)."
 
-#: builtin/help.c:143 builtin/help.c:165 builtin/help.c:175 builtin/help.c:183
+#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "сбой при запуске «%s»"
 
-#: builtin/help.c:221
+#: builtin/help.c:307
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
 "Please consider using 'man.<tool>.cmd' instead."
 msgstr "«%s»: путь для неподдерживаемой программы просмотра man.\nВместо этого используйте «man.<программа>.cmd»."
 
-#: builtin/help.c:233
+#: builtin/help.c:319
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
 "Please consider using 'man.<tool>.path' instead."
 msgstr "«%s»: команда для неподдерживаемой программы просмотра man.\nВместо этого используйте «man.<программа>.path»."
 
-#: builtin/help.c:350
+#: builtin/help.c:436
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "«%s»: неизвестная программа просмотра man."
 
-#: builtin/help.c:367
+#: builtin/help.c:453
 msgid "no man viewer handled the request"
 msgstr "программа просмотра man не обработала запрос"
 
-#: builtin/help.c:375
+#: builtin/help.c:461
 msgid "no info viewer handled the request"
 msgstr "программа просмотра info не обработала запрос"
 
-#: builtin/help.c:434 builtin/help.c:445 git.c:335
+#: builtin/help.c:520 builtin/help.c:531 git.c:337
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "«%s» — это сокращение для «%s»"
 
-#: builtin/help.c:448 git.c:364
+#: builtin/help.c:534 git.c:369
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr ""
 
-#: builtin/help.c:477 builtin/help.c:507
+#: builtin/help.c:563 builtin/help.c:593
 #, c-format
 msgid "usage: %s%s"
 msgstr "использование: %s%s"
 
-#: builtin/help.c:491
+#: builtin/help.c:577
 msgid "'git help config' for more information"
 msgstr ""
 
-#: builtin/index-pack.c:184
+#: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "несоответствие типа объекта на %s"
 
-#: builtin/index-pack.c:204
+#: builtin/index-pack.c:241
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "ожидаемый объект не получен на %s"
 
-#: builtin/index-pack.c:207
+#: builtin/index-pack.c:244
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "объект %s: ожидаемый тип %s, получен %s"
 
-#: builtin/index-pack.c:257
+#: builtin/index-pack.c:294
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
@@ -12650,73 +14769,73 @@
 msgstr[2] "не удалось заполнить %d байтов"
 msgstr[3] "не удалось заполнить %d байтов"
 
-#: builtin/index-pack.c:267
+#: builtin/index-pack.c:304
 msgid "early EOF"
 msgstr "неожиданный конец файла"
 
-#: builtin/index-pack.c:268
+#: builtin/index-pack.c:305
 msgid "read error on input"
 msgstr "ошибка чтения ввода"
 
-#: builtin/index-pack.c:280
+#: builtin/index-pack.c:317
 msgid "used more bytes than were available"
 msgstr "использовано больше байт, чем было доступно"
 
-#: builtin/index-pack.c:287 builtin/pack-objects.c:600
+#: builtin/index-pack.c:324 builtin/pack-objects.c:619
 msgid "pack too large for current definition of off_t"
 msgstr "пакет слишком большой для текущего определения off_t"
 
-#: builtin/index-pack.c:290 builtin/unpack-objects.c:94
+#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "размер пакета превышает максимальный допустимый"
 
-#: builtin/index-pack.c:305 builtin/repack.c:250
+#: builtin/index-pack.c:342 builtin/repack.c:286
 #, c-format
 msgid "unable to create '%s'"
 msgstr "не удалось создать «%s»"
 
-#: builtin/index-pack.c:311
+#: builtin/index-pack.c:348
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "не удалось открыть файл пакета «%s»"
 
-#: builtin/index-pack.c:325
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "несоответствие подписи пакета"
 
-#: builtin/index-pack.c:327
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "версия пакета %<PRIu32> не поддерживается"
 
-#: builtin/index-pack.c:345
+#: builtin/index-pack.c:382
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "пакет содержит плохой объект по смещению %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:465
+#: builtin/index-pack.c:488
 #, c-format
 msgid "inflate returned %d"
 msgstr "программа сжатия вернула %d"
 
-#: builtin/index-pack.c:514
+#: builtin/index-pack.c:537
 msgid "offset value overflow for delta base object"
 msgstr "переполнение значения смещения у базового объекта дельты"
 
-#: builtin/index-pack.c:522
+#: builtin/index-pack.c:545
 msgid "delta base offset is out of bound"
 msgstr "смещение базовой дельты вышло за допустимые пределы"
 
-#: builtin/index-pack.c:530
+#: builtin/index-pack.c:553
 #, c-format
 msgid "unknown object type %d"
 msgstr "неизвестный тип объекта %d"
 
-#: builtin/index-pack.c:561
+#: builtin/index-pack.c:584
 msgid "cannot pread pack file"
 msgstr "не удалось выполнить pread для файла пакета"
 
-#: builtin/index-pack.c:563
+#: builtin/index-pack.c:586
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
@@ -12725,88 +14844,88 @@
 msgstr[2] "преждевременное окончание файла пакета, %<PRIuMAX> байтов отсутствует"
 msgstr[3] "преждевременное окончание файла пакета, %<PRIuMAX> байтов отсутствует"
 
-#: builtin/index-pack.c:589
+#: builtin/index-pack.c:612
 msgid "serious inflate inconsistency"
 msgstr "серьезное несоответствие при распаковке"
 
-#: builtin/index-pack.c:734 builtin/index-pack.c:740 builtin/index-pack.c:763
-#: builtin/index-pack.c:802 builtin/index-pack.c:811
+#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
+#: builtin/index-pack.c:826 builtin/index-pack.c:835
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "НАЙДЕНА КОЛЛИЗИЯ SHA1 С %s !"
 
-#: builtin/index-pack.c:737 builtin/pack-objects.c:153
-#: builtin/pack-objects.c:213 builtin/pack-objects.c:307
+#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "не удалось прочитать %s"
 
-#: builtin/index-pack.c:800
+#: builtin/index-pack.c:824
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "не удалось прочитать информацию существующего объекта %s"
 
-#: builtin/index-pack.c:808
+#: builtin/index-pack.c:832
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "не удалось прочитать существующий объект %s"
 
-#: builtin/index-pack.c:822
+#: builtin/index-pack.c:846
 #, c-format
 msgid "invalid blob object %s"
 msgstr "неправильный файл двоичного объекта %s"
 
-#: builtin/index-pack.c:825 builtin/index-pack.c:844
+#: builtin/index-pack.c:849 builtin/index-pack.c:868
 msgid "fsck error in packed object"
 msgstr ""
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:870
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Не все дочерние объекты %s достижимы"
 
-#: builtin/index-pack.c:918 builtin/index-pack.c:949
+#: builtin/index-pack.c:931 builtin/index-pack.c:978
 msgid "failed to apply delta"
 msgstr "сбой при применении дельты"
 
-#: builtin/index-pack.c:1117
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Получение объектов"
 
-#: builtin/index-pack.c:1117
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Индексирование объектов"
 
-#: builtin/index-pack.c:1151
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "пакет поврежден (несоответствие SHA1)"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "не удалось выполнить fstat для файла пакета"
 
-#: builtin/index-pack.c:1159
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "файл пакета содержит мусор в конце"
 
-#: builtin/index-pack.c:1171
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "безумная путаница в parse_pack_objects()"
 
-#: builtin/index-pack.c:1194
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Определение изменений"
 
-#: builtin/index-pack.c:1204 builtin/pack-objects.c:2489
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "не удалось создать поток: %s"
 
-#: builtin/index-pack.c:1245
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "безумная путаница"
 
-#: builtin/index-pack.c:1251
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
@@ -12815,12 +14934,12 @@
 msgstr[2] "завершено с %d локальными объектами"
 msgstr[3] "завершено с %d локальными объектами"
 
-#: builtin/index-pack.c:1263
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Неожиданная контрольная сумма в конце %s (диск поврежден?)"
 
-#: builtin/index-pack.c:1267
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
@@ -12829,59 +14948,59 @@
 msgstr[2] "пакет содержит %d неразрешенных дельт"
 msgstr[3] "пакет содержит %d неразрешенных дельт"
 
-#: builtin/index-pack.c:1291
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "нельзя сжать присоединенный объект (%d)"
 
-#: builtin/index-pack.c:1368
+#: builtin/index-pack.c:1424
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "локальный объект %s поврежден"
 
-#: builtin/index-pack.c:1382
+#: builtin/index-pack.c:1444
 #, c-format
 msgid "packfile name '%s' does not end with '.pack'"
 msgstr "имя пакета «%s» не оканчивается на «.pack»"
 
-#: builtin/index-pack.c:1407
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1415
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1439
+#: builtin/index-pack.c:1501
 msgid "error while closing pack file"
 msgstr "ошибка при закрытии файла пакета"
 
-#: builtin/index-pack.c:1453
+#: builtin/index-pack.c:1515
 msgid "cannot store pack file"
 msgstr "не удалось сохранить файл пакета"
 
-#: builtin/index-pack.c:1461
+#: builtin/index-pack.c:1523
 msgid "cannot store index file"
 msgstr "не удалось сохранить файл индекса"
 
-#: builtin/index-pack.c:1505 builtin/pack-objects.c:2728
+#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "плохой pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1573
+#: builtin/index-pack.c:1631
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Не удалось открыть существующий файл пакета «%s»"
 
-#: builtin/index-pack.c:1575
+#: builtin/index-pack.c:1633
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Не удалось открыть существующий файл индекса для «%s»"
 
-#: builtin/index-pack.c:1623
+#: builtin/index-pack.c:1681
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
@@ -12890,7 +15009,7 @@
 msgstr[2] "не дельты: %d объектов"
 msgstr[3] "не дельты: %d объектов"
 
-#: builtin/index-pack.c:1630
+#: builtin/index-pack.c:1688
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
@@ -12899,698 +15018,761 @@
 msgstr[2] "длина цепочки = %d: %lu объектов"
 msgstr[3] "длина цепочки = %d: %lu объектов"
 
-#: builtin/index-pack.c:1667
+#: builtin/index-pack.c:1728
 msgid "Cannot come back to cwd"
 msgstr "Не удалось вернуться в текущий рабочий каталог"
 
-#: builtin/index-pack.c:1716 builtin/index-pack.c:1719
-#: builtin/index-pack.c:1735 builtin/index-pack.c:1739
+#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
+#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
 #, c-format
 msgid "bad %s"
 msgstr "плохой %s"
 
-#: builtin/index-pack.c:1755
+#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#, c-format
+msgid "unknown hash algorithm '%s'"
+msgstr ""
+
+#: builtin/index-pack.c:1821
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin нельзя использовать без --stdin"
 
-#: builtin/index-pack.c:1757
+#: builtin/index-pack.c:1823
 msgid "--stdin requires a git repository"
 msgstr "опция --stdin требует наличия репозитория git"
 
-#: builtin/index-pack.c:1763
+#: builtin/index-pack.c:1825
+msgid "--object-format cannot be used with --stdin"
+msgstr ""
+
+#: builtin/index-pack.c:1831
 msgid "--verify with no packfile name given"
 msgstr "--verify без указания имени файла пакета"
 
-#: builtin/index-pack.c:1811 builtin/unpack-objects.c:580
+#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
 msgid "fsck error in pack objects"
-msgstr ""
+msgstr "ошибка fsck в упакованных объектах"
 
-#: builtin/init-db.c:61
+#: builtin/init-db.c:64
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "не удалось выполнить stat для шаблона «%s»"
 
-#: builtin/init-db.c:66
+#: builtin/init-db.c:69
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "не удалось выполнить opendir для «%s»"
 
-#: builtin/init-db.c:78
+#: builtin/init-db.c:81
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "не удалось выполнить readlink для «%s»"
 
-#: builtin/init-db.c:80
+#: builtin/init-db.c:83
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "не удалось создать символьную ссылку «%s» на «%s»"
 
-#: builtin/init-db.c:86
+#: builtin/init-db.c:89
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "не удалось скопировать файл «%s» в «%s»"
 
-#: builtin/init-db.c:90
+#: builtin/init-db.c:93
 #, c-format
 msgid "ignoring template %s"
 msgstr "игнорирование шаблона %s"
 
-#: builtin/init-db.c:121
+#: builtin/init-db.c:124
 #, c-format
 msgid "templates not found in %s"
 msgstr ""
 
-#: builtin/init-db.c:136
+#: builtin/init-db.c:139
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "не копирую шаблоны из «%s»: %s"
 
-#: builtin/init-db.c:334
+#: builtin/init-db.c:275
+#, c-format
+msgid "invalid initial branch name: '%s'"
+msgstr ""
+
+#: builtin/init-db.c:367
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "не удается обработать файл типа %d"
 
-#: builtin/init-db.c:337
+#: builtin/init-db.c:370
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "не удается переместить файл %s в %s"
 
-#: builtin/init-db.c:354 builtin/init-db.c:357
+#: builtin/init-db.c:386
+msgid "attempt to reinitialize repository with different hash"
+msgstr ""
+
+#: builtin/init-db.c:410 builtin/init-db.c:413
 #, c-format
 msgid "%s already exists"
 msgstr "%s уже существует"
 
-#: builtin/init-db.c:413
+#: builtin/init-db.c:445
+#, c-format
+msgid "re-init: ignored --initial-branch=%s"
+msgstr ""
+
+#: builtin/init-db.c:476
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "Переинициализирован существующий общий репозиторий Git в %s%s\n"
 
-#: builtin/init-db.c:414
+#: builtin/init-db.c:477
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Переинициализирован существующий репозиторий Git в %s%s\n"
 
-#: builtin/init-db.c:418
+#: builtin/init-db.c:481
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Инициализирован пустой общий репозиторий Git в %s%s\n"
 
-#: builtin/init-db.c:419
+#: builtin/init-db.c:482
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Инициализирован пустой репозиторий Git в %s%s\n"
 
-#: builtin/init-db.c:468
+#: builtin/init-db.c:531
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] "
 "[--shared[=<permissions>]] [<directory>]"
 msgstr "git init [-q | --quiet] [--bare] [--template=<каталог-шаблонов>] [--shared[=<права-доступа>]] [<каталог>]"
 
-#: builtin/init-db.c:491
+#: builtin/init-db.c:557
 msgid "permissions"
 msgstr "права-доступа"
 
-#: builtin/init-db.c:492
+#: builtin/init-db.c:558
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "укажите, если репозиторий git будет использоваться несколькими пользователями"
 
-#: builtin/init-db.c:526 builtin/init-db.c:531
+#: builtin/init-db.c:564
+msgid "override the name of the initial branch"
+msgstr ""
+
+#: builtin/init-db.c:565 builtin/verify-pack.c:74
+msgid "hash"
+msgstr "хэш-код"
+
+#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+msgid "specify the hash algorithm to use"
+msgstr "указание какой алгоритм хэширования использовать"
+
+#: builtin/init-db.c:573
+msgid "--separate-git-dir and --bare are mutually exclusive"
+msgstr ""
+
+#: builtin/init-db.c:602 builtin/init-db.c:607
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "не удалось выполнить mkdir %s"
 
-#: builtin/init-db.c:535
+#: builtin/init-db.c:611 builtin/init-db.c:666
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "не удалось выполнить chdir в %s"
 
-#: builtin/init-db.c:556
+#: builtin/init-db.c:638
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr "%s (или --work-tree=<каталог>) нельзя использовать без указания %s (или --git-dir=<каталог>)"
 
-#: builtin/init-db.c:584
+#: builtin/init-db.c:690
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Не удалось получить доступ к рабочему каталогу «%s»"
 
-#: builtin/interpret-trailers.c:15
+#: builtin/init-db.c:695
+msgid "--separate-git-dir incompatible with bare repository"
+msgstr ""
+
+#: builtin/interpret-trailers.c:16
 msgid ""
 "git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
 "<token>[(=|:)<value>])...] [<file>...]"
 msgstr "git interpret-trailers [--in-place] [--trim-empty] [(--trailer <ключ>[(=|:)<значение>])…] [<файл>…]"
 
-#: builtin/interpret-trailers.c:94
+#: builtin/interpret-trailers.c:95
 msgid "edit files in place"
 msgstr "редактировать файлы на месте"
 
-#: builtin/interpret-trailers.c:95
+#: builtin/interpret-trailers.c:96
 msgid "trim empty trailers"
 msgstr "удалять пустые завершители"
 
-#: builtin/interpret-trailers.c:98
+#: builtin/interpret-trailers.c:99
 msgid "where to place the new trailer"
 msgstr "где поместить новый завершитель"
 
-#: builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:101
 msgid "action if trailer already exists"
 msgstr "действие, если завершитель уже существует"
 
-#: builtin/interpret-trailers.c:102
+#: builtin/interpret-trailers.c:103
 msgid "action if trailer is missing"
 msgstr "действие, если завершитель не существует"
 
-#: builtin/interpret-trailers.c:104
+#: builtin/interpret-trailers.c:105
 msgid "output only the trailers"
 msgstr "вывести только завершители"
 
-#: builtin/interpret-trailers.c:105
+#: builtin/interpret-trailers.c:106
 msgid "do not apply config rules"
 msgstr "не применять правила из файла конфигурации"
 
-#: builtin/interpret-trailers.c:106
+#: builtin/interpret-trailers.c:107
 msgid "join whitespace-continued values"
 msgstr "объединить значения разделенные пробелом"
 
-#: builtin/interpret-trailers.c:107
+#: builtin/interpret-trailers.c:108
 msgid "set parsing options"
 msgstr "указание опций разбора"
 
-#: builtin/interpret-trailers.c:109
-msgid "do not treat --- specially"
-msgstr ""
-
 #: builtin/interpret-trailers.c:110
+msgid "do not treat --- specially"
+msgstr "не воспринимать --- по-особенному"
+
+#: builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "завершитель"
 
-#: builtin/interpret-trailers.c:111
+#: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "завершители для добавления"
 
-#: builtin/interpret-trailers.c:120
+#: builtin/interpret-trailers.c:123
 msgid "--trailer with --only-input does not make sense"
 msgstr "--trailer одновременно с --only-input не имеет смысла"
 
-#: builtin/interpret-trailers.c:130
+#: builtin/interpret-trailers.c:133
 msgid "no input file given for in-place editing"
 msgstr "ничего не передано, для редактирования файлов на месте"
 
-#: builtin/log.c:55
+#: builtin/log.c:58
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<опции>] [<диапазон-редакций>] [[--] <путь>…]"
 
-#: builtin/log.c:56
+#: builtin/log.c:59
 msgid "git show [<options>] <object>..."
 msgstr "git show [<опции>] <объект>…"
 
-#: builtin/log.c:104
+#: builtin/log.c:112
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "неправильный параметр для --decorate: %s"
 
-#: builtin/log.c:168
+#: builtin/log.c:179
 msgid "show source"
 msgstr "показать источник"
 
-#: builtin/log.c:169
+#: builtin/log.c:180
 msgid "Use mail map file"
 msgstr "Использовать файл соответствия почтовых адресов"
 
-#: builtin/log.c:171
+#: builtin/log.c:183
 msgid "only decorate refs that match <pattern>"
 msgstr "декорировать только ссылки соответствующие <шаблону>"
 
-#: builtin/log.c:173
+#: builtin/log.c:185
 msgid "do not decorate refs that match <pattern>"
 msgstr "не декорировать ссылки соответствующие <шаблону>"
 
-#: builtin/log.c:174
+#: builtin/log.c:186
 msgid "decorate options"
 msgstr "опции формата вывода ссылок"
 
-#: builtin/log.c:177
-msgid "Process line range n,m in file, counting from 1"
-msgstr "Обработать диапазон строк n,m из файла, начиная с 1"
+#: builtin/log.c:189
+msgid ""
+"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"<file>"
+msgstr ""
 
-#: builtin/log.c:275
+#: builtin/log.c:212
+msgid "-L<range>:<file> cannot be used with pathspec"
+msgstr ""
+
+#: builtin/log.c:302
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Финальный вывод: %d %s\n"
 
-#: builtin/log.c:529
+#: builtin/log.c:564
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: плохой файл"
 
-#: builtin/log.c:544 builtin/log.c:638
+#: builtin/log.c:579 builtin/log.c:674
 #, c-format
 msgid "could not read object %s"
 msgstr ""
 
-#: builtin/log.c:663
+#: builtin/log.c:699
 #, c-format
 msgid "unknown type: %d"
 msgstr ""
 
-#: builtin/log.c:784
+#: builtin/log.c:848
+#, c-format
+msgid "%s: invalid cover from description mode"
+msgstr ""
+
+#: builtin/log.c:855
 msgid "format.headers without value"
 msgstr "в format.headers не указано значение"
 
-#: builtin/log.c:885
-msgid "name of output directory is too long"
-msgstr "слишком длинное имя выходного каталога"
-
-#: builtin/log.c:901
+#: builtin/log.c:984
 #, c-format
 msgid "cannot open patch file %s"
 msgstr ""
 
-#: builtin/log.c:918
+#: builtin/log.c:1001
 msgid "need exactly one range"
 msgstr ""
 
-#: builtin/log.c:928
+#: builtin/log.c:1011
 msgid "not a range"
 msgstr ""
 
-#: builtin/log.c:1051
+#: builtin/log.c:1175
 msgid "cover letter needs email format"
 msgstr ""
 
-#: builtin/log.c:1057
+#: builtin/log.c:1181
 msgid "failed to create cover-letter file"
 msgstr ""
 
-#: builtin/log.c:1136
+#: builtin/log.c:1262
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "ошибка в поле in-reply-to: %s"
 
-#: builtin/log.c:1163
+#: builtin/log.c:1289
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<опции>] [<начиная-с> | <диапазон-редакций>]"
 
-#: builtin/log.c:1221
+#: builtin/log.c:1347
 msgid "two output directories?"
 msgstr ""
 
-#: builtin/log.c:1332 builtin/log.c:2076 builtin/log.c:2078 builtin/log.c:2090
+#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
 #, c-format
 msgid "unknown commit %s"
 msgstr ""
 
-#: builtin/log.c:1342 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr ""
 
-#: builtin/log.c:1347
+#: builtin/log.c:1518
 msgid "could not find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1351
+#: builtin/log.c:1528
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
 "Or you could specify base commit by --base=<base-commit-id> manually"
 msgstr ""
 
-#: builtin/log.c:1371
+#: builtin/log.c:1551
 msgid "failed to find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1382
+#: builtin/log.c:1568
 msgid "base commit should be the ancestor of revision list"
 msgstr "базовый коммит должен быть предком списка редакций"
 
-#: builtin/log.c:1386
+#: builtin/log.c:1578
 msgid "base commit shouldn't be in revision list"
 msgstr "базовый коммит не должен быть в списке редакций"
 
-#: builtin/log.c:1439
+#: builtin/log.c:1636
 msgid "cannot get patch id"
 msgstr "не удалось получить идентификатор патча"
 
-#: builtin/log.c:1491
-msgid "failed to infer range-diff ranges"
+#: builtin/log.c:1693
+msgid "failed to infer range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1536
+#: builtin/log.c:1695
+#, c-format
+msgid "using '%s' as range-diff origin of current series"
+msgstr ""
+
+#: builtin/log.c:1739
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "выводить [PATCH n/m] даже когда один патч"
 
-#: builtin/log.c:1539
+#: builtin/log.c:1742
 msgid "use [PATCH] even with multiple patches"
 msgstr "выводить [PATCH] даже когда несколько патчей"
 
-#: builtin/log.c:1543
+#: builtin/log.c:1746
 msgid "print patches to standard out"
 msgstr "выводить патчи на стандартный вывод"
 
-#: builtin/log.c:1545
+#: builtin/log.c:1748
 msgid "generate a cover letter"
 msgstr "создать сопроводительное письмо"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1750
 msgid "use simple number sequence for output file names"
 msgstr "использовать простую последовательность чисел для имен выходных файлов"
 
-#: builtin/log.c:1548
+#: builtin/log.c:1751
 msgid "sfx"
 msgstr "суффикс"
 
-#: builtin/log.c:1549
+#: builtin/log.c:1752
 msgid "use <sfx> instead of '.patch'"
 msgstr "использовать суффикс <суффикс> вместо «.patch»"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1754
 msgid "start numbering patches at <n> instead of 1"
 msgstr "начать нумерацию патчей с <n>, а не с 1"
 
-#: builtin/log.c:1553
+#: builtin/log.c:1756
 msgid "mark the series as Nth re-roll"
 msgstr "пометить серию как энную попытку"
 
-#: builtin/log.c:1555
+#: builtin/log.c:1758
+msgid "max length of output filename"
+msgstr ""
+
+#: builtin/log.c:1760
 msgid "Use [RFC PATCH] instead of [PATCH]"
 msgstr "Использовать [RFC PATCH] вместо [PATCH]"
 
-#: builtin/log.c:1558
+#: builtin/log.c:1763
+msgid "cover-from-description-mode"
+msgstr ""
+
+#: builtin/log.c:1764
+msgid "generate parts of a cover letter based on a branch's description"
+msgstr ""
+
+#: builtin/log.c:1766
 msgid "Use [<prefix>] instead of [PATCH]"
 msgstr "Использовать [<префикс>] вместо [PATCH]"
 
-#: builtin/log.c:1561
+#: builtin/log.c:1769
 msgid "store resulting files in <dir>"
 msgstr "сохранить результирующие файлы в <каталог>"
 
-#: builtin/log.c:1564
+#: builtin/log.c:1772
 msgid "don't strip/add [PATCH]"
 msgstr "не обрезать/добавлять [PATCH]"
 
-#: builtin/log.c:1567
+#: builtin/log.c:1775
 msgid "don't output binary diffs"
 msgstr "не выводить двоичные изменения"
 
-#: builtin/log.c:1569
+#: builtin/log.c:1777
 msgid "output all-zero hash in From header"
-msgstr "выводить нулевую хеш-сумму в заголовке From"
+msgstr "выводить нулевой хэш-код в заголовке From"
 
-#: builtin/log.c:1571
+#: builtin/log.c:1779
 msgid "don't include a patch matching a commit upstream"
 msgstr "не включать патч, если коммит уже есть в вышестоящей ветке"
 
-#: builtin/log.c:1573
+#: builtin/log.c:1781
 msgid "show patch format instead of default (patch + stat)"
 msgstr "выводить в формате патча, а не в стандартном (патч + статистика)"
 
-#: builtin/log.c:1575
+#: builtin/log.c:1783
 msgid "Messaging"
 msgstr "Передача сообщений"
 
-#: builtin/log.c:1576
+#: builtin/log.c:1784
 msgid "header"
 msgstr "заголовок"
 
-#: builtin/log.c:1577
+#: builtin/log.c:1785
 msgid "add email header"
 msgstr "добавить заголовок сообщения"
 
-#: builtin/log.c:1578 builtin/log.c:1580
+#: builtin/log.c:1786 builtin/log.c:1787
 msgid "email"
 msgstr "почта"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1786
 msgid "add To: header"
 msgstr "добавить заголовок To:"
 
-#: builtin/log.c:1580
+#: builtin/log.c:1787
 msgid "add Cc: header"
 msgstr "добавить заголовок Cc:"
 
-#: builtin/log.c:1582
+#: builtin/log.c:1788
 msgid "ident"
 msgstr "идентификатор"
 
-#: builtin/log.c:1583
+#: builtin/log.c:1789
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "установить адрес отправителя на <идентификатор> (или на идентификатор коммитера, если отсутствует)"
 
-#: builtin/log.c:1585
+#: builtin/log.c:1791
 msgid "message-id"
 msgstr "идентификатор-сообщения"
 
-#: builtin/log.c:1586
+#: builtin/log.c:1792
 msgid "make first mail a reply to <message-id>"
 msgstr "сделать первое письмо ответом на <идентификатор-сообщения>"
 
-#: builtin/log.c:1587 builtin/log.c:1590
+#: builtin/log.c:1793 builtin/log.c:1796
 msgid "boundary"
 msgstr "вложение"
 
-#: builtin/log.c:1588
+#: builtin/log.c:1794
 msgid "attach the patch"
 msgstr "приложить патч"
 
-#: builtin/log.c:1591
+#: builtin/log.c:1797
 msgid "inline the patch"
 msgstr "включить патч в текст письма"
 
-#: builtin/log.c:1595
+#: builtin/log.c:1801
 msgid "enable message threading, styles: shallow, deep"
 msgstr "включить в письмах иерархичность, стили: shallow (частичную), deep (глубокую)"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1803
 msgid "signature"
 msgstr "подпись"
 
-#: builtin/log.c:1598
+#: builtin/log.c:1804
 msgid "add a signature"
 msgstr "добавить подпись"
 
-#: builtin/log.c:1599
+#: builtin/log.c:1805
 msgid "base-commit"
 msgstr "базовый коммит"
 
-#: builtin/log.c:1600
+#: builtin/log.c:1806
 msgid "add prerequisite tree info to the patch series"
 msgstr "добавить информацию о требовании дерева к серии патчей"
 
-#: builtin/log.c:1602
+#: builtin/log.c:1809
 msgid "add a signature from a file"
 msgstr "добавить подпись из файла"
 
-#: builtin/log.c:1603
+#: builtin/log.c:1810
 msgid "don't print the patch filenames"
 msgstr "не выводить имена файлов патчей"
 
-#: builtin/log.c:1605
+#: builtin/log.c:1812
 msgid "show progress while generating patches"
 msgstr "показать прогресс выполнения во создания патчей"
 
-#: builtin/log.c:1606
-msgid "rev"
-msgstr ""
-
-#: builtin/log.c:1607
+#: builtin/log.c:1814
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1610
+#: builtin/log.c:1817
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1612
+#: builtin/log.c:1819
 msgid "percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/log.c:1687
+#: builtin/log.c:1905
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "неправильная строка идентификации: %s"
 
-#: builtin/log.c:1702
+#: builtin/log.c:1920
 msgid "-n and -k are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:1704
+#: builtin/log.c:1922
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr ""
 
-#: builtin/log.c:1712
+#: builtin/log.c:1930
 msgid "--name-only does not make sense"
 msgstr "--name-only не имеет смысла"
 
-#: builtin/log.c:1714
+#: builtin/log.c:1932
 msgid "--name-status does not make sense"
 msgstr "--name-status не имеет смысла"
 
-#: builtin/log.c:1716
+#: builtin/log.c:1934
 msgid "--check does not make sense"
 msgstr "--check не имеет смысла"
 
-#: builtin/log.c:1748
-msgid "standard output, or directory, which one?"
-msgstr "стандартный вывод или каталог?"
+#: builtin/log.c:1956
+msgid "--stdout, --output, and --output-directory are mutually exclusive"
+msgstr ""
 
-#: builtin/log.c:1837
+#: builtin/log.c:2079
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1841
+#: builtin/log.c:2083
 msgid "Interdiff:"
 msgstr ""
 
-#: builtin/log.c:1842
+#: builtin/log.c:2084
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr ""
 
-#: builtin/log.c:1848
+#: builtin/log.c:2090
 msgid "--creation-factor requires --range-diff"
 msgstr ""
 
-#: builtin/log.c:1852
+#: builtin/log.c:2094
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1860
+#: builtin/log.c:2102
 msgid "Range-diff:"
 msgstr ""
 
-#: builtin/log.c:1861
+#: builtin/log.c:2103
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr ""
 
-#: builtin/log.c:1872
+#: builtin/log.c:2114
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "не удалось прочитать файл подписи «%s»"
 
-#: builtin/log.c:1908
+#: builtin/log.c:2150
 msgid "Generating patches"
 msgstr "Создание патчей"
 
-#: builtin/log.c:1952
+#: builtin/log.c:2194
 msgid "failed to create output files"
 msgstr ""
 
-#: builtin/log.c:2011
+#: builtin/log.c:2253
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<вышестоящая-ветка> [<редакция> [<ограничение>]]]"
 
-#: builtin/log.c:2065
+#: builtin/log.c:2307
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> "
 "manually.\n"
 msgstr "Не удалось найти отслеживаемую внешнюю ветку, укажите <вышестоящую-ветку> вручную.\n"
 
-#: builtin/ls-files.c:470
+#: builtin/ls-files.c:471
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<опции>] [<файл>…]"
 
-#: builtin/ls-files.c:526
+#: builtin/ls-files.c:527
 msgid "identify the file status with tags"
 msgstr "выводить имена файлов с метками"
 
-#: builtin/ls-files.c:528
+#: builtin/ls-files.c:529
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "использовать символы в нижнем регистре для «предположительно без изменений» файлов"
 
-#: builtin/ls-files.c:530
+#: builtin/ls-files.c:531
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "использовать символы нижнего регистра для файлов «fsmonitor clean»"
 
-#: builtin/ls-files.c:532
+#: builtin/ls-files.c:533
 msgid "show cached files in the output (default)"
 msgstr "показывать кэшированные файлы при выводе (по умолчанию)"
 
-#: builtin/ls-files.c:534
+#: builtin/ls-files.c:535
 msgid "show deleted files in the output"
 msgstr "показывать удаленные файлы при выводе"
 
-#: builtin/ls-files.c:536
+#: builtin/ls-files.c:537
 msgid "show modified files in the output"
 msgstr "показывать измененные файлы при выводе"
 
-#: builtin/ls-files.c:538
+#: builtin/ls-files.c:539
 msgid "show other files in the output"
 msgstr "показывать другие файлы при выводе"
 
-#: builtin/ls-files.c:540
+#: builtin/ls-files.c:541
 msgid "show ignored files in the output"
 msgstr "показывать игнорируемые файлы при выводе"
 
-#: builtin/ls-files.c:543
+#: builtin/ls-files.c:544
 msgid "show staged contents' object name in the output"
 msgstr "показывать имя индексированного объекта на выводе"
 
-#: builtin/ls-files.c:545
+#: builtin/ls-files.c:546
 msgid "show files on the filesystem that need to be removed"
 msgstr "показывать файлы в файловой системе, которые должны быть удалены"
 
-#: builtin/ls-files.c:547
+#: builtin/ls-files.c:548
 msgid "show 'other' directories' names only"
 msgstr "показывать только имена у «других» каталогов"
 
-#: builtin/ls-files.c:549
+#: builtin/ls-files.c:550
 msgid "show line endings of files"
 msgstr "показать концы строк файлов"
 
-#: builtin/ls-files.c:551
+#: builtin/ls-files.c:552
 msgid "don't show empty directories"
 msgstr "не показывать пустые каталоги"
 
-#: builtin/ls-files.c:554
+#: builtin/ls-files.c:555
 msgid "show unmerged files in the output"
 msgstr "показывать не слитые файлы на выводе"
 
-#: builtin/ls-files.c:556
+#: builtin/ls-files.c:557
 msgid "show resolve-undo information"
 msgstr "показывать информации о разрешении конфликтов и отмене"
 
-#: builtin/ls-files.c:558
+#: builtin/ls-files.c:559
 msgid "skip files matching pattern"
 msgstr "пропустить файлы, соответствующие шаблону"
 
-#: builtin/ls-files.c:561
+#: builtin/ls-files.c:562
 msgid "exclude patterns are read from <file>"
 msgstr "прочитать шаблоны исключения из <файл>"
 
-#: builtin/ls-files.c:564
+#: builtin/ls-files.c:565
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "прочитать дополнительные покаталожные шаблоны исключения из <файл>"
 
-#: builtin/ls-files.c:566
+#: builtin/ls-files.c:567
 msgid "add the standard git exclusions"
 msgstr "добавить стандартные исключения git"
 
-#: builtin/ls-files.c:570
+#: builtin/ls-files.c:571
 msgid "make the output relative to the project top directory"
 msgstr "выводить пути относительно корневого каталога проекта"
 
-#: builtin/ls-files.c:573
+#: builtin/ls-files.c:574
 msgid "recurse through submodules"
 msgstr "рекурсивно по подмодулям"
 
-#: builtin/ls-files.c:575
+#: builtin/ls-files.c:576
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "если какой-либо <файл> не в индексе, считать это ошибкой"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:577
 msgid "tree-ish"
 msgstr "указатель-дерева"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:578
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr "притвориться, что пути удалены, т.к. <указатель-дерева> еще существует"
 
-#: builtin/ls-files.c:579
+#: builtin/ls-files.c:580
 msgid "show debugging data"
 msgstr "показать отладочную информацию"
 
@@ -13605,7 +15787,7 @@
 msgid "do not print remote URL"
 msgstr "не выводить URL внешних репозиториев"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1458
+#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
 msgid "exec"
 msgstr "запуск"
 
@@ -13678,365 +15860,6 @@
 msgid "empty mbox: '%s'"
 msgstr "пустой mbox: «%s»"
 
-#: builtin/merge.c:54
-msgid "git merge [<options>] [<commit>...]"
-msgstr "git merge [<опции>] [<коммит>…]"
-
-#: builtin/merge.c:55
-msgid "git merge --abort"
-msgstr "git merge --abort"
-
-#: builtin/merge.c:56
-msgid "git merge --continue"
-msgstr "git merge --continue"
-
-#: builtin/merge.c:116
-msgid "switch `m' requires a value"
-msgstr "при указании параметра «m» требуется указать значение"
-
-#: builtin/merge.c:139
-#, c-format
-msgid "option `%s' requires a value"
-msgstr ""
-
-#: builtin/merge.c:185
-#, c-format
-msgid "Could not find merge strategy '%s'.\n"
-msgstr "Не удалось найти стратегию слияния «%s».\n"
-
-#: builtin/merge.c:186
-#, c-format
-msgid "Available strategies are:"
-msgstr "Доступные стратегии:"
-
-#: builtin/merge.c:191
-#, c-format
-msgid "Available custom strategies are:"
-msgstr "Доступные пользовательские стратегии:"
-
-#: builtin/merge.c:242 builtin/pull.c:150
-msgid "do not show a diffstat at the end of the merge"
-msgstr "не выводить статистику изменений после окончания слияния"
-
-#: builtin/merge.c:245 builtin/pull.c:153
-msgid "show a diffstat at the end of the merge"
-msgstr "вывести статистику изменений после окончания слияния"
-
-#: builtin/merge.c:246 builtin/pull.c:156
-msgid "(synonym to --stat)"
-msgstr "(синоним для --stat)"
-
-#: builtin/merge.c:248 builtin/pull.c:159
-msgid "add (at most <n>) entries from shortlog to merge commit message"
-msgstr "добавить (максимум <n>) записей из короткого журнала в сообщение коммита у слияния"
-
-#: builtin/merge.c:251 builtin/pull.c:165
-msgid "create a single commit instead of doing a merge"
-msgstr "создать один коммит, вместо выполнения слияния"
-
-#: builtin/merge.c:253 builtin/pull.c:168
-msgid "perform a commit if the merge succeeds (default)"
-msgstr "сделать коммит, если слияние прошло успешно (по умолчанию)"
-
-#: builtin/merge.c:255 builtin/pull.c:171
-msgid "edit message before committing"
-msgstr "отредактировать сообщение перед выполнением коммита"
-
-#: builtin/merge.c:257
-msgid "allow fast-forward (default)"
-msgstr "разрешить перемотку вперед (по умолчанию)"
-
-#: builtin/merge.c:259 builtin/pull.c:178
-msgid "abort if fast-forward is not possible"
-msgstr "отменить выполнение слияния, если перемотка вперед невозможна"
-
-#: builtin/merge.c:263 builtin/pull.c:181
-msgid "verify that the named commit has a valid GPG signature"
-msgstr "проверить, что указанный коммит имеет верную электронную подпись GPG"
-
-#: builtin/merge.c:264 builtin/notes.c:787 builtin/pull.c:185
-#: builtin/rebase.c:492 builtin/rebase.c:1471 builtin/revert.c:113
-msgid "strategy"
-msgstr "стратегия"
-
-#: builtin/merge.c:265 builtin/pull.c:186
-msgid "merge strategy to use"
-msgstr "используемая стратегия слияния"
-
-#: builtin/merge.c:266 builtin/pull.c:189
-msgid "option=value"
-msgstr "опция=значение"
-
-#: builtin/merge.c:267 builtin/pull.c:190
-msgid "option for selected merge strategy"
-msgstr "опции для выбранной стратегии слияния"
-
-#: builtin/merge.c:269
-msgid "merge commit message (for a non-fast-forward merge)"
-msgstr "сообщение коммита для слияния (для слияния без перемотки вперед)"
-
-#: builtin/merge.c:276
-msgid "abort the current in-progress merge"
-msgstr "отменить выполнение происходящего слияния"
-
-#: builtin/merge.c:278
-msgid "continue the current in-progress merge"
-msgstr "продолжить выполнение происходящего слияния"
-
-#: builtin/merge.c:280 builtin/pull.c:197
-msgid "allow merging unrelated histories"
-msgstr "разрешить слияние несвязанных историй изменений"
-
-#: builtin/merge.c:286
-msgid "verify commit-msg hook"
-msgstr "проверить перехватчик commit-msg"
-
-#: builtin/merge.c:311
-msgid "could not run stash."
-msgstr "не удалось выполнить stash."
-
-#: builtin/merge.c:316
-msgid "stash failed"
-msgstr "сбой при выполнении stash"
-
-#: builtin/merge.c:321
-#, c-format
-msgid "not a valid object: %s"
-msgstr "неправильный объект: %s"
-
-#: builtin/merge.c:343 builtin/merge.c:360
-msgid "read-tree failed"
-msgstr "сбой при выполнении read-tree"
-
-#: builtin/merge.c:390
-msgid " (nothing to squash)"
-msgstr " (нечего уплотнять)"
-
-#: builtin/merge.c:401
-#, c-format
-msgid "Squash commit -- not updating HEAD\n"
-msgstr "Уплотнение коммита — не обновляя HEAD\n"
-
-#: builtin/merge.c:451
-#, c-format
-msgid "No merge message -- not updating HEAD\n"
-msgstr "Нет сообщения слияния — не обновляем HEAD\n"
-
-#: builtin/merge.c:502
-#, c-format
-msgid "'%s' does not point to a commit"
-msgstr "«%s» не указывает на коммит"
-
-#: builtin/merge.c:589
-#, c-format
-msgid "Bad branch.%s.mergeoptions string: %s"
-msgstr "Неправильная строка branch.%s.mergeoptions: %s"
-
-#: builtin/merge.c:712
-msgid "Not handling anything other than two heads merge."
-msgstr "Не обрабатываю ничего, кроме слияния двух указателей на ветки."
-
-#: builtin/merge.c:726
-#, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr "Неизвестный параметр merge-recursive: -X%s"
-
-#: builtin/merge.c:741
-#, c-format
-msgid "unable to write %s"
-msgstr "не удалось записать %s"
-
-#: builtin/merge.c:793
-#, c-format
-msgid "Could not read from '%s'"
-msgstr "Не удалось прочесть из «%s»"
-
-#: builtin/merge.c:802
-#, c-format
-msgid "Not committing merge; use 'git commit' to complete the merge.\n"
-msgstr "Не выполняю коммит слияния; используйте «git commit» для завершения слияния.\n"
-
-#: builtin/merge.c:808
-msgid ""
-"Please enter a commit message to explain why this merge is necessary,\n"
-"especially if it merges an updated upstream into a topic branch.\n"
-"\n"
-msgstr ""
-
-#: builtin/merge.c:813
-msgid "An empty message aborts the commit.\n"
-msgstr ""
-
-#: builtin/merge.c:816
-#, c-format
-msgid ""
-"Lines starting with '%c' will be ignored, and an empty message aborts\n"
-"the commit.\n"
-msgstr ""
-
-#: builtin/merge.c:857
-msgid "Empty commit message."
-msgstr "Пустое сообщение коммита."
-
-#: builtin/merge.c:876
-#, c-format
-msgid "Wonderful.\n"
-msgstr "Прекрасно.\n"
-
-#: builtin/merge.c:936
-#, c-format
-msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
-msgstr "Не удалось провести автоматическое слияние; исправьте конфликты и сделайте коммит результата.\n"
-
-#: builtin/merge.c:975
-msgid "No current branch."
-msgstr "Нет текущей ветки."
-
-#: builtin/merge.c:977
-msgid "No remote for the current branch."
-msgstr "У текущей ветки нет внешнего репозитория."
-
-#: builtin/merge.c:979
-msgid "No default upstream defined for the current branch."
-msgstr "Для текущей ветки не указана вышестоящая ветка по умолчанию."
-
-#: builtin/merge.c:984
-#, c-format
-msgid "No remote-tracking branch for %s from %s"
-msgstr "Не указана внешняя отслеживаемая ветка для %s на %s"
-
-#: builtin/merge.c:1041
-#, c-format
-msgid "Bad value '%s' in environment '%s'"
-msgstr "Плохое значение «%s» в переменной окружения «%s»"
-
-#: builtin/merge.c:1144
-#, c-format
-msgid "not something we can merge in %s: %s"
-msgstr "не является тем, что можно слить в %s: %s"
-
-#: builtin/merge.c:1178
-msgid "not something we can merge"
-msgstr "не является тем, что можно слить"
-
-#: builtin/merge.c:1281
-msgid "--abort expects no arguments"
-msgstr "опция --abort не принимает аргументы"
-
-#: builtin/merge.c:1285
-msgid "There is no merge to abort (MERGE_HEAD missing)."
-msgstr "Нет слияния, которое можно отменить (отсутствует файл MERGE_HEAD)."
-
-#: builtin/merge.c:1297
-msgid "--continue expects no arguments"
-msgstr "опция --continue не принимает аргументы"
-
-#: builtin/merge.c:1301
-msgid "There is no merge in progress (MERGE_HEAD missing)."
-msgstr "Сейчас не происходит слияние (отсутствует файл MERGE_HEAD)."
-
-#: builtin/merge.c:1317
-msgid ""
-"You have not concluded your merge (MERGE_HEAD exists).\n"
-"Please, commit your changes before you merge."
-msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD).\nВыполните коммит ваших изменений, перед слиянием."
-
-#: builtin/merge.c:1324
-msgid ""
-"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
-"Please, commit your changes before you merge."
-msgstr "Вы не завершили копирование коммита (присутствует файл CHERRY_PICK_HEAD).\nПожалуйста, закоммитьте ваши изменения, перед слиянием."
-
-#: builtin/merge.c:1327
-msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
-msgstr "Вы не завершили копирование коммита (присутствует файл CHERRY_PICK_HEAD)."
-
-#: builtin/merge.c:1341
-msgid "You cannot combine --squash with --no-ff."
-msgstr "Нельзя использовать одновременно --squash и --no-ff."
-
-#: builtin/merge.c:1349
-msgid "No commit specified and merge.defaultToUpstream not set."
-msgstr "Коммит не указан и параметр merge.defaultToUpstream не установлен."
-
-#: builtin/merge.c:1366
-msgid "Squash commit into empty head not supported yet"
-msgstr "Уплотнение коммита в пустую ветку еще не поддерживается"
-
-#: builtin/merge.c:1368
-msgid "Non-fast-forward commit does not make sense into an empty head"
-msgstr "Коммит, не являющийся перемоткой вперед, нет смысла делать в пустую ветку."
-
-#: builtin/merge.c:1373
-#, c-format
-msgid "%s - not something we can merge"
-msgstr "%s не является тем, что можно слить"
-
-#: builtin/merge.c:1375
-msgid "Can merge only exactly one commit into empty head"
-msgstr "Можно только один коммит в пустую ветку."
-
-#: builtin/merge.c:1454
-msgid "refusing to merge unrelated histories"
-msgstr "отказ слияния несвязанных историй изменений"
-
-#: builtin/merge.c:1463
-msgid "Already up to date."
-msgstr "Уже обновлено."
-
-#: builtin/merge.c:1473
-#, c-format
-msgid "Updating %s..%s\n"
-msgstr "Обновление %s..%s\n"
-
-#: builtin/merge.c:1515
-#, c-format
-msgid "Trying really trivial in-index merge...\n"
-msgstr "Попытка тривиального слияния в индексе…\n"
-
-#: builtin/merge.c:1522
-#, c-format
-msgid "Nope.\n"
-msgstr "Не вышло.\n"
-
-#: builtin/merge.c:1547
-msgid "Already up to date. Yeeah!"
-msgstr "Уже обновлено. Круто!"
-
-#: builtin/merge.c:1553
-msgid "Not possible to fast-forward, aborting."
-msgstr "Перемотка вперед невозможна, отмена."
-
-#: builtin/merge.c:1576 builtin/merge.c:1655
-#, c-format
-msgid "Rewinding the tree to pristine...\n"
-msgstr "Перемотка дерева к исходному состоянию…\n"
-
-#: builtin/merge.c:1580
-#, c-format
-msgid "Trying merge strategy %s...\n"
-msgstr "Попытка слияния с помощью стратегии %s…\n"
-
-#: builtin/merge.c:1646
-#, c-format
-msgid "No merge strategy handled the merge.\n"
-msgstr "Ни одна стратегия слияния не обработала слияние.\n"
-
-#: builtin/merge.c:1648
-#, c-format
-msgid "Merge with strategy %s failed.\n"
-msgstr "Сбой при слиянии с помощью стратегии %s.\n"
-
-#: builtin/merge.c:1657
-#, c-format
-msgid "Using the %s to prepare resolving by hand.\n"
-msgstr "Использую %s для подготовки ручного разрешения конфликтов.\n"
-
-#: builtin/merge.c:1669
-#, c-format
-msgid "Automatic merge went well; stopped before committing as requested\n"
-msgstr "Автоматическое слияние прошло успешно; как и запрашивали, остановлено перед выполнением коммита\n"
-
 #: builtin/merge-base.c:32
 msgid "git merge-base [-a | --all] <commit> <commit>..."
 msgstr "git merge-base [-a | --all] <коммит> <коммит>…"
@@ -14057,23 +15880,23 @@
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <ссылка> [<коммит>]"
 
-#: builtin/merge-base.c:153
+#: builtin/merge-base.c:143
 msgid "output all common ancestors"
 msgstr "вывести всех общих предков"
 
-#: builtin/merge-base.c:155
+#: builtin/merge-base.c:145
 msgid "find ancestors for a single n-way merge"
 msgstr "вывести предков для одного многоходового слияния"
 
-#: builtin/merge-base.c:157
+#: builtin/merge-base.c:147
 msgid "list revs not reachable from others"
 msgstr "вывести список редаций, которые не достижимы из друг друга"
 
-#: builtin/merge-base.c:159
+#: builtin/merge-base.c:149
 msgid "is the first one ancestor of the other?"
 msgstr "является первым предком второго указанного коммита?"
 
-#: builtin/merge-base.c:161
+#: builtin/merge-base.c:151
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "найти журнале ссылок <ссылка> где именно <коммит> разветвился"
 
@@ -14115,17 +15938,17 @@
 msgid "set labels for file1/orig-file/file2"
 msgstr "установить метки для файл1/ориг-файл/файл2"
 
-#: builtin/merge-recursive.c:46
+#: builtin/merge-recursive.c:47
 #, c-format
 msgid "unknown option %s"
 msgstr "неизвестная опция %s"
 
-#: builtin/merge-recursive.c:52
+#: builtin/merge-recursive.c:53
 #, c-format
 msgid "could not parse object '%s'"
 msgstr "не удалось разобрать объект «%s»"
 
-#: builtin/merge-recursive.c:56
+#: builtin/merge-recursive.c:57
 #, c-format
 msgid "cannot handle more than %d base. Ignoring %s."
 msgid_plural "cannot handle more than %d bases. Ignoring %s."
@@ -14134,20 +15957,391 @@
 msgstr[2] "невозможно обработать больше %d баз. Игнорирую %s."
 msgstr[3] "невозможно обработать больше %d базы. Игнорирую %s."
 
-#: builtin/merge-recursive.c:64
+#: builtin/merge-recursive.c:65
 msgid "not handling anything other than two heads merge."
 msgstr "не обрабатываю ничего, кроме слияния двух указателей на ветки."
 
-#: builtin/merge-recursive.c:70 builtin/merge-recursive.c:72
+#: builtin/merge-recursive.c:74 builtin/merge-recursive.c:76
 #, c-format
 msgid "could not resolve ref '%s'"
 msgstr "не удалось распознать ссылку «%s»"
 
-#: builtin/merge-recursive.c:78
+#: builtin/merge-recursive.c:82
 #, c-format
 msgid "Merging %s with %s\n"
 msgstr "Слияние %s и %s\n"
 
+#: builtin/merge.c:57
+msgid "git merge [<options>] [<commit>...]"
+msgstr "git merge [<опции>] [<коммит>…]"
+
+#: builtin/merge.c:58
+msgid "git merge --abort"
+msgstr "git merge --abort"
+
+#: builtin/merge.c:59
+msgid "git merge --continue"
+msgstr "git merge --continue"
+
+#: builtin/merge.c:122
+msgid "switch `m' requires a value"
+msgstr "при указании параметра «m» требуется указать значение"
+
+#: builtin/merge.c:145
+#, c-format
+msgid "option `%s' requires a value"
+msgstr ""
+
+#: builtin/merge.c:198
+#, c-format
+msgid "Could not find merge strategy '%s'.\n"
+msgstr "Не удалось найти стратегию слияния «%s».\n"
+
+#: builtin/merge.c:199
+#, c-format
+msgid "Available strategies are:"
+msgstr "Доступные стратегии:"
+
+#: builtin/merge.c:204
+#, c-format
+msgid "Available custom strategies are:"
+msgstr "Доступные пользовательские стратегии:"
+
+#: builtin/merge.c:255 builtin/pull.c:133
+msgid "do not show a diffstat at the end of the merge"
+msgstr "не выводить статистику изменений после окончания слияния"
+
+#: builtin/merge.c:258 builtin/pull.c:136
+msgid "show a diffstat at the end of the merge"
+msgstr "вывести статистику изменений после окончания слияния"
+
+#: builtin/merge.c:259 builtin/pull.c:139
+msgid "(synonym to --stat)"
+msgstr "(синоним для --stat)"
+
+#: builtin/merge.c:261 builtin/pull.c:142
+msgid "add (at most <n>) entries from shortlog to merge commit message"
+msgstr "добавить (максимум <n>) записей из короткого журнала в сообщение коммита у слияния"
+
+#: builtin/merge.c:264 builtin/pull.c:148
+msgid "create a single commit instead of doing a merge"
+msgstr "создать один коммит, вместо выполнения слияния"
+
+#: builtin/merge.c:266 builtin/pull.c:151
+msgid "perform a commit if the merge succeeds (default)"
+msgstr "сделать коммит, если слияние прошло успешно (по умолчанию)"
+
+#: builtin/merge.c:268 builtin/pull.c:154
+msgid "edit message before committing"
+msgstr "отредактировать сообщение перед выполнением коммита"
+
+#: builtin/merge.c:270
+msgid "allow fast-forward (default)"
+msgstr "разрешить перемотку вперед (по умолчанию)"
+
+#: builtin/merge.c:272 builtin/pull.c:161
+msgid "abort if fast-forward is not possible"
+msgstr "отменить выполнение слияния, если перемотка вперед невозможна"
+
+#: builtin/merge.c:276 builtin/pull.c:164
+msgid "verify that the named commit has a valid GPG signature"
+msgstr "проверить, что указанный коммит имеет верную электронную подпись GPG"
+
+#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+msgid "strategy"
+msgstr "стратегия"
+
+#: builtin/merge.c:278 builtin/pull.c:169
+msgid "merge strategy to use"
+msgstr "используемая стратегия слияния"
+
+#: builtin/merge.c:279 builtin/pull.c:172
+msgid "option=value"
+msgstr "опция=значение"
+
+#: builtin/merge.c:280 builtin/pull.c:173
+msgid "option for selected merge strategy"
+msgstr "опции для выбранной стратегии слияния"
+
+#: builtin/merge.c:282
+msgid "merge commit message (for a non-fast-forward merge)"
+msgstr "сообщение коммита для слияния (для слияния без перемотки вперед)"
+
+#: builtin/merge.c:289
+msgid "abort the current in-progress merge"
+msgstr "отменить выполнение происходящего слияния"
+
+#: builtin/merge.c:291
+msgid "--abort but leave index and working tree alone"
+msgstr ""
+
+#: builtin/merge.c:293
+msgid "continue the current in-progress merge"
+msgstr "продолжить выполнение происходящего слияния"
+
+#: builtin/merge.c:295 builtin/pull.c:180
+msgid "allow merging unrelated histories"
+msgstr "разрешить слияние несвязанных историй изменений"
+
+#: builtin/merge.c:302
+msgid "bypass pre-merge-commit and commit-msg hooks"
+msgstr ""
+
+#: builtin/merge.c:319
+msgid "could not run stash."
+msgstr "не удалось выполнить stash."
+
+#: builtin/merge.c:324
+msgid "stash failed"
+msgstr "сбой при выполнении stash"
+
+#: builtin/merge.c:329
+#, c-format
+msgid "not a valid object: %s"
+msgstr "неправильный объект: %s"
+
+#: builtin/merge.c:351 builtin/merge.c:368
+msgid "read-tree failed"
+msgstr "сбой при выполнении read-tree"
+
+#: builtin/merge.c:398
+msgid " (nothing to squash)"
+msgstr " (нечего уплотнять)"
+
+#: builtin/merge.c:409
+#, c-format
+msgid "Squash commit -- not updating HEAD\n"
+msgstr "Уплотнение коммита — не обновляя HEAD\n"
+
+#: builtin/merge.c:459
+#, c-format
+msgid "No merge message -- not updating HEAD\n"
+msgstr "Нет сообщения слияния — не обновляем HEAD\n"
+
+#: builtin/merge.c:510
+#, c-format
+msgid "'%s' does not point to a commit"
+msgstr "«%s» не указывает на коммит"
+
+#: builtin/merge.c:597
+#, c-format
+msgid "Bad branch.%s.mergeoptions string: %s"
+msgstr "Неправильная строка branch.%s.mergeoptions: %s"
+
+#: builtin/merge.c:723
+msgid "Not handling anything other than two heads merge."
+msgstr "Не обрабатываю ничего, кроме слияния двух указателей на ветки."
+
+#: builtin/merge.c:736
+#, c-format
+msgid "Unknown option for merge-recursive: -X%s"
+msgstr "Неизвестный параметр merge-recursive: -X%s"
+
+#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#, c-format
+msgid "unable to write %s"
+msgstr "не удалось записать %s"
+
+#: builtin/merge.c:807
+#, c-format
+msgid "Could not read from '%s'"
+msgstr "Не удалось прочесть из «%s»"
+
+#: builtin/merge.c:816
+#, c-format
+msgid "Not committing merge; use 'git commit' to complete the merge.\n"
+msgstr "Не выполняю коммит слияния; используйте «git commit» для завершения слияния.\n"
+
+#: builtin/merge.c:822
+msgid ""
+"Please enter a commit message to explain why this merge is necessary,\n"
+"especially if it merges an updated upstream into a topic branch.\n"
+"\n"
+msgstr ""
+
+#: builtin/merge.c:827
+msgid "An empty message aborts the commit.\n"
+msgstr ""
+
+#: builtin/merge.c:830
+#, c-format
+msgid ""
+"Lines starting with '%c' will be ignored, and an empty message aborts\n"
+"the commit.\n"
+msgstr ""
+
+#: builtin/merge.c:883
+msgid "Empty commit message."
+msgstr "Пустое сообщение коммита."
+
+#: builtin/merge.c:898
+#, c-format
+msgid "Wonderful.\n"
+msgstr "Прекрасно.\n"
+
+#: builtin/merge.c:959
+#, c-format
+msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
+msgstr "Не удалось провести автоматическое слияние; исправьте конфликты и сделайте коммит результата.\n"
+
+#: builtin/merge.c:998
+msgid "No current branch."
+msgstr "Нет текущей ветки."
+
+#: builtin/merge.c:1000
+msgid "No remote for the current branch."
+msgstr "У текущей ветки нет внешнего репозитория."
+
+#: builtin/merge.c:1002
+msgid "No default upstream defined for the current branch."
+msgstr "Для текущей ветки не указана вышестоящая ветка по умолчанию."
+
+#: builtin/merge.c:1007
+#, c-format
+msgid "No remote-tracking branch for %s from %s"
+msgstr "Не указана внешняя отслеживаемая ветка для %s на %s"
+
+#: builtin/merge.c:1064
+#, c-format
+msgid "Bad value '%s' in environment '%s'"
+msgstr "Плохое значение «%s» в переменной окружения «%s»"
+
+#: builtin/merge.c:1167
+#, c-format
+msgid "not something we can merge in %s: %s"
+msgstr "не является тем, что можно слить в %s: %s"
+
+#: builtin/merge.c:1201
+msgid "not something we can merge"
+msgstr "не является тем, что можно слить"
+
+#: builtin/merge.c:1311
+msgid "--abort expects no arguments"
+msgstr "опция --abort не принимает аргументы"
+
+#: builtin/merge.c:1315
+msgid "There is no merge to abort (MERGE_HEAD missing)."
+msgstr "Нет слияния, которое можно отменить (отсутствует файл MERGE_HEAD)."
+
+#: builtin/merge.c:1333
+msgid "--quit expects no arguments"
+msgstr ""
+
+#: builtin/merge.c:1346
+msgid "--continue expects no arguments"
+msgstr "опция --continue не принимает аргументы"
+
+#: builtin/merge.c:1350
+msgid "There is no merge in progress (MERGE_HEAD missing)."
+msgstr "Сейчас не происходит слияние (отсутствует файл MERGE_HEAD)."
+
+#: builtin/merge.c:1366
+msgid ""
+"You have not concluded your merge (MERGE_HEAD exists).\n"
+"Please, commit your changes before you merge."
+msgstr "Вы не завершили слияние (присутствует файл MERGE_HEAD).\nВыполните коммит ваших изменений, перед слиянием."
+
+#: builtin/merge.c:1373
+msgid ""
+"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
+"Please, commit your changes before you merge."
+msgstr "Вы не завершили копирование коммита (присутствует файл CHERRY_PICK_HEAD).\nПожалуйста, закоммитьте ваши изменения, перед слиянием."
+
+#: builtin/merge.c:1376
+msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
+msgstr "Вы не завершили копирование коммита (присутствует файл CHERRY_PICK_HEAD)."
+
+#: builtin/merge.c:1390
+msgid "You cannot combine --squash with --no-ff."
+msgstr "Нельзя использовать одновременно --squash и --no-ff."
+
+#: builtin/merge.c:1392
+msgid "You cannot combine --squash with --commit."
+msgstr ""
+
+#: builtin/merge.c:1408
+msgid "No commit specified and merge.defaultToUpstream not set."
+msgstr "Коммит не указан и параметр merge.defaultToUpstream не установлен."
+
+#: builtin/merge.c:1425
+msgid "Squash commit into empty head not supported yet"
+msgstr "Уплотнение коммита в пустую ветку еще не поддерживается"
+
+#: builtin/merge.c:1427
+msgid "Non-fast-forward commit does not make sense into an empty head"
+msgstr "Коммит, не являющийся перемоткой вперед, нет смысла делать в пустую ветку."
+
+#: builtin/merge.c:1432
+#, c-format
+msgid "%s - not something we can merge"
+msgstr "%s не является тем, что можно слить"
+
+#: builtin/merge.c:1434
+msgid "Can merge only exactly one commit into empty head"
+msgstr "Можно только один коммит в пустую ветку."
+
+#: builtin/merge.c:1515
+msgid "refusing to merge unrelated histories"
+msgstr "отказ слияния несвязанных историй изменений"
+
+#: builtin/merge.c:1524
+msgid "Already up to date."
+msgstr "Уже обновлено."
+
+#: builtin/merge.c:1534
+#, c-format
+msgid "Updating %s..%s\n"
+msgstr "Обновление %s..%s\n"
+
+#: builtin/merge.c:1580
+#, c-format
+msgid "Trying really trivial in-index merge...\n"
+msgstr "Попытка тривиального слияния в индексе…\n"
+
+#: builtin/merge.c:1587
+#, c-format
+msgid "Nope.\n"
+msgstr "Не вышло.\n"
+
+#: builtin/merge.c:1612
+msgid "Already up to date. Yeeah!"
+msgstr "Уже обновлено. Круто!"
+
+#: builtin/merge.c:1618
+msgid "Not possible to fast-forward, aborting."
+msgstr "Перемотка вперед невозможна, отмена."
+
+#: builtin/merge.c:1646 builtin/merge.c:1711
+#, c-format
+msgid "Rewinding the tree to pristine...\n"
+msgstr "Перемотка дерева к исходному состоянию…\n"
+
+#: builtin/merge.c:1650
+#, c-format
+msgid "Trying merge strategy %s...\n"
+msgstr "Попытка слияния с помощью стратегии %s…\n"
+
+#: builtin/merge.c:1702
+#, c-format
+msgid "No merge strategy handled the merge.\n"
+msgstr "Ни одна стратегия слияния не обработала слияние.\n"
+
+#: builtin/merge.c:1704
+#, c-format
+msgid "Merge with strategy %s failed.\n"
+msgstr "Сбой при слиянии с помощью стратегии %s.\n"
+
+#: builtin/merge.c:1713
+#, c-format
+msgid "Using the %s to prepare resolving by hand.\n"
+msgstr "Использую %s для подготовки ручного разрешения конфликтов.\n"
+
+#: builtin/merge.c:1727
+#, c-format
+msgid "Automatic merge went well; stopped before committing as requested\n"
+msgstr "Автоматическое слияние прошло успешно; как и запрашивали, остановлено перед выполнением коммита\n"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -14165,20 +16359,32 @@
 msgstr "допустить создание более одного дерева"
 
 #: builtin/multi-pack-index.c:9
-msgid "git multi-pack-index [--object-dir=<dir>] (write|verify)"
+msgid ""
+"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
+"size=<size>)"
 msgstr ""
 
-#: builtin/multi-pack-index.c:22
+#: builtin/multi-pack-index.c:26
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 
-#: builtin/multi-pack-index.c:40 builtin/prune-packed.c:67
+#: builtin/multi-pack-index.c:29
+msgid ""
+"during repack, collect pack-files of smaller size into a batch that is "
+"larger than this size"
+msgstr ""
+
+#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
 msgid "too many arguments"
 msgstr ""
 
-#: builtin/multi-pack-index.c:51
+#: builtin/multi-pack-index.c:60
+msgid "--batch-size option is only for 'repack' subcommand"
+msgstr ""
+
+#: builtin/multi-pack-index.c:69
 #, c-format
-msgid "unrecognized verb: %s"
+msgid "unrecognized subcommand: %s"
 msgstr ""
 
 #: builtin/mv.c:18
@@ -14207,113 +16413,117 @@
 msgid "skip move/rename errors"
 msgstr "пропускать ошибки при перемещении/переименовании"
 
-#: builtin/mv.c:169
+#: builtin/mv.c:170
 #, c-format
 msgid "destination '%s' is not a directory"
 msgstr "целевой путь «%s» не является каталогом"
 
-#: builtin/mv.c:180
+#: builtin/mv.c:181
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
 msgstr "Проверка переименования из «%s» в «%s»\n"
 
-#: builtin/mv.c:184
+#: builtin/mv.c:185
 msgid "bad source"
 msgstr "плохой источник"
 
-#: builtin/mv.c:187
+#: builtin/mv.c:188
 msgid "can not move directory into itself"
 msgstr "нельзя переместить каталог в самого себя"
 
-#: builtin/mv.c:190
+#: builtin/mv.c:191
 msgid "cannot move directory over file"
 msgstr "нельзя переместить каталог в файл"
 
-#: builtin/mv.c:199
+#: builtin/mv.c:200
 msgid "source directory is empty"
 msgstr "исходный каталог пуст"
 
-#: builtin/mv.c:224
+#: builtin/mv.c:225
 msgid "not under version control"
 msgstr "не под версионным контролем"
 
 #: builtin/mv.c:227
+msgid "conflicted"
+msgstr ""
+
+#: builtin/mv.c:230
 msgid "destination exists"
 msgstr "целевой путь уже существует"
 
-#: builtin/mv.c:235
+#: builtin/mv.c:238
 #, c-format
 msgid "overwriting '%s'"
 msgstr "перезапись «%s»"
 
-#: builtin/mv.c:238
+#: builtin/mv.c:241
 msgid "Cannot overwrite"
 msgstr "Не удалось перезаписать"
 
-#: builtin/mv.c:241
+#: builtin/mv.c:244
 msgid "multiple sources for the same target"
 msgstr "несколько источников для одного целевого пути"
 
-#: builtin/mv.c:243
+#: builtin/mv.c:246
 msgid "destination directory does not exist"
 msgstr "целевой каталог не существует"
 
-#: builtin/mv.c:250
+#: builtin/mv.c:253
 #, c-format
 msgid "%s, source=%s, destination=%s"
 msgstr "%s, откуда=%s, куда=%s"
 
-#: builtin/mv.c:271
+#: builtin/mv.c:274
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Переименование %s в %s\n"
 
-#: builtin/mv.c:277 builtin/remote.c:717 builtin/repack.c:516
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "сбой при переименовании «%s»"
 
-#: builtin/name-rev.c:355
+#: builtin/name-rev.c:465
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<опции>] <коммит>…"
 
-#: builtin/name-rev.c:356
+#: builtin/name-rev.c:466
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<опции>] --all"
 
-#: builtin/name-rev.c:357
+#: builtin/name-rev.c:467
 msgid "git name-rev [<options>] --stdin"
 msgstr "git name-rev [<опции>] --stdin"
 
-#: builtin/name-rev.c:415
-msgid "print only names (no SHA-1)"
-msgstr "выводить только имена (без SHA-1)"
+#: builtin/name-rev.c:524
+msgid "print only ref-based names (no object names)"
+msgstr ""
 
-#: builtin/name-rev.c:416
+#: builtin/name-rev.c:525
 msgid "only use tags to name the commits"
 msgstr "использовать только метки для именования коммитов"
 
-#: builtin/name-rev.c:418
+#: builtin/name-rev.c:527
 msgid "only use refs matching <pattern>"
-msgstr "использовать только ссылки, соответствующие <шаблону> "
+msgstr "использовать только ссылки, соответствующие <шаблону>"
 
-#: builtin/name-rev.c:420
+#: builtin/name-rev.c:529
 msgid "ignore refs matching <pattern>"
 msgstr "игнорировать ссылки, соответствующие <шаблону>"
 
-#: builtin/name-rev.c:422
+#: builtin/name-rev.c:531
 msgid "list all commits reachable from all refs"
 msgstr "вывести список всех коммитов, достижимых со всех ссылок"
 
-#: builtin/name-rev.c:423
+#: builtin/name-rev.c:532
 msgid "read from stdin"
 msgstr "прочитать из стандартного ввода"
 
-#: builtin/name-rev.c:424
+#: builtin/name-rev.c:533
 msgid "allow to print `undefined` names (default)"
 msgstr "разрешить вывод «undefined», если не найдено (по умолчанию)"
 
-#: builtin/name-rev.c:430
+#: builtin/name-rev.c:539
 msgid "dereference tags in the input (internal use)"
 msgstr "разыменовывать введенные метки (для внутреннего использования)"
 
@@ -14453,7 +16663,7 @@
 msgid "the note contents have been left in %s"
 msgstr "содержимое заметки осталось в %s"
 
-#: builtin/notes.c:242 builtin/tag.c:522
+#: builtin/notes.c:242 builtin/tag.c:533
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "не удалось открыть или прочитать «%s»"
@@ -14673,7 +16883,7 @@
 "--abort'.\n"
 msgstr "Не удалось автоматически слить заметки. Исправьте конфликты в %s и закоммитьте результат с помощью «git notes merge --commit», или прервите процесс слияния с помощью «git notes merge --abort».\n"
 
-#: builtin/notes.c:897 builtin/tag.c:535
+#: builtin/notes.c:897 builtin/tag.c:546
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Не удалось разрешить «%s» как ссылку."
@@ -14691,7 +16901,7 @@
 msgid "read object names from the standard input"
 msgstr "прочитать имена объектов из стандартного ввода"
 
-#: builtin/notes.c:954 builtin/prune.c:130 builtin/worktree.c:165
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
 msgid "do not remove, show only"
 msgstr "не удалять, только показать список"
 
@@ -14707,387 +16917,375 @@
 msgid "use notes from <notes-ref>"
 msgstr "использовать заметку из <ссылка-на-заметку>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1611
+#: builtin/notes.c:1034 builtin/stash.c:1604
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "неизвестная подкоманда: %s"
 
-#: builtin/pack-objects.c:52
+#: builtin/pack-objects.c:54
 msgid ""
 "git pack-objects --stdout [<options>...] [< <ref-list> | < <object-list>]"
 msgstr "git pack-objects --stdout [<опции>…] [< <список-ссылок> | < <список-объектов>]"
 
-#: builtin/pack-objects.c:53
+#: builtin/pack-objects.c:55
 msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr "git pack-objects [<опции>…] <имя-базы> [< <список-ссылок> | < <список-объектов>]"
 
-#: builtin/pack-objects.c:424
+#: builtin/pack-objects.c:443
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:435
+#: builtin/pack-objects.c:454
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:566
+#: builtin/pack-objects.c:585
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr ""
 
-#: builtin/pack-objects.c:777
+#: builtin/pack-objects.c:796
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:790
-#, c-format
-msgid "packfile is invalid: %s"
-msgstr ""
-
-#: builtin/pack-objects.c:794
-#, c-format
-msgid "unable to open packfile for reuse: %s"
-msgstr ""
-
-#: builtin/pack-objects.c:798
-msgid "unable to seek in reused packfile"
-msgstr ""
-
-#: builtin/pack-objects.c:809
-msgid "unable to read from reused packfile"
-msgstr ""
-
-#: builtin/pack-objects.c:837
+#: builtin/pack-objects.c:1004
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "отключение записи битовых карт, так как карты были разбиты на части из-за pack.packSizeLimit"
 
-#: builtin/pack-objects.c:850
+#: builtin/pack-objects.c:1017
 msgid "Writing objects"
 msgstr "Запись объектов"
 
-#: builtin/pack-objects.c:912 builtin/update-index.c:89
+#: builtin/pack-objects.c:1078 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "не удалось выполнить stat %s"
 
-#: builtin/pack-objects.c:965
+#: builtin/pack-objects.c:1131
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1161
+#: builtin/pack-objects.c:1348
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "отключение записи битовых карт, так как некоторые объекты не были упакованы"
 
-#: builtin/pack-objects.c:1589
+#: builtin/pack-objects.c:1796
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1598
+#: builtin/pack-objects.c:1805
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1867
+#: builtin/pack-objects.c:2086
 msgid "Counting objects"
 msgstr "Подсчет объектов"
 
-#: builtin/pack-objects.c:1997
-#, c-format
-msgid "unable to get size of %s"
-msgstr "не удалось получить размер %s"
-
-#: builtin/pack-objects.c:2012
+#: builtin/pack-objects.c:2231
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "не удалось разобрать заголовок объекта %s"
 
-#: builtin/pack-objects.c:2082 builtin/pack-objects.c:2098
-#: builtin/pack-objects.c:2108
+#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
+#: builtin/pack-objects.c:2327
 #, c-format
 msgid "object %s cannot be read"
 msgstr ""
 
-#: builtin/pack-objects.c:2085 builtin/pack-objects.c:2112
+#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 
-#: builtin/pack-objects.c:2122
+#: builtin/pack-objects.c:2341
 msgid "suboptimal pack - out of memory"
 msgstr ""
 
-#: builtin/pack-objects.c:2448
+#: builtin/pack-objects.c:2656
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "При сжатии изменений используется до %d потоков"
 
-#: builtin/pack-objects.c:2580
+#: builtin/pack-objects.c:2795
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2667
+#: builtin/pack-objects.c:2883
 msgid "Compressing objects"
 msgstr "Сжатие объектов"
 
-#: builtin/pack-objects.c:2673
+#: builtin/pack-objects.c:2889
 msgid "inconsistency with delta count"
 msgstr ""
 
-#: builtin/pack-objects.c:2754
+#: builtin/pack-objects.c:2961
+#, c-format
+msgid ""
+"value of uploadpack.blobpackfileuri must be of the form '<object-hash> "
+"<pack-hash> <uri>' (got '%s')"
+msgstr ""
+
+#: builtin/pack-objects.c:2964
+#, c-format
+msgid ""
+"object already configured in another uploadpack.blobpackfileuri (got '%s')"
+msgstr ""
+
+#: builtin/pack-objects.c:2993
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2760
+#: builtin/pack-objects.c:2999
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2858
+#: builtin/pack-objects.c:3097
 msgid "invalid value for --missing"
 msgstr "недопустимое значение для --missing"
 
-#: builtin/pack-objects.c:2917 builtin/pack-objects.c:3025
+#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
 msgid "cannot open pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:2948
+#: builtin/pack-objects.c:3187
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr ""
 
-#: builtin/pack-objects.c:3033
+#: builtin/pack-objects.c:3272
 msgid "unable to force loose object"
 msgstr ""
 
-#: builtin/pack-objects.c:3125
+#: builtin/pack-objects.c:3365
 #, c-format
 msgid "not a rev '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3128
+#: builtin/pack-objects.c:3368
 #, c-format
 msgid "bad revision '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3153
+#: builtin/pack-objects.c:3393
 msgid "unable to add recent objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3206
+#: builtin/pack-objects.c:3446
 #, c-format
 msgid "unsupported index version %s"
 msgstr "неподдерживаемая версия индекса %s"
 
-#: builtin/pack-objects.c:3210
+#: builtin/pack-objects.c:3450
 #, c-format
 msgid "bad index version '%s'"
 msgstr "плохая версия индекса «%s»"
 
-#: builtin/pack-objects.c:3240
-msgid "do not show progress meter"
-msgstr "не выводить прогресс выполнения"
-
-#: builtin/pack-objects.c:3242
-msgid "show progress meter"
-msgstr "показать прогресс выполнения"
-
-#: builtin/pack-objects.c:3244
-msgid "show progress meter during object writing phase"
-msgstr "показать прогресс выполнения во время записи объектов"
-
-#: builtin/pack-objects.c:3247
-msgid "similar to --all-progress when progress meter is shown"
-msgstr "похоже на --all-progress при включенном прогрессе выполнения"
-
-#: builtin/pack-objects.c:3248
+#: builtin/pack-objects.c:3488
 msgid "<version>[,<offset>]"
 msgstr ""
 
-#: builtin/pack-objects.c:3249
+#: builtin/pack-objects.c:3489
 msgid "write the pack index file in the specified idx format version"
 msgstr "записать файл индекса пакета в указанной версии формата"
 
-#: builtin/pack-objects.c:3252
+#: builtin/pack-objects.c:3492
 msgid "maximum size of each output pack file"
 msgstr "максимальный размер каждого выходного файла пакета"
 
-#: builtin/pack-objects.c:3254
+#: builtin/pack-objects.c:3494
 msgid "ignore borrowed objects from alternate object store"
 msgstr "игнорировать чужие объекты, взятые из альтернативного хранилища объектов"
 
-#: builtin/pack-objects.c:3256
+#: builtin/pack-objects.c:3496
 msgid "ignore packed objects"
 msgstr "игнорировать упакованные объекты"
 
-#: builtin/pack-objects.c:3258
+#: builtin/pack-objects.c:3498
 msgid "limit pack window by objects"
 msgstr "ограничить окно пакета по количеству объектов"
 
-#: builtin/pack-objects.c:3260
+#: builtin/pack-objects.c:3500
 msgid "limit pack window by memory in addition to object limit"
 msgstr "дополнительно к количеству объектов ограничить окно пакета по памяти"
 
-#: builtin/pack-objects.c:3262
+#: builtin/pack-objects.c:3502
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "максимальная разрешенная длина цепочки дельт в результирующем пакете"
 
-#: builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3504
 msgid "reuse existing deltas"
 msgstr "использовать повторно существующие дельты"
 
-#: builtin/pack-objects.c:3266
+#: builtin/pack-objects.c:3506
 msgid "reuse existing objects"
 msgstr "использовать повторно существующие объекты"
 
-#: builtin/pack-objects.c:3268
+#: builtin/pack-objects.c:3508
 msgid "use OFS_DELTA objects"
 msgstr "использовать объекты OFS_DELTA"
 
-#: builtin/pack-objects.c:3270
+#: builtin/pack-objects.c:3510
 msgid "use threads when searching for best delta matches"
 msgstr "использовать многопоточность при поиске лучших совпадений дельт"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3512
 msgid "do not create an empty pack output"
 msgstr "не создавать пустые выходные пакеты"
 
-#: builtin/pack-objects.c:3274
+#: builtin/pack-objects.c:3514
 msgid "read revision arguments from standard input"
 msgstr "прочитать аргументы редакций из стандартного ввода"
 
-#: builtin/pack-objects.c:3276
+#: builtin/pack-objects.c:3516
 msgid "limit the objects to those that are not yet packed"
 msgstr "ограничиться объектами, которые еще не упакованы"
 
-#: builtin/pack-objects.c:3279
+#: builtin/pack-objects.c:3519
 msgid "include objects reachable from any reference"
 msgstr "включить объекты, которые достижимы по любой из ссылок"
 
-#: builtin/pack-objects.c:3282
+#: builtin/pack-objects.c:3522
 msgid "include objects referred by reflog entries"
 msgstr "включить объекты, на которые ссылаются записи журнала ссылок"
 
-#: builtin/pack-objects.c:3285
+#: builtin/pack-objects.c:3525
 msgid "include objects referred to by the index"
 msgstr "включить объекты, на которые ссылается индекс"
 
-#: builtin/pack-objects.c:3288
+#: builtin/pack-objects.c:3528
 msgid "output pack to stdout"
 msgstr "вывести пакет на  стандартный вывод"
 
-#: builtin/pack-objects.c:3290
+#: builtin/pack-objects.c:3530
 msgid "include tag objects that refer to objects to be packed"
 msgstr "включить объекты меток, которые ссылаются на упаковываемые объекты"
 
-#: builtin/pack-objects.c:3292
+#: builtin/pack-objects.c:3532
 msgid "keep unreachable objects"
 msgstr "сохранять ссылки на недоступные объекты"
 
-#: builtin/pack-objects.c:3294
+#: builtin/pack-objects.c:3534
 msgid "pack loose unreachable objects"
 msgstr "паковать недостижимые объекты"
 
-#: builtin/pack-objects.c:3296
+#: builtin/pack-objects.c:3536
 msgid "unpack unreachable objects newer than <time>"
 msgstr "распаковать недоступные объекты, которые новее, чем <время>"
 
-#: builtin/pack-objects.c:3299
+#: builtin/pack-objects.c:3539
 msgid "use the sparse reachability algorithm"
 msgstr ""
 
-#: builtin/pack-objects.c:3301
+#: builtin/pack-objects.c:3541
 msgid "create thin packs"
 msgstr "создавать тонкие пакеты"
 
-#: builtin/pack-objects.c:3303
+#: builtin/pack-objects.c:3543
 msgid "create packs suitable for shallow fetches"
 msgstr "создавать пакеты, подходящие для частичных извлечений"
 
-#: builtin/pack-objects.c:3305
+#: builtin/pack-objects.c:3545
 msgid "ignore packs that have companion .keep file"
 msgstr "игнорировать пакеты, рядом с которыми лежит .keep файл"
 
-#: builtin/pack-objects.c:3307
+#: builtin/pack-objects.c:3547
 msgid "ignore this pack"
 msgstr "игнорировать этот пакет"
 
-#: builtin/pack-objects.c:3309
+#: builtin/pack-objects.c:3549
 msgid "pack compression level"
 msgstr "уровень сжатия пакета"
 
-#: builtin/pack-objects.c:3311
+#: builtin/pack-objects.c:3551
 msgid "do not hide commits by grafts"
 msgstr "не скрывать коммиты сращениями"
 
-#: builtin/pack-objects.c:3313
+#: builtin/pack-objects.c:3553
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "по возможности использовать индекс в битовых картах, для ускорения подсчета объектов"
 
-#: builtin/pack-objects.c:3315
+#: builtin/pack-objects.c:3555
 msgid "write a bitmap index together with the pack index"
 msgstr "запись индекса в битовых картах вместе с индексом пакета"
 
-#: builtin/pack-objects.c:3318
+#: builtin/pack-objects.c:3559
+msgid "write a bitmap index if possible"
+msgstr ""
+
+#: builtin/pack-objects.c:3563
 msgid "handling for missing objects"
 msgstr "обработка отсутствующих объектов"
 
-#: builtin/pack-objects.c:3321
+#: builtin/pack-objects.c:3566
 msgid "do not pack objects in promisor packfiles"
 msgstr "не упаковывать объекты в promisor файлы пакетов"
 
-#: builtin/pack-objects.c:3323
+#: builtin/pack-objects.c:3568
 msgid "respect islands during delta compression"
 msgstr ""
 
-#: builtin/pack-objects.c:3348
+#: builtin/pack-objects.c:3570
+msgid "protocol"
+msgstr ""
+
+#: builtin/pack-objects.c:3571
+msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
+msgstr ""
+
+#: builtin/pack-objects.c:3600
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "глубина цепочки изменений %d слишком большая, использую принудительно %d"
 
-#: builtin/pack-objects.c:3353
+#: builtin/pack-objects.c:3605
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "лисит pack.deltaCacheLimit слишком высокий, использую принудительно %d"
 
-#: builtin/pack-objects.c:3407
+#: builtin/pack-objects.c:3659
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 
-#: builtin/pack-objects.c:3409
+#: builtin/pack-objects.c:3661
 msgid "minimum pack size limit is 1 MiB"
 msgstr ""
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3666
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3417
+#: builtin/pack-objects.c:3669
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr ""
 
-#: builtin/pack-objects.c:3423
+#: builtin/pack-objects.c:3675
 msgid "cannot use --filter without --stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3484
+#: builtin/pack-objects.c:3735
 msgid "Enumerating objects"
 msgstr "Перечисление объектов"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3766
 #, c-format
-msgid "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>)"
-msgstr "Всего %<PRIu32> (изменения %<PRIu32>), повторно использовано %<PRIu32> (изменения %<PRIu32>)"
+msgid ""
+"Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
+"reused %<PRIu32>"
+msgstr "Всего %<PRIu32> (изменений %<PRIu32>), повторно использовано %<PRIu32> (изменений %<PRIu32>), повторно использовано пакетов %<PRIu32>"
 
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
@@ -15101,98 +17299,110 @@
 msgid "prune loose refs (default)"
 msgstr "почистить слабые ссылки (по умолчанию)"
 
-#: builtin/prune-packed.c:9
+#: builtin/prune-packed.c:6
 msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
 msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
 
-#: builtin/prune-packed.c:42
-msgid "Removing duplicate objects"
-msgstr "Удаление дублирующихся объектов"
-
-#: builtin/prune.c:12
+#: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <время>] [--] [<редакция>…]"
 
-#: builtin/prune.c:131
+#: builtin/prune.c:133
 msgid "report pruned objects"
 msgstr "вывести список удаленных объектов"
 
-#: builtin/prune.c:134
+#: builtin/prune.c:136
 msgid "expire objects older than <time>"
 msgstr "удалить объекты старее чем <дата-окончания>"
 
-#: builtin/prune.c:136
+#: builtin/prune.c:138
 msgid "limit traversal to objects outside promisor packfiles"
 msgstr "ограничить обход объектами вне promisor файлов пакетов"
 
-#: builtin/prune.c:150
+#: builtin/prune.c:152
 msgid "cannot prune in a precious-objects repo"
 msgstr "нельзя почистить неиспользуемые объекты в precious-objects репозитории"
 
-#: builtin/pull.c:66 builtin/pull.c:68
+#: builtin/pull.c:45 builtin/pull.c:47
 #, c-format
 msgid "Invalid value for %s: %s"
 msgstr "Неправильное значение %s: %s"
 
-#: builtin/pull.c:88
+#: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<опции>] [<репозиторий> [<спецификатор-ссылки>…]]"
 
-#: builtin/pull.c:140
+#: builtin/pull.c:123
 msgid "control for recursive fetching of submodules"
 msgstr "управление рекурсивным извлечением подмодулей"
 
-#: builtin/pull.c:144
+#: builtin/pull.c:127
 msgid "Options related to merging"
 msgstr "Опции, связанные со слиянием"
 
-#: builtin/pull.c:147
+#: builtin/pull.c:130
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "забрать изменения с помощью перемещения, а не слияния"
 
-#: builtin/pull.c:175 builtin/rebase.c:447 builtin/revert.c:125
+#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "разрешить перемотку вперед"
 
-#: builtin/pull.c:184
-msgid "automatically stash/stash pop before and after rebase"
-msgstr "автоматически выполнять stash/stash pop до и после перемещения"
+#: builtin/pull.c:167 parse-options.h:339
+msgid "automatically stash/stash pop before and after"
+msgstr ""
 
-#: builtin/pull.c:200
+#: builtin/pull.c:183
 msgid "Options related to fetching"
 msgstr "Опции, связанные с извлечением изменений"
 
-#: builtin/pull.c:210
+#: builtin/pull.c:193
 msgid "force overwrite of local branch"
 msgstr "принудительная перезапись локальной ветки"
 
-#: builtin/pull.c:218
+#: builtin/pull.c:201
 msgid "number of submodules pulled in parallel"
 msgstr "количество подмодулей, которые будут получены парралельно"
 
-#: builtin/pull.c:313
+#: builtin/pull.c:317
 #, c-format
 msgid "Invalid value for pull.ff: %s"
 msgstr "Неправильное значение для pull.ff: %s"
 
-#: builtin/pull.c:430
+#: builtin/pull.c:348
+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"
+"\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"
+"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"
+msgstr ""
+
+#: builtin/pull.c:458
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
 msgstr "Нет претендентов для перемещения среди ссылок, которые вы только что получили."
 
-#: builtin/pull.c:432
+#: builtin/pull.c:460
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr "Нет претендентов для слияния среди ссылок, которые вы только что получили."
 
-#: builtin/pull.c:433
+#: builtin/pull.c:461
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
 msgstr "Обычно это означает, что вы передали спецификацию ссылки с помощью шаблона и этот шаблон ни с чем не совпал на внешнем репозитории."
 
-#: builtin/pull.c:436
+#: builtin/pull.c:464
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -15200,74 +17410,69 @@
 "for your current branch, you must specify a branch on the command line."
 msgstr "Вы попросили получить изменения со внешнего репозитория «%s», но не указали ветку. Так как это не репозиторий по умолчанию для  вашей текущей ветки, вы должны указать ветку в командной строке."
 
-#: builtin/pull.c:441 builtin/rebase.c:1321 git-parse-remote.sh:73
+#: builtin/pull.c:469 builtin/rebase.c:1246
 msgid "You are not currently on a branch."
 msgstr "Вы сейчас ни на одной из веток."
 
-#: builtin/pull.c:443 builtin/pull.c:458 git-parse-remote.sh:79
+#: builtin/pull.c:471 builtin/pull.c:486
 msgid "Please specify which branch you want to rebase against."
 msgstr "Пожалуйста, укажите на какую ветку вы хотите переместить изменения."
 
-#: builtin/pull.c:445 builtin/pull.c:460 git-parse-remote.sh:82
+#: builtin/pull.c:473 builtin/pull.c:488
 msgid "Please specify which branch you want to merge with."
 msgstr "Пожалуйста, укажите с какой веткой вы хотите слить изменения."
 
-#: builtin/pull.c:446 builtin/pull.c:461
+#: builtin/pull.c:474 builtin/pull.c:489
 msgid "See git-pull(1) for details."
 msgstr "Для дополнительной информации, смотрите git-pull(1)."
 
-#: builtin/pull.c:448 builtin/pull.c:454 builtin/pull.c:463
-#: builtin/rebase.c:1327 git-parse-remote.sh:64
+#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
+#: builtin/rebase.c:1252
 msgid "<remote>"
 msgstr "<внешний-репозиторий>"
 
-#: builtin/pull.c:448 builtin/pull.c:463 builtin/pull.c:468
-#: git-parse-remote.sh:65
+#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
 msgid "<branch>"
 msgstr "<ветка>"
 
-#: builtin/pull.c:456 builtin/rebase.c:1319 git-parse-remote.sh:75
+#: builtin/pull.c:484 builtin/rebase.c:1244
 msgid "There is no tracking information for the current branch."
 msgstr "У текущей ветки нет информации об отслеживании."
 
-#: builtin/pull.c:465 git-parse-remote.sh:95
+#: builtin/pull.c:493
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr "Если вы хотите указать информацию о отслеживаемой ветке, выполните:"
 
-#: builtin/pull.c:470
+#: builtin/pull.c:498
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
 "from the remote, but no such ref was fetched."
 msgstr "Ваша конфигурация указывает, что нужно слить изменения со ссылкой\n«%s» из внешнего репозитория, но такая ссылка не была получена."
 
-#: builtin/pull.c:574
+#: builtin/pull.c:609
 #, c-format
 msgid "unable to access commit %s"
 msgstr ""
 
-#: builtin/pull.c:854
+#: builtin/pull.c:915
 msgid "ignoring --verify-signatures for rebase"
 msgstr "игнорирование --verify-signatures при перемещении"
 
-#: builtin/pull.c:909
-msgid "--[no-]autostash option is only valid with --rebase."
-msgstr "--[no-]autostash можно использовать только вместе с --rebase."
-
-#: builtin/pull.c:917
+#: builtin/pull.c:972
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Обновление еще не начавшейся ветки с изменениями, добавленными в индекс."
 
-#: builtin/pull.c:921
+#: builtin/pull.c:976
 msgid "pull with rebase"
 msgstr "получение с перемещением"
 
-#: builtin/pull.c:922
+#: builtin/pull.c:977
 msgid "please commit or stash them."
 msgstr "сделайте коммит или спрячьте их."
 
-#: builtin/pull.c:947
+#: builtin/pull.c:1002
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -15275,7 +17480,7 @@
 "commit %s."
 msgstr "извлечение обновило указатель на вашу текущую ветку.\nперемотка вашего рабочего каталога\nс коммита %s."
 
-#: builtin/pull.c:953
+#: builtin/pull.c:1008
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -15286,15 +17491,15 @@
 "to recover."
 msgstr "Не удалось перемотать вперёд изменения в вашем рабочем каталоге.\nПосле того, как вы убедитесь, что вы сохранили всё необходимое из вывода\n$ git diff %s\n, запустите\n$ git reset --hard\nдля восстановления исходного состояния."
 
-#: builtin/pull.c:968
+#: builtin/pull.c:1023
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Нельзя слить несколько веток в пустой указатель на ветку."
 
-#: builtin/pull.c:972
+#: builtin/pull.c:1027
 msgid "Cannot rebase onto multiple branches."
 msgstr "Невозможно переместить над несколькими ветками."
 
-#: builtin/pull.c:979
+#: builtin/pull.c:1041
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "невозможно выполнить перемещение с записанными локальными изменениями в подмодулях"
 
@@ -15306,17 +17511,17 @@
 msgid "tag shorthand without <tag>"
 msgstr "указано сокращение tag, но не указана сама <метка>"
 
-#: builtin/push.c:121
+#: builtin/push.c:119
 msgid "--delete only accepts plain target ref names"
 msgstr "опция --delete принимает только простые целевые имена ссылок"
 
-#: builtin/push.c:167
+#: builtin/push.c:164
 msgid ""
 "\n"
 "To choose either option permanently, see push.default in 'git help config'."
 msgstr "\nЧтобы выбрать любую из опций на постоянной основе, смотрите push.default в «git help config»."
 
-#: builtin/push.c:170
+#: builtin/push.c:167
 #, c-format
 msgid ""
 "The upstream branch of your current branch does not match\n"
@@ -15331,7 +17536,7 @@
 "%s"
 msgstr ""
 
-#: builtin/push.c:185
+#: builtin/push.c:182
 #, c-format
 msgid ""
 "You are not currently on a branch.\n"
@@ -15341,7 +17546,7 @@
 "    git push %s HEAD:<name-of-remote-branch>\n"
 msgstr "Вы сейчас не находитесь ни на одной из веток.\nЧтобы отправить историю, ведущую к текущему (отделённый HEAD) состоянию, используйте\n\n    git push %s HEAD:<имя-внешней-ветки>\n"
 
-#: builtin/push.c:199
+#: builtin/push.c:194
 #, c-format
 msgid ""
 "The current branch %s has no upstream branch.\n"
@@ -15350,13 +17555,13 @@
 "    git push --set-upstream %s %s\n"
 msgstr "Текущая ветка %s не имеет вышестоящей ветки.\nЧтобы отправить текущую ветку и установить внешнюю ветку как вышестоящую для этой ветки, используйте\n\n    git push --set-upstream %s %s\n"
 
-#: builtin/push.c:207
+#: builtin/push.c:202
 #, c-format
 msgid ""
 "The current branch %s has multiple upstream branches, refusing to push."
 msgstr "Ваша текущая ветка %s имеет несколько вышестоящих веток, отказ в отправке изменений."
 
-#: builtin/push.c:210
+#: builtin/push.c:205
 #, c-format
 msgid ""
 "You are pushing to remote '%s', which is not the upstream of\n"
@@ -15364,11 +17569,11 @@
 "to update which remote branch."
 msgstr "Вы сейчас отправляете изменения на внешний репозиторий «%s», который не является вышестоящим для вашей текущей ветки «%s», без указания того, что отправлять и в какую внешнюю ветку."
 
-#: builtin/push.c:269
+#: builtin/push.c:260
 msgid "You didn't specify any refspecs to push, and push.default is \"nothing\"."
 msgstr "Вы не указали спецификацию ссылки для отправки, а push.default указан как «nothing»."
 
-#: builtin/push.c:276
+#: builtin/push.c:267
 msgid ""
 "Updates were rejected because the tip of your current branch is behind\n"
 "its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -15376,7 +17581,7 @@
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr "Обновления были отклонены, так как верхушка вашей текущей ветки\nпозади ее внешней части. Заберите и слейте внешние изменения \n(например, с помощью «git pull …») перед повторной попыткой отправки\nизменений.\nДля дополнительной информации, смотрите «Note about fast-forwards»\nв «git push --help»."
 
-#: builtin/push.c:282
+#: builtin/push.c:273
 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"
@@ -15384,7 +17589,7 @@
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr "Обновления были отклонены, так как верхушка отправляемой ветки\nпозади ее внешней части. Переключитесь на ветку и заберите внешние\nизменения (например, с помощью «git pull …») перед повторной\nпопыткой отправки изменений.\nДля дополнительной информации, смотрите «Note about fast-forwards»\nв «git push --help»."
 
-#: builtin/push.c:288
+#: builtin/push.c:279
 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"
@@ -15393,86 +17598,81 @@
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr "Обновления были отклонены, так как внешний репозиторий содержит\nизменения, которых у вас нет в вашем локальном репозитории.\nОбычно, это связанно с тем, что кто-то уже отправил изменения в \nто же место. Перед повторной отправкой ваших изменений, вам нужно\nзабрать и слить изменения из внешнего репозитория себе\n(например, с помощью «git pull …»).\nДля дополнительной информации, смотрите «Note about fast-forwards»\nв «git push --help»."
 
-#: builtin/push.c:295
+#: builtin/push.c:286
 msgid "Updates were rejected because the tag already exists in the remote."
 msgstr "Обновления были отклонены, так как метка уже существует во внешнем репозитории."
 
-#: builtin/push.c:298
+#: builtin/push.c:289
 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"
 "without using the '--force' option.\n"
 msgstr "Вы не можете обновить внешнюю ссылку, которая указывает на объект, не являющийся коммитом или обновить внешнюю ссылку так, чтобы она указывала на объект, не являющийся коммитом, без указания опции «--force».\n"
 
-#: builtin/push.c:359
+#: builtin/push.c:294
+msgid ""
+"Updates were rejected because the tip of the remote-tracking\n"
+"branch has been updated since the last checkout. You may want\n"
+"to integrate those changes locally (e.g., 'git pull ...')\n"
+"before forcing an update.\n"
+msgstr ""
+
+#: builtin/push.c:364
 #, c-format
 msgid "Pushing to %s\n"
 msgstr "Отправка в %s\n"
 
-#: builtin/push.c:364
+#: builtin/push.c:371
 #, c-format
 msgid "failed to push some refs to '%s'"
 msgstr "не удалось отправить некоторые ссылки в «%s»"
 
-#: builtin/push.c:398
-#, c-format
-msgid "bad repository '%s'"
-msgstr "плохой репозитория «%s»"
-
-#: builtin/push.c:399
-msgid ""
-"No configured push destination.\n"
-"Either specify the URL from the command-line or configure a remote repository using\n"
-"\n"
-"    git remote add <name> <url>\n"
-"\n"
-"and then push using the remote name\n"
-"\n"
-"    git push <name>\n"
-msgstr "Не настроена точка назначения для отправки.\nЛибо укажите URL с помощью командной строки, либо настройте внешний репозиторий с помощью\n\n    git remote add <имя> <адрес>\n\nа затем отправьте изменения с помощью имени внешнего репозитория\n\n    git push <имя>\n"
-
-#: builtin/push.c:554
+#: builtin/push.c:553
 msgid "repository"
 msgstr "репозиторий"
 
-#: builtin/push.c:555 builtin/send-pack.c:164
+#: builtin/push.c:554 builtin/send-pack.c:189
 msgid "push all refs"
 msgstr "отправить все ссылки"
 
-#: builtin/push.c:556 builtin/send-pack.c:166
+#: builtin/push.c:555 builtin/send-pack.c:191
 msgid "mirror all refs"
 msgstr "сделать зеркало всех ссылок"
 
-#: builtin/push.c:558
+#: builtin/push.c:557
 msgid "delete refs"
 msgstr "удалить ссылки"
 
-#: builtin/push.c:559
+#: builtin/push.c:558
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "отправить метки (нельзя использовать вместе с --all или --mirror)"
 
-#: builtin/push.c:562 builtin/send-pack.c:167
+#: builtin/push.c:561 builtin/send-pack.c:192
 msgid "force updates"
 msgstr "принудительное обновление"
 
-#: builtin/push.c:564 builtin/send-pack.c:181
+#: builtin/push.c:562 builtin/send-pack.c:204
 msgid "<refname>:<expect>"
 msgstr ""
 
-#: builtin/push.c:565 builtin/send-pack.c:182
+#: builtin/push.c:563 builtin/send-pack.c:205
 msgid "require old value of ref to be at this value"
 msgstr "требовать, чтобы старое значение ссылки было ожидаемым"
 
-#: builtin/push.c:568
+#: builtin/push.c:566 builtin/send-pack.c:208
+msgid "require remote updates to be integrated locally"
+msgstr ""
+
+#: builtin/push.c:569
 msgid "control recursive pushing of submodules"
 msgstr "управление рекурсивной отправкой подмодулей"
 
-#: builtin/push.c:570 builtin/send-pack.c:175
+#: builtin/push.c:570 builtin/send-pack.c:199
 msgid "use thin pack"
 msgstr "использовать тонкие пакеты"
 
-#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:161
-#: builtin/send-pack.c:162
+#: builtin/push.c:571 builtin/push.c:572 builtin/send-pack.c:186
+#: builtin/send-pack.c:187
 msgid "receive pack program"
 msgstr "путь к программе упаковки на сервере"
 
@@ -15492,43 +17692,60 @@
 msgid "push missing but relevant tags"
 msgstr "отправить пропущенные, но нужные метки"
 
-#: builtin/push.c:582 builtin/send-pack.c:169
+#: builtin/push.c:581 builtin/send-pack.c:193
 msgid "GPG sign the push"
 msgstr "подписать отправку с помощью GPG"
 
-#: builtin/push.c:584 builtin/send-pack.c:176
+#: builtin/push.c:583 builtin/send-pack.c:200
 msgid "request atomic transaction on remote side"
 msgstr "запросить выполнение атомарной транзакции на внешней стороне"
 
-#: builtin/push.c:602
+#: builtin/push.c:601
 msgid "--delete is incompatible with --all, --mirror and --tags"
 msgstr "--delete несовместимо с  --all, --mirror и --tags"
 
-#: builtin/push.c:604
+#: builtin/push.c:603
 msgid "--delete doesn't make sense without any refs"
 msgstr "--delete не имеет смысла без указания ссылок"
 
-#: builtin/push.c:607
+#: builtin/push.c:623
+#, c-format
+msgid "bad repository '%s'"
+msgstr "плохой репозитория «%s»"
+
+#: builtin/push.c:624
+msgid ""
+"No configured push destination.\n"
+"Either specify the URL from the command-line or configure a remote repository using\n"
+"\n"
+"    git remote add <name> <url>\n"
+"\n"
+"and then push using the remote name\n"
+"\n"
+"    git push <name>\n"
+msgstr "Не настроена точка назначения для отправки.\nЛибо укажите URL с помощью командной строки, либо настройте внешний репозиторий с помощью\n\n    git remote add <имя> <адрес>\n\nа затем отправьте изменения с помощью имени внешнего репозитория\n\n    git push <имя>\n"
+
+#: builtin/push.c:639
 msgid "--all and --tags are incompatible"
 msgstr "--all и --tags нельзя использовать одновременно"
 
-#: builtin/push.c:609
+#: builtin/push.c:641
 msgid "--all can't be combined with refspecs"
 msgstr "--all нельзя использовать вместе со спецификаторами ссылок"
 
-#: builtin/push.c:613
+#: builtin/push.c:645
 msgid "--mirror and --tags are incompatible"
 msgstr "--mirror и --tags нельзя использовать одновременно"
 
-#: builtin/push.c:615
+#: builtin/push.c:647
 msgid "--mirror can't be combined with refspecs"
 msgstr "--mirror нельзя использовать вместе со спецификаторами ссылок"
 
-#: builtin/push.c:618
+#: builtin/push.c:650
 msgid "--all and --mirror are incompatible"
 msgstr "--all и --mirror нельзя использовать одновременно"
 
-#: builtin/push.c:637
+#: builtin/push.c:657
 msgid "push options must not have new line characters"
 msgstr "опции для отправки не должны содержать символы перевода строк"
 
@@ -15544,24 +17761,32 @@
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr ""
 
-#: builtin/range-diff.c:21
+#: builtin/range-diff.c:22
 msgid "Percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/range-diff.c:23
+#: builtin/range-diff.c:24
 msgid "use simple diff colors"
 msgstr ""
 
-#: builtin/range-diff.c:46 builtin/range-diff.c:50
+#: builtin/range-diff.c:26
+msgid "notes"
+msgstr ""
+
+#: builtin/range-diff.c:26
+msgid "passed to 'git log'"
+msgstr ""
+
+#: builtin/range-diff.c:50 builtin/range-diff.c:54
 #, c-format
 msgid "no .. in range: '%s'"
 msgstr ""
 
-#: builtin/range-diff.c:60
+#: builtin/range-diff.c:64
 msgid "single arg format must be symmetric range"
 msgstr ""
 
-#: builtin/range-diff.c:75
+#: builtin/range-diff.c:79
 msgid "need two commit ranges"
 msgstr ""
 
@@ -15640,232 +17865,213 @@
 msgid "suppress feedback messages"
 msgstr ""
 
-#: builtin/rebase.c:32
-msgid ""
-"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] "
-"[<branch>]"
+#: builtin/read-tree.c:188
+msgid "You need to resolve your current index first"
 msgstr ""
 
-#: builtin/rebase.c:34
+#: builtin/rebase.c:35
+msgid ""
+"git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
+"[<upstream> [<branch>]]"
+msgstr ""
+
+#: builtin/rebase.c:37
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root "
 "[<branch>]"
 msgstr ""
 
-#: builtin/rebase.c:36
+#: builtin/rebase.c:39
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr ""
 
-#: builtin/rebase.c:158 builtin/rebase.c:182 builtin/rebase.c:209
+#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "непригодный для использования список дел: «%s»"
 
-#: builtin/rebase.c:167 builtin/rebase.c:193 builtin/rebase.c:217
-#, c-format
-msgid "could not write '%s'."
-msgstr ""
-
-#: builtin/rebase.c:252
-msgid "no HEAD?"
-msgstr ""
-
-#: builtin/rebase.c:279
+#: builtin/rebase.c:310
 #, c-format
 msgid "could not create temporary %s"
 msgstr ""
 
-#: builtin/rebase.c:285
+#: builtin/rebase.c:316
 msgid "could not mark as interactive"
 msgstr ""
 
-#: builtin/rebase.c:343
+#: builtin/rebase.c:369
 msgid "could not generate todo list"
 msgstr ""
 
-#: builtin/rebase.c:382
+#: builtin/rebase.c:411
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 
-#: builtin/rebase.c:437
+#: builtin/rebase.c:480
 msgid "git rebase--interactive [<options>]"
 msgstr ""
 
-#: builtin/rebase.c:449
-msgid "keep empty commits"
-msgstr "оставить пустые коммиты"
+#: builtin/rebase.c:493 builtin/rebase.c:1388
+msgid "keep commits which start empty"
+msgstr ""
 
-#: builtin/rebase.c:451 builtin/revert.c:127
+#: builtin/rebase.c:497 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "разрешить коммиты с пустыми сообщениями"
 
-#: builtin/rebase.c:452
+#: builtin/rebase.c:499
 msgid "rebase merge commits"
 msgstr ""
 
-#: builtin/rebase.c:454
+#: builtin/rebase.c:501
 msgid "keep original branch points of cousins"
 msgstr ""
 
-#: builtin/rebase.c:456
+#: builtin/rebase.c:503
 msgid "move commits that begin with squash!/fixup!"
 msgstr ""
 
-#: builtin/rebase.c:457
+#: builtin/rebase.c:504
 msgid "sign commits"
 msgstr ""
 
-#: builtin/rebase.c:459 builtin/rebase.c:1397
+#: builtin/rebase.c:506 builtin/rebase.c:1327
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:461
+#: builtin/rebase.c:508
 msgid "continue rebase"
 msgstr "продолжить перемещение"
 
-#: builtin/rebase.c:463
+#: builtin/rebase.c:510
 msgid "skip commit"
 msgstr ""
 
-#: builtin/rebase.c:464
+#: builtin/rebase.c:511
 msgid "edit the todo list"
 msgstr ""
 
-#: builtin/rebase.c:466
+#: builtin/rebase.c:513
 msgid "show the current patch"
 msgstr ""
 
-#: builtin/rebase.c:469
+#: builtin/rebase.c:516
 msgid "shorten commit ids in the todo list"
 msgstr "вывести короткие идентификаторы коммитов в списке действий"
 
-#: builtin/rebase.c:471
+#: builtin/rebase.c:518
 msgid "expand commit ids in the todo list"
 msgstr "вывести полные идентификаторы коммитов в списке действий"
 
-#: builtin/rebase.c:473
+#: builtin/rebase.c:520
 msgid "check the todo list"
 msgstr "проверить список дел"
 
-#: builtin/rebase.c:475
+#: builtin/rebase.c:522
 msgid "rearrange fixup/squash lines"
 msgstr "переставить строки fixup/squash"
 
-#: builtin/rebase.c:477
+#: builtin/rebase.c:524
 msgid "insert exec commands in todo list"
 msgstr "вставить команды исполнения коммитов в списке действий"
 
-#: builtin/rebase.c:478
+#: builtin/rebase.c:525
 msgid "onto"
 msgstr ""
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:528
 msgid "restrict-revision"
 msgstr ""
 
-#: builtin/rebase.c:481
+#: builtin/rebase.c:528
 msgid "restrict revision"
 msgstr ""
 
-#: builtin/rebase.c:483
+#: builtin/rebase.c:530
 msgid "squash-onto"
 msgstr ""
 
-#: builtin/rebase.c:484
+#: builtin/rebase.c:531
 msgid "squash onto"
 msgstr ""
 
-#: builtin/rebase.c:486
+#: builtin/rebase.c:533
 msgid "the upstream commit"
 msgstr ""
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:535
 msgid "head-name"
 msgstr ""
 
-#: builtin/rebase.c:488
+#: builtin/rebase.c:535
 msgid "head name"
 msgstr ""
 
-#: builtin/rebase.c:493
+#: builtin/rebase.c:540
 msgid "rebase strategy"
 msgstr ""
 
-#: builtin/rebase.c:494
+#: builtin/rebase.c:541
 msgid "strategy-opts"
 msgstr ""
 
-#: builtin/rebase.c:495
+#: builtin/rebase.c:542
 msgid "strategy options"
 msgstr ""
 
-#: builtin/rebase.c:496
+#: builtin/rebase.c:543
 msgid "switch-to"
 msgstr ""
 
-#: builtin/rebase.c:497
+#: builtin/rebase.c:544
 msgid "the branch or commit to checkout"
 msgstr ""
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:545
 msgid "onto-name"
 msgstr ""
 
-#: builtin/rebase.c:498
+#: builtin/rebase.c:545
 msgid "onto name"
 msgstr ""
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:546
 msgid "cmd"
 msgstr ""
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:546
 msgid "the command to run"
 msgstr ""
 
-#: builtin/rebase.c:502 builtin/rebase.c:1480
+#: builtin/rebase.c:549 builtin/rebase.c:1421
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:565
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins не имеет смысла без указания --rebase-merges"
 
-#: builtin/rebase.c:534 builtin/rebase.c:1787
+#: builtin/rebase.c:581
 #, c-format
-msgid "%s requires an interactive rebase"
+msgid "%s requires the merge backend"
 msgstr ""
 
-#: builtin/rebase.c:586
+#: builtin/rebase.c:624
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr ""
 
-#: builtin/rebase.c:601
+#: builtin/rebase.c:641
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:626
+#: builtin/rebase.c:666
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:702
-#, c-format
-msgid "Could not read '%s'"
-msgstr ""
-
-#: builtin/rebase.c:720
-#, c-format
-msgid "Cannot store %s"
-msgstr ""
-
-#: builtin/rebase.c:817
-msgid "could not determine HEAD revision"
-msgstr ""
-
-#: builtin/rebase.c:940
+#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -15873,7 +18079,7 @@
 "To abort and get back to the state before \"git rebase\", run \"git rebase --abort\"."
 msgstr "Разрешите все конфликты вручную, пометьте их разрешёнными с помощью «git add/rm <конфликтующие-файлы>», а затем запустите «git rebase --continue».\nЕсли вы хотите пропустить этот коммит, то запустите «git rebase --skip».\nЧтобы вернуться на состояние до «git rebase», запустите «git rebase --abort»."
 
-#: builtin/rebase.c:1021
+#: builtin/rebase.c:894
 #, c-format
 msgid ""
 "\n"
@@ -15885,7 +18091,12 @@
 "As a result, git cannot rebase them."
 msgstr ""
 
-#: builtin/rebase.c:1313
+#: builtin/rebase.c:1220
+#, c-format
+msgid "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask\"."
+msgstr ""
+
+#: builtin/rebase.c:1238
 #, c-format
 msgid ""
 "%s\n"
@@ -15896,7 +18107,7 @@
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:1329
+#: builtin/rebase.c:1254
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -15905,174 +18116,201 @@
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1284
 msgid "exec commands cannot contain newlines"
 msgstr ""
 
-#: builtin/rebase.c:1363
+#: builtin/rebase.c:1288
 msgid "empty exec command"
 msgstr ""
 
-#: builtin/rebase.c:1390
+#: builtin/rebase.c:1318
 msgid "rebase onto given branch instead of upstream"
 msgstr ""
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1320
+msgid "use the merge-base of upstream and branch as the current base"
+msgstr ""
+
+#: builtin/rebase.c:1322
 msgid "allow pre-rebase hook to run"
 msgstr ""
 
-#: builtin/rebase.c:1394
+#: builtin/rebase.c:1324
 msgid "be quiet. implies --no-stat"
 msgstr ""
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1330
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:1403
-msgid "add a Signed-off-by: line to each commit"
+#: builtin/rebase.c:1333
+msgid "add a Signed-off-by trailer to each commit"
 msgstr ""
 
-#: builtin/rebase.c:1405 builtin/rebase.c:1409 builtin/rebase.c:1411
-msgid "passed to 'git am'"
+#: builtin/rebase.c:1336
+msgid "make committer date match author date"
 msgstr ""
 
-#: builtin/rebase.c:1413 builtin/rebase.c:1415
+#: builtin/rebase.c:1338
+msgid "ignore author date and use current date"
+msgstr ""
+
+#: builtin/rebase.c:1340
+msgid "synonym of --reset-author-date"
+msgstr ""
+
+#: builtin/rebase.c:1342 builtin/rebase.c:1346
 msgid "passed to 'git apply'"
 msgstr ""
 
-#: builtin/rebase.c:1417 builtin/rebase.c:1420
+#: builtin/rebase.c:1344
+msgid "ignore changes in whitespace"
+msgstr ""
+
+#: builtin/rebase.c:1348 builtin/rebase.c:1351
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 
-#: builtin/rebase.c:1422
+#: builtin/rebase.c:1353
 msgid "continue"
 msgstr ""
 
-#: builtin/rebase.c:1425
+#: builtin/rebase.c:1356
 msgid "skip current patch and continue"
 msgstr ""
 
-#: builtin/rebase.c:1427
+#: builtin/rebase.c:1358
 msgid "abort and check out the original branch"
 msgstr ""
 
-#: builtin/rebase.c:1430
+#: builtin/rebase.c:1361
 msgid "abort but keep HEAD where it is"
 msgstr ""
 
-#: builtin/rebase.c:1431
+#: builtin/rebase.c:1362
 msgid "edit the todo list during an interactive rebase"
 msgstr ""
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1365
 msgid "show the patch file being applied or merged"
 msgstr ""
 
-#: builtin/rebase.c:1437
+#: builtin/rebase.c:1368
+msgid "use apply strategies to rebase"
+msgstr ""
+
+#: builtin/rebase.c:1372
 msgid "use merging strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1441
+#: builtin/rebase.c:1376
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1445
+#: builtin/rebase.c:1380
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 
-#: builtin/rebase.c:1449
-msgid "preserve empty commits during rebase"
+#: builtin/rebase.c:1385
+msgid "how to handle commits that become empty"
 msgstr ""
 
-#: builtin/rebase.c:1451
+#: builtin/rebase.c:1392
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 
-#: builtin/rebase.c:1457
-msgid "automatically stash/stash pop before and after"
-msgstr ""
-
-#: builtin/rebase.c:1459
+#: builtin/rebase.c:1399
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1403
 msgid "allow rebasing commits with empty messages"
 msgstr ""
 
-#: builtin/rebase.c:1466
+#: builtin/rebase.c:1407
 msgid "try to rebase merges instead of skipping them"
 msgstr ""
 
-#: builtin/rebase.c:1469
+#: builtin/rebase.c:1410
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 
-#: builtin/rebase.c:1471
+#: builtin/rebase.c:1412
 msgid "use the given merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1473 builtin/revert.c:114
+#: builtin/rebase.c:1414 builtin/revert.c:115
 msgid "option"
 msgstr "опция"
 
-#: builtin/rebase.c:1474
+#: builtin/rebase.c:1415
 msgid "pass the argument through to the merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1477
+#: builtin/rebase.c:1418
 msgid "rebase all reachable commits up to the root(s)"
 msgstr ""
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1423
+msgid "apply all changes, even those already present upstream"
+msgstr ""
+
+#: builtin/rebase.c:1440
 msgid ""
 "the rebase.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
 msgstr ""
 
-#: builtin/rebase.c:1504
+#: builtin/rebase.c:1446
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Похоже, что выполняется «git am». Невозможно выполнить перемещение."
 
-#: builtin/rebase.c:1545
+#: builtin/rebase.c:1487
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 
-#: builtin/rebase.c:1549
+#: builtin/rebase.c:1492
+msgid "cannot combine '--keep-base' with '--onto'"
+msgstr ""
+
+#: builtin/rebase.c:1494
+msgid "cannot combine '--keep-base' with '--root'"
+msgstr ""
+
+#: builtin/rebase.c:1498
+msgid "cannot combine '--root' with '--fork-point'"
+msgstr ""
+
+#: builtin/rebase.c:1501
 msgid "No rebase in progress?"
 msgstr "Нет перемещения в процессе?"
 
-#: builtin/rebase.c:1553
+#: builtin/rebase.c:1505
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "Действие --edit-todo может использоваться только при интерактивном перемещении."
 
-#: builtin/rebase.c:1576
+#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Не удалось прочитать HEAD"
 
-#: builtin/rebase.c:1588
+#: builtin/rebase.c:1540
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
 msgstr "Вы должны отредактировать все\nконфликты слияния, а потом пометить\nих как разрешенные с помощью git add"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1559
 msgid "could not discard worktree changes"
 msgstr ""
 
-#: builtin/rebase.c:1626
+#: builtin/rebase.c:1578
 #, c-format
 msgid "could not move back to %s"
 msgstr ""
 
-#: builtin/rebase.c:1637 builtin/rm.c:369
-#, c-format
-msgid "could not remove '%s'"
-msgstr "не удалось удалить «%s»"
-
-#: builtin/rebase.c:1663
+#: builtin/rebase.c:1624
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -16085,167 +18323,140 @@
 "valuable there.\n"
 msgstr ""
 
-#: builtin/rebase.c:1684
+#: builtin/rebase.c:1652
 msgid "switch `C' expects a numerical value"
 msgstr ""
 
-#: builtin/rebase.c:1725
+#: builtin/rebase.c:1694
 #, c-format
 msgid "Unknown mode: %s"
 msgstr ""
 
-#: builtin/rebase.c:1747
+#: builtin/rebase.c:1733
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1796
-msgid "cannot combine am options with either interactive or merge options"
+#: builtin/rebase.c:1763
+msgid "cannot combine apply options with merge options"
 msgstr ""
 
-#: builtin/rebase.c:1815
+#: builtin/rebase.c:1776
+#, c-format
+msgid "Unknown rebase backend: %s"
+msgstr ""
+
+#: builtin/rebase.c:1806
+msgid "--reschedule-failed-exec requires --exec or --interactive"
+msgstr ""
+
+#: builtin/rebase.c:1826
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr ""
 
-#: builtin/rebase.c:1819
+#: builtin/rebase.c:1830
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 
-#: builtin/rebase.c:1825
-msgid "cannot combine '--rebase-merges' with '--strategy-option'"
-msgstr ""
-
-#: builtin/rebase.c:1828
-msgid "cannot combine '--rebase-merges' with '--strategy'"
-msgstr ""
-
-#: builtin/rebase.c:1852
+#: builtin/rebase.c:1854
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1858
+#: builtin/rebase.c:1860
 msgid "Could not create new root commit"
 msgstr ""
 
-#: builtin/rebase.c:1876
+#: builtin/rebase.c:1886
+#, c-format
+msgid "'%s': need exactly one merge base with branch"
+msgstr ""
+
+#: builtin/rebase.c:1889
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr ""
 
-#: builtin/rebase.c:1883
+#: builtin/rebase.c:1897
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1908
+#: builtin/rebase.c:1923
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1916 builtin/submodule--helper.c:38
-#: builtin/submodule--helper.c:1933
+#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "No such ref: %s"
 msgstr "Нет такой ссылки: %s"
 
-#: builtin/rebase.c:1927
+#: builtin/rebase.c:1942
 msgid "Could not resolve HEAD to a revision"
 msgstr ""
 
-#: builtin/rebase.c:1968
-msgid "Cannot autostash"
-msgstr "Не удалось автоматически спрятать изменения"
-
-#: builtin/rebase.c:1971
-#, c-format
-msgid "Unexpected stash response: '%s'"
-msgstr ""
-
-#: builtin/rebase.c:1977
-#, c-format
-msgid "Could not create directory for '%s'"
-msgstr ""
-
-#: builtin/rebase.c:1980
-#, c-format
-msgid "Created autostash: %s\n"
-msgstr ""
-
-#: builtin/rebase.c:1983
-msgid "could not reset --hard"
-msgstr ""
-
-#: builtin/rebase.c:1984 builtin/reset.c:114
-#, c-format
-msgid "HEAD is now at %s"
-msgstr "HEAD сейчас на %s"
-
-#: builtin/rebase.c:2000
+#: builtin/rebase.c:1963
 msgid "Please commit or stash them."
 msgstr "Сделайте коммит или спрячьте их."
 
-#: builtin/rebase.c:2027
-#, c-format
-msgid "could not parse '%s'"
-msgstr ""
-
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:1999
 #, c-format
 msgid "could not switch to %s"
 msgstr ""
 
-#: builtin/rebase.c:2051
+#: builtin/rebase.c:2010
 msgid "HEAD is up to date."
 msgstr "HEAD уже в актуальном состоянии."
 
-#: builtin/rebase.c:2053
+#: builtin/rebase.c:2012
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr ""
 
-#: builtin/rebase.c:2061
+#: builtin/rebase.c:2020
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD уже в актуальном состоянии, принудительное перемещение."
 
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:2022
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr ""
 
-#: builtin/rebase.c:2071
+#: builtin/rebase.c:2030
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Перехватчик pre-rebase отказал в перемещении."
 
-#: builtin/rebase.c:2078
+#: builtin/rebase.c:2037
 #, c-format
 msgid "Changes to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:2081
+#: builtin/rebase.c:2040
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:2106
+#: builtin/rebase.c:2065
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 
-#: builtin/rebase.c:2115
+#: builtin/rebase.c:2074
 msgid "Could not detach HEAD"
 msgstr ""
 
-#: builtin/rebase.c:2124
+#: builtin/rebase.c:2083
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr ""
 
-#: builtin/receive-pack.c:33
+#: builtin/receive-pack.c:34
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <каталог-git>"
 
-#: builtin/receive-pack.c:833
+#: builtin/receive-pack.c:1276
 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"
@@ -16262,7 +18473,7 @@
 "'receive.denyCurrentBranch' configuration variable to 'refuse'."
 msgstr "По умолчанию, обновлять текущую ветку в репозитории с рабочей\nкопией (не голом) запрещено, так как это сделает состояние индекса\nи рабочего каталога противоречивым, и вам прийдется выполнить\n«git reset --hard», чтобы состояние рабочего каталога снова\nсоответствовало HEAD.\n\nВы можете установить значение опции «receive.denyCurrentBranch»\nв «ignore» или «warn» во внешнем репозитории, чтобы разрешить\nотправку в его текущую ветку; но это не рекомендуется, если только\nвы не намерены обновить его рабочий каталог способом подобным\nвышеописанному.\n\nЧтобы пропустить это сообщение и все равно оставить поведение\nпо умолчанию, установите значение опции «receive.denyCurrentBranch»\nв «refuse»."
 
-#: builtin/receive-pack.c:853
+#: builtin/receive-pack.c:1296
 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"
@@ -16274,11 +18485,11 @@
 "To squelch this message, you can set it to 'refuse'."
 msgstr "По умолчанию, удаление текущей ветки запрещено, так как последующий\n«git clone» не сможет получить никаких файлов, что приведет к путанице.\n\nВы можете установить значение опции «receive.denyDeleteCurrent»\nв «warn» или «ignore», во внешнем репозитории,  чтобы разрешить\nудаление текущей ветки с или без предупреждающего сообщения.\n\nЧтобы пропустить это сообщение, вы можете установить значение опции\nв «refuse»."
 
-#: builtin/receive-pack.c:1940
+#: builtin/receive-pack.c:2481
 msgid "quiet"
 msgstr "тихий режим"
 
-#: builtin/receive-pack.c:1954
+#: builtin/receive-pack.c:2495
 msgid "You must specify a directory."
 msgstr "Вы должны указать каталог."
 
@@ -16299,210 +18510,218 @@
 msgid "git reflog exists <ref>"
 msgstr ""
 
-#: builtin/reflog.c:567 builtin/reflog.c:572
+#: builtin/reflog.c:568 builtin/reflog.c:573
 #, c-format
 msgid "'%s' is not a valid timestamp"
 msgstr "«%s» не является допустимой меткой даты/времени"
 
-#: builtin/reflog.c:605
+#: builtin/reflog.c:606
 #, c-format
 msgid "Marking reachable objects..."
 msgstr ""
 
-#: builtin/reflog.c:643
+#: builtin/reflog.c:644
 #, c-format
 msgid "%s points nowhere!"
 msgstr ""
 
-#: builtin/reflog.c:695
+#: builtin/reflog.c:696
 msgid "no reflog specified to delete"
 msgstr ""
 
-#: builtin/reflog.c:704
+#: builtin/reflog.c:705
 #, c-format
 msgid "not a reflog: %s"
 msgstr ""
 
-#: builtin/reflog.c:709
+#: builtin/reflog.c:710
 #, c-format
 msgid "no reflog for '%s'"
 msgstr ""
 
-#: builtin/reflog.c:755
+#: builtin/reflog.c:756
 #, c-format
 msgid "invalid ref format: %s"
 msgstr ""
 
-#: builtin/reflog.c:764
+#: builtin/reflog.c:765
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr ""
 
-#: builtin/remote.c:16
+#: builtin/remote.c:17
 msgid "git remote [-v | --verbose]"
 msgstr "git remote [-v | --verbose]"
 
-#: builtin/remote.c:17
+#: builtin/remote.c:18
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] "
 "[--mirror=<fetch|push>] <name> <url>"
 msgstr "git remote add [-t <ветка>] [-m <мастер-ветка>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <имя> <адрес>"
 
-#: builtin/remote.c:18 builtin/remote.c:38
+#: builtin/remote.c:19 builtin/remote.c:39
 msgid "git remote rename <old> <new>"
 msgstr "git remote rename <старое-название> <новое-название>"
 
-#: builtin/remote.c:19 builtin/remote.c:43
+#: builtin/remote.c:20 builtin/remote.c:44
 msgid "git remote remove <name>"
 msgstr "git remote remove <имя>"
 
-#: builtin/remote.c:20 builtin/remote.c:48
+#: builtin/remote.c:21 builtin/remote.c:49
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <имя> (-a | --auto | -d | --delete | <ветка>)"
 
-#: builtin/remote.c:21
+#: builtin/remote.c:22
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <имя>"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <имя>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr "git remote [-v | --verbose] update [-p | --prune] [(<группа> | <имя-внешнего-репозитория>)…]"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <имя> <ветка>…"
 
-#: builtin/remote.c:25 builtin/remote.c:74
+#: builtin/remote.c:26 builtin/remote.c:75
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <имя>"
 
-#: builtin/remote.c:26 builtin/remote.c:79
+#: builtin/remote.c:27 builtin/remote.c:80
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <имя> <новый-url> [<старый-url>]"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <имя> <новый-url>"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <имя> <url>"
 
-#: builtin/remote.c:33
+#: builtin/remote.c:34
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<опции>] <имя> <url>"
 
-#: builtin/remote.c:53
+#: builtin/remote.c:54
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <имя> <ветка>…"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <имя> <ветка>…"
 
-#: builtin/remote.c:59
+#: builtin/remote.c:60
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<опции>] <имя>"
 
-#: builtin/remote.c:64
+#: builtin/remote.c:65
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<опции>] <имя>"
 
-#: builtin/remote.c:69
+#: builtin/remote.c:70
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<опции>] [<группа> | <имя-внешнего-репозитория>]…"
 
-#: builtin/remote.c:98
+#: builtin/remote.c:99
 #, c-format
 msgid "Updating %s"
 msgstr "Обновление %s"
 
-#: builtin/remote.c:130
+#: builtin/remote.c:131
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
 msgstr "ключ --mirror небезопасен и не рекомендуется к использованию;\nиспользуйте вместо него --mirror=fetch или --mirror=push"
 
-#: builtin/remote.c:147
+#: builtin/remote.c:148
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "неизвестный аргумент для mirror: %s"
 
-#: builtin/remote.c:163
+#: builtin/remote.c:164
 msgid "fetch the remote branches"
 msgstr "извлечь внешние ветки"
 
-#: builtin/remote.c:165
+#: builtin/remote.c:166
 msgid "import all tags and associated objects when fetching"
 msgstr "импортировать все метки и ассоциированные объекты при извлечении"
 
-#: builtin/remote.c:168
+#: builtin/remote.c:169
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "или не извлекать метки вообще (--no-tags)"
 
-#: builtin/remote.c:170
+#: builtin/remote.c:171
 msgid "branch(es) to track"
 msgstr "отслеживаемые ветки"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "master branch"
 msgstr "мастер ветка"
 
-#: builtin/remote.c:173
+#: builtin/remote.c:174
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "настроить внешний репозиторий как зеркало для отправки или извлечения изменений"
 
-#: builtin/remote.c:185
+#: builtin/remote.c:186
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "указание мастер ветки не имеет смысла с параметром --mirror"
 
-#: builtin/remote.c:187
+#: builtin/remote.c:188
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "указание отслеживаемых веток имеет смысл только при зеркальном извлечении"
 
-#: builtin/remote.c:194 builtin/remote.c:636
+#: builtin/remote.c:195 builtin/remote.c:700
 #, c-format
 msgid "remote %s already exists."
 msgstr "внешний репозиторий %s уже существует"
 
-#: builtin/remote.c:198 builtin/remote.c:640
-#, c-format
-msgid "'%s' is not a valid remote name"
-msgstr "«%s» не является допустимым именем внешнего репозитория."
-
-#: builtin/remote.c:238
+#: builtin/remote.c:240
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Не удалось настроить мастер ветку «%s»"
 
-#: builtin/remote.c:344
+#: builtin/remote.c:355
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "Не удалось извлечь карту для спецификатора ссылки %s"
 
-#: builtin/remote.c:443 builtin/remote.c:451
+#: builtin/remote.c:454 builtin/remote.c:462
 msgid "(matching)"
 msgstr "(соответствующая)"
 
-#: builtin/remote.c:455
+#: builtin/remote.c:466
 msgid "(delete)"
 msgstr "(удаленная)"
 
-#: builtin/remote.c:629 builtin/remote.c:765 builtin/remote.c:864
+#: builtin/remote.c:655
+#, c-format
+msgid "could not set '%s'"
+msgstr ""
+
+#: builtin/remote.c:660
+#, c-format
+msgid ""
+"The %s configuration remote.pushDefault in:\n"
+"\t%s:%d\n"
+"now names the non-existent remote '%s'"
+msgstr ""
+
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
 #, c-format
 msgid "No such remote: '%s'"
 msgstr ""
 
-#: builtin/remote.c:646
+#: builtin/remote.c:710
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Не удалось переименовать секцию конфигурации с «%s» на «%s»"
 
-#: builtin/remote.c:666
+#: builtin/remote.c:730
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -16510,17 +18729,17 @@
 "\tPlease update the configuration manually if necessary."
 msgstr "Не обновляю нестандартную спецификатор ссылки для извлечения\n\t%s\n\tПожалуйста, если требуется, обновите конфигурацию вручную."
 
-#: builtin/remote.c:702
+#: builtin/remote.c:770
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "не удалось удалить «%s»"
 
-#: builtin/remote.c:736
+#: builtin/remote.c:804
 #, c-format
 msgid "creating '%s' failed"
 msgstr "не удалось создать «%s»"
 
-#: builtin/remote.c:802
+#: builtin/remote.c:882
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -16532,148 +18751,148 @@
 msgstr[2] "Примечание: Некоторые ветки вне иерархии refs/remotes/ не будут удалены;\nчтобы удалить их, используйте:"
 msgstr[3] "Примечание: Некоторые ветки вне иерархии refs/remotes/ не будут удалены;\nчтобы удалить их, используйте:"
 
-#: builtin/remote.c:816
+#: builtin/remote.c:896
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Не удалось удалить секцию файла конфигурации «%s»"
 
-#: builtin/remote.c:917
+#: builtin/remote.c:999
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " новая (следующее извлечение сохранит ее в remotes/%s)"
 
-#: builtin/remote.c:920
+#: builtin/remote.c:1002
 msgid " tracked"
 msgstr " отслеживается"
 
-#: builtin/remote.c:922
+#: builtin/remote.c:1004
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " недействительна (используйте «git remote prune», чтобы удалить)"
 
-#: builtin/remote.c:924
+#: builtin/remote.c:1006
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:965
+#: builtin/remote.c:1047
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "неправильный параметр конфигурации branch.%s.merge; невозможно переместить более чем над 1 веткой"
 
-#: builtin/remote.c:974
+#: builtin/remote.c:1056
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "перемещается интерактивно над внешней веткой %s"
 
-#: builtin/remote.c:976
+#: builtin/remote.c:1058
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr ""
 
-#: builtin/remote.c:979
+#: builtin/remote.c:1061
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "перемещается над внешней веткой %s"
 
-#: builtin/remote.c:983
+#: builtin/remote.c:1065
 #, c-format
 msgid " merges with remote %s"
 msgstr " будет слита с внешней веткой %s"
 
-#: builtin/remote.c:986
+#: builtin/remote.c:1068
 #, c-format
 msgid "merges with remote %s"
 msgstr "будет слита с внешней веткой %s"
 
-#: builtin/remote.c:989
+#: builtin/remote.c:1071
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    и с внешней веткой %s\n"
 
-#: builtin/remote.c:1032
+#: builtin/remote.c:1114
 msgid "create"
 msgstr "создана"
 
-#: builtin/remote.c:1035
+#: builtin/remote.c:1117
 msgid "delete"
 msgstr "удалена"
 
-#: builtin/remote.c:1039
+#: builtin/remote.c:1121
 msgid "up to date"
 msgstr "уже актуальна"
 
-#: builtin/remote.c:1042
+#: builtin/remote.c:1124
 msgid "fast-forwardable"
 msgstr "возможна перемотка вперед"
 
-#: builtin/remote.c:1045
+#: builtin/remote.c:1127
 msgid "local out of date"
 msgstr "локальная ветка устарела"
 
-#: builtin/remote.c:1052
+#: builtin/remote.c:1134
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s будет принудительно отправлена в %-*s (%s)"
 
-#: builtin/remote.c:1055
+#: builtin/remote.c:1137
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s будет отправлена в %-*s (%s)"
 
-#: builtin/remote.c:1059
+#: builtin/remote.c:1141
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s будет принудительно отправлена в %s"
 
-#: builtin/remote.c:1062
+#: builtin/remote.c:1144
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s будет отправлена в %s"
 
-#: builtin/remote.c:1130
+#: builtin/remote.c:1212
 msgid "do not query remotes"
 msgstr "не опрашивать внешние репозитории"
 
-#: builtin/remote.c:1157
+#: builtin/remote.c:1239
 #, c-format
 msgid "* remote %s"
 msgstr "* внешний репозиторий %s"
 
-#: builtin/remote.c:1158
+#: builtin/remote.c:1240
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL для извлечения: %s"
 
-#: builtin/remote.c:1159 builtin/remote.c:1175 builtin/remote.c:1314
+#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
 msgid "(no URL)"
 msgstr "(нет URL)"
 
 #. TRANSLATORS: the colon ':' should align
 #. with the one in " Fetch URL: %s"
 #. translation.
-#: builtin/remote.c:1173 builtin/remote.c:1175
+#: builtin/remote.c:1255 builtin/remote.c:1257
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "    URL для отправки: %s"
 
-#: builtin/remote.c:1177 builtin/remote.c:1179 builtin/remote.c:1181
+#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  HEAD ветка: %s"
 
-#: builtin/remote.c:1177
+#: builtin/remote.c:1259
 msgid "(not queried)"
 msgstr "(не запрашивался)"
 
-#: builtin/remote.c:1179
+#: builtin/remote.c:1261
 msgid "(unknown)"
 msgstr "(неизвестно)"
 
-#: builtin/remote.c:1183
+#: builtin/remote.c:1265
 #, c-format
 msgid "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr "  HEAD ветка (HEAD внешнего репозитория неоднозначный, может быть одним из):\n"
 
-#: builtin/remote.c:1195
+#: builtin/remote.c:1277
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
@@ -16682,11 +18901,11 @@
 msgstr[2] "  Внешние ветки:%s"
 msgstr[3] "  Внешние ветки:%s"
 
-#: builtin/remote.c:1198 builtin/remote.c:1224
+#: builtin/remote.c:1280 builtin/remote.c:1306
 msgid " (status not queried)"
 msgstr " (статус не запрашивался)"
 
-#: builtin/remote.c:1207
+#: builtin/remote.c:1289
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Локальная ветка, настроенная для «git pull»:"
@@ -16694,11 +18913,11 @@
 msgstr[2] "  Локальные ветки, настроенные для «git pull»:"
 msgstr[3] "  Локальные ветки, настроенные для «git pull»:"
 
-#: builtin/remote.c:1215
+#: builtin/remote.c:1297
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr " Локальные ссылки, зеркалируемые с помощью «git push»"
 
-#: builtin/remote.c:1221
+#: builtin/remote.c:1303
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
@@ -16707,266 +18926,250 @@
 msgstr[2] "  Локальные ссылки, настроенные для «git push»%s:"
 msgstr[3] "  Локальные ссылки, настроенные для «git push»%s:"
 
-#: builtin/remote.c:1242
+#: builtin/remote.c:1324
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "установить refs/remotes/<имя>/HEAD в зависимости от внешнего репозитория"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1326
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "удалить refs/remotes/<имя>/HEAD"
 
-#: builtin/remote.c:1259
+#: builtin/remote.c:1341
 msgid "Cannot determine remote HEAD"
 msgstr "Не удалось определить внешний HEAD"
 
-#: builtin/remote.c:1261
+#: builtin/remote.c:1343
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Несколько внешних HEAD веток. Укажите явно одну из них:"
 
-#: builtin/remote.c:1271
+#: builtin/remote.c:1353
 #, c-format
 msgid "Could not delete %s"
 msgstr "Не удалось удалить %s"
 
-#: builtin/remote.c:1279
+#: builtin/remote.c:1361
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Недопустимая ссылка: %s"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1363
 #, c-format
 msgid "Could not setup %s"
 msgstr "Не удалось настроить %s"
 
-#: builtin/remote.c:1299
+#: builtin/remote.c:1381
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s будет висящей веткой!"
 
-#: builtin/remote.c:1300
+#: builtin/remote.c:1382
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s стала висящей веткой!"
 
-#: builtin/remote.c:1310
+#: builtin/remote.c:1392
 #, c-format
 msgid "Pruning %s"
 msgstr "Очистка %s"
 
-#: builtin/remote.c:1311
+#: builtin/remote.c:1393
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1327
+#: builtin/remote.c:1409
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [будет удалена] %s"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1412
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [удалена] %s"
 
-#: builtin/remote.c:1375
+#: builtin/remote.c:1457
 msgid "prune remotes after fetching"
 msgstr "почистить внешние репозитории после извлечения"
 
-#: builtin/remote.c:1438 builtin/remote.c:1492 builtin/remote.c:1560
+#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Нет такого внешнего репозитория «%s»"
 
-#: builtin/remote.c:1454
+#: builtin/remote.c:1539
 msgid "add branch"
 msgstr "добавить ветку"
 
-#: builtin/remote.c:1461
+#: builtin/remote.c:1546
 msgid "no remote specified"
 msgstr "не указан внешний репозиторий"
 
-#: builtin/remote.c:1478
+#: builtin/remote.c:1563
 msgid "query push URLs rather than fetch URLs"
 msgstr "запросить URL отправки, вместо URL извлечения"
 
-#: builtin/remote.c:1480
+#: builtin/remote.c:1565
 msgid "return all URLs"
 msgstr "вернуть все URL"
 
-#: builtin/remote.c:1508
+#: builtin/remote.c:1595
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "URL не настроены для внешнего репозитория «%s»"
 
-#: builtin/remote.c:1534
+#: builtin/remote.c:1621
 msgid "manipulate push URLs"
 msgstr "управление URL отправки"
 
-#: builtin/remote.c:1536
+#: builtin/remote.c:1623
 msgid "add URL"
 msgstr "добавить URL"
 
-#: builtin/remote.c:1538
+#: builtin/remote.c:1625
 msgid "delete URLs"
 msgstr "удалить URL"
 
-#: builtin/remote.c:1545
+#: builtin/remote.c:1632
 msgid "--add --delete doesn't make sense"
 msgstr "--add нельзя использовать одновременно с --delete"
 
-#: builtin/remote.c:1584
+#: builtin/remote.c:1673
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Неправильный шаблон старого URL: %s"
 
-#: builtin/remote.c:1592
+#: builtin/remote.c:1681
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Не найдены совпадения URL: %s"
 
-#: builtin/remote.c:1594
+#: builtin/remote.c:1683
 msgid "Will not delete all non-push URLs"
 msgstr "Нельзя удалить все URL не-отправки"
 
-#: builtin/remote.c:1610
-msgid "be verbose; must be placed before a subcommand"
-msgstr "быть многословнее; должно стоять перед подкомандой"
-
-#: builtin/remote.c:1641
-#, c-format
-msgid "Unknown subcommand: %s"
-msgstr "Неизвестная подкоманда: %s"
-
-#: builtin/repack.c:22
+#: builtin/repack.c:25
 msgid "git repack [<options>]"
 msgstr "git repack [<опции>]"
 
-#: builtin/repack.c:27
+#: builtin/repack.c:30
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr "Инкрементальные перепаковки не совместимы с индексами в битовых картах.  Используйте опцию --no-write-bitmap-index или отключите параметр конфигурации pack.writebitmaps."
 
-#: builtin/repack.c:200
+#: builtin/repack.c:197
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:239 builtin/repack.c:414
+#: builtin/repack.c:268 builtin/repack.c:447
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 
-#: builtin/repack.c:256
+#: builtin/repack.c:295
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:294
+#: builtin/repack.c:323
 msgid "pack everything in a single pack"
 msgstr "упаковать всё в один пакет"
 
-#: builtin/repack.c:296
+#: builtin/repack.c:325
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "тоже, что и -a, но дополнительно отбросить недостижимые объекты"
 
-#: builtin/repack.c:299
+#: builtin/repack.c:328
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "удалите лишние пакеты и запустите git-prune-packed"
 
-#: builtin/repack.c:301
+#: builtin/repack.c:330
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "передать опцию --no-reuse-delta в git-pack-objects"
 
-#: builtin/repack.c:303
+#: builtin/repack.c:332
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "передать опцию --no-reuse-object в git-pack-objects"
 
-#: builtin/repack.c:305
+#: builtin/repack.c:334
 msgid "do not run git-update-server-info"
 msgstr "не запускать git-update-server-info"
 
-#: builtin/repack.c:308
+#: builtin/repack.c:337
 msgid "pass --local to git-pack-objects"
 msgstr "передать опцию --local в git-pack-objects"
 
-#: builtin/repack.c:310
+#: builtin/repack.c:339
 msgid "write bitmap index"
 msgstr "запись индекса в битовых картах"
 
-#: builtin/repack.c:312
+#: builtin/repack.c:341
 msgid "pass --delta-islands to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:313
+#: builtin/repack.c:342
 msgid "approxidate"
 msgstr "примерная-дата"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:343
 msgid "with -A, do not loosen objects older than this"
 msgstr "с опцией -A, не отбрасывать объекты старее, чем указано"
 
-#: builtin/repack.c:316
+#: builtin/repack.c:345
 msgid "with -a, repack unreachable objects"
 msgstr "с параметром -a, перепаковать недоступные объекты"
 
-#: builtin/repack.c:318
+#: builtin/repack.c:347
 msgid "size of the window used for delta compression"
 msgstr "размер окна, используемый для компрессии дельт"
 
-#: builtin/repack.c:319 builtin/repack.c:325
+#: builtin/repack.c:348 builtin/repack.c:354
 msgid "bytes"
 msgstr "количество-байт"
 
-#: builtin/repack.c:320
+#: builtin/repack.c:349
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "тоже, что и выше, но ограничить размер памяти, а не количество записей"
 
-#: builtin/repack.c:322
+#: builtin/repack.c:351
 msgid "limits the maximum delta depth"
 msgstr "ограничение на максимальную глубину дельт"
 
-#: builtin/repack.c:324
+#: builtin/repack.c:353
 msgid "limits the maximum number of threads"
 msgstr "ограничение на максимальное количество потоков"
 
-#: builtin/repack.c:326
+#: builtin/repack.c:355
 msgid "maximum size of each packfile"
 msgstr "максимальный размер каждого из файлов пакета"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:357
 msgid "repack objects in packs marked with .keep"
 msgstr "переупаковать объекты в пакеты, помеченные файлом .keep"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:359
 msgid "do not repack this pack"
 msgstr ""
 
-#: builtin/repack.c:340
+#: builtin/repack.c:369
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "нельзя удалять пакеты в precious-objects репозитории"
 
-#: builtin/repack.c:344
+#: builtin/repack.c:373
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable и -A нельзя использовать одновременно"
 
-#: builtin/repack.c:423
+#: builtin/repack.c:456
 msgid "Nothing new to pack."
 msgstr ""
 
-#: builtin/repack.c:484
+#: builtin/repack.c:486
 #, c-format
-msgid ""
-"WARNING: Some packs in use have been renamed by\n"
-"WARNING: prefixing old- to their name, in order to\n"
-"WARNING: replace them with the new version of the\n"
-"WARNING: file.  But the operation failed, and the\n"
-"WARNING: attempt to rename them back to their\n"
-"WARNING: original names also failed.\n"
-"WARNING: Please rename them in %s manually:\n"
+msgid "missing required file: %s"
 msgstr ""
 
-#: builtin/repack.c:532
+#: builtin/repack.c:488
 #, c-format
-msgid "failed to remove '%s'"
-msgstr "сбой удаления «%s»"
+msgid "could not unlink: %s"
+msgstr ""
 
 #: builtin/replace.c:22
 msgid "git replace [-f] <object> <replacement>"
@@ -17066,8 +19269,8 @@
 msgid "unable to write object to database"
 msgstr ""
 
-#: builtin/replace.c:322 builtin/replace.c:377 builtin/replace.c:422
-#: builtin/replace.c:452
+#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:424
+#: builtin/replace.c:454
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr ""
@@ -17086,124 +19289,124 @@
 msgid "new object is the same as the old one: '%s'"
 msgstr ""
 
-#: builtin/replace.c:383
+#: builtin/replace.c:384
 #, c-format
 msgid "could not parse %s as a commit"
 msgstr ""
 
-#: builtin/replace.c:414
+#: builtin/replace.c:416
 #, c-format
 msgid "bad mergetag in commit '%s'"
 msgstr "плохая метка слияния в коммите «%s»"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:418
 #, c-format
 msgid "malformed mergetag in commit '%s'"
 msgstr "повреждённая метка слияния в коммите «%s»"
 
-#: builtin/replace.c:428
+#: builtin/replace.c:430
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
 "instead of --graft"
 msgstr "оригинальный коммит «%s» содержит метку слияния «%s», которая была отброшена; используйте --edit вместо --graft"
 
-#: builtin/replace.c:467
+#: builtin/replace.c:469
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
 msgstr ""
 
-#: builtin/replace.c:468
+#: builtin/replace.c:470
 msgid "the signature will be removed in the replacement commit!"
 msgstr "подпись будет удалена в замененном коммите!"
 
-#: builtin/replace.c:478
+#: builtin/replace.c:480
 #, c-format
 msgid "could not write replacement commit for: '%s'"
 msgstr "не удалось записать замену для коммита: «%s»"
 
-#: builtin/replace.c:486
+#: builtin/replace.c:488
 #, c-format
 msgid "graft for '%s' unnecessary"
 msgstr ""
 
-#: builtin/replace.c:490
+#: builtin/replace.c:492
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr ""
 
-#: builtin/replace.c:525
+#: builtin/replace.c:527
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
 "%s"
 msgstr ""
 
-#: builtin/replace.c:546
+#: builtin/replace.c:548
 msgid "list replace refs"
 msgstr "вывести список заменяемых ссылок"
 
-#: builtin/replace.c:547
+#: builtin/replace.c:549
 msgid "delete replace refs"
 msgstr "удаление заменяемых ссылок"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:550
 msgid "edit existing object"
 msgstr "изменение существующего объекта"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:551
 msgid "change a commit's parents"
 msgstr "изменение родителя коммита"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:552
 msgid "convert existing graft file"
 msgstr ""
 
-#: builtin/replace.c:551
+#: builtin/replace.c:553
 msgid "replace the ref if it exists"
 msgstr "замена ссылки, если она существует"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:555
 msgid "do not pretty-print contents for --edit"
 msgstr "не делать структурированный вывод содержимого для --edit"
 
-#: builtin/replace.c:554
+#: builtin/replace.c:556
 msgid "use this format"
 msgstr "использовать этот формат"
 
-#: builtin/replace.c:567
+#: builtin/replace.c:569
 msgid "--format cannot be used when not listing"
 msgstr ""
 
-#: builtin/replace.c:575
+#: builtin/replace.c:577
 msgid "-f only makes sense when writing a replacement"
 msgstr ""
 
-#: builtin/replace.c:579
+#: builtin/replace.c:581
 msgid "--raw only makes sense with --edit"
 msgstr ""
 
-#: builtin/replace.c:585
+#: builtin/replace.c:587
 msgid "-d needs at least one argument"
 msgstr ""
 
-#: builtin/replace.c:591
+#: builtin/replace.c:593
 msgid "bad number of arguments"
 msgstr ""
 
-#: builtin/replace.c:597
+#: builtin/replace.c:599
 msgid "-e needs exactly one argument"
 msgstr ""
 
-#: builtin/replace.c:603
+#: builtin/replace.c:605
 msgid "-g needs at least one argument"
 msgstr ""
 
-#: builtin/replace.c:609
+#: builtin/replace.c:611
 msgid "--convert-graft-file takes no argument"
 msgstr ""
 
-#: builtin/replace.c:615
+#: builtin/replace.c:617
 msgid "only one pattern can be given with -l"
 msgstr ""
 
@@ -17230,113 +19433,123 @@
 msgstr "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<коммит>]"
 
 #: builtin/reset.c:33
-msgid "git reset [-q] [<tree-ish>] [--] <paths>..."
-msgstr "git reset [-q] [<указатель-дерева>] [--] <пути>…"
+msgid "git reset [-q] [<tree-ish>] [--] <pathspec>..."
+msgstr ""
 
 #: builtin/reset.c:34
-msgid "git reset --patch [<tree-ish>] [--] [<paths>...]"
-msgstr "git reset --patch [<указатель-дерева>] [--] [<пути>…]"
+msgid ""
+"git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"
+msgstr ""
 
-#: builtin/reset.c:40
+#: builtin/reset.c:35
+msgid "git reset --patch [<tree-ish>] [--] [<pathspec>...]"
+msgstr ""
+
+#: builtin/reset.c:41
 msgid "mixed"
 msgstr "смешанный"
 
-#: builtin/reset.c:40
+#: builtin/reset.c:41
 msgid "soft"
 msgstr "мягкий"
 
-#: builtin/reset.c:40
+#: builtin/reset.c:41
 msgid "hard"
 msgstr "жесткий"
 
-#: builtin/reset.c:40
+#: builtin/reset.c:41
 msgid "merge"
 msgstr "слиянием"
 
-#: builtin/reset.c:40
+#: builtin/reset.c:41
 msgid "keep"
 msgstr "оставлением"
 
-#: builtin/reset.c:81
+#: builtin/reset.c:83
 msgid "You do not have a valid HEAD."
 msgstr "У вас нет верного HEAD."
 
-#: builtin/reset.c:83
+#: builtin/reset.c:85
 msgid "Failed to find tree of HEAD."
 msgstr "Не удалось найти дерево у HEAD."
 
-#: builtin/reset.c:89
+#: builtin/reset.c:91
 #, c-format
 msgid "Failed to find tree of %s."
 msgstr "Не удалось найти дерево у %s."
 
-#: builtin/reset.c:193
+#: builtin/reset.c:116
+#, c-format
+msgid "HEAD is now at %s"
+msgstr "HEAD сейчас на %s"
+
+#: builtin/reset.c:195
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Нельзя выполнить сброс в режиме «%s» во время слияния."
 
-#: builtin/reset.c:293 builtin/stash.c:514 builtin/stash.c:589
-#: builtin/stash.c:613
+#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
+#: builtin/stash.c:618
 msgid "be quiet, only report errors"
 msgstr "тихий режим, выводить только ошибки"
 
-#: builtin/reset.c:295
+#: builtin/reset.c:297
 msgid "reset HEAD and index"
 msgstr "сбросить HEAD и индекс"
 
-#: builtin/reset.c:296
+#: builtin/reset.c:298
 msgid "reset only HEAD"
 msgstr "сбросить только HEAD"
 
-#: builtin/reset.c:298 builtin/reset.c:300
+#: builtin/reset.c:300 builtin/reset.c:302
 msgid "reset HEAD, index and working tree"
 msgstr "сбросить HEAD, индекс и рабочий каталог"
 
-#: builtin/reset.c:302
+#: builtin/reset.c:304
 msgid "reset HEAD but keep local changes"
 msgstr "сбросить HEAD, но оставить локальные изменения"
 
-#: builtin/reset.c:308
+#: builtin/reset.c:310
 msgid "record only the fact that removed paths will be added later"
 msgstr "записать только факт того, что удаленные пути будут добавлены позже"
 
-#: builtin/reset.c:326
+#: builtin/reset.c:344
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Не удалось распознать «%s» как действительную редакцию."
 
-#: builtin/reset.c:334
+#: builtin/reset.c:352
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Не удалось распознать «%s» как действительное дерево."
 
-#: builtin/reset.c:343
+#: builtin/reset.c:361
 msgid "--patch is incompatible with --{hard,mixed,soft}"
 msgstr "--patch нельзя использовать одновременно с --{hard,mixed,soft}"
 
-#: builtin/reset.c:353
+#: builtin/reset.c:371
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr "использование опции --mixed с путями устарело; используйте «git reset -- <пути>» instead."
 
-#: builtin/reset.c:355
+#: builtin/reset.c:373
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Нельзя выполнить сброс в режиме «%s» вместе с указанием пути."
 
-#: builtin/reset.c:370
+#: builtin/reset.c:388
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "сброс «%s» разрешен только с голым репозиторием"
 
-#: builtin/reset.c:374
+#: builtin/reset.c:392
 msgid "-N can only be used with --mixed"
 msgstr "-N можно использовать вместе с --mixed"
 
-#: builtin/reset.c:395
+#: builtin/reset.c:413
 msgid "Unstaged changes after reset:"
 msgstr "Непроиндексированные изменения после сброса:"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:416
 #, c-format
 msgid ""
 "\n"
@@ -17345,53 +19558,48 @@
 "to make this the default.\n"
 msgstr ""
 
-#: builtin/reset.c:408
+#: builtin/reset.c:434
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Не удалось сбросить файл индекса на редакцию «%s»."
 
-#: builtin/reset.c:412
+#: builtin/reset.c:439
 msgid "Could not write new index file."
 msgstr "Не удалось записать новый файл индекса."
 
-#: builtin/rev-list.c:405
+#: builtin/rev-list.c:499
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr ""
 
-#: builtin/rev-list.c:466
+#: builtin/rev-list.c:560
 msgid "object filtering requires --objects"
 msgstr "фильтрация объектов требует указания параметра --objects"
 
-#: builtin/rev-list.c:469
-#, c-format
-msgid "invalid sparse value '%s'"
-msgstr "недопустимое частичное значение «%s»"
-
-#: builtin/rev-list.c:510
+#: builtin/rev-list.c:610
 msgid "rev-list does not support display of notes"
 msgstr "rev-list не поддерживает отображение заметок"
 
-#: builtin/rev-list.c:513
-msgid "cannot combine --use-bitmap-index with object filtering"
-msgstr "нельзя использовать --use-bitmap-index одновременно с фильтрацией объектов"
+#: builtin/rev-list.c:615
+msgid "marked counting is incompatible with --objects"
+msgstr ""
 
-#: builtin/rev-parse.c:408
+#: builtin/rev-parse.c:409
 msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
 msgstr "git rev-parse --parseopt [<опции>] -- [<аргументы>…]"
 
-#: builtin/rev-parse.c:413
+#: builtin/rev-parse.c:414
 msgid "keep the `--` passed as an arg"
 msgstr "передавать далее «--» как аргумент"
 
-#: builtin/rev-parse.c:415
+#: builtin/rev-parse.c:416
 msgid "stop parsing after the first non-option argument"
 msgstr "остановить разбор после первого аргумента не являющегося опцией"
 
-#: builtin/rev-parse.c:418
+#: builtin/rev-parse.c:419
 msgid "output in stuck long form"
 msgstr "выводить аргументы в длинном формате"
 
-#: builtin/rev-parse.c:551
+#: builtin/rev-parse.c:552
 msgid ""
 "git rev-parse --parseopt [<options>] -- [<args>...]\n"
 "   or: git rev-parse --sq-quote [<arg>...]\n"
@@ -17438,47 +19646,51 @@
 msgid "cancel revert or cherry-pick sequence"
 msgstr "отмена последовательности копирования или обращения изменений коммитов"
 
-#: builtin/revert.c:106
+#: builtin/revert.c:105
+msgid "skip current commit and continue"
+msgstr ""
+
+#: builtin/revert.c:107
 msgid "don't automatically commit"
 msgstr "не коммитить автоматически"
 
-#: builtin/revert.c:107
+#: builtin/revert.c:108
 msgid "edit the commit message"
 msgstr "изменить сообщение коммита"
 
-#: builtin/revert.c:110
+#: builtin/revert.c:111
 msgid "parent-number"
 msgstr "номер-родителя"
 
-#: builtin/revert.c:111
+#: builtin/revert.c:112
 msgid "select mainline parent"
 msgstr "выбор основного родителя"
 
-#: builtin/revert.c:113
+#: builtin/revert.c:114
 msgid "merge strategy"
 msgstr "стратегия слияния"
 
-#: builtin/revert.c:115
+#: builtin/revert.c:116
 msgid "option for merge strategy"
 msgstr "опция для стратегии слияния"
 
-#: builtin/revert.c:124
+#: builtin/revert.c:125
 msgid "append commit name"
 msgstr "добавить имя коммита"
 
-#: builtin/revert.c:126
+#: builtin/revert.c:127
 msgid "preserve initially empty commits"
 msgstr "сохранить изначально пустые коммиты"
 
-#: builtin/revert.c:128
+#: builtin/revert.c:129
 msgid "keep redundant, empty commits"
 msgstr "оставить избыточные, пустые коммиты"
 
-#: builtin/revert.c:227
+#: builtin/revert.c:239
 msgid "revert failed"
 msgstr "сбой обращения изменений коммита"
 
-#: builtin/revert.c:240
+#: builtin/revert.c:252
 msgid "cherry-pick failed"
 msgstr "сбой при копировании коммита"
 
@@ -17526,36 +19738,40 @@
 msgstr[2] "следующие файлы содержат локальные изменения:"
 msgstr[3] "следующие файлы содержат локальные изменения:"
 
-#: builtin/rm.c:242
+#: builtin/rm.c:243
 msgid "do not list removed files"
 msgstr "не выводить список удаленных файлов"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "only remove from the index"
 msgstr "удалить только из индекса"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "override the up-to-date check"
 msgstr "пропустить проверку актуальности"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "allow recursive removal"
 msgstr "разрешить рекурсивное удаление"
 
-#: builtin/rm.c:247
+#: builtin/rm.c:248
 msgid "exit with a zero status even if nothing matched"
 msgstr "выход с нулевым кодом возврата, даже если ничего не найдено"
 
-#: builtin/rm.c:289
+#: builtin/rm.c:282
+msgid "No pathspec was given. Which files should I remove?"
+msgstr ""
+
+#: builtin/rm.c:305
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 
-#: builtin/rm.c:307
+#: builtin/rm.c:323
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "не удаляю рекурсивно «%s» без указания опции -r"
 
-#: builtin/rm.c:346
+#: builtin/rm.c:362
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: не удалось удалить %s"
@@ -17566,55 +19782,76 @@
 "  --all and explicit <ref> specification are mutually exclusive."
 msgstr "git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] [<сервер>:]<каталог> [<ссылка>…]\n  --all и явный спецификатор <ссылки> взаимно исключающие."
 
-#: builtin/send-pack.c:163
+#: builtin/send-pack.c:188
 msgid "remote name"
 msgstr "имя внешнего репозитория"
 
-#: builtin/send-pack.c:177
+#: builtin/send-pack.c:201
 msgid "use stateless RPC protocol"
 msgstr "протокол без сохранения состояния для RPC"
 
-#: builtin/send-pack.c:178
+#: builtin/send-pack.c:202
 msgid "read refs from stdin"
 msgstr "прочитать ссылки из стандартного ввода"
 
-#: builtin/send-pack.c:179
+#: builtin/send-pack.c:203
 msgid "print status from remote helper"
 msgstr "вывести статус от скрипта внешнего сервера"
 
-#: builtin/shortlog.c:14
+#: builtin/shortlog.c:16
 msgid "git shortlog [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git shortlog [<опции>] [<диапазон-редакций>] [[--] <путь>…]"
 
-#: builtin/shortlog.c:15
+#: builtin/shortlog.c:17
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<опции>]"
 
-#: builtin/shortlog.c:264
+#: builtin/shortlog.c:135
+msgid "using multiple --group options with stdin is not supported"
+msgstr ""
+
+#: builtin/shortlog.c:145
+msgid "using --group=trailer with stdin is not supported"
+msgstr ""
+
+#: builtin/shortlog.c:335
+#, c-format
+msgid "unknown group type: %s"
+msgstr ""
+
+#: builtin/shortlog.c:363
 msgid "Group by committer rather than author"
 msgstr "Группировать по коммитеру, а не по автору"
 
-#: builtin/shortlog.c:266
+#: builtin/shortlog.c:366
 msgid "sort output according to the number of commits per author"
 msgstr "отсортировать вывод по количеству коммитов у автора"
 
-#: builtin/shortlog.c:268
+#: builtin/shortlog.c:368
 msgid "Suppress commit descriptions, only provides commit count"
 msgstr "Не выводить описания коммитов, а только их количество"
 
-#: builtin/shortlog.c:270
+#: builtin/shortlog.c:370
 msgid "Show the email address of each author"
 msgstr "Показать почту каждого из авторов"
 
-#: builtin/shortlog.c:271
+#: builtin/shortlog.c:371
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:272
+#: builtin/shortlog.c:372
 msgid "Linewrap output"
 msgstr "Перенос строк на выводе"
 
-#: builtin/shortlog.c:301
+#: builtin/shortlog.c:374
+msgid "field"
+msgstr ""
+
+#: builtin/shortlog.c:375
+msgid "Group by field"
+msgstr ""
+
+#: builtin/shortlog.c:403
 msgid "too many arguments given outside repository"
 msgstr ""
 
@@ -17639,90 +19876,90 @@
 msgstr[2] "игнорирование %s; невозможно обработать больше %d ссылок"
 msgstr[3] "игнорирование %s; невозможно обработать больше %d ссылки"
 
-#: builtin/show-branch.c:549
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "нет совпадающих записей с %s"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "показать список и отслеживаемых внешних и локальных веток"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "показать список отслеживаемых внешних веток"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "окрашивать «*!+-» в соответствии с веткой"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "показать <n> коммитов после общего предка"
 
-#: builtin/show-branch.c:654
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "синоним для more=-1"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "не выводить именованные строки"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "включить в вывод текущую ветку"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "именовать коммиты их именами объектов"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "вывести возможные базы слияния"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "вывести ссылки, недоступные из любых других ссылок"
 
-#: builtin/show-branch.c:665
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "вывести коммиты в топологическом порядке"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "вывести только коммиты, отсутствующие в первой ветке"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "вывести слияния, достижимые только из одной из верхушек"
 
-#: builtin/show-branch.c:672
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "топологическая сортировка, с сохранением порядка дат, если возможно"
 
-#: builtin/show-branch.c:675
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<база>]"
 
-#: builtin/show-branch.c:676
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "показать <n> последних записей в журнале ссылок, начиная с базы"
 
-#: builtin/show-branch.c:712
+#: builtin/show-branch.c:711
 msgid ""
 "--reflog is incompatible with --all, --remotes, --independent or --merge-"
 "base"
 msgstr "--reflog несовместимо с --all, --remotes, --independent и --merge-base"
 
-#: builtin/show-branch.c:736
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "не указаны ветки и HEAD не действительный"
 
-#: builtin/show-branch.c:739
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "параметр --reflog требует указания имени одной ветки"
 
-#: builtin/show-branch.c:742
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
@@ -17731,12 +19968,12 @@
 msgstr[2] "только %d записей могут быть показаны одновременно."
 msgstr[3] "только %d записи могут быть показаны одновременно."
 
-#: builtin/show-branch.c:746
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "нет такой ссылки %s"
 
-#: builtin/show-branch.c:832
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
@@ -17745,16 +19982,24 @@
 msgstr[2] "невозможно обработать больше %d редакций."
 msgstr[3] "невозможно обработать больше %d редакции."
 
-#: builtin/show-branch.c:836
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "«%s» не является допустимой ссылкой на коммит."
 
-#: builtin/show-branch.c:839
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "не удалось найти коммит %s (%s)"
 
+#: builtin/show-index.c:21
+msgid "hash-algorithm"
+msgstr ""
+
+#: builtin/show-index.c:31
+msgid "Unknown hash algorithm"
+msgstr ""
+
 #: builtin/show-ref.c:12
 msgid ""
 "git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | "
@@ -17787,7 +20032,7 @@
 
 #: builtin/show-ref.c:173
 msgid "only show SHA1 hash using <n> digits"
-msgstr "использовать <n> символов для вывода SHA-1 хеш-суммы"
+msgstr "использовать <n> символов для вывода хэш-кода SHA-1"
 
 #: builtin/show-ref.c:177
 msgid "do not print results to stdout (useful with --verify)"
@@ -17797,15 +20042,86 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "вывести ссылки со стандартного ввода, которых нет в локальном репозитории"
 
-#: builtin/stash.c:22 builtin/stash.c:37
+#: builtin/sparse-checkout.c:21
+msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
+msgstr ""
+
+#: builtin/sparse-checkout.c:50
+msgid "git sparse-checkout list"
+msgstr ""
+
+#: builtin/sparse-checkout.c:76
+msgid "this worktree is not sparse (sparse-checkout file may not exist)"
+msgstr ""
+
+#: builtin/sparse-checkout.c:228
+msgid "failed to create directory for sparse-checkout file"
+msgstr ""
+
+#: builtin/sparse-checkout.c:269
+msgid "unable to upgrade repository format to enable worktreeConfig"
+msgstr ""
+
+#: builtin/sparse-checkout.c:271
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr ""
+
+#: builtin/sparse-checkout.c:288
+msgid "git sparse-checkout init [--cone]"
+msgstr ""
+
+#: builtin/sparse-checkout.c:307
+msgid "initialize the sparse-checkout in cone mode"
+msgstr ""
+
+#: builtin/sparse-checkout.c:344
+#, c-format
+msgid "failed to open '%s'"
+msgstr "не удалось открыть «%s»"
+
+#: builtin/sparse-checkout.c:401
+#, c-format
+msgid "could not normalize path %s"
+msgstr ""
+
+#: builtin/sparse-checkout.c:413
+msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
+msgstr ""
+
+#: builtin/sparse-checkout.c:438
+#, c-format
+msgid "unable to unquote C-style string '%s'"
+msgstr ""
+
+#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+msgid "unable to load existing sparse-checkout patterns"
+msgstr ""
+
+#: builtin/sparse-checkout.c:561
+msgid "read patterns from standard in"
+msgstr ""
+
+#: builtin/sparse-checkout.c:576
+msgid "git sparse-checkout reapply"
+msgstr ""
+
+#: builtin/sparse-checkout.c:595
+msgid "git sparse-checkout disable"
+msgstr ""
+
+#: builtin/sparse-checkout.c:623
+msgid "error while refreshing working directory"
+msgstr ""
+
+#: builtin/stash.c:22 builtin/stash.c:38
 msgid "git stash list [<options>]"
 msgstr "git stash list [<опции>]"
 
-#: builtin/stash.c:23 builtin/stash.c:42
+#: builtin/stash.c:23 builtin/stash.c:43
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<опциии>] [<спрятанные-изменения>]"
 
-#: builtin/stash.c:24 builtin/stash.c:47
+#: builtin/stash.c:24 builtin/stash.c:48
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<спрятанные-изменения>]"
 
@@ -17813,209 +20129,217 @@
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<спрятанные-изменения>]"
 
-#: builtin/stash.c:26 builtin/stash.c:62
+#: builtin/stash.c:26 builtin/stash.c:63
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <имя-ветки> [<спрятанные-изменения>]"
 
-#: builtin/stash.c:27 builtin/stash.c:67
+#: builtin/stash.c:27 builtin/stash.c:68
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28 builtin/stash.c:77
+#: builtin/stash.c:28
+msgid ""
+"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
+"          [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
+"          [--] [<pathspec>...]]"
+msgstr ""
+
+#: builtin/stash.c:32 builtin/stash.c:85
+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:53
+msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
+msgstr "git stash pop [--index] [-q|--quiet] [<спрятанные-изменения>]"
+
+#: builtin/stash.c:58
+msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
+msgstr "git stash apply [--index] [-q|--quiet] [<спрятанные-изменения>]"
+
+#: builtin/stash.c:73
+msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
+msgstr "git stash store [-m|--message <сообщение>] [-q|--quiet] <коммит>"
+
+#: builtin/stash.c:78
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
 "          [--] [<pathspec>...]]"
 msgstr "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n          [-u|--include-untracked] [-a|--all] [-m|--message <сообщение>]\n          [--] [<спецификатор-пути>…]]"
 
-#: builtin/stash.c:31 builtin/stash.c:84
-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:52
-msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
-msgstr "git stash pop [--index] [-q|--quiet] [<спрятанные-изменения>]"
-
-#: builtin/stash.c:57
-msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
-msgstr "git stash apply [--index] [-q|--quiet] [<спрятанные-изменения>]"
-
-#: builtin/stash.c:72
-msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
-msgstr "git stash store [-m|--message <сообщение>] [-q|--quiet] <коммит>"
-
-#: builtin/stash.c:127
+#: builtin/stash.c:128
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "«%s» не является коммитом со спрятанными изменениями"
 
-#: builtin/stash.c:147
+#: builtin/stash.c:148
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Передано слишком много редакций:%s"
 
-#: builtin/stash.c:161 git-legacy-stash.sh:548
+#: builtin/stash.c:162
 msgid "No stash entries found."
 msgstr "Не найдены спрятанные изменения."
 
-#: builtin/stash.c:175
+#: builtin/stash.c:176
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s не является допустимой ссылкой на коммит"
 
-#: builtin/stash.c:224 git-legacy-stash.sh:75
+#: builtin/stash.c:225
 msgid "git stash clear with parameters is unimplemented"
 msgstr "git stash очистка с параметрами не реализована"
 
-#: builtin/stash.c:403
+#: builtin/stash.c:404
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "нельзя применить спрятанные изменения во время выполнения слияния"
 
-#: builtin/stash.c:414
+#: builtin/stash.c:415
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "не удалось сгенерировать список изменений %s^!."
 
-#: builtin/stash.c:421
-msgid "conflicts in index.Try without --index."
-msgstr "конфликты в индексе. Попробуйте без --index."
+#: builtin/stash.c:422
+msgid "conflicts in index. Try without --index."
+msgstr ""
 
-#: builtin/stash.c:427
+#: builtin/stash.c:428
 msgid "could not save index tree"
 msgstr "не удалось сохранить дерево индекса"
 
-#: builtin/stash.c:434
+#: builtin/stash.c:437
 msgid "could not restore untracked files from stash"
 msgstr "невозможно восстановить неотслеживаемые файлы из спрятанных файлов"
 
-#: builtin/stash.c:448
+#: builtin/stash.c:451
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Слияние %s и %s"
 
-#: builtin/stash.c:458 git-legacy-stash.sh:680
+#: builtin/stash.c:461
 msgid "Index was not unstashed."
 msgstr "Индекс не был извлечён из спрятанных изменений."
 
-#: builtin/stash.c:516 builtin/stash.c:615
+#: builtin/stash.c:522 builtin/stash.c:620
 msgid "attempt to recreate the index"
 msgstr "попытка пересоздания индекса"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:566
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Отброшено %s (%s)"
 
-#: builtin/stash.c:552
+#: builtin/stash.c:569
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Не удалось отбросить запись из спрятанных изменений"
 
-#: builtin/stash.c:577
+#: builtin/stash.c:582
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "«%s» не является ссылкой на спрятанные изменения"
 
-#: builtin/stash.c:627 git-legacy-stash.sh:694
+#: builtin/stash.c:632
 msgid "The stash entry is kept in case you need it again."
 msgstr "Спрятанные изменения сохранены, на случай если они снова вам понадобятся."
 
-#: builtin/stash.c:650 git-legacy-stash.sh:712
+#: builtin/stash.c:655
 msgid "No branch name specified"
 msgstr "Не указано имя ветки"
 
-#: builtin/stash.c:789 builtin/stash.c:826
+#: builtin/stash.c:799 builtin/stash.c:836
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Не удолось обновить %s с %s"
 
-#: builtin/stash.c:807 builtin/stash.c:1474 builtin/stash.c:1510
+#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
 msgid "stash message"
 msgstr "описание спрятанных изменений"
 
-#: builtin/stash.c:817
+#: builtin/stash.c:827
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "«git stash store» требует указания одного аргумента <коммит>"
 
-#: builtin/stash.c:1039 git-legacy-stash.sh:217
+#: builtin/stash.c:1042
 msgid "No changes selected"
 msgstr "Изменения не выбраны"
 
-#: builtin/stash.c:1135 git-legacy-stash.sh:150
+#: builtin/stash.c:1142
 msgid "You do not have the initial commit yet"
 msgstr "У вас еще нет начального коммита"
 
-#: builtin/stash.c:1162 git-legacy-stash.sh:165
+#: builtin/stash.c:1169
 msgid "Cannot save the current index state"
 msgstr "Не удалось сохранить текущее состояние индекса"
 
-#: builtin/stash.c:1171 git-legacy-stash.sh:180
+#: builtin/stash.c:1178
 msgid "Cannot save the untracked files"
 msgstr "Невозможно сохранить неотслеживаемые файлы"
 
-#: builtin/stash.c:1182 builtin/stash.c:1191 git-legacy-stash.sh:200
-#: git-legacy-stash.sh:213
+#: builtin/stash.c:1189 builtin/stash.c:1198
 msgid "Cannot save the current worktree state"
 msgstr "Не удалось сохранить текущее состояние рабочего каталога"
 
-#: builtin/stash.c:1219 git-legacy-stash.sh:233
+#: builtin/stash.c:1226
 msgid "Cannot record working tree state"
 msgstr "Не удалось записать состояние рабочего каталога"
 
-#: builtin/stash.c:1268 git-legacy-stash.sh:337
+#: builtin/stash.c:1275
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Нельзя использовать --patch и --include-untracked или --all одновременно"
 
-#: builtin/stash.c:1284
+#: builtin/stash.c:1291
 msgid "Did you forget to 'git add'?"
 msgstr "Возможно, вы забыли выполнить «git add»?"
 
-#: builtin/stash.c:1299 git-legacy-stash.sh:345
+#: builtin/stash.c:1306
 msgid "No local changes to save"
 msgstr "Нет локальных изменений для сохранения"
 
-#: builtin/stash.c:1306 git-legacy-stash.sh:350
+#: builtin/stash.c:1313
 msgid "Cannot initialize stash"
 msgstr "Не удалось инициализировать спрятанные изменения"
 
-#: builtin/stash.c:1321 git-legacy-stash.sh:354
+#: builtin/stash.c:1328
 msgid "Cannot save the current status"
 msgstr "Не удалось сохранить текущий статус"
 
-#: builtin/stash.c:1326
+#: builtin/stash.c:1333
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Рабочий каталог и состояние индекса сохранены %s"
 
-#: builtin/stash.c:1430 git-legacy-stash.sh:384
+#: builtin/stash.c:1423
 msgid "Cannot remove worktree changes"
 msgstr "Не удалось удалить изменения рабочего каталога"
 
-#: builtin/stash.c:1465 builtin/stash.c:1501
+#: builtin/stash.c:1462 builtin/stash.c:1527
 msgid "keep index"
 msgstr ""
 
-#: builtin/stash.c:1467 builtin/stash.c:1503
+#: builtin/stash.c:1464 builtin/stash.c:1529
 msgid "stash in patch mode"
 msgstr ""
 
-#: builtin/stash.c:1468 builtin/stash.c:1504
+#: builtin/stash.c:1465 builtin/stash.c:1530
 msgid "quiet mode"
 msgstr ""
 
-#: builtin/stash.c:1470 builtin/stash.c:1506
+#: builtin/stash.c:1467 builtin/stash.c:1532
 msgid "include untracked files in stash"
 msgstr ""
 
-#: builtin/stash.c:1472 builtin/stash.c:1508
+#: builtin/stash.c:1469 builtin/stash.c:1534
 msgid "include ignore files"
 msgstr ""
 
-#: builtin/stash.c:1568
-#, c-format
-msgid "could not exec %s"
+#: builtin/stash.c:1569
+msgid ""
+"the stash.useBuiltin support has been removed!\n"
+"See its entry in 'git help config' for details."
 msgstr ""
 
 #: builtin/stripspace.c:18
@@ -18034,393 +20358,502 @@
 msgid "prepend comment character and space to each line"
 msgstr "добавить перед каждой строкой символ комметария и пробел"
 
-#: builtin/submodule--helper.c:45 builtin/submodule--helper.c:1942
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Ожидалось полное имя ссылки, а получено %s"
 
-#: builtin/submodule--helper.c:62
+#: builtin/submodule--helper.c:64
 msgid "submodule--helper print-default-remote takes no arguments"
 msgstr ""
 
-#: builtin/submodule--helper.c:100
+#: builtin/submodule--helper.c:102
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "не удалось обрезать один компонент url «%s»"
 
-#: builtin/submodule--helper.c:408 builtin/submodule--helper.c:1367
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
 msgid "alternative anchor for relative paths"
 msgstr "альтернативный символ для относительных путей"
 
-#: builtin/submodule--helper.c:413
+#: builtin/submodule--helper.c:415
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<путь>] [<путь>…]"
 
-#: builtin/submodule--helper.c:470 builtin/submodule--helper.c:627
-#: builtin/submodule--helper.c:650
+#: 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 "URL для подмодуля по пути «%s» не найден в .gitmodules"
 
-#: builtin/submodule--helper.c:522
+#: builtin/submodule--helper.c:524
 #, c-format
 msgid "Entering '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:525
+#: builtin/submodule--helper.c:527
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:546
+#: builtin/submodule--helper.c:549
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested submodules of %s\n"
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:562
+#: builtin/submodule--helper.c:565
 msgid "Suppress output of entering each submodule command"
 msgstr ""
 
-#: builtin/submodule--helper.c:564 builtin/submodule--helper.c:1049
+#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
 msgid "Recurse into nested submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:569
+#: builtin/submodule--helper.c:572
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr ""
 
-#: builtin/submodule--helper.c:596
+#: builtin/submodule--helper.c:599
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr ""
 
-#: builtin/submodule--helper.c:664
+#: builtin/submodule--helper.c:666
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Сбой регистрации адреса для пути подмодуля «%s»"
 
-#: builtin/submodule--helper.c:668
+#: builtin/submodule--helper.c:670
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Подмодуль «%s» (%s) зарегистрирован по пути «%s»\n"
 
-#: builtin/submodule--helper.c:678
+#: builtin/submodule--helper.c:680
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "внимание: предполагаемый режим обновления для подмодуля «%s»\n"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:687
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "Сбой регистрации режима обновления для пути подмодуля «%s»"
 
-#: builtin/submodule--helper.c:707
+#: builtin/submodule--helper.c:709
 msgid "Suppress output for initializing a submodule"
 msgstr "Не выводить информацию о инициализации подмодуля"
 
-#: builtin/submodule--helper.c:712
+#: builtin/submodule--helper.c:714
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:784 builtin/submodule--helper.c:910
+#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "не найдено соответствие подмодулей в .gitmodules для пути «%s»"
 
-#: builtin/submodule--helper.c:823
+#: builtin/submodule--helper.c:835
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "не удалось найти HEAD ссылку внутри подмодуля «%s»"
 
-#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1019
+#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "не удалось перейти вглубь подмодуля «%s»"
 
-#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1185
+#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
 msgid "Suppress submodule status output"
 msgstr "Не выводить статус подмодуля"
 
-#: builtin/submodule--helper.c:875
+#: builtin/submodule--helper.c:887
 msgid ""
 "Use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr "Использовать коммит хранящийся в индексе вместо коммита хранящегося в HEAD подмодуля"
 
-#: builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:888
 msgid "recurse into nested submodules"
 msgstr "проходить вглубь вложенных подмодулей"
 
-#: builtin/submodule--helper.c:881
+#: builtin/submodule--helper.c:893
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<путь>…]"
 
-#: builtin/submodule--helper.c:905
+#: builtin/submodule--helper.c:917
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <путь>"
 
-#: builtin/submodule--helper.c:969
+#: builtin/submodule--helper.c:989
+#, c-format
+msgid "* %s %s(blob)->%s(submodule)"
+msgstr ""
+
+#: builtin/submodule--helper.c:992
+#, c-format
+msgid "* %s %s(submodule)->%s(blob)"
+msgstr ""
+
+#: builtin/submodule--helper.c:1005
+#, c-format
+msgid "%s"
+msgstr ""
+
+#: builtin/submodule--helper.c:1055
+#, c-format
+msgid "couldn't hash object from '%s'"
+msgstr ""
+
+#: builtin/submodule--helper.c:1059
+#, c-format
+msgid "unexpected mode %o\n"
+msgstr ""
+
+#: builtin/submodule--helper.c:1300
+msgid "use the commit stored in the index instead of the submodule HEAD"
+msgstr ""
+
+#: builtin/submodule--helper.c:1302
+msgid "to compare the commit in the index with that in the submodule HEAD"
+msgstr ""
+
+#: builtin/submodule--helper.c:1304
+msgid "skip submodules with 'ignore_config' value set to 'all'"
+msgstr ""
+
+#: builtin/submodule--helper.c:1306
+msgid "limit the summary size"
+msgstr ""
+
+#: builtin/submodule--helper.c:1311
+msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
+msgstr ""
+
+#: builtin/submodule--helper.c:1335
+msgid "could not fetch a revision for HEAD"
+msgstr ""
+
+#: builtin/submodule--helper.c:1340
+msgid "--cached and --files are mutually exclusive"
+msgstr ""
+
+#: builtin/submodule--helper.c:1407
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:975
+#: builtin/submodule--helper.c:1413
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:1427
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1000
+#: builtin/submodule--helper.c:1438
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1047
+#: builtin/submodule--helper.c:1485
 msgid "Suppress output of synchronizing submodule url"
 msgstr ""
 
-#: builtin/submodule--helper.c:1054
+#: builtin/submodule--helper.c:1492
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<путь>]"
 
-#: builtin/submodule--helper.c:1108
+#: builtin/submodule--helper.c:1546
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
 "really want to remove it including all of its history)"
 msgstr ""
 
-#: builtin/submodule--helper.c:1120
+#: builtin/submodule--helper.c:1558
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr ""
 
-#: builtin/submodule--helper.c:1128
+#: builtin/submodule--helper.c:1566
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1130
+#: builtin/submodule--helper.c:1568
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1141
+#: builtin/submodule--helper.c:1579
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1157
+#: builtin/submodule--helper.c:1595
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1186
+#: builtin/submodule--helper.c:1624
 msgid "Remove submodule working trees even if they contain local changes"
 msgstr ""
 
-#: builtin/submodule--helper.c:1187
+#: builtin/submodule--helper.c:1625
 msgid "Unregister all submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:1192
+#: builtin/submodule--helper.c:1630
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<путь>…]]"
 
-#: builtin/submodule--helper.c:1206
+#: builtin/submodule--helper.c:1644
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Используйте «--all», если вы действительно хотите деинициализировать все подмодули"
 
-#: builtin/submodule--helper.c:1301 builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1713
+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"
+"submodule.alternateErrorStrategy to 'info' or, equivalently, clone with\n"
+"'--reference-if-able' instead of '--reference'."
+msgstr ""
+
+#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "подмодулю «%s» не удалось добавить альтернативу: %s"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1791
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Значение «%s» для параметра submodule.alternateErrorStrategy не рапознано"
 
-#: builtin/submodule--helper.c:1347
+#: builtin/submodule--helper.c:1798
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Значение «%s» для параметра submodule.alternateLocation не рапознано"
 
-#: builtin/submodule--helper.c:1370
+#: builtin/submodule--helper.c:1822
 msgid "where the new submodule will be cloned to"
 msgstr "куда должен быть склонирован новый подмодуль"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1825
 msgid "name of the new submodule"
 msgstr "имя нового подмодуля"
 
-#: builtin/submodule--helper.c:1376
+#: builtin/submodule--helper.c:1828
 msgid "url where to clone the submodule from"
 msgstr "url откуда должен был склонирован новый подмодуль"
 
-#: builtin/submodule--helper.c:1384
+#: builtin/submodule--helper.c:1836
 msgid "depth for shallow clones"
 msgstr "глубина для частичного клона"
 
-#: builtin/submodule--helper.c:1387 builtin/submodule--helper.c:1871
+#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
 msgid "force cloning progress"
 msgstr "принудительно выводить прогресс клонирования"
 
-#: builtin/submodule--helper.c:1392
+#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+msgid "disallow cloning into non-empty directory"
+msgstr ""
+
+#: builtin/submodule--helper.c:1848
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] --url <url> --path <path>"
-msgstr "git submodule--helper clone [--prefix=<путь>] [--quiet] [--reference <репозиторий>] [--name <имя>] [--depth <глубина>] --url <url> --path <путь>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
+"<url> --path <path>"
+msgstr ""
 
-#: builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:1873
+#, c-format
+msgid "refusing to create/use '%s' in another submodule's git dir"
+msgstr ""
+
+#: builtin/submodule--helper.c:1884
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "не удалось клонировать «%s» в подмодуль по пути «%s»"
 
-#: builtin/submodule--helper.c:1437
+#: builtin/submodule--helper.c:1888
+#, c-format
+msgid "directory not empty: '%s'"
+msgstr ""
+
+#: builtin/submodule--helper.c:1900
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "не удалось получить каталог для подмодуля «%s»"
 
-#: builtin/submodule--helper.c:1473
+#: builtin/submodule--helper.c:1936
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1477
+#: builtin/submodule--helper.c:1940
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1570
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Подмодуль по пути «%s» не инициализирован"
 
-#: builtin/submodule--helper.c:1574
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Возможно, вы хотели использовать «update --init»?"
 
-#: builtin/submodule--helper.c:1604
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Пропуск не слитого подмодуля %s"
 
-#: builtin/submodule--helper.c:1633
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Пропуск подмодуля «%s»"
 
-#: builtin/submodule--helper.c:1777
+#: builtin/submodule--helper.c:2254
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Не удалось клонировать «%s». Запланирована повторная попытка"
 
-#: builtin/submodule--helper.c:1788
+#: builtin/submodule--helper.c:2265
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Не удалось клонировать «%s» со второй попытки, отмена"
 
-#: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:2092
+#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
 msgid "path into the working tree"
 msgstr "путь в рабочем каталоге"
 
-#: builtin/submodule--helper.c:1853
+#: builtin/submodule--helper.c:2330
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "путь в рабочем каталоге, в пределах границ подмодуля"
 
-#: builtin/submodule--helper.c:1857
+#: builtin/submodule--helper.c:2334
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout или none"
 
-#: builtin/submodule--helper.c:1863
+#: builtin/submodule--helper.c:2340
 msgid "Create a shallow clone truncated to the specified number of revisions"
 msgstr "Создать частичный клон, ограниченный указанным количеством редакций"
 
-#: builtin/submodule--helper.c:1866
+#: builtin/submodule--helper.c:2343
 msgid "parallel jobs"
 msgstr "параллельные задачи"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:2345
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "должен ли изначальный процесс клонирования следовать рекомендации о частичности"
 
-#: builtin/submodule--helper.c:1869
+#: builtin/submodule--helper.c:2346
 msgid "don't print cloning progress"
 msgstr "вы выводить прогресс клонирования"
 
-#: builtin/submodule--helper.c:1876
-msgid "git submodule--helper update_clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update_clone [--prefix=<путь>] [<путь>…]"
+#: builtin/submodule--helper.c:2357
+msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+msgstr ""
 
-#: builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2370
 msgid "bad value for update parameter"
 msgstr "плохое значение для параметра update"
 
-#: builtin/submodule--helper.c:1937
+#: builtin/submodule--helper.c:2418
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
 "the superproject is not on any branch"
 msgstr "Ветка подмодуля (%s) настроена на наследование ветки из родительского проекта, но он не находится ни на одной ветке"
 
-#: builtin/submodule--helper.c:2060
+#: builtin/submodule--helper.c:2541
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2093
+#: builtin/submodule--helper.c:2574
 msgid "recurse into submodules"
 msgstr "рекурсивно по подмодулям"
 
-#: builtin/submodule--helper.c:2099
+#: builtin/submodule--helper.c:2580
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<опции>] [<путь>…]"
 
-#: builtin/submodule--helper.c:2156
+#: builtin/submodule--helper.c:2636
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2159
+#: builtin/submodule--helper.c:2639
 msgid "unset the config in the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2164
+#: builtin/submodule--helper.c:2644
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <имя> [<значение>]"
 
-#: builtin/submodule--helper.c:2165
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <имя>"
 
-#: builtin/submodule--helper.c:2166
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2185 git-submodule.sh:171
+#: builtin/submodule--helper.c:2665 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:2235 git.c:433 git.c:685
+#: builtin/submodule--helper.c:2681
+msgid "Suppress output for setting url of a submodule"
+msgstr ""
+
+#: builtin/submodule--helper.c:2685
+msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
+msgstr ""
+
+#: builtin/submodule--helper.c:2718
+msgid "set the default tracking branch to master"
+msgstr ""
+
+#: builtin/submodule--helper.c:2720
+msgid "set the default tracking branch"
+msgstr ""
+
+#: builtin/submodule--helper.c:2724
+msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
+msgstr ""
+
+#: builtin/submodule--helper.c:2725
+msgid ""
+"git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
+msgstr ""
+
+#: builtin/submodule--helper.c:2732
+msgid "--branch or --default required"
+msgstr ""
+
+#: builtin/submodule--helper.c:2735
+msgid "--branch and --default are mutually exclusive"
+msgstr ""
+
+#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s не поддерживает параметр --super-prefix"
 
-#: builtin/submodule--helper.c:2241
+#: builtin/submodule--helper.c:2798
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "«%s» не является подкомандой submodule--helper"
@@ -18445,11 +20878,11 @@
 msgid "shorten ref output"
 msgstr "укороченный вывод ссылок"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:363
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
 msgid "reason"
 msgstr "причина"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:363
+#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "причина обновления"
 
@@ -18466,24 +20899,24 @@
 #: builtin/tag.c:28
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
-"\t\t[--format=<format>] [--[no-]merged [<commit>]] [<pattern>...]"
-msgstr "git tag -l [-n[<количество>]] [--contains <коммит>] [--no-contains <коммит>] [--points-at <объект>]\n\t\t[--format=<формат>] [--[no-]merged [<коммит>]] [<шаблон>…]"
+"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"
+msgstr ""
 
 #: builtin/tag.c:30
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<формат>] <имя-метки>…"
 
-#: builtin/tag.c:88
+#: builtin/tag.c:89
 #, c-format
 msgid "tag '%s' not found."
 msgstr "метка  «%s» не найдена."
 
-#: builtin/tag.c:104
+#: builtin/tag.c:105
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Метка «%s» удалена (была %s)\n"
 
-#: builtin/tag.c:134
+#: builtin/tag.c:135
 #, c-format
 msgid ""
 "\n"
@@ -18492,7 +20925,7 @@
 "Lines starting with '%c' will be ignored.\n"
 msgstr "\nВведите сообщение для метки:\n  %s\nСтроки, начинающиеся с «%c» будут проигнорированы.\n"
 
-#: builtin/tag.c:138
+#: builtin/tag.c:139
 #, c-format
 msgid ""
 "\n"
@@ -18501,15 +20934,15 @@
 "Lines starting with '%c' will be kept; you may remove them yourself if you want to.\n"
 msgstr "\nВведите сообщение для метки:\n  %s\nСтроки, начинающиеся с «%c» будут оставлены; вы можете удалить их вручную, если хотите.\n"
 
-#: builtin/tag.c:192
+#: builtin/tag.c:198
 msgid "unable to sign the tag"
 msgstr "не удалось подписать метку"
 
-#: builtin/tag.c:194
+#: builtin/tag.c:200
 msgid "unable to write tag file"
 msgstr "не удалось записать файл метки"
 
-#: builtin/tag.c:210
+#: builtin/tag.c:216
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -18518,382 +20951,386 @@
 "\tgit tag -f %s %s^{}"
 msgstr ""
 
-#: builtin/tag.c:226
+#: builtin/tag.c:232
 msgid "bad object type."
 msgstr "неправильный тип объекта"
 
-#: builtin/tag.c:278
+#: builtin/tag.c:285
 msgid "no tag message?"
 msgstr "нет описания метки?"
 
-#: builtin/tag.c:285
+#: builtin/tag.c:292
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Сообщение метки было оставлено в %s\n"
 
-#: builtin/tag.c:396
+#: builtin/tag.c:403
 msgid "list tag names"
 msgstr "список названий меток"
 
-#: builtin/tag.c:398
+#: builtin/tag.c:405
 msgid "print <n> lines of each tag message"
 msgstr "печатать <n> строк описания от каждой метки"
 
-#: builtin/tag.c:400
+#: builtin/tag.c:407
 msgid "delete tags"
 msgstr "удалить метки"
 
-#: builtin/tag.c:401
+#: builtin/tag.c:408
 msgid "verify tags"
 msgstr "проверить метки"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:410
 msgid "Tag creation options"
 msgstr "Настройки создания метки"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:412
 msgid "annotated tag, needs a message"
 msgstr "для аннотированной метки нужно сообщение"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:414
 msgid "tag message"
 msgstr "описание метки"
 
-#: builtin/tag.c:409
+#: builtin/tag.c:416
 msgid "force edit of tag message"
 msgstr ""
 
-#: builtin/tag.c:410
+#: builtin/tag.c:417
 msgid "annotated and GPG-signed tag"
 msgstr "аннотированная и подписанная с помощью GPG метка"
 
-#: builtin/tag.c:413
+#: builtin/tag.c:420
 msgid "use another key to sign the tag"
 msgstr "использовать другой ключ для подписания метки"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:421
 msgid "replace the tag if exists"
 msgstr "замена метки, если она существует"
 
-#: builtin/tag.c:415 builtin/update-ref.c:369
+#: builtin/tag.c:422 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "создать журнал ссылок"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:424
 msgid "Tag listing options"
 msgstr "Настройки вывода списка меток"
 
-#: builtin/tag.c:418
+#: builtin/tag.c:425
 msgid "show tag list in columns"
 msgstr "показать список меток по столбцам"
 
-#: builtin/tag.c:419 builtin/tag.c:421
+#: builtin/tag.c:426 builtin/tag.c:428
 msgid "print only tags that contain the commit"
 msgstr "вывод только меток, которые содержат коммит"
 
-#: builtin/tag.c:420 builtin/tag.c:422
+#: builtin/tag.c:427 builtin/tag.c:429
 msgid "print only tags that don't contain the commit"
 msgstr "вывод только меток, которые не содержат коммит"
 
-#: builtin/tag.c:423
+#: builtin/tag.c:430
 msgid "print only tags that are merged"
 msgstr "вывод только слитых меток"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:431
 msgid "print only tags that are not merged"
 msgstr "вывод только не слитых меток"
 
-#: builtin/tag.c:428
+#: builtin/tag.c:435
 msgid "print only tags of the object"
 msgstr "вывод только меток, определенного объекта"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:483
 msgid "--column and -n are incompatible"
 msgstr "--column и -n нельзя использовать одновременно"
 
-#: builtin/tag.c:494
+#: builtin/tag.c:505
 msgid "-n option is only allowed in list mode"
 msgstr "опцию -n можно использовать только в режиме списка"
 
-#: builtin/tag.c:496
+#: builtin/tag.c:507
 msgid "--contains option is only allowed in list mode"
 msgstr "опцию --contains можно использовать только в режиме списка"
 
-#: builtin/tag.c:498
+#: builtin/tag.c:509
 msgid "--no-contains option is only allowed in list mode"
 msgstr "опцию --no-contains можно использовать только в режиме списка"
 
-#: builtin/tag.c:500
+#: builtin/tag.c:511
 msgid "--points-at option is only allowed in list mode"
 msgstr "опцию --points-at можно использовать только в режиме списка"
 
-#: builtin/tag.c:502
+#: builtin/tag.c:513
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "опции --merged и --no-merged можно использовать только в режиме списка"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:524
 msgid "only one -F or -m option is allowed."
 msgstr "-F и -m нельзя использовать одновременно."
 
-#: builtin/tag.c:532
+#: builtin/tag.c:543
 msgid "too many params"
 msgstr "передано слишком много параметров"
 
-#: builtin/tag.c:538
+#: builtin/tag.c:549
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "«%s» не является допустимым именем метки."
 
-#: builtin/tag.c:543
+#: builtin/tag.c:554
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "метка «%s» уже существует"
 
-#: builtin/tag.c:574
+#: builtin/tag.c:585
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Метка «%s» обновлена (была %s)\n"
 
-#: builtin/unpack-objects.c:500
+#: builtin/unpack-objects.c:502
 msgid "Unpacking objects"
 msgstr "Распаковка объектов"
 
-#: builtin/update-index.c:83
+#: builtin/update-index.c:84
 #, c-format
 msgid "failed to create directory %s"
 msgstr "не удалось создать каталог %s"
 
-#: builtin/update-index.c:99
+#: builtin/update-index.c:100
 #, c-format
 msgid "failed to create file %s"
 msgstr "не удалось создать файл %s"
 
-#: builtin/update-index.c:107
+#: builtin/update-index.c:108
 #, c-format
 msgid "failed to delete file %s"
 msgstr "не удалось удалить файл %s"
 
-#: builtin/update-index.c:114 builtin/update-index.c:220
+#: builtin/update-index.c:115 builtin/update-index.c:221
 #, c-format
 msgid "failed to delete directory %s"
 msgstr "не удалось удалить каталог %s"
 
-#: builtin/update-index.c:139
+#: builtin/update-index.c:140
 #, c-format
 msgid "Testing mtime in '%s' "
 msgstr "Проверка mtime в «%s» "
 
-#: builtin/update-index.c:153
+#: builtin/update-index.c:154
 msgid "directory stat info does not change after adding a new file"
 msgstr "информация статистики каталога не изменяется после добавления нового файла"
 
-#: builtin/update-index.c:166
+#: builtin/update-index.c:167
 msgid "directory stat info does not change after adding a new directory"
 msgstr "информация статистики каталога не изменяется после добавления нового каталога"
 
-#: builtin/update-index.c:179
+#: builtin/update-index.c:180
 msgid "directory stat info changes after updating a file"
 msgstr "информация статистики каталога изменяется после добавления нового файла"
 
-#: builtin/update-index.c:190
+#: builtin/update-index.c:191
 msgid "directory stat info changes after adding a file inside subdirectory"
 msgstr "информация статистики каталога изменяется после добавления нового файла внутри подкаталога"
 
-#: builtin/update-index.c:201
+#: builtin/update-index.c:202
 msgid "directory stat info does not change after deleting a file"
 msgstr "информация статистики каталога не изменяется после удаления файла"
 
-#: builtin/update-index.c:214
+#: builtin/update-index.c:215
 msgid "directory stat info does not change after deleting a directory"
 msgstr "информация статистики каталога не изменяется после удаления каталога"
 
-#: builtin/update-index.c:221
+#: builtin/update-index.c:222
 msgid " OK"
 msgstr " OK"
 
-#: builtin/update-index.c:589
+#: builtin/update-index.c:591
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<опции>] [--] [<файл>…]"
 
-#: builtin/update-index.c:971
+#: builtin/update-index.c:974
 msgid "continue refresh even when index needs update"
 msgstr "продолжить обновление, даже если индекс требует обновления"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:977
 msgid "refresh: ignore submodules"
 msgstr "обновление: игнорировать подмодули"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:980
 msgid "do not ignore new files"
 msgstr "не игнорировать новые файлы"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:982
 msgid "let files replace directories and vice-versa"
 msgstr "разрешить файлам заменять каталоги и наоборот"
 
-#: builtin/update-index.c:981
+#: builtin/update-index.c:984
 msgid "notice files missing from worktree"
 msgstr "замечать файлы отсутствующие в рабочем каталоге"
 
-#: builtin/update-index.c:983
+#: builtin/update-index.c:986
 msgid "refresh even if index contains unmerged entries"
 msgstr "обновить, даже если в индексе имеются не слитые записи"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:989
 msgid "refresh stat information"
 msgstr "обновить информацию о статусе файлов"
 
-#: builtin/update-index.c:990
+#: builtin/update-index.c:993
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "как --refresh, но игнорировать настройку assume-unchanged"
 
-#: builtin/update-index.c:994
+#: builtin/update-index.c:997
 msgid "<mode>,<object>,<path>"
 msgstr "<режим доступа>,<объект>,<путь>"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:998
 msgid "add the specified entry to the index"
 msgstr "добавить указанную запись в индекс"
 
-#: builtin/update-index.c:1005
+#: builtin/update-index.c:1008
 msgid "mark files as \"not changing\""
 msgstr "пометить файлы как «не измененные»"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1011
 msgid "clear assumed-unchanged bit"
 msgstr "убрать пометку assumed-unchanged"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1014
 msgid "mark files as \"index-only\""
 msgstr "пометить файлы как «только в индексе»"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1017
 msgid "clear skip-worktree bit"
 msgstr "убрать пометку skip-worktree"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1020
+msgid "do not touch index-only entries"
+msgstr ""
+
+#: builtin/update-index.c:1022
 msgid "add to index only; do not add content to object database"
 msgstr "только добавить в индекс; не добавлять содержимое в базу данных объектов"
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1024
 msgid "remove named paths even if present in worktree"
 msgstr "удалить указанные пути, даже если они существуют в рабочем каталоге"
 
-#: builtin/update-index.c:1021
+#: builtin/update-index.c:1026
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "с опцией --stdin: строки на вводе отделяются НУЛЕВЫМ байтом"
 
-#: builtin/update-index.c:1023
+#: builtin/update-index.c:1028
 msgid "read list of paths to be updated from standard input"
 msgstr "прочитать список обновляемых путей из стандартного ввода"
 
-#: builtin/update-index.c:1027
+#: builtin/update-index.c:1032
 msgid "add entries from standard input to the index"
 msgstr "добавить записи из стандартного ввода в индекс"
 
-#: builtin/update-index.c:1031
+#: builtin/update-index.c:1036
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "заново заполнить индекс #2 и #3 для указанных путей"
 
-#: builtin/update-index.c:1035
+#: builtin/update-index.c:1040
 msgid "only update entries that differ from HEAD"
 msgstr "обновить только записи, которые отличаются от HEAD"
 
-#: builtin/update-index.c:1039
+#: builtin/update-index.c:1044
 msgid "ignore files missing from worktree"
 msgstr "игнорировать файлы, отсутствующие в рабочем каталоге"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1047
 msgid "report actions to standard output"
 msgstr "вывести выполняемые действия на стандартный вывод"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1049
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(для машинной обработки) забыть сохраненные неразрешенные конфликты"
 
-#: builtin/update-index.c:1048
+#: builtin/update-index.c:1053
 msgid "write index in this format"
 msgstr "записать индекс в указанном формате"
 
-#: builtin/update-index.c:1050
+#: builtin/update-index.c:1055
 msgid "enable or disable split index"
 msgstr "разрешить или запретить раздельный индекс"
 
-#: builtin/update-index.c:1052
+#: builtin/update-index.c:1057
 msgid "enable/disable untracked cache"
 msgstr "включить/отключить кэш неотслеживаемых файлов"
 
-#: builtin/update-index.c:1054
+#: builtin/update-index.c:1059
 msgid "test if the filesystem supports untracked cache"
 msgstr "проверить, что файловая система поддерживает кэш неотслеживаемых файлов"
 
-#: builtin/update-index.c:1056
+#: builtin/update-index.c:1061
 msgid "enable untracked cache without testing the filesystem"
 msgstr "включить кэш неотслеживаемых файлов без проверки файловой системы"
 
-#: builtin/update-index.c:1058
+#: builtin/update-index.c:1063
 msgid "write out the index even if is not flagged as changed"
 msgstr "записать индекс, даже если он не помечен как измененный"
 
-#: builtin/update-index.c:1060
+#: builtin/update-index.c:1065
 msgid "enable or disable file system monitor"
 msgstr "включить или выключить мониторинг файловой системы"
 
-#: builtin/update-index.c:1062
+#: builtin/update-index.c:1067
 msgid "mark files as fsmonitor valid"
 msgstr "пометить файл как действительный в мониторе файловой системы"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1070
 msgid "clear fsmonitor valid bit"
 msgstr "снять пометку действительности мониторе файловой системы"
 
-#: builtin/update-index.c:1168
+#: 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 установлен в false; удалите или измените его, если вы действительно хотите включить разделенный индекс"
 
-#: builtin/update-index.c:1177
+#: 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 установлен в true; удалите или измените его, если вы действительно хотите отключить разделенный индекс"
 
-#: builtin/update-index.c:1188
+#: 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"
 msgstr "параметр core.untrackedCache установлен true; удалите или измените его, если вы действительно хотите удалить кэш неотслеживаемых файлов"
 
-#: builtin/update-index.c:1192
+#: builtin/update-index.c:1198
 msgid "Untracked cache disabled"
 msgstr "Кэш неотслеживаемых файлов отключен"
 
-#: builtin/update-index.c:1200
+#: 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"
 msgstr "параметр core.untrackedCache установлен false; удалите или измените его, если вы действительно хотите включить кэш неотслеживаемых файлов"
 
-#: builtin/update-index.c:1204
+#: builtin/update-index.c:1210
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Кэш неотслеживаемых файлов включен для «%s»"
 
-#: builtin/update-index.c:1212
+#: 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:1216
+#: builtin/update-index.c:1222
 msgid "fsmonitor enabled"
 msgstr "мониторинг файловой системы включён"
 
-#: builtin/update-index.c:1219
+#: 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:1223
+#: builtin/update-index.c:1229
 msgid "fsmonitor disabled"
 msgstr "мониторинг файловой системы выключён"
 
@@ -18909,19 +21346,19 @@
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [<опции>] --stdin [-z]"
 
-#: builtin/update-ref.c:364
+#: builtin/update-ref.c:500
 msgid "delete the reference"
 msgstr "удалить ссылку"
 
-#: builtin/update-ref.c:366
+#: builtin/update-ref.c:502
 msgid "update <refname> not the one it points to"
 msgstr "обновить <имя-ссылки> а не то, на что она указывает"
 
-#: builtin/update-ref.c:367
+#: builtin/update-ref.c:503
 msgid "stdin has NUL-terminated arguments"
 msgstr "ввод отделённый НУЛЕВЫМИ символами"
 
-#: builtin/update-ref.c:368
+#: builtin/update-ref.c:504
 msgid "read updates from stdin"
 msgstr "прочитать обновления из стандартного ввода"
 
@@ -18953,308 +21390,312 @@
 msgid "interrupt transfer after <n> seconds of inactivity"
 msgstr "прервать передачу после <кол> секунд простоя"
 
-#: builtin/verify-commit.c:20
+#: builtin/verify-commit.c:19
 msgid "git verify-commit [-v | --verbose] <commit>..."
 msgstr "git verify-commit [-v | --verbose] <коммит>…"
 
-#: builtin/verify-commit.c:76
+#: builtin/verify-commit.c:68
 msgid "print commit contents"
 msgstr "вывести содержимое коммита"
 
-#: builtin/verify-commit.c:77 builtin/verify-tag.c:38
+#: builtin/verify-commit.c:69 builtin/verify-tag.c:37
 msgid "print raw gpg status output"
 msgstr "выводить сырой вывод статуса от gpg"
 
-#: builtin/verify-pack.c:55
+#: builtin/verify-pack.c:59
 msgid "git verify-pack [-v | --verbose] [-s | --stat-only] <pack>..."
 msgstr "git verify-pack [-v | --verbose] [-s | --stat-only] <пакет>…"
 
-#: builtin/verify-pack.c:65
+#: builtin/verify-pack.c:70
 msgid "verbose"
 msgstr "быть многословнее"
 
-#: builtin/verify-pack.c:67
+#: builtin/verify-pack.c:72
 msgid "show statistics only"
 msgstr "вывести только статистику"
 
-#: builtin/verify-tag.c:19
+#: builtin/verify-tag.c:18
 msgid "git verify-tag [-v | --verbose] [--format=<format>] <tag>..."
 msgstr "git verify-tag [-v | --verbose] [--format=<формат>] <метка>…"
 
-#: builtin/verify-tag.c:37
+#: builtin/verify-tag.c:36
 msgid "print tag contents"
 msgstr "вывести содержимое метки"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:17
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<опции>] <путь> [<указатель-коммита>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:18
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<опции>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:19
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<опции>] <путь>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:20
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <рабочий-каталог> <новый-путь>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:21
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<опции>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:22
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<опции>] <рабочий-каталог>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:23
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <путь>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:891
+#: builtin/worktree.c:60 builtin/worktree.c:973
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "не удалось удалить «%s»"
 
-#: builtin/worktree.c:80
-#, c-format
-msgid "Removing worktrees/%s: not a valid directory"
-msgstr "Удаление рабочих каталогов/%s: не является каталогом"
+#: builtin/worktree.c:85
+msgid "not a valid directory"
+msgstr ""
 
-#: builtin/worktree.c:86
-#, c-format
-msgid "Removing worktrees/%s: gitdir file does not exist"
-msgstr "Удаление рабочих каталогов/%s: файл gitdir не существует"
+#: builtin/worktree.c:91
+msgid "gitdir file does not exist"
+msgstr ""
 
-#: builtin/worktree.c:91 builtin/worktree.c:100
+#: builtin/worktree.c:96 builtin/worktree.c:105
 #, c-format
-msgid "Removing worktrees/%s: unable to read gitdir file (%s)"
-msgstr "Удаление рабочих каталогов/%s: не удалось прочитать файл gitdir (%s)"
+msgid "unable to read gitdir file (%s)"
+msgstr ""
 
-#: builtin/worktree.c:110
+#: builtin/worktree.c:115
 #, c-format
-msgid ""
-"Removing worktrees/%s: short read (expected %<PRIuMAX> bytes, read "
-"%<PRIuMAX>)"
-msgstr "Удаление рабочего каталога/%s: прочитано мало данных (ожидалось %<PRIuMAX> байт, прочитано %<PRIuMAX>)"
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr ""
 
-#: builtin/worktree.c:118
+#: builtin/worktree.c:123
+msgid "invalid gitdir file"
+msgstr ""
+
+#: builtin/worktree.c:131
+msgid "gitdir file points to non-existent location"
+msgstr ""
+
+#: builtin/worktree.c:146
 #, c-format
-msgid "Removing worktrees/%s: invalid gitdir file"
-msgstr "Удаление рабочих каталогов/%s: недействительный файл gitdir"
+msgid "Removing %s/%s: %s"
+msgstr ""
 
-#: builtin/worktree.c:127
-#, c-format
-msgid "Removing worktrees/%s: gitdir file points to non-existent location"
-msgstr "Удаление рабочих каталогов/%s: gitdir указывает на несуществующее расположение"
-
-#: builtin/worktree.c:166
+#: builtin/worktree.c:221
 msgid "report pruned working trees"
 msgstr "вывести список удаленных рабочих каталогов"
 
-#: builtin/worktree.c:168
+#: builtin/worktree.c:223
 msgid "expire working trees older than <time>"
 msgstr "удалить рабочие каталоги старее чем <дата-окончания>"
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:293
 #, c-format
 msgid "'%s' already exists"
 msgstr "«%s» уже существует"
 
-#: builtin/worktree.c:252
+#: builtin/worktree.c:302
 #, c-format
-msgid "unable to re-add worktree '%s'"
+msgid "unusable worktree destination '%s'"
 msgstr ""
 
-#: builtin/worktree.c:257
+#: builtin/worktree.c:307
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
-"use 'add -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
+"use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:259
+#: builtin/worktree.c:309
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
-"use 'add -f' to override, or 'prune' or 'remove' to clear"
+"use '%s -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:360
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "не удалось создать каталог «%s»"
 
-#: builtin/worktree.c:432 builtin/worktree.c:438
+#: builtin/worktree.c:494 builtin/worktree.c:500
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr ""
 
-#: builtin/worktree.c:434
+#: builtin/worktree.c:496
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 
-#: builtin/worktree.c:443
+#: builtin/worktree.c:505
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr ""
 
-#: builtin/worktree.c:449
+#: builtin/worktree.c:511
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr ""
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:552
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "переключиться на <ветка> даже если она уже активна в другом рабочесм каталоге"
 
-#: builtin/worktree.c:493
+#: builtin/worktree.c:555
 msgid "create a new branch"
 msgstr "создать новую ветку"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:557
 msgid "create or reset a branch"
 msgstr "создать или перейти на ветку"
 
-#: builtin/worktree.c:497
+#: builtin/worktree.c:559
 msgid "populate the new working tree"
 msgstr "наполнить новый рабочий каталог"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:560
 msgid "keep the new working tree locked"
 msgstr "держать рабочий каталог заблокированным"
 
-#: builtin/worktree.c:501
+#: builtin/worktree.c:563
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "настроить режим отслеживания ветки (смотрите git-branch(1))"
 
-#: builtin/worktree.c:504
+#: builtin/worktree.c:566
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "пытаться найти соответствие имени новой ветки с именем внешней ветки"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:574
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B и --detach нельзя использовать одновременно"
 
-#: builtin/worktree.c:573
+#: builtin/worktree.c:635
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track можно использовать только когда вы создаёте новую ветку"
 
-#: builtin/worktree.c:673
+#: builtin/worktree.c:758
 msgid "reason for locking"
 msgstr "причина блокировки"
 
-#: builtin/worktree.c:685 builtin/worktree.c:718 builtin/worktree.c:792
-#: builtin/worktree.c:919
+#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
+#: builtin/worktree.c:1001
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "«%s» не является рабочим каталогом"
 
-#: builtin/worktree.c:687 builtin/worktree.c:720
+#: builtin/worktree.c:772 builtin/worktree.c:805
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Главный рабочий каталог не может быть заблокирован или разблокирован"
 
-#: builtin/worktree.c:692
+#: builtin/worktree.c:777
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "«%s» уже заблокирован, причина: %s"
 
-#: builtin/worktree.c:694
+#: builtin/worktree.c:779
 #, c-format
 msgid "'%s' is already locked"
 msgstr "«%s» уже заблокирован"
 
-#: builtin/worktree.c:722
+#: builtin/worktree.c:807
 #, c-format
 msgid "'%s' is not locked"
 msgstr "«%s» не заблокирован"
 
-#: builtin/worktree.c:763
+#: builtin/worktree.c:848
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 
-#: builtin/worktree.c:771
+#: builtin/worktree.c:856
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:794 builtin/worktree.c:921
+#: builtin/worktree.c:879 builtin/worktree.c:1003
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr ""
 
-#: builtin/worktree.c:799
+#: builtin/worktree.c:884
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr ""
 
-#: builtin/worktree.c:805
-#, c-format
-msgid "target '%s' already exists"
-msgstr ""
-
-#: builtin/worktree.c:813
+#: builtin/worktree.c:897
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:815
+#: builtin/worktree.c:899
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:818
+#: builtin/worktree.c:902
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:823
+#: builtin/worktree.c:907
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr ""
 
-#: builtin/worktree.c:871
+#: builtin/worktree.c:953
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr ""
 
-#: builtin/worktree.c:875
+#: builtin/worktree.c:957
 #, c-format
-msgid "'%s' is dirty, use --force to delete it"
+msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 
-#: builtin/worktree.c:880
+#: builtin/worktree.c:962
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 
-#: builtin/worktree.c:903
+#: builtin/worktree.c:985
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:926
+#: builtin/worktree.c:1008
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1010
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:931
+#: builtin/worktree.c:1013
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 
+#: builtin/worktree.c:1037
+#, c-format
+msgid "repair: %s: %s"
+msgstr ""
+
+#: builtin/worktree.c:1040
+#, c-format
+msgid "error: %s: %s"
+msgstr ""
+
 #: builtin/write-tree.c:15
 msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
 msgstr "git write-tree [--missing-ok] [--prefix=<префикс>/]"
@@ -19271,25 +21712,29 @@
 msgid "only useful for debugging"
 msgstr "используется только при отладке"
 
-#: credential-cache--daemon.c:223
+#: http-fetch.c:114
 #, c-format
-msgid ""
-"The permissions on your socket directory are too loose; other\n"
-"users may be able to read your cached credentials. Consider running:\n"
-"\n"
-"\tchmod 0700 %s"
-msgstr "Права доступа к вашему каталогу сокетов слишком свободны; друге пользователи могуи читать ваши закэшированные пароли доступа. Обдумайте запуск команды:\n\n\tchmod 0700 %s"
+msgid "argument to --packfile must be a valid hash (got '%s')"
+msgstr ""
 
-#: credential-cache--daemon.c:272
-msgid "print debugging messages to stderr"
-msgstr "вывод отладочных сообщений на stderr"
+#: http-fetch.c:122
+msgid "not a git repository"
+msgstr ""
 
-#: t/helper/test-reach.c:152
+#: t/helper/test-fast-rebase.c:141
+msgid "unhandled options"
+msgstr ""
+
+#: t/helper/test-fast-rebase.c:146
+msgid "error preparing revisions"
+msgstr ""
+
+#: t/helper/test-reach.c:154
 #, c-format
 msgid "commit %s is not marked reachable"
 msgstr ""
 
-#: t/helper/test-reach.c:162
+#: t/helper/test-reach.c:164
 msgid "too many commits marked reachable"
 msgstr ""
 
@@ -19301,7 +21746,7 @@
 msgid "exit immediately after advertising capabilities"
 msgstr ""
 
-#: git.c:27
+#: git.c:28
 msgid ""
 "git [--version] [--help] [-C <path>] [-c <name>=<value>]\n"
 "           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n"
@@ -19310,146 +21755,147 @@
 "           <command> [<args>]"
 msgstr "git [--version] [--help] [-C <путь>] [-c <имя>=<значение>]\n           [--exec-path[=<путь>]] [--html-path] [--man-path] [--info-path]\n           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]\n           [--git-dir=<путь>] [--work-tree=<путь>] [--namespace=<имя>]\n           <команда> [<аргументы>]"
 
-#: git.c:34
+#: git.c:35
 msgid ""
 "'git help -a' and 'git help -g' list available subcommands and some\n"
 "concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept."
-msgstr "«git help -а» и «git help -g» выводит список доступных подкоманд и\nнекоторые руководства по темам. Запустите «git help <команда>» или\n«git help <термин>», чтобы прочесть о конкретных подкоманде или теме."
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
 
-#: git.c:185
+#: git.c:187
 #, c-format
 msgid "no directory given for --git-dir\n"
 msgstr ""
 
-#: git.c:199
+#: git.c:201
 #, c-format
 msgid "no namespace given for --namespace\n"
 msgstr ""
 
-#: git.c:213
+#: git.c:215
 #, c-format
 msgid "no directory given for --work-tree\n"
 msgstr ""
 
-#: git.c:227
+#: git.c:229
 #, c-format
 msgid "no prefix given for --super-prefix\n"
 msgstr ""
 
-#: git.c:249
+#: git.c:251
 #, c-format
 msgid "-c expects a configuration string\n"
 msgstr ""
 
-#: git.c:287
+#: git.c:289
 #, c-format
 msgid "no directory given for -C\n"
 msgstr ""
 
-#: git.c:313
+#: git.c:315
 #, c-format
 msgid "unknown option: %s\n"
 msgstr ""
 
-#: git.c:359
+#: git.c:364
 #, c-format
 msgid "while expanding alias '%s': '%s'"
 msgstr ""
 
-#: git.c:368
+#: git.c:373
 #, c-format
 msgid ""
 "alias '%s' changes environment variables.\n"
 "You can use '!git' in the alias to do this"
 msgstr ""
 
-#: git.c:376
+#: git.c:380
 #, c-format
 msgid "empty alias for %s"
 msgstr ""
 
-#: git.c:379
+#: git.c:383
 #, c-format
 msgid "recursive alias: %s"
 msgstr ""
 
-#: git.c:459
+#: git.c:465
 msgid "write failure on standard output"
 msgstr ""
 
-#: git.c:461
+#: git.c:467
 msgid "unknown write failure on standard output"
 msgstr ""
 
-#: git.c:463
+#: git.c:469
 msgid "close failed on standard output"
 msgstr ""
 
-#: git.c:797
+#: git.c:820
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 
-#: git.c:847
+#: git.c:870
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr ""
 
-#: git.c:860
+#: git.c:883
 #, c-format
 msgid ""
 "usage: %s\n"
 "\n"
 msgstr ""
 
-#: git.c:880
+#: git.c:903
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 
-#: git.c:892
+#: git.c:915
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr ""
 
-#: http.c:378
+#: http.c:399
 #, c-format
 msgid "negative value for http.postbuffer; defaulting to %d"
 msgstr "отрицательное значение http.postbuffer; использую стандартное значение %d"
 
-#: http.c:399
+#: http.c:420
 msgid "Delegation control is not supported with cURL < 7.22.0"
 msgstr "Делегация проверки полномочий не поддерживается с cURL < 7.22.0"
 
-#: http.c:408
+#: http.c:429
 msgid "Public key pinning not supported with cURL < 7.44.0"
 msgstr "Public key pinning не поддерживается с cURL < 7.44.0"
 
-#: http.c:876
+#: http.c:910
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
 msgstr ""
 
-#: http.c:949
+#: http.c:989
 msgid "Protocol restrictions not supported with cURL < 7.19.4"
 msgstr ""
 
-#: http.c:1085
+#: http.c:1132
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr ""
 
-#: http.c:1092
+#: http.c:1139
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 
-#: http.c:1096
+#: http.c:1143
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr ""
 
-#: http.c:1965
+#: http.c:2025
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -19457,152 +21903,193 @@
 "   redirect: %s"
 msgstr "не удалось обновить базовый url из переадресации:\n  запрошено: %s\n   переадресовано: %s"
 
-#: remote-curl.c:157
+#: remote-curl.c:183
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr ""
 
-#: remote-curl.c:254
+#: remote-curl.c:307
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr ""
 
-#: remote-curl.c:355
+#: remote-curl.c:408
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 
-#: remote-curl.c:386
+#: remote-curl.c:439
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr ""
 
-#: remote-curl.c:446
+#: remote-curl.c:499
 #, c-format
 msgid "repository '%s' not found"
 msgstr ""
 
-#: remote-curl.c:450
+#: remote-curl.c:503
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr ""
 
-#: remote-curl.c:454
+#: remote-curl.c:507
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "«%s» недоступно: %s"
 
-#: remote-curl.c:460
+#: remote-curl.c:513
 #, c-format
 msgid "redirecting to %s"
 msgstr "переадресация на %s"
 
-#: remote-curl.c:584
+#: remote-curl.c:642
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 
-#: remote-curl.c:664
-msgid "unable to rewind rpc post data - try increasing http.postBuffer"
+#: remote-curl.c:654
+msgid "remote server sent stateless separator"
 msgstr ""
 
 #: remote-curl.c:724
+msgid "unable to rewind rpc post data - try increasing http.postBuffer"
+msgstr ""
+
+#: remote-curl.c:754
+#, c-format
+msgid "remote-curl: bad line length character: %.4s"
+msgstr ""
+
+#: remote-curl.c:756
+msgid "remote-curl: unexpected response end packet"
+msgstr ""
+
+#: remote-curl.c:832
 #, c-format
 msgid "RPC failed; %s"
 msgstr ""
 
-#: remote-curl.c:764
+#: remote-curl.c:872
 msgid "cannot handle pushes this big"
 msgstr ""
 
-#: remote-curl.c:879
+#: remote-curl.c:987
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 
-#: remote-curl.c:883
+#: remote-curl.c:991
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 
-#: remote-curl.c:1014
+#: remote-curl.c:1041
+#, c-format
+msgid "%d bytes of length header were received"
+msgstr ""
+
+#: remote-curl.c:1043
+#, c-format
+msgid "%d bytes of body are still expected"
+msgstr ""
+
+#: remote-curl.c:1132
 msgid "dumb http transport does not support shallow capabilities"
 msgstr ""
 
-#: remote-curl.c:1028
+#: remote-curl.c:1147
 msgid "fetch failed."
 msgstr ""
 
-#: remote-curl.c:1076
+#: remote-curl.c:1193
 msgid "cannot fetch by sha1 over smart http"
 msgstr ""
 
-#: remote-curl.c:1120 remote-curl.c:1126
+#: remote-curl.c:1237 remote-curl.c:1243
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr ""
 
-#: remote-curl.c:1138 remote-curl.c:1252
+#: remote-curl.c:1255 remote-curl.c:1373
 #, c-format
 msgid "http transport does not support %s"
 msgstr ""
 
-#: remote-curl.c:1174
+#: remote-curl.c:1291
 msgid "git-http-push failed"
 msgstr ""
 
-#: remote-curl.c:1360
+#: remote-curl.c:1479
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr ""
 
-#: remote-curl.c:1392
+#: remote-curl.c:1511
 msgid "remote-curl: error reading command stream from git"
 msgstr ""
 
-#: remote-curl.c:1399
+#: remote-curl.c:1518
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr ""
 
-#: remote-curl.c:1439
+#: remote-curl.c:1559
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr ""
 
-#: list-objects-filter-options.h:61
+#: compat/compiler.h:26
+msgid "no compiler information available\n"
+msgstr ""
+
+#: compat/compiler.h:38
+msgid "no libc information available\n"
+msgstr ""
+
+#: list-objects-filter-options.h:91
 msgid "args"
 msgstr "аргументы"
 
-#: list-objects-filter-options.h:62
+#: list-objects-filter-options.h:92
 msgid "object filtering"
 msgstr "фильтрация объектов"
 
-#: parse-options.h:170
+#: parse-options.h:183
 msgid "expiry-date"
 msgstr "дата-окончания"
 
-#: parse-options.h:184
+#: parse-options.h:197
 msgid "no-op (backward compatibility)"
 msgstr "ничего не делает (оставлено для обратной совместимости)"
 
-#: parse-options.h:304
+#: parse-options.h:309
 msgid "be more verbose"
 msgstr "быть многословнее"
 
-#: parse-options.h:306
+#: parse-options.h:311
 msgid "be more quiet"
 msgstr "тихий режим"
 
-#: parse-options.h:312
-msgid "use <n> digits to display SHA-1s"
-msgstr "использовать <n> цифр для вывода SHA-1"
+#: parse-options.h:317
+msgid "use <n> digits to display object names"
+msgstr ""
 
-#: parse-options.h:331
+#: parse-options.h:336
 msgid "how to strip spaces and #comments from message"
 msgstr "как удалять пробелы и #комментарии из сообщения коммита"
 
-#: ref-filter.h:101
+#: parse-options.h:337
+msgid "read pathspec from file"
+msgstr ""
+
+#: parse-options.h:338
+msgid ""
+"with --pathspec-from-file, pathspec elements are separated with NUL "
+"character"
+msgstr ""
+
+#: ref-filter.h:96
 msgid "key"
 msgstr "ключ"
 
-#: ref-filter.h:101
+#: ref-filter.h:96
 msgid "field name to sort on"
 msgstr "имя поля, по которому выполнить сортировку"
 
@@ -19610,6 +22097,14 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr "обновить индекс с помощью переиспользования разрешения конфликта, если возможно"
 
+#: wt-status.h:80
+msgid "HEAD detached at "
+msgstr "HEAD отделён на "
+
+#: wt-status.h:81
+msgid "HEAD detached from "
+msgstr "HEAD отделён начиная с "
+
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Добавление содержимого файла в индекс"
@@ -19647,681 +22142,691 @@
 msgstr "Вывод списка, создание или удаление веток"
 
 #: command-list.h:59
+msgid "Collect information for user to file a bug report"
+msgstr ""
+
+#: command-list.h:60
 msgid "Move objects and refs by archive"
 msgstr "Перемещение объектов и ссылок по архиву"
 
-#: command-list.h:60
+#: command-list.h:61
 msgid "Provide content or type and size information for repository objects"
 msgstr "Вывод содержимого или типа и информации о размере для объектов репозитория"
 
-#: command-list.h:61
+#: command-list.h:62
 msgid "Display gitattributes information"
 msgstr "Вывод информации из gitattributes"
 
-#: command-list.h:62
+#: command-list.h:63
 msgid "Debug gitignore / exclude files"
 msgstr "Отладка файлов gitignore / exclude"
 
-#: command-list.h:63
+#: command-list.h:64
 msgid "Show canonical names and email addresses of contacts"
 msgstr "Вывод каноничных имён и адресов электронной почты контактов"
 
-#: command-list.h:64
+#: command-list.h:65
 msgid "Switch branches or restore working tree files"
 msgstr "Переключение веток или восстановление файлов в рабочем каталоге"
 
-#: command-list.h:65
+#: command-list.h:66
 msgid "Copy files from the index to the working tree"
 msgstr "Копирование файлов из индекса в рабочий каталог"
 
-#: command-list.h:66
+#: command-list.h:67
 msgid "Ensures that a reference name is well formed"
 msgstr "Удостовериться, что имя ссылки правильно сформировано"
 
-#: command-list.h:67
+#: command-list.h:68
 msgid "Find commits yet to be applied to upstream"
 msgstr "Поиск коммитов которые еще не применены вышестоящим репозиторием"
 
-#: command-list.h:68
+#: command-list.h:69
 msgid "Apply the changes introduced by some existing commits"
 msgstr "Применение изменений, сделанных в каком-то существующем коммите"
 
-#: command-list.h:69
+#: command-list.h:70
 msgid "Graphical alternative to git-commit"
 msgstr "Графическая альтернатива для git-commit"
 
-#: command-list.h:70
+#: command-list.h:71
 msgid "Remove untracked files from the working tree"
 msgstr "Удаление неотслеживаемых файлов из рабочего каталога"
 
-#: command-list.h:71
+#: command-list.h:72
 msgid "Clone a repository into a new directory"
 msgstr "Клонирование репозитория в новый каталог"
 
-#: command-list.h:72
+#: command-list.h:73
 msgid "Display data in columns"
 msgstr "Вывод данных по колонкам"
 
-#: command-list.h:73
+#: command-list.h:74
 msgid "Record changes to the repository"
 msgstr "Запись изменений в репозиторий"
 
-#: command-list.h:74
+#: command-list.h:75
 msgid "Write and verify Git commit-graph files"
 msgstr "Запись и проверка commit-graph файлов Git"
 
-#: command-list.h:75
+#: command-list.h:76
 msgid "Create a new commit object"
 msgstr "Создание нового объекта коммита"
 
-#: command-list.h:76
+#: command-list.h:77
 msgid "Get and set repository or global options"
 msgstr "Получение и установка глобальных опций или опций репозитория"
 
-#: command-list.h:77
+#: command-list.h:78
 msgid "Count unpacked number of objects and their disk consumption"
 msgstr "Подсчет количества неупакованных объектов и их потребления диска"
 
-#: command-list.h:78
+#: command-list.h:79
 msgid "Retrieve and store user credentials"
 msgstr "Получение и сохранение учетных записей пользователя"
 
-#: command-list.h:79
+#: command-list.h:80
 msgid "Helper to temporarily store passwords in memory"
 msgstr "Помощник для временного хранения паролей в памяти"
 
-#: command-list.h:80
+#: command-list.h:81
 msgid "Helper to store credentials on disk"
 msgstr "Помощник для хранения учетных записей на диске"
 
-#: command-list.h:81
+#: command-list.h:82
 msgid "Export a single commit to a CVS checkout"
 msgstr "Экспорт единственного коммита в виде рабочей копии CVS"
 
-#: command-list.h:82
+#: command-list.h:83
 msgid "Salvage your data out of another SCM people love to hate"
 msgstr "Спасение ваших данных из другой СКВ которую люди любят ненавидеть"
 
-#: command-list.h:83
+#: command-list.h:84
 msgid "A CVS server emulator for Git"
 msgstr "Эмулятор сервера CVS для Git"
 
-#: command-list.h:84
+#: command-list.h:85
 msgid "A really simple server for Git repositories"
 msgstr "Очень простой сервер для Git репозиториев"
 
-#: command-list.h:85
+#: command-list.h:86
 msgid "Give an object a human readable name based on an available ref"
 msgstr "Присвоение объекту удобочитаемое имя на основе доступной ссылки"
 
-#: command-list.h:86
+#: command-list.h:87
 msgid "Show changes between commits, commit and working tree, etc"
 msgstr "Вывод разницы между коммитами, коммитом и рабочим каталогом и т.д."
 
-#: command-list.h:87
+#: command-list.h:88
 msgid "Compares files in the working tree and the index"
 msgstr "Сравнение седержимого файлов в рабочем каталоге с файлами в индексе"
 
-#: command-list.h:88
+#: command-list.h:89
 msgid "Compare a tree to the working tree or index"
 msgstr "Сравнение дерева файлов с рабочим каталогом или индексом"
 
-#: command-list.h:89
+#: command-list.h:90
 msgid "Compares the content and mode of blobs found via two tree objects"
 msgstr "Сравнение содержимого и режима двоичных объектов, найденных по двум объектам дерева"
 
-#: command-list.h:90
+#: command-list.h:91
 msgid "Show changes using common diff tools"
 msgstr "Показ изменений с помощью распространенных утилит сравнения"
 
-#: command-list.h:91
+#: command-list.h:92
 msgid "Git data exporter"
 msgstr "Экспорт данных Git"
 
-#: command-list.h:92
+#: command-list.h:93
 msgid "Backend for fast Git data importers"
 msgstr "Внутренний интерфейс для быстрого импорта данных Git"
 
-#: command-list.h:93
+#: command-list.h:94
 msgid "Download objects and refs from another repository"
 msgstr "Загрузка объектов и ссылок из другого репозитория"
 
-#: command-list.h:94
+#: command-list.h:95
 msgid "Receive missing objects from another repository"
 msgstr "Получение недостающих объектов из другого репозитория"
 
-#: command-list.h:95
+#: command-list.h:96
 msgid "Rewrite branches"
 msgstr "Перезапись веток"
 
-#: command-list.h:96
+#: command-list.h:97
 msgid "Produce a merge commit message"
 msgstr "Создание сообщения коммита для слияния"
 
-#: command-list.h:97
+#: command-list.h:98
 msgid "Output information on each ref"
 msgstr "Вывод информации о каждой ссылке"
 
-#: command-list.h:98
+#: command-list.h:99
+msgid "Run a Git command on a list of repositories"
+msgstr ""
+
+#: command-list.h:100
 msgid "Prepare patches for e-mail submission"
 msgstr "Подготовка патчей для отправки по электронной почте"
 
-#: command-list.h:99
+#: command-list.h:101
 msgid "Verifies the connectivity and validity of the objects in the database"
 msgstr "Проверка связности и валидности объектов в базе данных"
 
-#: command-list.h:100
+#: command-list.h:102
 msgid "Cleanup unnecessary files and optimize the local repository"
 msgstr "Очистка ненужных файлов и оптимизация локального репозитория"
 
-#: command-list.h:101
+#: command-list.h:103
 msgid "Extract commit ID from an archive created using git-archive"
 msgstr "Извлечение идентификатора коммита из архива, созданного с помощью git-archive"
 
-#: command-list.h:102
+#: command-list.h:104
 msgid "Print lines matching a pattern"
 msgstr "Вывод строк, соответствующих шаблону"
 
-#: command-list.h:103
+#: command-list.h:105
 msgid "A portable graphical interface to Git"
 msgstr "Портативный графический интерфейс для Git"
 
-#: command-list.h:104
+#: command-list.h:106
 msgid "Compute object ID and optionally creates a blob from a file"
 msgstr "Вычисление идентификатора объекта и возможное создание двоичного объекта из файла"
 
-#: command-list.h:105
+#: command-list.h:107
 msgid "Display help information about Git"
 msgstr "Отображение справочной информации о Git"
 
-#: command-list.h:106
+#: command-list.h:108
 msgid "Server side implementation of Git over HTTP"
 msgstr "Серверная реализация протокола Git над HTTP"
 
-#: command-list.h:107
+#: command-list.h:109
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Загрузка из внешнего репозитория Git с помощью HTTP"
 
-#: command-list.h:108
+#: command-list.h:110
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Отправка объектов в другой репозиторий с помощью HTTP/DAV"
 
-#: command-list.h:109
+#: command-list.h:111
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "Отправка коллекции патчей из стандартного ввода в папку IMAP"
 
-#: command-list.h:110
+#: command-list.h:112
 msgid "Build pack index file for an existing packed archive"
 msgstr "Построение файла индекса для существующего упакованного архива"
 
-#: command-list.h:111
+#: command-list.h:113
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Создание пустого репозитория Git или переинициализация существующего"
 
-#: command-list.h:112
+#: command-list.h:114
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Мгновенный просмотр вашего рабочего репозитория в gitweb"
 
-#: command-list.h:113
+#: command-list.h:115
 msgid "Add or parse structured information in commit messages"
 msgstr "Добавление или разбор структурированной информации в сообщениях коммита"
 
-#: command-list.h:114
+#: command-list.h:116
 msgid "The Git repository browser"
 msgstr "Браузер репозитория Git"
 
-#: command-list.h:115
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Вывод истории коммитов"
 
-#: command-list.h:116
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "Вывод информации о файлах в индексе и в рабочем каталоге"
 
-#: command-list.h:117
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Вывод списка ссылок во внешнем репозитории"
 
-#: command-list.h:118
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Вывод содержимого объекта дерева"
 
-#: command-list.h:119
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "Извлекает патч и авторство из одного сообщения электронной почты"
 
-#: command-list.h:120
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Простая программа UNIX для разбора файла mbox"
 
-#: command-list.h:121
+#: command-list.h:123
+msgid "Run tasks to optimize Git repository data"
+msgstr ""
+
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Объединение одной или нескольких историй разработки вместе"
 
-#: command-list.h:122
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Поиск подходящих общих предков для возможного слияния"
 
-#: command-list.h:123
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Запуск трёхходового слияния файлов"
 
-#: command-list.h:124
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Запуск слияния для файлов, которые требуют слияния"
 
-#: command-list.h:125
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "Стандартная программа-помощник для использования совместно с git-merge-index"
 
-#: command-list.h:126
+#: command-list.h:129
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr "Запуск инструментов разрешения конфликтов слияния"
 
-#: command-list.h:127
+#: command-list.h:130
 msgid "Show three-way merge without touching index"
 msgstr "Вывод трёхходового слияние без затрагивания индекса"
 
-#: command-list.h:128
+#: command-list.h:131
 msgid "Write and verify multi-pack-indexes"
 msgstr "Запись и проверка файлов multi-pack-index"
 
-#: command-list.h:129
+#: command-list.h:132
 msgid "Creates a tag object"
 msgstr "Создание объектов меток"
 
-#: command-list.h:130
+#: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Построение объекта дерева из текста формата ls-tree"
 
-#: command-list.h:131
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Перемещение или переименование файла, каталога или символьной ссылки"
 
-#: command-list.h:132
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Поиск символьных имён для указанных редакций"
 
-#: command-list.h:133
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Добавление или просмотр заметок объекта"
 
-#: command-list.h:134
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Импорт и отправка в репозитории Perforce"
 
-#: command-list.h:135
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Создание упакованного архива объектов"
 
-#: command-list.h:136
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Поиск избыточных файлов пакетов"
 
-#: command-list.h:137
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Упаковка указателей на ветки и меток для эффективного доступа к репозиторию"
 
-#: command-list.h:138
-msgid "Routines to help parsing remote repository access parameters"
-msgstr "Подпрограммы для помощи разбора параметров доступа внешнего репозитория"
-
-#: command-list.h:139
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Вычисление уникального идентификатора для патча"
 
-#: command-list.h:140
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "Очистка всех недостижимых объектов из базы данных объектов"
 
-#: command-list.h:141
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Удаление дополнительных объектов, которые уже содержатся в файлах пакетов"
 
-#: command-list.h:142
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Извлечение изменений и объединение с другим репозиторием или локальной веткой"
 
-#: command-list.h:143
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "Обновление внешних ссылок и связанных объектов"
 
-#: command-list.h:144
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Применение упорядоченного списка патчей над текущей веткой"
 
-#: command-list.h:145
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "Сравнение двух диапазонов коммитов (например двух версий ветки)"
 
-#: command-list.h:146
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Чтение информации о дереве в индекс"
 
-#: command-list.h:147
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Повторное применение коммитов над верхушкой другой ветки"
 
-#: command-list.h:148
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Получение того, что было отправлено в репозиторий"
 
-#: command-list.h:149
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Управление информацией журнала ссылок"
 
-#: command-list.h:150
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Управление набором отслеживаемых репозиториев"
 
-#: command-list.h:151
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Упаковка неупакованных объектов в репозитории"
 
-#: command-list.h:152
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Создание, вывод списка, удаление ссылок для замены объектов"
 
-#: command-list.h:153
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Генерация сводки предстоящих изменений"
 
-#: command-list.h:154
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Повторное использование записанных разрешений конфликтов при слияниях"
 
-#: command-list.h:155
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Сброс текущего состояния HEAD на указанное состояние"
 
-#: command-list.h:156
+#: command-list.h:158
+msgid "Restore working tree files"
+msgstr ""
+
+#: command-list.h:159
 msgid "Revert some existing commits"
 msgstr "Обращение изменений существующих коммитов"
 
-#: command-list.h:157
+#: command-list.h:160
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Вывод списка объектов коммита в обратном хронологическом порядке"
 
-#: command-list.h:158
+#: command-list.h:161
 msgid "Pick out and massage parameters"
 msgstr "Разбор и обработка параметров"
 
-#: command-list.h:159
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Удаление файлов из рабочего каталога и индекса"
 
-#: command-list.h:160
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Отправка коллекции патчей на электронную почту"
 
-#: command-list.h:161
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Отправка объектов в другой репозиторий с помощью протокола Git"
 
-#: command-list.h:162
+#: command-list.h:165
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Ограниченная оболочка входа в систему для доступа Git через SSH"
 
-#: command-list.h:163
+#: command-list.h:166
 msgid "Summarize 'git log' output"
 msgstr "Обобщение вывода «git log»"
 
-#: command-list.h:164
+#: command-list.h:167
 msgid "Show various types of objects"
 msgstr "Вывод различных типов объектов"
 
-#: command-list.h:165
+#: command-list.h:168
 msgid "Show branches and their commits"
 msgstr "Вывод веток и их коммитов"
 
-#: command-list.h:166
+#: command-list.h:169
 msgid "Show packed archive index"
 msgstr "Вывод индекса упакованного архива"
 
-#: command-list.h:167
+#: command-list.h:170
 msgid "List references in a local repository"
 msgstr "Вывод ссылок в локальном репозитории"
 
-#: command-list.h:168
+#: command-list.h:171
 msgid "Git's i18n setup code for shell scripts"
 msgstr "Код настройки интернационализации для сценариев оболочки Git"
 
-#: command-list.h:169
+#: command-list.h:172
 msgid "Common Git shell script setup code"
 msgstr "Общий код настройки для сценариев оболочки Git"
 
-#: command-list.h:170
+#: command-list.h:173
+msgid "Initialize and modify the sparse-checkout"
+msgstr ""
+
+#: command-list.h:174
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Спрятать изменения в изменённом рабочем каталоге"
 
-#: command-list.h:171
+#: command-list.h:175
 msgid "Add file contents to the staging area"
 msgstr "Добавление содержимого файлов в индекс"
 
-#: command-list.h:172
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Вывод состояния рабочего каталога"
 
-#: command-list.h:173
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Удаление ненужных пробелов"
 
-#: command-list.h:174
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Инициализация, обновление или просмотр подмодулей"
 
-#: command-list.h:175
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Двухсторонние операции между репозиториями Subversion и Git"
 
-#: command-list.h:176
+#: command-list.h:180
+msgid "Switch branches"
+msgstr ""
+
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Чтение, изменение и удаление символических ссылок"
 
-#: command-list.h:177
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "Создание, вывод списка, удаление или проверка метки, подписанной с помощью GPG"
 
-#: command-list.h:178
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Создание временного файла с содержимым двоичного объекта"
 
-#: command-list.h:179
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Распаковка объектов из упакованного архива"
 
-#: command-list.h:180
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Регистрация содержимого файла из рабочего каталога в индекс"
 
-#: command-list.h:181
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr "Безопасное обновление имени объекта хранящегося в ссылке"
 
-#: command-list.h:182
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr "Обновление файла со вспомогательной информацией для глупых серверов"
 
-#: command-list.h:183
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Отправка архива обратно в git-archive"
 
-#: command-list.h:184
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Отправка упакованных объектов обратно в git-fetch-pack"
 
-#: command-list.h:185
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Вывод логической переменной Git"
 
-#: command-list.h:186
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "Проверка подписи GPG коммитов"
 
-#: command-list.h:187
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Проверка файлов упакованных архивов Git"
 
-#: command-list.h:188
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Проверка подписи GPG меток"
 
-#: command-list.h:189
+#: command-list.h:194
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Веб интерфейс Git (веб-интерфейс для Git репозиториев)"
 
-#: command-list.h:190
+#: command-list.h:195
 msgid "Show logs with difference each commit introduces"
 msgstr "Вывод журнала с изменениями, которые вводил каждый из коммитов"
 
-#: command-list.h:191
+#: command-list.h:196
 msgid "Manage multiple working trees"
 msgstr "Управление несколькими рабочими каталогами"
 
-#: command-list.h:192
+#: command-list.h:197
 msgid "Create a tree object from the current index"
 msgstr "Создание объекта дерева из текущего индекса"
 
-#: command-list.h:193
+#: command-list.h:198
 msgid "Defining attributes per path"
 msgstr "Определение атрибутов для путей файлов или каталогов"
 
-#: command-list.h:194
+#: command-list.h:199
 msgid "Git command-line interface and conventions"
 msgstr "Интерфейс коммандной строки Git и соглашения"
 
-#: command-list.h:195
+#: command-list.h:200
 msgid "A Git core tutorial for developers"
 msgstr "Учебник по ядру Git для разработчиков"
 
-#: command-list.h:196
+#: command-list.h:201
+msgid "Providing usernames and passwords to Git"
+msgstr ""
+
+#: command-list.h:202
 msgid "Git for CVS users"
 msgstr "Git для пользователей CVS"
 
-#: command-list.h:197
+#: command-list.h:203
 msgid "Tweaking diff output"
 msgstr "Подстройка вывода списка изменений"
 
-#: command-list.h:198
+#: command-list.h:204
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Полезный минимум команд для каждодневного использования Git"
 
-#: command-list.h:199
+#: command-list.h:205
+msgid "Frequently asked questions about using Git"
+msgstr ""
+
+#: command-list.h:206
 msgid "A Git Glossary"
 msgstr "Глоссарий Git"
 
-#: command-list.h:200
+#: command-list.h:207
 msgid "Hooks used by Git"
 msgstr "Перехватчики используемые Git"
 
-#: command-list.h:201
+#: command-list.h:208
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Указание специально игнорируемых файлов"
 
-#: command-list.h:202
+#: command-list.h:209
 msgid "Defining submodule properties"
 msgstr "Определение свойств подмодулей"
 
-#: command-list.h:203
+#: command-list.h:210
 msgid "Git namespaces"
 msgstr "Пространства имён Git"
 
-#: command-list.h:204
+#: command-list.h:211
+msgid "Helper programs to interact with remote repositories"
+msgstr ""
+
+#: command-list.h:212
 msgid "Git Repository Layout"
 msgstr "Содержимое репозитория Git"
 
-#: command-list.h:205
+#: command-list.h:213
 msgid "Specifying revisions and ranges for Git"
 msgstr "Указание редакций и диапазонов для Git"
 
-#: command-list.h:206
+#: command-list.h:214
+msgid "Mounting one repository inside another"
+msgstr ""
+
+#: command-list.h:215
 msgid "A tutorial introduction to Git: part two"
 msgstr "Обучающее введение в Git: часть вторая"
 
-#: command-list.h:207
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Обучающее введение в Git"
 
-#: command-list.h:208
+#: command-list.h:217
 msgid "An overview of recommended workflows with Git"
 msgstr "Обзор рекомендуемых последовательностей выполняемых действий с Git"
 
-#: git-bisect.sh:54
-msgid "You need to start by \"git bisect start\""
-msgstr "Вам нужно начать с помощью «git bisect start»"
-
-#. TRANSLATORS: Make sure to include [Y] and [n] in your
-#. translation. The program will only accept English input
-#. at this point.
-#: git-bisect.sh:60
-msgid "Do you want me to do it for you [Y/n]? "
-msgstr "Вы уверены, что хотите, чтобы я сделал это [Y - да/n - нет]? "
-
-#: git-bisect.sh:101
+#: git-bisect.sh:48
 #, sh-format
 msgid "Bad rev input: $arg"
 msgstr "Плохой ввод номера редакции: $arg"
 
-#: git-bisect.sh:121
-#, sh-format
-msgid "Bad rev input: $bisected_head"
-msgstr "Плохой ввод номера редакции: $bisected_head"
-
-#: git-bisect.sh:130
-#, sh-format
-msgid "Bad rev input: $rev"
-msgstr "Плохой ввод номера редакции: $rev"
-
-#: git-bisect.sh:139
-#, sh-format
-msgid "'git bisect $TERM_BAD' can take only one argument."
-msgstr "«git bisect $TERM_BAD» может принимать только один аргумент."
-
-#: git-bisect.sh:209
+#: git-bisect.sh:82
 msgid "No logfile given"
 msgstr "Не передан файл журнала"
 
-#: git-bisect.sh:210
+#: git-bisect.sh:83
 #, sh-format
 msgid "cannot read $file for replaying"
 msgstr "не удалось прочитать $file для повтора изменений"
 
-#: git-bisect.sh:232
+#: git-bisect.sh:105
 msgid "?? what are you talking about?"
 msgstr "?? вы о чем?"
 
-#: git-bisect.sh:241
+#: git-bisect.sh:115
 msgid "bisect run failed: no command provided."
 msgstr "сбой при выполнении двоичного поиска: не передана команда."
 
-#: git-bisect.sh:246
+#: git-bisect.sh:120
 #, sh-format
 msgid "running $command"
 msgstr "запускаю $command"
 
-#: git-bisect.sh:253
+#: git-bisect.sh:127
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "exit code $res from '$command' is < 0 or >= 128"
 msgstr "не удалось выполнить двоичный поиск:\nкод завершения $res от «$command» оказался < 0 или >= 128"
 
-#: git-bisect.sh:279
+#: git-bisect.sh:152
 msgid "bisect run cannot continue any more"
 msgstr "bisect run больше не может продолжать"
 
-#: git-bisect.sh:285
+#: git-bisect.sh:158
 #, sh-format
 msgid ""
 "bisect run failed:\n"
-"'bisect_state $state' exited with error code $res"
-msgstr "не удалось выполнить двоичный поиск:\n«bisect_state $state» завершился с кодом ошибки $res"
+"'bisect-state $state' exited with error code $res"
+msgstr ""
 
-#: git-bisect.sh:292
+#: git-bisect.sh:165
 msgid "bisect run success"
 msgstr "bisect run выполнен успешно"
 
-#: git-bisect.sh:300
+#: git-bisect.sh:173
 msgid "We are not bisecting."
 msgstr "Вы сейчас не в процессе бинарного поиска."
 
@@ -20363,136 +22868,46 @@
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Простое слияние не удалось, попытка автоматического слияния."
 
-#: git-legacy-stash.sh:220
-msgid "Cannot remove temporary index (can't happen)"
-msgstr "Не удалось удалить временный индекс (не должно случаться)"
-
-#: git-legacy-stash.sh:271
-#, sh-format
-msgid "Cannot update $ref_stash with $w_commit"
-msgstr "Не удалось обновить $ref_stash с помощью $w_commit"
-
-#: git-legacy-stash.sh:323
-#, sh-format
-msgid "error: unknown option for 'stash push': $option"
-msgstr "ошибка: неизвестный параметр для «stash push»: $option"
-
-#: git-legacy-stash.sh:355
-#, sh-format
-msgid "Saved working directory and index state $stash_msg"
-msgstr "Рабочий каталог и состояние индекса сохранены $stash_msg"
-
-#: git-legacy-stash.sh:535
-#, sh-format
-msgid "unknown option: $opt"
-msgstr "неизвестная опция: $opt"
-
-#: git-legacy-stash.sh:555
-#, sh-format
-msgid "Too many revisions specified: $REV"
-msgstr "Передано слишком много редакций: $REV"
-
-#: git-legacy-stash.sh:570
-#, sh-format
-msgid "$reference is not a valid reference"
-msgstr "$reference не является действительной ссылкой"
-
-#: git-legacy-stash.sh:598
-#, sh-format
-msgid "'$args' is not a stash-like commit"
-msgstr "«$args» не похоже на коммит со спрятанными изменениями"
-
-#: git-legacy-stash.sh:609
-#, sh-format
-msgid "'$args' is not a stash reference"
-msgstr "«$args» не является ссылкой на спрятанные изменения"
-
-#: git-legacy-stash.sh:617
-msgid "unable to refresh index"
-msgstr "не удалось обновить индекс"
-
-#: git-legacy-stash.sh:621
-msgid "Cannot apply a stash in the middle of a merge"
-msgstr "Нельзя применить спрятанные изменения во время выполнения слияния"
-
-#: git-legacy-stash.sh:629
-msgid "Conflicts in index. Try without --index."
-msgstr "Конфликты в индексе. Попробуйте без --index."
-
-#: git-legacy-stash.sh:631
-msgid "Could not save index tree"
-msgstr "Не удалось сохранить дерево индекса"
-
-#: git-legacy-stash.sh:640
-msgid "Could not restore untracked files from stash entry"
-msgstr "Невозможно восстановить неотслеживаемые файлы из спрятанных изменений"
-
-#: git-legacy-stash.sh:665
-msgid "Cannot unstage modified files"
-msgstr "Невозможно убрать из индекса измененные файлы"
-
-#: git-legacy-stash.sh:703
-#, sh-format
-msgid "Dropped ${REV} ($s)"
-msgstr "Отброшено ${REV} ($s)"
-
-#: git-legacy-stash.sh:704
-#, sh-format
-msgid "${REV}: Could not drop stash entry"
-msgstr "${REV}: Не удалось отбросить запись из спрятанных изменений"
-
-#: git-legacy-stash.sh:791
-msgid "(To restore them type \"git stash apply\")"
-msgstr "(Чтобы восстановить их, наберите «git stash apply»)"
-
-#: git-submodule.sh:200
+#: git-submodule.sh:179
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr "Относительный путь можно использовать только находясь на вершине рабочего каталога"
 
-#: git-submodule.sh:210
+#: git-submodule.sh:189
 #, sh-format
 msgid "repo URL: '$repo' must be absolute or begin with ./|../"
 msgstr "URL репозитория: «$repo» должен быть абсолютным или начинаться с ./|../"
 
-#: git-submodule.sh:229
+#: git-submodule.sh:208
 #, sh-format
 msgid "'$sm_path' already exists in the index"
 msgstr "«$sm_path» уже содержится в индексе"
 
-#: git-submodule.sh:232
+#: 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:239
+#: git-submodule.sh:218
 #, sh-format
 msgid "'$sm_path' does not have a commit checked out"
 msgstr ""
 
-#: git-submodule.sh:245
-#, sh-format
-msgid ""
-"The following path is ignored by one of your .gitignore files:\n"
-"$sm_path\n"
-"Use -f if you really want to add it."
-msgstr "Следующие пути игнорируются одним из ваших файлов .gitignore:\n$sm_path\nИспользуйте опцию -f, если вы действительно хотите его добавить."
-
-#: git-submodule.sh:268
+#: git-submodule.sh:249
 #, sh-format
 msgid "Adding existing repo at '$sm_path' to the index"
 msgstr "Добавляю существующий репозиторий из «$sm_path» в индекс"
 
-#: git-submodule.sh:270
+#: 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:278
+#: 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:280
+#: git-submodule.sh:261
 #, sh-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -20501,137 +22916,124 @@
 "or you are unsure what this means choose another name with the '--name' option."
 msgstr "Если вы хотите повторно использовать локальный каталог git вместо повторного клонирования из\n  $realrepo\nто используйте параметр «--force». Если же локальный каталог git не является нужным репозиторием или если вы не уверены, что это значит, то укажите другое имя для подмодуля с помощью параметра «--name»."
 
-#: git-submodule.sh:286
+#: git-submodule.sh:267
 #, sh-format
 msgid "Reactivating local git directory for submodule '$sm_name'."
 msgstr "Восстановление локального каталога git для подмодуля «$sm_name»."
 
-#: git-submodule.sh:298
+#: git-submodule.sh:279
 #, sh-format
 msgid "Unable to checkout submodule '$sm_path'"
 msgstr "Не удалось переключиться на состояние у подмодуля «$sm_path»"
 
-#: git-submodule.sh:303
+#: git-submodule.sh:284
 #, sh-format
 msgid "Failed to add submodule '$sm_path'"
 msgstr "Сбой добавления подмодуля «$sm_path»"
 
-#: git-submodule.sh:312
+#: git-submodule.sh:293
 #, sh-format
 msgid "Failed to register submodule '$sm_path'"
 msgstr "Не удалось зарегистрировать подмодуль «$sm_path»"
 
-#: git-submodule.sh:573
+#: git-submodule.sh:568
 #, sh-format
 msgid "Unable to find current revision in submodule path '$displaypath'"
 msgstr "Не удалось найти текущую редакцию для подмодуля по пути «$displaypath»"
 
-#: git-submodule.sh:583
+#: git-submodule.sh:578
 #, sh-format
 msgid "Unable to fetch in submodule path '$sm_path'"
 msgstr "Не удалось выполнить извлечение для подмодуля по пути «$sm_path»"
 
-#: git-submodule.sh:588
+#: git-submodule.sh:583
 #, sh-format
 msgid ""
 "Unable to find current ${remote_name}/${branch} revision in submodule path "
 "'$sm_path'"
 msgstr "Не удалось найти текущую редакцию ${remote_name}/${branch} для подмодуля по пути «$sm_path»"
 
-#: git-submodule.sh:606
+#: git-submodule.sh:601
 #, sh-format
 msgid ""
 "Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
 "$sha1:"
 msgstr ""
 
-#: git-submodule.sh:612
+#: 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», но не содержит $sha1. Сбой при прямом получении коммита."
 
-#: git-submodule.sh:619
+#: git-submodule.sh:614
 #, sh-format
 msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
 msgstr "Не удалось переключиться на состояние «$sha1» для подмодуля по пути «$displaypath»"
 
-#: git-submodule.sh:620
+#: git-submodule.sh:615
 #, sh-format
 msgid "Submodule path '$displaypath': checked out '$sha1'"
 msgstr "Подмодуль по пути «$displaypath»: забрано состояние «$sha1»"
 
-#: git-submodule.sh:624
+#: git-submodule.sh:619
 #, sh-format
 msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
 msgstr "Не удалось переместить «$sha1» для подмодуля по пути «$displaypath»"
 
-#: git-submodule.sh:625
+#: git-submodule.sh:620
 #, sh-format
 msgid "Submodule path '$displaypath': rebased into '$sha1'"
 msgstr "Подмодуль по пути «$displaypath»: перемещен над «$sha1»"
 
-#: git-submodule.sh:630
+#: git-submodule.sh:625
 #, sh-format
 msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
 msgstr "Не удалось выполнить слияние с «$sha1» для подмодуля по пути «$displaypath»"
 
-#: git-submodule.sh:631
+#: git-submodule.sh:626
 #, sh-format
 msgid "Submodule path '$displaypath': merged in '$sha1'"
 msgstr "Подмодуль по пути «$displaypath»: слито с «$sha1»"
 
-#: git-submodule.sh:636
+#: git-submodule.sh:631
 #, sh-format
 msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
 msgstr "Сбой выполнения «$command $sha1» для подмодуля по пути «$displaypath»"
 
-#: git-submodule.sh:637
+#: git-submodule.sh:632
 #, sh-format
 msgid "Submodule path '$displaypath': '$command $sha1'"
 msgstr "Подмодуль по пути «$displaypath»: «$command $sha1»"
 
-#: git-submodule.sh:668
+#: git-submodule.sh:663
 #, sh-format
 msgid "Failed to recurse into submodule path '$displaypath'"
 msgstr "Не удалось выполнить рекурсивно для подмодуля по пути «$displaypath»"
 
-#: git-submodule.sh:830
-msgid "The --cached option cannot be used with the --files option"
-msgstr "Опцию --cached нельзя использовать одновременно с опцией --files"
+#: git-rebase--preserve-merges.sh:109
+msgid "Applied autostash."
+msgstr "Применены автоматически спрятанные изменения."
 
-#: git-submodule.sh:882
+#: git-rebase--preserve-merges.sh:112
 #, sh-format
-msgid "unexpected mode $mod_dst"
-msgstr "неизвестный режим $mod_dst"
+msgid "Cannot store $stash_sha1"
+msgstr "Не удалось сохранить $stash_sha1"
 
-#: git-submodule.sh:902
-#, sh-format
-msgid "  Warn: $display_name doesn't contain commit $sha1_src"
-msgstr "  Предупреждение: $display_name не содержит коммит $sha1_src"
+#: 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Ваши изменения спрятаны и в безопасности.\nВы можете выполнить «git stash pop» или «git stash drop» в любой момент.\n"
 
-#: git-submodule.sh:905
-#, sh-format
-msgid "  Warn: $display_name doesn't contain commit $sha1_dst"
-msgstr "  Предупреждение: $display_name не содержит коммит $sha1_dst"
-
-#: git-submodule.sh:908
-#, sh-format
-msgid "  Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
-msgstr "  Предупреждение: $display_name не содержит коммиты $sha1_src и $sha1_dst"
-
-#: git-parse-remote.sh:89
-#, sh-format
-msgid "See git-${cmd}(1) for details."
-msgstr "Для дополнительной информации, смотрите git-${cmd}(1)."
-
-#: git-rebase--preserve-merges.sh:136
+#: git-rebase--preserve-merges.sh:191
 #, sh-format
 msgid "Rebasing ($new_count/$total)"
 msgstr "Перемещение ($new_count/$total)"
 
-#: git-rebase--preserve-merges.sh:152
+#: git-rebase--preserve-merges.sh:197
 msgid ""
 "\n"
 "Commands:\n"
@@ -20652,7 +23054,7 @@
 "These lines can be re-ordered; they are executed from top to bottom.\n"
 msgstr "\nКоманды:\np, pick <коммит> = использовать коммит\nr, reword <коммит> = использовать коммит, но изменить сообщение коммита\ne, edit <коммит> = использовать коммит, но остановиться для исправления\ns, squash <коммит> = использовать коммит, но объединить с предыдущим коммитом\nf, fixup <коммит> = как «squash», но пропустить сообщение коммита\nx, exec <команда> = выполнить команду (остаток строки) с помощью командной оболочки\nd, drop <коммит> = удалить коммит\nl, label <метка> = дать имя текущему HEAD\nt, reset <метка> = сбросить HEAD к указанной метке\nm, merge [-C <коммит> | -c <коммит>] <метка> [# <строка>]\n. создать слияние используя сообщение коммита оригинального\n. слияния (или использовать указанную строку, если оригинальное\n. слияние не указано). Используйте -c <коммит> чтобы изменить\n. сообщение коммита.\n\nЭти строки можно перемещать; они будут выполнены сверху вниз.\n"
 
-#: git-rebase--preserve-merges.sh:215
+#: git-rebase--preserve-merges.sh:260
 #, sh-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -20664,61 +23066,61 @@
 "\tgit rebase --continue"
 msgstr "Теперь вы можете исправить коммит с помощью\n\n\tgit commit --amend $gpg_sign_opt_quoted\n\nКак только вы будете довольны результатом, запустите\n\n\tgit rebase --continue"
 
-#: git-rebase--preserve-merges.sh:240
+#: git-rebase--preserve-merges.sh:285
 #, sh-format
 msgid "$sha1: not a commit that can be picked"
 msgstr "$sha1: не является коммитом, который можно взять"
 
-#: git-rebase--preserve-merges.sh:279
+#: git-rebase--preserve-merges.sh:324
 #, sh-format
 msgid "Invalid commit name: $sha1"
 msgstr "Недопустимое имя коммита: $sha1"
 
-#: git-rebase--preserve-merges.sh:309
+#: git-rebase--preserve-merges.sh:354
 msgid "Cannot write current commit's replacement sha1"
 msgstr "Не удалось записать замену sha1 текущего коммита"
 
-#: git-rebase--preserve-merges.sh:360
+#: git-rebase--preserve-merges.sh:405
 #, sh-format
 msgid "Fast-forward to $sha1"
 msgstr "Перемотка вперед до $sha1"
 
-#: git-rebase--preserve-merges.sh:362
+#: git-rebase--preserve-merges.sh:407
 #, sh-format
 msgid "Cannot fast-forward to $sha1"
 msgstr "Не удалось перемотать вперед до $sha1"
 
-#: git-rebase--preserve-merges.sh:371
+#: git-rebase--preserve-merges.sh:416
 #, sh-format
 msgid "Cannot move HEAD to $first_parent"
 msgstr "Не удалось переместить HEAD на $first_parent"
 
-#: git-rebase--preserve-merges.sh:376
+#: git-rebase--preserve-merges.sh:421
 #, sh-format
 msgid "Refusing to squash a merge: $sha1"
 msgstr "Нельзя уплотнить слияние: $sha1"
 
-#: git-rebase--preserve-merges.sh:394
+#: git-rebase--preserve-merges.sh:439
 #, sh-format
 msgid "Error redoing merge $sha1"
 msgstr "Ошибка при повторении слияния $sha1"
 
-#: git-rebase--preserve-merges.sh:403
+#: git-rebase--preserve-merges.sh:448
 #, sh-format
 msgid "Could not pick $sha1"
 msgstr "Не удалось взять $sha1"
 
-#: git-rebase--preserve-merges.sh:412
+#: git-rebase--preserve-merges.sh:457
 #, sh-format
 msgid "This is the commit message #${n}:"
 msgstr "Это сообщение коммита номер #${n}:"
 
-#: git-rebase--preserve-merges.sh:417
+#: git-rebase--preserve-merges.sh:462
 #, sh-format
 msgid "The commit message #${n} will be skipped:"
 msgstr "Сообщение коммита номер #${n} будет пропущено:"
 
-#: git-rebase--preserve-merges.sh:428
+#: 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."
@@ -20727,22 +23129,22 @@
 msgstr[2] "Это объединение $count коммитов"
 msgstr[3] "Это объединение $count коммитов"
 
-#: git-rebase--preserve-merges.sh:437
+#: git-rebase--preserve-merges.sh:482
 #, sh-format
 msgid "Cannot write $fixup_msg"
 msgstr "Не удалось записать $fixup_msg"
 
-#: git-rebase--preserve-merges.sh:440
+#: git-rebase--preserve-merges.sh:485
 msgid "This is a combination of 2 commits."
 msgstr "Это объединение 2 коммитов"
 
-#: git-rebase--preserve-merges.sh:481 git-rebase--preserve-merges.sh:524
-#: git-rebase--preserve-merges.sh:527
+#: 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:556
+#: git-rebase--preserve-merges.sh:601
 #, sh-format
 msgid ""
 "Could not amend commit after successfully picking $sha1... $rest\n"
@@ -20751,31 +23153,31 @@
 "you are able to reword the commit."
 msgstr "Не удалось исправить коммит после успешного перехода на $sha1… $rest\nЭто произошло, скорее всего, из-за пустого сообщения коммита или из-за перехватчика перед коммитом. Если же это произошло из-за перехватчика перед коммитом, то вам нужно решить с ним проблему и повторить попытку снова."
 
-#: git-rebase--preserve-merges.sh:571
+#: git-rebase--preserve-merges.sh:616
 #, sh-format
 msgid "Stopped at $sha1_abbrev... $rest"
 msgstr "Остановлено на $sha1_abbrev… $rest"
 
-#: git-rebase--preserve-merges.sh:586
+#: git-rebase--preserve-merges.sh:631
 #, sh-format
 msgid "Cannot '$squash_style' without a previous commit"
 msgstr "Нельзя сделать «$squash_style» без указания предыдущего коммита"
 
-#: git-rebase--preserve-merges.sh:628
+#: git-rebase--preserve-merges.sh:673
 #, sh-format
 msgid "Executing: $rest"
 msgstr "Выполнение: $rest"
 
-#: git-rebase--preserve-merges.sh:636
+#: git-rebase--preserve-merges.sh:681
 #, sh-format
 msgid "Execution failed: $rest"
 msgstr "Не удалось выполнить: $rest"
 
-#: git-rebase--preserve-merges.sh:638
+#: git-rebase--preserve-merges.sh:683
 msgid "and made changes to the index and/or the working tree"
 msgstr "и были сделаны изменения в индексе и/или в рабочем каталоге"
 
-#: git-rebase--preserve-merges.sh:640
+#: git-rebase--preserve-merges.sh:685
 msgid ""
 "You can fix the problem, and then run\n"
 "\n"
@@ -20783,7 +23185,7 @@
 msgstr "Вы можете исправить ошибку, а затем запустить\n\n\tgit rebase --continue"
 
 #. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:653
+#: git-rebase--preserve-merges.sh:698
 #, sh-format
 msgid ""
 "Execution succeeded: $rest\n"
@@ -20793,25 +23195,25 @@
 "\tgit rebase --continue"
 msgstr "Успешное выполнение: $rest\nно остались изменения в индексе и/или в рабочем каталоге\nСделайте коммит или спрячьте ваши изменения, а затем выполните\n\n\tgit rebase --continue"
 
-#: git-rebase--preserve-merges.sh:664
+#: git-rebase--preserve-merges.sh:709
 #, sh-format
 msgid "Unknown command: $command $sha1 $rest"
 msgstr "Неопознанная команда: $command $sha1 $rest"
 
-#: git-rebase--preserve-merges.sh:665
+#: 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:700
+#: git-rebase--preserve-merges.sh:745
 #, sh-format
 msgid "Successfully rebased and updated $head_name."
 msgstr "Успешно перемещён и обновлён $head_name."
 
-#: git-rebase--preserve-merges.sh:757
+#: git-rebase--preserve-merges.sh:802
 msgid "Could not remove CHERRY_PICK_HEAD"
 msgstr "Не удалось удалить CHERRY_PICK_HEAD"
 
-#: git-rebase--preserve-merges.sh:762
+#: git-rebase--preserve-merges.sh:807
 #, sh-format
 msgid ""
 "You have staged changes in your working tree.\n"
@@ -20829,43 +23231,43 @@
 "  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:779
+#: git-rebase--preserve-merges.sh:824
 msgid "Error trying to find the author identity to amend commit"
 msgstr "Произошла ошибка при поиске автора для исправления коммита"
 
-#: git-rebase--preserve-merges.sh:784
+#: 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 "У вас имеются незакоммиченные изменения в рабочем каталоге. Сделайте коммит, а затем запустите «git rebase --continue» снова."
 
-#: git-rebase--preserve-merges.sh:789 git-rebase--preserve-merges.sh:793
+#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
 msgid "Could not commit staged changes."
 msgstr "Не удалось закоммитить проиндексированные изменения."
 
-#: git-rebase--preserve-merges.sh:824 git-rebase--preserve-merges.sh:910
+#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
 msgid "Could not execute editor"
 msgstr "Не удалось запустить редактор"
 
-#: git-rebase--preserve-merges.sh:845
+#: git-rebase--preserve-merges.sh:890
 #, sh-format
 msgid "Could not checkout $switch_to"
 msgstr "Не удалось перейти на версию $switch_to"
 
-#: git-rebase--preserve-merges.sh:852
+#: git-rebase--preserve-merges.sh:897
 msgid "No HEAD?"
 msgstr "Нет указателя HEAD?"
 
-#: git-rebase--preserve-merges.sh:853
+#: git-rebase--preserve-merges.sh:898
 #, sh-format
 msgid "Could not create temporary $state_dir"
 msgstr "Не удалось создать временный каталог $state_dir"
 
-#: git-rebase--preserve-merges.sh:856
+#: git-rebase--preserve-merges.sh:901
 msgid "Could not mark as interactive"
 msgstr "Не удалось пометить как интерактивный"
 
-#: git-rebase--preserve-merges.sh:888
+#: git-rebase--preserve-merges.sh:933
 #, sh-format
 msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
 msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
@@ -20874,7 +23276,11 @@
 msgstr[2] "Перемещение $shortrevisions над $shortonto ($todocount команд)"
 msgstr[3] "Перемещение $shortrevisions над $shortonto ($todocount команд)"
 
-#: git-rebase--preserve-merges.sh:942 git-rebase--preserve-merges.sh:947
+#: 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 "Не удалось инициализировать перезаписанные коммиты"
 
@@ -20936,59 +23342,12 @@
 msgstr "Не удалось определить абсолютный путь к каталогу git"
 
 #. TRANSLATORS: you can adjust this to align "git add -i" status menu
-#: git-add--interactive.perl:196
+#: git-add--interactive.perl:212
 #, perl-format
 msgid "%12s %12s %s"
 msgstr "%12s %12s %s"
 
-#: git-add--interactive.perl:197
-msgid "staged"
-msgstr "в индексе"
-
-#: git-add--interactive.perl:197
-msgid "unstaged"
-msgstr "не в индексе"
-
-#: git-add--interactive.perl:253 git-add--interactive.perl:278
-msgid "binary"
-msgstr "двоичный"
-
-#: git-add--interactive.perl:262 git-add--interactive.perl:316
-msgid "nothing"
-msgstr "ничего"
-
-#: git-add--interactive.perl:298 git-add--interactive.perl:313
-msgid "unchanged"
-msgstr "нет изменений"
-
-#: git-add--interactive.perl:609
-#, perl-format
-msgid "added %d path\n"
-msgid_plural "added %d paths\n"
-msgstr[0] "добавлен %d путь\n"
-msgstr[1] "добавлено %d пути\n"
-msgstr[2] "добавлено %d путей\n"
-msgstr[3] "добавлено %d пути\n"
-
-#: git-add--interactive.perl:612
-#, perl-format
-msgid "updated %d path\n"
-msgid_plural "updated %d paths\n"
-msgstr[0] "обновлён %d путь\n"
-msgstr[1] "обновлено %d пути\n"
-msgstr[2] "обновлено %d путей\n"
-msgstr[3] "обновлено %d пути\n"
-
-#: git-add--interactive.perl:615
-#, perl-format
-msgid "reverted %d path\n"
-msgid_plural "reverted %d paths\n"
-msgstr[0] "обращены изменения %d пути\n"
-msgstr[1] "обращены изменения %d путей\n"
-msgstr[2] "обращены изменения %d путей\n"
-msgstr[3] "обращены изменения %d путей\n"
-
-#: git-add--interactive.perl:618
+#: git-add--interactive.perl:632
 #, perl-format
 msgid "touched %d path\n"
 msgid_plural "touched %d paths\n"
@@ -20997,67 +23356,44 @@
 msgstr[2] "тронуты %d путей\n"
 msgstr[3] "тронуты %d пути\n"
 
-#: git-add--interactive.perl:627
-msgid "Update"
-msgstr "Обновить"
-
-#: git-add--interactive.perl:639
-msgid "Revert"
-msgstr "Обратить изменения"
-
-#: git-add--interactive.perl:662
-#, perl-format
-msgid "note: %s is untracked now.\n"
-msgstr "примечание: %s теперь неотслеживаемый.\n"
-
-#: git-add--interactive.perl:673
-msgid "Add untracked"
-msgstr "Добавить неотслеживаемый"
-
-#: git-add--interactive.perl:679
-msgid "No untracked files.\n"
-msgstr "Нет неотслеживаемых файлов.\n"
-
-#: git-add--interactive.perl:1033
+#: git-add--interactive.perl:1056
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for staging."
 msgstr "Если патч применяется без ошибок, то изменённый блок будет сразу помечен для индексирования."
 
-#: git-add--interactive.perl:1036
+#: git-add--interactive.perl:1059
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for stashing."
 msgstr "Если патч применяется без ошибок, то изменённый блок будет сразу помечен для прятанья."
 
-#: git-add--interactive.perl:1039
+#: git-add--interactive.perl:1062
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for unstaging."
 msgstr "Если патч применяется без ошибок, то изменённый блок будет сразу помечен для убирания из индекса."
 
-#: git-add--interactive.perl:1042 git-add--interactive.perl:1051
+#: git-add--interactive.perl:1065 git-add--interactive.perl:1074
+#: git-add--interactive.perl:1080
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for applying."
 msgstr "Если патч применяется без ошибок, то изменённый блок будет сразу помечен для применения."
 
-#: git-add--interactive.perl:1045 git-add--interactive.perl:1048
+#: git-add--interactive.perl:1068 git-add--interactive.perl:1071
+#: git-add--interactive.perl:1077
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for discarding."
 msgstr "Если патч применяется без ошибок, то изменённый блок будет сразу помечен для отмены изменений."
 
-#: git-add--interactive.perl:1085
+#: git-add--interactive.perl:1114
 #, perl-format
 msgid "failed to open hunk edit file for writing: %s"
 msgstr "не удалось открыть файл редактирования блока изменений для записи: %s"
 
-#: git-add--interactive.perl:1086
-msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
-msgstr "Ручной режим редактирования блока изменений — смотрите ниже для небольшого руководства.\n"
-
-#: git-add--interactive.perl:1092
+#: git-add--interactive.perl:1121
 #, perl-format
 msgid ""
 "---\n"
@@ -21066,32 +23402,12 @@
 "Lines starting with %s will be removed.\n"
 msgstr "---\nЧтобы удалить «%s» строки, сделайте их ' ' строками (контекст).\nЧтобы удалить «%s» строки, удалите их.\nСтроки, начинающиеся с %s будут удалены.\n"
 
-#. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: git-add--interactive.perl:1100
-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"
-"aborted and the hunk is left unchanged.\n"
-msgstr "Если патч не применяется без ошибок, вам будет дана\nвозможность изменить его снова. Если все строки блока\nизменений удалены, то редактирование будет отменено\nи блок останется без изменений.\n"
-
-#: git-add--interactive.perl:1114
+#: git-add--interactive.perl:1143
 #, perl-format
 msgid "failed to open hunk edit file for reading: %s"
 msgstr "не удалось открыть файл редактирования блока изменений для чтения: %s"
 
-#. 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.
-#: git-add--interactive.perl:1213
-msgid ""
-"Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]?"
-" "
-msgstr "Изменённый вами блок не применяется. Редактировать снова (ответ «y» означает «нет»!) [y/n]? "
-
-#: git-add--interactive.perl:1222
+#: git-add--interactive.perl:1251
 msgid ""
 "y - stage this hunk\n"
 "n - do not stage this hunk\n"
@@ -21100,7 +23416,7 @@
 "d - do not stage this hunk or any of the later hunks in the file"
 msgstr "y - проиндексировать блок изменений\nn - не индексировать этот блок изменений\nq - выход; не индексировать этот и последующие блоки\na - проиндексировать этот и все последующие блоки файла\nd - не индексировать этот и последующие блоки файла"
 
-#: git-add--interactive.perl:1228
+#: git-add--interactive.perl:1257
 msgid ""
 "y - stash this hunk\n"
 "n - do not stash this hunk\n"
@@ -21109,7 +23425,7 @@
 "d - do not stash this hunk or any of the later hunks in the file"
 msgstr "y - спрятать изменения блока\nq - выход; не прятать изменения этого и последующих блоков\na - спрятать этот и все последующие блоки файла\nd - не прятать этот и последующие блоки файла"
 
-#: git-add--interactive.perl:1234
+#: git-add--interactive.perl:1263
 msgid ""
 "y - unstage this hunk\n"
 "n - do not unstage this hunk\n"
@@ -21118,7 +23434,7 @@
 "d - do not unstage this hunk or any of the later hunks in the file"
 msgstr "y - убрать из индекса этот блок изменений\nn - не убирать из индекса этот блок изменений\nq - выход; не убирать из индекса этот и последующие блоки\na - убрать из индекса этот и все последующие блоки файла\nd - не убирать из индекса этот и последующие блоки файла"
 
-#: git-add--interactive.perl:1240
+#: git-add--interactive.perl:1269
 msgid ""
 "y - apply this hunk to index\n"
 "n - do not apply this hunk to index\n"
@@ -21127,7 +23443,7 @@
 "d - do not apply this hunk or any of the later hunks in the file"
 msgstr "y - применить блок изменений к индексу\nn - не применять этот блок изменений к индексу\nq - выход; не применять этот и последующие блоки\na - применить этот блок и все последующие блоки файла\nd - не применять этот и последующие блоки файла"
 
-#: git-add--interactive.perl:1246
+#: git-add--interactive.perl:1275 git-add--interactive.perl:1293
 msgid ""
 "y - discard this hunk from worktree\n"
 "n - do not discard this hunk from worktree\n"
@@ -21136,7 +23452,7 @@
 "d - do not discard this hunk or any of the later hunks in the file"
 msgstr "y - отменить изменения этого блока в рабочем каталоге\nn - не отменять изменения этого блока в рабочем каталоге\nq - выход; не отменять изменения этого блока и всех последующих\na - отменить изменения этого и всех последующих блоков файла\nd - не отменять изменения этого и всех последующих блоков файла"
 
-#: git-add--interactive.perl:1252
+#: git-add--interactive.perl:1281
 msgid ""
 "y - discard this hunk from index and worktree\n"
 "n - do not discard this hunk from index and worktree\n"
@@ -21145,7 +23461,7 @@
 "d - do not discard this hunk or any of the later hunks in the file"
 msgstr "y - отменить изменения этого блока в индексе и рабочем каталоге\nn - не отменять изменения этого блока в индексе и рабочем каталоге\nq - выход; не отменять изменения этого блока и всех последующих\na - отменить изменения этого и всех последующих блоков файла\nd - не отменять изменения этого и всех последующих блоков файла"
 
-#: git-add--interactive.perl:1258
+#: git-add--interactive.perl:1287
 msgid ""
 "y - apply this hunk to index and worktree\n"
 "n - do not apply this hunk to index and worktree\n"
@@ -21154,7 +23470,16 @@
 "d - do not apply this hunk or any of the later hunks in the file"
 msgstr "y - применить блок изменений к индексу и рабочему каталогу\nn - не применять этот блок изменений к индексу и рабочему каталогу\nq - выход; не применять этот и последующие блоки\na - применить этот блок и все последующие блоки файла\nd - не применять этот и последующие блоки файла"
 
-#: git-add--interactive.perl:1273
+#: git-add--interactive.perl:1299
+msgid ""
+"y - apply this hunk to worktree\n"
+"n - do not apply this hunk to worktree\n"
+"q - quit; do not apply this hunk or any of the remaining ones\n"
+"a - apply this hunk and all later hunks in the file\n"
+"d - do not apply this hunk or any of the later hunks in the file"
+msgstr ""
+
+#: git-add--interactive.perl:1314
 msgid ""
 "g - select a hunk to go to\n"
 "/ - search for a hunk matching the given regex\n"
@@ -21167,158 +23492,45 @@
 "? - print help\n"
 msgstr "g - выбрать блок изменений на который нужно перейти\n/ - поиск блока изменений с помощью регулярного выражения\nj - не принимать решение по этому блоку, перейти на следующий без решения\nJ - не принимать решение по этому блоку, перейти на следующий\nk - не принимать решение по этому блоку, перейти на предыдущий без решения\nK - не принимать решение по этому блоку, перейти на предыдущий\ns - разделить текущий блок на блоки меньшего размера\ne - вручную отредактировать текущий блок\n? - вывести справку\n"
 
-#: git-add--interactive.perl:1304
+#: git-add--interactive.perl:1345
 msgid "The selected hunks do not apply to the index!\n"
 msgstr "Выбранные блоки не применяются без ошибок к индексу!\n"
 
-#: git-add--interactive.perl:1305
-msgid "Apply them to the worktree anyway? "
-msgstr "Все равно применить их к рабочему каталогу?"
-
-#: git-add--interactive.perl:1308
-msgid "Nothing was applied.\n"
-msgstr "Ничего не применено.\n"
-
-#: git-add--interactive.perl:1319
+#: git-add--interactive.perl:1360
 #, perl-format
 msgid "ignoring unmerged: %s\n"
 msgstr "игнорирую не слитое: %s\n"
 
-#: git-add--interactive.perl:1328
-msgid "Only binary files changed.\n"
-msgstr "Только изменения двоичных файлов.\n"
-
-#: git-add--interactive.perl:1330
-msgid "No changes.\n"
-msgstr "Нет изменений.\n"
-
-#: git-add--interactive.perl:1338
-msgid "Patch update"
-msgstr "Обновление патча"
-
-#: git-add--interactive.perl:1390
+#: git-add--interactive.perl:1479
 #, perl-format
-msgid "Stage mode change [y,n,q,a,d%s,?]? "
-msgstr "Проиндексировать изменение режима доступа [y,n,q,a,d%s,?]? "
+msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
 
-#: git-add--interactive.perl:1391
+#: git-add--interactive.perl:1480
 #, perl-format
-msgid "Stage deletion [y,n,q,a,d%s,?]? "
-msgstr "Проиндексировать удаление [y,n,q,a,d%s,?]? "
+msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
 
-#: git-add--interactive.perl:1392
+#: git-add--interactive.perl:1481
 #, perl-format
-msgid "Stage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Проиндексировать этот блок изменений [y,n,q,a,d%s,?]? "
+msgid "Apply addition to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
 
-#: git-add--interactive.perl:1395
+#: git-add--interactive.perl:1482
 #, perl-format
-msgid "Stash mode change [y,n,q,a,d%s,?]? "
-msgstr "Спрятать изменение режима доступа [y,n,q,a,d%s,?]? "
+msgid "Apply this hunk to worktree [y,n,q,a,d%s,?]? "
+msgstr ""
 
-#: git-add--interactive.perl:1396
-#, perl-format
-msgid "Stash deletion [y,n,q,a,d%s,?]? "
-msgstr "Спрятать удаление файла [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1397
-#, perl-format
-msgid "Stash this hunk [y,n,q,a,d%s,?]? "
-msgstr "Спрятать этот блок изменений [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1400
-#, perl-format
-msgid "Unstage mode change [y,n,q,a,d%s,?]? "
-msgstr "Убрать изменения режима доступа из индекса [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1401
-#, perl-format
-msgid "Unstage deletion [y,n,q,a,d%s,?]? "
-msgstr "Убрать удаление из индекса [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1402
-#, perl-format
-msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Убрать из индекса этот блок измений [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1405
-#, perl-format
-msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
-msgstr "Применить изменение режима доступа к индексу [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1406
-#, perl-format
-msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
-msgstr "Применить удаление к индексу [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1407
-#, perl-format
-msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
-msgstr "Применить этот блок к индексу [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1410
-#, perl-format
-msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
-msgstr "Отменить изменения режима доступа в рабочем каталоге [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1411
-#, perl-format
-msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
-msgstr "Отменить удаление в рабочем каталоге [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1412
-#, perl-format
-msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
-msgstr "Отменить изменения этого блока в рабочем каталоге [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1415
-#, perl-format
-msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Отменить изменения режима доступа в индексе и рабочем каталоге [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1416
-#, perl-format
-msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Отменить удаление в индексе и рабочем каталоге [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1417
-#, perl-format
-msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Отменить изменения этого блока в индексе и рабочем каталоге [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1420
-#, perl-format
-msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Применить изменения режима доступа к индексу и рабочему каталогу [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1421
-#, perl-format
-msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Применить удаление к индексу и рабочему каталогу [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1422
-#, perl-format
-msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Применить изменения этого блока к индексу и рабочему каталогу [y,n,q,a,d%s,?]? "
-
-#: git-add--interactive.perl:1522
+#: git-add--interactive.perl:1599
 msgid "No other hunks to goto\n"
 msgstr ""
 
-#: git-add--interactive.perl:1529
-msgid "go to which hunk (<ret> to see more)? "
-msgstr "на какой блок перейти (нажмите <ввод> чтобы увидеть еще)? "
-
-#: git-add--interactive.perl:1531
-msgid "go to which hunk? "
-msgstr "на какой блок перейти? "
-
-#: git-add--interactive.perl:1540
+#: git-add--interactive.perl:1617
 #, perl-format
 msgid "Invalid number: '%s'\n"
 msgstr "Неверный номер: «%s»\n"
 
-#: git-add--interactive.perl:1545
+#: git-add--interactive.perl:1622
 #, perl-format
 msgid "Sorry, only %d hunk available.\n"
 msgid_plural "Sorry, only %d hunks available.\n"
@@ -21327,36 +23539,32 @@
 msgstr[2] "Простите, но только %d блоков изменений доступно.\n"
 msgstr[3] "Простите, но только %d блока изменений доступно.\n"
 
-#: git-add--interactive.perl:1571
+#: git-add--interactive.perl:1657
 msgid "No other hunks to search\n"
 msgstr ""
 
-#: git-add--interactive.perl:1575
-msgid "search for regex? "
-msgstr "искать с помощью регулярного выражения? "
-
-#: git-add--interactive.perl:1588
+#: git-add--interactive.perl:1674
 #, perl-format
 msgid "Malformed search regexp %s: %s\n"
 msgstr "Регулярное выражение для поиска в неверном формате %s: %s\n"
 
-#: git-add--interactive.perl:1598
+#: git-add--interactive.perl:1684
 msgid "No hunk matches the given pattern\n"
 msgstr "Не найдены блоки, которые соответствуют указанному шаблону\n"
 
-#: git-add--interactive.perl:1610 git-add--interactive.perl:1632
+#: git-add--interactive.perl:1696 git-add--interactive.perl:1718
 msgid "No previous hunk\n"
 msgstr "Нет предыдущего блока\n"
 
-#: git-add--interactive.perl:1619 git-add--interactive.perl:1638
+#: git-add--interactive.perl:1705 git-add--interactive.perl:1724
 msgid "No next hunk\n"
 msgstr "Не следующего блока\n"
 
-#: git-add--interactive.perl:1644
+#: git-add--interactive.perl:1730
 msgid "Sorry, cannot split this hunk\n"
 msgstr ""
 
-#: git-add--interactive.perl:1650
+#: git-add--interactive.perl:1736
 #, perl-format
 msgid "Split into %d hunk.\n"
 msgid_plural "Split into %d hunks.\n"
@@ -21365,17 +23573,13 @@
 msgstr[2] "Разбито на %d блоков изменений.\n"
 msgstr[3] "Разбито на %d блока изменений.\n"
 
-#: git-add--interactive.perl:1660
+#: git-add--interactive.perl:1746
 msgid "Sorry, cannot edit this hunk\n"
 msgstr ""
 
-#: git-add--interactive.perl:1706
-msgid "Review diff"
-msgstr "Просмотреть изменения"
-
 #. TRANSLATORS: please do not translate the command names
 #. 'status', 'update', 'revert', etc.
-#: git-add--interactive.perl:1725
+#: git-add--interactive.perl:1811
 msgid ""
 "status        - show paths with changes\n"
 "update        - add working tree state to the staged set of changes\n"
@@ -21385,18 +23589,19 @@
 "add untracked - add contents of untracked files to the staged set of changes\n"
 msgstr "status        - показать пути с изменениями\nupdate        - добавить состояние рабочего каталога индекс\nrevert        - вернуть проиндексированный набор изменений к HEAD версии\npatch         - выбрать и выборочно обновить блоки\ndiff          - просмотреть изменения между HEAD и индексом\nadd untracked - добавить содержимое неотслеживаемых файлов в индекс\n"
 
-#: git-add--interactive.perl:1742 git-add--interactive.perl:1747
-#: git-add--interactive.perl:1750 git-add--interactive.perl:1757
-#: git-add--interactive.perl:1761 git-add--interactive.perl:1767
+#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
+#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
+#: git-add--interactive.perl:1853 git-add--interactive.perl:1860
+#: git-add--interactive.perl:1864 git-add--interactive.perl:1870
 msgid "missing --"
 msgstr "отсутствует --"
 
-#: git-add--interactive.perl:1763
+#: git-add--interactive.perl:1866
 #, perl-format
 msgid "unknown --patch mode: %s"
 msgstr "неизвестный режим для --patch: %s"
 
-#: git-add--interactive.perl:1769 git-add--interactive.perl:1775
+#: git-add--interactive.perl:1872 git-add--interactive.perl:1878
 #, perl-format
 msgid "invalid argument %s, expecting --"
 msgstr "недопустимый аргумент %s, ожидается --"
@@ -21409,65 +23614,72 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "локальный сдвиг времени больше или равен 24 часа\n"
 
-#: git-send-email.perl:219 git-send-email.perl:225
+#: git-send-email.perl:223 git-send-email.perl:229
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "редактор был завершен с ошибкой, отменяю всё"
 
-#: git-send-email.perl:302
+#: git-send-email.perl:312
 #, perl-format
 msgid "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "«%s» содержит промежуточную версию письма, которое вы готовите.\n"
 
-#: git-send-email.perl:307
+#: git-send-email.perl:317
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "«%s.final» содержит подготовленное письмо.\n"
 
-#: git-send-email.perl:326
+#: git-send-email.perl:410
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases не совместимо с другими опциями\n"
 
-#: git-send-email.perl:395 git-send-email.perl:656
+#: git-send-email.perl:484
+msgid ""
+"fatal: found configuration options for 'sendmail'\n"
+"git-send-email is configured with the sendemail.* options - note the 'e'.\n"
+"Set sendemail.forbidSendmailVariables to false to disable this check.\n"
+msgstr ""
+
+#: git-send-email.perl:489 git-send-email.perl:691
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "Нельзя запускать git format-patch вне репозитория\n"
 
-#: git-send-email.perl:398
+#: git-send-email.perl:492
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
 msgstr ""
 
-#: git-send-email.perl:470
+#: git-send-email.perl:505
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Неизвестное поле --suppress-cc: «%s»\n"
 
-#: git-send-email.perl:501
+#: git-send-email.perl:536
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Неизвестный параметр --confirm: «%s»\n"
 
-#: git-send-email.perl:529
+#: git-send-email.perl:564
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "предупреждение: сокращение для sendmail с кавычками не поддерживается: %s\n"
 
-#: git-send-email.perl:531
+#: git-send-email.perl:566
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "предупреждение: «:include:» не поддерживается: %s\n"
 
-#: git-send-email.perl:533
+#: git-send-email.perl:568
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "предупреждение: перенаправление «/file» или «|pipe» не поддерживается: %s\n"
 
-#: git-send-email.perl:538
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "предупреждение: строка sendmail не распознана: %s\n"
 
-#: git-send-email.perl:622
+#: git-send-email.perl:657
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -21477,36 +23689,36 @@
 "    * Giving --format-patch option if you mean a range.\n"
 msgstr "Файл «%s» существует, но это также может быть и\nдиапазоном коммитов для которых нужно сделать патчи. \nУстраните неоднозначность…\n\n    * Указав \"./%s\" если вы имеете в виду имя файла; или\n    * Передав опцию --format-patch если вы имеете в виду диапазон коммитов.\n"
 
-#: git-send-email.perl:643
+#: git-send-email.perl:678
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Не удалось выполнить opendir %s: %s"
 
-#: git-send-email.perl:667
+#: git-send-email.perl:702
 #, perl-format
 msgid ""
 "fatal: %s: %s\n"
 "warning: no patches were sent\n"
 msgstr "критическая ошибка: %s: %s\nпредупреждение: патчи не были отправлены\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:713
 msgid ""
 "\n"
 "No patch files specified!\n"
 "\n"
 msgstr "\nФайл с патчем не указан!\n\n"
 
-#: git-send-email.perl:691
+#: git-send-email.perl:726
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Нет строки с темой в %s?"
 
-#: git-send-email.perl:701
+#: git-send-email.perl:736
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Не удалось открыть для записи %s: %s"
 
-#: git-send-email.perl:712
+#: git-send-email.perl:747
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -21515,37 +23727,37 @@
 "Clear the body content if you don't wish to send a summary.\n"
 msgstr "Строки, начинающиеся с «GIT:» будут удалены.\nВозможно будет полезно включить статистику добавлений\nи удалений или таблицу содержимого к создаваемому патчу.\n\nОчистите содержимое, если вы не хотите отправлять письмо со сводкой изменений.\n"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:771
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Не удалось открыть %s: %s"
 
-#: git-send-email.perl:753
+#: git-send-email.perl:788
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Не удалось открыть %s.final: %s"
 
-#: git-send-email.perl:796
+#: git-send-email.perl:831
 msgid "Summary email is empty, skipping it\n"
 msgstr "Письмо со сводкой изменений пустое, попускаю его\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:831
+#: git-send-email.perl:866
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Вы уверены, что хотите использовать <%s> [y/N]? "
 
-#: git-send-email.perl:886
+#: git-send-email.perl:921
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
 msgstr "Следующие файлы 8 битные, но не содержат Content-Transfer-Encoding.\n"
 
-#: git-send-email.perl:891
+#: git-send-email.perl:926
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Какую 8 битную кодировку нужно указать [UTF-8]? "
 
-#: git-send-email.perl:899
+#: git-send-email.perl:934
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -21553,20 +23765,20 @@
 "has the template subject '*** SUBJECT HERE ***'. Pass --force if you really want to send.\n"
 msgstr "Отказываюсь отправить, т.к. патч\n\t%s\nсодержит шаблонный заголовок «*** SUBJECT HERE ***». Укажите параметр --force, если вы  действительно хотите отправить его.\n"
 
-#: git-send-email.perl:918
+#: git-send-email.perl:953
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "Кому должны быть отправлены письма (если нужно)?"
 
-#: git-send-email.perl:936
+#: git-send-email.perl:971
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "критическая ошибка: сокращение «%s» раскрывается само в себя\n"
 
-#: git-send-email.perl:948
+#: git-send-email.perl:983
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr "Message-ID который нужно использовать в поле In-Reply-To для первого письма (если нужно)? "
 
-#: git-send-email.perl:1006 git-send-email.perl:1014
+#: git-send-email.perl:1041 git-send-email.perl:1049
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "ошибка: не удалось выделить действительный адрес из: %s\n"
@@ -21574,16 +23786,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:1018
+#: git-send-email.perl:1053
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "Что нужно сделать с этим адресом? ([q] - выход|[d] - отбросить|[e] - редактировать): "
 
-#: git-send-email.perl:1335
+#: git-send-email.perl:1370
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "путь CA «%s» не существует"
 
-#: git-send-email.perl:1418
+#: git-send-email.perl:1453
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -21600,128 +23812,128 @@
 #. 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:1433
+#: git-send-email.perl:1468
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "Отправить это письмо? ([y] - да|[n] - нет|[e] - изменить|[q] - выход|[a] - все): "
 
-#: git-send-email.perl:1436
+#: git-send-email.perl:1471
 msgid "Send this email reply required"
 msgstr "Отправка этого ответа на письмо обязательна"
 
-#: git-send-email.perl:1464
+#: git-send-email.perl:1499
 msgid "The required SMTP server is not properly defined."
 msgstr "Требуемый SMTP сервер не был правильно объявлен."
 
-#: git-send-email.perl:1511
+#: git-send-email.perl:1546
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Сервер не поддерживает STARTTLS! %s"
 
-#: git-send-email.perl:1516 git-send-email.perl:1520
+#: git-send-email.perl:1551 git-send-email.perl:1555
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "Ошибка STARTTLS! %s"
 
-#: git-send-email.perl:1529
+#: git-send-email.perl:1564
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr "Не удалось инициализировать SMTP. Проверьте ваши настройки и попробуйте запустить в параметром --smtp-debug."
 
-#: git-send-email.perl:1547
+#: git-send-email.perl:1582
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "Не удалось отправить %s\n"
 
-#: git-send-email.perl:1550
+#: git-send-email.perl:1585
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Имитация отправки %s\n"
 
-#: git-send-email.perl:1550
+#: git-send-email.perl:1585
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Отправлено %s\n"
 
-#: git-send-email.perl:1552
+#: git-send-email.perl:1587
 msgid "Dry-OK. Log says:\n"
 msgstr "Имитация OK. Журнал содержит:\n"
 
-#: git-send-email.perl:1552
+#: git-send-email.perl:1587
 msgid "OK. Log says:\n"
 msgstr "OK. Журнал содержит:\n"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1599
 msgid "Result: "
 msgstr "Результат: "
 
-#: git-send-email.perl:1567
+#: git-send-email.perl:1602
 msgid "Result: OK\n"
 msgstr "Результат: OK\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1620
 #, perl-format
 msgid "can't open file %s"
 msgstr "не удалось открыть файл %s"
 
-#: git-send-email.perl:1632 git-send-email.perl:1652
+#: git-send-email.perl:1667 git-send-email.perl:1687
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Добавление cc: %s со строки «%s»\n"
 
-#: git-send-email.perl:1638
+#: git-send-email.perl:1673
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Добавление to: %s со строки «%s»\n"
 
-#: git-send-email.perl:1691
+#: git-send-email.perl:1730
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Добавление cc: %s со строки «%s»\n"
 
-#: git-send-email.perl:1726
+#: git-send-email.perl:1765
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) Добавление cc: %s со строки «%s»\n"
 
-#: git-send-email.perl:1837
+#: git-send-email.perl:1876
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Не удалось выполнить «%s»"
 
-#: git-send-email.perl:1844
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Добавление %s: %s из: «%s»\n"
 
-#: git-send-email.perl:1848
+#: git-send-email.perl:1887
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) не удалось закрыть поток к «%s»"
 
-#: git-send-email.perl:1878
+#: git-send-email.perl:1917
 msgid "cannot send message as 7bit"
 msgstr "не удалось отправить сообщение в 7 битной кодировке"
 
-#: git-send-email.perl:1886
+#: git-send-email.perl:1925
 msgid "invalid transfer encoding"
 msgstr "недопустимая кодировка передачи"
 
-#: git-send-email.perl:1927 git-send-email.perl:1979 git-send-email.perl:1989
+#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "не удалось открыть %s: %s\n"
 
-#: git-send-email.perl:1930
+#: git-send-email.perl:1969
 #, perl-format
 msgid "%s: patch contains a line longer than 998 characters"
 msgstr "%s: патч содержит строку длиннее чем 998 символов"
 
-#: git-send-email.perl:1947
+#: git-send-email.perl:1986
 #, 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:1951
+#: git-send-email.perl:1990
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
-msgstr "Вы действительно хотите отправить %s? [y - да|N - нет]: "
+msgstr "Вы действительно хотите отправить %s? [y] - да, [N] - нет: "
diff --git a/po/sv.po b/po/sv.po
index f7766d7..4a9f2f3 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,14 +1,14 @@
 # Swedish translations for Git.
-# Copyright (C) 2010-2020 Peter Krefting <peter@softwolves.pp.se>
+# Copyright (C) 2010-2021 Peter Krefting <peter@softwolves.pp.se>
 # This file is distributed under the same license as the Git package.
-# Peter Krefting <peter@softwolves.pp.se>, 2010-2020.
+# Peter Krefting <peter@softwolves.pp.se>, 2010-2021.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git 2.30.0\n"
+"Project-Id-Version: git 2.32.0\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-21 08:08+0100\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-20 13:31+0100\n"
 "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -23,9 +23,9 @@
 msgid "Huh (%s)?"
 msgstr "Vadå (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "kunde inte läsa indexet"
 
@@ -53,7 +53,7 @@
 msgid "could not stage '%s'"
 msgstr "kunde inte köa \"%s\""
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "kunde inte skriva indexet"
 
@@ -69,7 +69,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "observera: %s spåras inte längre.\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -209,12 +209,12 @@
 msgid "unstaged"
 msgstr "ej köad"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "sökväg"
@@ -736,7 +736,7 @@
 msgid "'git apply' failed"
 msgstr "\"git apply\" misslyckades"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -745,47 +745,47 @@
 "\n"
 "Slå av meddelandet med \"git config advice.%s false\""
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%stips: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en cherry-pick eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en incheckning eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en sammanslagning eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en \"pull\" eftersom du har filer som inte slagits samman."
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en \"revert\" eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en \"%s\" eftersom du har filer som inte slagits samman."
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -793,23 +793,41 @@
 "Rätta dem i din arbetskatalog och använd sedan \"git add/rm <fil>\"\n"
 "som lämpligt för att ange lösning och checka in."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Avslutar på grund av olöst konflikgt."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Checka in dina ändringar innan du utför sammanslagningen."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Avslutar på grund av ofullbordad sammanslagning."
 
-#: advice.c:290
+#: 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 ""
+"Följande sökvägsangivelser motsvarar inte någon kvalificerad sökväg, men "
+"motsvarar\n"
+"indexposter utanför den nuvarande glesa utcheckningen:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+"Du måste ta bort eller ändra glesningsreglerna för att uppdatera sådana "
+"poster."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -860,82 +878,78 @@
 msgid "unclosed quote"
 msgstr "citat ej stängt"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "okänt alternativ för whitespace: \"%s\""
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "okänt alternativ för ignore-whitespace: \"%s\""
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject och --3way kan inte användas samtidigt."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached och --3way kan inte användas samtidigt."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way utanför arkiv"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index utanför arkiv"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached utanför arkiv"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Kan inte förbereda reguljärt uttryck för tidsstämpeln %s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec returnerade %d för indata: %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "kan inte hitta filnamn i patchen på rad %d"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply: dålig git-diff - förväntade /dev/null, fick %s på rad %d"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: dålig git-diff - motsägande nytt filnamn på rad %d"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: dålig git-diff - motsägande gammalt filnamn på rad %d"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: dålig git-diff - förväntade /dev/null på rad %d"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "ogiltigt läge på rad %d: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "huvudet är inkonsekvent mellan rad %d och %d"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -951,92 +965,92 @@
 "sökvägskomponenter\n"
 "tas bort (rad %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git-diff-huvudet saknar filnamnsinformation (rad %d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: oväntad rad: %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "patch-fragment utan huvud på rad %d: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "ny fil beror på gammalt innehåll"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "borttagen fil har fortfarande innehåll"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "trasig patch på rad %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "nya filen %s beror på gammalt innehåll"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "borttagna filen %s har fortfarande innehåll"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** varning: filen %s blir tom men har inte tagits bort"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "trasig binärpatch på rad %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "binärpatchen på rad %d känns inte igen"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch med bara skräp på rad %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "kunde inte läsa symboliska länken %s"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "kunde inte öppna eller läsa %s"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "felaktig inledning på rad: \"%c\""
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Stycke %d lyckades på %d (offset %d rad)."
 msgstr[1] "Stycke %d lyckades på %d (offset %d rader)."
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Sammanhang reducerat till (%ld/%ld) för att tillämpa fragment vid %d"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1045,25 +1059,25 @@
 "vid sökning efter:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "saknar binära patchdata för \"%s\""
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "kan inte applicera en binärpatch baklänges utan den omvända patchen för \"%s"
 "\""
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "kan inte applicera binärpatch på \"%s\" utan den fullständiga indexraden"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1071,412 +1085,419 @@
 "patchen appliceras på \"%s\" (%s), som inte motsvarar det nuvarande "
 "innehållet."
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "patchen appliceras på en tom \"%s\", men den är inte tom"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "nödvändig efterbild %s för \"%s\" kan inte läsas"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "binärpatchen kan inte tillämpas på \"%s\""
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "binärpatchen på \"%s\" ger felaktigt resultat (förväntade %s, fick %s)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "patch misslyckades: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kan inte checka ut %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "misslyckades läsa %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "läser från \"%s\" som är på andra sidan av en symbolisk länk"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "sökvägen %s har ändrat namn/tagits bort"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: finns inte i indexet"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: motsvarar inte indexet"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr ""
-"arkivet saknar objekt som behövs för att falla tillbaka på 3-"
-"vägssammanslagning."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "arkivet saknar objekt som behövs för att utföra 3-vägssammanslagning."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "Faller tillbaka på trevägssammanslagning...\n"
+msgid "Performing three-way merge...\n"
+msgstr "Utför trevägssammanslagning...\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kunde inte läsa aktuellt innehåll i \"%s\""
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "Misslyckades falla tillbaka på trevägssammanslagning...\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "Misslyckades utföra trevägssammanslagning...\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Applicerade patchen på \"%s\" med konflikter.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Tillämpade patchen på  \"%s\" rent.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Faller tillbaka på direkt tillämpning...\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "patch för borttagning lämnar kvar filinnehåll"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: fel typ"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s har typen %o, förväntade %o"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "ogiltig sökväg \"%s\""
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: finns redan i indexet"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: finns redan i arbetskatalogen"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o)"
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o) för %s"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "den berörda filen \"%s\" är på andra sidan av en symbolisk länk"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: patchen kan inte tillämpas"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Kontrollerar patchen %s..."
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "sha1-informationen saknas eller är oanvändbar för undermodulen %s"
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "nytt läge för %s, som inte finns i nuvarande HEAD"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1-informationen saknas eller är oanvändbar (%s)."
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "kunde inte lägga till %s till temporärt index"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "kunde inte skriva temporärt index till %s"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "kan inte ta bort %s från indexet"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "trasig patch för undermodulen %s"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "kan inte ta status på nyligen skapade filen \"%s\""
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "kan inte skapa säkerhetsminne för nyligen skapade filen %s"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kan inte lägga till cachepost för %s"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "misslyckades skriva till \"%s\""
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "stänger filen \"%s\""
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "kan inte skriva filen \"%s\" läge %o"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Tillämpade patchen %s rent."
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "internt fel"
 
-#: apply.c:4557
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Tillämpade patchen %%s med %d refuserad..."
 msgstr[1] "Tillämpade patchen %%s med %d refuserade..."
 
-#: apply.c:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "trunkerar .rej-filnamnet till %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "kan inte öppna %s"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Stycke %d tillämpades rent."
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Refuserar stycke %d."
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Ignorerar patch \"%s\"."
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "indata känns inte igen"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "kan inte läsa indexfilen"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kan inte öppna patchen \"%s\": %s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "undertryckte %d fel i blanksteg"
 msgstr[1] "undertryckte %d fel i blanksteg"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d rad lägger till fel i blanksteg."
 msgstr[1] "%d rader lägger till fel i blanksteg."
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d rad applicerade efter att ha rättat fel i blanksteg."
 msgstr[1] "%d rader applicerade efter att ha rättat fel i blanksteg."
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "Kunde inte skriva ny indexfil"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "tillämpa inte ändringar som motsvarar given sökväg"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "tillämpa ändringar som motsvarar given sökväg"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "antal"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "ta bort <antal> inledande snedstreck från traditionella diff-sökvägar"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "ignorera tillägg gjorda av patchen"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "istället för att tillämpa patchen, skriv ut diffstat för indata"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "visa antal tillagda och borttagna rader decimalt"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "istället för att tillämpa patchen, skriv ut en summering av indata"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "istället för att tillämpa patchen, se om patchen kan tillämpas"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "se till att patchen kan tillämpas på aktuellt index"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "markera nya filer med \"git add --intent-to-add\""
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "tillämpa en patch utan att röra arbetskatalogen"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "godta en patch som rör filer utanför arbetskatalogen"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "tillämpa också patchen (använd med --stat/--summary/--check)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "försök en trevägssammanslagning om patchen inte kan tillämpas"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr ""
+"försök en trevägssammanslagning, fall tillbaka på normal patch om det "
+"misslyckas"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr "bygg ett temporärt index baserat på inbyggd indexinformation"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "sökvägar avdelas med NUL-tecken"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "se till att åtminstone <n> rader sammanhang är lika"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "åtgärd"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "detektera nya eller ändrade rader som har fel i blanktecken"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorera ändringar i blanktecken för sammanhang"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "tillämpa patchen baklänges"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "förvänta inte minst en rad sammanhang"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "lämna refuserade stycken i motsvarande *.rej-filer"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "tillåt överlappande stycken"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "var pratsam"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "tolerera felaktigt detekterade saknade nyradstecken vid filslut"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "lite inte på antalet linjer i styckehuvuden"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "rot"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "lägg till <rot> i alla filnamn"
 
@@ -1543,141 +1564,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <arkiv> [--exec <kmd>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "kan inte läsa %s"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "kunde inte läsa \"%s\""
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "sökvägsangivelsen \"%s\" motsvarade inte några filer"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "ingen sådan referens: %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "objektnamnet är inte giltigt: %s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "inte ett trädobjekt: %s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "aktuell arbetskatalog är inte spårad"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Hittar inte filen: %s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "Inte en vanlig fil: %s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "fmt"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "arkivformat"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "prefix"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "lägg till prefix till varje sökväg i arkivet"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "fil"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "ta med ospårade filer i arkivet"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "skriv arkivet till filen"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "läs .gitattributes i arbetskatalogen"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "rapportera arkiverade filer på standard fel"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "välj komprimeringsgrad"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "visa understödda arkivformat"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "arkiv"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "hämta arkivet från fjärrarkivet <arkiv>"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "kommando"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "sökväg till kommandot git-upload-archive på fjärren"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Oväntad flagga --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "Flaggan --exec kan endast användas tillsammans med --remote"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Oväntad flagga --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "Flaggorna --add-file och --remote kan inte användas samtidigt"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Okänt arkivformat \"%s\""
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argumentet stöd inte för formatet \"%s\": -%d"
@@ -1687,12 +1708,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%-*s är inte ett giltigt namn på attribut"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s inte tillåtet: %s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1775,12 +1796,12 @@
 msgid "a %s revision is needed"
 msgstr "en %s-revision behövs"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "kunde inte skapa filen \"%s\""
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "kunde inte läsa filen \"%s\""
@@ -1798,10 +1819,10 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Ingen testbar incheckning hittades.\n"
-"Kanske du startade med felaktiga sökvägsparametrar?\n"
+"Kanske du startade med felaktiga sökvägsargument?\n"
 
 #: bisect.c:1095
 #, c-format
@@ -1820,41 +1841,41 @@
 msgstr[0] "Bisect: %d revision kvar att testa efter denna %s\n"
 msgstr[1] "Bisect: %d revisioner kvar att testa efter denna %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents och --reverse fungerar inte så bra tillsammans."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "kan inte använda --contents med namn på slutgiltigt incheckningsobjekt"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse och --first-parent tillsammans kräver att du anger senaste "
 "incheckningen"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "misslyckades skapa revisionstraversering"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent tillsammans kräver ett intervall på första-förälder-"
 "kedjan"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "sökvägen %s i %s finns inte"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "kan inte läsa objektet %s för sökvägen %s"
@@ -1992,12 +2013,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Avgreningspunkten är inte giltig: \"%s\"."
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "\"%s\" är redan utcheckad på \"%s\""
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD i arbetskatalogen %s har inte uppdaterats"
@@ -2022,8 +2043,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "okänt huvud: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "kunde inte öppna \"%s\""
@@ -2066,278 +2087,291 @@
 msgid "pack-objects died"
 msgstr "pack-objects misslyckades"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list dog"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referensen \"%s\" exkluderas av argumenten till rev-list"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "version %d för paket (bundle) stöds ej"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "kan inte skriva paket (bundle) med version %d med algoritmen %s"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "okänt argument: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Vägrar skapa ett tomt paket (bundle)."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "kan inte skapa \"%s\""
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "index-pack dog"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "avslutande stycke-id förekommer tidigare än förväntat"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "felaktigt stycke-offset %<PRIx64> och %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "dubblerat stycke-ID %<PRIx32> upptäckt"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "avslutande stycke har id %<PRIx32> som inte är noll"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "felaktigt färgvärde: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "felaktig hashnings-version"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "incheckningsgraffilen %s är för liten"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "incheckningsgrafens signatur %X stämmer inte med signaturen %X"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "incheckningsgrafens version %X stämmer inte med versionen %X"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "incheckningsgrafens hashversion %X stämmer inte med versionen %X"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "incheckningsgraffilen är för liten för att innehålla %u stycken"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "felaktigt offset för stycke %08x%08x i incheckningsgraffilen"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "incheckningsgrafens stycke-id %08x förekommer flera gånger"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "incheckningsgrafen har inga bas-graf-stycken"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "incheckningsgrafens kedja stämmer inte"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "ogiltig incheckingsgrafkedja: rad \"%s\" är inte ett hash-värde"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "kan inte hitta alla incheckingsgraffiler"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "ogiltig incheckningsposition. incheckningsgrafen är troligtvis trasig"
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "kunde inte hitta incheckningen %s"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "incheckningsgraf kräver spillgenerationsdata, men har ingen"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "kunde inte tolka incheckningen %s"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "kunde inte hämta typ för objektet %s"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "Läser in kända incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expanderar nåbara incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "Rensar incheckningsmärken i incheckningsgraf"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "Beräknar topografiska nivåer för incheckningsgraf"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "Beräknar generationsvärden för incheckningsgraf"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Beräknar Bloom-filter för sökvägar ändrade av incheckningen"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Samlar refererade incheckningar"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "Söker incheckningar för incheckingsgraf i %d paket"
 msgstr[1] "Söker incheckningar för incheckingsgraf i %d paket"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "fel vid tillägg av paketet %s"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "fel vid öppning av indexet för %s"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Söker incheckningar för incheckingsgraf i packade objekt"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "Söker ytterligare kanter i incheckingsgraf"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "kunde inte skriva korrekt antal bas-graf-id:n"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "kunde inte skapa inledande kataloger för %s"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "kan inte skapa temporärt graflager"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "kan inte justera delade behörigheter för \"%s\""
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Skriver ut incheckningsgraf i %d pass"
 msgstr[1] "Skriver ut incheckningsgraf i %d pass"
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "Kunde inte öppna incheckningsgrafkedjefilen"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "kunde inte byta namn på bas-incheckingsgraffilen"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "kunde inte byta namn på temporär incheckningsgraffil"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Söker sammanslagna incheckningar"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "Slår ihop incheckningsgraf"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "försöker skriva en incheckningsgraf, men \"core.commitGraph\" är inaktiverad"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "för många incheckningar för att skriva graf"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "filen med incheckningsgraf har felaktig checksumma och är troligtvis trasig"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "incheckningsgrafen har felaktig OID-ordning: %s så %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "incheckningsgrafen har felaktig utbredningsvärde: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "kunde inte tolka incheckning %s från incheckningsgraf"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "Bekräftar incheckningar i incheckningsgrafen"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "misslyckades tolka incheckning %s från objektdatabasen för incheckningsgraf"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "rot-trädets OID för incheckningen %s i incheckningsgrafen är %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "incheckningsgrafens föräldralista för incheckningen %s är för lång"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "incheckningsgrafens förälder för %s är %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "incheckningsgrafens föräldralista för incheckningen %s avslutas för tidigt"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2345,7 +2379,7 @@
 "incheckningsgrafen har generationsnummer noll för incheckningen %s, men icke-"
 "noll på annan plats"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2353,20 +2387,22 @@
 "incheckningsgrafen har generationsnummer skilt från noll för incheckningen "
 "%s, men noll på annan plats"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "incheckningsgrafens generation för incheckningen %s är %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr ""
+"incheckningsgrafens generation för incheckningen %s är %<PRIuMAX> < "
+"%<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "incheckningsdatumet för incheckningen %s i incheckningsgrafen är %<PRIuMAX> !"
 "= %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "kunde inte tolka %s"
@@ -2396,29 +2432,29 @@
 "Slå av detta meddelande genom att skriva\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Incheckningen %s har en obetrodd GPG-signatur som påstås vara gjord av %s."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Incheckningen %s har en felaktig GPG-signatur som påstås vara gjord av %s."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Incheckning %s har inte någon GPG-signatur."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Incheckningen %s har en korrekt GPG-signatur av %s\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2432,7 +2468,7 @@
 msgid "memory exhausted"
 msgstr "minnet slut"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2447,296 +2483,340 @@
 "\t%s\n"
 "Det kan bero på cirkulära inkluderingar."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "kunde inte expandera inkluderingssökväg \"%s\""
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "relativa konfigureringsinkluderingar måste komma från filer"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "relativa konfigureringsinkluderingsvillkor måste komma från filer"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "felaktigt konfigurationsformat: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "miljövariabelnamn saknas för konfigurationen \"%.*s\""
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "miljövariabeln \"%s\" saknas för konfigurationen \"%.*s\""
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "nyckeln innehåller inte ett stycke: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "nyckeln innehåller inte variabelnamn: %s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "felaktig nyckel: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "ogiltig nyckel (nyradstecken): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "tom konfigurationsnyckel"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "falsk konfigureringsparameter: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "felaktigt format i %s"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "felaktigt antal i %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "för många poster i %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "konfigurationsnyckel saknas för %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "konfigurationsvärde saknas för %s"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "felaktig konfigurationsfil rad %d i blob:en %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "felaktig konfigurationsfil rad %d i filen %s"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "felaktig konfigurationsfil rad %d i standard in"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "felaktig konfigurationsfil rad %d i undermoduls-blob:en %s"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "felaktig konfigurationsfil rad %d i kommandoraden %s"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "felaktig konfigurationsfil rad %d i %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "utanför intervallet"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "ogiltig enhet"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\": %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i blob:en %s: %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i filen %s: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i standard in: %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i undermodul-blob:"
 "en %s: %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i kommandoraden "
 "%s: %s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i %s: %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "felaktigt booleskt konfigurationsvärde \"%s\" för \"%s\""
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "misslyckades expandera användarkatalog i: \"%s\""
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "\"%s\" för \"%s\" är inte en giltig tidsstämpel"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "förkortningslängd utanför intervallet: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "felaktigt zlib-komprimeringsgrad %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar kan bara vara ett tecken"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "felaktigt läge för skapande av objekt: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "felformat värde för %s"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "felformat värde för %s: %s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "måste vara en av nothing, matching, simple, upstream eller current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "felaktig paketkomprimeringsgrad %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "kunde inte läsa konfigurerings-blobobjektet \"%s\""
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referensen \"%s\" pekar inte på en blob"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "kan inte slå upp konfigurerings-bloben \"%s\""
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "kunde inte tolka %s"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "kan inte tolka kommandoradskonfiguration"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "okänt fel uppstod vid läsning av konfigurationsfilerna"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Felaktigt %s: \"%s\""
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "värdet \"%d\" för splitIndex.maxPercentage borde vara mellan 0 och 100"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "kunde inte tolka värdet \"%s\" från kommandoradskonfiguration"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "felaktig konfigurationsvariabel \"%s\" i filen \"%s\" på rad %d"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "felaktigt sektionsnamn \"%s\""
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s har flera värden"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "kan inte skriva nya konfigurationsfilen \"%s\""
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "kunde inte låsa konfigurationsfilen %s"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "öppnar %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "ogiltigt mönster: %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "ogiltig konfigurationsfil: \"%s\""
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat misslyckades på %s"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "kunde inte utföra mmap på \"%s\""
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod misslyckades på %s"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "kunde inte skriva konfigurationsfilen %s"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "kunde inte ställa in \"%s\" till \"%s\""
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "kunde inte ta bort inställning för \"%s\""
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "felaktigt namn på stycke: %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "värde saknas för \"%s\""
@@ -2798,45 +2878,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "protokollfel: förväntade inte \"%s\""
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "okänt objektformat \"%s\" angavs av servern"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "ogiltigt svar på ls-refs: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "förväntade \"flush\" efter ref-listan"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "förväntade svarsavslutningspaket efter ref-listan"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "protokollet \"%s\" stöds inte"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "kunde inte sätta SO_KEEPALIVE på uttaget"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Slår upp %s..."
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "kan inte slå upp %s (port %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2845,7 +2925,7 @@
 "klart.\n"
 "Ansluter till %s (port %s)..."
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2855,63 +2935,67 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "klart."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "kunde inte slå upp %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "okänd port %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "konstigt värdnamn \"%s\" blockerat"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "konstig port \"%s\" blockerad"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "kan inte starta mellanserver (proxy) %s"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "ingen sökväg angavs; se \"git help pull\" för giltig URL-syntax"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "radbrytningar är förbjudna i git://-värdnamn och arkivsökvägar"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh-varianten \"simple\" stöder inte -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh-varianten \"simple\" stöder inte -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh-varianten \"simple\" stöder inte val av port"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "konstigt sökvägsnamn \"%s\" blockerat"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "kunde inte grena (fork)"
 
 # Vague original, not networking-related, but rather related to the actual
 # objects in the database.
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Kontrollerar konnektivitet"
 
@@ -2927,17 +3011,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "kunde inte stänga rev-list:s standard in"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "felaktig crlf_action %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF skulle ersättas av LF i %s"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2946,12 +3030,12 @@
 "CRLF kommer att ersättas av LF i %s.\n"
 "Filen kommer att ha sina ursprungliga radbrytningar i din arbetskatalog"
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF skulle ersättas av CRLF i %s"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2960,12 +3044,12 @@
 "LF kommer att ersättas av CRLF i %s.\n"
 "Filen kommer att ha sina ursprungliga radbrytningar i din arbetskatalog"
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM är förbjudet i \"%s\" om kodat som %s"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -2974,12 +3058,12 @@
 "Filen \"%s\" innehåller byte order mark (BOM). Använd UTF-%.*s som "
 "teckenkodning i arbetskatalogen."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM krävs om \"%s\" kodas som %s"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2988,51 +3072,51 @@
 "Filen \"%s\" saknar byte order mark (BOM). Använd UTF-%sBE eller UTF-%sLE "
 "(beroende på byteordning) som teckenkodning i arbetskatalogen."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "misslyckades omkoda \"%s\" från %s till %s"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 "omkodning av \"%s\" från %s till %s och tillbaka ger inte samma resultat"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "kan inte grena (fork) för att köra externt filter \"%s\""
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "kunde inte skicka indata till externt filter \"%s\""
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "externt filter \"%s\" misslyckades %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "läsning från externt filter \"%s\" misslyckades"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "externt filter \"%s\" misslyckades"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "oväntad filtertyp"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "sökvägen för lång för externt filter"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -3041,16 +3125,16 @@
 "externt filter \"%s\" är inte längre tillgängligt trots att alla sökvägar "
 "inte har filtrerats"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false är inte giltig teckenkodning för arbetskatalogen"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: \"clean\"-filtret \"%s\" misslyckades"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: \"smudge\"-filtret \"%s\" misslyckades"
@@ -3175,23 +3259,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "Markerade %d öar, klar.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "okänt värde för --diff-merges: %s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base fungerar inte med intervall"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base fungerar bara med incheckningar"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "kan inte hämta HEAD"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "ingen sammanslagningsbas hittades"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "flera sammanslagningsbaser hittades"
 
@@ -3257,35 +3346,35 @@
 "Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "extern diff dog, stannar vid %s"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, -check och -s är ömsesidigt uteslutande"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S och --find-object är ömsesidigt uteslutande"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow kräver exakt en sökvägsangivelse"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "ogiltigt värde för --stat: %s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s förväntar ett numeriskt värde"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3294,42 +3383,42 @@
 "Misslyckades tolka argument till flaggan --dirstat/-X;\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "okänd ändringsklass \"%c\" i --diff-filter=%s"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "okänt värde efter ws-error-highlight=%.*s"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "kunde inte slå upp \"%s\""
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s förväntar formen <n>/<m>"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s förväntar ett tecken, fick \"%s\""
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "felaktigt argument till --color-moved: %s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "ogiltigt läge %s\" i --color-moved-ws"
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3337,154 +3426,154 @@
 "flaggan diff-algorithm godtar\"myers\", \"minimal\", \"patience\" och "
 "\"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "ogiltigt argument för %s"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "ogiltigt reguljärt uttryck angavs för -I: \"%s\""
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "misslyckades tolka argument till flaggan --submodule: \"%s\""
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "felaktigt argument --word-diff: %s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Formatflaggor för diff-utdata"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "skapar patch"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "undertryck diff-utdata"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "skapa diffar med <n> rader sammanhang"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "generera diff i råformat"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "synonym till \"-p --raw\""
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "synonym till \"-p --stat\""
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "maskinläsbar --stat"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "skriv bara ut den sista raden för --stat"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "skriv ut distributionen av relativa mängder ändringar för varje underkatalog"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "synonym för --dirstat=cumulative"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonym för --dirstat=filer,param1,param2..."
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "varna om ändringar introducerar konfliktmarkörer eller blankstegsfel"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "kortfattad summering såsom skapade, namnbyten och ändrade lägen"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "visa endast namnen på ändrade filer"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "visa endast namn och status för ändrade filer"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<bredd>[,<namn-bredd>[,<antal>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "skapa diffstat"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<bredd>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "generera en diffstat med given bredd"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "generera en diffstat med given namnbredd"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "generera en diffstat med given grafbredd"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<antal>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "generera diffstat med begränsade rader"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "skapa kompakt översikt i diffstat"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "skapa en binärdiff som kan appliceras"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "visa fullständiga objektnamn i \"index\"-rader för läget både före och efter"
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "visa färgad diff"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<typ>"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3492,7 +3581,7 @@
 "ljusmarkera blankstegsfel i \"context\" (sammanhang), \"old\" (gamla) eller "
 "\"new\" (nya) rader i diffen"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3500,87 +3589,87 @@
 "skriv inte om sökvägsnamn och använd NUL-tecken som fältseparerare i --raw "
 "eller --numstat"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<prefix>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "visa givet källprefix istället för \"a/\""
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "visa givet målprefix istället för \"b/\""
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "lägg till ytterligare prefix på alla rader i utdata"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "visa inte käll- eller målprefix"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "visa sammnhang mellan diff-stycken upp till angivet antal rader"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<tecken>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "ange tecken för att ange ny rad istället för \"+\""
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "ange tecken för att ange gammal rad istället för \"-\""
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "ange tecken för att ange sammanhang istället för \" \""
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Diff-namnbytesflaggor"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "dela upp kompletta omskrivningar till ta bort och skapa-par"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "detektera namnändringar"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "ta bort för-version för borttagningar"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "detektera kopior"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "använd oförändrade som källa för att hitta kopior"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "inaktivera detektering av namnbyten"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "använd tomma blob:ar som namnändringskälla"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "fortsätt lista historiken för en fil bortom namnändringar"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3588,163 +3677,163 @@
 "förhindra namnbyte/kopie-detektering om antalet namnbyten/kopior överskriver "
 "given gräns"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Alternativ för diff-algoritm"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "skapa minsta möjliga diff"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorera blanktecken vid radjämförelse"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorera ändringar i antal blanktecken vid radjämförelse"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorera blanktecken vid radslut"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "ignorera CR-tecken vid radslut"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "ignorera ändringar i rader som är helt blanka"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<reguttr>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignorera ändringar där samtliga rader motsvarar <reguttr>"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heuristik för att flytta diff-gränser för lättare läsning"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"patience diff\""
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"histogram diff\""
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<algoritm>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "välj en diff-algoritm"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<text>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"anchored diff\""
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<läge>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "visa orddiff, där <läge> avgränsar ändrade ord"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "använd <reguttr> för att bestämma vad som är ett ord"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "motsvarar --word-diff=color --word-diff-regex=<reguttr>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "flyttade kodrader färgas på annat sätt"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "hur blanktecken ignoreras i --color-moved"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Andra diff-flaggor"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "vid start från underkatalog, uteslut ändringar utanför och visa relativa "
 "sökvägar"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "hantera alla filer som text"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "växla två indatafiler, vänd diffen"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "avsluta med 1 vid ändringar, annars 0"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "slå av alla utdata från programmet"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "tillåt köra en extern diff-hjälpare"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr "kör externt textkonverteringsfiler när binärfiler jämförs"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<när>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignorera ändringar i undermoduler när diffen skapas"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "ange hur ändringar i undermoduler visas"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "dölj \"git add -N\"-poster från indexet"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "tolka \"git add -N\"-poster som äkta i indexet"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<sträng>"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "se efter ändringar som ändrar antalet förekomster av angiven sträng"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3752,54 +3841,66 @@
 "se efter ändringar som ändrar antalet förekomster av angivet reguljärt "
 "uttryck"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "visa alla ändringar i ändringsuppsättningen med -S eller -G"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tolka <sträng> i -S som utökade POSIX-reguljära uttryck"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "styr ordningen i vilken filer visas i utdata"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<sökväg>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "visa ändringen i angiven sökväg först"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "hoppa över utdata fram till angiven sökväg"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<objekt-id>"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "se efter ändringar som ändrar antalet förekomster av angivet objekt"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "välj filter efter diff-typ"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<fil>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Skriv utdata till en specifik fil"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "onöjaktig namnbytesdetektering utfördes inte på grund av för många filer."
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr "hittade bara kopior från ändrade sökvägar på grund av för många filer."
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3811,10 +3912,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "kunde inte läsa orderfilen \"%s\""
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Utför onöjaktig namnbytesdetektering"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Sökvägen \"%s\" finns inte i diffen"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3841,35 +3947,35 @@
 msgid "disabling cone pattern matching"
 msgstr "inaktiverar konmönstermatchning"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "kan inte använda %s som exkluderingsfil"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "kunde inte öppna katalogen \"%s\""
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "misslyckades hämta kärnans namn och information"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr "ospårad cache är inaktiverad på systemet eller platsen"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "indexfilen trasig i arkivet %s"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "kunde inte skapa kataloger för %s"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "kunde inte migrera git-katalog från \"%s\" till \"%s\""
@@ -3879,21 +3985,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "tips: Väntar på att textredigeringsprogrammet ska stänga filen...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Filtrerar innehåll"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "kunde inte ta status på filen \"%s\""
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "felaktig git-namnrymdssökväg \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "kunde inte ställa in GIT_DIR till \"%s\""
@@ -3903,260 +4009,272 @@
 msgid "too many args to run %s"
 msgstr "för många flaggor för att köra %s"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: förväntade grund lista"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: förväntade ett flush-paket efter grund lista"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: förväntade ACK/NAK, fick flush-paket"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: förväntade ACK/NAK, fick \"%s\""
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "kunde inte skriva till fjärren"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc kräver \"multi_ack_detailed\""
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ogiltig \"shallow\"-rad: %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ogiltig \"unshallow\"-rad: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "objektet hittades inte: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "fel i objekt: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "ingen \"shallow\" hittades: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "förväntade shallow/unshallow, fick %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "fick %s %d %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "ogiltig incheckning %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "ger upp"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "klart"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "fick %s (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Markerar %s som komplett"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "har redan %s (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-patch: kunde inte grena av sidbandsmultiplexare"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "protokollfel: felaktigt packhuvud"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-patch: kunde inte grena av %s"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-patch: ogiltig utdata från index-pack"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s misslyckades"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "fel i sidbands-avmultiplexare"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Serverversionen är %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "Servern stöder %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "Servern stöder inte klienter med grunda arkiv"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "Servern stöder inte --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "Servern stöder inte --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "Servern stöder inte --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "Servern stöder inte det här arkivets objektformat"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "inga gemensamma incheckningar"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "källarkivet är grunt, tillåter inte kloning."
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-patch: hämtning misslyckades."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "omaka algoritmer: klient %s; server %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "servern stöder inte algoritmen \"%s\""
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "Servern stöder inte grunda förfrågningar"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "Servern stöder filter"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "kunde inte skriva anrop till fjärren"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "fel vid läsning av styckehuvudet \"%s\""
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "förväntade \"%s\", tog emot \"%s\""
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "oväntad bekräftelserad: \"%s\""
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "fel vid hantering av bekräftelser: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "väntade att paketfil skulle sändas efter \"ready\""
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr ""
 "väntade inte att några ytterligare sektioner skulle sändas efter \"ready\""
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "fel vid hantering av grund (\"shallow\") info: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "förväntade wanted-ref, fick %s"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "oväntad wanted-ref: \"%s\""
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "fel vid hantering av önskade referenser: %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: förväntade svarsavslutningspaket"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "inget motsvarande fjärrhuvud"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "fjärren sände inte alla nödvändiga objekt"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "oväntat \"ready\" från fjärr"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "ingen sådan fjärreferens: %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Servern tillåter inte förfrågan om ej tillkännagivet objekt %s"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "kunde inte skapa temporära fil"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "misslyckades skriva fristående signatur till \"%s\""
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg misslyckades signera data"
 
@@ -4165,7 +4283,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "ignorera felaktig färg \"%.*s\" i log.graphColors"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4173,18 +4291,18 @@
 "angivet mönster innehåller NULL-byte (via -f <fil>). Detta stöds endast med -"
 "P under PCRE v2"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "\"%s\" kunde inte läsa %s"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "misslyckades ta status på \"%s\""
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "\"%s\": kort läsning"
@@ -4254,7 +4372,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "Dessa vanliga Git-kommandon används i olika situationer:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "okänd kommandolisttyp \"%s\""
@@ -4408,47 +4526,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "namnet består enbart av ej tillåtna tecken: %s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "felaktigt datumformat: %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "förväntade \"tree:<djup>\""
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:sökväg-filter stöds inte längre"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "\"%s\" för \"object:type=<typ>\" är inte en giltig objekttyp"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "felaktig filterspecifikation: \"%s\""
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "måste använda specialsekvens i delfilter-spec: \"%c\""
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "förväntade någonting efter combine:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "flera filterspecifikationer kan inte kombineras"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "kunde inte uppgradera arkivformat till att stöda delvis klon"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "kunde inte nå gles blob på \"%s\""
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "kunde inte tolka gles filterdata i %s"
@@ -4463,7 +4586,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "posten \"%s\" i trädet %s har blob-läge, men är inte en blob"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "kunde inte läsa in rot-trädet för incheckningen %s"
@@ -4493,11 +4616,279 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "Kunde inte skapa \"%s.lock\": %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "ogiltigt värde \"%s\" för lsrefs.unborn"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "förväntade \"flush\" efter ls-refs-argument"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "citerad CRLF upptäcktes"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr "felaktig funktion \"%s\" för \"%s\""
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Misslyckades slå ihop undermodulen %s (ej utcheckad)"
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Misslyckades slå ihop undermodulen %s (incheckningar saknas)"
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr ""
+"Misslyckades slå ihop undermodulen %s (incheckningar följer inte "
+"sammanslagningsbasen)"
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Obs: Snabbspolar undermodulen %s till %s"
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Misslyckades slå ihop undermodulen %s"
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Misslyckades slå ihop undermodulen %s, men en möjlig lösning finns:\n"
+"%s\n"
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Om detta är riktigt lägger du bara till det i indexet, till\n"
+"exempel så här:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"vilket godtar lösningen.\n"
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Misslyckades slå ihop undermodulen %s, men flera möjliga sammanslagningar "
+"finns:\n"
+"%s"
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr "Misslyckades exekvera intern sammanslagning"
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "Kunde inte lägga till %s till databasen"
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr "Slår ihop %s automatiskt"
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"KONFLIKT (implicit nämnändrad kat): Befintlig fil/kat vid %s är i vägen för "
+"implicit namnändrad(e) katalog(er) som lägger dit följande sökväg(ar): %s."
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"KONFLIKT (implicit namnändrad kat): Kan inte koppla mer än en sökväg till "
+"%s; implicita katalognamnändringar försökte lägga följande sökvägar där: %s"
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"KONFLIKT (namnändrad delad katalog): Osäker på var %s ska namnbytas till; "
+"den har namnbytts till flera andra kataloger, utan att någon destination "
+"fick en majoritet av filerna."
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"VARNING: Undviker att applicera namnändring %s -> %s på %s, då %s själv har "
+"bytt namn."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Uppdaterad sökväg: %s lade till %s inuti en katalog som bytte namn i %s; "
+"flyttar den till %s."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Uppdaterad sökväg: %s bytte namn till %s i %s, inuti en katalog som bytte "
+"namn i %s; flyttar den till %s."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"KONFLIKT (filplacering): %s lade till %s inuti en katalog som bytte namn i "
+"%s, föreslår att den bör flyttas till%s."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"KONFLIKT (filplacering): %s bytte namn till %s i %s, inuti en katalog som "
+"bytte namn i %s; flyttar den till %s."
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"KONFLIKT (namnbyte/namnbyte): %s namnbytt till %s i %s och till %s i %s."
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"KONFLIKT (namnbyte involverad i krock): namnbyte av %s -> %s har "
+"innehållskonflikter OCH krockar med en annan sökväg; detta kan leda till "
+"nästlade konfliktmarkörer."
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"KONFLIKT (namnbyte/radera): %s namnbytt till %s i %s, men borttagen i %s."
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "kan inte läsa objektet %s"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "objektet %s är inte en blob"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"KONFLIKT (fil/katalog): katalogen är i vägen för %s från %s; flyttar den "
+"till %s istället."
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"KONFLIKT (olika typer): %s hade olika typer på varje sida; namnbytte bägge "
+"så att de kan protokollföras någonstans."
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"KONFLIKT (olika typer): %s hade olika typer på varje sida; namnbytte den ena "
+"så att de kan protokollföras någonstans."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "innehåll"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "tillägg/tillägg"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "undermodul"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "KONFLIKT (%s): Sammanslagningskonflikt i %s"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"KONFLIKT (ändra/radera): %s raderad i %s och ändrad i %s. Versionen %s av %s "
+"lämnad i trädet."
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+"Observera: %s är inte à jour och i vägen för att checka ut version i "
+"konflikt; gammal upplaga har nytt namn %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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "samling av sammanslagningsinfo misslyckades för träden %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4507,10 +4898,9 @@
 "sammanslagning:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Redan à jour!"
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Redan à jour."
 
 #: merge-recursive.c:356
 msgid "(bad commit)\n"
@@ -4529,136 +4919,88 @@
 "add_cacheinfo misslyckades uppdatera för sökvägen \"%s\"; avslutar "
 "sammanslagningen."
 
-#: merge-recursive.c:874
+#: merge-recursive.c:876
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "misslyckades skapa sökvägen \"%s\"%s"
 
-#: merge-recursive.c:885
+#: merge-recursive.c:887
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Tar bort %s för att göra plats för underkatalog\n"
 
-#: merge-recursive.c:899 merge-recursive.c:918
+#: merge-recursive.c:901 merge-recursive.c:920
 msgid ": perhaps a D/F conflict?"
 msgstr ": kanske en K/F-konflikt?"
 
-#: merge-recursive.c:908
+#: merge-recursive.c:910
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "vägrar förlora ospårad fil vid \"%s\""
 
-#: merge-recursive.c:949 builtin/cat-file.c:41
+#: merge-recursive.c:951 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "kan inte läsa objektet %s: \"%s\""
 
-#: merge-recursive.c:954
+#: merge-recursive.c:956
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "blob förväntades för %s \"%s\""
 
-#: merge-recursive.c:979
+#: merge-recursive.c:981
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "misslyckades öppna \"%s\": %s"
 
-#: merge-recursive.c:990
+#: merge-recursive.c:992
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "misslyckades skapa symboliska länken \"%s\": %s"
 
-#: merge-recursive.c:995
+#: merge-recursive.c:997
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "vet inte hur %06o %s \"%s\" ska hanteras"
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Misslyckades slå ihop undermodulen %s (ej utcheckad)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Misslyckades slå ihop undermodulen %s (incheckningar saknas)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr ""
-"Misslyckades slå ihop undermodulen %s (incheckningar följer inte "
-"sammanslagningsbasen)"
-
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1227 merge-recursive.c:1239
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Snabbspolar undermodulen %s till följande incheckning:"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1230 merge-recursive.c:1242
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Snabbspolar undermodulen %s"
 
-#: merge-recursive.c:1251
+#: merge-recursive.c:1265
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (sammanslagning efter incheckningar "
 "hittades inte)"
 
-#: merge-recursive.c:1255
+#: merge-recursive.c:1269
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Misslyckades slå ihop undermodulen %s (ej snabbspolning)"
 
-#: merge-recursive.c:1256
+#: merge-recursive.c:1270
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Hittade en möjlig lösning av sammanslagning för undermodulen:\n"
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Om detta är riktigt lägger du bara till det i indexet, till\n"
-"exempel så här:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"vilket godtar lösningen.\n"
-
-#: merge-recursive.c:1268
+#: merge-recursive.c:1282
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (flera sammanslagningar hittades)"
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Misslyckades exekvera intern sammanslagning"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "Kunde inte lägga till %s till databasen"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "Slår ihop %s automatiskt"
-
-#: merge-recursive.c:1402
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Fel: Vägrar förlora ospårad fil vid %s; skriver till %s istället."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4667,7 +5009,7 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad "
 "i trädet."
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4676,7 +5018,7 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s till %s i %s. Versionen %s av "
 "%s lämnad i trädet."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4685,7 +5027,7 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad "
 "i trädet vid %s."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4694,40 +5036,40 @@
 "KONFLIKT (%s/radera): %s raderad i %s och %s till %s i %s. Versionen %s av "
 "%s lämnad i trädet vid %s."
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "namnbyte"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "namnbytt"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Vägrar förlora lortig fil vid \"%s\""
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "Vägrar förlora ospårad fil vid %s, trots att den är i vägen."
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr "KONFLIKT (namnbyte/tillägg): Namnbyte %s->%s i %s. Lade till %s i %s"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s är en katalog i %s lägger till som %s istället"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Vägrar förlora ospårad fil vid %s; lägger till som %s istället"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4736,17 +5078,17 @@
 "KONFLIKT (namnbyte/namnbyte): Namnbyte \"%s\"->\"%s\" på grenen \"%s\" "
 "namnbyte \"%s\"->\"%s\" i \"%s\"%s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (lämnad olöst)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "KONFLIKT (namnbyte/namnbyte): Namnbyte %s->%s i %s. Namnbyte %s->%s i %s"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4757,25 +5099,7 @@
 "katalogen %s bytte namn till flera andra kataloger, utan att någon "
 "destination fick en majoritet av filerna."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"KONFLIKT (implicit nämnändrad kat): Befintlig fil/kat vid %s är i vägen för "
-"implicit namnändrad(e) katalog(er) som lägger dit följande sökväg(ar): %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"KONFLIKT (implicit namnändrad kat): Kan inte koppla mer än en sökväg till "
-"%s; implicita katalognamnändringar försökte lägga följande sökvägar där: %s"
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4784,151 +5108,80 @@
 "KONFLIKT (namnbyte/namnbyte): Namnbytt katalog %s->%s i %s. Namnbytt katalog "
 "%s->%s i %s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"VARNING: Undviker att applicera namnändring %s -> %s på %s, då %s själv har "
-"bytt namn."
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "kan inte läsa objektet %s"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "objektet %s är inte en blob"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "ändra"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "ändrad"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "innehåll"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "tillägg/tillägg"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Hoppade över %s (sammanslagen samma som befintlig)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "undermodul"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "KONFLIKT (%s): Sammanslagningskonflikt i %s"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Lägger till som %s istället"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Uppdaterad sökväg: %s lade till %s inuti en katalog som bytte namn i %s; "
-"flyttar den till %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"KONFLIKT (filplacering): %s lade till %s inuti en katalog som bytte namn i "
-"%s, föreslår att den bör flyttas till%s."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Uppdaterad sökväg: %s bytte namn till %s i %s, inuti en katalog som bytte "
-"namn i %s; flyttar den till %s."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"KONFLIKT (filplacering): %s bytte namn till %s i %s, inuti en katalog som "
-"bytte namn i %s; flyttar den till %s."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "Tar bort %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "fil/katalog"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "katalog/fil"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "KONFLIKT (%s): Det finns en katalog med namnet %s i %s. Lägger till %s som %s"
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "Lägger till %s"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "KONFLIKT (tillägg/tillägg): Sammanslagningskonflikt i %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "sammanslagning av träden %s och %s misslyckades"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Slår ihop:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "hittade %u gemensam förfader:"
 msgstr[1] "hittade %u gemensamma förfäder:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "sammanslagningen returnerade ingen incheckning"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Kunde inte tolka objektet \"%s\""
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "Kunde inte skriva indexet."
 
@@ -4936,185 +5189,196 @@
 msgid "failed to read the cache"
 msgstr "misslyckades läsa cachen"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "kunde inte skriva ny indexfil"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "multi-pack-indexets OID-utbredning har fel storlek"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-indexfilen %s är för liten"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "multi-pack-indexsignaturen 0x%08x stämmer inte med signaturen 0x%08x"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-indexversionen %d stöds inte"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index-hashversionen %u stämmer inte med versionen %u"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "felaktigt offset för stycke (för stort)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "avslutande multi-pack-index-stycke-id förekommer tidigare än förväntat"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index saknar krävd paketnamn-stycke"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index saknar krävt OID-utbredningsstycke"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index saknar krävt OID-uppslagnignsstycke"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index saknar krävt objekt-offsetstycke"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index-paketnamn i fel ordning: \"%s\" före \"%s\""
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "bad pack-int-id: %u (%u paket totalt)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index skriver 64-bitars offset, men off_t är för liten"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "misslyckades läsa paketfilen \"%s\""
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "misslyckades öppna paketindexet \"%s\""
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "misslyckades hitta objekt %d i paketfilen"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "kan inte spara reverse-index-fil"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Lägger till paketfiler till multi-pack-index"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "såg inte paketfilen %s som skulle kastas"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "okänt föredraget paket: %s"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "föredraget paket \"%s\" har löpt ut"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "inga paketfiler att indexera."
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Skriver stycken till multi-pack-index"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "misslyckades ta bort %s"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "misslyckades städa multi-pack-index på %s"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "multi-pack-indexfilen finns, men kunde inte tolkas"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Ser efter refererade packfiler"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid-utbredning i fel ordning: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "midx saknar oid"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Bekräftar OID-ordning i multi-pack-index"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid-uppslagning i fel ordning: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Sorterar objekt efter packfil"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Bekräftar offset för objekt"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "misslyckades läsa paketpost för oid[%d] = %s"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "misslyckades läsa paketindex för paketfil %s"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "felaktigt objekt-offset för oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Räknar refererade objekt"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Ser efter och tar bort orefererade packfiler"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "kunde inte starta pack-objects"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "kunde inte avsluta pack-objects"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "misslyckades skapa lazy_dir-tråd: %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "misslyckades skapa lazy_name-tråd: %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "misslyckades utföra join på lazy_name-tråd: %s"
@@ -5159,6 +5423,358 @@
 msgid "Bad %s value: '%s'"
 msgstr "Felaktigt värde på %s: \"%s\""
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "objektkatalogen %s finns inte; se .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "kunde inte normalisera supplerande objektsökväg: %s"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: ignorerar supplerande objektlager, för djup nästling"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "kan inte normalisera objektkatalogen: %s"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "kan inte utföra \"fdopen\" på suppleantlåsfil"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "kan inte läsa \"alternates\"-filen"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "kan inte flytta ny \"alternates\"-fil på plats"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "sökvägen \"%s\" finns inte"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "referensarkivet \"%s\" som en länkad utcheckning stöds inte ännu."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "referensarkivet \"%s\" är grunt"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "referensarkivet \"%s\" är ympat"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "felaktig rad vid tolkning av supplerande referenser: %s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "försök att utföra \"mmap\" på %<PRIuMAX> över gränsen %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap misslyckades"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "objektfilen %s är tom"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "trasigt löst objekt \"%s\""
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "skräp i slutet av löst objekt \"%s\""
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "felaktig objekttyp"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "kan inte packa upp %s-huvud med --allow-unknown-type"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "kan inte packa upp %s-huvudet"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "kan inte tolka %s-huvud med --allow-unknown-type"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "kan inte tolka %s-huvud"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "misslyckades läsa objektet %s"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "ersättningen %s hittades inte för %s"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "löst objekt %s (lagrat i %s) är trasigt"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "packat objekt %s (lagrat i %s) är trasigt"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "kunde inte skriva filen %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "kan inte sätta behörigheten till \"%s\""
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "fel vid skrivning av fil"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "fel vid stängning av fil för löst objekt"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"otillräcklig behörighet för att lägga till objekt till arkivdatabasen %s"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "kan inte skapa temporär fil"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "kunde inte skriva fil för löst objekt"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "kan inte utföra \"deflate\" på nytt objekt %s (%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "\"deflateend\" på objektet %s misslyckades (%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "förvirrad av instabil objektkälldata för %s"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "\"utime()\" misslyckades på %s"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "kan inte läsa objekt för %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "trasik incheckning"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "trasig tagg"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "läsfel vid indexering av %s"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "för lite lästes vid indexering av %s"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: misslyckades lägga in i databasen"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: filtypen stöds ej"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s är inte ett giltigt objekt"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s är inte ett giltigt \"%s\"-objekt"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "kan inte öppna %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "hash stämmer inte för %s (förväntade %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "kan inte utföra \"mmap\" för %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "kan inte packa upp huvud för %s"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "kan inte tolka huvud för %s"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "kan inte tolka innehåll i %s"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "kort objekt-ID %s är tvetydigt"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Kandidaterna är:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git skapar normalt aldrig referenser som slutar med 40 hexadecimala\n"
+"tecken, då detta ignoreras när du anger 40-hex enbart. Dessa\n"
+"referenser kan skapas av misstag. Till exempel, för\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"där \"$br\" på något sätt blivit tomt och en 40-hex-referens skapats.\n"
+"Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n"
+"genom att köra \"git config advice.objectNameWarning false\""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "loggen för \"%.*s\" räcker bara tillbaka till %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "loggen för \"%.*s\" har bara %d poster"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "Sökvägen \"%s\" finns på disken, men inte i \"%.*s\""
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"sökvägen \"%s\" finns, men inte i \"%s\"\n"
+"tips: Menade du \"%.*s:%s\", även känd som \"%.*s:./%s\"?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "sökvägen \"%s\" finns inte i \"%.*s\""
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"sökvägen \"%s\" finns i indexet men inte i etapp %d\n"
+"tips: Menade du \":%d:%s\"?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"sökvägen \"%s\" finns i indexet, men inte i \"%s\"\n"
+"tips: Menade du \":%d:%s\", även känd som \":%d:./%s\"?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "sökvägen \"%s\" finns på disk, men inte i indexet"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "sökvägen \"%s\" finns inte (varken i disken eller i indexet)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "relativ sökväg kan inte användas utanför arbetskatalogen"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "felaktigt objektnamn \"%.*s\"."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5169,36 +5785,85 @@
 msgid "object %s is a %s, not a %s"
 msgstr "objektet %s är en %s, inte en %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "objektet %s har okänd typ-id %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "kunde inte tolka objektet: %s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "hashvärde stämmer inte överens %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "kan inte hämta storlek på %s"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "kan inte hämta diskanvändning för %s"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "reverse-index-filen %s är för liten"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "reverse-index-filen %s är trasig"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "reverse-index-filen %s har okänd signatur"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "reverse-index-filen %s har versionen %<PRIu32> som inte stöds"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "reverse-index-filen %s har hash-ID %<PRIu32> som inte stöds"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "kan inte både skriva och bekräfta reverse-index"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "kunde inte ta status: %s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "kunde inte göra %s läsbar"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "kunde inte skriva kontraktsfilen \"%s\""
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset före slutet av packfilen (trasig .idx?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "offset före slutet av packindex för %s (trasigt index?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "offset borton slutet av packindex för %s (trunkerat index?)"
@@ -5264,31 +5929,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "menade du \"--%s\" (med två bindestreck)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "alias för --%s"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "okänd flagga \"%s\""
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "okänd flagga \"%c\""
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "okänd icke-ascii-flagga i strängen: \"%s\""
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "användning: %s"
@@ -5296,17 +5961,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "     eller: %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-TAL"
 
@@ -5315,29 +5980,29 @@
 msgid "Could not make %s writable by group"
 msgstr "Kunde inte göra %s skrivbar för gruppen"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "Specialtecknet \"\\\" tillåts inte som sista tecken i attributvärde"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Endast en \"attr:\"-angivelse tillåten."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "attr-angivelse kan inte vara tom"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "ogiltigt attributnamn %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 "de globala sökvägsinställningarna \"glob\" och \"noglob\" är inkompatibla"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5345,51 +6010,51 @@
 "den globala sökvägsinställningen \"literal\" är inkompatibel med alla andra "
 "globala sökvägsinställningar"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "ogiltig parameter för sökvägsuttrycket för \"prefix\""
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Felaktigt sökvägsuttryck \"%.*s\" i \"%s\""
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "\")\" saknas i slutet av sökvägsuttrycket för \"%s\""
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Ej implementerat sökvägsuttryckmagi \"%c\" i \"%s\""
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: \"literal\" och \"glob\" är inkompatibla"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: \"%s\" är utanför arkivet på \"%s\""
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "\"%s\" (minnesstöd: \"%c\")"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: sökvägsuttrycket hanteras inte av det här kommandot: %s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "sökvägsangivelsen \"%s\" är på andra sidan av en symbolisk länk"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "linjen er felaktigt citerad: %s"
@@ -5410,7 +6075,7 @@
 msgid "flush packet write failed"
 msgstr "fel vid skrivning av \"flush\"-paket"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "protokollfel: omöjligt lång rad"
 
@@ -5418,47 +6083,48 @@
 msgid "packet write with format failed"
 msgstr "paketskrivning med format misslyckades"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr "paketskrivning misslyckades - data överskrider maximal paketstorlek"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "paketskrivning misslyckades"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "paketskrivning misslyckades: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "läsfel"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "fjärren lade på oväntat"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "protokollfel: felaktig radlängdstecken: %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "protokollfel: felaktig radlängd: %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "fjärrfel: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "Uppdaterar indexet"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "kunde inte skapa trådad lstat: %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "kunde inte tolka format för --pretty"
 
@@ -5480,24 +6146,28 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "kontraktsfjärr kan inte börja med \"/\": %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info: förväntade \"flush\" efter argument"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Tar bort duplicerade objekt"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "kunde inte starta \"log\""
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "kunde inte läsa utdata från \"log\""
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "kunde inte tolka incheckningen \"%s\""
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5506,65 +6176,69 @@
 "kunde inte tolka första raden i \"log\"-updata: börjar inte med \"commit \": "
 "\"%s\""
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "kunde inte tolka git-huvudet \"%.*s\""
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "misslyckades skapa diff"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only och --right-only är ömsesidigt uteslutande"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "kunde inte tolka loggen för \"%s\""
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "lägger inte till filalias \"%s\" (\"%s\" finns redan i indexet)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "kan inte skapa tom blob i objektdatabasen"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: kan bara lägga till vanliga filer, symboliska länkar och git-kataloger"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "\"%s\" har inte någon utcheckad incheckning"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "kan inte indexera filen \"%s\""
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "kan inte lägga till \"%s\" till indexet"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "kan inte ta status på \"%s\""
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "\"%s\" finns både som en fil och en katalog"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Uppdatera indexet"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5573,7 +6247,7 @@
 "index.version satt, men värdet är ogiltigt.\n"
 "Använder version %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5582,139 +6256,143 @@
 "GIT_INDEX_VERSION satt, men värdet är ogiltigt.\n"
 "Använder version %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "felaktig signatur 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "felaktig indexversion %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "felaktig sha1-signatur för indexfil"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "index använder filtillägget %.4s, vilket vi inte förstår"
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "ignorerar filtillägget %.4s"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "okänt format 0x%08x på indexpost"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "felformat namnfält i indexet, nära sökvägen \"%s\""
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "osorterade köposter i index"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "flera köposter för den sammanslagna filen \"%s\""
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "osorterade köposter för \"%s\""
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "indexfilen trasig"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "kunde inte läsa in cache_entries-tråden: %s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "kunde inte utföra join på cache_entries-tråden: %s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: öppning av indexfilen misslyckades"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: kan inte ta startus på det öppna indexet"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: indexfilen mindre än förväntat"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: kan inte koppla indexfilen"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "kunde inte skapa load_index_extensions-tråden: %s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "kunde inte utföra join på load_index_extensions-tråden: %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "kunde inte uppdatera delat index \"%s\""
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "trasigt index, förväntade %s i %s, fick %s"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "kunde inte stänga \"%s\""
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "misslyckades omvandla till glest index"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "kunde inte ta status på \"%s\""
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "kunde inte öppna git-katalog: %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "misslyckades ta bort länken: %s"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "kan inte rätta behörighetsbitar på \"%s\""
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: kan inte återgå till kö 0"
@@ -5744,7 +6422,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5753,7 +6434,7 @@
 "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"
+".       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 ""
@@ -5765,6 +6446,13 @@
 "e, edit <incheckning> = använd incheckning, men stanna för tillägg\n"
 "s, squash <incheckning> = använd incheckning, men infoga i föregående "
 "incheckning\n"
+"f, fixup [-C | -c] <incheckning> = som \"squash\" men behåll bara "
+"loggmeddelandet\n"
+"                   från föregående incheckning, såvida inte -C används, då "
+"används\n"
+"                   istället bara den här incheckningens meddelande; -c är "
+"samma\n"
+"                   som -C, men öppnar redigeringsprogrammet\n"
 "f, fixup <incheckning> = som \"squash\", men förkasta "
 "incheckningsmeddelandet\n"
 "x, exec <kommando> = kör kommando (resten av raden) i skalet\n"
@@ -5775,19 +6463,19 @@
 "t, reset <etikett> = återställ HEAD till en etikett\n"
 "m, merge [-C <incheckning> | -c <incheckning>] <etikett> [# <enrads>]\n"
 ".       skapa en sammanslagning med ursprungligt meddelande (eller\n"
-".       enrads, om inget incheckningsmeddelande angavs). Använd\n"
-".       -v <incheckning> för att skriva om meddelandet.\n"
+".       enrads, om inget incheckningsmeddelande angavs); använd\n"
+".       -c <incheckning> för att skriva om meddelandet.\n"
 "\n"
 "Du kan byta ordning på raderna; de utförs uppifrån och ned.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Ombasera %s på %s (%d kommando)"
 msgstr[1] "Ombasera %s på %s (%d kommandon)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5796,7 +6484,7 @@
 "Ta inte bort rader. Använd \"drop\" för att specifikt förkasta en "
 "incheckning.\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5804,7 +6492,7 @@
 "\n"
 "Om du tar bort en rad KOMMER DEN INCHECKNINGEN ATT FÖRLORAS.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5818,7 +6506,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5828,19 +6516,19 @@
 "Ombaseringen kommer dock att avbrytas om du tar bort allting.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "kunde inte skriva \"%s\""
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "kunde inte skriva \"%s\"."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5849,7 +6537,7 @@
 "Varning: vissa incheckningar kan av misstag ha tappats.\n"
 "Tappade incheckningar (nyaste först):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5869,14 +6557,14 @@
 "\" (fel).\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "kunde inte läsa \"%s\"."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "försvunnen"
 
@@ -5895,233 +6583,248 @@
 msgid "ahead %d, behind %d"
 msgstr "före %d, bakom %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "förväntat format: %%(color:<color>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "okänd färg: %%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Heltalsvärde förväntades refname:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Heltalsvärde förväntades refname:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "okänt %%(%s)-argument: %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) tar inte argument"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "okänt %%(objectsize)-argument: %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) tar inte argument"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) tar inte argument"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "okänt %%(subject)-argument: %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "förvändate %%(trailers:nyckel=<värde>)"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "okänt %%(trailers)-argument: %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "positivt värde förväntat contents:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "okänt %%(contents)-argument: %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "positivt värde förväntat \"%s\" i %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "okänt argument \"%s\" i %%(%s)"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "okänd e-postalternativ: %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "förväntat format: %%(align:<bredd>,<position>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "okänd position:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "okänd bredd:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "okänt %%(align)-argument: %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "positiv bredd förväntad med atomen %%(align)"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "okänt %%(if)-argument: %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "felformat fältnamn: %.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "okänt fältnamn: %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "inte ett git-arkiv, men fältet \"%.*s\" kräver tillgång till objektdata"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "format: atomen %%(if) använd utan en %%(then)-atom"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "format: atomen %%(then) använd utan en %%(if)-atom"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "format: atomen %%(then) använd mer än en gång"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "format: atomen %%(then) använd efter %%(else)"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "format: atomen %%(else) använd utan en %%(if)-atom"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "format: atomen %%(else) använd utan en %%(then)-atom"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "format: atomen %%(else) använd mer än en gång"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "format: atomen %%(end) använd utan motsvarande atom"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "felformad formatsträng %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "ingen gren, ombaserar %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(ingen gren, ombaserar %s)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "ingen gren, ombaserar frånkopplat HEAD %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(ingen gren, ombaserar frånkopplat HEAD %s)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "ingen gren, \"bisect\" startad på %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(ingen gren, \"bisect\" startad på %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "ingen gren"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD frånkopplat vid %s)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD frånkopplat från %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(ingen gren)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "objektet %s saknas för %s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer misslyckades på %s för %s"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "felformat objekt vid \"%s\""
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorerar referens med trasigt namn %s"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignorerar trasig referens %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: atomen %%(end) saknas"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "felformat objektnamn %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "flaggan \"%s\" måste peka på en incheckning"
@@ -6171,50 +6874,50 @@
 msgid "ignoring dangling symref %s"
 msgstr "ignorerar dinglande symbolisk referens %s"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "loggen för referensen %s har lucka efter %s"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "loggen för referensen %s slutade oväntat på %s"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "loggen för %s är tom"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "vägrar uppdatera referens med trasigt namn \"%s\""
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref misslyckades för referensen \"%s\": %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "flera uppdateringar för referensen \"%s\" tillåts inte"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "referensuppdateringar förbjudna i karantänmiljö"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "referensuppdateringar avbrutna av krok"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "\"%s\" finns; kan inte skapa \"%s\""
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "kan inte hantera \"%s\" och \"%s\" samtidigt"
@@ -6278,12 +6981,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "värdet \"%s\" i mönstret innehåller ingen \"*\""
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "käll-referensspecifikationen %s motsvarar ingen"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "käll-referensspecifikationen %s motsvarar mer än en"
@@ -6292,7 +6995,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6315,7 +7018,7 @@
 "\n"
 "Inget av dem fungerade, så vi gav upp. Ange fullständig referens."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6326,7 +7029,7 @@
 "Var det meningen att skapa en ny gren genom att sända\n"
 "till \"%s:refs/heads/%s\"?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6337,7 +7040,7 @@
 "Var det meningen att skapa en ny tagg genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6348,7 +7051,7 @@
 "Var det meningen att tagga ett nytt träd genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6359,114 +7062,114 @@
 "Var det meningen att tagga en ny blob genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s kan inte slås upp till en gren"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "kan inte ta bort \"%s\": fjärreferensen finns inte"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "fjärr-referensspecifikationen \"%s\" motsvarar mer än en"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "fjärr-referensen \"%s\" hämtar från mer än en källa"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD pekar inte på en gren"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "okänd gren: \"%s\""
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "ingen standarduppström angiven för grenen \"%s\""
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "uppströmsgrenen \"%s\" är inte lagrad som en fjärrspårande gren"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "push-målet \"%s\" på fjärren \"%s\" har ingen lokalt spårande gren"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "grenen \"%s\" har ingen fjärr för \"push\""
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "\"push\"-referensspecifikation för \"%s\" innehåller inte \"%s\""
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "\"push\" har inget mål (push.default är \"ingenting\")"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "\"enkel push\" motsvarar flera olika mål"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "Kunde inte hitta fjärr-referensen %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignorerar märklig referens \"%s\" lokalt"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Din gren är baserad på \"%s\", men den har försvunnit uppströms.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (använd \"git branch --unset-upstream\" för att rätta)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Din gren är à jour med \"%s\".\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Din gren och \"%s\" pekar på olika incheckningar.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (använd \"%s\" för detaljer)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Din gren ligger före \"%s\" med %d incheckning.\n"
 msgstr[1] "Din gren ligger före \"%s\" med %d incheckningar.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (använd \"git push\" för att publicera dina lokala incheckningar)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6476,11 +7179,11 @@
 msgstr[1] ""
 "Din gren ligger efter \"%s\" med %d incheckningar, och kan snabbspolas.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (använd \"git pull\" för att uppdatera din lokala gren)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6495,11 +7198,11 @@
 "Din gren och \"%s\" har divergerat,\n"
 "och har %d respektive %d olika incheckningar.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (använd \"git pull\" för att slå ihop fjärrgrenen med din egen)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "kan inte tolka förväntat objektnamn \"%s\""
@@ -6519,96 +7222,96 @@
 msgid "replace depth too high for object %s"
 msgstr "ersättningsdjupet för högt för objektet %s"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "trasig MERGE_RR"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "kunde inte skriva rerere-post"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "fel vid skrivning av \"%s\" (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "misslyckades spola \"%s\""
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "kunde inte tolka konflikt-stycket i \"%s\""
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "\"utime()\" misslyckades på \"%s\""
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "misslyckades skriva \"%s\""
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "Köade \"%s\" med sparad lösning."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Sparade lösning för \"%s\"."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Löste \"%s\" med tidigare lösning."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "kan inte ta bort lös länk \"%s\""
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Sparade förhandsbild för \"%s\""
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "kunde inte skapa katalogen \"%s\""
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "misslyckades uppdatera tillstånd för sammanslagningsproblem i \"%s\""
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "inget sparat sammanslagningsresultat för \"%s\""
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "kan inte ta bort länken \"%s\""
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Uppdaterade förhandsbild för \"%s\""
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Glömde lösning för \"%s\"\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "kan inte uppdatera katalogen rr-cache"
 
@@ -6616,43 +7319,38 @@
 msgid "could not determine HEAD revision"
 msgstr "kunde inte bestämma HEAD-revision"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "kunde inte hitta trädet för %s."
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<paketfil> stöds inte längre"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "okänt värde för --diff-merges: %s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "din nuvarande gren verkar vara trasig"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "din nuvarande gren \"%s\" innehåller ännu inte några incheckningar"
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L stöder ännu inte andra diff-format än -p och -s"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "misslyckades öppna /dev/null"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "kan inte skapa asynkron tråd: %s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6661,33 +7359,41 @@
 "Kroken \"%s\" ignorerades eftersom den inte är markerad som körbar.\n"
 "Du kan inaktivera varningen med \"git config advice.ignoredHook false\"."
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "oväntat flush-paket vid läsning av fjärruppackningsstatus"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "kunde inte tolka fjärruppackningsstatus: %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "fjärruppackning misslyckades: %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "misslyckades underteckna push-certifikatet"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack: kunde inte starta (fork) underprocessen för fetch"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "sänd-förhandling misslyckades; fortsätter ändå med sändningen"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "mottagarsidan stöder inte arkivets hashningsalgoritm"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "mottagarsidan stöder inte push med --signed"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -6695,47 +7401,47 @@
 "sänder inte push-certifikat eftersom mottagarsidan inte stlder push med --"
 "signed"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "mottagarsidan stöder inte push med --atomic"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "mottagarsidan stöder inte push-flaggor"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "felaktigt incheckningsmeddelandestädningsläge \"%s\""
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "kunde inte ta bort \"%s\""
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "kunde inte ta bort \"%s\""
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "revert"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "okänd funktion: %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6743,7 +7449,7 @@
 "efter att ha löst konflikterna, markera de rättade sökvägarna\n"
 "med \"git add <sökvägar>\" eller \"git rm <sökvägar>\""
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6753,43 +7459,43 @@
 "med \"git add <sökvägar>\" eller \"git rm <sökvägar>\"\n"
 "och checka in resultatet med \"git commit\""
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "kunde inte låsa \"%s\""
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "kunde inte skriva till \"%s\""
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "kunde inte skriva radslut till \"%s\""
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "misslyckades färdigställa \"%s\""
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "dina lokala ändringar skulle skrivas över av %s."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "checka in dina ändringar eller använd \"stash\" för att fortsätta."
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: snabbspola"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Felaktigt städningsläge %s"
@@ -6797,65 +7503,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Kunde inte skriva ny indexfil"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "kan inte uppdatera cacheträd"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "kunde inte bestämma HEAD:s incheckning"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "ingen nyckel i  \"%.*s\""
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "kan inte ta bort citering av värdet \"%s\""
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "kunde inte öppna \"%s\" för läsning"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "\"GIT_AUTHOR_NAME\" har redan angivits"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "\"GIT_AUTHOR_EMAIL\" har redan angivits"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "\"GIT_AUTHOR_DATE\" har redan angivits"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "okänd variabel \"%s\""
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "\"GIT_AUTHOR_NAME\" saknas"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "\"GIT_AUTHOR_EMAIL\" saknas"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "\"GIT_AUTHOR_DATE\" saknas"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6884,11 +7590,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "kroken \"prepare-commit-msg\" misslyckades"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6915,7 +7621,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6940,340 +7646,344 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "kunde inte slå upp en precis skapad incheckning"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "kunde inte tolka en precis skapad incheckning"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "kunde inte bestämma HEAD efter att ha skapat incheckning"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "frånkopplad HEAD"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (rotincheckning)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "kunde inte tolka HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s är inte en incheckning!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "kunde inte tolka HEAD:s incheckning"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "kunde inte tolka incheckningens författare"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree misslyckades skriva ett träd"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "kunde inte läsa incheckningsmeddelande från \"%s\""
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "ogiltig författar-identitet \"%s\""
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "trasig författare: saknar datuminformation"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "kunde inte skriva incheckningsobjekt"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "kunde inte uppdatera %s"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "kunde inte tolka incheckningen %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "kunde inte tolka föräldraincheckningen %s"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "okänt kommando: %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Det här är en kombination av %d incheckningar."
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "behöver en HEAD-incheckning att rätta"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "kunde inte läsa HEAD"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "kunde inte läsa HEAD:s incheckningsmeddelande"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "kan inte skriva \"%s\""
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Det här är 1:a incheckningsmeddelandet:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "kunde inte läsa incheckningsmeddelande för %s"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Det här är incheckningsmeddelande %d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "1:a incheckningsmeddelandet kommer hoppas över:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Incheckningsmeddelande %d kommer hoppas över:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Det här är en kombination av %d incheckningar."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "kan inte skriva \"%s\""
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "behöver en HEAD-incheckning att rätta"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "kunde inte läsa HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "kunde inte läsa HEAD:s incheckningsmeddelande"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "kunde inte läsa incheckningsmeddelande för %s"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "din indexfil har inte slagits ihop."
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "kan inte göra \"fixup\" på rotincheckning"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "incheckning %s är en sammanslagning, men flaggan -m angavs inte."
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "incheckning %s har inte förälder %d"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "kan inte hämta incheckningsmeddelande för %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: kan inte tolka föräldraincheckningen %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "kunde inte byta namn på \"%s\" till \"%s\""
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "kunde inte ångra %s... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "kunde inte tillämpa %s... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "utelämnar %s %s -- patchinnehållet finns redan uppströms\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: misslyckades läsa indexet"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: misslyckades uppdatera indexet"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s tar inte argument: \"%s\""
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argument saknas för %s"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "kunde inte tolka \"%s\""
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "ogiltig rad %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "kan inte utföra \"%s\" utan en föregående incheckning"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "avbryter pågående \"cherry-pick\""
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "avbryter pågående \"revert\""
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "rätta det med \"git rebase --edit-todo\"."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "oanvändbart manus: \"%s\""
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "inga incheckningar lästes."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "kan inte utföra \"cherry-pick\" under en \"revert\"."
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "kan inte utföra \"revert\" under en \"cherry-pick\"."
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "felaktigt värde för %s: %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "oanvändbar squash-onto"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "trasigt manus: \"%s\""
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "den angivna uppsättningen incheckningar är tom"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "en \"revert\" pågår redan"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "testa \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "en \"cherry-pick\" pågår redan"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "testa \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "kunde inte skapa \"sequencer\"-katalogen \"%s\""
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "kunde inte låsa HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "ingen \"cherry-pick\" eller \"revert\" pågår"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "kan inte bestämma HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "kan inte avbryta från en gren som ännu inte är född"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kan inte öppna \"%s\""
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "kan inte läsa \"%s\": %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "oväntat filslut"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "sparad HEAD-fil från före \"cherry-pick\", \"%s\", är trasig"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Du verkar ha flyttat HEAD.\n"
 "Spolar inte tillbaka, kontrollera HEAD!"
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "ingen \"revers\" pågår"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "ingen \"cherry-pick\" pågår"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "kunde inte hoppa över incheckningen"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "ingenting att hoppa över"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7282,16 +7992,16 @@
 "har du redan checkat in?\n"
 "testa \"git %s --continue\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "kan inte läsa HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "kan inte kopiera in \"%s\" till \"%s\""
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7310,27 +8020,27 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Kunde inte tillämpa %s... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Kunde inte slå ihop %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "kunde inte kopiera in \"%s\" till \"%s\""
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Kör: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7345,11 +8055,11 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "och gjorde ändringar till indexet och/eller arbetskatalogen\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7366,90 +8076,90 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "ogiltigt etikettnamn: \"%.*s\""
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "skriver fejkad rotincheckning"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "skriver squash-onto"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "kunde inte upplösa \"%s\""
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "kan inte slå ihop utan en aktuell incheckning"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "kan inte tolka \"%.*s\""
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "inget att slå samman: \"%.*s\""
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "\"octopus\"-sammanslagning kan inte köras ovanpå en [ny rot]"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "kunde inte läsa incheckningsmeddelande för \"%s\""
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "kunde inte ens försöka slå ihop \"%.*s\""
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "sammanslagning: Kunde inte skriva ny indexfil"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "Kan inte utföra \"autostash\""
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Oväntat svar från stash: \"%s\""
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Kunde inte skapa katalog för \"%s\""
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Skapade autostash: %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "kunde inte utföra \"reset --hard\""
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Tillämpade autostash.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "kan inte spara %s"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7460,29 +8170,29 @@
 "Dina ändringar är säkra i stashen.\n"
 "Du kan när som helst använda \"git stash pop\" eller \"git stash drop\".\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "Tillämpning av autostash gav konflikter."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Autostash finns; skapar ny stash-post."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "kunde inte koppla från HEAD"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Stoppade på HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Stoppade på %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7503,58 +8213,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Ombaserar (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Stoppade på %s... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "okänt kommando %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "kunde inte läsa orig-head"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "kunde inte läsa \"onto\""
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "kunde inte uppdatera HEAD till %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Lyckades ombasera och uppdatera %s.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "kan inte ombasera: Du har oköade ändringar."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "kan inte lägga till incheckning som inte finns"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "ogiltig fil: \"%s\""
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "ogiltigt innehåll: \"%s\""
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7564,50 +8274,50 @@
 "Du har ändringar i arbetskatalogen som inte checkats in. Checka in dem\n"
 "först och kör sedan \"git rebase --continue\" igen."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "kunde inte skriva fil: \"%s\""
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "kunde inte ta bort CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "kunde inte checka in köade ändringar."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: kan inte göra \"cherry-pick\" på typen \"%s\""
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: felaktig revision"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "kan inte ångra som första incheckning"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: flaggor som inte stöds"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: fel när revisioner skulle förberedas"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "inget att göra"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "kunde inte hoppa över onödiga \"pick\"-kommandon"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "skriptet har redan omordnats."
 
@@ -7753,7 +8463,7 @@
 "monteringspunkten %s)\n"
 "Stoppar vid filsystemsgräns (GIT_DISCOVERY_ACROSS_FILESYSTEM är inte satt)."
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7762,408 +8472,69 @@
 "problem med filläges-värdet i core.sharedRepository (0%.3o).\n"
 "Ägaren av filerna måste alltid ha läs- och skrivbehörighet."
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "misslyckades öppna /dev/null eller \"dup\""
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "\"fork\" misslyckades"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "\"setsid\" misslyckades"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "försöker använda glest index utan \"cone\"-läge"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "kan inte uppdatera cacheträd, behåller fullt läge"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "objektkatalogen %s finns inte; se .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "kunde inte normalisera supplerande objektsökväg: %s"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: ignorerar supplerande objektlager, för djup nästling"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "kan inte normalisera objektkatalogen: %s"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "kan inte utföra \"fdopen\" på suppleantlåsfil"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "kan inte läsa \"alternates\"-filen"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "kan inte flytta ny \"alternates\"-fil på plats"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "sökvägen \"%s\" finns inte"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "referensarkivet \"%s\" som en länkad utcheckning stöds inte ännu."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "referensarkivet \"%s\" är grunt"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "referensarkivet \"%s\" är ympat"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "felaktig rad vid tolkning av supplerande referenser: %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "försök att utföra \"mmap\" på %<PRIuMAX> över gränsen %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap misslyckades"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "objektfilen %s är tom"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "trasigt löst objekt \"%s\""
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "skräp i slutet av löst objekt \"%s\""
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "felaktig objekttyp"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "kan inte packa upp %s-huvud med --allow-unknown-type"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "kan inte packa upp %s-huvudet"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "kan inte tolka %s-huvud med --allow-unknown-type"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "kan inte tolka %s-huvud"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "misslyckades läsa objektet %s"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "ersättningen %s hittades inte för %s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "löst objekt %s (lagrat i %s) är trasigt"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "packat objekt %s (lagrat i %s) är trasigt"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "kunde inte skriva filen %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "kan inte sätta behörigheten till \"%s\""
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "fel vid skrivning av fil"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "fel vid stängning av fil för löst objekt"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"otillräcklig behörighet för att lägga till objekt till arkivdatabasen %s"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "kan inte skapa temporär fil"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "kunde inte skriva fil för löst objekt"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "kan inte utföra \"deflate\" på nytt objekt %s (%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "\"deflateend\" på objektet %s misslyckades (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "förvirrad av instabil objektkälldata för %s"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "\"utime()\" misslyckades på %s"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "kan inte läsa objekt för %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "trasik incheckning"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "trasig tagg"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "läsfel vid indexering av %s"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "för lite lästes vid indexering av %s"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: misslyckades lägga in i databasen"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: filtypen stöds ej"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s är inte ett giltigt objekt"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s är inte ett giltigt \"%s\"-objekt"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "kan inte öppna %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "hash stämmer inte för %s (förväntade %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "kan inte utföra \"mmap\" för %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "kan inte packa upp huvud för %s"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "kan inte tolka huvud för %s"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "kan inte tolka innehåll i %s"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "kort SHA1 %s är tvetydig"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Kandidaterna är:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git skapar normalt aldrig referenser som slutar med 40 hexadecimala\n"
-"tecken, då detta ignoreras när du anger 40-hex enbart. Dessa\n"
-"referenser kan skapas av misstag. Till exempel, för\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"där \"$br\" på något sätt blivit tomt och en 40-hex-referens skapats.\n"
-"Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n"
-"genom att köra \"git config advice.objectNameWarning false\""
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "loggen för \"%.*s\" räcker bara tillbaka till %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "loggen för \"%.*s\" har bara %d poster"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "Sökvägen \"%s\" finns på disken, men inte i \"%.*s\""
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"sökvägen \"%s\" finns, men inte i \"%s\"\n"
-"tips: Menade du \"%.*s:%s\", även känd som \"%.*s:./%s\"?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "sökvägen \"%s\" finns inte i \"%.*s\""
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"sökvägen \"%s\" finns i indexet men inte i etapp %d\n"
-"tips: Menade du \":%d:%s\"?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"sökvägen \"%s\" finns i indexet, men inte i \"%s\"\n"
-"tips: Menade du \":%d:%s\", även känd som \":%d:./%s\"?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "sökvägen \"%s\" finns på disk, men inte i indexet"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "sökvägen \"%s\" finns inte (varken i disken eller i indexet)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "relativ sökväg kan inte användas utanför arbetskatalogen"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "felaktigt objektnamn \"%.*s\"."
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "indexposten är en katalog, men inte gles (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u,%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u,%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u,%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u,%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u,%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u,%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8171,20 +8542,20 @@
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "kunde inte öppna \"%s\" för skrivning"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "kunde inte redigera \"%s\""
@@ -8233,22 +8604,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "misslyckades köa uppdaterad .gitmodules"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "i ej utcheckad undermodul \"%s\""
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Sökvägsangivelsen \"%s\" är i undermodulen \"%.*s\""
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "felaktigt argument till --ignore-submodules: %s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8257,12 +8628,12 @@
 "Undermodulen i incheckning %s på sökvägen: \"%s\" krockar med en undermodul "
 "med samma namn. Hoppar över den."
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "undermodulposten \"%s\" (%s) är en %s, inte en incheckning"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8271,36 +8642,36 @@
 "kunde inte köra \"git rev-list <incheckningar> --not --remotes -n 1\" i "
 "undermodulen \"%s\""
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "process för undermodulen \"%s\" misslyckades"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Misslyckades slå upp HEAD som giltig referens."
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Sänder undermodulen \"%s\"\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Kunde inte sända undermodulen \"%s\"\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Hämtar undermodulen %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Kunde inte komma åt undermodulen \"%s\"\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8309,61 +8680,61 @@
 "Fel vid hämtning av undermodul:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "\"%s\" känns inte igen som ett git-arkiv"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Kunde inte köra \"git status --porcelain=2\" i undermodulen \"%s\""
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "\"git status --porcelain=2\" misslyckades i undermodulen \"%s\""
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "kunde inte starta \"git status\" i undermodulen \"%s\""
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "kunde inte köra \"git status\" i undermodulen \"%s\""
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Kunde inte ta bort inställningen core.worktree i undermodulen \"%s\""
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "kunde inte rekursera in i undermodulen \"%s\""
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "kunde inte återställa indexet i undermodul"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "undermodulen \"%s\" har ett smutsigt index"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Undermoduler \"%s\" kunde inte uppdateras."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "undermodul-gitkatalogen \"%s\" är inuti gitkatalogen \"%.*s\""
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8371,17 +8742,17 @@
 "relocate_gitdir för undermodulen \"%s\", som har mer än en arbetskatalog, "
 "stöds ej"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "kunde inte slå upp namnet för undermodulen \"%s\""
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "vägrar flytta \"%s\" till en befintlig gitkatalog"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8392,65 +8763,71 @@
 "\"%s\" till\n"
 "\"%s\"\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "kunde inte starta ls-files i .."
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree returnerade en oväntad returkod %d"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "misslyckades ta status (lstat) på \"%s\""
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "misslyckades utföra släpradskommandot \"%s\""
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "okänt värde \"%s\" för nyckeln \"%s\""
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "mer än en %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "tom släpradssymbol i släpraden \"%.*s\""
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "kunde inte läsa indatafilen \"%s\""
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "kunde inte läsa från standard in"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "kunde inte ta status på %s"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "filen %s är inte en normal fil"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "filen %s är inte skrivbar av användaren"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "kunde inte öppna temporär fil"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "kunde inte byta namn på temporär fil till %s"
@@ -8501,7 +8878,7 @@
 msgid "error while running fast-import"
 msgstr "fel när fast-import kördes"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "kunde inte läsa referensen %s"
@@ -8519,7 +8896,7 @@
 msgid "invalid remote service path"
 msgstr "felaktig sökväg till fjärrtjänst"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "funktionen stöds inte av protokollet"
 
@@ -8528,68 +8905,72 @@
 msgid "can't connect to subservice %s"
 msgstr "kan inte ansluta till undertjänsten %s"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only kräver protokoll v2"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "\"option\" utan mostsvarande \"ok/error\"-direktiv"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "förväntade ok/error, hjälpprogrammet svarade \"%s\""
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "hjälparen returnerade oväntad status %s"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "hjälparen %s stöder inte dry-run"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "hjälparen %s stöder inte --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "hjälparen %s stöder inte --signed=if-asked"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "hjälparen %s stöder inte --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "hjälparen %s stöder inte --%s"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "hjälparen %s stöder inte \"push-option\""
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "fjärrhjälparen stöder inte push; referensspecifikation krävs"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "hjälparen %s stöder inte \"force\""
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "kunde inte köra fast-export"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "fel vid körning av fast-export"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8598,52 +8979,52 @@
 "Inga gemensamma referenser och inga angavs; gör inget.\n"
 "Du kanske borde ange en gren.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "objektformatet \"%s\" stöds ej"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "felformat svar i referenslistan: %s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "läs(%s) misslyckades"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "skriv(%s) misslyckades"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "%s-tråden misslyckades"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s-tråden misslyckades ansluta: %s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "kan inte starta tråd för kopiering av data: %s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "processen %s misslyckades vänta"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "processen %s misslyckades"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "kan inte skapa tråd för kopiering av data"
 
@@ -8662,37 +9043,41 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: ogiltig flagga för depth: \"%s\""
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "se protocol.version i \"git help config\" för mer information"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "serverflaggor kräver protokollversion 2 eller senare"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "servern stöder inte wait-for-done"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "kunde inte tolka inställningen för transport.color.*"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "stöd för protokoll v2 ännu ej implementerat"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "okänt värde för inställningen \"%s\": %s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transporten \"%s\" tillåts inte"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync stöds inte längre"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8701,7 +9086,7 @@
 "Följande undermodulsökvägar innehåller ändringar som\n"
 "inte kan hittas av fjärrarna:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8728,31 +9113,31 @@
 "för att sända dem till fjärren.\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "Avbryter."
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "kunde inte sända alla nödvändiga undermoduler"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "trädobjekt för kort"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "felformat läge i trädpost"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "tomt filnamn i trädpost"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "trädfil för kort"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8761,7 +9146,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av utcheckning:\n"
 "%%sChecka in dina ändringar eller använd \"stash\" innan du byter gren."
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8770,7 +9155,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av utcheckning:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8780,7 +9165,7 @@
 "sammanslagning:\n"
 "%%sChecka in dina ändringar eller använd \"stash\" innan du byter gren."
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8790,7 +9175,7 @@
 "sammanslagning:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8799,7 +9184,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av \"%s\":\n"
 "%%sChecka in dina ändringar eller använd \"stash\" innan du \"%s\"."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8808,7 +9193,7 @@
 "Dina lokala ändringar av följande filer skulle skrivas över av \"%s\":\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8818,7 +9203,7 @@
 "dem:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8827,7 +9212,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av utcheckningen:\n"
 "%%sFlytta eller ta bort dem innan du byter gren."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8836,7 +9221,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av utcheckningen:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8846,7 +9231,7 @@
 "sammanslagningen:\n"
 "%%sFlytta eller ta bort dem innan du slår samman."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8856,7 +9241,7 @@
 "sammanslagningen:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8865,7 +9250,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av \"%s\":\n"
 "%%sFlytta eller ta bort dem innan du \"%s\"."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8874,7 +9259,7 @@
 "Följande ospårade filer i arbetskatalogen skulle tas bort av \"%s\":\n"
 "%%s"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8885,7 +9270,7 @@
 "utcheckningen:\n"
 "%%sFlytta eller ta bort dem innan du byter gren."
 
-#: unpack-trees.c:154
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8896,7 +9281,7 @@
 "utcheckningen:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8906,7 +9291,7 @@
 "sammanslagningen:\n"
 "%%sFlytta eller ta bort dem innan du byter gren."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8916,7 +9301,7 @@
 "sammanslagningen:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8925,7 +9310,7 @@
 "Följande ospårade filer i arbetskatalogen skulle skrivas över av \"%s\":\n"
 "%%sFlytta eller ta bort dem innan du \"%s\"."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8934,12 +9319,12 @@
 "Följande ospårade filer i arbetskatalogen skulle skrivas över av \"%s\":\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Posten \"%s\" överlappar \"%s\". Kan inte binda."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -8948,7 +9333,7 @@
 "Kan inte uppdatera undermodul:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -8958,7 +9343,7 @@
 "Följande sökvägar är inte àjour och lämnades till trots för gles-mönster:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -8968,7 +9353,7 @@
 "mönster:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -8979,12 +9364,12 @@
 "gles-mönster:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "Avbryter\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -8993,11 +9378,11 @@
 "Du bör köra \"git sparse-checkout reapply\" efter att ha fixat sökvägarna "
 "ovan.\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Uppdaterar filer"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -9007,11 +9392,16 @@
 "sökvägar på ett okänsligt filsystem) och endast en från samma\n"
 "kollisionsgrupp finns i arbetskatalogen:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "Uppdaterar indexflaggor"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr "arbetskatalog och ospårad incheckning har dublettposter: %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "förväntade \"flush\" efter \"fetch\"-argument"
 
@@ -9048,72 +9438,102 @@
 msgid "Fetching objects"
 msgstr "Hämtar objekt"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "misslyckades läsa \"%s\""
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "\"%s\" i huvudarbetskatalogen är inte arkivkatalogen"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "filen \"%s\" innehåller inte absolut sökväg till arbetskatalogen"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "\"%s\" finns inte"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "\"%s\" är inte en .git-fil, felkod %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "\"%s\" pekar inte tillbaka till \"%s\""
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "inte en katalog"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git är inte en fil"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr ".git-filen är trasig"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr ".git-filen är felaktig"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "inte en giltig sökväg"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "hittar inte arkivet; .git är inte en fil"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "hittar inte arkivet; .git-filen hänvisar inte till ett arkiv"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "hittar inte arkivet; .git-filen är trasig"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "gitdir är oläsbar"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "gitdir är felaktig"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "inte i en giltig katalog"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "gitdir-filen existerar inte"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "kunde inte läsa gitdir-filen (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "kort läsning (förväntade %<PRIuMAX> byte, läste %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "ogiltig gitdir-fil"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "gitdir-filen pekar på en ickeexisterande plats"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9159,11 +9579,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (använd \"git rm <fil>...\" för att ange lösning)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Ändringar att checka in:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Ändringar ej i incheckningskön:"
 
@@ -9266,22 +9686,22 @@
 msgid "untracked content, "
 msgstr "ospårat innehåll, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Stashen innehåller just nu %d post"
 msgstr[1] "Stashen innehåller just nu %d poster"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Undermoduler ändrade men inte uppdaterade:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Undermodulers ändringar att checka in:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9289,7 +9709,7 @@
 "Raden ovan får inte ändras eller tas bort.\n"
 "Allt under den kommer tas bort."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9300,107 +9720,107 @@
 "Det tog %.2f sekunder att räkna före/bakom-värden.\n"
 "Du kan använda \"--no-ahead-behind\" för undvika detta.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Du har ej sammanslagna sökvägar."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (rätta konflikter och kör \"git commit\")"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (använd \"git merge --abort\" för att avbryta sammanslagningen)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Alla konflikter har rättats men du är fortfarande i en sammanslagning."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (använd \"git commit\" för att slutföra sammanslagningen)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Du är i mitten av en körning av \"git am\"."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "Aktuell patch är tom."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git am --continue\")"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (använd \"git am --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (använd \"git am --abort\" för att återställa ursprungsgrenen)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo saknas."
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "Inga kommandon utförda."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Sista kommandot utfört (%d kommando utfört):"
 msgstr[1] "Sista kommandot utfört (%d kommandon utfört):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (se fler i filen %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "Inga kommandon återstår."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Nästa kommando att utföra (%d kommando återstår):"
 msgstr[1] "Följande kommandon att utföra (%d kommandon återstår):"
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (använd \"git rebase --edit-todo\" för att visa och redigera)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Du håller på att ombasera grenen \"%s\" ovanpå \"%s\"."
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Du håller på med en ombasering."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git rebase --continue\")"
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (använd \"git rebase --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (använd \"git rebase --abort\" för att checka ut ursprungsgrenen)"
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git rebase --continue\")"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9408,147 +9828,155 @@
 "Du håller på att dela upp en incheckning medan du ombaserar grenen \"%s\" "
 "ovanpå \"%s\"."
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Du håller på att dela upp en incheckning i en ombasering."
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "  (Så fort din arbetskatalog är ren, kör \"git rebase --continue\")"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Du håller på att redigera en incheckning medan du ombaserar grenen \"%s\" "
 "ovanpå \"%s\"."
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "Du håller på att redigera en incheckning under en ombasering."
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 "  (använd \"git commit --amend\" för att lägga till på aktuell incheckning)"
 
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (använd \"git rebase --continue\" när du är nöjd med dina ändringar)"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick pågår."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Du håller på med en \"cherry-pick\" av incheckningen %s."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git cherry-pick --continue\")"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (kör \"git cherry-pick --continue\" för att fortsätta)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git cherry-pick --continue\")"
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (använd \"git cherry-pick --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (använd \"git cherry-pick --abort\" för att avbryta \"cherry-pick\"-"
 "operationen)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Ångring pågår."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Du håller på med att ångra incheckningen %s."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git revert --continue\")"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (kör \"git revert --continue\" för att fortsätta)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git revert --continue\")"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (använd \"git revert --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (använd \"git revert --abort\" för att avbryta ångrandet)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Du håller på med en \"bisect\", startad från grenen \"%s\"."
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Du håller på med en \"bisect\"."
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (använd \"git bisect reset\" för att komma tillbaka till ursprungsgrenen)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "Du är i en gles utcheckning med %d%% spårade filer på plats."
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "På grenen "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "interaktiv ombasering pågår; ovanpå "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "ombasering pågår; ovanpå "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD frånkopplad vid "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD frånkopplad från "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Inte på någon gren för närvarande."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Första incheckning"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "Inga incheckningar ännu"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Ospårade filer"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Ignorerade filer"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9560,32 +9988,32 @@
 "lägga till nya filer själv (se \"git help status\")."
 
 # %s är nästa sträng eller tom.
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Ospårade filer visas ej%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (använd flaggan -u för att visa ospårade filer)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Inga ändringar"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "inga ändringar att checka in (använd \"git add\" och/eller \"git commit -a"
 "\")\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "inga ändringar att checka in\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9594,67 +10022,85 @@
 "inget köat för incheckning, men ospårade filer finns (spåra med \"git add"
 "\")\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "inget köat för incheckning, men ospårade filer finns\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "inget att checka in (skapa/kopiera filer och spåra med \"git add\")\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "inget att checka in\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "inget att checka in (använd -u för att visa ospårade filer)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "inget att checka in, arbetskatalogen ren\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "Inga incheckningar ännu på "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (ingen gren)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "olika"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "efter "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "före "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "kan inte %s: Du har oköade ändringar."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "dessutom innehåller dit index ändringar som inte har checkats in."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "kan inte %s: Ditt index innehåller ändringar som inte checkats in."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "kunde inte sända IPC-kommando"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "kunde inte läsa IPC-svar"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "kunde inte ta status \"accept_thread\" \"%s\""
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "kunde inte starta \"worker[0]\" för \"%s\""
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "misslyckades ta bort länken \"%s\""
@@ -9663,126 +10109,131 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<flaggor>] [--] <sökväg>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "kan inte utföra chmod %cx \"%s\""
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "diff-status %c förväntades inte"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "misslyckades uppdatera filer"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "ta bort \"%s\"\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Oköade ändringar efter att ha uppdaterat indexet:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "Kunde inte läsa indexet"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Kunde inte öppna \"%s\" för skrivning."
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "Kunde inte skriva patch"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "redigering av patch misslyckades"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Kunde inte ta status på \"%s\""
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Tom patch. Avbryter."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Kunde inte tillämpa \"%s\""
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "testkörning"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "plocka interaktivt"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "välj stycken interaktivt"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "redigera aktuell diff och applicera"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "tillåt lägga till annars ignorerade filer"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "uppdatera spårade filer"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "åternormalisera radslut i spårade filer (implicerar -u)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "registrera endast att sökvägen kommer läggas till senare"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "lägg till ändringar från alla spårade och ospårade filer"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "ignorera sökvägar borttagna i arbetskatalogen (samma som --no-all)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "lägg inte till, uppdatera endast indexet"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr "hoppa bara över filer som inte kan läggas till på grund av fel"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "se om - även saknade - filer ignoreras i testkörning"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "överstyr exekveringsbiten för angivna filer"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "varna när ett inbyggt arkiv läggs till"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "bakända för \"git stash -p\""
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9813,12 +10264,12 @@
 "\n"
 "Se \"git help submodule\" för ytterligare information."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "lägger till inbäddat git-arkiv: %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9828,47 +10279,51 @@
 "Slå av detta meddelande med\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "misslyckades lägga till filer"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run är inkompatibelt med --interactive/--patch"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file är inkompatibelt med --interactive/--patch"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file är inkompatibelt med --edit"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A och -u är ömsesidigt inkompatibla"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "Flaggan --ignore-missing kan endast användas tillsammans med --dry-run"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod-parametern \"%s\" måste antingen vara -x eller +x"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file är inkompatibelt med sökvägsangivelsesparametrar"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul kräver --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Inget angivet, inget tillagt.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -9878,109 +10333,109 @@
 "Slå av detta meddelande genom att köra\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "kunde inte tolka författarskript"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "\"%s\" togs bort av kroken applypatch-msg"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Felaktig indatarad: \"%s\"."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Misslyckades kopiera anteckningar från \"%s\" till \"%s\""
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "\"fseek\" misslyckades"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "kunde inte tolka patchen \"%s\""
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Endast en StGIT-patchserie kan tillämpas åt gången"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "ogiltig tidsstämpel"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "ogiltig \"Date\"-rad"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "ogiltig tidszons-offset"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Misslyckades detektera patchformat."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "misslyckades skapa katalogen \"%s\""
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "Misslyckades dela patchar."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "När du har löst problemet, kör \"%s --continue\"."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Om du hellre vill hoppa över patchen, kör \"%s --skip\" i stället."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "För att återgå till ursprunglig gren och sluta patcha, kör \"%s --abort\"."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch sänd med format=flowed; blanksteg på slut av rader kan ha tappats."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "Patchen är tom."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "saknad \"author\"-rad i incheckningen %s"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "ogiltig ident-rad: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Arkivet saknar objekt som behövs för att falla tillbaka på 3-"
 "vägssammanslagning."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Använder indexinfo för att återskapa ett basträd..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -9988,25 +10443,25 @@
 "Har du handredigerat din patch?\n"
 "Den kan inte tillämpas på blobbar som antecknats i dess index."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 "Faller tillbaka på att patcha grundversionen och trevägssammanslagning..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Misslyckades slå ihop ändringarna."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "tillämpar på en tom historik"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "kan inte återuppta: %s finns inte."
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "Incheckningskroppen är:"
 
@@ -10014,41 +10469,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Tillämpa? Y=ja/N=nej/E=redigera/V=visa patch/A=godta alla: "
 
-#: builtin/am.c:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "kan inte skriva indexfil"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Smutsigt index: kan inte tillämpa patchar (smutsiga: %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Tillämpar: %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Inga ändringar -- Patchen har redan tillämpats."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Patch misslyckades på %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Använd \"git am --show-current-patch=diff\" för att se patchen som "
 "misslyckades"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10058,7 +10513,7 @@
 "Om det inte är något kvar att köa kan det hända att något annat redan\n"
 "introducerat samma ändringar; kanske du bör hoppa över patchen."
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10070,17 +10525,17 @@
 "lösta.\n"
 "Du kan köra \"git rm\" för att godta \"borttagen av dem\" för den."
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Kan inte tolka objektet \"%s\"."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "misslyckades städa upp indexet"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10088,155 +10543,159 @@
 "Du verkar ha flyttat HEAD sedan \"am\" sist misslyckades.\n"
 "Återställer inte till ORIG_HEAD"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Felaktigt värde för --patch-format: %s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Felaktigt värde för --show-current-patch: %s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s är inkompatibelt med --show-current-patch=%s"
 
-#: builtin/am.c:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<flaggor>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<flaggor>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "kör interaktivt"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "historisk flagga -- no-op"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "tillåt falla tillbaka på trevägssammanslagning om nödvändigt"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "var tyst"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "lägg till \"Signed-off-by\"-släprad i incheckningsmeddelandet"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "koda om till utf8 (standard)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "sänd flaggan -k till git-mailinfo"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "sänd flaggan -b till git-mailinfo"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "sänd flaggan -m till git-mailinfo"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "sänd flaggan --keep-cr till git-mailsplit för mbox-formatet"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "sänd inte flaggan --keep-cr till git-mailsplit oberoende av am.keepcr"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "ta bort allting före en saxlinje"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "sänd det genom 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
 msgid "pass it through git-apply"
 msgstr "sänd det genom git-apply"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "format för patch(ar)"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "överstyr felmeddelanden när patchfel uppstår"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "fortsätt applicera patchar efter att ha löst en konflikt"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "synonymer till --continue"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "hoppa över den aktuella grenen"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr "återställ originalgrenen och avbryt patchningen."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "återställ originalgrenen och avbryt patchningen"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "avbryt patchningen men behåll HEAD där det är."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "avbryt patchningen men behåll HEAD där det är"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "visa patchen som tillämpas"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "ljug om incheckningsdatum"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "använd nuvarande tidsstämpel för författardatum"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "nyckel-id"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "GPG-signera incheckningar"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(används internt av git-rebase)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10244,16 +10703,16 @@
 "Flaggan -b/--binary har varit utan funktion länge, och\n"
 "kommer tas bort. Vi ber dig att inte använda den längre."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "misslyckades läsa indexet"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "tidigare rebase-katalog %s finns fortfarande, men mbox angavs."
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10262,11 +10721,11 @@
 "Kvarbliven katalog %s hittades.\n"
 "Använd \"git am --abort\" för att ta bort den."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Lösningsoperation pågår inte, vi återupptar inte."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "interaktivt läge kräver patchar på kommandoraden"
 
@@ -10309,27 +10768,11 @@
 msgstr "git bisect--helper --bisect-reset [<incheckning>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <tillstånd> <revision> <term-"
-"för-rätt> <term-för-fel>"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <kommadno> <term-för-rätt> "
-"<term-för-fel>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 "git bisect--helper --bisect-next-check <term-för-rätt> <term-för-fel> <eterm>"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10337,7 +10780,7 @@
 "git-bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10347,62 +10790,66 @@
 "=<term>] [--no-checkout] [--first-parent] [<dålig> [<bra>...]] [--] "
 "[<sökvägar>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<incheckning>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-state (good|old) [<incheckning>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <filnamn>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<incheckning>|<intervall>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "kan inte kopiera filen \"%s\" i läget \"%s\""
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "kunde inte skriva till filen \"%s\""
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "\"%s\" är inte en giltig term"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "kan inte använda det inbyggda kommandot \"%s\" som term"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "kan inte ändra betydelsen av termen \"%s\""
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "termerna måste vara olika"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "Vi utför ingen bisect för tillfället.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "\"%s\" är inte en giltig incheckning"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10410,27 +10857,27 @@
 "Kunde inte checka ut original-HEAD \"%s\". Försök \"git bisect reset "
 "<incheckning>\"."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Felaktigt argument till bisect_write: %s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "kan inte läsa oid för referensen \"%s\""
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "kunde inte öppna filen \"%s\""
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Ogiltigt kommando: du utför just nu en \"bisect\" med %s/%s."
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10439,7 +10886,7 @@
 "Du måste ange åtminstone en %s och en %s version.\n"
 "(Du kan använda \"git bisect %s\" och \"git bisect %s\" för detta.)"
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10450,7 +10897,7 @@
 "Du måste sedan ange åtminstone en %s och en %s version.\n"
 "(Du kan använda \"git bisect %s\" och \"git bisect %s\" för detta.)"
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "utför bisect med endast en %s incheckning"
@@ -10459,15 +10906,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Är du säker [Y=ja/N=nej]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "inga termer angivna"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10476,7 +10923,7 @@
 "Aktuella termer är %s för det gamla tillståndet\n"
 "och %s för det nya tillståndet.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10485,54 +10932,54 @@
 "ogiltigt argument %s för \"git bisect terms\".\n"
 "Flaggor som stöds är: --term-good|--term-old och --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "misslyckades starta revisionstraversering\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "kunde inte öppna \"%s\" för tillägg"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "\"\" är inte en giltig term"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "okänd flagga: %s"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "\"%s\" verkar inte vara en giltig revision"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "felaktigt HEAD - Jag behöver ett HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr ""
 "misslyckades checka ut \"%s\". Försök \"git bisect reset <giltig_gren>\"."
 
 # cogito-relaterat
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "kör inte \"bisect\" på träd där \"cg-seek\" använts"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "felaktigt HEAD - konstig symbolisk referens"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "ogiltig referens: \"%s\""
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Du måste starta med \"git bisect start\"\n"
 
@@ -10540,92 +10987,106 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Vill du att jag ska göra det åt dig [Y=ja/N=nej]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Anropa \"--bisect-state\" med minst ett argument."
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "\"git bisect %s\" kan bara ta ett argument."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Felaktig rev-indata: %s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Felaktig rev-indata (ej incheckning): %s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "Vi utför ingen bisect för tillfället."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "\"%s\"?? vad menar du?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "kan inte läsa filen \"%s\" för återuppspelning"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "återställ bisect-tillstånd"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "skriver bisect-tillståndet i BISECT_LOG"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "visa och ange termer för bisect-tillstånd"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "se efter om termer för rätt och fel finns"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "skriv ut termer för bisect"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "påbörja bisect-körningen"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "hitta nästa incheckning i bisect"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"kontrollera nästa bisect-tillstånd och checka så ut nästa bisect-incheckning"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "markera tillståndet för en eller flera referenser"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "lista \"bisect\"-stegen som utförts så långt"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "spela upp \"bisect\"-processen från angiven fil"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "hoppa över ett par incheckningar"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "ingen logg för BISECT_WRITE"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset kräver antingen inget argument eller en incheckning"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write kräver antingen 4 eller 5 argument"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms kräver tre argument"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check kräver 2 eller 3 argument"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms kräver noll eller ett argument"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next kräver 0 argument"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next kräver 0 argument"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log kräver 0 argument"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "ingen loggfil angiven"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10644,138 +11105,141 @@
 msgid "must end with a color"
 msgstr "måste sluta med en färg"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "felaktig färg \"%s\" i color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "ogiltigt värde för blame.coloring"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "kan inte hitta revision %s att ignorera"
 
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "visa klandringsposter när vi hittar dem, interaktivt"
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "visa inte objektnamn för gränsincheckningar (Standard: av)"
+
 #: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Visa klandringsposter när vi hittar dem, interaktivt"
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "vehandla inte rotincheckningar som gränser (Standard: av)"
 
 #: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
-msgstr "Visa inte objektnamn för gränsincheckningar (Standard: av)"
+msgid "show work cost statistics"
+msgstr "visa statistik över arbetskostnad"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "Behandla inte rotincheckningar som gränser (Standard: av)"
+#: 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
+msgid "force progress reporting"
+msgstr "tvinga förloppsrapportering"
 
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "Visa statistik över arbetskostnad"
+msgid "show output score for blame entries"
+msgstr "visa utdatapoäng för klandringsposter"
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Tvinga förloppsrapportering"
+msgid "show original filename (Default: auto)"
+msgstr "visa originalfilnamn (Standard: auto)"
 
 #: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "Visa utdatapoäng för klandringsposter"
+msgid "show original linenumber (Default: off)"
+msgstr "visa ursprungligt radnummer (Standard: av)"
 
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr "Visa originalfilnamn (Standard: auto)"
+msgid "show in a format designed for machine consumption"
+msgstr "visa i ett format avsett för maskinkonsumtion"
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
-msgstr "Visa ursprungligt radnummer (Standard: av)"
+msgid "show porcelain format with per-line commit information"
+msgstr "visa porslinsformat med per-rad-incheckningsinformation"
 
 #: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "Visa i ett format avsett för maskinkonsumtion"
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "använd samma utdataläge som git-annotate (Standard: av)"
 
 #: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr "Visa porslinsformat med per-rad-incheckningsinformation"
+msgid "show raw timestamp (Default: off)"
+msgstr "visa rå tidsstämpel (Standard: av)"
 
 #: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "Använd samma utdataläge som git-annotate (Standard: av)"
+msgid "show long commit SHA1 (Default: off)"
+msgstr "visa lång inchecknings-SHA1 (Standard: av)"
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Visa rå tidsstämpel (Standard: av)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "undertryck författarnamn och tidsstämpel (Standard: av)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Visa lång inchecknings-SHA1 (Standard: av)"
+msgid "show author email instead of name (Default: off)"
+msgstr "visa författarens e-post istället för namn (Standard: av)"
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Undertryck författarnamn och tidsstämpel (Standard: av)"
+msgid "ignore whitespace differences"
+msgstr "ignorera ändringar i blanksteg"
+
+#: builtin/blame.c:883 builtin/log.c:1820
+msgid "rev"
+msgstr "incheckning"
 
 #: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr "Visa författarens e-post istället för namn (Standard: av)"
+msgid "ignore <rev> when blaming"
+msgstr "ignorera <incheckning> vid klandringen"
 
 #: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Ignorera ändringar i blanksteg"
-
-#: builtin/blame.c:885 builtin/log.c:1813
-msgid "rev"
-msgstr "rev"
+msgid "ignore revisions from <file>"
+msgstr "ignorera incheckningar från <fil>"
 
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "ignorera <rev> vid klandren"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "ignorera revisioner från <fil>"
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr "färglägg redundant metadata från tidigare rader annorlunda"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "färglägg rader efter ålder"
 
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "slösa extra cykler med att hitta bättre träff"
+
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
+msgstr "använd revisioner från <fil> istället för att anropa git-rev-list"
+
 #: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Slösa extra cykler med att hitta bättre träff"
+msgid "use <file>'s contents as the final image"
+msgstr "använd <fil>s innehåll som slutgiltig bild"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
-msgstr "Använd revisioner från <fil> istället för att anropa git-rev-list"
-
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "Använd <fil>s innehåll som slutgiltig bild"
-
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "poäng"
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "hitta kopierade rader inuti och mellan filer"
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "hitta flyttade rader inuti och mellan filer"
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr "Hitta kopierade rader inuti och mellan filer"
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr "Hitta flyttade rader inuti och mellan filer"
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr "intervall"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
-"Behandla endast intervallet <start>,<slut> eller funktionen :<funknamn>"
+"behandla endast intervallet <start>,<slut> eller funktionen :<funknamn>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress kan inte användas med --incremental eller porslinsformat"
 
@@ -10787,18 +11251,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "4 år, 11 månader sedan"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "filen %s har bara %lu rad"
 msgstr[1] "filen %s har bara %lu rader"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Klandra rader"
 
@@ -10866,118 +11330,108 @@
 msgid "Update of config-file failed"
 msgstr "Misslyckades uppdatera konfigurationsfil"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "kan inte ange -a med -d"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Kunde inte slå upp incheckningsobjekt för HEAD"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Kan inte ta bort grenen \"%s\" som är utcheckad på \"%s\""
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "fjärrspårande grenen \"%s\" hittades inte."
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "grenen \"%s\" hittades inte."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Fel vid borttagning av fjärrspårande grenen \"%s\""
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Fel vid borttagning av grenen \"%s\""
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Tog bort fjärrspårande grenen %s (var %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Tog bort grenen %s (var %s).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "kan inte tolka formatsträng"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "kunde inte slå upp HEAD"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) pekar utenför refs/heads/"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Grenen %s ombaseras på %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Grenen %s är i en \"bisect\" på %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "kunde inte kopiera aktuell gren när du inte befinner dig på någon."
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 "kunde inte byta namn på aktuell gren när du inte befinner dig på någon."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Felaktigt namn på gren: \"%s\""
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Misslyckades byta namn på gren"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Misslyckades kopiera gren"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Skapade kopia av felaktigt namngiven gren \"%s\""
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Bytte bort namn på en felaktigt namngiven gren \"%s\""
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Grenen namnbytt till %s, men HEAD har inte uppdaterats!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Grenen namnbytt, men misslyckades uppdatera konfigurationsfilen"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Grenen kopierades, men misslyckades uppdatera konfigurationsfilen"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -10988,211 +11442,211 @@
 "  %s\n"
 "Rader som inleds med \"%c\" ignoreras.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Allmänna flaggor"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "visa hash och ärenderad, ange två gånger för uppströmsgren"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "undertryck informationsmeddelanden"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "ställ in spårningsläge (se git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "använd ej"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "uppströms"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "ändra uppströmsinformationen"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "ta bort uppströmsinformationen"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "använd färgad utdata"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "arbeta på fjärrspårande grenar"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "visa endast grenar som innehåller incheckningen"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "visa endast grenar som inte innehåller incheckningen"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Specifika git-branch-åtgärder:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "visa både fjärrspårande och lokala grenar"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "ta bort helt sammanslagen gren"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "ta bort gren (även om inte helt sammanslagen)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "flytta/ta bort en gren och dess reflogg"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "flytta/ta bort en gren, även om målet finns"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "kopiera en gren och dess reflogg"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "kopiera en gren, även om målet finns"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "lista namn på grenar"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "visa namn på aktuell gren"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "skapa grenens reflogg"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "redigera beskrivning för grenen"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "tvinga skapande, flytt/namnändring, borttagande"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "visa endast sammanslagna grenar"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "visa endast ej sammanslagna grenar"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "visa grenar i spalter"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "objekt"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "visa endast grenar för objektet"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "sortering och filtrering skiljer gemener och VERSALER"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format att använda för utdata"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD hittades inte under refs/heads!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column och --verbose är inkompatibla"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "grennamn krävs"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "Kan inte beskriva frånkopplad HEAD"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "kan inte redigera beskrivning för mer än en gren"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Inga incheckningar på grenen \"%s\" ännu."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Ingen gren vid namnet \"%s\"."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "för många grenar för kopiering"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "för många flaggor för namnbyte"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "för många flaggor för att byta uppström"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr ""
 "kunde inte sätta uppström för HEAD till %s när det inte pekar mot någon gren."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "okänd gren \"%s\""
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "grenen \"%s\" finns inte"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "för många flaggor för att ta bort uppström"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "kunde inte ta bort uppström för HEAD när det inte pekar mot någon gren."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Grenen \"%s\" har ingen uppströmsinformation"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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>?"
@@ -11200,7 +11654,7 @@
 "Flaggorna -a och -r på \"git branch\" tar inte ett namn på gren.\n"
 "Menade du att använda: -a|-r --list <mönster>?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11269,38 +11723,38 @@
 "Se över resten av felrapporten nedan.\n"
 "Du kan ta bort rader du inte vill dela.\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "ange mål för buggrapporteringsfilen"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "ange ett filändelse i strftime-format"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "kunde inte skapa inledande kataloger för \"%s\""
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "Systeminfo"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "Aktiverade krokar"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "kunde inte skapa filen på \"%s\""
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "kunde inte skriva till %s"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Skapade ny rapport på \"%s\"\n"
@@ -11321,19 +11775,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <fil> [<refnamn>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "visa inte förloppsindikator"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "visa förloppsindikator"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "visa förloppsindikator under objektskrivningsfasen"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "som --all-progress när förloppsindikatorn visas"
 
@@ -11476,8 +11930,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "avsluta in- och utdataposter med NUL-tecken"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "undertryck förloppsrapportering"
 
@@ -11489,27 +11943,27 @@
 msgid "ignore index when checking"
 msgstr "ignorera index vid kontroll"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "kan inte ange sökvägsnamn med --stdin"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z kan endast användas tillsammans med --stdin"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "ingen sökväg angavs"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet kan endast användas med ett enkelt sökvägsnamn"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "kan inte använda både --quiet och --verbose"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching är endast giltig med --verbose"
 
@@ -11530,165 +11984,169 @@
 msgid "no contacts specified"
 msgstr "inga kontakter angavs"
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
-msgstr "git checkout-index [<flaggor>] [--] [<fil>...]"
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<flaggor>]"
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr "etapp måste vara mellan 1 och 3 eller \"all\""
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr "checka ut alla filer i indexet"
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr "tvinga överskrivning av befintliga filer"
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr "ingen varning för existerande filer och filer ej i indexet"
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr "checka inte ut nya filer"
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr "uppdatera stat-information i indexfilen"
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr "läs listan över sökvägar från standard in"
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr "skriv innehåll till temporära filer"
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr "sträng"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr "när filer skapas, lägg till <sträng> först"
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr "git checkout-index [<flaggor>] [--] [<fil>...]"
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr "etapp måste vara mellan 1 och 3 eller \"all\""
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr "checka ut alla filer i indexet"
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr "tvinga överskrivning av befintliga filer"
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr "ingen varning för existerande filer och filer ej i indexet"
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr "checka inte ut nya filer"
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr "uppdatera stat-information i indexfilen"
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr "läs listan över sökvägar från standard in"
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr "skriv innehåll till temporära filer"
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "kopiera ut filer från namngiven etapp"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<flaggor>] <gren>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<flaggor>] [<gren>] -- <fil>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<flaggor>] [<gren>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<flaggor>] [--source=<gren>] <fil>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "sökvägen \"%s\" har inte vår version"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "sökvägen \"%s\" har inte deras version"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "sökvägen \"%s\" innehåller inte alla nödvändiga versioner"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "sökvägen \"%s\" innehåller inte nödvändiga versioner"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "sökväg \"%s\": kan inte slå ihop"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Kunde inte lägga till sammanslagningsresultat för \"%s\""
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Återskapade %d sammanslagningskonflikt"
 msgstr[1] "Återskapade %d sammanslagningskonflikter"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Uppdaterade %d sökväg från %s"
 msgstr[1] "Uppdaterade %d sökvägar från %s"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Uppdaterade %d sökväg från indexet"
 msgstr[1] "Uppdaterade %d sökvägar från indexet"
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "\"%s\" kan inte användas vid uppdatering av sökvägar"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "\"%s\" kan inte användas med %s"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "Kan inte uppdatera sökvägar och växla till grenen \"%s\" samtidigt."
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "varken \"%s\" eller \"%s\" har angivits"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "\"%s\" måste användas när \"%s\" inte anges"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "\"%s\" eller \"%s\" kan inte användas med %s"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "sökvägen \"%s\" har inte slagits ihop"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "du måste lösa ditt befintliga index först"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11697,50 +12155,50 @@
 "kan inte fortsätta med köade ändringar i följande filer:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Kan inte skapa referenslogg för \"%s\": %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD är nu på"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "kan inte uppdatera HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Återställ gren \"%s\"\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Redan på \"%s\"\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Växlade till och nollställde grenen \"%s\"\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Växlade till en ny gren \"%s\"\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Växlade till grenen \"%s\"\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... och %d till.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11763,7 +12221,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11790,19 +12248,19 @@
 " git branch <nytt_grennamn> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "internt fel vid genomgång av revisioner (revision walk)"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "Tidigare position för HEAD var"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Du är på en gren som ännu inte är född"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11811,7 +12269,7 @@
 "\"%s\" kan vara både en lokal fil och en spårande gren.\n"
 "Använd -- (och möjligen --no-guess) för att göra otvetydig"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -11831,51 +12289,51 @@
 "föredra en fjärr, t.ex fjärren \"origin\" kan du ställa in\n"
 "checkout.defaultRemote=origin i din konfiguration."
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "\"%s\" motsvarar flera (%d) spårade fjärrgrenar"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "endast en referens förväntades"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "endast en referens förväntades, %d gavs."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "felaktig referens: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "referensen är inte ett träd: %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "förväntade gren, fick taggen \"%s\""
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "förväntade gren, fick fjärrgrenen \"%s\""
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "förväntade gren, fick \"%s\""
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "förväntade gren, fick incheckningen \"%s\""
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11883,7 +12341,7 @@
 "kan inte växla gren vid sammanslagning\n"
 "Överväg \"git merge --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11891,7 +12349,7 @@
 "kan inte växla gren mitt i en \"am\"-körning\n"
 "Överväg \"git am --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11899,7 +12357,7 @@
 "kan inte växla gren vid ombasering\n"
 "Överväg \"git rebase --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11907,7 +12365,7 @@
 "kan inte växla gren i en \"cherry-pick\"\n"
 "Överväg \"git cherry-pick --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11915,146 +12373,139 @@
 "kan inte växla gren i en \"revert\"\n"
 "Överväg \"git revert --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr "då växlar grenar medan du gör en \"bisect\""
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "sökvägar kan inte användas vid byte av gren"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "\"%s\" kan inte användas vid byte av gren"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "\"%s\" kan inte användas med \"%s\""
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "\"%s\" kan inte ta <startpunkt>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Kan inte växla gren till icke-incheckningen \"%s\""
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "saknar gren- eller incheckingsargument"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "tvinga förloppsrapportering"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "utför en 3-vägssammanslagning för den nya grenen"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "stil"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "konfliktstil (merge eller diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "koppla från HEAD vid namngiven incheckning"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "sätt uppströmsinformation för ny gren"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "tvinga utcheckning (kasta bort lokala ändringar)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "ny-gren"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "ny gren utan förälder"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "uppdatera ignorerade filer (standard)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "kontrollera inte om en annan arbetskatalog håller den angivna referensen"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "checka ut vår version för ej sammanslagna filer"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "checka ut deras version för ej sammanslagna filer"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "begränsa inte sökvägar till endast glesa poster"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c och --orphan är ömsesidigt uteslutande"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p och --overlay är ömsesidigt uteslutande"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track behöver ett namn på en gren"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "grennamn saknas; försök med -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "kunde inte upplösa %s"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "felaktig sökvägsangivelse"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "\"%s\" är inte en incheckning och grenen \"%s\" kan inte skapas från den"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach tar inte en sökväg som argument \"%s\""
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file är inkompatibelt med --detach"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file är inkompatibelt med --patch"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12062,70 +12513,70 @@
 "git checkout: --ours/--theirs, --force och --merge är inkompatibla när\n"
 "du checkar ut från indexet."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "du måste ange katalog(er) att återställa"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "gren"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "skapa och checka ut en ny gren"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "skapa/nollställ och checka ut en gren"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "skapa reflogg för ny gren"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "förutspå \"git checkout <gren-saknas>\" (förval)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "använd överläggsläge (standard)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "skapa och växla till en ny gren"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "skapa/nollställ och växla till en gren"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "förutspå \"git checkout <gren-saknas>\""
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "kasta bort lokala ändringar"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "vilken träd-igt att checka ut från"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "återställ indexet"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "återställ arbetskatalogen (förval)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "ignorera ej sammanslagna poster"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "använd överläggsläge"
 
@@ -12156,11 +12607,6 @@
 msgid "Would skip repository %s\n"
 msgstr "Skulle hoppa över arkivet %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "misslyckades ta bort %s"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12271,8 +12717,8 @@
 msgstr "ta bort hela kataloger"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "mönster"
@@ -12313,164 +12759,169 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<flaggor>] [--] <arkiv> [<kat>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "klona inte grunt arkiv"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "skapa inte någon utcheckning"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "skapa ett naket (\"bare\") arkiv"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "skapa ett spegelarkiv (implicerar \"bare\")"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "för att klona från ett lokalt arkiv"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "skapa inte lokala hårda länkar, kopiera alltid"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "skapa som ett delat arkiv"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "sökvägsangivelse"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "initiera undermoduler i klonen"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "antal undermoduler som klonas parallellt"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "mallkatalog"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "katalog att använda mallar från"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "referensarkiv"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "använd --reference endast under kloningen"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "namn"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "använd <namn> istället för \"origin\" för att spåra uppströms"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "checka ut <gren> istället för fjärrens HEAD"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "sökväg till git-upload-pack på fjärren"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "djup"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "skapa en grund klon på detta djup"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "tid"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "skapa en grund klon från en angiven tidpunkt"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "revision"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "fördjupa historik för grund klon, exkludera revisionen"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "klona endast en gren, HEAD eller --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "klona inga taggar och gör att senare hämtningar inte följer dem"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "klonade undermoduler kommer vara grunda"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "gitkat"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "separera gitkatalogen från arbetskatalogen"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "nyckel=värde"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "ställ in konfiguration i det nya arkivet"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "serverspecifik"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr ""
 "inget att checka in\n"
 "flagga att sända"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "använd endast IPv4-adresser"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "använd endast IPv6-adresser"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "klonade undermoduler kommer använda sin fjärrspårningsgren"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "initiera sparse-checkout-filen till att bara inkludera filer i roten"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12478,42 +12929,42 @@
 "Kunde inte gissa katalognamn.\n"
 "Ange en katalog på kommandoraden"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Kan inte skapa suppleant för \"%s\": %s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s finns och är ingen katalog"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "misslyckades starta iterator över \"%s\""
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "misslyckades skapa länken \"%s\""
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "misslyckades kopiera filen till \"%s\""
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "misslyckades iterera över \"%s\""
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "klart.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12523,147 +12974,147 @@
 "Du kan inspektera det som checkades ut med \"git status\"\n"
 "och försöka med \"git restore -source=HEAD :/\"\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Kunde inte hitta fjärrgrenen %s för att klona."
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "kan inte uppdatera %s"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "misslyckades initiera sparse-checkout"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "HEAD hos fjärren pekar på en obefintlig referens, kan inte checka ut.\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "kunde inte checka ut arbetskatalogen"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "kunde inte skriva parametrar till konfigurationsfilen"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "kan inte packa om för att städa upp"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "kunde inte ta bort temporär \"alternates\"-fil"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "För många argument."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Du måste ange ett arkiv att klona."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "flaggorna --bare och --origin %s är inkompatibla."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "flaggorna --bare och --separate-git-dir är inkompatibla."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "arkivet \"%s\" finns inte"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "djupet %s är inte ett positivt tal"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "destinationssökvägen \"%s\" finns redan och är inte en tom katalog."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "arkivsökvägen \"%s\" finns redan och är inte en tom katalog."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "arbetsträdet \"%s\" finns redan."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "kunde inte skapa inledande kataloger för \"%s\""
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "kunde inte skapa arbetskatalogen \"%s\""
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klonar till ett naket arkiv \"%s\"...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klonar till \"%s\"...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 "clone --recursive är inte kompatibel med --reference och --reference-if-able"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "\"%s\" är inte ett giltigt namn på fjärrarkiv"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "källarkivet är grunt, ignorerar --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local ignoreras"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Fjärrgrenen %s hittades inte i uppströmsarkivet %s"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Du verkar ha klonat ett tomt arkiv."
 
@@ -12680,20 +13131,20 @@
 msgstr "utseende att använda"
 
 #: builtin/column.c:30
-msgid "Maximum width"
-msgstr "Maximal bredd"
+msgid "maximum width"
+msgstr "maximal bredd"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
-msgstr "Spaltfyllnad i vänsterkanten"
+msgid "padding space on left border"
+msgstr "spaltfyllnad i vänsterkanten"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
-msgstr "Spaltfyllnad i högerkanten"
+msgid "padding space on right border"
+msgstr "spaltfyllnad i högerkanten"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "Spaltfyllnad mellan spalter"
+msgid "padding space between columns"
+msgstr "spaltfyllnad mellan spalter"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
@@ -12721,14 +13172,14 @@
 msgstr "kunde inte hitta objektkatalog för %s"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "kat"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
-msgstr "Objektkatalogen där grafen ska lagras"
+msgid "the object directory to store the graph"
+msgstr "objektkatalogen där grafen ska lagras"
 
 #: builtin/commit-graph.c:83
 msgid "if the commit-graph is split, only verify the tip file"
@@ -12816,7 +13267,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "duplicerad förälder %s ignorerades"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "objektnamnet är inte giltigt: %s"
@@ -12844,13 +13295,13 @@
 msgid "id of a parent commit object"
 msgstr "id på ett förälderincheckningsobjekt"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "meddelande"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "incheckningsmeddelande"
 
@@ -12858,7 +13309,7 @@
 msgid "read commit log message from file"
 msgstr "läs incheckningsloggmeddelande från fil"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG-signera incheckning"
@@ -12933,73 +13384,73 @@
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "misslyckades packa upp HEAD:s trädobjekt"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file med -a ger ingen mening"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "Du måste ange sökvägar tillsammans med --include/--only."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "kunde inte skapa temporär indexfil"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "interaktiv tilläggning misslyckades"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "kan inte uppdatera temporärt index"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Misslyckades uppdatera huvud-cacheträdet"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "kunde inte skriva filen new_index"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "kan inte utföra en delvis incheckning under en sammanslagning."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "kan inte utföra en delvis incheckning under en cherry-pick."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "kan inte utföra en delvis incheckning under en ombasering."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "kan inte läsa indexet"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "kunde inte skriva temporär indexfil"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "incheckningen \"%s\" saknar författarhuvud"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "incheckningen \"%s\" har felformaterat författarhuvud"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "felformad \"--author\"-flagga"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13007,38 +13458,43 @@
 "kunde inte välja ett kommentarstecken som inte använts\n"
 "i det befintliga incheckningsmeddelandet"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "kunde inte slå upp incheckningen %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(läser loggmeddelande från standard in)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "kunde inte läsa logg från standard in"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "kunde inte läsa loggfilen \"%s\""
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "kan inte kombinera -m med --fixup:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "kunde inte läsa SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "kunde inte läsa MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "kunde inte skriva incheckningsmall"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13052,7 +13508,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "och försöker igen.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13066,7 +13522,7 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "och försöker igen.\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13076,7 +13532,7 @@
 "med \"%c\" kommer ignoreras, och ett tomt meddelande avbryter "
 "incheckningen.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13087,144 +13543,175 @@
 "med \"%c\" kommer behållas; du kan själv ta bort dem om du vill.\n"
 "Ett tomt meddelande avbryter incheckningen.\n"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sFörfattare: %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sDatum:      %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sIncheckare: %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "Kan inte läsa indexet"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "kan inte sända släprader till --trailers"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Fel vid byggande av träd"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Ange meddelandet en av flaggorna -m eller -F.\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' är inte 'Namn <epost>' och motsvarar ingen befintlig författare"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Ogiltigt ignorerat läge \"%s\""
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Ogiltigt läge för ospårade filer: \"%s\""
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long och -z är inkompatibla"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "Du är i mitten av en sammanslagning -- kan inte omformulera."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "Du är i mitten av en cherry-pick -- kan inte omformulera."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr ""
+"kan inte kombinera omformuleringsflaggor för --fixup med sökvägen \"%s\""
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"omformuleringsflaggan i --fixup är ömsesidigt uteslutande med --patch/--"
+"interactive/--all/--include/--only"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Kan inte använda både --reset-author och --author"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "Du har inget att utöka."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Du är i mitten av en sammanslagning -- kan inte utöka."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Du är i mitten av en cherry-pick -- kan inte utöka."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Du är i mitten av en ombasering -- kan inte utöka."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Flaggorna --squash och --fixup kan inte användas samtidigt"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Endast en av -c/-C/-F/--fixup kan användas."
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "Flaggan -m kan inte kombineras med -c/-C/-F."
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author kan endast användas med -C, -c eller --amend."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "Endast en av --include/--only/--all/--interactive/--patch kan användas."
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "okänd flagga: --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "sökvägarna \"%s ...\" med -a ger ingen mening"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "visa koncis status"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "visa information om gren"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "visa information om stash"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "beräkna fullständiga före-/efter-värden"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "maskinläsbar utdata"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "visa status i långt format (standard)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "terminera poster med NUL"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "läge"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "visa ospårade filer, valfria lägen: all, normal, no. (Standard: all)"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13232,11 +13719,11 @@
 "visa ignorerade filer, valfria lägen: traditional, matching, no (Standard: "
 "traditional)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "när"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13244,172 +13731,194 @@
 "ignorera ändringar i undermoduler, valfritt när: all, dirty, untracked. "
 "(Default: all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "visa ospårade filer i spalter"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "detektera inte namnändringar"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "detektera namnändringar, möjligen sätt likhetsindex"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "Kombinationen av argument för ignorerade och ospårade filer stöds ej"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "undertryck sammanfattning efter framgångsrik incheckning"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "visa diff i mallen för incheckningsmeddelandet"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Alternativ för incheckningsmeddelande"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "läs meddelande från fil"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "författare"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "överstyr författare för incheckningen"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "datum"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "överstyr datum för incheckningen"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "incheckning"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "återanvänd och redigera meddelande från angiven incheckning"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "återanvänd meddelande från angiven incheckning"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr ""
-"använd autosquash-formaterat meddelande för att fixa angiven incheckning"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]incheckning"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr ""
+"använd autosquash-formaterat meddelande för att fixa/omformulera angiven "
+"incheckning"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "använd autosquash-formaterat meddelande för att slå ihop med angiven "
 "incheckning"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "jag är nu författare av incheckningen (används med -C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "släprad"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "använd skräddarsydd(a) släprad(er)"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "lägg till Signed-off-by-släprad"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "använd angiven mallfil"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "tvinga redigering av incheckning"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "inkludera status i mallen för incheckningsmeddelandet"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Alternativ för incheckningens innehåll"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "checka in alla ändrade filer"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "lägg till angivna filer till indexet för incheckning"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "lägg till filer interaktivt"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "lägg till ändringar interaktivt"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "checka endast in angivna filer"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "förbigå pre-commit- och commit-msg-krokar"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "visa vad som skulle checkas in"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "lägg till föregående incheckning"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "förbigå post-rewrite-krok"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "ok att registrera en tom ändring"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "ok att registrera en ändring med tomt meddelande"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Trasig MERGE_HEAD-fil (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "kunde inte läsa MERGE_MODE"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "kunde inte läsa incheckningsmeddelande: %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Avbryter på grund av tomt incheckningsmeddelande.\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Avbryter incheckning; meddelandet inte redigerat.\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "Avbryter på grund av tom incheckningsmeddelandekropp.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13752,7 +14261,7 @@
 msgid "print sizes in human readable format"
 msgstr "skriv storlekar i människoläsbart format"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -13765,11 +14274,11 @@
 "\n"
 "\tchmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "skriv felsökningsmeddelanden på standard fel"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
 "\"credential-cache--daemon\" ej tillgänglig; stöd för unix-uttag saknas"
@@ -13956,71 +14465,71 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base fungerar endast med två incheckningar"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "\"%s\": inte en normal fil eller symbolisk länk"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "ogiltig flagga: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: ingen sammanslagningsbas"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "Inte ett git-arkiv"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objektet \"%s\" som angavs är felaktigt."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "mer än två blobbar angavs: \"%s\""
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "ej hanterat objekt \"%s\" angavs."
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: flera sammanslagningsbaser, använder %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr ""
 "git difftool [<flaggor>] [<incheckning> [<incheckning>]] [--] [<sökväg>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "misslyckades: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "kunde inte läsa symboliska länken %s"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "kunde inte läsa symbolisk länk-fil %s"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "kunde inte läsa objektet %s för symboliska länken %s"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14028,53 +14537,53 @@
 "kombinerade diff-format (\"-c\" och \"--cc\") stöds inte i\n"
 "katalogdiffläge (\"-d\" och \"--dir-diff\")."
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "bägge filerna ändrade: \"%s\" och \"%s\"."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "filen i arbetskatalogen lämnades kvar."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "temporära filer finns i \"%s\"."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "du kanske vill städa eller rädda dem."
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "använd \"diff.guitool\" istället för \"diff.tool\""
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "utför diff för hela katalogen"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "fråga inte vid start av diff-verktyg"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "använd symboliska länkar i katalogdiffläge"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "verktyg"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "använd angivet diff-verktyg"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "visa en lista över diff-verktyg som kan användas med \"--tool\""
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -14082,31 +14591,31 @@
 "låt \"git-difftool\" avbryta när ett anropat diff-verktyg ger returvärde "
 "skilt från noll"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "ange eget kommando för att visa diffar"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "sändes till \"diff\""
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool kräver en arbetskatalog eller --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff är inkompatibelt med --no-index"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool och --extcmd är ömsesidigt uteslutande"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "inget <verktyg> angavs för --tool=<verktyg>"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "inget <kommando> angavs för --extcmd=<kommando>"
 
@@ -14171,40 +14680,40 @@
 msgstr "välj hantering av incheckningsmeddelanden i alternativ teckenkodning"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "Dumpa märken till filen"
+msgid "dump marks to this file"
+msgstr "dumpa märken till filen"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
-msgstr "Importera märken från filen"
+msgid "import marks from this file"
+msgstr "importera märken från filen"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "Importera märken från filen, om den finns"
+msgid "import marks from this file if it exists"
+msgstr "importera märken från filen, om den finns"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "Fejka taggare när taggen saknar en"
+msgid "fake a tagger when tags lack one"
+msgstr "fejka taggare när taggen saknar en"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "Skriv ut hela trädet för varje incheckning"
+msgid "output full tree for each commit"
+msgstr "skriv ut hela trädet för varje incheckning"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "Använd done-funktionen för att avsluta strömmen"
+msgid "use the done feature to terminate the stream"
+msgstr "använd done-funktionen för att avsluta strömmen"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "Hoppa över skrivning av blob-data"
+msgid "skip output of blob data"
+msgstr "hoppa över skrivning av blob-data"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "referensspecifikation"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "Applicera referensspecifikation på exporterade referenser"
+msgid "apply refspec to exported refs"
+msgstr "applicera referensspecifikation på exporterade referenser"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14219,16 +14728,16 @@
 msgstr "konvertera <från> till <till> i anonymiserad utdata"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
-msgstr "Referera föräldrar som inte finns i fast-export-ström med objekt-id"
+msgid "reference parents which are not in fast-export stream by object id"
+msgstr "referera föräldrar som inte finns i fast-export-ström med objekt-id"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "Visa ursprungliga objekt-id för blobbar/incheckningar"
+msgid "show original object ids of blobs/commits"
+msgstr "visa ursprungliga objekt-id för blobbar/incheckningar"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "Märk taggar med märke-id"
+msgid "label tags with mark ids"
+msgstr "märk taggar med märke-id"
 
 #: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
@@ -14267,7 +14776,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "funktionen \"%s\" förbjuden i indata utan --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Låsfil skapad men inte rapporterad: %s"
@@ -14288,93 +14797,103 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<flaggor>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel kan inte vara negativt"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "hämta från alla fjärrar"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "ställ in uppström för git pull/fetch"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "lägg till i .git/FETCH_HEAD istället för att skriva över"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "använd atomiska transaktioner för att uppdatera referenser"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "sökväg till upload pack på fjärren"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "tvinga överskrivning av lokal referens"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "hämta från flera fjärrar"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "hämta alla taggar och associerade objekt"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "hämta inte alla taggar (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "antal undermoduler som hämtas parallellt"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+"modifiera referensspecifikationen så att alla referenser hamnar i refs/"
+"prefetch/"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "rensa fjärrspårande grenar ej längre på fjärren"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "rensa lokala taggar inte längre på fjärren och skriv över ändrade taggar"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "styr rekursiv hämtning av undermoduler"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "skriv hämtade referenser till FETCH_HEAD-filen"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "behåll hämtade paket"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "tillåt uppdatering av HEAD-referens"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "fördjupa historik för grund klon"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "fördjupa historik för grund klon baserad på tid"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "konvertera till komplett arkiv"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "lägg till i början av undermodulens sökvägsutdata"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14382,98 +14901,102 @@
 "standard för rekursiv hämtning av undermoduler (lägre prioritet än "
 "konfigurationsfiler)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "tar emot referenser som uppdaterar .git/shallow"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "referenskarta"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "ange referenskarta för \"fetch\""
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "rapportera att vi bara har objekt nåbara från detta objektet"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr "hämta inte paketfil; skriv istället förfäder till förhandlingstips"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "kör \"maintenance --auto\" efter hämtning"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "se efter tvingade uppdateringar i alla uppdaterade grenar"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "skriv incheckingsgrafen efter hämtning"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "ta emot referenser från standard in"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "Kunde inte hitta fjärr-referensen HEAD"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "konfigurationen för fetch.output innehåller ogiltigt värde %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "objektet %s hittades inte"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[àjour]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[refuserad]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "kan inte hämta i aktuell gren"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[uppdaterad tagg]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "kunde inte uppdatera lokal ref"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "skulle skriva över befintlig tagg"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[ny tagg]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[ny gren]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[ny ref]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "tvingad uppdatering"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "ej snabbspolad"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14484,7 +15007,7 @@
 "av. För att slå på igen, använd flaggan \"--show-forced-updates\" eller kör\n"
 "\"git config fetch.showForcedUpdates true\"."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14497,22 +15020,22 @@
 "showForcedUpdates\n"
 "false\" för att undvika testet.\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s sände inte alla nödvändiga objekt\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "avvisa %s då grunda rötter inte kan uppdateras"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "Från %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14521,56 +15044,56 @@
 "vissa lokala referenser kunde inte uppdateras; testa att köra\n"
 " \"git remote prune %s\" för att ta bort gamla grenar som står i konflikt"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s kommer bli dinglande)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s har blivit dinglande)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[borttagen]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(ingen)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Vägrar hämta till aktuell gren %s i ett icke-naket arkiv"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Flaggan \"%s\" och värdet \"%s\" är inte giltigt för %s"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Flaggan \"%s\" ignoreras för %s\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "flera grenar upptäcktes, inkompatibelt med --set-upstream"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "ställer inte in uppströmsgren för en fjärrspårande gren på fjärren"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "ställer inte in uppström för en fjärrtag"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "okänd grentyp"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14578,22 +15101,22 @@
 "hittade ingen källgren.\n"
 "du måste ange exakt en gren med flaggan --set-upstream."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Hämtar %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Kunde inte hämta %s"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "kunde inte hämta \"%s\" (felkod: %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14601,44 +15124,52 @@
 "Inget fjärrarkiv angavs. Ange antingen en URL eller namnet på ett\n"
 "fjärrarkiv som nya incheckningar ska hämtas från."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Du måste ange namnet på en tagg."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "Negativa djup stöds inte i --deepen"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen och --depth är ömsesidigt uteslutande"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth och --unshallow kan inte användas samtidigt"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow kan inte användas på ett komplett arkiv"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all tar inte namnet på ett arkiv som argument"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all kan inte anges med referensspecifikationer"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Fjärren eller fjärrgruppen finns inte: %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Kan inte hämta från grupp och ange referensspecifikationer"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "måste ange fjärr när --negotiate-only anges"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Protokollet stöder inte --negotiate-only, avslutar."
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -14646,9 +15177,13 @@
 "--filter kan endast användas med fjärren konfigurerad i extensions."
 "partialclone"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic kan bara användas vid hämtning från en fjärr"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
-msgstr "--stdin kan bara användas för att hämta från en fjärr"
+msgstr "--stdin kan bara användas vid hämtning fårn en fjärr"
 
 #: builtin/fmt-merge-msg.c:7
 msgid ""
@@ -14694,47 +15229,47 @@
 msgstr ""
 "git for-each-ref [--contains [<incheckning>]] [--no-contains [<incheckning>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "citera platshållare passande för skal"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "citera platshållare passande för perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "citera platshållare passande för python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "citera platshållare passande för Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "visa endast <n> träffade refs"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "använd formatfärger"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "visa endast referenser som pekar på objektet"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "visa endast referenser som slagits samman"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "visa endast referenser som ej slagits samman"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "visa endast referenser som innehåller incheckningen"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "visa endast referenser som inte innehåller incheckningen"
 
@@ -14754,32 +15289,32 @@
 msgid "missing --config=<config>"
 msgstr "saknar --config=<konfig>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "okänd"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "fel i %s %s: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "varning i %s %s: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "trasig länk från %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "fel objekttyp i länk"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14788,215 +15323,215 @@
 "trasig länk från %7s %s\n"
 "            till %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "saknat %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "onåbart %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "hängande %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "kunde inte skapa lost-found"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "kunde inte avsluta \"%s\""
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "Kontrollerar %s"
 
 # Vague original, not networking-related, but rather related to the actual
 # objects in the database.
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Kontrollerar konnektivitet (%d objekt)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "Kontrollerar %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "trasiga länkar"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "roten %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "taggad %s %s (%s) i %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: objekt trasigt eller saknas"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: ogiltig reflog-post %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Kontrollerar reflog %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: ogiltig sha1-pekare %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: inte en incheckning!"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "obs: Inga förvalda referenser"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: objektet trasigt eller saknas: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: objektet kunde inte tolkas: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "ogiltig sha1-fil: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Kontrollerar objektkatalog"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Kontrollerar objektkataloger"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "Kontrollerar %s-länk"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "ogiltigt %s"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s pekar på något konstigt (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: frånkopplat HEAD pekar på ingenting"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "obs: %s pekar på en ofödd gren (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Kontrollerar cacheträd"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: ogiltig sha1-pekare i cacheträd"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "icke-träd i cacheträd"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<flaggor>] [<objekt>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "visa onåbara objekt"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "visa dinglande objekt"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "rapportera taggar"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "rapportera rotnoder"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "gör indexojekt till huvudnoder"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "gör refloggar till huvudnoder (standard)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "ta även hänsyn till paket och supplerande objekt"
 
 # Vague original, not networking-related, but rather related to the actual
 # objects in the database.
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "kontrollera endast konnektivitet"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "aktivera striktare kontroll"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "skriv dinglande objekt i .git/lost-found"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "visa förlopp"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "visa ordrika namn för nåbara objekt"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Kontrollerar objekt"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: objekt saknas"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "ogiltig parameter: förväntade sha1, fick \"%s\""
@@ -15005,27 +15540,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<flaggor>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Misslyckades ta status (fstat) på %s: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "misslyckades tolka \"%s\" värde \"%s\""
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "kan inte ta status på \"%s\""
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "kunde inte läsa \"%s\""
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15040,52 +15575,52 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "rensa ej refererade objekt"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "var mer grundlig (ökar körtiden)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "aktivera auto-gc-läge"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "tvinga gc-körning även om en annan gc kanske körs"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "packa om alla paket förutom det största paketet"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "kunde inte tolka värdet %s för gc.logexpiry"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "kunde inte tolka värdet %s för prune expiry"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "Packar arkivet automatiskt i bakgrunden för optimal prestanda.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Packar arkivet automatiskt för optimal prestanda.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Se \"git help gc\" för manuell hushållning.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15093,145 +15628,172 @@
 "gc körs redan på maskinen \"%s\" pid %<PRIuMAX> (använd --force om så inte "
 "är fallet)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Det finns för många onåbara lösa objekt; kör \"git prune\" för att ta bort "
 "dem."
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<uppgift>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule tillåts inte"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "okänt argument för --schedule, %s"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "kunde inte skriva incheckningsgraf"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "kunde inte fylla fjärrar"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "kunde inte förhämta fjärrar"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "kunde inte starta \"git pack-objects\"-process"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "kunde inte avsluta \"git pack-objects\"-process"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "kunde inte skriva multi-pack-index"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "\"git multi-pack-index expire\" misslyckades"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "\"git multi-pack-index repack\" misslyckades"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 "hoppar över \"incremental-repack\"-uppgift eftersom core.multiPackIndex är "
 "inaktiverat"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "låsfilen \"%s\" finns, hoppar över underhåll"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "uppgiften \"%s\" misslyckades"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "\"%s\" är inte en giltig uppgift"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "uppgiften \"%s\" kan inte väljas flera gånger"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "kör uppgifter baserad på arkivets tillstånd"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "frekvens"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "kör uppgifter baserat på frekvens"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "rapportera inte framgång eller annan information över standard fel"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "uppgift"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "utför en specifik uppgift"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "använd som mest en av --auto och --schedule=<frekvens>"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "misslyckades köra \"git config\""
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "en annan process schemalägger bakgrundsunderhåll"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "misslyckades expandera sökvägen \"%s\""
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "misslyckades starta launchctl"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "misslyckades skapa kataloger för \"%s\""
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "misslyckades starta tjänsten %s"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "misslyckades skapa temporär xml-fil"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "misslyckades starta schtasks"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 "kunde inte köra \"crontab -l\"; ditt system kanske inte stöder \"cron\""
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr "kunde inte köra \"crontab\"; ditt system kanske inte stöder \"cron\""
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "misslyckades öppna standard in för \"crontab\""
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "\"crontab\" dog"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "en annan process schemalägger bakgrundsunderhåll"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "misslyckades lägga till arkiv till global konfiguration"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <underkommando> [<flaggor>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "felaktigt underkommando: %s"
@@ -15240,12 +15802,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<flaggor>] [-e] <mönster> [<rev>...] [[--] <sökväg>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: misslyckades skapa tråd. %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "felaktigt antal trådar angivet (%d) för %s"
@@ -15254,203 +15816,199 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "trådstöd saknas, ignorerar %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "kunde inte läsa träd (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "kunde inte \"grep\" från objekt av typen %s"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "flaggan \"%c\" antar ett numeriskt värde"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "sök i indexet istället för i arbetskatalogen"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "sök i innehåll som inte hanteras av git"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "sök i både spårade och ospårade filer"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorera filer angivna i \".gitignore\""
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "sök varje undermodul rekursivt"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "visa rader som inte träffas"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "skiftlägesokänslig sökning"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "träffa endast mönster vid ordgränser"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "hantera binärfiler som text"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "träffa inte mönster i binärfiler"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "hantera binärfiler med textconv-filter"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "sök i underkataloger (standard)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "gå som mest ned <djup> nivåer"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "använd utökade POSIX-reguljära uttryck"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "använd grundläggande POSIX-reguljära uttryck (standard)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "tolka mönster som fixerade strängar"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "använd Perlkompatibla reguljära uttryck"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "visa radnummer"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "visa kolumnnummer för första träff"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "visa inte filnamn"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "visa filnamn"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "visa filnamn relativa till toppkatalogen"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "visa endast filnamn istället för träffade rader"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "synonym för --files-with-matches"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "visa endast namn på filer utan träffar"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "skriv NUL efter filnamn"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "visa endast träffade delar av rader"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "visa antal träffar istället för träffade rader"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "ljusmarkera träffar"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "skriv tomma rader mellan träffar från olika filer"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr "visa filnamn endast en gång ovanför träffar från samma fil"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "visa <n> rader sammanhang före och efter träffar"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "visa <n> rader sammanhang före träffar"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "visa <n> rader sammanhang efter träffar"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "använd <n> jobbtrådar"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "genväg för -C NUM"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "visa en rad med funktionsnamnet före träffen"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "visa den omkringliggande funktionen"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "läs mönster från fil"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "träffa <mönster>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "kombinera mönster som anges med -e"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "ange träff med slutstatuskod utan utdata"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr "visa endast träffar från filer som träffar alla mönster"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "visa analysträd för grep-uttryck"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "bläddrare"
@@ -15484,11 +16042,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "ogiltig kombination av flaggor, ignorerar --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "trådstöd saknas, ignorerar --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "felaktigt antal trådar angivet (%d)"
@@ -15501,11 +16059,15 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached och --untracked kan inte användas med --no-index"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked kan inte användas med --cached"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard kan inte användas för spårat innehåll"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "både --cached och träd angavs"
 
@@ -15637,12 +16199,12 @@
 msgid "no info viewer handled the request"
 msgstr "ingen info-visare hanterade förfrågan"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "\"%s\" är ett alias för \"%s\""
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "felaktig alias.%s-sträng: %s"
@@ -15656,392 +16218,392 @@
 msgid "'git help config' for more information"
 msgstr "\"git help config\" för mer information"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "objekttyp stämmer inte överens vid %s"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "emottog inte det förväntade objektet %s"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "objektet %s: förväntad typ %s, såg %s"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "kan inte fylla %d byte"
 msgstr[1] "kan inte fylla %d byte"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "tidigt filslut"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "indataläsfel"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "använde fler byte än tillgängligt"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "paket för stort för nuvarande definition av off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "paket är större än tillåten maximal storlek"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "kunde inte skapa \"%s\""
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "kan inte öppna paketfilen \"%s\""
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "paketsignatur stämmer inte överens"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "paketversion %<PRIu32> stöds ej"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "paketet har felaktigt objekt vid index %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "inflate returnerade %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "indexvärdespill för deltabasobjekt"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "deltabasindex utanför gränsen"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "okänd objekttyp %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "kan inte utföra \"pread\" på paketfil"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "för tidigt slut på paketfilen, %<PRIuMAX> byte saknas"
 msgstr[1] "för tidigt slut på paketfilen, %<PRIuMAX> byte saknas"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "allvarlig inflate-inkonsekvens"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SHA1-KOLLISION UPPTÄCKT VID %s !"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "kunde inte läsa %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "kan inte läsa information om befintligt objekt %s"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "kan inte läsa befintligt objekt %s"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "ogiltigt blob-objekt %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "fsck-fel i packat objekt"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Inte alla barnobjekt för %s kan nås"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "misslyckades tillämpa delta"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Tar emot objekt"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Skapar index för objekt"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "paketet är trasigt (SHA1 stämmer inte)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "kan inte utföra \"fstat\" på paketfil"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "paket har skräp i slutet"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "förvirrad bortom vanvett i parse_pack_objects()"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Analyserar delta"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "kunde inte skapa tråd: %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "förvirrad bortom vanvett"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "slutfördes med %d lokalt objekt"
 msgstr[1] "slutfördes med %d lokala objekt"
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Oväntad svanschecksumma för %s (trasig disk?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "paketet har %d oanalyserat delta"
 msgstr[1] "paketet har %d oanalyserade delta"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "kunde inte utföra \"deflate\" på tillagt objekt (%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "lokalt objekt %s är trasigt"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "paketfilnamnet \"%s\" slutar inte med \".pack\""
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "paketfilnamnet \"%s\" slutar inte med \".%s\""
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "kan inte ta skriva %s-fil \"%s\""
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "kan inte stänga skriven %s-fil \"%s\""
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "fel vid stängning av paketfil"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "kan inte spara paketfil"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "kan inte spara indexfil"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "felaktig pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Kan inte öppna befintlig paketfil \"%s\""
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Kan inte öppna befintlig paket-idx-fil för \"%s\""
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "icke-delta: %d objekt"
 msgstr[1] "icke-delta: %d objekt"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "kedjelängd = %d: %lu objekt"
 msgstr[1] "kedjelängd = %d: %lu objekt"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "Kan inte gå tillbaka till arbetskatalogen (cwd)"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "felaktig %s"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "okänd hashningsalgoritm \"%s\""
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin kan inte användas med --stdin"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin kräver ett git-arkiv"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format kan inte användas med --stdin"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "--verify angavs utan paketfilnamn"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "fsck-fel i packat objekt"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "kan inte ta status på mallen \"%s\""
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "kan inte öppna katalogen (opendir) \"%s\""
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "kan inte läsa länk (readlink) \"%s\""
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "kan inte skapa symbolisk länk \"%s\" \"%s\""
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "kan inte kopiera \"%s\" till \"%s\""
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "ignorerar mallen %s"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "mallarna hittades inte i %s"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "kopierade inte mallar från \"%s\": %s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "ogiltigt namn på första gren: \"%s\""
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "kan inte hantera filtyp %d"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "kan inte flytta %s till %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "försöker initiera arkivet på nytt med annan hash"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s finns redan"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init: ignorerade --initial-branch=%s"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "Ominitierade befintligt delat Git-arkiv i %s%s\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Ominitierade befintligt Git-arkiv i %s%s\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Initierade tomt delat Git-arkiv i %s%s\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Initierade tomt Git-arkiv i %s%s\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -16049,41 +16611,41 @@
 "git init [-q | --quiet] [--bare] [--template=<mallkatalog>] [--"
 "shared[=<behörigheter>]] [<katalog>]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "behörigheter"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "ange att git-arkivet ska delas bland flera användare"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "överstyr namnet på första gren"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "hash"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "ange hashningsalgoritm att använda"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir och --bare är ömsesidigt uteslutande"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "kan inte skapa katalogen (mkdir) %s"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "kan inte byta katalog (chdir) till %s"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -16092,12 +16654,12 @@
 "%s (eller --work-tree=<katalog>) inte tillåtet utan att ange %s (eller --git-"
 "dir=<katalog>)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Kan inte komma åt arbetskatalogen \"%s\""
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separatebgit-dir är inkompatibelt med naket arkiv"
 
@@ -16149,10 +16711,6 @@
 msgid "do not treat --- specially"
 msgstr "tolka inte --- speciellt"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "släprad"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "släprad(er) att lägga till"
@@ -16165,130 +16723,130 @@
 msgid "no input file given for in-place editing"
 msgstr "ingen indatafil angiven för redigering på plats"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<flaggor>] [<versionsintervall>] [[--] <sökväg>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<flaggor>] <objekt>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "ogiltig flagga för --decorate: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "visa källkod"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
-msgstr "Använd e-postmappningsfil"
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "använd e-postmappningsfil"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "dekorera endast referenser som motsvarar <mönster>"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "dekorera inte referenser som motsvarar <mönster>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "dekoreringsflaggor"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
-"Spåra utvecklingen av intervallet <start>,<slut> eller funktionen :"
+"spåra utvecklingen av radintervallet <start>,<slut> eller funktionen :"
 "<funknamn> i <fil>"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<intervall>:<fil> kan inte användas med sökvägsspecifikation"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Slututdata: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: felaktig fil"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "kunde inte läsa objektet %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "okänd typ: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: ogiltigt omslag från beskrivningsläge"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers utan värde"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "kan inte öppna patchfilen %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "behöver precis ett intervall"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "inte ett intervall"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "omslagsbrevet behöver e-postformat"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "misslyckades skapa fil för omslagsbrev"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "tokigt in-reply-to: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<flaggor>] [<sedan> | <revisionsintervall>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "två utdatakataloger?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "okänd incheckning %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "misslyckades slå upp \"%s\" som en giltig referens"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "kunde inte hitta exakt sammanslagningsbas"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16298,393 +16856,401 @@
 "använd git branch --set-upstream-to för att spåra en fjärrgren.\n"
 "Eller så kan du ange basincheckning med --base=<bas-inchecknings-id> manuellt"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "kunde inte hitta exakt sammanslagningsbas"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "basincheckningen bör vara förfader till revisionslistan"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "basincheckningen bör inte vara i revisionslistan"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "kan inte hämta patch-id"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr "misslyckades räkna ut intervalldiff-ursprung för aktuell serie"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "använd \"%s\" som intervalldiff-ursprung för aktuell serie"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "använd [PATCH n/m] även för en ensam patch"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "använd [PATCH] även för flera patchar"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "skriv patcharna på standard ut"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "generera ett följebrev"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "använd enkel nummersekvens för utdatafilnamn"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "använd <sfx> istället för \".patch\""
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "börja numrera patchar på <n> istället för 1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "antal iterationer"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "markera serien som N:te försök"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "maximal längd för utdatafilnamn"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Använd  [RFC PATCH] istället för [PATCH]"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "använd [RFC PATCH] istället för [PATCH]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-läge"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "skapa delar av omslagsbrevet baserat på grenbeskrivelsen"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Använd [<prefix>] istället för [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "använd [<prefix>] istället för [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "spara filerna i <katalog>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "ta inte bort eller lägg till [PATCH]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "skriv inte binära diffar"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "använd hashvärde med nollor i From-huvud"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "ta inte med patchar som motsvarar en uppströmsincheckning"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "visa patchformat istället för standard (patch + stat)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "E-post"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "huvud"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "lägg till e-posthuvud"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "epost"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "lägg till mottagarhuvud (\"To:\")"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "lägg till kopiehuvud (\"Cc:\")"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "sätt Från-adress till <ident> (eller incheckare om ident saknas)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "meddelande-id"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "gör det första brevet ett svar till <meddelande-id>"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "gräns"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "bifoga patchen"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "gör patchen ett inline-objekt"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "aktivera brevtrådning, typer: shallow, deep"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "signatur"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "lägg till signatur"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "basincheckning"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "lägg till förhandskrävd trädinfo i patchserien"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "lägg till signatur från fil"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "visa inte filnamn för patchar"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "visa förloppsindikator medan patchar skapas"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "visa ändringar mot <rev> i omslagsbrev eller ensam patch"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "visa ändringar mot <refspec> i omslagsbrev eller ensam patch"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "procent som skapelse vägs med"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "ogiltig ident-rad: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n och -k kan inte användas samtidigt"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc och -k kan inte användas samtidigt"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "kan inte använda --name-only"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "kan inte använda --name-status"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "kan inte använda --check"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "--stdout, --output, och --output-directory är ömsesidigt uteslutande"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff kräver --cover-letter eller ensam patch"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff mot v%d:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor kräver --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff kräver --cover-letter eller ensam patch"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Intervall-diff:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Intervall-diff mot v%d:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "kunde inte läsa signaturfil \"%s\""
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Skapar patchar"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "misslyckades skapa utdatafiler"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<uppström> [<huvud> [<gräns>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr "Kunde inte hitta en spårad fjärrgren, ange <uppström> manuellt.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<flaggor>] [<fil>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "identifiera filstatus med taggar"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "använd små bokstäver för \"anta oförändrade\"-filer"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "använd små bokstäver för \"fsmonitor clean\"-filer"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "visa cachade filer i utdata (standard)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "visa borttagna filer i utdata"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "visa modifierade filer i utdata"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "visa andra filer i utdata"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "visa ignorerade filer i utdata"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "visa köat innehålls objektnamn i utdata"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "visa filer i filsystemet som behöver tas bort"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "visa endast namn för \"andra\" kataloger"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "visa radslut i filer"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "visa inte tomma kataloger"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "visa ej sammanslagna filer i utdata"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "visa \"resolve-undo\"-information"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "hoppa över filer som motsvarar mönster"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "exkludera mönster som läses från <fil>"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "läs ytterligare per-katalog-exkluderingsmönster från <fil>"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "lägg till git:s standardexkluderingar"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "gör utdata relativ till projektets toppkatalog"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "rekursera ner i undermoduler"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "om en <fil> inte är indexet, betrakta det som ett fel"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "träd-igt"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr "låtsas att sökvägar borttagna sedan <träd-igt> fortfarande finns"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "visa felsökningsutdata"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "undertyck dublettposter"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16695,39 +17261,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<arkiv> [<referenser>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "visa inte fjärr-URL"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "exec"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "sökväg till git-upload-pack på fjärren"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "begränsa till taggar"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "begränsa till huvuden"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "visa inte avskalade taggar"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "ta hänsyn till url.<bas>.insteadOf"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "avsluta med felkod 2 om motsvarande referenser inte hittas"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "visa underliggande referens och objektet det pekar på"
 
@@ -16767,6 +17333,55 @@
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "visa hela trädet; inte bara aktuell katalog (implicerar --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<flaggor>] <meddelande> <patch> < epost >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "behåll ärenderad"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "behåll hakparanterser som inte är \"patch\" i ärenderaden"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "kopiera Message-ID till slutet av incheckningsmeddelandet"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "koda om metadata till i18n.commmitEncoding"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "inaktivera omkodning av metadata"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "teckenkodning"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "omkoda metadata till denna teckenkodning"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "använd saxar"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<åtgärd>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "åtgärd när citerad vagnretur hittas"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "använd huvuden i brevkroppen"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -16883,192 +17498,192 @@
 msgid "Merging %s with %s\n"
 msgstr "Slår ihop %s med %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<flaggor>] [<incheckning>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "flaggan \"m\" behöver ett värde"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "flaggan \"%s\" behöver ett värde"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Kunde inte hitta sammanslagningsstrategin \"%s\".\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Tillgängliga strategier är:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Tillgängliga skräddarsydda strategier är:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "visa inte en diffstat när sammanslagningen är färdig"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "visa en diffstat när sammanslagningen är färdig"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(synonym till --stat)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "lägg till (som mest <n>) poster från shortlog till incheckningsmeddelandet"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "skapa en ensam incheckning istället för en sammanslagning"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "utför en incheckning om sammanslagningen lyckades (standard)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "redigera meddelande innan incheckning"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "tillåt snabbspolning (standard)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "avbryt om snabbspolning inte är möjlig"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "bekräfta att den namngivna incheckningen har en giltig GPG-signatur"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "strategi"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "sammanslagningsstrategi att använda"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "alternativ=värde"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "alternativ för vald sammanslagningsstrategi"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "incheckningsmeddelande för (icke snabbspolande) sammanslagning"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "avbryt den pågående sammanslagningen"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort men lämna index och arbetskatalog ensamma"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "fortsätt den pågående sammanslagningen"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "tillåt sammanslagning av orelaterade historier"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "förbigå pre-merge-commit- och commit-msg-krokar"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "kunde köra stash."
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "stash misslyckades"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "inte ett giltigt objekt: %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree misslyckades"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (inget att platta till)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Redan à jour. (inget att platta till)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Tillplattningsincheckning -- uppdaterar inte HEAD\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Inget sammanslagningsmeddelande -- uppdaterar inte HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "\"%s\" verkar inte peka på en incheckning"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Felaktig branch.%s.mergeoptions-sträng: %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "Hanterar inte något annat än en sammanslagning av två huvuden."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Felaktig flagga för merge-recursive: -X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "kunde inte skriva %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Kunde inte läsa från \"%s\""
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Checkar inte in sammanslagningen; använd \"git commit\" för att slutföra "
 "den.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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"
@@ -17079,11 +17694,11 @@
 "temagren.\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Ett tomt meddelande avbryter incheckningen.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17092,73 +17707,73 @@
 "Rader som inleds med \"%c\" kommer ignoreras, och ett tomt meddelande\n"
 "avbryter incheckningen.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Tomt incheckningsmeddelande."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Underbart.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Kunde inte slå ihop automatiskt; fixa konflikter och checka in resultatet.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "Inte på någon gren."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "Ingen fjärr för aktuell gren."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "Ingen standarduppström angiven för aktuell gren."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Ingen fjärrspårande gren för %s från %s"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Felaktigt värde \"%s\" i miljövariabeln \"%s\""
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "inte något vi kan slå ihop med %s: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "inte något vi kan slå ihop"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort tar inga argument"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Ingen sammanslagning att avbryta (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit tar inga argument"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue tar inga argument"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Ingen sammanslagning pågår (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17166,7 +17781,7 @@
 "Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n"
 "Checka in dina ändringar innan du slår ihop."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17174,101 +17789,134 @@
 "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n"
 "Checka in dina ändringar innan du slår ihop."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Du kan inte kombinera --squash med --no-ff."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "Du kan inte kombinera --squash med --commit."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "Stöder inte en tillplattningsincheckning på ett tomt huvud ännu"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - inte något vi kan slå ihop"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Kan endast slå ihop en enda incheckning i ett tomt huvud"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "vägrar slå samman orelaterad historik"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Redan à jour."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Uppdaterar %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Försöker riktigt enkel sammanslagning i indexet...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Nej.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Redan à jour. Toppen!"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "Kan inte snabbspola, avbryter."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Återspolar trädet till orört...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Försöker sammanslagningsstrategin %s...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Sammanslagning med strategin %s misslyckades.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Använder %s för att förbereda lösning för hand.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Automatisk sammanslagning lyckades; stoppar före incheckning som önskat\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "varning: taggindata godkänns inte av fsck: %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "fel: taggindata godkänns inte av fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) skulle aldrig utlösa detta återanrop"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "kunde inte läsa det taggade objektet \"%s\""
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "objektet \"%s\" taggat som \"%s\", men är av typen \"%s\""
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "tagg på stdin godkänns inte av vår strikta fsck-kontroll"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "taggen på stdin pekar inte på ett giltigt objekt"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "kunde inte skriva tagg-filen"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17285,35 +17933,43 @@
 msgid "allow creation of more than one tree"
 msgstr "tillåt skapa mer än ett träd"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<flaggor>] (write|verify|expire|repack --batch-"
-"size=<storlek>)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<flaggor>] write [--preferred-pack=<paket>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<flaggor>] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<flaggor>] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<flaggor>] repack [--batch-size=<storlek>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr "objektkatalog med uppsättning av par med paketfiler och pack-index"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "föredraget paket"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "paket att återanvända vid beräkning av multipaketsbitkarta"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr ""
 "vid ompackning, samla mindre paketfiler i en bunt som är större än denna "
-"storlekt"
+"storlek"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "för många argument"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "flaggan --batch-size används bara i underkommandot \"repack\""
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "okänt underkommando: %s"
@@ -17410,7 +18066,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "Byter namn på %s till %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "misslyckades byta namn på \"%s\""
@@ -17602,7 +18258,7 @@
 msgid "the note contents have been left in %s"
 msgstr "anteckningens innehåll har lämnats kvar i %s"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "kunde inte öppna eller läsa \"%s\""
@@ -17645,8 +18301,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "för många parametrar"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "för många argument"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -17705,8 +18362,8 @@
 msgstr "läs omskrivningsinställning för <kommando> (implicerar --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "för få parametrar"
+msgid "too few arguments"
+msgstr "för få argument"
 
 #: builtin/notes.c:538
 #, c-format
@@ -17836,7 +18493,7 @@
 "%s och checka in resultatet med \"git notes merge --commit\", eller avbryt "
 "sammanslagningen med \"git notes merge --abort\".\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Kunde inte slå upp \"%s\" som en giltig referens."
@@ -17854,7 +18511,7 @@
 msgid "read object names from the standard input"
 msgstr "läs objektnamn från standard in"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "ta inte bort, bara visa"
 
@@ -17870,7 +18527,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "använd anteckningar från <anteckningsref>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "okänt underkommando: %s"
@@ -17887,102 +18544,116 @@
 msgstr ""
 "git pack-objects [<flaggor>...] <basnamn> [< <reflista> | < <objektlista>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: kunde inte hitta %s, förväntat på position %<PRIuMAX> i "
+"paketet %s"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "felaktig CRC för packat objekt %s"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "trasigt packat objekt för %s"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "rekursivt delta upptäcktes för objektet %s"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "ordnade %u objekt, förväntade %<PRIu32>"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "förväntade objekt på position %<PRIuMAX> i paketet %s"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "inaktiverar skrivning av bitkarta, paket delas på grund av pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Skriver objekt"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "misslyckades ta status på %s"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "skrev %<PRIu32> objekt medan %<PRIu32> förväntades"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "inaktiverar skrivning av bitkarta då några objekt inte packas"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "deltabasoffset utanför gränsen i pack för %s"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "deltabasoffset utanför gränsvärden för %s"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Räknar objekt"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "kunde inte tolka objekthuvud för %s"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "objektet %s kunde inte läsas"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "objektet %s har inkonsistent objektlängd (%<PRIuMAX> mot %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "icke-optimalt pack - minnet slut"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Deltakomprimering använder upp till %d trådar"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "kan inte packa objekt nåbara från taggen %s"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Komprimerar objekt"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "deltaräknaren är inkonsekvent"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -17991,14 +18662,24 @@
 "värdet på uploadpack.blobpackfileuri måste vara på formen '<objekt-hash> "
 "<paket-hash> <uri>' (fick '%s')"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 "objektet redan konfigurerat i et annat uploadpack.blobpackfileuri (fick '%s)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "kunde inte hämta typ för objektet %s i paketet %s"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "kunde inte hitta paketet \"%s\""
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18007,7 +18688,7 @@
 "förväntade kant-objekt-id, fick skräp:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18016,236 +18697,248 @@
 "förväntade objekt-id, fick skräp:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "ogiltigt värde för --missing"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "kan inte öppna paketfilen"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "lösa objekt på %s kunde inte underökas"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "kan inte tvinga lösa objekt"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "inte en referens \"%s\""
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "felaktig revision \"%s\""
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "kan inte lägga till nya objekt"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "indexversionen %s stöds ej"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "felaktig indexversion \"%s\""
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<version>[,<offset>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr "skriv paketindexfilen i angiven indexformatversion"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "maximal storlek på varje utdatapaketfil"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorera lånade objekt från supplerande objektlager"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "ignorera packade objekt"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "begränsa paketfönster efter objekt"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr "begränsa paketfönster efter minne förutom objektgräns"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "maximal längd på deltakedja tillåten i slutligt paket"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "återanvänd befintliga delta"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "återanvänd befintliga objekt"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "använd OFS_DELTA-objekt"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr "använd trådar vid sökning efter bästa deltaträffar"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "försök inte skapa tom paketutdata"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "läs revisionsargument från standard in"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "begränsa objekt till dem som ännu inte packats"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "inkludera objekt som kan nås från någon referens"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "inkludera objekt som refereras från referensloggposter"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "inkludera objekt som refereras från indexet"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "läs paket från standard in"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "skriv paket på standard ut"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "inkludera taggobjekt som refererar objekt som ska packas"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "behåll onåbara objekt"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "packa lösa onåbara objekt"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "packa upp onåbara objekt nyare än <tid>"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "använd gles-nåbarhetsalgoritmen"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "skapa tunna paket"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "skapa packfiler lämpade för grunda hämtningar"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorera paket som har tillhörande .keep-fil"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "ignorera detta paket"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "komprimeringsgrad för paket"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "göm inte incheckningar med ympningar (\"grafts\")"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "använd bitkartindex om tillgängligt för att räkna objekt snabbare"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "använd bitkartindex tillsammans med packindexet"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "skriv bitkartindex om möjligt"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "hantering av saknade objekt"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "packa inte objekt i kontraktspackfiler"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "respektera öar under deltakomprimering"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "protokoll"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "uteslut redan konfigurerade uploadpack.blobpackfileuri med detta protokoll"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "deltakedjedjupet %d är för djupt, påtvingar %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit är för högt, påtvingar %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size kan inte användas för att bygga ett paket som ska överföras"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "minsta packstorlek är 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin kan inte användas för att bygga ett indexerbart paket"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable och -unpack-unreachable kan inte användas samtidigt"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "kan inte använda --filter utan --stdout"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "kan inte använda --filter med --stdin-packs"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "kan inte använda intern revisionslista med --stdin-packs"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Räknar upp objekt"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18254,6 +18947,20 @@
 "Totalt %<PRIu32> (delta %<PRIu32>), återanvände %<PRIu32> (delta %<PRIu32>), "
 "paket-återanvända %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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\" har nominerats för borttagning.\n"
+"Om du fortfarande använder kommandot, lägg till flaggan\n"
+"\"--i-still-use-this\" på kommandoraden och berätta för\n"
+"oss att du fortfarande använder det på e-post till\n"
+"<git@vger.kernel.org>. Tack.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<flaggor>]"
@@ -18311,11 +19018,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "inlemma ändringar genom ombasering i stället för sammanslagning"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "tillåt snabbspolning"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "utför automatiskt stash/stash pop före och efter"
 
@@ -18336,7 +19043,93 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Felaktigt värde för pull.ff: %s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Det finns ingen kandidat för ombasering bland referenserna du precis har "
+"hämtat."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Det finns ingen kandidat för sammanslagning bland referenserna du precis har "
+"hämtat."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Det betyder vanligtvis att du använt en jokertecken-refspec som inte\n"
+"motsvarade något i fjärränden."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Du bad om att hämta från fjärren \"%s\", men angav inte någon\n"
+"gren. Eftersom det inte är den fjärr som är konfigurerad som\n"
+"standard för aktuell gren måste du ange en gren på kommandoraden."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Du är inte på någon gren för närvarande."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Ange vilken gren du vill ombasera mot."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Ange vilken gren du vill slå samman med."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Se git-pull(1) för detaljer."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<fjärr>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<gren>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Det finns ingen spårningsinformation för aktuell gren."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr "Om du vill ange spårningsinformation för grenen kan du göra det med:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Dina inställningar anger sammanslagning med referensen \"%s\"\n"
+"från fjärren, men någon sådan referens togs inte emot."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "kunde inte komma åt incheckningen %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "ignorera --verify-signatures för ombasering"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18365,105 +19158,19 @@
 "eller --ff-only på kommandoraden för att överstyra det konfigurerade\n"
 "förvalet vid körning.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Det finns ingen kandidat för ombasering bland referenserna du precis har "
-"hämtat."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Det finns ingen kandidat för sammanslagning bland referenserna du precis har "
-"hämtat."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Det betyder vanligtvis att du använt en jokertecken-refspec som inte\n"
-"motsvarade något i fjärränden."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Du bad om att hämta från fjärren \"%s\", men angav inte någon\n"
-"gren. Eftersom det inte är den fjärr som är konfigurerad som\n"
-"standard för aktuell gren måste du ange en gren på kommandoraden."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Du är inte på någon gren för närvarande."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "Ange vilken gren du vill ombasera mot."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Ange vilken gren du vill slå samman med."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Se git-pull(1) för detaljer."
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<fjärr>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<gren>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Det finns ingen spårningsinformation för aktuell gren."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr "Om du vill ange spårningsinformation för grenen kan du göra det med:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Dina inställningar anger sammanslagning med referensen \"%s\"\n"
-"från fjärren, men någon sådan referens togs inte emot."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "kunde inte komma åt incheckningen %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "ignorera --verify-signatures för ombasering"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Uppdaterar en ofödd gren med ändringar som lagts till i indexet."
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "pull med ombasering"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "checka in eller använd \"stash\" på dem."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18474,7 +19181,7 @@
 "snabbspolar din arbetskatalog från\n"
 "incheckningen %s."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18491,15 +19198,15 @@
 "$ git reset --hard\n"
 "för att återgå."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Kan inte slå ihop flera grenar i ett tomt huvud."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Kan inte ombasera ovanpå flera grenar."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "kan inte ombasera med lokalt lagrade ändringar i undermoful"
 
@@ -18806,45 +19513,49 @@
 msgid "push options must not have new line characters"
 msgstr "push-flaggor kan inte innehålla radbrytning"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 "git range-diff [<flaggor>] <gammal-bas>..<gammal-ända> <ny-bas>..<ny-ända>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<flaggor>] <gammal-bas>..<ny-ända>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<flaggor>] <bas> <gammal-ända> <ny-ända>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "Procent som skapelse vägs med"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "använd enkla diff-färger"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "anteckningar"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "sänds till \"git log\""
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr ".. saknas i intervall: \"%s\""
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "visa endast utdata för det första intervallet"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "visa endast utdata för det andra intervallet"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "inte ett incheckningsintervall: \"%s\""
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "ensamt argument måste vara symmetriskt intervall"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "behöver två incheckningsintervall"
 
@@ -18948,193 +19659,193 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "oanvändbar todo-lista: %s"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "kunde inte skapa temporär %s"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "kunde inte markera som interaktiv"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "Kunde inte skapa attgöra-lista"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "en basincheckning måste anges med --upstream eller --onto"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<flaggor>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "behåller incheckningar som är tomma från början"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "tillåt incheckningar med tomt meddelande"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "ombasera sammanslagningar"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "behåll ursprungliga förgreningspunkter för kusiner"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "flytta incheckningar som inleds med squash!/fixup!"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "signera incheckningar"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "vis diffstat för vad som ändrats uppströms"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "fortsätt ombasering"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "hoppa över incheckning"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "redigera attgöra-listan"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "visa nuvarande patch"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "förkorta inchecknings-id i todo-listan"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "utöka inchecknings-id i todo-listan"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "kontrollera todo-listan"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "ordna om fixup-/squash-rader"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "lägg in exec-kommandon i todo-listan"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "ovanpå"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "begränsa revision"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "tryck ihop ovanpå"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "uppströmsincheckningen"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "namn på huvud"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "sammanslagningsstrategi"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "strategiflaggor"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "switch-to"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "gren eller inchecking att checka ut"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "på-namn"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "kmd"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "kommando att köra"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "kör automatiskt alla \"exec\" som misslyckas på nytt"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins har ingen effekt utan --rebase-merges"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s kräver \"merge\"-bakändan"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "kunde inte hämta \"onto\": \"%s\""
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "ogiltigt orig-head: \"%s\""
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "ignorera ogiltigt allow_rerere_autoupdate: \"%s\""
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19148,7 +19859,7 @@
 "För att avbryta och återgå till där du var före ombaseringen, kör \"git "
 "rebase --abort\"."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19167,7 +19878,7 @@
 "\n"
 "Därför kan inte git ombasera dessa."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19175,7 +19886,7 @@
 msgstr ""
 "okänd tom-typ \"%s\"; giltiga värden är \"drop\", \"keep\" och \"ask\"."
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19192,7 +19903,7 @@
 "    git rebase '<gren>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19205,190 +19916,182 @@
 "    git branch --set-upstream-to=%s/<gren> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "exec-kommandon kan inte innehålla nyradstecken"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "tomt exec-kommando"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "ombasera mot given grenen istället för uppström"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "använd sammanslagningsbasen mellan uppströms och gren som aktuell bas"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "tillåt pre-rebase-krok att köra"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "var tyst. implicerar --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "visa inte en diffstat för vad som ändrats uppströms"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "lägg \"Signed-off-by:\"-släprad till varje incheckning"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "sätt incheckningsdatum till författardatum"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "ignorera författardatum och använd nuvarande"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "synonym för --reset-author-date"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "sänds till \"git apply\""
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "ignorera ändringar i blanksteg"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "utför cherry-pick på alla incheckningar, även om oändrad"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "fortsätt"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "hoppa över nuvarande patch och fortsätt"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "avbryt och checka ut ursprungsgrenen"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "avbryt men behåll HEAD där det är"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "redigera attgöra-listan under interaktiv ombasering."
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "visa patchen som tillämpas eller slås samman"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "använd appliceringstrategier för ombasering"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "använd sammanslagningsstrategier för ombasering"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "låt användaren redigera listan över incheckningar att ombasera"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 "(AVRÅDS) försök återskapa sammanslagningar istället för att ignorera dem"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "hur incheckningar som blir tomma ska hanteras"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "flytta incheckningar som börjar med squash!/fixup! under -i"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "lägg till exec-rader efter varje incheckning i den redigerbara listan"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "tillåt ombasering av incheckningar med tomt meddelande"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "försök ombasera sammanslagningar istället för att ignorera dem"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "använd \"merge-base --fork-point\" för att förfina uppström"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "använd angiven sammanslagningsstrategi"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "alternativ"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "sänd flaggan till sammanslagningsstrategin"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "ombasera alla nåbara incheckningar upp till roten/rötterna"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr "applicera alla ändringar, även de som redan finns uppströms"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"stödet för rebase.useBuiltin har tagits bort!\n"
-"Se posten för det i \"git help config\" för detaljer."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Det verkar som en \"git am\" körs. Kan inte ombasera."
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges avråds från. Använd --rebase-merges istället."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "kan inte kombinera \"--keep-base\" med \"--onto\""
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "kan inte kombinera \"--keep-base\" med \"--root\""
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "kan inte kombinera \"--root\" med \"--fork-point\""
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "Ingen ombasering pågår?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "Åtgärden --edit-todo kan endast användas under interaktiv ombasering."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Kan inte läsa HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19396,16 +20099,16 @@
 "Du måste redigera alla sammanslagningskonflikter och\n"
 "därefter markera dem som lösta med git add"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "kunde inte kasta ändringar i arbetskatalogen"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "kunde inte flytta tillbaka till %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19426,134 +20129,134 @@
 "och kör programmet igen. Jag avslutar ifall du fortfarande har\n"
 "något av värde där.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "flaggan \"C\" förväntar ett numeriskt värde"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Okänt läge: %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy kräver --merge eller --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "kan inte kombinera apply-flaggor med merge-flaggor"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Okänd rebase-bakända: %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec kräver --exec eller --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "kan inte kombinera \"--preserve-merges\" med \"--rebase-merges\""
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "fel: kan inte kombinera \"--preserve-merges\" med \"--reschedule-failed-exec"
 "\""
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "felaktig uppström \"%s\""
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "kunde inte skapa ny rotincheckning"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "\"%s\": behöver precis en sammanslagningsbas med gren"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "\"%s\": behöver precis en sammanslagningsbas"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Pekar inte på en giltig incheckning: \"%s\""
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "ödesdigert: ingen sådan gren/incheckning: \"%s\""
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "Ingen sådan referens: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "Kunde inte bestämma HEAD:s incheckning"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Checka in eller använd \"stash\" på dem."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "kunde inte växla till %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD är à jour."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Aktuell gren %s är à jour.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD är à jour, ombasering framtvingad."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Aktuell gren %s är à jour, ombasering framtvingad.\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Kroken pre-rebase vägrade ombaseringen."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Ändringar till %s:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Ändringar från %s till %s:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpå det...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "Kunde inte koppla från HEAD"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Snabbspolade %s till %s.\n"
@@ -19613,11 +20316,11 @@
 "\n"
 "För att undvika detta meddelande kan du sätta det till \"refuse\"."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "tyst"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Du måste ange en katalog."
 
@@ -19648,36 +20351,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "\"%s\" är inte en giltig tidsstämpel"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Markerar nåbara objekt..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s pekar ingenstans!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "ingen referenslogg att ta bort angavs"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "inte en referenslogg: %s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "ingen referenslogg för \"%s\""
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "felaktigt referensformat: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -19852,7 +20555,7 @@
 "\t%s:%d\n"
 "anger nu den icke-existerande fjärren \"%s\""
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Ingen sådan fjärr: \"%s\""
@@ -20189,11 +20892,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "Kommer inte ta bort alla icke-sänd-URL:er"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<flaggor>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20202,117 +20905,140 @@
 "Använd --no-write-bitmap-index eller inaktivera inställningen\n"
 "pack.writebitmaps"
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "kunde inte starta pack-objects för att packa om kontraktsobjekt"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Förväntar kompletta hex-objekt-id-rader endast från pack-objects."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "kunde inte avsluta pack-objects för att packa om kontraktsobjekt"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "kunde inte öppna indexet för %s"
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr "paketet %s för stort för att tas med i geometriskt förlopp"
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "paketet %s för stort att rulla upp"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "packa allt i ett enda paket"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "samma som -a, och gör onåbara objekt lösa"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "ta bort överflödiga paket, och kör git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "sänd --no-reuse-delta till git-pack-objects"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "sänd --no-reuse-object till git-pack-objects"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "kör inte git-update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "sänd --local till git-pack-objects"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "skriv bitkartindex"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "sänd --delta-islands till git-pack-objects"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "cirkadatum"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "med -A, lös inte upp objekt äldre än detta"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "med -a, packa om onåbara objekt"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "storlek på fönster använt för deltakomprimering"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "samma som ovan, men begränsa minnesstorleken istället för postantal"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "begränsa maximalt deltadjup"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "begränsar maximalt antal trådar"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "maximal storlek på varje paketfil"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "packa om objekt i paket märkta med .keep"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "packa inte om detta paket"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "hitta ett geometrisk förlopp med faktor <N>"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "kan inte ta bort paket i ett \"precious-objects\"-arkiv"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable och -A kan inte användas samtidigt"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric är inkompatibel med -A, -a"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Inget nytt att packa."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "nödvändig fil saknas: %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "kunde inte ta bort: \"%s\""
@@ -20645,8 +21371,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Kan inte utföra en %s återställning mitt i en sammanslagning."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "var tyst, rapportera endast fel"
 
@@ -20730,19 +21456,19 @@
 msgid "Could not write new index file."
 msgstr "Kunde inte skriva ny indexfil."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "kan inte kombinera --exclude-promisor-objects och --missing"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "objektfiltrering kräver --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list stöder inte visning av anteckningar"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "markerad räkning är inkompatibelt med --objects"
 
@@ -20855,19 +21581,19 @@
 msgid "keep redundant, empty commits"
 msgstr "behåll redundanta, tomma incheckningar"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "\"revert\" misslyckades"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "\"cherry-pick\" misslyckades"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<flaggor>] [--] <fil>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -20879,7 +21605,7 @@
 msgstr[1] ""
 "följande filer har köat innehåll som skiljer sig både från filen och HEAD:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -20887,13 +21613,13 @@
 "\n"
 "(använd -f för att tvinga borttagning)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "följande fil har ändringar köade i indexet:"
 msgstr[1] "följande filer har ändringar köade i indexet:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -20901,47 +21627,47 @@
 "\n"
 "(använd --cached för att behålla filen eller -f för att tvinga borttagning)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "följande fil har lokala ändringar:"
 msgstr[1] "följande filer har lokala ändringar:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "lista inte borttagna filer"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "ta bara bort från indexet"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "överstyr àjour-testet"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "tillåt rekursiv borttagning"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "avsluta med nollstatus även om inget träffades"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "Ingen sökvägsangivelse gavs. Vilka filer ska jag ta bort?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "löa dina ändringar i .gitmodules eller använd \"stash\" för att fortsätta"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "tar inte bort \"%s\" rekursivt utan -r"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: kan inte ta bort %s"
@@ -20982,52 +21708,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<flaggor>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "mer än en --group-flagga stöds inte med standard in"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "att använda --group=trailer stöds inte med standard in"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "okänd grupptyp: %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Gruppera efter incheckare istället för författare"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "gruppera efter incheckare istället för författare"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "sortera utdata enligt antal incheckningar per författare"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Undertryck beskrivningar, visa bara antal incheckningar"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "undertryck beskrivningar, visa bara antal incheckningar"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Visa e-postadress för varje författare"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "visa e-postadress för varje författare"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr "Radbryt utdata"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "radbryt utdata"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "föt"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Gruppera efter fält"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "gruppera efter fält"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "för många flaggor givna utanför arkivet"
 
@@ -21219,103 +21945,111 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "visa referenser från standard in som inte finns i lokalt arkiv"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <flaggor>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "arbetskatalogen är inte glest (sparse-checkout-filen kanske inte finns)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "misslyckades skapa katalog för \"sparse-checkout\"-filen"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr "kunde inte uppgradera arkivformat för att aktivera worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "misslyckades ändra inställningen extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "initiera sparse-checkout i konläge"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "slå på/av använding av glest index"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "misslyckades ändra inställning för sparse-index"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "misslyckades öppna \"%s\""
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "kunde inte normalisera sökvägen \"%s\""
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <mönster>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "kan inte ta bort citering av C-sträng \"%s\""
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "kunde inte läsa in existerande mönster för gles utcheckning"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "läs mönster från standard in"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "fel vid uppdatering av arbetskatalog"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<flaggor>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<flaggor>] [<stash>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <grennamn> [<stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21327,7 +22061,7 @@
 "          [--pathspec-from-file=<fil> [--pathspec-file-nul]]\n"
 "          [--] [<sökväg>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21335,19 +22069,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<meddelande>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <meddelande>] [-q|--quiet] <incheckning>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21357,173 +22091,200 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <meddelande>]\n"
 "          [--] [<sökväg>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "\"%s\" är inte en \"stash\"-liknande incheckning"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "För många revisioner angivna:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "Inga \"stash\"-poster hittades."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s är inte en giltigt referens"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr "\"git stash clear\" med parametrar har inte implementerats"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
+msgstr "\"git stash clear\" med argument har inte implementerats"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"VARNING: En ospårad fil är i vägen för en spårad fil! Byter namn\n"
+"            %s -> %s\n"
+"         för att lämna plats.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "kan inte tillämpa en \"stash\" mitt i en sammanslagning"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "kunde inte skapa diff %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "konflikter i indexet. Testa utan --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "kunde inte spara indexträd"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "kunde inte återställa ospårade filer från stash-post"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Slår ihop %s med %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "Indexet har inte tagits upp ur \"stash\":en"
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "försök återskapa indexet"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Kastade %s (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Kunde inte kasta \"stash\"-post"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "\"%s\" är inte en \"stash\"-referens"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "Stash-posten behålls ifall du behöver den igen."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Inget grennamn angavs"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "misslyckades tolka träd"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "misslyckades packa upp träd"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "ta med ospårade filer i \"stash\""
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "visa bara ospårade filer i \"stash\""
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Kan inte uppdatera %s med %s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "\"stash\"-meddelande"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" kräver ett <incheckning>-argument"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Inga ändringar valda"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Du har inte den första incheckningen ännu"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "Kan inte spara aktuellt tillstånd för indexet"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "Kan inte spara ospårade filer"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "Kan inte spara aktuellt tillstånd för arbetskatalogen"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "Kan inte registrera tillstånd för arbetskatalog"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Kan inte använda --patch och --include-untracked eller --all samtidigt"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "Glömde du använda \"git add\"?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "Inga lokala ändringar att spara"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "Kan inte initiera \"stash\""
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "Kan inte spara aktuell status"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Sparade arbetskatalogen och indexstatus %s"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "Kan inte ta bort ändringar i arbetskatalogen"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "behåll indexet"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "\"stash\" i \"patch\"-läge"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "tyst läge"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "ta med ospårade filer i \"stash\""
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "ta med ignorerade filer"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21547,7 +22308,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "lägg in kommentarstecken och blanksteg först på varje rad"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Förväntade fullt referensnamn, fick %s"
@@ -21561,7 +22322,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "kan inte ta bort en komponent från url:en \"%s\""
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "alternativa ankare för relativa sökvägar"
 
@@ -21569,18 +22330,18 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<sökväg>] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Hittade ingen url för undermodulsökvägen \"%s\" i .gitmodules"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Går in i \"%s\"\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -21589,7 +22350,7 @@
 "run_command returnerade icke-nollstatus för %s\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21600,19 +22361,20 @@
 "undermoduler för %s\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Dölj utdata från för varje undermodulskommando som startas"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "dölj utdata från för varje undermodulskommando som startas"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Rekursera in i nästlade undermoduler"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "rekursera in i nästlade undermoduler"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [--] [<kommando>]"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -21621,159 +22383,155 @@
 "kunde inte slå upp konfigurationen \"%s\". Antar att arkivet är sin eget "
 "officiella uppström."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Misslyckades registrera url för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Undermodulen \"%s\" (%s) registrerad för sökvägen \"%s\"\n"
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "varning: kommandouppdateringsläge föreslogs för undermodulen \"%s\"\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "Misslyckades registrera uppdateringsläge för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Dölj utdata från initiering av undermodul"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "dölj utdata från initiering av undermodul"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<flaggor>] [<sökväg>]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "hittade ingen undermodulmappning i .gitmodules för sökvägen \"%s\""
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "kunde inte bestämma HEAD:s incheckning i undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "misslyckades rekursera in i undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Hindra statusutskrift för undermodul"
-
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
-msgstr ""
-"Visa incheckning från indexet istället för den som lagrats i undermodulens "
-"HEAD"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "hindra statusutskrift för undermodul"
 
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "rekursera in i nästlade undermoduler"
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
+msgstr ""
+"visa incheckning från indexet istället för den som lagrats i undermodulens "
+"HEAD"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quitet] [--cached] [--recursive] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <sökväg>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "kunde inte hasha objekt från \"%s\""
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "okänt läge %o\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "använd incechkning lagrad i indexet istället för undermodulens HEAD"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 "för att jämföra incheckningen i indexet med den som lagrats i undermodulens "
 "HEAD"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 "hoppa över undermoduler där värdet för \"ignore_config\" är satt till \"all\""
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "begränsa översiktsstorleken"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 "git submodule--helper summary [<flaggor>] [<incheckning>] [--] [<sökväg>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "kunde inte hämta en version för HEAD"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "--cached och --files är ömsesidigt uteslutande"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Synkroniserar undermodul-url för \"%s\"\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "misslyckades registrera url för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "misslyckades hämta standardfjärr för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "misslyckades uppdatera fjärr för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Dölj utdata från synkroniering av undermodul-url"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "dölj utdata från synkronisering av undermodul-url"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<sökväg>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21782,7 +22540,7 @@
 "Undermodulsarbetskatalogen \"%s\" innehåller en .git-katalog (använd \"rm -rf"
 "\" om du verkligen vill ta bort den och all dess historik)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -21791,46 +22549,46 @@
 "Undermodulens arbetskatalog \"%s\" har lokala ändringar; \"-f\" kastar bort "
 "dem"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Rensade katalogen \"%s\"\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Kunde inte ta bort undermodulens arbetskatalog \"%s\"\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "kunde inte skapa tom undermodulskatalog %s"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Undermodulen \"%s\" (%s) registrerad för sökvägen \"%s\"\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr ""
-"Ta bort undermodulers arbetskataloger även om de innehåller lokala ändringar"
-
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Avregistrera alla undermoduler"
+msgid "remove submodule working trees even if they contain local changes"
+msgstr ""
+"ta bort undermodulers arbetskataloger även om de innehåller lokala ändringar"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "avregistrera alla undermoduler"
+
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<sökväg>...]]"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Använd \"--all\" om du verkligen vill avinitiera alla undermoduler"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -21842,46 +22600,46 @@
 "submodule.alternateErrorStrategy till \"info\" eller, likvärdigt, klona\n"
 "med \"--reference-if-able\" istället för \"--reference\"."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "undermodulen \"%s\" kan inte lägga till suppleant: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Värdet \"%s\" i submodule.alternateErrorStrategy förstås inte"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Värdet \"%s\" i submodule.alternateLocation förstås inte"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "var den nya undermodulen ska klonas till"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "namn på den nya undermodulen"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "URL att klona undermodulen från"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "djup för grunda kloner"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "tvinga kloningsförlopp"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "förhindra kloning till icke-tom katalog"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -21891,103 +22649,103 @@
 "<arkiv>] [--name <namn>] [--depth <djup>] [--single-branch] --url <url> --"
 "path <sökväg>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "vägrar skapa/använda \"%s\" i en annan undermoduls gitkatalog"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "misslyckades klona \"%s\" till undermodulsökvägen \"%s\""
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "katalogen inte tom: \"%s\""
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "kunde inte få tag i undermodulkatalog för \"%s\""
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Ogiltigt uppdateringsläge \"%s\" för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Ogiltigt uppdateringsläge \"%s\" konfigurerat för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Undermodulsökvägen \"%s\" har inte initierats"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Kanske menade du att använda \"update --init\"?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Hoppar över ej sammanslagen undermodul %s"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Hoppar över undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Misslyckades klona \"%s\". Nytt försök planlagt"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Misslyckades klona \"%s\" för andra gången, avbryter"
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "sökväg inuti arbetskatalogen"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "sökväg inuti arbetskatalogen, genom nästlade undermodulgränser"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout eller none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Skapa en grund klon trunkerad till angivet antal revisioner"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "skapa en grund klon trunkerad till angivet antal revisioner"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "parallella jobb"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "om den första klonen ska följa rekommendation för grund kloning"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "skriv inte klonförlopp"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<sökväg>] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "felaktigt värde för parametern update"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -21996,84 +22754,84 @@
 "Undermodulens (%s) gren inställd på att ärva gren från huvudprojektet, men "
 "huvudprojektet är inte på någon gren"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "kunde inte få tag i arkivhandtag för undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "rekursera ner i undermoduler"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dir [<flaggor>] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "se om det är säkert att skriva till .gitmodules-filen"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "ta bort konfigurationen från .gitmodules-filen"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <namn> [<värde>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <namn>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "se till att .gitmodules finns i arbetskatalogen"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Dölj utdata från inställning av url för undermodul"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "dölj utdata från inställning av url för undermodul"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <sökväg> <nyurl>"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "välj master som förvald spårad gren"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "välj förvald spårad gren"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <sökväg>"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--brand) <gren> <sökväg>"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "--branch eller --default krävs"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch och --default är ömsesidigt uteslutande"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s stöder inte --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "\"%s\" är inte ett giltigt underkommando till submodule--helper"
@@ -22086,24 +22844,24 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <namn>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr ""
 "undertryck felmeddelanden för icke-symboliska (frånkopplade) referenser"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "ta bort symbolisk referens"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "förkorta ref-utdata"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "skäl"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "skäl till uppdateringen"
 
@@ -22135,17 +22893,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<format>] <taggnamn>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "taggen \"%s\" hittades inte."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Tog bort tagg \"%s\" (var %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22158,7 +22916,7 @@
 "  %s\n"
 "Rader som inleds med \"%c\" ignoreras.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -22173,15 +22931,11 @@
 "Rader som inleds med \"%c\" kommer behållas; du kan själv ta bort dem om\n"
 "du vill.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "kunde inte signera taggen"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "kunde inte skriva tagg-filen"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22194,143 +22948,139 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "felaktig objekttyp."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "inget taggmeddelande?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Taggmeddelandet har lämnats i %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "lista taggnamn"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "visa <n> rader från varje taggmeddelande"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "ta bort taggar"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "verifiera taggar"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Alternativ för att skapa taggar"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "annoterad tagg, behöver meddelande"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "taggmeddelande"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "tvinga redigering av incheckningsmeddelande"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "annoterad och GPG-signerad tagg"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "använd annan nyckel för att signera taggen"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "ersätt taggen om den finns"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "skapa en reflog"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Alternativ för listning av taggar"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "lista taggar i spalter"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "visa endast taggar som innehåller incheckningen"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "visa endast taggar som inte innehåller incheckningen"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "visa endast taggar som slagits samman"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "visa endast taggar som ej slagits samman"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "visa endast taggar för objektet"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column och -n är inkompatibla"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "Flaggan -n är endast tillåten i listläge"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "Flaggan --contains är endast tillåten i listläge"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "Flaggan --no-contains är endast tillåten i listläge"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "Flaggan --points-at är endast tillåten i listläge"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "Flaggorna --merged och --no-merged är endast tillåtna i listläge"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "endast en av flaggorna -F eller -m tillåts."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "för många parametrar"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "\"%s\" är inte ett giltigt taggnamn."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "taggen \"%s\" finns redan"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Uppdaterad tagg \"%s\" (var %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Packar upp objekt"
 
@@ -22394,143 +23144,143 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<flaggor>] [--] [<fil>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr "fortsätt uppdatera även när index inte är àjour"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "refresh: ignorera undermoduler"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "ignorera inte nya filer"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "låt filer ersätta kataloger och omvänt"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "lägg märke till filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "uppdatera även om indexet innehåller ej sammanslagna poster"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "uppdatera statusinformation"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "som --refresh, men ignorera assume-unchanged-inställning"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<läge>,<objekt>,<sökväg>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "lägg till angiven post i indexet"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "markera filer som \"ändras inte\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "rensa \"assume-unchanged\"-biten"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "markera filer som \"endast index\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "töm \"skip-worktree\"-biten"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "rör inte \"endast index\"-poster"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr "lägg endast till indexet; lägg inte till innehållet i objektdatabasen"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr "ta bort namngivna sökvägar även om de finns i arbetskatalogen"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "med --stdin: indatarader termineras med null-byte"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "läs lista över sökvägar att uppdatera från standard in"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "lägg poster från standard in till indexet"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "återfyll etapp 2 och 3 från angivna sökvägar"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "uppdatera endast poster som skiljer sig från HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "ignorera filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "rapportera åtgärder på standard ut"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(för porslin) glöm sparade olösta konflikter"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "skriv index i detta format"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "aktivera eller inaktivera delat index"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "aktivera/inaktivera ospårad cache"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "testa om filsystemet stöder ospårad cache"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "aktivera ospårad cache utan att testa filsystemet"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "skriv ut indexet även om det inte angivits som ändrat"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "aktivera eller inaktivera filsystemsövervakning"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "markera filer som \"fsmonitor valid\""
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "töm \"fsmonitor valid\"-bit"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -22538,7 +23288,7 @@
 "core.splitIndex är satt till false; ta bort eller ändra det om du verkligen "
 "vill aktivera delat index"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -22546,7 +23296,7 @@
 "core.splitIndex är satt till true; ta bort eller ändra det om du verkligen "
 "vill inaktivera delat index"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -22554,11 +23304,11 @@
 "core.untrackedCache är satt till true; ta bort eller ändra det om du "
 "verkligen vill inaktivera den ospårade cachen"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "Ospårad cache är inaktiverad"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -22566,26 +23316,26 @@
 "core.untrackedCache är satt till false; ta bort eller ändra det om du "
 "verkligen vill aktivera den ospårade cachen"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Ospårad cache är aktiverad för \"%s\""
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor inte satt; sätt om du verkligen vill aktivera fsmonitor"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor aktiverat"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor är satt; ta bort om du verkligen vill inaktivera fsmonitor"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor inaktiverat"
 
@@ -22677,89 +23427,63 @@
 msgid "print tag contents"
 msgstr "visa innehåll för tag"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<flaggor>] <sökväg> [<incheckning-igt>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<flaggor>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<flaggor>] <sökväg>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <arbetskatalog> <ny-sökväg>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<flaggor>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<flaggor>] <arbetskatalog>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <sökväg>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "misslyckades ta bort \"%s\""
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "inte i en giltig katalog"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "gitdir-filen existerar inte"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "kunde inte läsa gitdir-filen (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "kort läsning (förväntade %<PRIuMAX> byte, läste %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "ogiltig gitdir-fil"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "gitdir-filen pekar på en ickeexisterande plats"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Tar bort %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "rapportera borttagna arbetskataloger"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "låt tid gå ut för arbetskataloger äldre än <tid>"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "\"%s\" finns redan"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "oanvändbar mål för arbetskatalog \"%s\""
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22769,7 +23493,7 @@
 "använd \"%s -f -f\" för att överstyra, eller \"unlock\" och \"prune\" eller "
 "\"remove\" för att rensa"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22779,116 +23503,129 @@
 "använd \"%s -f\" för att överstyra, eller \"prune\" eller \"remove\" för att "
 "rensa"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "kunde inte skapa katalogen \"%s\""
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Förbereder arbetskatalog (ny gren \"%s\")"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Förbereder arbetskatalog (återställer gren \"%s\"; var på %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Förbereder arbetskatalog (checkar ut \"%s\")"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Förbereder arbetskatalog (frånkopplat HEAD %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "checka ut <gren> även om den redan är utcheckad i en annan arbetskatalog"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "skapa en ny gren"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "skapa eller återställ en gren"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "befolka den nya arbetskatalogen"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "låt arbetskatalogen förbli låst"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "ställ in spårningsläge (se git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "försök träffa namn på ny gren mot en fjärrspårande gren"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B och --detach är ömsesidigt uteslutande"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track kan endast användas när ny gran skapas"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "visa utökade annoteringar och grunder, om tillgängliga"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"lägg till \"prunable\"-annoteringar till arbetskataloger äldre än <tid>"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose och --porcelain är ömsesidigt uteslutande"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "orsak till lås"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "\"%s\" är inte en arbetskatalog"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Huvudarbetskatalogen kan inte låsas eller låsas upp"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "\"%s\" är redan låst, orsak: %s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "\"%s\" är redan låst"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "\"%s\" är inte låst"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "arbetskataloger med undermoduler kan inte flyttas eller tas bort"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr "tvinga flyttning även om arbetskatalogen är smutsig eller låst"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "\"%s\" är inte en huvudarbetskatalog"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "kunde inte lista ut målnamn från \"%s\""
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -22897,7 +23634,7 @@
 "kan inte flytta en låst arbetskatalog, orsak till lås: %s\n"
 "använd \"move -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -22905,38 +23642,38 @@
 "kan inte flytta en låst arbetskatalog;\n"
 "använd \"move -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "kontroll misslyckades, kan inte flytta arbetskatalog: %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "misslyckades flytta \"%s\" till \"%s\""
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "misslyckades köra \"git status\" på \"%s\""
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "\"%s\" innehåller ändrade eller ospårade filer, använd --force för att ta "
 "bort det"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "misslyckades köra \"git status\" på \"%s\", kod %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr "tvinga ta bort även om arbetskatalogen är smutsig eller låst"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -22945,7 +23682,7 @@
 "kan inte ta bort en låst arbetskatalog, orsak till låset: %s\n"
 "använd \"remove -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -22953,17 +23690,17 @@
 "kan inte ta bort en låst arbetskatalog;\n"
 "använd \"remove -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "kontroll misslyckades, kan inte ta bort arbetskatalog: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "reparera: %s: %s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "fel: %s: %s"
@@ -22984,16 +23721,161 @@
 msgid "only useful for debugging"
 msgstr "endast användbart vid felsökning"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <sökväg>] [-c <namn>=<värde>]\n"
+"           [--exec-path[=<sökväg>]] [--html-path] [--man-path] [--info-"
+"path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=<sökväg>] [--work-tree=<sökväg>] [--namespace=<namn>]\n"
+"           [--super-prefix=<sökväg>] [--config-env=<namn>=<miljövar>]\n"
+"           <kommando> [<flaggor>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"\"git help -a\" och \"git help -g\" visar tillgängliga underkommandon och\n"
+"några konceptvägledningar. Se \"git help <kommando>\" eller \"git help\n"
+"<koncept>\" för att läsa mer om specifika underkommandon och koncept.\n"
+"See \"git help git\" för en översikt över systemet."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "ingen katalog angavs för --git-dir\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "ingen namnrymd angavs för --namespace\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "ingen katalog angavs för --work-tree\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "inget prefix angavs för --super-prefix\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "-c förväntar en konfigurationssträng\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "ingen konfigurationsnyckel angavs för --config-env\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "ingen katalog angavs för -C\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "okänd flagga: %s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "vid expandering av aliaset \"%s\": \"%s\""
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"aliaset \"%s\" ändrar miljövariabler.\n"
+"Du kan använda \"!git\" i aliaset för att göra det"
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "tomt alias för %s"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "rekursivt alias: %s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "skrivfel på standard ut"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "okänt skrivfel på standard ut"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "stäng misslyckades på standard ut"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "alias-slinga detekterades: expansionen av \"%s\" avslutas aldrig:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "kan inte hantera %s som inbyggd"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"användning: %s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr ""
+"expandering av alias \"%s\" misslyckades; \"%s\" är inte ett git-kommando\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "misslyckades köra kommandot \"%s\": %s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr ""
 "argumentet till --packfile måste vara ett giltigt hashvärde (fick '%s')"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "inte ett git-arkiv"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile kräver --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args kan endast användas med --packfile"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "flaggor som inte hanterats"
@@ -23019,135 +23901,112 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "avsluta omedelbart efter kungörelse av kapabiliteter"
 
-#: git.c:28
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr "uttag/rör används redan: \"%s\""
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr "kunde inte starta server på: \"%s\""
+
+#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
+msgid "could not spawn daemon in the background"
+msgstr "kunde inte starta serverprocess i bakgrunden"
+
+#: t/helper/test-simple-ipc.c:356
+msgid "waitpid failed"
+msgstr "\"waitpid\" misslyckades"
+
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
+msgstr "serverprocessen ännu inte operativ"
+
+#: t/helper/test-simple-ipc.c:406
+msgid "daemon failed to start"
+msgstr "serverprocessen kunde inte startas"
+
+#: t/helper/test-simple-ipc.c:410
+msgid "waitpid is confused"
+msgstr "waitpid är förvirrad"
+
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
+msgstr "serverprocessen har ännu inte avslutats"
+
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active    [<namn>] [<flaggor>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<namn>] [<trådar>]"
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+"test-helper simple-ipc start-daemon [<namn>] [<trådar>] [<max-väntetid>]"
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<namn>] [<max-väntetid>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<namn>] [<igenkänningstecken>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<namn>] [<antal-byte>] [<byte>]"
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
-"git [--version] [--help] [-C <sökväg>] [-c <namn>=<värde>]\n"
-"           [--exec-path[=<sökväg>]] [--html-path] [--man-path] [--info-"
-"path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=<sökväg>] [--work-tree=<sökväg>] [--namespace=<namn>]\n"
-"           <kommando> [<flaggor>]"
+"test-helper simple-ipc multiple     [<namn>] [<trådar>] [<antal-byte>] "
+"[<buntstorlek>]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"\"git help -a\" och \"git help -g\" visar tillgängliga underkommandon och\n"
-"några konceptvägledningar. Se \"git help <kommando>\" eller \"git help\n"
-"<koncept>\" för att läsa mer om specifika underkommandon och koncept.\n"
-"See \"git help git\" för en översikt över systemet."
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "namn eller sövkäg till unixdomän-uttag"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "ingen katalog angavs för --git-dir\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "namn på namngivet rör"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "ingen namnrymd angavs för --namespace\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "antal trådar i serverns trådpool"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "ingen katalog angavs för --work-tree\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "sekunder att vänta på att serverprocessen startar eller stoppar"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "inget prefix angavs för --super-prefix\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "antal byte"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "-c förväntar en konfigurationssträng\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "antal frågor per tråd"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "ingen katalog angavs för -C\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "byte"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "okänd flagga: %s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "ballasttecken"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "vid expandering av aliaset \"%s\": \"%s\""
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "igenkänningstecken"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"aliaset \"%s\" ändrar miljövariabler.\n"
-"Du kan använda \"!git\" i aliaset för att göra det"
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "tomt alias för %s"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "rekursivt alias: %s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "skrivfel på standard ut"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "okänt skrivfel på standard ut"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "stäng misslyckades på standard ut"
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "alias-slinga detekterades: expansionen av \"%s\" avslutas aldrig:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "kan inte hantera %s som inbyggd"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"användning: %s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr ""
-"expandering av alias \"%s\" misslyckades; \"%s\" är inte ett git-kommando\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "misslyckades köra kommandot \"%s\": %s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "igenkänningstecken för kommando att sända till servern"
 
 #: http.c:399
 #, c-format
@@ -23185,7 +24044,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Kunde inte sätta SSL-bakända till \"%s\": redan valt"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23336,52 +24195,52 @@
 msgid "no libc information available\n"
 msgstr "ingen libc-information tillgänglig\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "argument"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "objektfiltrering"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "giltig-till"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "ingen funktion (bakåtkompatibilitet)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "var mer pratsam"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "var mer tyst"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "använd <n> siffror för att visa objektnamn"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "hur blanksteg och #kommentarer ska tas bort från meddelande"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "läs sökvägsangivelse från fil"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "med --pathspec-from-file, sökvägsangivelser avdelas med NUL-tecken"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "nyckel"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "fältnamn att sortera på"
 
@@ -23389,14 +24248,6 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr "uppdatera indexet med återanvänd konfliktlösning om möjligt"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD frånkopplad vid "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD frånkopplad från "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Lägg filinnehåll till indexet"
@@ -23728,8 +24579,8 @@
 msgstr "Skriv och verifiera multi-pack-index"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Skapar ett taggobjekt"
+msgid "Creates a tag object with extra validation"
+msgstr "skapar ett taggobjekt med extra validering"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24036,69 +24887,55 @@
 msgstr "Ange avsiktligen ospårade filer att ignorera"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Mappa författar-/incheckarnamn och/eller -e-postadresser"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Ange egenskaper för undermoduler"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git-namnrymder"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Hjälpprogram för att interagera med fjärrarkiv"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Gits arkivlayout"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Ange versioner och intervall i Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Monterar ett arkiv inuti ett annat"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Introduktion till Git: del två"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Introduktion till Git"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Översikt över rekommenderade arbetsflöden med Git"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Felaktig rev-indata: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Ingen loggfil angiven"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "kan inte läsa $file för uppspelning"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? vad menar du?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "bisect-körning misslyckades: inget kommando gavs."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "kör $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24107,11 +24944,11 @@
 "\"bisect\"-körningen misslyckades:\n"
 "felkod $res från \"$command\" är < 0 eller >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "\"bisect\"-körningen kan inte fortsätta längre"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24120,14 +24957,10 @@
 "\"bisect\"-körningen misslyckades:\n"
 "\"bisect-state $state\" avslutades med felkoden $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "\"bisect\"-körningen lyckades"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "Vi utför ingen bisect för tillfället."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25051,27 +25884,32 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "lokal tidszonförskjutning större än eller lika med 24 timmar\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "ödesdigert: kommandot \"%s\" dog med slutkoden %d"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "textredigeringsprogrammet avslutades med fel, avbryter allting"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr ""
 "\"%s\" innehåller en mellanliggande version av e-postbrevet du skrev.\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "\"%s.final\" innehåller det skrivna brevet.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-alias är inkompatibelt med andra flaggor\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -25083,11 +25921,11 @@
 "Sätt sendemail.forbidSendmailVariables till false för att inaktivera denna "
 "kontroll.\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "Kan inte köra git format-patch från utanför arkivet\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
@@ -25095,37 +25933,37 @@
 "\"batch-size\" och \"relogin\" måste anges tillsammans (via kommandorad "
 "eller konfigurationsflagga)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Okänt fält i --suppress-cc: \"%s\"\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Okänd inställning i --confirm: \"%s\"\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "varning: sendmail-alias med citationstecken stöds inte. %s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "varning: \":include:\" stöds inte: %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "varning: omdirigering til \"/fil\" eller \"|rör\" stöds inte: %s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "varning: sendmail-raden känns inte igen: %s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25140,21 +25978,12 @@
 "    * Säga \"./%s\" om du menar en fil; eller\n"
 "    * Ange flaggan --format-patch om du menar ett intervall.\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Misslyckades utföra opendir %s: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"ödesdigert: %s: %s\n"
-"varning: inga patchar har sänts\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -25164,17 +25993,17 @@
 "Inga patchfiler angavs!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Ingen ärenderad i %s?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Kunde inte öppna för skrivning %s: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25188,38 +26017,38 @@
 "\n"
 "Rensa brevkroppen om du inte vill sända någon sammanfattning.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Misslyckades öppna %s: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Misslyckades öppna %s.final: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "Sammanfattande brev tomt, hoppar över\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Är du säker på att du vill använda <%s> [Y=ja, N=nej]? "
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
 msgstr ""
 "Följande filer är åttabitars, men anger inte en Content-Transfer-Encoding.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Vilken åttabitarsteckenkodning ska jag ange [UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -25232,21 +26061,21 @@
 "har mallärendet \"*** SUBJECT HERE ***\". Använd --force om du verkligen "
 "vill sända.\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "Till vem ska breven sändas (om någon)?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "ödesdigert: aliaset \"%s\" expanderar till sig själv\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 "Message-ID att använda som In-Reply-To för det första brevet (om något)? "
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "fel: kunde inte få fram en giltig adress från: %s\n"
@@ -25254,16 +26083,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "Vad vill du göra med adressen? (q=avsluta, d=kasta, e=redigera): "
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "CA-sökvägen \"%s\" finns inte"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25290,124 +26119,139 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "Sända brevet? (y=ja, n=nej, e=redigera, q=avsluta, a=alla): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Svar krävs på frågan \"Sända brevet?\""
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "Nödvändig SMTP-server har inte angivits korrekt."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Servern stöder inte SMARTTLS! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS misslyckades! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
 "Kan inte initiera SMTP korrekt. Kontrollera inställningarna och använd --"
 "smtp-debug."
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "Misslyckades sända %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Test-Sände %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Sände %s\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Test-OK. Loggen säger:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK. Loggen säger:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Resultat: "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Resultat: OK\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "kan inte öppna filen %s"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Lägger till cc: %s från raden \"%s\"\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Lägger till to: %s från raden \"%s\"\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(icke-mbox) Lägger till cc: %s från raden \"%s\"\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(kropp) Lägger till cc: %s från raden \"%s\"\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Kunde inte köra \"%s\""
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Lägger till %s: %s från: \"%s\"\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) misslyckades stänga röret till \"%s\""
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "kan inte sända brev som sjubitars"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "ogiltig överföringskondning"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"ödesdigert: %s: refuserad av sendemail-validate-kroken\n"
+"%s\n"
+"varning: inga patchar har sänts\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "kunde inte öppna %s: %s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s: patchen innehåller en rad längre än 998 tecken"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"ödesdigert: %s:%d är längre än 998 tecken\n"
+"varning: inga patchar har sänts\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr ""
@@ -25415,11 +26259,132 @@
 "säkerhetskopior.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 
+#~ msgid "--cached and --3way cannot be used together."
+#~ msgstr "--cached och --3way kan inte användas samtidigt."
+
+#~ msgid "both"
+#~ msgstr "båda"
+
+#~ msgid "one"
+#~ msgstr "en"
+
+#~ msgid "Already up to date!"
+#~ msgstr "Redan à jour!"
+
+#~ msgid "Already up to date. Yeeah!"
+#~ msgstr "Redan à jour. Toppen!"
+
+#~ msgid "--batch-size option is only for 'repack' subcommand"
+#~ msgstr "flaggan --batch-size används bara i underkommandot \"repack\""
+
+#~ msgid "Percentage by which creation is weighted"
+#~ msgstr "Procent som skapelse vägs med"
+
+#~ msgid ""
+#~ "the rebase.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "stödet för rebase.useBuiltin har tagits bort!\n"
+#~ "Se posten för det i \"git help config\" för detaljer."
+
+#~ msgid "%s: patch contains a line longer than 998 characters"
+#~ msgstr "%s: patchen innehåller en rad längre än 998 tecken"
+
+#~ msgid "repository contains replace objects; skipping commit-graph"
+#~ msgstr "arkivet innehåller replace-objekt; hoppar över incheckningsgraf"
+
+#~ msgid "repository contains (deprecated) grafts; skipping commit-graph"
+#~ msgstr ""
+#~ "arkivet innehåller ympningar (avråds från); hoppar över incheckningsgraf"
+
+#~ msgid "repository is shallow; skipping commit-graph"
+#~ msgstr "källarkivet är grunt; hoppar över incheckningsgraf"
+
+#~ msgid "commit-graph improper chunk offset %08x%08x"
+#~ msgstr "felaktigt offset för stycke %08x%08x i incheckningsgraffilen"
+
+#~ msgid "commit-graph chunk id %08x appears multiple times"
+#~ msgstr "incheckningsgrafens stycke-id %08x förekommer flera gånger"
+
+#~ msgid "invalid chunk offset (too large)"
+#~ msgstr "felaktigt offset för stycke (för stort)"
+
+#~ msgid "Writing chunks to multi-pack-index"
+#~ msgstr "Skriver stycken till multi-pack-index"
+
+#~ msgid "rev-list died"
+#~ msgstr "rev-list dog"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-write [--no-log] <state> <revision> "
+#~ "<good_term> <bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-write [--no-log] <tillstånd> <revision> <term-"
+#~ "för-rätt> <term-för-fel>"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
+#~ "<bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-check-and-set-terms <kommadno> <term-för-"
+#~ "rätt> <term-för-fel>"
+
+#~ msgid "git bisect--helper --bisect-auto-next"
+#~ msgstr "git bisect--helper --bisect-auto-next"
+
+#~ msgid "write out the bisection state in BISECT_LOG"
+#~ msgstr "skriver bisect-tillståndet i BISECT_LOG"
+
+#~ msgid "check and set terms in a bisection state"
+#~ msgstr "visa och ange termer för bisect-tillstånd"
+
+#~ msgid ""
+#~ "verify the next bisection state then checkout the next bisection commit"
+#~ msgstr ""
+#~ "kontrollera nästa bisect-tillstånd och checka så ut nästa bisect-"
+#~ "incheckning"
+
+#~ msgid "--bisect-write requires either 4 or 5 arguments"
+#~ msgstr "--bisect-write kräver antingen 4 eller 5 argument"
+
+#~ msgid "--check-and-set-terms requires 3 arguments"
+#~ msgstr "--check-and-set-terms kräver tre argument"
+
+#~ msgid "--bisect-auto-next requires 0 arguments"
+#~ msgstr "--bisect-auto-next kräver 0 argument"
+
+#~ msgid "Force progress reporting"
+#~ msgstr "Tvinga förloppsrapportering"
+
+#~ msgid "Error deleting remote-tracking branch '%s'"
+#~ msgstr "Fel vid borttagning av fjärrspårande grenen \"%s\""
+
+#~ msgid "Error deleting branch '%s'"
+#~ msgstr "Fel vid borttagning av grenen \"%s\""
+
+#~ msgid "show parse tree for grep expression"
+#~ msgstr "visa analysträd för grep-uttryck"
+
+#~ msgid "too many parameters"
+#~ msgstr "för många parametrar"
+
+#~ msgid "too few parameters"
+#~ msgstr "för få parametrar"
+
+#~ msgid "Recurse into nested submodules"
+#~ msgstr "Rekursera in i nästlade undermoduler"
+
+#~ msgid "too many params"
+#~ msgstr "för många parametrar"
+
+#~ msgid "Bad rev input: $arg"
+#~ msgstr "Felaktig rev-indata: $arg"
+
 #~ msgid "Counting distinct commits in commit graph"
 #~ msgstr "Räknar olika incheckningar i incheckningsgraf"
 
@@ -25456,9 +26421,6 @@
 #~ msgid "git bisect--helper --write-terms <bad_term> <good_term>"
 #~ msgstr "git bisect--helper --write-terms <term-för-fel> <term-för-rätt>"
 
-#~ msgid "git bisect--helper --bisect-clean-state"
-#~ msgstr "git bisect--helper --bisect-clean-state"
-
 #~ msgid "git bisect--helper --bisect-autostart"
 #~ msgstr "git bisect--helper --bisect-autostart"
 
@@ -25928,12 +26890,6 @@
 #~ msgid "Server supports ofs-delta"
 #~ msgstr "Servern stöder \"ofs-delta\""
 
-#~ msgid "(HEAD detached at %s)"
-#~ msgstr "(HEAD frånkopplat vid %s)"
-
-#~ msgid "(HEAD detached from %s)"
-#~ msgstr "(HEAD frånkopplat från %s)"
-
 #~ msgid "Checking out files"
 #~ msgstr "Checkar ut filer"
 
@@ -26346,9 +27302,6 @@
 #~ msgid "commit object"
 #~ msgstr "incheckningsobjekt"
 
-#~ msgid "tree object"
-#~ msgstr "trädobjekt"
-
 #~ msgid "blob object"
 #~ msgstr "blob-objekt"
 
@@ -26389,9 +27342,6 @@
 #~ msgid "insanely long object directory %.*s"
 #~ msgstr "tokigt lång objektkatalog %.*s"
 
-#~ msgid "git merge [<options>] <msg> HEAD <commit>"
-#~ msgstr "git merge [<flaggor>] <meddelande> HEAD <incheckning>"
-
 #~ msgid "tag name too long: %.*s..."
 #~ msgstr "taggnamnet för långt: %.*s..."
 
@@ -26492,9 +27442,6 @@
 #~ "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i %s: ogiltig "
 #~ "enhet"
 
-#~ msgid "This is the 2nd commit message:"
-#~ msgstr "Det här är 2:a incheckningsmeddelandet:"
-
 #~ msgid "This is the 3rd commit message:"
 #~ msgstr "Det här är 3:e incheckningsmeddelandet:"
 
@@ -26531,9 +27478,6 @@
 #~ msgid "This is the ${n}rd commit message:"
 #~ msgstr "Det här är ${n}:e incheckningsmeddelandet:"
 
-#~ msgid "The 1st commit message will be skipped:"
-#~ msgstr "1:a incheckningsmeddelandet kommer hoppas över:"
-
 #~ msgid "The 2nd commit message will be skipped:"
 #~ msgstr "2:a incheckningsmeddelandet kommer hoppas över:"
 
@@ -27138,9 +28082,6 @@
 #~ msgid "--detach cannot be used with -b/-B/--orphan"
 #~ msgstr "--detcah kan inte användas med -b/-B/--orphan"
 
-#~ msgid "--detach cannot be used with -t"
-#~ msgstr "--detach kan inte användas med -t"
-
 #~ msgid "--orphan and -b|-B are mutually exclusive"
 #~ msgstr "--orphan och -b|-B kan inte användas samtidigt"
 
diff --git a/po/tr.po b/po/tr.po
index 30f4c35..e26ca7d 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -1,8 +1,8 @@
 # Turkish translations for Git
 # Git Türkçe çevirileri
-# Copyright (C) 2020 Emir SARI <bitigchi@me.com>
+# Copyright (C) 2020-2021 Emir SARI <bitigchi@me.com>
 # This file is distributed under the same license as the Git package.
-# Emir SARI <bitigchi@me.com>, 2020
+# Emir SARI <bitigchi@me.com>, 2020-2021
 #
 # ######################################################### #
 #     Git Türkçe kavramlar dizini / Git Turkish Glossary    #
@@ -11,6 +11,7 @@
 # ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––#
 # 3-way merge                 | 3 yönlü birleştirme         #
 # bare repository             | çıplak depo                 #
+# blame                       | genel bakış                 #
 # blob object                 | ikili nesne                 #
 # branch                      | dal                         #
 # bundle                      | demet                       #
@@ -89,8 +90,8 @@
 msgstr ""
 "Project-Id-Version: Git Turkish Localization Project\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-16 16:00+0300\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-17 18:00+0300\n"
 "Last-Translator: Emir SARI <bitigchi@me.com>\n"
 "Language-Team: Turkish (https://github.com/bitigchi/git-po/)\n"
 "Language: tr\n"
@@ -104,9 +105,9 @@
 msgid "Huh (%s)?"
 msgstr "Pardon (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "indeks okunamadı"
 
@@ -134,7 +135,7 @@
 msgid "could not stage '%s'"
 msgstr "'%s' hazırlanamadı"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "indeks yazılamadı"
 
@@ -150,7 +151,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "not: %s artık izlenmiyor.\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -290,12 +291,12 @@
 msgid "unstaged"
 msgstr "hazırlanmamış"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "yol"
@@ -819,7 +820,7 @@
 msgid "'git apply' failed"
 msgstr "'git apply' başarısız oldu"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -828,37 +829,37 @@
 "\n"
 "Bu iletiyi \"git config advice.%s false\" ile devre dışı bırakın"
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sipucu: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Seç-al yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "İşleme yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Birleştirme yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Çekme yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Geriye al yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "%s yapılamıyor; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -866,23 +867,39 @@
 "Onları çalışma ağacında onarın, ardından hazırlığı bitirmek için uygun\n"
 "görüldüğü biçimde 'git add/rm <dosya>' yaptıktan sonra işleyin."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Çözüme kavuşturulmamış bir çakışmadan dolayı çıkılıyor."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Birleştirmenizi sonuçlandırmadınız (MERGE_HEAD mevcut)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Birleştirme öncesinde değişikliklerinizi işleyin."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Tamamlanmamış birleştirmeden dolayı çıkılıyor."
 
-#: advice.c:290
+#: 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 ""
+"Aşağıdaki yol belirteçleri uygun bir yolla eşleşmediler; ancak geçerli\n"
+"aralıklı çıkışın dışındaki girdilerle eşleşiyorlar:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr "Böyle girdileri güncellemeyi düşünüyorsanız aralıklandırma kurallarını "
+"devre dışı bırakın veya değiştirin."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -931,83 +948,79 @@
 msgid "unclosed quote"
 msgstr "kapatılmamış tırnak"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "tanımlanamayan boşluk seçeneği '%s'"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "tanımlanamayan boşluk yok sayma seçeneği '%s'"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject ve --3way birlikte kullanılamaz."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached ve --3way birlikte kullanılamaz."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "-3way bir depo dışında"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index bir depo dışında"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached bir depo dışında"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Zaman damgası düzenli ifadesi %s hazırlanamıyor"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "düzenli ifade girdi için %d döndürdü: %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "yamanın %d. satırında dosya adı bulunamıyor "
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: hatalı git-diff - /dev/null bekleniyordu, %s alındı, satır %d"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: hatalı git-diff - %d. satırda tutarsız yeni dosya adı"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: hatalı git-diff - %d. satırda tutarsız eski dosya adı"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: hatalı git-diff - %d. satırda /dev/null bekleniyordu"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "%d. satırda geçersiz kip: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "tutarsız üstbilgi satırları %d ve %d"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1022,93 +1035,93 @@
 "%d öncü yol adı bileşeni kaldırılırken git diff üstbilgisi dosya adı "
 "bilgisine iye değil (%d. satır)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff üstbilgisi dosya adı bilgisine iye değil (%d. satır)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: beklenmedik satır: %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "%d. satırda üstbilgisi olmayan yama parçacığı: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "yeni dosyanın eski içeriğe bağımlılığı var"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "silinen dosya içinde hâlâ bir şeyler var"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "hasarlı yama, %d. satır"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "%s yeni dosyasının eski içeriğe bağımlılığı var"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "%s silinen dosyasının içinde hâlâ bir şeyler var"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** uyarı: %s dosyası boş duruma gelir; ancak silinmez"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "hasarlı ikili yama, %d. satır: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "tanımlanamayan ikili yama, %d. satır"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "yalnızca anlamsız veri içeren yama, %d. satır"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "%s sembolik bağı okunamıyor"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "%s açılamıyor veya okunamıyor"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "geçersiz satır başlangıcı: '%c'"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Parça #%d başarılı oldu, %d (%d satır ofset)."
 msgstr[1] "Parça #%d başarılı oldu, %d (%d satır ofset)."
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 "Bağlam şuna indirildi: (%ld/%ld) (%d konumundaki parçacığı uygulamak için)"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1117,434 +1130,439 @@
 "şunu ararken:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "'%s' için ikili yama verisi eksik"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "'%s' parçası geri alınmadan bir ikili yama reverse-apply yapılamıyor"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "tam indeks satırı olmadan '%s' üzerine bir ikili yama uygulanamıyor"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "Bu yama geçerli içerik ile eşleşmeyen '%s' üzerine uygulanır (%s)."
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "yama boş bir '%s' üzerine uygulanır; ancak o boş değil"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "gereken songörüntü %s ('%s' için) okunamıyor"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "ikili yama '%s' üzerine uygulanamıyor"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "'%s' üzerine ikili yama yanlış sonuç doğuruyor (%s bekleniyordu, %s alındı)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "yama başarısız oldu: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "%s çıkışı yapılamıyor"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "%s okunamadı"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "'%s' bir sembolik bağın ötesinden okunuyor"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "%s yolu yeniden adlandırıldı/silindi"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: indekste bulunmuyor"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: indeks ile eşleşmiyor"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr ""
-"Depo 3 yönlü birleştirmeye geri çekilebilme için gereken ikili nesneye iye "
-"değil."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "Depo, 3 yönlü birleştirme için gereken ikili nesneye iye değil."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "3 yönlü birleştirmeye geri çekiliniyor...\n"
+msgid "Performing three-way merge...\n"
+msgstr "3 yönlü birleştirme gerçekleştiriliyor...\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "'%s' ögesinin geçerli içeriği okunamıyor"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "3 yönlü birleştirmeye geri çekinilemedi...\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "3 yönlü birleştirme gerçekleştirilemedi...\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "'%s' üzerine yama çakışmalarla birlikte uygulandı.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "'%s' üzerine yama sorunsuzca uygulandı.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Doğrudan uygulamaya geri çekiliniyor...\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "kaldırma yaması dosya içeriğini bırakır"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: yanlış tür"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s, %o türüne iye, %o bekleniyordu"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "geçersiz yol '%s'"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: indekste halihazırda var"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: çalışma dizininde halihazırda var"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "şunun yeni kipi (%o): %s, eski kip (%o) ile eşleşmiyor "
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "şunun yeni kipi (%o): %s, şunun eski kipi (%o): %s, ile eşleşmiyor"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "etkilenen dosya '%s' bir sembolik bağın ötesinde"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: yama uygulanamıyor"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "%s yaması denetleniyor..."
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "%s altmodülü için sha1 bilgisi eksik veya yararsız"
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "geçerli HEAD'de olmayan %s için kip değişimi"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 bilgisi eksik veya yararsız (%s)."
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "%s geçici indekse eklenemedi"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "geçici indeks şuraya yazılamadı: %s"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "%s indeksten kaldırılamıyor"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "%s altmodülü için hasarlı yama"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "yeni oluşturulan '%s' dosyasının bilgileri alınamıyor"
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "yeni oluşturulan %s dosyası için yardımcı bellek oluşturulamıyor"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "%s için önbellek girdisi eklenemiyor"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "şuraya yazılamadı: '%s'"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "'%s' dosyası kapatılıyor"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "'%s' dosyası yazılamıyor, %o kipi"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "%s yaması sorunsuzca uygulandı."
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "iç hata"
 
-#: apply.c:4557
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "%%s yaması %d geri çevirme ile uygulanıyor..."
 msgstr[1] "%%s yaması %d geri çevirme ile uygulanıyor..."
 
-#: apply.c:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr ".rej dosya adı %.*s.rej olarak kısaltılıyor"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "%s açılamıyor"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Parça #%d sorunsuzca uygulandı."
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Parça %d geri çevrildi."
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "'%s' yaması atlandı."
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "tanımlanamayan girdi"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "indeks dosyası okunamıyor"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "'%s' yaması açılamıyor: %s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d boşluk hatası susturuldu"
 msgstr[1] "%d boşluk hatası susturuldu"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d satır boşluk hatası ekliyor."
 msgstr[1] "%d satır boşluk hatası ekliyor."
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "Boşluk hataları düzeltildikten sonra %d satır uygulandı."
 msgstr[1] "Boşluk hataları düzeltildikten sonra %d satır uygulandı."
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "Yeni indeks dosyası yazılamıyor"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "verilen yol ile eşleşen değişiklikleri uygulama"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "verilen yol ile eşleşen değişiklikleri uygula"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "sayı"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "geleneksel diff yollarından <sayı> öncü eğik çizgiyi kaldır"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "yamanın yaptığı eklemeleri yok say"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "yamayı uygulama yerine girdi için diffstat çıktısı ver"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "eklenen ve silinen satırların sayısını onluk birimde göster"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "yamayı uygulama yerine girdi için bir özet çıktısı ver"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "yamayı uygulama yerine yamanın uygulanabilir olup olmadığına bak"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "yamanın geçerli indekse uygulanabilir olduğundan emin ol"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "yeni dosyaları `git add --intent-to-add` ile imle"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "çalışma ağacına dokunmadan bir yama uygula"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "çalışma ağacının dışına dokunan bir yamayı kabul et"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "ek olarak yamayı da uygula (--stat/--summary/--check ile kullan)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "bir yama uygulanamıyorsa 3 yönlü birleştirme dene"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr "3 yönlü birleştirme dene, başarısız olursa normal yamaya geri çekil"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr "gömülü indeks bilgisini temel alan geçici bir indeks oluştur"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "yollar NUL karakteri ile ayrılır"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "en az <n> bağlam satırının eşleştiğinden emin ol"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "eylem"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "boşluk hatası içeren yeni veya değiştirilmiş satırları algıla"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "bağlam bulurken boşluk değişikliklerini yok say"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "yamayı tersten uygula"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "en az bir satır bağlam bekleme"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "reddedilmiş parçaları ilgili *.rej dosyalarında bırak"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "üst üste binen parçalara izin ver"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "ayrıntı ver"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "dosya sonunda yanlışlıkla algılanan eksik yenisatırı hoş gör"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "parça üstbilgisindeki satır sayımına güvenme"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "kök"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "tüm dosya adlarının başına <kök> ekle"
 
@@ -1610,141 +1628,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <depo> [--exec <komut>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "%s okunamıyor"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "'%s' okunamadı"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "yol belirteci '%s' hiçbir dosya ile eşleşmedi"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "böyle bir başvuru yok: %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "geçerli bir nesne adı değil: %s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "bir ağaç nesnesi değil: %s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "geçerli çalışma dizini izlenmiyor"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Dosya bulunamadı: %s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "Normal bir dosya değil: %s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "biçim"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "arşiv biçimi"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "önek"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "öneki arşivdeki tüm yol adlarının başına ekle"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "dosya"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "izlenmeyen dosyaları arşive ekle"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "arşivi bu dosyaya yaz"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "çalışma dizinindeki .gitattributes'u oku"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "arşivlenmiş dosyaları stderr'de raporla"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "sıkıştırma düzeyini ayarla"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "desteklenen arşiv biçimlerini listele"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "depo"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "arşivi uzak konum deposu <depo>'dan al"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "komut"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "uzak konum komutu git-upload-archive'e olan yol"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Beklenmedik seçenek --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "--exec seçeneği yalnızca --remote ile birlikte kullanılabilir"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Beklenmedik seçenek --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "--add-file ve --remote seçenekleri birlikte kullanılamaz"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Bilinmeyen arşiv biçimi '%s'"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "'%s' biçimi için desteklenmeyen argüman: -%d"
@@ -1754,12 +1772,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s geçerli bir öznitelik adı değil"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s izin verilmiyor: %s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1841,12 +1859,12 @@
 msgid "a %s revision is needed"
 msgstr "bir %s revizyonu gerekiyor"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "'%s' dosyası oluşturulamadı"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "'%s' dosyası okunamadı"
@@ -1864,10 +1882,10 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Sınanabilir bir işleme bulunamadı.\n"
-"Hatalı yol parametreleri ile mi başladınız?\n"
+"Hatalı yol argümanları ile mi başladınız?\n"
 
 #: bisect.c:1095
 #, c-format
@@ -1886,41 +1904,41 @@
 msgstr[0] "İkili arama: Şundan sonra sınanacak %d revizyon kaldı: %s\n"
 msgstr[1] "İkili arama: Şundan sonra sınanacak %d revizyon kaldı: %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents ve --reverse birlikte pek iyi gitmiyor."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "--contents son işleme nesnesi adı ile kullanılamıyor"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse ve --first-parent birlikte en son işlemenin belirtilmesini "
 "gerektiriyor"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "revizyonda gezinme ayarlaması başarısız oldu"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent birlikte ilk üst öge zincirinin yanında erim "
 "gerektiriyor"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "şurada %s yolu bulunamadı: %s"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "%s ikili nesnesi %s yolunda okunamıyor"
@@ -2058,12 +2076,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Geçerli bir dal noktası değil: '%s'."
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' çıkışı '%s' konumunda halihazırda yapılmış"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "%s çalışma ağacının HEAD'i güncellenmemiş"
@@ -2088,8 +2106,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "tanımlanamayan üstbilgi: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "'%s' açılamadı"
@@ -2132,279 +2150,292 @@
 msgid "pack-objects died"
 msgstr "pack-objects sonlandı"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list sonlandı"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "'%s' başvurusu revizyon listesi seçenekleri tarafından dışlandı"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "desteklenmeyen demet sürümü %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "demet sürümü %d, %s algoritması ile yazılamıyor"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "tanımlanamayan argüman: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Boş demet oluşturma reddediliyor."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "'%s' oluşturulamıyor"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "index-pack sonlandı"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "iri parça numarası sonlandırması beklenenden önce ortaya çıkıyor"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "düzgün olmayan iri parça ofseti %<PRIx64> ve %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "yinelenmiş iri parça numarası %<PRIx32> bulundu"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "en son iri parçanın numarası sıfır olmayan %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "geçersiz renk değeri: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "geçersiz sağlama sürümü"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "commit-graph dosyası pek küçük"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "commit-graph imzası %X, %X ile eşleşmiyor"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "commit-graph sürümü %x, %X ile eşleşmiyor"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "commit-graph sağlama sürümü %X, %X ile eşleşmiyor"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "commit-graph dosyası %u iri parça tutmak için pek küçük"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "commit-graph biçimsiz iri parça ofseti %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "commit-graph iri parça numarası %08x birden çok görünüyor"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "commit-graph temel grafiği iri parçasına iye değil"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "commit-graph zinciri eşleşmiyor"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "geçersiz commit-graph zinciri: '%s'. satır bir sağlama değil"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "tüm commit-graph dosyaları bulunamıyor"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "geçersiz işleme konumu. commit-graph büyük olasılıkla hasar görmüş."
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "%s işlemesi bulunamadı"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "commit-graph, taşım oluşturma verisi gerektiriyor; ancak hiç yok"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "%s işlemesi ayrıştırılamıyor"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "%s nesnesinin türü alınamıyor"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "İşleme grafiğindeki bilinen işlemeler yükleniyor"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "İşleme grafiğindeki ulaşılabilir işlemeler genişletiliyor"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "İşleme grafiğindeki işleme imleri temizleniyor"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "İşleme grafiği ilingesel düzeyleri hesaplanıyor"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "İşleme grafiği kuşak sayıları hesaplanıyor"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 "Geçerli işlemelerdeki değiştirilmiş yollar için Bloom süzgeci hesaplanıyor"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Başvurulmuş işlemeler toplanıyor"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "%d pakette işleme grafiği için işlemeler bulunuyor"
 msgstr[1] "%d pakette işleme grafiği için işlemeler bulunuyor"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "%s paketi eklenirken hata"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "%s için indeks açılırken hata"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Paketlenmiş nesneler arasından işleme grafiği için işlemeler bulunuyor"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "İşleme grafiğindeki ek sınırlar bulunuyor"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "temel grafiği numaralarının doğru sayısı yazılamadı"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "%s öncü dizinleri oluşturulamıyor"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "geçici grafik katmanı oluşturulamıyor"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "'%s' için paylaşılan izinler ayarlanamıyor"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "İşleme grafiği %d geçişte yazılıyor"
 msgstr[1] "İşleme grafiği %d geçişte yazılıyor"
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "commit-graph zincir dosyası açılamıyor"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "temel commit-graph dosyası yeniden adlandırılamadı"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "geçici commit-graph dosyası yeniden adlandırılamadı"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Birleştirilen işlemeler taranıyor"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "commit-graph birleştiriliyor"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "bir commit-graph yazılmaya çalışılıyor; ancak 'core.commitGraph' devre dışı"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "grafik yazımı için çok fazla işleme"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "commit-graph dosyasının sağlama toplamı yanlış ve büyük olasılıkla hasar "
 "görmüş"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "commit-graph hatalı nesne tanımlayıcı sırasına iye: %s, sonra %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "commit-graph hatalı fanout değerine iye: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "%s işlemesi commit-graph'tan ayrıştırılamadı"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "İşleme grafiğindeki işlemeler doğrulanıyor"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "%s işlemesi commit-graph için olan nesne veritabanından ayrıştırılamadı"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "commit-graph'teki %s işlemesi için olan kök ağaç nesne tanımlayıcısı %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "%s işlemesi için olan commit-graph üst öge listesi çok uzun"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s için olan commit-graph üst ögesi %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "%s işlemesi için olan commit-graph üst öge listesi erkenden sonlanıyor"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2412,7 +2443,7 @@
 "%s işlemesi için commit-graph kuşak sayısı sıfır; ancak başka yerlerde "
 "sıfırdan farklı"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2420,19 +2451,19 @@
 "%s işlemesi için commit-graph kuşak sayısı sıfırdan farklı; ancak başka "
 "yerlerde sıfır"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "%s işlemesi için commit-graph kuşağı %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "%s işlemesi için commit-graph kuşağı %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "%s işlemesi için commit-graph içindeki işleme tarihi %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "%s ayrıştırılamadı"
@@ -2462,28 +2493,28 @@
 "\"git config advice.graftFileDeprecated false\"\n"
 "kullanarak bu iletiyi kapatabilirsiniz."
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "%s işlemesinin güvenilmeyen bir GPG imzası var, iddiaya göre %s tarafından."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "%s işlemesinin hatalı bir GPG imzası var, iddiaya göre %s tarafından."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "%s işlemesinin bir GPG imzası yok."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "%s işlemesinin %s tarafından sağlanan düzgün bir GPG imzası var\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2498,7 +2529,7 @@
 msgid "memory exhausted"
 msgstr "bellek tükendi"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2513,297 +2544,341 @@
 "\t%s\n"
 "Bu dairesel içermelerden dolayı olabilir."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "içerme yolu '%s' genişletilemedi"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "göreceli yapılandırma içermeleri dosyalardan gelmeli"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "göreceli yapılandırma içerme koşulluları dosyalardan gelmeli"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "geçersiz yapılandırma biçimi: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "'%.*s' yapılandırması için ortam değişkeni adı eksik"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "şu yapılandırma için '%s' ortam değişkeni eksik: '%.*s'"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "anahtar, bir bölüm içermiyor: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "anahtar, bir değişken adı içermiyor: %s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "geçersiz anahtar: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "geçersiz anahtar (yenisatır): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "boş yapılandırma anahtarı"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "düzmece yapılandırma parametresi: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "%s içinde düzmece biçim"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "%s içinde düzmece sayım"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "%s içinde çok fazla girdi"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "%s yapılandırma anahtarı eksik"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "%s yapılandırma değeri eksik"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "hatalı yapılandırma satırı %d, %s ikili nesnesi içinde"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "hatalı yapılandırma satırı %d, %s dosyası içinde"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "standart girdi içinde hatalı yapılandırma satırı %d"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "hatalı yapılandırma satırı %d, %s altmodül ikili nesnesi içinde"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "hatalı yapılandırma satırı %d, %s komut satırı içinde"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
-msgstr "hatalı yapılandırma satırı %d, %s içinde"
+msgstr "hatalı yapılandırma satırı %d (%s içinde)"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "erim dışı"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "geçersiz birim"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "hatalı sayısal yapılandırma değeri '%s', '%s' için: %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s ikili nesnesi içinde: "
 "%s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s dosyası içinde: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, standart girdi içinde: %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s altmodül ikili "
 "nesnesi içinde: %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s komut satırı içinde: "
 "%s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s içinde: %s"
+msgstr "hatalı sayısal yapılandırma değeri '%s', '%s' için (%s içinde): %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "hatalı Boole yapılandırma değeri '%s', '%s' için"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "şuradaki kullanıcı dizini genişletilemedi: '%s'"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "%s', '%s' için geçerli bir zaman damgası değil"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "kısaltma uzunluğu erim dışında: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "hatalı zlib sıkıştırma düzeyi %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar yalnızca bir karakter olmalı"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "nesne oluşturma için geçersiz kip: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s için hatalı oluşturulmuş değer"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s için hatalı oluşturulmuş değer: %s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "nothing, matching, simple, upstream veya current içinden biri olmalı"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "hatalı paket sıkıştırma düzeyi %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "'%s' yapılandırma ikili nesnesi yüklenemiyor"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "'%s' başvurusu ikili bir nesneye işaret etmiyor"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "'%s' yapılandırma ikili nesnesi çözülemiyor"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "%s ayrıştırılamadı"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "komut satırı yapılandırması ayrıştırılamıyor"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "yapılandırma dosyaları okunurken beklenmedik bir hata oluştu"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Geçersiz %s: '%s'"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange değeri '%d' 0 ve 100 arasında olmalı"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "'%s' komut satırı yapılandırmasından ayrıştırılamıyor"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "hatalı yapılandırma değişkeni '%s', '%s' dosyası %d. satırda"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "geçersiz bölüm adı '%s'"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s birden çok değere iye"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "yeni yapılandırma dosyası %s yazılamadı"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "%s yapılandırma dosyası kilitlenemedi"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "%s açılıyor"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "geçersiz dizgi: %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "geçersiz yapılandırma dosyası %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "%s üzerinde fstat başarısız oldu"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "'%s' mmap yapılamıyor"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "%s üzerinde chmod başarısız oldu"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "%s yapılandırma dosyası yazılamadı"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "'%s', '%s' olarak ayarlanamadı"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "'%s' ayarı kapatılamadı"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "geçersiz bölüm adı: %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "'%s' için değer eksik"
@@ -2865,45 +2940,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "protokol hatası: beklenmedik '%s'"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "sunucu tarafından bilinmeyen nesne biçimi '%s' belirtildi"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "geçersiz ls-refs yanıtı: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "başvuru listelemesinden sonra floş bekleniyordu"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "başvuru listelemesinden sonra yanıt sonu paketi bekleniyordu"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "'%s' protokolü desteklenmiyor"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "soket üzerinde SO_KEEPALIVE ayarlanamıyor"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "%s adresi aranıyor..."
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "%s aranamıyor (kapı %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2912,7 +2987,7 @@
 "bitti.\n"
 "%s adresine bağlanılıyor (kapı %s)..."
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2922,61 +2997,65 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "bitti."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "%s aranamıyor (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "bilinmeyen kapı %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "garip makine adı '%s' engellendi"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "garip kapı '%s' engellendi"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "vekil %s başlatılamıyor"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "yol belirtilmedi; geçerli url sözdizimi için 'git help pull' yazın"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "git:// makinelerinde ve depo yollarında yenisatır karakteri yasak"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh değişik biçimi 'simple' -4 desteklemiyor"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh değişik biçimi 'simple' -6 desteklemiyor"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh değişik biçimi 'simple' kapı ayarlamayı desteklemiyor"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "garip yol adı '%s' engellendi"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "çatallanamıyor"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Bağlantı denetleniyor"
 
@@ -2992,17 +3071,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "rev-list'in stdin'i kapatılamadı"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "izin verilmeyen crlf_action %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF %s içinde LF ile değiştirilecek"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -3011,12 +3090,12 @@
 "CRLF %s içinde LF ile değiştirilecek.\n"
 "Dosya sizin çalışma dizininizde kendi orijinal satır sonlarına iye olacak."
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF %s içinde CRLF ile değiştirilecek"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -3025,12 +3104,12 @@
 "LF %s içinde CRLF ile değiştirilecek.\n"
 "Dosya sizin çalışma dizininizde kendi orijinal satır sonlarına iye olacak."
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM '%s' içinde yasaklı, eğer %s olarak kodlanmışsa"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -3039,12 +3118,12 @@
 "'%s' dosyası bir bayt sıra imi (BOM) içeriyor. Lütfen çalışma ağacı "
 "kodlaması için UTF-%.*s kullanın."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM '%s' içinde gerekli, eğer %s olarak kodlanmışsa"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -3053,51 +3132,51 @@
 "'%s' dosyasında bir bayt sıra imi (BOM) eksik. Lütfen çalışma ağacı "
 "kodlaması için UTF-%sBE veya UTF-%sLE (bayt sırasına göre) kullanın."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "'%s', %s değerinden %s değerine kodlanamadı"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr ""
 "'%s' kodlamasını %s -> %s biçiminde yapıp tersine döndürmek aynı şey değil"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "'%s' dış süzgecini çalıştırmak için çatallama yapılamıyor"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "girdi '%s' dış süzgecine beslenemiyor"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "'%s' dış süzgeci %d için başarısız oldu"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "'%s' dış süzgecinden okuma başarısız oldu"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "'%s' dış süzgeci başarısız oldu"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "beklenmedik süzgeç türü"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "dış süzgeç için yol adı pek uzun"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -3105,16 +3184,16 @@
 msgstr ""
 "'%s' dış süzgeci artık kullanılamıyor; ancak tüm yolların süzümü bitmedi"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "doğru/yanlış geçerli bir çalışma ağacı kodlaması değil"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: temiz süzgeç '%s' başarısız oldu"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: is süzgeci %s başarısız oldu"
@@ -3241,23 +3320,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "%d delta adası imlendi, bitti.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "--diff-merges için bilinmeyen değer: %s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base erimlerle çalışmaz"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base yalnızca işlemelerle çalışır"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "HEAD alınamıyor"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "bir birleştirme temeli bulunamadı"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "birden çok birleştirme temeli bulundu"
 
@@ -3322,35 +3406,35 @@
 "'diff.dirstat' yapılandırma değişkeninde hatalar bulundu:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "dış diff sonlandı, %s konumunda durdu"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check ve -s birlikte kullanılmaz"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G, -S ve --find-object birlikte kullanılmaz"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow tam olarak yalnızca bir yol belirteci gerektiriyor"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "geçersiz --stat değeri: %s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s bir sayısal değer bekliyor"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3359,42 +3443,42 @@
 "--dirstat/-X seçenek parametresi ayrıştırılamadı:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "şurada bilinmeyen değişiklik sınıfı '%c': -diff-filter=%s"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "şundan sonra bilinmeyen değer: ws-error-highlight=%.*s"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "'%s' çözülemiyor"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s <n>/<m> biçimi bekliyor"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s bir karakter bekliyor, '%s' aldı"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "hatalı --color-moved argümanı: %s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws içinde geçersiz kip '%s'"
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3402,162 +3486,162 @@
 "diff-algorithm seçeneği şunları kabul eder: \"myers\", \"minimal\", "
 "\"patience\" ve \"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s için geçersiz argüman"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "-I'ya geçersiz düzenli ifade verildi: '%s'"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "--submodule seçenek parametresi ayrıştırılamadı: '%s'"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "hatalı --word-diff argümanı: %s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Diff çıktısı biçimlendirme seçenekleri"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "yama oluştur"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "diff çıktısını gizle"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "diff'leri <n> satır bağlamlı oluştur"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "diff'i ham biçimde oluştur"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "'-p --raw eşanlamlısı"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "'-p --stat eşanlamlısı"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "makinede okunabilen --stat"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "--stat'ın yalnızca son satırını çıktı ver"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "her alt dizin için göreceli bir miktar değişikliğin dağıtımını çıktı ver"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "--dirstat-cumulative eşanlamlısı"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "--dirstat=files,param1,param2... eşanlamlısı"
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "değişiklikler çakışma imleyicileri veya boşluk hataları doğuruyorsa uyar"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "sıkışık özet; örn. oluşumlar, yeniden adlandırmalar ve kip değişiklikleri"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "yalnızca değiştirilen dosyaların adlarını göster"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "yalnızca değiştirilen dosyaların adlarını ve durumlarını göster"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<genişlik>[,<ad-genişlik>[,<sayım>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "diffstat oluştur"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<genişlik>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "diffstat'ı verilmiş bir genişlik ile oluştur"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "diffstat'ı verilmiş bir ad genişliği ile oluştur"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "diffstat'ı verilmiş bir grafik genişliği ile oluştur"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<sayım>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "diffstat'ı kısıtlı satırlarla oluştur"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "diffstat içinde ufak özet oluştur"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "uygulanabilir bir ikili diff çıktısı ver"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "\"index\" satırlarında tam ön ve songörüntü nesne adlarını göster"
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "renkli diff göster"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<çeşit>"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 "diff'teki boşluk hatalarını 'context', 'old' veya 'new' satırlarında vurgula"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3565,88 +3649,88 @@
 "--raw veya --numstat içinde yol adlarını tahrip etme ve çıktı alanı "
 "sonlandırıcıları olarak NUL'ları kullan"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<önek>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "\"a/\" yerine verilmiş kaynak önekini göster"
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "\"b/\"yerine verilmiş kaynak önekini göster"
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "çıktının her satırının başına ek bir önek ekle"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "hiçbir kaynak ve hedef önekini gösterme"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "diff parçaları arasındaki bağlamı belirtilen satır sayısı kadar göster"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<karakter>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "yeni satırı belirtmek için '+' yerine kullanılacak karakteri belirle"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "eski satırı belirtmek için '-' yerine kullanılacak karakteri belirle"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "bağlam belirtmek için ' ' yerine kullanılacak karakteri belirle"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Diff yeniden adlandırma seçenekleri"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "tam yeniden yazım değişikliklerini silme ve oluşturma olarak ayır"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "yeniden adlandırmaları algıla"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "silmeler için öngörüntüyü atla"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "kopyaları algıla"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "değiştirilmemiş dosyaları kopyaları bulmak için kaynak olarak kullan"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "yeniden adlandırma algılamasını devre dışı bırak"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "boş ikili nesneleri yeniden adlandırma kaynağı olarak kullan"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 "bir dosyanın geçmişini listelemeyi yeniden adlandırmaların ötesinde sürdür"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3654,222 +3738,234 @@
 "eğer yeniden adlandırma/kopyalama hedeflerinin sayısı verilen sınırı aşarsa "
 "yeniden adlandırma/kopyalama algılamasını önle"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Diff algoritma seçenekleri"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "olabilecek en küçük diff'i üret"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "satırları karşılaştırırken boşlukları yok say"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "boşluk sayısındaki değişiklikleri yok say"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "satır sonundaki boşluk değişikliklerini yok say"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "satır sonundaki satırbaşı karakterini yok say"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "satırlarının tümü boş olan değişiklikleri yok say"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<ifade>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "satırlarının tümü <ifade> ile eşleşen değişiklikleri yok say"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "diff parça sınırlarını kolay okuma için bulgusal olarak kaydır"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "diff'i \"patience diff\" algoritmasını kullanarak oluştur"
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "diff'i \"histogram diff\" algoritmasını kullanarak oluştur"
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<algoritma>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "bir diff algoritması seç"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<metin>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "diff'i \"anchored diff\" algoritmasını kullanarak oluştur"
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<kip>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "sözcük diff'ini değiştirilen sözcükleri sınırlandırmak için <kip> kullanarak "
 "göster"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "bir sözcüğün ne olduğuna karar vermek için <ifade> kullan"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "şuna eşdeğer: --word-diff=color --word-diff-regex=<ifade>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "taşınan kod satırları farklı renklendirilir"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "boşluklar --color-moved içinde nasıl yok sayılır"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Diğer diff seçenekleri"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "altdizinden çalıştırıldığında dışarıdaki değişiklikleri hariç tut ve "
 "göreceli yolları göster"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "tüm dosyaları metin olarak varsay"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "iki girdiyi değiştir, diff'i tersine döndür"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "ayrımlar varsa 1 ile, yoksa 0 ile çık"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "tüm program çıktısını devre dışı bırak"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "bir dış diff yardımcısının çalıştırılmasına izin ver"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "ikili dosyaları karşılaştırırken dış metin dönüştürme süzgeçlerini çalıştır"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<ne-zaman>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "diff oluştururken altmodüllere olan değişiklikleri yok say"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<biçim>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "altmodüllerdeki değişikliklerin nasıl gösterileceğini belirt"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "indeksten 'git add -N' girdilerini gizle"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "indekste 'git add -N' girdilerine gerçekmiş gibi davran"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<dizi>"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "belirtilen dizinin görülme sayısını değiştiren ayrımlara bak"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "belirtilen düzenli ifadenin görülme sayısını değiştiren ayrımlara bak"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "değişiklik setinde -S veya -G içeren tüm değişiklikleri göster"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "-S içindeki <dizi>'yi genişletilmiş POSIX düzenli ifadesi olarak işle"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "dosyaların çıktıda hangi sırayla görüneceğini denetle"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<yol>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "öncelikle belirtilen yoldaki değişikliği göster"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "belirtilen yola olan çıktıyı atla"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<nesne-no>"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "belirtilen nesnenin görülme sayısını değiştiren ayrımlara bak"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "dosyaları diff türüne göre seç"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<dosya>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "belirli bir dosyaya çıktı ver"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "Kesin olmayan yeniden adlandırma algılaması çok fazla dosya olmasından "
 "dolayı atlandı."
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "Çok fazla dosya olmasından dolayı yalnızca değiştirilen yollardan kopyalar "
 "bulundu."
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3882,10 +3978,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "orderfile '%s' okunamadı"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Kesin olmayan yeniden adlandırma algılaması gerçekleştiriliyor"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "diff'te '%s' diye bir yol yok"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3910,35 +4011,35 @@
 msgid "disabling cone pattern matching"
 msgstr "koni dizgi eşleşmesi devre dışı bırakılıyor"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "%s bir 'exclude' dosyası olarak kullanılamıyor"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "'%s' dizini açılamadı"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "çekirdek adı ve bilgisi alınamadı"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr "izlenmeyen önbellek bu sistemde veya konumda devre dışı bırakılmış"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "%s deposundaki indeks dosyası hasarlı"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "%s için dizinler oluşturulamadı"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "git dizini '%s' konumundan '%s' konumuna göç ettirilemedi"
@@ -3948,21 +4049,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "İpucu: Düzenleyicinizin dosyayı kapatması bekleniyor...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "İçerik süzülüyor"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "'%s' dosyasının bilgileri alınamadı"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "hatalı git ad alanı yolu \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "GIT_DIR şuna ayarlanamadı: '%s'"
@@ -3972,259 +4073,271 @@
 msgid "too many args to run %s"
 msgstr "%s çalıştırmak için çok fazla argüman"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: sığ bir liste bekleniyordu"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: sığ listeden sonra floş paketi bekleniyordu"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: ACK/NAK bekleniyordu, floş paket alındı"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: ACK/NAK bekleniyordu, '%s' alındı"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "uzak konuma yazılamıyor"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc multi_ack_detailed gerektiriyor"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "geçersiz sığ satır: %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "geçersiz sığ olmayan satır: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "nesne bulunamadı: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "nesne içinde hata: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "sığ bulunamadı: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "sığ/sığ olmayan bekleniyordu, %s alındı"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "%s %d %s alındı"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "geçersiz işleme %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "vazgeçiliyor"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "bitti"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s (%d) %s alındı"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "%s tamam olarak imleniyor"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "%s halihazırda var (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: yanbant çoğullama çözücüsü ayrı çatallanamıyor"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "protokol hatası: hatalı paket üstbilgisi"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: %s ayrı çatallanamıyor"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: geçersiz index-pack çıktısı"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s başarısız oldu"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "yanbant çoğullama çözücüsünde hata"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Sunucu sürümü %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "Sunucu %s destekliyor"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "Sunucu sığ istemcileri desteklemiyor"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "Sunucu --shallow-since desteklemiyor"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "Sunucu --shallow-exclude desteklemiyor"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "Sunucu --deepen desteklemiyor"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "Sunucu bu deponun nesne türünü desteklemiyor"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "ortak işleme yok"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "kaynak depo sığ, klonlama için reddet"
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: getirme başarısız"
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "eşleşmeyen algoritmalar: istemci %s; sunucu %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "sunucu '%s' algoritmasını desteklemiyor"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "Sunucu sığ istekleri desteklemiyor"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "Sunucu süzgeç destekliyor"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "uzak konuma istek yazılamıyor"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "bölüm üstbilgisi '%s' okunurken hata"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' bekleniyordu, '%s' alındı"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "beklenmedik alındı satırı: '%s'"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "alındılar işlenirken hata: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "paket dosyasının 'ready'den sonra gönderilmesi gerekiyordu"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "'ready' \"yok\" iken başka hiçbir bölümün gönderilmemesi gerekiyordu"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "sığ bilgi işlenirken hata: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref bekleniyordu, '%s' alındı"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "beklenmedik wanted-ref: '%s'"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "aranan başvurular işlenirken hata: %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: yanıt sonu paketi bekleniyordu"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "eşleşen uzak dal ucu yok"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "uzak konum gereken tüm nesneleri göndermedi"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "uzak konumdan beklenmedik 'ready'"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "böyle bir uzak başvuru yok: %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Sunucu %s tanıtılmamış nesnesi için isteğe izin vermiyor"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "geçici dosya oluşturulamadı"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "şuna ayrık imza yazılamadı: '%s'"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg veriyi imzalayamadı"
 
@@ -4233,7 +4346,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "log.graphColors içindeki '%.*s' geçersiz rengini yok say"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4241,18 +4354,18 @@
 "verilen dizgi NULL baytı içeriyor (-f <dosya> aracılığıyla). Bu yalnızca "
 "PCRE v2 altında -P ile desteklenir"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': %s okunamıyor"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "'%s' dosyasının bilgileri alınamadı"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': kısa okuma"
@@ -4323,7 +4436,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "En çok kullanılan temel Git komutlarının bir listesi aşağıdadır:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "desteklenmeyen komut listeleme türü '%s'"
@@ -4478,47 +4591,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "ad yalnızca izin verilmeyen karakterlerden oluşuyor: %s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "geçersiz tarih biçimi: %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "'tree:<derinlik>' bekleniyordu"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path süzgeçleri desteği artık yok"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "'object:type=<tür>' için '%s' geçerli bir nesne türü değil"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "geçersiz filter-spec '%s'"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "sub-filter-spec içinde kaçış karakteri olmalı: '%c'"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "birlikte kullanımdan sonra bir şeyler bekleniyordu:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "çoklu filter-specs birlikte kullanılamaz"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "depo biçimi kısımsal klonları desteklemesi için yükseltilemiyor"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "'%s' içindeki aralıklı ikili nesneye erişilemiyor"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "%s içindeki aralıklı süzgeç verisi ayrıştırılamıyor"
@@ -4535,7 +4653,7 @@
 "'%s' girdisi (%s ağacında) ikili nesne kipine iye; ancak bir ikili geniş "
 "nesne değil"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "%s işlemesi için kök ağacı yüklenemiyor"
@@ -4564,11 +4682,282 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "'%s.lock' oluşturulamıyor: %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "lsrefs.unborn için '%s' geçersiz değeri"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "ls-refs argümanlarından sonra floş bekleniyordu"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "alıntılanmış CRLF algılandı"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr "hatalı eylem '%s', '%s' için"
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "%s altmodülü birleştirilemedi (çıkış yapılmadı)"
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "%s altmodülü birleştirilemedi (işlemeler mevcut değil)"
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr "%s altmodülü birleştirilemedi (işlemeler merge-base'i takip etmiyor)"
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Not: %s altmodülü %s yönüne ileri sarılıyor"
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "'%s' altmodülünü birleştirilemedi"
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"%s altmodülü birleştirilemedi; ancak olası bir birleştirme çözümü mevcut:\n"
+"%s\n"
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Eğer bu doğruysa yalnızca indekse ekleyin, örneğin:\n"
+"\n"
+"\tgit update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"komutu bu öneriyi kabul edecektir.\n"
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"%s altmodülü birleştirilemedi; ancak birden çok olası birleştirmeler "
+"mevcut:\n"
+"%s"
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr "İç birleştirme çalıştırılamadı"
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "%s veritabanına eklenemedi"
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr "%s kendiliğinden birleştiriliyor"
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"ÇAKIŞMA (örtülü dizin yeniden adlandırma): %s konumundaki mevcut dosya/dizin "
+"örtülü yeniden adlandırmanın aşağıdaki yolları oraya koymasına engel oluyor: "
+"%s."
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"ÇAKIŞMA (örtülü dizin yeniden adlandırma): %s için birden çok yol "
+"eşlemlenemiyor; örtülü dizin yeniden adlandırmaları aşağıdaki yolları oraya "
+"koymayı denedi: %s."
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"ÇAKIŞMA: (dizin yeniden adlandırma ayrılması): %s ögesinin nereye yeniden "
+"adlandırılacağı belirsiz; herhangi bir hedef dosyaların çoğunu almadan "
+"birden çok başka dizine yeniden adlandırılmıştı."
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"UYARI: %s -> %s yeniden adlandırmasını %s ögesine uygulamadan kaçınılıyor, "
+"çünkü %s ögesinin kendisi yeniden adlandırıldı."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Yol güncellendi: %s, (%s içinde eklenen) %s içinde yeniden adlandırılan bir "
+"dizinde; onu %s konumuna taşıdı."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Yol güncellendi: %s, %s olarak yeniden adlandırıldı (%s içinde), %s içinde "
+"yeniden adlandırılan bir dizinde; onu %s konumuna taşıdı."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"ÇAKIŞMA (dosya konumu): %s, (%s içinde eklenen) %s içinde yeniden "
+"adlandırılan bir dizinde, belki de %s konumuna taşınmalı."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"ÇAKIŞMA (dosya konumu): %s, %s olarak yeniden adlandırıldı (%s içinde), %s "
+"içinde yeniden adlandırılan bir dizinde, belki de %s konumuna taşınmalı."
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"ÇAKIŞMA (y. adlandır/y. adlandır): %s->%s olarak adlandırıldı (%s içinde) ve "
+"ek olarak %s olarak da adlandırıldı (%s içinde)."
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"ÇAKIŞMA (yeniden adlandırma çarpışması): %s -> %s yeniden adlandırmasının "
+"içerik çakışmaları var ve başka bir yolla çarpışıyor; bu iç içe geçmiş "
+"çakışmaimleyicilerine neden olabilir."
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"ÇAKIŞMA (yeniden adlandır/sil): %s->%s olarak adlandırıldı (%s içinde); "
+"ancak %s içinde silindi."
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "%s nesnesi okunamıyor"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "%s nesnesi ikili bir nesne değil"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"ÇAKIŞMA (dosya/dizin): Dizin, şuradan %s yolunda: %s; bunun yerine %s "
+"konumuna taşınıyor."
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"ÇAKIŞMA (belirgin türler): %s ögesinin her bir yanında değişik türler vardı; "
+"ikisi de yeniden adlandırıldı; böylelikle başka bir yerde kayıtları "
+"yazılabilir."
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"ÇAKIŞMA (belirgin türler): %s ögesinin her bir yanında değişik türler vardı; "
+"bir tanesi yeniden adlandırıldı; böylelikle her birinin başka bir yerde "
+"kayıtları yazılabilir."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "içerik"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "ekle/ekle"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "altmodül"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "ÇAKIŞMA (%s): %s içinde birleştirme çakışması"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"ÇAKIŞMA (değiştir/sil): %s silindi (%s içinde) ve %s içinde değiştirildi. %s "
+"sürümü (şunun: %s) ağaçta bırakıldı."
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+"Not: %s güncel değil ve çakışmalı sürümlerin çıkışının önünde; eski kopya "
+"%s olarak yeniden adlandırıldı."
+
+#. 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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "şu ağaçlar için birleştirme bilgisi toplama başarısız: %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4578,10 +4967,9 @@
 "yazılacak:\n"
 "\t%s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Tümü güncel!"
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Tümü güncel."
 
 #: merge-recursive.c:356
 msgid "(bad commit)\n"
@@ -4598,133 +4986,88 @@
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr "add_cacheinfo '%s' yolu için yenilenemedi; birleştirme iptal ediliyor."
 
-#: merge-recursive.c:874
+#: merge-recursive.c:876
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "'%s'%s yolu oluşturulamadı"
 
-#: merge-recursive.c:885
+#: merge-recursive.c:887
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Altdizine yer açmak için %s kaldırılıyor\n"
 
-#: merge-recursive.c:899 merge-recursive.c:918
+#: merge-recursive.c:901 merge-recursive.c:920
 msgid ": perhaps a D/F conflict?"
 msgstr ": bir D/F çakışması olabilir mi?"
 
-#: merge-recursive.c:908
+#: merge-recursive.c:910
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "'%s' konumundaki izlenmeyen dosyayı kaybetme reddediliyor"
 
-#: merge-recursive.c:949 builtin/cat-file.c:41
+#: merge-recursive.c:951 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "%s '%s' nesnesi okunamıyor"
 
-#: merge-recursive.c:954
+#: merge-recursive.c:956
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "%s '%s' için ikili nesne bekleniyordu"
 
-#: merge-recursive.c:979
+#: merge-recursive.c:981
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "'%s' açılamadı: %s"
 
-#: merge-recursive.c:990
+#: merge-recursive.c:992
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "'%s' için sembolik bağ oluşturulamadı: %s"
 
-#: merge-recursive.c:995
+#: merge-recursive.c:997
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "şununla ne yapılacağı bilinmiyor: %06o %s '%s'"
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "%s altmodülü birleştirilemedi (çıkış yapılmadı)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "%s altmodülü birleştirilemedi (işlemeler mevcut değil)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr "%s altmodülü birleştirilemedi (işlemeler merge-base'i takip etmiyor)"
-
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1227 merge-recursive.c:1239
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "%s altmodülü şu işlemeye ileri sarılıyor:"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1230 merge-recursive.c:1242
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "%s altmodülü ileri sarılıyor"
 
-#: merge-recursive.c:1251
+#: merge-recursive.c:1265
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "%s altmodülü birleştirilemedi (işlemeleri takip eden birleştirme bulunamadı)"
 
-#: merge-recursive.c:1255
+#: merge-recursive.c:1269
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "%s altmodülü birleştirilemedi (ileri sarım değil)"
 
-#: merge-recursive.c:1256
+#: merge-recursive.c:1270
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Şu altmodül için olası bir birleştirme çözümü bulundu:\n"
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Eğer bu doğruysa yalnızca indekse ekleyin, örneğin:\n"
-"\n"
-"\tgit update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"komutu bu öneriyi kabul edecektir.\n"
-
-#: merge-recursive.c:1268
+#: merge-recursive.c:1282
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "%s altmodülü birleştirilemedi (birden çok birleştirme bulundu)"
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "İç birleştirme çalıştırılamadı"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "%s veritabanına eklenemedi"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "%s kendiliğinden birleştiriliyor"
-
-#: merge-recursive.c:1402
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Hata: %s konumundaki izlenmeyen dosyayı kaybetme reddediliyor, bunun yerine "
 "%s konumuna yazılacak."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4733,7 +5076,7 @@
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s (%s içinde). %s (%s) sürümü "
 "ağaçta bırakıldı."
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4742,7 +5085,7 @@
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s şuraya: %s (%s içinde). %s "
 "(%s) sürümü ağaçta bırakıldı."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4751,7 +5094,7 @@
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s (%s içinde). %s (%s) sürümü "
 "ağaçta %s konumunda bırakıldı."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4760,45 +5103,45 @@
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s şuraya: %s (%s içinde). %s "
 "(%s) sürümü ağaçta %s konumunda bırakıldı."
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "yeniden adlandır"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "yeniden adlandırıldı"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "%s konumundaki kirli dosyayı kaybetme reddediliyor"
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Engel olduğu halde %s konumundaki izlenmeyen dosyayı kaybetme reddediliyor."
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "ÇAKIŞMA (yeniden adlandır/ekle): %s->%s olarak adlandırıldı (%s içinde). %s "
 "eklendi (%s içinde)."
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s bir dizin (%s içinde), bunun yerine %s olarak ekleniyor"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "%s konumundaki izlenmeyen dosyayı kaybetme reddediliyor, bunun yerine %s "
 "olarak ekleniyor"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4807,18 +5150,18 @@
 "ÇAKIŞMA (y. adlandır/y. adlandır): \"%s\"->\"%s\" olarak adlandır (\"%s\" "
 "dalında), \"%s\"->\"%s\" olarak adlandır (\"%s\"%s içinde)"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (çözülmeden bırakıldı)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "ÇAKIŞMA (y. adlandır/y. adlandır): %s->%s olarak adlandır (%s içinde). %s->"
 "%s olarak adlandır (%s içinde)"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4829,27 +5172,7 @@
 "yerleştirileceği belirsiz; çünkü %s dizini birden çok başka dizine yeniden "
 "adlandırılırken hiçbir hedef dosyaların büyük çoğunluğunu almadı."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"ÇAKIŞMA (örtülü dizin yeniden adlandırma): %s konumundaki mevcut dosya/dizin "
-"örtülü yeniden adlandırmanın aşağıdaki yolları oraya koymasına engel oluyor: "
-"%s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"ÇAKIŞMA (örtülü dizin yeniden adlandırma): %s için birden çok yol "
-"eşlemlenemiyor; örtülü dizin yeniden adlandırmaları aşağıdaki yolları oraya "
-"koymayı denedi: %s."
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4858,151 +5181,80 @@
 "ÇAKIŞMA (y. adlandır/y. adlandır): Dizini %s->%s olarak adlandır (%s "
 "içinde). Dizini %s->%s olarak adlandır (%s içinde)."
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"UYARI: %s -> %s yeniden adlandırmasını %s ögesine uygulamadan kaçınılıyor, "
-"çünkü %s ögesinin kendisi yeniden adlandırıldı."
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "%s nesnesi okunamıyor"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "%s nesnesi ikili bir nesne değil"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "değiştir"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "değiştirilmiş"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "içerik"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "ekle/ekle"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s atlandı (mevcut ile aynı biçimde birleştirildi)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "altmodül"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "ÇAKIŞMA (%s): %s içinde birleştirme çakışması"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Bunun yerine %s olarak ekleniyor"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Yol güncellendi: %s, (%s içinde eklenen) %s içinde yeniden adlandırılan bir "
-"dizinde; onu %s konumuna taşıdı."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"ÇAKIŞMA (dosya konumu): %s, (%s içinde eklenen) %s içinde yeniden "
-"adlandırılan bir dizinde, belki de %s konumuna taşınmalı."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Yol güncellendi: %s, %s olarak yeniden adlandırıldı (%s içinde), %s içinde "
-"yeniden adlandırılan bir dizinde; onu %s konumuna taşıdı."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"ÇAKIŞMA (dosya konumu): %s, %s olarak yeniden adlandırıldı (%s içinde), %s "
-"içinde yeniden adlandırılan bir dizinde, belki de %s konumuna taşınmalı."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "%s kaldırılıyor"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "dosya/dizin"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "dizin/dosya"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "ÇAKIŞMA (%s): %s adıyla bir dizin var (%s içinde). %s, %s olarak ekleniyor."
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "%s ekleniyor"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "ÇAKIŞMA (ekle/ekle): %s içinde birleştirme çakışması"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "%s ve %s ağaçlarının birleştirilmesi başarısız"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Birleştiriliyor:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u ortak ata bulundu:"
 msgstr[1] "%u ortak ata bulundu:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "birleştirme herhangi bir işleme döndürmedi"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "'%s' nesnesi ayrıştırılamadı"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "İndeks yazılamıyor."
 
@@ -5010,186 +5262,195 @@
 msgid "failed to read the cache"
 msgstr "önbellek okunamadı"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "yeni indeks dosyası yazılamıyor"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "multi-pack-index OID ikiye bölümünün boyutu hatalı"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-index dosyası %s pek küçük"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "multi-pack-index imzası 0x%08x, 0x%08x imzası ile eşleşmiyor"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index sürümü %d tanımlanamıyor"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index sağlama sürümü %u, %u sürümü ile eşleşmiyor"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "geçersiz iri parça ofseti (çok geniş)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr ""
-"multi-pack-index iri parçası sonlandırılıyor, numarası beklenenden önce "
-"görünüyor"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index'ten gerekli pack-name iri parçası eksik"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index'ten gerekli OID fanout iri parçası eksik"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index'ten gerekli OID arama iri parçası eksik"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index'ten gerekli nesne ofsetleri iri parçası eksik"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index paket adlarının sırasız: '%s' şundan önce: '%s'"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "hatalı pack-int-id: %u (%u toplam paket)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index bir 64 bit ofset depoluyor; ancak off_t pek küçük"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "paket dosyası '%s' eklenemedi"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "pack-index '%s' açılamadı"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "%d nesnesi paket dosyasında bulunamadı"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "ters indeks dosyası depolanamıyor"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Paket dosyaları multi-pack-index'e ekleniyor"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "bırakılacak pack-file %s görülmedi"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "bilinmeyen tercih edilen paket: '%s'"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "tercih edilen '%s' paketinin süresi geçmiş"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "indekslenecek paket dosyası yok."
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "İri parçalar multi-pack-index'e yazılıyor"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "%s kaldırılamadı"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "multi-pack-index %s konumunda temizlenemedi"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "multi-pack-index dosyası mevcut, ancak ayrıştırılamadı"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Başvurulmuş paket dosyaları aranıyor"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "oid fanout sırasız: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "midx bir oid içermiyor"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "multi-pack-index içindeki OID sırası doğrulanıyor"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid araması sırasız: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Nesneler paket dosyasına göre sıralanıyor"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Nesne ofsetleri doğrulanıyor"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "şunun için paket girdisi yüklenemedi: oid[%d] = %s"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "paket dosyası %s için pack-index yüklenemedi"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "şunun için yanlış nesne ofseti: oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Başvurulmuş nesneler sayılıyor"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Başvurulmamış paket dosyaları bulunuyor ve siliniyor"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "pack-objects başlatılamadı"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "pack-objects bitirilemedi"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "lazy_dir iş parçacığı oluşturulamıyor: %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "lazy_name oluşturulamıyor: %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "lazy_name iş parçacığı ucu birleştirilemiyor: %s"
@@ -5234,6 +5495,359 @@
 msgid "Bad %s value: '%s'"
 msgstr "Hatalı %s değeri: '%s'"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "nesne dizini %s yok; şurayı denetleyin: .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "alternatif nesne yolu olağanlaştırılamıyor: %s"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: alternatif nesne depoları yok sayılıyor, iç içe geçme pek derin"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "nesne dizini olağanlaştırılamıyor: %s"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "alternatifler kilit dosyası fdopen yapılamıyor"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "alternatifler dosyası okunamıyor"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "yeni alternatifler dosyası yerine taşınamıyor"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "'%s' diye bir yol yok"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr ""
+"Bağlantı yapılmış çıkış olarak '%s' başvuru deposu henüz desteklenmiyor."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "Başvuru deposu '%s' yerel bir depo değil."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "başvuru deposu '%s' sığ"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "başvuru deposu '%s' aşılı"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "alternatif başvurular ayrıştırılırken geçersiz satır: %s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "%<PRIuMAX>, %<PRIuMAX> sınırı üzerinden mmap yapılmaya çalışılıyor"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap başarısız"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "nesne dosyası %s boş"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "hasar görmüş gevşek nesne '%s'"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "gevşek nesne '%s' sonunda anlamsız veri"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "geçersiz nesne türü"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "%s üstbilgisi --allow-unknown-type ile açılamıyor"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "%s üstbilgisi açılamıyor"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "%s üstbilgisi paketi --allow-unknown-type ile ayrıştırılamıyor"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "%s üstbilgisi ayrıştırılamıyor"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "%s nesnesi okunamadı"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "%s yedeği %s için bulunamadı"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "%s gevşek nesnesi (%s içinde depolanıyor) hasar görmüş"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "paketlenmiş nesne %s (%s içinde depolanıyor) hasar görmüş"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "%s dosyası yazılamıyor"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "'%s' ögesine izin ayarlanamıyor"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "dosya yazım hatası"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "gevşek nesne dosyası kapatılırken hata"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr "%s depo veritabanına nesne eklemek için yetersiz izin"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "geçici dosya oluşturulamıyor"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "gevşek nesne dosyası yazılamıyor"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "yeni nesne %s söndürülemiyor (%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "%s nesnesi üzerinde deflateEnd başarısız oldu (%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "%s için olan nesne kaynak verisinden dolayı kafa karışıklığı"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "%s üzerinde utime() başarısız"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "%s için nesne okunamıyor"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "hasar görmüş işleme"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "hasar görmüş etiket"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "%s indekslenirken okuma hatası"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "%s indekslenirken kısa read"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: veritabanına ekleme başarısız"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: desteklenmeyen dosya türü"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s geçerli bir nesne değil"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s geçerli bir '%s' nesnesi değil"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "%s açılamıyor"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "%s için sağlama uyuşmazlığı (%s bekleniyordu)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "%s mmap yapılamadı"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "%s üstbilgisi açılamıyor"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "%s üstbilgisi ayrıştırılamıyor"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "%s içeriği açılamıyor"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "kısa nesne ID'si %s belirsiz"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Adaylar:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git normalde hiçbir zaman 40 onaltılı karakterlerle biten bir başvuru\n"
+"oluşturmaz; çünkü 40 onaltılı bir başvuru, onu belirlediğiniz zaman yok\n"
+"sayılacaktır. Bu başvurular yanlışlıkla oluşturulmuş olabilir. Örneğin:\n"
+"\n"
+"\tgit switch -c $br $(git rev-parse ...)\n"
+"\n"
+"komutunda \"$br\" bir şekilde boş kalmış ve 40 onaltılı bir başvuru\n"
+"oluşturulmuş. Lütfen bu başvuruları inceleyin ve gerekirse silin. Bu "
+"iletiyi\n"
+"kapatmak için \"git config advice.objectNameWarning\" yapın."
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "'%.*s' günlüğü yalnızca şuna geri gider: %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "'%.*s' günlüğünde yalnızca %d girdi var"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "'%s' yolu disk üzerinde mevcut; ancak '%.*s' içinde değil"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"'%s' yolu mevcut; ancak '%s' değil\n"
+"İpucu: Şunu mu demek istediniz: '%.*s:%s', nam-ı diğer '%.*s:./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "'%s' yolu '%.*s' içinde mevcut değil"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"'%s' yolu indekste; ancak %d numaralı alanda değil\n"
+"İpucu: Şunu mu demek istediniz: ':%d:%s'?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"'%s' yolu indekste; ancak '%s' değil\n"
+"İpucu: Şunu mu demek istediniz: '%d:%s', nam-ı diğer ':%d:./%s'?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "'%s' yolu diskte mevcut; ancak indekste değil"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "'%s' diye bir yol yok (ne diskte ne de indekste)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "göreceli yol sözdizimi çalışma ağacı dışında kullanılamaz"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "geçersiz nesne adı: '%.*s'"
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5244,36 +5858,85 @@
 msgid "object %s is a %s, not a %s"
 msgstr "%s nesnesi bir %s, %s değil"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "%s nesnesi %d bilinmeyen tür numarasına iye"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "nesne ayrıştırılamıyor: %s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "sağlama uyuşmazlığı %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "%s boyutu alınamıyor"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "%s ögesinin disk kullanımı alınamıyor"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "reverse-index dosyası %s pek küçük"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "reverse-index dosyası %s hasar görmüş"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "%s reverse-index dosyasının bilinmeyen bir imzası var"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "%s reverse-index dosyasının sürümü %<PRIu32> desteklenmiyor"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "%s reverse-index dosyasının sağlama numarası %<PRIu32> desteklenmiyor"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "ters indeks dosyası hem yazılıp hem doğrulanamıyor"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "dosya bilgileri alınamadı: %s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "%s, yazılabilir yapılamadı"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "vaat dosyası '%s' yazılamadı"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "ofset paket dosyasının sonundan önce (bozuk .idx?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "ofset %s için paket indeksinin başlangıcından önce (hasarlı indeks?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "ofset %s için paket indeksinin sonundan ötede (kırpılmış index?)"
@@ -5338,31 +6001,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "şunu mu demek istediniz: '--%s' (iki tire ile)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "şunun arması: --%s"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "bilinmeyen seçenek '%s'"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "bilinmeyen anahtar '%c'"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "dizi içinde bilinmeyen ascii dışı seçenek: '%s'"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "kullanım: %s"
@@ -5370,17 +6033,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "    veya: %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-SAYI"
 
@@ -5389,28 +6052,28 @@
 msgid "Could not make %s writable by group"
 msgstr "%s grup ile yazılabilir yapılamadı"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "Kaçış karakteri '\\' attr değerindeki son karakter olarak kullanılamaz"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Yalnızca bir 'attr:' belirtimine izin verilir."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "attr belirteci boş olmamalı"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "geçersiz öznitelik adı %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr "global 'glob' ve 'noglob' yol belirteci ayarları birbiriyle uyumsuz"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5418,51 +6081,51 @@
 "global 'literal' yol belirteci ayarı diğer tüm global yol belirteci "
 "ayarlarıyla uyumsuz"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "yol belirteci sihri 'prefix' için geçersiz parametre"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Geçersiz yol belirteci sihri '%.*s' (%s içinde)"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "'%s' içindeki yol belirteci sihrinin sonunda eksik ')'"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Yerine getirilmemiş yol belirteci sihri '%c' ('%s' içinde)"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: 'literal' ve 'glob' birbiriyle uyumsuz"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: '%s', '%s' konumunda depo dışında"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s' (belleten: '%c')"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: yol belirteci sihri bu komut tarafından desteklenmiyor: %s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "yol belirteci '%s' bir sembolik bağın ötesinde"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "satırda hatalı tırnaklar: %s"
@@ -5483,7 +6146,7 @@
 msgid "flush packet write failed"
 msgstr "floş paketi yazımı başarısız"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "protokol hatası: olanaksız uzun satır"
 
@@ -5491,47 +6154,48 @@
 msgid "packet write with format failed"
 msgstr "biçimlendirilmiş paket yazımı başarısız"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr "paket yazımı başarısız - veri olabilecek en çok paket boyutunu aşıyor"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "paket yazımı başarısız"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "paket yazımı başarısız: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "okuma hatası"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "uzak konum beklenmedik bir biçimde hattı kapattı"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "protokol hatası: hatalı satır uzunluğu karakteri: %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "protokol hatası: hatalı satır uzunluğu %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "uzak konum hatası: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "İndeks yenileniyor"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "iş parçacıklarına ayrılmış 'lstat' oluşturulamıyor: %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "--pretty biçimi ayrıştırılamıyor"
 
@@ -5552,24 +6216,28 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "vaatçi uzak konum adı '/' ile başlayamaz: %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info: argümanlardan sonra floş bekleniyordu"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Yinelenmiş nesneler kaldırılıyor"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "'log' başlatılamadı"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "'log' çıktısı okunamadı"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "'%s' işlemesi ayrıştırılamadı"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5577,65 +6245,69 @@
 msgstr ""
 "'log' çıktısının ilk satırı ayrıştırılamadı: 'commit ' ile başlamıyor: '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "git üstbilgisi '%.*s' ayrıştırılamadı"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "diff oluşturulamadı"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "-p ve --overlay birlikte kullanılmaz"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "'%s' günlüğü ayrıştırılamadı"
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "dosya arması '%s' eklenmeyecek ('%s' indekste halihazırda var)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "nesne veritabanında boş ikili bir nesne oluşturulamıyor"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: yalnızca sıradan dosyalar, sembolik bağlar ve git dizinleri eklenebilir"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' çıkışı yapılmış bir işlemeye iye değil"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "'%s' dosyası indekslenemiyor"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "'%s' indekse eklenemiyor"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "'%s' dosyasının bilgileri alınamıyor"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' hem bir dosya hem de bir dizin olarak görünüyor"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "İndeks yenileniyor"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5644,7 +6316,7 @@
 "index.version ayarlanmış; ancak değer geçersiz.\n"
 "%i sürümü kullanılıyor"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5653,139 +6325,143 @@
 "GIT_INDEX_VERSION ayarlanmış; ancak değer geçersiz.\n"
 "%i sürümü kullanılıyor"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "hatalı imza 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "hatalı indeks sürümü %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "hatalı indeks dosyası sha1 imzası"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "indeks bizim anlamadığımız %.4s imzası kullanıyor"
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "%.4s uzantısı yok sayılıyor"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "bilinmeyen indeks girdisi biçimi 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "indekste hatalı oluşturulmuş ad alanı, '%s' yolu yakınında"
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "indekste sırasız hazırlama alanı girdileri"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "birleştirilmiş dosya '%s' için çoklu hazırlama alanı girdileri"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' için sırasız hazırlama alanı girdileri"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "indeks dosyası hasar görmüş"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "load_cache_entries iş parçacığı oluşturulamıyor: %s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "load_cache_entries iş parçacığı ucu birleştirilemiyor: %s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: indeks dosyası açılamadı"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: açık indeksin bilgileri alınamıyor"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: indeks dosyası beklenenden daha küçük"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: indeks dosyası eşlemlenemiyor"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "load_index_extensions iş parçacığı oluşturulamıyor: %s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "load_index_extensions iş parçacığı ucu birleştirilemiyor: %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "paylaşılan indeks '%s' tazelenemedi"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "bozuk indeks, %s bekleniyordu (%s içinde), %s alındı"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "'%s' kapatılamadı"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "bir sparse-index'e dönüştürülemedi"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "'%s' bilgileri alınamadı"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "git dizini açılamıyor: %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "bağlantı kesilemiyor: %s"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "'%s' üzerindeki izin bitleri onarılamıyor"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: #0 numaralı hazırlama alanına bırakılamıyor"
@@ -5816,7 +6492,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5825,7 +6504,7 @@
 "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"
+".       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 ""
@@ -5835,7 +6514,10 @@
 "r, reword <işleme> = işlemeyi kullan; ancak işleme iletisini düzenle\n"
 "e, edit <işleme> = işlemeyi kullan; ancak değiştirmek için dur\n"
 "s, squash <işleme> = işlemeyi kullan; ancak önceki işleme içine karıştır\n"
-"f, fixup <işleme> = \"squash\" gibi; ancak bu işlemenin günlük iletisini at\n"
+"f, fixup [-C | -c] <işleme> = \"squash\" gibi; ancak yalnızca bir önceki\n"
+"                   işlemenin günlük iletisini tutar (-C kullanılmadıysa,\n"
+"                   o zaman yalnızca bu işlemenin iletisini tutar; -c, -C\n"
+"                   ile aynıdır; ancak ek olarak düzenleyiciyi açar)\n"
 "x, exec <komut> = komutu (satırın geri kalanı) kabuk kullanarak çalıştır\n"
 "b, break = burada dur (daha sonra sürdürmek için 'git rebase --continue')\n"
 "d, drop <işleme> = işlemeyi kaldır\n"
@@ -5849,14 +6531,14 @@
 "\n"
 "Bu satırlar yeniden sıralanabilirler, yukarıdan aşağıya çalıştırılırlar.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "%s ögesini %s üzerine yeniden temellendir (%d komut)"
 msgstr[1] "%s ögesini %s üzerine yeniden temellendir (%d komut)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5865,7 +6547,7 @@
 "Hiçbir satırı kaldırmayın. Bir işlemeyi kaldırmak için 'drop'u açıkça "
 "kullanın.\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5873,7 +6555,7 @@
 "\n"
 "Buradaki bir satırı kaldırırsanız İŞLEME KAYBOLUR.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5888,7 +6570,7 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5898,19 +6580,19 @@
 "Ancak tümünü kaldırırsanız yeniden temellendirme iptal edilecektir.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "'%s' yazılamadı"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "'%s' yazılamadı."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5919,7 +6601,7 @@
 "Uyarı: Bazı işlemeler yanlışlıkla bırakılmış olabilir.\n"
 "Bırakılan işlemeler: (yeniden eskiye):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5936,14 +6618,14 @@
 "Kullanılabilir davranışlar: ignore, warn, error.\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "'%s' okunamadı."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "gitti"
 
@@ -5962,233 +6644,248 @@
 msgid "ahead %d, behind %d"
 msgstr "%d önünde, %d arkasında"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "beklenen biçim: %%(color:<renk>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "tanımlanamayan renk: %%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Tamsayı değeri şunu bekliyordu: refname:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Tamsayı değeri şunu bekliyordu: refname:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "tanımlanamayan %%(%s) argümanı: %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) argüman almıyor"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "tanımlanamayan %%(objectsize) argümanı: %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) argüman almıyor"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) argüman almıyor"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "tanımlanamayan %%(subject) argümanı: %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "%%(trailers:key=<değer>) bekleniyordu"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "bilinmeyen %%(trailers) argümanı: %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "pozitif değer şunu bekliyordu: contents:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "tanımlanamayan %%(contents) argümanı: %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "pozitif değer şurada '%s' bekliyordu: %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "şurada tanımlanamayan argüman '%s': %%(%s)"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "tanımlanamayan e-posta seçeneği: %s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "beklenen biçim: %%(align:<genişlik>,<konum>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "tanımlanamayan konum:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "tanımlanamayan genişlik:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "tanımlanamayan %%(align) argümanı: %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "pozitif genişlik %%(align) ögeciği ile birlikte bekleniyordu"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "tanımlanamayan %%(if) argümanı: %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "hatalı oluşturulmuş alan adı: %.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "bilinmeyen alan adı: %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 "bir git deposu değil; ancak '%.*s' alanı nesne verisine erişim gerektiriyor"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "biçim: %%(if) ögeciği bir %%(then) ögeciği olmadan kullanıldı"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "biçim: %%(then) ögeciği bir %%(if) ögeciği olmadan kullanıldı"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "biçim: %%(then) ögeciği birden çok kez kullanıldı"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "biçim: %%(then) ögeciği %%(else) ögeciğinden sonra kullanıldı"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "biçim: %%(else) ögeciği bir %%(if) ögeciği olmadan kullanıldı"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "biçim: %%(else) ögeciği bir %%(then) ögeciği olmadan kullanıldı"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "biçim: %%(else) ögeciği birden çok kez kullanıldı"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "biçim: %%(end) ögeciği eş ögeciği olmadan kullanıldı"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "hatalı oluşturulmuş biçim dizisi %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "dal yok, %s yeniden temellendiriliyor"
+msgid "(no branch, rebasing %s)"
+msgstr "(dal yok, %s yeniden temellendiriliyor)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "dal yok, ayrık HEAD %s yeniden temellendiriliyor"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(dal yok, ayrık HEAD %s yeniden temellendiriliyor)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "dal yok, ikili arama %s üzerinde başladı"
+msgid "(no branch, bisect started on %s)"
+msgstr "(dal yok, ikili arama %s üzerinde başladı)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "dal yok"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD, %s konumunda ayrıldı)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD, %s ögesinden ayrıldı)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(dal yok)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "eksik nesne %s (%s için)"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer %s üzerinde başarısız oldu (%s için)"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "'%s' konumunda hatalı oluşturulmuş nesne"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "bozuk ada iye %s başvurusu yok sayılıyor"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "bozuk başvuru %s yok sayılıyor"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "biçim: %%(end) ögeciği eksik"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "hatalı oluşturulmuş nesne adı %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "'%s' bir işlemeye işaret etmeli"
@@ -6238,51 +6935,51 @@
 msgid "ignoring dangling symref %s"
 msgstr "sarkan sembolik başvuru %s yok sayılıyor"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "%s başvurusu için olan günlükte %s sonrasında boşluk var"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr ""
 "%s başvurusu için olan günlük %s konumunda beklenmedik bir biçimde sonlandı"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "%s için olan günlük boş"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "hatalı ada iye '%s' başvurusunu güncelleme reddediliyor"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "'%s' başvurusu için update_ref başarısız oldu: %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "'%s' başvurusu için birden çok güncellemeye izin verilmiyor"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "başvuru güncellemeleri karantina ortamı içinde yasak"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "başvuru güncellemeleri kanca tarafından iptal edildi"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' mevcut; '%s' oluşturulamıyor"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "'%s' ve '%s' aynı anda işlenemiyor"
@@ -6346,12 +7043,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "dizginin '%s' değerinde '*' yok"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "kaynak başvuru belirteci %s başka hiçbir şeyle eşleşmiyor"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "kaynak başvuru belirteci %s birden fazlası ile eşleşiyor"
@@ -6360,7 +7057,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6384,7 +7081,7 @@
 "Hiçbiri işe yaramadı, biz de bıraktık. Başvuruyu tam olarak "
 "nitelendirmelisiniz."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6395,7 +7092,7 @@
 "'%s:refs/heads/%s' konumuna iterek yeni bir dal mı\n"
 "oluşturmak istediniz?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6406,7 +7103,7 @@
 "'%s:refs/tags/%s' konumuna iterek yeni bir etiket mi\n"
 "oluşturmak istediniz?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6417,7 +7114,7 @@
 "'%s:refs/tags/%s' konumuna iterek yeni bir ağaç mı\n"
 "etiketlemek istediniz?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6428,114 +7125,114 @@
 "'%s:refs/tags/%s' konumuna iterek yeni ikili bir nesne mi\n"
 "etiketlemek istediniz?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s dala çözülemiyor"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "'%s' silinemiyor: uzak başvuru yok"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "birden çok hedef başvuru belirteci %s eşleşmesi"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "hedef başvurusu %s birden çok kaynaktan alıyor"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD bir dala işaret etmiyor"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "böyle bir dal yok: '%s'"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "'%s' dalı için üstkaynak yapılandırılmamış"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "üstkaynak dalı '%s' bir uzak izleme dalı olarak depolanmıyor"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "'%s' itme hedefinin ('%s' uzak konumunda) yerel izleme dalı yok"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "'%s' dalının itme için uzak konumu yok"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "'%s' için olan başvuru belirteçleri '%s' içermiyor"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "itilecek bir hedef yok (push.default: 'nothing')"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "tek bir konuma 'simple' itme çözülemiyor"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "%s uzak başvurusu bulunamadı"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Eğlenceli başvuru '%s' yerel olarak yok sayılıyor"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Dalınız '%s' temelli; ancak üstkaynak kaybolmuş.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (düzeltmek için \"git branch --unset-upstream\" kullan)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Dalınız '%s' ile güncel.\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Sizin dalınız ve '%s' başka işlemelere başvuruyor.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (ayrıntılar için \"%s\" kullanın)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Dalınız '%s' dalından %d işleme ileride.\n"
 msgstr[1] "Dalınız '%s' dalından %d işleme ileride.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (yerel işlemelerinizi yayımlamak için \"git push\" kullanın)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6543,11 +7240,11 @@
 msgstr[0] "Dalınız '%s' dalından %d işleme geride ve ileri sarılabilir.\n"
 msgstr[1] "Dalınız '%s' dalından %d işleme geride ve ileri sarılabilir.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (yerel dalınızı güncellemek için \"git pull\" kullanın)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6562,11 +7259,11 @@
 "Sizin dalınız ve '%s' birbirinden uzaklaşmış ve sırasıyla\n"
 "her birinde %d ve %d işleme var.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (uzak dalı kendi dalınıza birleştirmek için \"git pull\" kullanın)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "beklenen nesne adı '%s' ayrıştırılamıyor"
@@ -6586,96 +7283,96 @@
 msgid "replace depth too high for object %s"
 msgstr "%s nesnesi için değiştirme derinliği pek yüksek"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "hasar görmüş MERGE_RR"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "rerere kaydı yazılamıyor"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "'%s' yazılırken hatalar vardı (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "'%s' floş yapılamadı"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "'%s' içindeki çakışan parçalar ayrıştırılamadı"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "'%s' üzerinde utime() başarısız"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "'%s' yazılamadı"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' bir önceki çözüm kullanılarak hazırlama alanına alındı"
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "'%s' için çözüm kaydedildi."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "'%s' bir önceki çözüm kullanılarak çözüldü."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "'%s' başıboşunun bağlantısı kesilemiyor"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "'%s' için öngörüntü kaydedildi"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "'%s' dizini oluşturulamadı"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "'%s' içindeki çakışan durum güncellenemedi"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "'%s' için hatırlanan çözüm yok"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "'%s' bağlantısı kesilemiyor"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "'%s' için öngörüntü güncellendi"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "'%s' için çözüm unutuldu\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "rr-cache dizini açılamıyor"
 
@@ -6683,43 +7380,38 @@
 msgid "could not determine HEAD revision"
 msgstr "HEAD revizyonu saptanamadı"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "%s ögesinin ağacı bulunamadı"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<paketdosyası> artık desteklenmiyor"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "--diff-merges için bilinmeyen değer: %s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "geçerli dalınız bozuk gibi görünüyor"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "geçerli dalınız '%s' içinde henüz bir işleme yok"
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L, -p ve -s dışında başka diff biçimlerini henüz desteklemiyor"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "/dev/null açılamadı"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "async iş parçacığı oluşturulamadı: %s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6728,33 +7420,41 @@
 "'%s' kancası yok sayıldı; çünkü bir çalıştırılabilir olarak ayarlanmamış.\n"
 "Bu uyarıyı 'git config advice.ignoredHook false' ile kapatabilirsiniz."
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "uzak konum açım durumu okunurken beklenmedik floş paketi"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "uzak konum açım durumu ayrıştırılamadı: %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "uzak konum açımı başarısız: %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "itme sertifikası imzalanamadı"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack: getirme altişlemi çatallanamıyor"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "itme pazarlığı başarısız; yine de itme olmadan sürdürülüyor"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "alıcı uç bu deponun sağlama algoritmasını desteklemiyor"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "alıcı uç --signed itmeyi desteklemiyor"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -6762,47 +7462,47 @@
 "alıcı uç --signed itmeyi desteklemediğinden dolayı bir itme sertifikası "
 "gönderilmiyor"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "alıcı uç --atomic itmeyi desteklemiyor"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "alıcı uç itme seçeneklerini desteklemiyor"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "geçersiz işleme iletisi temizleme kipi '%s'"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "'%s' silinemedi"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "'%s' kaldırılamadı"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "geri al"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "seç-al"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "yeniden temellendirme"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "bilinmeyen eylem: %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6810,7 +7510,7 @@
 "çakışmaları çözdükten sonra doğrusu verilen yolları 'git add <yollar>'\n"
 "veya 'git rm <yollar>' ile imleyin"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6820,43 +7520,43 @@
 "veya 'git rm <yollar>' ile imleyin ve çıkan sonucu\n"
 "'git commit' ile işleyin"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "'%s' kilitlenemedi"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "şuraya yazılamadı: '%s'"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "satır sonu şuraya yazılamadı: '%s'"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "'%s' tamamlanamadı"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "%s ile yerel değişikliklerinizin üzerine yazılacaktır."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "İlerlemek için değişikliklerinizi işleyin veya zulalayın."
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: ileri sar"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Geçersiz temizlik kipi %s"
@@ -6864,65 +7564,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Yeni indeks dosyası yazılamıyor"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "önbellek ağacı güncellenemiyor"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "HEAD işlemesi çözülemedi"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "'%.*s' içinde bir anahtar yok"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "'%s' ögesinin tırnakları kaldırılamıyor"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "'%s' okuma için açılamadı"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "'GIT_AUTHOR_NAME' halihazırda verilmiş"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "'GIT_AUTHOR_EMAIL' halihazırda verilmiş"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "'GIT_AUTHOR_DATE' halihazırda verilmiş"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "bilinmeyen değişken '%s'"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "'GIT_AUTHOR_NAME' eksik"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "'GIT_AUTHOR_EMAIL' eksik"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "'GIT_AUTHOR_DATE' eksik"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6952,11 +7652,11 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "'prepare-commit-msg' başarısız oldu"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6982,7 +7682,7 @@
 "\n"
 "\tgit commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7006,338 +7706,342 @@
 "\n"
 "\tgit commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "yeni yapılan işleme aranamadı"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "yeni yapılan işleme ayrıştırılamadı"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "HEAD, işleme yapıldıktan sonra çözülemiyor"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "ayrık HEAD"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (kök işleme)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "HEAD ayrıştırılamadı"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s bir işleme değil"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "HEAD işlemesi ayrıştırılamadı"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "işleme yazarı ayrıştırılamıyor"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree bir ağaca yazamadı"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "'%s' konumundan işleme iletisi okunamıyor"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "geçersiz yazar kimliği '%s'"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "hasar görmüş yazar: tarih bilgisi eksik"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "işleme nesnesi yazılamadı"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "%s güncellenemedi"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "%s işlemesi ayrıştırılamadı"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "üst işleme %s ayrıştırılamadı"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "bilinmeyen komut: %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Bu %d işlemenin bir birleşimi."
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "düzeltmek için bir HEAD gerekiyor"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "HEAD okunamadı"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "HEAD'in işleme iletisi okunamadı"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "'%s' yazılamıyor"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Birinci işleme iletisi bu:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "%s işleme iletisi okunamadı"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "İşleme iletisi #%d bu:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "Birinci işlemenin iletisi atlanacak:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "İşleme iletisi #%d atlanacak:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Bu %d işlemenin bir birleşimi."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "'%s' yazılamıyor"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "düzeltmek için bir HEAD gerekiyor"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "HEAD okunamadı"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "HEAD'in işleme iletisi okunamadı"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "%s işleme iletisi okunamadı"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "indeks dosyanız birleştirilmemiş"
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "kök işleme düzeltilemiyor"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "%s işlemesi bir birleştirme; ancak bir -m seçeneği verilmedi."
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "%s işlemesinin %d diye bir üst ögesi yok"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "%s işlemesinin iletisi alınamıyor"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: üst işleme %s ayrıştırılamıyor"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "'%s', '%s' olarak yeniden adlandırılamadı"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "%s geri alınamadı... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "%s uygulanamadı... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "%s %s bırakılıyor -- yama içeriği halihazırda üstkaynakta\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: indeks okunamadı"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: indeks yenilenemedi"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s argüman kabul etmiyor: '%s'"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "%s için eksik argüman"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "'%s' ayrıştırılamadı"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "geçersiz satır %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "öncesinde bir işleme olmadan '%s' yapılamıyor"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "sürmekte olan bir seç-al iptal ediliyor"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "sürmekte olan bir geri al iptal ediliyor"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "lütfen bunu 'git rebase --edit-todo' kullanarak onarın."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "kullanılabilir olmayan yönerge tablosu: '%s'"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "Hiçbir işleme ayrıştırılmadı."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "bir geri al sırasında seç-al yapılamıyor"
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "bir seç-al sırasında geri al yapılamıyor"
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "%s için geçersiz değer: %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "kullanılabilir olmayan squash-onto"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "hatalı oluşturulmuş seçenekler tablosu: '%s'"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "boş işleme seti aktarıldı"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "geri al halihazırda sürüyor"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "\"git revert (--continue | %s--abort | --quit)\" deneyin"
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "seç-al halihazırda sürüyor"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "\"git cherry-pick (--continue | %s--abort | --quit)\" deneyin"
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "ardıştırıcı dizini '%s' oluşturulamadı"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "HEAD kilitlenemedi"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "süren bir seç-al veya geri al yok"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "HEAD çözülemiyor"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "daha doğmamış bir daldan iptal edilemiyor"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "'%s' açılamıyor"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "'%s' okunamıyor: %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "beklenmedik dosya sonu"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "depolanmış seç-al öncesi HEAD dosyası '%s' hasar görmüş"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "HEAD'i taşımış görünüyorsunuz. Geri sarılmıyor, HEAD'inizi denetleyin!"
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "süren bir geri al yok"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "süren bir seç-al yok"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "işleme atlanamadı"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "atlanacak bir şey yok"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7346,16 +8050,16 @@
 "İşlemeyi yaptınız mı?\n"
 "\"git %s --continue\" deneyin.\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "HEAD okunamıyor"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "'%s', '%s' konumuna kopyalanamıyor"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7374,27 +8078,27 @@
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "%s uygulanamıyor... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "%.*s birleştirilemedi"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "'%s', '%s' konumuna kopyalanamadı"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Çalıştırılıyor: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7409,11 +8113,11 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "ve indekse ve/veya çalışma ağacına değişiklikler yapıldı\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7430,90 +8134,90 @@
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "izin verilmeyen etiket adı: '%.*s'"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "sahte kök işlemesi yazılıyor"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "squash-onto yazılıyor"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "'%s' çözülemedi"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "güncel bir revizyon olmadan birleştirilemiyor"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "'%.*s' ayrıştırılamıyor"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "birleştirilecek bir şey yok: '%.*s'"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "ahtapot birleştirmesi bir [yeni kök]ün üzerinde çalıştırılamaz"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "'%s' işlemesinin işleme iletisi alınamadı"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "şunu birleştirme girişiminde bulunulamadı bile: '%.*s'"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "merge: Yeni indeks dosyası yazılamıyor"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "Kendiliğinden zulalanamıyor"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Beklenmedik zula yanıtı: '%s'"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "'%s' için dizin oluşturulamadı"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Zula kendiliğinden oluşturuldu: %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "'reset --hard' yapılamadı"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Kendiliğinden zulalama uygulandı.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "%s depolanamıyor"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7524,29 +8228,29 @@
 "Değişiklikleriniz zulada güvende.\n"
 "İstediğiniz zaman \"git stash pop\" veya \"git stash drop\" yapabilirsiniz.\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "Kendiliğinden zulalama çakışmalara neden oldu."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Kendiliğinden zulalama mevcut; yeni bir zula girdisi oluşturuluyor."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "HEAD ayrılamadı"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "HEAD'de duruldu\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "%s konumunda duruldu\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7567,58 +8271,58 @@
 "\tgit rebase --edit-todo\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Yeniden temellendiriliyor: (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "%s konumunda durdu... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "bilinmeyen komut %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "orig-head okunamadı"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "'onto' okunamadı"
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "HEAD şu konuma güncellenemedi: %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "%s başarıyla yeniden temellendirildi ve güncellendi.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "Yeniden temellendirilemiyor: Hazırlanmamış değişiklikleriniz var."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "var olmayan işleme değiştirilemiyor"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "geçersiz dosya: '%s'"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "geçersiz içerik: '%s'"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7628,50 +8332,50 @@
 "Çalışma ağacınızda işlenmemiş değişiklikleriniz var. Lütfen önce\n"
 "onları işleyin ve ardından 'git rebase --continue' yapın."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "dosya yazılamadı: '%s'"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "CHERRY_PICK_HEAD kaldırılamadı"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "Hazırlanmış değişiklikler işlenemedi."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: Bir %s seçip alınamıyor"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s hatalı revizyon"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "ilk işleme geri alınamaz"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: ele alınmayan seçenekler"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: revizyonlar hazırlanırken hata"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "yapılacak bir şey yok"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "gerekli olmayan seçim komutları atlanamadı"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "betik halihazırda yeniden düzenlenmişti"
 
@@ -7816,7 +8520,7 @@
 "Dosya sistemi sınırında duruluyor (GIT_DISCOVERY_ACROSS_FILESYSTEM "
 "ayarlanmamış)."
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7825,409 +8529,69 @@
 "core.sharedRepository dosya kipi değeri ile sorun (0%.3o).\n"
 "Dosyaların sahibinin her zaman okuma ve yazma izni olması gerekir."
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "/dev/null açılması veya açıklayıcı çoğaltılması başarısız"
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "çatallama başarısız"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "setsid başarısız"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "koni kipi olmadan sparse-index kullanılmaya çalışılıyor"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "önbellek ağacı güncellenemiyor, dolu kalınıyor"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "nesne dizini %s yok; şurayı denetleyin: .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "alternatif nesne yolu olağanlaştırılamıyor: %s"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: alternatif nesne depoları yok sayılıyor, iç içe geçme pek derin"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "nesne dizini olağanlaştırılamıyor: %s"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "alternatifler kilit dosyası fdopen yapılamıyor"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "alternatifler dosyası okunamıyor"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "yeni alternatifler dosyası yerine taşınamıyor"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "'%s' diye bir yol yok"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr ""
-"Bağlantı yapılmış çıkış olarak '%s' başvuru deposu henüz desteklenmiyor."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "Başvuru deposu '%s' yerel bir depo değil."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "başvuru deposu '%s' sığ"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "başvuru deposu '%s' aşılı"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "alternatif başvurular ayrıştırılırken geçersiz satır: %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "%<PRIuMAX>, %<PRIuMAX> sınırı üzerinden mmap yapılmaya çalışılıyor"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap başarısız"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "nesne dosyası %s boş"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "hasar görmüş gevşek nesne '%s'"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "gevşek nesne '%s' sonunda anlamsız veri"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "geçersiz nesne türü"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "%s üstbilgisi --allow-unknown-type ile açılamıyor"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "%s üstbilgisi açılamıyor"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "%s üstbilgisi paketi --allow-unknown-type ile ayrıştırılamıyor"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "%s üstbilgisi ayrıştırılamıyor"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "%s nesnesi okunamadı"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "%s yedeği %s için bulunamadı"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "%s gevşek nesnesi (%s içinde depolanıyor) hasar görmüş"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "paketlenmiş nesne %s (%s içinde depolanıyor) hasar görmüş"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "%s dosyası yazılamıyor"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "'%s' ögesine izin ayarlanamıyor"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "dosya yazım hatası"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "gevşek nesne dosyası kapatılırken hata"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr "%s depo veritabanına nesne eklemek için yetersiz izin"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "geçici dosya oluşturulamıyor"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "gevşek nesne dosyası yazılamıyor"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "yeni nesne %s söndürülemiyor (%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "%s nesnesi üzerinde deflateEnd başarısız oldu (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "%s için olan nesne kaynak verisinden dolayı kafa karışıklığı"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "%s üzerinde utime() başarısız"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "%s için nesne okunamıyor"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "hasar görmüş işleme"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "hasar görmüş etiket"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "%s indekslenirken okuma hatası"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "%s indekslenirken kısa read"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: veritabanına ekleme başarısız"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: desteklenmeyen dosya türü"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s geçerli bir nesne değil"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s geçerli bir '%s' nesnesi değil"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "%s açılamıyor"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "%s için sağlama uyuşmazlığı (%s bekleniyordu)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "%s mmap yapılamadı"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "%s üstbilgisi açılamıyor"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "%s üstbilgisi ayrıştırılamıyor"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "%s içeriği açılamıyor"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "kısa SHA1 %s belirsiz"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Adaylar:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git normalde hiçbir zaman 40 onaltılı karakterlerle biten bir başvuru\n"
-"oluşturmaz; çünkü 40 onaltılı bir başvuru, onu belirlediğiniz zaman yok\n"
-"sayılacaktır. Bu başvurular yanlışlıkla oluşturulmuş olabilir. Örneğin:\n"
-"\n"
-"\tgit switch -c $br $(git rev-parse ...)\n"
-"\n"
-"komutunda \"$br\" bir şekilde boş kalmış ve 40 onaltılı bir başvuru\n"
-"oluşturulmuş. Lütfen bu başvuruları inceleyin ve gerekirse silin. Bu "
-"iletiyi\n"
-"kapatmak için \"git config advice.objectNameWarning\" yapın."
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "'%.*s' günlüğü yalnızca şuna geri gider: %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "'%.*s' günlüğünde yalnızca %d girdi var"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "'%s' yolu disk üzerinde mevcut; ancak '%.*s' içinde değil"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"'%s' yolu mevcut; ancak '%s' değil\n"
-"İpucu: Şunu mu demek istediniz: '%.*s:%s', nam-ı diğer '%.*s:./%s'?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "'%s' yolu '%.*s' içinde mevcut değil"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"'%s' yolu indekste; ancak %d numaralı alanda değil\n"
-"İpucu: Şunu mu demek istediniz: ':%d:%s'?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"'%s' yolu indekste; ancak '%s' değil\n"
-"İpucu: Şunu mu demek istediniz: '%d:%s', nam-ı diğer ':%d:./%s'?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "'%s' yolu diskte mevcut; ancak indekste değil"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "'%s' diye bir yol yok (ne diskte ne de indekste)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "göreceli yol sözdizimi çalışma ağacı dışında kullanılamaz"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "geçersiz nesne adı: '%.*s'"
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "indeks girdisi bir dizin; ancak aralıklı değil (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/sn"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/sn"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/sn"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8235,20 +8599,20 @@
 msgstr[1] "%u bayt"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u bayt/sn"
 msgstr[1] "%u bayt/sn"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "'%s' yazma için açılamadı"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "'%s' düzenlenemedi"
@@ -8298,22 +8662,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "güncellenmiş .gitmodules'u hazırlama başarısız oldu"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "içi doldurulmamış '%s' altmodülünde"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Yol belirteci '%s' '%.*s' altmodülünde"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "hatalı --ignore-submodules argümanı: %s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8322,12 +8686,12 @@
 "%s işlemesinde '%s' yolunda bulunan altmodül, aynı adlı bir altmodülle "
 "çarpışıyor. Atlanıyor."
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "altmodül girdisi '%s' (%s) bir %s, işleme değil"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8336,36 +8700,36 @@
 "'%s' altmodülünde 'git rev-list <commits> --not --remotes -n 1' "
 "çalıştırılamadı"
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "'%s' altmodülü için işlem başarısız oldu"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "HEAD geçerli bir başvuru olarak çözülemedi."
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "'%s' altmodülü itiliyor\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "'%s' altmodülü itilemiyor\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "%s%s altmodülü getiriliyor\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "'%s' altmodülüne erişilemedi\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8374,78 +8738,78 @@
 "Altmodül getirilirken hata:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' bir git deposu olarak tanımlanamadı"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "'%s' altmodülü içinde 'git status --porcelain=2' çalıştırılamadı"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'%s' altmodülü içinde 'git status --porcelain=2' başarısız oldu"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "'%s' altmodülü içinde 'git status' başlatılamadı"
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "'%s' altmodülü içinde 'git status' çalıştırılamadı"
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "'%s' altmodülü içinde core.worktree ayarı kapatılamadı"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "'%s' altmodülüne özyinelenemedi"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "altmodül indeksi sıfırlanamadı"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "'%s' altmodülü indeksi kirli"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "'%s' altmodülü güncellenemedi."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "altmodül git dizini '%s', '%.*s' git dizini içinde"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr ""
 "relocate_gitdir birden çok çalışma ağaçlı '%s' altmodülü için desteklenmiyor"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "'%s' altmodülü adı aranamadı"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "'%s' ögesini mevcut bir git dizinine taşıma reddediliyor"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8456,65 +8820,71 @@
 "şuradan: '%s'\n"
 "şuraya: '%s'\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "ls-files şurada başlatılamadı .."
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree beklenmedik bir biçimde %d kodu ile çıktı"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "'%s', lstat yapılamadı"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "'%s' artbilgi komutunu çalıştırma başarısız oldu"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "bilinmeyen değer '%s' ('%s' anahtarı için)"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "birden çok %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "'%.*s' artbilgisi içinde boş artbilgi jetonu"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "'%s' girdi dosyası okunamadı"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "stdin'den okunamadı"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "%s dosya bilgileri alınamadı"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "%s dosyası sıradan bir dosya değil"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "%s dosyası kullanıcı tarafından yazılabilir değil"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "geçici dosya açılamadı"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "geçici dosya adı %s olarak değiştirilemedi"
@@ -8563,7 +8933,7 @@
 msgid "error while running fast-import"
 msgstr "fast-import çalıştırılırken hata"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "%s başvurusu okunamadı"
@@ -8581,7 +8951,7 @@
 msgid "invalid remote service path"
 msgstr "geçersiz uzak konum servis yolu"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "işlem protokol tarafından desteklenmiyor"
 
@@ -8590,68 +8960,72 @@
 msgid "can't connect to subservice %s"
 msgstr "%s altservisine bağlanılamıyor"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only protokolün ikinci sürümünü gerektiriyor"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "eşleşen bir 'tamam/hata' direktifi olmadan 'option'"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "tamam/hata bekleniyordu, yardımcı şunu söyledi: '%s'"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "yardımcı %s beklenmedik durumu bildirdi"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "%s yardımcısı 'dry-run' desteklemiyor"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "%s yardımcısı --signed desteklemiyor"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "%s yardımcısı --signed=if-asked desteklemiyor"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "%s yardımcısı --atomic desteklemiyor"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "%s yardımcısı --%s desteklemiyor"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "%s yardımcısı 'push-option' desteklemiyor"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper itme desteklemiyor; başvuru belirteci gerekli"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "%s yardımcısı 'force' desteklemiyor"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "fast-export çalıştırılamadı"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "fast-export çalıştırılırken hata"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8660,52 +9034,52 @@
 "Ortak başvuru yok ve hiç belirtilmemiş; bir şey yapılmayacak.\n"
 "Belki de bir dal belirtmelisiniz.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "desteklenmeyen nesne biçimi '%s'"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "başvuru listesinde hatalı oluşturulmuş yanıt: %s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) başarısız oldu"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) başarısız oldu"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "%s iş parçacığı başarısız oldu"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s iş parçacığı eklenemedi: %s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "veri kopyalama için iş parçacığı başlatılamıyor: %s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s işlemi bekleyemedi"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "%s işlemi başarısız oldu"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "veri kopyalama için iş parçacığı başlatılamıyor"
 
@@ -8724,37 +9098,41 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: Geçersiz derinlik seçeneği '%s'"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "ayrıntılar için 'git help config' içinde protocol.version'a bakın"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "sunucu seçenekleri protokol sürüm 2 veya sonrasını gerektirir"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "Sunucu, wait-for-done desteklemiyor"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "transport.color.* yapılandırması ayrıştırılamadı"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "protokol v2 desteği henüz yerine getirilmedi"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "'%s' yapılandırması için bilinmeyen değer: %s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "'%s' taşıyıcısına izin verilmiyor"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync artık desteklenmiyor"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8763,7 +9141,7 @@
 "Aşağıdaki altmodül yolları başka hiçbir uzak konumda bulunamayan\n"
 "değişiklikler içeriyor:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8790,31 +9168,31 @@
 "kullanın.\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "İptal ediliyor"
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "gereken tüm altmodüller itilemedi"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "ağaç nesnesi çok kısa"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "ağaç girdisinde hatalı oluşturulmuş kip"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "ağaç girdisinde boş dosya adı"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "ağaç dosyası çok kısa"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8823,7 +9201,7 @@
 "Çıkış ile aşağıdaki dosyalardaki yerel değişikliklerin üzerine yazılacak:\n"
 "%%sLütfen dal değiştirmeden önce değişikliklerinizi işleyin veya zulalayın."
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8832,7 +9210,7 @@
 "Çıkış ile aşağıdaki dosyalardaki yerel değişikliklerin üzerine yazılacak:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8842,7 +9220,7 @@
 "yazılacak:\n"
 "%%sLütfen birleştirmeden önce değişikliklerinizi işleyin veya zulalayın."
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8852,7 +9230,7 @@
 "yazılacak:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8861,7 +9239,7 @@
 "%s ile aşağıdaki dosyalardaki yerel değişikliklerin üzerine yazılacak:\n"
 "%%sLütfen %s yapmadan önce değişikliklerinizi işleyin veya zulalayın."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8870,7 +9248,7 @@
 "%s ile aşağıdaki dosyalardaki yerel değişikliklerin üzerine yazılacak:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8879,7 +9257,7 @@
 "Aşağıdaki dizinleri güncellemek içlerindeki izlenmeyen dosyaları kaybeder:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8888,7 +9266,7 @@
 "Çıkış ile aşağıdaki izlenmeyen çalışma ağacı dosyaları kaldırılacak:\n"
 "%%sLütfen dal değiştirmeden önce onları taşıyın veya kaldırın."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8897,7 +9275,7 @@
 "Çıkış ile aşağıdaki izlenmeyen çalışma ağacı dosyaları kaldırılacak:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8906,7 +9284,7 @@
 "Birleştirme ile aşağıdaki izlenmeyen çalışma ağacı dosyaları kaldırılacak:\n"
 "%%sLütfen birleştirmeden önce onları taşıyın veya kaldırın."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8915,7 +9293,7 @@
 "Birleştirme ile aşağıdaki izlenmeyen çalışma ağacı dosyaları kaldırılacak:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8924,7 +9302,7 @@
 "%s ile aşağıdaki izlenmeyen çalışma ağacı dosyaları kaldırılacak:\n"
 "%%sLütfen %s yapmadan önce onları taşıyın veya kaldırın."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8933,29 +9311,29 @@
 "%s ile aşağıdaki izlenmeyen çalışma ağacı dosyaları kaldırılacak:\n"
 "%%s"
 
-#: unpack-trees.c:152
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr ""
-"Çıkış ile aşağıdaki izlenmeyen çalışma ağacı dosyalarının üzerine "
-"yazılacak:\n"
-"%%sLütfen dal değiştirmeden önce onları taşıyın veya kaldırın."
-
 #: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
 "checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+"Çıkış ile aşağıdaki izlenmeyen çalışma ağacı dosyalarının üzerine "
+"yazılacak:\n"
+"%%sLütfen dal değiştirmeden önce onları taşıyın veya kaldırın."
+
+#: unpack-trees.c:156
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
 "%%s"
 msgstr ""
 "Çıkış ile aşağıdaki izlenmeyen çalışma ağacı dosyalarının üzerine "
 "yazılacak:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8965,7 +9343,7 @@
 "yazılacak:\n"
 "%%sLütfen birleştirmeden önce onları taşıyın veya kaldırın."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8975,7 +9353,7 @@
 "yazılacak:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8984,7 +9362,7 @@
 "%s ile aşağıdaki izlenmeyen çalışma ağacı dosyalarının üzerine yazılacak:\n"
 "%%sLütfen %s yapmadan önce onları taşıyın veya kaldırın."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8993,12 +9371,12 @@
 "%s ile aşağıdaki izlenmeyen çalışma ağacı dosyalarının üzerine yazılacak:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "'%s' girdisi '%s' ile üst üste biniyor. Bağlanamıyor."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9007,7 +9385,7 @@
 "Altmodül güncellenemiyor:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -9017,7 +9395,7 @@
 "Aşağıdaki yollar güncel değil ve seyrek dizgilere rağmen terk edilmiş:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -9026,7 +9404,7 @@
 "Aşağıdaki yollar birleştirilmemiş ve seyrek dizgilere rağmen terk edilmiş:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -9037,12 +9415,12 @@
 "güncellenmedi:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "İptal ediliyor\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -9051,11 +9429,11 @@
 "Yukarıdaki yolları onardıktan sonra 'git sparse-checkout reapply' yapmak "
 "isteyebilirsiniz.\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Dosyalar güncelleniyor"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -9065,11 +9443,16 @@
 "olmayan dosya sisteminde BÜYÜK/küçük harf duyarlı yollar) ve aynı çarpışan\n"
 "gruptan yalnızca bir tanesi çalışma ağacında:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "İndeks bayrakları güncelleniyor"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr "çalışma ağacı ve izlenmeyen işlemenin yinelenmiş girdileri var: %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "getir argümanlarından sonra floş bekleniyordu"
 
@@ -9106,72 +9489,102 @@
 msgid "Fetching objects"
 msgstr "Nesneler getiriliyor"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "'%s' okunamadı"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "ana çalışma ağacındaki '%s' depo dizini değil"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "'%s' dosyası çalışma ağacı konumuna olan tam yolu içermiyor"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' mevcut değil"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' bir .git dosyası değil, hata kodu %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' şuna geri işaret etmiyor: '%s'"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "bir dizin değil"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git bir dosya değil"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr ".git dosyası bozuk"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr ".git dosyası doğru değil"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "geçerli bir yol değil"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "depo konumu bulunamıyor: .git bir dosya değil"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "depo konumu bulunamıyor: .git dosyası bir depoya başvurmuyor"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "depo konumu bulunamıyor: .git dosyası bozuk"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "okunamayan gitdir"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "doğru olmayan gitdir"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "geçerli bir dizin değil"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "gitdir dosyası mevcut değil"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "gitdir dosyası (%s) okunamıyor"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "az okundu (%<PRIuMAX> bayt bekleniyordu, %<PRIuMAX> okundu)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "geçersiz gitdir dosyası"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "gitdir dosyası var olmayan bir konuma işaret ediyor"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9220,11 +9633,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (hazırlığı bitirmek için \"git rm <dosya>...\" kullanın)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "İşlenecek değişiklikler:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "İşleme için hazırlanmamış değişiklikler:"
 
@@ -9324,22 +9737,22 @@
 msgid "untracked content, "
 msgstr "izlenmeyen içerik, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Zulanızda şu anda %d girdi var"
 msgstr[1] "Zulanızda şu anda %d girdi var"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Değiştirilen; ancak güncellenmeyen altmodüller:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "İşlenecek altmodül değişiklikleri:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9347,7 +9760,7 @@
 "Yukarıdaki satırı değiştirmeyin veya kaldırmayın.\n"
 "Altındaki her şey yok sayılacaktır."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9358,107 +9771,107 @@
 "Dal önünde/arkasında değerlerini hesaplama %.2f saniye sürdü.\n"
 "Bundan kaçınmak için --no-ahead-behind kullanabilirsiniz.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Birleştirilmemiş yollarınız var."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (çakışmaları onar ve \"git commit\" çalıştır)"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (birleştirmeyi iptal etmek için \"git merge --abort\" kullanın)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tüm çakışmalar onarıldı; ancak siz hâlâ birleştiriyorsunuz."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (birleştirmeyi sonuçlandırmak için \"git commit\" kullanın)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Bir 'am' oturumunun tam ortasındasınız."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "Mevcut yama boş."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (çakışmaları onar ve ardından \"git am --continue\" çalıştır)"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git am --skip\" kullanın"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (ilk dalı eski durumuna getirmek için \"git am --abort\" kullanın)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo eksik"
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "Yerine getirilen bir komut yok."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Son yerine getirilen komut (toplamda %d komut):"
 msgstr[1] "Son yerine getirilen komutlar (toplamda %d komut):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (ek bilgi için %s dosyasına bakın)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "Kalan komut yok."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Sıradaki yerine getirilecek komut (%d kalan komut):"
 msgstr[1] "Sıradaki yerine getirilecek komutlar (%d kalan komut):"
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (görüntüleme ve düzenleme için \"git rebase --edit-todo\" kullanın)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Şu anda '%s' dalını '%s' üzerine yeniden temellendiriyorsunuz."
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Şu anda yeniden temellendirme yapmaktasınız."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (çakışmaları çözün ve ardından \"git rebase --continue\" çalıştır)"
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git rebase --skip\" kullanın)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (ilk dalı çıkış yapmak için \"git rebase --abort\" kullanın)"
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (tüm çakışmalar onarıldı: \"git rebase --continue\" çalıştır)"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9466,146 +9879,154 @@
 "Şu anda '%s' dalını '%s' üzerine yeniden temellendirirken bir işlemeyi "
 "parçalara bölüyorsunuz."
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 "Şu anda yeniden temellendirme sırasında bir işlemeyi parçalara bölüyorsunuz."
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Çalışma dizininiz temizlendiğinde \"git rebase --continue\" çalıştır)"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Şu anda '%s' dalını '%s' üzerine yeniden temellendirirken bir işlemeyi "
 "düzenliyorsunuz."
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "Şu anda yeniden temellendirme sırasında bir işlemeyi düzenliyorsunuz."
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (geçerli işlemeyi değiştirmek için \"git commit --amend\" kullanın)"
 
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (değişikliklerinizden memnunsanız \"git rebase --continue\" kullanın)"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Seç-al şu anda sürmekte."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Şu anda %s işlemesini seç-al yapıyorsunuz."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (çakışmaları onar ve \"git cherry-pick --continue\" çalıştır)"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (sürdürmek için \"git cherry-pick --continue\" çalıştır)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (tüm çakışmalar onarıldı: \"git cherry-pick --continue\" çalıştır)"
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git cherry-pick --skip\" kullanın)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (seç-al işlemini iptal için \"git cherry-pick --abort\" kullanın)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Geriye al şu anda sürmekte."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Şu anda %s işlemesini geri alıyorsunuz."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (çakışmaları onar ve \"git revert --continue\" çalıştır)"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (sürdürmek için \"git revert --continue\" çalıştır)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (tüm çakışmalar onarıldı: \"git revert --continue\" çalıştır)"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git revert --skip\" kullanın)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (geri al işlemini iptal için \"git revert --abort\" kullanın)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Şu anda ikili arama yapıyorsunuz, '%s' dalından başlandı."
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Şu anda ikili arama yapıyorsunuz"
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (ilk dala dönmek için \"git bisect reset\" kullanın)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "İzlenen dosyaların %%%d mevcut olduğu aralıklı bir çıkıştasınız."
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "Üzerinde bulunulan dal: "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "şunun üzerine etkileşimli yeniden temellendirme sürmekte: "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "şunun üzerine yeniden temellendirme sürmekte: "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD şurada ayrıldı: "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD şundan ayrıldı: "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Şu anda bir dal üzerinde değil."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "İlk işleme"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "Henüz bir işleme yok"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "İzlenmeyen dosyalar"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Yok sayılan dosyalar"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9616,32 +10037,32 @@
 "bunu hızlandırabilir; ancak yeni dosyaları eklemeyi unutmamanız\n"
 "konusunda dikkatli olmalısınız (ek bilgi için 'git help status')."
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "İzlenmeyen dosyalar listelenmiyor%s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (izlenmeyen dosyaları göstermek için -u seçeneğini kullanın)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Değişiklik yok"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "İşlemeye eklenen değişiklik yok (\"git add\" ve/veya \"git commit -a\" "
 "kullanın)\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "İşlemeye eklenen değişiklik yok\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9650,70 +10071,88 @@
 "işlemeye bir şey eklenmedi; ancak izlenmeyen dosyalar var (izlemek için\n"
 "\"git add\" kullanın)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "işlemeye bir şey eklenmedi; ancak izlenmeyen dosyalar var\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "İşlenecek bir şey yok (dosyalar oluşturun/kopyalayın ve izlemek için \"git "
 "add\" kullanın)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "İşlenecek bir şey yok\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "İşlenecek bir şey yok (izlenmeyen dosyaları göstermek için -u kullanın)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "İşlenecek bir şey yok, çalışma ağacı temiz\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "Şurada henüz bir işleme yok: "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (dal yok)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "değişik"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "şunun arkasında: "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "şunun önünde: "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "%s yapılamıyor: Hazırlanmamış değişiklikleriniz var."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "Ek olarak, indeksiniz işlenmemiş değişiklikler içeriyor."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "%s yapılamıyor: İndeksiniz işlenmemiş değişiklikler içeriyor."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "IPC komutu gönderilemedi"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "IPC yanıtı okunamadı"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "accept_thread '%s' başlatılamadı"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "'%s' için worker[0] başlatılamadı"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "'%s' bağlantısı kesilemedi"
@@ -9722,130 +10161,135 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<seçenekler>] [--] <yol-blrtç>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "%cx '%s' chmod yapılamıyor"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "beklenmedik diff durumu %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "dosyaları güncelleme başarısız"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "kaldır: '%s'\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "İndeksi yeniledikten sonra hazırlanmamış değişiklikler:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "İndeks okunamadı"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "'%s' yazım için açılamadı."
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "Yama yazılamadı"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "yamayı düzenleme başarısız"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "'%s' dosya bilgileri alınamadı"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Boş yama. İptal edildi."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "'%s' uygulanamadı"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Aşağıdaki yollar sizin .gitignore dosyalarınızın biri tarafından yok "
 "sayılıyor:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "sınama turu"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "etkileşimli seçim"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "parçaları etkileşimli olarak seç"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "geçerli diff'i düzenle ve uygula"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "başka türlü yok sayılan dosyaların eklenmesine izin ver"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "izlenen dosyaları güncelle"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "izlenen dosyaların satır sonlarını yeniden olağanlaştır (-u ima eder)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "yalnızca yolun sonra ekleneceği gerçeğinin kaydını yaz"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "tüm izlenen/izlenmeyen dosyalardan değişiklikleri ekle"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "çalışma ağacında kaldırılan yolları yok say (--no-all ile aynı)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "ekleme, yalnızca indeksi yenile"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr "yalnızca hatalardan dolayı eklenemeyen dosyaları atla"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "dosyaların -eksik olsalar bile- sınama turunda yok sayılıp sayılmadığını "
 "denetle"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "listelenen dosyaların çalıştırılabilir kısımlarını geçersiz kıl"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "gömülü bir depo eklenirken uyar"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "'git stash -p' için arka uç"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9876,12 +10320,12 @@
 "\n"
 "Ek bilgi için: \"git help submodule\"."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "gömülü git deposu ekleniyor: %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9891,49 +10335,53 @@
 "Bu iletiyi 'git config advice.addIgnoredFile false'\n"
 "kullanarak kapatabilirsiniz."
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "dosya ekleme başarısız"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run, --interactive/--patch ile uyumsuz"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file, --interactive/--patch ile uyumsuz"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file, --edit ile uyumsuz"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A ve -u karşılıklı olarak uyumlu"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr ""
 "--ignore-missing seçeneği yalnızca --dry-run seçeneği ile birlikte "
 "kullanılabilir"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod param '%s' ya -x ya da +x olmalıdır"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file yol belirteci argümanları ile uyumsuz"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul, --pathspec-from-file gerektiriyor"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Hiçbir şey belirtilmedi, hiçbir şey eklenmedi.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -9943,111 +10391,111 @@
 "Bu iletiyi 'git config advice.addEmptyPathspec false'\n"
 "yaparak kapatabilirsiniz."
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "yazar betiği ayrıştırılamadı"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' applypatch-msg kancası tarafından silindi"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Hatalı oluşturulmuş girdi satırı: '%s'."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Notların '%s' konumundan '%s' konumuna kopyalanması başarısız"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "fseek başarısız oldu"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "'%s' yaması ayrıştırılamadı"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Bir kerede yalnızca bir StGIT yama serisi uygulanabilir"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "geçersiz zaman damgası"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "geçersiz tarih satırı"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "geçersiz zaman dilimi ofseti"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Yama biçimi algılaması başarısız."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "'%s' dizini oluşturulamadı"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "Yamalar parçalanıp bölünemedi."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Bu sorunu çözdüğünüzde \"%s --continue\" çalıştırın."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Eğer bu yamayı atlamayı yeğliyorsanız \"%s --skip\" çalıştırın."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "İlk dalı eski durumuna getirip yamalamayı durdurmak için \"%s --abort\" "
 "çalıştır."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Yama format=flowed ile gönderildi; satır sonlarındaki boşluk kaybolmuş "
 "olabilir."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "Yama boş."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "%s işlemesinde yazar satırı eksik"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "geçersiz tanımlama satırı: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Depo 3 yönlü birleştirmeye geri çekilebilme için gereken ikili nesnelere iye "
 "değil."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Bir temel ağacını yeniden yapmak için indeks bilgisi kullanılıyor..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10055,24 +10503,24 @@
 "Yamanızı elle mi düzenlediniz?\n"
 "Kendi indeksinde kaydı yazılan ikili nesnelere uygulanamıyor."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Temeli yamalamaya ve 3 yönlü birleştirmeye geri çekiliniyor..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Değişiklikler birleştirilemedi."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "boş bir geçmişe uygulanıyor"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "sürdürülemiyor: %s yok"
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "İşleme gövdesi:"
 
@@ -10080,41 +10528,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Uygula? [y]evet/[n]hayır/düz[e]nle/[v]yamayı görüntüle/tümünü k[a]bul et: "
 
-#: builtin/am.c:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "indeks dosyası yazılamıyor"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Kirli indeks: Yamalar uygulanamıyor (kirli: %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Uygulanıyor: %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Değişiklik yok -- Yama halihazırda uygulandı."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Yama şurada başarısız oldu: %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Başarısız olan yamayı görmek için 'git am --show-current-patch=diff' kullanın"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10124,7 +10572,7 @@
 "Hazırlanacak başka bir şey kalmadıysa büyük olasılıkla başka bir şey\n"
 "aynı değişiklikleri uygulamış olabilir; bu yamayı atlamak isteyebilirsiniz."
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10137,17 +10585,17 @@
 "Bir dosyanın \"onlar sildi\" olduğunu kabul etmek için dosya ile 'git rm' "
 "yapabilirsiniz."
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "'%s' nesnesi ayrıştırılamadı."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "indeks temizlenemedi"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10155,156 +10603,160 @@
 "Son 'am' başarısızlığından bu yana HEAD'i hareket ettirmiş görünüyorsunuz.\n"
 "ORIG_HEAD'e geri sarılmıyor."
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Geçersiz --patch-format değeri: %s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "--show-current-patch için geçersiz değer: %s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s, --show-current-patch=%s ile uyumsuz"
 
-#: builtin/am.c:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<seçenekler>] [(<mbox> | <posta-dizin>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<seçenekler>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "etkileşimli olarak çalıştır"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "tarihi seçenek -- no-op"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "gerekirse 3 yönlü birleştirmeye geri çekilmeye izin ver"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "sessiz ol"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "işleme iletisine bir Signed-off-by satırı ekle"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "utf8 olarak yeniden kodla (öntanımlı)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "'git-mailinfo'ya -k bayrağını geçir"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "'git-mailinfo'ya -b bayrağını geçir"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "'git-mailinfo'ya -m bayrağını geçir"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "'git-mailsplit'e mbox biçimi için --keep-cr bayrağını geçir"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "'git-mailsplit'e 'am.keepcr'dan bağımsız olarak --keep-cr bayrağını geçirme"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "bir kesim çizgisinden önceki her şeyi çıkar"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "git-mailinfo içerisinden geçir"
+
+#: 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
 msgid "pass it through git-apply"
 msgstr "git-apply aracılığıyla geçir"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "biçim"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "yama biçimi"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "yama başarısız olduğunda hata iletisini geçersiz kıl"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "bir çakışmayı çözdükten sonra yamaları uygulamayı sürdür"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "--continue eşanlamlıları"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "geçerli yamayı atla"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr "ilk dalı eski durumuna getir ve yamalama işlemini iptal et"
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "orijinal dalı eski durumuna getir ve yamalama işlemini iptal et"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
 msgstr "yamalama işlemini iptal et; ancak HEAD'i olduğu yerde bırak"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "uygulanmakta olan yamayı göster"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "işleyici tarihi hakkında yalan söyle"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "yazar tarihi için geçerli zaman damgasını kullan"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "GPG imzalı işlemeler"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(git-rebase için iç kullanım)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10312,17 +10764,17 @@
 "-b/--binary seçeneği uzunca bir süredir düzgün çalışmıyordu ve\n"
 "yakında kaldırılacak. Lütfen artık kullanmayın."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "indeks okunamadı"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "Bir önceki yeniden temellendirme dizini %s hâlâ mevcut; ancak mbox verildi."
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10331,11 +10783,11 @@
 "Başıboş %s dizini bulundu.\n"
 "Kaldırmak için \"git am --abort\" kullanın."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "İlerlemekte olan bir çözüm işlemi yok, sürdürme yapmıyoruz."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "etkileşimli kip yamanın komut satırında olmasını gerektirir"
 
@@ -10378,27 +10830,11 @@
 msgstr "git bisect--helper --bisect-reset [<işleme>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <durum> <revizyon> <iyi_terim> "
-"<kötü_terim>"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <komut> <iyi_terim> "
-"<kötü_terim>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr ""
 "git bisect--helper --bisect-next-check <iyi_terim> <kötü_terim> [<terim>]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10406,7 +10842,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10416,89 +10852,93 @@
 "=<terim>] [--no-checkout] [--first-parent] [<kötü> [<iyi>...]] [--] "
 "[<yollar>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-state (good|old) [<rev>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <dosyaadı>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<rev>|<erim>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "'%s' dosyası '%s' kipinde açılamıyor"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "'%s' dosyasına yazılamadı"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' geçerli bir terim değil"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "'%s yerleşik komutu bir terim olarak kullanılamıyor"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "'%s' teriminin anlamı değiştirilemiyor"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "lütfen iki değişik terim kullanın"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "İkili arama yapılmıyor.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' geçerli bir işleme değil"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr ""
 "Orijinal HEAD '%s' çıkışı yapılamadı. 'git bisect reset <işleme>' deneyin."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Hatalı bisect_write argümanı: %s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "'%s' revizyonunun oid'si alınamadı"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "'%s' dosyası açılamadı"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Geçersiz komut: Şu anda bir %s/%s ikili aramasındasınız"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10507,7 +10947,7 @@
 "Bana en azından bir %s ve %s revizyonu vermeniz gerekiyor.\n"
 "Bunun için \"git bisect %s\" ve \"git bisect %s\" kullanabilirsiniz."
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10518,7 +10958,7 @@
 "Bundan sonra bana en azından bir %s ve %s revizyonu vermeniz gerekiyor.\n"
 "Bunun için \"git bisect %s\" ve \"git bisect %s\" kullanabilirsiniz."
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "yalnızca bir %s işlemesi ile ikili arama yapılıyor"
@@ -10527,15 +10967,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Emin misiniz [Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "hiçbir terim tanımlanmadı"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10544,7 +10984,7 @@
 "Mevcut terimleriniz eski durum için %s ve\n"
 "yeni durum için %s.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10553,52 +10993,52 @@
 "'git bisect terms' için geçersiz argüman %s.\n"
 "Desteklenen seçenekler: --term-good|--term-old ve --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "revizyonda gezinme ayarlaması başarısız oldu\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "'%s' iliştirme için açılamadı"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "'' geçerli bir terim değil"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "tanımlanamayan seçenek: '%s'"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' geçerli bir revizyon değil gibi görünüyor"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "hatalı HEAD - Bana bir HEAD gerek"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr "'%s' çıkış yapımı başarısız. 'git bisect start <geçerli-dal>' deneyin."
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "cg-seek yapılmış bir ağaçta ikili arama yapılmayacak"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "hatalı HEAD - tuhaf sembolik başvuru"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "geçersiz başvuru: '%s'"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "\"git bisect start\" ile başlamalısınız\n"
 
@@ -10606,93 +11046,106 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Bunu sizin yerinize benim yapmamı ister misiniz [Y/n]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Lütfen '--bisec-state'i en az bir argümanla çalıştırın"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "'git bisect %s' yalnızca bir argüman alabilir."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Hatalı revizyon girdisi: %s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Hatalı revizyon girdisi (bir işleme değil): %s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "İkili arama yapmıyoruz."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? ney ney?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "'%s' dosyası yeniden oynatım için okunamıyor"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "ikili arama durumunu sıfırla"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "ikili arama durumunu BISECT_LOG içine yaz"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "bir ikili arama durumundaki terimleri denetle ve ayarla"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "iyi veya kötü terimlerin olup olmadığını denetle"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "ikili arama terimlerini yazdır"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "ikili arama oturumunu başlat"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "bir sonraki ikili arama işlemesini bul"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"bir sonraki ikili arama durumunu doğrula ve bir sonraki ikili arama "
-"işlemesini çıkış yap"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "başvurunun (veya başvuruların) durumunu imle"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "şu ana kadarki ikili arama durumunu listele"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "verilen dosyadan ikili arama işlemini yeniden oynat"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "çıkış için birkaç işlemeyi atla"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "BISECT_WRITE için günlük yok"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset bir argüman veya işleme gerektirmiyor"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write 4 veya 5 argüman gerektiriyor"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms 3 argüman gerektiriyor"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check 2 veya 3 argüman gerektiriyor"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 0 veya 1 argüman gerektiriyor"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next 0 argüman gerektiriyor"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next 0 argüman gerektiriyor"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log 0 argüman gerektiriyor"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "hiçbir günlük dosyası verilmedi"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10711,138 +11164,141 @@
 msgid "must end with a color"
 msgstr "bir renk ile bitmeli"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "color.blame.repeatedLines içinde geçersiz renk '%s'"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "blame.coloring için geçersiz değer"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "yok saymak için %s revizyonu bulunamıyor"
 
-#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "genel bakış girdilerini buldukça artan biçimde göster"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "genel bakış girdilerini biz buldukça artan biçimde göster"
 
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
 msgstr "sınır işlemeleri için nesne adlarını gösterme (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "kök işlemelerini sınır olarak varsayma (Öntanımlı: Kapalı)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "kök işlemelerini sınır olarak değerlendirme (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:872
-msgid "Show work cost statistics"
+#: builtin/blame.c:870
+msgid "show work cost statistics"
 msgstr "iş maliyet istatistiklerini göster"
 
-#: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "durum bildirmeyi zorla"
+#: 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
+msgid "force progress reporting"
+msgstr "durum belirtmeyi zorla"
 
-#: builtin/blame.c:874
-msgid "Show output score for blame entries"
+#: builtin/blame.c:872
+msgid "show output score for blame entries"
 msgstr "genel bakış girdileri için çıktı skorunu göster"
 
-#: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
 msgstr "orijinal dosya adını göster (Öntanımlı: Otomatik)"
 
-#: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
 msgstr "orijinal satır numarasını göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
 msgstr "makine işlemesi için tasarlanmış bir biçimde göster"
 
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
 msgstr "okunabilir biçimde her satır için işleme bilgisi ile göster"
 
-#: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "git-annotate ile aynı çıktı kipini kullan (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
 msgstr "ham zaman damgasını göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
 msgstr "uzun işleme SHA1'ini göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
+#: builtin/blame.c:880
+msgid "suppress author name and timestamp (Default: off)"
 msgstr "yazar adını ve zaman damgasını gizle (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
+#: builtin/blame.c:881
+msgid "show author email instead of name (Default: off)"
 msgstr "yazar adı yerine e-postasını göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
 msgstr "boşluk ayrımlarını yok say"
 
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "revizyon"
 
-#: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
 msgstr "suçlarken <revizyon>'u yok say"
 
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
 msgstr "<dosya>'dan olan revizyonları yok say"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:885
 msgid "color redundant metadata from previous line differently"
 msgstr "bir önceki dosyadan gereksiz üstveriyi başka biçimde renklendir"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "satırları yaşına göre renklendir"
 
-#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
 msgstr "daha iyi eşleşme bulmak için ek döngüler harca"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "git-rev-list çağırma yerine <dosya>'dan olan revizyonları kullan"
 
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
 msgstr "<dosya>'nın içeriğini son görüntü olarak kullan"
 
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "skor"
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "satır kopyalarını dosyaların içinde ve aralarında ara"
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "satır hareketlerini dosyaların içinde ve aralarında ara"
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr "satır kopyalarını dosyalar içinde ve arasında ara"
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr "satır hareketlerini dosyalar içinde ve arasında ara"
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr "erim"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 "Yalnızca <başlangıç>,<bitiş> satır erimini veya :<işlevadı> işlevini işle"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress, --incremental veya okunabilir biçimlerle kullanılamaz"
 
@@ -10854,18 +11310,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "4 yıl 11 ay önce"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "%s dosyasında yalnızca %lu satır var"
 msgstr[1] "%s dosyasında yalnızca %lu satır var"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Genel bakış satırları"
 
@@ -10933,117 +11389,107 @@
 msgid "Update of config-file failed"
 msgstr "config-file güncellemesi başarısız"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "-a, -d ile kullanılamıyor"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "HEAD için işleme nesnesi aranamadı"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "'%s' dalı silinemiyor, şurada çıkış yapılmış: '%s'"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "uzak izleme dalı '%s' bulunamadı"
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "'%s' dalı bulunamadı"
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Uzak izleme dalı '%s' silinirken hata"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "'%s' dalı silinirken hata"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Uzak izleme dalı %s silindi (%s idi).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "%s dalı silindi (%s idi).\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "biçim dizisi ayrıştırılamıyor"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "HEAD çözülemedi"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s), refs/heads/ dışına işaret ediyor"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "%s dalı %s konumunda yeniden temellendiriliyor"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "%s dalı %s konumunda ikili aranıyor"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "bir dalın üzerinde değilken geçerli dal kopyalanamaz"
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr "bir dalın üzerinde değilken geçerli dal yeniden adlandırılamaz"
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Geçersiz dal adı: '%s'"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Dal yeniden adlandırması başarısız"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Dal kopyalaması başarısız"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Yanlış adlandırılan '%s' dalının bir kopyası oluşturuldu"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Yanlış adlandırılan '%s' dalı yeniden adlandırıldı"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Dal %s olarak yeniden adlandırıldı; ancak HEAD güncellenmedi!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Dal yeniden adlandırıldı; ancak config-file güncellemesi başarısız"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Dal kopyalandı; ancak config-file güncellemesi başarısız"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11054,180 +11500,180 @@
 "\t%s\n"
 "'%c' ile başlayan satırlar çıkarılacaktır.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Genel seçenekler"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "sağlamayı ve konuyu göster, üstkaynak dalı için iki kez ver"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "bilgi iletilerini gizle"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "izleme kipini ayarla (bilgi için: git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "kullanma"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "üstkaynak"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "üstkaynak bilgisini değiştir"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "üstkaynak bilgisini kaldır"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "renklendirilmiş çıktı kullan"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "uzak izleme dallarında iş yap"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "yalnızca işlemeyi içeren dalları yazdır"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "yalnızca işlemeyi içermeyen dalları yazdır"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Özel git-branch eylemleri:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "hem uzak izleme hem de yerel dalları listele"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "tümüyle birleştirilen dalı sil"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "dalı sil (birleştirilmemiş olsa bile)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "bir dalı ve onun başvuru günlüğünü taşı/yeniden adlandır"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "bir dalı taşı/yeniden adlandır, hedef var olsa bile"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "bir dalı ve onun başvuru günlüğünü kopyala"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "bir dalı kopyala, hedef var olsa bile"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "dal adlarını listele"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "geçerli dal adını göster"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "dalın başvuru günlüğünü oluştur"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "dalın açıklamasını düzenle"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "zorla oluştur, taşı/yeniden adlandır, sil"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "yalnızca birleştirilen dalları yazdır"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "yalnızca birleştirilmeyen dalları yazdır"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "dalları sütunlarla listele"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "nesne"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "yalnızca nesnenin dallarını yazdır"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "sıralama ve süzme BÜYÜK/küçük harf duyarlı değildir"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "çıktı için kullanılacak biçim"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD, refs/heads altında bulunamadı!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column ve --verbose birbiriyle uyumsuz"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "dal adı gerekli"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "Ayrılmış HEAD'e açıklama verilemiyor"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "birden çok dalın açıklaması düzenlenemiyor"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "'%s' dalında henüz bir işleme yok."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "'%s' adında bir dal yok."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "bir kopyalama işlemi için çok fazla dal"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "bir yeniden adlandırma işlemi için çok fazla argüman"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "yeni üstkaynak ayarlamak için çok fazla argüman"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11235,31 +11681,31 @@
 "HEAD'in üst kaynağı %s olarak ayarlanamadı; çünkü herhangi bir dala işaret "
 "etmiyor."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "'%s' diye bir dal yok"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "'%s' diye bir dal mevcut değil"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "üst kaynağı kaldırmak için çok fazla argüman"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "HEAD'in üst kaynağı kaldırılamadı; çünkü herhangi bir dala işaret etmiyor."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "'%s' dalının üstkaynak bilgisi yok"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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>?"
@@ -11267,7 +11713,7 @@
 "'git branch'in -a ve -r seçenekleri bir dal adı almaz.\n"
 "Şunu mu demek istediniz: -a|-r --list <dizgi>?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11335,38 +11781,38 @@
 "Aşağıda hata raporunun geri kalanına bir göz atın.\n"
 "Paylaşmak istemediğiniz satırları silebilirsiniz.\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "hata raporu dosyası için bir konum belirtin"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "dosya adı için bir strftime biçimli ek belirtin"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "'%s' için öncü dizinler oluşturulamadı"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "Sistem Bilgisi"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "Etkin Kancalar"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "'%s' hata raporu dosyası oluşturulamadı"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "%s dosyasına yazılamıyor"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Hata raporu '%s' dosyasına yazıldı.\n"
@@ -11387,19 +11833,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <dosya> [<başvuru-adı>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "ilerleme çubuğunu gösterme"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "ilerleme çubuğunu göster"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "ilerleme çubuğunu nesne yazımı aşaması sırasında göster"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "ilerleme çubuğu gösterildiğinde --all-progress'e benzer"
 
@@ -11542,8 +11988,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "girdi ve çıktı kayıtlarını bir NUL karakteri ile sonlandır"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "ilerleme bildirimini gizle"
 
@@ -11555,27 +12001,27 @@
 msgid "ignore index when checking"
 msgstr "denetlerken indeksi yok say"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "yol adları --stdin ile belirtilemiyor"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z yalnızca --stdin ile bir anlam ifade eder"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "bir yol belirtilmedi"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet yalnızca tek bir yol adı ile geçerlidir"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "hem --quiet hem --verbose birlikte kullanılamaz"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching yalnızca --verbose ile geçerlidir"
 
@@ -11596,165 +12042,169 @@
 msgid "no contacts specified"
 msgstr "kişi belirtilmedi"
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
-msgstr "git checkout-index [<seçenekler>] [--] [<dosya>...]"
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<seçenekler>]"
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr "stage 1 ve 3 arasında veya tümü olmalıdır"
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr "indeksteki tüm dosyaları çıkış yap"
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr "mevcut dosyaların üzerine yazılmasını zorla"
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr "mevcut dosyalar ve indekste olmayan dosyalar için uyarma"
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr "yeni dosyaları çıkış yapma"
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr "indeks dosyasındaki dosya bilgilerini güncelle"
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr "yolların listesini standart girdi'den oku"
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr "içeriği geçici dosyalara yaz"
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr "dizi"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr "dosyalar oluştururken başına <dizi> ekle"
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr "git checkout-index [<seçenekler>] [--] [<dosya>...]"
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr "stage 1 ve 3 arasında veya tümü olmalıdır"
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr "indeksteki tüm dosyaları çıkış yap"
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr "mevcut dosyaların üzerine yazılmasını zorla"
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr "mevcut dosyalar ve indekste olmayan dosyalar için uyarma"
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr "yeni dosyaları çıkış yapma"
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr "indeks dosyasındaki dosya bilgilerini güncelle"
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr "yolların listesini standart girdi'den oku"
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr "içeriği geçici dosyalara yaz"
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "dosyaları adı verilen alandan kopyala"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<seçenekler>] <dal>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<seçenekler>] [<dal>] -- <dosya>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<seçenekler>] [<dal>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<seçenekler>] [--source=<dal>] <dosya>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "'%s' yolu bizdeki sürüme iye değil"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "'%s' yolu onlardaki sürüme iye değil"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "'%s' yolu gereken tüm sürümlere iye değil"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "'%s' yolu gereken sürümlere iye değil"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "'%s' yolu: Birleştirilemiyor"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "'%s' için birleştirme sonuçları eklenemiyor"
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d birleştirme çakışması yeniden oluşturuldu"
 msgstr[1] "%d birleştirme çakışması yeniden oluşturuldu"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d yol şuradan güncellendi: %s"
 msgstr[1] "%d yol şuradan güncellendi: %s"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d yol indeksten güncellendi"
 msgstr[1] "%d yol indeksten güncellendi"
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' güncellenmekte olan yollarla kullanılamaz"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s', %s ile birlikte kullanılamaz"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "Aynı anda hem yolları güncelleyip hem de '%s' dalına geçilemiyor."
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ne '%s' ne de '%s' belirtilmiş"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s', '%s' ögesinin belirtilmediği durumlarda kullanılmalıdır"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' veya '%s', %s ile birlikte kullanılamaz"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "'%s' yolu birleştirilmemiş"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "önce geçerli indeksinizi çözmelisiniz"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11763,50 +12213,50 @@
 "aşağıdaki dosyalardaki hazırlanan değişikliklerle sürdürülemiyor:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "'%s' için başvuru günlüğü yapılamıyor: %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD konumu:"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "HEAD güncellenemiyor"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "'%s' dalı sıfırlandı.\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Halihazırda '%s' üzerinde\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "'%s' dalına geçildi ve sıfırlandı.\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Yeni '%s' dalına geçildi.\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "'%s' dalına geçildi.\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr "... ve %d daha.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11829,7 +12279,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11856,19 +12306,19 @@
 "\tgit branch <yeni-dal-adı> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "revizyonlarda gezinirken iç hata"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "Önceki HEAD konumu şuydu:"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Henüz doğmamış bir dal üzerindesiniz"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11877,7 +12327,7 @@
 "'%s' hem bir yerel dosya hem de bir izleme dalı olabilir.\n"
 "Lütfen -- (ve isteğe bağlı olarak --no-guess) kullanıp belirsizliği giderin."
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -11897,51 +12347,51 @@
 "isterseniz, örn. 'origin', yapılandırmanızda checkout.defaultsRemote=origin\n"
 "ayarını yapmayı düşünün."
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' birden çok (%d) uzak izleme dalıyla eşleşti"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "yalnızca bir başvuru bekleniyordu"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "yalnızca bir başvuru bekleniyordu, %d verildi"
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "geçersiz başvuru: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "başvuru bir ağaca değil: %s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "bir dal bekleniyordu, '%s' etiketi alındı"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "bir dal bekleniyordu, '%s' uzak dalı alındı"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "bir dal bekleniyordu, '%s' alındı"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "bir dal bekleniyordu, '%s' işlemesi alındı"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11949,7 +12399,7 @@
 "Birleştirme yaparken dal değiştirilemiyor.\n"
 "\"git merge --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11957,7 +12407,7 @@
 "Bir \"am\" oturumunun ortasında dal değiştirilemiyor.\n"
 "\"git am --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11965,7 +12415,7 @@
 "Yeniden temellendirme yaparken dal değiştirilemiyor.\n"
 "\"git rebase --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11973,7 +12423,7 @@
 "Seç-al yaparken dal değiştirilemiyor.\n"
 "\"git cherry-pick --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11981,145 +12431,138 @@
 "Geriye al yaparken dal değiştirilemiyor.\n"
 "\"git revert --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr "ikili arama yaparken dal değiştiriyorsunuz"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "dal değiştirilirken yollar kullanılamaz"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "dal değiştirilirken '%s' kullanılamaz"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s', '%s' ile birlikte kullanılamaz"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s', <başlama-noktası> alamaz"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Dal, işleme olmayan '%s' ögesine değiştirilemez"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "dal veya işleme argümanı eksik"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "durum belirtmeyi zorla"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "yeni dal ile bir 3 yönlü birleştirme gerçekleştir"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "stil"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "çakışma stili (birleştirme veya diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "adı verilen işlemede HEAD'i ayır"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "yeni dal için üstkaynak bilgisi ayarla"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "zorla çıkış yap (yerel değişiklikleri çöpe at)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "yeni dal"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "yeni üst ögesi olmayan dal"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "yok sayılan dosyaları güncelle (öntanımlı)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "verilen başvuruyu başka bir çalışma ağacının tutup tutmadığını denetleme"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "birleştirilmeyen dosyalar için bizdeki sürümü çıkış yap"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "birleştirilmeyen dosyalar için onlardaki sürümünü çıkış yap"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "yol belirteçlerini yalnızca aralıklı girdilere kısıtlama"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c ve --orphan birlikte kullanılmaz"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p ve --overlay birlikte kullanılmaz"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track için bir dal adı gerekli"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "eksik dal adı; -%c deneyin"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "%s çözülemedi"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "geçersiz yol belirtimi"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' bir işleme değil ve ondan bir '%s' dalı oluşturulamaz"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach bir '%s' yol argümanı almıyor"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file, --detach ile uyumsuz"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file, --patch ile uyumsuz"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12127,70 +12570,70 @@
 "git checkout: --ours/--theirs, --force ve --merge indeks çıkışı yapılırken\n"
 "birlikte kullanılamaz"
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "eski durumuna getirilecek yolları belirtmelisiniz"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "dal"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "yeni bir dal oluştur ve çıkış yap"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "bir dal oluştur/sıfırla ve çıkış yap"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "yeni dal için başvuru günlüğü oluştur"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "'git checkout <böyle-bir-dal-yok>'a temkinli yaklaş (öntanımlı)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "yerpaylaşım kipini kullan (öntanımlı)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "yeni bir dal oluştur ve ona geç"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "bir dal oluştur/sıfırla ve ona geç"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "'git switch <böyle-bir-dal-yok>'a temkinli yaklaş"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "yerel değişiklikleri çöpe at"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "çıkış yapılacak ağacımsı"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "indeksi eski durumuna getir"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "çalışma ağacını eski durumuna getir"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "birleştirilmemiş girdileri yok say"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "yerpaylaşım kipini kullan"
 
@@ -12220,11 +12663,6 @@
 msgid "Would skip repository %s\n"
 msgstr "%s dizini atlanacak\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "%s kaldırılamadı"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12334,8 +12772,8 @@
 msgstr "dizinleri tümüyle kaldır"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "dizgi"
@@ -12376,164 +12814,169 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<seçenekler>] [--] <depo> [<dizin>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "sığ depoyu klonlama"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "çıkış yapma!"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "çıplak bir depo oluştur"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "bir yansı depo oluştur (çıplak ima eder)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "bir yerel depodan klonla"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "yerel sabit bağları kullanma, her zaman kopyala"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "paylaşılan depo ayarla"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "yol belirteci"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "klon içerisindeki altmodülleri ilklendir"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "paralelde klonlanan altmodüllerin sayısı"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "şablon dizini"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "şablonların kullanılacağı dizin"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "başvuru deposu"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "--reference'ı yalnızca klonlarken kullan"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "ad"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "üstkaynağı izlemek için 'origin' yerine <ad> kullan"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "uzak konumun HEAD'i yerine <dal>'ı çıkış yap"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "uzak konumdaki git-upload-pack'e olan yol"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "derinlik"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "verilen derinlikte sığ bir depo oluştur"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "zaman"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "verilen zamandan sonrasını içeren bir sığ depo oluştur"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "revizyon"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "revizyonu hariç tutarak sığ klonun geçmişini derinleştir"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "yalnızca bir dal klonla, HEAD veya --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "etiket klonlama ve sonraki getirmeler de onları izlemesin"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "klonlanan altmodüller sığ olacak"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "git dizini"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "git dizinini çalışma ağacından ayır"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "anahtar=değer"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "yapılandırmayı yeni deponun içinde ayarla"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "sunucuya özel"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "iletme seçeneği"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "yalnızca IPv4 adresleri kullan"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "yalnızca IPv6 adresleri kullan"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "klonlanan herhangi bir altmodül kendi uzak izleme dallarını kullanacak"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "sparse-checkout dosyasını yalnızca kökteki dosyaları içerecek biçimde "
 "ilklendir"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12541,42 +12984,42 @@
 "Bir dizin adı tahmin edilemedi.\n"
 "Lütfen komut satırında bir dizin belirtin."
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: '%s' için alternatif eklenemedi: %s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s var ve bir dizin değil"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "yineleyici '%s' üzerinden çalıştırılamadı"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "'%s' bağı oluşturulamadı"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "dosya şuraya kopyalanamadı: '%s'"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "'%s' üzerinde yinelenemedi"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "bitti.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12586,147 +13029,147 @@
 "Neyin çıkış yapılıp yapılmadığını 'git status' ile inceleyebilir\n"
 "ve 'git restore --source=HEAD' ile yeniden deneyebilirsiniz.\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Klonlanacak %s uzak dal bulunamadı."
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "%s güncellenemiyor"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "sparse-checkout ilklendirilemedi"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "uzak konum HEAD'i var olmayan başvuruya bağlanıyor, çıkış yapılamıyor.\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "çalışma ağacı çıkış yapılamıyor"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "parametreler yapılandırma dosyasına yazılamıyor"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "temizlik için yeniden paketlenemiyor"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "geçici alternatifler dosyasının bağlantısı kesilemiyor"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Çok fazla argüman."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Klonlamak için bir depo belirtmelisiniz."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "--bare ve --origin %s seçenekleri birbiriyle uyumsuz."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare ve --separate-git-dir birbiriyle uyumsuz."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "'%s' deposu mevcut değil"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "%s derinliği pozitif bir sayı değil"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "Hedef yolu '%s' halihazırda mevcut ve boş bir dizin değil."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "Depo yolu '%s' halihazırda mevcut ve boş bir dizin değil."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "Çalışma ağacı '%s' halihazırda mevcut."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "şunun öncü dizinleri oluşturulamadı: '%s'"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "'%s' çalışma ağacı dizini oluşturulamadı"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "'%s' çıplak deposuna klonlanıyor...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klonlama konumu: '%s'...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 "clone --recursive hem --reference hem --reference-if-able ile uyumlu değil"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' geçerli bir uzak konum adı değil"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "kaynak depo sığ, --local yok sayılıyor"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local yok sayıldı"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "%s uzak dalı %s üstkaynağında bulunamadı"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Boş bir depoyu klonlamış görünüyorsunuz."
 
@@ -12743,19 +13186,19 @@
 msgstr "kullanılacak yerleşim"
 
 #: builtin/column.c:30
-msgid "Maximum width"
+msgid "maximum width"
 msgstr "olabilecek en çok genişlik"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
+msgid "padding space on left border"
 msgstr "sol kenardaki dolgu boşluğu"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
+msgid "padding space on right border"
 msgstr "sağ kenardaki dolgu boşluğu"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
+msgid "padding space between columns"
 msgstr "sütunlar arasındaki dolgu boşluğu"
 
 #: builtin/column.c:51
@@ -12784,13 +13227,13 @@
 msgstr "'%s' ile eşleşen nesne dizini bulunamadı"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "dizin"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+msgid "the object directory to store the graph"
 msgstr "Grafiğin depolanacağı nesne dizini"
 
 #: builtin/commit-graph.c:83
@@ -12882,7 +13325,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "yinelenmiş üst öge %s yok sayıldı"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "%s geçerli bir nesne adı değil"
@@ -12910,13 +13353,13 @@
 msgid "id of a parent commit object"
 msgstr "bir üst işleme ögesinin no'su"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "ileti"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "işleme iletisi"
 
@@ -12924,7 +13367,7 @@
 msgid "read commit log message from file"
 msgstr "işleme günlük iletisini dosyadan oku"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "işlemeyi GPG ile imzala"
@@ -12999,73 +13442,73 @@
 "\tgit cherry-pick --continue\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "HEAD ağaç nesnesi açılamadı"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file, -a ile bir anlam ifade etmiyor"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "--include/--only içermeyen yollar bir anlam ifade etmiyor."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "geçici indeks oluşturulamıyor"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "etkileşimli ekleme başarısız"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "geçici indeks güncellenemiyor"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Ana önbellek ağacı güncellenemedi"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "new_index_file yazılamıyor"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "Bir birleştirme sırasında kısmi işleme yapılamaz."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "Bir seç-al sırasında kısmi işleme yapılamaz."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "Bir yeniden temellendirme sırasında kısmi işleme yapılamaz."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "indeks okunamıyor"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "geçici indeks dosyası yazılamıyor"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "'%s' işlemesinde yazar üstbilgisi yok"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "'%s' işlemesindeki yazar satırı hatalı oluşturulmuş"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "hatalı oluşturulmuş --author parametresi"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13073,38 +13516,43 @@
 "mevcut işleme iletisinde kullanılmayan bir yorum\n"
 "karakteri seçilemiyor"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "%s işlemesi aranamadı"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(günlük iletisi standart girdi'den okunuyor)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "günlük standart girdi'den okunamadı"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "günlük dosyası '%s' okunamadı"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "--fixup:%s ile -m birlikte kullanılamaz"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "SQUASH_MSG okunamadı"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "MERGE_MSG okunamadı"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "işleme şablonu yazılamadı"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13118,7 +13566,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "ve yeniden deneyin.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13132,7 +13580,7 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "ve yeniden deneyin.\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13141,7 +13589,7 @@
 "Lütfen değişiklikleriniz için bir işleme iletisi girin. '%c' ile başlayan\n"
 "satırlar yok sayılacaktır. Boş bir ileti işlemeyi iptal eder.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13152,150 +13600,181 @@
 "satırlar tutulacaktır; isterseniz onları kaldırabilirsiniz.\n"
 "Boş bir ileti işlemeyi iptal eder.\n"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sYazar:     %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sTarih:     %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sİşleyici:  %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "İndeks okunamıyor"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "--trailers'a artbilgiler geçirilemiyor"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Ağaçlar yapılırken hata"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Lütfen iletiyi -m veya -F seçeneğini kullanarak destekleyin.\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s', 'Ad <e-posta>' biçiminde değil ve mevcut bir yazarla "
 "eşleşmiyor"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Geçersiz yok sayılanları göster kipi '%s'"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Geçersiz izlenmeyen dosyaları göster kipi '%s'"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long ve -z birbiriyle uyumsuz"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "Bir birleştirmenin tam ortasındasınız -- ileti değiştirilemiyor."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "Bir seç-al'ın tam ortasındasınız -- ileti değiştirilemiyor."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr ""
+"--fixup'ın ileti değiştirme seçeneği '%s' yolu ile birlikte kullanılamıyor"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"--fixup'ın ileti değiştirme seçeneği --patch/--interactive/--all/--include/"
+"--only ile birlikte kullanılamaz"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Hem --reset-author ve hem --author birlikte bir anlam ifade etmiyor"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "Değiştirecek bir şeyiniz yok."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Bir birleştirmenin tam ortasındasınız -- değiştirme yapılamıyor."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Bir seç-al'ın tam ortasındasınız -- değiştirme yapılamıyor."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr ""
 "Bir yeniden temellendirmenin tam ortasındasınız -- değiştirme yapılamıyor."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "--squash ve --fixup seçenekleri birlikte kullanılamaz"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "-c/-C/-F/--fixup arasından yalnızca bir tanesi kullanılabilir."
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "-m seçeneği -c/-C/-F ile birlikte kullanılamaz."
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 "--reset-author yalnızca -C, -c veya --amend ile birlikte kullanılabilir."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "--include/--only/--all/--interactive/--patch arasından yalnızca bir tanesi "
 "kullanılabilir."
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "bilinmeyen seçenek: --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "'%s ...' yolları -a ile bir anlam ifade etmiyor"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "durumu kısaca göster"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "dal bilgisini göster"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "zula bilgisini göster"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "tam önünde/arkasında değerlerini hesapla"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "sürüm"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "makine tarafından okunabilir çıktı"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "durumu uzun biçimde göster (öntanımlı)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "girdileri NUL ile sonlandır"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "kip"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "izlenmeyen dosyaları göster, ist. bağlı kipler: all, normal, no (Öntanım.: "
 "all)"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13303,11 +13782,11 @@
 "yok sayılan dosyaları göster, isteğe bağlı kipler: traditional (geleneksel) "
 "matching (eşleşen), no (hayır) (Öntanımlı: traditional)."
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "ne zaman"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13315,177 +13794,198 @@
 "altmodüllere olan değişiklikleri yok say, isteğe bağlı ne zaman: all "
 "(hepsi), dirty (kirli), untracked (izlenmeyen) (Öntanımlı: all)."
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "izlenmeyen dosyaları sütunlarla göster"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "yeniden adlandırmaları algılama"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 "yeniden adlandırmaları algıla, isteğe bağlı olarak benzerlik indeksi ayarla"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Yok sayılan ve izlenmeyen dosyalar argümanlarının desteklenmeyen birlikte "
 "kullanımı"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "başarılı işlemenin ardından özeti gizle"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "diff'i işleme iletisi şablonunda göster"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "İşleme iletisi seçenekleri"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "iletiyi dosyadan oku"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "yazar"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "işleme yazarını geçersiz kıl"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "tarih"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "işleme tarihini geçersiz kıl"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "işleme"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "belirtilen işlemenin iletisini düzenle ve yeniden kullan"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "belirtilen işlemenin iletisini yeniden kullan"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr ""
-"belirtilen işlemeyi düzeltmek için kendiliğinden tıkıştırma tarafından "
-"biçimlendirilen iletiyi kullan"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]işleme"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr ""
+"belirtilen işlemeyi değiştirmek/iletiyi yeniden yazmak için kendiliğinden "
+"tıkıştırma tarafından biçimlendirilen iletiyi kullan"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "belirtilen işlemeyi tıkıştırmak için kendiliğinden tıkıştırma tarafından "
 "biçimlendirilen iletiyi kullan"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "işlemenin yazarı şu andan itibaren benim (-C/-c/--amend ile kullanıldı)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "artbilgi"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "özel artbilgiler ekle"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "bir Signed-off-by artbilgisi ekle"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "belirtilen şablon dosyasını kullan"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "işlemeyi zorla düzenle"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "işleme iletisi şablonunda durumu içer"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "İşleme içeriği seçenekleri"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "değiştirilen tüm dosyaları gönder"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "belirtilen dosyaları işleme için indekse ekle"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "dosyaları etkileşimli olarak ekle"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "değişiklikleri etkileşimli olarak ekle"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "yalnızca belirtilen dosyaları gönder"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "pre-commit ve commit-msg kancalarını atla"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "neyin işleneceğini göster"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "önceki işlemeyi değiştir"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "post-rewrite kancasını atla"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "boş bir değişikliğin kaydı yazılabilir"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "boş iletili bir değişikliğin kaydı yazılabilir"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Hasar görmüş MERGE_HEAD dosyası (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "MERGE_MODE okunamadı"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "işleme iletisi okunamadı: %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "İşleme iletisinin boş olmasından dolayı iptal ediliyor.\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "İşleme iptal ediliyor; iletiyi düzenlenmedi.\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "İşleme iletisi gövdesinin boş olmasından dolayı iptal ediliyor.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13830,7 +14330,7 @@
 msgid "print sizes in human readable format"
 msgstr "yazdırma boyutları kişi tarafından okunabilir biçimde"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -13843,11 +14343,11 @@
 "\n"
 "\tchmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "hata ayıklama iletilerini stderr'e yazdır"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr "credential-cache-daemon kullanılamıyor; unix soket desteği yok"
 
@@ -14033,70 +14533,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base yalnızca iki işleme ile kullanılabilir"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s': Sıradan bir dosya veya sembolik bağ değil"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "geçersiz seçenek: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: birleştirme temeli yok"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "Bir git deposu değil"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "geçersiz nesne '%s' verildi"
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "ikiden çok ikili nesne verildi: '%s'"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "ele alınmayan nesne '%s' verildi"
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s: çoklu birleştirme temelleri, %s kullanılıyor"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<seçenekler>] [<işleme> [<işleme>]] [--] [<yol>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "başarısız: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "%s sembolik bağı okunamadı"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "%s sembolik bağ dosyası okunamadı"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "%s nesnesi %s sembolik bağı için okunamadı"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14104,53 +14604,53 @@
 "Birleştirilmiş diff biçimleri (-c ve --cc) dizin diff kipinde\n"
 "(-d ve --dir-diff) desteklenmiyor."
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "Her iki dosya da değiştirildi: '%s' ve '%s'."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "Çalışma ağacı dosyası bırakıldı."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "'%s' konumunda geçici dosyalar var."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "Bunları temizlemek veya kurtarmak isteyebilirsiniz."
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "'diff.tool' yerine 'diff.guitool' kullan"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "bir tam dizin diff'i gerçekleştir"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "bir diff aracı çalıştırmadan önce sorma"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "dir-diff kipinde sembolik bağlar kullan"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "araç"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "belirtilen diff aracını kullan"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "'-tool' ile birlikte kullanılabilecek diff araçlarının listesini çıkar"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -14158,31 +14658,31 @@
 "çalıştırılan bir diff aracı sıfır olmayan bir çıkış kodu döndürdüğünde 'git-"
 "difftool'un çıkış yapmasını sağla"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "diff'leri görüntülemek için özel bir komut belirle"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "'diff'e aktarıldı"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool, çalışma ağacı veya --no-index gerektiriyor"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "-dir-diff, --no-index ile uyumsuz"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool ve --extcmd birlikte kullanılamaz"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "--tool=<araç> için bir <araç> verilmedi"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "--extcmd=<komut> için bir <komut> verilmedi"
 
@@ -14250,40 +14750,40 @@
 "başka bir kodlamaya iye işleme iletilerinin nasıl ele alınacağını seçin"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
+msgid "dump marks to this file"
 msgstr "imleri bu dosyaya boşalt"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
 msgstr "imleri bu dosyadan içe aktar"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
+msgid "import marks from this file if it exists"
 msgstr "eğer varsa bu dosyadan imleri içe aktar"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
+msgid "fake a tagger when tags lack one"
 msgstr "etiketlerin bir etiketleyicisi yoksa varmış gibi davran"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
+msgid "output full tree for each commit"
 msgstr "her işleme için tüm ağacın çıktısını ver"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
+msgid "use the done feature to terminate the stream"
 msgstr "akışı sonlandırmak için 'done' özelliğini kullan"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
+msgid "skip output of blob data"
 msgstr "ikili nesne verisi çıktısını atla"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "başvuru belirteci"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "başvuru belirtecini dışa aktarılan başvurulara aktar"
+msgid "apply refspec to exported refs"
+msgstr "başvuru belirtecini dışa aktarılan başvurulara uygula"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14298,15 +14798,15 @@
 msgstr "<kimden> ve <kime>'yi anonimleştirilmiş çıktıda dönüştür"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr "'fast-export' akışında olmayan üst ögelere nesne numarası ile başvur"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
+msgid "show original object ids of blobs/commits"
 msgstr "ikili nesnelerin/işlemelerin orijinal nesne numaralarını göster"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
+msgid "label tags with mark ids"
 msgstr "etiketleri im numaralarıyla adlandır"
 
 #: builtin/fast-export.c:1256
@@ -14346,7 +14846,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "'%s' özelliği --allow-unsafe-features olmadan girdide yasaklı"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Kilit dosyası oluşturuldu; ancak raporlanmadı: %s"
@@ -14367,94 +14867,103 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<seçenekler>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel negatif olamaz"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "tüm uzak konumlardan getir"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "git pull/fetch için üstkaynak ayarla"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr ".git/FETCH_HEAD'in üzerine yazmak yerine ona iliştir"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "başvuruları güncellemek için atomsal işlem kullan"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "uzak uçtaki yükleme paketine olan yol"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "yerel başvurunun üzerine zorla yaz"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "birden çok uzak konumdan getir"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "tüm etiketleri ve ilişkilendirilen nesneleri getir"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "tüm etiketleri getirme (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "paralelde getirilen altmodüllerin sayısı"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr "başvuru belirtecini tüm başvuruları refs/prefetch/'e yerleştirecek "
+"biçimde değiştir"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "artık uzak konumda olmayan uzak izleme dallarını buda"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "artık uzak konumda olmayan yerel etiketleri buda ve değiştirilen etiketleri "
 "güncelle"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "istek üzerine"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "altmodüllerin özyineli getirilmesini denetle"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "getirilen başvuruları FETCH_HEAD dosyasına yaz"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "indirilen paketi tut"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "HEAD başvurusunun güncellenmesine izin ver"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "sığ klonun geçmişini derinleştir"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "zamana bağlı olarak sığ deponun geçmişini derinleştir"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "tam bir depoya dönüştür"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "bunu altmodül yol çıktısının başına ekle"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14462,98 +14971,103 @@
 "altmodüllerin özyineli getirilmesi için öntanımlı (yapılandırma "
 "dosyalarından daha az önceliğe iye)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr ".git/shallow'u güncelleyen başvuruları kabul et"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "ilgili başvuru"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "getirme ile ilgili başvuruları belirt"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "yalnızca bu nesneden ulaşılabilir nesnelerimiz olduğunu bildir"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr "bir paket dosyasını getirme; bunun yerine pazarlık ipuçlarının "
+"atalarını yazdır"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "getirme sonrasında 'maintenance --auto' çalıştır"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "tüm güncellenmiş dalları zorlanmış güncellemeler için denetle"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "getirdikten sonra işleme grafiğini yaz"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "başvuru belirteçlerini stdin'den oku"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "Uzak HEAD başvurusu bulunamadı"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "fetch.output yapılandırması geçersiz değer içeriyor: %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "%s nesnesi bulunamadı"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[güncel]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[reddedildi]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "geçerli dalda getirme yapılamıyor"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[etiket güncellemesi]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "yerel başvuru güncellenemiyor"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "var olan etiketi değiştirecektir"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[yeni etiket]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[yeni dal]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[yeni başvuru]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "zorlanmış güncelleme"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "ileri sarım değil"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14563,7 +15077,7 @@
 "ancak bu denetleme kapatılmış. Yeniden açmak için --show-forced-updates\n"
 "bayrağını kullanın veya 'git config fetch.showForcedUpdates true' çalıştırın."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14575,22 +15089,22 @@
 "kullanarak veya 'git config fetch.showForcedUpdates false' çalıştırarak\n"
 "bu denetlemeden kaçınabilirsiniz.\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s tüm gerekli nesneleri göndermedi\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "%s reddedilmeli; çünkü sığ köklerin güncellenmesine izin verilmiyor"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "Şu konumdan: %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14599,56 +15113,56 @@
 "bazı yerel başvurular güncellenemedi; 'git remote prune %s'\n"
 "kullanarak eski ve çakışan dalları kaldırmayı deneyin"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sarkacak)"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s sarkmaya başladı)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[silindi]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(hiçbiri)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "Çıplak olmayan deponun geçerli %s dalına getirme reddediliyor"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "\"%s\" seçeneği \"%s\" değeri %s için geçerli değil"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "\"%s\" seçeneği %s için yok sayılıyor\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "birden çok dal algılandı, --set-upstream ile uyumsuz"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "bir uzak konum uzak izleme dalı için üstkaynak ayarlanmıyor"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "bir uzak konum etiketi için üstkaynak ayarlanmıyor"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "bilinmeyen dal türü"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14656,22 +15170,22 @@
 "Kaynak dal bulunamadı.\n"
 "--set-upstream-option ile tam olarak bir dal belirtmeniz gerekiyor."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "%s getiriliyor\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "%s getirilemedi"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "'%s' getirilemedi (çıkış kodu: %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14679,45 +15193,53 @@
 "Bir uzak dal belirtilmedi. Lütfen yeni revizyonların\n"
 "alınacağı bir URL veya uzak konum adı belirtin."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Bir etiket adı belirtmeniz gerekiyor."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "--deepen için negatif derinlik desteklenmiyor"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen ve --depth birlikte kullanılamaz"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth ve --unshallow birlikte kullanılamaz"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "tam bir depo üzerinde --unshallow bir anlam ifade etmiyor"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all bir depo argümanı almıyor"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all başvuru belirteçleri ile birlikte bir anlam ifade etmiyor"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Böyle bir uzak konum veya uzak konum grubu yok: %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "Bir grubu getirme ve başvuru belirteçleri tanımlama bir anlam ifade etmiyor"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "--negotiate-only kullanırken uzak konum sağlanmalıdır"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Protokol, --negotiate-only desteklemiyor, çıkılıyor."
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -14725,7 +15247,11 @@
 "--filter yalnızca extensions.partialclone içinde yapılandırılmış uzak konum "
 "ile kullanılabilir."
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic yalnızca bir uzak konumdan getirirken kullanılabilir"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
 "--stdin seçeneği yalnızca bir uzak konumdan getirilirken kullanılabilir"
@@ -14772,47 +15298,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<işleme>]] [--no-contains [<işleme>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "yer tutucuları kabuğun anlayabileceği biçimde tırnak içine al"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "yer tutucuları perl'in anlayabileceği biçimde tırnak içine al"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "yer tutucuları python'un anlayabileceği biçimde tırnak içine al"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "yer tutucuları Tcl'nin anlayabileceği biçimde tırnak içine al"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "yalnızca <n> eşleşen başvuruyu göster"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "biçim renklerine uy"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "yalnızca verilen nesneye işaret eden başvuruları yazdır"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "yalnızca birleştirilen başvuruları yazdır"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "yalnızca birleştirilmemiş başvuruları yazdır"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "yalnızca işlemeyi içeren başvuruları yazdır"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "yalnızca işlemeyi içermeyen başvuruları yazdır"
 
@@ -14832,32 +15358,32 @@
 msgid "missing --config=<config>"
 msgstr "--config=<yapılandırma> eksik"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "bilinmeyen"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "%s %s içinde hata: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "%s %s içinde uyarı: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "şuradan kırık bağ: %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "bağda yanlış nesne türü"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14866,211 +15392,211 @@
 "şuradan kırık bağ: %7s %s\n"
 "           şuraya: %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "eksik %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "ulaşılamayan %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "sarkan %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "lost-found oluşturulamadı"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "'%s' bitirilemedi"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "%s denetleniyor"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Bağlanabilirlik denetleniyor (%d nesne)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "%s %s denetleniyor"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "kırık bağlar"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "kök %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "%s %s (%s) şurada etiketlendi: %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: nesne hasar görmüş veya kayıp"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: geçersiz başvuru günlüğü girdisi %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Başvuru günlüğü denetleniyor: %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: geçersiz sha1 işaretçisi %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: bir işleme değil"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "Uyarı: Öntanımlı başvurular yok"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: nesne hasar görmüş veya kayıp: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: nesne ayrıştırılamadı: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "hatalı sha1 dosyası: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Nesne dizini denetleniyor"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Nesne dizinleri denetleniyor"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "%s bağ denetleniyor"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "geçersiz %s"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s garip bir şeye işaret ediyor (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: ayrık HEAD bir şeye işaret etmiyor"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "Uyarı: %s henüz doğmamış bir dala işaret ediyor (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Önbellek ağacı denetleniyor"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: cache-tree içinde geçersiz sha1 işaretçisi"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "cache-tree içinde ağaç olmayan öge"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<seçenekler>] [<nesne>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "ulaşılamayan nesneleri göster"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "sarkan nesneleri göster"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "etiketleri bildir"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "kök düğümleri bildir"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "indeks nesnelerini dal ucu düğümü yap"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "başvuru günlüklerini dal ucu düğümü yap (öntanımlı)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "ek olarak paketleri ve alternatif nesneleri de dikkate al"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "yalnızca bağlanabilirliği denetle"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "daha kesin denetlemeyi etkinleştir"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "sarkan nesneleri .git/lost-found'a yaz"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "ilerlemeyi göster"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "ulaşılabilir nesneler için ayrıntılı adları göster"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Nesneler denetleniyor"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: nesne kayıp"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "geçersiz parametre: sha1 bekleniyordu, '%s' alındı"
@@ -15079,27 +15605,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<seçenekler>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "%s fstat yapılamadı: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "'%s' değeri '%s' ayrıştırılamadı"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "'%s' bilgileri alınamıyor"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "'%s' okunamıyor"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15114,52 +15640,52 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "başvurulmayan nesneleri buda"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "biraz daha titiz ol (artırılmış işleyiş süresi)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "auto-gc kipini etkinleştir"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "başka bir gc çalışıyor olsa bile zorla gc çalıştır"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "en büyük paket dışındaki diğer tüm paketleri yeniden paketle"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "gc.logexpiry değeri %s ayrıştırılamadı"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "'prune expiry' değeri %s ayrıştırılamadı"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "En iyi başarım için depo arka planda kendiliğinden paketleniyor.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "En iyi başarım için depo kendiliğinden paketleniyor.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "El ile ortalık temizliği için \"git help gc\"ye bakın.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15167,142 +15693,169 @@
 "gc %s makinesinde halihazırda çalışıyor (pid %<PRIuMAX> - çalışmıyorsa --"
 "force kullanın)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Çok fazla ulaşılabilir boşta nesne var; kaldırmak için 'git prune' kullanın."
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<görev>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule kullanımına izin yok"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "tanımlanamayan --schedule argümanı, %s"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "commit-graph yazılamadı"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "uzak konumlar doldurulamadı"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "uzak konumlar önden getirilemedi"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "'git-pack-objects' işlemi başlatılamadı"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "'git-pack-objects' işlemi bitirilemedi"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "multi-pack-index yazılamadı"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "'git multi-pack-index expire' başarısız oldu"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "'git multi-pack-index repack' başarısız oldu"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 "incremental-repack görevi atlanıyor; çünkü core.multiPackIndex devre dışı"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "kilit dosyası '%s' mevcut, bakım atlanıyor"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "'%s' görevi başarısız oldu"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' geçerli bir görev değil"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "'%s' görevi birden çok kez seçilemez"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "görevleri deponun durumuna göre çalıştır"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "sıklık"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "görevleri sıklığa göre çalıştır"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "stderr üzerinden ilerlemeyi veya başka bir bilgiyi raporlama"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "görev"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "belirli bir görevi çalıştır"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "tek kezde --auto ve --schedule=<sıklık>'tan birini kullan"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "'git config' çalıştırılamadı"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "başka bir işlem arka plan bakımı zamanının ayarlıyor"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "'%s' yolu oluşturulamadı"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "launchctl başlatılamadı"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "'%s' için dizinler oluşturulamadı"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "%s servisi özyüklenemedi"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "geçici xml dosyası oluşturulamadı"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "schtasks başlatılamadı"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr "'crontab -l' çalıştırılamadı; sisteminiz 'cron' desteklemiyor olabilir"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr "'crontab' çalıştırılamadı; sisteminiz 'cron' desteklemiyor olabilir"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "'crontab' stdin'i açılamadı"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "'crontab' beklenmedik bir biçimde sonlandı"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "başka bir işlem arka plan bakımı zamanının ayarlıyor"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "depo, global yapılandırmaya eklenemedi"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <altkomut> [<seçenekler>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "geçersiz altkomut: %s"
@@ -15311,12 +15864,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<seçenekler>] [-e] <dizgi> [<rev>...] [[--] <yol>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: iş parçacığı oluşturulamadı: %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "geçersiz belirtilen iş parçacığı sayısı (%d), %s için"
@@ -15325,204 +15878,200 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "iş parçacığı desteği yok, %s yok sayılıyor"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "ağaç okunamıyor (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "%s türündeki bir nesneden grep yapılamıyor"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "'%c' anahtarı sayısal bir değer bekliyor"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "çalışma ağacı yerine indekste ara"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "git tarafından yönetilmeyen içerikte bul"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "hem izlenen hem izlenmeyen dosyalar içinde ara"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "'.gitignore'da belirtilen dosyaları yok say"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "her altmodülde özyineli olarak ara"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "eşleşmeyen satırları göster"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "BÜYÜK/küçük harf duyarsız eşleşme"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "yalnızca sözcük sınırlarındaki dizgileri eşleştir"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "ikili dosyaları metin olarak işle"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "ikili dosyalardaki dizgileri eşleştirme"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "ikili dosyaları textconv süzgeçleri ile işle"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "altdizinlerde ara (öntanımlı)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "en çok <derinlik> düzey in"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "genişletilmiş POSIX düzenli ifadelerini kullan"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "temel POSIX düzenli ifadelerini kullan (öntanımlı)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "dizgileri sabit diziler olarak yorumla"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "Perl uyumlu düzenli ifadeler kullan"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "satır numaralarını göster"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "ilk eşleşmenin sütun numarasını göster"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "dosya adlarını gösterme"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "dosya adlarını göster"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "dosya adlarını en üst dizine göreceli olarak göster"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "eşleşen satırlar yerine yalnızca dosya adlarını göster"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "--files-with-matches eşanlamlısı"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "eşleşme olmadan yalnızca dosya adlarını göster"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "dosya adlarından sonra NUL yazdır"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "yalnızca bir satırın eşleşen kısımlarını göster"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "eşleşen satırlar yerine eşleşme sayısını göster"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "eşleşmeleri vurgula"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "başka dosyalardan olan eşleşmelerin arasına boş satır yazdır"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr ""
 "aynı dosyadan olan eşleşmelerin üzerinde dosya adını yalnızca bir kez göster"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "eşleşmelerden önce ve sonra <n> satır bağlam göster"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "eşleşmelerden önce <n> satır bağlam göster"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "eşleşmelerden sonra <n> satır bağlam göster"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "<n> iş parçacığı kullan"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "-C NUM için kısayol"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "eşleşmelerden önce işlev adının olduğu bir satır göster"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "çevresindeki işlevi göster"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "dizgileri dosyadan oku"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "<dizgi> ile eşleş"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "-e ile belirtilen dizgileri birleştir"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "çıkış durumu ile olan eşleşmelerde çıktı verme"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr "yalnızca tüm dizgilerle eşleşen dosyalardan eşleşmeleri göster"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "grep ifadesi için ayrıştırma ağacını göster"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "sayfalayıcı"
@@ -15556,11 +16105,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "geçersiz seçenek birleştirmesi, --threads yok sayılıyor"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "iş parçacığı desteği yok, --threads yok sayılıyor"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "geçersiz belirtilen iş parçacığı sayısı (%d)"
@@ -15573,11 +16122,15 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached veya --untracked, --no-index ile birlikte kullanılamıyor"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked, --cached ile birlikte kullanılamıyor"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard, izlenen içerik için kullanılamıyor"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "hem --cached hem ağaçlar verilmiş"
 
@@ -15710,12 +16263,12 @@
 msgid "no info viewer handled the request"
 msgstr "isteğe hiçbir bilgi görüntüleyicisi ele almadı"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s', '%s' olarak armalanmış"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "hatalı alias.%s dizisi: %s"
@@ -15729,392 +16282,392 @@
 msgid "'git help config' for more information"
 msgstr "ek bilgi için: 'git help config'"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "%s konumunda nesne türü uyuşmazlığı"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "beklenen nesne %s alınmadı"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "nesne %s: beklenen tür %s, bulunan %s"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "%d bayt doldurulamıyor"
 msgstr[1] "%d bayt doldurulamıyor"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "erken dosya sonu"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "girdide okuma hatası"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "kullanılabilir olandan daha çok bayt kullanıldı"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "paket off_t'nin geçerli tanımı için çok büyük"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "paket izin verilen en büyük boyutu aşıyor"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "'%s' oluşturulamıyor"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "'%s' paket dosyası açılamıyor"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "paket imzası uyuşmazlığı"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "paket sürümü %<PRIu32> desteklenmiyor"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "paketin %<PRIuMAX> ofsetinde hatalı nesne var: %s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "şişirme programı %d döndürdü"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "delta tabanı nesnesi için ofset değeri taşımı"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "delta tabanı ofseti sınırlar dışında"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "bilinmeyen nesne türü %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "paket dosyası 'pread' yapılamıyor"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "zamansız paket dosyası sonu, %<PRIuMAX> bayt eksik"
 msgstr[1] "zamansız paket dosyası sonu, %<PRIuMAX> bayt eksik"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "ciddi şişirme programı tutarsızlığı"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "%s İLE SHA1 ÇARPIŞMASI BULUNDU!"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "%s okunamıyor"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "mevcut %s nesne bilgisi okunamıyor"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "mevcut %s nesnesi okunamıyor"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "geçersiz %s ikili nesnesi"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "paketlenmiş nesne içinde fsck hatası"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "%s ögesinin tüm alt ögeleri ulaşılabilir değil"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "delta uygulanamadı"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Nesneler alınıyor"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Nesneler indeksleniyor"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "paket hasar görmüş (SHA1 uyumsuzluğu)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "paket dosyası fstat yapılamıyor"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "paket sonunda döküntüler var"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "parse_pack_objects() içindeki karmaşa akıl almaz düzeyde"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Deltalar çözülüyor"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "iş parçacığı oluşturulamadı: %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "karmaşa akıl almaz düzeyde"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "%d yerel nesneyle tamamlandı"
 msgstr[1] "%d yerel nesneyle tamamlandı"
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "%s için beklenmedik kuyruk sağlaması (disk hasarı?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "paketin %d çözülmemiş deltası var"
 msgstr[1] "paketin %d çözülmemiş deltası var"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "iliştirilen nesne söndürülemedi (%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "yerel nesne %s hasarlı"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "paket dosyası adı '%s', '.pack' ile bitmiyor"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "paket dosyası adı '%s', '.%s' ile bitmiyor"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "%s dosyası '%s' yazılamıyor"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "yazılmış %s dosyası '%s' kapatılamıyor"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "paket dosyası kapatılırken hata"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "paket dosyası depolanamıyor"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "indeks dosyası depolanamıyor"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "hatalı pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Mevcut paket dosyası '%s' açılamıyor"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "'%s' için mevcut paket idx dosyası açılamıyor"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "delta değil: %d nesne"
 msgstr[1] "delta değil: %d nesne"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "zincir uzunluğu = %d: %lu nesne"
 msgstr[1] "zincir uzunluğu = %d: %lu nesne"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "Şu anki çalışma dizinine geri gelinemiyor"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "hatalı %s"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "bilinmeyen sağlama algoritması '%s'"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin, --stdin olmadan kullanılamaz"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin bir git dizini gerektirir"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format, --stdin olmadan kullanılamaz"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "--verify ile bir paket dosyası adı verilmedi"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "paket nesnelerinde fsck hatası"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "'%s' şablonunun bilgileri alınamıyor"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "'%s' opendir yapılamıyor"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "'%s' readlink yapılamıyor"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "'%s', '%s' ögesine sembolik bağla bağlanamıyor"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "'%s' şuraya kopyalanamıyor: '%s'"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "%s şablonu yok sayılıyor"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "şablonlar %s içinde bulunamadı"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "şablonlar '%s' konumundan kopyalanmıyor: %s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "geçersiz başlangıç dalı adı: '%s'"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "%d dosya türü ele alınamıyor"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "%s şuraya taşınamıyor: %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "depoyu başka bir sağlama ile yeniden ilklendirme deneniyor"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s halihazırda var"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init: --initial-branch=%s yok sayıldı"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "%s%s içindeki mevcut paylaşılan Git deposu yeniden ilklendirildi\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "%s%s içindeki mevcut Git deposu yeniden ilklendirildi\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "%s%s içinde paylaşılan boş Git deposu ilklendirildi\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "%s%s içinde boş Git deposu ilklendirildi\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -16122,41 +16675,41 @@
 "git init [-q | --quiet] [--bare] [--template=<şablon-dizini>] [--"
 "shared[=<izinler>]] [<dizin>]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "izinler"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "git deposunun kullanıcılar arasında paylaşıp paylaşılmayacağını belirt"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "başlangıç dalının adını geçersiz kıl"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "sağlama"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "kullanılacak sağlama algoritmasını belirle"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir ve --bare birlikte kullanılamaz"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "%s mkdir yapılamıyor"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "%s ögesine chdir yapılamıyor"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -16165,12 +16718,12 @@
 "%s (veya --work-tree=<dizin>), %s (veya --git-dir=<dizin>) belirlenmeden "
 "izin verilmiyor"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "'%s' çalışma ağacı erişilemiyor"
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir, çıplak depo ile uyumsuz"
 
@@ -16222,10 +16775,6 @@
 msgid "do not treat --- specially"
 msgstr "ayırma çizgilerine (---) özel davranma"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "artbilgi"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "eklenecek artbilgi(ler)"
@@ -16238,130 +16787,130 @@
 msgid "no input file given for in-place editing"
 msgstr "yerinde düzenleme için girdi dosyası verilmedi"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<seçenekler>] [<revizyon-erimi>] [[--] <yol>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<seçenekler>] <nesne>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "geçersiz --decorate seçeneği: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "kaynağı göster"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
 msgstr "posta eşlem dosyasını kullan"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "yalnızca <dizgi> ile eşleşen başvuruları süsle"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "<dizgi> ile eşleşen başvuruları süsleme"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "süsleme seçenekleri"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
-"<dosya> içindeki <başlangıç>,<bitiş> eriminin veya :<işlevadı> işlevinin "
-"evrimini izle"
+"<dosya> içindeki <başlangıç>,<bitiş> satır eriminin veya :<işlevadı> "
+"işlevinin evrimini izle"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<erim>:<dosya>, yol belirteci ile kullanılamıyor"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Son çıktı: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: hatalı dosya"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "%s nesnesi okunamadı"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "bilinmeyen tür: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: açıklama kipinden geçersiz kapak sayfası"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers değere iye değil"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "%s yama dosyası okunamıyor"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "bir tam erim gerekiyor"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "bir erim değil"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "ön yazı için e-posta biçimi gerekli"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "cover-letter dosyası oluşturulamadı"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "akıl almaz in-reply-to: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<seçenekler>] [<-beri> | <revizyon-erimi>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "iki çıktı dizini?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "bilinmeyen işleme %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 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' geçerli bir başvuru olarak çözülemedi"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "kesin birleştirme temeli bulunamadı"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16372,395 +16921,403 @@
 "izleyin. Bunun dışında taban işlemesini kendiniz --base=<taban-işlemesi-no>\n"
 "kullanarak el ile belirtebilirsiniz."
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "kesin birleştirme temeli bulunamadı"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "taban işlemesi revizyon listesinin atası olmalı"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "taban işlemesi revizyon listesinde olmamalı"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "yama numarası alınamıyor"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr "geçerli dizinin range-diff kökeninden bir anlam çıkartılamadı"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "geçerli dizinin range-diff kökeni olarak '%s' kullanılıyor"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "bir yamayla bile olsa [PATCH n/m] kullan"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "birden çok yama bile olsa [PATCH] kullan"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "yamaları standart çıktıya yazdır"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "bir ön yazı oluştur"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "çıktı dosya adları için yalın sayı dizisi oluştur"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "sonek"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "'.patch' yerine <sonek> kullan"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "yamaları 1 yerine <n>'de numaralandırmaya başla"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "reroll-count"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "diziyi n. deneme olarak imle"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "çıktı dosya adının olabilecek en çok uzunluğu"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "[PATCH] yerine [RFC PATCH] kullan"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "açıklama kipinden kapak sayfası kipi"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "ön yazının bazı kısımlarını dalın açıklamasından oluştur"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
 msgstr "[PATCH] yerine [<önek>] kullan"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "ortaya çıkan dosyaları <dizin>'de depola"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "[PATCH]'i soyma/ekleme"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "ikili diff'leri çıktı verme"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "From başlığında tümü sıfırdan oluşan sağlama çıktısı ver"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "üstkaynaktaki bir işleme ile eşleşen bir yamayı içerme"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "öntanımlı yerine yama biçimini göster (patch + stat)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "İletileşme"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "üstbilgi"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "e-posta üstbilgisi ekle"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "e-posta"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "To: üstbilgisi ekle"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "Cc: üstbilgisi ekle"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "tanımlayıcı"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "From adresini <tanımlayıcı> olarak ayarla (veya yoksa işleyici tanımlayıcısı)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "ileti no"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "ilk postayı <ileti no>'ya bir yanıt yap"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "sınır"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "yamayı ekle"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "yamayı iletiye koy"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "iletileri kataloglamayı etkinleştir, stiller: shallow, deep"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "imza"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "imza ekle"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "taban işleme"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "yama dizisine önkoşul ağaç bilgisini ekle"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "dosyadan bir imza ekle"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "yama dosya adlarını yazdırma"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "yamalar oluşturulurken ilerlemeyi göster"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "<rev> karşısındaki değişiklikleri ön yazıda veya tek bir yamada göster"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "<bşvr-blrtç> karşısındaki değişiklikleri ön yazıda veya tek bir yamada göster"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "oluşumun tartıldığı yüzde"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "geçersiz tanımlayıcı satırı: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n ve -k birlikte kullanılamaz"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc ve -k birlikte kullanılamaz"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only bir anlam ifade etmiyor"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status bir anlam ifade etmiyor"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check bir anlam ifade etmiyor"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "--stdout, --output ve --output-directory  birlikte kullanılamaz"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff, --cover-letter veya tek yama gerektiriyor"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff v%d karşısında:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor, --range-diff gerektiriyor"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff, --cover-letter veya tek yama gerektiriyor"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff v%d karşısında:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "'%s' imza dosyası okunamıyor"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Yamalar oluşturuluyor"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "çıktı dosyaları oluşturulamadı"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<üstkaynak> [<dal-ucu> [<sınır>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr "İzlenen bir uzak dal bulunamadı, lütfen el ile <üstkaynak> belirtin.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<seçenekler>] [<dosya>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "dosya durumunu etiketlerle tanımla"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "'değiştirilmediği düşünülen' dosyaları küçük harflerle göster"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "'fsmonitor clean' dosyalarını küçük harflerle göster"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "önbelleğe alınan dosyaları çıktıda göster (öntanımlı)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "silinen dosyaları çıktıda göster"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "değiştirilen dosyaları çıktıda göster"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "diğer dosyaları çıktıda göster"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "yok sayılan dosyaları çıktıda göster"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "hazırlanan içeriğin nesne adını çıktıda göster"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "dosya sistemindeki kaldırılması gereken dosyaları göster"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "'diğer' dizinlerin yalnızca adını göster"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "dosyaların satır sonlarını göster"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "boş dizinleri gösterme"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "birleştirilmemiş dosyaları çıktıda göster"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "'resolve-undo' bilgisini göster"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "dizgi ile eşleşen dosyaları atla"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "hariç tutma dizgileri <dosya>'dan okunuyor"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "ek dizin başı hariç tutma dizgilerini <dosya>'dan oku"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "standart git hariç tutmalarını ekle"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "çıktıyı en üst proje dizinine göreceli olarak yap"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "altmodüller içinden özyinele"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "eğer bir <dosya> indekste değilse bunu bir hata olarak gör"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "ağacımsı"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr "<ağacımsı>'dan bu yana kaldırılan yolların hâlâ var olduğunu varsay"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "hata ayıklama verisini göster"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "yinelenen girdileri sustur"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16771,39 +17328,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<depo> [<başvurular>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "uzak konum URL'sini yazdırma"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "çalıştır"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "uzak konum makinesindeki git-upload-pack yolu"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "etiketlere kısıtla"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "uç işlemelere kısıtla"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "soyulmuş etiketleri gösterme"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "url.<temel>.insteadOf'u dikkate al"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "eşleşen başvuru bulunamazsa 2 numaralı çıkış koduyla çık"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "işaret ettiği nesneye ek olarak altında yatan başvuruyu göster"
 
@@ -16843,6 +17400,55 @@
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "yalnızca geçerli dizini değil tüm ağacı listele (--full-name ima eder)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<seçenekler>] <ileti> <yama> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "konuyu tut"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "yama olmayan ayraçları konuda tut"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "Message-ID'yi işleme iletisinin sonuna kopyala"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "üstveriyi i18n.commitEncoding olarak yeniden kodla"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "üstverinin karakter seti yeniden kodlamasını devre dışı bırak"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "kodlama"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "üstveriyi bu kodlama olacak biçimde yeniden kodla"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "makas kullan"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<eylem>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "alıntılanmış CR bulunduğu zaman yapılacak eylem"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "ileti gövdesinde üstbilgi kullan"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -16959,191 +17565,191 @@
 msgid "Merging %s with %s\n"
 msgstr "%s, %s ile birleştiriliyor\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<seçenekler>] [<işleme>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "'m' anahtarı bir değer gerektiriyor"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "'%s' seçeneği bir değer gerektiriyor"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Birleştirme stratejisi '%s' bulunamadı.\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Kullanılabilir stratejiler:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Kullanılabilir özel stratejiler:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "birleştirmenin sonunda bir diffstat gösterme"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "birleştirmenin sonunda bir diffstat göster"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(--stat eşanlamlısı)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
 "kısa günlükten birleştirme işlemesi iletisine girdiler (en çok <n>) ekle"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "birleştirme yerine tek bir işleme oluştur"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "birleştirme başarılı olursa bir işleme gerçekleştir (öntanımlı)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "göndermeden önce iletiyi düzenle"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "ileri sarıma izin ver (öntanımlı)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "ileri sarım olanaklı değilse iptal et"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "adı verilen işlemenin geçerli bir GPG imzası olduğunu doğrula"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "strateji"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "kullanılacak birleştirme stratejisi"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "seçenek=değer"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "seçili birleştirme stratejisi için seçenekler"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr ""
 "birleştirme işlemesi iletisi (ileri sarım olmayan bir birleştirme için)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "ilerlemekte olan geçerli birleştirmeyi iptal et"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort; ancak indeksi ve çalışma ağacını değiştirmeden bırakın"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "ilerlemekte olan geçerli birleştirmeyi sürdürün"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "birbiriyle ilişkisi olmayan geçmişlerin birleştirilmesine izin ver"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "pre-merge-commit ve commit-msg kancalarını atla"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "zula yapılamadı"
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "zulalama başarısız oldu"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "geçerli bir nesne değil: %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree başarısız oldu"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (tıkıştırılacak bir şey yok)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Tümü güncel (tıkıştırılacak bir şey yok)."
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Tıkıştırma işlemesi -- HEAD güncellenmiyor\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Birleştirme iletisi yok -- HEAD güncellenmiyor\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' bir işlemeye işaret etmiyor"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Hatalı branch.%s.mergeoptions dizisi: %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "İki uç işlemenin birleştirilmesi dışında bir şey yapılmıyor."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "merge-recursive için geçersiz seçenek: -X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "%s yazılamıyor"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Şu konumdan okunamadı: '%s'"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr "Birleştirme işlenmiyor, tamamlamak için 'git commit' kullanın.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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"
@@ -17153,11 +17759,11 @@
 "girin, özellikle güncellenmiş bir üstkaynağı kişisel dala birleştiriyorsa.\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Boş bir ileti işlemeyi iptal eder.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17166,72 +17772,72 @@
 "'%c' ile başlayan satırlar yok sayılacaktır. Boş bir ileti işlemeyi\n"
 "iptal eder.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Boş işleme iletisi."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Harika.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "Otomatik birleştirme başarısız; çakışmaları çözün ve sonucu işleyin.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "Geçerli dal yok."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "Geçerli dal için uzak konum yok."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "Geçerli dal için öntanımlı üstkaynak tanımlanmamış."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "%s için %s konumundan uzak izleme dalı yok"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Hatalı değer '%s', '%s' ortamında"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "%s içinde birleştirebileceğimiz bir şey değil: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "birleştirebileceğimiz bir şey değil"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort bir argüman beklemez"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "İptal edilecek bir birleştirme yok (MERGE_HEAD eksik)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit bir argüman beklemez"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue bir argüman beklemez"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "İlerlemekte olan bir birleştirme yok (MERGE_HEAD eksik)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17239,7 +17845,7 @@
 "Birleştirmenizi sonuçlandırmadınız (MERGE_HEAD mevcut).\n"
 "Lütfen birleştirmeden önce değişikliklerinizi işleyin."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17247,102 +17853,135 @@
 "Seç-al'ınızı sonuçlandırmadınız (CHERRY_PICK_HEAD mevcut).\n"
 "Lütfen birleştirmeden önce değişikliklerinizi işleyin."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Seç-al'ınızı sonuçlandırmadınız (CHERRY_PICK_HEAD mevcut)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "--squash ile --no-ff birlikte kullanılamaz."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "--squash ile --commit birlikte kullanılamaz."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Belirtilen bir işleme yok ve merge.defaultToUpstream ayarlanmamış."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "İşlemeyi boş dal ucuna tıkıştırma henüz desteklenmiyor"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "İleri sarım olmayan işlemeyi boş dal ucuna yapmak bir anlam ifade etmiyor"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - birleştirebileceğimiz bir şey değil"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Boş dal ucuna tam olarak yalnızca bir işleme birleştirilebilir"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "birbiriyle ilişkisi olmayan geçmişleri birleştirme reddediliyor"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Tümü güncel."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Güncelleniyor: %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Gerçekten önemsiz indeks içi birleştirme deneniyor...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Yok.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Tümü güncel. İşte bu!"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "İleri sarma olanaklı değil, iptal ediliyor."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Ağaç bozulmamış durumuna geri sarılıyor...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "%s birleştirme stratejisi deneniyor...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Birleştirmeyi hiçbir birleştirme stratejisi işlemedi\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "%s stratejisi ile birleştirme başarısız oldu.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "El ile çözümü hazırlamak için %s kullanılıyor.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Otomatik birleştirme iyi geçti; istendiği üzere gönderme öncesinde durdu.\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "uyarı: etiket girdisi fsck'den geçemiyor: %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "hata: etiket girdisi fsck'den geçemiyor: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) hiçbir zaman bu geri çağırmayı tetiklememeli"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "etiketlenmiş nesne '%s' okunamadı"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "'%s' nesnesi '%s' olarak etiketlenmiş; ancak bir '%s' türü"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "stdin üzerindeki etiket bizim sıkı fsck denetimimizi geçemedi"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "stdin üzerindeki etiket geçerli bir nesneye başvurmuyor"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "etiket dosyası yazılamıyor"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17359,19 +17998,35 @@
 msgid "allow creation of more than one tree"
 msgstr "birden çok ağacın oluşturulmasına izin ver"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<seçenekler>] (write|verify|expire|repack --batch-"
-"size=<boyut>)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<seçenekler>] write [--preferred-pack=<paket>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<seçenekler>] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<seçenekler>] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<seçenekler>] repack [--batch-size=<boyut>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr "nesne dizini paket dosyası seti ve pack-index eşleri içeriyor"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "preferred-pack"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "bir çoklu paket biteşlemi hesaplanırken yeniden kullanılacak paket"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
@@ -17379,15 +18034,7 @@
 "yeniden paketleme sırasında daha küçük boyutlu paket dosyalarını bu boyuttan "
 "daha büyük bir toplu iş olarak toplayın"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "çok fazla argüman"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "--batch-size seçeneği yalnızca 'repack' altkomutu için"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "tanımlanamayan altkomut: %s"
@@ -17485,7 +18132,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "%s, %s olarak yeniden adlandırılıyor\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "'%s' yeniden adlandırılamadı"
@@ -17675,7 +18322,7 @@
 msgid "the note contents have been left in %s"
 msgstr "not içeriği %s içinde bırakıldı"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "'%s' açılamadı veya okunamadı"
@@ -17718,8 +18365,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "çok fazla parametre"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "çok fazla argüman"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -17778,8 +18426,8 @@
 msgstr "<komut> için yapılandırma yeniden yazımını yükle (--stdin ima eder)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "çok az parametre"
+msgid "too few arguments"
+msgstr "pek az argüman"
 
 #: builtin/notes.c:538
 #, c-format
@@ -17907,7 +18555,7 @@
 "çözün ve sonucu 'git notes merge --commit' ile işleyin. Birleştirmeyi iptal "
 "etmek isterseniz 'git notes merge --abort' kullanarak bunu yapabilirsiniz.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "'%s' geçerli bir başvuru olarak çözülemiyor"
@@ -17925,7 +18573,7 @@
 msgid "read object names from the standard input"
 msgstr "nesne adlarını standart girdi'den oku"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "kaldırma, yalnızca göster"
 
@@ -17941,7 +18589,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "notları <not-bşvr>'ndan kullan"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "bilinmeyen altkomut: %s"
@@ -17959,103 +18607,117 @@
 msgstr ""
 "git pack-objects [<sçnklr>...] <base-name> [< <bşvr-liste> | < <nesne-liste>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: %s bulunamıyor, %<PRIuMAX> ofsetinde bekleniyordu (%s "
+"paketinde)"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "%s için hatalı paketlenmiş nesne CRC'si"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "%s için hasar görmüş paketlenmiş nesne"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "%s nesnesi için özyineli delta algılandı"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u nesne sipariş verildi, %<PRIu32> bekleniyordu"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "şu paketin %<PRIuMAX> ofsetinde nesne bekleniyordu: %s"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "biteşlem yazımı kapatılıyor, paketler pack.packSizeLimit dolayısıyla "
 "parçalara ayrılmış"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Nesneler yazılıyor"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "%s bilgileri alınamıyor"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> nesne yazıldı (%<PRIu32> bekleniyordu)"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "bazı nesneler paketlenmediğinden dolayı biteşlem yazımı kapatılıyor"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s için paket içinde delta taban ofset taşımı"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s için delta taban ofseti sınırların dışında"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Nesneler sayılıyor"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "%s nesne üstbilgisi ayrıştırılamıyor"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "%s nesnesi okunamıyor"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "%s nesnesi için tutarsız nesne uzunluğu (%<PRIuMAX> / %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "standart altı paket - bellek yetersiz"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Delta sıkıştırması %d iş parçacığı kullanıyor"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "%s etiketinden ulaşılabilir nesneler paketlenemiyor"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Nesneler sıkıştırılıyor"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "delta sayımında tutarsızlık"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18064,7 +18726,7 @@
 "uploadpack.blobpackfileuri değeri '<nesne-sağlaması> <paket-sağlaması> <uri> "
 "biçiminde olmalıdır ('%s' alındı)"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18072,7 +18734,17 @@
 "nesne halihazırda başka bir uploadpack.blobpackfileuri içinde yapılandırıldı "
 "('%s' alındı)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "%s nesnesinin türü alınamıyor (%s paketinde)"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "'%s' paketi bulunamadı"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18081,7 +18753,7 @@
 "sınır nesnesi numarası bekleniyordu, anlamsız veri alındı:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18090,237 +18762,249 @@
 "nesne numarası bekleniyordu, anlamsız veri alındı:\n"
 "%s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "--missing için geçersiz değer"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "paket indeksi açılamıyor"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "%s konumundaki gevşek nesne incelenemedi"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "gevşek nesne zorlanamıyor"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "bir revizyon değil: '%s'"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "hatalı revizyon: '%s'"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "en son nesneler eklenemiyor"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "desteklenmeyen indeks sürümü %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "hatalı indeks sürümü '%s'"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<sürüm>[,<ofset>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr "paket indeks dosyasını belirtilen idx biçiminde yaz"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "her çıktı paketi dosyasının olabilecek en büyük boyutu"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "alternatif nesne mağazasından ödünç alınan nesneleri yok say"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "paketlenmiş nesneleri yok say"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "paket penceresini nesnelerle sınırla"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr "paket penceresini nesne limitine ek olarak bellek ile kısıtla"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "ortaya çıkan pakette olabilecek en büyük delta zincirinin uzunluğu"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "var olan deltaları yeniden kullan"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "var olan nesneleri yeniden kullan"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "OFS_DELTA nesneleri kullan"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr "en iyi delta eşleşmelerini ararken iş parçacıklarını kullan"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "boş bir paket çıktısı oluşturma"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "revizyon argümanlarını standart girdi'den oku"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "nesneleri henüz paketlenmeyenlere kısıtla"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "herhangi bir başvurudan ulaşılabilir olan nesneleri içer"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "başvuru günlüğü tarafından başvurulan nesneleri içer"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "indeks tarafından başvurulan nesneleri içer"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "paketleri stdin'den oku"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "paketi stdout'a çıktı ver"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "paketlenecek nesnelere başvuran etiket nesnelerini içer"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "ulaşılamayan nesneleri tut"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "ulaşılamayan gevşek nesneleri paketle"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "<zaman>'dan daha yeni ulaşılamayan nesneleri aç"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "aralıklı ulaşılabilirlik algoritmasını kullan"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "ince paketler oluştur"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "sığ getirmelere uygun paketler oluştur"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "eşlik eden .keep dosyasına iye paketleri yok say"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "bu paketi yok say"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "paket sıkıştırma düzeyi"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "aşılarla gelen işlemeleri gizleme"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "nesnelerin sayımını hızlandırmak için eğer varsa bir biteşlem indeksi kullan"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "paket indeksiyle birlikte bir biteşlem indeksi de yaz"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "eğer olanaklıysa bir biteşlem indeksi yaz"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "eksik nesneler için işlem"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "nesneleri vaatçi paket dosyalarıyla paketleme"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "delta sıkıştırması sırasında adalara uy"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "protokol"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "bu protokol ile herhangi bir yapılandırılmış uploadpack.blobpackfileuri "
 "ögesini hariç tut"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "delta zincir derinliği %d çok derin, %d zorlanıyor"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit çok yüksek, %d zorlanıyor"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "--max-pack-size, aktarım için bir paket yapımında kullanılamaz"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "olabilecek en küçük paket boyutu limiti 1 MiB'dır"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin bir indekslenebilir paket yapımında kullanılamaz"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable ve --unpack-unreachable birbiriyle uyumsuz"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "--filter, --stdout olmadan kullanılamaz"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "--filter, --stdin-packs ile birlikte kullanılamıyor"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "iç revizyon listeleri, --stdin-packs ile birlikte kullanılamıyor"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Nesneler ortaya dökülüyor"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18329,6 +19013,21 @@
 "Toplam %<PRIu32> (delta %<PRIu32>), yeniden kullanılan %<PRIu32> (delta "
 "%<PRIu32>), yeniden kullanılan paket %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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' komutu kaldırma için aday\n"
+"gösterildi. Bu komutu hâlâ kullanıyorsanız lütfen\n"
+"komut satırında '--i-still-use-this' ek seçeneğini\n"
+"kullanın ve bunu hâlâ kullandığınızı\n"
+"<git@vger.kernel.org> adresine bir e-posta atarak\n"
+"bize haber verin. Sağ olun.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<seçenekler>]"
@@ -18387,11 +19086,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "değişiklikleri birleştirme yerine yeniden temellendirme ile kat"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "ileri sarıma izin ver"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "öncesinde ve sonrasında kendiliğinden zulala/zulaları patlat"
 
@@ -18412,7 +19111,92 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "pull.ff için geçersiz değer: %s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Az önce getirdiğiniz başvurular arasında yeniden temellendirme için aday yok."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr "Az önce getirdiğiniz başvurular arasında birleştirme için aday yok."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Genellikle bu, uzak uçta eşleşmesi olmayan bir joker başvuru belirteci\n"
+"sağladığınız anlamına gelir."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"'%s' uzak konumundan çekme yapmak istediniz; ancak bir dal belirtmediniz.\n"
+"Bu, geçerli dalınız için öntanımlı yapılandırılmış uzak konum olmadığından,\n"
+"komut satırında bir dal belirtmeniz gerekir."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Şu anda bir dal üzerinde değilsiniz."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr ""
+"Lütfen hangi dala karşı yeniden temellendirme yapmak istediğinizi belirtin."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Lütfen hangi dal ile birleştirmek istediğinizi belirtin."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Ayrıntılar için: git-pull(1)"
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<uzak-konum>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<dal>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Geçerli dal için izleme bilgisi yok."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Eğer bu dal için izleme bilgisi ayarlamak isterseniz şununla yapabilirsiniz:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Yapılandırmanız uzak konumdan '%s' başvurusu ile birleştirmeyi belirtiyor,\n"
+"ancak böyle bir başvuru getirilmedi."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "%s işlemesine erişilemedi"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "yeniden temellendirme için --verify-signature yok sayılıyor"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18440,104 +19224,19 @@
 "değiştirin. Öntanımlı yapılandırmayı yürütme sırasında --rebase,\n"
 "--no-rebase veya --ff-only ile geçersiz kılabilirsiniz.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Az önce getirdiğiniz başvurular arasında yeniden temellendirme için aday yok."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr "Az önce getirdiğiniz başvurular arasında birleştirme için aday yok."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Genellikle bu, uzak uçta eşleşmesi olmayan bir joker başvuru belirteci\n"
-"sağladığınız anlamına gelir."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"'%s' uzak konumundan çekme yapmak istediniz; ancak bir dal belirtmediniz.\n"
-"Bu, geçerli dalınız için öntanımlı yapılandırılmış uzak konum olmadığından,\n"
-"komut satırında bir dal belirtmeniz gerekir."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Şu anda bir dal üzerinde değilsiniz."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr ""
-"Lütfen hangi dala karşı yeniden temellendirme yapmak istediğinizi belirtin."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Lütfen hangi dal ile birleştirmek istediğinizi belirtin."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Ayrıntılar için: git-pull(1)"
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<uzak-konum>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<dal>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Geçerli dal için izleme bilgisi yok."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Eğer bu dal için izleme bilgisi ayarlamak isterseniz şununla yapabilirsiniz:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Yapılandırmanız uzak konumdan '%s' başvurusu ile birleştirmeyi belirtiyor,\n"
-"ancak böyle bir başvuru getirilmedi."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "%s işlemesine erişilemedi"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "yeniden temellendirme için --verify-signature yok sayılıyor"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "İndekse eklenen değişikliklerle henüz doğmamış bir dal güncelleniyor."
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "yeniden temellendirme ile çekim"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "Lütfen onları işleyin veya zulalayın."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18548,7 +19247,7 @@
 "Çalışma ağacınız %s işlemesinden\n"
 "ileri sarılıyor."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18565,15 +19264,15 @@
 "$ git reset --hard\n"
 "komutunu çalıştırın."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Boş dal ucuna birden çok dal birleştirilemez."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Birden çok dala yeniden temellendirme yapılamaz."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "yerelde kaydı yazılmış altmodül değişiklikleriyle yeniden temellendirme "
@@ -18880,45 +19579,49 @@
 msgid "push options must not have new line characters"
 msgstr "itme seçeneklerinde yeni satır karakterleri olmamalı"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 "git range-diff [<seçenekler>] <old-base>..<old-tip> <new-base>..<new-tip>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<seçenekler>] <old-tip>...<new-tip>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<seçenekler>] <base> <old-tip> <new-tip>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "oluşumun tartıldığı yüzde"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "yalın diff renklerini kullan"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "notlar"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "'git log'a aktarıldı"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "erimde .. yok: '%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "yalnızca ilk erimle ilişkili çıktıyı yay"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "yalnızca ikinci erimle ilişkili çıktıyı yay"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "bir işleme erimi değil: '%s'"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "tekli argüman biçimi simetrik erim olmalı"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "iki işleme erimi gerekli"
 
@@ -19023,194 +19726,194 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "kullanılamaz yapılacaklar listesi: '%s'"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "geçici %s oluşturulamadı"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "etkileşimli olarak imlenemedi"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "yapılacaklar listesi oluşturulamadı"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "bir taban işlemesi --upstream veya --onto ile sağlanmalıdır"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<seçenekler>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "boş başlayan işlemeleri tut"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "boş iletili işlemelere izin ver"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "birleştirme işlemelerini yeniden temellendir"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "kuzenlerin orijinal dal noktalarını tut"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "squash!/fixup! ile başlayan işlemeleri taşı"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "işlemeleri imzala"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "üstkaynakta nelerin değiştiğini gösteren bir diffstat görüntüle"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "yeniden temellendirmeyi sürdür"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "işlemeyi atla"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "yapılacaklar listesini düzenle"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "geçerli yamayı göster"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "yapılacaklar listesindeki işleme numaralarını kısalt"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "yapılacaklar listesindeki işleme numaralarını genişlet"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "yapılacaklar listesini denetle"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "fixup/squash satırlarını yeniden düzenle"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "yapılacaklar listesine 'exec' komutları ekle"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "üzerine"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "revizyonu sınırla"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "tıkıştır"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "üstkaynak işlemesi"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "dal ucu adı"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "yeniden temellendirme stratejisi"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "strateji seçenekleri"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "switch-to"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "çıkış yapılacak dal veya işleme"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "'onto' adı:"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "komut"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "çalıştırılacak komut"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "başarısız olan her 'exec'i kendiliğinden yeniden zamanla"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr ""
 "--[no-]rebase-cousins seçeneğinin --rebase-merges olmadan hiçbir etkisi yok"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s birleştirme arka ucunu gerektiriyor"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "'onto' alınamadı: '%s'"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "geçersiz orig-head: '%s'"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "geçersiz allow_rerere_autoupdate yok sayılıyor: '%s'"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19224,7 +19927,7 @@
 "İptal edip \"git rebase\" öncesine geri dönmek için \"git rebase --abort\"\n"
 "çalıştırın."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19243,7 +19946,7 @@
 "\n"
 "Bunun sonucu olarak git onları yeniden temellendiremiyor."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19251,7 +19954,7 @@
 msgstr ""
 "tanımlanamayan boş tür '%s'; geçerli türler: \"drop\", \"keep\" ve \"ask\""
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19268,7 +19971,7 @@
 "\tgit rebase '<dal>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19281,197 +19984,189 @@
 "\tgit branch --set-upstream-to=%s/<dal> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "'exec' komutları yenisatırlar içeremez"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "boş 'exec' komutu"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "üstkaynak yerine verilen dalın üzerine yeniden temellendir"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "üstkaynağın birleştirme temelini ve dalını geçerli temel olarak kullan"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "pre-rebase kancasının çalışmasına izin ver"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "sessiz ol (--no-stat ima eder)"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "üstkaynakta nelerin değiştiğini gösteren diffstat gösterme"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "her işlemeye bir Signed-off-by artbilgisi ekle"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "işleyici tarihi ile yazar tarihini aynı yap"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "yazar tarihini yok say ve geçerli tarihi kullan"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "--reset-author-date eşanlamlısı"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "'git apply'a aktarıldı"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "boşluk değişikliklerini yok say"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "değiştirilmemiş olsa bile tüm işlemeleri seç-al yap"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "sürdür"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "geçerli yamayı atla ve sürdür"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "iptal et ve orijinal dalı çıkış yap"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "iptal et; ancak HEAD'i olduğu yerde bırak"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr ""
 "bir etkileşimli yeniden temellendirme sırasında yapılacaklar listesini "
 "düzenle"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "yama dosyası uygulanırken veya birleştirilirken göster"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "yeniden temellendirmek için \"apply\" stratejilerini kullan"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "yeniden temellendirmek için birleştirme stratejilerini kullan"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 "yeniden temellendirilecek işlemelerin listesini kullanıcının düzenlemesine "
 "izin ver"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 "(KULLANILMAMALI) birleştirmeleri yok saymak yerine onları yeniden "
 "oluşturmaya çalış"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "boşalan işlemelerin nasıl ele alınacağı"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "-i altındaki squash!/fixup! ile başlayan işlemeleri taşı"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "düzenlenebilir listenin her işlemesinden sonra exec satırları ekle"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "boş iletili işlemelerin yeniden temellendirilmesine izin ver"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "birleştirmeleri atlamak yerine onları yeniden temellendirmeyi dene"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "üstkaynağı arılaştırmak için 'merge-base --fork-point' kullan"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "verilen birleştirme stratejisini kullan"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "seçenek"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "argümanı birleştirme stratejisine aktar"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "ulaşılabilir tüm işlemeleri kök(ler)e kadar yeniden temellendir"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr "tüm değişiklikleri uygula, halihazırda üstkaynakta olanları bile"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"'rebase.useBuiltin' desteği kaldırıldı!\n"
-"Ayrıntılar için 'git help config' içindeki girdisine bakın."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Görünüşe göre 'git am' sürmekte. Yeniden temellendirilemiyor."
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "'git rebase --preserve-merges' artık eski. Yerine --rebase-merges kullanın."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "--keep-base ile --onto birlikte kullanılamaz"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "--keep-base ile --root birlikte kullanılamaz"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "--root ile --fork-point birlikte kullanılamaz"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "Sürmekte olan bir yeniden temellendirme yok"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "--edit-todo seçeneği yalnızca etkileşimli yeniden temellendirme sırasında "
 "kullanılabilir."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "HEAD okunamıyor"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19479,16 +20174,16 @@
 "Önce tüm birleştirme çakışmalarını düzenlemeli ve onları\n"
 "git add kullanarak tamamlandı olarak imlemelisiniz."
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "çalışma ağacı değişiklikleri atılamadı"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "%s konumuna geri taşınamadı"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19509,134 +20204,134 @@
 "yapın ve beni yeniden çalıştırın. Ben sizi belki orada hâlâ değerli bir\n"
 "şeyler olabilir diye durdurdum.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "'C' anahtarı sayısal bir değer bekliyor"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Bilinmeyen kip: %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy, --merge veya --interactive gerektiriyor"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "\"apply\" seçenekleri \"merge\" seçenekleriyle birlikte kullanılamıyor"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Bilinmeyen yeniden temellendirme arka ucu: %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec, --exec veya --interactive gerektiriyor"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "--preserve-merges ile --rebase-merges birlikte kullanılamıyor"
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "hata: --preserve-merges ile --reschedule-failed-exec birlikte kullanılamıyor"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "geçersiz üstkaynak '%s'"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "Yeni kök işleme oluşturulamadı"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': tam olarak dallı bir birleştirme temeli gerekli"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': tam olarak bir birleştirme temeli gerekiyor"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "'%s' geçerli bir işlemeye işaret etmiyor"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "onulmaz: böyle bir dal/işleme yok: '%s'"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "Böyle bir başvuru yok: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "HEAD bir revizyona çözülemedi"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Lütfen onları işleyin veya zulalayın."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "şuraya geçilemedi: %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD güncel."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Geçerli dal %s güncel.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD güncel, yeniden temellendirme zorla yapıldı."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Geçerli dal %s güncel, yeniden temellendirme zorla yapıldı.\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "'pre-rebase' kancası yeniden temellendirmeyi reddetti."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "%s için olan değişiklikler:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "%s -> %s değişiklikleri:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Öncelikle dal ucu üzerindeki çalışmanızı yeniden oynatmak için geri "
 "sarılıyor...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "HEAD ayrılamadı"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "%s, %s konumuna ileri sarıldı.\n"
@@ -19694,11 +20389,11 @@
 "değişkenini 'warn' veya 'ignore' olarak ayarlayabilirsiniz.\n"
 "Bu iletiyi susturmak için onu 'refuse' olarak ayarlayın."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "sessiz"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Bir dizin belirtmelisiniz."
 
@@ -19729,36 +20424,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "'%s' geçerli bir zaman damgası değil"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Ulaşılabilir nesneler imleniyor..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s hiçbir yere işaret etmiyor!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "silmek için bir başvuru günlüğü belirtilmedi"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "bir başvuru günlüğü değil: %s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "'%s' için başvuru günlüğü yok"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "geçersiz başvuru biçimi: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -19936,7 +20631,7 @@
 "\t%s:%d\n"
 "artık var olmayan '%s' uzak konumunu adlandırıyor."
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Böyle bir uzak konum yok: '%s'"
@@ -20276,11 +20971,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "Tüm itme olmayan URL'ler silinmeyecek"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<seçenekler>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20289,117 +20984,140 @@
 "--no-write-bitmap-index kullanın veya pack.writebitmaps yapılandırmasını\n"
 "devre dışı bırakın."
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "vaatçi nesneleri yeniden paketleme için pack-objects başlatılamadı"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Onaltılı tam nesne no satırları yalnızca pack-objects'ten bekleniyor."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "vaatçi nesneleri yeniden paketleme için pack-objects bitirilemedi"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "%s için indeks açılamıyor"
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr "%s paketi, geometrik ilerlemede kullanmayı düşünmek için pek büyük"
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "%s paketi, sarmak için pek büyük"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "her şeyi tek bir pakete sığdır"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "-a ile aynı ve ulaşılamayan nesneleri serbest bırakır"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "gereksiz paketleri kaldır ve 'git prune-packed' çalıştır"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "'git-pack-objects'e --no-reuse-delta geçir"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "'git-pack-objects'e --no-reuse-object geçir"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "'git-update-server-info' çalıştırma"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "--local'ı 'git-pack-objects'e geçir"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "biteşlem indeksi yaz"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "--delta-islands'ı 'git-pack-objects'e geçir"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "yaklaşık tarih"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "-A ile, bundan daha eski nesneleri bırakma"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "-a ile, ulaşılamayan nesneleri yeniden paketle"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "delta sıkıştırması için kullanılan pencerenin boyutu"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "baytlar"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "yukarıdakiyle aynı; ancak girdi sayısı yerine bellek boyutunu kısıtla"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "olabilecek en büyük delta derinliğini kısıtlar"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "iş parçacıklarının olabilecek en büyük sayısını kısıtlar"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "her paket dosyasının olabilecek en büyük boyutu"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "nesneleri .keep ile imlenmiş paketlerde yeniden paketle"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "bu paketi yeniden paketleme"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "<N> faktörlü bir geometrik ilerleme bul"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "bir precious-objects deposundaki paketler silinemiyor"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable ve -A birbiriyle uyumsuz"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric, -A ve -a ile uyumsuz"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Paketlenecek yeni bir şey yok."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "gereken dosya eksik: %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "bağlantı kaldırılamadı: %s"
@@ -20732,8 +21450,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Bir birleştirmenin ortasında %s sıfırlaması yapılamıyor."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "sessiz ol, yalnızca hataları bildir"
 
@@ -20818,19 +21536,19 @@
 msgid "Could not write new index file."
 msgstr "Yeni indeks dosyası yazılamadı."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "--exclude-promisor-objects ve --missing birlikte kullanılamıyor"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "nesne süzme --objects gerektiriyor"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list not görüntülemesini desteklemiyor"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "imlenmiş sayım, --objects ile uyumsuz"
 
@@ -20942,19 +21660,19 @@
 msgid "keep redundant, empty commits"
 msgstr "gereksiz, boş işlemeleri tut"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "geri al başarısız"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "seç-al başarısız"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<seçenekler>] [--] <dosya>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -20968,7 +21686,7 @@
 "Aşağıdaki dosyaların hem HEAD'den hem de dosyadan farklı hazırlanmış\n"
 "içeriği mevcut:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -20976,13 +21694,13 @@
 "\n"
 "(zorla kaldırmak için -f kullanın)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "Aşağıdaki dosyanın indekste hazırlanmış değişiklikleri mevcut:"
 msgstr[1] "Aşağıdaki dosyaların indekste hazırlanmış değişiklikleri mevcut:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -20990,48 +21708,48 @@
 "\n"
 "(dosyayı tutmak için --cached, zorla kaldırmak için -f kullanın)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "Aşağıdaki dosyanın yerel değişiklikleri var:"
 msgstr[1] "Aşağıdaki dosyaların yerel değişiklikleri var:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "kaldırılan dosyaları listeleme"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "yalnızca indeksten kaldır"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "güncellik denetlemesini geçersiz kıl"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "özyineli kaldırmaya izin ver"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "hiçbir şey eşleşmemiş olsa bile sıfır koduyla çık"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "Yol belirteci verilmedi. Hangi dosyaları kaldırmalıyım?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "ilerlemek için lütfen değişikliklerinizi .gitmodules'a hazırlayın veya "
 "zulalayın"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "'%s', -r olmadan özyineli olarak kaldırılmıyor"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: %s kaldırılamadı"
@@ -21072,52 +21790,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<seçenekler>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "stdin ile çoklu --group seçenekleri kullanımı desteklenmiyor"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "stdin ile --group=trailer kullanımı desteklenmiyor"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "bilinmeyen grup türü: %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Yazar yerine işleyici ile grupla"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "yazar yerine işleyici ile grupla"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "çıktıyı yazar başına olan işleme sayısına göre sırala"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "İşleme açıklamalarını gizle, yalnızca işleme sayısını ver"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "işleme açıklamalarını gizle, yalnızca işleme sayısını ver"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Her yazarın e-posta adresini göster"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "her yazarın e-posta adresini göster"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr "Çıktı satırlarını kaydır"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "çıktıyı kaydır"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "alan"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Alan ile grupla"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "alan ile grupla"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "depo dışında çok fazla argüman verildi"
 
@@ -21308,103 +22026,111 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "stdin'den yerel bir depoda olmayan başvuruları göster"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <seçenekler>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "bu çalışma ağacı aralıklı değil (sparse-checkout dosyası var olmayabilir)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "aralıklı çıkış dosyası için dizin oluşturulamadı"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr "depo biçimi worktreeConfig etkinleştirmesi için yükseltilemiyor"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "extensions.worktreeConfig yapılandırması ayarlanamadı"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "aralıklı çıkışı koni kipinde ilklendir"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "bir aralıklı indeksin kullanımını aç/kapa"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "sparse-index yapılandırması değiştirilemedi"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "'%s' açılamadı"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "'%s' yolu olağanlaştırılamadı"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <dizgiler>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "C biçemli '%s' dizisinin tırnakları kaldırılamıyor"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "mevcut aralıklı çıkış dizgileri yüklenemiyor"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "dizgileri stdin'den oku"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "çalışma dizini yenilenirken hata"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<seçenekler>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<seçenekler>] [<zula>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<zula>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<zula>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <dal-adı> [<zula>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21416,7 +22142,7 @@
 "          [--pathspec-from-file=<dosya> [--pathspec-file-nul]]\n"
 "          [--] [<yol-blrtç>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21424,19 +22150,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<ileti>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<zula>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<zula>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <ileti>] [-q|--quiet] <işleme>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21446,173 +22172,201 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <ileti>]\n"
 "          [--] [<yol-blrtç>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "'%s' zulaya benzer bir işleme değil"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Çok fazla revizyon belirtildi:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "Zula girdisi bulunamadı."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s geçerli bir başvuru değil"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
 msgstr "parametreli git stash clear henüz kullanılabilir değil"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"UYARI: İzlenmeyen dosya, izlenen dosyanın önüne çıktı!\n"
+"Yer açmak için\n"
+"            %s -> %s\n"
+"         yeniden adlandırılıyor.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "bir birleştirmenin ortasında zula uygulanamıyor"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "diff oluşturulamadı: %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "İndekste çakışmalar var. --index olmadan deneyin."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "indeks ağacı kaydedilemedi"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "izlenmeyen dosyalar zuladan geri getirilemedi"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "%s, %s ile birleştiriliyor"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "İndeks zuladan çıkartılmamıştı."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "indeks yeniden oluşturulmaya çalışılıyor"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s bırakıldı (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Zula girdisi bırakılamadı"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' bir zula başvurusu değil"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "Zula girdisi yeniden gereksiniminiz olursa diye saklanıyor."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Dal adı belirtilmedi"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "ağaç ayrıştırılamadı"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "ağaçların paketi açılamadı"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "zulada izlenmeyen dosyaları içer"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "zulada yalnızca izlenmeyen dosyaları göster"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "%s, %s ile güncellenemiyor"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "zula iletisi"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" bir <işleme> argümanı gerektirir"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Değişiklik seçilmedi"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Henüz ilk işleme yapılmamış"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "Geçerli indeks durumu kaydedilemiyor"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "İzlenmeyen dosyalar kaydedilemiyor"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "Geçerli çalışma ağacı durumu kaydedilemiyor"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "Çalışma ağacı durumu kaydı yazılamıyor"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "--patch, --include-untracked veya --all hepsi bir anda kullanılamıyor"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "'git add' yapmayı mı unuttunuz?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "Kaydedilecek yerel değişiklik yok"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "Zula ilklendirilemiyor"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "Geçerli durum kaydedilemiyor"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Çalışma dizini ve indeks durumu %s kaydedildi"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "Çalışma ağacı değişiklikleri kaldırılamıyor"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "indeksi tut"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "yama kipinde zula"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "sessiz kip"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "zulada izlenmeyen dosyaları içer"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "yok sayma dosyalarını içer"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21636,7 +22390,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "her satırın başına yorum karakteri ve boşluk koy"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Tam bir başvuru adı bekleniyordu, %s alındı"
@@ -21650,7 +22404,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "'%s' url'sinden bir bileşen çıkarılamıyor"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "göreceli yollar için alternatif tutturucu"
 
@@ -21658,18 +22412,18 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<yol>] [<yol>...]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr ".gitmodules içinde '%s' altmodül yolu için url bulunamadı"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Giriliyor: '%s'\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -21678,7 +22432,7 @@
 "run_command, %s için sıfır olmayan durum döndürdü\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21688,19 +22442,20 @@
 "run_command, %s ögesinin iç içe geçmiş altmodülleri içinde özyinelerken "
 "sıfır olmayan durum döndürdü"
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Her altmodül komutu girişinin çıktısını gizle"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "her bir altmodül komutu girişinin çıktısını gizle"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "İç içe geçmiş altmodüller içine özyinele"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "iç içe geçmiş altmodüle özyinele"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <komut>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -21709,155 +22464,151 @@
 "'%s' yapılandırması aranamadı. Bu deponun kendi yetkili üstkaynağı olduğu "
 "varsayılıyor."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Altmodül yolu url'si '%s' kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "'%s' altmodülü (%s), '%s' yoluna kaydı yapıldı\n"
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "uyarı: '%s' altmodülü için komut güncellemesi önerilmiyor\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "'%s' altmodülü yolu için güncelleme kipi kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Bir altmodül ilklendirmesi çıktısını gizle"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "bir altmodül ilklendirmesi çıktısını gizle"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<seçenekler>] [<yol>]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "'%s' yolu için .gitmodules içinde altmodül eşlemi bulunmadı"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "'%s' altmodülü içinde HEAD başvurusu çözülemedi"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "'%s' altmodülüne özyinelenemedi"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Altmodül durum çıktısını gizle"
-
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
-msgstr ""
-"Altmodül HEAD'i içinde depolanan işleme yerine indekste depolanan işlemeyi "
-"kullan"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "altmodül durum çıktısını gizle"
 
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "iç içe geçmiş altmodüle özyinele"
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
+msgstr ""
+"altmodül HEAD'i içinde depolanan işleme yerine indekste depolanan işlemeyi "
+"kullan"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<yol>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <yol>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(ikili nesne)->%s(altmodül)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(altmodül)->%s(ikili nesne)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "'%s' üzerinden nesne sağlaması yapılamadı"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "beklenmedik kip %o\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "altmodül HEAD'i içindeki işleme ile indekstekini karşılaştırmak için"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr "altmodül HEAD'i yerine indekste depolanan işlemeyi kullan"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "'ignore_config' değeri 'all' olan altmodülleri atla"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "özet boyutunu sınırla"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<seçenekler>] [<işleme>] [--] [<yol>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "HEAD için bir revizyon getirilemedi"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "--cached ve --files birlikte kullanılamaz"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "'%s' için altmodül url'si eşitleniyor\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "'%s' altmodülü yolu için url kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "'%s' altmodülü için öntanımlı uzak konum alınamadı"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "'%s' altmodülü için uzak konum güncellenemedi"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Altmodül url'si eşitleme çıktısını gizle"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "altmodül url'si eşitleme çıktısını gizle"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<yol>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21866,7 +22617,7 @@
 "Altmodül çalışma ağacı '%s' bir .git dizini içeriyor (tüm geçmişi dahil "
 "olacak biçimde kaldırmak istiyorsanız 'rm -rf' kullanın)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -21875,47 +22626,47 @@
 "Altmodül çalışma ağacı '%s' yerel değişiklikler içeriyor; onları atmak için "
 "'-f' kullanın"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "'%s' dizini temizlendi\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "'%s' altmodül çalışma ağacı kaldırılamadı\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "boş altmodül dizini %s oluşturulamadı"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "'%s' altmodülü (%s), '%s' yoluna kaydı yapılmamış\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr "Altmodül çalışma ağaçlarını yerel değişiklikler içerseler bile kaldır"
-
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Tüm altmodüllerin kaydını kaldır"
+msgid "remove submodule working trees even if they contain local changes"
+msgstr "altmodül çalışma ağaçlarını yerel değişiklikler içerseler bile kaldır"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "tüm altmodüllerin kaydını kaldır"
+
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<yol>...]]"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 "Tüm altmodüllerin ilklendirmesini gerçekten geri almak istiyorsanız '-all' "
 "kullanın"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -21927,46 +22678,46 @@
 "submodule.alternateErrorStrategy ayarını 'info'ya ayarlayın veya\n"
 "--reference yerine --reference-if-able kullanarak klonlayın."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "'%s' altmodülü alternatif ekleyemiyor: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "'%s' submodule.alternateErrorStrategy değeri tanımlanamadı"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "'%s' submodule.alternateLocation değeri tanımlanamadı"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "yeni altmodülün nereye klonlanacağı"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "yeni altmodülün adı"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "altmodülün klonlanacağı url konumu"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "sığ klonların derinliği"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "zorla klonla"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "boş olmayan dizine klonlamaya izin verme"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -21975,103 +22726,103 @@
 "git submodule--helper clone [--prefix=<yol>] [--quiet] [--reference <depo>] "
 "[--name <ad>] [--depth <derinlik>] [--single-branch] --url <url> --path <yol>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "başka bir altmodülün git dizininde '%s' oluşturma/kullanma reddediliyor"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "'%s' ögesinin '%s' altmodül yoluna klonlanması başarısız"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "dizin boş değil: '%s'"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "'%s' için altmodül dizini alınamadı"
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Geçersiz güncelleme kipi '%s', '%s' altmodül yolu için"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "Geçersiz güncelleme kipi '%s', '%s' altmodül yolu için yapılandırılmış"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Altmodül yolu '%s' ilklendirilmedi"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "'update --init' mi kullanmak istersiniz?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Birleştirilmemiş altmodül %s atlanıyor"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "'%s' altmodülü atlanıyor"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "'%s' klonlanamadı. Yeniden deneme zamanlandı."
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "'%s' ikinci bir kez klonlanamadı, iptal ediliyor"
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "çalışma ağacına giden yol"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "iç içe geçmiş altmodül sınırları üzerinden çalışma ağacına giden yol"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout veya none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "Belirli bir revizyon sayısına kısaltılmış sığ klon oluştur"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "belirli bir revizyon sayısına kısaltılmış sığ klon oluştur"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "paralel işler"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "ilk klonun sığlık üzerine olan tavsiyeyi izleyip izlemeyeceği"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "klonlama işlemini yazdırma"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper update-clone [--prefix=<yol>] [<yol>...]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "güncelleme parametresi için hatalı değer"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -22080,84 +22831,84 @@
 "Altmodül (%s) dalı süperproje dalından devralmak üzere yapılandırıldı; ancak "
 "süperproje herhangi bir dalda değil"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "'%s' altmodülü için depo tutacağı alınamadı"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "altmodüllere özyinele"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<seçenekler>] [<yol>...]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr ".gitmodules dosyasına yazım güvenli mi değil mi denetle"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr ".gitmodules dosyasındaki yapılandırmayı kaldır"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <ad> [<değer>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <ad>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ".gitmodules dosyasının çalışma ağacında olduğundan lütfen emin ol"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Bir altmodül url ayarlanması çıktısını gizle"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "bir altmodül url ayarlanması çıktısını gizle"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <yol> <yeniurl>"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "öntanımlı izleme dalını master olarak ayarla"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "öntanımlı izleme dalını ayarla"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <yol>"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <dal> <yol>"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "--branch veya --default gerekli"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch ve --default birlikte kullanılamaz"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s, --super-prefix desteklemiyor"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' geçerli bir submodule-helper altkomutu değil"
@@ -22170,23 +22921,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <ad>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "sembolik olmayan (ayrık) başvurular için hata iletisini gizle"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "sembolik başvuruyu sil"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "başvuru çıktısını kısalt"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "neden"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "güncelleme nedeni"
 
@@ -22218,17 +22969,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<biçim>] <etiket-adı>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "'%s' etiketi bulunamadı."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "'%s' etiketi silindi (%s idi)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22241,7 +22992,7 @@
 "  %s\n"
 "'%c' ile başlayan satırlar yok sayılacaktır.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -22256,15 +23007,11 @@
 "'%c' ile başlayan satırlar tutulacaktır; isterseniz onları "
 "kaldırabilirsiniz.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "etiket imzalanamıyor"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "etiket dosyası yazılamıyor"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22277,144 +23024,140 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "hatalı nesne türü"
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "etiket iletisi yok mu?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Etiket iletisi %s içinde bırakıldı\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "etiket adlarını listele"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "her etiket iletisinin <n> satırını listele"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "etiketleri sil"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "etiketleri doğrula"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Etiket oluşturma seçenekleri"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "açıklama eklenmiş etiket için bir ileti gerek"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "etiket iletisi"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "etiket iletisini zorla düzenle"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "açıklama eklenmiş ve GPG imzalı etiket"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "etiketi imzalamak için başka bir anahtar kullanın"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "eğer varsa etiketi başkasıyla değiştir"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "bir başvuru günlüğü oluştur"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Etiket listeleme seçenekleri"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "etiket listesini sütunlarla göster"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "yalnızca işlemeyi içeren etiketleri yazdır"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "yalnızca işleme içermeyen etiketleri yazdır"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "yalnızca birleştirilen etiketleri yazdır"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "yalnızca birleştirilmeyen etiketleri yazdır"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "yalnızca nesnenin etiketlerini yazdır"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column ve -n birbiriyle uyumsuz"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "-n seçeneğine yalnızca liste kipinde izin verilir"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "--contains seçeneğine yalnızca liste kipinde izin verilir"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "--no-contains seçeneğine yalnızca liste kipinde izin verilir"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "--points-at seçeneğine yalnızca liste kipinde izin verilir"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr ""
 "--merged ve --no-merged seçeneklerine yalnızca liste kipinde izin verilir"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "yalnızca bir -F veya -m seçeneğine izin verilir"
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "çok fazla parametre"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' geçerli bir etiket adı değil."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "'%s' etiketi halihazırda var"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "'%s' etiketi güncellendi (%s idi)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Nesneler açılıyor"
 
@@ -22475,143 +23218,143 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<seçenekler>] [--] [<dosya>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr "indeksin güncellenmesi gerekse bile yenilemeyi sürdür"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "refresh: altmodülleri yok say"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "yeni dosyaları yok sayma"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "dosyaların dizinlerin yerine geçmesine ve tersine izin ver"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "çalışma ağacından eksik olan dosyaları fark et"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "indekste birleştirilmemiş girdiler olsa bile yenile"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "dosya durum bilgisini yenile"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "--refresh gibi; ancak assume-unchanged ayarını yok sayar"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<kip>,<nesne>,<yol>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "belirtilen girdiyi indekse ekle"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "dosyaları \"not changing\" olarak imle"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "assumed-unchanged kısmını temizle"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "dosyaları \"index-only\" olarak imle"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "skip-worktree kısmını atla"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "'index-only' girdilerine dokunma"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr "yalnızca indekse ekle; içeriğe nesne veritabanına ekleme"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr "çalışma ağacında mevcut olsa bile ad verilen yolları kaldır"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "--stdin ile: girdi satırları boş baytlarla sonlandırılır"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "güncellenecek yol listelerini standart girdi'den oku"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "indekse standart girdi'den girdiler ekle"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "#2 ve #3 numaralı adımları listelenmiş yollar için yeniden doldur"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "yalnızca HEAD'den farklı olan girdileri güncelle"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "çalışma ağacından eksik olan dosyaları yok say"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "eylemleri standart çıktı'ya bildir"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(okunabilir veri için) kaydedilmiş çözülmeyen çakışmaları unut"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "indeksi bu biçimle yaz"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "bölünmüş indeksi etkinleştir veya devre dışı bırak"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "izlenmeyen önbelleği etkinleştir/devre dışı bırak"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "dosya sisteminin izlenmeyen önbellek destekleyip desteklemediğini sına"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "dosya sistemini sınamadan izlenmeyen önbelleği etkinleştir"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "değiştirilmiş olarak imlenmese bile indeksi yaz"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "dosya sistemi monitörünü etkinleştir veya devre dışı bırak"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "dosyaları dosya sistemi monitöründe geçerli olarak imle"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "dosya sistemi monitöründe geçerli kısmını temizle"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -22619,7 +23362,7 @@
 "core.splitIndex 'false' olarak ayarlanmış; bölünmüş indeksi etkinleştirmeyi "
 "gerçekten istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -22627,7 +23370,7 @@
 "core.splitIndex 'true' olarak ayarlanmış; bölünmüş indeksi devre dışı "
 "bırakmayı gerçekten istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -22635,11 +23378,11 @@
 "core.untrackedCache 'true' olarak ayarlanmış; izlenmeyen önbelleği gerçekten "
 "devre dışı bırakmayı istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "İzlenmeyen önbellek devre dışı bırakıldı"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -22647,29 +23390,29 @@
 "core.untrackedCache 'false' olarak ayarlanmış; izlenmeyen önbelleği "
 "gerçekten etkinleştirmek istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "İzlenmeyen önbellek '%s' için etkinleştirildi"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor ayarlanmamış; dosya sistemin monitörünü gerçekten "
 "etkinleştirmek istiyorsanız onu ayarlayın"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "dosya sistemi monitörü etkin"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor ayarlanmış; dosya sistemi monitörünü gerçekten devre dışı "
 "bırakmak istiyorsanız onu kaldırın"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "dosya sistemi monitörü devre dışı"
 
@@ -22762,89 +23505,63 @@
 msgid "print tag contents"
 msgstr "etiket içeriğini yazdır"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<seçenekler>] <yol> [<işlememsi>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<seçenekler>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<seçenekler>] <yol>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <ç-ağacı> <yeni-yol>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<seçenekler>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<seçenekler>] <ç-ağacı>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <yol>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "'%s' silinemedi"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "geçerli bir dizin değil"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "gitdir dosyası mevcut değil"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "gitdir dosyası (%s) okunamıyor"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "az okundu (%<PRIuMAX> bayt bekleniyordu, %<PRIuMAX> okundu)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "geçersiz gitdir dosyası"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "gitdir dosyası var olmayan bir konuma işaret ediyor"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "%s/%s kaldırılıyor: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "budanan çalışma ağaçlarını bildir"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "<zaman>'dan eski çalışma ağaçlarının hükmünü kaldır"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' halihazırda var"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "kullanılamayan çalışma ağacı konumu '%s'"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22854,7 +23571,7 @@
 "geçersiz kılmak için '%s -f -f', temizlemek için 'unlock', 'prune' veya "
 "'remove' kullanın"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22863,115 +23580,127 @@
 "'%s' eksik; ancak halihazırda kaydı yapılmış bir çalışma ağacı;\n"
 "geçersiz kılmak için '%s -f', temizlemek için 'prune' veya 'remove' kullanın"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "'%s' dizini oluşturulamadı"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Çalışma ağacı hazırlanıyor (yeni dal '%s')"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Çalışma ağacı hazırlanıyor ('%s' dalı sıfırlanıyor; %s konumundaydı)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Çalışma ağacı hazırlanıyor ('%s' çıkış yapılıyor)"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Çalışma ağacı hazırlanıyor (ayrık HEAD %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "diğer çalışma ağacında çıkış yapılmış olsa bile <dal> çıkışını yap"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "yeni bir dal oluştur"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "yeni bir dal oluştur veya sıfırla"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "yeni çalışma ağacını doldur"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "yeni çalışma ağacını kilitli tut"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "izleme kipini ayarla (bkz: git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "yeni dalın adını bir uzak izleme dalıyla eşleştirmeyi dene"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b, -B ve --detach birlikte kullanılamaz"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track yalnızca yeni bir dal oluşturulmuşsa kullanılabilir"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "varsa genişletilmiş açıklamaları ve nedenleri göster"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr "<zaman>'dan eski çalışma ağaçlarına 'budanabilir' açıklama ekle"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose ve --porcelain birlikte kullanılamaz"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "kilitleme nedeni"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' bir çalışma ağacı değil"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Ana çalışma ağacı kilitlenemez veya kilidi açılamaz"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' halihazırda kilitli, nedeni: %s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' halihazırda kilitli"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' kilitli değil"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "altmodül içeren çalışma ağaçları taşınamaz veya kaldırılamaz"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr "çalışma ağacı kirli veya kilitli olsa bile zorla taşı"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' bir ana çalışma ağacı"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "hedef adı şuradan anlaşılamadı: '%s'"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -22980,7 +23709,7 @@
 "kilitli bir çalışma ağacı taşınamıyor, kilit nedeni: %s\n"
 "geçersiz kılmak için 'move -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -22988,38 +23717,38 @@
 "kilitli bir çalışma ağacı taşınamıyor;\n"
 "geçersiz kılmak için 'move -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "doğrulama başarısız, çalışma ağacı taşınamıyor: %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "'%s' -> '%s' taşıması başarısız"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "'%s' üzerinde 'git status' çalıştırılamadı"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' değiştirilmiş veya izlenmeyen dosyalar içeriyor, silmek için --force "
 "kullanın"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "'%s' üzerinde 'git status' çalıştırılamadı, kod %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr "çalışma ağacı kirli veya kilitli olsa bile zorla kaldır"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23028,7 +23757,7 @@
 "kilitli bir çalışma ağacı kaldırılamıyor, kilit nedeni: %s\n"
 "geçersiz kılmak için 'remove -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23036,17 +23765,17 @@
 "kilitli bir çalışma ağacı kaldırılamıyor;\n"
 "geçersiz kılmak için 'remove -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "doğrulama başarısız, çalışma ağacı kaldırılamıyor: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "şunu onar %s: %s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "hata: %s: %s"
@@ -23067,15 +23796,159 @@
 msgid "only useful for debugging"
 msgstr "yalnızca hata ayıklama için yararlı"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <yol>] [-c <ad>=<değer>]\n"
+"           [--exec-path[=<yol>]] [--html-path] [--man-path] [--info-path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=<yol>] [--work-tree=<yol>] [--namespace=<ad>]\n"
+"           [--super-prefix=<yol>] [--config-env=<ad>=<ortamdeğişkeni>]\n"
+"           <komut> [<argümanlar>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"'git help -a' ve 'git help -g' kullanılabilir komutları ve bazı konsept\n"
+"kılavuzlarını listeler. Belirli bir komut veya konsept üzerine bilgi almak\n"
+"için 'git help <komut>' veya 'git help <konsept>' yazın. Genel bir görünüm\n"
+"için 'git help git' kullanabilirsiniz."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "--git-dir için dizin verilmedi\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "--namespace için ad alanı verilmedi\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "--work-tree için dizin verilmedi\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "--super-prefix için önek verilmedi\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "-c bir yapılandırma dizisi bekliyor\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "--config-env için bir yapılandırma anahtarı verilmedi\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "-C için dizin verilmedi\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "bilinmeyen seçenek: %s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "'%s' arması genişletirilirken: '%s'"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"'%s' arması ortam değişkenlerini değiştirir.\n"
+"Bunu yapmak için armada '!git' kullanabilirsiniz."
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "%s için boş arma"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "özyineli arma: %s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "standart çıktı'da yazma hatası"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "standart çıktı'da bilinmeyen yazma hatası"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "standart çıktı'da kapatma başarısız"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "arma döngüsü algılandı: '%s' genişletilmesi sonlanmıyor:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "%s bir yerleşik olarak ele alınamıyor"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"kullanım: %s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr ""
+"'%s' armasının genişletilmesi başarısız oldu; '%s' bir git komutu değil\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "'%s' komutu çalıştırılamadı: %s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "--packfile için argüman geçerli bir sağlama olmalıdır ('%s' alındı)"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "bir git deposu değil"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile, --index-pack-args gerektiriyor"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args yalnızca --packfile ile kullanılabilir"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "beklenmeyen seçenekler"
@@ -23101,134 +23974,112 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "becerileri gösterdikten hemen sonra çık"
 
-#: git.c:28
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr "soket/boru halihazırda kullanımda: '%s'"
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr "sunucu şurada başlatılamadı: '%s'"
+
+#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
+msgid "could not spawn daemon in the background"
+msgstr "arka plan servisi oluşturulup çalıştırılamadı"
+
+#: t/helper/test-simple-ipc.c:356
+msgid "waitpid failed"
+msgstr "waitpid başarısız"
+
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
+msgstr "arka plan servisi henüz çevrimiçi değil"
+
+#: t/helper/test-simple-ipc.c:406
+msgid "daemon failed to start"
+msgstr "arka plan servisi başlatılamadı"
+
+#: t/helper/test-simple-ipc.c:410
+msgid "waitpid is confused"
+msgstr "waitpid'in kafası karışmış"
+
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
+msgstr "arka plan servisi henüz kapanmadı"
+
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active    [<ad>] [<seçenekler>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<ad>] [<iş-parçacıkları>]"
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+"test-helper simple-ipc start-daemon [<ad>] [<iş-parçacıkları>] [<maks-bekl>]"
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<ad>] [<maks-bekle>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<ad>] [<jeton>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<ad>] [<bayt-sayısı>] [<bayt>]"
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
-"git [--version] [--help] [-C <yol>] [-c <ad>=<değer>]\n"
-"           [--exec-path[=<yol>]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=<yol>] [--work-tree=<yol>] [--namespace=<ad>]\n"
-"           <komut> [<argümanlar>]"
+"test-helper simple-ipc multiple     [<ad>] [<iş-parçacığı>] [<bayt-sayısı>] "
+"[<parti-boyutu>]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"'git help -a' ve 'git help -g' kullanılabilir komutları ve bazı konsept\n"
-"kılavuzlarını listeler. Belirli bir komut veya konsept üzerine bilgi almak\n"
-"için 'git help <komut>' veya 'git help <konsept>' yazın. Genel bir görünüm\n"
-"için 'git help git' kullanabilirsiniz."
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "unix ad alanının adı veya yol adı"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "--git-dir için dizin verilmedi\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "named-pipe adı"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "--namespace için ad alanı verilmedi\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "sunucu iş parçacığı havuzundaki iş parçacığı sayısı"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "--work-tree için dizin verilmedi\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "arka plan servisinin başlaaması veya durması için beklenecek saniye"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "--super-prefix için önek verilmedi\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "bayt sayısı"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "-c bir yapılandırma dizisi bekliyor\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "iş parçacığı başına düşen istek sayısı"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "-C için dizin verilmedi\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "bayt"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "bilinmeyen seçenek: %s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "dengeleyici karakter"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "'%s' arması genişletirilirken: '%s'"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "jeton"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"'%s' arması ortam değişkenlerini değiştirir.\n"
-"Bunu yapmak için armada '!git' kullanabilirsiniz."
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "%s için boş arma"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "özyineli arma: %s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "standart çıktı'da yazma hatası"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "standart çıktı'da bilinmeyen yazma hatası"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "standart çıktı'da kapatma başarısız"
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "arma döngüsü algılandı: '%s' genişletilmesi sonlanmıyor:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "%s bir yerleşik olarak ele alınamıyor"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"kullanım: %s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr ""
-"'%s' armasının genişletilmesi başarısız oldu; '%s' bir git komutu değil\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "'%s' komutu çalıştırılamadı: %s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "sunucuya gönderilecek komut jetonu"
 
 #: http.c:399
 #, c-format
@@ -23267,7 +24118,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "SSL arka ucu '%s' olarak ayarlanamadı: Halihazırda ayarlanmış"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23419,53 +24270,53 @@
 msgid "no libc information available\n"
 msgstr "libc bilgisi mevcut değil\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "argümanlar"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "nesne süzümü"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "son kullanım tarihi"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "işlem yok (geriye dönük uyumluluk için)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "daha ayrıntılı anlat"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "daha sessiz ol"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "nesne adlarını görüntülemek için <n> basamak kullan"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "iletiden boşlukları ve #yorumları çıkart"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "yol belirtecini dosyadan oku"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 "--pathspec-from-file ile, yol belirteci ögeleri NUL karakteri ile ayrılır"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "anahtar"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "üzerine sıralanacak alan adı"
 
@@ -23474,14 +24325,6 @@
 msgstr ""
 "eğer olanaklıysa indeksi yeniden kullanılmış çakışma çözümü ile güncelle"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD şurada ayrıldı: "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD şundan ayrıldı: "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Dosya içeriğini indekse ekle"
@@ -23789,7 +24632,7 @@
 
 #: command-list.h:126
 msgid "Run a three-way file merge"
-msgstr "Bir üç yönlü dosya birleştirmesi çalıştır"
+msgstr "Bir 3 yönlü dosya birleştirmesi çalıştır"
 
 #: command-list.h:127
 msgid "Run a merge for files needing merging"
@@ -23812,8 +24655,8 @@
 msgstr "multi-pack-index doğrula ve yaz"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Bir etiket nesnesi oluştur"
+msgid "Creates a tag object with extra validation"
+msgstr "Ek doğrulamalı bir etiket nesnesi oluştur"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24121,69 +24964,55 @@
 msgstr "Özellikle yok sayılması istenen dosyaları belirt"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Yazar/İşleyici adlarını ve/veya e-posta adreslerini eşlemle"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Altmodül özelliklerini tanımlama"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git ad alanları"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Uzak depolar ile etkileşim için yardımcı programlar"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git Depo Yerleşimi"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Git için revizyonları ve erimleri belirtme"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Bir depoyu bir başkasının içine bağlama"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Git'e Giriş: Bölüm 2"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Git'e Giriş"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Önerilen Git çalışma akışlarına genel bakış"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Hatalı revizyon girdisi: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Günlük dosyası verilmedi"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "$file yeniden oynatım için okunamıyor"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? neden söz ediyorsun?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "ikili arama başarısız: Komut verilmedi."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "$command çalıştırılıyor"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24192,11 +25021,11 @@
 "bisect çalıştırılamadı:\n"
 "çıkış kodu $res, '$command' konumundan, < 0 veya >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "bisect daha fazla çalıştırılamıyor"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24205,14 +25034,10 @@
 "ikili arama başarısız oldu:\n"
 "'bisect-state $state' $res hata koduyla çıktı"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "ikili arama başarılı"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "İkili arama yapmıyoruz."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25138,26 +25963,31 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "yerel saat ofseti 24 saate eşit veya daha büyük\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "onulmaz: '%s' komutu %d çıkış koduyla sonlandı"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "düzenleyici düzgünce çıkmadı, her şey iptal ediliyor"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "'%s' yazmakta olduğunuz e-postanın orta düzey bir sürümünü içeriyor.\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' yazılan e-postayı içeriyor.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases diğer seçeneklerle uyumsuz\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -25168,11 +25998,11 @@
 "'e'ye dikkat edin. sendemail.forbidSendmailVariables seçeneğini 'false'\n"
 "yaparak bu denetimi devre dışı bırakabilirsiniz.\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "'git format-patch' bir deponun dışından çalıştırılamıyor\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
@@ -25180,37 +26010,37 @@
 "'batch-size' ve 'relogin' birlikte belirtilmeli (komut satırı veya "
 "yapılandırma seçeneklerinden)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Bilinmeyen --suppress-cc alanı: '%s'\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Bilinmeyen --confirm ayarı: '%s'\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "uyarı: tırnak içine alınmış sendmail arması desteklenmiyor: %s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "uyarı: ':include:' desteklenmiyor: %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "uyarı: '/file' veya '|pipe' yeniden yönlendirmesi desteklenmiyor: %s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "uyarı: sendmail satırı tanımlanamadı: %s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25225,21 +26055,12 @@
 "\t* Bir dosya demek istiyorsanız \"./%s\" diyerek veya\n"
 "\t* Bir erim demek istiyorsanız --format-patch seçeneğini vererek\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "%s opendir yapılamadı: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"onulmaz: %s: %s\n"
-"uyarı: hiçbir yama gönderilmedi\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -25249,17 +26070,17 @@
 "Hiçbir yama dosyası belirtilmedi!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "%s içinde konu satırı yok mu?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "%s yazma için açılamadı: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25273,38 +26094,38 @@
 "\n"
 "Bir özet göndermek istemiyorsanız gövde kısmını temizleyin.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "%s açılamadı: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "%s.final açılamadı: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "Özet e-postası boş, atlanıyor\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "<%s> kullanmak istediğinizden emin misiniz [y/N]? "
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
 msgstr ""
 "Aşağıdaki dosyalar 8 bit; ancak Content-Transfer-Encoding desteklemiyorlar.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Hangi 8 bit kodlamayı beyan etmeliyim [UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -25317,22 +26138,22 @@
 "içinde '*** SUBJECT HERE ***' konu şablonu var. Yine de göndermek "
 "istiyorsanız --force kullanın.\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "E-postalar kime gönderilmeli (eğer gerekliyse)?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "onulmaz: '%s' arması kendisine genişliyor\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 "İlk e-posta için Message-ID, In-Reply-To olarak kullanılsın mı (eğer "
 "gerekliyse)?"
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "hata: şuradan geçerli bir adres çıkartılamadı: %s\n"
@@ -25340,16 +26161,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "Bu adresle ne yapılsın? ([q] çık|[d] bırak|düz[e]nle): "
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "CA yolu \"%s\" mevcut değil"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25375,131 +26196,146 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr ""
 "Bu e-posta gönderilsin mi? ([y] evet|[n] hayır|düz[e]nle|[q] çık|[a] tümü): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Bu e-postayı yanıt gerektirme seçeneğiyle gönder"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "Gerekli SMTP sunucusu düzgünce tanımlanmamış."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Sunucu STARTTLS desteklemiyor! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS başarısız oldu! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
 "SMTP düzgünce başlatılamıyor. Yapılandırmayı denetleyin ve --smtp-debug "
 "yapın."
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "%s gönderilemedi\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "%s gönderilir gibi yapıldı\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "%s gönderildi\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Sınama tamam. Günlük çıktısı:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "Tamam. Günlük çıktısı:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Sonuç: "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Sonuç: Tamam\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "%s dosyası açılamıyor"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Cc: %s, '%s' satırından ekleniyor\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) To: %s, '%s' satırından ekleniyor\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Cc: %s, '%s' satırından ekleniyor\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) Cc: %s, '%s' satırından ekleniyor\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) '%s' çalıştırılamadı"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) %s: %s, '%s' konumundan ekleniyor\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) şuraya olan veri yolu kapatılamadı: '%s'"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "ileti 7 bit olarak gönderilemiyor"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "geçersiz aktarım kodlaması"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"onulmaz: %s: sendemail-validate kancası tarafından reddedildi\n"
+"%s\n"
+"uyarı: hiçbir yama gönderilmedi\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "%s açılamıyor: %s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s: yama 998 karakterden daha uzun bir satır içeriyor"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"onulmaz: %s:%d, 998 karakterden uzun\n"
+"uyarı: hiçbir yama gönderilmedi\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "%s, yedek sonek '%s' ile atlanıyor.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "%s ögesini gerçekten göndermek istiyor musunuz? [y|N]: "
diff --git a/po/vi.po b/po/vi.po
index 65df3d0..ccdabfa 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -2,15 +2,15 @@
 # Bản dịch tiếng Việt dành cho GIT-CORE.
 # This file is distributed under the same license as the git-core package.
 # Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2012.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
 # Đoàn Trần Công Danh <congdanhqx@gmail.com>, 2020.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git v2.30.0 rd2\n"
+"Project-Id-Version: git  v2.32.0-rc0\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-21 08:42+0700\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-24 13:49+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
@@ -19,18 +19,16 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-Basepath: ..\n"
-"X-Generator: Poedit 2.4.2\n"
+"X-Generator: Poedit 3.0\n"
 
 #: add-interactive.c:376
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Hả (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "không thể đọc bảng mục lục"
 
@@ -58,7 +56,7 @@
 msgid "could not stage '%s'"
 msgstr "không thể đưa “%s” lên bệ phóng"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "không thể ghi bảng mục lục"
 
@@ -73,7 +71,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "chú ý: %s giờ đã bỏ theo dõi.\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -217,12 +215,12 @@
 msgid "unstaged"
 msgstr "chưa đưa lên bệ phóng"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "đường-dẫn"
@@ -746,7 +744,7 @@
 msgid "'git apply' failed"
 msgstr "“git apply” gặp lỗi"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -755,45 +753,45 @@
 "\n"
 "Tắt lời nhắn này bằng \"git config advice.%s false\""
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sgợi ý: %.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "Cherry-picking là không thể thực hiện bởi vì bạn có những tập tin chưa được "
 "hòa trộn."
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 "Commit là không thể thực hiện bởi vì bạn có những tập tin chưa được hòa trộn."
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 "Merge là không thể thực hiện bởi vì bạn có những tập tin chưa được hòa trộn."
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 "Pull là không thể thực hiện bởi vì bạn có những tập tin chưa được hòa trộn."
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 "Revert là không thể thực hiện bởi vì bạn có những tập tin chưa được hòa trộn."
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr ""
 "Việc này không thể thực hiện với %s bởi vì bạn có những tập tin chưa được "
 "hòa trộn."
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -801,23 +799,41 @@
 "Sửa chúng trong cây làm việc, và sau đó dùng lệnh “git add/rm <tập-tin>”\n"
 "dành riêng cho việc đánh dấu cần giải quyết và tạo lần chuyển giao."
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "Thoát ra bởi vì xung đột không thể giải quyết."
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc hòa trộn (MERGE_HEAD vẫn tồn tại)."
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "Vui lòng chuyển giao các thay đổi trước khi hòa trộn."
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "Thoát ra bởi vì việc hòa trộn không hoàn tất."
 
-#: advice.c:290
+#: 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 ""
+"Các đặc tả đường dẫn sau đây không khớp với bất kỳ đường dẫn thích hợp nào,\n"
+"nhưng chúng khớp với các mục mục lục bên ngoài \"sparse checkout\" hiện "
+"tại:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr ""
+"Vô hiệu hóa hoặc sửa đổi các quy tắc sparsity nếu bạn có ý định cập nhật các "
+"mục như vậy."
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -867,85 +883,81 @@
 msgid "unclosed quote"
 msgstr "chưa có dấu nháy đóng"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "không nhận ra tùy chọn về khoảng trắng “%s”"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "không nhận ra tùy chọn bỏ qua khoảng trắng “%s”"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject và --3way không thể dùng cùng nhau."
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached và --3way không thể dùng cùng nhau."
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way ở ngoài một kho chứa"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index ở ngoài một kho chứa"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached ở ngoài một kho chứa"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr ""
 "Không thể chuẩn bị biểu thức chính qui dấu vết thời gian (timestamp regexp) "
 "%s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "thi hành biểu thức chính quy trả về %d cho đầu vào: %s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "không thể tìm thấy tên tập tin trong miếng vá tại dòng %d"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: git-diff sai - cần /dev/null, nhưng lại nhận được %s trên dòng %d"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: git-diff sai - tên tập tin mới không nhất quán trên dòng %d"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: git-diff sai - tên tập tin cũ không nhất quán trên dòng %d"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff sai - cần “/dev/null” trên dòng %d"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "chế độ không hợp lệ trên dòng %d: %s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "phần đầu mâu thuẫn dòng %d và %d"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -957,91 +969,91 @@
 "phần đầu diff cho git  thiếu thông tin tên tập tin khi gỡ bỏ đi %d trong "
 "thành phần dẫn đầu tên của đường dẫn (dòng %d)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "phần đầu diff cho git thiếu thông tin tên tập tin (dòng %d)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "chi tiết: dòng không cần: %.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "miếng vá phân mảnh mà không có phần đầu tại dòng %d: %.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "tập tin mới phụ thuộc vào nội dung cũ"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "tập tin đã xóa vẫn còn nội dung"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "miếng vá hỏng tại dòng %d"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "tập tin mới %s phụ thuộc vào nội dung cũ"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "tập tin đã xóa %s vẫn còn nội dung"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** cảnh báo: tập tin %s trở nên trống rỗng nhưng không bị xóa"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "miếng vá định dạng nhị phân sai hỏng tại dòng %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "miếng vá định dạng nhị phân không được nhận ra tại dòng %d"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "vá chỉ với “rác” tại dòng %d"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "không thể đọc liên kết mềm %s"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "không thể mở hay đọc %s"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "sai khởi đầu dòng: “%c”"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Khối dữ liệu #%d thành công tại %d (offset %d dòng)."
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Ngữ cảnh bị giảm xuống còn (%ld/%ld) để áp dụng mảnh dữ liệu tại %d"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1050,439 +1062,448 @@
 "trong khi đang tìm kiếm cho:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "thiếu dữ liệu của miếng vá định dạng nhị phân cho “%s”"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "không thể reverse-apply một miếng vá nhị phân mà không đảo ngược khúc thành "
 "“%s”"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "không thể áp dụng miếng vá nhị phân thành “%s” mà không có dòng chỉ mục đầy "
 "đủ"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "miếng vá áp dụng cho “%s” (%s), cái mà không khớp với các nội dung hiện tại."
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "miếng vá áp dụng cho một “%s” trống rỗng nhưng nó lại không trống"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "không thể đọc postimage %s cần thiết cho “%s”"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "miếng vá định dạng nhị phân không được áp dụng cho “%s”"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "vá nhị phân cho “%s” tạo ra kết quả không chính xác (mong chờ %s, lại nhận "
 "%s)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "gặp lỗi khi vá: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "không thể lấy ra %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "gặp lỗi khi đọc %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "đọc từ “%s” vượt ra ngoài liên kết mềm"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "đường dẫn %s đã bị xóa hoặc đổi tên"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: không tồn tại trong bảng mục lục"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: không khớp trong mục lục"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr "kho thiếu đối tượng blob cần thiết để trở về trên “3-way merge”."
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "kho thiếu đối tượng blob cần thiết để thực hiện hòa trộn “3-way”."
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "Đang trở lại hòa trộn “3-đường”…\n"
+msgid "Performing three-way merge...\n"
+msgstr "Đang thực hiện hòa trộn “3-đường”…\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "không thể đọc nội dung hiện hành của “%s”"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "Gặp lỗi khi quay trở lại để hòa trộn kiểu “three-way”…\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "Gặp lỗi khi thực hiện hòa trộn kiểu “three-way”…\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Đã áp dụng miếng vá %s với các xung đột.\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Đã áp dụng miếng vá %s một cách sạch sẽ.\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "Đang trở lại ứng dụng chi phối…\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "loại bỏ miếng vá để lại nội dung tập tin"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: sai kiểu"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s có kiểu %o, cần %o"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "đường dẫn không hợp lệ “%s”"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: đã có từ trước trong bảng mục lục"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: đã sẵn có trong thư mục đang làm việc"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "chế độ mới (%o) của %s không khớp với chế độ cũ (%o)"
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "chế độ mới (%o) của %s không khớp với chế độ cũ (%o) của %s"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "tập tin chịu tác động “%s” vượt ra ngoài liên kết mềm"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: miếng vá không được áp dụng"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Đang kiểm tra miếng vá %s…"
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "thông tin sha1 thiếu hoặc không dùng được cho mô-đun %s"
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "thay đổi chế độ cho %s, cái mà không phải là HEAD hiện tại"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "thông tin sha1 còn thiếu hay không dùng được(%s)."
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "không thể thêm %s vào chỉ mục tạm thời"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "không thể ghi mục lục tạm vào %s"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "không thể gỡ bỏ %s từ mục lục"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "miếng vá sai hỏng cho mô-đun-con %s"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "không thể lấy thống kê về tập tin %s mới hơn đã được tạo"
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "không thể tạo “kho lưu đằng sau” cho tập tin được tạo mới hơn %s"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "không thể thêm mục nhớ đệm cho %s"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "gặp lỗi khi ghi vào “%s”"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "đang đóng tập tin “%s”"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "không thể ghi vào tập tin “%s” chế độ %o"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Đã áp dụng miếng vá %s một cách sạch sẽ."
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "lỗi nội bộ"
 
-#: apply.c:4557
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Đang áp dụng miếng vá %%s với %d lần từ chối…"
 
-#: apply.c:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "đang cắt ngắn tên tập tin .rej thành %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "không mở được “%s”"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Khối nhớ #%d được áp dụng gọn gàng."
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Đoạn dữ liệu #%d bị từ chối."
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Bỏ qua đường dẫn “%s”."
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "không thừa nhận đầu vào"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "không thể đọc tập tin lưu bảng mục lục"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "không thể mở miếng vá “%s”: %s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "đã chấm dứt %d lỗi khoảng trắng"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d dòng thêm khoảng trắng lỗi."
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d dòng được áp dụng sau khi sửa các lỗi khoảng trắng."
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "không áp dụng các thay đổi khớp với đường dẫn đã cho"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "áp dụng các thay đổi khớp với đường dẫn đã cho"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "số"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "gỡ bỏ <số> dấu gạch chéo dẫn đầu từ đường dẫn diff cổ điển"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "lờ đi phần bổ xung được tạo ra bởi miếng vá"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "thay vì áp dụng một miếng vá, kết xuất kết quả từ lệnh diffstat cho đầu ra"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "hiển thị số lượng các dòng được thêm vào và xóa đi theo ký hiệu thập phân"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "thay vì áp dụng một miếng vá, kết xuất kết quả cho đầu vào"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "thay vì áp dụng miếng vá, hãy xem xem miếng vá có thích hợp không"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "hãy chắc chắn là miếng vá thích hợp với bảng mục lục hiện hành"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "đánh dấu các tập tin mới với “git add --intent-to-add”"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "áp dụng một miếng vá mà không động chạm đến cây làm việc"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "chấp nhận một miếng vá mà không động chạm đến cây làm việc"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "đồng thời áp dụng miếng vá (dùng với tùy chọn --stat/--summary/--check)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "thử hòa trộn kiểu three-way nếu việc vá không thể thực hiện được"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr ""
+"thử hòa trộn kiểu three-way, quay lại dán bình thường nếu không thể thực "
+"hiện được"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "xây dựng bảng mục lục tạm thời trên cơ sở thông tin bảng mục lục được nhúng"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "các đường dẫn bị ngăn cách bởi ký tự NULL"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "đảm bảo rằng có ít nhất <n> dòng ngữ cảnh khớp"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "hành động"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "tìm thấy một dòng mới hoặc bị sửa đổi mà nó có lỗi do khoảng trắng"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi tìm ngữ cảnh"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "áp dụng miếng vá theo chiều ngược"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "đừng hy vọng có ít nhất một dòng ngữ cảnh"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "để lại khối dữ liệu bị từ chối trong các tập tin *.rej tương ứng"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "cho phép chồng khối nhớ"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "chi tiết"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "đã dò tìm thấy dung sai không chính xác thiếu dòng mới tại cuối tập tin"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "không tin số lượng dòng trong phần đầu khối dữ liệu"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "gốc"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "treo thêm <root> vào tất cả các tên tập tin"
 
@@ -1549,141 +1570,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <kho> [--exec <lệnh>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "không thể đọc %s"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "không thể đọc “%s”"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "đặc tả đường dẫn “%s” không khớp với bất kỳ tập tin nào"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "không có tham chiếu nào như thế: %.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "không phải là tên đối tượng hợp lệ: “%s”"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "không phải là đối tượng cây: “%s”"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "thư mục làm việc hiện hành chưa được theo dõi"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "Không tìm thấy tập tin: %s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "Không phải một tập tin thường: %s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "định_dạng"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "định dạng lưu trữ"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "tiền_tố"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "nối thêm tiền tố vào từng đường dẫn tập tin trong kho lưu"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "tập_tin"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "thêm các tập tin không được theo dõi vào kho lưu"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "ghi kho lưu vào tập tin này"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "đọc .gitattributes trong thư mục làm việc"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "liệt kê các tập tin được lưu trữ vào stderr (đầu ra lỗi tiêu chuẩn)"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "đặt mức nén"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "liệt kê các kiểu nén được hỗ trợ"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "kho"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "nhận kho nén từ kho chứa <kho> trên máy chủ"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "lệnh"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "đường dẫn đến lệnh git-upload-pack trên máy chủ"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "Gặp tùy chọn không cần --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "Tùy chọn --exec chỉ có thể được dùng cùng với --remote"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "Gặp tùy chọn không cần --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "Các tùy chọn --add-file và --remote không thể sử dụng cùng với nhau"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "Không hiểu định dạng “%s”"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Tham số không được hỗ trợ cho định dạng “%s”: -%d"
@@ -1693,12 +1714,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s không phải tên thuộc tính hợp lệ"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s không được phép: %s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1781,12 +1802,12 @@
 msgid "a %s revision is needed"
 msgstr "cần một điểm xét duyệt %s"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "không thể tạo tập tin “%s”"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "không thể đọc tập tin “%s”"
@@ -1804,7 +1825,7 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "Không tìm thấy lần chuyển giao kiểm tra được nào.\n"
 "Có lẽ bạn bắt đầu với các tham số đường dẫn sai?\n"
@@ -1824,40 +1845,40 @@
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Bisecting: còn %d điểm xét duyệt để kiểm sau %s này\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "tùy chọn--contents và --reverse không được trộn vào nhau."
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "không thể dùng --contents với tên đối tượng chuyển giao cuối cùng"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "cùng sử dụng --reverse và --first-parent cần chỉ định lần chuyển giao cuối"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "cài đặt việc di chuyển qua các điểm xét duyệt gặp lỗi"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "cùng sử dụng --reverse --first-parent yêu cầu vùng cùng với chuỗi cha-mẹ-đầu-"
 "tiên"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "không có đường dẫn %s trong “%s”"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "không thể đọc blob %s cho đường dẫn “%s”"
@@ -1993,12 +2014,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "Nhánh không hợp lệ: “%s”."
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "“%s” đã được lấy ra tại “%s” rồi"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD của cây làm việc %s chưa được cập nhật"
@@ -2023,8 +2044,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "phần đầu không được thừa nhận: %s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "không thể mở “%s”"
@@ -2065,293 +2086,306 @@
 msgid "pack-objects died"
 msgstr "đối tượng gói đã chết"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list đã chết"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "th.chiếu “%s” bị loại trừ bởi các tùy chọn rev-list"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "phiên bản bundle %d không được hỗ trợ"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "không thể ghi phiên bản bundle %d với thuật toán %s"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "đối số không được thừa nhận: %s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "Từ chối tạo một bó dữ liệu trống rỗng."
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "không thể tạo “%s”"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "mục lục gói đã chết"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "mã mảnh kết thúc sớm hơn bình thường"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "bù mảnh không đúng cách %<PRIx64> và %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "tìm thấy ID của mảnh bị trùng lặp %<PRIx32>"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "mảnh cuối cùng có id không bằng không %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "giá trị màu không hợp lệ: %.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "phiên bản băm không hợp lệ"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "tập tin đồ-thị-các-lần-chuyển-giao quá nhỏ"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "chữ ký đồ-thị-các-lần-chuyển-giao %X không khớp chữ ký %X"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "phiên bản đồ-thị-các-lần-chuyển-giao %X không khớp phiên bản %X"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "phiên bản đồ-thị-các-lần-chuyển-giao %X không khớp phiên bản %X"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "tập tin đồ-thị-các-lần-chuyển-giao quá nhỏ để giữ %u mảnh dữ liệu"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "bù mảnh đồ-thị-các-lần-chuyển-giao không đúng chỗ %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "mã mảnh đồ-thị-các-lần-chuyển-giao %08x xuất hiện nhiều lần"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "đồ-thị-các-lần-chuyển-giao có không có mảnh các đồ họa cơ sở"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "móc xích đồ-thị-các-lần-chuyển-giao không khớp"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 "móc xích đồ-thị-các-lần-chuyển-giao không hợp lệ: dòng “%s” không phải là "
 "một mã băm"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "không thể tìm thấy tất cả các tập tin đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "vị trí lần chuyển giao không hợp lệ. đồ-thị-các-lần-chuyển-giao có vẻ như đã "
 "bị hỏng"
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "không thể tìm thấy lần chuyển giao %s"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "commit-graph yêu cầu dữ liệu tạo tràn nhưng không có"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "không thể phân tích lần chuyển giao “%s”"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "không thể lấy kiểu của đối tượng “%s”"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "Đang tải các lần chuyển giao chưa biết trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 "Mở rộng các lần chuyển giao có thể tiếp cận được trong trong đồ thị lần "
 "chuyển giao"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "Đang dọn dẹp các đánh dấu lần chuyển giao trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "Đang tính mức hình học tô-pô tạo đồ thị các lần chuyển giao"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "Đang tính toán số tạo đồ thị các lần chuyển giao"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Đang tính toán chuyển giao các bộ lọc Bloom đường dẫn bị thay đổi"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "Đang sưu tập các lần chuyển giao được tham chiếu"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] ""
 "Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong %d gói"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "gặp lỗi thêm gói %s"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "gặp lỗi khi mở mục lục cho “%s”"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong số các đối "
 "tượng đã đóng gói"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "Đang tìm các cạnh mở tộng trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "gặp lỗi khi ghi số đúng của mã đồ họa cơ sở"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "không thể tạo lớp sơ đồ tạm thời"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "không thể chỉnh sửa quyền chia sẻ thành “%s”"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Đang ghi ra đồ thị các lần chuyển giao trong lần %d"
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "không thể mở tập tin mắt xích đồ thị chuyển giao"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "gặp lỗi khi đổi tên tập tin đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "gặp lỗi khi đổi tên tập tin đồ-thị-các-lần-chuyển-giao tạm thời"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "Đang quét các lần chuyển giao đã hòa trộn"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "Đang hòa trộn đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "cố gắng để ghi một đồ thị các lần chuyển giao, nhưng “core.commitGraph” bị "
 "vô hiệu hóa"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "có quá nhiều lần chuyển giao để ghi đồ thị"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "tập tin đồ-thị-các-lần-chuyển-giao có tổng kiểm không đúng và có vẻ như là "
 "đã hỏng"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "đồ-thị-các-lần-chuyển-giao có thứ tự OID không đúng: %s sau %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "đồ-thị-các-lần-chuyển-giao có giá trị fanout không đúng: fanout[%d] = %u != "
 "%u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "gặp lỗi khi phân tích lần chuyển giao từ %s đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "Đang thẩm tra các lần chuyển giao trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "gặp lỗi khi phân tích lần chuyển giao %s từ cơ sở dữ liệu đối tượng cho đồ "
 "thị lần chuyển giao"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID cây gốc cho lần chuyển giao %s trong đồ-thị-các-lần-chuyển-giao là %s != "
 "%s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "danh sách cha mẹ đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là quá dài"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "cha mẹ đồ-thị-các-lần-chuyển-giao cho %s là %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "danh sách cha mẹ đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s bị chấm "
 "dứt quá sớm"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2359,7 +2393,7 @@
 "đồ-thị-các-lần-chuyển-giao có con số không lần tạo cho lần chuyển giao %s, "
 "nhưng không phải số không ở chỗ khác"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2367,20 +2401,22 @@
 "đồ-thị-các-lần-chuyển-giao có con số không phải không lần tạo cho lần chuyển "
 "giao %s, nhưng số không ở chỗ khác"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "tạo đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr ""
+"tạo đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là %<PRIuMAX> < "
+"%<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "ngày chuyển giao cho lần chuyển giao %s trong đồ-thị-các-lần-chuyển-giao là "
 "%<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "không thể phân tích cú pháp %s"
@@ -2410,28 +2446,28 @@
 "Tắt lời nhắn này bằng cách chạy\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Lần chuyển giao %s có một chữ ký GPG không đáng tin, được cho là bởi %s."
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Lần chuyển giao %s có một chữ ký GPG sai, được cho là bởi %s."
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Lần chuyển giao %s không có chữ ký GPG."
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Lần chuyển giao %s có một chữ ký GPG tốt bởi %s\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2445,7 +2481,7 @@
 msgid "memory exhausted"
 msgstr "hết bộ nhớ"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2460,291 +2496,335 @@
 "\t%s\n"
 "Nguyên nhân có thể là gồm quẩn vòng."
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "không thể khai triển đường dẫn “%s”"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "các bao gồm cấu hình liên quan phải đến từ các tập tin"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "các điều kiện bao gồm cấu hình liên quan phải đến từ các tập tin"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "định dạng cấu hình không hợp lệ: %s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "thiếu tên biến môi trường cho cấu hình '%.*s'"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "thiếu biến môi trường '%s' cho cấu hình '%.*s'"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "khóa không chứa một phần: %s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "khóa không chứa bất kỳ một tên biến nào: %s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "khóa không đúng: %s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "khóa không hợp lệ (dòng mới): %s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "khóa cấu hình trống rỗng"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "tham số cấu hình không có thực: %s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "định dạng không có thực trong %s"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "số lượng không có thực trong %s"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "quá nhiều mục tin trong %s"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "thiếu khóa cấu hình “%s”"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "thiếu giá trị cấu hình “%s”"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "tập tin cấu hình sai tại dòng %d trong blob %s"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "cấu hình sai tại dòng %d trong tập tin %s"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "cấu hình sai tại dòng %d trong đầu vào tiêu chuẩn"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "cấu hình sai tại dòng %d trong blob-mô-đun-con %s"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "cấu hình sai tại dòng %d trong dòng lệnh %s"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "cấu hình sai tại dòng %d trong %s"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "nằm ngoài phạm vi"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "đơn vị không hợp lệ"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s”: %s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong blob %s: %s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong tập tin %s: %s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "sai giá trị bằng số của cấu hình “%s” cho “%s” trong đầu vào tiêu chuẩn: %s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "sai giá trị bằng số của cấu hình “%s” cho “%s” trong submodule-blob %s: %s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong dòng lệnh %s: %s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong %s: %s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "sai giá trị kiểu lô-gíc của cấu hình “%s” cho “%s”"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "gặp lỗi mở rộng thư mục người dùng trong: “%s”"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "“%s” dành cho “%s” không phải là dấu vết thời gian hợp lệ"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "chiều dài abbrev nằm ngoài phạm vi: %d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "mức nén zlib %d là sai"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar chỉ được có một ký tự"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "chế độ không hợp lệ đối với việc tạo đối tượng: %s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "giá trị cho %s sai dạng"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "giá trị cho %s sai dạng: %s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "phải là một trong số nothing, matching, simple, upstream hay current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "mức nén gói %d không hợp lệ"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "không thể tải đối tượng blob cấu hình “%s”"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "tham chiếu “%s” không chỉ đến một blob nào cả"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "không thể phân giải điểm xét duyệt “%s”"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "gặp lỗi khi phân tích cú pháp %s"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "không thể phân tích cấu hình dòng lệnh"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "đã có lỗi chưa biết xảy ra trong khi đọc các tập tin cấu hình"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s không hợp lệ: “%s”"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "giá trị splitIndex.maxPercentChange “%d” phải nằm giữa 0 và 100"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "không thể phân tích “%s” từ cấu hình dòng lệnh"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "sai biến cấu hình “%s” trong tập tin “%s” tại dòng %d"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "tên của phần không hợp lệ “%s”"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s có đa giá trị"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "gặp lỗi khi ghi tập tin cấu hình “%s”"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "không thể khóa tập tin cấu hình %s"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "đang mở “%s”"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "mẫu không hợp lệ: %s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "tập tin cấu hình “%s” không hợp lệ"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat trên %s gặp lỗi"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "không thể mmap “%s”"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod trên %s gặp lỗi"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "không thể ghi tập tin cấu hình “%s”"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "không thể đặt “%s” thành “%s”"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "không thể thôi đặt “%s”"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "tên của phần không hợp lệ: %s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "thiếu giá trị cho cho “%s”"
@@ -2806,45 +2886,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "lỗi giao thức: không cần “%s”"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "không hiểu định dạng đối tượng “%s” được chỉ định bởi máy phục vụ"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "trả về của ls-refs không hợp lệ: %s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "cần đẩy dữ liệu lên đĩa sau khi liệt kê tham chiếu"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "cần nhận được trả lời là kết thúc gói sau khi liệt kê tham chiếu"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "giao thức “%s” chưa được hỗ trợ"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "không thể đặt SO_KEEPALIVE trên ổ cắm"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "Đang tìm kiếm %s … "
 
-#: connect.c:735
+#: connect.c:761
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "không tìm được %s (cổng %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2853,7 +2933,7 @@
 "xong.\n"
 "Đang kết nối đến %s (cổng %s) … "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2863,61 +2943,65 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "hoàn tất."
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "không thể tìm thấy %s (%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "không hiểu cổng %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "đã khóa tên máy lạ “%s”"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "đã khóa cổng lạ “%s”"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "không thể khởi chạy ủy nhiệm “%s”"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "chưa chỉ định đường dẫn; xem'git help pull” để biết cú pháp url hợp lệ"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "newline bị cấm trong các git:// máy chủ và đường dẫn repo"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh biến thể “simple” không hỗ trợ -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh biến thể “simple” không hỗ trợ -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh biến thể “simple” không hỗ trợ đặt cổng"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "đã khóa tên đường dẫn lạ “%s”"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "không thể rẽ nhánh tiến trình con"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "Đang kiểm tra kết nối"
 
@@ -2933,17 +3017,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "gặp lỗi khi đóng đầu vào chuẩn stdin của rev-list"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "crlf_action %d không hợp lệ"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "CRLF nên được thay bằng LF trong %s"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2952,12 +3036,12 @@
 "CRLF sẽ bị thay thế bằng LF trong %s.\n"
 "Tập tin sẽ có kiểu xuống dòng như bản gốc trong thư mục làm việc của bạn"
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "LF nên thay bằng CRLF trong %s"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -2966,12 +3050,12 @@
 "LF sẽ bị thay thế bằng CRLF trong %s.\n"
 "Tập tin sẽ có kiểu xuống dòng như bản gốc trong thư mục làm việc của bạn"
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "BOM bị cấm trong “%s” nếu được mã hóa là %s"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -2980,12 +3064,12 @@
 "Tập tin “%s” có chứa ký hiệu thứ tự byte (BOM). Vui lòng dùng UTF-%.*s như "
 "là bảng mã cây làm việc."
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "BOM là bắt buộc trong “%s” nếu được mã hóa là %s"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2994,50 +3078,50 @@
 "Tập tin “%s” còn thiếu ký hiệu thứ tự byte (BOM). Vui lòng dùng UTF-%sBE hay "
 "UTF-%sLE (còn phục thuộc vào thứ tự byte) như là bảng mã cây làm việc."
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "gặp lỗi khi mã hóa “%s”  từ “%s” sang “%s”"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "mã hóa “%s” từ %s thành %s và ngược trở lại không phải là cùng"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "không thể rẽ nhánh tiến trình để chạy bộ lọc bên ngoài “%s”"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "không thể cấp đầu vào cho bộ lọc bên ngoài “%s”"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "chạy bộ lọc bên ngoài “%s” gặp lỗi %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "đọc từ bộ lọc bên ngoài “%s” gặp lỗi"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "gặp lỗi khi chạy bộ lọc bên ngoài “%s”"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "gặp kiểu bộ lọc thừa"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "tên đường dẫn quá dài cho bộ lọc bên ngoài"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
@@ -3046,16 +3130,16 @@
 "bộ lọc bên ngoài “%s” không sẵn sàng nữa mặc dù không phải tất cả các đường "
 "dẫn đã được lọc"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false là không phải bảng-mã-cây-làm-việc hợp lệ"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s: gặp lỗi khi xóa bộ lọc “%s”"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s: smudge bộ lọc %s gặp lỗi"
@@ -3172,23 +3256,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "Đã đánh dấu %d island, xong.\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "không hiểu giá trị cho --diff-merges: %s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base không hoạt động với phạm vi"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base chỉ hoạt động với các lần chuyển giao"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "không thể lấy HEAD"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "không tìm thấy cơ sở để hòa trộn"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "có nhiều cơ sở để hòa trộn"
 
@@ -3254,35 +3343,35 @@
 "Tìm thấy các lỗi trong biến cấu hình “diff.dirstat”:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "phần mềm diff ở bên ngoài đã chết, dừng tại %s"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only, --name-status, --check và -s loại từ lẫn nhau"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "Các tùy chọn -G, -S, và --find-object loại từ lẫn nhau"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow cần chính xác một đặc tả đường dẫn"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "giá trị --stat không hợp lệ: “%s”"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "tùy chọn “%s” cần một giá trị bằng số"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3291,42 +3380,42 @@
 "Gặp lỗi khi phân tích đối số tùy chọn --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "không hiểu lớp thay đổi “%c” trong --diff-filter=%s"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "không hiểu giá trị sau ws-error-highlight=%.*s"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "không thể phân giải “%s”"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s cần dạng <n>/<m>"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s cần một ký tự, nhưng lại nhận được “%s”"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "đối số --color-moved sai: %s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "chế độ “%s” không hợp lệ trong --color-moved-ws"
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3334,155 +3423,155 @@
 "tùy chọn  diff-algorithm chấp nhận \"myers\", \"minimal\", \"patience\" và "
 "\"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "tham số cho %s không hợp lệ"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "đưa cho -I biểu thức chính quy không hợp lệ: “%s”"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "gặp lỗi khi phân tích đối số tùy chọn --submodule: “%s”"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "đối số --word-diff sai: %s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "Các tùy chọn định dạng khi xuất các khác biệt"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "tạo miếng vá"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "chặn mọi kết xuất từ diff"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "tạo khác biệt với <n> dòng ngữ cảnh"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "tạo khác biệt ở định dạng thô"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "đồng nghĩa với “-p --raw”"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "đồng nghĩa với “-p --stat”"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "--stat thuận tiện cho máy đọc"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "chỉ xuất những dòng cuối của --stat"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<tham_số_1,tham_số_2>…"
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "đầu ra phân phối của số lượng thay đổi tương đối cho mỗi thư mục con"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "đồng nghĩa với --dirstat=cumulative"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "đồng nghĩa với --dirstat=files,param1,param2…"
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "cảnh báo nếu các thay đổi đưa ra các bộ tạo xung đột hay lỗi khoảng trắng"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "tổng hợp dạng xúc tích như là tạo, đổi tên và các thay đổi chế độ"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "chỉ hiển thị tên của các tập tin đổi"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "chỉ hiển thị tên tập tin và tình trạng của các tập tin bị thay đổi"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<rộng>[,<name-width>[,<số-lượng>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "tạo diffstat"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<rộng>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "tạo diffstat với độ rộng đã cho"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "tạo diffstat với tên độ rộng đã cho"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "tạo diffstat với độ rộng đồ thị đã cho"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<số_lượng>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "tạo diffstat với các dòng bị giới hạn"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "tạo tổng hợp xúc tích trong diffstat"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "xuất ra một khác biệt dạng nhị phân cái mà có thể được áp dụng"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "hiển thị đầy đủ các tên đối tượng pre- và post-image trên các dòng \"mục lục"
 "\""
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "hiển thị thay đổi được tô màu"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<kiểu>"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3490,7 +3579,7 @@
 "tô sáng các lỗi về khoảng trắng trong các dòng “context”, “old” và “new” "
 "trong khác biệt"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3498,89 +3587,89 @@
 "không munge tên đường dẫn và sử dụng NUL làm bộ phân tách trường đầu ra "
 "trong --raw hay --numstat"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<tiền_tố>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "hiển thị tiền tố nguồn đã cho thay cho \"a/\""
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "hiển thị tiền tố đích đã cho thay cho \"b/\""
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "treo vào trước một tiền tố bổ sung cho mỗi dòng kết xuất"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "đừng hiển thị bất kỳ tiền tố nguồn hay đích"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "hiển thị ngữ cảnh giữa các khúc khác biệt khi đạt đến số lượng dòng đã chỉ "
 "định"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<ký_tự>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "chỉ định một ký tự để biểu thị một dòng được thêm mới thay cho “+”"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "chỉ định một ký tự để biểu thị một dòng đã cũ thay cho “-”"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "chỉ định một ký tự để biểu thị một ngữ cảnh thay cho “”"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "Tùy chọn khác biệt đổi tên"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "ngắt các thay đổi ghi lại hoàn thiện thành cặp của xóa và tạo"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "dò tìm các tên thay đổi"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "bỏ qua preimage (tiền ảnh??) cho các việc xóa"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "dò bản sao"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "dùng các tập tin không bị chỉnh sửa như là nguồn để tìm các bản sao"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "tắt dò tìm đổi tên"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "dùng các blob trống rống như là nguồn đổi tên"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "tiếp tục liệt kê lịch sử của một tập tin ngoài đổi tên"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3588,160 +3677,160 @@
 "ngăn cản dò tìm đổi tên/bản sao nếu số lượng của đích đổi tên/bản sao vượt "
 "quá giới hạn đưa ra"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "Tùy chọn thuật toán khác biệt"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "sản sinh khác biệt ít nhất có thể"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi so sánh các dòng"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "lờ đi sự thay đổi do số lượng khoảng trắng gây ra"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi ở cuối dòng EOL"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "bỏ qua ký tự về đầu dòng tại cuối dòng"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "bỏ qua các thay đổi cho toàn bộ các dòng là trống"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "bỏ qua các thay đổi có tất cả các dòng khớp <regex>"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heuristic để dịch hạn biên của khối khác biệt cho dễ đọc"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"patience diff\""
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"histogram diff\""
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<thuật toán>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "chọn một thuật toán khác biệt"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<văn bản>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"anchored diff\""
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<chế độ>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "hiển thị khác biệt từ, sử dụng <chế độ> để bỏ giới hạn các từ bị thay đổi"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "dùng <regex> để quyết định từ là cái gì"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "tương đương với --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "các dòng di chuyển của mã mà được tô màu khác nhau"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "cách bỏ qua khoảng trắng trong --color-moved"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "Các tùy chọn khác biệt khác"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "khi chạy từ thư mục con, thực thi các thay đổi bên ngoài và hiển thị các "
 "đường dẫn liên quan"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "coi mọi tập tin là dạng văn bản thường"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "tráo đổi hai đầu vào, đảo ngược khác biệt"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "thoát với mã 1 nếu không có khác biệt gì, 0 nếu ngược lại"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "tắt mọi kết xuất của chương trình"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "cho phép mộ bộ hỗ trợ xuất khác biệt ở bên ngoài được phép thực thi"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "chạy các bộ lọc văn bản thông thường bên ngoài khi so sánh các tập tin nhị "
 "phân"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<khi>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "bỏ qua các thay đổi trong mô-đun-con trong khi tạo khác biệt"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<định dạng>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "chi định khác biệt bao nhiêu trong các mô đun con được hiển thị"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "ẩn các mục “git add -N” từ bảng mục lục"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "coi các mục “git add -N” như là có thật trong bảng mục lục"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<chuỗi>"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3749,7 +3838,7 @@
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của "
 "chuỗi được chỉ ra"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3757,23 +3846,35 @@
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của biểu "
 "thức chính quy được chỉ ra"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "hiển thị tất cả các thay đổi trong một bộ các thay đổi với -S hay -G"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "coi <chuỗi> trong -S như là biểu thức chính qui POSIX có mở rộng"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "điều khiển thứ tự xuát hiện các tập tin trong kết xuất"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<đường-dẫn>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "hiển thị các thay đổi trong đường dẫn đã cho đầu tiên"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "bỏ qua đầu ra đến đường dẫn đã cho"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<mã-số-đối-tượng>"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3781,33 +3882,33 @@
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của đối "
 "tượng được chỉ ra"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "chọn các tập tin theo kiểu khác biệt"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<tập_tin>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "Xuất ra một tập tin cụ thể"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr ""
 "nhận thấy đổi tên không chính xác đã bị bỏ qua bởi có quá nhiều tập tin."
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "chỉ tìm thấy các bản sao từ đường dẫn đã sửa đổi bởi vì có quá nhiều tập tin."
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3820,10 +3921,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "gặp lỗi khi đọc tập-tin-thứ-tự “%s”"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "Đang thực hiện dò tìm đổi tên không chính xác"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "Không có đường dẫn %s trong diff"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3848,35 +3954,35 @@
 msgid "disabling cone pattern matching"
 msgstr "vô hiệu khớp mẫu nón"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "không thể dùng %s như là một tập tin loại trừ"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "không thể mở thư mục “%s”"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "gặp lỗi khi lấy tên và thông tin của nhân"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr "bộ nhớ tạm không theo vết bị tắt trên hệ thống hay vị trí này"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "tập tin ghi bảng mục lục bị hỏng trong kho %s"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "không thể tạo thư mục cho %s"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "không thể di dời thư mục git từ “%s” sang “%s”"
@@ -3886,21 +3992,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "gợi ý: Chờ trình biên soạn của bạn đóng tập tin…%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Nội dung lọc"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "không thể lấy thống kê tập tin “%s”"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "đường dẫn không gian tên git \"%s\" sai"
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "không thể đặt GIT_DIR thành “%s”"
@@ -3910,260 +4016,272 @@
 msgid "too many args to run %s"
 msgstr "quá nhiều tham số để chạy %s"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: cần danh sách shallow"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: cần một gói đẩy sau danh sách shallow"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: cần ACK/NAK, nhưng lại nhận được một gói flush"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: cần ACK/NAK, nhưng lại nhận được “%s”"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "không thể ghi lên máy phục vụ"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc cần multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "dòng shallow không hợp lệ: %s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "dòng unshallow không hợp lệ: %s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "không tìm thấy đối tượng: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "lỗi trong đối tượng: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "không tìm shallow nào: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "cần shallow/unshallow, nhưng lại nhận được %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "nhận %s %d - %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "lần chuyển giao %s không hợp lệ"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "chịu thua"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "xong"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "nhận %s (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Đánh dấu %s là đã hoàn thành"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "đã sẵn có %s (%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: không thể rẽ nhánh sideband demultiplexer"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "lỗi giao thức: phần đầu gói bị sai"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: không thể rẽ nhánh %s"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack: kết xuất index-pack không hợp lệ"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s gặp lỗi"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "có lỗi trong sideband demultiplexer"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Phiên bản máy chủ là %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "Máy chủ hỗ trợ %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "Máy chủ không hỗ trợ máy khách shallow"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "Máy chủ không hỗ trợ --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "Máy chủ không hỗ trợ --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "Máy chủ không hỗ trợ --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "Máy chủ không hỗ trợ định dạng đối tượng của kho này"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "không có lần chuyển giao chung nào"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "kho nguồn là nông, nên bỏ từ chối nhân bản."
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: fetch gặp lỗi."
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "các thuật toán không khớp nhau: máy khách %s; máy chủ %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "máy chủ không hỗ trợ thuật toán “%s”"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "Máy chủ không hỗ trợ yêu cầu shallow"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "Máy chủ hỗ trợ bộ lọc"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "không thể ghi các yêu cầu lên máy phục vụ"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "gặp lỗi khi đọc phần đầu của đoạn %s"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "cần “%s”, nhưng lại nhận “%s”"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "gặp dòng không được thừa nhận: “%s”"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "gặp lỗi khi xử lý tín hiệu trả lời: %d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "cần tập tin gói để gửi sau “ready”"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "không cần thêm phần nào để gửi sau “ready”"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "lỗi xử lý thông tin shallow: %d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "cần wanted-ref, nhưng lại nhận được “%s”"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref không được mong đợi: “%s”"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "lỗi khi xử lý wanted refs: %d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: cần nhận được trả lời là kết thúc gói"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "không khớp phần đầu máy chủ"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "máy chủ đã không gửi tất cả các đối tượng cần thiết"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "gặp 'ready' đột xuất từ máy chủ"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "không có máy chủ tham chiếu nào như %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr ""
 "Máy phục vụ không cho phép yêu cầu cho đối tượng không được báo trước %s"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "không thể tạo tập tin tạm thời"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "gặp lỗi khi ghi chữ ký đính kèm vào “%s”"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg gặp lỗi khi ký dữ liệu"
 
@@ -4172,7 +4290,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "bỏ qua màu không hợp lệ “%.*s” trong log.graphColors"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4180,18 +4298,18 @@
 "mẫu đã cho có chứa NULL byte (qua -f <file>). Điều này chỉ được hỗ trợ với -"
 "P dưới PCRE v2"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "“%s”: không thể đọc %s"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "gặp lỗi khi lấy thống kê về “%s”"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "“%s”: đọc ngắn"
@@ -4261,7 +4379,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "Có các lệnh Git chung được sử dụng trong các tình huống khác nhau:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "không hỗ trợ liệt kê lệnh kiểu “%s”"
@@ -4408,47 +4526,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "tên chỉ được phép bao gồm các ký tự sau: %s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "ngày tháng không hợp lệ: %s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "cần “tree:<depth>”"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "việc hỗ trợ bộ lọc sparse:đường/dẫn đã bị bỏ"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "“%s” dành cho “object:type=<type>” không phải là kiểu đối tượng hợp lệ"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "đặc tả bộ lọc không hợp lệ “%s”"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "phải thoát char trong sub-filter-spec: “%c”"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "mong đợi một cái gì đó sau khi kết hợp:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "không thể tổ hợp nhiều đặc tả kiểu lọc"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "không thể nâng cấp định định dạng kho chứa để hỗ trợ nhân bản cục bộ"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "không thể truy cập các blob rải rác trong “%s”"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "không thể phân tích dữ liệu bộ lọc rải rác trong %s"
@@ -4463,7 +4586,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "mục “%s” trong cây %s có nút blob, nhưng không phải là một blob"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "không thể tải cây gốc cho lần chuyển giao “%s”"
@@ -4492,11 +4615,278 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "Không thể tạo “%s.lock”: %s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "giá trị '%s' không hợp lệ cho lsrefs.unborn"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "cần đẩy dữ liệu lên đĩa sau tham số ls-refs (liệt kê tham chiếu)"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "phát hiện CRLF được trích dẫn"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#, c-format
+msgid "bad action '%s' for '%s'"
+msgstr "thao tác sai “%s” cho “%s”"
+
+#: merge-ort.c:1116 merge-recursive.c:1205
+#, c-format
+msgid "Failed to merge submodule %s (not checked out)"
+msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không lấy ra được)"
+
+#: merge-ort.c:1125 merge-recursive.c:1212
+#, c-format
+msgid "Failed to merge submodule %s (commits not present)"
+msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không hiện diện)"
+
+#: merge-ort.c:1134 merge-recursive.c:1219
+#, c-format
+msgid "Failed to merge submodule %s (commits don't follow merge-base)"
+msgstr ""
+"Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không theo sau nền-hòa-"
+"trộn)"
+
+#: merge-ort.c:1144 merge-ort.c:1151
+#, c-format
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "Chú ý: Chuyển-tiếp-nhanh mô-đun-con “%s” sang “%s”"
+
+#: merge-ort.c:1172
+#, c-format
+msgid "Failed to merge submodule %s"
+msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s”"
+
+#: merge-ort.c:1179
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"Gặp lỗi khi hòa trộn mô-đun-con “%s”, nhưng có cách giải quyết:\n"
+"%s\n"
+
+#: merge-ort.c:1183 merge-recursive.c:1273
+#, c-format
+msgid ""
+"If this is correct simply add it to the index for example\n"
+"by using:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"which will accept this suggestion.\n"
+msgstr ""
+"Nếu đây là đúng đơn giản thêm nó vào mục lục ví dụ\n"
+"bằng cách dùng:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"cái mà sẽ chấp nhận gợi ý này.\n"
+
+#: merge-ort.c:1196
+#, c-format
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"Gặp lỗi khi hòa trộn mô-đun-con “%s”, nhưng có nhiều cách giải quyết:\n"
+"%s"
+
+#: merge-ort.c:1415 merge-recursive.c:1362
+msgid "Failed to execute internal merge"
+msgstr "Gặp lỗi khi thực hiện trộn nội bộ"
+
+#: merge-ort.c:1420 merge-recursive.c:1367
+#, c-format
+msgid "Unable to add %s to database"
+msgstr "Không thể thêm %s vào cơ sở dữ liệu"
+
+#: merge-ort.c:1427 merge-recursive.c:1400
+#, c-format
+msgid "Auto-merging %s"
+msgstr "Tự-động-hòa-trộn %s"
+
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"XUNG ĐỘT: (ngầm đổi tên thư mục): Tập tin/thư mục đã sẵn có tại %s theo cách "
+"của các đổi tên thư mục ngầm đặt (các) đường dẫn sau ở đây: %s."
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"XUNG ĐỘT: (ngầm đổi tên thư mục): Không thể ánh xạ một đường dẫn thành %s; "
+"các đổi tên thư mục ngầm cố đặt các đường dẫn ở đây: %s"
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"XUNG ĐỘT: (thư mục đổi tên chia tách): Không rõ ràng nơi để đổi tên %s "
+"thành; nó đã bị đổi tên thành nhiều thư mục khác, với không đích đến nhận "
+"một phần nhiều của các tập tin."
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr ""
+"CẢNH BÁO: tránh áp dụng %s -> %s đổi thên thành %s, bởi vì bản thân %s cũng "
+"bị đổi tên."
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"Đường dẫn đã được cập nhật: %s được thêm vào trong %s bên trong một thư mục "
+"đã được đổi tên trong %s; di chuyển nó đến %s."
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"Đường dẫn đã được cập nhật: %s được đổi tên thành %s trong %s, bên trong một "
+"thư mục đã được đổi tên trong %s; di chuyển nó đến %s."
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"XUNG ĐỘT (vị trí tệp): %s được thêm vào trong %s trong một thư mục đã được "
+"đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"XUNG ĐỘT (vị trí tệp): %s được đổi tên thành %s trong %s, bên trong một thư "
+"mục đã được đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên %s->%s trong %s và thành %s trong %s."
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"XUNG ĐỘT (đổi tên liên quan đến va chạm): đổi tên %s -> %s xung đột nội dung "
+"VÀ va chạm với một đường dẫn khác; điều này có thể dẫn đến tạo ra các xung "
+"đột lồng nhau."
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"XUNG ĐỘT (đổi-tên/xóa): Đổi tên %s->%s trong %s, nhưng lại bị xóa trong %s."
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "không thể đọc đối tượng %s"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "đối tượng %s không phải là một blob"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr ""
+"XUNG ĐỘT (tập tin/thư mục): thư mục theo cách của %s từ %s; thay vào đó, di "
+"chuyển nó đến %s."
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"XUNG ĐỘT (các kiểu riêng biệt): %s có các kiểu khác nhau ở mỗi bên; đã đổi "
+"tên cả hai trong số chúng để mỗi cái có thể được ghi lại ở đâu đó."
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"XUNG ĐỘT (các kiểu riêng biệt): %s có các loại khác nhau ở mỗi bên; đã đổi "
+"tên một trong số chúng để mỗi cái có thể được ghi lại ở đâu đó."
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "nội dung"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "thêm/thêm"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "mô-đun-con"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "XUNG ĐỘT (%s): Xung đột hòa trộn trong %s"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"XUNG ĐỘT (sửa/xóa): %s bị xóa trong %s và sửa trong %s. Phiên bản %s của %s "
+"còn lại trong cây (tree)."
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr ""
+"Lưu ý: %s không được cập nhật và theo cách lấy ra phiên bản xung đột; bản "
+"sao cũ được đổi tên thành %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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "thu thập thông tin hòa trộn gặp lỗi cho cây %s, %s, %s"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4506,10 +4896,9 @@
 "hòa trộn:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "Đã cập nhật rồi!"
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "Đã cập nhật rồi."
 
 #: merge-recursive.c:356
 msgid "(bad commit)\n"
@@ -4527,137 +4916,89 @@
 "addinfo_cache gặp lỗi khi làm mới đối với đường dẫn “%s”; việc hòa trộn bị "
 "bãi bỏ."
 
-#: merge-recursive.c:874
+#: merge-recursive.c:876
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "gặp lỗi khi tạo đường dẫn “%s”%s"
 
-#: merge-recursive.c:885
+#: merge-recursive.c:887
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
 msgstr "Gỡ bỏ %s để tạo chỗ (room) cho thư mục con\n"
 
-#: merge-recursive.c:899 merge-recursive.c:918
+#: merge-recursive.c:901 merge-recursive.c:920
 msgid ": perhaps a D/F conflict?"
 msgstr ": có lẽ là một xung đột D/F?"
 
-#: merge-recursive.c:908
+#: merge-recursive.c:910
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
 msgstr "từ chối đóng tập tin không được theo dõi tại “%s”"
 
-#: merge-recursive.c:949 builtin/cat-file.c:41
+#: merge-recursive.c:951 builtin/cat-file.c:41
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "không thể đọc đối tượng %s “%s”"
 
-#: merge-recursive.c:954
+#: merge-recursive.c:956
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr "mong đợi đối tượng blob cho %s “%s”"
 
-#: merge-recursive.c:979
+#: merge-recursive.c:981
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "gặp lỗi khi mở “%s”: %s"
 
-#: merge-recursive.c:990
+#: merge-recursive.c:992
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "gặp lỗi khi tạo liên kết mềm (symlink) “%s”: %s"
 
-#: merge-recursive.c:995
+#: merge-recursive.c:997
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "không hiểu phải làm gì với %06o %s “%s”"
 
-#: merge-recursive.c:1191
-#, c-format
-msgid "Failed to merge submodule %s (not checked out)"
-msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không lấy ra được)"
-
-#: merge-recursive.c:1198
-#, c-format
-msgid "Failed to merge submodule %s (commits not present)"
-msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không hiện diện)"
-
-#: merge-recursive.c:1205
-#, c-format
-msgid "Failed to merge submodule %s (commits don't follow merge-base)"
-msgstr ""
-"Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không theo sau nền-hòa-"
-"trộn)"
-
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1227 merge-recursive.c:1239
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Chuyển-tiếp-nhanh mô-đun-con “%s” đến lần chuyển giao sau đây:"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1230 merge-recursive.c:1242
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Chuyển-tiếp-nhanh mô-đun-con “%s”"
 
-#: merge-recursive.c:1251
+#: merge-recursive.c:1265
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không tìm thấy các lần chuyển giao "
 "theo sau hòa trộn)"
 
-#: merge-recursive.c:1255
+#: merge-recursive.c:1269
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không chuyển tiếp nhanh được)"
 
-#: merge-recursive.c:1256
+#: merge-recursive.c:1270
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Tìm thấy một giải pháp hòa trộn có thể cho mô-đun-con:\n"
 
-#: merge-recursive.c:1259
-#, c-format
-msgid ""
-"If this is correct simply add it to the index for example\n"
-"by using:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"which will accept this suggestion.\n"
-msgstr ""
-"Nếu đây là đúng đơn giản thêm nó vào mục lục ví dụ\n"
-"bằng cách dùng:\n"
-"\n"
-"  git update-index --cacheinfo 160000 %s \"%s\"\n"
-"\n"
-"cái mà sẽ chấp nhận gợi ý này.\n"
-
-#: merge-recursive.c:1268
+#: merge-recursive.c:1282
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (thấy nhiều hòa trộn đa trùng)"
 
-#: merge-recursive.c:1341
-msgid "Failed to execute internal merge"
-msgstr "Gặp lỗi khi thực hiện trộn nội bộ"
-
-#: merge-recursive.c:1346
-#, c-format
-msgid "Unable to add %s to database"
-msgstr "Không thể thêm %s vào cơ sở dữ liệu"
-
-#: merge-recursive.c:1378
-#, c-format
-msgid "Auto-merging %s"
-msgstr "Tự-động-hòa-trộn %s"
-
-#: merge-recursive.c:1402
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Lỗi: từ chối đóng tập tin không được theo dõi tại “%s”; thay vào đó ghi vào "
 "%s."
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4666,7 +5007,7 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree)."
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4675,7 +5016,7 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s đến %s trong %s. Phiên bản %s "
 "của %s còn lại trong cây (tree)."
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4684,7 +5025,7 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree) tại %s."
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4693,45 +5034,45 @@
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s đến %s trong %s. Phiên bản %s "
 "của %s còn lại trong cây (tree) tại %s."
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "đổi tên"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "đã đổi tên"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Từ chối đóng tập tin không được theo dõi tại “%s”"
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Từ chối đóng tập tin không được theo dõi tại “%s”, ngay cả khi nó ở trên "
 "đường."
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "XUNG ĐỘT (đổi-tên/thêm): Đổi tên %s->%s trong %s. %s được thêm trong %s"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s là một thư mục trong %s thay vào đó thêm vào như là %s"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Từ chối đóng tập tin không được theo dõi tại “%s”; thay vào đó đang thêm "
 "thành %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4740,17 +5081,17 @@
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên \"%s\"->\"%s\" trong nhánh \"%s\" đổi "
 "tên \"%s\"->\"%s\" trong \"%s\"%s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (cần giải quyết)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên %s->%s trong %s. Đổi tên %s->%s trong %s"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4761,25 +5102,7 @@
 "vì thư mục %s đã bị đổi tên thành nhiều thư mục khác, với không đích đến "
 "nhận một phần nhiều của các tập tin."
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"XUNG ĐỘT: (ngầm đổi tên thư mục): Tập tin/thư mục đã sẵn có tại %s theo cách "
-"của các đổi tên thư mục ngầm đặt (các) đường dẫn sau ở đây: %s."
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"XUNG ĐỘT: (ngầm đổi tên thư mục): Không thể ánh xạ một đường dẫn thành %s; "
-"các đổi tên thư mục ngầm cố đặt các đường dẫn ở đây: %s"
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4788,151 +5111,80 @@
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên thư mục %s->%s trong %s. Đổi tên thư mục "
 "%s->%s trong %s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr ""
-"CẢNH BÁO: tránh áp dụng %s -> %s đổi thên thành %s, bởi vì bản thân %s cũng "
-"bị đổi tên."
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "không thể đọc đối tượng %s"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "đối tượng %s không phải là một blob"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "sửa đổi"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "đã sửa"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "nội dung"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "thêm/thêm"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Đã bỏ qua %s (đã có sẵn lần hòa trộn này)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "mô-đun-con"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "XUNG ĐỘT (%s): Xung đột hòa trộn trong %s"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Thay vào đó thêm vào %s"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"Đường dẫn đã được cập nhật: %s được thêm vào trong %s bên trong một thư mục "
-"đã được đổi tên trong %s; di chuyển nó đến %s."
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"XUNG ĐỘT (vị trí tệp): %s được thêm vào trong %s trong một thư mục đã được "
-"đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"Đường dẫn đã được cập nhật: %s được đổi tên thành %s trong %s, bên trong một "
-"thư mục đã được đổi tên trong %s; di chuyển nó đến %s."
-
-#: merge-recursive.c:3225
-#, 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 ""
-"XUNG ĐỘT (vị trí tệp): %s được đổi tên thành %s trong %s, bên trong một thư "
-"mục đã được đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "Đang xóa %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "tập-tin/thư-mục"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "thư-mục/tập-tin"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "XUNG ĐỘT (%s): Ở đây không có thư mục nào có tên %s trong %s. Thêm %s như là "
 "%s"
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "Thêm \"%s\""
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "XUNG ĐỘT (thêm/thêm): Xung đột hòa trộn trong %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "hòa trộn các cây %s và %s gặp lỗi"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "Đang trộn:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "tìm thấy %u tổ tiên chung:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "hòa trộn không trả về lần chuyển giao nào"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Không thể phân tích đối tượng “%s”"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "Không thể ghi bảng mục lục."
 
@@ -4940,185 +5192,196 @@
 msgid "failed to read the cache"
 msgstr "gặp lỗi khi đọc bộ nhớ đệm"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục mới"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "fanout OID nhiều gói chỉ mục có kích thước sai"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "tập tin đồ thị multi-pack-index %s quá nhỏ"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "chữ ký multi-pack-index 0x%08x không khớp chữ ký 0x%08x"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "không nhận ra phiên bản %d của multi-pack-index"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "phiên bản băm multi-pack-index %u không khớp phiên bản %u"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "khoảng bù đoạn không hợp lệ (quá lớn)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "mã mảnh kết thúc multi-pack-index xuất hiện sớm hơn bình thường"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index thiếu mảnh pack-name cần thiết"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index thiếu mảnh OID fanout cần thiết"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index thiếu mảnh OID lookup cần thiết"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index thiếu mảnh các khoảng bù đối tượng cần thiết"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "các tên gói multi-pack-index không đúng thứ tự: “%s” trước “%s”"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id sai: %u (%u các gói tổng)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index lưu trữ một khoảng bù 64-bít, nhưng off_t là quá nhỏ"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "gặp lỗi khi thêm tập tin gói “%s”"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "gặp lỗi khi mở pack-index “%s”"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "gặp lỗi khi phân bổ đối tượng “%d” trong tập tin gói"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "không thể lưu trữ tập tin ghi mục lục đảo ngược"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Đang thêm tập tin gói từ multi-pack-index"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "đã không thấy tập tin gói %s để mà xóa"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "không hiểu \"preferred pack\": %s"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "\"preferred pack\" “%s” đã hết hạn"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "không có tập tin gói để đánh mục lục."
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "Đang ghi các khúc vào multi-pack-index"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "gặp lỗi khi gỡ bỏ %s"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "gặp lỗi khi xóa multi-pack-index tại %s"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "đã có tập tin multi-pack-index, nhưng gặp lỗi khi phân tích cú pháp"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "Đang khóa cho các gói bị tham chiếu"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "fanout cũ sai thứ tự: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "midx chẳng chứa oid nào"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Thẩm tra thứ tự OID trong multi-pack-index"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "lookup cũ sai thứ tự: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "Đang sắp xếp các đối tượng theo tập tin gói"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "Đang thẩm tra các khoảng bù đối tượng"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "gặp lỗi khi tải mục gói cho oid[%d] = %s"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "gặp lỗi khi tải pack-index cho tập tin gói %s"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 "khoảng bù đối tượng không đúng cho oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "Đang đếm các đối tượng được tham chiếu"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Đang tìm và xóa các gói không được tham chiếu"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "không thể lấy thông tin thống kê về các đối tượng gói"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "không thể hoàn thiện các đối tượng gói"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "không thể tạo tuyến lazy_dir: %s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "không thể tạo tuyến lazy_name: %s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "không thể gia nhập tuyến lazy_name: %s"
@@ -5165,6 +5428,361 @@
 msgid "Bad %s value: '%s'"
 msgstr "Giá trị %s sai: “%s”"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr ""
+"thư mục đối tượng %s không tồn tại; kiểm tra .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "không thể thường hóa đường dẫn đối tượng thay thế: “%s”"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s: đang bỏ qua kho đối tượng thay thế, lồng nhau quá sâu"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "không thể chuẩn hóa thư mục đối tượng: “%s”"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "không thể fdopen tập tin khóa thay thế"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "không thể đọc tập tin thay thế"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "không thể di chuyển tập tin thay thế vào chỗ"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "đường dẫn “%s” không tồn tại"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "kho tham chiếu “%s” như là lấy ra liên kết vẫn chưa được hỗ trợ."
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "kho tham chiếu “%s” không phải là một kho nội bộ."
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "kho tham chiếu “%s” là nông"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "kho tham chiếu “%s” bị cấy ghép"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "dòng không hợp lệ trong khi phân tích các tham chiếu thay thế: %s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "đang cố để mmap %<PRIuMAX> vượt quá giới hạn %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap gặp lỗi"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "tập tin đối tượng %s trống rỗng"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "đối tượng mất hỏng “%s”"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "gặp rác tại cuối của đối tượng bị mất “%s”"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "kiểu đối tượng không hợp lệ"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "không thể giải nén phần đầu gói %s với --allow-unknown-type"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "không thể giải gói phần đầu %s"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "không thể phân tích phần đầu gói %s với --allow-unknown-type"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "không thể phân tích phần đầu của “%s”"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "gặp lỗi khi đọc đối tượng “%s”"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "c%s thay thế không được tìm thấy cho %s"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "đối tượng mất %s (được lưu trong %s) bị hỏng"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "đối tượng đã đóng gói %s (được lưu trong %s) bị hỏng"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "không thể ghi tập tin %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "không thể đặt quyền thành “%s”"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "lỗi ghi tập tin"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "gặp lỗi trong khi đóng tập tin đối tượng"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr ""
+"không đủ thẩm quyền để thêm một đối tượng vào cơ sở dữ liệu kho chứa %s"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "không thể tạo tập tin tạm thời"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "không thể ghi tập tin đối tượng đã mất"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "không thể xả nén đối tượng mới %s (%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "deflateEnd trên đối tượng %s gặp lỗi (%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "chưa rõ ràng baowir dữ liệu nguồn đối tượng không ổn định cho %s"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "gặp lỗi utime() trên “%s”"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "không thể đọc đối tượng cho %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "lần chuyển giao sai hỏng"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "thẻ sai hỏng"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "gặp lỗi đọc khi đánh mục lục %s"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "không đọc ngắn khi đánh mục lục %s"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s: gặp lỗi khi thêm vào cơ sở dữ liệu"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s: kiểu tập tin không được hỗ trợ"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s không phải là một đối tượng hợp lệ"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s không phải là một đối tượng “%s” hợp lệ"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "không thể mở %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "mã băm không khớp cho %s (cần %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "không thể mmap %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "không thể giải gói phần đầu của “%s”"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "không thể phân tích phần đầu của “%s”"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "không thể giải gói nội dung của “%s”"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "mã đối tượng dạng rút gọn %s chưa rõ ràng"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "Các ứng cử là:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git thường không bao giờ tạo tham chiếu mà nó kết thúc với 40 ký tự hex\n"
+"bởi vì nó sẽ bị bỏ qua khi bạn chỉ định 40-hex. Những tham chiếu này\n"
+"có lẽ được tạo ra bởi một sai sót nào đó. Ví dụ,\n"
+"\n"
+"  git switch -c $br $(git rev-parse …)\n"
+"\n"
+"với \"$br\" không hiểu lý do vì sao trống rỗng và một tham chiếu 40-hex được "
+"tạo ra.\n"
+"Xin hãy kiểm tra những tham chiếu này và có thể xóa chúng đi. Tắt lời nhắn "
+"này\n"
+"bằng cách chạy lệnh \"git config advice.objectNameWarning false\""
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "nhật ký cho “%.*s” chỉ trở lại đến %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "nhật ký cho “%.*s” chỉ có %d mục"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "đường dẫn “%s” có ở trên đĩa, nhưng không trong “%.*s”"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"đường dẫn “%s” tồn tại, nhưng không phải “%s”\n"
+"gợi ý: Có phải ý bạn là “%.*s:%s” aka “%.*s:./%s”?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "đường dẫn “%s” không tồn tại trong “%.*s”"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"đường dẫn “%s” nằm trong chỉ mục, nhưng không phải ở giai đoạn %d\n"
+"gợi ý: Có phải ý bạn là “:%d:%s”?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"đường dẫn “%s” nằm trong chỉ mục, nhưng không phải “%s”\n"
+"gợi ý: Có phải ý bạn là “:% d:%s “ aka “:%d:./%s”?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "đường dẫn “%s” tồn tại trên đĩa, nhưng không có trong chỉ mục"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "đường dẫn “%s” không tồn tại (không trên đĩa cũng không trong mục lục)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "cú pháp đường dẫn tương đối không thể thể dùng ngoài cây làm việc"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "“%.*s” không phải là tên đối tượng hợp lệ."
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5175,36 +5793,85 @@
 msgid "object %s is a %s, not a %s"
 msgstr "đối tượng %s là một %s, không phải là một %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "đối tượng %s có mã kiểu %d chưa biết"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "không thể phân tích đối tượng: “%s”"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "mã băm không khớp %s"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "không thể lấy kích cỡ của %s"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "không thể dung lượng đĩa đã dùng của %s"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "tập tin reverse-index %s quá nhỏ"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "tập tin reverse-index %s bị hỏng"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "tập tin reverse-index %s có chữ ký chưa biết"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "tệp chỉ mục ngược %s có phiên bản không được hỗ trợ %<PRIu32>"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "tệp chỉ mục ngược %s có id mã băm không được hỗ trợ %<PRIu32>"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "không thể cùng lúc đọc và xác minh được bảng mục lục đảo ngược"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "không thể lấy thông tin thống kê: %s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "gặp lỗi làm cho %s đọc được"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "không thể ghi tập tin promisor “%s”"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "vị trí tương đối trước điểm kết thúc của tập tin gói (.idx hỏng à?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "vị trí tương đối nằm trước chỉ mục gói cho %s (mục lục bị hỏng à?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr ""
@@ -5270,31 +5937,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "có phải ý bạn là “--%s“ (với hai dấu gạch ngang)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "bí danh của --%s"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "không hiểu tùy chọn “%s”"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "không hiểu tùy chọn “%c”"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "không hiểu tùy chọn non-ascii trong chuỗi: “%s”"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "…"
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "cách dùng: %s"
@@ -5302,17 +5969,17 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "     hoặc: %s"
 
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-SỐ"
 
@@ -5321,30 +5988,30 @@
 msgid "Could not make %s writable by group"
 msgstr "Không thể làm %s được ghi bởi nhóm"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr ""
 "Ký tự thoát chuỗi “\\” không được phép là ký tự cuối trong giá trị thuộc tính"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Chỉ có một đặc tả “attr:” là được phép."
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "đặc tả attr phải không được để trống"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "tên thuộc tính không hợp lệ %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 "các cài đặt đặc tả đường dẫn “glob” và “noglob” toàn cục là xung khắc nhau"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -5352,51 +6019,51 @@
 "cài đặt đặc tả đường dẫn “literal” toàn cục là xung khắc với các cài đặt đặc "
 "tả đường dẫn toàn cục khác"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "tham số không hợp lệ cho “tiền tố” màu nhiệm đặc tả đường đẫn"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Số màu nhiệm đặc tả đường dẫn không hợp lệ “%.*s” trong “%s”"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Thiếu “)” tại cuối của số màu nhiệm đặc tả đường dẫn trong “%s”"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Chưa viết mã cho số màu nhiệm đặc tả đường dẫn “%c” trong “%s”"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: “literal” và “glob” xung khắc nhau"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s: “%s” ngoài một kho chứa tại “%s”"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "“%s” (mnemonic: “%c”)"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: số mầu nhiệm đặc tả đường dẫn chưa được hỗ trợ bởi lệnh này: %s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "đặc tả đường dẫn “%s” vượt ra ngoài liên kết mềm"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "dòng được trích dẫn sai: %s"
@@ -5417,7 +6084,7 @@
 msgid "flush packet write failed"
 msgstr "gặp lỗi khi ghi vào tập tin gói lúc đẩy dữ liệu lên bộ nhớ"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "lỗi giao thức: không thể làm được dòng dài"
 
@@ -5425,47 +6092,48 @@
 msgid "packet write with format failed"
 msgstr "gặp lỗi khi ghi gói có định dạng"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr "gặp lỗi khi ghi gói - dữ liệu vượt quá cỡ vói tối đa"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "gặp lỗi khi ghi gói"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "gặp lỗi khi ghi gói: %s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "lỗi đọc"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "máy chủ bị treo bất ngờ"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "lỗi giao thức: ký tự chiều dài dòng bị sai: %.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "lỗi giao thức: chiều dài dòng bị sai %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "lỗi máy chủ: %s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "Làm mới bảng mục lục"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "không thể tạo tuyến trình lstat: %s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "không thể phân tích định dạng --pretty"
 
@@ -5487,24 +6155,28 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "tên máy chủ hứa hẹn không thể bắt đầu bằng “/”: %s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info: cần đẩy dữ liệu lên đĩa sau các tham số"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "Đang gỡ các đối tượng trùng lặp"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "không thể lấy thông tin thống kê về “log“"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "không thể đọc kết xuất “log”"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "không thể phân tích lần chuyển giao “%s”"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -5513,66 +6185,70 @@
 "không thể phân tích cú pháp dòng đầu tiên của đầu ra “log”: không bắt đầu "
 "bằng “commit ”: “%s”"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "không thể phân tích cú pháp phần đầu git “%.*s”"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "gặp lỗi khi tạo khác biệt"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only và --right-only loại từ lẫn nhau"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "không thể phân tích nhật ký cho “%s”"
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 "sẽ không thêm các bí danh “%s” (“%s” đã có từ trước trong bảng mục lục)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "không thể tạo một blob rỗng trong cơ sở dữ liệu đối tượng"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: chỉ có thể thêm tập tin thông thường, liên kết mềm hoặc git-directories"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "“%s” không có một lần chuyển giao nào được lấy ra"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "không thể đánh mục lục tập tin “%s”"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "không thể thêm %s vào bảng mục lục"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "không thể lấy thống kê “%s”"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "%s có vẻ không phải là tập tin và cũng chẳng phải là một thư mục"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "Làm tươi mới bảng mục lục"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5581,7 +6257,7 @@
 "index.version được đặt, nhưng giá trị của nó lại không hợp lệ.\n"
 "Dùng phiên bản %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5590,139 +6266,143 @@
 "GIT_INDEX_VERSION được đặt, nhưng giá trị của nó lại không hợp lệ.\n"
 "Dùng phiên bản %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "chữ ký sai 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "phiên bản mục lục sai %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "chữ ký dạng sha1 cho tập tin mục lục không đúng"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "mục lục dùng phần mở rộng %.4s, cái mà chúng tôi không hiểu được"
 
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "đang lờ đi phần mở rộng %.4s"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "không hiểu định dạng mục lục 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "trường tên sai sạng trong mục lục, gần đường dẫn “%s”"
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "các mục tin stage không đúng thứ tự trong mục lục"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "nhiều mục stage cho tập tin hòa trộn “%s”"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "các mục tin stage không đúng thứ tự cho “%s”"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "tập tin ghi bảng mục lục bị hỏng"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "không thể tạo tuyến load_cache_entries: %s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "không thể gia nhập tuyến load_cache_entries: %s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: mở tập tin mục lục gặp lỗi"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: không thể lấy thống kê bảng mục lục đã mở"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: tập tin mục lục nhỏ hơn mong đợi"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s: không thể ánh xạ tập tin mục lục"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "không thể tạo tuyến load_index_extensions: %s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "không thể gia nhập tuyến load_index_extensions: %s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "không thể làm tươi mới mục lục đã chia sẻ “%s”"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "mục lục bị hỏng, cần %s trong %s, nhưng lại nhận được %s"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "không thể đóng “%s”"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "gặp lỗi khi chuyển đổi sang \"sparse-index\""
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "không thể lấy thông tin thống kê về “%s”"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "không thể mở thư mục git: %s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "không thể bỏ liên kết (unlink): “%s”"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "không thể sửa các bít phân quyền trên “%s”"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: không thể xóa bỏ stage #0"
@@ -5752,7 +6432,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5761,7 +6444,7 @@
 "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"
+".       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 ""
@@ -5770,14 +6453,19 @@
 "p, pick <commit> = dùng lần chuyển giao\n"
 "r, reword <commit> = dùng lần chuyển giao, nhưng sửa lại phần chú thích\n"
 "e, edit <commit> = dùng lần chuyển giao, nhưng dừng lại để tu bổ (amend)\n"
-"s, squash <commit> = dùng lần chuyển giao, nhưng meld vào lần chuyển giao kế "
+"s, squash <commit> = dùng lần chuyển giao, nhưng trộn vào lần chuyển giao kế "
 "trước\n"
-"f, fixup <commit> = giống như \"squash\", nhưng loại bỏ chú thích nhật ký "
-"của lần chuyển giao này\n"
+"f, fixup [-C | -c] <commit> = giống như \"squash\", nhưng chỉ giữ lại phần "
+"lời nhắn\n"
+"                   nhật ký của lần chuyển giao kế trước, trừ phi -C được "
+"dùng, trong trường hợp\n"
+"                   chỉ giữ ghi chú của lần chuyển giao này; -c giống như -C "
+"nhưng\n"
+"                   mở trình biên soạn\n"
 "x, exec <commit> = chạy lệnh (phần còn lại của dòng) dùng hệ vỏ\n"
 "b, break = dừng tại đây (tiếp tục cải tổ sau này bằng “git rebase --"
 "continue”)\n"
-"d, drop <commit> = xóa lần chuyển giao\n"
+"d, drop <commit> = xóa bỏ lần chuyển giao\n"
 "l, label <label> = đánh nhãn HEAD hiện tại bằng một tên\n"
 "t, reset <label> = đặt lại HEAD thành một nhãn\n"
 "m, merge [-C <commit> | -c <commit>] <nhãn> [# <một_dòng>]\n"
@@ -5787,16 +6475,16 @@
 ".       trộn gốc). Dùng -c <commit> để reword chú thích của lần chuyển "
 "giao.\n"
 "\n"
-"Những dòng này có thể đảo ngược thứ tự; chúng chạy từ trên đỉnh xuống dưới "
-"đáy.\n"
+"Những dòng này có thể được thay đổi thứ tự; chúng chạy từ trên đỉnh xuống "
+"dưới đáy.\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Cải tổ %s vào %s (%d lệnh )"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5805,7 +6493,7 @@
 "Đừng xóa bất kỳ dòng nào. Dùng “drop” một cách rõ ràng để xóa bỏ một lần "
 "chuyển giao.\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5813,7 +6501,7 @@
 "\n"
 "Nếu bạn xóa bỏ một dòng ở đây thì LẦN CHUYỂN GIAO ĐÓ SẼ MẤT.\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5827,7 +6515,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5837,19 +6525,19 @@
 "Tuy nhiên, nếu bạn xóa bỏ mọi thứ, việc cải tổ sẽ bị bãi bỏ.\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "không thể ghi “%s”"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "không thể ghi “%s”."
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5858,7 +6546,7 @@
 "Cảnh báo: một số lần chuyển giao có lẽ đã bị xóa một cách tình cờ.\n"
 "Các lần chuyển giao bị xóa (từ mới đến cũ):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5876,14 +6564,14 @@
 "Cánh ứng xử có thể là: ignore, warn, error.\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "không thể đọc “%s”."
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "đã ra đi"
 
@@ -5902,127 +6590,132 @@
 msgid "ahead %d, behind %d"
 msgstr "trước %d, sau %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "cần định dạng: %%(color:<color>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "không nhận ra màu: %%(màu:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "Giá trị nguyên cần tên tham chiếu:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Giá trị nguyên cần tên tham chiếu:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "đối số không được thừa nhận %%(%s): %s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) không nhận các đối số"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "tham số không được thừa nhận %%(objectname): %s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) không nhận các đối số"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) không nhận các đối số"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "tham số không được thừa nhận %%(subject): %s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "cần %%(trailers:key=<giá trị>)"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "không hiểu tham số %%(trailers): %s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "cần nội dung mang giá trị dương:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "đối số không được thừa nhận %%(contents): %s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "cần giá trị dương “%s” trong %%(%s)"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "đối số “%s” không được thừa nhận trong %%(%s)"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "không nhận ra tùy chọn thư điện tử: “%s”"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "cần định dạng: %%(align:<width>,<position>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "vị trí không được thừa nhận:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "chiều rộng không được thừa nhận:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "đối số không được thừa nhận %%(align): %s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "cần giá trị độ rộng dương với nguyên tử %%(align)"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "đối số không được thừa nhận %%(if): %s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "tên trường dị hình: %.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "không hiểu tên trường: %.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
@@ -6030,106 +6723,116 @@
 "không phải là một kho git, nhưng trường “%.*s” yêu cầu truy cập vào dữ liệu "
 "đối tượng"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "định dạng: nguyên tử %%(if) được dùng mà không có nguyên tử %%(then)"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "định dạng: nguyên tử %%(then) được dùng mà không có nguyên tử %%(if)"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "định dạng: nguyên tử %%(then) được dùng nhiều hơn một lần"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "định dạng: nguyên tử %%(then) được dùng sau %%(else)"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "định dạng: nguyên tử %%(else) được dùng mà không có nguyên tử %%(if)"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "định dạng: nguyên tử %%(else) được dùng mà không có nguyên tử %%(then)"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "định dạng: nguyên tử %%(else) được dùng nhiều hơn một lần"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "định dạng: nguyên tử %%(end) được dùng mà không có nguyên tử tương ứng"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "chuỗi định dạng dị hình %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "không nhánh, đang cải tổ %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(không nhánh, đang cải tổ %s)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "không nhánh, đang cải tổ HEAD %s đã tách rời"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(không nhánh, đang cải tổ HEAD %s đã tách rời)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "không nhánh, di chuyển nửa bước được bắt đầu tại %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(không nhánh, di chuyển nửa bước được bắt đầu tại %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "không nhánh"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(HEAD được tách rời tại %s)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(HEAD được tách rời từ %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(không nhánh)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "thiếu đối tượng %s cho %s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer gặp lỗi trên %s cho %s"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "đối tượng dị hình tại “%s”"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "đang lờ đi tham chiếu với tên hỏng %s"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "đang lờ đi tham chiếu hỏng %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "định dạng: thiếu nguyên tử %%(end)"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "tên đối tượng dị hình %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "tùy chọn “%s” phải chỉ đến một lần chuyển giao"
@@ -6179,50 +6882,50 @@
 msgid "ignoring dangling symref %s"
 msgstr "đang lờ đi tham chiếu mềm thừa %s"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "nhật ký cho tham chiếu %s có khoảng trống sau %s"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "nhật ký cho tham chiếu %s kết thúc bất ngờ trên %s"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "nhật ký cho %s trống rỗng"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "từ chối cập nhật tham chiếu với tên sai “%s”"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref bị lỗi cho ref “%s”: %s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "không cho phép đa cập nhật cho tham chiếu “%s”"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "cập nhật tham chiếu bị cấm trong môi trường kiểm tra"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "các cập nhật tham chiếu bị bãi bỏ bởi móc"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "“%s” sẵn có; không thể tạo “%s”"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "không thể xử lý “%s” và “%s” cùng một lúc"
@@ -6286,12 +6989,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "giá trị “%s” của mẫu k có “*”"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "refspec %s nguồn không khớp bất kỳ cái gì"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "refspec %s nguồn khớp nhiều hơn một"
@@ -6300,7 +7003,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6325,7 +7028,7 @@
 "Nếu cả hai là không thể, thì chúng tôi cũng chịu thua. Bạn phải dùng tham "
 "chiếu dạng đầy đủ."
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6336,7 +7039,7 @@
 "Có phải ý bạn là một tạo một nhánh mới bằng cách đẩy lên\n"
 "“%s:refs/heads/%s”?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6347,7 +7050,7 @@
 "Có phải ý bạn là một tạo một thẻ mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6358,7 +7061,7 @@
 "Có phải ý bạn là một tạo một cây mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6369,115 +7072,115 @@
 "Có phải ý bạn là một tạo một blob mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "“%s” không thể được phân giải thành nhánh"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "không thể xóa “%s”: tham chiếu trên máy chủ không tồn tại"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "dst refspec %s khớp nhiều hơn một"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "dst ref %s nhận từ hơn một nguồn"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD không chỉ đến một nhánh nào cả"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "không có nhánh nào như thế: “%s”"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "không có thượng nguồn được cấu hình cho nhánh “%s”"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 "nhánh thượng nguồn “%s” không được lưu lại như là một nhánh theo dõi máy chủ"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "đẩy lên đích “%s” trên máy chủ “%s” không có nhánh theo dõi nội bộ"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "nhánh “%s” không có máy chủ để đẩy lên"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "đẩy refspecs cho “%s” không bao gồm “%s”"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "đẩy lên mà không có đích (push.default là “nothing”)"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "không thể phân giải đẩy “đơn giản” đến một đích đơn"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "không thể tìm thấy tham chiếu máy chủ %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Đang bỏ qua tham chiếu thú vị nội bộ “%s”"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 "Nhánh của bạn dựa trên cơ sở là “%s”, nhưng trên thượng nguồn không còn.\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "   (dùng \" git branch --unset-upstream\" để sửa)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Nhánh của bạn đã cập nhật với “%s”.\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Nhánh của bạn và “%s” tham chiếu đến các lần chuyển giao khác nhau.\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (dùng \"%s\" để biết thêm chi tiết)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Nhánh của bạn đứng trước “%s” %d lần chuyển giao.\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (dùng \"git push\" để xuất bản các lần chuyển giao nội bộ của bạn)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6486,11 +7189,11 @@
 "Nhánh của bạn đứng đằng sau “%s” %d lần chuyển giao, và có thể được chuyển-"
 "tiếp-nhanh.\n"
 
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (dùng \"git pull\" để cập nhật nhánh nội bộ của bạn)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6503,13 +7206,13 @@
 "và có %d và %d lần chuyển giao khác nhau cho từng cái,\n"
 "tương ứng với mỗi lần.\n"
 
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (dùng \"git pull\" để hòa trộn nhánh trên máy chủ vào trong nhánh của "
 "bạn)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "không thể phân tích tên đối tượng mong muốn “%s”"
@@ -6529,96 +7232,96 @@
 msgid "replace depth too high for object %s"
 msgstr "độ sâu thay thế quá cao cho đối tượng %s"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "MERGE_RR sai hỏng"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "không thể ghi bản ghi rerere"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "gặp lỗi đọc khi đang ghi “%s” (%s)"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "gặp lỗi khi đẩy dữ liệu “%s” lên đĩa"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "không thể phân tích các mảnh xung đột trong “%s”"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "gặp lỗi utime() trên “%s”"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "gặp lỗi khi đang ghi “%s”"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "Đã tạm cất “%s” sử dụng cách phân giải kế trước."
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Cách giải quyết đã ghi lại cho “%s”."
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Đã phân giải giải “%s” sử dụng cách giải quyết kế trước."
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "không thể unlink stray “%s”"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Preimage đã được ghi lại cho “%s”"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "không thể tạo thư mục “%s”"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "gặp lỗi khi chạy cập nhật trạng thái bị xung đột trong “%s”"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "đừng nhó các giải quyết cho “%s”"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "không thể unlink “%s”"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Đã cập nhật preimage cho “%s”"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Quên phân giải cho “%s”\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "không thể mở thư mục rr-cache"
 
@@ -6626,43 +7329,38 @@
 msgid "could not determine HEAD revision"
 msgstr "không thể dò tìm điểm xét duyệt HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "gặp lỗi khi tìm cây của %s"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<packfile> không còn được hỗ trợ nữa"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "không hiểu giá trị cho --diff-merges: %s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "nhánh hiện tại của bạn có vẻ như bị hỏng"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "nhánh hiện tại của bạn “%s” không có một lần chuyển giao nào cả"
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L vẫn chưa hỗ trợ định dạng khác biệt nào ngoài -p và -s"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "gặp lỗi khi mở “/dev/null”"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "không thể tạo tuyến async: %s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6671,34 +7369,42 @@
 "Móc “%s” bị bỏ qua bởi vì nó không thể đặt là thực thi được.\n"
 "Bạn có thể tắt cảnh báo này bằng “git config advice.ignoredHook false“."
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr ""
 "gặp gói flush không cần trong khi đọc tình trạng giải nén gói trên máy chủ"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "không thể phân tích tình trạng unpack máy chủ: %s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "máy chủ gặp lỗi unpack: %s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "gặp lỗi khi ký chứng thực đẩy"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack: không thể rẽ nhánh tuyến trình con fetch"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "đẩy đàm phán thất bại; vẫn tiếp tục xử lý bằng lệnh đẩy"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "kết thúc nhận không hỗ trợ các tùy chọn của lệnh push"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "kết thúc nhận không hỗ trợ đẩy --signed"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
@@ -6706,47 +7412,47 @@
 "đừng gửi giấy chứng nhận đẩy trước khi kết thúc nhận không hỗ trợ đẩy --"
 "signed"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "kết thúc nhận không hỗ trợ đẩy --atomic"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "kết thúc nhận không hỗ trợ các tùy chọn của lệnh push"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "chế độ dọn dẹp ghi chú các lần chuyển giao không hợp lệ “%s”"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "không thể xóa bỏ “%s”"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "không thể gỡ bỏ “%s”"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "hoàn nguyên"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "cherry-pick"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "không nhận ra thao tác: %d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6754,7 +7460,7 @@
 "sau khi giải quyết các xung đột, đánh dấu đường dẫn đã sửa\n"
 "với lệnh “git add </các/đường/dẫn>” hoặc “git rm </các/đường/dẫn>”"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6764,43 +7470,43 @@
 "với lệnh “git add </các/đường/dẫn>” hoặc “git rm </các/đường/dẫn>”\n"
 "và chuyển giao kết quả bằng lệnh “git commit”"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "không thể khóa “%s”"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "không thể ghi vào “%s”"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "không thể ghi eol vào “%s”"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "gặp lỗi khi hoàn thành “%s”"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "các thay đổi nội bộ của bạn có thể bị ghi đè bởi lệnh %s."
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "chuyển giao các thay đổi của bạn hay tạm cất (stash) chúng để xử lý."
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s: chuyển-tiếp-nhanh"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Chế độ dọn dẹp không hợp lệ %s"
@@ -6808,65 +7514,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s: Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "không thể cập nhật cây bộ nhớ đệm"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "không thể phân giải lần chuyển giao HEAD"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "không có khóa hiện diện trong “%.*s”"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "không thể giải trích dẫn giá trị của “%s”"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "không thể mở “%s” để đọc"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "“GIT_AUTHOR_NAME” đã sẵn đưa ra rồi"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "“GIT_AUTHOR_EMAIL” đã sẵn đưa ra rồi"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "“GIT_AUTHOR_DATE” đã sẵn đưa ra rồi"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "không hiểu biến “%s”"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "thiếu “GIT_AUTHOR_NAME”"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "thiếu “GIT_AUTHOR_EMAIL”"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "thiếu “GIT_AUTHOR_DATE”"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6895,11 +7601,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "móc “prepare-commit-msg” bị lỗi"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6930,7 +7636,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6958,341 +7664,345 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "không thể tìm thấy lần chuyển giao mới hơn đã được tạo"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr ""
 "không thể phân tích cú pháp của đối tượng chuyển giao mới hơn đã được tạo"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "không thể phân giải HEAD sau khi tạo lần chuyển giao"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "đã rời khỏi HEAD"
 
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (root-commit)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "không thể phân tích HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s không phải là một lần chuyển giao!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "không thể phân tích commit (lần chuyển giao) HEAD"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "không thể phân tích tác giả của lần chuyển giao"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "lệnh git write-tree gặp lỗi khi ghi một cây"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "không thể đọc phần chú thích (message) từ “%s”"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "định danh tác giả không hợp lệ “%s”"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "tác giả sai hỏng: thiếu thông tin này tháng"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "gặp lỗi khi ghi đối tượng chuyển giao"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "không thể cập nhật %s"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "không thể phân tích lần chuyển giao %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "không thể phân tích lần chuyển giao cha mẹ “%s”"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "không hiểu câu lệnh %d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "Đây là tổ hợp của %d lần chuyển giao."
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "cần một HEAD để sửa"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "không thể đọc HEAD"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "không thể đọc phần chú thích (message) của HEAD"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "không thể ghi “%s”"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "Đây là chú thích cho lần chuyển giao thứ nhất:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "không thể đọc phần chú thích (message) của %s"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Đây là chú thích cho lần chuyển giao thứ #%d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "Chú thích cho lần chuyển giao thứ nhất sẽ bị bỏ qua:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Chú thích cho lần chuyển giao thứ #%d sẽ bị bỏ qua:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "Đây là tổ hợp của %d lần chuyển giao."
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "không thể ghi “%s”"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "cần một HEAD để sửa"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "không thể đọc HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "không thể đọc phần chú thích (message) của HEAD"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "không thể đọc phần chú thích (message) của %s"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "tập tin lưu mục lục của bạn không được hòa trộn."
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "không thể sửa chữa lần chuyển giao gốc"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "lần chuyển giao %s là một lần hòa trộn nhưng không đưa ra tùy chọn -m."
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "lần chuyển giao %s không có cha mẹ %d"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "không thể lấy ghi chú lần chuyển giao cho %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: không thể phân tích lần chuyển giao mẹ của %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "không thể đổi tên “%s” thành “%s”"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "không thể hoàn nguyên %s… %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "không thể áp dụng miếng vá %s… %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "xóa %s %s -- vá nội dung thượng nguồn đã có\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: gặp lỗi đọc bảng mục lục"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: gặp lỗi khi làm tươi mới bảng mục lục"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s không nhận các đối số: “%s”"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "thiếu đối số cho %s"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "không thể phân tích cú pháp “%s”"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "dòng không hợp lệ %d: %.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "không thể “%s” thể mà không có lần chuyển giao kế trước"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "đang hủy bỏ thao tác cherry pick đang thực hiện"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "đang hủy bỏ các thao tác hoàn nguyên đang thực hiện"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "vui lòng sửa lỗi này bằng cách dùng “git rebase --edit-todo”."
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "bảng chỉ thị không thể dùng được: %s"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "không có lần chuyển giao nào được phân tích."
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "không thể cherry-pick trong khi hoàn nguyên."
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "không thể thực hiện việc hoàn nguyên trong khi đang cherry-pick."
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "giá trị cho %s không hợp lệ: %s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "squash-onto không dùng được"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "bảng tùy chọn dị hình: “%s”"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "lần chuyển giao trống rỗng đặt là hợp quy cách"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "có thao tác hoàn nguyên đang được thực hiện"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "hãy thử \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "có thao tác “cherry-pick” đang được thực hiện"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "hãy thử \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "không thể tạo thư mục xếp dãy “%s”"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "không thể khóa HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "không cherry-pick hay hoàn nguyên trong tiến trình"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "không thể phân giải HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "không thể hủy bỏ từ một nhánh mà nó còn chưa được tạo ra"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "không mở được “%s”"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "không thể đọc “%s”: %s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "gặp kết thúc tập tin đột xuất"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "tập tin HEAD “pre-cherry-pick” đã lưu “%s” bị hỏng"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Bạn có lẽ đã có HEAD đã bị di chuyển đi, Không thể tua, kiểm tra HEAD của "
 "bạn!"
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "không có tiến trình hoàn nguyên nào"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "không có cherry-pick đang được thực hiện"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "gặp lỗi khi bỏ qua đối tượng chuyển giao"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "ở đây không có gì để mà bỏ qua cả"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7301,16 +8011,16 @@
 "bạn đã sẵn sàng chuyển giao chưa?\n"
 "thử \"git %s --continue\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "không thể đọc HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "không thể chép “%s” sang “%s”"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7329,27 +8039,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Không thể áp dụng %s… %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Không hòa trộn %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "không thể chép “%s” sang “%s”"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Đang thực thi: %s\n"
 
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7364,11 +8074,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "và tạo các thay đổi bảng mục lục và/hay cây làm việc\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7385,90 +8095,90 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "tên nhãn dị hình: “%.*s”"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "ghi lần chuyển giao gốc giả"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "đang ghi squash-onto"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "không thể phân giải “%s”"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "không thể hòa trộn mà không có một điểm xét duyệt hiện tại"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "không thể phân tích “%.*s”"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "chẳng có gì để hòa trộn: “%.*s”"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "hòa trộn octopus không thể được thực thi trên đỉnh của một [new root]"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "không thể lấy chú thích của lần chuyển giao của “%s”"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "không thể ngay cả khi thử hòa trộn “%.*s”"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "merge: Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "Không thể autostash"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Gặp đáp ứng stash không cần: “%s”"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Không thể tạo thư mục cho “%s”"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Đã tạo autostash: %s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "không thể reset --hard"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Đã áp dụng autostash.\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "không thử lưu “%s”"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7480,29 +8190,29 @@
 "Bạn có thể chạy lệnh \"git stash pop\" hay \"git stash drop\" bất kỳ lúc "
 "nào.\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "Áp dụng autostash có hiệu quả trong các xung đột."
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Autostash đã sẵn có; nên tạo một mục stash mới."
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "không thể tách rời HEAD"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Dừng lại ở HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Dừng lại ở %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7523,58 +8233,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Đang cải tổ (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Dừng lại ở %s…  %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "không hiểu câu lệnh %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "không thể đọc orig-head"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "không thể đọc “onto”."
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "không thể cập nhật HEAD thành %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Cài tổ và cập nhật %s một cách thành công.\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "không thể cải tổ: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "không thể tu bỏ một lần chuyển giao không tồn tại"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "tập tin không hợp lệ: “%s”"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "nội dung không hợp lệ: “%s”"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7584,50 +8294,50 @@
 "Bạn có các thay đổi chưa chuyển giao trong thư mục làm việc. Vui lòng\n"
 "chuyển giao chúng trước và sau đó chạy lệnh “git rebase --continue” lần nữa."
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "không thể ghi tập tin: “%s”"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "không thể xóa bỏ CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "không thể chuyển giao các thay đổi đã đưa lên bệ phóng."
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: không thể cherry-pick một %s"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: điểm xét duyệt sai"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "không thể hoàn nguyên một lần chuyển giao khởi tạo"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script: các tùy chọn được không xử lý"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script: lỗi chuẩn bị điểm hiệu chỉnh"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "không có gì để làm"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "không thể bỏ qua các lệnh cậy (pick) không cần thiết"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "văn lệnh đã sẵn được sắp đặt rồi."
 
@@ -7773,7 +8483,7 @@
 "Dừng tại biên của hệ thống tập tin (GIT_DISCOVERY_ACROSS_FILESYSTEM chưa "
 "đặt)."
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7782,430 +8492,88 @@
 "gặp vấn đề với giá trị chế độ tập tin core.sharedRepository (0%.3o).\n"
 "người sở hữu tập tin phải luôn có quyền đọc và ghi."
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "gặp lỗi khi mở “/dev/null” hay dup"
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "gặp lỗi khi rẽ nhánh tiến trình"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "setsid gặp lỗi"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "cố gắng sử dụng chỉ mục thưa thớt mà không có chế độ hình nón"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "không thể cập nhật cây bộ nhớ đệm, chỗ chứa bị đầy"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr ""
-"thư mục đối tượng %s không tồn tại; kiểm tra .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "không thể thường hóa đường dẫn đối tượng thay thế: “%s”"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s: đang bỏ qua kho đối tượng thay thế, lồng nhau quá sâu"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "không thể chuẩn hóa thư mục đối tượng: “%s”"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "không thể fdopen tập tin khóa thay thế"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "không thể đọc tập tin thay thế"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "không thể di chuyển tập tin thay thế vào chỗ"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "đường dẫn “%s” không tồn tại"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "kho tham chiếu “%s” như là lấy ra liên kết vẫn chưa được hỗ trợ."
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "kho tham chiếu “%s” không phải là một kho nội bộ."
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "kho tham chiếu “%s” là nông"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "kho tham chiếu “%s” bị cấy ghép"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "dòng không hợp lệ trong khi phân tích các tham chiếu thay thế: %s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "đang cố để mmap %<PRIuMAX> vượt quá giới hạn %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap gặp lỗi"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "tập tin đối tượng %s trống rỗng"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "đối tượng mất hỏng “%s”"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "gặp rác tại cuối của đối tượng bị mất “%s”"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "kiểu đối tượng không hợp lệ"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "không thể giải nén phần đầu gói %s với --allow-unknown-type"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "không thể giải gói phần đầu %s"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "không thể phân tích phần đầu gói %s với --allow-unknown-type"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "không thể phân tích phần đầu của “%s”"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "gặp lỗi khi đọc đối tượng “%s”"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "c%s thay thế không được tìm thấy cho %s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "đối tượng mất %s (được lưu trong %s) bị hỏng"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "đối tượng đã đóng gói %s (được lưu trong %s) bị hỏng"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "không thể ghi tập tin %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "không thể đặt quyền thành “%s”"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "lỗi ghi tập tin"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "gặp lỗi trong khi đóng tập tin đối tượng"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr ""
-"không đủ thẩm quyền để thêm một đối tượng vào cơ sở dữ liệu kho chứa %s"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "không thể tạo tập tin tạm thời"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "không thể ghi tập tin đối tượng đã mất"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "không thể xả nén đối tượng mới %s (%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "deflateEnd trên đối tượng %s gặp lỗi (%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "chưa rõ ràng baowir dữ liệu nguồn đối tượng không ổn định cho %s"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "gặp lỗi utime() trên “%s”"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "không thể đọc đối tượng cho %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "lần chuyển giao sai hỏng"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "thẻ sai hỏng"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "gặp lỗi đọc khi đánh mục lục %s"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "không đọc ngắn khi đánh mục lục %s"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s: gặp lỗi khi thêm vào cơ sở dữ liệu"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s: kiểu tập tin không được hỗ trợ"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s không phải là một đối tượng hợp lệ"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s không phải là một đối tượng “%s” hợp lệ"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "không thể mở %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "mã băm không khớp cho %s (cần %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "không thể mmap %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "không thể giải gói phần đầu của “%s”"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "không thể phân tích phần đầu của “%s”"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "không thể giải gói nội dung của “%s”"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "tóm lược SHA1 %s chưa rõ ràng"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "Các ứng cử là:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git thường không bao giờ tạo tham chiếu mà nó kết thúc với 40 ký tự hex\n"
-"bởi vì nó sẽ bị bỏ qua khi bạn chỉ định 40-hex. Những tham chiếu này\n"
-"có lẽ được tạo ra bởi một sai sót nào đó. Ví dụ,\n"
-"\n"
-"  git switch -c $br $(git rev-parse …)\n"
-"\n"
-"với \"$br\" không hiểu lý do vì sao trống rỗng và một tham chiếu 40-hex được "
-"tạo ra.\n"
-"Xin hãy kiểm tra những tham chiếu này và có thể xóa chúng đi. Tắt lời nhắn "
-"này\n"
-"bằng cách chạy lệnh \"git config advice.objectNameWarning false\""
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "nhật ký cho “%.*s” chỉ trở lại đến %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "nhật ký cho “%.*s” chỉ có %d mục"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "đường dẫn “%s” có ở trên đĩa, nhưng không trong “%.*s”"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"đường dẫn “%s” tồn tại, nhưng không phải “%s”\n"
-"gợi ý: Có phải ý bạn là “%.*s:%s” aka “%.*s:./%s”?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "đường dẫn “%s” không tồn tại trong “%.*s”"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"đường dẫn “%s” nằm trong chỉ mục, nhưng không phải ở giai đoạn %d\n"
-"gợi ý: Có phải ý bạn là “:%d:%s”?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"đường dẫn “%s” nằm trong chỉ mục, nhưng không phải “%s”\n"
-"gợi ý: Có phải ý bạn là “:% d:%s “ aka “:%d:./%s”?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "đường dẫn “%s” tồn tại trên đĩa, nhưng không có trong chỉ mục"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "đường dẫn “%s” không tồn tại (không trên đĩa cũng không trong mục lục)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "cú pháp đường dẫn tương đối không thể thể dùng ngoài cây làm việc"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "“%.*s” không phải là tên đối tượng hợp lệ."
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "mục tin mục lục là một thư mục, nhưng không \"sparse\" (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
 msgstr[0] "%u byte"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/giây"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "không thể mở “%s” để ghi"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "không thể sửa “%s”"
@@ -8256,22 +8624,22 @@
 msgid "staging updated .gitmodules failed"
 msgstr "gặp lỗi khi tổ chức .gitmodules đã cập nhật"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "trong mô-đun-con không có gì “%s”"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Đặc tả đường dẫn “%s” thì ở trong mô-đun-con “%.*s”"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "đối số --ignore-submodules sai: %s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8280,13 +8648,13 @@
 "Mô-đun-con trong lần chuyển giao %s tại đường dẫn: “%s” va chạm với mô-đun-"
 "con cùng tên. Nên bỏ qua nó."
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr ""
 "mục tin mô-đun-con “%s” (%s) là một %s, không phải là một lần chuyển giao"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8295,36 +8663,36 @@
 "Không thể chạy lệnh “git rev-list <các lần chuyển giao> --not --remotes -n "
 "1” trong mô-đun-con “%s”"
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "xử lý cho mô-đun-con “%s” gặp lỗi"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Gặp lỗi khi phân giải HEAD như là một tham chiếu hợp lệ."
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Đẩy lên mô-đun-con “%s”\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Không thể đẩy lên mô-đun-con “%s”\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Đang lấy về mô-đun-con %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Không thể truy cập mô-đun-con “%s”\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8333,61 +8701,61 @@
 "Có lỗi khi lấy về mô-đun-con:\n"
 " “%s”"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "không nhận ra “%s” là một kho git"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Không thể chạy “git status --porcelain=2” trong mô-đun-con “%s”"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "“git status --porcelain=2” gặp lỗi trong mô-đun-con “%s”"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "không thể lấy thống kê “git status” trong mô-đun-con “%s”"
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "không thể chạy “git status” trong mô-đun-con “%s”"
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Không thể đặt core.worktree trong mô-đun-con “%s”"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "không thể đệ quy vào trong mô-đun-con “%s”"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "không thể đặt lại mục lục của mô-đun-con"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "mô-đun-con “%s” có mục lục còn bẩn"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Mô-đun-con “%s” không thể được cập nhật."
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "thư mục git mô đun con “%s” là bên trong git DIR “%.*s”"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8395,17 +8763,17 @@
 "relocate_gitdir cho mô-đun-con “%s” với nhiều hơn một cây làm việc là chưa "
 "được hỗ trợ"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "không thể tìm kiếm tên cho mô-đun-con “%s”"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "từ chối di chuyển “%s” vào trong một thư mục git sẵn có"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8416,65 +8784,71 @@
 "“%s” sang\n"
 "“%s”\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "không thể lấy thông tin thống kê về ls-files trong .."
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree trả về mã không như mong đợi %d"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "gặp lỗi khi lstat “%s”"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "chạy lệnh kéo theo “%s” gặp lỗi"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "không hiểu giá trị “%s” cho khóa “%s”"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "nhiều hơn một %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "thẻ thừa trống rỗng trong phần thừa “%.*s”"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "không đọc được tập tin đầu vào “%s”"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "không thể đọc từ đầu vào tiêu chuẩn"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "không thể lấy thông tin thống kê về %s"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "\"%s\" không phải là tập tin bình thường"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "tập tin %s người dùng không thể ghi được"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "không thể tạo tập tin tạm thời"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "không thể đổi tên tập tin tạm thời thành %s"
@@ -8523,7 +8897,7 @@
 msgid "error while running fast-import"
 msgstr "gặp lỗi trong khi chạy fast-import"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "không thể đọc tham chiếu %s"
@@ -8541,7 +8915,7 @@
 msgid "invalid remote service path"
 msgstr "đường dẫn dịch vụ máy chủ không hợp lệ"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "thao tác không được gia thức hỗ trợ"
 
@@ -8550,68 +8924,72 @@
 msgid "can't connect to subservice %s"
 msgstr "không thể kết nối đến dịch vụ phụ %s"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only cần giao thức v2"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "“option” không có chỉ thị “ok/error” tương ứng"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "cần ok/error, nhưng bộ hỗ trợ lại nói “%s”"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "bộ hỗ trợ báo cáo rằng không cần tình trạng của %s"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "helper %s không hỗ trợ dry-run"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "helper %s không hỗ trợ --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "helper %s không hỗ trợ --signed=if-asked"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "helper %s không hỗ trợ --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "helper %s không hỗ trợ --%s"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "helper %s không hỗ trợ “push-option”"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper không hỗ trợ push; cần đặc tả tham chiếu"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "helper %s không hỗ trợ “force”"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "không thể chạy fast-export"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "gặp lỗi trong khi chạy fast-export"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8621,52 +8999,52 @@
 "cả.\n"
 "Tuy nhiên bạn nên chỉ định một nhánh.\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "không hỗ trợ định dạng đối tượng “%s”"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "đáp ứng sai dạng trong danh sách tham chiếu: %s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) gặp lỗi"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) gặp lỗi"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "tuyến trình %s gặp lỗi"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "tuyến trình %s gặp lỗi khi gia nhập: %s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "không thể khởi chạy tuyến trình để sao chép dữ liệu: %s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "xử lý %s gặp lỗi khi đợi"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "xử lý %s gặp lỗi"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "không thể khởi chạy tuyến trình cho việc chép dữ liệu"
 
@@ -8685,37 +9063,41 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "vận chuyển: tùy chọn độ sâu “%s” không hợp lệ"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "xem protocol.version trong “git help config” để có thêm thông tin"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "các tùy chọn máy chủ yêu cầu giao thức phiên bản 2 hoặc mới hơn"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "Máy chủ không hỗ trợ wait-for-done"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "không thể phân tích cú pháp cấu hình transport.color.*"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "việc hỗ trợ giao thức v2 chưa được thực hiện"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "không hiểu giá trị cho cho cấu hình “%s”: %s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "không cho phép phương thức vận chuyển “%s”"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync không còn được hỗ trợ nữa"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -8724,7 +9106,7 @@
 "Các đường dẫn mô-đun-con sau đây có chứa các thay đổi cái mà\n"
 "có thể được tìm thấy trên mọi máy phục vụ:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8751,31 +9133,31 @@
 "để đẩy chúng lên máy phục vụ.\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "Bãi bỏ."
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "gặp lỗi khi đẩy dữ liệu của tất cả các mô-đun-con cần thiết"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "đối tượng cây quá ngắn"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "chế độ dị hình trong đề mục cây"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "tên tập tin trống rỗng trong mục tin cây"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "tập tin cây quá ngắn"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8786,7 +9168,7 @@
 "%%sVui lòng chuyển giao các thay đổi hay tạm cất chúng đi trước khi bạn "
 "chuyển nhánh."
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8796,7 +9178,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8807,7 +9189,7 @@
 "%%sVui lòng chuyển giao các thay đổi hay tạm cất chúng đi trước khi bạn hòa "
 "trộn."
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8817,7 +9199,7 @@
 "hòa trộn:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8827,7 +9209,7 @@
 "%s:\n"
 "%%sVui lòng chuyển giao các thay đổi hay tạm cất chúng đi trước khi bạn %s."
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8837,7 +9219,7 @@
 "%s:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8847,7 +9229,7 @@
 "trong nó:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8857,7 +9239,7 @@
 "checkout:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn chuyển nhánh."
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8867,7 +9249,7 @@
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8877,7 +9259,7 @@
 "trộn:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn hòa trộn."
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8887,7 +9269,7 @@
 "trộn:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8896,7 +9278,7 @@
 "Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị gỡ bỏ bởi %s:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn %s."
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8905,29 +9287,29 @@
 "Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị gỡ bỏ bởi %s:\n"
 "%%s"
 
-#: unpack-trees.c:152
-#, c-format
-msgid ""
-"The following untracked working tree files would be overwritten by "
-"checkout:\n"
-"%%sPlease move or remove them before you switch branches."
-msgstr ""
-"Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị ghi đè bởi lệnh "
-"checkout:\n"
-"%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn chuyển nhánh."
-
 #: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
 "checkout:\n"
+"%%sPlease move or remove them before you switch branches."
+msgstr ""
+"Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị ghi đè bởi lệnh "
+"checkout:\n"
+"%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn chuyển nhánh."
+
+#: unpack-trees.c:156
+#, c-format
+msgid ""
+"The following untracked working tree files would be overwritten by "
+"checkout:\n"
 "%%s"
 msgstr ""
 "Các tập tin cây làm việc chưa được theo dõi sau đây sẽ bị ghi đè bởi lệnh "
 "checkout:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8937,7 +9319,7 @@
 "hòa trộn:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn hòa trộn."
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8947,7 +9329,7 @@
 "hòa trộn:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8957,7 +9339,7 @@
 "%s:\n"
 "%%sVui lòng di chuyển hay gỡ bỏ chúng trước khi bạn %s."
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8967,12 +9349,12 @@
 "%s:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Mục “%s” đè lên “%s”. Không thể buộc."
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -8981,7 +9363,7 @@
 "Không thể cập nhật mô-đun-con:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -8992,7 +9374,7 @@
 "mẫu sparse:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -9002,7 +9384,7 @@
 "sparse:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -9013,12 +9395,12 @@
 "cấp các mẫu sparse:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "Bãi bỏ\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
@@ -9027,11 +9409,11 @@
 "Sau khi sửa các đường dẫn phía trên, bạn có thể chạy “git sparse-checkout "
 "reapply“.\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "Đang cập nhật các tập tin"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -9041,11 +9423,17 @@
 "HOA/thường trên một hệ thống tập tin không phân biệt HOA/thường)\n"
 "và chỉ một từ cùng một nhóm xung đột là trong cây làm việc hiện tại:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "Đang cập nhật các cờ mục lục"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr ""
+"cây làm việc và lần chuyển giao không được theo dõi có các mục trùng lặp: %s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "cần đẩy dữ liệu lên đĩa sau các tham số của lệnh fetch"
 
@@ -9082,73 +9470,103 @@
 msgid "Fetching objects"
 msgstr "Đang lấy về các đối tượng"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "gặp lỗi khi đọc “%s”"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "“%s” tại cây làm việc chình không phải là thư mục kho"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "tập tin “%s” không chứa đường dẫn tuyệt đối đến vị trí cây làm việc hiện"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "\"%s\" không tồn tại"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "“%s” không phải là tập tin .git, mã lỗi %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "“%s” không chỉ ngược đến “%s”"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "không phải thư mục"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git không phải là một tập tin"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr "tệp .git bị hỏng"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr "tập tin .git không chính xác"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "không phải là một đường dẫn hợp lệ"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "không thể phân bổ kho chứa; .git không phải là một tập tin"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "không thể phân bổ kho chứa; tập tin .git tham chiếu đến một kho"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "không thể phân bổ kho chứa; tập tin .git bị hỏng"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "gitdir không thể đọc được"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "gitdir không chính xác"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "không phải thư mục hợp lệ"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "tập tin gitdir không tồn tại"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "không thể đọc tập tin gitdir (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "đọc ngắn (cần %<PRIuMAX> byte, đọc %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "tập tin gitdir (thư mục git) không hợp lệ"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "tập tin gitdir chỉ đến vị trí không tồn tại"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9196,11 +9614,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (dùng \"git rm <tập-tin>…\" để đánh dấu là cần giải quyết)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "Những thay đổi sẽ được chuyển giao:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "Các thay đổi chưa được đặt lên bệ phóng để chuyển giao:"
 
@@ -9304,21 +9722,21 @@
 msgid "untracked content, "
 msgstr "nội dung chưa được theo dõi, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Bạn hiện nay ở trong phần cất đi đang có %d mục"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "Những mô-đun-con đã bị thay đổi nhưng chưa được cập nhật:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "Những mô-đun-con thay đổi đã được chuyển giao:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9326,7 +9744,7 @@
 "Không sửa hay xóa bỏ đường ở trên.\n"
 "Mọi thứ phía dưới sẽ được xóa bỏ."
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9337,109 +9755,109 @@
 "Nó cần %.2f giây để tính toán giá trị của trước/sau của nhánh.\n"
 "Bạn có thể dùng “--no-ahead-behind” tránh phải điều này.\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "Bạn có những đường dẫn chưa được hòa trộn."
 
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (sửa các xung đột rồi chạy \"git commit\")"
 
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (dùng \"git merge --abort\" để bãi bỏ việc hòa trộn)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tất cả các xung đột đã được giải quyết nhưng bạn vẫn đang hòa trộn."
 
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (dùng \"git commit\" để hoàn tất việc hòa trộn)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "Bạn đang ở giữa của một phiên “am”."
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "Miếng vá hiện tại bị trống rỗng."
 
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (sửa các xung đột và sau đó chạy lệnh \"git am --continue\")"
 
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (dùng \"git am --skip\" để bỏ qua miếng vá này)"
 
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (dùng \"git am --abort\" để phục hồi lại nhánh nguyên thủy)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "thiếu git-rebase-todo."
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "Không thực hiện lệnh nào."
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "Lệnh thực hiện cuối (%d lệnh được thực thi):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (xem thêm trong %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "Không có lệnh nào còn lại."
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "Lệnh cần làm kế tiếp (%d lệnh còn lại):"
 
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (dùng lệnh \"git rebase --edit-todo\" để xem và sửa)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Bạn hiện nay đang thực hiện việc “rebase” nhánh “%s” trên “%s”."
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "Bạn hiện nay đang thực hiện việc “rebase” (cải tổ)."
 
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 "  (sửa các xung đột và sau đó chạy lệnh “cải tổ” \"git rebase --continue\")"
 
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (dùng lệnh “cải tổ” \"git rebase --skip\" để bỏ qua lần vá này)"
 
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 "  (dùng lệnh “cải tổ” \"git rebase --abort\" để check-out nhánh nguyên thủy)"
 
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh “cải tổ” \"git rebase --"
 "continue\")"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -9447,157 +9865,165 @@
 "Bạn hiện nay đang thực hiện việc chia tách một lần chuyển giao trong khi "
 "đang “rebase” nhánh “%s” trên “%s”."
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 "Bạn hiện tại đang cắt đôi một lần chuyển giao trong khi đang thực hiện việc "
 "rebase."
 
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Một khi thư mục làm việc của bạn đã gọn gàng, chạy lệnh “cải tổ” \"git "
 "rebase --continue\")"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Bạn hiện nay đang thực hiện việc sửa chữa một lần chuyển giao trong khi đang "
 "rebase nhánh “%s” trên “%s”."
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "Bạn hiện đang sửa một lần chuyển giao trong khi bạn thực hiện rebase."
 
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (dùng \"git commit --amend\" để “tu bổ” lần chuyển giao hiện tại)"
 
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (chạy lệnh “cải tổ” \"git rebase --continue\" một khi bạn cảm thấy hài "
 "lòng về những thay đổi của mình)"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick hiện tại đang được thực hiện."
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Bạn hiện nay đang thực hiện việc cherry-pick lần chuyển giao %s."
 
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 "  (sửa các xung đột và sau đó chạy lệnh \"git cherry-pick --continue\")"
 
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (chạy lệnh \"git cherry-pick --continue\" để tiếp tục)"
 
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git cherry-pick --"
 "continue\")"
 
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (dùng \"git cherry-pick --skip\" để bỏ qua miếng vá này)"
 
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (dùng \"git cherry-pick --abort\" để hủy bỏ thao tác cherry-pick)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "Hoàn nguyên hiện tại đang thực hiện."
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Bạn hiện nay đang thực hiện thao tác hoàn nguyên lần chuyển giao “%s”."
 
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (sửa các xung đột và sau đó chạy lệnh \"git revert --continue\")"
 
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (chạy lệnh \"git revert --continue\" để tiếp tục)"
 
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git revert --continue\")"
 
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (dùng lệnh \"git revert --skip\" để bỏ qua lần vá này)"
 
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (dùng \"git revert --abort\" để hủy bỏ thao tác hoàn nguyên)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 "Bạn hiện nay đang thực hiện thao tác di chuyển nửa bước (bisect), bắt đầu từ "
 "nhánh “%s”."
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "Bạn hiện tại đang thực hiện việc bisect (di chuyển nửa bước)."
 
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (dùng \"git bisect reset\" để quay trở lại nhánh nguyên thủy)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Bạn đang ở trong lần lấy ra sparser %d%% của các tập tin được theo dõi hiện "
 "tại."
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "Trên nhánh "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "rebase ở chế độ tương tác đang được thực hiện; lên trên "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "rebase đang được thực hiện: lên trên "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "HEAD được tách rời tại "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "HEAD được tách rời từ "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "Hiện tại chẳng ở nhánh nào cả."
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "Lần chuyển giao khởi tạo"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "Vẫn chưa chuyển giao"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "Những tập tin chưa được theo dõi"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "Những tập tin bị lờ đi"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9609,32 +10035,32 @@
 "có lẽ làm nó nhanh hơn, nhưng bạn phải cẩn thận đừng quên mình phải\n"
 "tự thêm các tập tin mới (xem “git help status”.."
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Những tập tin chưa được theo dõi không được liệt kê ra %s"
 
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (dùng tùy chọn -u để hiển thị các tập tin chưa được theo dõi)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "Không có thay đổi nào"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "không có thay đổi nào được thêm vào để chuyển giao (dùng \"git add\" và/hoặc "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "không có thay đổi nào được thêm vào để chuyển giao\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9643,74 +10069,92 @@
 "không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
 "theo dõi hiện diện (dùng \"git add\" để đưa vào theo dõi)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
 "theo dõi hiện diện\n"
 
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "không có gì để chuyển giao (tạo/sao-chép các tập tin và dùng \"git add\" để "
 "đưa vào theo dõi)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "không có gì để chuyển giao\n"
 
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "không có gì để chuyển giao (dùng -u xem các tập tin chưa được theo dõi)\n"
 
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "không có gì để chuyển giao, thư mục làm việc sạch sẽ\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "Vẫn không thực hiện lệnh chuyển giao nào "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD (không nhánh)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "khác"
 
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "đằng sau "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "phía trước "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "không thể %s: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 "thêm vào đó, bảng mục lục của bạn có chứa các thay đổi chưa được chuyển giao."
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
 "không thể %s: Mục lục của bạn có chứa các thay đổi chưa được chuyển giao."
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "không thể gửi lệnh IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "không thể đọc đáp ứng IPC"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "không thể khởi chạy accept_thread “%s”"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "không thể khởi chạy bộ làm việc worker[0] cho “%s”"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "gặp lỗi khi bỏ liên kết (unlink) “%s”"
@@ -9719,133 +10163,138 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<các tùy chọn>] [--]  <pathspec>…"
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "không thể chmod %cx '%s'"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "trạng thái lệnh diff không như mong đợi %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "cập nhật tập tin gặp lỗi"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "gỡ bỏ “%s”\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 "Đưa ra khỏi bệ phóng các thay đổi sau khi làm tươi mới lại bảng mục lục:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "Không thể đọc bảng mục lục"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "Không thể mở “%s” để ghi."
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "Không thể ghi ra miếng vá"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "gặp lỗi khi sửa miếng vá"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Không thể lấy thông tin thống kê về “%s”"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "Miếng vá trống rỗng. Nên bỏ qua."
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Không thể áp dụng miếng vá “%s”"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Các đường dẫn theo sau đây sẽ bị lờ đi bởi một trong các tập tin .gitignore "
 "của bạn:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "chạy thử"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "sửa bằng cách tương tác"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "chọn “hunks” theo kiểu tương tác"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "sửa diff hiện nay và áp dụng nó"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "cho phép thêm các tập tin bị bỏ qua khác"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "cập nhật các tập tin được theo dõi"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "thường hóa lại EOL của các tập tin được theo dõi (ý là -u)"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "chỉ ghi lại sự việc mà đường dẫn sẽ được thêm vào sau"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr ""
 "thêm các thay đổi từ tất cả các tập tin có cũng như không được theo dõi dấu "
 "vết"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "lờ đi các đường dẫn bị gỡ bỏ trong cây thư mục làm việc (giống với --no-all)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "không thêm, chỉ làm tươi mới bảng mục lục"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr "chie bỏ qua những tập tin mà nó không thể được thêm vào bởi vì gặp lỗi"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "kiểm tra xem - thậm chí thiếu - tập tin bị bỏ qua trong quá trình chạy thử"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "ghi đè lên bít thi hành của các tập tin được liệt kê"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "cảnh báo khi thêm một kho nhúng"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "ứng dụng chạy phía sau cho “git stash -p”"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9876,12 +10325,12 @@
 "\n"
 "Xem \"git help submodule\" để biết thêm chi tiết."
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "thêm cần một kho git nhúng: %s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9891,47 +10340,51 @@
 "Tắt thông báo này bằng cách chạy lệnh\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "thêm tập tin gặp lỗi"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run xung khắc với --interactive/--patch"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file xung khắc với --interactive/--patch"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file xung khắc với --edit"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A và -u xung khắc nhau"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "Tùy chọn --ignore-missing chỉ có thể được dùng cùng với --dry-run"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod tham số “%s” phải hoặc là -x hay +x"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file xung khắc với các tham số đặc tả đường dẫn"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul cần --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Không có gì được chỉ ra, không có gì được thêm vào.\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -9941,109 +10394,109 @@
 "Tắt thông báo này bằng cách chạy lệnh\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "không thể phân tích cú pháp văn lệnh tác giả"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "“%s” bị xóa bởi móc applypatch-msg"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Dòng đầu vào dị hình: “%s”."
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Gặp lỗi khi sao chép ghi chú (note) từ “%s” tới “%s”"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "fseek gặp lỗi"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "không thể phân tích cú pháp “%s”"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Chỉ có một sê-ri miếng vá StGIT được áp dụng một lúc"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "dấu thời gian không hợp lệ"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "dòng Ngày tháng không hợp lệ"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "độ lệch múi giờ không hợp lệ"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "Dò tìm định dạng miếng vá gặp lỗi."
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "tạo thư mục \"%s\" gặp lỗi"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "Gặp lỗi khi chia nhỏ các miếng vá."
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Khi bạn đã giải quyết xong trục trặc này, hãy chạy \"%s --continue\"."
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Nếu bạn muốn bỏ qua miếng vá này, hãy chạy lệnh \"%s --skip\" để thay thế."
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "Để phục hồi lại nhánh gốc và dừng vá, hãy chạy \"%s --abort\"."
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Miếng vá được gửi với format=flowed; khoảng trống ở cuối của các dòng có thể "
 "bị mất."
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "Miếng vá trống rỗng."
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "thiếu dòng tác giả trong lần chuyển gia %s"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "dòng định danh không hợp lệ: %.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "Kho thiếu đối tượng blob cần thiết để thực hiện “3-way merge”."
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Sử dụng thông tin trong bảng mục lục để cấu trúc lại một cây (tree) cơ sở…"
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10051,24 +10504,24 @@
 "Bạn đã sửa miếng vá của mình bằng cách thủ công à?\n"
 "Nó không thể áp dụng các blob đã được ghi lại trong bảng mục lục của nó."
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Đang dùng phương án dự phòng: vá bản cơ sở và “hòa trộn 3-đường”…"
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "Gặp lỗi khi trộn vào các thay đổi."
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "áp dụng vào một lịch sử trống rỗng"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "không thể phục hồi: %s không tồn tại."
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "Thân của lần chuyển giao là:"
 
@@ -10076,41 +10529,41 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Áp dụng? đồng ý [y]/khô[n]g/chỉnh sửa [e]/hiển thị miếng [v]á/chấp nhận tất "
 "cả [a]: "
 
-#: builtin/am.c:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "không thể ghi tập tin lưu mục lục"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Bảng mục lục bẩn: không thể áp dụng các miếng vá (bẩn: %s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Áp dụng: %.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "Không thay đổi gì cả -- Miếng vá đã được áp dụng rồi."
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Gặp lỗi khi vá tại %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "Dùng “git am --show-current-patch=diff” để xem miếng vá bị lỗi"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10121,7 +10574,7 @@
 "đã sẵn được đưa vào với cùng nội dung thay đổi; bạn có lẽ muốn bỏ qua miếng "
 "vá này."
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10134,17 +10587,17 @@
 "Bạn có lẽ muốn chạy “git rm“ trên một tập tin để chấp nhận \"được xóa bởi họ"
 "\" cho nó."
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Không thể phân tích đối tượng “%s”."
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "gặp lỗi khi dọn bảng mục lục"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10152,156 +10605,160 @@
 "Bạn có lẽ đã có HEAD đã bị di chuyển đi kể từ lần “am” thất bại cuối cùng.\n"
 "Không thể chuyển tới ORIG_HEAD"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "Giá trị không hợp lệ cho --patch-format: %s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "Giá trị không hợp lệ cho --show-current-patch: %s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, c-format
 msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
 msgstr "--show-current-patch=%s xung khắc với --show-current-patch=%s"
 
-#: builtin/am.c:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<các tùy chọn>] [(<mbox>|<Maildir>)…]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<các tùy chọn>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "chạy kiểu tương tác"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "tùy chọn lịch sử -- không-toán-tử"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "cho phép quay trở lại để hòa trộn kiểu “3way” nếu cần"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "im lặng"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "thêm dòng Signed-off-by vào cuối ghi chú của lần chuyển giao"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "chuyển mã thành utf8 (mặc định)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "chuyển cờ -k cho git-mailinfo"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "chuyển cờ -b cho git-mailinfo"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "chuyển cờ -m cho git-mailinfo"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "chuyển cờ --keep-cr cho git-mailsplit với định dạng mbox"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "đừng chuyển cờ --keep-cr cho git-mailsplit không phụ thuộc vào am.keepcr"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "cắt mọi thứ trước dòng scissors"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "chuyển nó qua 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
 msgid "pass it through git-apply"
 msgstr "chuyển nó qua git-apply"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "định dạng"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "định dạng (các) miếng vá theo"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "đè lên các lời nhắn lỗi khi xảy ra lỗi vá nghiêm trọng"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "tiếp tục áp dụng các miếng vá sau khi giải quyết xung đột"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "đồng nghĩa với --continue"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "bỏ qua miếng vá hiện hành"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr "phục hồi lại nhánh gốc và loại bỏ thao tác vá."
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "phục hồi lại nhánh gốc và loại bỏ thao tác vá"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "bỏ qua thao tác vá nhưng vẫn giữ HEAD chỉ đến nó."
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "bỏ qua thao tác vá nhưng vẫn giữ HEAD nơi nó chỉ đến"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "hiển thị miếng vá đã được áp dụng rồi"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "nói dối về ngày chuyển giao"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "dùng dấu thời gian hiện tại cho ngày tác giả"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "mã-số-khóa"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "Các lần chuyển giao ký-GPG"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(dùng nội bộ cho git-rebase)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10309,16 +10766,16 @@
 "Tùy chọn -b/--binary đã không dùng từ lâu rồi, và\n"
 "nó sẽ được bỏ đi. Xin đừng sử dụng nó thêm nữa."
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "gặp lỗi đọc bảng mục lục"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "thư mục rebase trước %s không sẵn có nhưng mbox lại đưa ra."
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10327,11 +10784,11 @@
 "Tìm thấy thư mục lạc %s.\n"
 "Dùng \"git am --abort\" để loại bỏ nó đi."
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Thao tác phân giải không được tiến hành, chúng ta không phục hồi lại."
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "chế độ tương tác yêu cầu có các miếng vá trên dòng lệnh"
 
@@ -10374,26 +10831,10 @@
 msgstr "git bisect--helper --bisect-reset [<lần_chuyển_giao>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <lúc_sai> "
-"<lúc_đúng>"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <command> <lúc_sai> "
-"<lúc_đúng>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr "git bisect--helper --bisect-next-check <lúc_sai> <lúc_đúng> [<term>]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10401,7 +10842,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10411,62 +10852,66 @@
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>…]] [--] [</các/"
 "đường/dẫn>…]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<lần_chuyển_giao>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-reset (good|old) [<lần_chuyển_giao>…]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <tên_tập_tin>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<rev>|<vùng>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "không thể mở tập tin “%s” ở chế độ “%s”"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "không thể ghi vào tập tin “%s”"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "“%s” không phải một thời hạn hợp lệ"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "không thể dùng lệnh tích hợp “%s” như là một thời kỳ"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "không thể thay đổi nghĩa của thời kỳ “%s”"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "vui lòng dùng hai thời kỳ khác nhau"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "Chúng tôi đang không bisect.\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "“%s” không phải một lần chuyển giao hợp lệ"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
@@ -10474,27 +10919,27 @@
 "không thể lấy ra HEAD nguyên thủy của “%s”. Hãy thử “git bisect reset <lần-"
 "chuyển-giao>”."
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Đối số bisect_write sai: %s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "không thể lấy oid của điểm xét duyệt “%s”"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "không thể mở tập tin “%s”"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "Lệnh không hợp lệ: bạn hiện đang ở một bisect %s/%s"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10503,7 +10948,7 @@
 "Bạn phải chỉ cho tôi ít nhất một điểm %s và một %s.\n"
 "Bạn có thể sử dụng \"git bisect %s\" và \"git bisect %s\" cho cái đó."
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10514,7 +10959,7 @@
 "Bạn sau đó cần phải chỉ cho tôi ít nhất một điểm xét duyệt %s và một %s.\n"
 "Bạn có thể sử dụng \"git bisect %s\" và \"git bisect %s\" cho chúng."
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "chỉ thực hiện việc bisect với một lần chuyển giao %s"
@@ -10523,15 +10968,15 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "Bạn có chắc chắn chưa [Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "chưa định nghĩa thời kỳ nào"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
@@ -10540,7 +10985,7 @@
 "Bạn hiện tại đang ở thời kỳ %s cho tình trạng cũ\n"
 "và %s cho tình trạng mới.\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10549,52 +10994,52 @@
 "tham số không hợp lệ %s cho “git bisect terms”.\n"
 "Các tùy chọn hỗ trợ là: --term-good|--term-old và --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "gặp lỗi cài đặt việc di chuyển qua các điểm xét duyệt\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "không thể mở “%s” để nối thêm"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "” không phải một thời hạn hợp lệ"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "tùy chọn không được thừa nhận: “%s”"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "“%s” không có vẻ như là một điểm xét duyệt hợp lệ"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "sai HEAD - Tôi cần một HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr "lấy ra “%s” ra gặp lỗi. Hãy thử \"git bisect reset <nhánh_hợp_lệ>\"."
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "sẽ không di chuyển nửa bước trên cây được cg-seek"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "sai HEAD - tham chiếu mềm kỳ lạ"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "refspec không hợp lệ: “%s”"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Bạn cần khởi đầu bằng \"git bisect start\"\n"
 
@@ -10602,93 +11047,107 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "Bạn có muốn tôi thực hiện điều này cho bạn không [Y/n]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Hãy gọi “--bisect-state” với ít nhất một đối số"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "“git bisect %s” có thể lấy chỉ một đối số."
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Đầu vào rev sai: %s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "Đầu vào rev sai (không phải là lần chuyển giao): %s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "Chúng tôi không bisect."
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? bạn đang nói gì thế?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "không thể đọc tập tin '%s' để thao diễn lại"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "đặt lại trạng di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "ghi ra tình trạng di chuyển nửa bước trong BISECT_LOG"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "kiểm tra và đặt thời điểm trong di chuyển nửa bước"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "kiểm tra xem các thời điểm xấu/tốt có tồn tại không"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "in ra các thời điểm di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "bắt đầu phiên di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "tìm lần chuyển giao không di chuyển phân đôi"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr ""
-"xác nhận trạng thái phân đôi kế sau đó lấy ra lần chuyển giao phân đôi kế"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "đánh dấu trạng thái ref (hoặc refs)"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "liệt kê các bước bisection đi quá xa"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "phát lại quá trình bisection từ tệp đã cho"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "bỏ qua một số lần chuyển giao để lấy ra"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "không có nhật ký cho BISECT_WRITE"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr ""
 "--bisect-reset requires không nhận đối số cũng không nhận lần chuyển giao"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write cần 4 hoặc 5 tham số"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms cần 3 tham số"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check cần 2 hoặc 3 tham số"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms cần 0 hoặc 1 tham số"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next cần 0 tham số"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next cần 0 tham số"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log cần 0 tham số"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "chưa chỉ ra tập tin ghi nhật ký"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10707,140 +11166,143 @@
 msgid "must end with a color"
 msgstr "phải kết thúc bằng một màu"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "màu không hợp lệ “%s” trong color.blame.repeatedLines"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "màu không hợp lệ cho blame.coloring"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "không thể tìm thấy điểm xét duyệt %s để mà bỏ qua"
 
-#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "Hiển thị các mục “blame” như là chúng ta thấy chúng, tăng dần"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "hiển thị các mục “blame” như là chúng ta thấy chúng, tăng dần"
 
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
-"Đừng hiển thị tên đối tượng của những lần chuyển giao biên giới (Mặc định: "
+"đừng hiển thị tên đối tượng của những lần chuyển giao biên giới (Mặc định: "
 "off)"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
-msgstr "Không coi các lần chuyển giao gốc là giới hạn (Mặc định: off)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "không coi các lần chuyển giao gốc là giới hạn (Mặc định: off)"
+
+#: builtin/blame.c:870
+msgid "show work cost statistics"
+msgstr "hiển thị thống kê công sức làm việc"
+
+#: 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
+msgid "force progress reporting"
+msgstr "ép buộc báo cáo tiến triển công việc"
 
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "Hiển thị thống kê công sức làm việc"
+msgid "show output score for blame entries"
+msgstr "hiển thị kết xuất điểm số cho các mục tin “blame”"
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "Ép buộc báo cáo diễn biến công việc"
+msgid "show original filename (Default: auto)"
+msgstr "hiển thị tên tập tin gốc (Mặc định: auto)"
 
 #: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "Hiển thị kết xuất điểm số có các mục tin “blame”"
+msgid "show original linenumber (Default: off)"
+msgstr "hiển thị số dòng gốc (Mặc định: off)"
 
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr "Hiển thị tên tập tin gốc (Mặc định: auto)"
+msgid "show in a format designed for machine consumption"
+msgstr "hiển thị ở định dạng đã thiết kế cho dùng bằng máy"
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
-msgstr "Hiển thị số dòng gốc (Mặc định: off)"
+msgid "show porcelain format with per-line commit information"
+msgstr "hiển thị định dạng “porcelain” với thông tin chuyển giao mỗi dòng"
 
 #: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "Hiển thị ở định dạng đã thiết kế cho sự tiêu dùng bằng máy"
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "dùng cùng chế độ xuất ra với git-annotate (Mặc định: off)"
 
 #: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr "Hiển thị định dạng “porcelain” với thông tin chuyển giao mỗi dòng"
+msgid "show raw timestamp (Default: off)"
+msgstr "hiển thị dấu vết thời gian dạng thô (Mặc định: off)"
 
 #: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "Dùng cùng chế độ xuất ra với git-annotate (Mặc định: off)"
+msgid "show long commit SHA1 (Default: off)"
+msgstr "hiển thị SHA1 của lần chuyển giao dạng dài (Mặc định: off)"
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "Hiển thị dấu vết thời gian dạng thô (Mặc định: off)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "không hiển thị tên tác giả và dấu vết thời gian (Mặc định: off)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "Hiển thị SHA1 của lần chuyển giao dạng dài (Mặc định: off)"
+msgid "show author email instead of name (Default: off)"
+msgstr "hiển thị thư điện tử của tác giả thay cho tên (Mặc định: off)"
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "Không hiển thị tên tác giả và dấu vết thời gian (Mặc định: off)"
+msgid "ignore whitespace differences"
+msgstr "bỏ qua các khác biệt do khoảng trắng gây ra"
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr "Hiển thị thư điện tử của tác giả thay vì tên (Mặc định: off)"
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
-msgstr "Bỏ qua các khác biệt do khoảng trắng gây ra"
-
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "rev"
 
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "bỏ qua <rev> khi blame"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "bỏ qua các điểm xét duyệt từ <tập tin>"
+
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "Bỏ qua <rev> khi blame"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "Bỏ qua các điểm xét duyệt từ <tập tin>"
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr "siêu dữ liệu dư thừa màu từ dòng trước khác hẳn"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "các dòng màu theo tuổi"
 
-#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "Tiêu thụ thêm năng tài nguyên máy móc để tìm kiếm tốt hơn nữa"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "tiêu thụ thêm năng tài nguyên máy móc để tìm kiếm tốt hơn nữa"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr ""
-"Sử dụng điểm xét duyệt (revision) từ <tập tin> thay vì gọi “git-rev-list”"
+"sử dụng các điểm xét duyệt (revision) từ <tập tin> thay vì gọi “git-rev-list”"
 
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "Sử dụng nội dung của <tập tin> như là ảnh cuối cùng"
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
+msgstr "sử dụng nội dung của <tập tin> như là ảnh cuối cùng"
 
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "điểm số"
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "tìm các bản sao chép dòng trong và ngang qua tập tin"
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "tìm các di chuyển dòng trong và ngang qua tập tin"
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr "Tìm các bản sao chép dòng trong và ngang qua tập tin"
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr "Tìm các di chuyển dòng trong và ngang qua tập tin"
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr "vùng"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
-msgstr "Xử lý chỉ dòng vùng <đầu>,<cuối> hoặc tính năng :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
+msgstr "xử lý chỉ dòng vùng <đầu>,<cuối> hoặc tính năng :<funcname>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress không được dùng cùng với --incremental hay các định dạng porcelain"
@@ -10853,17 +11315,17 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "4 năm, 11 tháng trước"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "tập tin %s chỉ có %lu dòng"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "Các dòng blame"
 
@@ -10931,117 +11393,107 @@
 msgid "Update of config-file failed"
 msgstr "Cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "không thể dùng tùy chọn -a với -d"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Không thể tìm kiếm đối tượng chuyển giao cho HEAD"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Không thể xóa nhánh “%s” đã được lấy ra tại “%s”"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "không tìm thấy nhánh theo dõi máy chủ “%s”."
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "không tìm thấy nhánh “%s”."
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "Gặp lỗi khi đang xóa nhánh theo dõi máy chủ “%s”"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "Gặp lỗi khi xóa bỏ nhánh “%s”"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Đã xóa nhánh theo dõi máy chủ \"%s\" (từng là %s).\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Nhánh “%s” đã bị xóa (từng là %s)\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "không thể phân tích chuỗi định dạng"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "không thể phân giải HEAD"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) chỉ bên ngoài của refs/heads/"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Nhánh %s đang được cải tổ lại tại %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Nhánh %s đang được di chuyển phân đôi (bisect) tại %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "không thể sao chép nhánh hiện hành trong khi nó chẳng ở đâu cả."
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr "không thể đổi tên nhánh hiện hành trong khi nó chẳng ở đâu cả."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Tên nhánh không hợp lệ: “%s”"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "Gặp lỗi khi đổi tên nhánh"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "Gặp lỗi khi sao chép nhánh"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Đã tạo một bản sao của nhánh khuyết danh “%s”"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Đã đổi tên nhánh khuyết danh “%s” đi"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Nhánh bị đổi tên thành %s, nhưng HEAD lại không được cập nhật!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Nhánh bị đổi tên, nhưng cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Nhánh đã được sao chép, nhưng cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11052,180 +11504,180 @@
 "  %s\n"
 "Những dòng được bắt đầu bằng “%c” sẽ được cắt bỏ.\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "Tùy chọn chung"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "hiển thị mã băm và chủ đề, đưa ra hai lần cho nhánh thượng nguồn"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "không xuất các thông tin"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "cài đặt chế độ theo dõi (xem git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "không dùng"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "thượng nguồn"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "thay đổi thông tin thượng nguồn"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "bỏ đặt thông tin thượng nguồn"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "tô màu kết xuất"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "thao tác trên nhánh “remote-tracking”"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó chứa lần chuyển giao"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó không chứa lần chuyển giao"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "Hành động git-branch:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "liệt kê cả nhánh “remote-tracking” và nội bộ"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "xóa một toàn bộ nhánh đã hòa trộn"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "xóa nhánh (cho dù là chưa được hòa trộn)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "di chuyển hay đổi tên một nhánh và reflog của nó"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "di chuyển hoặc đổi tên một nhánh ngay cả khi đích đã có sẵn"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "sao chép một nhánh và reflog của nó"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "sao chép một nhánh ngay cả khi đích đã có sẵn"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "liệt kê các tên nhánh"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "hiển thị nhánh hiện hành"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "tạo reflog của nhánh"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "sửa mô tả cho nhánh"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "buộc tạo, di chuyển/đổi tên, xóa"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "chỉ hiển thị những nhánh mà nó được hòa trộn"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "chỉ hiển thị những nhánh mà nó không được hòa trộn"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "liệt kê các nhánh trong các cột"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "đối tượng"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "chỉ hiển thị các nhánh của đối tượng"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "sắp xếp và lọc là phân biệt HOA thường"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "định dạng sẽ dùng cho đầu ra"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "Không tìm thấy HEAD ở dưới refs/heads!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "tùy chọn --column và --verbose xung khắc nhau"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "cần chỉ ra tên nhánh"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "Không thể đưa ra mô tả HEAD đã tách rời"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "không thể sửa mô tả cho nhiều hơn một nhánh"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Vẫn chưa chuyển giao trên nhánh “%s”."
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Không có nhánh nào có tên “%s”."
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "quá nhiều nhánh dành cho thao tác sao chép"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "quá nhiều tham số cho thao tác đổi tên"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "quá nhiều tham số để đặt thượng nguồn mới"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11233,30 +11685,30 @@
 "không thể đặt thượng nguồn của HEAD thành %s khi mà nó chẳng chỉ đến nhánh "
 "nào cả."
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "không có nhánh nào như thế “%s”"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "chưa có nhánh “%s”"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "quá nhiều tham số để bỏ đặt thượng nguồn"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "không thể bỏ đặt thượng nguồn của HEAD không chỉ đến một nhánh nào cả."
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Nhánh “%s” không có thông tin thượng nguồn"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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>?"
@@ -11265,7 +11717,7 @@
 "nhánh.\n"
 "Có phải ý bạn là dùng: -a|-r --list <mẫu>?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11333,39 +11785,39 @@
 "Vui lòng xen xét phần còn lại của báo cáo lỗi bên dưới.\n"
 "Bạn có thể xóa bất kỳ dòng nào bạn không muốn chia sẻ.\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "chỉ định thư mục định để tạo tập tin báo cáo lỗi"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr ""
 "chỉ định chuỗi định dạng thời gian strftime dùng làm hậu tố cho tên tập tin"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "không thể tạo các thư mục dẫn đầu cho “%s”"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "Thông tin hệ thống"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "Các Móc đã được bật"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "không thể tạo tập tin mới tại “%s”"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "không thể ghi vào %s"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "Đã tạo báo cáo mới tại “%s”\n"
@@ -11386,19 +11838,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <tập tin> [<tên tham chiếu>…]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "không hiển thị bộ đo tiến trình"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "hiển thị bộ đo tiến trình"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "hiển thị bộ đo tiến triển trong suốt pha ghi đối tượng"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "tương tự --all-progress khi bộ đo tiến trình được xuất hiện"
 
@@ -11541,8 +11993,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "chấm dứt các bản ghi vào và ra bằng ký tự NULL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "chặn các báo cáo tiến trình hoạt động"
 
@@ -11554,27 +12006,27 @@
 msgid "ignore index when checking"
 msgstr "bỏ qua mục lục khi kiểm tra"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "không thể chỉ định các tên đường dẫn với --stdin"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z chỉ hợp lý với --stdin"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "chưa chỉ ra đường dẫn"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "--quiet chỉ hợp lệ với tên đường dẫn đơn"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "không thể dùng cả hai tùy chọn --quiet và --verbose"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "tùy-chọn --non-matching chỉ hợp lệ khi dùng với --verbose"
 
@@ -11595,164 +12047,168 @@
 msgid "no contacts specified"
 msgstr "chưa chỉ ra danh bạ"
 
-#: builtin/checkout-index.c:139
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<các tùy chọn>]"
+
+#: 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
+msgid "string"
+msgstr "chuỗi"
+
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+msgid "when creating files, prepend <string>"
+msgstr "khi tạo các tập tin, nối thêm <chuỗi>"
+
+#: builtin/checkout-index.c:152
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<các tùy chọn>] [--] [<tập-tin>…]"
 
-#: builtin/checkout-index.c:156
+#: builtin/checkout-index.c:169
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage nên giữa 1 và 3 hay all"
 
-#: builtin/checkout-index.c:173
+#: builtin/checkout-index.c:187
 msgid "check out all files in the index"
 msgstr "lấy ra toàn bộ các tập tin trong bảng mục lục"
 
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:188
 msgid "force overwrite of existing files"
 msgstr "ép buộc ghi đè lên tập tin đã sẵn có từ trước"
 
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:190
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "không cảnh báo cho những tập tin tồn tại và không có trong bảng mục lục"
 
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:192
 msgid "don't checkout new files"
 msgstr "không checkout các tập tin mới"
 
-#: builtin/checkout-index.c:180
+#: builtin/checkout-index.c:194
 msgid "update stat information in the index file"
 msgstr "cập nhật thông tin thống kê trong tập tin lưu bảng mục lục mới"
 
-#: builtin/checkout-index.c:184
+#: builtin/checkout-index.c:198
 msgid "read list of paths from the standard input"
 msgstr "đọc danh sách đường dẫn từ đầu vào tiêu chuẩn"
 
-#: builtin/checkout-index.c:186
+#: builtin/checkout-index.c:200
 msgid "write the content to temporary files"
 msgstr "ghi nội dung vào tập tin tạm"
 
-#: builtin/checkout-index.c:187 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:757
-msgid "string"
-msgstr "chuỗi"
-
-#: builtin/checkout-index.c:188
-msgid "when creating files, prepend <string>"
-msgstr "khi tạo các tập tin, nối thêm <chuỗi>"
-
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "sao chép ra các tập tin từ bệ phóng có tên"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<các tùy chọn>] <nhánh>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<các tùy chọn>] [<nhánh>] -- <tập-tin>…"
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<các tùy chọn>] [<nhánh>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<các tùy chọn>] [--source=<nhánh>] <tập tin>…"
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "đường dẫn “%s” không có các phiên bản của chúng ta"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "đường dẫn “%s” không có các phiên bản của chúng"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "đường dẫn “%s” không có tất cả các phiên bản cần thiết"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "đường dẫn “%s” không có các phiên bản cần thiết"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "đường dẫn “%s”: không thể hòa trộn"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Không thể thêm kết quả hòa trộn cho “%s”"
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Đã tạo lại %d xung đột hòa trộn"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Đã cập nhật đường dẫn %d từ %s"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Đã cập nhật đường dẫn %d từ mục lục"
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "không được dùng “%s” với các đường dẫn cập nhật"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "không được dùng “%s” với %s"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Không thể cập nhật các đường dẫn và chuyển đến nhánh “%s” cùng một lúc."
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "không chỉ định “%s” cũng không “%s”"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "phải có “%s” khi không chỉ định “%s”"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "“%s” hay “%s” không thể được sử dụng với %s"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "đường dẫn “%s” không được hòa trộn"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "bạn cần phải giải quyết bảng mục lục hiện tại của bạn trước đã"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11762,50 +12218,50 @@
 "sau:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Không thể thực hiện reflog cho “%s”: %s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD hiện giờ tại"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "không thể cập nhật HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Đặt lại nhánh “%s”\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Đã sẵn sàng trên “%s”\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Đã chuyển tới và đặt lại nhánh “%s”\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Đã chuyển đến nhánh mới “%s”\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Đã chuyển đến nhánh “%s”\n"
 
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " … và nhiều hơn %d.\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11824,7 +12280,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11845,19 +12301,19 @@
 " git branch <tên_nhánh_mới> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "lỗi nội bộ trong khi di chuyển qua các điểm xét duyệt"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "Vị trí trước kia của HEAD là"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "Bạn tại nhánh mà nó chưa hề được sinh ra"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11866,7 +12322,7 @@
 "“%s” không thể là cả tập tin nội bộ và một nhánh theo dõi.\n"
 "Vui long dùng -- (và tùy chọn thêm --no-guess) để tránh lẫn lộn"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -11886,51 +12342,51 @@
 "chưa rõ ràng, ví dụ máy chủ “origin”, cân nhắc cài đặt\n"
 "checkout.defaultRemote=origin trong cấu hình của bạn."
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "“%s” khớp với nhiều (%d) nhánh máy chủ được theo dõi"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "chỉ cần một tham chiếu"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "chỉ cần một tham chiếu, nhưng lại đưa ra %d."
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "tham chiếu không hợp lệ: %s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "tham chiếu không phải là một cây:%s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được thẻ “%s”"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được nhánh máy phục vụ “%s”"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được “%s”"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được “%s”"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11938,7 +12394,7 @@
 "không thể chuyển nhánh trong khi đang hòa trộn\n"
 "Cân nhắc dung \"git merge --quit\" hoặc \"git worktree add\"."
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11946,7 +12402,7 @@
 "không thể chuyển nhanh ở giữa một phiên am\n"
 "Cân nhắc dùng \"git am --quit\" hoặc \"git worktree add\"."
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11954,7 +12410,7 @@
 "không thể chuyển nhánh trong khi cải tổ\n"
 "Cân nhắc dùng \"git rebase --quit\" hay \"git worktree add\"."
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11962,7 +12418,7 @@
 "không thể chuyển nhánh trong khi  cherry-picking\n"
 "Cân nhắc dùng \"git cherry-pick --quit\" hay \"git worktree add\"."
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11970,150 +12426,143 @@
 "không thể chuyển nhánh trong khi hoàn nguyên\n"
 "Cân nhắc dùng \"git revert --quit\" hoặc \"git worktree add\"."
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr ""
 "bạn hiện tại đang thực hiện việc chuyển nhánh trong khi đang di chuyển nửa "
 "bước"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "các đường dẫn không thể dùng cùng với các nhánh chuyển"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "“%s” không thể được sử dụng với các nhánh chuyển"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "“%s” không thể được dùng với “%s”"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "“%s” không thể nhận <điểm-đầu>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Không thể chuyển nhánh đến một thứ không phải là lần chuyển giao “%s”"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "thiếu tham số là nhánh hoặc lần chuyển giao"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "ép buộc báo cáo tiến triển công việc"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "thực hiện hòa trộn kiểu 3-way với nhánh mới"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "kiểu"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "xung đột kiểu (hòa trộn hoặc diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "rời bỏ HEAD tại lần chuyển giao theo tên"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "đặt thông tin thượng nguồn cho nhánh mới"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "ép buộc lấy ra (bỏ đi những thay đổi nội bộ)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "nhánh-mới"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "nhánh không cha mới"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "cập nhật các tập tin bị bỏ qua (mặc định)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr "không kiểm tra nếu cây làm việc khác đang giữ tham chiếu đã cho"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr ""
 "lấy ra (checkout) phiên bản của chúng ta cho các tập tin chưa được hòa trộn"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr ""
 "lấy ra (checkout) phiên bản của chúng họ cho các tập tin chưa được hòa trộn"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "không giới hạn đặc tả đường dẫn thành chỉ các mục rải rác"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c, -%c và --orphan loại từ lẫn nhau"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p và --overlay loại từ lẫn nhau"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track cần tên một nhánh"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "thiếu tên nhánh; hãy thử -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "không thể phân giải “%s”"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "đường dẫn đã cho không hợp lệ"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "“%s” không phải là một lần chuyển giao và một nhánh'%s” không thể được tạo "
 "từ đó"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach không nhận một đối số đường dẫn “%s”"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file xung khắc với --detach"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file xung khắc với --patch"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12121,70 +12570,70 @@
 "git checkout: --ours/--theirs, --force và --merge là xung khắc với nhau khi\n"
 "checkout bảng mục lục (index)."
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "bạn phải chỉ định các thư mục muốn hồi phục"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "nhánh"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "tạo và checkout một nhánh mới"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "tạo/đặt_lại và checkout một nhánh"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "tạo reflog cho nhánh mới"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "đoán thứ hai “git checkout <không-nhánh-nào-như-vậy>” (mặc định)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "dùng chế độ che phủ (mặc định)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "tạo và chuyển đến một nhánh mới"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "tạo/đặt_lại và chuyển đến một nhánh"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "gợi ý thứ hai \"git checkout <không-nhánh-nào-như-vậy>\""
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "vứt bỏ các sửa đổi địa phương"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "lấy ra từ tree-ish nào"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "phục hồi bảng mục lục"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "phục hồi cây làm việc (mặc định)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "bỏ qua những thứ chưa hòa trộn: %s"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "dùng chế độ che phủ"
 
@@ -12215,11 +12664,6 @@
 msgid "Would skip repository %s\n"
 msgstr "Nên bỏ qua kho chứa %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "gặp lỗi khi gỡ bỏ %s"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12329,8 +12773,8 @@
 msgstr "gỡ bỏ toàn bộ thư mục"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "mẫu"
@@ -12371,164 +12815,169 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<các tùy chọn>] [--] <kho> [<t.mục>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "đừng nhân bản từ kho nông"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "không tạo một checkout"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "tạo kho thuần"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "tạo kho bản sao (ý là kho thuần)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "để nhân bản từ kho nội bộ"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "không sử dụng liên kết cứng nội bộ, luôn sao chép"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "cài đặt đây là kho chia sẻ"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "đặc-tả-đường-dẫn"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "khởi tạo mô-đun-con trong bản sao"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "số lượng mô-đun-con được nhân bản đồng thời"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "thư-mục-mẫu"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "thư mục mà tại đó các mẫu sẽ được dùng"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "kho tham chiếu"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "chỉ dùng --reference khi nhân bản"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "tên"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "dùng <tên> thay cho “origin” để theo dõi thượng nguồn"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "lấy ra <nhánh> thay cho HEAD của máy chủ"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "đường dẫn đến git-upload-pack trên máy chủ"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "độ-sâu"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "tạo bản sao không đầy đủ cho mức sâu đã cho"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "thời-gian"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "tạo bản sao không đầy đủ từ thời điểm đã cho"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "điểm xét duyệt"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "làm sâu hơn lịch sử của bản sao shallow, bằng điểm xét duyệt loại trừ"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "chỉ nhân bản một nhánh, HEAD hoặc --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "đứng có nhân bản bất kỳ nhánh nào, và làm cho những lần lấy về sau không "
 "theo chúng nữa"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "mọi mô-đun-con nhân bản sẽ là shallow (nông)"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "không dùng chung thư mục dành riêng cho git và thư mục làm việc"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "khóa=giá_trị"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "đặt cấu hình bên trong một kho chứa mới"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "đặc-tả-máy-phục-vụ"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "tùy chọn để chuyển giao"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "chỉ dùng địa chỉ IPv4"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "chỉ dùng địa chỉ IPv6"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "mọi mô-đun-con nhân bản sẽ dung nhánh theo dõi máy chủ của chúng"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "khởi tạo tập tin sparse-checkout để bao gồm chỉ các tập tin ở gốc"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12536,42 +12985,42 @@
 "Không đoán được thư mục tên là gì.\n"
 "Vui lòng chỉ định tên một thư mục trên dòng lệnh"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "thông tin: không thể thêm thay thế cho “%s”: %s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s có tồn tại nhưng lại không phải là một thư mục"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "gặp lỗi khi bắt đầu lặp qua “%s”"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "gặp lỗi khi tạo được liên kết mềm %s"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "gặp lỗi khi sao chép tập tin và “%s”"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "gặp lỗi khi lặp qua “%s”"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "hoàn tất.\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12581,105 +13030,105 @@
 "Bạn kiểm tra kỹ xem cái gì được lấy ra bằng lệnh “git status”\n"
 "và thử lấy ra với lệnh “git restore --source=HEAD :/”\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Không tìm thấy nhánh máy chủ %s để nhân bản (clone)."
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "không thể cập nhật %s"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "gặp lỗi khi khởi tạo sparse-checkout"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "refers HEAD máy chủ  chỉ đến ref không tồn tại, không thể lấy ra.\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "không thể lấy ra (checkout) cây làm việc"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "không thể ghi các tham số vào tập tin cấu hình"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "không thể đóng gói để dọn dẹp"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "không thể bỏ liên kết tập tin thay thế tạm thời"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "Có quá nhiều đối số."
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "Bạn phải chỉ định một kho để mà nhân bản (clone)."
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "tùy chọn --bare và --origin %s xung khắc nhau."
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "tùy chọn --bare và --separate-git-dir xung khắc nhau."
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "kho chứa “%s” chưa tồn tại"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "độ sâu %s không phải là một số nguyên dương"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "đường dẫn đích “%s” đã có từ trước và không phải là một thư mục rỗng."
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr ""
 "đường dẫn kho chứa “%s” đã có từ trước và không phải là một thư mục rỗng."
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "cây làm việc “%s” đã sẵn tồn tại rồi."
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "không thể tạo cây thư mục làm việc dir “%s”"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Đang nhân bản thành kho chứa bare “%s”…\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Đang nhân bản thành “%s”…\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -12687,46 +13136,46 @@
 "nhân bản --recursive không tương thích với cả hai --reference và --reference-"
 "if-able"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "“%s” không phải tên máy chủ hợp lệ"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay "
 "thế."
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay "
 "thế."
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "--filter bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "kho nguồn là nông, nên bỏ qua --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local bị lờ đi"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Nhánh máy chủ %s không tìm thấy trong thượng nguồn %s"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "Bạn hình như là đã nhân bản một kho trống rỗng."
 
@@ -12743,20 +13192,20 @@
 msgstr "bố cục để dùng"
 
 #: builtin/column.c:30
-msgid "Maximum width"
-msgstr "Độ rộng tối đa"
+msgid "maximum width"
+msgstr "độ rộng tối đa"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
-msgstr "Chèn thêm khoảng trống vào bên trái"
+msgid "padding space on left border"
+msgstr "chèn thêm khoảng trống vào bên trái"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
-msgstr "Chèn thêm khoảng trắng vào bên phải"
+msgid "padding space on right border"
+msgstr "chèn thêm khoảng trắng vào bên phải"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "Chèn thêm khoảng trắng giữa các cột"
+msgid "padding space between columns"
+msgstr "chèn thêm khoảng trắng giữa các cột"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
@@ -12786,14 +13235,14 @@
 msgstr "không thể tìm thấy thư mục đối tượng khớp với “%s”"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "tmục"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
-msgstr "Thư mục đối tượng để lưu đồ thị"
+msgid "the object directory to store the graph"
+msgstr "thư mục đối tượng để lưu đồ thị"
 
 #: builtin/commit-graph.c:83
 msgid "if the commit-graph is split, only verify the tip file"
@@ -12889,7 +13338,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "cha mẹ bị trùng lặp %s đã bị bỏ qua"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "không phải là tên đối tượng hợp lệ “%s”"
@@ -12917,13 +13366,13 @@
 msgid "id of a parent commit object"
 msgstr "mã số của đối tượng chuyển giao cha mẹ"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "chú thích"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "chú thích của lần chuyển giao"
 
@@ -12931,7 +13380,7 @@
 msgid "read commit log message from file"
 msgstr "đọc chú thích nhật ký lần chuyển giao từ tập tin"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Ký lần chuyển giao dùng GPG"
@@ -13010,76 +13459,76 @@
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "gặp lỗi khi tháo dỡ HEAD đối tượng cây"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file với -a là không có ý nghĩa gì"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "Không đường dẫn với các tùy chọn --include/--only không hợp lý."
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "không thể tạo bảng mục lục tạm thời"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "gặp lỗi khi thêm bằng cách tương"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "không thể cập nhật bảng mục lục tạm thời"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "Gặp lỗi khi cập nhật cây bộ nhớ đệm"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục mới (new_index)"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr ""
 "không thể thực hiện việc chuyển giao cục bộ trong khi đang được hòa trộn."
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 "không thể thực hiện việc chuyển giao bộ phận trong khi đang cherry-pick."
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr ""
 "không thể thực hiện việc chuyển giao cục bộ trong khi đang thực hiện cải tổ."
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "không đọc được bảng mục lục"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục tạm thời"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "lần chuyển giao “%s” thiếu phần tác giả ở đầu"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "lần chuyển giao “%s” có phần tác giả ở đầu dị dạng"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "đối số cho --author bị dị hình"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13087,38 +13536,43 @@
 "không thể chọn một ký tự ghi chú cái mà không được dùng\n"
 "trong phần ghi chú hiện tại"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "không thể tìm kiếm commit (lần chuyển giao) %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(đang đọc thông điệp nhật ký từ đầu vào tiêu chuẩn)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "không thể đọc nhật ký từ đầu vào tiêu chuẩn"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "không đọc được tệp nhật ký “%s”"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "không thể kết hợp “-m” với “--fixup”:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "không thể đọc SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "không thể đọc MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "không thể ghi mẫu chuyển giao"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13132,7 +13586,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "và thử lại.\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13146,7 +13600,7 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "và thử lại.\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13157,7 +13611,7 @@
 "bắt đầu bằng “%c” sẽ được bỏ qua, nếu phần chú thích rỗng sẽ hủy bỏ lần "
 "chuyển giao.\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13169,153 +13623,186 @@
 "bắt đầu bằng “%c” sẽ được bỏ qua; bạn có thể xóa chúng đi nếu muốn thế.\n"
 "Phần chú thích này nếu trống rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sTác giả:           %.*s <%.*s>"
 
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sNgày tháng:        %s"
 
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sNgười chuyển giao: %.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "Không đọc được bảng mục lục"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "không thể chuyển phần đuôi cho “--trailers”"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "Gặp lỗi khi xây dựng cây"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Xin hãy cung cấp lời chú giải hoặc là dùng tùy chọn -m hoặc là -F.\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author “%s” không phải là “Họ và tên <thư điện tửl>” và không khớp bất kỳ "
 "tác giả nào sẵn có"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Chế độ bỏ qua không hợp lệ “%s”"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Chế độ cho các tập tin chưa được theo dõi không hợp lệ “%s”"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "hai tùy chọn -long và -z không tương thích với nhau"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr ""
+"Bạn đang ở giữa của quá trình hòa trộn -- không thể thực hiện việc “reword”."
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr ""
+"Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện việc "
+"“reword”."
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr "không thể tổ hợp tùy chọn \"reword\" của --fixup với đường dẫn '%s'"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"tùy chọn \"reword\" của --fixup là loại trừ qua lại với --patch/--"
+"interactive/--all/--include/--only"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "Sử dụng cả hai tùy chọn --reset-author và --author không hợp lý"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "Không có gì để mà “tu bổ” cả."
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình hòa trộn -- không thể thực hiện việc “tu bổ”."
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện việc “tu "
 "bổ”."
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình cải tổ -- nên không thể thực hiện việc “tu bổ”."
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "Các tùy chọn --squash và --fixup không thể sử dụng cùng với nhau"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "Chỉ được dùng một trong số tùy chọn trong số -c/-C/-F/--fixup."
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "Tùy chọn -m không thể được tổ hợp cùng với -c/-C/-F."
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 "--reset-author chỉ có thể được sử dụng với tùy chọn -C, -c hay --amend."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr ""
 "Chỉ một trong các tùy chọn --include/--only/--all/--interactive/--patch được "
 "sử dụng."
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "không hiểu tùy chọn: --fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "các đường dẫn “%s …” với tùy chọn -a không hợp lý"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "hiển thị trạng thái ở dạng súc tích"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "hiển thị thông tin nhánh"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "hiển thị thông tin về tạm cất"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "tính đầy đủ giá trị trước/sau"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "phiên bản"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "kết xuất dạng máy-có-thể-đọc"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "hiển thị trạng thái ở định dạng dài (mặc định)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "chấm dứt các mục bằng NUL"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "chế độ"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "hiển thị các tập tin chưa được theo dõi  dấu vết, các chế độ tùy chọn:  all, "
 "normal, no. (Mặc định: all)"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13323,11 +13810,11 @@
 "hiển thị các tập tin bị bỏ qua, các chế độ tùy chọn: traditional, matching, "
 "no. (Mặc định: traditional)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "khi"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13335,176 +13822,199 @@
 "bỏ qua các thay đổi trong mô-đun-con, tùy chọn khi: all, dirty, untracked. "
 "(Mặc định: all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "hiển thị danh sách các tập-tin chưa được theo dõi trong các cột"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "không dò tìm các tên thay đổi"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "dò các tên thay đổi, tùy ý đặt mục lục tương tự"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Không hỗ trỡ tổ hợp các tham số các tập tin bị bỏ qua và không được theo dõi"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "không hiển thị tổng kết sau khi chuyển giao thành công"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "hiển thị sự khác biệt trong mẫu tin nhắn chuyển giao"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "Các tùy chọn ghi chú commit"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "đọc chú thích từ tập tin"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "tác giả"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "ghi đè tác giả cho commit"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "ngày tháng"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "ghi đè ngày tháng cho lần chuyển giao"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "lần_chuyển_giao"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "dùng lại các ghi chú từ lần chuyển giao đã cho nhưng có cho sửa chữa"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "dùng lại các ghi chú từ lần chuyển giao đã cho"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr ""
-"dùng ghi chú có định dạng autosquash để sửa chữa lần chuyển giao đã chỉ ra"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr ""
+"dùng ghi chú có định dạng autosquash để sửa chữa hoặc tu bổ/reword lần "
+"chuyển giao đã chỉ ra"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "dùng lời nhắn có định dạng tự động nén để nén lại các lần chuyển giao đã chỉ "
 "ra"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "lần chuyển giao nhận tôi là tác giả (được dùng với tùy chọn -C/-c/--amend)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "bộ dò vết"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "thêm đuôi tự chọn"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "thêm dòng Signed-off-by vào cuối"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "sử dụng tập tin mẫu đã cho"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "ép buộc sửa lần commit"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "bao gồm các trạng thái trong mẫu ghi chú chuyển giao"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "Các tùy nội dung ghi chú commit"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "chuyển giao tất cả các tập tin có thay đổi"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục để chuyển giao"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "thêm các tập-tin bằng tương tác"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "thêm các thay đổi bằng tương tác"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "chỉ chuyển giao các tập tin đã chỉ ra"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "vòng qua móc (hook) pre-commit và commit-msg"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "hiển thị xem cái gì có thể được chuyển giao"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "“tu bổ” (amend) lần commit trước"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "vòng qua móc (hook) post-rewrite"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "ok để ghi lại một thay đổi trống rỗng"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "ok để ghi các thay đổi với lời nhắn trống rỗng"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Tập tin MERGE_HEAD sai hỏng (%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "không thể đọc MERGE_MODE"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "không thể đọc phần chú thích (message) của lần chuyển giao: %s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Bãi bỏ việc chuyển giao bởi vì phần chú thích của nó trống rỗng.\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 "Đang bỏ qua việc chuyển giao; bạn đã không biên soạn phần chú thích "
 "(message).\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr ""
+"Bãi bỏ việc chuyển giao bởi vì phần thân chú thích của nó trống rỗng.\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13850,7 +14360,7 @@
 msgid "print sizes in human readable format"
 msgstr "hiển thị kích cỡ theo định dạng dành cho người đọc"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -13863,11 +14373,11 @@
 "\n"
 "\tchmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "in thông tin gỡ lỗi ra đầu ra lỗi tiêu chuẩn"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr "credential-cache--daemon không sẵn có; không hỗ trợ unix socket"
 
@@ -14052,72 +14562,72 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base chỉ hoạt động với hai lần chuyển giao"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "“%s”: không phải tập tin bình thường hay liên kết mềm"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "tùy chọn không hợp lệ: %s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s…%s: không có cơ sở hòa trộn"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "Không phải là kho git"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "đối tượng đã cho “%s” không hợp lệ."
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "đã cho nhiều hơn hai đối tượng blob: “%s”"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "đã cho đối tượng không thể nắm giữ “%s”."
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s…%s: có nhiều cơ sở để hòa trộn, nên dùng %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr ""
 "git difftool [<các tùy chọn>] [<lần_chuyển_giao> [<lần_chuyển_giao>]] [--] </"
 "đường/dẫn>…]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "gặp lỗi: %d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "không thể đọc liên kết mềm %s"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "không đọc được tập tin liên kết mềm %s"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "không thể đọc đối tượng %s cho liên kết mềm %s"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14125,53 +14635,53 @@
 "các định dạng diff tổ hợp(“-c” và “--cc”) chưa được hỗ trợ trong\n"
 "chế độ diff thư mục(“-d” và “--dir-diff”)."
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "cả hai tập tin đã bị sửa: “%s” và “%s”."
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "cây làm việc ở bên trái."
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "các tập tin tạm đã sẵn có trong “%s”."
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "bạn có lẽ muốn dọn dẹp hay phục hồi ở đây."
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "dùng “diff.guitool“ thay vì dùng “diff.tool“"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "thực hiện một diff toàn thư mục"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "đừng nhắc khi khởi chạy công cụ diff"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "dùng liên kết mềm trong diff-thư-mục"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "công cụ"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "dùng công cụ diff đã cho"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "in ra danh sách các công cụ dif cái mà có thẻ dùng với “--tool“"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
@@ -14179,31 +14689,31 @@
 "làm cho “git-difftool” thoát khi gọi công cụ diff trả về mã không phải số "
 "không"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "chỉ định một lệnh tùy ý để xem diff"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "chuyển cho “diff”"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool cần cây làm việc hoặc --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff xung khắc với --no-index"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui, --tool và --extcmd loại từ lẫn nhau"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "chưa đưa ra <công_cụ> cho --tool=<công_cụ>"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "chưa đưa ra <lệnh> cho --extcmd=<lệnh>"
 
@@ -14268,40 +14778,40 @@
 "chọn bộ xử lý cho các ghi chú của lần chuyển giao theo một bộ mã thay thế"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "Đổ các đánh dấu này vào tập-tin"
+msgid "dump marks to this file"
+msgstr "đổ các đánh dấu này vào tập-tin"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
-msgstr "Nhập vào đánh dấu từ tập tin này"
+msgid "import marks from this file"
+msgstr "nhập vào đánh dấu từ tập tin này"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "Nhập vào đánh dấu từ tập tin sẵn có"
+msgid "import marks from this file if it exists"
+msgstr "nhập vào đánh dấu từ tập tin sẵn có"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "Làm giả một cái thẻ khi thẻ bị thiếu một cái"
+msgid "fake a tagger when tags lack one"
+msgstr "làm giả một cái thẻ khi thẻ bị thiếu một cái"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "Xuất ra toàn bộ cây cho mỗi lần chuyển giao"
+msgid "output full tree for each commit"
+msgstr "xuất ra toàn bộ cây cho mỗi lần chuyển giao"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "Sử dụng tính năng done để chấm dứt luồng dữ liệu"
+msgid "use the done feature to terminate the stream"
+msgstr "sử dụng tính năng done để chấm dứt luồng dữ liệu"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "Bỏ qua kết xuất của dữ liệu blob"
+msgid "skip output of blob data"
+msgstr "bỏ qua kết xuất của dữ liệu blob"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "refspec"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "Áp dụng refspec cho refs đã xuất"
+msgid "apply refspec to exported refs"
+msgstr "áp dụng refspec cho refs đã xuất"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14316,18 +14826,18 @@
 msgstr "chuyển đổi <from> sang <to> đầu ra ẩn danh"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
-"Các cha mẹ tham chiếu cái mà k trong luồng dữ liệu fast-export bởi mã id đối "
-"tượng"
+"các cha mẹ tham chiếu cái mà không trong luồng dữ liệu fast-export bởi mã id "
+"đối tượng"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "Hiển thị các mã id nguyên gốc của blobs/commits"
+msgid "show original object ids of blobs/commits"
+msgstr "hiển thị các mã id nguyên gốc của blobs/commits"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "Gắn nhãn thẻ ID dấu"
+msgid "label tags with mark ids"
+msgstr "gắn thẻ với các mã ID đánh dấu"
 
 #: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
@@ -14367,7 +14877,7 @@
 msgstr ""
 "tính năng “%s” bị cấm chỉ trong đầu vào mà không có --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Tập tin khóa đã được tạo nhưng chưa được báo cáo: %s"
@@ -14388,94 +14898,103 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<các tùy chọn>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel không thể âm"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "lấy về từ tất cả các máy chủ"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "đặt thượng nguồn cho git pull/fetch"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "nối thêm vào .git/FETCH_HEAD thay vì ghi đè lên nó"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "sử dụng giao dịch hạt nhân bên phía máy chủ"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "đường dẫn đến gói tải lên trên máy chủ cuối"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "ép buộc ghi đè lên tham chiếu nội bộ"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "lấy từ nhiều máy chủ cùng lúc"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "lấy tất cả các thẻ cùng với các đối tượng liên quan đến nó"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "không lấy tất cả các thẻ (--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "số lượng mô-đun-con được lấy đồng thời"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr ""
+"sửa đặc tả đường dẫn cho các tham chiếu mọi chỗ có trong refs/prefetch/"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "cắt cụt (prune) các nhánh “remote-tracking” không còn tồn tại trên máy chủ "
 "nữa"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "cắt xém các thẻ nội bộ không còn ở máy chủ và xóa các thẻ đã thay đổi"
 
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "khi-cần"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "điều khiển việc lấy về đệ quy trong các mô-đun-con"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "ghi các tham chiếu lấy về vào tập tin FETCH_HEAD"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "giữ lại gói đã tải về"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "cho phép cập nhật th.chiếu HEAD"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "làm sâu hơn lịch sử của bản sao"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "làm sâu hơn lịch sử của kho bản sao shallow dựa trên thời gian"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "chuyển đổi hoàn toàn sang kho git"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "soạn sẵn cái này cho kết xuất đường dẫn mô-đun-con"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14483,99 +15002,104 @@
 "mặc định cho việc lấy đệ quy các mô-đun-con (có mức ưu tiên thấp hơn các tập "
 "tin cấu hình config)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "chấp nhận tham chiếu cập nhật .git/shallow"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "refmap"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "chỉ ra refmap cần lấy về"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "báo cáo rằng chúng ta chỉ có các đối tượng tiếp cận được từ đối tượng này"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr ""
+"không lấy về một packfile; thay vào đó, hãy in tổ tiên của đỉnh đàm phán"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "chạy “maintenance --auto” sau khi lấy về"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "kiểm cho các-cập-nhật-bắt-buộc trên mọi nhánh đã cập nhật"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "ghi ra đồ thị các lần chuyển giao sau khi lấy về"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "chấp nhận tham chiếu từ đầu vào tiêu chuẩn"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "Không thể tìm thấy máy chủ cho tham chiếu HEAD"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "phần cấu hình fetch.output có chứa giá-trị không hợp lệ %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "không tìm thấy đối tượng %s"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[đã cập nhật]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[Bị từ chối]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "không thể fetch (lấy) về nhánh hiện hành"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[cập nhật thẻ]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "không thể cập nhật tham chiếu nội bộ"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "nên xóa chồng các thẻ có sẵn"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[thẻ mới]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[nhánh mới]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[ref (tham chiếu) mới]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "cưỡng bức cập nhật"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "không-phải-chuyển-tiếp-nhanh"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14585,7 +15109,7 @@
 "nhưng lựa chọn bị tắt. Để kích hoạt lại, sử dụng cờ\n"
 "“--show-forced-updates” hoặc chạy “git config fetch.showForcedUpdates true”."
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14598,22 +15122,22 @@
 "false”\n"
 "để tránh kiểm tra này.\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s đã không gửi tất cả các đối tượng cần thiết\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "từ chối %s bởi vì các gốc nông thì không được phép cập nhật"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "Từ %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14622,58 +15146,58 @@
 "một số tham chiếu nội bộ không thể được cập nhật; hãy thử chạy\n"
 " “git remote prune %s” để bỏ đi những nhánh cũ, hay bị xung đột"
 
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sẽ trở thành không đầu (không được quản lý))"
 
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s đã trở thành không đầu (không được quản lý))"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[đã xóa]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(không)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr ""
 "Từ chối việc lấy vào trong nhánh hiện tại %s của một kho chứa không phải kho "
 "trần (bare)"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Tùy chọn \"%s\" có giá trị \"%s\" là không hợp lệ cho %s"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "Tùy chọn \"%s\" bị bỏ qua với %s\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "phát hiện nhiều nhánh, không tương thích với --set-upstream"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "không cài đặt thượng nguồn cho một nhánh được theo dõi trên máy chủ"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "không cài đặt thượng nguồn cho một thẻ nhánh trên máy chủ"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "không hiểu kiểu nhánh"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14681,22 +15205,22 @@
 "không tìm thấy nhánh nguồn.\n"
 "bạn cần phải chỉ định chính xác một nhánh với tùy chọn --set-upstream."
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Đang lấy “%s” về\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Không thể lấy“%s” về"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "không thể lấy “%s” (mã thoát: %d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
@@ -14704,44 +15228,52 @@
 "Chưa chỉ ra kho chứa máy chủ.  Xin hãy chỉ định hoặc là URL hoặc\n"
 "tên máy chủ từ cái mà những điểm xét duyệt mới có thể được fetch (lấy về)."
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "Bạn phải định rõ tên thẻ."
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "Mức sâu là số âm trong --deepen là không được hỗ trợ"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "Các tùy chọn--deepen và --depth loại từ lẫn nhau"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "tùy chọn --depth và --unshallow không thể sử dụng cùng với nhau"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow trên kho hoàn chỉnh là không hợp lý"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "lệnh lấy về \"fetch --all\" không lấy đối số kho chứa"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "lệnh lấy về \"fetch --all\" không hợp lý với refspecs"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "Không có nhóm máy chủ hay máy chủ như thế: %s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "Việc lấy về cả một nhóm và chỉ định refspecs không hợp lý"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "phải cung cấp máy chủ khi sử dụng --negotiate-only"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "Giao thức không hỗ trợ --negotiate-only, nên thoát."
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -14749,7 +15281,11 @@
 "--filter chỉ có thể được dùng với máy chủ được cấu hình bằng extensions."
 "partialclone"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic chỉ có thể dùng khi lấy về từ một máy chủ"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin chỉ có thể dùng khi lấy về từ một máy chủ"
 
@@ -14800,47 +15336,47 @@
 "git for-each-ref [--contains [<lần-chuyển-giao>]] [--no-contains [<lần-"
 "chuyển-giao>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "trích dẫn để phù hợp cho hệ vỏ (shell)"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "trích dẫn để phù hợp cho perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "trích dẫn để phù hợp cho python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "trích dẫn để phù hợp cho Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "hiển thị chỉ <n> tham chiếu khớp"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "các màu định dạng lưu tâm"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "chỉ hiển thị các tham chiếu mà nó chỉ đến đối tượng đã cho"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "chỉ hiển thị những tham chiếu mà nó được hòa trộn"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "chỉ hiển thị những tham chiếu mà nó không được hòa trộn"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "chỉ hiển thị những tham chiếu mà nó chứa lần chuyển giao"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "chỉ hiển thị những tham chiếu mà nó không chứa lần chuyển giao"
 
@@ -14860,32 +15396,32 @@
 msgid "missing --config=<config>"
 msgstr "thiếu --config=<config>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "không hiểu"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "lỗi trong %s %s: %s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "có cảnh báo trong %s %s: %s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "liên kết gãy từ %7s %s"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "kiểu đối tượng sai trong liên kết"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14894,211 +15430,211 @@
 "liên kết gãy từ %7s %s \n"
 "              tới %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "thiếu %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "không tiếp cận được %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "dangling %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "không thể tạo lost-found"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "không thể hoàn thành “%s”"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "Đang kiểm tra %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "Đang kiểm tra kết nối (%d đối tượng)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "Đang kiểm tra %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "các liên kết bị gẫy"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "gốc %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "đã đánh thẻ %s %s (%s) trong %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s: đối tượng thiếu hay hỏng"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s: mục reflog không hợp lệ %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "Đang kiểm tra việc đổi tên của “%s” thành “%s”"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s: con trỏ sha1 không hợp lệ %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s: không phải là một lần chuyển giao"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "cảnh báo: Không có các tham chiếu mặc định"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: thiếu đối tượng hoặc hỏng: %s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: không thể phân tích cú đối tượng: %s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "tập tin sha1 sai: %s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "Đang kiểm tra thư mục đối tượng"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "Đang kiểm tra các thư mục đối tượng"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "Đang lấy liên kết %s"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "%s không hợp lệ"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s chỉ đến thứ gì đó xa lạ (%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s: HEAD đã tách rời không chỉ vào đâu cả"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "chú ý: %s chỉ đến một nhánh chưa sinh (%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "Đang kiểm tra cây nhớ tạm"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: con trỏ sha1 không hợp lệ trong cache-tree"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "non-tree trong cache-tree"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<các tùy chọn>] [<đối-tượng>…]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "hiển thị các đối tượng không thể đọc được"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "hiển thị các đối tượng không được quản lý"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "báo cáo các thẻ"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "báo cáo node gốc"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "tạo “index objects head nodes”"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "tạo “reflogs head nodes” (mặc định)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "cũng cân nhắc đến các đối tượng gói và thay thế"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "chỉ kiểm tra kết nối"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "cho phép kiểm tra hạn chế hơn"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "ghi các đối tượng không được quản lý trong .git/lost-found"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "hiển thị quá trình"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "hiển thị tên chi tiết cho các đối tượng đọc được"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "Đang kiểm tra các đối tượng"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: thiếu đối tượng"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "tham số không hợp lệ: cần sha1, nhưng lại nhận được “%s”"
@@ -15107,27 +15643,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<các tùy chọn>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "Gặp lỗi khi lấy thông tin thống kê về tập tin %s: %s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "gặp lỗi khi phân tích “%s” giá trị “%s”"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "không thể lấy thông tin thống kê về “%s”"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "không thể đọc “%s”"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15142,54 +15678,54 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "xóa bỏ các đối tượng không được tham chiếu"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "cẩn thận hơn nữa (tăng thời gian chạy)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "bật chế độ auto-gc"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "buộc gc chạy ngay cả khi có tiến trình gc khác đang chạy"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "đóng gói lại tất cả các gói khác ngoại trừ gói lớn nhất"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "gặp lỗi khi phân tích giá trị gc.logexpiry %s"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "gặp lỗi khi phân tích giá trị prune %s"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Tự động đóng gói kho chứa trên nền hệ thống để tối ưu hóa hiệu suất làm "
 "việc.\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Tự động đóng gói kho chứa để tối ưu hóa hiệu suất làm việc.\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Xem \"git help gc\" để có hướng dẫn cụ thể về cách dọn dẹp kho git.\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
@@ -15197,143 +15733,170 @@
 "gc đang được thực hiện trên máy “%s” pid %<PRIuMAX> (dùng --force nếu không "
 "phải thế)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Có quá nhiều đối tượng tự do không được dùng đến; hãy chạy lệnh “git prune” "
 "để xóa bỏ chúng đi."
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<nhiệm vụ>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule không được phép"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "đối số --schedule không được thừa nhận %s"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "gặp lỗi khi ghi đồ thị các lần chuyển giao"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "gặp lỗi khi điền đầy các máy chủ"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "gặp lỗi khi tải trước các máy chủ"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "gặp lỗi khi lấy thông tin thống kê về tiến trình “git pack-objects”"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "gặp lỗi khi hoàn tất tiến trình “git pack-objects”"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "gặp lỗi khi ghi multi-pack-index"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "gặp lỗi khi chạy “git multi-pack-index expire”"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "gặp lỗi khi chạy “git multi-pack-index repack”"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr "bỏ qua tác vụ incremental-repack vì core.multiPackIndex bị vô hiệu hóa"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "đã có khóa của tập tin “%s”, bỏ qua bảo trì"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "gặp lỗi khi thực hiện nhiệm vụ “%s”"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "“%s” không phải một nhiệm vụ hợp lệ"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "nhiệm vụ “%s” không được chọn nhiều lần"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "chạy nhiệm vụ dựa trên trạng thái của kho chứa"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "tần số"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "chạy nhiệm vụ dựa trên tần suất"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "đừng báo cáo diễn tiến hay các thông tin khác ra đầu lỗi tiêu chuẩn"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "tác vụ"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "chạy một nhiệm vụ cụ thể"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "dùng nhiều nhất là một trong --auto và --schedule=<frequency>"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "gặp lỗi khi chạy “git config”"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "một tiến trình khác được lập kế hoạch chạy nền để bảo trì"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "gặp lỗi khi khai triển đường dẫn “%s”"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "gặp lỗi khi khởi chạy launchctl"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "gặp lỗi khi tạo thư mục cho \"%s\""
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "gặp lỗi khi mồi dịch vụ %s"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "gặp lỗi khi tạo tập tin xml tạm thời"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "gặp lỗi khi lấy thông tin thống kê về schtasks"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr ""
 "gặp lỗi khi chạy “crontab -l”; hệ thống của bạn có thể không hỗ trợ “cron”"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr "gặp lỗi khi chạy “crontab”; hiển thị của bạn có lẽ không hỗ trợ “cron”"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "gặp lỗi khi mở đầu vào tiêu chuẩn của “crontab”"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "“crontab” đã chết"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "một tiến trình khác được lập kế hoạch chạy nền để bảo trì"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "gặp lỗi khi thêm cấu hình toàn cục"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance run <lệnh_con> [<các tùy chọn>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "lện con không hợp lệ: %s"
@@ -15342,12 +15905,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<các tùy chọn>] [-e] <mẫu> [<rev>…] [[--] </đường/dẫn>…]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: gặp lỗi tạo tuyến (thread): %s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "số tuyến đã cho không hợp lệ (%d) cho %s"
@@ -15356,204 +15919,200 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "không hỗ trợ đa tuyến, bỏ qua %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "không thể đọc cây (%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "không thể thực hiện lệnh grep (lọc tìm) từ đối tượng thuộc kiểu %s"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "chuyển đến “%c” cần một giá trị bằng số"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "tìm trong bảng mục lục thay vì trong cây làm việc"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "tìm trong nội dung không được quản lý bởi git"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "tìm kiếm các tập tin được và chưa được theo dõi dấu vết"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "các tập tin bị bỏ qua được chỉ định thông qua “.gitignore”"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "tìm kiếm đệ quy trong từng mô-đun-con"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "hiển thị những dòng không khớp với mẫu"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "phân biệt HOA/thường"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "chỉ khớp mẫu tại đường ranh giới từ"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "xử lý tập tin nhị phân như là dạng văn bản thường"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "không khớp mẫu trong các tập tin nhị phân"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "xử lý tập tin nhị phân với các bộ lọc “textconv”"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "tìm kiếm trong thư mục con (mặc định)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "hạ xuống ít nhất là mức <sâu>"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "dùng biểu thức chính qui POSIX có mở rộng"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "sử dụng biểu thức chính quy kiểu POSIX (mặc định)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "diễn dịch các mẫu như là chuỗi cố định"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "sử dụng biểu thức chính quy tương thích Perl"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "hiển thị số của dòng"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "hiển thị số cột của khớp với mẫu đầu tiên"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "không hiển thị tên tập tin"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "hiển thị các tên tập tin"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "hiển thị tên tập tin tương đối với thư mục đỉnh (top)"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "chỉ hiển thị tên tập tin thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "đồng nghĩa với --files-with-matches"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "chỉ hiển thị tên cho những tập tin không khớp với mẫu"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "thêm NUL vào sau tên tập tin"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "chỉ hiển thị những phần khớp với mẫu của một dòng"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "hiển thị số lượng khớp thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "tô sáng phần khớp mẫu"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "hiển thị dòng trống giữa các lần khớp từ các tập tin khác biệt"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr ""
 "hiển thị tên tập tin một lần phía trên các lần khớp từ cùng một tập tin"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "hiển thị <n> dòng nội dung phía trước và sau các lần khớp"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "hiển thị <n> dòng nội dung trước khớp"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "hiển thị <n> dòng nội dung sau khớp"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "dùng <n> tuyến trình làm việc"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "dạng viết tắt của -C SỐ"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "hiển thị dòng vói tên hàm trước các lần khớp"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "hiển thị hàm bao quanh"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "đọc mẫu từ tập-tin"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "match <mẫu>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "tổ hợp mẫu được chỉ ra với tùy chọn -e"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "đưa ra gợi ý với trạng thái thoát mà không có kết xuất"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr "chỉ hiển thị những cái khớp từ tập tin mà nó khớp toàn bộ các mẫu"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "hiển thị cây phân tích cú pháp cho biểu thức “grep” (tìm kiếm)"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "dàn trang"
@@ -15587,11 +16146,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "tổ hợp tùy chọn không hợp lệ, bỏ qua --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "không hỗ trợ đa tuyến, bỏ qua --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "số tuyến chỉ ra không hợp lệ (%d)"
@@ -15604,11 +16163,15 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached hay --untracked không được sử dụng với --no-index"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked không thể được sử dụng với tùy chọn --cached"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard không thể sử dụng cho nội dung lưu dấu vết"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "cả hai --cached và các cây phải được chỉ ra"
 
@@ -15739,12 +16302,12 @@
 msgid "no info viewer handled the request"
 msgstr "không có trình xem trợ giúp dạng info tiếp hợp với yêu cầu"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "“%s” được đặt bí danh thành “%s”"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "chuỗi alias.%s sai: %s"
@@ -15758,386 +16321,386 @@
 msgid "'git help config' for more information"
 msgstr "Chạy lệnh “git help config” để có thêm thông tin"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "kiểu đối tượng không khớp tại %s"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "không thể lấy về đối tượng cần %s"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "đối tượng %s: cần kiểu %s nhưng lại nhận được %s"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "không thể điền thêm vào %d byte"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "gặp kết thúc tập tin EOF quá sớm"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "lỗi đọc ở đầu vào"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "sử dụng nhiều hơn số lượng byte mà nó sẵn có"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "gói quá lớn so với định nghĩa hiện tại của kiểu off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "gói đã vượt quá cỡ tối đa được phép"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "không thể tạo “%s”"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "không thể mở packfile “%s”"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "chữ ký cho gói không khớp"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "không hỗ trợ phiên bản gói %<PRIu32>"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "gói có đối tượng sai tại khoảng bù %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "xả nén trả về %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "tràn giá trị khoảng bù cho đối tượng delta cơ sở"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "khoảng bù cơ sở cho delta nằm ngoài phạm vi"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "không hiểu kiểu đối tượng %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "không thể chạy hàm pread cho tập tin gói"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "tập tin gói bị kết thúc sớm, thiếu %<PRIuMAX> byte"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "sự mâu thuẫn xả nén nghiêm trọng"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SỰ VA CHẠM SHA1 ĐÃ XẢY RA VỚI %s!"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "không thể đọc %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "không thể đọc thông tin đối tượng sẵn có %s"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "không thể đọc đối tượng đã tồn tại %s"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "đối tượng blob không hợp lệ %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "lỗi fsck trong đối tượng đóng gói"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Không phải tất cả các đối tượng con của %s là có thể với tới được"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "gặp lỗi khi áp dụng delta"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "Đang nhận về các đối tượng"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "Các đối tượng bảng mục lục"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "gói bị sai hỏng (SHA1 không khớp)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "không thể lấy thông tin thống kê packfile"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "pack có phần thừa ở cuối"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "lộn xộn hơn cả điên rồ khi chạy hàm parse_pack_objects()"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "Đang phân giải các delta"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "không thể tạo tuyến: %s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "lộn xộn hơn cả điên rồ"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "đầy đủ với %d đối tượng nội bộ"
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Gặp tổng kiểm tra tail không cần cho %s (đĩa hỏng?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "gói có %d delta chưa được giải quyết"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "không thể xả nén đối tượng nối thêm (%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "đối tượng nội bộ %s bị hỏng"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "tên tập tin tập tin gói “%s” không được kết thúc bằng đuôi “.pack”"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "tên tập tin tập tin gói “%s” không được kết thúc “.%s”"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "không thể ghi %s tập tin “%s”"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "không thể đóng tập tin được ghi %s “%s”"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "gặp lỗi trong khi đóng tập tin gói"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "không thể lưu tập tin gói"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "không thể lưu trữ tập tin ghi mục lục"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "sai pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Không thể mở tập tin gói đã sẵn có “%s”"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Không thể mở tập tin idx của gói cho “%s”"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "không delta: %d đối tượng"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "chiều dài xích = %d: %lu đối tượng"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "Không thể quay lại cwd"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "%s sai"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "không hiểu thuật toán băm dữ liệu “%s”"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin không thể được dùng mà không có --stdin"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin cần một kho git"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format không thể được dùng với --stdin"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "dùng tùy chọn --verify mà không đưa ra tên packfile"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "lỗi fsck trong các đối tượng gói"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "không thể lấy thông tin thống kê về mẫu “%s”"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "không thể opendir() “%s”"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "không thể readlink “%s”"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "không thể tạo liên kết mềm (symlink) “%s” “%s”"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "không thể sao chép “%s” sang “%s”"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "đang lờ đi mẫu “%s”"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "các mẫu không được tìm thấy trong %s"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "không sao chép các mẫu từ “%s”: %s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "tên nhánh khởi tạo không hợp lệ: “%s”"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "không thể xử lý (handle) tập tin kiểu %d"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "không di chuyển được %s vào %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "cố để khởi tạo lại một kho với kiểu băm dữ liệu khác"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s đã có từ trước rồi"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init: --initial-branch=%s bị bỏ qua"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "Đã khởi tạo lại kho Git chia sẻ sẵn có trong %s%s\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "Đã khởi tạo lại kho Git sẵn có trong %s%s\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "Đã khởi tạo lại kho Git chia sẻ trống rỗng sẵn có trong %s%s\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "Đã khởi tạo lại kho Git trống rỗng sẵn có trong %s%s\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -16145,41 +16708,41 @@
 "git init [-q | --quiet] [--bare] [--template=<thư-mục-tạm>] [--shared[=<các-"
 "quyền>]] [thư-mục]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "các quyền"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "chỉ ra cái mà kho git được chia sẻ giữa nhiều người dùng"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "ghi đè lên tên của nhánh khởi tạo"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "băm"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "chỉ định thuật toán băm dữ liệu muốn dùng"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "Các tùy chọn --separate-git-dir và --bare loại từ lẫn nhau"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "không thể mkdir (tạo thư mục): %s"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "không thể chdir (chuyển đổi thư mục) sang %s"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
@@ -16188,12 +16751,12 @@
 "%s (hoặc --work-tree=<thư-mục>) không cho phép không chỉ định %s (hoặc --git-"
 "dir=<thư-mục>)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "Không thể truy cập cây (tree) làm việc “%s”"
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir xung khắc với kho thuần"
 
@@ -16245,10 +16808,6 @@
 msgid "do not treat --- specially"
 msgstr "không coi --- là đặc biệt"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "bộ dò vết"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "bộ dò vết cần thêm"
@@ -16261,130 +16820,130 @@
 msgid "no input file given for in-place editing"
 msgstr "không đưa ra tập tin đầu vào để sửa tại-chỗ"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<các tùy chọn>] [<vùng-xem-xét>] [[--] </đường/dẫn>…]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<các tùy chọn>] <đối-tượng>…"
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "tùy chọn--decorate không hợp lệ: %s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "hiển thị mã nguồn"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
-msgstr "Sử dụng tập tin ánh xạ thư"
+#: builtin/log.c:181
+msgid "use mail map file"
+msgstr "sử dụng tập tin ánh xạ thư"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "chỉ tô sáng các tham chiếu khớp với <mẫu>"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "không tô sáng các tham chiếu khớp với <mẫu>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "các tùy chọn trang trí"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
-"Theo dõi sự tiến hóa của phạm vi <start><end> dòng, hoặc chức năng:"
+"theo dõi sự tiến hóa của phạm vi <start><end> dòng, hoặc chức năng:"
 "<funcname> trong <file>"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<vùng>:<tập_tin> không thể được sử dụng với đặc tả đường dẫn"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Kết xuất cuối cùng: %d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: sai tập tin"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "không thể đọc đối tượng %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "không nhận ra kiểu: %d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: bao bọc không hợp lệ từ chế độ mô tả"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers không có giá trị cụ thể"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "không thể mở tập tin miếng vá: %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "cần chính xác một vùng"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "không phải là một vùng"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "“cover letter” cần cho định dạng thư"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "gặp lỗi khi tạo các tập tin cover-letter"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to điên rồ: %s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<các tùy chọn>] [<kể-từ> | <vùng-xem-xét>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "hai thư mục kết xuất?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "không hiểu lần chuyển giao %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "gặp lỗi khi phân giải “%s” như là một tham chiếu hợp lệ"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "không tìm thấy nền hòa trộn chính xác"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16395,289 +16954,293 @@
 "nhánh máy chủ. Hoặc là bạn có thể chỉ định lần chuyển giao nền bằng\n"
 "\"--base=<base-commit-id>\" một cách thủ công"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "gặp lỗi khi tìm nền hòa trộn chính xác"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "lần chuyển giao nền không là tổ tiên của danh sách điểm xét duyệt"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "lần chuyển giao nền không được trong danh sách điểm xét duyệt"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "không thể lấy mã miếng vá"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 "gặp lỗi khi suy luận range-diff (vùng khác biệt) gốc của sê-ri hiện tại"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "dùng “%s” như là gốc range-diff của sê-ri hiện tại"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "dùng [PATCH n/m] ngay cả với miếng vá đơn"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "dùng [VÁ] ngay cả với các miếng vá phức tạp"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "hiển thị miếng vá ra đầu ra chuẩn"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "tạo bì thư"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "sử dụng chỗi dãy số dạng đơn giản cho tên tập-tin xuất ra"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "sử dụng <sfx> thay cho “.patch”"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "bắt đầu đánh số miếng vá từ <n> thay vì 1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "đếm reroll"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "đánh dấu chuỗi nối tiếp dạng thứ-N re-roll"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "chiều dài tên tập tin đầu ra tối đa"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
-msgstr "Dùng [RFC VÁ] thay cho [VÁ]"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
+msgstr "dùng [VÁ RFC] thay cho [VÁ]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "tạo ra các phần của một lá thư bao gồm dựa trên mô tả của nhánh"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
-msgstr "Dùng [<tiền-tố>] thay cho [VÁ]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
+msgstr "dùng [<tiền-tố>] thay cho [VÁ]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "lưu các tập tin kết quả trong <t.mục>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "không strip/add [VÁ]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "không kết xuất diff (những khác biệt) nhị phân"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "xuất mọi mã băm all-zero trong phần đầu From"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "không bao gồm miếng vá khớp với một lần chuyển giao thượng nguồn"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "hiển thị định dạng miếng vá thay vì mặc định (miếng vá + thống kê)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "Lời nhắn"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "đầu đề thư"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "thêm đầu đề thư"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "thư điện tử"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "thêm To: đầu đề thư"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "thêm Cc: đầu đề thư"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "thụt lề"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "đặt “Địa chỉ gửi” thành <thụ lề> (hoặc thụt lề người commit nếu bỏ quên)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "dùng thư đầu tiên để trả lời <message-id>"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "ranh giới"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "đính kèm miếng vá"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "dùng miếng vá làm nội dung"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "cho phép luồng lời nhắn, kiểu: “shallow”, “deep”"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "chữ ký"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "thêm chữ ký"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "lần_chuyển_giao_nền"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "add trước hết đòi hỏi thông tin cây tới sê-ri miếng vá"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "thêm chữ ký từ một tập tin"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "không hiển thị các tên tập tin của miếng vá"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "hiển thị bộ đo tiến triển trong khi tạo các miếng vá"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "hiển thị các thay đổi dựa trên <rev> trong các chữ bao bọc hoặc miếng vá đơn"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "hiển thị các thay đổi dựa trên <refspec> trong các chữ bao bọc hoặc miếng vá "
 "đơn"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "tỷ lệ phần trăm theo cái tạo là weighted"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "dòng định danh không hợp lệ: %s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n và -k loại trừ lẫn nhau"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc và -k xung khắc nhau"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only không hợp lý"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status không hợp lý"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check không hợp lý"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "Các tùy chọn--stdout, --output, và --output-directory loại từ lẫn nhau"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff cần --cover-letter hoặc vá đơn"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff dựa trên v%d:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor yêu cầu --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff yêu cầu --cover-letter hoặc miếng vá đơn"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff dựa trên v%d:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "không thể đọc tập tin chữ ký “%s”"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "Đang tạo các miếng vá"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "gặp lỗi khi tạo các tập tin kết xuất"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<thượng-nguồn> [<đầu> [<giới-hạn>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16685,113 +17248,117 @@
 "Không tìm thấy nhánh mạng được theo dõi, hãy chỉ định <thượng-nguồn> một "
 "cách thủ công.\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<các tùy chọn>] [<tập-tin>…]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "nhận dạng các trạng thái tập tin với thẻ"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr ""
 "dùng chữ cái viết thường cho các tập tin “assume unchanged” (giả định không "
 "thay đổi)"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "dùng chữ cái viết thường cho các tập tin “fsmonitor clean”"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "hiển thị các tập tin được nhớ tạm vào đầu ra (mặc định)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "hiển thị các tập tin đã xóa trong kết xuất"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "hiển thị các tập tin đã bị sửa đổi ra kết xuất"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "hiển thị các tập tin khác trong kết xuất"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "hiển thị các tập tin bị bỏ qua trong kết xuất"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "hiển thị tên đối tượng của nội dung được đặt lên bệ phóng ra kết xuất"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "hiển thị các tập tin trên hệ thống tập tin mà nó cần được gỡ bỏ"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "chỉ hiển thị tên của các thư mục “khác”"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "hiển thị kết thúc dòng của các tập tin"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "không hiển thị thư mục rỗng"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "hiển thị các tập tin chưa hòa trộn trong kết xuất"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "hiển thị thông tin resolve-undo"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "bỏ qua những tập tin khớp với một mẫu"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "mẫu loại trừ được đọc từ <tập tin>"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "đọc thêm các mẫu ngoại trừ mỗi thư mục trong <tập tin>"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "thêm loại trừ tiêu chuẩn kiểu git"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "làm cho kết xuất liên quan đến thư mục ở mức cao nhất (gốc) của dự án"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "đệ quy xuyên qua mô-đun con"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "nếu <tập tin> bất kỳ không ở trong bảng mục lục, xử lý nó như một lỗi"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "tree-ish"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr ""
 "giả định rằng các đường dẫn đã bị gỡ bỏ kể từ <tree-ish> nay vẫn hiện diện"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "hiển thị dữ liệu gỡ lỗi"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "chặn các mục tin trùng lặp"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16802,39 +17369,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<kho> [<các tham chiếu>…]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "không hiển thị URL máy chủ"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "thực thi"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "đường dẫn của git-upload-pack trên máy chủ"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "giới hạn tới các thẻ"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "giới hạn cho các đầu"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "không hiển thị thẻ bị peel (gọt bỏ)"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "lấy url.<base>.insteadOf vào trong tài khoản"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "thoát với mã là 2 nếu không tìm thấy tham chiếu nào khớp"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "hiển thị tham chiếu nằm dưới để thêm vào đối tượng được chỉ bởi nó"
 
@@ -16874,6 +17441,55 @@
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "liệt kê cây mục tin; không chỉ thư mục hiện hành (ngụ ý --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<các tùy chọn>] <msg> <patch> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "giữ lại phần chủ đề"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "giữ không dấu ngoặc vá trong chủ đề"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "sao chép Message-ID vào cuối của ghi chú lần chuyển giao"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "mã hóa lại siêu dữ liệu thành i18n.commitEncoding"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "vô hiệu hóa mã hóa lại bộ ký tự của siêu dữ liệu"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "bảng mã"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "mã hóa lại siêu dữ liệu vào bảng mã này"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "dùng \"scissor\""
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<hành động>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "hành động khi CR được trích dẫn được tìm thấy"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "sử dụng phần đầu trong nội dung thư"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -16989,193 +17605,193 @@
 msgid "Merging %s with %s\n"
 msgstr "Đang hòa trộn %s với %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<các tùy chọn>] [<commit>…]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "switch “m” yêu cầu một giá trị"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "tùy chọn “%s” yêu cầu một giá trị"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Không tìm thấy chiến lược hòa trộn “%s”.\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "Các chiến lược sẵn sàng là:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Các chiến lược tùy chỉnh sẵn sàng là:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "không hiển thị thống kê khác biệt tại cuối của lần hòa trộn"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "hiển thị thống kê khác biệt tại cuối của hòa trộn"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(đồng nghĩa với --stat)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr "thêm (ít nhất <n>) mục từ shortlog cho ghi chú chuyển giao hòa trộn"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "tạo một lần chuyển giao đưon thay vì thực hiện việc hòa trộn"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "thực hiện chuyển giao nếu hòa trộn thành công (mặc định)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "sửa chú thích trước khi chuyển giao"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "cho phép chuyển-tiếp-nhanh (mặc định)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "bỏ qua nếu chuyển-tiếp-nhanh không thể được"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "thẩm tra xem lần chuyển giao có tên đó có chữ ký GPG hợp lệ hay không"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "chiến lược"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "chiến lược hòa trộn sẽ dùng"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "tùy_chọn=giá_trị"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "tùy chọn cho chiến lược hòa trộn đã chọn"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr ""
 "hòa trộn ghi chú của lần chuyển giao (dành cho hòa trộn không-chuyển-tiếp-"
 "nhanh)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "bãi bỏ quá trình hòa trộn hiện tại đang thực hiện"
 
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort nhưng để lại bảng mục lục và cây làm việc"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "tiếp tục quá trình hòa trộn hiện tại đang thực hiện"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "cho phép hòa trộn lịch sử không liên quan"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "vòng qua móc (hook) pre-merge-commit và commit-msg"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "không thể chạy stash."
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "lệnh tạm cất gặp lỗi"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "không phải là một đối tượng hợp lệ: %s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "read-tree gặp lỗi"
 
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (không có gì để squash)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "Đã cập nhật rồi. (không có gì để squash)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "Squash commit -- không cập nhật HEAD\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Không có lời chú thích hòa trộn -- nên không cập nhật HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "“%s” không chỉ đến một lần chuyển giao nào cả"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "Chuỗi branch.%s.mergeoptions sai: %s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "Không cầm nắm gì ngoài hai head hòa trộn."
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "Không hiểu tùy chọn cho merge-recursive: -X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "không thể ghi %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Không thể đọc từ “%s”"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr ""
 "Vẫn chưa hòa trộn các lần chuyển giao; sử dụng lệnh “git commit” để hoàn tất "
 "việc hòa trộn.\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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"
@@ -17187,11 +17803,11 @@
 "topic.\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "Nếu phần chú thích rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
@@ -17200,75 +17816,75 @@
 "Những dòng được bắt đầu bằng “%c” sẽ được bỏ qua, và nếu phần chú\n"
 "thích rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "Chú thích của lần commit (chuyển giao) bị trống rỗng."
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Tuyệt vời.\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Việc tự động hòa trộn gặp lỗi; hãy sửa các xung đột sau đó chuyển giao kết "
 "quả.\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "Không phải nhánh hiện hành."
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "Không có máy chủ cho nhánh hiện hành."
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "Không có thượng nguồn mặc định được định nghĩa cho nhánh hiện hành."
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Không nhánh mạng theo dõi cho %s từ %s"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Giá trị sai “%s” trong biến môi trường “%s”"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "không phải là một thứ gì đó mà chúng tôi có thể hòa trộn trong %s: %s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "không phải là thứ gì đó mà chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort không nhận các đối số"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Ở đây không có lần hòa trộn nào được hủy bỏ giữa chừng cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit không nhận các đối số"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue không nhận đối số"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Ở đây không có lần hòa trộn nào đang được xử lý cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17276,7 +17892,7 @@
 "Bạn chưa kết thúc việc hòa trộn (MERGE_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17284,104 +17900,139 @@
 "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại)."
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "Bạn không thể kết hợp --squash với --no-ff."
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "Bạn không thể kết hợp --squash với --commit."
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Không chỉ ra lần chuyển giao và merge.defaultToUpstream chưa được đặt."
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "Squash commit vào một head trống rỗng vẫn chưa được hỗ trợ"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Chuyển giao không-chuyển-tiếp-nhanh không hợp lý ở trong một head trống rỗng"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - không phải là thứ gì đó mà chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 "Không thể hòa trộn một cách đúng đắn một lần chuyển giao vào một head rỗng"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "từ chối hòa trộn lịch sử không liên quan"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "Đã cập nhật rồi."
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Đang cập nhật %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Đang thử hòa trộn kiểu “trivial in-index”…\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "Không.\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "Đã cập nhật rồi. Yeeah!"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "Thực hiện lệnh chuyển-tiếp-nhanh là không thể được, đang bỏ qua."
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Đang tua lại cây thành thời xa xưa…\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Đang thử chiến lược hòa trộn %s…\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Không có chiến lược hòa trộn nào được nắm giữ (handle) sự hòa trộn.\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Hòa trộn với chiến lược %s gặp lỗi.\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "Sử dụng %s để chuẩn bị giải quyết bằng tay.\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Hòa trộn tự động đã trở nên tốt; bị dừng trước khi việc chuyển giao được yêu "
 "cầu\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "cảnh báo: đầu vào thẻ không qua kiểm tra fsck: %s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "lỗi: đầu vào thẻ không vượt qua fsck: %s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) không bao giờ nên kích hoạt cuộc gọi ngược này"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "không thể đọc đối tượng được đánh thẻ %s"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "đối tượng %s được đánh thẻ là %s, không phải là kiểu %s"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr ""
+"thẻ trên stdin đã không vượt qua kiểm tra fsck nghiêm ngặt của chúng tôi"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr ""
+"thẻ trên đầu vào tiêu chuẩn không chỉ đến một lần chuyển giao hợp lệ nào cả"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "không thể ghi vào tập tin lưu thẻ"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17398,19 +18049,35 @@
 msgid "allow creation of more than one tree"
 msgstr "cho phép tạo nhiều hơn một cây"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<các-tùy-chọn>] (write|verify|expire|repack --batch-"
-"size=<cỡ>)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<các tùy chọn>] write [--preferred-pack=<cỡ>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<các tùy chọn>] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<các tùy chọn>] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<các-tùy-chọn>] repack [--batch-size=<cỡ>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr "thư mục đối tượng có chứa một bộ các tập tin gói và cặp pack-index"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "preferred-pack"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "gói được sử dụng khi tính toán một \"multi-pack bitmap\""
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
@@ -17418,15 +18085,7 @@
 "trong suốt quá trình đóng gói lại, gom các tập tin gói có kích cỡ nhỏ hơn "
 "vào một bó cái mà lớn hơn kích thước này"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "có quá nhiều đối số"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "tùy chọn --batch-size chỉ cho lệnh con “repack”"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "không hiểu câu lệnh con: %s"
@@ -17523,7 +18182,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "Đổi tên %s thành %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "gặp lỗi khi đổi tên “%s”"
@@ -17715,7 +18374,7 @@
 msgid "the note contents have been left in %s"
 msgstr "nội dung ghi chú còn lại %s"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "không thể mở hay đọc “%s”"
@@ -17758,8 +18417,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "quá nhiều đối số"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "có quá nhiều đối số"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -17818,7 +18478,7 @@
 msgstr "tải cấu hình chép lại cho <lệnh> (ngầm định là --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
+msgid "too few arguments"
 msgstr "quá ít đối số"
 
 #: builtin/notes.c:538
@@ -17949,7 +18609,7 @@
 "chuyển giao kết quả bằng “git notes merge --commit”, hoặc bãi bỏ việc hòa "
 "trộn bằng “git notes merge --abort”.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Gặp lỗi khi phân giải “%s” như là một tham chiếu hợp lệ."
@@ -17967,7 +18627,7 @@
 msgid "read object names from the standard input"
 msgstr "đọc tên đối tượng từ thiết bị nhập chuẩn"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "không gỡ bỏ, chỉ hiển thị"
 
@@ -17983,7 +18643,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "dùng “notes” từ <notes-ref>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "không hiểu câu lệnh con: %s"
@@ -18002,103 +18662,117 @@
 "git pack-objects [các tùy chọn…] <base-name> [< <danh-sách-ref> | < <danh-"
 "sách-đối-tượng>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object: không thể phân bổ %s, cần tại vị trí bù %<PRIuMAX> trong "
+"gói %s"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "CRC của đối tượng gói sai với %s"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "đối tượng đã đóng gói sai hỏng cho %s"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "dò thấy delta đệ quy cho đối tượng %s"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "đã sắp xếp %u đối tượng, cần %<PRIu32>"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "cần đối tượng tại khoảng bù %<PRIuMAX> trong gói: %s"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "tắt ghi bitmap, các gói bị chia nhỏ bởi vì pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "Đang ghi lại các đối tượng"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "gặp lỗi khi lấy thông tin thống kê về %s"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "đã ghi %<PRIu32> đối tượng trong khi cần %<PRIu32>"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "tắt ghi bitmap, như vậy một số đối tượng sẽ không được đóng gói"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "khoảng bù cơ sở cho delta bị tràn trong gói cho %s"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "khoảng bù cơ sở cho delta nằm ngoài phạm cho %s"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "Đang đếm các đối tượng"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "không thể phân tích phần đầu đối tượng của “%s”"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "không thể đọc đối tượng %s"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "đối tượng %s không nhất quán về chiều dài đối tượng (%<PRIuMAX> so với "
 "%<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "suboptimal pack - hết bộ nhớ"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Nén delta dùng tới %d tuyến trình"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "không thể đóng gói các đối tượng tiếp cận được từ thẻ “%s”"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "Đang nén các đối tượng"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "mâu thuẫn với số lượng delta"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18107,7 +18781,7 @@
 "giá trị của uploadpack.blobpackfileuri phải có dạng “<object-hash> <pack-"
 "hash> <uri>” (nhận “%s”)"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -18115,7 +18789,17 @@
 "đối tượng đã được cấu hình trong một uploadpack.blobpackfileuri khác (đã "
 "nhận “%s”)"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "không thể lấy kiểu của đối tượng “%s” trong gói “%s”"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "không thể tìm thấy gói “%s”"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18124,7 +18808,7 @@
 "cần ID đối tượng cạnh, nhận được rác:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18133,236 +18817,248 @@
 "cần ID đối tượng, nhận được rác:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "giá trị cho --missing không hợp lệ"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "không thể mở mục lục của gói"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "đối tượng mất tại %s không thể đã kiểm tra"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "không thể buộc mất đối tượng"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "không phải một rev “%s”"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "điểm xem xét sai “%s”"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "không thể thêm các đối tượng mới dùng"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "phiên bản mục lục không được hỗ trợ %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "phiên bản mục lục sai “%s”"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<phiên bản>[,offset]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr "ghi tập tin bảng mục lục gói (pack) ở phiên bản định dạng idx đã cho"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "kcíh thước tối đa cho tập tin gói được tạo"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "bỏ qua các đối tượng vay mượn từ kho đối tượng thay thế"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "bỏ qua các đối tượng đóng gói"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "giới hạn cửa sổ đóng gói theo đối tượng"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr "giới hạn cửa sổ đóng gói theo bộ nhớ cộng thêm với giới hạn đối tượng"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "độ dài tối đa của chuỗi móc xích “delta” được phép trong gói kết quả"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "dùng lại các delta sẵn có"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "dùng lại các đối tượng sẵn có"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "dùng các đối tượng OFS_DELTA"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr "sử dụng các tuyến trình khi tìm kiếm cho các mẫu khớp delta tốt nhất"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "không thể tạo kết xuất gói trống rỗng"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "đọc tham số “revision” từ thiết bị nhập chuẩn"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "giới hạn các đối tượng thành những cái mà chúng vẫn chưa được đóng gói"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "bao gồm các đối tượng có thể đọc được từ bất kỳ tham chiếu nào"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "bao gồm các đối tượng được tham chiếu bởi các mục reflog"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "bao gồm các đối tượng được tham chiếu bởi mục lục"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "đọc các gói từ đầu vào tiêu chuẩn"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "xuất gói ra đầu ra tiêu chuẩn"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "bao gồm các đối tượng tham chiếu đến các đối tượng được đóng gói"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "giữ lại các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "pack mất các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 "xả nén (gỡ khỏi gói) các đối tượng không thể đọc được mới hơn <thời-gian>"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "sử dụng thuật toán “sparse reachability”"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "tạo gói nhẹ"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "tạo gói để phù hợp cho lấy về nông (shallow)"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "bỏ qua các gói mà nó có tập tin .keep đi kèm"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "bỏ qua gói này"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "mức nén gói"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "không ẩn các lần chuyển giao bởi “grafts”"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "dùng mục lục ánh xạ nếu có thể được để nâng cao tốc độ đếm đối tượng"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "ghi một mục lục ánh xạ cùng với mục lục gói"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "ghi mục lục ánh xạ nếu được"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "xử lý cho thiếu đối tượng"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "không thể đóng gói các đối tượng trong các tập tin gói hứa hẹn"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "tôn trọng island trong suốt quá trình nén “delta”"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "giao thức"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "loại trừ bất kỳ cấu hình uploadpack.blobpackfileuri với giao thức này"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "mức sau xích delta %d là quá sâu, buộc dùng %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit là quá cao, ép dùng %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size không thể được sử dụng để xây dựng một gói để vận chuyển"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "giới hạn kích thước tối thiểu của gói là 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin không thể được dùng để xây dựng gói đánh mục lục được"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable và --unpack-unreachable xung khắc nhau"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "không thể dùng tùy chọn --filter mà không có --stdout"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "không thể dùng tùy chọn --filter với --stdin-packs"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "không thể dùng danh sách rev bên trong với --stdin-packs"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "Đánh số các đối tượng"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18371,6 +19067,20 @@
 "Tổng %<PRIu32> (delta %<PRIu32>), dùng lại %<PRIu32> (delta %<PRIu32>), pack-"
 "reused %<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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' được đề cử để loại bỏ.\n"
+"Nếu bạn vẫn sử dụng lệnh này, vui lòng bổ sung\n"
+"thêm một tùy chọn, '--i-still-use-this', trên dòng lệnh\n"
+"và cho chúng tôi biết bạn vẫn sử dụng nó bằng cách gửi e-mail\n"
+"đến <git@vger.kernel.org>.  Cảm ơn.\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<các tùy chọn>]"
@@ -18428,11 +19138,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "các thay đổi hợp nhất bằng cải tổ thay vì hòa trộn"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "cho phép chuyển-tiếp-nhanh"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "tự động stash/stash pop trước và sau"
 
@@ -18453,7 +19163,96 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "Giá trị không hợp lệ cho pull.ff: %s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr ""
+"Ở đây không có ứng cử nào để cải tổ lại trong số các tham chiếu mà bạn vừa "
+"lấy về."
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr ""
+"Ở đây không có ứng cử nào để hòa trộn trong số các tham chiếu mà bạn vừa lấy "
+"về."
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr ""
+"Đại thể điều này có nghĩa là bạn đã cung cấp đặc tả đường dẫn dạng dùng ký "
+"tự\n"
+"đại diện mà nó lại không khớp trên điểm cuối máy phục vụ."
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"Bạn yêu cầu pull từ máy dịch vụ “%s”, nhưng lại chưa chỉ định\n"
+"nhánh nào. Bởi vì đây không phải là máy dịch vụ được cấu hình\n"
+"theo mặc định cho nhánh hiện tại của bạn, bạn phải chỉ định\n"
+"một nhánh trên dòng lệnh."
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "Hiện tại bạn chẳng ở nhánh nào cả."
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "Vui lòng chỉ định nhánh nào bạn muốn cải tổ lại."
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "Vui lòng chỉ định nhánh nào bạn muốn hòa trộn vào."
+
+#: builtin/pull.c:461 builtin/pull.c:476
+msgid "See git-pull(1) for details."
+msgstr "Xem git-pull(1) để biết thêm chi tiết."
+
+#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
+#: builtin/rebase.c:1254
+msgid "<remote>"
+msgstr "<máy chủ>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<nhánh>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "Ở đây không có thông tin theo dõi cho nhánh hiện hành."
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr ""
+"Nếu bạn muốn theo dõi thông tin cho nhánh này bạn có thể thực hiện bằng lệnh:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"Các đặc tả cấu hình của bạn để hòa trộn với tham chiếu “%s”\n"
+"từ máy dịch vụ, nhưng không có nhánh nào như thế được lấy về."
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "không thể truy cập lần chuyển giao “%s”"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "bỏ qua --verify-signatures khi rebase"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18486,110 +19285,21 @@
 "hoặc --ff-only trên dòng lệnh để ghi đè mặc định được cấu hình cho mỗi\n"
 "lần gọi.\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr ""
-"Ở đây không có ứng cử nào để cải tổ lại trong số các tham chiếu mà bạn vừa "
-"lấy về."
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr ""
-"Ở đây không có ứng cử nào để hòa trộn trong số các tham chiếu mà bạn vừa lấy "
-"về."
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr ""
-"Đại thể điều này có nghĩa là bạn đã cung cấp đặc tả đường dẫn dạng dùng ký "
-"tự\n"
-"đại diện mà nó lại không khớp trên điểm cuối máy phục vụ."
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"Bạn yêu cầu pull từ máy dịch vụ “%s”, nhưng lại chưa chỉ định\n"
-"nhánh nào. Bởi vì đây không phải là máy dịch vụ được cấu hình\n"
-"theo mặc định cho nhánh hiện tại của bạn, bạn phải chỉ định\n"
-"một nhánh trên dòng lệnh."
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "Hiện tại bạn chẳng ở nhánh nào cả."
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "Vui lòng chỉ định nhánh nào bạn muốn cải tổ lại."
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "Vui lòng chỉ định nhánh nào bạn muốn hòa trộn vào."
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "Xem git-pull(1) để biết thêm chi tiết."
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<máy chủ>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<nhánh>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "Ở đây không có thông tin theo dõi cho nhánh hiện hành."
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr ""
-"Nếu bạn muốn theo dõi thông tin cho nhánh này bạn có thể thực hiện bằng lệnh:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"Các đặc tả cấu hình của bạn để hòa trộn với tham chiếu “%s”\n"
-"từ máy dịch vụ, nhưng không có nhánh nào như thế được lấy về."
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "không thể truy cập lần chuyển giao “%s”"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "bỏ qua --verify-signatures khi rebase"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Đang cập nhật một nhánh chưa được sinh ra với các thay đổi được thêm vào "
 "bảng mục lục."
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "pull với rebase"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "xin hãy chuyển giao hoặc tạm cất (stash) chúng."
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18600,7 +19310,7 @@
 "đang chuyển-tiếp-nhanh cây làm việc của bạn từ\n"
 "lần chuyển giaot %s."
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18618,15 +19328,15 @@
 "$ git reset --hard\n"
 "để khôi phục lại."
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Không thể hòa trộn nhiều nhánh vào trong một head trống rỗng."
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "Không thể thực hiện lệnh rebase (cải tổ) trên nhiều nhánh."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "không thể cải tổ với các thay đổi mô-đun-con được ghi lại một cách cục bộ"
@@ -18941,45 +19651,49 @@
 msgid "push options must not have new line characters"
 msgstr "các tùy chọn push phải không có ký tự dòng mới"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr ""
 "git range-diff [<các tùy chọn>] <old-base>..<old-tip> <new-base>..<new-tip>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<các tùy chọn>] <old-tip>…<new-tip>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<các tùy chọn>] <base> <old-tip> <new-tip>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "Tỷ lệ phần trăm cái tạo là weighted"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "dùng màu diff đơn giản"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "ghi chú"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "chuyển cho “git log”"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "không có .. trong vùng: “%s”"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "chỉ phát ra kết xuất liên quan đến vùng đầu tiên"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "chỉ phát ra kết xuất liên quan đến vùng thứ hai"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "không phải là vùng chuyển giao: “%s”"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "định dạng đối số đơn phải là một vùng đối xứng"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "cần hai vùng lần chuyển giao"
 
@@ -19086,193 +19800,193 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "danh sách cần làm không dùng được: “%s”"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "không thể tạo %s tạm thời"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "không thể đánh dấu là tương tác"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "không thể tạo danh sách cần làm"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "lần chuyển giao cơ sỏ phải được chỉ định với --upstream hoặc --onto"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<các tùy chọn>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "bỏ qua các lần chuyển giao mà nó bắt đầu trống rỗng"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "chấp nhận chuyển giao mà không ghi chú gì"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "cải tổ các lần chuyển giao hòa trộn"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "giữ các điểm nhánh nguyên bản của các anh em họ"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "di chuyển các lần chuyển giao bắt đầu bằng squash!/fixup!"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "ký các lần chuyển giao"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "hiển thị một diffstat của những thay đổi thượng nguồn"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "tiếp tục cải tổ"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "bỏ qua lần chuyển giao"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "sửa danh sách cần làm"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "hiển thị miếng vá hiện hành"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "rút ngắn mã chuyển giao trong danh sách cần làm"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "khai triển mã chuyển giao trong danh sách cần làm"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "kiểm tra danh sách cần làm"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "sắp xếp lại các dòng fixup/squash"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "chèn các lệnh thực thi trong danh sách cần làm"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "lên trên"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "điểm-xét-duyệt-hạn-chế"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "điểm xét duyệt hạn chế"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-lên-trên"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "squash lên trên"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "lần chuyển giao thượng nguồn"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "tên-đầu"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "tên đầu"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "chiến lược cải tổ"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "tùy-chọn-chiến-lược"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "các tùy chọn chiến lược"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "chuyển-đến"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "nhánh hay lần chuyển giao lần lấy ra"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "tên lên trên"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "lệnh"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "lệnh muốn chạy"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "lập lịch lại một cách tự động bất kỳ “exec“ bị lỗi"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "--[no-]rebase-cousins không có tác dụng khi không có --rebase-merges"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s cần một ứng dụng hòa trộn chạy phía sau"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "không thể đặt lấy “onto”: “%s”"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head không hợp lệ: “%s”"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "đang bỏ qua allow_rerere_autoupdate không hợp lệ: “%s”"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19287,7 +20001,7 @@
 "Để bãi bỏ và quay trở lại trạng thái trước \"git rebase\", chạy \"git rebase "
 "--abort\"."
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19306,7 +20020,7 @@
 "\n"
 "Kết quả là git không thể cải tổ lại chúng."
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19315,7 +20029,7 @@
 "kiểu rỗng không được nhận dạng “%s”; giá trị hợp lệ là \"drop\", \"keep\", "
 "và \"ask\"."
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19332,7 +20046,7 @@
 "    git rebase “<nhánh>”\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19346,196 +20060,188 @@
 "    git branch --set-upstream-to=%s/<nhánh> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "các lệnh thực thi không thể chứa các ký tự dòng mới"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "lệnh thực thi trống rỗng"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "cải tổ vào nhánh đã cho thay cho thượng nguồn"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr ""
 "sử dụng các cơ sở hòa trộn của thượng nguồn và nhánh như là cơ sở hiện tại"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "cho phép móc (hook) pre-rebase được chạy"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "hãy im lặng. ý là --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "đừng hiển thị diffstat của những thay đổi thượng nguồn"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "thêm dòng Signed-off-by vào cuối cho từng lần chuyển giao"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "làm ngày tháng chuyển giao khớp với ngày của tác giả"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "bỏ qua ngày tác giả và sử dụng ngày tháng hiện tại"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "đồng nghĩa với --reset-author-date"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "chuyển cho “git apply”"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 "cherry-pick tất cả các lần chuyển giao, ngay cả khi không có thay đổi gì"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "tiếp tục"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "bỏ qua miếng vá hiện hành và tiếp tục"
 
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "bãi bỏ và lấy ra nhánh nguyên thủy"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "bãi bỏ nhưng vẫn vẫn giữ HEAD chỉ đến nó"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "sửa danh sách cần làm trong quá trình “rebase” (cải tổ) tương tác"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "hiển thị miếng vá đã được áp dụng hay hòa trộn"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "dùng chiến lược áp dụng để cải tổ"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "dùng chiến lược hòa trộn để cải tổ"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "để người dùng sửa danh sách các lần chuyển giao muốn cải tổ"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(ĐÃ LẠC HẬU) hay thử tạo lại các hòa trộn thay vì bỏ qua chúng"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "xử lý các lần chuyển giao mà nó trở thành trống rỗng như thế nào"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "di chuyển các lần chuyển giao mà bắt đầu bằng squash!/fixup! dưới -i"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "thêm các dòng thực thi sau từng lần chuyển giao của danh sách sửa được"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "chấp nhận cải tổ các chuyển giao mà không ghi chú gì"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "cố thử cải tổ các hòa trộn thay vì bỏ qua chúng"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "dùng “merge-base --fork-point” để định nghĩa lại thượng nguồn"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "dùng chiến lược hòa trộn đã cho"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "tùy chọn"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "chuyển thao số đến chiến lược hòa trộn"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "cải tổ tất các các lần chuyển giao cho đến root"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 "áp dụng mọi thay đổi, ngay cả khi những thứ đó đã sẵn có ở thượng nguồn"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"việc hỗ trợ rebase.useBuiltin đã bị xóa!\n"
-"Xem mục tin của nó trong “ git help config” để biết chi tiết."
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 "Hình như đang trong quá trình thực hiện lệnh “git-am”. Không thể rebase."
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr ""
 "git rebase --preserve-merges đã lạc hậu. Hãy dùng --rebase-merges để thay "
 "thế."
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "không thể kết hợp “--keep-base” với “--onto”"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "không thể kết hợp “--keep-base” với “--root”"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "không thể kết hợp “--root” với “--fork-point”"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "Không có tiến trình rebase nào phải không?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Hành động “--edit-todo” chỉ có thể dùng trong quá trình “rebase” (sửa lịch "
 "sử) tương tác."
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "Không thể đọc HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19543,16 +20249,16 @@
 "Bạn phải sửa tất cả các lần hòa trộn xung đột và sau\n"
 "đó đánh dấu chúng là cần xử lý sử dụng lệnh git add"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "không thể loại bỏ các thay đổi cây-làm-việc"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "không thể quay trở lại %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19573,132 +20279,132 @@
 "và chạy TÔI lần nữa. TÔI dừng lại trong trường hợp bạn vẫn\n"
 "có một số thứ quý giá ở đây.\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "tùy chọn “%c” cần một giá trị bằng số"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Không hiểu chế độ: %s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy cần --merge hay --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "không thể tổ hợp các tùy chọn áp dụng với các tùy chọn hòa trộn"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Không hiểu ứng dụng chạy phía sau lệnh cải tổ: %s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec cần --exec hay --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "không thể kết hợp “--preserve-merges” với “--rebase-merges”"
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr "không thể kết hợp “--preserve-merges” với “--reschedule-failed-exec”"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "thượng nguồn không hợp lệ “%s”"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "Không thể tạo lần chuyển giao gốc mới"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "“%s”: cần chính xác một cơ sở hòa trộn với nhánh"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "“%s”: cần chính xác một cơ sở hòa trộn"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Không chỉ đến một lần chuyển giao không hợp lệ “%s”"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "nghiêm trọng: không có nhánh/lần chuyển giao “%s” như thế"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "Không có tham chiếu nào như thế: %s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "Không thể phân giải lần chuyển giao HEAD đến một điểm xét duyệt"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "Xin hãy chuyển giao hoặc tạm cất (stash) chúng."
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "không thể chuyển đến %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD đã cập nhật."
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Nhánh hiện tại %s đã được cập nhật rồi.\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD hiện đã được cập nhật rồi, bị ép buộc rebase."
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Nhánh hiện tại %s đã được cập nhật rồi, lệnh rebase ép buộc.\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Móc (hook) pre-rebase từ chối rebase."
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Thay đổi thành %s:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Thay đổi từ %s thành %s:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Trước tiên, di chuyển head để xem lại các công việc trên đỉnh của nó…\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "Không thể tách rời HEAD"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Chuyển-tiếp-nhanh %s đến %s.\n"
@@ -19758,11 +20464,11 @@
 "\n"
 "Để chấm dứt lời nhắn này, bạn hãy đặt nó thành “refuse”."
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "im lặng"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "Bạn phải chỉ định thư mục."
 
@@ -19793,36 +20499,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "“%s” không phải là dấu thời gian hợp lệ"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Đánh dấu các đối tượng tiếp cận được…"
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s chẳng chỉ đến đâu cả!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "chưa chỉ ra reflog để xóa"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "không phải một reflog: %s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "không reflog cho “%s”"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "định dạng tham chiếu không hợp lệ: %s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -19997,7 +20703,7 @@
 "\t%s:%d\n"
 "bây giờ tên trên máy chủ không tồn tại “%s”"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Không có máy chủ nào như vậy: “%s”"
@@ -20330,11 +21036,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "Sẽ không xóa những địa chỉ URL không-push"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<các tùy chọn>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20342,120 +21048,143 @@
 "Gia tăng repack là không tương thích với chỉ mục bitmap. Dùng\n"
 "--no-write-bitmap-index hay tắt cấu hình pack.writebitmaps."
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "không thể lấy thông tin thống kê pack-objects để mà đóng gói lại các đối "
 "tượng hứa hẹn"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Đang chỉ cần các dòng ID đối tượng dạng thập lục phân đầy dủ từ pack-"
 "objects."
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "không thể hoàn tất pack-objects để đóng gói các đối tượng hứa hẹn"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "không thể mở mục lục cho “%s”"
+
+#: builtin/repack.c:368
+#, c-format
+msgid "pack %s too large to consider in geometric progression"
+msgstr "gói %s là quá lớn để được xem là trong tiến trình hình học"
+
+#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "gói %s là quá lớn để được cuộn lại"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "đóng gói mọi thứ trong một gói đơn"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "giống với -a, và chỉnh sửa các đối tượng không đọc được thiếu sót"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "xóa bỏ các gói dư thừa, và chạy git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "chuyển --no-reuse-delta cho git-pack-objects"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "chuyển --no-reuse-object cho git-pack-objects"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "không chạy git-update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "chuyển --local cho git-pack-objects"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "ghi mục lục ánh xạ"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "chuyển --delta-islands cho git-pack-objects"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "ngày ước tính"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "với -A, các đối tượng cũ hơn khoảng thời gian này thì không bị mất"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "với -a, đóng gói lại các đối tượng không thể đọc được"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "kích thước cửa sổ được dùng cho nén “delta”"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "giống như trên, nhưng giới hạn kích thước bộ nhớ hay vì số lượng"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "giới hạn độ sâu tối đa của “delta”"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "giới hạn số lượng tối đa tuyến trình"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "kích thước tối đa cho từng tập tin gói"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "đóng gói lại các đối tượng trong các gói đã đánh dấu bằng .keep"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "đừng đóng gói lại gói này"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "tìm một tiến trình hình học với hệ số <N>"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "không thể xóa các gói trong một kho đối_tượng_vĩ_đại"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable và -A xung khắc nhau"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric là xung khắc với tùy chọn -A, -a"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "Không có gì mới để mà đóng gói."
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "thiếu tập tin cần thiết: %s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "không thể bỏ liên kết: %s"
@@ -20789,8 +21518,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Không thể thực hiện một %s reset ở giữa của quá trình hòa trộn."
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "làm việc ở chế độ im lặng, chỉ hiển thị khi có lỗi"
 
@@ -20875,19 +21604,19 @@
 msgid "Could not write new index file."
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới."
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "không thể tổ hợp --exclude-promisor-objects và --missing"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "lọc đối tượng yêu cầu --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list không hỗ trợ hiển thị các ghi chú"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "được đánh dấu đếm là xung khắc với --objects"
 
@@ -20999,19 +21728,19 @@
 msgid "keep redundant, empty commits"
 msgstr "giữ lại các lần chuyển giao dư thừa, rỗng"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "hoàn nguyên gặp lỗi"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "cherry-pick gặp lỗi"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<các tùy chọn>] [--] <tập-tin>…"
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -21022,7 +21751,7 @@
 "các tập tin sau đây có khác biệt nội dung đã đưa lên bệ phóng\n"
 "từ cả tập tin và cả HEAD:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -21030,12 +21759,12 @@
 "\n"
 "(dùng -f để buộc gỡ bỏ)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "các tập tin sau đây có thay đổi trạng thái trong bảng mục lục:"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -21043,46 +21772,46 @@
 "\n"
 "(dùng tùy chọn --cached để giữ tập tin, hoặc -f để ép buộc gỡ bỏ)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "những tập tin sau đây có những thay đổi nội bộ:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "không liệt kê các tập tin đã gỡ bỏ"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "chỉ gỡ bỏ từ mục lục"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "ghi đè lên kiểm tra cập nhật"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "cho phép gỡ bỏ đệ qui"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "thoát ra với trạng thái khác không thậm chí nếu không có gì khớp"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "Không đưa ra đặc tả đường dẫn. Tôi nên loại bỏ các tập tin nào?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "hãy đưa các thay đổi của bạn vào .gitmodules hay tạm cất chúng đi để xử lý"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "không thể gỡ bỏ “%s” một cách đệ qui mà không có tùy chọn -r"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: không thể gỡ bỏ %s"
@@ -21123,53 +21852,53 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<các tùy chọn>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr ""
 "việc dùng nhiều tùy chọn --group với đầu ra tiêu chuẩn là không được hỗ trợ"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "việc dùng --group=trailer với đầu ra tiêu chuẩn là không được hỗ trợ"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "không nhận ra kiểu nhóm: %s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "Nhóm theo người chuyển giao thay vì tác giả"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "nhóm theo người chuyển giao thay vì tác giả"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "sắp xếp kết xuất tuân theo số lượng chuyển giao trên mỗi tác giả"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "Chặn mọi mô tả lần chuyển giao, chỉ đưa ra số lượng lần chuyển giao"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "chặn mọi mô tả lần chuyển giao, chỉ đưa ra số lượng lần chuyển giao"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
-msgstr "Hiển thị thư điện tử cho từng tác giả"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
+msgstr "hiển thị thư điện tử cho từng tác giả"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
-msgstr "Ngắt dòng khi quá dài"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
+msgstr "ngắt dòng khi quá dài"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "trường"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
-msgstr "Nhóm theo trường"
+#: builtin/shortlog.c:363
+msgid "group by field"
+msgstr "nhóm theo trường"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "quá nhiều tham số đưa ra ngoài kho chứa"
 
@@ -21362,104 +22091,112 @@
 "hiển thị các tham chiếu từ đầu vào tiêu chuẩn (stdin) cái mà không ở kho nội "
 "bộ"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <các-tùy-chọn>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "không thể phân tích cú pháp cây làm việc này (tập tin sparse-checkout có lẽ "
 "không tồn tại)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "gặp lỗi khi tạo thư mục cho tập tin sparse-checkout"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr "không thể nâng cấp định dạng kho lưu trữ để kích hoạt worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "gặp lỗi khi đặt cài đặt extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "khởi tạo sparse-checkout trong chế độ nón"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "bật tắt việc sử dụng một \"sparse index\""
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "gặp lỗi khi sửa cấu hình \"sparse-index\""
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "gặp lỗi khi mở “%s”"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "không thể thường hóa đường dẫn “%s”"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <các mẫu>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "không thể bỏ trích dẫn chuỗi kiểu C “%s”"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "không thể tải các mẫu sparse-checkout"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "đọc các mẫu từ đầu vào tiêu chuẩn"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "gặp lỗi khi đọc lại thư mục làm việc"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<các tùy chọn>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<các tùy chọn>] <stash>"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <tên-nhánh> [<stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21471,7 +22208,7 @@
 "          [--pathspec-from-file=<tập_tin> [--pathspec-file-nul]]\n"
 "          [--] [<đặc/tả/đường/dẫn>…]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21479,19 +22216,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<ghi chú>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <ghi chú>] [-q|--quiet] <commit>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21501,174 +22238,200 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <lời nhắn>]\n"
 "          [--] [<đặc/tả/đường/dẫn>…]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "“%s” không phải là lần chuyển giao kiểu-stash (cất đi)"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "Chỉ ra quá nhiều điểm xét duyệt: %s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "Không tìm thấy các mục tạm cất (stash) nào."
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "“%s” không phải một tham chiếu hợp lệ"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr ""
-"git stash clear với các tham số là chưa được thực hiện (không nhận đối số)"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
+msgstr "git stash clear với các tham số là chưa được thực hiện"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"CẢNH BÁO: Tệp chưa được theo dõi theo cách của tệp được theo dõi!  Đổi tên\n"
+"            %s -> %s\n"
+"         để nhường chỗ.\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "không thể áp dụng một stash ở giữa của quá trình hòa trộn"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "không thể tạo diff %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "xung đột trong bảng mục lục. Hãy thử mà không dùng tùy chọn --index."
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "không thể ghi lại cây chỉ mục"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "không thể phục hồi các tập tin chưa theo dõi từ mục cất đi (stash)"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Đang hòa trộn %s với %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "Bảng mục lục đã không được bỏ stash."
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "gặp lỗi đọc bảng mục lục"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Đã xóa %s (%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Không thể xóa bỏ mục stash"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "”%s” không phải tham chiếu đến stash"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "Các mục tạm cất (stash) được giữ trong trường hợp bạn lại cần nó."
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "Chưa chỉ ra tên của nhánh"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "gặp lỗi khi phân tích cây"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "gặp lỗi khi tháo dỡ cây"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "bao gồm các tập tin không được theo dõi trong stash"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "chỉ hiển thị các tập tin không được theo dõi trong stash"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Không thể cập nhật %s với %s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "phần chú thích cho stash"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" cần một đối số <lần chuyển giao>"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "Chưa có thay đổi nào được chọn"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "Bạn chưa còn có lần chuyển giao khởi tạo"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "Không thể ghi lại trạng thái bảng mục lục hiện hành"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "Không thể ghi lại các tập tin chưa theo dõi"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "Không thể ghi lại trạng thái cây-làm-việc hiện hành"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "Không thể ghi lại trạng thái cây làm việc hiện hành"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Không thể dùng --patch và --include-untracked hay --all cùng một lúc"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "Có lẽ bạn đã quên “git add ” phải không?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "Không có thay đổi nội bộ nào được ghi lại"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "Không thể khởi tạo stash"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "Không thể ghi lại trạng thái hiện hành"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Đã ghi lại thư mục làm việc và trạng thái mục lục %s"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "Không thể gỡ bỏ các thay đổi cây-làm-việc"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "giữ nguyên bảng mục lục"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "cất đi ở chế độ miếng vá"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "chế độ im lặng"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "bao gồm các tập tin không được theo dõi trong stash"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "bao gồm các tập tin bị bỏ qua"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21692,7 +22455,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "treo trước ký tự ghi chú và ký tự khoảng trắng cho từng dòng"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Cần tên tham chiếu dạng đầy đủ, nhưng lại nhận được %s"
@@ -21706,7 +22469,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "không thể cắt bỏ một thành phần ra khỏi “%s” url"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "điểm neo thay thế cho các đường dẫn tương đối"
 
@@ -21714,18 +22477,18 @@
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:472 builtin/submodule--helper.c:629
-#: builtin/submodule--helper.c:652
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Không tìm thấy url cho đường dẫn mô-đun-con “%s” trong .gitmodules"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Đang vào “%s”\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -21734,7 +22497,7 @@
 "run_command trả về trạng thái khác không cho %s\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21745,19 +22508,20 @@
 "con lồng nhau của %s\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "Chặn kết xuất của từng lệnh mô-đun-con"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "chặn kết xuất của từng lệnh mô-đun-con"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
-msgstr "Đệ quy vào trong các mô-đun-con lồng nhau"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
+msgstr "đệ quy vào trong mô-đun-con lồng nhau"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--]  <lệnh>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -21766,164 +22530,160 @@
 "không thể tìm thấy cấu hình “%s”. Coi rằng đây là kho thượng nguồn có quyền "
 "sở hữu chính nó."
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Gặp lỗi khi đăng ký url cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Mô-đun-con “%s” (%s) được đăng ký cho đường dẫn “%s”\n"
 
-#: builtin/submodule--helper.c:680
+#: builtin/submodule--helper.c:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "cảnh báo: chế độ lệnh cập nhật được gợi ý cho mô-đun-con “%s”\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "Gặp lỗi khi đăng ký chế độ cập nhật cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "Chặn kết xuất cho khởi tạo một mô-đun-con"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "chặn kết xuất của khởi tạo một mô-đun-con"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<các tùy chọn>] [</đường/dẫn>]"
 
-#: builtin/submodule--helper.c:787 builtin/submodule--helper.c:922
+#: builtin/submodule--helper.c:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 "không tìm thấy ánh xạ (mapping) mô-đun-con trong .gitmodules cho đường dẫn "
 "“%s”"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "không thể phân giải tham chiếu HEAD bên trong mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "gặp lỗi khi đệ quy vào trong mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "Chặn két xuất tình trạng mô-đun-con"
-
-#: builtin/submodule--helper.c:887
-msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
-"HEAD"
-msgstr ""
-"Dùng lần chuyển giao lưu trong mục lục thay cho cái được lưu trong HEAD mô-"
-"đun-con"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "chặn kết xuất về tình trạng mô-đun-con"
 
 #: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "đệ quy vào trong mô-đun-con lồng nhau"
+msgid ""
+"use commit stored in the index instead of the one stored in the submodule "
+"HEAD"
+msgstr ""
+"dùng lần chuyển giao lưu trong mục lục thay cho cái được lưu trong HEAD mô-"
+"đun-con"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr ""
 "git submodule status [--quiet] [--cached] [--recursive] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name </đường/dẫn>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr ""
 "* %s %s(blob)->%s(\n"
 ")"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(mô-đun-con)->%s(blob)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "không thể băm đối tượng từ “%s”"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "gặp chế độ không như mong chờ %o\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "hùng lần chuyển giao đã lưu trong mục lục thay cho HEAD mô-đun-con"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 "để so sánh lần chuyển giao lưu trong mục lục với cái trong HEAD mô-đun-con"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 "bỏ qua các mô-đun-con với giá trị của “ignore_config” được đặt thành “all”"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "giới hạn kích cỡ tổng hợp"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 "git submodule--helper summary [<các tùy chọn>] [<lần_chuyển_giao>] [--] [</"
 "đường/dẫn>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "không thể lấy về một điểm xem xét cho HEAD"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "Các tùy chọn --cached và --files loại từ lẫn nhau"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Url mô-đun-con đồng bộ hóa cho “%s”\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "gặp lỗi khi đăng ký url cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "gặp lỗi khi lấy máy chủ mặc định cho mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "gặp lỗi khi cập nhật cho mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "Chặn kết xuất cho đồng bộ url mô-đun-con"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "chặn kết xuất của url mô-đun-con đồng bộ"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [</đường/dẫn>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21932,7 +22692,7 @@
 "Cây làm việc mô-đun-con “%s” có chứa thư mục .git (dùng “rm -rf” nếu bạn "
 "thực sự muốn gỡ bỏ nó cùng với toàn bộ lịch sử của chúng)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -21941,45 +22701,45 @@
 "Cây làm việc mô-đun-con “%s” chứa các thay đổi nội bộ; hãy dùng “-f” để loại "
 "bỏ chúng đi"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Đã xóa thư mục “%s”\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Không thể gỡ bỏ cây làm việc mô-đun-con “%s”\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "không thể tạo thư mục mô-đun-con rỗng “%s”"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Mô-đun-con “%s” (%s) được đăng ký cho đường dẫn “%s”\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr "Gỡ bỏ cây làm việc của mô-đun-con ngay cả khi nó có thay đổi nội bộ"
-
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "Bỏ đăng ký tất cả các trong mô-đun-con"
+msgid "remove submodule working trees even if they contain local changes"
+msgstr "gỡ bỏ cây làm việc của mô-đun-con ngay cả khi nó có thay đổi nội bộ"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "bỏ đăng ký tất cả các trong mô-đun-con"
+
+#: builtin/submodule--helper.c:1631
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--]  [</đường/dẫn>…]]"
 
-#: builtin/submodule--helper.c:1644
+#: builtin/submodule--helper.c:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Dùng “--all” nếu bạn thực sự muốn hủy khởi tạo mọi mô-đun-con"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -21994,46 +22754,46 @@
 "bằng\n"
 "“--reference-if-able” thay vì dùng “--reference”."
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "mô-đun-con “%s” không thể thêm thay thế: %s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Giá trị “%s” cho submodule.alternateErrorStrategy không được thừa nhận"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Giá trị “%s” cho submodule.alternateLocation không được thừa nhận"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "nhân bản mô-đun-con mới vào chỗ nào"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "tên của mô-đun-con mới"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "url nơi mà nhân bản mô-đun-con từ đó"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "chiều sâu lịch sử khi tạo bản sao"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "ép buộc tiến trình nhân bản"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "làm đầy đủ dữ liệu cho bản sao vào trong một thư mục trống rỗng"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -22043,105 +22803,105 @@
 "<kho>] [--name <tên>] [--depth <sâu>] [--single-branch] [--url <url>] --path "
 "</đường/dẫn>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "từ chối tạo/dùng “%s” trong một thư mục git của mô đun con"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "việc sao “%s” vào đường dẫn mô-đun-con “%s” gặp lỗi"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "thư mục không trống: “%s”"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "không thể lấy thư mục mô-đun-con cho “%s”"
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Chế độ cập nhật “%s” không hợp lệ cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Chế độ cập nhật “%s” không hợp lệ được cấu hình cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Đường dẫn mô-đun-con “%s” chưa được khởi tạo"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Có lẽ bạn là bạn muốn dùng \"update --init\" phải không?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Bỏ qua các mô-đun-con chưa được hòa trộn %s"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Bỏ qua mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Gặp lỗi khi nhân bản “%s”. Thử lại lịch trình"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Gặp lỗi khi nhân bản “%s” lần thứ hai nên bãi bỏ"
 
-#: builtin/submodule--helper.c:2327 builtin/submodule--helper.c:2573
+#: builtin/submodule--helper.c:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "đường dẫn đến cây làm việc"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "đường dẫn đến cây làm việc, chéo biên giới mô-đun-con lồng nhau"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout hoặc không làm gì cả"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr ""
-"Tạo một bản sao nông được cắt ngắn thành số lượng điểm xét duyệt đã cho"
+"tạo một bản sao nông được cắt ngắn thành số lượng điểm xét duyệt đã cho"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "công việc đồng thời"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "nhân bản lần đầu có nên theo khuyến nghị là nông hay không"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "đừng in tiến trình nhân bản"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
 msgstr ""
 "git submodule--helper update-clone [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:2370
+#: builtin/submodule--helper.c:2371
 msgid "bad value for update parameter"
 msgstr "giá trị cho  tham số cập nhật bị sai"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
@@ -22150,86 +22910,86 @@
 "Nhánh mô-đun-con (%s) được cấu hình kế thừa nhánh từ siêu dự án, nhưng siêu "
 "dự án lại không trên bất kỳ nhánh nào"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "không thể lấy thẻ quản kho cho mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "đệ quy vào trong mô-đun-con"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<các tùy chọn>] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:2636
+#: builtin/submodule--helper.c:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "chọn nếu nó là an toàn để ghi vào tập tin .gitmodules"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "bỏ đặt cấu hình trong tập tin .gitmodules"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <tên> [<giá trị>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <tên>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "hãy đảm bảo rằng tập tin .gitmodules có trong cây làm việc"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "Chặn kết xuất cho cài đặt url của một mô-đun-con"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "chặn kết xuất cho cài đặt url của một mô-đun-con"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] </đường/dẫn> <url_mới>"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "đặt nhánh theo dõi mặc định thành master"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "đặt nhánh theo dõi mặc định"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet](-d|--default)</đường/dẫn>"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <nhánh> </đường/"
 "dẫn>"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "cần --branch hoặc --default"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "Các tùy chọn --branch và --default loại từ lẫn nhau"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s không hỗ trợ --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "“%s” không phải là lệnh con submodule--helper hợp lệ"
@@ -22242,23 +23002,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <tên>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "chặn các thông tin lỗi cho các tham chiếu “không-mềm” (bị tách ra)"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "xóa tham chiếu mềm"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "làm ngắn kết xuất ref (tham chiếu)"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "lý do"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "lý do cập nhật"
 
@@ -22290,17 +23050,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<định_dạng>]  <tên-thẻ>…"
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "không tìm thấy tìm thấy thẻ “%s”."
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Thẻ đã bị xóa “%s” (từng là %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22313,7 +23073,7 @@
 "  %s\n"
 "Những dòng được bắt đầu bằng “%c” sẽ được bỏ qua.\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -22328,15 +23088,11 @@
 "Những dòng được bắt đầu bằng “%c” sẽ được giữ lại; bạn có thể xóa chúng đi "
 "nếu muốn.\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "không thể ký thẻ"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "không thể ghi vào tập tin lưu thẻ"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22349,144 +23105,140 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "kiểu đối tượng sai."
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "không có chú thích gì cho cho thẻ à?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Nội dung ghi chú còn lại %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "chỉ liệt kê tên các thẻ"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "hiển thị <n> dòng cho mỗi ghi chú"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "xóa thẻ"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "thẩm tra thẻ"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "Tùy chọn tạo thẻ"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "để chú giải cho thẻ, cần một lời ghi chú"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "phần chú thích cho thẻ"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "ép buộc sửa thẻ lần commit"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "thẻ chú giải và ký kiểu GPG"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "dùng kháo khác để ký thẻ"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "thay thế nếu thẻ đó đã có trước"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "tạo một reflog"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "Các tùy chọn liệt kê thẻ"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "hiển thị danh sách thẻ trong các cột"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó chứa lần chuyển giao"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "chỉ hiển thị những thẻ mà nó không chứa lần chuyển giao"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "chỉ hiển thị những thẻ mà nó được hòa trộn"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "chỉ hiển thị những thẻ mà nó không được hòa trộn"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "chỉ hiển thị các thẻ của đối tượng"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column và -n xung khắc nhau"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "tùy chọn -n chỉ cho phép dùng trong chế độ liệt kê"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "tùy chọn --contains chỉ cho phép dùng trong chế độ liệt kê"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "tùy chọn --no-contains chỉ cho phép dùng trong chế độ liệt kê"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "tùy chọn --points-at chỉ cho phép dùng trong chế độ liệt kê"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr ""
 "tùy chọn --merged và --no-merged chỉ cho phép dùng trong chế độ liệt kê"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "chỉ có một tùy chọn -F hoặc -m là được phép."
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "quá nhiều đối số"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "“%s” không phải thẻ hợp lệ."
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "thẻ “%s” đã tồn tại rồi"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Đã cập nhật thẻ “%s” (trước là %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Đang giải nén các đối tượng"
 
@@ -22549,147 +23301,147 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<các tùy chọn>] [--] [<tập-tin>…]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr "tiếp tục làm mới ngay cả khi bảng mục lục cần được cập nhật"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "refresh: lờ đi mô-đun-con"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "không bỏ qua các tập tin mới tạo"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "để các tập tin thay thế các thư mục và “vice-versa”"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "thông báo các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "làm tươi mới thậm chí khi bảng mục lục chứa các mục tin chưa được hòa trộn"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "lấy lại thông tin thống kê"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "giống --refresh, nhưng bỏ qua các cài đặt “assume-unchanged”"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<chế_độ>,<đối_tượng>,<đường_dẫn>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "đánh dấu các tập tin là \"không thay đổi\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "xóa bít assumed-unchanged (giả định là không thay đổi)"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "đánh dấu các tập tin là “chỉ-đọc”"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "xóa bít skip-worktree"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "đừng động vào các mục index-only"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "chỉ thêm vào bảng mục lục; không thêm nội dung vào cơ sở dữ liệu đối tượng"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "gỡ bỏ các đường dẫn được đặt tên thậm chí cả khi nó hiện diện trong thư mục "
 "làm việc"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "với tùy chọn --stdin: các dòng đầu vào được chấm dứt bởi ký tự null"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "đọc danh sách đường dẫn cần cập nhật từ đầu vào tiêu chuẩn"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "không thể đọc các mục từ đầu vào tiêu chuẩn vào bảng mục lục"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "phục hồi các trạng thái #2 và #3 cho các đường dẫn được liệt kê"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "chỉ cập nhật các mục tin mà nó khác biệt so với HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "bỏ qua các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "báo cáo các thao tác ra thiết bị xuất chuẩn"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(cho “porcelains”) quên các xung đột chưa được giải quyết đã ghi"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "ghi mục lục ở định dạng này"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "bật/tắt chia cắt bảng mục lục"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "bật/tắt bộ đệm không theo vết"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "kiểm tra xem hệ thống tập tin có hỗ trợ đệm không theo dõi hay không"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "bật bộ đệm không theo vết mà không kiểm tra hệ thống tập tin"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "ghi ra mục lục ngay cả khi không được đánh cờ là có thay đổi"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "bật/tắt theo dõi hệ thống tập tin"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "đánh dấu các tập tin là hợp lệ fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "xóa bít hợp lệ fsmonitor"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -22697,7 +23449,7 @@
 "core.splitIndex được đặt là sai; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn bật chia tách mục lục"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -22705,7 +23457,7 @@
 "core.splitIndex được đặt là đúng; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn tắt chia tách mục lục"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -22713,11 +23465,11 @@
 "core.untrackedCache được đặt là đúng; xóa bỏ hay thay đổi nó, nếu bạn thực "
 "sự muốn tắt bộ đệm chưa theo dõi"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "Nhớ đệm không theo vết bị tắt"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -22725,29 +23477,29 @@
 "core.untrackedCache được đặt là sai; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn bật bộ đệm chưa theo dõi"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Nhớ đệm không theo vết được bật cho “%s”"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor chưa được đặt; đặt nó nếu bạn thực sự muốn bật theo dõi hệ "
 "thống tập tin"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor được bật"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor đã được đặt; bỏ đặt nó nếu bạn thực sự muốn bật theo dõi hệ "
 "thống tập tin"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor bị tắt"
 
@@ -22839,89 +23591,63 @@
 msgid "print tag contents"
 msgstr "hiển thị nội dung của thẻ"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<các tùy chọn>] </đường/dẫn> [<commit-ish>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<các tùy chọn>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<các tùy chọn>] </đường/dẫn>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <worktree> </đường/dẫn/mới>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<các tùy chọn>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<các tùy chọn>] <worktree>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock </đường/dẫn>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "gặp lỗi khi xóa “%s”"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "không phải thư mục hợp lệ"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "tập tin gitdir không tồn tại"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "không thể đọc tập tin gitdir (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "đọc ngắn (cần %<PRIuMAX> byte, đọc %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "tập tin gitdir (thư mục git) không hợp lệ"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "tập tin gitdir chỉ đến vị trí không tồn tại"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Đang xóa %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "báo cáo các cây làm việc đã prune"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "các cây làm việc hết hạn cũ hơn khoảng <thời gian>"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "“%s” đã có từ trước rồi"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "đích cây làm việc không sử dụng được “%s”"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22930,7 +23656,7 @@
 "“%s” bị mất nhưng cây làm việc bị khóa;\n"
 "dùng “%s -f -f” để ghi đè, hoặc “unlock” và “prune” hay “remove” để xóa"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22939,115 +23665,129 @@
 "“%s” bị mất nhưng cây làm việc đã được đăng ký;\n"
 "dùng “%s -f” để ghi đè, hoặc “prune” hay “remove” để xóa"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "không thể tạo thư mục của “%s”"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Đang chuẩn bị cây làm việc (nhánh mới “%s”)"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Đang chuẩn bị cây làm việc (đang cài đặt nhánh “%s”, trước đây tại %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Đang chuẩn bị cây làm việc (đang lấy ra “%s”)"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Đang chuẩn bị cây làm việc (HEAD đã tách rời “%s”)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "lấy ra <nhánh> ngay cả khi nó đã được lấy ra ở cây làm việc khác"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "tạo nhánh mới"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "tạo hay đặt lại một nhánh"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "di chuyển cây làm việc mới"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "giữ cây làm việc mới bị khóa"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "cài đặt chế độ theo dõi (xem git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "có khớp tên tên nhánh mới với một nhánh theo dõi máy chủ"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "Các tùy chọn -b, -B, và --detach loại từ lẫn nhau"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track chỉ có thể được dùng nếu một nhánh mới được tạo"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "hiển thị chú thích và lý do mở rộng, nếu có"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr ""
+"thêm chú thích kiểu 'prunable' cho các cây làm việc hết hạn cũ hơn khoảng "
+"<thời gian>"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose và --porcelain loại từ lẫn nhau"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "lý do khóa"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "%s không phải là cây làm việc"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Cây thư mục làm việc chính không thể khóa hay bỏ khóa được"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "“%s” đã được khóa rồi, lý do: %s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "“%s” đã được khóa rồi"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "“%s” chưa bị khóa"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "cây làm việc có chứa mô-đun-con không thể di chuyển hay xóa bỏ"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr "ép buộc ngay cả khi cây làm việc đang bẩn hay bị khóa"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "“%s” là cây làm việc chính"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "không thể phác họa ra tên đích đến “%s”"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -23056,7 +23796,7 @@
 "không thể di chuyển một cây-làm-việc bị khóa, khóa vì: %s\n"
 "dùng “move -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23064,38 +23804,38 @@
 "không thể di chuyển một cây-làm-việc bị khóa;\n"
 "dùng “move -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "thẩm tra gặp lỗi, không thể di chuyển một cây-làm-việc: %s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "gặp lỗi khi chuyển “%s” sang “%s”"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "gặp lỗi khi chạy “git status” vào “%s”"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "“%s” có chứa các tập tin đã bị sửa chữa hoặc chưa được theo dõi, hãy dùng --"
 "force để xóa nó"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "gặp lỗi khi chạy “git status” trong “%s”, mã %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr "ép buộc di chuyển thậm chí cả khi cây làm việc đang bẩn hay bị khóa"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23104,7 +23844,7 @@
 "không thể xóa bỏ một cây-làm-việc bị khóa, khóa vì: %s\n"
 "dùng “remove -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23112,17 +23852,17 @@
 "không thể xóa bỏ một cây-làm-việc bị khóa;\n"
 "dùng “remove -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "thẩm tra gặp lỗi, không thể gỡ bỏ một cây-làm-việc: %s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "sửa chữa: %s: %s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "lỗi: %s: %s"
@@ -23143,15 +23883,161 @@
 msgid "only useful for debugging"
 msgstr "chỉ hữu ích khi cần gỡ lỗi"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C </đường/dẫn/>] [-c <tên>=<giá trị>]\n"
+"           [--exec-path[=</đường/dẫn/>]] [--html-path] [--man-path] [--info-"
+"path]\n"
+"           [-p | --paginate | -P --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=</đường/dẫn/>] [--work-tree=</đường/dẫn/>] [--"
+"namespace=<tên>]\n"
+"           [--super-prefix=</đường/dẫn/>] [--config-env=<tên>=<envvar>]\n"
+"           <lệnh> [<các tham số>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"“git help -a” và “git help -g” liệt kê các câu lệnh con sẵn có và một số\n"
+"hướng dẫn về khái niệm. Xem “git help <lệnh>” hay “git help <khái-niệm>”\n"
+"để xem các đặc tả cho lệnh hay khái niệm cụ thể.\n"
+"Xem “git help git” để biết tổng quan của hệ thống."
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "chưa chỉ ra thư mục cho --git-dir\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "chưa đưa ra không gian làm việc cho --namespace\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "chưa đưa ra cây làm việc cho --work-tree\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "chưa đưa ra tiền tố cho --super-prefix\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "-c cần một chuỗi cấu hình\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "không đưa ra khóa cấu hình cho --config-env\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "chưa đưa ra thư mục cho -C\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "không hiểu tùy chọn: %s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "trong khi triển khai bí danh “%s”: “%s”"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"bí danh “%s” thay đổi biến môi trường.\n"
+"Bạn có thể sử dụng “!git” trong đặt bí danh để làm việc này"
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "làm trống bí danh cho %s"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "đệ quy các bí danh: %s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "lỗi ghi nghiêm trong trên đầu ra tiêu chuẩn"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "lỗi nghiêm trọng chưa biết khi ghi ra đầu ra tiêu chuẩn"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "gặp lỗi khi đóng đầu ra tiêu chuẩn"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr ""
+"dò tìm thấy các bí danh quẩn tròn: biểu thức của “%s” không có điểm kết:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "không thể xử lý %s như là một phần bổ sung"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"cách dùng: %s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr "gặp lỗi khi khai triển bí danh “%s”; “%s” không phải là lệnh git\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "gặp lỗi khi chạy lệnh “%s”: %s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "tham số cho --packfile phải là một giá trị băm hợp lệ (nhận được “%s”)"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "không phải là kho git"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile cần --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args chỉ được dùng khi có --packfile"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "các tùy chọn được không xử lý"
@@ -23177,136 +24063,112 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "thoát ngay sau khi khởi tạo quảng cáo capabilities"
 
-#: git.c:28
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr "socket/pipe đã đang được sử dụng rồi: '%s'"
+
+#: t/helper/test-simple-ipc.c:264
+#, c-format
+msgid "could not start server on: '%s'"
+msgstr "không thể khởi động máy phục vụ lên: “%s”"
+
+#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
+msgid "could not spawn daemon in the background"
+msgstr "không thể sinh ra daemon trong nền"
+
+#: t/helper/test-simple-ipc.c:356
+msgid "waitpid failed"
+msgstr "waitpid gặp lỗi"
+
+#: t/helper/test-simple-ipc.c:376
+msgid "daemon not online yet"
+msgstr "\"daemon\" vẫn chưa trực tuyến"
+
+#: t/helper/test-simple-ipc.c:406
+msgid "daemon failed to start"
+msgstr "daemon gặp lỗi khi khởi động"
+
+#: t/helper/test-simple-ipc.c:410
+msgid "waitpid is confused"
+msgstr "waitpid là chưa rõ ràng"
+
+#: t/helper/test-simple-ipc.c:541
+msgid "daemon has not shutdown yet"
+msgstr "\"daemon\" vẫn chưa được tắt đi"
+
+#: t/helper/test-simple-ipc.c:682
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active    [<tên>] [<các tùy chọn>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<tên>] [<các tiến trình>]"
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr ""
+"test-helper simple-ipc start-daemon [<tên>] [<các tiến trình>] [<chờ tối đa>]"
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<tên>] [<chờ tối đa>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<tên>] [<thẻ>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<tên>] [<số lượng byte>] [<byte>]"
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
-"git [--version] [--help] [-C </đường/dẫn/>] [-c <tên>=<giá trị>]\n"
-"           [--exec-path[=</đường/dẫn/>]] [--html-path] [--man-path] [--info-"
-"path]\n"
-"           [-p | --paginate | -P --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=</đường/dẫn/>] [--work-tree=</đường/dẫn/>] [--"
-"namespace=<tên>]\n"
-"           <lệnh> [<các tham số>]"
+"test-helper simple-ipc multiple     [<tên>] [<các tiến trình>] [<số lượng "
+"byte>] [<cỡ bó>]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"“git help -a” và “git help -g” liệt kê các câu lệnh con sẵn có và một số\n"
-"hướng dẫn về khái niệm. Xem “git help <lệnh>” hay “git help <khái-niệm>”\n"
-"để xem các đặc tả cho lệnh hay khái niệm cụ thể.\n"
-"Xem “git help git” để biết tổng quan của hệ thống."
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "tên hoặc tên đường dẫn của ổ cắm miền unix"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "chưa chỉ ra thư mục cho --git-dir\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "tên named-pipe"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "chưa đưa ra không gian làm việc cho --namespace\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "số lượng tiến trình trong kho tiến trình máy phục vụ"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "chưa đưa ra cây làm việc cho --work-tree\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "số giây mà dịch vụ chạy nền chờ khi khởi động hoặc dừng"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "chưa đưa ra tiền tố cho --super-prefix\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "số lượng byte"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "-c cần một chuỗi cấu hình\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "số lượng yêu cầu mỗi tiến trình"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "chưa đưa ra thư mục cho -C\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "byte"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "không hiểu tùy chọn: %s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "ký tự ballast"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "trong khi triển khai bí danh “%s”: “%s”"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "thẻ bài"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"bí danh “%s” thay đổi biến môi trường.\n"
-"Bạn có thể sử dụng “!git” trong đặt bí danh để làm việc này"
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "làm trống bí danh cho %s"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "đệ quy các bí danh: %s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "lỗi ghi nghiêm trong trên đầu ra tiêu chuẩn"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "lỗi nghiêm trọng chưa biết khi ghi ra đầu ra tiêu chuẩn"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "gặp lỗi khi đóng đầu ra tiêu chuẩn"
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr ""
-"dò tìm thấy các bí danh quẩn tròn: biểu thức của “%s” không có điểm kết:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "không thể xử lý %s như là một phần bổ sung"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"cách dùng: %s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr "gặp lỗi khi khai triển bí danh “%s”; “%s” không phải là lệnh git\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "gặp lỗi khi chạy lệnh “%s”: %s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "thẻ bài lệnh để gửi lên cho máy phục vụ"
 
 #: http.c:399
 #, c-format
@@ -23348,7 +24210,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Không thể đặt ứng dụng chạy sau SSL cho “%s”: đã đặt rồi"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23501,54 +24363,54 @@
 msgid "no libc information available\n"
 msgstr "không có thông tin về libc\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "các_tham_số"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "lọc đối tượng"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "ngày hết hạn"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "no-op (tương thích ngược)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "chi tiết hơn nữa"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "im lặng hơn nữa"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "sử dụng <n> chữ số để hiển thị tên đối tượng"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "làm thế nào để cắt bỏ khoảng trắng và #ghichú từ mẩu tin nhắn"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "đọc đặc tả đường dẫn từ tập tin"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
 "với --pathspec-from-file, các phần tử đặc tả đường dẫn bị ngăn cách bởi ký "
 "tự NULL"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "khóa"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "tên trường cần sắp xếp"
 
@@ -23556,14 +24418,6 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr "cập nhật bảng mục lục với phân giải xung đột dùng lại nếu được"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "HEAD được tách rời tại "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "HEAD được tách rời từ "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "Thêm nội dung tập tin vào bảng mục lục"
@@ -23908,8 +24762,8 @@
 msgstr "Ghi và thẩm tra các multi-pack-indexes"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "Tạo một đối tượng thẻ"
+msgid "Creates a tag object with extra validation"
+msgstr "Tạo một đối tượng thẻ với kiểm tra mở rộng"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -24217,69 +25071,55 @@
 msgstr "Chỉ định các tập tin không cần theo dõi"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "Ánh xạ tên tác giả/người chuyển giao và/hoặc địa chỉ E-Mail"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Định nghĩa thuộc tính mô-đun-con"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Không gian tên Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Các chương trình hỗ trợ để tương tác với các kho chứa trên máy chủ"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Bố cục kho Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Chỉ định điểm xét duyệt và vùng cho Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Gắn một kho chứa vào trong một cái khác"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "Hướng dẫn cách dùng Git: phần hai"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Hướng dẫn cách dùng Git"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Tổng quan về luồng công việc khuyến nghị nên dùng với Git"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "Đầu vào rev sai: $arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "Chưa chỉ ra tập tin ghi nhật ký"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "không thể đọc $file để thao diễn lại"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? bạn đang nói gì thế?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "bisect chạy gặp lỗi: không đưa ra lệnh."
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "đang chạy lệnh $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24288,11 +25128,11 @@
 "chạy bisect gặp lỗi:\n"
 "mã trả về $res từ lệnh “$command” là < 0 hoặc >= 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "bisect không thể tiếp tục thêm được nữa"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -24301,14 +25141,10 @@
 "chạy bisect gặp lỗi:\n"
 "”bisect-state $state” đã thoát ra với mã lỗi $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "bisect chạy thành công"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "Chúng tôi không bisect."
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -25254,26 +26090,31 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "khoảng bù thời gian nội bộ lớn hơn hoặc bằng 24 giờ\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "lỗi nghiêm trọng: lệnh '%s' chết với mã thoát %d"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "trình soạn thảo thoát không sạch sẽ, bãi bỏ mọi thứ"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "“%s” có chưa một phiên bản trung gian của thư bạn đã soạn.\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "“%s.final” chứa thư điện tử đã soạn thảo.\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases xung khắc với các tùy chọn khác\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -25283,11 +26124,11 @@
 "git-send-email được cấu hình với các tùy chọn sendemail.* - chú ý “e”.\n"
 "Đặt sendemail.forbidSendmailVariables thành false để tắt kiểm tra này.\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "Không thể chạy git format-patch ở ngoài một kho chứa\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
@@ -25295,37 +26136,37 @@
 "“batch-size” và “relogin” phải được chỉ định cùng với nhau (thông qua dòng "
 "lệnh hoặc tùy chọn cấu hình)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Không hiểu trường --suppress-cc: “%s”\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Không hiểu cài đặt --confirm: “%s”\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "cảnh báo: bí danh sendmail với dấu trích dẫn không được hỗ trợ: %s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "cảnh báo: “:include:“ không được hỗ trợ: %s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "cảnh báo: chuyển hướng “/file“ hay “|pipe“ không được hỗ trợ: %s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "cảnh báo: dòng sendmail không nhận ra được: %s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25340,21 +26181,12 @@
 "    * Nói \"./%s\" nếu ý bạn là một tập tin; hoặc\n"
 "    * Đưa ra tùy chọn --format-patch nếu ý bạn là chuẩn bị.\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "Gặp lỗi khi mở thư mục “%s”: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"nghiêm trọng: %s: %s\n"
-"cảnh báo: không có miếng vá nào được gửi đi\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -25364,17 +26196,17 @@
 "Chưa chỉ định các tập tin miếng vá!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Không có dòng chủ đề trong %s?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Gặp lỗi khi mở “%s” để ghi: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25388,27 +26220,27 @@
 "\n"
 "Xóa nội dung phần thân nếu bạn không muốn gửi tóm tắt.\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Gặp lỗi khi mở “%s”: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Gặp lỗi khi mở %s.final: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "Thư tổng thể là trống rỗng, nên bỏ qua nó\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "Bạn có chắc muốn dùng <%s> [y/N]? "
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -25416,11 +26248,11 @@
 "Các trường sau đây là 8bit, nhưng không khai báo một Content-Transfer-"
 "Encoding.\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "Bảng mã 8bit nào tôi nên khai báo [UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -25433,20 +26265,20 @@
 "có chủ đề ở dạng mẫu “*** SUBJECT HERE ***”. Dùng --force nếu bạn thực sự "
 "muốn gửi.\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "Tới người mà thư được gửi (nếu có)?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "nghiêm trọng: bí danh “%s” được khai triển thành chính nó\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr "Message-ID được dùng như là In-Reply-To cho thư đầu tiên (nếu có)? "
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "lỗi: không thể rút trích một địa chỉ hợp lệ từ: %s\n"
@@ -25454,16 +26286,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "Làm gì với địa chỉ này? (thoát[q]|xóa[d]|sửa[e]): "
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "Đường dẫn CA “%s” không tồn tại"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25490,134 +26322,278 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "Gửi thư này chứ? ([y]có|[n]không|[e]sửa|[q]thoát|[a]tất): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "Gửi thư này trả lời yêu cầu"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "Máy phục vụ SMTP chưa được định nghĩa một cách thích hợp."
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "Máy chủ không hỗ trợ STARTTLS! %s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS gặp lỗi! %s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr ""
 "Không thể khởi tạo SMTP một cách đúng đắn. Kiểm tra cấu hình và dùng --smtp-"
 "debug."
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "Gặp lỗi khi gửi %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Thử gửi %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Gửi %s\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "Dry-OK. Nhật ký nói rằng:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK. Nhật ký nói rằng:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "Kết quả: "
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "Kết quả: Tốt\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "không thể mở tập tin “%s”"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Thêm cc: %s từ dòng “%s”\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Đang thêm to: %s từ dòng “%s”\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Thêm cc: %s từ dòng “%s”\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) Thêm cc: %s từ dòng “%s”\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Không thể thực thi “%s”"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Đang thêm %s: %s từ: “%s”\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) gặp lỗi khi đóng đường ống đến “%s”"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "không thể lấy gửi thư dạng 7 bít"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "bảng mã truyền không hợp lệ"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"nghiêm trọng: %s: bị từ chối bởi móc sendemail-validate\n"
+"%s\n"
+"cảnh báo: không có miếng vá nào được gửi đi\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "không thể mở %s: %s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s: miếng vá có chứa dòng dài hơn 998 ký tự"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"nghiêm trọng: %s: %d là dài hơn 998 ký tự\n"
+"cảnh báo: không có miếng vá nào được gửi đi\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "Bỏ qua %s với hậu tố sao lưu dự phòng “%s”.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Bạn có thực sự muốn gửi %s? [y|N](có/KHÔNG): "
 
+#~ msgid "--cached and --3way cannot be used together."
+#~ msgstr "--cached và --3way không thể dùng cùng nhau."
+
+#~ msgid "both"
+#~ msgstr "cả hai"
+
+#~ msgid "one"
+#~ msgstr "một"
+
+#, c-format
+#~ msgid "Already up to date!"
+#~ msgstr "Đã cập nhật rồi!"
+
+#~ msgid "Already up to date. Yeeah!"
+#~ msgstr "Đã cập nhật rồi. Yeeah!"
+
+#~ msgid "--batch-size option is only for 'repack' subcommand"
+#~ msgstr "tùy chọn --batch-size chỉ cho lệnh con “repack”"
+
+#~ msgid "Percentage by which creation is weighted"
+#~ msgstr "Tỷ lệ phần trăm cái tạo là weighted"
+
+#~ msgid ""
+#~ "the rebase.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "việc hỗ trợ rebase.useBuiltin đã bị xóa!\n"
+#~ "Xem mục tin của nó trong “ git help config” để biết chi tiết."
+
+#, perl-format
+#~ msgid "%s: patch contains a line longer than 998 characters"
+#~ msgstr "%s: miếng vá có chứa dòng dài hơn 998 ký tự"
+
+#~ msgid "repository contains replace objects; skipping commit-graph"
+#~ msgstr ""
+#~ "kho lưu trữ chứa các đối tượng thay thế; bỏ qua sơ đồ lần chuyển giao"
+
+#~ msgid "repository contains (deprecated) grafts; skipping commit-graph"
+#~ msgstr ""
+#~ "kho lưu trữ chứa các mối ghép (đã lạc hậu); bỏ qua sơ đồ các lần chuyển "
+#~ "giao"
+
+#~ msgid "repository is shallow; skipping commit-graph"
+#~ msgstr "kho nguồn là nông, nên bỏ qua commit-graph"
+
+#, c-format
+#~ msgid "commit-graph improper chunk offset %08x%08x"
+#~ msgstr "bù mảnh đồ-thị-các-lần-chuyển-giao không đúng chỗ %08x%08x"
+
+#, c-format
+#~ msgid "commit-graph chunk id %08x appears multiple times"
+#~ msgstr "mã mảnh đồ-thị-các-lần-chuyển-giao %08x xuất hiện nhiều lần"
+
+#~ msgid "invalid chunk offset (too large)"
+#~ msgstr "khoảng bù đoạn không hợp lệ (quá lớn)"
+
+#~ msgid "Writing chunks to multi-pack-index"
+#~ msgstr "Đang ghi các khúc vào multi-pack-index"
+
+#~ msgid "rev-list died"
+#~ msgstr "rev-list đã chết"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-write [--no-log] <state> <revision> "
+#~ "<good_term> <bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-write [--no-log] <state> <revision> <lúc_sai> "
+#~ "<lúc_đúng>"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
+#~ "<bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-check-and-set-terms <command> <lúc_sai> "
+#~ "<lúc_đúng>"
+
+#~ msgid "git bisect--helper --bisect-auto-next"
+#~ msgstr "git bisect--helper --bisect-auto-next"
+
+#~ msgid "write out the bisection state in BISECT_LOG"
+#~ msgstr "ghi ra tình trạng di chuyển nửa bước trong BISECT_LOG"
+
+#~ msgid "check and set terms in a bisection state"
+#~ msgstr "kiểm tra và đặt thời điểm trong di chuyển nửa bước"
+
+#~ msgid ""
+#~ "verify the next bisection state then checkout the next bisection commit"
+#~ msgstr ""
+#~ "xác nhận trạng thái phân đôi kế sau đó lấy ra lần chuyển giao phân đôi kế"
+
+#~ msgid "--bisect-write requires either 4 or 5 arguments"
+#~ msgstr "--bisect-write cần 4 hoặc 5 tham số"
+
+#~ msgid "--check-and-set-terms requires 3 arguments"
+#~ msgstr "--check-and-set-terms cần 3 tham số"
+
+#~ msgid "--bisect-auto-next requires 0 arguments"
+#~ msgstr "--bisect-auto-next cần 0 tham số"
+
+#~ msgid "Force progress reporting"
+#~ msgstr "Ép buộc báo cáo diễn biến công việc"
+
+#, c-format
+#~ msgid "Error deleting remote-tracking branch '%s'"
+#~ msgstr "Gặp lỗi khi đang xóa nhánh theo dõi máy chủ “%s”"
+
+#, c-format
+#~ msgid "Error deleting branch '%s'"
+#~ msgstr "Gặp lỗi khi xóa bỏ nhánh “%s”"
+
+#~ msgid "show parse tree for grep expression"
+#~ msgstr "hiển thị cây phân tích cú pháp cho biểu thức “grep” (tìm kiếm)"
+
+#~ msgid "too many parameters"
+#~ msgstr "quá nhiều đối số"
+
+#~ msgid "too few parameters"
+#~ msgstr "quá ít đối số"
+
+#~ msgid "Recurse into nested submodules"
+#~ msgstr "Đệ quy vào trong các mô-đun-con lồng nhau"
+
+#~ msgid "too many params"
+#~ msgstr "quá nhiều đối số"
+
+#, sh-format
+#~ msgid "Bad rev input: $arg"
+#~ msgstr "Đầu vào rev sai: $arg"
+
 #~ msgid "Counting distinct commits in commit graph"
 #~ msgstr "Đang đếm các lần chuyển giao khác nhau trong đồ thị lần chuyển giao"
 
@@ -25656,9 +26632,6 @@
 #~ msgid "git bisect--helper --write-terms <bad_term> <good_term>"
 #~ msgstr "git bisect--helper --write-terms <bad_term> <good_term>"
 
-#~ msgid "git bisect--helper --bisect-clean-state"
-#~ msgstr "git bisect--helper --bisect-clean-state"
-
 #~ msgid "git bisect--helper --bisect-autostart"
 #~ msgstr "git bisect--helper --bisect-autostart"
 
@@ -26129,12 +27102,6 @@
 #~ msgid "Server supports ofs-delta"
 #~ msgstr "Máy chủ hỗ trợ ofs-delta"
 
-#~ msgid "(HEAD detached at %s)"
-#~ msgstr "(HEAD được tách rời tại %s)"
-
-#~ msgid "(HEAD detached from %s)"
-#~ msgstr "(HEAD được tách rời từ %s)"
-
 #~ msgid "Checking out files"
 #~ msgstr "Đang lấy ra các tập tin"
 
@@ -26560,9 +27527,6 @@
 #~ msgid "commit object"
 #~ msgstr "đối tượng lần chuyển giao"
 
-#~ msgid "tree object"
-#~ msgstr "đối tượng cây"
-
 #~ msgid "blob object"
 #~ msgstr "đối tượng blob"
 
@@ -26603,9 +27567,6 @@
 #~ msgid "insanely long object directory %.*s"
 #~ msgstr "thư mục đối tượng dài một cách điên rồ %.*s"
 
-#~ msgid "git merge [<options>] <msg> HEAD <commit>"
-#~ msgstr "git merge [<các-tùy-chọn>] <tin-nhắn> HEAD <commit>"
-
 #~ msgid "tag name too long: %.*s..."
 #~ msgstr "tên thẻ quá dài: %.*s…"
 
@@ -26702,9 +27663,6 @@
 #~ "sai giá trị bằng số của cấu hình “%s” cho “%s” trong %s: đơn vị không hợp "
 #~ "lệ"
 
-#~ msgid "This is the 2nd commit message:"
-#~ msgstr "Đây là chú thích cho lần chuyển giao thứ 2:"
-
 #~ msgid "This is the 3rd commit message:"
 #~ msgstr "Đây là chú thích cho lần chuyển giao thứ 3:"
 
@@ -26741,9 +27699,6 @@
 #~ msgid "This is the ${n}rd commit message:"
 #~ msgstr "Đây là chú thích cho lần chuyển giao thứ ${n}:"
 
-#~ msgid "The 1st commit message will be skipped:"
-#~ msgstr "Chú thích cho lần chuyển giao thứ nhất sẽ bị bỏ qua:"
-
 #~ msgid "The 2nd commit message will be skipped:"
 #~ msgstr "Chú thích cho lần chuyển giao thứ 2 sẽ bị bỏ qua:"
 
@@ -27341,9 +28296,6 @@
 #~ msgid "--detach cannot be used with -b/-B/--orphan"
 #~ msgstr "--detach không thể được sử dụng với tùy chọn -b/-B/--orphan"
 
-#~ msgid "--detach cannot be used with -t"
-#~ msgstr "--detach không thể được sử dụng với tùy chọn -t"
-
 #~ msgid "--orphan and -b|-B are mutually exclusive"
 #~ msgstr "Tùy chọn --orphan và -b|-B loại từ lẫn nhau"
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b30a1e5..7ede055 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -92,6 +92,7 @@
 #   plumbing                         |  管件(Git 底层核心命令的别称)
 #   porcelain                        |  瓷件(Git 上层封装命令的别称)
 #   precious-objects repo            |  珍品仓库
+#   promisor                         |  承诺者
 #   prune                            |  清除
 #   pull                             |  拉,拉取
 #   push                             |  推,推送
@@ -114,7 +115,7 @@
 #   shallow repository               |  浅(克隆)仓库
 #   signed tag                       |  签名标签
 #   smart HTTP protocol              |  智能 HTTP 协议
-#   squash                           |  压缩
+#   squash                           |  挤压
 #   stage                            |  n. 暂存区(即索引); v. 暂存
 #   stash                            |  n. 贮藏区; v. 贮藏
 #   submodule                        |  子模组
@@ -140,8 +141,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-26 21:43+0800\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-06-05 22:10+0800\n"
 "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n"
 "Language-Team: GitHub <https://github.com/jiangxin/git/>\n"
 "Language: zh_CN\n"
@@ -155,9 +156,9 @@
 msgid "Huh (%s)?"
 msgstr "嗯(%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "不能读取索引"
 
@@ -185,7 +186,7 @@
 msgid "could not stage '%s'"
 msgstr "不能暂存 '%s'"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "不能写入索引"
 
@@ -201,7 +202,7 @@
 msgid "note: %s is untracked now.\n"
 msgstr "说明:%s 现已成为未跟踪的。\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -341,12 +342,12 @@
 msgid "unstaged"
 msgstr "未缓存"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "路径"
@@ -853,7 +854,7 @@
 msgid "'git apply' failed"
 msgstr "'git apply' 失败"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -862,37 +863,37 @@
 "\n"
 "使用 \"git config advice.%s false\" 来关闭此消息"
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%s提示:%.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "无法拣选,因为您有未合并的文件。"
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "无法提交,因为您有未合并的文件。"
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "无法合并,因为您有未合并的文件。"
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "无法拉取,因为您有未合并的文件。"
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "无法回退,因为您有未合并的文件。"
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "无法 %s,因为您有未合并的文件。"
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -900,23 +901,36 @@
 "请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记\n"
 "解决方案并提交。"
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "因为存在未解决的冲突而退出。"
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "您尚未结束您的合并(存在 MERGE_HEAD)。"
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "请在合并前先提交您的修改。"
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "因为存在未完成的合并而退出。"
 
-#: advice.c:290
+#: 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 "以下路径规格不匹配任何适合的路径,但它们和当前稀疏检出之外的索引条目匹配:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr "如果您打算更新此类条目,请禁用或修改稀疏规则。"
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -963,82 +977,78 @@
 msgid "unclosed quote"
 msgstr "未关闭的引号"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "未能识别的空白字符选项 '%s'"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "未能识别的空白字符忽略选项 '%s'"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject 和 --3way 不能同时使用。"
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached 和 --3way 不能同时使用。"
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way 在一个仓库之外"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index 在一个仓库之外"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached 在一个仓库之外"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "无法准备时间戳正则表达式 %s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec 返回 %d,输入为:%s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "不能在补丁的第 %d 行找到文件名"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply:错误的 git-diff - 应为 /dev/null,但在第 %2$d 行得到 %1$s"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply:错误的 git-diff - 第 %d 行上新文件名不一致"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply:错误的 git-diff - 第 %d 行上旧文件名不一致"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply:错误的 git-diff - 第 %d 行处应为 /dev/null"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "第 %d 行包含无效文件模式:%s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "不一致的文件头,%d 行和 %d 行"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1049,92 +1059,92 @@
 msgstr[0] "当移除 %d 个前导路径后 git diff 头缺乏文件名信息(第 %d 行)"
 msgstr[1] "当移除 %d 个前导路径后 git diff 头缺乏文件名信息(第 %d 行)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff 的头信息中缺乏文件名信息(第 %d 行)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount:意外的行:%.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "第 %d 行的补丁片段没有头信息:%.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "新文件依赖旧内容"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "删除的文件仍有内容"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "补丁在第 %d 行损坏"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "新文件 %s 依赖旧内容"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "删除的文件 %s 仍有内容"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** 警告:文件 %s 成为空文件但并未删除"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "二进制补丁在第 %d 行损坏:%.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "未能识别的二进制补丁位于第 %d 行"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "补丁文件的第 %d 行只有垃圾数据"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "无法读取符号链接 %s"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "不能打开或读取 %s"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "无效的行首字符:'%c'"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "块 #%d 成功应用于 %d(偏移 %d 行)"
 msgstr[1] "块 #%d 成功应用于 %d(偏移 %d 行)"
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "上下文减少到(%ld/%ld)以在第 %d 行应用补丁片段"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1143,431 +1153,438 @@
 "当查询:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "缺失 '%s' 的二进制补丁数据"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "不能反向应用一个缺少到 '%s' 的反向数据块的二进制补丁"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "不能在 '%s' 上应用没有完整索引行的二进制补丁"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "补丁应用到 '%s'(%s),但是和当前内容不匹配。"
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "补丁应用到空文件 '%s',但其并非空文件"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "无法读取 '%2$s' 必需的目标文件 %1$s"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "二进制补丁未应用到 '%s'"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "到 '%s' 的二进制补丁产生了不正确的结果(应为 %s,却为 %s)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "打补丁失败:%s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "不能检出 %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "无法读取 %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "读取位于符号链接中的 '%s'"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "路径 %s 已经被重命名/删除"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s:不存在于索引中"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s:和索引不匹配"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr "仓库缺乏必要的数据对象以进行三方合并。"
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "仓库缺乏执行三方合并所必需的数据对象。"
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "回落到三方合并...\n"
+msgid "Performing three-way merge...\n"
+msgstr "执行三方合并...\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "无法读取 '%s' 的当前内容"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "无法回落到三方合并...\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "无法执行三方合并...\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "应用补丁到 '%s' 存在冲突。\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "成功应用补丁到 '%s'。\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr "回落到直接应用...\n"
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "移除补丁仍留下了文件内容"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s:错误类型"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s 的类型是 %o,应为 %o"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "无效路径 '%s'"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s:已经存在于索引中"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s:已经存在于工作区中"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "%2$s 的新模式(%1$o)和旧模式(%3$o)不匹配"
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "%2$s 的新模式(%1$o)和 %4$s 的旧模式(%3$o)不匹配"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "受影响的文件 '%s' 位于符号链接中"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s:补丁未应用"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "正在检查补丁 %s..."
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "子模组 %s 的 sha1 信息缺失或无效"
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "%s 的模式变更,但它不在当前 HEAD 中"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 信息缺失或无效(%s)。"
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "不能在临时索引中添加 %s"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "不能把临时索引写入到 %s"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "不能从索引中移除 %s"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "子模组 %s 损坏的补丁"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "不能对新建文件 '%s' 调用 stat"
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "不能为新建文件 %s 创建后端存储"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "无法为 %s 添加缓存条目"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "写入 '%s' 失败"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "关闭文件 '%s'"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "不能写文件 '%s' 权限 %o"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "成功应用补丁 %s。"
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "内部错误"
 
-#: apply.c:4557
+#: apply.c:4559
 #, 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:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "截短 .rej 文件名为 %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "不能打开 %s"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "第 #%d 个片段成功应用。"
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "拒绝第 #%d 个片段。"
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "略过补丁 '%s'。"
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "未能识别的输入"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "无法读取索引文件"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "不能打开补丁 '%s':%s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "抑制下仍有 %d 个空白字符误用"
 msgstr[1] "抑制下仍有 %d 个空白字符误用"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d 行新增了空白字符误用。"
 msgstr[1] "%d 行新增了空白字符误用。"
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "修复空白错误后,应用了 %d 行。"
 msgstr[1] "修复空白错误后,应用了 %d 行。"
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "无法写入新索引文件"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
 msgstr "不要应用与给出路径向匹配的变更"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
 msgstr "应用与给出路径向匹配的变更"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "数字"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "从传统的 diff 路径中移除指定数量的前导斜线"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "忽略补丁中的添加的文件"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "不应用补丁,而是显示输入的差异统计(diffstat)"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "以十进制数显示添加和删除的行数"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "不应用补丁,而是显示输入的概要"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "不应用补丁,而是查看补丁是否可应用"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "确认补丁可以应用到当前索引"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "使用命令 `git add --intent-to-add` 标记新增文件"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "应用补丁而不修改工作区"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "接受修改工作区之外文件的补丁"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "还应用此补丁(与 --stat/--summary/--check 选项同时使用)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "如果一个补丁不能应用则尝试三方合并"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr "尝试三路合并,如果失败则尝试正常补丁模式"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr "创建一个临时索引基于嵌入的索引信息"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "路径以 NUL 字符分隔"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "确保至少匹配 <n> 行上下文"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "动作"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "检查新增和修改的行中间的空白字符滥用"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "查找上下文时忽略空白字符的变更"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "反向应用补丁"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "无需至少一行上下文"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "将拒绝的补丁片段保存在对应的 *.rej 文件中"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
 msgstr "允许重叠的补丁片段"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "冗长输出"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "允许不正确的文件末尾换行符"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
 msgstr "不信任补丁片段的头信息中的行号"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "根目录"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "为所有文件名前添加 <根目录>"
 
@@ -1633,141 +1650,141 @@
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <仓库> [--exec <命令>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "不能读取 %s"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "不能读取 '%s'"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "路径规格 '%s' 未匹配任何文件"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "无此引用:%.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "不是一个有效的对象名:%s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "不是一个树对象:%s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "当前工作目录未被跟踪"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "文件未找到:%s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "不是一个常规文件:%s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "格式"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "归档格式"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "前缀"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "为归档中每个路径名加上前缀"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "文件"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "将未跟踪文件添加到归档"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "归档写入此文件"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "读取工作区中的 .gitattributes"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "在标准错误上报告归档文件"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "设置压缩级别"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "列出支持的归档格式"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "仓库"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "从远程仓库(<仓库>)提取归档文件"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "命令"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "远程 git-upload-archive 命令的路径"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "未知参数 --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "选项 --exec 只能和 --remote 同时使用"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "未知参数 --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "选项 --add-file 和 --remote 不能同时使用"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "未知归档格式 '%s'"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "参数不支持此格式 '%s':-%d"
@@ -1777,12 +1794,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s 不是一个有效的属性名"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "不允许 %s:%s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1864,12 +1881,12 @@
 msgid "a %s revision is needed"
 msgstr "需要一个 %s 版本"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "不能创建文件 '%s'"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "不能读取文件 '%s'"
@@ -1887,7 +1904,7 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
 "没有发现可测试的提交。\n"
 "可能您在运行时使用了错误的路径参数?\n"
@@ -1909,37 +1926,37 @@
 msgstr[0] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
 msgstr[1] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents 和 --reverse 不能混用。"
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "不能将 --contents 和最终的提交对象名共用"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "--reverse 和 --first-parent 共用,需要指定最新的提交"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "版本遍历设置失败"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr "--reverse 和 --first-parent 共用,需要第一祖先链上的提交范围"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "在 %2$s 中无此路径 %1$s"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "不能为路径 %2$s 读取数据对象 %1$s"
@@ -2067,12 +2084,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "无效的分支点:'%s'。"
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' 已经检出到 '%s'"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "工作区 %s 的 HEAD 指向没有被更新"
@@ -2097,8 +2114,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "未能识别的包头:%s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "不能打开 '%s'"
@@ -2141,296 +2158,309 @@
 msgid "pack-objects died"
 msgstr "pack-objects 终止"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list 终止"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "引用 '%s' 被 rev-list 选项排除"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "不支持的归档包版本 %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "不能写入,归档包版本 %d 不支持算法 %s"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "未能识别的参数:%s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "不能创建空的归档包。"
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "不能创建 '%s'"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "index-pack 终止"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "终止块 ID 比预期更早出现"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "不正确的块偏移 %<PRIx64> 和 %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "发现重复的块ID %<PRIx32>"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "最终块有非零 ID %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "无效的颜色值:%.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "无效的哈希版本"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "提交图形文件太小"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "提交图形签名 %X 和签名 %X 不匹配"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "提交图形版本 %X 和版本 %X 不匹配"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "提交图形哈希版本 %X 和版本 %X 不匹配"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "提交图形文件太小,容不下 %u 个块"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "提交图形不正确的块偏移 %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "提交图形块 id %08x 出现了多次"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "提交图形没有基础图形块"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "提交图形链不匹配"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "无效的提交图形链:行 '%s' 不是一个哈希值"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "无法找到所有提交图形文件"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "无效的提交位置。提交图形可能已损坏"
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "无法找到提交 %s"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "提交图需要溢出世代数据,但是没有"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "无法获得对象 %s 类型"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "正在加载提交图中的已知提交"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "正在扩展提交图中的可达提交"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "正在清除提交图中的提交标记"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "正在计算提交图拓扑级别"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "正在计算提交图世代数字"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "计算提交变更路径的布隆过滤器"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "正在收集引用的提交"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, 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:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "添加包 %s 出错"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "为 %s 打开索引出错"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "正在打包对象中查找提交图的提交"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "正在查找提交图中额外的边"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "无法写入正确数量的基础图形 ID"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "不能为 %s 创建先导目录"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "无法创建临时图层"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "无法为 '%s' 调整共享权限"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, 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:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "无法打开提交图形链文件"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "无法重命名基础提交图形文件"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "无法重命名临时提交图形文件"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "正在扫描合并提交"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "正在合并提交图形"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr "正尝试写提交图,但是 'core.commitGraph' 被禁用"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "提交太多不能画图"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "提交图文件的校验码错误,可能已经损坏"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "提交图形的对象 ID 顺序不正确:%s 然后 %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "提交图形有不正确的扇出值:fanout[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "无法从提交图形中解析提交 %s"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "正在校验提交图中的提交"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr "无法从提交图形的对象库中解析提交 %s"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "提交图形中的提交 %s 的根树对象 ID 是 %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "提交 %s 的提交图形父提交列表太长了"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s 的提交图形父提交是 %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "提交 %s 的提交图形父提交列表过早终止"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr "提交图形中提交 %s 的世代号是零,但其它地方非零"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr "提交图形中提交 %s 的世代号非零,但其它地方是零"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "提交图形中的提交 %s 的世代号是 %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "提交图形中的提交 %s 的世代号是 %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr "提交图形中提交 %s 的提交日期是 %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "不能解析 %s"
@@ -2460,27 +2490,27 @@
 "设置 \"git config advice.graftFileDeprecated false\"\n"
 "可关闭本消息"
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "提交 %s 有一个非可信的声称来自 %s 的 GPG 签名。"
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "提交 %s 有一个错误的声称来自 %s 的 GPG 签名。"
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "提交 %s 没有 GPG 签名。"
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "提交 %s 有一个来自 %s 的好的 GPG 签名。\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2494,7 +2524,7 @@
 msgid "memory exhausted"
 msgstr "内存耗尽"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2509,289 +2539,333 @@
 "\t%2$s\n"
 "这可能是因为循环包含。"
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "无法扩展包含路径 '%s'"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "相对路径的配置文件引用必须来自于文件"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "相对路径的配置文件条件引用必须来自于文件"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "无效的配置格式:%s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "配置 '%.*s' 缺少环境变量名称"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "缺少环境变量 '%s' 于配置 '%.*s' "
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "键名没有包含一个小节名称:%s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "键名没有包含变量名:%s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "无效键名:%s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "无效键名(有换行符):%s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "空的配置键名"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "伪配置参数:%s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "%s 中格式错误"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "%s 中错误计数"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "%s 中太多的条目"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "缺失配置键名 %s"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "缺失配置取值 %s"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "数据对象 %2$s 中错误的配置行 %1$d"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "文件 %2$s 中错误的配置行 %1$d"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "标准输入中错误的配置行 %d"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "子模组数据对象 %2$s 中错误的配置行 %1$d"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "命令行 %2$s 中错误的配置行 %1$d"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "在 %2$s 中错误的配置行 %1$d"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "超出范围"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "无效的单位"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "配置变量 '%2$s' 的数字取值 '%1$s' 设置错误:%3$s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "数据对象 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "文件 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "标准输入中配置变量 '%2$s' 错误的取值 '%1$s':%3$s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "子模组数据 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "命令行 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "在 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "'%2$s' 的错误的布尔取值 '%1$s'"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "无法扩展用户目录:'%s'"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%2$s' 的值 '%1$s' 不是一个有效的时间戳"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "缩写长度超出范围:%d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "错误的 zlib 压缩级别 %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar 应该是一个字符"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "无效的对象创建模式:%s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s 的取值格式错误"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s 的取值格式错误:%s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "必须是其中之一:nothing、matching、simple、upstream 或 current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "错误的打包压缩级别 %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "无法从数据对象 '%s' 加载配置"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "引用 '%s' 没有指向一个数据对象"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "不能解析配置对象 '%s'"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "解析 %s 失败"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "无法解析命令行中的配置"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "在读取配置文件时遇到未知错误"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "无效 %s:'%s'"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange 的取值 '%d' 应该介于 0 和 100 之间"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "无法解析命令行配置中的 '%s'"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "在文件 '%2$s' 的第 %3$d 行发现错误的配置变量 '%1$s'"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "无效的小节名称 '%s'"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s 有多个取值"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "写入新的配置文件 %s 失败"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "不能锁定配置文件 %s"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "打开 %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "无效模式:%s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "无效的配置文件 %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "对 %s 调用 fstat 失败"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "不能 mmap '%s'"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "对 %s 调用 chmod 失败"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "不能写入配置文件 %s"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "不能设置 '%s' 为 '%s'"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "不能取消设置 '%s'"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "无效的小节名称:%s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "%s 的取值缺失"
@@ -2852,45 +2926,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "协议错误:意外的 '%s'"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "服务器给出未知的对象格式 '%s'"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "无效的 ls-refs 响应:%s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "在引用列表之后应该有一个 flush 包"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "在引用列表之后应该有响应结束包"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "不支持 '%s' 协议"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "无法为 socket 设置 SO_KEEPALIVE"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "查找 %s ..."
 
-#: connect.c:735
+#: connect.c:761
 #, 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:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -2899,7 +2973,7 @@
 "完成。\n"
 "连接到 %s(端口 %s)... "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -2909,61 +2983,65 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "完成。"
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "无法查找 %s(%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "未知端口 %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "已阻止奇怪的主机名 '%s'"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "已阻止奇怪的端口号 '%s'"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "不能启动代理 %s"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "未指定路径,执行 'git help pull' 查看有效的 url 语法"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "在 git:// 主机和仓库路径中禁止使用换行符"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh 变体 'simple' 不支持 -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh 变体 'simple' 不支持 -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh 变体 'simple' 不支持设置端口"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "已阻止奇怪的路径名 '%s'"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "无法 fork"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "正在检查连通性"
 
@@ -2979,17 +3057,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "关闭 rev-list 的标准输入失败"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "非法的 crlf 动作 %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "%s 中的 CRLF 将被 LF 替换"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -2998,12 +3076,12 @@
 "%s 中的 CRLF 将被 LF 替换。<\n"
 "在工作区中该文件仍保持原有的换行符。"
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "文件 %s 中的 LF 将被 CRLF 替换"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -3012,12 +3090,12 @@
 "%s 中的 LF 将被 CRLF 替换。\n"
 "在工作区中该文件仍保持原有的换行符"
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "如果使用 %2$s 编码,禁止在 '%1$s' 中使用 BOM"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
@@ -3025,12 +3103,12 @@
 msgstr ""
 "文件 '%s' 包含一个字节顺序标记(BOM)。请使用 UTF-%.*s 作为工作区编码。"
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "如果编码为 %2$s,需要在 '%1$s' 中使用 BOM"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -3039,66 +3117,66 @@
 "文件 '%s' 缺失一个字节顺序标记(BOM)。请使用 UTF-%sBE or UTF-%sLE(取决于字"
 "节序)作为工作区编码。"
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "无法对 '%s' 进行从 %s 到 %s 的编码"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "将'%s' 的编码从 %s 到 %s 来回转换不一致"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "不能 fork 以执行外部过滤器 '%s'"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "不能将输入传递给外部过滤器 '%s'"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "外部过滤器 '%s' 失败码 %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "从外部过滤器 '%s' 读取失败"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "外部过滤器 '%s' 失败"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "意外的过滤类型"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "外部过滤器的路径名太长"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr "外部过滤器 '%s' 不再可用,但并非所有路径都已过滤"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false 不是有效的工作区编码"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s:clean 过滤器 '%s' 失败"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s:smudge 过滤器 %s 失败"
@@ -3223,23 +3301,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "已标记 %d 个数据岛,结束。\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "未知的 --diff-merges 取值:%s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base 不适用于范围"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base 仅适用于提交"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "不能解析 HEAD"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "未找到合并基线"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "找到了多条合并基线"
 
@@ -3302,35 +3385,35 @@
 "发现配置变量 'diff.dirstat' 中的错误:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "外部 diff 退出,停止在 %s"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only、--name-status、--check 和 -s 是互斥的"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G、-S 和 --find-object 是互斥的"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow 明确要求只跟一个路径规格"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "无效的 --stat 值:%s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s 期望一个数字值"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3339,200 +3422,200 @@
 "无法解析 --dirstat/-X 选项的参数:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "--diff-filter=%2$s 中未知的变更类 '%1$c'"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "ws-error-highlight=%.*s 之后未知的值"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "不能解析 '%s'"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s 期望 <n>/<m> 格式"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s 期望一个字符,得到 '%s'"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "坏的 --color-moved 参数:%s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws 中的无效模式 '%s' "
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 "diff-algorithm 选项有 \"myers\"、\"minimal\"、\"patience\" 和 \"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s 的参数无效"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "选项 -I 的正则表达式无效:'%s'"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "无法解析 --submodule 选项的参数:'%s'"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "坏的 --word-diff 参数:%s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "差异输出格式化选项"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "生成补丁"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "不显示差异输出"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "生成含 <n> 行上下文的差异"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "生成原始格式的差异"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "和 '-p --raw' 同义"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "和 '-p --stat' 同义"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "机器友好的 --stat"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "只输出 --stat 的最后一行"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<参数1,参数2>..."
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "输出每个子目录相对变更的分布"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "和 --dirstat=cumulative 同义"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "是 --dirstat=files,param1,param2... 的同义词"
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "如果变更中引入冲突定界符或空白错误,给出警告"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "精简摘要,例如创建、重命名和模式变更"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "只显示变更文件的文件名"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "只显示变更文件的文件名和状态"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<宽度>[,<文件名宽度>[,<次数>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "生成差异统计(diffstat)"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<宽度>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "使用给定的长度生成差异统计"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "使用给定的文件名长度生成差异统计"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "使用给定的图形长度生成差异统计"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<次数>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "生成有限行数的差异统计"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "生成差异统计的简洁摘要"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
 msgstr "输出一个可以应用的二进制差异"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "在 \"index\" 行显示完整的前后对象名称"
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "显示带颜色的差异"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<类型>"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr "对于差异中的上下文、旧的和新的行,加亮显示错误的空白字符"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3540,299 +3623,311 @@
 "在 --raw 或者 --numstat 中,不对路径字符转码并使用 NUL 字符做为输出字段的分隔"
 "符"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<前缀>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "显示给定的源前缀取代 \"a/\""
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "显示给定的目标前缀取代 \"b/\""
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "输出的每一行附加前缀"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "不显示任何源和目标前缀"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "显示指定行数的差异块间的上下文"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<字符>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "指定一个字符取代 '+' 来表示新的一行"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "指定一个字符取代 '-' 来表示旧的一行"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "指定一个字符取代 ' ' 来表示一行上下文"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "差异重命名选项"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "将完全重写的变更打破为成对的删除和创建"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "检测重命名"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "省略删除操作的差异输出"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "检测拷贝"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "使用未修改的文件做为发现拷贝的源"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "禁用重命名探测"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "使用空的数据对象做为重命名的源"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "继续列出文件重命名以外的历史记录"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr "如果重命名/拷贝目标超过给定的限制,禁止重命名/拷贝检测"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "差异算法选项"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "生成尽可能小的差异"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "行比较时忽略空白字符"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "忽略空白字符的变更"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "忽略行尾的空白字符变更"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "忽略行尾的回车符(CR)"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "忽略整行都是空白的变更"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<正则>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "忽略所有行都和正则表达式匹配的变更"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "启发式转换差异边界以便阅读"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "使用 \"patience diff\" 算法生成差异"
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "使用 \"histogram diff\" 算法生成差异"
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<算法>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "选择一个差异算法"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<文本>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "使用 \"anchored diff\" 算法生成差异"
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<模式>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "显示单词差异,使用 <模式> 分隔变更的单词"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "使用 <正则表达式> 确定何为一个词"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "相当于 --word-diff=color --word-diff-regex=<正则>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "移动的代码行用不同方式着色"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "在 --color-moved 下如何忽略空白字符"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "其它差异选项"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr "当从子目录运行,排除目录之外的变更并显示相对路径"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "把所有文件当做文本处理"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "交换两个输入,反转差异"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "有差异时退出码为 1,否则为 0"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "禁用本程序的所有输出"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "允许执行一个外置的差异助手"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr "当比较二进制文件时,运行外部的文本转换过滤器"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<何时>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "在生成差异时,忽略子模组的更改"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<格式>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "指定子模组的差异如何显示"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "隐藏索引中 'git add -N' 条目"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "将索引中 'git add -N' 条目当做真实的"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<字符串>"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "查找改变了指定字符串出现次数的差异"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "查找改变指定正则匹配出现次数的差异"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "显示使用 -S 或 -G 的变更集的所有变更"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "将 -S 的 <string> 当做扩展的 POSIX 正则表达式"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "控制输出中的文件显示顺序"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<路径>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "先显示指定路径的变更"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "跳过指定路径的输出"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<对象 ID>"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "查找改变指定对象出现次数的差异"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "通过差异类型选择文件"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<文件>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "输出到一个指定的文件"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr "因为文件太多,略过不严格的重命名检查。"
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr "因为文件太多,只在修改的路径中查找拷贝。"
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3843,10 +3938,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "读取排序文件 '%s' 失败"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "正在进行非精确的重命名探测"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "在差异中无此路径 '%s'"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -3871,35 +3971,35 @@
 msgid "disabling cone pattern matching"
 msgstr "禁止 cone 模式匹配"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "不能将 %s 用作排除文件"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "不能打开目录 '%s'"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "无法获得内核名称和信息"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr "缓存未跟踪文件在本系统或位置中被禁用"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "仓库 %s 中的索引文件损坏"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "不能为 %s 创建目录"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "不能从 '%s' 迁移 git 目录到 '%s'"
@@ -3909,21 +4009,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "提示:等待您的编辑器关闭文件...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "过滤内容"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "不能对文件 '%s' 调用 stat"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "错误的 git 名字空间路径 \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "不能设置 GIT_DIR 为 '%s'"
@@ -3933,259 +4033,271 @@
 msgid "too many args to run %s"
 msgstr "执行 %s 的参数太多"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack:应为 shallow 列表"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack:在浅克隆列表之后期望一个 flush 包"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack:期望 ACK/NAK,却得到 flush 包"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack:应为 ACK/NAK,却得到 '%s'"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "无法写到远程"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc 需要 multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "无效的 shallow 信息:%s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "无效的 unshallow 信息:%s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "对象未找到:%s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "对象中出错:%s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "未发现 shallow:%s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "应为 shallow/unshallow,却得到 %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "得到 %s %d %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "无效提交 %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "放弃"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "完成"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "得到 %s (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "标记 %s 为完成"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "已经有 %s(%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack:无法派生 sideband 多路输出"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "协议错误:坏的包头"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack:无法派生进程 %s"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack:无效的 index-pack 输出"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s 失败"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "sideband 多路输出出错"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "服务器版本 %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "服务器支持 %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "服务器不支持 shalllow 客户端"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "服务器不支持 --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "服务器不支持 --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "服务器不支持 --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "服务器不支持这个仓库的对象格式"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "没有共同的提交"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "源仓库是浅克隆,拒绝克隆。"
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack:获取失败。"
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "不匹配的算法:客户端 %s,服务端 %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "服务器不支持算法 '%s'"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "服务器不支持 shalllow 请求"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "服务器支持 filter"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "无法将请求写到远程"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "读取节标题 '%s' 出错"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "预期 '%s',得到 '%s'"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "意外的确认行:'%s'"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "处理 ack 出错:%d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "预期在 'ready' 之后发送 packfile"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "在没有 'ready' 不应该发送其它小节"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "处理浅克隆信息出错:%d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "预期 wanted-ref,得到 '%s'"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "意外的 wanted-ref:'%s'"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "处理要获取的引用出错:%d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack:预期响应结束包"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "没有匹配的远程分支"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "远程没有发送所有必需的对象"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "来自远程的意外的 'ready'"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "没有这样的远程引用 %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "服务器不允许请求未公开的对象 %s"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "不能创建临时文件"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "无法将分离式签名写入 '%s'"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg 数据签名失败"
 
@@ -4194,7 +4306,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "忽略 log.graphColors 中无效的颜色 '%.*s'"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4202,18 +4314,18 @@
 "给定的模式包含 NULL 字符(通过 -f <文件> 参数)。只有 PCRE v2 下的 -P 支持此"
 "功能"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s':无法读取 %s"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "对 '%s' 调用 stat 失败"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s':读取不完整"
@@ -4283,7 +4395,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "这些是各种场合常见的 Git 命令:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "不支持的命令列表类型 '%s'"
@@ -4435,47 +4547,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "姓名中仅包含禁用字符:%s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "无效的日期格式:%s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "期望 'tree:<深度>'"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path 过滤器支持已被删除"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "'object:type=<type>' 的值 '%s' 不是有效的对象类型"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "无效的过滤器表达式 '%s'"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "必须对 sub-filter-spec 中的字符进行转义:'%c'"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "期望在组合后有一些东西:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "不能混用多种过滤规格"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "无法升级仓库格式以支持部分克隆"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "不能访问 '%s' 中的稀疏数据对象"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "无法解析 %s 中的稀疏过滤器数据"
@@ -4490,7 +4607,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "树 %2$s 中的条目 '%1$s' 具有数据对象的模式,但不是一个数据对象"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "无法为提交 %s 加载根树"
@@ -4518,122 +4635,59 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "不能创建 '%s.lock':%s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "lsrefs.unborn 的取值 '%s' 无效"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "在 ls-refs 参数后应该有一个 flush 包"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "检测到引号中的换行符"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
 #, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-"您对下列文件的本地修改将被合并操作覆盖:\n"
-"  %s"
+msgid "bad action '%s' for '%s'"
+msgstr "'%2$s' 的错误动作 '%1$s'"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "已经是最新的!"
-
-#: merge-recursive.c:356
-msgid "(bad commit)\n"
-msgstr "(坏提交)\n"
-
-#: merge-recursive.c:379
-#, c-format
-msgid "add_cacheinfo failed for path '%s'; merge aborting."
-msgstr "add_cacheinfo 对路径 '%s' 执行失败,合并终止。"
-
-#: merge-recursive.c:388
-#, c-format
-msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
-msgstr "add_cacheinfo 无法刷新路径 '%s',合并终止。"
-
-#: merge-recursive.c:874
-#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "创建路径 '%s'%s 失败"
-
-#: merge-recursive.c:885
-#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "删除 %s 以便为子目录留出空间\n"
-
-#: merge-recursive.c:899 merge-recursive.c:918
-msgid ": perhaps a D/F conflict?"
-msgstr ":可能是一个目录/文件冲突?"
-
-#: merge-recursive.c:908
-#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "拒绝丢弃 '%s' 中的未跟踪文件"
-
-#: merge-recursive.c:949 builtin/cat-file.c:41
-#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "不能读取对象 %s '%s'"
-
-#: merge-recursive.c:954
-#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "%s '%s' 应为数据对象"
-
-#: merge-recursive.c:979
-#, c-format
-msgid "failed to open '%s': %s"
-msgstr "打开 '%s' 失败:%s"
-
-#: merge-recursive.c:990
-#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "创建符号链接 '%s' 失败:%s"
-
-#: merge-recursive.c:995
-#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "不知道如何处理 %06o %s '%s'"
-
-#: merge-recursive.c:1191
+#: merge-ort.c:1116 merge-recursive.c:1205
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "无法合并子模组 %s (没有检出)"
 
-#: merge-recursive.c:1198
+#: merge-ort.c:1125 merge-recursive.c:1212
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "无法合并子模组 %s(提交不存在)"
 
-#: merge-recursive.c:1205
+#: merge-ort.c:1134 merge-recursive.c:1219
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "无法合并子模组 %s (提交未跟随合并基线)"
 
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-ort.c:1144 merge-ort.c:1151
 #, c-format
-msgid "Fast-forwarding submodule %s to the following commit:"
-msgstr "子模组 %s 快进到如下提交:"
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "注意:快进子模组 %s 到 %s"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-ort.c:1172
 #, c-format
-msgid "Fast-forwarding submodule %s"
-msgstr "快进子模组 %s"
+msgid "Failed to merge submodule %s"
+msgstr "无法合并子模组 %s"
 
-#: merge-recursive.c:1251
+#: merge-ort.c:1179
 #, c-format
-msgid "Failed to merge submodule %s (merge following commits not found)"
-msgstr "无法合并子模组 %s (没发现合并跟随的提交)"
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"无法合并子模组 %s,但是存在一个可能的合并方案:\n"
+"%s\n"
 
-#: merge-recursive.c:1255
-#, c-format
-msgid "Failed to merge submodule %s (not fast-forward)"
-msgstr "无法合并子模组 %s(非快进)"
-
-#: merge-recursive.c:1256
-msgid "Found a possible merge resolution for the submodule:\n"
-msgstr "找到子模组的一个可能的合并方案:\n"
-
-#: merge-recursive.c:1259
+#: merge-ort.c:1183 merge-recursive.c:1273
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4649,31 +4703,298 @@
 "\n"
 "以接受此建议。\n"
 
-#: merge-recursive.c:1268
+#: merge-ort.c:1196
 #, c-format
-msgid "Failed to merge submodule %s (multiple merges found)"
-msgstr "无法合并子模组 %s (发现多个合并)"
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"无法合并子模组 %s,但是存在多个可能的合并:\n"
+"%s"
 
-#: merge-recursive.c:1341
+#: merge-ort.c:1415 merge-recursive.c:1362
 msgid "Failed to execute internal merge"
 msgstr "无法执行内部合并"
 
-#: merge-recursive.c:1346
+#: merge-ort.c:1420 merge-recursive.c:1367
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "不能添加 %s 至对象库"
 
-#: merge-recursive.c:1378
+#: merge-ort.c:1427 merge-recursive.c:1400
 #, c-format
 msgid "Auto-merging %s"
 msgstr "自动合并 %s"
 
-#: merge-recursive.c:1402
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"冲突(隐式目录重命名):处于隐式目录重命名的现存文件/目录 %s,将以下路径放"
+"在:%s。"
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"冲突(隐式目录重命名):无法映射一个以上路径到 %s,隐式目录重命名尝试将这些路"
+"径放置于此:%s"
+
+#: merge-ort.c:1634
+#, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"冲突(分割的目录重命名):不清楚重命名 %s 到哪里,因为它被重命名到多个其他目"
+"录中,没有一个目标目录中包含多数文件。"
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr "警告:避免应用 %s -> %s 的重命名到 %s,因为 %s 本身已被重命名。"
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"路径已更新:%s 添加到 %s,位于一个被重命名到 %s 的目录中,将其移动到 %s。"
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"路径已更新:%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,将其移"
+"动到 %5$s。"
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"冲突(文件位置):%s 添加到 %s,位于一个被重命名为 %s 的目录中,建议将其移动"
+"到 %s。"
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"冲突(文件位置):%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,"
+"建议将其移动到 %5$s。"
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"冲突(重命名/重命名):%1$s 重命名为 %3$s 中的 %2$s,以及在 %5$s 中的 %4$s。"
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"冲突(重命名卷入冲突):重命名 %s -> %s 有内容冲突并且和另外一个路径碰撞,这"
+"可能导致嵌套的冲突标签。"
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr "冲突(重命名/删除):%1$s 在 %3$s 中重命名为 %2$s,但在 %4$s 中删除。"
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "不能读取对象 %s"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "对象 %s 不是一个数据对象"
+
+#: merge-ort.c:2981
+#, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr "冲突(文件/目录):目录已存在于 %2$s 中的 %1$s,将其移动到 %3$s。"
+
+#: merge-ort.c:3055
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr "冲突(不同类型):%s 在每一侧有不同的类型,把它们都重命名以便每个能记录在不同位置。"
+
+#: merge-ort.c:3062
+#, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr "冲突(不同类型):%s 在每一侧有不同的类型,重命名它们中的一个以便每个被记录在不同位置。"
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "内容"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "添加/添加"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "子模组"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "冲突(%s):合并冲突于 %s"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"冲突(修改/删除):%1$s 在 %2$s 中被删除,在 %3$s 中被修改。%5$s 的 %4$s 版本"
+"在树中被保留。"
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr "注意:%s 不是最新的,并且正在检出冲突的版本。旧副本重命名为 %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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "无法收集树 %s、%s、%s 的合并信息"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+"您对下列文件的本地修改将被合并操作覆盖:\n"
+"  %s"
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "已经是最新的。"
+
+#: merge-recursive.c:356
+msgid "(bad commit)\n"
+msgstr "(坏提交)\n"
+
+#: merge-recursive.c:379
+#, c-format
+msgid "add_cacheinfo failed for path '%s'; merge aborting."
+msgstr "add_cacheinfo 对路径 '%s' 执行失败,合并终止。"
+
+#: merge-recursive.c:388
+#, c-format
+msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
+msgstr "add_cacheinfo 无法刷新路径 '%s',合并终止。"
+
+#: merge-recursive.c:876
+#, c-format
+msgid "failed to create path '%s'%s"
+msgstr "创建路径 '%s'%s 失败"
+
+#: merge-recursive.c:887
+#, c-format
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "删除 %s 以便为子目录留出空间\n"
+
+#: merge-recursive.c:901 merge-recursive.c:920
+msgid ": perhaps a D/F conflict?"
+msgstr ":可能是一个目录/文件冲突?"
+
+#: merge-recursive.c:910
+#, c-format
+msgid "refusing to lose untracked file at '%s'"
+msgstr "拒绝丢弃 '%s' 中的未跟踪文件"
+
+#: merge-recursive.c:951 builtin/cat-file.c:41
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr "不能读取对象 %s '%s'"
+
+#: merge-recursive.c:956
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr "%s '%s' 应为数据对象"
+
+#: merge-recursive.c:981
+#, c-format
+msgid "failed to open '%s': %s"
+msgstr "打开 '%s' 失败:%s"
+
+#: merge-recursive.c:992
+#, c-format
+msgid "failed to symlink '%s': %s"
+msgstr "创建符号链接 '%s' 失败:%s"
+
+#: merge-recursive.c:997
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "不知道如何处理 %06o %s '%s'"
+
+#: merge-recursive.c:1227 merge-recursive.c:1239
+#, c-format
+msgid "Fast-forwarding submodule %s to the following commit:"
+msgstr "子模组 %s 快进到如下提交:"
+
+#: merge-recursive.c:1230 merge-recursive.c:1242
+#, c-format
+msgid "Fast-forwarding submodule %s"
+msgstr "快进子模组 %s"
+
+#: merge-recursive.c:1265
+#, c-format
+msgid "Failed to merge submodule %s (merge following commits not found)"
+msgstr "无法合并子模组 %s (没发现合并跟随的提交)"
+
+#: merge-recursive.c:1269
+#, c-format
+msgid "Failed to merge submodule %s (not fast-forward)"
+msgstr "无法合并子模组 %s(非快进)"
+
+#: merge-recursive.c:1270
+msgid "Found a possible merge resolution for the submodule:\n"
+msgstr "找到子模组的一个可能的合并方案:\n"
+
+#: merge-recursive.c:1282
+#, c-format
+msgid "Failed to merge submodule %s (multiple merges found)"
+msgstr "无法合并子模组 %s (发现多个合并)"
+
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "错误:拒绝丢失未跟踪文件 '%s',而是写入 %s。"
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4682,7 +5003,7 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本被保留。"
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4691,7 +5012,7 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本被保留。"
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4700,7 +5021,7 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本保留在 %8$s 中。"
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4709,40 +5030,40 @@
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本保留在 %9$s 中。"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "重命名"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "重命名"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "拒绝丢失脏文件 '%s'"
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "拒绝在 '%s' 处失去未跟踪文件,即使它存在于重命名中。"
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr "冲突(重命名/添加):在 %3$s 中重命名 %1$s->%2$s。在 %5$s 中添加 %4$s"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s 是 %s 中的一个目录而以 %s 为名被添加"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "拒绝丢失未跟踪文件 '%s',而是添加为 %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4751,18 +5072,18 @@
 "冲突(重命名/重命名):在分支 \"%3$s\" 中重命名 \"%1$s\"->\"%2$s\",在分支 "
 "\"%6$s\" 中重命名 \"%4$s\"->\"%5$s\"%7$s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr "(留下未解决)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "冲突(重命名/重命名):在 %3$s 中重命名 %1$s->%2$s,在 %6$s 中重命名 %4$s->"
 "%5$s"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4772,25 +5093,7 @@
 "冲突(分割的目录重命名):不清楚 %s 应该放在哪里,因为目录 %s 被重命名到多个"
 "其它目录,没有目录包含大部分文件。"
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"冲突(隐式目录重命名):处于隐式目录重命名的现存文件/目录 %s,将以下路径放"
-"在:%s。"
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"冲突(隐式目录重命名):无法映射一个以上路径到 %s,隐式目录重命名尝试将这些路"
-"径放置于此:%s"
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4799,147 +5102,79 @@
 "冲突(重命名/重命名):在 %3$s 中重命名目录 %1$s->%2$s,在 %6$s 中重命名目录 "
 "%4$s->%5$s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr "警告:避免应用 %s -> %s 的重命名到 %s,因为 %s 本身已被重命名。"
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "不能读取对象 %s"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "对象 %s 不是一个数据对象"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "修改"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "修改"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "内容"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "添加/添加"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "略过 %s(已经做过相同合并)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "子模组"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "冲突(%s):合并冲突于 %s"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "而是以 %s 为名添加"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"路径已更新:%s 添加到 %s,位于一个被重命名到 %s 的目录中,将其移动到 %s。"
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"冲突(文件位置):%s 添加到 %s,位于一个被重命名为 %s 的目录中,建议将其移动"
-"到 %s。"
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"路径已更新:%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,将其移"
-"动到 %5$s。"
-
-#: merge-recursive.c:3225
-#, 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 ""
-"冲突(文件位置):%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,"
-"建议将其移动到 %5$s。"
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "删除 %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "文件/目录"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "目录/文件"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr "冲突(%1$s):在 %3$s 中有一个名为 %2$s 的目录。以 %5$s 为名添加 %4$s"
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "添加 %s"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "冲突(add/add):合并冲突于 %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "无法合并树 %s 和 %s"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "合并:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "发现 %u 个共同祖先:"
 msgstr[1] "发现 %u 个共同祖先:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "合并未返回提交"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "不能解析对象 '%s'"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "不能写入索引。"
 
@@ -4947,184 +5182,195 @@
 msgid "failed to read the cache"
 msgstr "读取缓存失败"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "无法写新的索引文件"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "多包索引的对象ID扇出表大小错误"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "多包索引文件 %s 太小"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "多包索引签名 0x%08x 和签名 0x%08x 不匹配"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index 版本 %d 不能被识别"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "多包索引哈希版本 %u 和版本 %u 不匹配"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "无效的块偏移(太大)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "终止多包索引块 id 出现时间早于预期"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "多包索引缺少必需的包名块"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "多包索引缺少必需的对象 ID 扇出块"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "多包索引缺少必需的对象 ID 查询块"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "多包索引缺少必需的对象偏移块"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "多包索引包名无序:'%s' 在 '%s' 之前"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "错的 pack-int-id:%u(共有 %u 个包)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "多包索引存储一个64位偏移,但是 off_t 太小"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "添加包文件 '%s' 失败"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "打开包索引 '%s' 失败"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "在包文件中定位对象 %d 失败"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "无法存储反向索引文件"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "添加包文件到多包索引"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "没有看到要丢弃的包文件 %s"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "未知的首选包:'%s'"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "首选包 '%s' 已过期"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "没有要索引的包文件。"
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "写入块到多包索引"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "删除 %s 失败"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "清理位于 %s 的多包索引失败"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "多包索引文件存在,但无法解析"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "正在查找引用的包文件"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "对象 ID 扇出无序:fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "midx 不包含 oid"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "校验多包索引中的 OID 顺序"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "对象 ID 查询无序:oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "通过包文件为对象排序"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "校验对象偏移"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "为 oid[%d] = %s 加载包条目失败"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "为包文件 %s 加载包索引失败"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "oid[%d] = %s 错误的对象偏移:%<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "正在对引用对象计数"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "正在查找和删除未引用的包文件"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "不能开始 pack-objects"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "不能结束 pack-objects"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "不能创建 lazy_dir 线程:%s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "不能创建 lazy_name 线程:%s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "不能加入 lasy_name 线程:%s"
@@ -5168,6 +5414,356 @@
 msgid "Bad %s value: '%s'"
 msgstr "坏的 %s 值:'%s'"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "对象目录 %s 不存在,检查 .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "无法规范化备用对象路径:%s"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s:忽略备用对象库,嵌套太深"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "无法规范化对象目录: %s"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "无法 fdopen 替换锁文件"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "无法读取替代文件"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "无法将新的替代文件移动到位"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "路径 '%s' 不存在"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "尚不支持将参考仓库 '%s' 作为一个链接检出。"
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "参考仓库 '%s' 不是一个本地仓库。"
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "参考仓库 '%s' 是一个浅克隆"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "参考仓库 '%s' 已被移植"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "解析备用引用时无效的行:%s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "尝试 mmap %<PRIuMAX>,超过了最大值 %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap 失败"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "对象文件 %s 为空"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "损坏的松散对象 '%s'"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "松散对象 '%s' 后面有垃圾数据"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "无效的对象类型"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "无法用 --allow-unknown-type 参数解开 %s 头信息"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "无法解开 %s 头部"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "无法用 --allow-unknown-type 参数解析 %s 头信息"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "无法解析 %s 头部"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "读取对象 %s 失败"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "找不到 %2$s 的替代 %1$s"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "松散对象 %s(保存在 %s)已损坏"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "打包对象 %s(保存在 %s)已损坏"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "无法写文件 %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "无法为 '%s' 设置权限"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "文件写错误"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "关闭松散对象文件时出错"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr "权限不足,无法在仓库对象库 %s 中添加对象"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "无法创建临时文件"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "不能写松散对象文件"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "不能压缩新对象 %s(%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "在对象 %s 上调用 deflateEnd 失败(%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "被 %s 的不稳定对象源数据搞糊涂了"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "在 %s 上调用 utime() 失败"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "不能读取对象 %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "损坏的提交"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "损坏的标签"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "索引 %s 时读取错误"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "索引 %s 时读入不完整"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s:插入数据库失败"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s:不支持的文件类型"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s 不是一个有效的对象"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s 不是一个有效的 '%s' 对象"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "不能打开 %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "%s 的哈希值不匹配(预期 %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "不能 mmap %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "无法解压缩 %s 的头部"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "无法解析 %s 的头部"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "无法解压缩 %s 的内容"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "短对象ID %s 存在歧义"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "候选者有:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git 通常不会创建一个以40个十六进制字符结尾的引用,因为当您只提供40\n"
+"个十六进制字符时将被忽略。这些引用可能被错误地创建。例如:\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"当 \"$br\" 某种原因空白时,一个40位十六进制的引用将被创建。请检查这些\n"
+"引用,可能需要删除它们。运行 \"git config advice.objectNameWarning\n"
+"false\" 命令关闭本消息通知。"
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "'%.*s' 的日志仅能回到 %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "'%.*s' 的日志仅有 %d 个条目"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "路径 '%s' 在磁盘上,但是不在 '%.*s' 中"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"路径 '%s' 存在,而 '%s' 不存在\n"
+"提示:您的意思是 '%.*s:%s' 亦即 '%.*s:./%s'?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "路径 '%s' 不在 '%.*s' 中"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"路径 '%s' 在索引中,但不在暂存区 %d 中\n"
+"提示:您的意思是 ':%d:%s'?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"路径 '%s' 在索引中,但 '%s' 不在\n"
+"提示:您的意思是 ':%d:%s' 亦即 ':%d:./%s'?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "路径 '%s' 在磁盘上,但不在索引里"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "路径 '%s' 不存在(既不在磁盘上,也不在索引中)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "不能在工作区之外使用相对路径语法"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "无效的对象名 '%.*s'。"
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5178,36 +5774,85 @@
 msgid "object %s is a %s, not a %s"
 msgstr "对象 %s 是一个 %s,不是一个 %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "对象 %s 有未知的类型 id %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "不能解析对象:%s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "哈希值与 %s 不匹配"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "无法得到 %s 的大小"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "无法得到 %s 的磁盘使用量"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "反向索引文件 %s 太小"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "反向索引文件 %s 损坏"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "反向索引文件 %s 有错误的签名"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "反向索引文件 %s 不支持的版本 %<PRIu32>"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "反向索引文件 %s 有不支持的哈希 ID %<PRIu32>"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "无法同时写入和校验反向索引"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "不能调用 stat:%s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "无法设置 %s 为可读"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "无法写入 '%s' 承诺者文件"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "偏移量在包文件结束之前(损坏的 .idx?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "偏移量在 %s 的包索引开始之前(损坏的索引?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "偏移量越过了 %s 的包索引的结尾(被截断的索引?)"
@@ -5272,31 +5917,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "你的意思是 `--%s`(有两个短线)?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "--%s 的别名"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "未知选项 `%s'"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "未知开关 `%c'"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "字符串中未知的非 ascii 字符选项:`%s'"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "用法:%s"
@@ -5304,18 +5949,18 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "  或:%s"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-数字"
 
@@ -5324,78 +5969,78 @@
 msgid "Could not make %s writable by group"
 msgstr "不能设置 %s 为组可写"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "转义字符 '\\' 不能作为属性值的最后一个字符"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "只允许一个 'attr:' 规格。"
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "属性规格不能为空"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "无效的属性名 %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr "全局的 'glob' 和 'noglob' 路径规格设置不兼容"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
 msgstr "全局的 'literal' 路径规格设置和其它的全局路径规格设置不兼容"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "路径规格包含无效的神奇前缀"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "在路径规格 '%3$s' 中无效的神奇前缀 '%2$.*1$s'"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "路径规格 '%s' 的神奇前缀结尾少了一个 ')'"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "路径规格 '%2$s' 中包含未实现的神奇前缀 '%1$c'"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s:'literal' 和 'glob' 不兼容"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s:'%s' 在位于 '%s' 的仓库之外"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s'(助记符:'%c')"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s:路径规格神奇前缀不被此命令支持:%s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "路径规格 '%s' 位于符号链接中"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "行被错误地引用:%s"
@@ -5416,7 +6061,7 @@
 msgid "flush packet write failed"
 msgstr "flush 包写错误"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "协议错误:不可能的长行"
 
@@ -5424,47 +6069,48 @@
 msgid "packet write with format failed"
 msgstr "格式化包写入错误"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr "写数据包失败:数据超过了包的最大长度"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "数据包写入失败"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "数据包写入失败:%s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "读取错误"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "远端意外挂断了"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "协议错误:错误的行长度字符串:%.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "协议错误:错误的行长度 %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "远程错误:%s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "正在刷新索引"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "无法创建线程 lstat:%s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "不能解析 --pretty 格式"
 
@@ -5485,88 +6131,96 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "promisor 远程名称不能以 '/' 开始:%s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info:在参数之后应有一个 flush"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "正在删除重复对象"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "不能启动 `log`"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "不能读取 `log` 的输出"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "不能解析提交 '%s'"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr "无法解析 `log` 输出的首行:不是以 'commit ' 开头:'%s'"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "无法解析 git 头 '%.*s'"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "生成 diff 失败"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only 和 --right-only 互斥"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "不能解析 '%s' 的日志"
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "将不会添加文件别名 '%s'('%s' 已经存在于索引中)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "不能在对象数据库中创建空的数据对象"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr "%s:只能添加常规文件、符号链接或 git 目录"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' 没有检出一个提交"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "无法索引文件 '%s'"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "无法在索引中添加 '%s'"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "无法对 %s 执行 stat"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' 看起来既是文件又是目录"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "刷新索引"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5575,7 +6229,7 @@
 "设置了 index.version,但是取值无效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5584,140 +6238,144 @@
 "设置了 GIT_INDEX_VERSION,但是取值无效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "坏的签名 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "坏的索引版本 %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "坏的索引文件 sha1 签名"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "索引使用不被支持的 %.4s 扩展"
 
 # 	
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "忽略 %.4s 扩展"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "未知的索引条目格式 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "索引中靠近路径 '%s' 有错误的名称字段"
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "索引中有未排序的暂存条目"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "合并文件 '%s' 有多个暂存条目"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' 的未排序暂存条目"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "索引文件损坏"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "无法创建 load_cache_entries 线程:%s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "无法加入 load_cache_entries 线程:%s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s:打开索引文件失败"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s:不能对打开的索引执行 stat 操作"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s:索引文件比预期的小"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s:无法对索引文件执行 map 操作"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "无法创建 load_index_extensions 线程:%s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "无法加入 load_index_extensions 线程:%s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "无法刷新共享索引 '%s'"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "损坏的索引,期望在 %2$s 中的 %1$s,得到 %3$s"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "不能关闭 '%s'"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "无法转换为稀疏索引"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "不能打开 git 目录:%s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "无法删除:%s"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "不能修复 '%s' 的权限位"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s:不能落到暂存区 #0"
@@ -5745,7 +6403,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5754,17 +6415,20 @@
 "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"
+".       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 <提交> = 使用提交,进入 shell 以便进行提交修补\n"
-"s, squash <提交> = 使用提交,但融合到前一个提交\n"
-"f, fixup <提交> = 类似于 \"squash\",但丢弃提交说明日志\n"
+"r, reword <提交> = 使用提交,但编辑提交说明\n"
+"e, edit <提交> = 使用提交,但停止以便在 shell 中修补提交\n"
+"s, squash <提交> = 使用提交,但挤压到前一个提交\n"
+"f, fixup [-C | -c] <提交> = 类似于 \"squash\",但只保留前一个提交\n"
+"                   的提交说明,除非使用了 -C 参数,此情况下则只\n"
+"                   保留本提交说明。使用 -c 和 -C 类似,但会打开\n"
+"                   编辑器修改提交说明\n"
 "x, exec <命令> = 使用 shell 运行命令(此行剩余部分)\n"
 "b, break = 在此处停止(使用 'git rebase --continue' 继续变基)\n"
 "d, drop <提交> = 删除提交\n"
@@ -5777,14 +6441,14 @@
 "\n"
 "可以对这些行重新排序,将从上至下执行。\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "变基 %s 到 %s(%d 个提交)"
 msgstr[1] "变基 %s 到 %s(%d 个提交)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5792,7 +6456,7 @@
 "\n"
 "不要删除任意一行。使用 'drop' 显式地删除一个提交。\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5800,7 +6464,7 @@
 "\n"
 "如果您在这里删除一行,对应的提交将会丢失。\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5814,7 +6478,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5824,19 +6488,19 @@
 "然而,如果您删除全部内容,变基操作将会终止。\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "不能写入 '%s'"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "不能写入 '%s'。"
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5845,7 +6509,7 @@
 "警告:一些提交可能被意外丢弃。\n"
 "丢弃的提交(从新到旧):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5861,14 +6525,14 @@
 "可选值有:ignore、warn、error。\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "不能读取 '%s'。"
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "丢失"
 
@@ -5887,232 +6551,247 @@
 msgid "ahead %d, behind %d"
 msgstr "领先 %d,落后 %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "期望的格式:%%(color:<颜色>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "未能识别的颜色:%%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "期望整数值 refname:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "期望整数值 refname:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "未能识别的 %%(%s) 参数:%s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) 不带参数"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "未能识别的 %%(objectsize) 参数:%s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) 不带参数"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) 不带参数"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "未能识别的 %%(subject) 参数:%s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "预期 %%(trailers:key=<值>)"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "未知的 %%(trailers) 参数:%s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "期望一个正数 contents:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "未能识别的 %%(contents) 参数:%s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "期望 %%(%2$s) 中的 '%1$s' 是一个正数"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "未能识别 %%(%2$s) 中的参数 '%1$s'"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "未识别的邮件选项:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "期望的格式:%%(align:<宽度>,<位置>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "未能识别的位置:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "未能识别的宽度:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "未能识别的 %%(align) 参数:%s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "元素 %%(align) 需要一个正数的宽度"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "未能识别的 %%(if) 参数:%s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "格式错误的字段名:%.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "未知的字段名:%.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "不是 git 仓库,但是字段 '%.*s' 需要访问对象数据"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "格式:使用了 %%(if) 元素而没有 %%(then) 元素"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "格式:使用了 %%(then) 元素而没有 %%(if) 元素"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "格式:%%(then) 元素用了多次"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "格式:%%(then) 元素用在了 %%(else) 之后"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "格式:使用了 %%(else) 元素而没有 %%(if) 元素"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "格式:使用了 %%(else) 元素而没有 %%(then) 元素"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "格式:%%(else) 元素用了多次"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "格式:使用了 %%(end) 元素却没有它的对应元素"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "错误的格式化字符串 %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "非分支,正变基 %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(非分支,正变基 %s)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "非分支,正变基分离头指针 %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(非分支,正变基分离头指针 %s)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "非分支,二分查找开始于 %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(非分支,二分查找开始于 %s)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "非分支"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(头指针在 %s 分离)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(头指针自 %s 分离)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(非分支)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "缺失 %2$s 的对象 %1$s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer 失败于 %2$s 的 %1$s"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "格式错误的对象 '%s'"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "忽略带有错误名称 %s 的引用"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "忽略损坏的引用 %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "格式:缺少 %%(end) 元素"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "格式错误的对象名 %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "选项 `%s' 必须指向一个提交"
@@ -6161,50 +6840,50 @@
 msgid "ignoring dangling symref %s"
 msgstr "忽略悬空符号引用 %s"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "引用 %s 的日志在 %s 之后有缺口"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "引用 %s 的日志意外终止于 %s "
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "%s 的日志为空"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "拒绝更新有错误名称 '%s' 的引用"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "对引用 '%s' 执行 update_ref 失败:%s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "不允许对引用 '%s' 多次更新"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "在隔离环境中禁止更新引用"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "引用更新被钩子中止"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' 已存在,无法创建 '%s'"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "无法同时处理 '%s' 和 '%s'"
@@ -6228,7 +6907,7 @@
 #: refspec.c:170
 #, c-format
 msgid "invalid refspec '%s'"
-msgstr "无效的引用表达式:'%s'"
+msgstr "无效的引用规格:'%s'"
 
 #: remote.c:351
 #, c-format
@@ -6268,21 +6947,21 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "模式的值 '%s' 没有 '*'"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
-msgstr "源引用表达式 %s 没有匹配"
+msgstr "源引用规格 %s 没有匹配"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
-msgstr "源引用表达式 %s 匹配超过一个"
+msgstr "源引用规格 %s 匹配超过一个"
 
 #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6304,154 +6983,154 @@
 "\n"
 "都不行,所以我们已放弃。您必须给出完整的引用。"
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
 "Did you mean to create a new branch by pushing to\n"
 "'%s:refs/heads/%s'?"
 msgstr ""
-"引用表达式的 <src> 是一个提交对象。您是想创建一个新的分支而向\n"
+"引用规格的 <src> 是一个提交对象。您是想创建一个新的分支而向\n"
 "'%s:refs/heads/%s' 推送么?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
 "Did you mean to create a new tag by pushing to\n"
 "'%s:refs/tags/%s'?"
 msgstr ""
-"引用表达式的 <src> 是一个标签对象。您是想创建一个新的标签而向\n"
+"引用规格的 <src> 是一个标签对象。您是想创建一个新的标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
 "Did you mean to tag a new tree by pushing to\n"
 "'%s:refs/tags/%s'?"
 msgstr ""
-"引用表达式的 <src> 是一个树对象。您是想为这个树对象创建标签而向\n"
+"引用规格的 <src> 是一个树对象。您是想为这个树对象创建标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
 "Did you mean to tag a new blob by pushing to\n"
 "'%s:refs/tags/%s'?"
 msgstr ""
-"引用表达式的 <src> 是一个数据对象。您是想为这个数据对象创建标签而向\n"
+"引用规格的 <src> 是一个数据对象。您是想为这个数据对象创建标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s 无法被解析为分支"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "无法删除 '%s':远程引用不存在"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
-msgstr "目标引用表达式 %s 匹配超过一个"
+msgstr "目标引用规格 %s 匹配超过一个"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "目标引用 %s 接收超过一个源"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD 没有指向一个分支"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "没有此分支:'%s'"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "尚未给分支 '%s' 设置上游"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "上游分支 '%s' 没有存储为一个远程跟踪分支"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "推送目标 '%s' 至远程 '%s' 没有本地跟踪分支"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "分支 '%s' 没有设置要推送的远程服务器"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "向 '%s' 推送引用规格未包含 '%s'"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "推送无目标(push.default 是 'nothing')"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "无法解析 'simple' 推送至一个单独的目标"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "无法找到远程引用 %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* 在本地忽略可笑的引用 '%s'"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "您的分支基于 '%s',但此上游分支已经不存在。\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (使用 \"git branch --unset-upstream\" 来修复)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "您的分支与上游分支 '%s' 一致。\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "您的分支和 '%s' 指向不同的提交。\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (使用 \"%s\" 查看详情)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "您的分支领先 '%s' 共 %d 个提交。\n"
 msgstr[1] "您的分支领先 '%s' 共 %d 个提交。\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (使用 \"git push\" 来发布您的本地提交)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6460,11 +7139,11 @@
 msgstr[1] "您的分支落后 '%s' 共 %d 个提交,并且可以快进。\n"
 
 #  译者:注意保持前导空格
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (使用 \"git pull\" 来更新您的本地分支)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6480,11 +7159,11 @@
 "并且分别有 %d 和 %d 处不同的提交。\n"
 
 #  译者:注意保持前导空格
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (使用 \"git pull\" 来合并远程分支)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "无法解析期望的对象名 '%s'"
@@ -6504,96 +7183,96 @@
 msgid "replace depth too high for object %s"
 msgstr "对象 %s 的替换层级太深"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "损坏的 MERGE_RR"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "无法写入 rerere 记录"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "写入 '%s' (%s) 时出错"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "刷新 '%s' 失败"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "不能解析 '%s' 中的冲突块"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "在 '%s' 上调用 utime() 失败"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "写入 '%s' 失败"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "使用之前的解决方案暂存 '%s'。"
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "已记录 '%s' 的解决方案。"
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "使用之前的解决方案解决 '%s'。"
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "不能删除 stray '%s'"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "为 '%s' 记录 preimage"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "不能创建目录 '%s'"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "更新 '%s' 中的冲突状态失败"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "没有为 '%s' 记忆的解决方案"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "不能删除 '%s'"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "已为 '%s' 更新 preimage"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "忘记 '%s' 的解决方案\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "不能打开 rr-cache 目录"
 
@@ -6601,43 +7280,38 @@
 msgid "could not determine HEAD revision"
 msgstr "不能确定 HEAD 版本"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "无法找到 %s 指向的树。"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "不再支持 --unpacked=<packfile>"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "未知的 --diff-merges 取值:%s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "您的当前分支好像被损坏"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "您的当前分支 '%s' 尚无任何提交"
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L 尚不支持 -p 和 -s 之外的差异格式"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "不能打开 /dev/null"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "不能创建 async 线程:%s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6646,79 +7320,87 @@
 "因为没有将钩子 '%s' 设置为可执行,钩子被忽略。您可以通过\n"
 "配置 `git config advice.ignoredHook false` 来关闭这条警告。"
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "读取远程解包状态时收到意外的 flush 包"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "不能解析远程解包状态:%s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "远程解包失败:%s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "为推送证书签名失败"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack:无法派生 fetch 子进程"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "推送协商失败;无论如何继续推送"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "接收端不支持这个仓库的哈希算法"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "接收端不支持签名推送"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
 msgstr "未发送推送证书,因为接收端不支持签名推送"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "接收端不支持原子推送"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "接收端不支持推送选项"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
 msgstr "无效的提交信息清理模式 '%s'"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "无法删除 '%s'"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "无法删除 '%s'"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "还原"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "拣选"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "变基"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "未知动作:%d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6726,7 +7408,7 @@
 "冲突解决完毕后,用 'git add <路径>' 或 'git rm <路径>'\n"
 "命令标记修正后的文件"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6735,43 +7417,43 @@
 "冲突解决完毕后,用 'git add <路径>' 或 'git rm <路径>'\n"
 "对修正后的文件做标记,然后用 'git commit' 提交"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "不能锁定 '%s'"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "不能写入 '%s'"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "不能将换行符写入 '%s'"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "无法完成 '%s'"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "您的本地修改将被%s覆盖。"
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "提交您的修改或贮藏后再继续。"
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s:快进"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "无效的清理模式 %s"
@@ -6779,65 +7461,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s:无法写入新索引文件"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "不能更新缓存树"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "在 '%.*s' 中没有 key"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "无法为 '%s' 的值去引号"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "无法打开 '%s' 进行读取"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "已经给出 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "已经给出 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "已经给出 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "未知变量 '%s'"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "缺少 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "缺少 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "缺少 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6854,7 +7536,7 @@
 "  git rebase --continue\n"
 msgstr ""
 "您的工作区中存在已暂存的修改\n"
-"如果这些修改需要被并入前一个提交,执行:\n"
+"如果这些修改需要被挤压到前一个提交,执行:\n"
 "\n"
 "  git commit --amend %s\n"
 "\n"
@@ -6866,11 +7548,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "'prepare-commit-msg' 钩子失败"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6894,7 +7576,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -6917,339 +7599,343 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "无法找到新创建的提交"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "不能解析新创建的提交"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "创建提交后,不能解析 HEAD"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "分离头指针"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr "(根提交)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s 不是一个提交!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "不能解析提交作者"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree 无法写入树对象"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "不能从 '%s' 读取提交说明"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "无效的作者身份 '%s'"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "损坏的作者:缺失日期信息"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "写提交对象失败"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "不能更新 %s"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "不能解析父提交 %s"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "未知命令:%d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "这是一个 %d 个提交的组合。"
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "需要一个 HEAD 来修复"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "不能读取 HEAD"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "不能读取 HEAD 的提交说明"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "不能写 '%s'"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "这是第一个提交说明:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "不能读取 %s 的提交说明"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "这是提交说明 #%d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "第一个提交说明将被跳过:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "提交说明 #%d 将被跳过:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "这是一个 %d 个提交的组合。"
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "不能写 '%s'"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "需要一个 HEAD 来修复"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "不能读取 HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "不能读取 HEAD 的提交说明"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "不能读取 %s 的提交说明"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "您的索引文件未完成合并。"
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "不能修复根提交"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "提交 %s 是一个合并提交但未提供 -m 选项。"
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "提交 %s 没有第 %d 个父提交"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, 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:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s:不能解析父提交 %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "不能将 '%s' 重命名为 '%s'"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "不能还原 %s... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "不能应用 %s... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "丢弃 %s %s -- 补丁内容已在上游\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s:无法读取索引"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s:无法刷新索引"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s 不接受参数:'%s'"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "缺少 %s 的参数"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "无法解析 '%s'"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "无效行 %d:%.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "没有父提交的情况下不能 '%s'"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "正在取消一个进行中的拣选"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "正在取消一个进行中的还原"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "请用 'git rebase --edit-todo' 来修改。"
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "不可用的指令清单:'%s'"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "没有解析提交。"
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "不能在回退中执行拣选。"
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "不能在拣选中执行回退。"
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "%s 的值无效:%s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "不可用的 squash-onto"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "格式错误的选项清单:'%s'"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "提供了空的提交集"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "一个还原操作已在进行"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "尝试 \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "拣选操作已在进行"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "尝试 \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "不能创建序列目录 '%s'"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "不能锁定 HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "拣选或还原操作并未进行"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "不能从尚未建立的分支终止"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "不能打开 '%s'"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "不能读取 '%s':%s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "意外的文件结束"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "保存拣选提交前的 HEAD 文件 '%s' 损坏"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "您好像移动了 HEAD。未能回退,检查您的 HEAD!"
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "没有正在进行的还原"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "没有正在进行的拣选"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
 msgstr "无法跳过这个提交"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
 msgstr "没有要跳过的"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7258,16 +7944,16 @@
 "您已经提交了么?\n"
 "试试 \"git %s --continue\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "不能读取 HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "无法拷贝 '%s' 至 '%s'"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7286,28 +7972,27 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "不能应用 %s... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "不能合并 %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "不能拷贝 '%s' 至 '%s'"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "正在执行:%s\n"
 
-#  译者:注意保持前导空格
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7322,11 +8007,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "并且修改索引和/或工作区\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7343,90 +8028,90 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "非法的标签名称:'%.*s'"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "写伪根提交"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "写入 squash-onto"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "无法解析 '%s'"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "没有当前版本不能合并"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "无法解析 '%.*s'"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "无可用合并:'%.*s'"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "章鱼合并不能在一个新的根提交上执行"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "不能获取 '%s' 的提交说明"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "甚至不能尝试合并 '%.*s'"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "合并:无法写入新索引文件"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "无法 autostash"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "意外的 stash 响应:'%s'"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "不能为 '%s' 创建目录"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "创建了 autostash:%s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "无法 reset --hard"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "已应用 autostash。\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "不能存储 %s"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7437,29 +8122,29 @@
 "您的修改在贮藏区中很安全。\n"
 "您可以在任何时候运行 \"git stash pop\" 或 \"git stash drop\"。\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "应用自动贮藏导致冲突。"
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "自动贮藏已经存在;正在创建一个新的贮藏条目。"
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "不能分离头指针"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "停止在 HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "停止在 %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7479,58 +8164,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "正在变基(%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "停止在 %s... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "未知命令 %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "不能读取 orig-head"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "不能读取 'onto'"
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "不能更新 HEAD 为 %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "成功变基并更新 %s。\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "不能变基:您有未暂存的变更。"
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "不能修补不存在的提交"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "无效文件:'%s'"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "无效内容:'%s'"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7539,50 +8224,50 @@
 "\n"
 "您的工作区中有未提交的变更。请先提交然后再次运行 'git rebase --continue'。"
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "不能写入文件:'%s'"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "不能删除 CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "不能提交暂存的修改。"
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s:不能拣选一个%s"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s:错误的版本"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "不能作为初始提交回退"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script:有未能处理的选项"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script:准备版本时错误"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "无事可做"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
 msgstr "无法跳过不必要的拣选"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "脚本已经重新编排。"
 
@@ -7725,7 +8410,7 @@
 "不是 git 仓库(或者直至挂载点 %s 的任何父目录)\n"
 "停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。"
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7734,406 +8419,69 @@
 "参数 core.sharedRepository 的文件属性值有问题(0%.3o)。\n"
 "文件属主必须始终拥有读写权限。"
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "不能打开或者复制 /dev/null"
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "fork 失败"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "setsid 失败"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "尝试在没有 cone 模式下使用稀疏索引"
+
+#: sparse-index.c:156
+msgid "unable to update cache-tree, staying full"
+msgstr "不能更新缓存树,保持完整"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "对象目录 %s 不存在,检查 .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "无法规范化备用对象路径:%s"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s:忽略备用对象库,嵌套太深"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "无法规范化对象目录: %s"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "无法 fdopen 替换锁文件"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "无法读取替代文件"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "无法将新的替代文件移动到位"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "路径 '%s' 不存在"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "尚不支持将参考仓库 '%s' 作为一个链接检出。"
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "参考仓库 '%s' 不是一个本地仓库。"
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "参考仓库 '%s' 是一个浅克隆"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "参考仓库 '%s' 已被移植"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "解析备用引用时无效的行:%s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "尝试 mmap %<PRIuMAX>,超过了最大值 %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap 失败"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "对象文件 %s 为空"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "损坏的松散对象 '%s'"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "松散对象 '%s' 后面有垃圾数据"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "无效的对象类型"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "无法用 --allow-unknown-type 参数解开 %s 头信息"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "无法解开 %s 头部"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "无法用 --allow-unknown-type 参数解析 %s 头信息"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "无法解析 %s 头部"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "读取对象 %s 失败"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "找不到 %2$s 的替代 %1$s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "松散对象 %s(保存在 %s)已损坏"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "打包对象 %s(保存在 %s)已损坏"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "无法写文件 %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "无法为 '%s' 设置权限"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "文件写错误"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "关闭松散对象文件时出错"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr "权限不足,无法在仓库对象库 %s 中添加对象"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "无法创建临时文件"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "不能写松散对象文件"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "不能压缩新对象 %s(%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "在对象 %s 上调用 deflateEnd 失败(%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "被 %s 的不稳定对象源数据搞糊涂了"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "在 %s 上调用 utime() 失败"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "不能读取对象 %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "损坏的提交"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "损坏的标签"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "索引 %s 时读取错误"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "索引 %s 时读入不完整"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s:插入数据库失败"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s:不支持的文件类型"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s 不是一个有效的对象"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s 不是一个有效的 '%s' 对象"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "不能打开 %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "%s 的哈希值不匹配(预期 %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "不能 mmap %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "无法解压缩 %s 的头部"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "无法解析 %s 的头部"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "无法解压缩 %s 的内容"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "短 SHA1 %s 存在歧义"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "候选者有:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git 通常不会创建一个以40个十六进制字符结尾的引用,因为当您只提供40\n"
-"个十六进制字符时将被忽略。这些引用可能被错误地创建。例如:\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"当 \"$br\" 某种原因空白时,一个40位十六进制的引用将被创建。请检查这些\n"
-"引用,可能需要删除它们。运行 \"git config advice.objectNameWarning\n"
-"false\" 命令关闭本消息通知。"
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "'%.*s' 的日志仅能回到 %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "'%.*s' 的日志仅有 %d 个条目"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "路径 '%s' 在磁盘上,但是不在 '%.*s' 中"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"路径 '%s' 存在,而 '%s' 不存在\n"
-"提示:您的意思是 '%.*s:%s' 亦即 '%.*s:./%s'?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "路径 '%s' 不在 '%.*s' 中"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"路径 '%s' 在索引中,但不在暂存区 %d 中\n"
-"提示:您的意思是 ':%d:%s'?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"路径 '%s' 在索引中,但 '%s' 不在\n"
-"提示:您的意思是 ':%d:%s' 亦即 ':%d:./%s'?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "路径 '%s' 在磁盘上,但不在索引里"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "路径 '%s' 不存在(既不在磁盘上,也不在索引中)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "不能在工作区之外使用相对路径语法"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "无效的对象名 '%.*s'。"
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "索引条目是一个目录,但不是稀疏的 (%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8141,20 +8489,20 @@
 msgstr[1] "%u 字节"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u 字节/秒"
 msgstr[1] "%u 字节/秒"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "无法打开 '%s' 进行写入"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "不能编辑 '%s'"
@@ -8201,70 +8549,70 @@
 msgid "staging updated .gitmodules failed"
 msgstr "将更新后 .gitmodules 添加暂存区失败"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "位于未检出的子模组 '%s'"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "路径规格 '%s' 在子模组 '%.*s' 中"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "坏的 --ignore-submodules 参数:%s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
 msgstr "提交 %s 中位于路径 '%s' 的子模组和同名的子模组冲突。 跳过它。"
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "子模组条目 '%s'(%s)是一个 %s,不是一个提交"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr "无法在子模组 %s 中执行 'git rev-list <提交> --not --remotes -n 1'"
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "处理子模组 '%s' 失败"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "无法将 HEAD 解析为有效引用。"
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "正在推送子模组 '%s'\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "无法推送子模组 '%s'\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "正在获取子模组 %s%s\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "无法访问子模组 '%s'\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8273,77 +8621,77 @@
 "获取子模组时的错误:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "无法将 '%s' 识别为 git 仓库"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "无法在子模组 %s 中执行 'git status --porcelain=2'"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "在子模组 %s 中执行 'git status --porcelain=2' 失败"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "无法在子模组 '%s' 中启动 'git status'"
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "无法在子模组 '%s' 中执行 'git status'"
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "无法在子模组 '%s' 中取消 core.worktree 的设置"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "无法递归进子模组路径 '%s'"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "无法重置子模组索引"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "子模组 '%s' 中有脏索引"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "子模组 '%s' 无法被更新。"
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "子模组 git 目录 '%s' 位于 git 目录 '%.*s' 中"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr "不支持对有多个工作区的子模组 '%s' 执行 relocate_gitdir"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "不能查询子模组 '%s' 的名称"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "禁止移动 '%s' 到现存 git 目录中"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8354,65 +8702,71 @@
 "'%s' 迁移至\n"
 "'%s'\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "无法在 .. 中启动 ls-files"
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree 返回未知返回值 %d"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "无法执行 lstat '%s'"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "执行 trailer 命令 '%s' 失败"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "键 '%2$s' 的未知取值 '%1$s'"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "多于一个 %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "尾注 '%.*s' 的键为空"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "不能读取输入文件 '%s'"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "不能自标准输入读取"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "不能对 %s 调用 stat"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "文件 %s 不是一个正规文件"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "文件 %s 用户不可写"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "不能打开临时文件"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "不能重命名临时文件为 %s"
@@ -8459,7 +8813,7 @@
 msgid "error while running fast-import"
 msgstr "执行 fast-import 出错"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "无法读取引用 %s"
@@ -8477,7 +8831,7 @@
 msgid "invalid remote service path"
 msgstr "无效的远程服务路径"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "协议不支持该操作"
 
@@ -8486,68 +8840,72 @@
 msgid "can't connect to subservice %s"
 msgstr "不能连接到子服务 %s"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only 需要协议 v2"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' 缺乏一个匹配的 'ok/error' 指令"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "预期 ok/error,助手说 '%s'"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "助手报告 %s 的意外状态"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "助手 %s 不支持 dry-run"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "助手 %s 不支持 --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "助手 %s 不支持 --signed=if-asked"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "助手 %s 不支持 --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "助手 %s 不支持 --%s"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "助手 %s 不支持 'push-option'"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
-msgstr "remote-heper 不支持 push,需要引用表达式"
+msgstr "remote-heper 不支持推送,需要引用规格"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "助手 %s 不支持 'force'"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "无法执行 fast-export"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "执行 fast-export 时出错"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8556,52 +8914,52 @@
 "没有共同的引用并且也没有指定,什么也不会做。\n"
 "也许您应该指定一个分支。\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "不支持的对象格式 '%s'"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "引用列表中格式错误的响应:%s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "读取(%s)失败"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "写(%s)失败"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "%s 线程失败"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s 线程等待失败:%s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "不能启动线程来拷贝数据:%s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s 进程等待失败"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "%s 进程失败"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "不能启动线程来拷贝数据"
 
@@ -8620,44 +8978,48 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "传输:无效的深度选项 '%s'"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "查看 'git help config' 中的 protocol.version 获取更多信息"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "服务端选项需要版本 2 协议或更高"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "服务器不支持 wait-for-done"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "不能解析 transport.color.* 配置"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "协议 v2 的支持尚未实现"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "配置 '%s' 的取值未知:%s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "传输 '%s' 不允许"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "不再支持 git-over-rsync"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr "下列子模组路径所包含的修改在任何远程源中都找不到:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8684,31 +9046,31 @@
 "以推送至远程。\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "正在终止。"
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "不能推送全部需要的子模组"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "太短的树对象"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "树对象中的条目模式错误"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "树对象条目中空的文件名"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "太短的树文件"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8717,7 +9079,7 @@
 "您对下列文件的本地修改将被检出操作覆盖:\n"
 "%%s请在切换分支前提交或贮藏您的修改。"
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8726,7 +9088,7 @@
 "您对下列文件的本地修改将被检出操作覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8735,7 +9097,7 @@
 "您对下列文件的本地修改将被合并操作覆盖:\n"
 "%%s请在合并前提交或贮藏您的修改。"
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8744,7 +9106,7 @@
 "您对下列文件的本地修改将被合并操作覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8753,7 +9115,7 @@
 "您对下列文件的本地修改将被 %s 覆盖:\n"
 "%%s请在 %s 之前提交或贮藏您的修改。"
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8762,7 +9124,7 @@
 "您对下列文件的本地修改将被 %s 覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8771,7 +9133,7 @@
 "更新如下目录将会丢失其中未跟踪的文件:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8780,7 +9142,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被删除:\n"
 "%%s请在切换分支之前移动或删除。"
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8789,7 +9151,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被删除:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8798,7 +9160,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被删除:\n"
 "%%s请在合并前移动或删除。"
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8807,7 +9169,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被删除:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8816,7 +9178,7 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被删除:\n"
 "%%s请在 %s 前移动或删除。"
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8825,7 +9187,7 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被删除:\n"
 "%%s"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8835,7 +9197,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被覆盖:\n"
 "%%s请在切换分支前移动或删除。"
 
-#: unpack-trees.c:154
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8845,7 +9207,7 @@
 "工作区中下列未跟踪的文件将会因为检出操作而被覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8854,7 +9216,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被覆盖:\n"
 "%%s请在合并前移动或删除。"
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8863,7 +9225,7 @@
 "工作区中下列未跟踪的文件将会因为合并操作而被覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8872,7 +9234,7 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被覆盖:\n"
 "%%s请在 %s 前移动或删除。"
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8881,12 +9243,12 @@
 "工作区中下列未跟踪的文件将会因为 %s 操作而被覆盖:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "条目 '%s' 和 '%s' 重叠。无法合并。"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -8895,7 +9257,7 @@
 "无法更新子模组:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -8905,7 +9267,7 @@
 "尽管存在稀疏检出模板,以下路径不是最新,因而保留:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -8914,7 +9276,7 @@
 "尽管存在稀疏检出模板,以下路径处于未合并状态,因而保留:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -8924,23 +9286,23 @@
 "尽管存在稀疏检出模板,以下路径已经存在,因而未更新:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "正在终止\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
 "reapply`.\n"
 msgstr "在修复上述路径之后,你可能要执行 `git sparse-checkout reapply`。\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "正在更新文件"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -8949,11 +9311,16 @@
 "以下路径发生碰撞(如:在不区分大小写的文件系统上的区分大小写的路径),\n"
 "并且碰撞组中只有一个文件存在工作区中:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "正在更新索引标志"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr "工作树和未跟踪提交具有重复条目:%s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "在 fetch 参数之后应该有一个 flush 包"
 
@@ -8990,72 +9357,102 @@
 msgid "Fetching objects"
 msgstr "正在获取对象"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "读取 '%s' 失败"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "在主工作区的 '%s' 不是仓库目录"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "文件 '%s' 不包含工作区的绝对路径"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' 不存在"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' 不是一个 .git 文件,错误码 %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' 没有指回到 '%s'"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "不是一个目录"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git 不是一个文件"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr ".git 文件损坏"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr ".git 文件不正确"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "不是一个有效的路径"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "无法定位仓库,.git 不是一个文件"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "无法定位仓库,.git 文件没有指向一个仓库"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "无法定位仓库,.git 文件损坏"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "gitdir 不可读"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "gitdir 不正确"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "不是一个有效的目录"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "gitdir 文件不存在"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "无法读取 gitdir 文件(%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "读取过短(期望 %<PRIuMAX> 字节,读取 %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "无效的 gitdir 文件"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "gitdir 文件指向一个不存在的位置"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9105,11 +9502,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (使用 \"git rm <文件>...\" 标记解决方案)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "要提交的变更:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "尚未暂存以备提交的变更:"
 
@@ -9215,22 +9612,22 @@
 msgid "untracked content, "
 msgstr "未跟踪的内容, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "您的贮藏区当前有 %d 条记录"
 msgstr[1] "您的贮藏区当前有 %d 条记录"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "子模组已修改但尚未更新:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "要提交的子模组变更:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9238,7 +9635,7 @@
 "不要改动或删除上面的一行。\n"
 "其下所有内容都将被忽略。"
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9249,77 +9646,77 @@
 "花了 %.2f 秒才计算出分支的领先/落后范围。\n"
 "为避免,您可以使用 '--no-ahead-behind'。\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "您有尚未合并的路径。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (解决冲突并运行 \"git commit\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (使用 \"git merge --abort\" 终止合并)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "所有冲突已解决但您仍处于合并中。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (使用 \"git commit\" 结束合并)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "您正处于 am 操作过程中。"
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "当前的补丁为空。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (解决冲突,然后运行 \"git am --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (使用 \"git am --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (使用 \"git am --abort\" 恢复原有分支)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo 丢失。"
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "没有命令被执行。"
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "最后一条命令已完成(%d 条命令被执行):"
 msgstr[1] "最后的命令已完成(%d 条命令被执行):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (更多参见文件 %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "未剩下任何命令。"
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
@@ -9327,194 +9724,202 @@
 msgstr[1] "接下来要执行的命令(剩余 %d 条命令):"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (使用 \"git rebase --edit-todo\" 来查看和编辑)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "您在执行将分支 '%s' 变基到 '%s' 的操作。"
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "您在执行变基操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (解决冲突,然后运行 \"git rebase --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (使用 \"git rebase --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (使用 \"git rebase --abort\" 以检出原有分支)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (所有冲突已解决:运行 \"git rebase --continue\")"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "您在执行将分支 '%s' 变基到 '%s' 的操作时拆分提交。"
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "您在执行变基操作时拆分提交。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "  (一旦您工作目录提交干净后,运行 \"git rebase --continue\")"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "您在执行将分支 '%s' 变基到 '%s' 的操作时编辑提交。"
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "您在执行变基操作时编辑提交。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (使用 \"git commit --amend\" 修补当前提交)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (当您对您的修改满意后执行 \"git rebase --continue\")"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "拣选操作正在进行中。"
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "您在执行拣选提交 %s 的操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (解决冲突并运行 \"git cherry-pick --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (执行 \"git cherry-pick --continue\" 以继续)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (所有冲突已解决:运行 \"git cherry-pick --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (使用 \"git cherry-pick --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (使用 \"git cherry-pick --abort\" 以取消拣选操作)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "还原操作正在行中。"
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "您在执行反转提交 %s 的操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (解决冲突并执行 \"git revert --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (执行 \"git revert --continue\" 以继续)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (所有冲突已解决:执行 \"git revert --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (使用 \"git revert --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (使用 \"git revert --abort\" 以取消反转提交操作)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "您在执行从分支 '%s' 开始的二分查找操作。"
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
 msgstr "您在执行二分查找操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (使用 \"git bisect reset\" 以回到原有分支)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "您处于稀疏签出状态,包含 %d%% 的跟踪文件"
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "位于分支 "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "交互式变基操作正在进行中;至 "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "变基操作正在进行中;至 "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "头指针分离于 "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "头指针分离自 "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "当前不在任何分支上。"
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "初始提交"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "尚无提交"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "未跟踪的文件"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "忽略的文件"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9524,102 +9929,117 @@
 "耗费了 %.2f 秒以枚举未跟踪的文件。'status -uno' 也许能提高速度,\n"
 "但您需要小心不要忘了添加新文件(参见 'git help status')。"
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "未跟踪的文件没有列出%s"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr "(使用 -u 参数显示未跟踪的文件)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "没有修改"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "修改尚未加入提交(使用 \"git add\" 和/或 \"git commit -a\")\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "修改尚未加入提交\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "提交为空,但是存在尚未跟踪的文件(使用 \"git add\" 建立跟踪)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "提交为空,但是存在尚未跟踪的文件\n"
 
-#  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "无文件要提交(创建/拷贝文件并使用 \"git add\" 建立跟踪)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "无文件要提交\n"
 
-#  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "无文件要提交(使用 -u 显示未跟踪的文件)\n"
 
-#  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "无文件要提交,干净的工作区\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "尚无提交在 "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD(非分支)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "不同"
 
 #  译者:注意保持句尾空格
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "落后 "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "领先 "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "不能%s:您有未暂存的变更。"
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "另外,您的索引中包含未提交的变更。"
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "不能%s:您的索引中包含未提交的变更。"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "无法发送 IPC 命令"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "无法读取 IPC 响应"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "无法启动  accept_thread '%s'"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "无法启动 '%s' 的 worker[0]"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "删除 '%s' 失败"
@@ -9628,126 +10048,131 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<选项>] [--] <路径规格>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "不能 chmod %cx '%s'"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "意外的差异状态 %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "更新文件失败"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "删除 '%s'\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "刷新索引之后尚未被暂存的变更:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "不能读取索引"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "无法为写入打开 '%s'。"
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "不能生成补丁"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "编辑补丁失败"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "空补丁。异常终止。"
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "不能应用 '%s'"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "下列路径根据您的一个 .gitignore 文件而被忽略:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "演习"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "交互式拣选"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "交互式挑选数据块"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
 msgstr "编辑当前差异并应用"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "允许添加忽略的文件"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "更新已跟踪的文件"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "对已跟踪文件(暗含 -u)重新归一换行符"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "只记录,该路径稍后再添加"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "添加所有改变的已跟踪文件和未跟踪文件"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "忽略工作区中移除的路径(和 --no-all 相同)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "不添加,只刷新索引"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
 msgstr "跳过因出错不能添加的文件"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "检查在演习模式下文件(即使不存在)是否被忽略"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "覆盖列表里文件的可执行位"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "创建一个嵌入式仓库时给予警告"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "`git stash -p` 的后端"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9775,12 +10200,12 @@
 "\n"
 "参见 \"git help submodule\" 获取更多信息。"
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "正在添加嵌入式 git 仓库:%s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9790,47 +10215,51 @@
 "运行下面的命令来关闭本消息\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "添加文件失败"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run 与 --interactive/--patch 不兼容"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file 与 --interactive/--patch 不兼容"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file 与 --edit 不兼容"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A 和 -u 选项互斥"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "选项 --ignore-missing 只能和 --dry-run 同时使用"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "参数 --chmod 取值 '%s' 必须是 -x 或 +x"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file 与路径表达式参数不兼容"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul 需要 --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "没有指定文件,也没有文件被添加。\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -9840,105 +10269,105 @@
 "运行下面的命令来关闭本消息\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "不能解析作者脚本"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' 被 applypatch-msg 钩子删除"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "非法的输入行:'%s'。"
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "从 '%s' 拷贝注解到 '%s' 时失败"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "fseek 失败"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "无法解析补丁 '%s'"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "一次只能有一个 StGIT 补丁队列被应用"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "无效的时间戳"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "无效的日期行"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "无效的时区偏移值"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "补丁格式探测失败。"
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "创建目录 '%s' 失败"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "拆分补丁失败。"
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "当您解决这一问题,执行 \"%s --continue\"。"
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "如果您想要跳过这一补丁,则执行 \"%s --skip\"。"
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "若要复原至原始分支并停止补丁操作,执行 \"%s --abort\"。"
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr "补丁使用 format=flowed 格式发送,行尾的空格可能会丢失。"
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "补丁为空。"
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "在提交 %s 中缺失作者行"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "无效的身份标识:%.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "仓库缺乏必要的数据对象以进行三方合并。"
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr "使用索引来重建一个(三方合并的)基础目录树..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -9946,65 +10375,64 @@
 "您是否曾手动编辑过您的补丁?\n"
 "无法应用补丁到索引中的数据对象上。"
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "回落到基础版本上打补丁及进行三方合并..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "无法合并变更。"
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "正应用到一个空历史上"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "无法继续:%s 不存在。"
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "提交内容为:"
 
-#  译者:注意保持句尾空格
 #. 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:1658
+#: builtin/am.c:1706
 #, 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:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "无法写入索引文件"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "脏索引:不能应用补丁(脏文件:%s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
 msgstr "应用:%.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
 msgstr "没有变更 —— 补丁已经应用过。"
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "打补丁失败于 %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "用 'git am --show-current-patch=diff' 命令查看失败的补丁"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10014,7 +10442,7 @@
 "如果没有什么要添加到暂存区的,则很可能是其它提交已经引入了相同的变更。\n"
 "您也许想要跳过这个补丁。"
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10025,171 +10453,175 @@
 "您应该对已经冲突解决的每一个文件执行 'git add' 来标记已经完成。 \n"
 "你可以对 \"由他们删除\" 的文件执行 `git rm` 命令。"
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "不能解析对象 '%s'。"
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "清空索引失败"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr "您好像在上一次 'am' 失败后移动了 HEAD。未回退至 ORIG_HEAD"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "无效的 --patch-format 值:%s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "无效的 --show-current-patch 值:%s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, 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:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<选项>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<选项>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "以交互式方式运行"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "老的参数 —— 无作用"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "如果必要,允许使用三方合并。"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "静默模式"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "在提交说明中添加 Signed-off-by 尾注"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "使用 utf8 字符集(默认)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -k 参数"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -b 参数"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -m 参数"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "针对 mbox 格式,向 git-mailsplit 传递 --keep-cr 参数"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "不向 git-mailsplit 传递 --keep-cr 参数,覆盖 am.keepcr 的设置"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "丢弃裁切线前的所有内容"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "传递给 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
 msgid "pass it through git-apply"
 msgstr "传递给 git-apply"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "格式"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "补丁的格式"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "打补丁失败时显示的错误信息"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "冲突解决后继续应用补丁"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "和 --continue 同义"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
 msgstr "跳过当前补丁"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr "恢复原始分支并终止打补丁操作。"
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "恢复原始分支并终止打补丁操作"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "终止补丁操作但保持 HEAD 不变。"
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "终止补丁操作但保持 HEAD 不变"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "显示正在应用的补丁"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "将作者日期作为提交日期"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "用当前时间作为作者日期"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "使用 GPG 签名提交"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(内部使用,用于 git-rebase)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10197,16 +10629,16 @@
 "参数 -b/--binary 已经很长时间不做任何实质操作了,并且将被移除。\n"
 "请不要再使用它了。"
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "读取索引失败"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "之前的变基目录 %s 仍然存在,但却提供了 mbox。"
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10215,11 +10647,11 @@
 "发现了错误的 %s 目录。\n"
 "使用 \"git am --abort\" 删除它。"
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "解决操作未进行,我们不会继续。"
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "交互式模式需要命令行上提供补丁"
 
@@ -10262,25 +10694,10 @@
 msgstr "git bisect--helper --bisect-reset [<提交>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <状态> <版本> <好-术语> <坏-术语"
-">"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <命令> <好-术语> <坏-术语>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr "git bisect--helper --bisect-next-check <好-术语> <坏-术语> [<术语>]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10288,7 +10705,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10297,88 +10714,92 @@
 "git bisect--helper --bisect-start [--term-{new,bad}=<术语> --term-{old,good}"
 "=<术语>] [--no-checkout] [--first-parent] [<坏> [<好>...]] [--] [<路径>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<版本>]"
 
-#: builtin/bisect--helper.c:33
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-state (good|old) [<版本>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <文件>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<版本>|<范围>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "不能以 '%2$s' 模式打开文件 '%1$s'"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "不能写入文件 '%s'"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' 不是一个有效的术语"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "不能使用内置命令 '%s' 作为术语"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "不能修改术语 '%s' 的含义"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "请使用两个不同的术语"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "我们没有在二分查找。\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' 不是一个有效的提交"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr "不能检出原始 HEAD '%s'。尝试 'git bisect reset <提交>'。"
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "坏的 bisect_write 参数:%s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "无法获取版本 '%s' 的对象 ID"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "无法打开文件 '%s'"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
 msgstr "无效的命令:您当前正处于一个 %s/%s 二分查找中"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10387,7 +10808,7 @@
 "您需要给我至少一个 %s 和一个 %s 版本。\n"
 "为此您可以用 \"git bisect %s\" 和 \"git bisect %s\"。"
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10398,32 +10819,31 @@
 "然后需要提供我至少一个 %s 和一个 %s 版本。\n"
 "为此您可以用 \"git bisect %s\" 和 \"git bisect %s\" 命令。"
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "在只有一个 %s 提交的情况下二分查找"
 
-#  译者:注意保持句尾空格
 #. 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:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "您确认么[Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "未定义术语"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
 "and %s for the new state.\n"
 msgstr "您当前针对旧状态的术语是 %s,对新状态的术语是 %s。\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10432,145 +10852,159 @@
 "命令 'git bisect terms' 的参数 %s 无效。\n"
 "支持的选项有:--term-good|--term-old 和 --term-bad|--term-new。"
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "版本遍历设置失败\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "无法打开 '%s' 进行追加"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "'' 不是一个有效的术语"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "未识别的选项:'%s'"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' 看起来不是一个有效的版本"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "坏的 HEAD - 我需要一个 HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr "检出 '%s' 失败。尝试 'git bisect start <有效分支>'。"
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "不会在做了 cg-seek 的树上做二分查找"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "坏的 HEAD - 奇怪的符号引用"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "无效的引用:'%s'"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "您需要执行 \"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:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "您想让我为您这样做么[Y/n]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "请使用至少一个参数调用 `--bisect-state`"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "'git bisect %s' 只能带一个参数。"
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "坏的版本输入:%s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "坏的版本输入(不是提交):%s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "我们没有在二分查找。"
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "'%s'?? 您在说什么?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "不能读取文件 '%s' 来重放"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
 msgstr "清除二分查找状态"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "将二分查找的状态写入 BISECT_LOG"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "在一个二分查找状态中检查和设置术语"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "检查坏的或好的术语是否存在"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
 msgstr "打印二分查找术语"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
 msgstr "启动二分查找过程"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
 msgstr "查询下一个二分查找提交"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr "校验下一个二分查找状态然后检出下一个二分查找提交"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "标记引用的状态"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "列出到目前为止的二分查找步骤"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "从给定文件重放二分查找进程"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "跳过要检出的一些提交"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "BISECT_WRITE 无日志"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset 无需参数或者需要一个提交"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write 需要 4 或 5 个参数"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms 需要 3 个参数"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check 需要 2 或 3 个参数"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 需要 0 或 1 个参数"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next 需要 0 个参数"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next 需要 0 个参数"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log 需要 0 个参数"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "未提供日志文件"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10589,137 +11023,140 @@
 msgid "must end with a color"
 msgstr "必须以一个颜色结尾"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "设置 color.blame.repeatedLines 中的无效颜色 '%s'"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "设置 blame.coloring 中的无效取值"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "不能找到要忽略的版本 %s"
 
-#: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
 msgstr "增量式地显示发现的 blame 条目"
 
-#: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
 msgstr "不显示边界提交的对象名(默认:关闭)"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
+#: builtin/blame.c:869
+msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "不把根提交作为边界(默认:关闭)"
 
+#: builtin/blame.c:870
+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:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "强制显示进度报告"
+
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "显示命令消耗统计"
+msgid "show output score for blame entries"
+msgstr "显示 blame 条目的输出得分"
 
 #: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "强制进度显示"
-
-#: builtin/blame.c:874
-msgid "Show output score for blame entries"
-msgstr "显示判断 blame 条目位移的得分诊断信息"
-
-#: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
+msgid "show original filename (Default: auto)"
 msgstr "显示原始文件名(默认:自动)"
 
-#: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
 msgstr "显示原始的行号(默认:关闭)"
 
-#: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
+#: builtin/blame.c:875
+msgid "show in a format designed for machine consumption"
 msgstr "显示为一个适合机器读取的格式"
 
-#: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
+#: builtin/blame.c:876
+msgid "show porcelain format with per-line commit information"
 msgstr "为每一行显示机器适用的提交信息"
 
-#: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
+#: builtin/blame.c:877
+msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "使用和 git-annotate 相同的输出模式(默认:关闭)"
 
-#: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
+#: builtin/blame.c:878
+msgid "show raw timestamp (Default: off)"
 msgstr "显示原始时间戳(默认:关闭)"
 
-#: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
+#: builtin/blame.c:879
+msgid "show long commit SHA1 (Default: off)"
 msgstr "显示长的 SHA1 提交号(默认:关闭)"
 
-#: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
+#: builtin/blame.c:880
+msgid "suppress author name and timestamp (Default: off)"
 msgstr "隐藏作者名字和时间戳(默认:关闭)"
 
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
+#: builtin/blame.c:881
+msgid "show author email instead of name (Default: off)"
 msgstr "显示作者的邮箱而不是名字(默认:关闭)"
 
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
+#: builtin/blame.c:882
+msgid "ignore whitespace differences"
 msgstr "忽略空白差异"
 
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "版本"
 
-#: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
 msgstr "在执行 blame 操作时忽略 <版本>"
 
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
 msgstr "忽略来自 <文件> 中的版本"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:885
 msgid "color redundant metadata from previous line differently"
 msgstr "使用颜色间隔输出与前一行不同的重复元信息"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "依据时间着色"
 
-#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
 msgstr "花费额外的循环来找到更好的匹配"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "使用来自 <文件> 的修订集而不是调用 git-rev-list"
 
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "使用 <文件> 的内容作为最终的图片"
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
+msgstr "使用 <文件> 的内容作为最终的镜像"
 
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "得分"
 
-#: builtin/blame.c:892
-msgid "Find line copies within and across files"
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
 msgstr "找到文件内及跨文件的行拷贝"
 
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
 msgstr "找到文件内及跨文件的行移动"
 
-#: builtin/blame.c:894
+#: builtin/blame.c:892
 msgid "range"
 msgstr "范围"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "只处理在 <开始>,<结束> 范围内的行,或者函数:<函数名>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress 不能和 --incremental 或 --porcelain 同时使用"
 
@@ -10731,18 +11168,18 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "4 年 11 个月前"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "文件 %s 只有 %lu 行"
 msgstr[1] "文件 %s 只有 %lu 行"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "追踪代码行"
 
@@ -10812,117 +11249,107 @@
 msgid "Update of config-file failed"
 msgstr "更新配置文件失败"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "不能将 -a 和 -d 同时使用"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "无法查询 HEAD 指向的提交对象"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "无法删除检出于 '%2$s' 的分支 '%1$s'。"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "未能找到远程跟踪分支 '%s'。"
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "分支 '%s' 未发现。"
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "无法删除远程跟踪分支 '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "无法删除分支 '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "已删除远程跟踪分支 %s(曾为 %s)。\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "已删除分支 %s(曾为 %s)。\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "不能解析格式化字符串"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "不能解析 HEAD 提交"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) 指向 refs/heads/ 之外"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "分支 %s 正被变基到 %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "分支 %s 正被二分查找于 %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "无法拷贝当前分支因为不处于任何分支上。"
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr "无法重命名当前分支因为不处于任何分支上。"
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "无效的分支名:'%s'"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "分支重命名失败"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "分支拷贝失败"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "已为错误命名的分支 '%s' 创建了一个副本"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "已将错误命名的分支 '%s' 重命名"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "分支重命名为 %s,但 HEAD 没有更新!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "分支被重命名,但更新配置文件失败"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr "分支已拷贝,但更新配置文件失败"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -10933,209 +11360,209 @@
 "  %s\n"
 "以 '%c' 开头的行将被过滤。\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "通用选项"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "显示哈希值和主题,若参数出现两次则显示上游分支"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "不显示信息"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "设置跟踪模式(参见 git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "不要使用"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "上游"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "改变上游信息"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "取消上游信息的设置"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "使用彩色输出"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "作用于远程跟踪分支"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "只打印包含该提交的分支"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "只打印不包含该提交的分支"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "具体的 git-branch 动作:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "列出远程跟踪及本地分支"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "删除完全合并的分支"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "删除分支(即使没有合并)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "移动/重命名一个分支,以及它的引用日志"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "移动/重命名一个分支,即使目标已存在"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "拷贝一个分支和它的引用日志"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "拷贝一个分支,即使目标已存在"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "列出分支名"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "显示当前分支名"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "创建分支的引用日志"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "标记分支的描述"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "强制创建、移动/重命名、删除"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "只打印已经合并的分支"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "只打印尚未合并的分支"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "以列的方式显示分支"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "对象"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "只打印指向该对象的分支"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "排序和过滤属于大小写不敏感"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "输出格式"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD 没有位于 /refs/heads 之下!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column 和 --verbose 不兼容"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "必须提供分支名"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "不能向分离头指针提供描述"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "不能为一个以上的分支编辑描述"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "分支 '%s' 尚无提交。"
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "没有分支 '%s'。"
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "为拷贝操作提供了太多的分支名"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "为重命名操作提供了太多的参数"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "为设置新上游提供了太多的参数"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr "无法设置 HEAD 的上游为 %s,因为 HEAD 没有指向任何分支。"
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "没有此分支 '%s'"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "分支 '%s' 不存在"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "为取消上游设置操作提供了太多的参数"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "无法取消 HEAD 的上游设置因为它没有指向一个分支"
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "分支 '%s' 没有上游信息"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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>?"
@@ -11143,7 +11570,7 @@
 "'git branch' 的 -a 和 -r 选项不带一个分支名。\n"
 "您是否想要使用:-a|-r --list <模式>?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11209,38 +11636,38 @@
 "请检查下面错误报告中余下的内容。\n"
 "您可以删除任何您不想共享的内容。\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "指定错误报告文件的目标位置"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "指定文件的 strftime 格式后缀"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "不能为 '%s' 创建先导目录"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "系统信息"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "启用的钩子"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "不能在 '%s' 创建新文件"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "无法写入 %s"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "在 '%s' 创建了新报告。\n"
@@ -11261,19 +11688,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <文件> [<引用名>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "不显示进度表"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "显示进度表"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "在对象写入阶段显示进度表"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "当进度表显示时类似于 --all-progress"
 
@@ -11415,8 +11842,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "输入和输出的记录使用 NUL 字符终结"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "不显示进度报告"
 
@@ -11428,27 +11855,27 @@
 msgid "ignore index when checking"
 msgstr "检查时忽略索引"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "不能同时指定路径及 --stdin 参数"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z 需要和 --stdin 参数共用才有意义"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "未指定路径"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "参数 --quiet 只在提供一个路径名时有效"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "不能同时提供 --quiet 和 --verbose 参数"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching 选项只在使用 --verbose 时有效"
 
@@ -11469,165 +11896,169 @@
 msgid "no contacts specified"
 msgstr "未指定联系地址"
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
-msgstr "git checkout-index [<选项>] [--] [<文件>...]"
+#: builtin/checkout--worker.c:110
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<选项>]"
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr "索引值应该取值 1 到 3 或者 all"
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr "检出索引区的所有文件"
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr "强制覆盖现有的文件"
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr "存在或不在索引中的文件都没有警告"
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr "不检出新文件"
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr "更新索引中文件的状态信息"
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr "从标准输入读取路径列表"
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr "将内容写入临时文件"
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr "字符串"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr "在创建文件时,在前面加上 <字符串>"
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr "git checkout-index [<选项>] [--] [<文件>...]"
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr "索引值应该取值 1 到 3 或者 all"
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr "检出索引区的所有文件"
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr "强制覆盖现有的文件"
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr "存在或不在索引中的文件都没有警告"
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr "不检出新文件"
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr "更新索引中文件的状态信息"
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr "从标准输入读取路径列表"
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr "将内容写入临时文件"
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "从指定暂存区中拷出文件"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<选项>] <分支>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<选项>] [<分支>] -- <文件>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<选项>] [<分支>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<选项>] [--source=<分支>] <文件>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "路径 '%s' 没有我们的版本"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "路径 '%s' 没有他们的版本"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "路径 '%s' 没有全部必需的版本"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "路径 '%s' 没有必需的版本"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "path '%s':无法合并"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "无法为 '%s' 添加合并结果"
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "重新创建了 %d 个合并冲突"
 msgstr[1] "重新创建了 %d 个合并冲突"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "从 %2$s 更新了 %1$d 个路径"
 msgstr[1] "从 %2$s 更新了 %1$d 个路径"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, 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:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' 不能在更新路径时使用"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' 不能和 %s 同时使用"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "不能同时更新路径并切换到分支'%s'。"
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "'%s' 或 '%s' 都没有指定"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "未指定 '%2$s' 时,必须使用 '%1$s'"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' 或 '%s' 不能和 %s 一起使用"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "路径 '%s' 未合并"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "您需要先解决当前索引的冲突"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11636,51 +12067,51 @@
 "不能继续,下列文件有暂存的修改:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "不能对 '%s' 执行 reflog 操作:%s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD 目前位于"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "不能更新 HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "重置分支 '%s'\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "已经位于 '%s'\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "切换并重置分支 '%s'\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "切换到一个新分支 '%s'\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "切换到分支 '%s'\n"
 
 #  译者:注意保持前导空格
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... 及其它 %d 个。\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11701,7 +12132,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11728,19 +12159,19 @@
 " git branch <新分支名> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "在版本遍历时遇到内部错误"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "之前的 HEAD 位置是"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "您位于一个尚未初始化的分支"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11749,7 +12180,7 @@
 "'%s' 既可以是一个本地文件,也可以是一个跟踪分支。\n"
 "请使用 --(和可选的 --no-guess)来消除歧义"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -11768,51 +12199,51 @@
 "如果您总是喜欢使用模糊的简短分支名 <名称>,而不喜欢如 'origin' 的远程\n"
 "名称,可以在配置中设置 checkout.defaultRemote=origin。"
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' 匹配多个(%d 个)远程跟踪分支"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "只期望一个引用"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "应只有一个引用,却给出了 %d 个"
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "无效引用:%s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "引用不是一个树:%s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "期望一个分支,得到标签 '%s'"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "期望一个分支,得到远程分支 '%s'"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "期望一个分支,得到 '%s'"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "期望一个分支,得到提交 '%s'"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11820,7 +12251,7 @@
 "不能在合并时切换分支\n"
 "考虑使用 \"git merge --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11828,7 +12259,7 @@
 "不能在一个 am 会话期间切换分支\n"
 "考虑使用 \"git am --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11836,7 +12267,7 @@
 "不能在变基时切换分支\n"
 "考虑使用 \"git rebase --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11844,7 +12275,7 @@
 "不能在拣选时切换分支\n"
 "考虑使用 \"git cherry-pick --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11852,214 +12283,207 @@
 "不能在还原时切换分支\n"
 "考虑使用 \"git revert --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
 msgstr "您在执行二分查找时切换分支"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "路径不能和切换分支同时使用"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' 不能和切换分支同时使用"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' 不能和 '%s' 同时使用"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' 不带 <起始点>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "不能切换分支到一个非提交 '%s'"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "缺少分支或提交参数"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "强制显示进度报告"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "和新的分支执行三方合并"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "风格"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "冲突输出风格(merge 或 diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "HEAD 从指定的提交分离"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "为新的分支设置上游信息"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "强制检出(丢弃本地修改)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "新分支"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "新的没有父提交的分支"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "更新忽略的文件(默认)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr "不检查指定的引用是否被其他工作区所占用"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "对尚未合并的文件检出我们的版本"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "对尚未合并的文件检出他们的版本"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "对路径不做稀疏检出的限制"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c、-%c 和 --orphan 是互斥的"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p 和 --overlay 互斥"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track 需要一个分支名"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "缺少分支名,尝试 -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "无法解析 %s"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "无效的路径规格"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' 不是一个提交,不能基于它创建分支 '%s'"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout:--detach 不能接收路径参数 '%s'"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file 与 --detach 不兼容"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file 与 --patch 不兼容"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 "git checkout:在从索引检出时,--ours/--theirs、--force 和 --merge 不兼容。"
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "您必须指定一个要恢复的路径"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "分支"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "创建并检出一个新的分支"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "创建/重置并检出一个分支"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "为新的分支创建引用日志"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "二次猜测 'git checkout <无此分支>'(默认)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "使用叠加模式(默认)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "创建并切换一个新分支"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "创建/重置并切换一个分支"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "二次猜测 'git switch <无此分支>'"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "丢弃本地修改"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "要检出哪一个树"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "恢复索引"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "恢复工作区(默认)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "忽略未合并条目"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "使用叠加模式"
 
@@ -12089,11 +12513,6 @@
 msgid "Would skip repository %s\n"
 msgstr "将忽略仓库 %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "删除 %s 失败"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12204,8 +12623,8 @@
 msgstr "删除整个目录"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "模式"
@@ -12244,162 +12663,167 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<选项>] [--] <仓库> [<路径>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "不克隆浅仓库"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "不创建一个检出"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "创建一个纯仓库"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "创建一个镜像仓库(也是纯仓库)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "从本地仓库克隆"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "不使用本地硬链接,始终复制"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "设置为共享仓库"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "路径规格"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "在克隆时初始化子模组"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "并发克隆的子模组的数量"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "模板目录"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "模板目录将被使用"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "参考仓库"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "仅在克隆时参考 --reference 指向的本地仓库"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "名称"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "使用 <名称> 而不是 'origin' 去跟踪上游"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "检出 <分支> 而不是远程 HEAD"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "远程 git-upload-pack 路径"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "深度"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "创建一个指定深度的浅克隆"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "时间"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "从一个特定时间创建一个浅克隆"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "版本"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "深化浅克隆的历史,除了特定版本"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "只克隆一个分支、HEAD 或 --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "不要克隆任何标签,并且后续获取操作也不下载它们"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "子模组将以浅下载模式克隆"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "git目录"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "git目录和工作区分离"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "key=value"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "在新仓库中设置配置信息"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "server-specific"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "传输选项"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "只使用 IPv4 地址"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "只使用 IPv6 地址"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "任何克隆的子模组将使用它们的远程跟踪分支"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "初始化稀疏检出文件,只包含根目录文件"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12407,42 +12831,42 @@
 "无法猜到目录名。\n"
 "请在命令行指定一个目录"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: 不能为 '%s' 添加一个备用:%s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s 存在且不是一个目录"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "无法在 '%s' 上启动迭代器"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "创建链接 '%s' 失败"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "拷贝文件至 '%s' 失败"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "无法在 '%s' 上迭代"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "完成。\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12452,144 +12876,144 @@
 "您可以通过 'git status' 检查哪些已被检出,然后使用命令\n"
 "'git restore --source=HEAD :/' 重试\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "不能发现要克隆的远程分支 %s。"
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "不能更新 %s"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "无法初始化稀疏检出"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "远程 HEAD 指向一个不存在的引用,无法检出。\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "不能检出工作区"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "无法将参数写入配置文件"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "无法执行 repack 来清理"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "无法删除临时的 alternates 文件"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "太多参数。"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "您必须指定一个仓库来克隆。"
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "--bare 和 --origin %s 选项不兼容。"
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare 和 --separate-git-dir 选项不兼容。"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "仓库 '%s' 不存在"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "深度 %s 不是一个正数"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "目标路径 '%s' 已经存在,并且不是一个空目录。"
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "仓库路径 '%s' 已经存在,并且不是一个空目录。"
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "工作区 '%s' 已经存在。"
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "不能为 '%s' 创建先导目录"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "不能创建工作区目录 '%s'"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "克隆到纯仓库 '%s'...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "正克隆到 '%s'...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr "clone --recursive 和 --reference 以及 --reference-if-able 不兼容"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' 不是一个有效的远程名称"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "源仓库是浅克隆,忽略 --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local 被忽略"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "远程分支 %s 在上游 %s 未发现"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "您似乎克隆了一个空仓库。"
 
@@ -12606,19 +13030,19 @@
 msgstr "要使用的布局"
 
 #: builtin/column.c:30
-msgid "Maximum width"
+msgid "maximum width"
 msgstr "最大宽度"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
+msgid "padding space on left border"
 msgstr "左边框的填充空间"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
+msgid "padding space on right border"
 msgstr "右边框的填充空间"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
+msgid "padding space between columns"
 msgstr "两列之间的填充空间"
 
 #: builtin/column.c:51
@@ -12648,13 +13072,13 @@
 msgstr "无法找到和 %s 匹配的对象目录"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "目录"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+msgid "the object directory to store the graph"
 msgstr "保存图形的对象目录"
 
 #: builtin/commit-graph.c:83
@@ -12742,7 +13166,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "忽略重复的父提交 %s"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "不是一个有效的对象名 %s"
@@ -12770,13 +13194,13 @@
 msgid "id of a parent commit object"
 msgstr "父提交对象 ID"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "说明"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
 msgstr "提交说明"
 
@@ -12784,7 +13208,7 @@
 msgid "read commit log message from file"
 msgstr "从文件中读取提交说明"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG 提交签名"
@@ -12857,110 +13281,115 @@
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "解包 HEAD 树对象失败"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file 和 -a 在一起没有意义"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "参数 --include/--only 不跟路径没有意义。"
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "不能创建临时索引"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "交互式添加失败"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "无法更新临时索引"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "不能更新树的主缓存"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "无法写 new_index 文件"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "在合并过程中不能做部分提交。"
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "在拣选过程中不能做部分提交。"
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "在变基过程中不能做部分提交。"
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "无法读取索引"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "无法写临时索引文件"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "提交 '%s' 缺少作者信息"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "提交 '%s' 有格式错误的作者信息"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "格式错误的 --author 参数"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr "无法选择一个未被当前提交说明使用的注释字符"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "不能查询提交 %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(正从标准输入中读取日志信息)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "不能从标准输入中读取日志信息"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "不能读取日志文件 '%s'"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "不能将 -m 和 --fixup 组合使用:%s"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "不能读取 SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "不能读取 MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "不能写提交模版"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -12973,7 +13402,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "然后重试。\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -12986,7 +13415,7 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "然后重试。\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -12995,7 +13424,7 @@
 "请为您的变更输入提交说明。以 '%c' 开始的行将被忽略,而一个空的提交\n"
 "说明将会终止提交。\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13006,324 +13435,373 @@
 "也可以删除它们。一个空的提交说明将会终止提交。\n"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%s作者:  %.*s <%.*s>"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%s日期:  %s"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%s提交者:%.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "无法读取索引"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "无法将尾注传递给 --trailers"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "无法创建树对象"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "请使用 -m 或 -F 选项提供提交说明。\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr "--author '%s' 不是 '姓名 <邮箱>' 格式,且未能在现有作者中找到匹配"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "无效的忽略模式 '%s'"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "无效的未追踪文件参数 '%s'"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long 和 -z 选项不兼容"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "您正处于一个合并过程中 -- 无法改写说明。"
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "您正处于一个拣选过程中 -- 无法改写说明。"
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr "不能将 --fixup 的 reword 选项和路径 '%s' 组合使用"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr "--fixup 的 reword 选项和 --patch/--interactive/--all/--include/--only 互斥"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "同时使用 --reset-author 和 --author 没有意义"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "您没有可修补的提交。"
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "您正处于一个合并过程中 -- 无法修补提交。"
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "您正处于一个拣选过程中 -- 无法修补提交。"
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "您正处于一个变基过程中 -- 无法修补提交。"
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "选项 --squash 和 --fixup 不能同时使用"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "只能用一个 -c/-C/-F/--fixup 选项。"
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "选项 -m 不能和 -c/-C/-F 同时使用。"
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author 只能和 -C、-c 或 --amend 同时使用。"
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr "只能用一个 --include/--only/--all/--interactive/--patch 选项。"
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "未知选项:--fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "路径  '%s ...' 和 -a 选项同时使用没有意义"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "以简洁的格式显示状态"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "显示分支信息"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "显示贮藏区信息"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "计算完整的领先/落后值"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "版本"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "机器可读的输出"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "以长格式显示状态(默认)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "条目以 NUL 字符结尾"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "模式"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
 msgstr ""
 "显示已忽略的文件,可选模式:traditional、matching、no。(默认:traditional)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "何时"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 "忽略子模组的更改,“何时”的可选参数:all、dirty、untracked。(默认:all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "以列的方式显示未跟踪的文件"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "不检测重命名"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "检测重命名,可以设置索引相似度"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "不支持已忽略和未跟踪文件参数的组合"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "提交成功后不显示概述信息"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "在提交说明模板里显示差异"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "提交说明选项"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "从文件中读取提交说明"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "作者"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "提交时覆盖作者"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "日期"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "提交时覆盖日期"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "提交"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "重用并编辑指定提交的提交说明"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "重用指定提交的提交说明"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr "使用 autosquash 格式的提交说明用以修正指定的提交"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]提交"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr "使用自动挤压格式的提交说明对指定的提交进行修正、修补或改写说明"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
-msgstr "使用 autosquash 格式的提交说明用以压缩至指定的提交"
+msgstr "使用自动挤压格式的提交说明用以挤压至指定的提交"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "现在将该提交的作者改为我(和 -C/-c/--amend 参数共用)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "尾注"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "添加自定义尾注"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "添加 Signed-off-by 尾注"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "使用指定的模板文件"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "强制编辑提交"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "在提交说明模板里包含状态信息"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "提交内容选项"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "提交所有改动的文件"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "添加指定的文件到索引区等待提交"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "交互式添加文件"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "交互式添加变更"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "只提交指定的文件"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "绕过 pre-commit 和 commit-msg 钩子"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "显示将要提交的内容"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "修改先前的提交"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "绕过 post-rewrite 钩子"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "允许一个空提交"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "允许空的提交说明"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "损坏的 MERGE_HEAD 文件(%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "不能读取 MERGE_MODE"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "不能读取提交说明:%s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "终止提交因为提交说明为空。\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "终止提交;您未更改来自模版的提交说明。\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "终止提交因为提交说明的正文为空。\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13660,7 +14138,7 @@
 msgid "print sizes in human readable format"
 msgstr "以用户可读的格式显示大小"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -13673,11 +14151,11 @@
 "\n"
 "\tchmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "输出调试信息到标准错误"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr "credential-cache--daemon 不可用,不支持 unix 套接字"
 
@@ -13862,70 +14340,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base 仅适用于两个提交"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s':不是一个正规文件或符号链接"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "无效选项:%s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s:无合并基线"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "不是 git 仓库"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "提供了无效对象 '%s'。"
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "提供了超过两个数据对象:'%s'"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "无法处理的对象 '%s'。"
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s:多条合并基线,使用 %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<选项>] [<提交> [<提交>]] [--] [<路径>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "失败:%d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "无法读取符号链接 %s"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "无法读取符号链接文件 %s"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "无法读取符号链接 %2$s 指向的对象 %1$s"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -13933,83 +14411,83 @@
 "不支持在目录比较模式('-d' 和 '--dir-diff')中采用组合差异格式('-c' 和 '--"
 "cc')。"
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "两个文件都被修改:'%s' 和 '%s'。"
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "工作区文件被留了下来。"
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "临时文件存在于 '%s'。"
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "您可能想要清理或者恢复它们。"
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "使用 `diff.guitool` 代替 `diff.tool`"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "执行一个全目录差异比较"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "启动差异比较工具之前不提示"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "在 dir-diff 模式中使用符号链接"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "工具"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "使用指定的差异比较工具"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "显示可以用在 `--tool` 参数后的差异工具列表"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
 msgstr "当执行 diff 工具返回非零退出码时,使 'git-difftool' 退出"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "指定一个用于查看差异的自定义命令"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "传递给 `diff`"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool 要求工作区或者 --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff 和 --no-index 不兼容"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui、--tool 和 --extcmd 互斥"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "没有为 --tool=<工具> 参数提供 <工具>"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "没有为 --extcmd=<命令> 参数提供 <命令>"
 
@@ -14070,39 +14548,39 @@
 msgstr "选择使用备用编码处理提交说明"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
+msgid "dump marks to this file"
 msgstr "把标记存储到这个文件"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
 msgstr "从这个文件导入标记"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "从该文件导入标记(如果存在的话)"
+msgid "import marks from this file if it exists"
+msgstr "如果文件存在,从该文件导入标记"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "当标签缺少标记者字段时,假装提供一个"
+msgid "fake a tagger when tags lack one"
+msgstr "当标签缺少标记人字段时,假装提供一个"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
+msgid "output full tree for each commit"
 msgstr "每次提交都输出整个树"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
+msgid "use the done feature to terminate the stream"
 msgstr "使用 done 功能来终止流"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
+msgid "skip output of blob data"
 msgstr "跳过数据对象的输出"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "引用规格"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
+msgid "apply refspec to exported refs"
 msgstr "对导出的引用应用引用规格"
 
 #: builtin/fast-export.c:1224
@@ -14118,15 +14596,15 @@
 msgstr "在匿名输出中将 <from> 转换为 <to>"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
+msgid "reference parents which are not in fast-export stream by object id"
 msgstr "引用父对象 ID 不在 fast-export 流中"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
+msgid "show original object ids of blobs/commits"
 msgstr "显示数据对象/提交的原始对象 ID"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
+msgid "label tags with mark ids"
 msgstr "对带有标记 ID 的标签做标记"
 
 #: builtin/fast-export.c:1256
@@ -14166,7 +14644,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "不带 --allow-unsafe-features 的输入中禁止使用功能 '%s'"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Lockfile 已创建但未报告:%s"
@@ -14187,190 +14665,202 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<选项>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel 不能为负数"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "从所有的远程抓取"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "为 git pull/fetch 设置上游"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "追加到 .git/FETCH_HEAD 而不是覆盖它"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "使用原子事务更新引用"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "上传包到远程的路径"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "强制覆盖本地引用"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "从多个远程抓取"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "抓取所有的标签和关联对象"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "不抓取任何标签(--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "子模组获取的并发数"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr "修改引用规格以将所有引用放入 refs/prefetch/"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "清除远程已经不存在的分支的跟踪分支"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "清除远程不存在的本地标签,并且替换变更标签"
 
 #  译者:可选值,不能翻译
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "控制子模组的递归抓取"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "将获取到的引用写入 FETCH_HEAD 文件"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "保持下载包"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "允许更新 HEAD 引用"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "深化浅克隆的历史"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "基于时间来深化浅克隆的历史"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "转换为一个完整的仓库"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "在子模组路径输出的前面加上此目录"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr "递归获取子模组的缺省值(比配置文件优先级低)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "接受更新 .git/shallow 的引用"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "引用映射"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "指定获取操作的引用映射"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "报告我们只拥有从该对象开始可达的对象"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr "不获取包文件;而是打印协商的祖先提交"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "获取后执行 'maintenance --auto'"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "在所有更新分支上检查强制更新"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "抓取后写提交图"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
-msgstr "从标准输入获取引用表达式"
+msgstr "从标准输入获取引用规格"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "无法发现远程 HEAD 引用"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "配置变量 fetch.output 包含无效值 %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "对象 %s 未发现"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[最新]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[已拒绝]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "当前分支下不能执行获取操作"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[标签更新]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "不能更新本地引用"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "会破坏现有的标签"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[新标签]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[新分支]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[新引用]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "强制更新"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "非快进"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14380,7 +14870,7 @@
 "要重新启用,请使用 '--show-forced-updates' 选项或运行\n"
 "'git config fetch.showForcedUpdates true'。"
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14391,22 +14881,22 @@
 "花了 %.2f 秒来检查强制更新。您可以使用 '--no-show-forced-updates'\n"
 "或运行 'git config fetch.showForcedUpdates false' 以避免此项检查。\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s 未发送所有必需的对象\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "拒绝 %s 因为浅克隆不允许被更新"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "来自 %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14416,57 +14906,57 @@
 " 'git remote prune %s' 来删除旧的、有冲突的分支"
 
 #  译者:注意保持前导空格
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s 将成为悬空状态)"
 
 #  译者:注意保持前导空格
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s 已成为悬空状态)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[已删除]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(无)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "拒绝获取到非纯仓库的当前分支 %s"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "选项 \"%s\" 的值 \"%s\" 对于 %s 是无效的"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "选项 \"%s\" 为 %s 所忽略\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "检测到多分支,和 --set-upstream 不兼容"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "没有为一个远程跟踪分支设置上游"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "没有为一个远程标签设置上游"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "未知的分支类型"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14474,71 +14964,83 @@
 "未发现源分支。\n"
 "您需要使用 --set-upstream 选项指定一个分支。"
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "正在获取 %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "不能获取 %s"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "无法获取 '%s'(退出码:%d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr "未指定远程仓库。请通过一个 URL 或远程仓库名指定,用以获取新提交。"
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "您需要指定一个标签名称。"
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "--deepen 不支持负数深度"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen 和 --depth 是互斥的"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth 和 --unshallow 不能同时使用"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "对于一个完整的仓库,参数 --unshallow 没有意义"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all 不能带一个仓库参数"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all 带引用规格没有任何意义"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "没有这样的远程或远程组:%s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "获取组并指定引用规格没有意义"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "在使用 --negotiate-only 时必须提供远程仓库"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "协议不支持 --negotiate-only,退出。"
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr "只可以将 --filter 用于在 extensions.partialClone 中配置的远程仓库"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--atomic 仅在从一个远程仓库获取的时候可用"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin 仅在从一个远程仓库获取的时候可用"
 
@@ -14583,47 +15085,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<提交>]] [--no-contains [<提交>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "引用占位符适用于 shells"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "引用占位符适用于 perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "引用占位符适用于 python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "引用占位符适用于 Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "只显示 <n> 个匹配的引用"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "遵照格式中的颜色输出"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "只打印指向给定对象的引用"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "只打印已经合并的引用"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "只打印没有合并的引用"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "只打印包含该提交的引用"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "只打印不包含该提交的引用"
 
@@ -14643,32 +15145,32 @@
 msgid "missing --config=<config>"
 msgstr "缺少 --config=<配置>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "未知"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "%s %s 错误:%s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "%s %s 警告:%s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "来自 %7s %s 的损坏的链接"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "链接中错误的对象类型"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14677,211 +15179,211 @@
 "损坏的链接来自于 %7s %s\n"
 "              到 %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "缺失 %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "不可达 %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "悬空 %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "不能创建 lost-found"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "不能完成 '%s'"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "正在检查 %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "正在检查连通性(%d 个对象)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "正在检查 %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "损坏的链接"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "根 %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
 msgstr "标记 %s %s (%s) 于 %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s:对象损坏或丢失"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s:无效的引用日志条目 %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "正在检查引用日志 %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s:无效的 sha1 指针 %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s:不是一个提交"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "注意:无默认引用"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s:对象损坏或丢失:%s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s:不能解析对象:%s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "坏的 sha1 文件:%s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "正在检查对象目录"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "正在检查对象目录"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "正在检查 %s 链接"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "无效的 %s"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s 指向奇怪的东西(%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s:分离头指针的指向不存在"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "注意:%s 指向一个尚未诞生的分支(%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "正在检查缓存树"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s:cache-tree 中无效的 sha1 指针"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "cache-tree 中非树对象"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<选项>] [<对象>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "显示不可达的对象"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "显示悬空的对象"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "报告标签"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "报告根节点"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "将索引亦作为检查的头节点"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "将引用日志作为检查的头节点(默认)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "也考虑包和备用对象"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "仅检查连通性"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "启用更严格的检查"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "将悬空对象写入 .git/lost-found 中"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "显示进度"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "显示可达对象的详细名称"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "正在检查对象"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s:对象缺失"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "无效的参数:期望 sha1,得到 '%s'"
@@ -14890,27 +15392,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<选项>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "对 %s 调用 fstat 失败:%s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "无法解析 '%s' 值 '%s'"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "不能读取 '%s'"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -14924,192 +15426,219 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "清除未引用的对象"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "更彻底(增加运行时间)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "启用自动垃圾回收模式"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "强制执行 gc 即使另外一个 gc 正在执行"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "除了最大的包之外,对所有其它包文件重新打包"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "解析 gc.logexpiry 的值 %s 失败"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "解析清除期限值 %s 失败"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "自动在后台执行仓库打包以求最佳性能。\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "自动打包仓库以求最佳性能。\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "手工维护参见 \"git help gc\"。\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
 "已经有一个 gc 正运行在机器 '%s' pid %<PRIuMAX>(如果不是,使用 --force)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr "有太多不可达的松散对象,运行 'git prune' 删除它们。"
 
-#: builtin/gc.c:708
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<任务>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "--no-schedule 不被允许"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "无法识别的 --schedule 参数 '%s'"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "无法写入提交图"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "无法填充远程仓库"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "无法预先获取远程仓库"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "无法启动 'git pack-objects' 进程"
 
-#: builtin/gc.c:1041
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "无法完成 'git pack-objects' 进程"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "无法写入多包索引"
 
-#: builtin/gc.c:1111
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "'git multi-pack-index expire' 失败"
 
-#: builtin/gc.c:1172
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "'git multi-pack-index repack' 失败"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr "跳过增量重新打包任务,因为 core.multiPackIndex 被禁用"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "锁文件 '%s' 已存在,跳过维护"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "任务 '%s' 失败"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' 不是一个有效的任务"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "任务 '%s' 不能被多次选择"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "基于仓库状态来运行任务"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "频率"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "基于频率运行任务"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "不通过标准错误报告进度或其它信息"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "任务"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "运行一个特定的任务"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "最多使用 --auto 和 --schedule=<频率> 其中之一"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "无法运行 'git config'"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "另外一个进程正运行于后台维护"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "无法扩展路径 '%s'"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "无法启动 launchctl"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "无法为 '%s' 创建目录"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "无法引导服务 %s"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "无法创建临时 XML 文件"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "无法启动计划任务"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr "无法执行 'crontab -l',您的系统可能不支持 'cron'"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr "无法运行 'crontab',您的系统可能不支持 'cron'"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "无法打开 'crontab' 的标准输入"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "'crontab' 终止"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "另外一个进程正运行于后台维护"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "无法将仓库添加到全局配置"
 
-#: builtin/gc.c:1615
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <子命令> [<选项>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "无效子命令:%s"
@@ -15118,12 +15647,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<选项>] [-e] <模式> [<版本>...] [[--] <路径>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep:无法创建线程:%s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "为 %2$s 设定的线程数 (%1$d) 无效"
@@ -15132,204 +15661,199 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "没有线程支持,忽略 %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "无法读取树(%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "无法抓取来自于 %s 类型的对象"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "开关 `%c' 期望一个数字值"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "在索引区搜索而不是在工作区"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "在未被 git 管理的内容中查找"
 
-#  译者:中文字符串拼接,可删除前导空格
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "在跟踪和未跟踪的文件中搜索"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "忽略 '.gitignore' 包含的文件"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "在每一个子模组中递归搜索"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "显示未匹配的行"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "不区分大小写匹配"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "只在单词边界匹配模式"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "把二进制文件当做文本处理"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "不在二进制文件中匹配模式"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "用 textconv 过滤器处理二进制文件"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "在子目录中寻找(默认)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "最多以指定的深度向下寻找"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "使用扩展的 POSIX 正则表达式"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "使用基本的 POSIX 正则表达式(默认)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "把模式解析为固定的字符串"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "使用 Perl 兼容的正则表达式"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "显示行号"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "显示第一个匹配的列号"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "不显示文件名"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "显示文件名"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "显示相对于顶级目录的文件名"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "只显示文件名而不显示匹配的行"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "和 --files-with-matches 同义"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "只显示未匹配的文件名"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "在文件名后输出 NUL 字符"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "只显示行中的匹配的部分"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "显示总匹配行数,而不显示匹配的行"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "高亮显示匹配项"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "在不同文件的匹配项之间打印空行"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr "只在同一文件的匹配项的上面显示一次文件名"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "显示匹配项前后的 <n> 行上下文"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "显示匹配项前 <n> 行上下文"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "显示匹配项后 <n> 行上下文"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "使用 <n> 个工作线程"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "快捷键 -C 数字"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "在匹配的前面显示一行函数名"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "显示所在函数的前后内容"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "从文件读取模式"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "匹配 <模式>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "组合用 -e 参数设定的模式"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "不输出,而用退出码标识命中状态"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr "只显示匹配所有模式的文件中的匹配"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "显示 grep 表达式的解析树"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "分页"
@@ -15363,11 +15887,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "无效的选项组合,忽略 --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "没有线程支持,忽略 --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "指定的线程数无效(%d)"
@@ -15380,11 +15904,15 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached 或 --untracked 不能与 --no-index 同时使用"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked 不能与 --cached 同时使用"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard 不能用于已跟踪内容"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "同时给出了 --cached 和树对象"
 
@@ -15515,12 +16043,12 @@
 msgid "no info viewer handled the request"
 msgstr "没有 info 查看器处理此请求"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' 是 '%s' 的别名"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "坏的 alias.%s 字符串:%s"
@@ -15534,392 +16062,392 @@
 msgid "'git help config' for more information"
 msgstr "'git help config' 获取更多信息"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "%s 的对象类型不匹配"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "未能获取预期的对象 %s"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "对象 %s:应为类型 %s,却是 %s"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "无法填充 %d 字节"
 msgstr[1] "无法填充 %d 字节"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "过早的文件结束符(EOF)"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "输入上的读错误"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "用掉了超过可用的字节"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "包太大超过了当前 off_t 的定义"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "包超过了最大允许值"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "不能创建 '%s'"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "无法打开包文件 '%s'"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "包签名不匹配"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "不支持包版本 %<PRIu32>"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "包中有错误的对象位于偏移量 %<PRIuMAX>:%s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "解压缩返回 %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "偏移值覆盖了 delta 基准对象"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "delta 基准偏移越界"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "未知对象类型 %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "无法读取包文件"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, 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:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "解压缩严重的不一致"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "发现 %s 出现 SHA1 冲突!"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "不能读 %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "不能读取现存对象信息 %s"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "不能读取现存对象 %s"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "无效的数据对象 %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "对打包对象 fsck 检查出错"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "%s 的所有子对象并非都可达"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
 msgstr "应用 delta 失败"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "接收对象中"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "索引对象中"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "包冲突(SHA1 不匹配)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "不能对包文件调用 fstat"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "包的结尾有垃圾数据"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "parse_pack_objects() 中遇到不可理喻的问题"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "处理 delta 中"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "不能创建线程:%s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "不可理喻"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, 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:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "对 %s 的尾部校验出现意外(磁盘损坏?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "包有 %d 个未解决的 delta"
 msgstr[1] "包有 %d 个未解决的 delta"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "不能压缩附加对象(%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "本地对象 %s 已损坏"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "包文件名 '%s' 没有以 '.pack' 结尾"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "包文件名 '%s' 没有以 '.%s' 结尾"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "无法写入 %s 文件 '%s'"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "无法关闭已写入的 %s 文件 '%s'"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "关闭包文件时出错"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "无法存储包文件"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "无法存储索引文件"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "坏的 pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "无法打开现存包文件 '%s'"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "无法为 %s 打开包索引文件"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "非 delta:%d 个对象"
 msgstr[1] "非 delta:%d 个对象"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, 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:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "无法返回当前工作目录"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "错误选项 %s"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "未知的哈希算法 '%s'"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin 不能和 --stdin 同时使用"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin 需要 git 仓库"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format 不能和 --stdin 同时使用"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "--verify 没有提供包文件名参数"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "在打包对象中 fsck 检查出错"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "不能对模版 '%s' 调用 stat"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "不能打开目录 '%s'"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "不能读取链接 '%s'"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "不能自 '%s' 到 '%s' 创建符号链接"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "不能拷贝 '%s' 至 '%s'"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "忽略模版 %s"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "没有在 %s 中找到模版"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "没有从 '%s' 复制模版:%s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "无效的初始分支名:'%s'"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "不能处理 %d 类型的文件"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "不能移动 %s 至 %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "尝试用不同的哈希算法重新初始化仓库"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s 已经存在"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init:已忽略 --initial-branch=%s"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "重新初始化已存在的共享 Git 仓库于 %s%s\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "重新初始化已存在的 Git 仓库于 %s%s\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "已初始化空的共享 Git 仓库于 %s%s\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "已初始化空的 Git 仓库于 %s%s\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -15927,53 +16455,53 @@
 "git init [-q | --quiet] [--bare] [--template=<模板目录>] [--shared[=<权限>]] "
 "[<目录>]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "权限"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "指定 git 仓库是多个用户之间共享的"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "覆盖初始分支名称"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "hash"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "指定要使用的哈希算法"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir 和 --bare 是互斥的"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "不能创建目录 %s"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "不能切换目录到 %s"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr "不允许 %s(或 --work-tree=<目录>)而没有指定 %s(或 --git-dir=<目录>)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "不能访问工作区 '%s'"
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir 不能用于纯仓库"
 
@@ -16025,10 +16553,6 @@
 msgid "do not treat --- specially"
 msgstr "不要对 --- 特殊处理"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "尾注"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "要添加的尾注"
@@ -16041,128 +16565,128 @@
 msgid "no input file given for in-place editing"
 msgstr "没有给出要原位编辑的文件"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<选项>] [<版本范围>] [[--] <路径>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<选项>] <对象>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "无效的 --decorate 选项:%s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "显示源"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
 msgstr "使用邮件映射文件"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "只修饰与 <模式> 匹配的引用"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "不修饰和 <模式> 匹配的引用"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "修饰选项"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr "跟踪 <文件> 中 <开始>,<结束> 范围内的行或函数 :<函数名> 的演变"
 
-#: builtin/log.c:212
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<范围>:<文件> 不能和路径表达式共用"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "最终输出:%d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: 损坏的文件"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "不能读取对象 %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "未知类型:%d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s:从描述生成附函的模式无效"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers 没有值"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "无法打开补丁文件 %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "只需要一个范围"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "不是一个范围"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "附函需要邮件地址格式"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "无法创建附函文件"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "不正常的 in-reply-to:%s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<选项>] [<从> | <版本范围>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "两个输出目录?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "未知提交 %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "无法将 '%s' 解析为一个有效引用"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "不能找到准确的合并基线"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16172,393 +16696,401 @@
 "git branch --set-upstream-to 来跟踪一个远程分支。或者你可以通过\n"
 "参数 --base=<基线提交> 手动指定一个基线提交"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "无法找到准确的合并基线"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "基线提交应该是版本列表的祖先"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "基线提交不应该出现在版本列表中"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "无法得到补丁 id"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr "无法推断当前系列的 range-diff 起始"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "使用 '%s' 作为当前系列的 range-diff 源"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "使用 [PATCH n/m],即使只有一个补丁"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "使用 [PATCH],即使有多个补丁"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "打印补丁到标准输出"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "生成一封附函"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "使用简单的数字序列作为输出文件名"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "后缀"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "使用 <后缀> 代替 '.patch'"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "补丁以 <n> 开始编号,而不是1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "重制-计数"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "标记补丁系列是第几次重制"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "输出文件名的最大长度"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "使用 [RFC PATCH] 代替 [PATCH]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "从分支描述获取附函的模式"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "基于一个分支描述生成部分附函"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
 msgstr "使用 [<前缀>] 代替 [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "把结果文件存储在 <目录>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "不删除/添加 [PATCH]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "不输出二进制差异"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "在 From 头信息中输出全为零的哈希值"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "不包含已在上游提交中的补丁"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "显示纯补丁格式而非默认的(补丁+状态)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "邮件发送"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "header"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "添加邮件头"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "邮件地址"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "添加收件人"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "添加抄送"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "标识"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "将 From 地址设置为 <标识>(如若不提供,则用提交者 ID 做为地址)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "邮件标识"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "使第一封邮件作为对 <邮件标识> 的回复"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "边界"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "附件方式添加补丁"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "内联显示补丁"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "启用邮件线索,风格:浅,深"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "签名"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "添加一个签名"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "基线提交"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "为补丁列表添加前置树信息"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "从文件添加一个签名"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "不要打印补丁文件名"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "在生成补丁时显示进度"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "在附函或单个补丁中显示和 <rev> 的差异"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "在附函或单个补丁中显示和 <refspec> 的差异"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "创建权重的百分比"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "包含无效的身份标识:%s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n 和 -k 互斥"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc 和 -k 互斥"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only 无意义"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status 无意义"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check 无意义"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "--stdout、--output 和 --output-directory 是互斥的"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff 需要 --cover-letter 或单一补丁"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "版本间差异:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "对 v%d 的版本差异:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor 需要 --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff 需要 --cover-letter 或单一补丁"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "范围差异:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "对 v%d 的范围差异:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "无法读取签名文件 '%s'"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "生成补丁"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "无法创建输出文件"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<上游> [<头> [<限制>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr "不能找到跟踪的远程分支,请手工指定 <上游>。\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<选项>] [<文件>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "用标签标识文件的状态"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "使用小写字母表示 '假设未改变的' 文件"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "使用小写字母表示 'fsmonitor clean' 文件"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "显示缓存的文件(默认)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "显示已删除的文件"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "显示已修改的文件"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "显示其它文件"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "显示忽略的文件"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "显示暂存区内容的对象名称"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "显示文件系统需要删除的文件"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "只显示“其他”目录的名称"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "显示文件换行符格式"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "不显示空目录"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "显示未合并的文件"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "显示 resolve-undo 信息"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "跳过和模式匹配的文件"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "从 <文件> 中读取排除模式"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "从 <文件> 读取额外的每个目录的排除模式"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "添加标准的 git 排除"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "显示相对于顶级目录的文件名"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "在子模组中递归"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "如果任何 <文件> 都不在索引区,视为错误"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "树对象"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr "假装自从 <树对象> 之后删除的路径仍然存在"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "显示调试数据"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "抑制重复条目"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16569,39 +17101,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<仓库> [<引用>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "不打印远程 URL"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "exec"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "远程主机上的 git-upload-pack 路径"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "仅限于标签"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "仅限于分支"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "不显示已解析的标签"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "参考 url.<base>.insteadOf 设置"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "若未找到匹配的引用则以退出码2退出"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "除了显示指向的对象外,显示指向的引用名"
 
@@ -16641,6 +17173,55 @@
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "列出整个树;不仅仅当前目录(隐含 --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<选项>] <消息> <补丁> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "保持主题"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "在标题保持无补丁括号标注"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "拷贝 Message-ID 至提交说明结尾"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "将元数据重新编码为 i18n.commitEncoding"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "禁用元数据的字符集重新编码"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "编码"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "将元数据用此编码重新编码"
+
+#: builtin/mailinfo.c:72
+msgid "use scissors"
+msgstr "使用剪刀标记"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<动作>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "找到引用的 CR 时的操作"
+
+#: builtin/mailinfo.c:77
+msgid "use headers in message's body"
+msgstr "在消息正文中使用标题"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -16757,191 +17338,190 @@
 msgid "Merging %s with %s\n"
 msgstr "合并 %s 和 %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<选项>] [<提交>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "开关 `m' 需要一个值"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "选项 `%s' 需要一个值"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "不能找到合并策略 '%s'。\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "可用的策略有:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "可用的自定义策略有:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "在合并的最后不显示差异统计"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "在合并的最后显示差异统计"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(和 --stat 同义)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr "在合并提交信息中添加(最多 <n> 条)精简提交记录"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "创建一个单独的提交而不是做一次合并"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "如果合并成功,执行一次提交(默认)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "在提交前编辑提交说明"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "允许快进(默认)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "如果不能快进就放弃合并"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "验证指定的提交是否包含一个有效的 GPG 签名"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "策略"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "要使用的合并策略"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "option=value"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "所选的合并策略的选项"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "合并的提交说明(针对非快进式合并)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "放弃当前正在进行的合并"
 
 #
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort,但是保留索引和工作区"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "继续当前正在进行的合并"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "允许合并不相关的历史"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "绕过 pre-merge-commit 和 commit-msg 钩子"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "不能运行贮藏。"
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "贮藏失败"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "不是一个有效对象:%s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "读取树失败"
 
-#  译者:注意保持前导空格
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (无可压缩)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "已经是最新的。(无可挤压)"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
-msgstr "压缩提交 -- 未更新 HEAD\n"
+msgstr "挤压提交 -- 未更新 HEAD\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "无合并信息 -- 未更新 HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' 没有指向一个提交"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "坏的 branch.%s.mergeoptions 字符串:%s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "未处理两个头合并之外的任何操作。"
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "merge-recursive 的未知选项:-X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "不能写 %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "不能从 '%s' 读取"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr "未提交合并,使用 'git commit' 完成此次合并。\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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"
@@ -16951,83 +17531,83 @@
 "合并到主题分支。\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "空的提交说明会终止提交。\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr "以 '%c' 开始的行将被忽略,而空的提交说明将终止提交。\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
 msgstr "空提交信息。"
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "太棒了。\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "自动合并失败,修正冲突然后提交修正的结果。\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "没有当前分支。"
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "当前分支没有对应的远程仓库。"
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "当前分支没有定义默认的上游分支。"
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "对于 %s 没有来自 %s 的远程跟踪分支"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "环境 '%2$s' 中存在坏的取值 '%1$s'"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "不能在 %s 中合并:%s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "不能合并"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort 不带参数"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "没有要终止的合并(MERGE_HEAD 丢失)。"
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit 不带参数"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue 不带参数"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "没有进行中的合并(MERGE_HEAD 丢失)。"
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17035,7 +17615,7 @@
 "您尚未结束您的合并(存在 MERGE_HEAD)。\n"
 "请在合并前先提交您的修改。"
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17043,100 +17623,133 @@
 "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。\n"
 "请在合并前先提交您的修改。"
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "您不能将 --squash 和 --no-ff 组合使用。"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "您不能将 --squash 和 --commit 组合使用。"
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "未指定提交并且 merge.defaultToUpstream 未设置。"
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "尚不支持到空分支的压缩提交"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "到空分支的非快进式提交没有意义"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - 不能被合并"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr "只能将一个提交合并到空分支上"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "拒绝合并无关的历史"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "已经是最新的。"
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "更新 %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "尝试非常小的索引内合并...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "无。\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "已经是最新的。耶!"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "无法快进,终止。"
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "将树回滚至原始状态...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "尝试合并策略 %s...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "没有合并策略处理此合并。\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "使用策略 %s 合并失败。\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "使用 %s 以准备手工解决。\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr "自动合并进展顺利,按要求在提交前停止\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "警告:标签输入未通过 fsck:%s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "错误:标签输入未通过 fsck:%s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d(忽略 FSCK?)不应该触发这个调用"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "不能读取被标记的对象 '%s'"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "对象 '%s' 被标记为 '%s',然而是一个 '%s' 类型"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "标准输入上的标签未通过我们严格的 fsck 检查"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "标准输入上的标签未指向一个有效的对象"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "无法写标签文件"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17153,33 +17766,41 @@
 msgid "allow creation of more than one tree"
 msgstr "允许创建一个以上的树"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<选项>] (write|verify|expire|repack --batch-size=<大小"
-">)"
+#: builtin/multi-pack-index.c:10
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<选项>] write [--preferred-pack=<包>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<选项>] verify"
+
+#: builtin/multi-pack-index.c:16
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<选项>] expire"
+
+#: builtin/multi-pack-index.c:19
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<选项>] repack [--batch-size=<尺寸>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr "包含成对包文件和包索引的对象目录"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "首选包"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "在计算多包位图时打包以供重用"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr "在 repack 期间,将较小尺寸的包文件收集到大于此大小的批次中"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "太多参数"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "--batch-size 选项仅用于 'repack' 子命令"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "未识别的子命令:%s"
@@ -17275,7 +17896,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "重命名 %s 至 %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "重命名 '%s' 失败"
@@ -17464,7 +18085,7 @@
 msgid "the note contents have been left in %s"
 msgstr "注解内容被留在 %s 中"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "不能打开或读取 '%s'"
@@ -17507,8 +18128,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "参数太多"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "太多参数"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -17565,7 +18187,7 @@
 msgstr "重新加载 <命令> 的配置(隐含 --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
+msgid "too few arguments"
 msgstr "参数太少"
 
 #: builtin/notes.c:538
@@ -17689,7 +18311,7 @@
 "自动合并说明失败。修改 %s 中的冲突并且使用命令 'git notes merge --commit' 提"
 "交结果,或者使用命令 'git notes merge --abort' 终止合并。\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "无法解析 '%s' 为一个有效引用。"
@@ -17707,7 +18329,7 @@
 msgid "read object names from the standard input"
 msgstr "从标准输入读取对象名称"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "不删除,只显示"
 
@@ -17723,7 +18345,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "从 <注解引用> 使用注解"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "未知子命令:%s"
@@ -17738,101 +18360,114 @@
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr "git pack-objects [<选项>...] <前缀名称> [< <引用列表> | < <对象列表>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object:无法定位 %1$s,预期在包 %3$s 中的偏移量 %2$<PRIuMAX> 上"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "%s 错的包对象 CRC"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "%s 损坏的包对象"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "发现对象 %s 递归 delta"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "排序了 %u 个对象,预期 %<PRIu32> 个"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "预期对象在包文件 %2$s 的偏移量 %1$<PRIuMAX> 上"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "禁用 bitmap 写入,因为 pack.packSizeLimit 设置使得包被切分为多个"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "写入对象中"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "对 %s 调用 stat 失败"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "写入 %<PRIu32> 个对象而预期 %<PRIu32> 个"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "禁用 bitmap 写入,因为一些对象将不会被打包"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s 压缩中 delta 基准偏移越界"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s 的 delta 基准偏移越界"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "对象计数中"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "无法解析对象 %s 头信息"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "对象 %s 无法读取"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "对象 %s 不一致的对象长度(%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "次优(suboptimal)打包 - 内存不足"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "使用 %d 个线程进行压缩"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "无法为标签 %s 压缩对象"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "压缩对象中"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "不一致的差异计数"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -17841,13 +18476,23 @@
 "uploadpack.blobpackfileuri 的取值必须是 '<object-hash> <pack-hash> <uri>' 格"
 "式(得到 '%s')"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr "对象已经在另外的 uploadpack.blobpackfileuri 中配置(得到 '%s')"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "无法获得包 %2$s 中对象 %1$s 的类型"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "不能找到包 '%s'"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -17856,7 +18501,7 @@
 "预期边界对象(edge object)ID,却得到垃圾数据:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -17865,234 +18510,246 @@
 "预期对象 ID,却得到垃圾数据:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "选项 --missing 的值无效"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "无法打开包文件索引"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "无法检查 %s 处的松散对象"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "无法强制松散对象"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "不是一个版本 '%s'"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "坏的版本 '%s'"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "无法添加最近的对象"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "不支持的索引版本 %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "坏的索引版本 '%s'"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<版本>[,<偏移>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr "用指定的 idx 格式版本来写包索引文件"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "每个输出包的最大尺寸"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "忽略从备用对象存储里借用对象"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "忽略包对象"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "限制打包窗口的对象数"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr "除对象数量限制外设置打包窗口的内存限制"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "打包允许的 delta 链的最大长度"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "重用已存在的 deltas"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "重用已存在的对象"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "使用 OFS_DELTA 对象"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr "使用线程查询最佳 delta 匹配"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "不创建空的包输出"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "从标准输入读取版本号参数"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "限制那些尚未打包的对象"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "包括可以从任何引用访问到的对象"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "包括被引用日志引用到的对象"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "包括被索引引用到的对象"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "从标准输入读取包"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "输出包到标准输出"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "包括那些引用了待打包对象的标签对象"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "维持不可达的对象"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "打包松散的不可达对象"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "将比给定 <时间> 新的无法访问的对象解包"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "使用稀疏可达性算法"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "创建精简包"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "创建适合浅克隆仓库获取的包"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "忽略配有 .keep 文件的包"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "忽略该 pack"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "打包压缩级别"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "显示被移植隐藏的提交"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "使用 bitmap 索引(如果有的话)以提高对象计数时的速度"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "在建立包索引的同时创建 bitmap 索引"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "如果可能,写 bitmap 索引"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "处理丢失的对象"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "不要打包 promisor 包文件中的对象"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "在增量压缩时参考数据岛"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "协议"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "使用此协议排除任何已配置的 uploadpack.blobpackfileuri"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "增量链深度 %d 太深了,强制为 %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "配置 pack.deltaCacheLimit 太高了,强制为 %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "不能使用 --max-pack-size 来构建传输用的包文件"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "最小的包文件大小是 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin 不能用于创建一个可索引包"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable 和 --unpack-unreachable 不兼容"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "不能在没有 --stdout 的情况下使用 --filter"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "不能同时使用 --filter 和 --stdin-packs"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "不能同时使用内部版本列表和 --stdin-packs"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "枚举对象中"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18101,6 +18758,19 @@
 "总共 %<PRIu32>(差异 %<PRIu32>),复用 %<PRIu32>(差异 %<PRIu32>),包复用 "
 "%<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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' 命令。如果您仍旧使用这个\n"
+"命令,请在命令行中添加额外参数:'--i-still-use-this',\n"
+"并通过发送邮件到 <git@vger.kernel.org> 让我们知道您仍旧\n"
+"使用它。 谢谢。\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<选项>]"
@@ -18158,11 +18828,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "使用变基操作取代合并操作以合入修改"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "允许快进式"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "在操作前后执行自动贮藏和弹出贮藏"
 
@@ -18183,7 +18853,86 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "pull.ff 的取值无效:%s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr "在您刚刚获取到的引用中没有变基操作的候选。"
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr "在您刚刚获取到的引用中没有合并操作的候选。"
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr "通常这意味着您提供了一个通配符引用规格但未能和远端匹配。"
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"您要求从远程 '%s' 拉取,但是未指定一个分支。因为这不是当前\n"
+"分支默认的远程仓库,您必须在命令行中指定一个分支名。"
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "您当前不在一个分支上。"
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "请指定您要变基到哪一个分支。"
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "请指定您要合并哪一个分支。"
+
+#: builtin/pull.c:461 builtin/pull.c:476
+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
+msgid "<remote>"
+msgstr "<远程>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<分支>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "当前分支没有跟踪信息。"
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr "如果您想要为此分支创建跟踪信息,您可以执行:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"您的配置中指定要合并远程的引用 '%s',\n"
+"但是没有获取到这个引用。"
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "无法访问提交 %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "为变基操作忽略 --verify-signatures"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18210,98 +18959,19 @@
 "缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、--no-rebase,\n"
 "或者 --ff-only 参数覆盖缺省设置。\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr "在您刚刚获取到的引用中没有变基操作的候选。"
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr "在您刚刚获取到的引用中没有合并操作的候选。"
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr "通常这意味着您提供了一个通配符引用规格但未能和远端匹配。"
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"您要求从远程 '%s' 拉取,但是未指定一个分支。因为这不是当前\n"
-"分支默认的远程仓库,您必须在命令行中指定一个分支名。"
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "您当前不在一个分支上。"
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "请指定您要变基到哪一个分支。"
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "请指定您要合并哪一个分支。"
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "详见 git-pull(1)。"
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<远程>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<分支>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "当前分支没有跟踪信息。"
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr "如果您想要为此分支创建跟踪信息,您可以执行:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"您的配置中指定要合并远程的引用 '%s',\n"
-"但是没有获取到这个引用。"
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "无法访问提交 %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "为变基操作忽略 --verify-signatures"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "更新尚未诞生的分支,变更添加至索引。"
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "变基式拉取"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "请提交或贮藏它们。"
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18311,7 +18981,7 @@
 "fetch 更新了当前的分支。快进您的工作区\n"
 "至提交 %s。"
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18328,15 +18998,15 @@
 "$ git reset --hard\n"
 "恢复之前的状态。"
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "无法将多个分支合并到空分支。"
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "无法变基到多个分支。"
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "本地子模组中有修改,无法变基"
 
@@ -18630,44 +19300,48 @@
 msgid "push options must not have new line characters"
 msgstr "推送选项不能有换行符"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr "git range-diff [<选项>] <old-base>..<old-tip> <new-base>..<new-tip>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<选项>] <old-tip>...<new-tip>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<选项>] <base> <old-tip> <new-tip>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "创建权重的百分比"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "使用简单差异颜色"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "注解"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "传递给 'git log'"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "没有在范围中使用 ..:'%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "仅显示与第一个范围有关的输出"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "仅显示与第二个范围有关的输出"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "不是一个提交范围:'%s'"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "单个参数格式必须是对称范围(即包含...)"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "需要两个提交范围"
 
@@ -18771,193 +19445,193 @@
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "不可用的待办列表:'%s'"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "无法创建临时的 %s"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "无法标记为交互式"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "无法生成待办列表"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "使用 --upstream 或 --onto 必须提供一个基线提交"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<选项>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "保留初始为空的提交"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "允许提交说明为空"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "对合并提交变基"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "保持兄弟提交的原始分支点"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "移动以 squash!/fixup! 开头的提交"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "签名提交"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "显示上游变化的差异统计"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "继续变基"
 
-#: builtin/rebase.c:510
+#: builtin/rebase.c:511
 msgid "skip commit"
 msgstr "跳过提交"
 
-#: builtin/rebase.c:511
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "变基待办列表"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "显示当前补丁"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "缩短待办列表中的提交号"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "扩展待办列表中的提交号"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "检查待办列表"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "重新排列 fixup/squash 行"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "在待办列表中插入 exec 执行命令"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "onto"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "限制版本"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "squash onto"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "上游提交"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "head 名称"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "变基策略"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "策略选项"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "切换到"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "要检出的分支或提交"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "onto name"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "要执行的命令"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "自动重新安排任何失败的 `exec`"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "不使用 --rebase-merges,则 --[no-]rebase-cousins 没有效果"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s 需要合并后端"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "无法获取 'onto':'%s'"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "无效的原始 head:'%s'"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "忽略无效的 allow_rerere_autoupdate:'%s'"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -18970,7 +19644,7 @@
 "\"git rebase --skip\" 命令跳过这个提交。如果想要终止执行并回到\n"
 "\"git rebase\" 执行之前的状态,执行 \"git rebase --abort\"。"
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -18988,14 +19662,14 @@
 "\n"
 "因此 git 无法对其变基。"
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr "无法识别的空类型 '%s';有效值有 \"drop\"、\"keep\" 和 \"ask\"。"
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19012,7 +19686,7 @@
 "    git rebase '<branch>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19025,189 +19699,180 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "exec 命令不能包含换行符"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "空的 exec 命令"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "变基到给定的分支而非上游"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "使用上游和分支的合并基线做为当前基线"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "允许执行 pre-rebase 钩子"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "安静。暗示 --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "不显示上游变化的差异统计"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "为每一个提交添加 Signed-off-by 尾注"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "使提交者日期和作者日期一致"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "忽略作者日期,使用当前日期"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "--reset-author-date 的同义词"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "传递给 'git apply'"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "忽略空白字符的变更"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "拣选所有提交,即使未修改"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "继续"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
 msgstr "跳过当前补丁并继续"
 
-#  译者:注意保持前导空格
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "终止并检出原有分支"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "终止但保持 HEAD 不变"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "在交互式变基中编辑待办列表"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "显示正在应用或合并的补丁文件"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "使用应用策略进行变基"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "使用合并策略进行变基"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "让用户编辑要变基的提交列表"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(已弃用)尝试重建合并提交而非忽略它们"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "如何处理成为空提交的提交"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "在 -i 交互模式下,移动以 squash!/fixup! 开头的提交"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "可编辑列表的每一个提交下面增加一行 exec"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "允许针对空提交说明的提交变基"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "尝试对合并提交变基而不是忽略它们"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "使用 'merge-base --fork-point' 来优化上游"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "使用给定的合并策略"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "选项"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "将参数传递给合并策略"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "将所有可达的提交变基到根提交"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr "应用所有更改,甚至那些已在上游存在的"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"对 rebase.useBuiltin 的支持已被删除!\n"
-"详见 'git help config' 中的条目。"
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "看起来 'git-am' 正在执行中。无法变基。"
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr "git rebase --preserve-merges 被弃用。用 --rebase-merges 代替。"
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "不能将 '--keep-base' 和 '--onto' 组合使用"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "不能将 '--keep-base' 和 '--root' 组合使用"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "不能将 '--root' 和 '--fork-point' 组合使用"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "没有正在进行的变基?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "动作 --edit-todo 只能用在交互式变基过程中。"
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "不能读取 HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19215,16 +19880,16 @@
 "您必须编辑所有的合并冲突,然后通过 git add\n"
 "命令将它们标记为已解决"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "无法丢弃工作区变更"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "无法移回 %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19243,132 +19908,132 @@
 "\t%s\n"
 "然后再重新执行。 为避免丢失重要数据,我已经停止当前操作。\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "开关 `C' 期望一个数字值"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "未知模式:%s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy 需要 --merge 或 --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "不能组合使用应用选项和合并选项"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "未知的变基后端:%s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec 需要 --exec 或 --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "不能将 '--preserve-merges' 和 '--rebase-merges' 同时使用"
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "错误:不能将 '--preserve-merges' 和 '--reschedule-failed-exec' 同时使用"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "无效的上游 '%s'"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "不能创建新的根提交"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s':只需要与分支的一个合并基线"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s':只需要一个合并基线"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "没有指向一个有效的提交 '%s'"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "致命错误:无此分支/提交 '%s'"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "没有这样的引用:%s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "无法将 HEAD 解析为一个版本"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "请提交或贮藏修改。"
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "无法切换到 %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD 是最新的。"
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "当前分支 %s 是最新的。\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD 是最新的,强制变基。"
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "当前分支 %s 是最新的,强制变基。\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "pre-rebase 钩子拒绝了变基操作。"
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "到 %s 的变更:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "从 %s 到 %s 的变更:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr "首先,回退头指针以便在其上重放您的工作...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "无法分离头指针"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "快进 %s 到 %s。\n"
@@ -19422,11 +20087,11 @@
 "\n"
 "若要屏蔽此信息,您可以设置它为 'refuse'。"
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "静默模式"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "您必须指定一个目录。"
 
@@ -19457,36 +20122,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "'%s' 不是一个有效的时间戳"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "正在标记可达对象..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s 指向不存在!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "未指定要删除的引用日志"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "不是一个引用日志:%s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "没有 '%s' 的引用日志"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "无效的引用格式:%s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -19660,7 +20325,7 @@
 "\t%s:%d\n"
 "现在在为不存在的远程名 '%s' 命名"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "没有此远程仓库:'%s'"
@@ -19830,7 +20495,6 @@
 msgid "  HEAD branch: %s"
 msgstr "  HEAD 分支:%s"
 
-#  译者:中文字符串拼接,可删除前导空格
 #: builtin/remote.c:1259
 msgid "(not queried)"
 msgstr "(未查询)"
@@ -19997,11 +20661,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "将不会删除所有非推送 URL 地址"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<选项>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20009,116 +20673,139 @@
 "增量 repack 和 bitmap 索引不兼容。  使用 --no-write-bitmap-index\n"
 "或禁用 pack.writebitmaps 配置。"
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "无法开始 pack-objects 来重新打包 promisor 对象"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr "repack:期望来自 pack-objects 的完整十六进制对象 ID。"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "无法完成 pack-objects 来重新打包 promisor 对象"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "不能打开 %s 的索引"
+
+#: builtin/repack.c:368
+#, 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
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "包 %s 太大导致数字溢出"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "所有内容打包到一个包文件中"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "和 -a 相同,并将不可达的对象设为松散对象"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "删除多余的包,运行 git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --no-reuse-delta"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --no-reuse-object"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "不运行 git-update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --local"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "写 bitmap 索引"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --delta-islands"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "近似日期"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "使用 -A,不要将早于给定时间的对象过期"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "使用 -a ,重新对不可达对象打包"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "用于增量压缩的窗口值"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "字节"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "和上面的相似,但限制内存大小而非条目数"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "限制最大增量深度"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "限制最大线程数"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "每个包文件的最大尺寸"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "对标记为 .keep 的包中的对象重新打包"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "不要对该包文件重新打包"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "使用因子 <n> 查找几何级数"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "不能删除珍品仓库中的打包文件"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable 和 -A 不兼容"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric 和 -A、-a 不兼容"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "没有新的要打包。"
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "缺少需要的文件:%s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "不能删除:%s"
@@ -20448,8 +21135,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "在合并过程中不能做%s重置操作。"
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "安静模式,只报告错误"
 
@@ -20532,19 +21219,19 @@
 msgid "Could not write new index file."
 msgstr "不能写入新的索引文件。"
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "不能同时使用 --exclude-promisor-objects 和 --missing 选项"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "对象过滤需要 --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list 不支持显示注解"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "标记计数和 --objects 不兼容"
 
@@ -20656,19 +21343,19 @@
 msgid "keep redundant, empty commits"
 msgstr "保持多余的、空的提交"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "还原失败"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "拣选失败"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<选项>] [--] <文件>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -20678,7 +21365,7 @@
 msgstr[0] "如下文件其暂存的内容和工作区及 HEAD 中的都不一样:"
 msgstr[1] "如下文件其暂存的内容和工作区及 HEAD 中的都不一样:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -20686,13 +21373,13 @@
 "\n"
 "(使用 -f 强制删除)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "下列文件索引中有变更"
 msgstr[1] "下列文件索引中有变更"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -20700,46 +21387,46 @@
 "\n"
 "(使用 --cached 保留本地文件,或用 -f 强制删除)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "如下文件有本地修改:"
 msgstr[1] "如下文件有本地修改:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "不列出删除的文件"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "只从索引区删除"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "忽略文件更新状态检查"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "允许递归删除"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "即使没有匹配,也以零状态退出"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "没有提供路径规格。我应该删除哪些文件?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr "请将您的修改暂存到 .gitmodules 中或贮藏后再继续"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "未提供 -r 选项不会递归删除 '%s'"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm:不能删除 %s"
@@ -20779,52 +21466,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<选项>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "不支持和标准输入一起使用多个 --group 选项"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "不支持和标准输入一起使用 --group=trailer"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "未知分组类型:%s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "按照提交者分组而不是作者"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "按照提交者而不是作者分组"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "根据每个作者的提交数量排序"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
-msgstr "隐藏提交说明,只提供提交数量"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
+msgstr "抑制提交描述,只提供提交数量"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
 msgstr "显示每个作者的电子邮件地址"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
 msgstr "折行输出"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "字段"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
+#: builtin/shortlog.c:363
+msgid "group by field"
 msgstr "按字段分组"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "仓库外执行提供了太多的参数"
 
@@ -21014,102 +21701,110 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "显示从标准输入中读入的不在本地仓库中的引用"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <选项>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr "本工作区不是稀疏模式(稀疏检出文件可能不存在)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "无法为稀疏检出文件创建目录"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr "无法升级仓库格式以启用 worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "无法设置 extensions.worktreeConfig"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "初始化稀疏检出为 cone 模式"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "切换稀疏索引的使用"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "无法修改 sparse-index 配置"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "无法打开 '%s'"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "无法规范化路径 %s"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <模式>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "无法为 C 语言风格的字符串 '%s' 去引号"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "无法加载现存的稀疏检出模式"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "从标准输入读取模式"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "刷新工作目录时出错"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<选项>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<选项>] [<stash>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <分支名> [<stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21121,7 +21816,7 @@
 "          [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
 "          [--] [<路径规格>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21129,19 +21824,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<消息>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <消息>] [-q|--quiet] <提交>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21151,173 +21846,200 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <消息>]\n"
 "          [--] [<路径规格>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "'%s' 不像是一个贮藏提交"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "指定了太多的版本:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "未发现贮藏条目。"
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s 不是一个有效的引用名"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
 msgstr "git stash clear 不支持参数"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"警告:未跟踪文件出现在跟踪文件的路径上!重命名\n"
+"            %s -> %s\n"
+"         以腾出空间。\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "无法在合并过程中应用贮藏"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "无法生成差异 %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "索引中有冲突。尝试不用 --index。"
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "不能保存索引树"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "无法从贮藏条目中恢复未跟踪文件"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "正在合并 %s 和 %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "索引未从贮藏中恢复。"
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "尝试重建索引"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "丢弃了 %s(%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s:无法丢弃贮藏条目"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' 不是一个贮藏引用"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "贮藏条目被保留以备您再次需要。"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "未指定分支名"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "无法解析树"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "无法解包目录树"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "在贮藏中包含未跟踪文件"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "仅显示贮藏中的未跟踪文件"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "无法用 %2$s 更新 %1$s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "贮藏说明"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" 需要一个 <提交> 参数"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "没有选择变更"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "您尚未建立初始提交"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "无法保存当前索引状态"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "无法保存未跟踪文件"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "无法保存当前工作区状态"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "不能记录工作区状态"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "不能同时使用参数 --patch 和 --include-untracked 或 --all"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "您是否忘了执行 'git add'?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "没有要保存的本地修改"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "无法初始化贮藏"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "无法保存当前状态"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "保存工作目录和索引状态 %s"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "无法删除工作区变更"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "保持索引"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "以补丁模式贮藏"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "静默模式"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "贮藏中包含未跟踪文件"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "包含忽略的文件"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21341,7 +22063,7 @@
 msgid "prepend comment character and space to each line"
 msgstr "为每一行的行首添加注释符和空格"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "期望一个完整的引用名称,却得到 %s"
@@ -21355,7 +22077,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "无法从 url '%s' 剥离一个组件"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "相对路径的替代锚记(anchor)"
 
@@ -21363,18 +22085,18 @@
 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
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "在 .gitmodules 中未找到子模组 '%s' 的 url"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "进入 '%s'\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -21383,7 +22105,7 @@
 "对 %s 执行 run_command 返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21393,172 +22115,169 @@
 "在递归 %s 的子模组执行 run_command 时返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "阻止进入每一个子模组命令的输出"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "抑制进入每一个子模组命令的输出"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
 msgstr "递归进入嵌套子模组中"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <命令>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr "无法找到配置 '%s'。假定这个仓库是其自身的官方上游。"
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "无法为子模组 '%s' 注册 url"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, 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:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "警告:建议子模组 '%s' 使用命令更新模式\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "无法为子模组 '%s' 注册更新模式"
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "阻止子模组初始化的输出"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "抑制子模组初始化的输出"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 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:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "在 .gitmodules 中没有发现路径 '%s' 的子模组映射"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "无法解析子模组 '%s' 的 HEAD 引用"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "递归子模组 '%s' 失败"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "阻止子模组状态输出"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "抑制子模组状态输出"
 
-#: builtin/submodule--helper.c:887
+#: builtin/submodule--helper.c:888
 msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr "使用存储在索引中的提交,而非存储在子模组 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "递归进入嵌套子模组中"
-
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<路径>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <路径>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(数据对象)->%s(子模组)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(子模组)->%s(数据对象)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "不能从 '%s' 创建哈希对象"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "意外的模式 %o\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "使用存储在索引中的提交,而非存储在子模组 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr "比较存储在索引和子模组 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "跳过设置了 'ignore_config' 为 'all' 的子模组"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "限制总结的大小"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<选项>] [<提交>] [--] [<路径>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "不能为 HEAD 获取一个版本"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "--cached 和 --files 是互斥的"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "为 '%s' 同步子模组 url\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "无法为子模组路径 '%s' 注册 url"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "无法得到子模组 '%s' 的默认远程关联"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "无法为子模组 '%s' 更新远程关联"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "阻止子模组 url 同步的输出"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "抑制子模组 URL 同步的输出"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<路径>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21567,52 +22286,52 @@
 "子模组工作区 '%s' 包含一个 .git 目录(如果您确需删除它及其全部历史,使用 'rm "
 "-rf' 命令)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr "子模组工作区 '%s' 包含本地修改;使用 '-f' 丢弃它们"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "已清除目录 '%s'\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "无法移除子模组工作区 '%s'\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "不能创建空的子模组目录 %s"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "子模组 '%s'(%s)未对路径 '%s' 注册\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
+#: builtin/submodule--helper.c:1625
+msgid "remove submodule working trees even if they contain local changes"
 msgstr "删除子模组工作区,即使包含本地修改"
 
-#: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
 msgstr "将所有子模组取消注册"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1631
 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:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "如果您确实想要对所有子模组执行取消初始化,请使用 '--all'"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -21624,46 +22343,46 @@
 "Git 不使用备用仓库克隆,或者等效地使用 '--reference-if-able' 而非\n"
 "'--reference' 来克隆。"
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "子模组 '%s' 不能添加仓库备选:%s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "不能识别 submodule.alternateErrorStrategy 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "不能识别 submodule.alternateLocaion 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "新的子模组将要克隆的路径"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "新子模组的名称"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "克隆子模组的 url 地址"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "浅克隆的深度"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "强制显示克隆进度"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "不允许克隆到一个非空目录"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -21672,186 +22391,186 @@
 "git submodule--helper clone [--prefix=<路径>] [--quiet] [--reference <仓库>] "
 "[--name <名字>] [--depth <深度>] [--single-branch] --url <url> --path <路径>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "拒绝在另一个子模组的 git dir 中创建/使用 '%s'"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "无法克隆 '%s' 到子模组路径 '%s'"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "目录非空:'%s'"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "无法得到 '%s' 的子模组目录"
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "子模组 '%2$s' 的更新模式 '%1$s' 无效"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "为子模组 '%2$s' 配置的更新模式 '%1$s' 无效"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "子模组 '%s' 尚未初始化"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "也许您想要执行 'update --init'?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "略过未合并的子模组 %s"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "略过子模组 '%s'"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "克隆 '%s' 失败。按计划重试"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, 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:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "到工作区的路径"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "工作区中的路径,递归嵌套子模组"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase、merge、checkout 或 none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "创建一个指定深度的浅克隆"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "并发任务"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "初始克隆是否应该遵守推荐的浅克隆选项"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "不要输出克隆进度"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 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:2371
 msgid "bad value for update parameter"
 msgstr "update 参数取值错误"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
 "the superproject is not on any branch"
 msgstr "子模组(%s)的分支配置为继承上级项目的分支,但是上级项目不在任何分支上"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "无法获得子模组 '%s' 的仓库句柄"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "在子模组中递归"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 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:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "检查写入 .gitmodules 文件是否安全"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "取消 .gitmodules 文件中的设置"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <名称> [<值>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <名称>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "请确认 .gitmodules 文件在工作区里"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "阻止设置子模组 URL 的输出"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "抑制设置子模组 URL 的输出"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 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:2719
 msgid "set the default tracking branch to master"
 msgstr "设置默认跟踪分支为 master"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "设置默认跟踪分支"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 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:2726
 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:2733
 msgid "--branch or --default required"
 msgstr "需要 --branch 或 --default"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch 和 --default 是互斥的"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s 不支持 --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' 不是一个有效的 submodule--helper 子命令"
@@ -21864,23 +22583,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <名称>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "不显示非符号(分离的)引用的错误信息"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "删除符号引用"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "缩短引用输出"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "原因"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "更新的原因"
 
@@ -21911,17 +22630,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<格式>] <标签名>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "未发现标签 '%s'。"
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "已删除标签 '%s'(曾为 %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -21934,7 +22653,7 @@
 "  %s\n"
 "以 '%c' 开头的行将被忽略。\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -21948,15 +22667,11 @@
 "  %s\n"
 "以 '%c' 开头的行将被保留,如果您愿意也可以删除它们。\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "无法签署标签"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "无法写标签文件"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -21969,143 +22684,139 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "坏的对象类型。"
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "无标签说明?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "标签说明被保留在 %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "列出标签名称"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "每个标签信息打印 <n> 行"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "删除标签"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "验证标签"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "标签创建选项"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "附注标签,需要一个说明"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "标签说明"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "强制编辑标签说明"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "附注并附加 GPG 签名的标签"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "使用另外的私钥签名该标签"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "如果存在,替换现有的标签"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "创建引用日志"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "标签列表选项"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "以列的方式显示标签列表"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "只打印包含该提交的标签"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "只打印不包含该提交的标签"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "只打印已经合并的标签"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "只打印尚未合并的标签"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "只打印指向该对象的标签"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column 和 -n 不兼容"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "-n 选项只允许用在列表显示模式"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "--contains 选项只允许用在列表显示模式"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "--no-contains 选项只允许用在列表显示模式"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "--points-at 选项只允许用在列表显示模式"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "--merged 和 --no-merged 选项只允许用在列表显示模式"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "只允许一个 -F 或 -m 选项。"
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "太多参数"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' 不是一个有效的标签名称。"
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "标签 '%s' 已存在"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "已更新标签 '%s'(曾为 %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "展开对象中"
 
@@ -22166,157 +22877,157 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<选项>] [--] [<文件>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr "当索引需要更新时继续刷新"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "刷新:忽略子模组"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "不忽略新的文件"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "让文件替换目录(反之亦然)"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "通知文件从工作区丢失"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "即使索引区包含未合并的条目也执行刷新"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "刷新统计信息"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "类似于 --refresh,但是忽略 assume-unchanged 设置"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<存取模式>,<对象>,<路径>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "添加指定的条目到索引区"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "把文件标记为 \"没有变更\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "清除 assumed-unchanged 位"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "把文件标记为 \"仅索引\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "清除 skip-worktree 位"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "不要触碰仅索引条目"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr "只添加到索引区;不添加对象到对象库"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr "即使存在工作区里,也删除路径"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "携带 --stdin:输入的行以 null 字符终止"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "从标准输入中读取需要更新的路径列表"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "从标准输入添加条目到索引区"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "为指定文件重新生成第2和第3暂存区"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "只更新与 HEAD 不同的条目"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "忽略工作区丢失的文件"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "在标准输出显示操作"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(for porcelains) 忘记保存的未解决的冲突"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "以这种格式写入索引区"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "启用或禁用索引拆分"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "启用/禁用对未跟踪文件的缓存"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "测试文件系统是否支持未跟踪文件缓存"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "无需检测文件系统,启用对未跟踪文件的缓存"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "即使没有被标记为已更改,也要写出索引"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "启用或禁用文件系统监控"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "标记文件为 fsmonitor 有效"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "清除 fsmonitor 有效位"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 "core.splitIndex 被设置为 false。如果您确实要启用索引拆分,请删除或修改它。"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 "core.splitIndex 被设置为 true。如果您确实要禁用索引拆分,请删除或修改它。"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -22324,11 +23035,11 @@
 "core.untrackedCache 被设置为 true。如果您确实要禁用未跟踪文件缓存,请删除或修"
 "改它。"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "缓存未跟踪文件被禁用"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -22336,25 +23047,25 @@
 "core.untrackedCache 被设置为 false。如果您确实要启用未跟踪文件缓存,请删除或"
 "修改它。"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "缓存未跟踪文件在 '%s' 启用"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor 未设置;如果想要启用 fsmonitor 请设置该选项"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor 被启用"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr "core.fsmonitor 已设置;如果想要禁用 fsmonitor 请移除该选项"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor 被禁用"
 
@@ -22446,89 +23157,63 @@
 msgid "print tag contents"
 msgstr "打印标签内容"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<选项>] <路径> [<提交>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<选项>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<选项>] <路径>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <工作区> <新路径>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<选项>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<选项>] <工作区>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <路径>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "删除 '%s' 失败"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "不是一个有效的目录"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "gitdir 文件不存在"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "无法读取 gitdir 文件(%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "读取过短(期望 %<PRIuMAX> 字节,读取 %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "无效的 gitdir 文件"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "gitdir 文件指向一个不存在的位置"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "删除 %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "报告清除的工作区"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "将早于 <时间> 的工作区过期"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' 已经存在"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "无法使用的工作区目标 '%s'"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22537,7 +23222,7 @@
 "'%s' 是一个丢失但锁定的工作区,\n"
 "使用 '%s -f -f' 覆盖,或用 'unlock' 和 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22546,115 +23231,127 @@
 "'%s' 是一个丢失但已经注册的工作区,\n"
 "使用 '%s -f' 覆盖,或用 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "不能创建目录 '%s'"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "准备工作区(新分支 '%s')"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "准备工作区(重置分支 '%s',之前为 %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "准备工作区(检出 '%s')"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "准备工作区(分离头指针 %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "检出 <分支>,即使已经被检出到其它工作区"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "创建一个新分支"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "创建或重置一个分支"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "生成新的工作区"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "锁定新工作区"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "设置跟踪模式(参见 git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "尝试为新分支名匹配一个远程跟踪分支"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b、-B 和 --detach 是互斥的"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "只能在创建新分支时使用选项 --[no-]track "
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "显示扩展的注释和原因(如果有)"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr "向早于 <时间> 的工作区添添加“可修剪”注释"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose 和 --porcelain 互斥"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "锁定原因"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' 不是一个工作区"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "主工作区无法被加锁或解锁"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' 已被锁定,原因:%s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' 已被锁定"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' 未被锁定"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "不能移动或删除包含子模组的工作区"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr "强制移动,即使工作区是脏的或已锁定"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' 是一个主工作区"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "无法从 '%s' 算出目标名称"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -22663,7 +23360,7 @@
 "无法移动一个锁定的工作区,锁定原因:%s\n"
 "使用 'move -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -22671,36 +23368,36 @@
 "无法移动一个锁定的工作区,\n"
 "使用 'move -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "验证失败,无法移动工作区:%s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "移动 '%s' 到 '%s' 失败"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "在 '%s' 中执行 'git status' 失败"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr "'%s' 包含修改或未跟踪的文件,使用 --force 删除"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "在 '%s' 中执行 'git status' 失败,退出码 %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr "强制删除,即使工作区是脏的或已锁定"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -22709,7 +23406,7 @@
 "无法删除一个锁定的工作区,锁定原因:%s\n"
 "使用 'remove -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -22717,17 +23414,17 @@
 "无法删除一个锁定的工作区,\n"
 "使用 'remove -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "验证失败,无法删除工作区:%s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "修理:%s:%s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "错误:%s:%s"
@@ -22748,15 +23445,158 @@
 msgid "only useful for debugging"
 msgstr "只对调试有用"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <路径>] [-c <名称>=<取值>]\n"
+"           [--exec-path[=<路径>]] [--html-path] [--man-path] [--info-path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>]\n"
+"           [--super-prefix=<路径>] [--config-env=<名称>=<环境变量>]\n"
+"           <命令> [<参数>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。\n"
+"查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的\n"
+"帮助。\n"
+"有关系统的概述,查看 'git help git'。"
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "没有为 --git-dir 提供目录\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "没有为 --namespace 提供命名空间\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "没有为 --work-tree 提供目录\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "没有为 --super-prefix 提供前缀\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "应为 -c 提供一个配置字符串\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "没有为 --config-env 提供配置名称\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "没有为 -C 提供目录\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "未知选项:%s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "在扩展别名 '%s' 时:'%s'"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"别名 '%s' 修改环境变量。您可以使用在别名中\n"
+"使用 '!git'"
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "%s 的空别名"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "递归的别名:%s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "在标准输出写入失败"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "到标准输出的未知写入错误"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "标准输出关闭失败"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "检测到别名循环:'%s'的扩展未终止:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "不能作为内置命令处理 %s"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"用法:%s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr "展开别名命令 '%s' 失败,'%s' 不是一个 git 命令\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "运行命令 '%s' 失败:%s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "--packfile 的参数必须是有效的哈希值(得到 '%s')"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "不是 git 仓库"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile 需要 --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args 只能和 --packfile 一起使用"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "未处理的选项"
@@ -22782,133 +23622,109 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "对能力广告之后立即退出"
 
-#: git.c:28
+#: 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
+msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
+msgstr "test-helper simple-ipc is-active    [<名字>] [<选项>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<名字>] [<线程>]"
+
+#: t/helper/test-simple-ipc.c:684
+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
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<名字>] [<最大等待>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<名字>] [<令牌>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<名字>] [<字节数>] [<字节>]"
+
+#: t/helper/test-simple-ipc.c:688
 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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
-msgstr ""
-"git [--version] [--help] [-C <路径>] [-c <名称>=<取值>]\n"
-"           [--exec-path[=<路径>]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>]\n"
-"           <命令> [<参数>]"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
+msgstr "test-helper simple-ipc multiple     [<名字>] [<线程>] [<字节计数>] [<批处理大小>]"
 
-#: git.c:35
-msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
-msgstr ""
-"命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。\n"
-"查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的\n"
-"帮助。\n"
-"有关系统的概述,查看 'git help git'。"
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "unix 域套接字的名称或路径名"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "没有为 --git-dir 提供目录\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "命名管道的名字"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "没有为 --namespace 提供命名空间\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "服务器线程池中的线程数"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "没有为 --work-tree 提供目录\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "等待守护进程启动或停止的秒数"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "没有为 --super-prefix 提供前缀\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "字节数目"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "应为 -c 提供一个配置字符串\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "每个线程的请求数"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "没有为 -C 提供目录\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "字节"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "未知选项:%s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "ballast character"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "在扩展别名 '%s' 时:'%s'"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "令牌"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"别名 '%s' 修改环境变量。您可以使用在别名中\n"
-"使用 '!git'"
-
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "%s 的空别名"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "递归的别名:%s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "在标准输出写入失败"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "到标准输出的未知写入错误"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "标准输出关闭失败"
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "检测到别名循环:'%s'的扩展未终止:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "不能作为内置命令处理 %s"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"用法:%s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr "展开别名命令 '%s' 失败,'%s' 不是一个 git 命令\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "运行命令 '%s' 失败:%s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "发送到服务器的命令令牌"
 
 #: http.c:399
 #, c-format
@@ -22946,7 +23762,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "无法将 SSL 后端设置为 '%s':已经设置"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23097,52 +23913,52 @@
 msgid "no libc information available\n"
 msgstr "libc 信息不可用\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "参数"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "对象过滤"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "到期时间"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "空操作(向后兼容)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "更加详细"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "更加安静"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "用 <n> 位数字显示对象名"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "设置如何删除提交说明里的空格和#注释"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "从文件读取路径表达式"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "使用 --pathspec-from-file,路径表达式用空字符分隔"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "key"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "排序的字段名"
 
@@ -23150,14 +23966,6 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr "如果可能,重用冲突解决更新索引"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "头指针分离于 "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "头指针分离自 "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "添加文件内容至索引"
@@ -23487,8 +24295,8 @@
 msgstr "写入和校验多包索引"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "创建一个标签对象"
+msgid "Creates a tag object with extra validation"
+msgstr "创建一个有额外验证的标签对象"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -23796,69 +24604,55 @@
 msgstr "忽略指定的未跟踪文件"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "映射作者/提交者的名称和/或邮件地址"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "定义子模组属性"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git 名字空间"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "与远程仓库交互的助手程序"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git 仓库布局"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "指定 Git 的版本和版本范围"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "将一个仓库安装到另外一个仓库中"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "一个 Git 教程:第二部分"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "一个 Git 教程"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Git 推荐的工作流概览"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "坏的输入版本:$arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "未提供日志文件"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "不能读取 $file 来重放"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? 您在说什么?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
 msgstr "二分查找运行失败:没有提供命令。"
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "运行 $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -23867,11 +24661,11 @@
 "二分查找运行失败:\n"
 "命令 '$command' 的退出码 $res 小于 0 或大于等于 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
 msgstr "二分查找不能继续运行"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
@@ -23880,14 +24674,10 @@
 "二分查找运行失败:\n"
 "'bisect-state $state' 退出码为 $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
 msgstr "二分查找运行成功"
 
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "我们没有在二分查找。"
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
@@ -24126,7 +24916,7 @@
 "p, pick <提交> = 使用提交\n"
 "r, reword <提交> = 使用提交,但修改提交说明\n"
 "e, edit <提交> = 使用提交,但停下来修补\n"
-"s, squash <提交> = 使用提交,但融合到前一个提交\n"
+"s, squash <提交> = 使用提交,但挤压到前一个提交\n"
 "f, fixup <提交> = 类似于 \"squash\",但丢弃提交说明日志\n"
 "x, exec <命令> = 使用 shell 运行命令(此行剩余部分)\n"
 "d, drop <提交> = 删除提交\n"
@@ -24190,7 +24980,7 @@
 #: git-rebase--preserve-merges.sh:421
 #, sh-format
 msgid "Refusing to squash a merge: $sha1"
-msgstr "拒绝压缩一个合并:$sha1"
+msgstr "拒绝挤压一个合并:$sha1"
 
 #: git-rebase--preserve-merges.sh:439
 #, sh-format
@@ -24271,7 +25061,6 @@
 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"
@@ -24332,7 +25121,7 @@
 "\n"
 "  git rebase --continue\n"
 msgstr ""
-"您已暂存了工作区的修改。如果这些修改要压缩到前一个提交,执行:\n"
+"您已暂存了工作区的修改。如果这些修改要挤压到前一个提交,执行:\n"
 "\n"
 "  git commit --amend $gpg_sign_opt_quoted\n"
 "\n"
@@ -24780,26 +25569,31 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "本地时间偏移量大于等于 24 小时\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "致命错误:命令 '%s' 已终止,退出代码为 %d"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "编辑器非正常退出,终止所有操作"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "'%s' 包含您正在编写的一个中间版本的邮件。\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' 包含编辑的邮件。\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases 和其它选项不兼容\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -24809,47 +25603,47 @@
 "git-send-email 通过 sendemail.* 选项进行设置,注意字母 'e'。\n"
 "设置 sendemail.forbidSendmailVariables 为 false 来禁用这项检查。\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "不能在仓库之外运行 git format-patch\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
 msgstr "`batch-size` 和 `relogin` 必须同时定义(通过命令行或者配置选项)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "未知的 --suppress-cc 字段:'%s'\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "未知的 --confirm 设置:'%s'\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "警告:不支持带引号的 sendmail 别名:%s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "警告:不支持 `:include:`:%s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "警告:不支持 `/file` 或 `|pipe` 重定向:%s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "警告:不能识别的 sendmail 行:%s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -24864,21 +25658,12 @@
 "    * 如果含义为一个文件,使用 \"./%s\",或者\n"
 "    * 如果含义为一个范围,使用 --format-patch 选项。\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "无法打开目录 %s: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"致命错误:%s:%s\n"
-"警告:补丁未能发送\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -24888,17 +25673,17 @@
 "未指定补丁文件!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "在 %s 中没有标题行?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "为写入打开 %s 失败: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -24911,37 +25696,37 @@
 "\n"
 "如果您不想发送摘要,清除内容。\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "无法打开 %s: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "无法打开 %s.final: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
 msgstr "摘要邮件为空,跳过\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "您确认要使用 <%s> [y/N]?"
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
 msgstr "如下文件含 8bit 内容,但没有声明一个 Content-Transfer-Encoding。\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "要声明 8bit 为什么样的编码格式 [UTF-8]?"
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -24953,20 +25738,20 @@
 "\t%s\n"
 "包含模版标题 '*** SUBJECT HERE ***'。如果确实想要发送,使用参数 --force。\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "邮件将要发送给谁?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "致命错误:别名 '%s' 扩展为它自己\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr "Message-ID 被用作第一封邮件的 In-Reply-To ?"
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "错误:不能从 %s 中提取一个有效的邮件地址\n"
@@ -24974,16 +25759,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "如何处理这个地址?([q]uit|[d]rop|[e]dit):"
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "CA 路径 \"%s\" 不存在"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25008,128 +25793,143 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "发送这封邮件?([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "发送要求的邮件回复"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "要求的 SMTP 服务器未被正确定义。"
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "服务器不支持 STARTTLS!%s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS 失败!%s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr "无法正确地初始化 SMTP。检查配置并使用 --smtp-debug。"
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "无法发送 %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "演习发送 %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "正发送 %s\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "演习成功。日志说:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK。日志说:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "结果:"
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "结果:OK\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "无法打开文件 %s"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) 添加 cc:%s 自行 '%s'\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) 添加 to:%s 自行 '%s'\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) 添加 cc:%s 自行 '%s'\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) 添加 cc: %s 自行 '%s'\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) 不能执行 '%s'"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) 添加 %s: %s 自:'%s'\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) 无法关闭管道至 '%s'"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "不能以 7bit 形式发送信息"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "无效的传送编码"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"致命错误:%s:被 sendemail-validate 挂钩拒绝\n"
+"%s\n"
+"警告:补丁未能发送\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "不能打开 %s:%s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s:补丁包含一个超过 998 字符的行"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"致命错误:%s:%d 超过 998 字节\n"
+"警告:补丁未能发送\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, 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:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "您真的要发送 %s?[y|N]:"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 960f716..77a5d57 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -292,8 +292,8 @@
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2020-12-21 07:10+0800\n"
-"PO-Revision-Date: 2020-12-23 22:30+0800\n"
+"POT-Creation-Date: 2021-05-17 16:02+0800\n"
+"PO-Revision-Date: 2021-05-23 15:30+0800\n"
 "Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
 "Language-Team: Chinese (Traditional) <zh-l10n@lists.linux.org.tw>\n"
 "Language: zh_TW\n"
@@ -301,7 +301,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 2.4.2\n"
+"X-Generator: Poedit 2.4.3\n"
 "X-ZhConverter: 繁化姬 dict-f4bc617e-r910 @ 2019/11/16 20:23:12 | https://"
 "zhconvert.org\n"
 
@@ -310,9 +310,9 @@
 msgid "Huh (%s)?"
 msgstr "嗯(%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:65 sequencer.c:3284
-#: sequencer.c:3735 sequencer.c:3890 builtin/rebase.c:1532
-#: builtin/rebase.c:1955
+#: 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
 msgid "could not read index"
 msgstr "無法讀取索引"
 
@@ -340,7 +340,7 @@
 msgid "could not stage '%s'"
 msgstr "無法暫存「%s」"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3478
+#: add-interactive.c:703 add-interactive.c:892 reset.c:89 sequencer.c:3687
 msgid "could not write index"
 msgstr "無法寫入索引"
 
@@ -353,9 +353,9 @@
 #: add-interactive.c:724 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
-msgstr "註:%s 現已不再追蹤。\n"
+msgstr "注意:%s 現已不再追蹤。\n"
 
-#: add-interactive.c:729 apply.c:4125 builtin/checkout.c:295
+#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
 #: builtin/reset.c:145
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
@@ -493,12 +493,12 @@
 msgid "unstaged"
 msgstr "未快取"
 
-#: add-interactive.c:1144 apply.c:4987 apply.c:4990 builtin/am.c:2257
-#: builtin/am.c:2260 builtin/bugreport.c:134 builtin/clone.c:124
-#: builtin/fetch.c:147 builtin/merge.c:284 builtin/pull.c:190
-#: builtin/submodule--helper.c:409 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: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
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "路徑"
@@ -877,8 +877,8 @@
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
 "aborted and the hunk is left unchanged.\n"
 msgstr ""
-"如果不能乾淨地套用,您將有機會重新編輯。如果此區塊的全部內容刪除,則\n"
-"此次編輯被終止,此區塊不會被修改。\n"
+"如果未乾淨套用,您就有機會重新編輯。若刪掉此區塊的全部內容,則會中止\n"
+"本次編輯,區塊則不會被修改。\n"
 
 #: add-patch.c:1132
 msgid "could not parse hunk header"
@@ -903,7 +903,7 @@
 #: add-patch.c:1246 git-add--interactive.perl:1242
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
-msgstr "您的編輯塊不能被應用。重新編輯(選擇 \"no\" 捨棄!) [y/n]? "
+msgstr "未套用編輯區塊。是否重新編輯(輸入 “no” 捨棄!) [y/n]? "
 
 #: add-patch.c:1289
 msgid "The selected hunks do not apply to the index!"
@@ -953,7 +953,7 @@
 
 #: add-patch.c:1548 git-add--interactive.perl:1606
 msgid "go to which hunk (<ret> to see more)? "
-msgstr "跳轉到哪個區塊(<Enter> 檢視更多)? "
+msgstr "要跳轉到哪個區塊(<Enter> 檢視更多)? "
 
 #: add-patch.c:1549 git-add--interactive.perl:1608
 msgid "go to which hunk? "
@@ -994,7 +994,7 @@
 #: add-patch.c:1623
 #, c-format
 msgid "Split into %d hunks."
-msgstr "分割為 %d 塊。"
+msgstr "分割為 %d 個區塊。"
 
 #: add-patch.c:1627
 msgid "Sorry, cannot edit this hunk"
@@ -1004,7 +1004,7 @@
 msgid "'git apply' failed"
 msgstr "'git apply' 失敗"
 
-#: advice.c:143
+#: advice.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1013,37 +1013,37 @@
 "\n"
 "請使用「git config advice.%s false」來停用此訊息"
 
-#: advice.c:159
+#: advice.c:161
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%s提示:%.*s%s\n"
 
-#: advice.c:250
+#: advice.c:252
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "無法揀選,因為您有未合併的檔案。"
 
-#: advice.c:252
+#: advice.c:254
 msgid "Committing is not possible because you have unmerged files."
 msgstr "無法提交,因為您有未合併的檔案。"
 
-#: advice.c:254
+#: advice.c:256
 msgid "Merging is not possible because you have unmerged files."
 msgstr "無法合併,因為您有未合併的檔案。"
 
-#: advice.c:256
+#: advice.c:258
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "無法拉取,因為您有未合併的檔案。"
 
-#: advice.c:258
+#: advice.c:260
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "無法還原提交,因為您有未合併的檔案。"
 
-#: advice.c:260
+#: advice.c:262
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "無法 %s,因為您有未合併的檔案。"
 
-#: advice.c:268
+#: advice.c:270
 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."
@@ -1051,23 +1051,36 @@
 "請在工作區改正檔案,然後酌情使用 'git add/rm <檔案>' 指令標記\n"
 "解決方案並提交。"
 
-#: advice.c:276
+#: advice.c:278
 msgid "Exiting because of an unresolved conflict."
 msgstr "因為存在未解決的衝突而離開。"
 
-#: advice.c:281 builtin/merge.c:1369
+#: advice.c:283 builtin/merge.c:1374
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "您尚未結束您的合併(存在 MERGE_HEAD)。"
 
-#: advice.c:283
+#: advice.c:285
 msgid "Please, commit your changes before merging."
 msgstr "請在合併前先提交您的修改。"
 
-#: advice.c:284
+#: advice.c:286
 msgid "Exiting because of unfinished merge."
 msgstr "因為存在未完成的合併而離開。"
 
-#: advice.c:290
+#: advice.c:296
+#, 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 "沒有符合下列路徑規格的合規路徑,但有符合目前稀疏簽出之外的索引項目:\n"
+
+#: advice.c:303
+msgid ""
+"Disable or modify the sparsity rules if you intend to update such entries."
+msgstr "若有意更新這些項目,請停用或修改稀疏規則。"
+
+#: advice.c:310
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -1115,82 +1128,78 @@
 msgid "unclosed quote"
 msgstr "未閉合的引號"
 
-#: apply.c:69
+#: apply.c:70
 #, c-format
 msgid "unrecognized whitespace option '%s'"
 msgstr "無法識別的空白字元選項 '%s'"
 
-#: apply.c:85
+#: apply.c:86
 #, c-format
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "無法識別的空白字元忽略選項 '%s'"
 
-#: apply.c:135
+#: apply.c:136
 msgid "--reject and --3way cannot be used together."
 msgstr "--reject 和 --3way 不能同時使用。"
 
-#: apply.c:137
-msgid "--cached and --3way cannot be used together."
-msgstr "--cached 和 --3way 不能同時使用。"
-
-#: apply.c:140
+#: apply.c:139
 msgid "--3way outside a repository"
 msgstr "--3way 在版本庫之外"
 
-#: apply.c:151
+#: apply.c:150
 msgid "--index outside a repository"
 msgstr "--index 在版本庫之外"
 
-#: apply.c:154
+#: apply.c:153
 msgid "--cached outside a repository"
 msgstr "--cached 在版本庫之外"
 
-#: apply.c:801
+#: apply.c:800
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "無法準備時間戳正規表示式 %s"
 
-#: apply.c:810
+#: apply.c:809
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec 返回 %d,輸入為:%s"
 
-#: apply.c:884
+#: apply.c:883
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "不能在修補檔的第 %d 行找到檔案名"
 
-#: apply.c:922
+#: apply.c:921
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply:錯誤的 git-diff - 應為 /dev/null,但在第 %2$d 行得到 %1$s"
 
-#: apply.c:928
+#: apply.c:927
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply:錯誤的 git-diff - 第 %d 行上新檔案名不一致"
 
-#: apply.c:929
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply:錯誤的 git-diff - 第 %d 行上舊檔案名不一致"
 
-#: apply.c:934
+#: apply.c:933
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply:錯誤的 git-diff - 第 %d 行處應為 /dev/null"
 
-#: apply.c:963
+#: apply.c:962
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "第 %d 行包含無效檔案模式:%s"
 
-#: apply.c:1282
+#: apply.c:1281
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "不一致的檔案頭,%d 行和 %d 行"
 
-#: apply.c:1372
+#: apply.c:1371
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1200,91 +1209,91 @@
 "components (line %d)"
 msgstr[0] "當移除 %d 個前導路徑後 git diff 頭缺乏檔案名訊息(第 %d 行)"
 
-#: apply.c:1385
+#: apply.c:1384
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff 的標頭訊息中缺乏檔案名訊息(第 %d 行)"
 
-#: apply.c:1481
+#: apply.c:1480
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount:意外的行:%.*s"
 
-#: apply.c:1550
+#: apply.c:1549
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
-msgstr "第 %d 行的修補檔片段沒有標頭訊息:%.*s"
+msgstr "第 %d 行的修補檔區塊沒有標頭訊息:%.*s"
 
-#: apply.c:1753
+#: apply.c:1752
 msgid "new file depends on old contents"
 msgstr "新檔案依賴舊內容"
 
-#: apply.c:1755
+#: apply.c:1754
 msgid "deleted file still has contents"
 msgstr "刪除的檔案仍有內容"
 
-#: apply.c:1789
+#: apply.c:1788
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "修補檔在第 %d 行發現損壞"
 
-#: apply.c:1826
+#: apply.c:1825
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "新檔案 %s 依賴舊內容"
 
-#: apply.c:1828
+#: apply.c:1827
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "刪除的檔案 %s 仍有內容"
 
-#: apply.c:1831
+#: apply.c:1830
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** 警告:檔案 %s 成為空檔案但並未刪除"
 
-#: apply.c:1978
+#: apply.c:1977
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "二進位修補檔在第 %d 行損壞:%.*s"
 
-#: apply.c:2015
+#: apply.c:2014
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "無法識別的二進位修補檔位於第 %d 行"
 
-#: apply.c:2177
+#: apply.c:2176
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "修補檔案的第 %d 行只有垃圾資料"
 
-#: apply.c:2263
+#: apply.c:2262
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "無法讀取符號連結 %s"
 
-#: apply.c:2267
+#: apply.c:2266
 #, c-format
 msgid "unable to open or read %s"
 msgstr "不能開啟或讀取 %s"
 
-#: apply.c:2936
+#: apply.c:2935
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "無效的行首字元:'%c'"
 
-#: apply.c:3057
+#: apply.c:3056
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "區塊 #%d 成功套用於 %d(位移 %d 行)。"
 
-#: apply.c:3069
+#: apply.c:3068
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
-msgstr "上下文減少到(%ld/%ld)以在第 %d 行套用修補檔片段"
+msgstr "上下文減少到(%ld/%ld)以在第 %d 行套用修補檔區塊"
 
-#: apply.c:3075
+#: apply.c:3074
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1293,427 +1302,434 @@
 "當查詢:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3096
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "缺少 '%s' 的二進位修補檔資料"
 
-#: apply.c:3105
+#: apply.c:3104
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "不能反向套用一個缺少到 '%s' 的反向資料區塊的二進位修補檔"
 
-#: apply.c:3152
+#: apply.c:3151
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "不能在 '%s' 上套用沒有完整索引行的二進位修補檔"
 
-#: apply.c:3163
+#: apply.c:3162
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "修補檔套用到 '%s'(%s),但是和目前內容不符合。"
 
-#: apply.c:3171
+#: apply.c:3170
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "修補檔套用到空檔案 '%s',但其並非空檔案"
 
-#: apply.c:3189
+#: apply.c:3188
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "無法讀取 '%2$s' 必需的目標檔案 %1$s"
 
-#: apply.c:3202
+#: apply.c:3201
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "二進位修補檔未套用到 '%s'"
 
-#: apply.c:3209
+#: apply.c:3208
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "到 '%s' 的二進位修補檔產生了不正確的結果(應為 %s,卻為 %s)"
 
-#: apply.c:3230
+#: apply.c:3229
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "打修補檔失敗:%s:%ld"
 
-#: apply.c:3353
+#: apply.c:3352
 #, c-format
 msgid "cannot checkout %s"
 msgstr "不能檢出 %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:73 setup.c:308
+#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
+#: setup.c:308
 #, c-format
 msgid "failed to read %s"
 msgstr "無法讀取 %s"
 
-#: apply.c:3413
+#: apply.c:3412
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "讀取位於符號連結中的 '%s'"
 
-#: apply.c:3442 apply.c:3685
+#: apply.c:3441 apply.c:3687
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "路徑 %s 已經被重新命名/刪除"
 
-#: apply.c:3528 apply.c:3700
+#: apply.c:3527 apply.c:3702
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s:不存在於索引中"
 
-#: apply.c:3537 apply.c:3708 apply.c:3952
+#: apply.c:3536 apply.c:3710 apply.c:3954
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s:和索引不符合"
 
-#: apply.c:3572
-msgid "repository lacks the necessary blob to fall back on 3-way merge."
-msgstr "版本庫缺乏必要的資料物件以進行三方合併。"
+#: apply.c:3571
+msgid "repository lacks the necessary blob to perform 3-way merge."
+msgstr "版本庫缺少用來進行三方合併所需要的資料物件。"
 
-#: apply.c:3575
+#: apply.c:3574
 #, c-format
-msgid "Falling back to three-way merge...\n"
-msgstr "回落到三方合併...\n"
+msgid "Performing three-way merge...\n"
+msgstr "正在進行三方合併⋯⋯\n"
 
-#: apply.c:3591 apply.c:3595
+#: apply.c:3590 apply.c:3594
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "無法讀取 '%s' 的目前內容"
 
-#: apply.c:3607
+#: apply.c:3606
 #, c-format
-msgid "Failed to fall back on three-way merge...\n"
-msgstr "無法回落到三方合併...\n"
+msgid "Failed to perform three-way merge...\n"
+msgstr "無法進行三方合併⋯⋯\n"
 
-#: apply.c:3621
+#: apply.c:3620
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "套用修補檔到 '%s' 存在衝突。\n"
 
-#: apply.c:3626
+#: apply.c:3625
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "成功套用修補檔到 '%s'。\n"
 
-#: apply.c:3652
+#: apply.c:3642
+#, c-format
+msgid "Falling back to direct application...\n"
+msgstr ""
+
+#: apply.c:3654
 msgid "removal patch leaves file contents"
 msgstr "移除修補檔仍留下了檔案內容"
 
-#: apply.c:3725
+#: apply.c:3727
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s:錯誤類型"
 
-#: apply.c:3727
+#: apply.c:3729
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s 的類型是 %o,應為 %o"
 
-#: apply.c:3892 apply.c:3894 read-cache.c:832 read-cache.c:858
-#: read-cache.c:1313
+#: apply.c:3894 apply.c:3896 read-cache.c:861 read-cache.c:890
+#: read-cache.c:1351
 #, c-format
 msgid "invalid path '%s'"
 msgstr "無效路徑 '%s'"
 
-#: apply.c:3950
+#: apply.c:3952
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s:已經存在於索引中"
 
-#: apply.c:3954
+#: apply.c:3956
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s:已經存在於工作區中"
 
-#: apply.c:3974
+#: apply.c:3976
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "%2$s 的新模式(%1$o)和舊模式(%3$o)不符合"
 
-#: apply.c:3979
+#: apply.c:3981
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "%2$s 的新模式(%1$o)和 %4$s 的舊模式(%3$o)不符合"
 
-#: apply.c:3999
+#: apply.c:4001
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "受影響的檔案 '%s' 位於符號連結中"
 
-#: apply.c:4003
+#: apply.c:4005
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s:修補檔未套用"
 
-#: apply.c:4018
+#: apply.c:4020
 #, c-format
 msgid "Checking patch %s..."
 msgstr "正在檢查修補檔 %s..."
 
-#: apply.c:4110
+#: apply.c:4112
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "子模組 %s 的 sha1 訊息缺少或無效"
 
-#: apply.c:4117
+#: apply.c:4119
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "%s 的模式變更,但它不在目前 HEAD 中"
 
-#: apply.c:4120
+#: apply.c:4122
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 訊息缺少或無效(%s)。"
 
-#: apply.c:4129
+#: apply.c:4131
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "不能在暫時索引中新增 %s"
 
-#: apply.c:4139
+#: apply.c:4141
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "不能把暫時索引寫入到 %s"
 
-#: apply.c:4277
+#: apply.c:4279
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "不能從索引中移除 %s"
 
-#: apply.c:4311
+#: apply.c:4313
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "子模組 %s 損壞的修補檔"
 
-#: apply.c:4317
+#: apply.c:4319
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "不能對建立檔案 '%s' 呼叫 stat"
 
-#: apply.c:4325
+#: apply.c:4327
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "不能為建立檔案 %s 建立後端儲存"
 
-#: apply.c:4331 apply.c:4476
+#: apply.c:4333 apply.c:4478
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "無法為 %s 新增快取條目"
 
-#: apply.c:4374 builtin/bisect--helper.c:524
+#: apply.c:4376 builtin/bisect--helper.c:523
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "寫入 '%s' 失敗"
 
-#: apply.c:4378
+#: apply.c:4380
 #, c-format
 msgid "closing file '%s'"
 msgstr "關閉檔案 '%s'"
 
-#: apply.c:4448
+#: apply.c:4450
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "不能寫入檔案 '%s' 權限 %o"
 
-#: apply.c:4546
+#: apply.c:4548
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "成功套用修補檔 %s。"
 
-#: apply.c:4554
+#: apply.c:4556
 msgid "internal error"
 msgstr "內部錯誤"
 
-#: apply.c:4557
+#: apply.c:4559
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "套用 %%s 個修補檔,其中 %d 個被拒絕..."
 
-#: apply.c:4568
+#: apply.c:4570
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "截短 .rej 檔案名為 %.*s.rej"
 
-#: apply.c:4576 builtin/fetch.c:927 builtin/fetch.c:1228
+#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
 #, c-format
 msgid "cannot open %s"
 msgstr "不能開啟 %s"
 
-#: apply.c:4590
+#: apply.c:4592
 #, c-format
 msgid "Hunk #%d applied cleanly."
-msgstr "第 #%d 個片段成功應用。"
+msgstr "成功套用第 #%d 個區塊。"
 
-#: apply.c:4594
+#: apply.c:4596
 #, c-format
 msgid "Rejected hunk #%d."
-msgstr "拒絕第 #%d 個片段。"
+msgstr "拒絕第 #%d 個區塊。"
 
-#: apply.c:4718
+#: apply.c:4725
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "略過修補檔 '%s'。"
 
-#: apply.c:4726
+#: apply.c:4733
 msgid "unrecognized input"
 msgstr "無法識別的輸入"
 
-#: apply.c:4746
+#: apply.c:4753
 msgid "unable to read index file"
 msgstr "無法讀取索引檔案"
 
-#: apply.c:4903
+#: apply.c:4910
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "不能開啟修補檔 '%s':%s"
 
-#: apply.c:4930
+#: apply.c:4937
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "抑制下仍有 %d 個空白字元誤用"
 
-#: apply.c:4936 apply.c:4951
+#: apply.c:4943 apply.c:4958
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d 行新增了空白字元誤用。"
 
-#: apply.c:4944
+#: apply.c:4951
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
-msgstr[0] "修復空白錯誤後,應用了 %d 行。"
+msgstr[0] "修復空白錯誤後,套用了 %d 行。"
 
-#: apply.c:4960 builtin/add.c:618 builtin/mv.c:304 builtin/rm.c:406
+#: apply.c:4967 builtin/add.c:679 builtin/mv.c:304 builtin/rm.c:423
 msgid "Unable to write new index file"
 msgstr "無法寫入新索引檔案"
 
-#: apply.c:4988
+#: apply.c:4995
 msgid "don't apply changes matching the given path"
-msgstr "不要應用與給出路徑向符合的變更"
+msgstr "不要套用符合提供路徑的變更"
 
-#: apply.c:4991
+#: apply.c:4998
 msgid "apply changes matching the given path"
-msgstr "應用與給出路徑向符合的變更"
+msgstr "套用符合提供路徑的變更"
 
-#: apply.c:4993 builtin/am.c:2266
+#: apply.c:5000 builtin/am.c:2317
 msgid "num"
 msgstr "數字"
 
-#: apply.c:4994
+#: apply.c:5001
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "從傳統的 diff 路徑中移除指定數量的前導斜線"
 
-#: apply.c:4997
+#: apply.c:5004
 msgid "ignore additions made by the patch"
 msgstr "忽略修補檔中的新增的檔案"
 
-#: apply.c:4999
+#: apply.c:5006
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "不套用修補檔,而是顯示輸入的差異統計(diffstat)"
 
-#: apply.c:5003
+#: apply.c:5010
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "以十進位數顯示新增和刪除的行數"
 
-#: apply.c:5005
+#: apply.c:5012
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "不套用修補檔,而是顯示輸入的概要"
 
-#: apply.c:5007
+#: apply.c:5014
 msgid "instead of applying the patch, see if the patch is applicable"
-msgstr "不套用修補檔,而是檢視修補檔是否可應用"
+msgstr "不套用修補檔,而是檢視修補檔是否可套用"
 
-#: apply.c:5009
+#: apply.c:5016
 msgid "make sure the patch is applicable to the current index"
 msgstr "確認修補檔可以套用到目前索引"
 
-#: apply.c:5011
+#: apply.c:5018
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "使用指令 `git add --intent-to-add` 標記新增檔案"
 
-#: apply.c:5013
+#: apply.c:5020
 msgid "apply a patch without touching the working tree"
 msgstr "套用修補檔而不修改工作區"
 
-#: apply.c:5015
+#: apply.c:5022
 msgid "accept a patch that touches outside the working area"
 msgstr "接受修改工作區之外檔案的修補檔"
 
-#: apply.c:5018
+#: apply.c:5025
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "還套用此修補檔(與 --stat/--summary/--check 選項同時使用)"
 
-#: apply.c:5020
-msgid "attempt three-way merge if a patch does not apply"
-msgstr "如果一個修補檔不能應用則嘗試三方合併"
+#: apply.c:5027
+msgid "attempt three-way merge, fall back on normal patch if that fails"
+msgstr "嘗試三方合併。如果失敗,則回到正常修補檔 (patch) 模式"
 
-#: apply.c:5022
+#: apply.c:5029
 msgid "build a temporary index based on embedded index information"
 msgstr "建立一個暫時索引基於嵌入的索引訊息"
 
-#: apply.c:5025 builtin/checkout-index.c:182 builtin/ls-files.c:525
+#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
 msgid "paths are separated with NUL character"
 msgstr "路徑以 NUL 字元分隔"
 
-#: apply.c:5027
+#: apply.c:5034
 msgid "ensure at least <n> lines of context match"
 msgstr "確保至少符合 <n> 行上下文"
 
-#: apply.c:5028 builtin/am.c:2245 builtin/interpret-trailers.c:98
-#: builtin/interpret-trailers.c:100 builtin/interpret-trailers.c:102
-#: builtin/pack-objects.c:3562 builtin/rebase.c:1346
+#: apply.c:5035 builtin/am.c:2293 builtin/am.c:2296
+#: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3831
+#: builtin/rebase.c:1347
 msgid "action"
 msgstr "動作"
 
-#: apply.c:5029
+#: apply.c:5036
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "檢查新增和修改的行中間的空白字元濫用"
 
-#: apply.c:5032 apply.c:5035
+#: apply.c:5039 apply.c:5042
 msgid "ignore changes in whitespace when finding context"
 msgstr "尋找上下文時忽略空白字元的變更"
 
-#: apply.c:5038
+#: apply.c:5045
 msgid "apply the patch in reverse"
 msgstr "反向套用修補檔"
 
-#: apply.c:5040
+#: apply.c:5047
 msgid "don't expect at least one line of context"
 msgstr "無需至少一行上下文"
 
-#: apply.c:5042
+#: apply.c:5049
 msgid "leave the rejected hunks in corresponding *.rej files"
-msgstr "將拒絕的修補檔片段儲存在對應的 *.rej 檔案中"
+msgstr "將拒絕的修補檔區塊儲存在對應的 *.rej 檔案中"
 
-#: apply.c:5044
+#: apply.c:5051
 msgid "allow overlapping hunks"
-msgstr "允許重疊的修補檔片段"
+msgstr "允許重疊的修補檔區塊"
 
-#: apply.c:5045 builtin/add.c:329 builtin/check-ignore.c:22
-#: builtin/commit.c:1364 builtin/count-objects.c:98 builtin/fsck.c:775
-#: builtin/log.c:2287 builtin/mv.c:123 builtin/read-tree.c:128
+#: 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
 msgid "be verbose"
 msgstr "詳細輸出"
 
-#: apply.c:5047
+#: apply.c:5054
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "允許不正確的檔案末尾換行符號"
 
-#: apply.c:5050
+#: apply.c:5057
 msgid "do not trust the line counts in the hunk headers"
-msgstr "不信任修補檔片段的標頭訊息中的行號"
+msgstr "不信任修補檔區塊的標頭訊息中的行號"
 
-#: apply.c:5052 builtin/am.c:2254
+#: apply.c:5059 builtin/am.c:2305
 msgid "root"
 msgstr "根目錄"
 
-#: apply.c:5053
+#: apply.c:5060
 msgid "prepend <root> to all filenames"
 msgstr "為所有檔案名前新增 <根目錄>"
 
@@ -1773,147 +1789,147 @@
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
 msgstr ""
-"git archive --remote <版本庫> [--exec <指令>] [<選項>] <樹或提交> [<路徑>...]"
+"git archive --remote <版本庫> [--exec <命令>] [<選項>] <樹或提交> [<路徑>...]"
 
 #: archive.c:17
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
-msgstr "git archive --remote <版本庫> [--exec <指令>] --list"
+msgstr "git archive --remote <版本庫> [--exec <命令>] --list"
 
-#: archive.c:192
+#: archive.c:188
 #, c-format
 msgid "cannot read %s"
 msgstr "不能讀取 %s"
 
-#: archive.c:345 sequencer.c:459 sequencer.c:1736 sequencer.c:2886
-#: sequencer.c:3327 sequencer.c:3436 builtin/am.c:249 builtin/commit.c:786
-#: builtin/merge.c:1138
+#: 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
 #, c-format
 msgid "could not read '%s'"
 msgstr "不能讀取 '%s'"
 
-#: archive.c:430 builtin/add.c:181 builtin/add.c:594 builtin/rm.c:315
+#: archive.c:427 builtin/add.c:205 builtin/add.c:646 builtin/rm.c:328
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "路徑規格 '%s' 未符合任何檔案"
 
-#: archive.c:454
+#: archive.c:451
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "無此引用:%.*s"
 
-#: archive.c:460
+#: archive.c:457
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "不是一個有效的物件名:%s"
 
-#: archive.c:473
+#: archive.c:470
 #, c-format
 msgid "not a tree object: %s"
 msgstr "不是一個樹狀物件:%s"
 
-#: archive.c:485
+#: archive.c:482
 msgid "current working directory is untracked"
 msgstr "目前工作目錄未被追蹤"
 
-#: archive.c:526
+#: archive.c:523
 #, c-format
 msgid "File not found: %s"
 msgstr "找不到檔案:%s"
 
-#: archive.c:528
+#: archive.c:525
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "不是一般檔案:%s"
 
-#: archive.c:555
+#: archive.c:552
 msgid "fmt"
 msgstr "格式"
 
-#: archive.c:555
+#: archive.c:552
 msgid "archive format"
 msgstr "歸檔格式"
 
-#: archive.c:556 builtin/log.c:1765
+#: archive.c:553 builtin/log.c:1772
 msgid "prefix"
 msgstr "前綴"
 
-#: archive.c:557
+#: archive.c:554
 msgid "prepend prefix to each pathname in the archive"
 msgstr "為歸檔中每個路徑名加上前綴"
 
-#: archive.c:558 archive.c:561 builtin/blame.c:886 builtin/blame.c:890
-#: builtin/blame.c:891 builtin/commit-tree.c:117 builtin/config.c:135
+#: 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:919 builtin/hash-object.c:105
-#: builtin/ls-files.c:561 builtin/ls-files.c:564 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:190
+#: 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
 msgid "file"
 msgstr "檔案"
 
-#: archive.c:559
+#: archive.c:556
 msgid "add untracked file to archive"
 msgstr "將未追蹤檔案加入歸檔"
 
-#: archive.c:562 builtin/archive.c:90
+#: archive.c:559 builtin/archive.c:90
 msgid "write the archive to this file"
 msgstr "歸檔寫入此檔案"
 
-#: archive.c:564
+#: archive.c:561
 msgid "read .gitattributes in working directory"
 msgstr "讀取工作區中的 .gitattributes"
 
-#: archive.c:565
+#: archive.c:562
 msgid "report archived files on stderr"
 msgstr "在標準錯誤上報告歸檔檔案"
 
-#: archive.c:567
+#: archive.c:564
 msgid "set compression level"
 msgstr "設定壓縮級別"
 
-#: archive.c:570
+#: archive.c:567
 msgid "list supported archive formats"
 msgstr "列出支援的歸檔格式"
 
-#: archive.c:572 builtin/archive.c:91 builtin/clone.c:114 builtin/clone.c:117
-#: builtin/submodule--helper.c:1830 builtin/submodule--helper.c:2335
+#: 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
 msgid "repo"
 msgstr "版本庫"
 
-#: archive.c:573 builtin/archive.c:92
+#: archive.c:570 builtin/archive.c:92
 msgid "retrieve the archive from remote repository <repo>"
 msgstr "從遠端版本庫(<版本庫>)擷取歸檔檔案"
 
-#: archive.c:574 builtin/archive.c:93 builtin/difftool.c:714
+#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:718
 #: builtin/notes.c:498
 msgid "command"
 msgstr "指令"
 
-#: archive.c:575 builtin/archive.c:94
+#: archive.c:572 builtin/archive.c:94
 msgid "path to the remote git-upload-archive command"
 msgstr "遠端 git-upload-archive 指令的路徑"
 
-#: archive.c:582
+#: archive.c:579
 msgid "Unexpected option --remote"
 msgstr "未知參數 --remote"
 
-#: archive.c:584
+#: archive.c:581
 msgid "Option --exec can only be used together with --remote"
 msgstr "選項 --exec 只能和 --remote 同時使用"
 
-#: archive.c:586
+#: archive.c:583
 msgid "Unexpected option --output"
 msgstr "未知參數 --output"
 
-#: archive.c:588
+#: archive.c:585
 msgid "Options --add-file and --remote cannot be used together"
 msgstr "--add-file 和 --remote 選項不能同時使用"
 
-#: archive.c:610
+#: archive.c:607
 #, c-format
 msgid "Unknown archive format '%s'"
 msgstr "未知歸檔格式 '%s'"
 
-#: archive.c:619
+#: archive.c:616
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "參數不支援此格式 '%s':-%d"
@@ -1923,12 +1939,12 @@
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s 不是一個有效的屬性名"
 
-#: attr.c:359
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "不允許 %s:%s:%d"
 
-#: attr.c:399
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1944,7 +1960,7 @@
 #: bisect.c:699
 #, c-format
 msgid "We cannot bisect more!\n"
-msgstr "我們無法進行更多的二分尋找!\n"
+msgstr "我們無法進行更多的二分搜尋!\n"
 
 #: bisect.c:766
 #, c-format
@@ -1986,7 +2002,7 @@
 "Maybe you mistook %s and %s revs?\n"
 msgstr ""
 "一些 %s 版本不是 %s 版本的祖先。\n"
-"這種情況下 git 二分尋找無法正常工作。\n"
+"這種情況下 git 二分搜尋無法正常工作。\n"
 "您可能弄錯了 %s 和 %s 版本?\n"
 
 #: bisect.c:822
@@ -2003,26 +2019,26 @@
 #: bisect.c:861
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
-msgstr "二分尋找中:合併基礎必須是經過測試的\n"
+msgstr "二分搜尋中:合併基礎必須是經過測試的\n"
 
 #: bisect.c:911
 #, c-format
 msgid "a %s revision is needed"
 msgstr "需要一個 %s 版本"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:255
+#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
 #, c-format
 msgid "could not create file '%s'"
 msgstr "不能建立檔案 '%s'"
 
-#: bisect.c:987 builtin/merge.c:152
+#: bisect.c:987 builtin/merge.c:153
 #, c-format
 msgid "could not read file '%s'"
 msgstr "不能讀取檔案 '%s'"
 
 #: bisect.c:1027
 msgid "reading bisect refs failed"
-msgstr "讀取二分尋找引用失敗"
+msgstr "讀取二分搜尋引用失敗"
 
 #: bisect.c:1057
 #, c-format
@@ -2033,10 +2049,10 @@
 #, c-format
 msgid ""
 "No testable commit found.\n"
-"Maybe you started with bad path parameters?\n"
+"Maybe you started with bad path arguments?\n"
 msgstr ""
-"沒有發現可測試的提交。\n"
-"可能您在執行時使用了錯誤的路徑參數?\n"
+"沒找到能夠測試的提交。\n"
+"可能是執行傳入的路徑引數是錯誤的?\n"
 
 #: bisect.c:1095
 #, c-format
@@ -2051,39 +2067,39 @@
 #, 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"
-msgstr[0] "二分尋找中:在此之後,還剩 %d 個版本待測試 %s\n"
+msgstr[0] "二分搜尋中:在此之後,還剩 %d 個版本待測試 %s\n"
 
-#: blame.c:2777
+#: blame.c:2776
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents 和 --reverse 不能混用。"
 
-#: blame.c:2791
+#: blame.c:2790
 msgid "cannot use --contents with final commit object name"
 msgstr "不能將 --contents 和最終的提交物件名共用"
 
-#: blame.c:2812
+#: blame.c:2811
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "--reverse 和 --first-parent 共用,需要指定最新的提交"
 
-#: blame.c:2821 bundle.c:213 ref-filter.c:2272 remote.c:2031 sequencer.c:2138
-#: sequencer.c:4633 submodule.c:855 builtin/commit.c:1045 builtin/log.c:409
-#: builtin/log.c:1023 builtin/log.c:1625 builtin/log.c:2046 builtin/log.c:2336
-#: builtin/merge.c:423 builtin/pack-objects.c:3380 builtin/pack-objects.c:3395
-#: builtin/shortlog.c:267
+#: 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
 msgid "revision walk setup failed"
 msgstr "版本遍歷設定失敗"
 
-#: blame.c:2839
+#: blame.c:2838
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr "--reverse 和 --first-parent 共用,需要第一祖先鏈上的提交範圍"
 
-#: blame.c:2850
+#: blame.c:2849
 #, c-format
 msgid "no such path %s in %s"
 msgstr "在 %2$s 中無此路徑 %1$s"
 
-#: blame.c:2861
+#: blame.c:2860
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "不能為路徑 %2$s 讀取資料物件 %1$s"
@@ -2211,12 +2227,12 @@
 msgid "Not a valid branch point: '%s'."
 msgstr "無效的分支點:'%s'。"
 
-#: branch.c:365
+#: branch.c:366
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' 已經檢出到 '%s'"
 
-#: branch.c:388
+#: branch.c:389
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "工作區 %s 的 HEAD 指向沒有被更新"
@@ -2241,8 +2257,8 @@
 msgid "unrecognized header: %s%s (%d)"
 msgstr "無法識別的包頭:%s%s (%d)"
 
-#: bundle.c:136 rerere.c:480 rerere.c:690 sequencer.c:2390 sequencer.c:3176
-#: builtin/commit.c:814
+#: bundle.c:136 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
+#: builtin/commit.c:861
 #, c-format
 msgid "could not open '%s'"
 msgstr "不能開啟 '%s'"
@@ -2283,294 +2299,307 @@
 msgid "pack-objects died"
 msgstr "pack-objects 終止"
 
-#: bundle.c:379
-msgid "rev-list died"
-msgstr "rev-list 終止"
-
-#: bundle.c:428
+#: bundle.c:386
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "引用 '%s' 被 rev-list 選項排除"
 
-#: bundle.c:498
+#: bundle.c:490
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "不支援的包版本 %d"
 
-#: bundle.c:500
+#: bundle.c:492
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "無法寫入 %2$s 演算法的包版本 %1$d"
 
-#: bundle.c:522 builtin/log.c:209 builtin/log.c:1927 builtin/shortlog.c:408
+#: bundle.c:510 builtin/log.c:210 builtin/log.c:1935 builtin/shortlog.c:396
 #, c-format
 msgid "unrecognized argument: %s"
 msgstr "無法識別的參數:%s"
 
-#: bundle.c:530
+#: bundle.c:539
 msgid "Refusing to create empty bundle."
 msgstr "不能建立空包。"
 
-#: bundle.c:540
+#: bundle.c:549
 #, c-format
 msgid "cannot create '%s'"
 msgstr "不能建立 '%s'"
 
-#: bundle.c:565
+#: bundle.c:574
 msgid "index-pack died"
 msgstr "index-pack 終止"
 
+#: chunk-format.c:113
+msgid "terminating chunk id appears earlier than expected"
+msgstr "終止區塊 id 出現的時間早於預期"
+
+#: chunk-format.c:122
+#, c-format
+msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
+msgstr "不正確的區塊偏移 %<PRIx64> 及 %<PRIx64>"
+
+#: chunk-format.c:129
+#, c-format
+msgid "duplicate chunk ID %<PRIx32> found"
+msgstr "找到重複的區塊 ID %<PRIx32>"
+
+#: chunk-format.c:143
+#, c-format
+msgid "final chunk has non-zero id %<PRIx32>"
+msgstr "最終區塊有非零 ID %<PRIx32>"
+
 #: color.c:329
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "無效的顏色值:%.*s"
 
-#: commit-graph.c:188 midx.c:47
+#: commit-graph.c:204 midx.c:47
 msgid "invalid hash version"
 msgstr "無效的雜湊版本"
 
-#: commit-graph.c:246
+#: commit-graph.c:262
 msgid "commit-graph file is too small"
 msgstr "提交圖形檔案太小"
 
-#: commit-graph.c:311
+#: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
 msgstr "提交圖形簽名 %X 和簽名 %X 不符合"
 
-#: commit-graph.c:318
+#: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
 msgstr "提交圖形版本 %X 和版本 %X 不符合"
 
-#: commit-graph.c:325
+#: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
 msgstr "提交圖形雜湊版本 %X 和版本 %X 不符合"
 
-#: commit-graph.c:342
+#: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "commit-graph 檔案不夠放置 %u 個區塊"
 
-#: commit-graph.c:361
-#, c-format
-msgid "commit-graph improper chunk offset %08x%08x"
-msgstr "提交圖形不正確的區塊位移 %08x%08x"
-
-#: commit-graph.c:433
-#, c-format
-msgid "commit-graph chunk id %08x appears multiple times"
-msgstr "提交圖形區塊 id %08x 出現了多次"
-
-#: commit-graph.c:499
+#: commit-graph.c:482
 msgid "commit-graph has no base graphs chunk"
 msgstr "提交圖形沒有基礎圖形區塊"
 
-#: commit-graph.c:509
+#: commit-graph.c:492
 msgid "commit-graph chain does not match"
 msgstr "提交圖形鏈不符合"
 
-#: commit-graph.c:557
+#: commit-graph.c:540
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "無效的提交圖形鏈:行 '%s' 不是一個雜湊值"
 
-#: commit-graph.c:581
+#: commit-graph.c:564
 msgid "unable to find all commit-graph files"
 msgstr "無法找到所有提交圖形檔案"
 
-#: commit-graph.c:721 commit-graph.c:785
+#: commit-graph.c:745 commit-graph.c:782
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "無效的提交位置。提交圖形可能已損壞"
 
-#: commit-graph.c:742
+#: commit-graph.c:766
 #, c-format
 msgid "could not find commit %s"
 msgstr "無法找到提交 %s"
 
-#: commit-graph.c:1036 builtin/am.c:1292
+#: commit-graph.c:799
+msgid "commit-graph requires overflow generation data but has none"
+msgstr "提交圖需要比目前更多的世代資料,但沒有相關資料"
+
+#: commit-graph.c:1075 builtin/am.c:1340
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: commit-graph.c:1252 builtin/pack-objects.c:2864
+#: commit-graph.c:1337 builtin/pack-objects.c:2897
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "無法獲得物件 %s 類型"
 
-#: commit-graph.c:1283
+#: commit-graph.c:1368
 msgid "Loading known commits in commit graph"
 msgstr "正在載入提交圖中的已知提交"
 
-#: commit-graph.c:1300
+#: commit-graph.c:1385
 msgid "Expanding reachable commits in commit graph"
 msgstr "正在擴展提交圖中的可以取得提交"
 
-#: commit-graph.c:1320
+#: commit-graph.c:1405
 msgid "Clearing commit marks in commit graph"
 msgstr "正在清除提交圖中的提交標記"
 
-#: commit-graph.c:1339
+#: commit-graph.c:1424
+msgid "Computing commit graph topological levels"
+msgstr "正在計算提交圖拓樸級別"
+
+#: commit-graph.c:1477
 msgid "Computing commit graph generation numbers"
 msgstr "正在計算提交圖世代數字"
 
-#: commit-graph.c:1406
+#: commit-graph.c:1558
 msgid "Computing commit changed paths Bloom filters"
 msgstr "正在計算提交變更路徑的布隆過濾器"
 
-#: commit-graph.c:1483
+#: commit-graph.c:1635
 msgid "Collecting referenced commits"
 msgstr "正在收集引用提交"
 
-#: commit-graph.c:1508
+#: commit-graph.c:1660
 #, c-format
 msgid "Finding commits for commit graph in %d pack"
 msgid_plural "Finding commits for commit graph in %d packs"
 msgstr[0] "正在 %d 個包中尋找提交圖的提交"
 
-#: commit-graph.c:1521
+#: commit-graph.c:1673
 #, c-format
 msgid "error adding pack %s"
 msgstr "新增包 %s 發生錯誤"
 
-#: commit-graph.c:1525
+#: commit-graph.c:1677
 #, c-format
 msgid "error opening index for %s"
 msgstr "為 %s 開啟索引發生錯誤"
 
-#: commit-graph.c:1562
+#: commit-graph.c:1714
 msgid "Finding commits for commit graph among packed objects"
 msgstr "正在打包物件中尋找提交圖的提交"
 
-#: commit-graph.c:1580
+#: commit-graph.c:1732
 msgid "Finding extra edges in commit graph"
 msgstr "正在尋找提交圖中額外的邊"
 
-#: commit-graph.c:1628
+#: commit-graph.c:1781
 msgid "failed to write correct number of base graph ids"
 msgstr "無法寫入正確數量的基礎圖形 ID"
 
-#: commit-graph.c:1670 midx.c:819
+#: commit-graph.c:1812 midx.c:906
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "不能為 %s 建立先導目錄"
 
-#: commit-graph.c:1683
+#: commit-graph.c:1825
 msgid "unable to create temporary graph layer"
 msgstr "無法建立暫時的圖形層"
 
-#: commit-graph.c:1688
+#: commit-graph.c:1830
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "無法調整「%s」的共用權限"
 
-#: commit-graph.c:1758
+#: commit-graph.c:1887
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "正在用 %d 步寫出提交圖"
 
-#: commit-graph.c:1803
+#: commit-graph.c:1923
 msgid "unable to open commit-graph chain file"
 msgstr "無法開啟提交圖形鏈檔案"
 
-#: commit-graph.c:1819
+#: commit-graph.c:1939
 msgid "failed to rename base commit-graph file"
 msgstr "無法重新命名基礎提交圖形檔案"
 
-#: commit-graph.c:1839
+#: commit-graph.c:1959
 msgid "failed to rename temporary commit-graph file"
 msgstr "無法重新命名暫時提交圖形檔案"
 
-#: commit-graph.c:1965
+#: commit-graph.c:2092
 msgid "Scanning merged commits"
 msgstr "正在掃描合併提交"
 
-#: commit-graph.c:2009
+#: commit-graph.c:2136
 msgid "Merging commit-graph"
 msgstr "正在合併提交圖形"
 
-#: commit-graph.c:2115
+#: commit-graph.c:2244
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr "嘗試寫入提交圖形,但 “core.commitGraph” 已被停用。"
 
-#: commit-graph.c:2214
+#: commit-graph.c:2351
 msgid "too many commits to write graph"
 msgstr "提交太多不能畫圖"
 
-#: commit-graph.c:2307
+#: commit-graph.c:2450
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "提交圖檔案的總和檢查碼錯誤,可能已經損壞"
 
-#: commit-graph.c:2317
+#: commit-graph.c:2460
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "提交圖形的物件 ID 順序不正確:%s 然後 %s"
 
-#: commit-graph.c:2327 commit-graph.c:2342
+#: commit-graph.c:2470 commit-graph.c:2485
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "提交圖形有不正確的扇出值:fanout[%d] = %u != %u"
 
-#: commit-graph.c:2334
+#: commit-graph.c:2477
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "無法從提交圖形中解析提交 %s"
 
-#: commit-graph.c:2352
+#: commit-graph.c:2495
 msgid "Verifying commits in commit graph"
 msgstr "正在驗證提交圖中的提交"
 
-#: commit-graph.c:2367
+#: commit-graph.c:2510
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr "無法從提交圖形的物件庫中解析提交 %s"
 
-#: commit-graph.c:2374
+#: commit-graph.c:2517
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "提交圖形中的提交 %s 的根樹狀物件 ID 是 %s != %s"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2527
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "提交 %s 的提交圖形父提交列表太長了"
 
-#: commit-graph.c:2393
+#: commit-graph.c:2536
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s 的提交圖形父提交是 %s != %s"
 
-#: commit-graph.c:2407
+#: commit-graph.c:2550
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "提交 %s 的提交圖形父提交列表過早終止"
 
-#: commit-graph.c:2412
+#: commit-graph.c:2555
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr "提交圖形中提交 %s 的世代號是零,但其它地方非零"
 
-#: commit-graph.c:2416
+#: commit-graph.c:2559
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr "提交圖形中提交 %s 的世代號非零,但其它地方是零"
 
-#: commit-graph.c:2432
+#: commit-graph.c:2576
 #, c-format
-msgid "commit-graph generation for commit %s is %u != %u"
-msgstr "提交圖形中的提交 %s 的世代號是 %u != %u"
+msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
+msgstr "提交 %s 的提交圖形處於 %<PRIuMAX> < %<PRIuMAX> 世代"
 
-#: commit-graph.c:2438
+#: commit-graph.c:2582
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr "提交圖形中提交 %s 的提交日期是 %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:52 sequencer.c:2879 builtin/am.c:359 builtin/am.c:403
-#: builtin/am.c:1371 builtin/am.c:2018 builtin/replace.c:457
+#: 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
 #, c-format
 msgid "could not parse %s"
 msgstr "不能解析 %s"
@@ -2600,27 +2629,27 @@
 "設定 \"git config advice.graftFileDeprecated false\"\n"
 "可關閉本消息"
 
-#: commit.c:1172
+#: commit.c:1237
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "提交 %s 有一個非可信的聲稱來自 %s 的 GPG 簽名。"
 
-#: commit.c:1176
+#: commit.c:1241
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "提交 %s 有一個錯誤的聲稱來自 %s 的 GPG 簽名。"
 
-#: commit.c:1179
+#: commit.c:1244
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "提交 %s 沒有 GPG 簽名。"
 
-#: commit.c:1182
+#: commit.c:1247
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "提交 %s 有一個來自 %s 的好的 GPG 簽名。\n"
 
-#: commit.c:1436
+#: commit.c:1501
 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"
@@ -2634,7 +2663,7 @@
 msgid "memory exhausted"
 msgstr "記憶體耗盡"
 
-#: config.c:125
+#: config.c:126
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2649,289 +2678,333 @@
 "\t%2$s\n"
 "這可能是因為循環包含。"
 
-#: config.c:141
+#: config.c:142
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "無法擴展包含路徑 '%s'"
 
-#: config.c:152
+#: config.c:153
 msgid "relative config includes must come from files"
 msgstr "相對路徑的設定檔案引用必須來自於檔案"
 
-#: config.c:198
+#: config.c:199
 msgid "relative config include conditionals must come from files"
 msgstr "相對路徑的設定檔案條件引用必須來自於檔案"
 
-#: config.c:378
+#: config.c:396
+#, c-format
+msgid "invalid config format: %s"
+msgstr "無效的設定檔格式:%s"
+
+#: config.c:400
+#, c-format
+msgid "missing environment variable name for configuration '%.*s'"
+msgstr "缺少「%.*s」組態設定的環境變數名稱"
+
+#: config.c:405
+#, c-format
+msgid "missing environment variable '%s' for configuration '%.*s'"
+msgstr "缺少環境變數「%s」(於「%.*s」組態設定)"
+
+#: config.c:442
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "鍵名沒有包含一個小節名稱:%s"
 
-#: config.c:384
+#: config.c:448
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "鍵名沒有包含變數名:%s"
 
-#: config.c:408 sequencer.c:2580
+#: config.c:472 sequencer.c:2785
 #, c-format
 msgid "invalid key: %s"
 msgstr "無效鍵名:%s"
 
-#: config.c:414
+#: config.c:478
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "無效鍵名(有換行符號):%s"
 
-#: config.c:450 config.c:462
+#: config.c:511
+msgid "empty config key"
+msgstr "空白設定鍵"
+
+#: config.c:529 config.c:541
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "偽設定參數:%s"
 
-#: config.c:497
+#: config.c:555 config.c:572 config.c:579 config.c:588
 #, c-format
 msgid "bogus format in %s"
 msgstr "%s 中格式錯誤"
 
-#: config.c:836
+#: config.c:622
+#, c-format
+msgid "bogus count in %s"
+msgstr "%s 中有偽計數"
+
+#: config.c:626
+#, c-format
+msgid "too many entries in %s"
+msgstr "%s 中的項目過多"
+
+#: config.c:636
+#, c-format
+msgid "missing config key %s"
+msgstr "缺少 %s 設定鍵"
+
+#: config.c:644
+#, c-format
+msgid "missing config value %s"
+msgstr "缺少 %s 設定值"
+
+#: config.c:995
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "資料物件 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:840
+#: config.c:999
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "檔案 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:844
+#: config.c:1003
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "標準輸入中錯誤的設定行 %d"
 
-#: config.c:848
+#: config.c:1007
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "子模組資料物件 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:852
+#: config.c:1011
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "指令列 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:856
+#: config.c:1015
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "在 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:993
+#: config.c:1152
 msgid "out of range"
 msgstr "超出範圍"
 
-#: config.c:993
+#: config.c:1152
 msgid "invalid unit"
 msgstr "無效的單位"
 
-#: config.c:994
+#: config.c:1153
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "設定變數 '%2$s' 的數字取值 '%1$s' 設定錯誤:%3$s"
 
-#: config.c:1013
+#: config.c:1163
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "資料物件 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1016
+#: config.c:1166
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "檔案 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1019
+#: config.c:1169
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "標準輸入中設定變數 '%2$s' 錯誤的取值 '%1$s':%3$s"
 
-#: config.c:1022
+#: config.c:1172
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "子模組資料 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1025
+#: config.c:1175
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "指令列 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1028
+#: config.c:1178
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "在 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1123
+#: config.c:1257
+#, c-format
+msgid "bad boolean config value '%s' for '%s'"
+msgstr "「%2$s」的「%1$s」布林設定值無效"
+
+#: config.c:1275
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "無法擴展使用者目錄:'%s'"
 
-#: config.c:1132
+#: config.c:1284
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%2$s' 的值 '%1$s' 不是一個有效的時間戳"
 
-#: config.c:1223
+#: config.c:1377
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "縮寫長度超出範圍:%d"
 
-#: config.c:1237 config.c:1248
+#: config.c:1391 config.c:1402
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "錯誤的 zlib 壓縮級別 %d"
 
-#: config.c:1340
+#: config.c:1494
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar 應該是一個字元"
 
-#: config.c:1373
+#: config.c:1527
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "無效的物件建立模式:%s"
 
-#: config.c:1445
+#: config.c:1599
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s 的取值格式錯誤"
 
-#: config.c:1471
+#: config.c:1625
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s 的取值格式錯誤:%s"
 
-#: config.c:1472
+#: config.c:1626
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "必須是其中之一:nothing、matching、simple、upstream 或 current"
 
-#: config.c:1533 builtin/pack-objects.c:3649
+#: config.c:1687 builtin/pack-objects.c:3924
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "錯誤的打包壓縮級別 %d"
 
-#: config.c:1655
+#: config.c:1809
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "無法從資料物件 '%s' 載入設定"
 
-#: config.c:1658
+#: config.c:1812
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "引用 '%s' 沒有指向一個資料物件"
 
-#: config.c:1675
+#: config.c:1829
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "不能解析設定物件 '%s'"
 
-#: config.c:1705
+#: config.c:1873
 #, c-format
 msgid "failed to parse %s"
 msgstr "解析 %s 失敗"
 
-#: config.c:1759
+#: config.c:1929
 msgid "unable to parse command-line config"
 msgstr "無法解析指令列中的設定"
 
-#: config.c:2122
+#: config.c:2293
 msgid "unknown error occurred while reading the configuration files"
 msgstr "在讀取設定檔案時遇到未知錯誤"
 
-#: config.c:2296
+#: config.c:2467
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "無效 %s:'%s'"
 
-#: config.c:2341
+#: config.c:2512
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange 的取值 '%d' 應該介於 0 和 100 之間"
 
-#: config.c:2387
+#: config.c:2558
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "無法解析指令列設定中的 '%s'"
 
-#: config.c:2389
+#: config.c:2560
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "在檔案 '%2$s' 的第 %3$d 行發現錯誤的設定變數 '%1$s'"
 
-#: config.c:2473
+#: config.c:2644
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "無效的小節名稱 '%s'"
 
-#: config.c:2505
+#: config.c:2676
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s 有多個取值"
 
-#: config.c:2534
+#: config.c:2705
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "寫入新的設定檔案 %s 失敗"
 
-#: config.c:2786 config.c:3112
+#: config.c:2957 config.c:3283
 #, c-format
 msgid "could not lock config file %s"
 msgstr "不能鎖定設定檔案 %s"
 
-#: config.c:2797
+#: config.c:2968
 #, c-format
 msgid "opening %s"
 msgstr "開啟 %s"
 
-#: config.c:2834 builtin/config.c:361
+#: config.c:3005 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "無效模式:%s"
 
-#: config.c:2859
+#: config.c:3030
 #, c-format
 msgid "invalid config file %s"
 msgstr "無效的設定檔案 %s"
 
-#: config.c:2872 config.c:3125
+#: config.c:3043 config.c:3296
 #, c-format
 msgid "fstat on %s failed"
 msgstr "對 %s 呼叫 fstat 失敗"
 
-#: config.c:2883
+#: config.c:3054
 #, c-format
 msgid "unable to mmap '%s'"
 msgstr "不能 mmap '%s'"
 
-#: config.c:2892 config.c:3130
+#: config.c:3063 config.c:3301
 #, c-format
 msgid "chmod on %s failed"
 msgstr "對 %s 呼叫 chmod 失敗"
 
-#: config.c:2977 config.c:3227
+#: config.c:3148 config.c:3398
 #, c-format
 msgid "could not write config file %s"
 msgstr "不能寫入設定檔案 %s"
 
-#: config.c:3011
+#: config.c:3182
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "不能設定 '%s' 為 '%s'"
 
-#: config.c:3013 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3184 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
 #, c-format
 msgid "could not unset '%s'"
 msgstr "不能取消設定 '%s'"
 
-#: config.c:3103
+#: config.c:3274
 #, c-format
 msgid "invalid section name: %s"
 msgstr "無效的小節名稱:%s"
 
-#: config.c:3270
+#: config.c:3441
 #, c-format
 msgid "missing value for '%s'"
 msgstr "%s 的取值缺少"
@@ -2992,45 +3065,45 @@
 msgid "protocol error: unexpected '%s'"
 msgstr "協定錯誤:意外的 '%s'"
 
-#: connect.c:473
+#: connect.c:497
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "伺服器指定的「%s」物件格式無效"
 
-#: connect.c:500
+#: connect.c:526
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr "無效的 ls-refs 回應:%s"
 
-#: connect.c:504
+#: connect.c:530
 msgid "expected flush after ref listing"
 msgstr "在引用列表之後應該有一個 flush 包"
 
-#: connect.c:507
+#: connect.c:533
 msgid "expected response end packet after ref listing"
 msgstr "在引用列表後預期要有回應結束封包"
 
-#: connect.c:640
+#: connect.c:666
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "不支援 '%s' 協定"
 
-#: connect.c:691
+#: connect.c:717
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr "無法為 socket 設定 SO_KEEPALIVE"
 
-#: connect.c:731 connect.c:794
+#: connect.c:757 connect.c:820
 #, c-format
 msgid "Looking up %s ... "
 msgstr "尋找 %s ... "
 
-#: connect.c:735
+#: connect.c:761
 #, 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:739 connect.c:810
+#: connect.c:765 connect.c:836
 #, c-format
 msgid ""
 "done.\n"
@@ -3039,7 +3112,7 @@
 "完成。\n"
 "連線到 %s(埠 %s)... "
 
-#: connect.c:761 connect.c:838
+#: connect.c:787 connect.c:864
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -3049,61 +3122,65 @@
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:767 connect.c:844
+#: connect.c:793 connect.c:870
 msgid "done."
 msgstr "完成。"
 
-#: connect.c:798
+#: connect.c:824
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "無法尋找 %s(%s)"
 
-#: connect.c:804
+#: connect.c:830
 #, c-format
 msgid "unknown port %s"
 msgstr "未知埠 %s"
 
-#: connect.c:941 connect.c:1271
+#: connect.c:967 connect.c:1299
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr "已阻止奇怪的主機名稱 '%s'"
 
-#: connect.c:943
+#: connect.c:969
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr "已阻止奇怪的埠號 '%s'"
 
-#: connect.c:953
+#: connect.c:979
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "不能啟動代理 %s"
 
-#: connect.c:1024
+#: connect.c:1050
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr "未指定路徑,執行 'git help pull' 檢視有效的 url 語法"
 
-#: connect.c:1219
+#: connect.c:1190
+msgid "newline is forbidden in git:// hosts and repo paths"
+msgstr "git:// 主機名稱和版本庫路徑中不能有換行"
+
+#: connect.c:1247
 msgid "ssh variant 'simple' does not support -4"
 msgstr "ssh 變體 'simple' 不支援 -4"
 
-#: connect.c:1231
+#: connect.c:1259
 msgid "ssh variant 'simple' does not support -6"
 msgstr "ssh 變體 'simple' 不支援 -6"
 
-#: connect.c:1248
+#: connect.c:1276
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh 變體 'simple' 不支援設定埠"
 
-#: connect.c:1360
+#: connect.c:1388
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr "已阻止奇怪的路徑名 '%s'"
 
-#: connect.c:1408
+#: connect.c:1436
 msgid "unable to fork"
 msgstr "無法 fork"
 
-#: connected.c:108 builtin/fsck.c:209 builtin/prune.c:45
+#: connected.c:108 builtin/fsck.c:188 builtin/prune.c:45
 msgid "Checking connectivity"
 msgstr "正在檢查連通性"
 
@@ -3119,17 +3196,17 @@
 msgid "failed to close rev-list's stdin"
 msgstr "關閉 rev-list 的標準輸入失敗"
 
-#: convert.c:194
+#: convert.c:183
 #, c-format
 msgid "illegal crlf_action %d"
 msgstr "非法的 crlf 動作 %d"
 
-#: convert.c:207
+#: convert.c:196
 #, c-format
 msgid "CRLF would be replaced by LF in %s"
 msgstr "%s 中的 CRLF 將被 LF 取代"
 
-#: convert.c:209
+#: convert.c:198
 #, c-format
 msgid ""
 "CRLF will be replaced by LF in %s.\n"
@@ -3138,12 +3215,12 @@
 "%s 中的 CRLF 將被 LF 取代。\n"
 "在工作區中該檔案仍保持原有的換行符號"
 
-#: convert.c:217
+#: convert.c:206
 #, c-format
 msgid "LF would be replaced by CRLF in %s"
 msgstr "檔案 %s 中的 LF 將被 CRLF 取代"
 
-#: convert.c:219
+#: convert.c:208
 #, c-format
 msgid ""
 "LF will be replaced by CRLF in %s.\n"
@@ -3152,24 +3229,24 @@
 "%s 中的 LF 將被 CRLF 取代。\n"
 "在工作區中該檔案仍保持原有的換行符號"
 
-#: convert.c:284
+#: convert.c:273
 #, c-format
 msgid "BOM is prohibited in '%s' if encoded as %s"
 msgstr "如果使用 %2$s 編碼,禁止在 '%1$s' 中使用 BOM"
 
-#: convert.c:291
+#: convert.c:280
 #, c-format
 msgid ""
 "The file '%s' contains a byte order mark (BOM). Please use UTF-%.*s as "
 "working-tree-encoding."
 msgstr "檔案 '%s' 包含位元組順序標記(BOM)。請使用 UTF-%.*s 作為工作區編碼。"
 
-#: convert.c:304
+#: convert.c:293
 #, c-format
 msgid "BOM is required in '%s' if encoded as %s"
 msgstr "如果編碼為 %2$s,需要在 '%1$s' 中使用 BOM"
 
-#: convert.c:306
+#: convert.c:295
 #, c-format
 msgid ""
 "The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -3178,66 +3255,66 @@
 "檔案 '%s' 缺少一個位元組順序標記(BOM)。請使用 UTF-%sBE or UTF-%sLE(取決於"
 "字節序)作為工作區編碼。"
 
-#: convert.c:419 convert.c:490
+#: convert.c:408 convert.c:479
 #, c-format
 msgid "failed to encode '%s' from %s to %s"
 msgstr "無法對 '%s' 進行從 %s 到 %s 的編碼"
 
-#: convert.c:462
+#: convert.c:451
 #, c-format
 msgid "encoding '%s' from %s to %s and back is not the same"
 msgstr "將'%s' 的編碼從 %s 到 %s 來迴轉換不一致"
 
-#: convert.c:665
+#: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
 msgstr "不能 fork 以執行外部過濾器 '%s'"
 
-#: convert.c:685
+#: convert.c:674
 #, c-format
 msgid "cannot feed the input to external filter '%s'"
 msgstr "不能將輸入傳遞給外部過濾器 '%s'"
 
-#: convert.c:692
+#: convert.c:681
 #, c-format
 msgid "external filter '%s' failed %d"
 msgstr "外部過濾器 '%s' 失敗碼 %d"
 
-#: convert.c:727 convert.c:730
+#: convert.c:716 convert.c:719
 #, c-format
 msgid "read from external filter '%s' failed"
 msgstr "從外部過濾器 '%s' 讀取失敗"
 
-#: convert.c:733 convert.c:788
+#: convert.c:722 convert.c:777
 #, c-format
 msgid "external filter '%s' failed"
 msgstr "外部過濾器 '%s' 失敗"
 
-#: convert.c:837
+#: convert.c:826
 msgid "unexpected filter type"
 msgstr "意外的過濾類型"
 
-#: convert.c:848
+#: convert.c:837
 msgid "path name too long for external filter"
 msgstr "外部過濾器的路徑名太長"
 
-#: convert.c:940
+#: convert.c:934
 #, c-format
 msgid ""
 "external filter '%s' is not available anymore although not all paths have "
 "been filtered"
 msgstr "外部過濾器 '%s' 不再可用,但並非所有路徑都已過濾"
 
-#: convert.c:1240
+#: convert.c:1234
 msgid "true/false are no valid working-tree-encodings"
 msgstr "true/false 不是有效的工作區編碼"
 
-#: convert.c:1428 convert.c:1462
+#: convert.c:1414 convert.c:1447
 #, c-format
 msgid "%s: clean filter '%s' failed"
 msgstr "%s:clean 過濾器 '%s' 失敗"
 
-#: convert.c:1508
+#: convert.c:1490
 #, c-format
 msgid "%s: smudge filter %s failed"
 msgstr "%s:smudge 過濾器 %s 失敗"
@@ -3245,7 +3322,7 @@
 #: credential.c:96
 #, c-format
 msgid "skipping credential lookup for key: credential.%s"
-msgstr "跳過鍵的憑證查詢:credential.%s"
+msgstr "略過鍵的憑證查詢:credential.%s"
 
 #: credential.c:112
 msgid "refusing to work with credential missing host field"
@@ -3353,23 +3430,28 @@
 msgid "Marked %d islands, done.\n"
 msgstr "已標記 %d 個資料島,結束。\n"
 
-#: diff-lib.c:534
+#: diff-merges.c:80
+#, c-format
+msgid "unknown value for --diff-merges: %s"
+msgstr "--diff-merges 的值無效:%s"
+
+#: diff-lib.c:538
 msgid "--merge-base does not work with ranges"
 msgstr "—merge-base 跟範圍無法搭配運作"
 
-#: diff-lib.c:536
+#: diff-lib.c:540
 msgid "--merge-base only works with commits"
 msgstr "--merge-base 只能跟提交搭配才能運作"
 
-#: diff-lib.c:553
+#: diff-lib.c:557
 msgid "unable to get HEAD"
 msgstr "不能取得 HEAD"
 
-#: diff-lib.c:560
+#: diff-lib.c:564
 msgid "no merge base found"
 msgstr "找不到合併基底"
 
-#: diff-lib.c:562
+#: diff-lib.c:566
 msgid "multiple merge bases found"
 msgstr "找到多個合併基底"
 
@@ -3432,35 +3514,35 @@
 "發現設定變數 'diff.dirstat' 中的錯誤:\n"
 "%s"
 
-#: diff.c:4276
+#: diff.c:4278
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "外部 diff 離開,停止在 %s"
 
-#: diff.c:4625
+#: diff.c:4630
 msgid "--name-only, --name-status, --check and -s are mutually exclusive"
 msgstr "--name-only、--name-status、--check 和 -s 是互斥的"
 
-#: diff.c:4628
+#: diff.c:4633
 msgid "-G, -S and --find-object are mutually exclusive"
 msgstr "-G、-S 和 --find-object 是互斥的"
 
-#: diff.c:4707
+#: diff.c:4712
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow 明確要求只跟一個路徑規格"
 
-#: diff.c:4755
+#: diff.c:4760
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "無效的 --stat 值:%s"
 
-#: diff.c:4760 diff.c:4765 diff.c:4770 diff.c:4775 diff.c:5303
+#: 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
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s 期望一個數字值"
 
-#: diff.c:4792
+#: diff.c:4797
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3469,200 +3551,200 @@
 "無法解析 --dirstat/-X 選項的參數:\n"
 "%s"
 
-#: diff.c:4877
+#: diff.c:4882
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "--diff-filter=%2$s 中未知的變更類 '%1$c'"
 
-#: diff.c:4901
+#: diff.c:4906
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "ws-error-highlight=%.*s 之後未知的值"
 
-#: diff.c:4915
+#: diff.c:4920
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "不能解析 '%s'"
 
-#: diff.c:4965 diff.c:4971
+#: diff.c:4970 diff.c:4976
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s 期望 <n>/<m> 格式"
 
-#: diff.c:4983
+#: diff.c:4988
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s 期望一個字元,得到 '%s'"
 
-#: diff.c:5004
+#: diff.c:5009
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "壞的 --color-moved 參數:%s"
 
-#: diff.c:5023
+#: diff.c:5028
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws 中的無效模式 '%s'"
 
-#: diff.c:5063
+#: diff.c:5068
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 "diff-algorithm 選項有 \"myers\"、\"minimal\"、\"patience\" 和 \"histogram\""
 
-#: diff.c:5099 diff.c:5119
+#: diff.c:5104 diff.c:5124
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s 的參數無效"
 
-#: diff.c:5223
+#: diff.c:5228
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "傳入 -I 的正規表示式無效:「%s」"
 
-#: diff.c:5272
+#: diff.c:5277
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "無法解析 --submodule 選項的參數:'%s'"
 
-#: diff.c:5328
+#: diff.c:5333
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "壞的 --word-diff 參數:%s"
 
-#: diff.c:5351
+#: diff.c:5369
 msgid "Diff output format options"
 msgstr "差異輸出格式化選項"
 
-#: diff.c:5353 diff.c:5359
+#: diff.c:5371 diff.c:5377
 msgid "generate patch"
 msgstr "生成修補檔"
 
-#: diff.c:5356 builtin/log.c:178
+#: diff.c:5374 builtin/log.c:179
 msgid "suppress diff output"
 msgstr "不顯示差異輸出"
 
-#: diff.c:5361 diff.c:5475 diff.c:5482
+#: diff.c:5379 diff.c:5493 diff.c:5500
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5362 diff.c:5365
+#: diff.c:5380 diff.c:5383
 msgid "generate diffs with <n> lines context"
 msgstr "生成含 <n> 行上下文的差異"
 
-#: diff.c:5367
+#: diff.c:5385
 msgid "generate the diff in raw format"
 msgstr "生成原始格式的差異"
 
-#: diff.c:5370
+#: diff.c:5388
 msgid "synonym for '-p --raw'"
 msgstr "和 '-p --raw' 同義"
 
-#: diff.c:5374
+#: diff.c:5392
 msgid "synonym for '-p --stat'"
 msgstr "和 '-p --stat' 同義"
 
-#: diff.c:5378
+#: diff.c:5396
 msgid "machine friendly --stat"
 msgstr "機器友好的 --stat"
 
-#: diff.c:5381
+#: diff.c:5399
 msgid "output only the last line of --stat"
 msgstr "只輸出 --stat 的最後一行"
 
-#: diff.c:5383 diff.c:5391
+#: diff.c:5401 diff.c:5409
 msgid "<param1,param2>..."
 msgstr "<參數1,參數2>..."
 
-#: diff.c:5384
+#: diff.c:5402
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "輸出每個子目錄相對變更的分布"
 
-#: diff.c:5388
+#: diff.c:5406
 msgid "synonym for --dirstat=cumulative"
 msgstr "和 --dirstat=cumulative 同義"
 
-#: diff.c:5392
+#: diff.c:5410
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "是 --dirstat=files,param1,param2... 的同義詞"
 
-#: diff.c:5396
+#: diff.c:5414
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "如果變更中引入衝突定界符或空白錯誤,給出警告"
 
-#: diff.c:5399
+#: diff.c:5417
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "精簡摘要,例如建立、重新命名和模式變更"
 
-#: diff.c:5402
+#: diff.c:5420
 msgid "show only names of changed files"
 msgstr "只顯示變更檔案的檔案名"
 
-#: diff.c:5405
+#: diff.c:5423
 msgid "show only names and status of changed files"
 msgstr "只顯示變更檔案的檔案名和狀態"
 
-#: diff.c:5407
+#: diff.c:5425
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<寬度>[,<檔案名寬度>[,<次數>]]"
 
-#: diff.c:5408
+#: diff.c:5426
 msgid "generate diffstat"
 msgstr "生成差異統計(diffstat)"
 
-#: diff.c:5410 diff.c:5413 diff.c:5416
+#: diff.c:5428 diff.c:5431 diff.c:5434
 msgid "<width>"
 msgstr "<寬度>"
 
-#: diff.c:5411
+#: diff.c:5429
 msgid "generate diffstat with a given width"
 msgstr "使用提供的長度生成差異統計"
 
-#: diff.c:5414
+#: diff.c:5432
 msgid "generate diffstat with a given name width"
 msgstr "使用提供的檔案名長度生成差異統計"
 
-#: diff.c:5417
+#: diff.c:5435
 msgid "generate diffstat with a given graph width"
 msgstr "使用提供的圖形長度生成差異統計"
 
-#: diff.c:5419
+#: diff.c:5437
 msgid "<count>"
 msgstr "<次數>"
 
-#: diff.c:5420
+#: diff.c:5438
 msgid "generate diffstat with limited lines"
 msgstr "生成有限行數的差異統計"
 
-#: diff.c:5423
+#: diff.c:5441
 msgid "generate compact summary in diffstat"
 msgstr "生成差異統計的簡潔摘要"
 
-#: diff.c:5426
+#: diff.c:5444
 msgid "output a binary diff that can be applied"
-msgstr "輸出一個可以應用的二進位差異"
+msgstr "輸出一個可以套用的二進位差異"
 
-#: diff.c:5429
+#: diff.c:5447
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "在 \"index\" 行顯示完整的前後物件名稱"
 
-#: diff.c:5431
+#: diff.c:5449
 msgid "show colored diff"
 msgstr "顯示帶顏色的差異"
 
-#: diff.c:5432
+#: diff.c:5450
 msgid "<kind>"
 msgstr "<類型>"
 
-#: diff.c:5433
+#: diff.c:5451
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr "對於差異中的上下文、舊的和新的行,加亮顯示錯誤的空白字元"
 
-#: diff.c:5436
+#: diff.c:5454
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3670,299 +3752,311 @@
 "在 --raw 或者 --numstat 中,不對路徑字元轉檔並使用 NUL 字元做為輸出欄位的分隔"
 "符"
 
-#: diff.c:5439 diff.c:5442 diff.c:5445 diff.c:5554
+#: diff.c:5457 diff.c:5460 diff.c:5463 diff.c:5572
 msgid "<prefix>"
 msgstr "<前綴>"
 
-#: diff.c:5440
+#: diff.c:5458
 msgid "show the given source prefix instead of \"a/\""
 msgstr "顯示提供的源前綴取代 \"a/\""
 
-#: diff.c:5443
+#: diff.c:5461
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "顯示提供的目標前綴取代 \"b/\""
 
-#: diff.c:5446
+#: diff.c:5464
 msgid "prepend an additional prefix to every line of output"
 msgstr "輸出的每一行附加前綴"
 
-#: diff.c:5449
+#: diff.c:5467
 msgid "do not show any source or destination prefix"
 msgstr "不顯示任何源和目標前綴"
 
-#: diff.c:5452
+#: diff.c:5470
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "顯示指定行數的差異區塊間的上下文"
 
-#: diff.c:5456 diff.c:5461 diff.c:5466
+#: diff.c:5474 diff.c:5479 diff.c:5484
 msgid "<char>"
 msgstr "<字元>"
 
-#: diff.c:5457
+#: diff.c:5475
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "指定一個字元取代 '+' 來表示新的一行"
 
-#: diff.c:5462
+#: diff.c:5480
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "指定一個字元取代 '-' 來表示舊的一行"
 
-#: diff.c:5467
+#: diff.c:5485
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "指定一個字元取代 ' ' 來表示一行上下文"
 
-#: diff.c:5470
+#: diff.c:5488
 msgid "Diff rename options"
 msgstr "差異重新命名選項"
 
-#: diff.c:5471
+#: diff.c:5489
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5472
+#: diff.c:5490
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "將完全重寫的變更打破為成對的刪除和建立"
 
-#: diff.c:5476
+#: diff.c:5494
 msgid "detect renames"
 msgstr "檢測重新命名"
 
-#: diff.c:5480
+#: diff.c:5498
 msgid "omit the preimage for deletes"
 msgstr "省略刪除變更的差異輸出"
 
-#: diff.c:5483
+#: diff.c:5501
 msgid "detect copies"
 msgstr "檢測複製"
 
-#: diff.c:5487
+#: diff.c:5505
 msgid "use unmodified files as source to find copies"
 msgstr "使用未修改的檔案做為發現複製的源"
 
-#: diff.c:5489
+#: diff.c:5507
 msgid "disable rename detection"
 msgstr "停用重新命名偵測"
 
-#: diff.c:5492
+#: diff.c:5510
 msgid "use empty blobs as rename source"
 msgstr "使用空的資料物件做為重新命名的源"
 
-#: diff.c:5494
+#: diff.c:5512
 msgid "continue listing the history of a file beyond renames"
 msgstr "繼續列出檔案重新命名以外的歷史記錄"
 
-#: diff.c:5497
+#: diff.c:5515
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr "如果重新命名/複製目標超過提供的限制,禁止重新命名/複製檢測"
 
-#: diff.c:5499
+#: diff.c:5517
 msgid "Diff algorithm options"
 msgstr "差異演算法選項"
 
-#: diff.c:5501
+#: diff.c:5519
 msgid "produce the smallest possible diff"
 msgstr "生成儘可能小的差異"
 
-#: diff.c:5504
+#: diff.c:5522
 msgid "ignore whitespace when comparing lines"
 msgstr "行比較時忽略空白字元"
 
-#: diff.c:5507
+#: diff.c:5525
 msgid "ignore changes in amount of whitespace"
 msgstr "忽略空白字元的變更"
 
-#: diff.c:5510
+#: diff.c:5528
 msgid "ignore changes in whitespace at EOL"
 msgstr "忽略行尾的空白字元變更"
 
-#: diff.c:5513
+#: diff.c:5531
 msgid "ignore carrier-return at the end of line"
 msgstr "忽略行尾的Enter符(CR)"
 
-#: diff.c:5516
+#: diff.c:5534
 msgid "ignore changes whose lines are all blank"
 msgstr "忽略整行都是空白的變更"
 
-#: diff.c:5518 diff.c:5540 diff.c:5543 diff.c:5588
+#: diff.c:5536 diff.c:5558 diff.c:5561 diff.c:5606
 msgid "<regex>"
 msgstr "<正則>"
 
-#: diff.c:5519
+#: diff.c:5537
 msgid "ignore changes whose all lines match <regex>"
 msgstr "忽略整行符合 <regex> 的變更"
 
-#: diff.c:5522
+#: diff.c:5540
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "啟發式轉換差異邊界以便閱讀"
 
-#: diff.c:5525
+#: diff.c:5543
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "使用 \"patience diff\" 演算法生成差異"
 
-#: diff.c:5529
+#: diff.c:5547
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "使用 \"histogram diff\" 演算法生成差異"
 
-#: diff.c:5531
+#: diff.c:5549
 msgid "<algorithm>"
 msgstr "<演算法>"
 
-#: diff.c:5532
+#: diff.c:5550
 msgid "choose a diff algorithm"
 msgstr "選擇一個差異演算法"
 
-#: diff.c:5534
+#: diff.c:5552
 msgid "<text>"
 msgstr "<文字>"
 
-#: diff.c:5535
+#: diff.c:5553
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "使用 \"anchored diff\" 演算法生成差異"
 
-#: diff.c:5537 diff.c:5546 diff.c:5549
+#: diff.c:5555 diff.c:5564 diff.c:5567
 msgid "<mode>"
 msgstr "<模式>"
 
-#: diff.c:5538
+#: diff.c:5556
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "顯示單詞差異,使用 <模式> 分隔變更的單詞"
 
-#: diff.c:5541
+#: diff.c:5559
 msgid "use <regex> to decide what a word is"
 msgstr "使用 <正規表示式> 確定何為一個詞"
 
-#: diff.c:5544
+#: diff.c:5562
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "相當於 --word-diff=color --word-diff-regex=<正則>"
 
-#: diff.c:5547
+#: diff.c:5565
 msgid "moved lines of code are colored differently"
 msgstr "移動的程式碼行用不同方式著色"
 
-#: diff.c:5550
+#: diff.c:5568
 msgid "how white spaces are ignored in --color-moved"
 msgstr "在 --color-moved 下如何忽略空白字元"
 
-#: diff.c:5553
+#: diff.c:5571
 msgid "Other diff options"
 msgstr "其它差異選項"
 
-#: diff.c:5555
+#: diff.c:5573
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr "當從子目錄執行,排除目錄之外的變更並顯示相對路徑"
 
-#: diff.c:5559
+#: diff.c:5577
 msgid "treat all files as text"
 msgstr "把所有檔案當做文字處理"
 
-#: diff.c:5561
+#: diff.c:5579
 msgid "swap two inputs, reverse the diff"
 msgstr "交換兩個輸入,反轉差異"
 
-#: diff.c:5563
+#: diff.c:5581
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "有差異時離開碼為 1,否則為 0"
 
-#: diff.c:5565
+#: diff.c:5583
 msgid "disable all output of the program"
 msgstr "停用本程式的所有輸出"
 
-#: diff.c:5567
+#: diff.c:5585
 msgid "allow an external diff helper to be executed"
 msgstr "允許執行一個外部的差異協助工具"
 
-#: diff.c:5569
+#: diff.c:5587
 msgid "run external text conversion filters when comparing binary files"
 msgstr "當比較二進位檔案時,執行外部的文字轉換過濾器"
 
-#: diff.c:5571
+#: diff.c:5589
 msgid "<when>"
 msgstr "<何時>"
 
-#: diff.c:5572
+#: diff.c:5590
 msgid "ignore changes to submodules in the diff generation"
 msgstr "在生成差異時,忽略子模組的更改"
 
-#: diff.c:5575
+#: diff.c:5593
 msgid "<format>"
 msgstr "<格式>"
 
-#: diff.c:5576
+#: diff.c:5594
 msgid "specify how differences in submodules are shown"
 msgstr "指定子模組的差異如何顯示"
 
-#: diff.c:5580
+#: diff.c:5598
 msgid "hide 'git add -N' entries from the index"
 msgstr "隱藏索引中 'git add -N' 條目"
 
-#: diff.c:5583
+#: diff.c:5601
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "將索引中 'git add -N' 條目當做真實的"
 
-#: diff.c:5585
+#: diff.c:5603
 msgid "<string>"
 msgstr "<字串>"
 
-#: diff.c:5586
+#: diff.c:5604
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "尋找改變了指定字串出現次數的差異"
 
-#: diff.c:5589
+#: diff.c:5607
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "尋找改變指定正則符合出現次數的差異"
 
-#: diff.c:5592
+#: diff.c:5610
 msgid "show all changes in the changeset with -S or -G"
 msgstr "顯示使用 -S 或 -G 的變更集的所有變更"
 
-#: diff.c:5595
+#: diff.c:5613
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "將 -S 的 <string> 當做擴展的 POSIX 正規表示式"
 
-#: diff.c:5598
+#: diff.c:5616
 msgid "control the order in which files appear in the output"
 msgstr "控制輸出中的檔案顯示順序"
 
-#: diff.c:5599
+#: diff.c:5617 diff.c:5620
+msgid "<path>"
+msgstr "<路徑>"
+
+#: diff.c:5618
+msgid "show the change in the specified path first"
+msgstr "先顯示指定路徑的變更"
+
+#: diff.c:5621
+msgid "skip the output to the specified path"
+msgstr "略過輸出至指定路徑"
+
+#: diff.c:5623
 msgid "<object-id>"
 msgstr "<物件 ID>"
 
-#: diff.c:5600
+#: diff.c:5624
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "尋找改變指定物件出現次數的差異"
 
-#: diff.c:5602
+#: diff.c:5626
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5603
+#: diff.c:5627
 msgid "select files by diff type"
 msgstr "透過差異類型選擇檔案"
 
-#: diff.c:5605
+#: diff.c:5629
 msgid "<file>"
 msgstr "<檔案>"
 
-#: diff.c:5606
+#: diff.c:5630
 msgid "Output to a specific file"
 msgstr "輸出到一個指定的檔案"
 
-#: diff.c:6263
+#: diff.c:6287
 msgid "inexact rename detection was skipped due to too many files."
 msgstr "因為檔案太多,略過不嚴格的重新命名檢查。"
 
-#: diff.c:6266
+#: diff.c:6290
 msgid "only found copies from modified paths due to too many files."
 msgstr "因為檔案太多,只在修改的路徑中尋找複製。"
 
-#: diff.c:6269
+#: diff.c:6293
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3973,10 +4067,15 @@
 msgid "failed to read orderfile '%s'"
 msgstr "讀取排序檔案 '%s' 失敗"
 
-#: diffcore-rename.c:592
+#: diffcore-rename.c:1418
 msgid "Performing inexact rename detection"
 msgstr "正在進行非精確的重新命名偵測"
 
+#: diffcore-rotate.c:29
+#, c-format
+msgid "No such path '%s' in the diff"
+msgstr "diff 中沒有「%s」路徑"
+
 #: dir.c:578
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
@@ -4001,35 +4100,35 @@
 msgid "disabling cone pattern matching"
 msgstr "停用 cone 樣式符合模式"
 
-#: dir.c:1198
+#: dir.c:1206
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "不能將 %s 用作排除檔案"
 
-#: dir.c:2305
+#: dir.c:2314
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "不能開啟目錄 '%s'"
 
-#: dir.c:2605
+#: dir.c:2614
 msgid "failed to get kernel name and information"
 msgstr "無法獲得核心名稱和訊息"
 
-#: dir.c:2729
+#: dir.c:2738
 msgid "untracked cache is disabled on this system or location"
 msgstr "快取未追蹤檔案在本系統或位置中被停用"
 
-#: dir.c:3520
+#: dir.c:3543
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "版本庫 %s 中的索引檔案損壞"
 
-#: dir.c:3565 dir.c:3570
+#: dir.c:3590 dir.c:3595
 #, c-format
 msgid "could not create directories for %s"
 msgstr "不能為 %s 建立目錄"
 
-#: dir.c:3599
+#: dir.c:3624
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "不能從 '%s' 遷移 git 目錄到 '%s'"
@@ -4039,21 +4138,21 @@
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr "提示:等待您的編輯器關閉檔案...%c"
 
-#: entry.c:177
+#: entry.c:179
 msgid "Filtering content"
 msgstr "過濾內容"
 
-#: entry.c:478
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "不能對檔案 '%s' 呼叫 stat"
 
-#: environment.c:150
+#: environment.c:152
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "錯誤的 git 名字空間路徑 \"%s\""
 
-#: environment.c:337
+#: environment.c:335
 #, c-format
 msgid "could not set GIT_DIR to '%s'"
 msgstr "不能設定 GIT_DIR 為 '%s'"
@@ -4063,259 +4162,271 @@
 msgid "too many args to run %s"
 msgstr "執行 %s 的參數太多"
 
-#: fetch-pack.c:177
+#: fetch-pack.c:182
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack:應為 shallow 列表"
 
-#: fetch-pack.c:180
+#: fetch-pack.c:185
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack:在淺複製列表之後期望一個 flush 包"
 
-#: fetch-pack.c:191
+#: fetch-pack.c:196
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack:期望 ACK/NAK,卻得到 flush 包"
 
-#: fetch-pack.c:211
+#: fetch-pack.c:216
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack:應為 ACK/NAK,卻得到 '%s'"
 
-#: fetch-pack.c:222
+#: fetch-pack.c:227
 msgid "unable to write to remote"
 msgstr "無法寫到遠端"
 
-#: fetch-pack.c:283
+#: fetch-pack.c:288
 msgid "--stateless-rpc requires multi_ack_detailed"
 msgstr "--stateless-rpc 需要 multi_ack_detailed"
 
-#: fetch-pack.c:378 fetch-pack.c:1406
+#: fetch-pack.c:383 fetch-pack.c:1423
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "無效的 shallow 訊息:%s"
 
-#: fetch-pack.c:384 fetch-pack.c:1412
+#: fetch-pack.c:389 fetch-pack.c:1429
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "無效的 unshallow 訊息:%s"
 
-#: fetch-pack.c:386 fetch-pack.c:1414
+#: fetch-pack.c:391 fetch-pack.c:1431
 #, c-format
 msgid "object not found: %s"
 msgstr "物件未找到:%s"
 
-#: fetch-pack.c:389 fetch-pack.c:1417
+#: fetch-pack.c:394 fetch-pack.c:1434
 #, c-format
 msgid "error in object: %s"
 msgstr "物件中發生錯誤:%s"
 
-#: fetch-pack.c:391 fetch-pack.c:1419
+#: fetch-pack.c:396 fetch-pack.c:1436
 #, c-format
 msgid "no shallow found: %s"
 msgstr "未發現 shallow:%s"
 
-#: fetch-pack.c:394 fetch-pack.c:1423
+#: fetch-pack.c:399 fetch-pack.c:1440
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "應為 shallow/unshallow,卻得到 %s"
 
-#: fetch-pack.c:434
+#: fetch-pack.c:439
 #, c-format
 msgid "got %s %d %s"
 msgstr "得到 %s %d %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:456
 #, c-format
 msgid "invalid commit %s"
 msgstr "無效提交 %s"
 
-#: fetch-pack.c:482
+#: fetch-pack.c:487
 msgid "giving up"
 msgstr "放棄"
 
-#: fetch-pack.c:495 progress.c:339
+#: fetch-pack.c:500 progress.c:339
 msgid "done"
 msgstr "完成"
 
-#: fetch-pack.c:507
+#: fetch-pack.c:512
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "得到 %s (%d) %s"
 
-#: fetch-pack.c:543
+#: fetch-pack.c:548
 #, c-format
 msgid "Marking %s as complete"
 msgstr "標記 %s 為完成"
 
-#: fetch-pack.c:758
+#: fetch-pack.c:763
 #, c-format
 msgid "already have %s (%s)"
 msgstr "已經有 %s(%s)"
 
-#: fetch-pack.c:827
+#: fetch-pack.c:849
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack:無法衍生 sideband 多路輸出"
 
-#: fetch-pack.c:835
+#: fetch-pack.c:857
 msgid "protocol error: bad pack header"
 msgstr "協定錯誤:壞的包頭"
 
-#: fetch-pack.c:919
+#: fetch-pack.c:951
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
-msgstr "fetch-pack:無法衍生進程 %s"
+msgstr "fetch-pack:無法 fork %s 處理程序"
 
-#: fetch-pack.c:937
+#: fetch-pack.c:957
+msgid "fetch-pack: invalid index-pack output"
+msgstr "fetch-pack:無效的 index-pack 輸出"
+
+#: fetch-pack.c:974
 #, c-format
 msgid "%s failed"
 msgstr "%s 失敗"
 
-#: fetch-pack.c:939
+#: fetch-pack.c:976
 msgid "error in sideband demultiplexer"
 msgstr "sideband 多路輸出發生錯誤"
 
-#: fetch-pack.c:982
+#: fetch-pack.c:1019
 #, c-format
 msgid "Server version is %.*s"
 msgstr "伺服器版本 %.*s"
 
-#: fetch-pack.c:990 fetch-pack.c:996 fetch-pack.c:999 fetch-pack.c:1005
-#: fetch-pack.c:1009 fetch-pack.c:1013 fetch-pack.c:1017 fetch-pack.c:1021
-#: fetch-pack.c:1025 fetch-pack.c:1029 fetch-pack.c:1033 fetch-pack.c:1037
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1054 fetch-pack.c:1059
+#: 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
 #, c-format
 msgid "Server supports %s"
 msgstr "伺服器支援 %s"
 
-#: fetch-pack.c:992
+#: fetch-pack.c:1029
 msgid "Server does not support shallow clients"
 msgstr "伺服器不支援 shalllow 用戶端"
 
-#: fetch-pack.c:1052
+#: fetch-pack.c:1089
 msgid "Server does not support --shallow-since"
 msgstr "伺服器不支援 --shallow-since"
 
-#: fetch-pack.c:1057
+#: fetch-pack.c:1094
 msgid "Server does not support --shallow-exclude"
 msgstr "伺服器不支援 --shallow-exclude"
 
-#: fetch-pack.c:1061
+#: fetch-pack.c:1098
 msgid "Server does not support --deepen"
 msgstr "伺服器不支援 --deepen"
 
-#: fetch-pack.c:1063
+#: fetch-pack.c:1100
 msgid "Server does not support this repository's object format"
 msgstr "伺服器不支援此版本庫的物件格式"
 
-#: fetch-pack.c:1076
+#: fetch-pack.c:1113
 msgid "no common commits"
 msgstr "沒有共同的提交"
 
-#: fetch-pack.c:1088 fetch-pack.c:1628
+#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+msgid "source repository is shallow, reject to clone."
+msgstr "來源版本庫是淺版本庫 (shallow)。拒絕 clone。"
+
+#: fetch-pack.c:1128 fetch-pack.c:1651
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack:取得失敗。"
 
-#: fetch-pack.c:1214
+#: fetch-pack.c:1242
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "算法不一致:用戶端 %s;伺服器 %s"
 
-#: fetch-pack.c:1218
+#: fetch-pack.c:1246
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "伺服器不支援「%s」算法"
 
-#: fetch-pack.c:1238
+#: fetch-pack.c:1279
 msgid "Server does not support shallow requests"
 msgstr "伺服器不支援 shalllow 請求"
 
-#: fetch-pack.c:1245
+#: fetch-pack.c:1286
 msgid "Server supports filter"
 msgstr "伺服器支援 filter"
 
-#: fetch-pack.c:1284
+#: fetch-pack.c:1329 fetch-pack.c:2034
 msgid "unable to write request to remote"
 msgstr "無法將請求寫到遠端"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1347
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "讀取節標題 '%s' 發生錯誤"
 
-#: fetch-pack.c:1308
+#: fetch-pack.c:1353
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "預期 '%s',得到 '%s'"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1387
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "意外的確認行:'%s'"
 
-#: fetch-pack.c:1374
+#: fetch-pack.c:1392
 #, c-format
 msgid "error processing acks: %d"
 msgstr "處理 ack 發生錯誤:%d"
 
-#: fetch-pack.c:1384
+#: fetch-pack.c:1402
 msgid "expected packfile to be sent after 'ready'"
 msgstr "預期在 'ready' 之後傳送 packfile"
 
-#: fetch-pack.c:1386
+#: fetch-pack.c:1404
 msgid "expected no other sections to be sent after no 'ready'"
 msgstr "在沒有 'ready' 不應該傳送其它小節"
 
-#: fetch-pack.c:1428
+#: fetch-pack.c:1445
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "處理淺複製訊息發生錯誤:%d"
 
-#: fetch-pack.c:1475
+#: fetch-pack.c:1494
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "預期 wanted-ref,得到 '%s'"
 
-#: fetch-pack.c:1480
+#: fetch-pack.c:1499
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "意外的 wanted-ref:'%s'"
 
-#: fetch-pack.c:1485
+#: fetch-pack.c:1504
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "處理要取得的引用發生錯誤:%d"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1534
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: 預期要有回應結束封包"
 
-#: fetch-pack.c:1897
+#: fetch-pack.c:1930
 msgid "no matching remote head"
 msgstr "沒有符合的遠端分支"
 
-#: fetch-pack.c:1920 builtin/clone.c:693
+#: fetch-pack.c:1953 builtin/clone.c:697
 msgid "remote did not send all necessary objects"
 msgstr "遠端沒有傳送所有必需的物件"
 
-#: fetch-pack.c:1947
+#: fetch-pack.c:2056
+msgid "unexpected 'ready' from remote"
+msgstr "從遠端收到非預期的 ‘ready’"
+
+#: fetch-pack.c:2079
 #, c-format
 msgid "no such remote ref %s"
 msgstr "沒有這樣的遠端引用 %s"
 
-#: fetch-pack.c:1950
+#: fetch-pack.c:2082
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "伺服器不允許請求未公開的物件 %s"
 
-#: gpg-interface.c:272
+#: gpg-interface.c:273
 msgid "could not create temporary file"
 msgstr "不能建立暫存檔"
 
-#: gpg-interface.c:275
+#: gpg-interface.c:276
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "無法將分離式簽名寫入 '%s'"
 
-#: gpg-interface.c:457
+#: gpg-interface.c:470
 msgid "gpg failed to sign the data"
 msgstr "gpg 無法為資料簽名"
 
@@ -4324,7 +4435,7 @@
 msgid "ignore invalid color '%.*s' in log.graphColors"
 msgstr "忽略 log.graphColors 中無效的顏色 '%.*s'"
 
-#: grep.c:640
+#: grep.c:531
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4332,18 +4443,18 @@
 "提供的模式包含 NULL 字元(通過 -f <檔案> 參數)。只有 PCRE v2 下的 -P 支援此"
 "功能"
 
-#: grep.c:2100
+#: grep.c:1893
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s':無法讀取 %s"
 
-#: grep.c:2117 setup.c:176 builtin/clone.c:412 builtin/diff.c:89
-#: builtin/rm.c:135
+#: grep.c:1910 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "對 '%s' 呼叫 stat 失敗"
 
-#: grep.c:2128
+#: grep.c:1921
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s':讀取不完整"
@@ -4413,7 +4524,7 @@
 msgid "These are common Git commands used in various situations:"
 msgstr "這些是各種場合常見的 Git 指令:"
 
-#: help.c:365 git.c:99
+#: help.c:365 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "不支援的指令列表類型 '%s'"
@@ -4559,47 +4670,52 @@
 msgid "name consists only of disallowed characters: %s"
 msgstr "姓名中僅包含停用字元:%s"
 
-#: ident.c:454 builtin/commit.c:634
+#: ident.c:454 builtin/commit.c:647
 #, c-format
 msgid "invalid date format: %s"
 msgstr "無效的日期格式:%s"
 
-#: list-objects-filter-options.c:81
+#: list-objects-filter-options.c:83
 msgid "expected 'tree:<depth>'"
 msgstr "期望 'tree:<深度>'"
 
-#: list-objects-filter-options.c:96
+#: list-objects-filter-options.c:98
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path 過濾器支援已被刪除"
 
-#: list-objects-filter-options.c:109
+#: list-objects-filter-options.c:105
+#, c-format
+msgid "'%s' for 'object:type=<type>' isnot a valid object type"
+msgstr "“object:type=<type>” 的 “%s” 不是有效的物件格式"
+
+#: list-objects-filter-options.c:124
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "無效的過濾器表達式 '%s'"
 
-#: list-objects-filter-options.c:125
+#: list-objects-filter-options.c:140
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "必須對 sub-filter-spec 中的字元進行轉義:'%c'"
 
-#: list-objects-filter-options.c:167
+#: list-objects-filter-options.c:182
 msgid "expected something after combine:"
 msgstr "期望在組合後有一些東西:"
 
-#: list-objects-filter-options.c:249
+#: list-objects-filter-options.c:264
 msgid "multiple filter-specs cannot be combined"
 msgstr "不能混用多種過濾規格"
 
-#: list-objects-filter-options.c:361
+#: list-objects-filter-options.c:376
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "無法升級版本庫格式,以致不支援部分複製"
 
-#: list-objects-filter.c:492
+#: list-objects-filter.c:532
 #, c-format
 msgid "unable to access sparse blob in '%s'"
 msgstr "不能存取 '%s' 中的稀疏資料物件"
 
-#: list-objects-filter.c:495
+#: list-objects-filter.c:535
 #, c-format
 msgid "unable to parse sparse filter data in %s"
 msgstr "無法解析 %s 中的稀疏過濾器資料"
@@ -4614,7 +4730,7 @@
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "樹 %2$s 中的條目 '%1$s' 具有資料物件的屬性,但不是一個資料物件"
 
-#: list-objects.c:375
+#: list-objects.c:395
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "無法為提交 %s 載入根樹"
@@ -4642,122 +4758,59 @@
 msgid "Unable to create '%s.lock': %s"
 msgstr "不能建立 '%s.lock':%s"
 
-#: ls-refs.c:109
+#: ls-refs.c:37
+#, c-format
+msgid "invalid value '%s' for lsrefs.unborn"
+msgstr "lsrefs.unborn 的值「%s」無效"
+
+#: ls-refs.c:167
 msgid "expected flush after ls-refs arguments"
 msgstr "在 ls-refs 引數之後應該有一個 flush 包"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3672
+#: mailinfo.c:1050
+msgid "quoted CRLF detected"
+msgstr "偵測到由可列印字元 (quoted) 所組成的 CRLF"
+
+#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
 #, c-format
-msgid ""
-"Your local changes to the following files would be overwritten by merge:\n"
-"  %s"
-msgstr ""
-"您對下列檔案的本機修改將被合併動作覆蓋:\n"
-"  %s"
+msgid "bad action '%s' for '%s'"
+msgstr "「%s」動作對「%s」無效"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3436
-#, c-format
-msgid "Already up to date!"
-msgstr "已經是最新的!"
-
-#: merge-recursive.c:356
-msgid "(bad commit)\n"
-msgstr "(壞提交)\n"
-
-#: merge-recursive.c:379
-#, c-format
-msgid "add_cacheinfo failed for path '%s'; merge aborting."
-msgstr "add_cacheinfo 對路徑 '%s' 執行失敗,合併終止。"
-
-#: merge-recursive.c:388
-#, c-format
-msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
-msgstr "add_cacheinfo 無法重新整理路徑 '%s',合併終止。"
-
-#: merge-recursive.c:874
-#, c-format
-msgid "failed to create path '%s'%s"
-msgstr "建立路徑 '%s'%s 失敗"
-
-#: merge-recursive.c:885
-#, c-format
-msgid "Removing %s to make room for subdirectory\n"
-msgstr "刪除 %s 以便為子目錄留出空間\n"
-
-#: merge-recursive.c:899 merge-recursive.c:918
-msgid ": perhaps a D/F conflict?"
-msgstr ":可能是一個目錄/檔案衝突?"
-
-#: merge-recursive.c:908
-#, c-format
-msgid "refusing to lose untracked file at '%s'"
-msgstr "拒絕捨棄 '%s' 中的未追蹤檔案"
-
-#: merge-recursive.c:949 builtin/cat-file.c:41
-#, c-format
-msgid "cannot read object %s '%s'"
-msgstr "不能讀取物件 %s '%s'"
-
-#: merge-recursive.c:954
-#, c-format
-msgid "blob expected for %s '%s'"
-msgstr "%s '%s' 應為資料物件"
-
-#: merge-recursive.c:979
-#, c-format
-msgid "failed to open '%s': %s"
-msgstr "開啟 '%s' 失敗:%s"
-
-#: merge-recursive.c:990
-#, c-format
-msgid "failed to symlink '%s': %s"
-msgstr "建立符號連結 '%s' 失敗:%s"
-
-#: merge-recursive.c:995
-#, c-format
-msgid "do not know what to do with %06o %s '%s'"
-msgstr "不知道如何處理 %06o %s '%s'"
-
-#: merge-recursive.c:1191
+#: merge-ort.c:1116 merge-recursive.c:1205
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "無法合併子模組 %s (沒有檢出)"
 
-#: merge-recursive.c:1198
+#: merge-ort.c:1125 merge-recursive.c:1212
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "無法合併子模組 %s(提交不存在)"
 
-#: merge-recursive.c:1205
+#: merge-ort.c:1134 merge-recursive.c:1219
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "無法合併子模組 %s (提交未跟隨合併基礎)"
 
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-ort.c:1144 merge-ort.c:1151
 #, c-format
-msgid "Fast-forwarding submodule %s to the following commit:"
-msgstr "子模組 %s 快轉到如下提交:"
+msgid "Note: Fast-forwarding submodule %s to %s"
+msgstr "注意:正在將 %s 子模組快轉到 %s"
 
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-ort.c:1172
 #, c-format
-msgid "Fast-forwarding submodule %s"
-msgstr "快轉子模組 %s"
+msgid "Failed to merge submodule %s"
+msgstr "無法合併 %s 子模組"
 
-#: merge-recursive.c:1251
+#: merge-ort.c:1179
 #, c-format
-msgid "Failed to merge submodule %s (merge following commits not found)"
-msgstr "無法合併子模組 %s (沒發現合併跟隨的提交)"
+msgid ""
+"Failed to merge submodule %s, but a possible merge resolution exists:\n"
+"%s\n"
+msgstr ""
+"無法合併 %s 子模組,但有找到一個可行的合併方案:\n"
+"%s\n"
 
-#: merge-recursive.c:1255
-#, c-format
-msgid "Failed to merge submodule %s (not fast-forward)"
-msgstr "無法合併子模組 %s(非快轉)"
-
-#: merge-recursive.c:1256
-msgid "Found a possible merge resolution for the submodule:\n"
-msgstr "找到子模組的一個可能的合併方案:\n"
-
-#: merge-recursive.c:1259
+#: merge-ort.c:1183 merge-recursive.c:1273
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4773,31 +4826,304 @@
 "\n"
 "以接受此建議。\n"
 
-#: merge-recursive.c:1268
+#: merge-ort.c:1196
 #, c-format
-msgid "Failed to merge submodule %s (multiple merges found)"
-msgstr "無法合併子模組 %s (發現多個合併)"
+msgid ""
+"Failed to merge submodule %s, but multiple possible merges exist:\n"
+"%s"
+msgstr ""
+"無法合併 %s 子模組,但有找到幾個可行的合併方案:\n"
+"%s"
 
-#: merge-recursive.c:1341
+#: merge-ort.c:1415 merge-recursive.c:1362
 msgid "Failed to execute internal merge"
 msgstr "無法執行內部合併"
 
-#: merge-recursive.c:1346
+#: merge-ort.c:1420 merge-recursive.c:1367
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "不能新增 %s 至物件庫"
 
-#: merge-recursive.c:1378
+#: merge-ort.c:1427 merge-recursive.c:1400
 #, c-format
 msgid "Auto-merging %s"
 msgstr "自動合併 %s"
 
-#: merge-recursive.c:1402
+#: merge-ort.c:1566 merge-recursive.c:2122
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
+"implicit directory rename(s) putting the following path(s) there: %s."
+msgstr ""
+"衝突(隱式目錄重新命名):處於隱式目錄重新命名的現存檔案/目錄 %s,將以下路徑"
+"放在:%s。"
+
+#: merge-ort.c:1576 merge-recursive.c:2132
+#, c-format
+msgid ""
+"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
+"implicit directory renames tried to put these paths there: %s"
+msgstr ""
+"衝突(隱式目錄重新命名):無法映射一個以上路徑到 %s,隱式目錄重新命名嘗試將這"
+"些路徑放置於此:%s"
+
+#: merge-ort.c:1634
+#, fuzzy, c-format
+msgid ""
+"CONFLICT (directory rename split): Unclear where to rename %s to; it was "
+"renamed to multiple other directories, with no destination getting a "
+"majority of the files."
+msgstr ""
+"衝突(分割的目錄重新命名):未知 %s 應重新命名成什麼。其已重新命名為多個其他"
+"目錄,卻沒有目的地取得檔案的主要部分。"
+
+#: merge-ort.c:1788 merge-recursive.c:2468
+#, c-format
+msgid ""
+"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
+"renamed."
+msgstr "警告:避免套用 %s -> %s 的重新命名到 %s,因為 %s 本身已被重新命名。"
+
+#: merge-ort.c:1932 merge-recursive.c:3244
+#, c-format
+msgid ""
+"Path updated: %s added in %s inside a directory that was renamed in %s; "
+"moving it to %s."
+msgstr ""
+"路徑已更新:%s 新增到 %s,位於一個被重新命名到 %s 的目錄中,將其移動到 %s。"
+
+#: merge-ort.c:1939 merge-recursive.c:3251
+#, c-format
+msgid ""
+"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
+"%s; moving it to %s."
+msgstr ""
+"路徑已更新:%1$s 重新命名為 %3$s 中的 %2$s,而該目錄被重新命名到 %4$s 中,將"
+"其移動到 %5$s。"
+
+#: merge-ort.c:1952 merge-recursive.c:3247
+#, c-format
+msgid ""
+"CONFLICT (file location): %s added in %s inside a directory that was renamed "
+"in %s, suggesting it should perhaps be moved to %s."
+msgstr ""
+"衝突(檔案位置):%s 新增到 %s,位於一個被重新命名為 %s 的目錄中,建議將其移"
+"動到 %s。"
+
+#: merge-ort.c:1960 merge-recursive.c:3254
+#, 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 ""
+"衝突(檔案位置):%1$s 重新命名為 %3$s 中的 %2$s,而該目錄被重新命名到 %4$s "
+"中,建議將其移動到 %5$s。"
+
+#: merge-ort.c:2103
+#, c-format
+msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
+msgstr ""
+"衝突(重新命名/重新命名):%1$s 已重新命名為 %3$s 中的 %2$s 和 %5$s 中的 "
+"%4$s。"
+
+#: merge-ort.c:2198
+#, 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."
+msgstr ""
+"衝突(重新命名陷入相撞):%s -> %s 這個重新命名有內容衝突並與其他路徑相撞,可"
+"能會因此出現巢狀衝突標記。"
+
+#: merge-ort.c:2217 merge-ort.c:2241
+#, c-format
+msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
+msgstr ""
+"衝突(重新命名/刪除):%1$s 已重新命名為 %3$s 中的 %2$s 卻在 %4$s 中被刪除。"
+
+#: merge-ort.c:2550 merge-recursive.c:3002
+#, c-format
+msgid "cannot read object %s"
+msgstr "不能讀取物件 %s"
+
+#: merge-ort.c:2553 merge-recursive.c:3005
+#, c-format
+msgid "object %s is not a blob"
+msgstr "物件 %s 不是一個資料物件"
+
+#: merge-ort.c:2981
+#, fuzzy, c-format
+msgid ""
+"CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
+"%s instead."
+msgstr "衝突(檔案/目錄):目錄擋住來自 %2$s 的 %1$s。改移動到 %3$s。"
+
+#: merge-ort.c:3055
+#, fuzzy, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed both "
+"of them so each can be recorded somewhere."
+msgstr ""
+"衝突(類型有異):每個來源的 %s 類型不同。已經重新命名這兩個來源,這樣每個來"
+"源都可以分別記錄。"
+
+#: merge-ort.c:3062
+#, fuzzy, c-format
+msgid ""
+"CONFLICT (distinct types): %s had different types on each side; renamed one "
+"of them so each can be recorded somewhere."
+msgstr ""
+"衝突(類型有異):每個來源的 %s 類型不同。已經重新命名其中一個來源,這樣每個"
+"來源都可以分別記錄。"
+
+#: merge-ort.c:3162 merge-recursive.c:3081
+msgid "content"
+msgstr "內容"
+
+#: merge-ort.c:3164 merge-recursive.c:3085
+msgid "add/add"
+msgstr "新增/新增"
+
+#: merge-ort.c:3166 merge-recursive.c:3130
+msgid "submodule"
+msgstr "子模組"
+
+#: merge-ort.c:3168 merge-recursive.c:3131
+#, c-format
+msgid "CONFLICT (%s): Merge conflict in %s"
+msgstr "衝突(%s):合併衝突於 %s"
+
+#: merge-ort.c:3198
+#, c-format
+msgid ""
+"CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
+"of %s left in tree."
+msgstr ""
+"衝突(修改/刪除):%1$s 已在 %2$s 刪除和在 %3$s 修改。%5$s 的 %4$s 版本留在樹"
+"上。"
+
+#: merge-ort.c:3433
+#, c-format
+msgid ""
+"Note: %s not up to date and in way of checking out conflicted version; old "
+"copy renamed to %s"
+msgstr "註:%s 不是最新且干擾到簽出衝突版本。已將舊拷貝重新命名至 %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
+#, c-format
+msgid "collecting merge info failed for trees %s, %s, %s"
+msgstr "%s, %s, %s 樹的合併資訊收集失敗"
+
+#: merge-ort-wrappers.c:13 merge-recursive.c:3699
+#, c-format
+msgid ""
+"Your local changes to the following files would be overwritten by merge:\n"
+"  %s"
+msgstr ""
+"您對下列檔案的本機修改將被合併動作覆蓋:\n"
+"  %s"
+
+#: merge-ort-wrappers.c:33 merge-recursive.c:3465 builtin/merge.c:402
+msgid "Already up to date."
+msgstr "已經是最新的。"
+
+#: merge-recursive.c:356
+msgid "(bad commit)\n"
+msgstr "(壞提交)\n"
+
+#: merge-recursive.c:379
+#, c-format
+msgid "add_cacheinfo failed for path '%s'; merge aborting."
+msgstr "add_cacheinfo 對路徑 '%s' 執行失敗,合併終止。"
+
+#: merge-recursive.c:388
+#, c-format
+msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
+msgstr "add_cacheinfo 無法重新整理路徑 '%s',合併終止。"
+
+#: merge-recursive.c:876
+#, c-format
+msgid "failed to create path '%s'%s"
+msgstr "建立路徑 '%s'%s 失敗"
+
+#: merge-recursive.c:887
+#, c-format
+msgid "Removing %s to make room for subdirectory\n"
+msgstr "刪除 %s 以便為子目錄留出空間\n"
+
+#: merge-recursive.c:901 merge-recursive.c:920
+msgid ": perhaps a D/F conflict?"
+msgstr ":可能是一個目錄/檔案衝突?"
+
+#: merge-recursive.c:910
+#, c-format
+msgid "refusing to lose untracked file at '%s'"
+msgstr "拒絕捨棄 '%s' 中的未追蹤檔案"
+
+#: merge-recursive.c:951 builtin/cat-file.c:41
+#, c-format
+msgid "cannot read object %s '%s'"
+msgstr "不能讀取物件 %s '%s'"
+
+#: merge-recursive.c:956
+#, c-format
+msgid "blob expected for %s '%s'"
+msgstr "%s '%s' 應為資料物件"
+
+#: merge-recursive.c:981
+#, c-format
+msgid "failed to open '%s': %s"
+msgstr "開啟 '%s' 失敗:%s"
+
+#: merge-recursive.c:992
+#, c-format
+msgid "failed to symlink '%s': %s"
+msgstr "建立符號連結 '%s' 失敗:%s"
+
+#: merge-recursive.c:997
+#, c-format
+msgid "do not know what to do with %06o %s '%s'"
+msgstr "不知道如何處理 %06o %s '%s'"
+
+#: merge-recursive.c:1227 merge-recursive.c:1239
+#, c-format
+msgid "Fast-forwarding submodule %s to the following commit:"
+msgstr "子模組 %s 快轉到如下提交:"
+
+#: merge-recursive.c:1230 merge-recursive.c:1242
+#, c-format
+msgid "Fast-forwarding submodule %s"
+msgstr "快轉子模組 %s"
+
+#: merge-recursive.c:1265
+#, c-format
+msgid "Failed to merge submodule %s (merge following commits not found)"
+msgstr "無法合併子模組 %s (沒發現合併跟隨的提交)"
+
+#: merge-recursive.c:1269
+#, c-format
+msgid "Failed to merge submodule %s (not fast-forward)"
+msgstr "無法合併子模組 %s(非快轉)"
+
+#: merge-recursive.c:1270
+msgid "Found a possible merge resolution for the submodule:\n"
+msgstr "找到子模組的一個可能的合併方案:\n"
+
+#: merge-recursive.c:1282
+#, c-format
+msgid "Failed to merge submodule %s (multiple merges found)"
+msgstr "無法合併子模組 %s (發現多個合併)"
+
+#: merge-recursive.c:1424
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "錯誤:拒絕遺失未追蹤檔案 '%s',而是寫入 %s。"
 
-#: merge-recursive.c:1474
+#: merge-recursive.c:1496
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4806,7 +5132,7 @@
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本被保留。"
 
-#: merge-recursive.c:1479
+#: merge-recursive.c:1501
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4815,7 +5141,7 @@
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本被保留。"
 
-#: merge-recursive.c:1486
+#: merge-recursive.c:1508
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4824,7 +5150,7 @@
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本保留在 %8$s 中。"
 
-#: merge-recursive.c:1491
+#: merge-recursive.c:1513
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4833,41 +5159,41 @@
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本保留在 %9$s 中。"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "rename"
 msgstr "重新命名"
 
-#: merge-recursive.c:1526
+#: merge-recursive.c:1548
 msgid "renamed"
 msgstr "重新命名"
 
-#: merge-recursive.c:1577 merge-recursive.c:2484 merge-recursive.c:3129
+#: merge-recursive.c:1599 merge-recursive.c:2505 merge-recursive.c:3158
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "拒絕遺失髒檔案 '%s'"
 
-#: merge-recursive.c:1587
+#: merge-recursive.c:1609
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "拒絕在 '%s' 處失去未追蹤檔案,即使它存在於重新命名中。"
 
-#: merge-recursive.c:1645
+#: merge-recursive.c:1667
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "衝突(重新命名/新增):在 %3$s 中重新命名 %1$s->%2$s。在 %5$s 中新增 %4$s"
 
-#: merge-recursive.c:1676
+#: merge-recursive.c:1698
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s 是 %s 中的一個目錄而已 %s 為名被新增"
 
-#: merge-recursive.c:1681
+#: merge-recursive.c:1703
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "拒絕遺失未追蹤檔案 '%s',而是新增為 %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1730
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -4876,18 +5202,18 @@
 "衝突(重新命名/重新命名):在分支 \"%3$s\" 中重新命名 \"%1$s\"->\"%2$s\",在"
 "分支 \"%6$s\" 中重新命名 \"%4$s\"->\"%5$s\"%7$s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1735
 msgid " (left unresolved)"
 msgstr " (留下未解決)"
 
-#: merge-recursive.c:1805
+#: merge-recursive.c:1827
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "衝突(重新命名/重新命名):在 %3$s 中重新命名 %1$s->%2$s,在 %6$s 中重新命名 "
 "%4$s->%5$s"
 
-#: merge-recursive.c:2068
+#: merge-recursive.c:2090
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4897,25 +5223,7 @@
 "衝突(分割的目錄重新命名):不清楚 %s 應該放在哪裡,因為目錄 %s 被重新命名到"
 "多個其它目錄,沒有目錄包含大部分檔案。"
 
-#: merge-recursive.c:2100
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
-"implicit directory rename(s) putting the following path(s) there: %s."
-msgstr ""
-"衝突(隱式目錄重新命名):處於隱式目錄重新命名的現存檔案/目錄 %s,將以下路徑"
-"放在:%s。"
-
-#: merge-recursive.c:2110
-#, c-format
-msgid ""
-"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
-"implicit directory renames tried to put these paths there: %s"
-msgstr ""
-"衝突(隱式目錄重新命名):無法映射一個以上路徑到 %s,隱式目錄重新命名嘗試將這"
-"些路徑放置於此:%s"
-
-#: merge-recursive.c:2202
+#: merge-recursive.c:2224
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -4924,146 +5232,78 @@
 "衝突(重新命名/重新命名):在 %3$s 中重新命名目錄 %1$s->%2$s,在 %6$s 中重新"
 "命名目錄 %4$s->%5$s"
 
-#: merge-recursive.c:2447
-#, c-format
-msgid ""
-"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
-"renamed."
-msgstr "警告:避免應用 %s -> %s 的重新命名到 %s,因為 %s 本身已被重新命名。"
-
-#: merge-recursive.c:2973
-#, c-format
-msgid "cannot read object %s"
-msgstr "不能讀取物件 %s"
-
-#: merge-recursive.c:2976
-#, c-format
-msgid "object %s is not a blob"
-msgstr "物件 %s 不是一個資料物件"
-
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modify"
 msgstr "修改"
 
-#: merge-recursive.c:3040
+#: merge-recursive.c:3069
 msgid "modified"
 msgstr "修改"
 
-#: merge-recursive.c:3052
-msgid "content"
-msgstr "內容"
-
-#: merge-recursive.c:3056
-msgid "add/add"
-msgstr "新增/新增"
-
-#: merge-recursive.c:3079
+#: merge-recursive.c:3108
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "略過 %s(已經做過相同合併)"
 
-#: merge-recursive.c:3101
-msgid "submodule"
-msgstr "子模組"
-
-#: merge-recursive.c:3102
-#, c-format
-msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr "衝突(%s):合併衝突於 %s"
-
-#: merge-recursive.c:3132
+#: merge-recursive.c:3161
 #, c-format
 msgid "Adding as %s instead"
 msgstr "而是以 %s 為名新增"
 
-#: merge-recursive.c:3215
-#, c-format
-msgid ""
-"Path updated: %s added in %s inside a directory that was renamed in %s; "
-"moving it to %s."
-msgstr ""
-"路徑已更新:%s 新增到 %s,位於一個被重新命名到 %s 的目錄中,將其移動到 %s。"
-
-#: merge-recursive.c:3218
-#, c-format
-msgid ""
-"CONFLICT (file location): %s added in %s inside a directory that was renamed "
-"in %s, suggesting it should perhaps be moved to %s."
-msgstr ""
-"衝突(檔案位置):%s 新增到 %s,位於一個被重新命名為 %s 的目錄中,建議將其移"
-"動到 %s。"
-
-#: merge-recursive.c:3222
-#, c-format
-msgid ""
-"Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
-"%s; moving it to %s."
-msgstr ""
-"路徑已更新:%1$s 重新命名為 %3$s 中的 %2$s,而該目錄被重新命名到 %4$s 中,將"
-"其移動到 %5$s。"
-
-#: merge-recursive.c:3225
-#, 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 ""
-"衝突(檔案位置):%1$s 重新命名為 %3$s 中的 %2$s,而該目錄被重新命名到 %4$s "
-"中,建議將其移動到 %5$s。"
-
-#: merge-recursive.c:3339
+#: merge-recursive.c:3368
 #, c-format
 msgid "Removing %s"
 msgstr "刪除 %s"
 
-#: merge-recursive.c:3362
+#: merge-recursive.c:3391
 msgid "file/directory"
 msgstr "檔案/目錄"
 
-#: merge-recursive.c:3367
+#: merge-recursive.c:3396
 msgid "directory/file"
 msgstr "目錄/檔案"
 
-#: merge-recursive.c:3374
+#: merge-recursive.c:3403
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr "衝突(%1$s):在 %3$s 中有一個名為 %2$s 的目錄。以 %5$s 為名新增 %4$s"
 
-#: merge-recursive.c:3383
+#: merge-recursive.c:3412
 #, c-format
 msgid "Adding %s"
 msgstr "新增 %s"
 
-#: merge-recursive.c:3392
+#: merge-recursive.c:3421
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "衝突(add/add):合併衝突於 %s"
 
-#: merge-recursive.c:3445
+#: merge-recursive.c:3474
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "無法合併樹 %s 和 %s"
 
-#: merge-recursive.c:3550
+#: merge-recursive.c:3568
 msgid "Merging:"
 msgstr "合併:"
 
-#: merge-recursive.c:3563
+#: merge-recursive.c:3581
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "發現 %u 個共同祖先:"
 
-#: merge-recursive.c:3613
+#: merge-recursive.c:3631
 msgid "merge returned no commit"
 msgstr "合併未返回提交"
 
-#: merge-recursive.c:3769
+#: merge-recursive.c:3796
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "不能解析物件 '%s'"
 
-#: merge-recursive.c:3787 builtin/merge.c:711 builtin/merge.c:895
+#: merge-recursive.c:3814 builtin/merge.c:716 builtin/merge.c:900
+#: builtin/stash.c:473
 msgid "Unable to write index."
 msgstr "不能寫入索引。"
 
@@ -5071,184 +5311,195 @@
 msgid "failed to read the cache"
 msgstr "讀取快取失敗"
 
-#: merge.c:109 rerere.c:720 builtin/am.c:1883 builtin/am.c:1917
-#: builtin/checkout.c:573 builtin/checkout.c:829 builtin/clone.c:817
-#: builtin/stash.c:265
+#: 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
 msgid "unable to write new index file"
 msgstr "無法寫新的索引檔案"
 
-#: midx.c:80
+#: midx.c:74
+msgid "multi-pack-index OID fanout is of the wrong size"
+msgstr "多包索引的物件 ID fanout 大小錯誤"
+
+#: midx.c:105
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "多包索引檔案 %s 太小"
 
-#: midx.c:96
+#: midx.c:121
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "多包索引簽名 0x%08x 和簽名 0x%08x 不符合"
 
-#: midx.c:101
+#: midx.c:126
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index 版本 %d 不能被識別"
 
-#: midx.c:106
+#: midx.c:131
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index 雜湊版本 %u 與版本 %u 不符合"
 
-#: midx.c:123
-msgid "invalid chunk offset (too large)"
-msgstr "無效的區塊位移(太大)"
-
-#: midx.c:147
-msgid "terminating multi-pack-index chunk id appears earlier than expected"
-msgstr "終止多包索引區塊 id 出現時間早於預期"
-
-#: midx.c:160
+#: midx.c:148
 msgid "multi-pack-index missing required pack-name chunk"
-msgstr "多包索引缺少必需的包名塊"
+msgstr "多包索引缺少必需的包名區塊"
 
-#: midx.c:162
+#: midx.c:150
 msgid "multi-pack-index missing required OID fanout chunk"
-msgstr "多包索引缺少必需的物件 ID 扇出塊"
+msgstr "多包索引缺少必需的物件 ID fanout 區塊"
 
-#: midx.c:164
+#: midx.c:152
 msgid "multi-pack-index missing required OID lookup chunk"
-msgstr "多包索引缺少必需的物件 ID 查詢塊"
+msgstr "多包索引缺少必需的物件 ID 查詢區塊"
 
-#: midx.c:166
+#: midx.c:154
 msgid "multi-pack-index missing required object offsets chunk"
-msgstr "多包索引缺少必需的物件位移塊"
+msgstr "多包索引缺少必需的物件位移區塊"
 
-#: midx.c:180
+#: midx.c:170
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "多包索引包名無序:'%s' 在 '%s' 之前"
 
-#: midx.c:223
+#: midx.c:214
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "錯的 pack-int-id:%u(共有 %u 個包)"
 
-#: midx.c:273
+#: midx.c:264
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "多包索引儲存一個64位位移,但是 off_t 太小"
 
-#: midx.c:480
+#: midx.c:490
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "新增 packfile '%s' 失敗"
 
-#: midx.c:486
+#: midx.c:496
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "開啟包索引 '%s' 失敗"
 
-#: midx.c:546
+#: midx.c:564
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "在 packfile 中定位物件 %d 失敗"
 
-#: midx.c:846
+#: midx.c:880 builtin/index-pack.c:1535
+msgid "cannot store reverse index file"
+msgstr "無法儲存倒排索引檔案"
+
+#: midx.c:933
 msgid "Adding packfiles to multi-pack-index"
 msgstr "正在新增 packfile 至多包索引"
 
-#: midx.c:879
+#: midx.c:979
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "沒有看到要捨棄的包檔案 %s"
 
-#: midx.c:931
+#: midx.c:1024
+#, c-format
+msgid "unknown preferred pack: '%s'"
+msgstr "未知偏好包:「%s」"
+
+#: midx.c:1029
+#, c-format
+msgid "preferred pack '%s' is expired"
+msgstr "偏好包「%s」已經過期"
+
+#: midx.c:1045
 msgid "no pack files to index."
 msgstr "沒有要索引的 pack 檔案。"
 
-#: midx.c:982
-msgid "Writing chunks to multi-pack-index"
-msgstr "寫入區塊至多包索引"
+#: midx.c:1125 builtin/clean.c:37
+#, c-format
+msgid "failed to remove %s"
+msgstr "刪除 %s 失敗"
 
-#: midx.c:1060
+#: midx.c:1156
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "清理位於 %s 的多包索引失敗"
 
-#: midx.c:1116
+#: midx.c:1214
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "有 multi-pack-index 檔案,但無法解析"
 
-#: midx.c:1124
+#: midx.c:1222
 msgid "Looking for referenced packfiles"
 msgstr "正在尋找引用的 packfile"
 
-#: midx.c:1139
+#: midx.c:1237
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "物件 ID 扇出無序:fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1144
+#: midx.c:1242
 msgid "the midx contains no oid"
 msgstr "midx 沒有 oid"
 
-#: midx.c:1153
+#: midx.c:1251
 msgid "Verifying OID order in multi-pack-index"
 msgstr "正在驗證多包索引中的物件 ID 順序"
 
-#: midx.c:1162
+#: midx.c:1260
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "物件 ID 查詢無序:oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1182
+#: midx.c:1280
 msgid "Sorting objects by packfile"
 msgstr "透過 packfile 為物件排序"
 
-#: midx.c:1189
+#: midx.c:1287
 msgid "Verifying object offsets"
 msgstr "正在驗證物件位移"
 
-#: midx.c:1205
+#: midx.c:1303
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "為 oid[%d] = %s 載入包條目失敗"
 
-#: midx.c:1211
+#: midx.c:1309
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "為 packfile %s 載入包索引失敗"
 
-#: midx.c:1220
+#: midx.c:1318
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "oid[%d] = %s 錯誤的物件位移:%<PRIx64> != %<PRIx64>"
 
-#: midx.c:1245
+#: midx.c:1343
 msgid "Counting referenced objects"
 msgstr "正在計算引用物件"
 
-#: midx.c:1255
+#: midx.c:1353
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "正在尋找並刪除沒有參考的 packfile"
 
-#: midx.c:1446
+#: midx.c:1544
 msgid "could not start pack-objects"
 msgstr "不能開始 pack-objects"
 
-#: midx.c:1466
+#: midx.c:1564
 msgid "could not finish pack-objects"
 msgstr "不能結束 pack-objects"
 
-#: name-hash.c:537
+#: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
 msgstr "不能建立 lazy_dir 執行緒:%s"
 
-#: name-hash.c:559
+#: name-hash.c:564
 #, c-format
 msgid "unable to create lazy_name thread: %s"
 msgstr "不能建立 lazy_name 執行緒:%s"
 
-#: name-hash.c:565
+#: name-hash.c:570
 #, c-format
 msgid "unable to join lazy_name thread: %s"
 msgstr "不能加入 lasy_name 執行緒:%s"
@@ -5292,6 +5543,357 @@
 msgid "Bad %s value: '%s'"
 msgstr "壞的 %s 值:'%s'"
 
+#: object-file.c:526
+#, c-format
+msgid "object directory %s does not exist; check .git/objects/info/alternates"
+msgstr "物件目錄 %s 不存在,檢查 .git/objects/info/alternates"
+
+#: object-file.c:577
+#, c-format
+msgid "unable to normalize alternate object path: %s"
+msgstr "無法規範化備用物件路徑:%s"
+
+#: object-file.c:649
+#, c-format
+msgid "%s: ignoring alternate object stores, nesting too deep"
+msgstr "%s:忽略備用物件庫,嵌套太深"
+
+#: object-file.c:656
+#, c-format
+msgid "unable to normalize object directory: %s"
+msgstr "無法規範化物件目錄: %s"
+
+#: object-file.c:699
+msgid "unable to fdopen alternates lockfile"
+msgstr "無法 fdopen 取代鎖檔案"
+
+#: object-file.c:717
+msgid "unable to read alternates file"
+msgstr "無法讀取替代檔案"
+
+#: object-file.c:724
+msgid "unable to move new alternates file into place"
+msgstr "無法將新的替代檔案移動到位"
+
+#: object-file.c:759
+#, c-format
+msgid "path '%s' does not exist"
+msgstr "路徑 '%s' 不存在"
+
+#: object-file.c:780
+#, c-format
+msgid "reference repository '%s' as a linked checkout is not supported yet."
+msgstr "尚不支援將參考版本庫 '%s' 作為一個連結檢出。"
+
+#: object-file.c:786
+#, c-format
+msgid "reference repository '%s' is not a local repository."
+msgstr "參考版本庫 '%s' 不是一個本機版本庫。"
+
+#: object-file.c:792
+#, c-format
+msgid "reference repository '%s' is shallow"
+msgstr "參考版本庫 '%s' 是一個淺複製"
+
+#: object-file.c:800
+#, c-format
+msgid "reference repository '%s' is grafted"
+msgstr "參考版本庫 '%s' 已被移植"
+
+#: object-file.c:860
+#, c-format
+msgid "invalid line while parsing alternate refs: %s"
+msgstr "解析備用引用時無效的行:%s"
+
+#: object-file.c:1010
+#, c-format
+msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
+msgstr "嘗試 mmap %<PRIuMAX>,超過了最大值 %<PRIuMAX>"
+
+#: object-file.c:1031
+msgid "mmap failed"
+msgstr "mmap 失敗"
+
+#: object-file.c:1195
+#, c-format
+msgid "object file %s is empty"
+msgstr "物件檔案 %s 為空"
+
+#: object-file.c:1330 object-file.c:2524
+#, c-format
+msgid "corrupt loose object '%s'"
+msgstr "損壞的鬆散物件 '%s'"
+
+#: object-file.c:1332 object-file.c:2528
+#, c-format
+msgid "garbage at end of loose object '%s'"
+msgstr "鬆散物件 '%s' 後面有垃圾資料"
+
+#: object-file.c:1374
+msgid "invalid object type"
+msgstr "無效的物件類型"
+
+#: object-file.c:1458
+#, c-format
+msgid "unable to unpack %s header with --allow-unknown-type"
+msgstr "無法用 --allow-unknown-type 參數解開 %s 標頭訊息"
+
+#: object-file.c:1461
+#, c-format
+msgid "unable to unpack %s header"
+msgstr "無法解開 %s 頭部"
+
+#: object-file.c:1467
+#, c-format
+msgid "unable to parse %s header with --allow-unknown-type"
+msgstr "無法用 --allow-unknown-type 參數解析 %s 標頭訊息"
+
+#: object-file.c:1470
+#, c-format
+msgid "unable to parse %s header"
+msgstr "無法解析 %s 頭部"
+
+#: object-file.c:1697
+#, c-format
+msgid "failed to read object %s"
+msgstr "讀取物件 %s 失敗"
+
+#: object-file.c:1701
+#, c-format
+msgid "replacement %s not found for %s"
+msgstr "找不到 %2$s 的替代 %1$s"
+
+#: object-file.c:1705
+#, c-format
+msgid "loose object %s (stored in %s) is corrupt"
+msgstr "鬆散物件 %s(儲存在 %s)已損壞"
+
+#: object-file.c:1709
+#, c-format
+msgid "packed object %s (stored in %s) is corrupt"
+msgstr "打包物件 %s(儲存在 %s)已損壞"
+
+#: object-file.c:1814
+#, c-format
+msgid "unable to write file %s"
+msgstr "無法寫檔案 %s"
+
+#: object-file.c:1821
+#, c-format
+msgid "unable to set permission to '%s'"
+msgstr "無法為 '%s' 設定權限"
+
+#: object-file.c:1828
+msgid "file write error"
+msgstr "檔案寫錯誤"
+
+#: object-file.c:1848
+msgid "error when closing loose object file"
+msgstr "關閉鬆散物件檔案時發生錯誤"
+
+#: object-file.c:1913
+#, c-format
+msgid "insufficient permission for adding an object to repository database %s"
+msgstr "權限不足,無法在版本庫物件庫 %s 中新增物件"
+
+#: object-file.c:1915
+msgid "unable to create temporary file"
+msgstr "無法建立暫存檔"
+
+#: object-file.c:1939
+msgid "unable to write loose object file"
+msgstr "不能寫鬆散物件檔案"
+
+#: object-file.c:1945
+#, c-format
+msgid "unable to deflate new object %s (%d)"
+msgstr "不能壓縮新物件 %s(%d)"
+
+#: object-file.c:1949
+#, c-format
+msgid "deflateEnd on object %s failed (%d)"
+msgstr "在物件 %s 上呼叫 deflateEnd 失敗(%d)"
+
+#: object-file.c:1953
+#, c-format
+msgid "confused by unstable object source data for %s"
+msgstr "被 %s 的不穩定物件源資料搞糊塗了"
+
+#: object-file.c:1963 builtin/pack-objects.c:1097
+#, c-format
+msgid "failed utime() on %s"
+msgstr "在 %s 上呼叫 utime() 失敗"
+
+#: object-file.c:2040
+#, c-format
+msgid "cannot read object for %s"
+msgstr "不能讀取物件 %s"
+
+#: object-file.c:2091
+msgid "corrupt commit"
+msgstr "損壞的提交"
+
+#: object-file.c:2099
+msgid "corrupt tag"
+msgstr "損壞的標籤"
+
+#: object-file.c:2199
+#, c-format
+msgid "read error while indexing %s"
+msgstr "索引 %s 時讀取錯誤"
+
+#: object-file.c:2202
+#, c-format
+msgid "short read while indexing %s"
+msgstr "索引 %s 時讀入不完整"
+
+#: object-file.c:2275 object-file.c:2285
+#, c-format
+msgid "%s: failed to insert into database"
+msgstr "%s:插入資料庫失敗"
+
+#: object-file.c:2291
+#, c-format
+msgid "%s: unsupported file type"
+msgstr "%s:不支援的檔案類型"
+
+#: object-file.c:2315
+#, c-format
+msgid "%s is not a valid object"
+msgstr "%s 不是一個有效的物件"
+
+#: object-file.c:2317
+#, c-format
+msgid "%s is not a valid '%s' object"
+msgstr "%s 不是一個有效的 '%s' 物件"
+
+#: object-file.c:2344 builtin/index-pack.c:192
+#, c-format
+msgid "unable to open %s"
+msgstr "不能開啟 %s"
+
+#: object-file.c:2535 object-file.c:2588
+#, c-format
+msgid "hash mismatch for %s (expected %s)"
+msgstr "%s 的雜湊值不符合(預期 %s)"
+
+#: object-file.c:2559
+#, c-format
+msgid "unable to mmap %s"
+msgstr "不能 mmap %s"
+
+#: object-file.c:2564
+#, c-format
+msgid "unable to unpack header of %s"
+msgstr "無法解壓縮 %s 的頭部"
+
+#: object-file.c:2570
+#, c-format
+msgid "unable to parse header of %s"
+msgstr "無法解析 %s 的頭部"
+
+#: object-file.c:2581
+#, c-format
+msgid "unable to unpack contents of %s"
+msgstr "無法解壓縮 %s 的內容"
+
+#: object-name.c:486
+#, c-format
+msgid "short object ID %s is ambiguous"
+msgstr "短物件 ID %s 存在歧義"
+
+#: object-name.c:497
+msgid "The candidates are:"
+msgstr "候選者有:"
+
+#: object-name.c:796
+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"
+"may be created by mistake. For example,\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
+"examine these refs and maybe delete them. Turn this message off by\n"
+"running \"git config advice.objectNameWarning false\""
+msgstr ""
+"Git 通常不會建立以 40 個十六進位字元結尾的引用,\n"
+"因為當您只提供 40 個十六進位字元時,其將被忽略。\n"
+"這些引用可能被意外建立。例如:\n"
+"\n"
+"  git switch -c $br $(git rev-parse ...)\n"
+"\n"
+"當「$br」因為某些原因空白時,會建立出 40 位十六進位的引用。\n"
+"請檢查這些引用,並視需要刪除。執行\n"
+"「git config advice.objectNameWarning false」命令以關閉本訊息通知"
+
+#: object-name.c:916
+#, c-format
+msgid "log for '%.*s' only goes back to %s"
+msgstr "'%.*s' 的日誌只能回到 %s"
+
+#: object-name.c:924
+#, c-format
+msgid "log for '%.*s' only has %d entries"
+msgstr "'%.*s' 的日誌只有 %d 個項目"
+
+#: object-name.c:1702
+#, c-format
+msgid "path '%s' exists on disk, but not in '%.*s'"
+msgstr "磁碟上存在 '%s' 路徑,但不存在於 '%.*s'"
+
+#: object-name.c:1708
+#, c-format
+msgid ""
+"path '%s' exists, but not '%s'\n"
+"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
+msgstr ""
+"'%s' 路徑存在,但不是 '%s'\n"
+"提示:你在說 '%.*s:%s',即 '%.*s:./%s' 嗎?"
+
+#: object-name.c:1717
+#, c-format
+msgid "path '%s' does not exist in '%.*s'"
+msgstr "'%s' 路徑不存在於 '%.*s'"
+
+#: object-name.c:1745
+#, c-format
+msgid ""
+"path '%s' is in the index, but not at stage %d\n"
+"hint: Did you mean ':%d:%s'?"
+msgstr ""
+"'%s' 路徑在索引,但不在 %d 暫存區\n"
+"提示:你在說 ':%d:%s' 嗎?"
+
+#: object-name.c:1761
+#, c-format
+msgid ""
+"path '%s' is in the index, but not '%s'\n"
+"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
+msgstr ""
+"'%s' 路徑在索引,但不是 '%s'\n"
+"提示:你在說 ':%d:%s',即 ':%d:%s' 嗎?"
+
+#: object-name.c:1769
+#, c-format
+msgid "path '%s' exists on disk, but not in the index"
+msgstr "磁碟上存在 '%s' 路徑,但不在索引中"
+
+#: object-name.c:1771
+#, c-format
+msgid "path '%s' does not exist (neither on disk nor in the index)"
+msgstr "'%s' 路徑不存在 (既不存在磁碟,也不存在索引)"
+
+#: object-name.c:1784
+msgid "relative path syntax can't be used outside working tree"
+msgstr "相對路徑與法不能用在工作區外"
+
+#: object-name.c:1922
+#, c-format
+msgid "invalid object name '%.*s'."
+msgstr "'%.*s' 物件名稱無效。"
+
 #: object.c:53
 #, c-format
 msgid "invalid object type \"%s\""
@@ -5302,36 +5904,85 @@
 msgid "object %s is a %s, not a %s"
 msgstr "物件 %s 是一個 %s,不是一個 %s"
 
-#: object.c:233
+#: object.c:232
 #, c-format
 msgid "object %s has unknown type id %d"
 msgstr "物件 %s 有未知的類型 id %d"
 
-#: object.c:246
+#: object.c:245
 #, c-format
 msgid "unable to parse object: %s"
 msgstr "不能解析物件:%s"
 
-#: object.c:266 object.c:278
+#: object.c:265 object.c:277
 #, c-format
 msgid "hash mismatch %s"
 msgstr "雜湊值與 %s 不符合"
 
-#: pack-bitmap.c:815 pack-bitmap.c:821 builtin/pack-objects.c:2216
+#: pack-bitmap.c:844 pack-bitmap.c:850 builtin/pack-objects.c:2251
 #, c-format
 msgid "unable to get size of %s"
 msgstr "不能得到 %s 的大小"
 
-#: packfile.c:615
+#: pack-bitmap.c:1547 builtin/rev-list.c:92
+#, c-format
+msgid "unable to get disk usage of %s"
+msgstr "無法取得 %s 的磁碟用量"
+
+#: pack-revindex.c:221
+#, c-format
+msgid "reverse-index file %s is too small"
+msgstr "%s 倒排索引檔案過小"
+
+#: pack-revindex.c:226
+#, c-format
+msgid "reverse-index file %s is corrupt"
+msgstr "%s 倒排索引檔案損壞"
+
+#: pack-revindex.c:234
+#, c-format
+msgid "reverse-index file %s has unknown signature"
+msgstr "%s 倒排索引檔案有未知簽章"
+
+#: pack-revindex.c:238
+#, c-format
+msgid "reverse-index file %s has unsupported version %<PRIu32>"
+msgstr "倒排索引檔案 %s 有不支援的版本 %<PRIu32>"
+
+#: pack-revindex.c:243
+#, c-format
+msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
+msgstr "倒排索引檔案 %s 有不支援的雜湊 ID %<PRIu32>"
+
+#: pack-write.c:250
+msgid "cannot both write and verify reverse index"
+msgstr "無法同時寫入和驗證倒排索引"
+
+#: pack-write.c:271
+#, c-format
+msgid "could not stat: %s"
+msgstr "無法 stat:%s"
+
+#: pack-write.c:283
+#, c-format
+msgid "failed to make %s readable"
+msgstr "無法讓 %s 能夠寫入"
+
+#: pack-write.c:522
+#, c-format
+msgid "could not write '%s' promisor file"
+msgstr "無法寫入「%s」promisor 檔案"
+
+#: packfile.c:625
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "位移量在 packfile 結束之前(損壞的 .idx?)"
 
-#: packfile.c:1907
+#: packfile.c:1937
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "位移量在 %s 的包索引開始之前(損壞的索引?)"
 
-#: packfile.c:1911
+#: packfile.c:1941
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "位移量越過了 %s 的包索引的結尾(被截斷的索引?)"
@@ -5396,31 +6047,31 @@
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr "你的意思是 `--%s`(有兩個短線)嗎?"
 
-#: parse-options.c:666 parse-options.c:971
+#: parse-options.c:668 parse-options.c:988
 #, c-format
 msgid "alias of --%s"
 msgstr "--%s 的別名"
 
-#: parse-options.c:862
+#: parse-options.c:879
 #, c-format
 msgid "unknown option `%s'"
 msgstr "未知選項 `%s'"
 
-#: parse-options.c:864
+#: parse-options.c:881
 #, c-format
 msgid "unknown switch `%c'"
 msgstr "未知開關 `%c'"
 
-#: parse-options.c:866
+#: parse-options.c:883
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "字串中未知的非 ascii 字元選項:`%s'"
 
-#: parse-options.c:890
+#: parse-options.c:907
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:909
+#: parse-options.c:926
 #, c-format
 msgid "usage: %s"
 msgstr "用法:%s"
@@ -5428,18 +6079,18 @@
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:915
+#: parse-options.c:932
 #, c-format
 msgid "   or: %s"
 msgstr "   或:%s"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: parse-options.c:918
+#: parse-options.c:935
 #, c-format
 msgid "    %s"
 msgstr "    %s"
 
-#: parse-options.c:957
+#: parse-options.c:974
 msgid "-NUM"
 msgstr "-數字"
 
@@ -5448,78 +6099,78 @@
 msgid "Could not make %s writable by group"
 msgstr "不能設定 %s 為組可寫"
 
-#: pathspec.c:130
+#: pathspec.c:151
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "跳脫字元 '\\' 不能作為屬性值的最後一個字元"
 
-#: pathspec.c:148
+#: pathspec.c:169
 msgid "Only one 'attr:' specification is allowed."
 msgstr "只允許一個 'attr:' 規格。"
 
-#: pathspec.c:151
+#: pathspec.c:172
 msgid "attr spec must not be empty"
 msgstr "屬性規格不能為空"
 
-#: pathspec.c:194
+#: pathspec.c:215
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "無效的屬性名 %s"
 
-#: pathspec.c:259
+#: pathspec.c:280
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr "全域的 'glob' 和 'noglob' 路徑規格設定不相容"
 
-#: pathspec.c:266
+#: pathspec.c:287
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
 msgstr "全域的 'literal' 路徑規格設定和其它的全域路徑規格設定不相容"
 
-#: pathspec.c:306
+#: pathspec.c:327
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "路徑規格包含無效的神奇前綴"
 
-#: pathspec.c:327
+#: pathspec.c:348
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "在路徑規格 '%3$s' 中無效的神奇前綴 '%2$.*1$s'"
 
-#: pathspec.c:332
+#: pathspec.c:353
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "路徑規格 '%s' 的神奇前綴結尾少了一個 ')'"
 
-#: pathspec.c:370
+#: pathspec.c:391
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "路徑規格 '%2$s' 中包含未實現的神奇前綴 '%1$c'"
 
-#: pathspec.c:429
+#: pathspec.c:450
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s:'literal' 和 'glob' 不相容"
 
-#: pathspec.c:445
+#: pathspec.c:466
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
 msgstr "%s:'%s' 在位於 '%s' 的版本庫之外"
 
-#: pathspec.c:521
+#: pathspec.c:542
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s'(助記符:'%c')"
 
-#: pathspec.c:531
+#: pathspec.c:552
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s:路徑規格神奇前綴不被此指令支援:%s"
 
-#: pathspec.c:598
+#: pathspec.c:619
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "路徑規格 '%s' 位於符號連結中"
 
-#: pathspec.c:643
+#: pathspec.c:664
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr "某行不應該被括號括住:%s"
@@ -5540,7 +6191,7 @@
 msgid "flush packet write failed"
 msgstr "flush 包寫錯誤"
 
-#: pkt-line.c:153 pkt-line.c:239
+#: pkt-line.c:153 pkt-line.c:265
 msgid "protocol error: impossibly long line"
 msgstr "協定錯誤:不可能的長行"
 
@@ -5548,47 +6199,48 @@
 msgid "packet write with format failed"
 msgstr "格式化包寫入錯誤"
 
-#: pkt-line.c:203
+#: pkt-line.c:204
 msgid "packet write failed - data exceeds max packet size"
 msgstr "寫封包失敗:資料超過了包的最大長度"
 
-#: pkt-line.c:210 pkt-line.c:217
-msgid "packet write failed"
-msgstr "封包寫入失敗"
+#: pkt-line.c:222
+#, c-format
+msgid "packet write failed: %s"
+msgstr "封包寫入失敗:%s"
 
-#: pkt-line.c:302
+#: pkt-line.c:328 pkt-line.c:329
 msgid "read error"
 msgstr "讀取錯誤"
 
-#: pkt-line.c:310
+#: pkt-line.c:339 pkt-line.c:340
 msgid "the remote end hung up unexpectedly"
 msgstr "遠端意外掛斷了"
 
-#: pkt-line.c:338
+#: pkt-line.c:369 pkt-line.c:371
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr "協定錯誤:錯誤的行長度字串:%.4s"
 
-#: pkt-line.c:352 pkt-line.c:357
+#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr "協定錯誤:錯誤的行長度 %d"
 
-#: pkt-line.c:373 sideband.c:165
+#: pkt-line.c:413 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "遠端錯誤:%s"
 
-#: preload-index.c:119
+#: preload-index.c:125
 msgid "Refreshing index"
 msgstr "正在重新整理索引"
 
-#: preload-index.c:138
+#: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "無法建立執行緒 lstat:%s"
 
-#: pretty.c:983
+#: pretty.c:988
 msgid "unable to parse --pretty format"
 msgstr "不能解析 --pretty 格式"
 
@@ -5609,88 +6261,96 @@
 msgid "promisor remote name cannot begin with '/': %s"
 msgstr "promisor 遠端名稱不能以 '/' 開始:%s"
 
+#: protocol-caps.c:103
+msgid "object-info: expected flush after arguments"
+msgstr "object-info:引數後預期要有 flush"
+
 #: prune-packed.c:35
 msgid "Removing duplicate objects"
 msgstr "正在刪除重複物件"
 
-#: range-diff.c:77
+#: range-diff.c:78
 msgid "could not start `log`"
 msgstr "不能啟動 `log`"
 
-#: range-diff.c:79
+#: range-diff.c:80
 msgid "could not read `log` output"
 msgstr "不能讀取 `log` 的輸出"
 
-#: range-diff.c:98 sequencer.c:5310
+#: range-diff.c:101 sequencer.c:5551
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "不能解析提交 '%s'"
 
-#: range-diff.c:112
+#: range-diff.c:115
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr "無法解析第一行「log」輸出:開頭不是「commit」:「%s」"
 
-#: range-diff.c:137
+#: range-diff.c:140
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "無法解析 git 頭 '%.*s'"
 
-#: range-diff.c:299
+#: range-diff.c:306
 msgid "failed to generate diff"
 msgstr "生成 diff 失敗"
 
-#: range-diff.c:532 range-diff.c:534
+#: range-diff.c:558
+msgid "--left-only and --right-only are mutually exclusive"
+msgstr "--left-only 和 --right-only 互斥"
+
+#: range-diff.c:561 range-diff.c:563
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "不能解析 '%s' 的日誌"
 
-#: read-cache.c:682
+#: read-cache.c:708
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "將不會新增檔案別名 '%s'('%s' 已經存在於索引中)"
 
-#: read-cache.c:698
+#: read-cache.c:724
 msgid "cannot create an empty blob in the object database"
 msgstr "不能在物件資料庫中建立空的資料物件"
 
-#: read-cache.c:720
+#: read-cache.c:746
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr "%s:只能新增一般檔案、符號連結或 git 目錄"
 
-#: read-cache.c:725
+#: read-cache.c:751
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' 沒有檢出一個提交"
 
-#: read-cache.c:777
+#: read-cache.c:803
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "無法索引檔案 '%s'"
 
-#: read-cache.c:796
+#: read-cache.c:822
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "無法在索引中新增 '%s'"
 
-#: read-cache.c:807
+#: read-cache.c:833
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "無法對 %s 執行 stat"
 
-#: read-cache.c:1318
+#: read-cache.c:1356
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' 看起來既是檔案又是目錄"
 
-#: read-cache.c:1524
+#: read-cache.c:1571
 msgid "Refresh index"
 msgstr "重新整理索引"
 
-#: read-cache.c:1639
+#: read-cache.c:1700
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -5699,7 +6359,7 @@
 "設定了 index.version,但是取值無效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1649
+#: read-cache.c:1710
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -5708,140 +6368,144 @@
 "設定了 GIT_INDEX_VERSION,但是取值無效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1705
+#: read-cache.c:1766
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "壞的簽名 0x%08x"
 
-#: read-cache.c:1708
+#: read-cache.c:1769
 #, c-format
 msgid "bad index version %d"
 msgstr "壞的索引版本 %d"
 
-#: read-cache.c:1717
+#: read-cache.c:1778
 msgid "bad index file sha1 signature"
 msgstr "壞的索引檔案 sha1 簽名"
 
-#: read-cache.c:1747
+#: read-cache.c:1812
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "索引使用不被支援的 %.4s 擴展"
 
 #
-#: read-cache.c:1749
+#: read-cache.c:1814
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "忽略 %.4s 擴展"
 
-#: read-cache.c:1786
+#: read-cache.c:1851
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "未知的索引條目格式 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1867
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "索引中靠近路徑 '%s' 有錯誤的名稱欄位"
 
-#: read-cache.c:1859
+#: read-cache.c:1924
 msgid "unordered stage entries in index"
 msgstr "索引中有未排序的暫存條目"
 
-#: read-cache.c:1862
+#: read-cache.c:1927
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "合併檔案 '%s' 有多個暫存條目"
 
-#: read-cache.c:1865
+#: read-cache.c:1930
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' 的未排序暫存條目"
 
-#: read-cache.c:1971 read-cache.c:2262 rerere.c:565 rerere.c:599 rerere.c:1111
-#: submodule.c:1628 builtin/add.c:538 builtin/check-ignore.c:181
-#: builtin/checkout.c:502 builtin/checkout.c:688 builtin/clean.c:991
-#: builtin/commit.c:364 builtin/diff-tree.c:122 builtin/grep.c:507
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:290
+#: 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
 msgid "index file corrupt"
 msgstr "索引檔案損壞"
 
-#: read-cache.c:2115
+#: read-cache.c:2180
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "無法建立 load_cache_entries 執行緒:%s"
 
-#: read-cache.c:2128
+#: read-cache.c:2193
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "無法加入 load_cache_entries 執行緒:%s"
 
-#: read-cache.c:2161
+#: read-cache.c:2226
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s:開啟索引檔案失敗"
 
-#: read-cache.c:2165
+#: read-cache.c:2230
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s:不能對開啟的索引執行 stat 動作"
 
-#: read-cache.c:2169
+#: read-cache.c:2234
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s:索引檔案比預期的小"
 
-#: read-cache.c:2173
+#: read-cache.c:2238
 #, c-format
 msgid "%s: unable to map index file"
 msgstr "%s:無法對索引檔案執行 map 動作"
 
-#: read-cache.c:2215
+#: read-cache.c:2280
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "無法建立 load_index_extensions 執行緒:%s"
 
-#: read-cache.c:2242
+#: read-cache.c:2307
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "無法加入 load_index_extensions 執行緒:%s"
 
-#: read-cache.c:2274
+#: read-cache.c:2345
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "無法重新整理共享索引 '%s'"
 
-#: read-cache.c:2321
+#: read-cache.c:2392
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "損壞的索引,期望在 %2$s 中的 %1$s,得到 %3$s"
 
-#: read-cache.c:3017 strbuf.c:1171 wrapper.c:633 builtin/merge.c:1140
+#: read-cache.c:3095 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1145
 #, c-format
 msgid "could not close '%s'"
 msgstr "不能關閉 '%s'"
 
-#: read-cache.c:3120 sequencer.c:2479 sequencer.c:4231
+#: read-cache.c:3138
+msgid "failed to convert to a sparse-index"
+msgstr "無法轉換成稀疏索引"
+
+#: read-cache.c:3209 sequencer.c:2684 sequencer.c:4441
 #, c-format
 msgid "could not stat '%s'"
 msgstr "不能對 '%s' 呼叫 stat"
 
-#: read-cache.c:3133
+#: read-cache.c:3222
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "不能開啟 git 目錄:%s"
 
-#: read-cache.c:3145
+#: read-cache.c:3234
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "無法刪除:%s"
 
-#: read-cache.c:3170
+#: read-cache.c:3263
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "不能修復 '%s' 的權限位"
 
-#: read-cache.c:3319
+#: read-cache.c:3412
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s:不能落到暫存區 #0"
@@ -5869,7 +6533,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -5878,36 +6545,38 @@
 "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"
+".       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"
+"指令:\n"
 "p, pick <提交> = 使用提交\n"
-"r, reword <提交> = 使用提交,但修改提交說明\n"
-"e, edit <提交> = 使用提交,進入 shell 以便進行提交修補\n"
-"s, squash <提交> = 使用提交,但融合到前一個提交\n"
-"f, fixup <提交> = 類似於 \"squash\",但捨棄提交說明日誌\n"
-"x, exec <指令> = 使用 shell 執行指令(此行剩餘部分)\n"
-"b, break = 在此處停止(使用 'git rebase --continue' 繼續重定基底)\n"
-"d, drop <提交> = 刪除提交\n"
-"l, label <label> = 為目前 HEAD 打上標記\n"
-"t, reset <label> = 重設 HEAD 到該標記\n"
+"r, reword <提交> = 使用提交,但編輯提交說明\n"
+"e, edit <提交> = 使用提交,但不直接修補 (amend) \n"
+"s, squash <提交> = 使用提交,但融合至上個提交\n"
+"f, fixup [-C | -c] <提交> = 跟 “squash” 相似,但除非傳入「-C」\n"
+"                   否則只保留上一個提交的日誌訊息。傳入 -C 表示只保留這個\n"
+"                   提交的訊息;傳入 -c 與 -C 功能相同,但會開啟編輯器\n"
+"x, exec <命令> = 使用 shell 執行指令(這一行的剩餘部分)\n"
+"b, break = 在這停止(使用 'git rebase --continue' 繼續重定基底)\n"
+"d, drop <提交> = 移除提交\n"
+"l, label <標籤> = 為目前 HEAD 打上指定名字標籤\n"
+"t, reset <標籤> = 重設 HEAD 到指定標籤\n"
 "m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
 ".       建立一個合併提交,並使用原始的合併提交說明(如果沒有指定\n"
 ".       原始提交,使用備註部分的 oneline 作為提交說明)。使用\n"
-".       -c <提交> 可以編輯提交說明。\n"
+".       -c <commit> 可以編輯提交說明。\n"
 "\n"
-"可以對這些行重新排序,將從上至下執行。\n"
+"可以對這些行重新排序,會從上至下執行。\n"
 
-#: rebase-interactive.c:63
+#: rebase-interactive.c:66
 #, c-format
 msgid "Rebase %s onto %s (%d command)"
 msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "重定基底 %s 到 %s(%d 個提交)"
 
-#: rebase-interactive.c:72 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
@@ -5915,7 +6584,7 @@
 "\n"
 "不要刪除任意一行。使用 'drop' 顯式地刪除一個提交。\n"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -5923,7 +6592,7 @@
 "\n"
 "如果您在這裡刪除一行,對應的提交將會遺失。\n"
 
-#: rebase-interactive.c:81 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -5937,7 +6606,7 @@
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:86 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -5947,19 +6616,19 @@
 "然而,如果您刪除全部內容,重定基底動作將會終止。\n"
 "\n"
 
-#: rebase-interactive.c:110 rerere.c:485 rerere.c:692 sequencer.c:3607
-#: sequencer.c:3633 sequencer.c:5416 builtin/fsck.c:347 builtin/rebase.c:270
+#: 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
 #, c-format
 msgid "could not write '%s'"
 msgstr "不能寫入 '%s'"
 
-#: rebase-interactive.c:116 builtin/rebase.c:202 builtin/rebase.c:228
-#: builtin/rebase.c:252
+#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
+#: builtin/rebase.c:253
 #, c-format
 msgid "could not write '%s'."
 msgstr "不能寫入 '%s'。"
 
-#: rebase-interactive.c:193
+#: rebase-interactive.c:196
 #, c-format
 msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
@@ -5968,7 +6637,7 @@
 "警告:一些提交可能被意外捨棄。\n"
 "捨棄的提交(從新到舊):\n"
 
-#: rebase-interactive.c:200
+#: rebase-interactive.c:203
 #, c-format
 msgid ""
 "To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5984,14 +6653,14 @@
 "可選值有:ignore、warn、error。\n"
 "\n"
 
-#: rebase-interactive.c:233 rebase-interactive.c:238 sequencer.c:2394
-#: builtin/rebase.c:188 builtin/rebase.c:213 builtin/rebase.c:239
-#: builtin/rebase.c:264
+#: 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 "不能讀取 '%s'。"
 
-#: ref-filter.c:42 wt-status.c:1973
+#: ref-filter.c:42 wt-status.c:1978
 msgid "gone"
 msgstr "遺失"
 
@@ -6010,232 +6679,247 @@
 msgid "ahead %d, behind %d"
 msgstr "領先 %d,落後 %d"
 
-#: ref-filter.c:169
+#: ref-filter.c:175
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "期望的格式:%%(color:<顏色>)"
 
-#: ref-filter.c:171
+#: ref-filter.c:177
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "無法識別的顏色:%%(color:%s)"
 
-#: ref-filter.c:193
+#: ref-filter.c:199
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "期望整數值 refname:lstrip=%s"
 
-#: ref-filter.c:197
+#: ref-filter.c:203
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "期望整數值 refname:rstrip=%s"
 
-#: ref-filter.c:199
+#: ref-filter.c:205
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "無法識別的 %%(%s) 參數:%s"
 
-#: ref-filter.c:254
+#: ref-filter.c:260
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) 不帶參數"
 
-#: ref-filter.c:276
+#: ref-filter.c:282
 #, c-format
 msgid "unrecognized %%(objectsize) argument: %s"
 msgstr "無法識別的 %%(objectsize) 參數:%s"
 
-#: ref-filter.c:284
+#: ref-filter.c:290
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) 不帶參數"
 
-#: ref-filter.c:296
+#: ref-filter.c:302
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) 不帶參數"
 
-#: ref-filter.c:309
+#: ref-filter.c:315
 #, c-format
 msgid "unrecognized %%(subject) argument: %s"
 msgstr "無法識別的 %%(subject) 引數:%s"
 
-#: ref-filter.c:330
+#: ref-filter.c:334
+#, c-format
+msgid "expected %%(trailers:key=<value>)"
+msgstr "預期是 %%(trailers:key=<value>)"
+
+#: ref-filter.c:336
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "未知的 %%(trailers) 參數:%s"
 
-#: ref-filter.c:363
+#: ref-filter.c:367
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "期望一個正數 contents:lines=%s"
 
-#: ref-filter.c:365
+#: ref-filter.c:369
 #, c-format
 msgid "unrecognized %%(contents) argument: %s"
 msgstr "無法識別的 %%(contents) 參數:%s"
 
-#: ref-filter.c:380
+#: ref-filter.c:384
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "%%(%2$s) 中的 '%1$s' 預期是正數值"
 
-#: ref-filter.c:384
+#: ref-filter.c:388
 #, c-format
 msgid "unrecognized argument '%s' in %%(%s)"
 msgstr "無法識別 %%(%2$s) 中的 '%1$s' 參數"
 
-#: ref-filter.c:398
+#: ref-filter.c:402
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "無法識別的 email 選項:%s"
 
-#: ref-filter.c:428
+#: ref-filter.c:432
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "期望的格式:%%(align:<寬度>,<位置>)"
 
-#: ref-filter.c:440
+#: ref-filter.c:444
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "無法識別的位置:%s"
 
-#: ref-filter.c:447
+#: ref-filter.c:451
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "無法識別的寬度:%s"
 
-#: ref-filter.c:456
+#: ref-filter.c:460
 #, c-format
 msgid "unrecognized %%(align) argument: %s"
 msgstr "無法識別的 %%(align) 參數:%s"
 
-#: ref-filter.c:464
+#: ref-filter.c:468
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "元素 %%(align) 需要一個正數的寬度"
 
-#: ref-filter.c:482
+#: ref-filter.c:486
 #, c-format
 msgid "unrecognized %%(if) argument: %s"
 msgstr "無法識別的 %%(if) 參數:%s"
 
-#: ref-filter.c:584
+#: ref-filter.c:588
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "格式錯誤的欄位名:%.*s"
 
-#: ref-filter.c:611
+#: ref-filter.c:615
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "未知的欄位名:%.*s"
 
-#: ref-filter.c:615
+#: ref-filter.c:619
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr "不是一個 git 版本庫,但是欄位 '%.*s' 需要存取物件資料"
 
-#: ref-filter.c:739
+#: ref-filter.c:743
 #, c-format
 msgid "format: %%(if) atom used without a %%(then) atom"
 msgstr "格式:使用了 %%(if) 元素而沒有 %%(then) 元素"
 
-#: ref-filter.c:802
+#: ref-filter.c:807
 #, c-format
 msgid "format: %%(then) atom used without an %%(if) atom"
 msgstr "格式:使用了 %%(then) 元素而沒有 %%(if) 元素"
 
-#: ref-filter.c:804
+#: ref-filter.c:809
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "格式:%%(then) 元素用了多次"
 
-#: ref-filter.c:806
+#: ref-filter.c:811
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "格式:%%(then) 元素用在了 %%(else) 之後"
 
-#: ref-filter.c:834
+#: ref-filter.c:839
 #, c-format
 msgid "format: %%(else) atom used without an %%(if) atom"
 msgstr "格式:使用了 %%(else) 元素而沒有 %%(if) 元素"
 
-#: ref-filter.c:836
+#: ref-filter.c:841
 #, c-format
 msgid "format: %%(else) atom used without a %%(then) atom"
 msgstr "格式:使用了 %%(else) 元素而沒有 %%(then) 元素"
 
-#: ref-filter.c:838
+#: ref-filter.c:843
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "格式:%%(else) 元素用了多次"
 
-#: ref-filter.c:853
+#: ref-filter.c:858
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "格式:使用了 %%(end) 元素卻沒有它的對應元素"
 
-#: ref-filter.c:910
+#: ref-filter.c:915
 #, c-format
 msgid "malformed format string %s"
 msgstr "錯誤的格式化字串 %s"
 
-#: ref-filter.c:1549
+#: ref-filter.c:1556
 #, c-format
-msgid "no branch, rebasing %s"
-msgstr "非分支,正重定基底 %s"
+msgid "(no branch, rebasing %s)"
+msgstr "(無分支,重定 %s 的基底)"
 
-#: ref-filter.c:1552
+#: ref-filter.c:1559
 #, c-format
-msgid "no branch, rebasing detached HEAD %s"
-msgstr "非分支,正重定基底分離開頭指標 %s"
+msgid "(no branch, rebasing detached HEAD %s)"
+msgstr "(無分支,重定 %s 分離開頭指標的基底)"
 
-#: ref-filter.c:1555
+#: ref-filter.c:1562
 #, c-format
-msgid "no branch, bisect started on %s"
-msgstr "非分支,二分尋找開始於 %s"
+msgid "(no branch, bisect started on %s)"
+msgstr "(無分支,二分搜尋從 %s 開始)"
 
-#: ref-filter.c:1565
-msgid "no branch"
-msgstr "非分支"
+#: ref-filter.c:1566
+#, c-format
+msgid "(HEAD detached at %s)"
+msgstr "(開頭指標分離於 %s)"
 
-#: ref-filter.c:1599 ref-filter.c:1808
+#: ref-filter.c:1569
+#, c-format
+msgid "(HEAD detached from %s)"
+msgstr "(開頭指標分離自 %s)"
+
+#: ref-filter.c:1572
+msgid "(no branch)"
+msgstr "(無分支)"
+
+#: ref-filter.c:1604 ref-filter.c:1813
 #, c-format
 msgid "missing object %s for %s"
 msgstr "缺少 %2$s 的物件 %1$s"
 
-#: ref-filter.c:1609
+#: ref-filter.c:1614
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer 失敗於 %2$s 的 %1$s"
 
-#: ref-filter.c:2062
+#: ref-filter.c:1997
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "格式錯誤的物件 '%s'"
 
-#: ref-filter.c:2151
+#: ref-filter.c:2086
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "忽略帶有錯誤名稱 %s 的引用"
 
-#: ref-filter.c:2156 refs.c:676
+#: ref-filter.c:2091 refs.c:676
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "忽略損壞的引用 %s"
 
-#: ref-filter.c:2472
+#: ref-filter.c:2431
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "格式:缺少 %%(end) 元素"
 
-#: ref-filter.c:2571
+#: ref-filter.c:2525
 #, c-format
 msgid "malformed object name %s"
 msgstr "格式錯誤的物件名 %s"
 
-#: ref-filter.c:2576
+#: ref-filter.c:2530
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "選項 `%s' 必須指向一個提交"
@@ -6285,50 +6969,50 @@
 msgid "ignoring dangling symref %s"
 msgstr "忽略懸空符號引用 %s"
 
-#: refs.c:911
+#: refs.c:922
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "引用 %s 的日誌在 %s 之後有缺口"
 
-#: refs.c:917
+#: refs.c:929
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "引用 %s 的日誌意外終止於 %s"
 
-#: refs.c:976
+#: refs.c:994
 #, c-format
 msgid "log for %s is empty"
 msgstr "%s 的日誌為空"
 
-#: refs.c:1068
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "拒絕更新有錯誤名稱 '%s' 的引用"
 
-#: refs.c:1139
+#: refs.c:1157
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "對引用 '%s' 執行 update_ref 失敗:%s"
 
-#: refs.c:1963
+#: refs.c:2051
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "不允許對引用 '%s' 多次更新"
 
-#: refs.c:2043
+#: refs.c:2131
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "在隔離環境中禁止更新引用"
 
-#: refs.c:2054
+#: refs.c:2142
 msgid "ref updates aborted by hook"
 msgstr "引用更新被掛鉤拒絕"
 
-#: refs.c:2154 refs.c:2184
+#: refs.c:2242 refs.c:2272
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' 已存在,無法建立 '%s'"
 
-#: refs.c:2160 refs.c:2195
+#: refs.c:2248 refs.c:2283
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "無法同時處理 '%s' 和 '%s'"
@@ -6392,12 +7076,12 @@
 msgid "value '%s' of pattern has no '*'"
 msgstr "模式的值 '%s' 沒有 '*'"
 
-#: remote.c:1073
+#: remote.c:1083
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "源引用表達式 %s 沒有符合"
 
-#: remote.c:1078
+#: remote.c:1088
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "源引用表達式 %s 符合超過一個"
@@ -6406,7 +7090,7 @@
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1093
+#: remote.c:1103
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6428,7 +7112,7 @@
 "\n"
 "都不行,所以我們已放棄。您必須給出完整的引用。"
 
-#: remote.c:1113
+#: remote.c:1123
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6438,7 +7122,7 @@
 "引用表達式的 <src> 是一個提交物件。您是想建立一個新的分支而向\n"
 "'%s:refs/heads/%s' 推送嗎?"
 
-#: remote.c:1118
+#: remote.c:1128
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6448,7 +7132,7 @@
 "引用表達式的 <src> 是一個標籤物件。您是想建立一個新的標籤而向\n"
 "'%s:refs/tags/%s' 推送嗎?"
 
-#: remote.c:1123
+#: remote.c:1133
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6458,7 +7142,7 @@
 "引用表達式的 <src> 是一個樹狀物件。您是想為這個樹狀物件建立標籤而向\n"
 "'%s:refs/tags/%s' 推送嗎?"
 
-#: remote.c:1128
+#: remote.c:1138
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6468,113 +7152,113 @@
 "引用表達式的 <src> 是一個資料物件。您是想為這個資料物件建立標籤而向\n"
 "'%s:refs/tags/%s' 推送嗎?"
 
-#: remote.c:1164
+#: remote.c:1174
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s 無法被解析為分支"
 
-#: remote.c:1175
+#: remote.c:1185
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "無法刪除 '%s':遠端引用不存在"
 
-#: remote.c:1187
+#: remote.c:1197
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "目標引用表達式 %s 符合超過一個"
 
-#: remote.c:1194
+#: remote.c:1204
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "目標引用 %s 接收超過一個源"
 
-#: remote.c:1714 remote.c:1815
+#: remote.c:1724 remote.c:1825
 msgid "HEAD does not point to a branch"
 msgstr "HEAD 沒有指向一個分支"
 
-#: remote.c:1723
+#: remote.c:1733
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "沒有此分支:'%s'"
 
-#: remote.c:1726
+#: remote.c:1736
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "尚未給分支 '%s' 設定上游"
 
-#: remote.c:1732
+#: remote.c:1742
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "上游分支 '%s' 沒有儲存為一個遠端追蹤分支"
 
-#: remote.c:1747
+#: remote.c:1757
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "推送目標 '%s' 至遠端 '%s' 沒有本機追蹤分支"
 
-#: remote.c:1759
+#: remote.c:1769
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "分支 '%s' 沒有設定要推送的遠端伺服器"
 
-#: remote.c:1769
+#: remote.c:1779
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "向 '%s' 推送引用規格未包含 '%s'"
 
-#: remote.c:1782
+#: remote.c:1792
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "推送無目標(push.default 是 'nothing')"
 
-#: remote.c:1804
+#: remote.c:1814
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "無法解析 'simple' 推送至一個單獨的目標"
 
-#: remote.c:1933
+#: remote.c:1943
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "無法找到遠端引用 %s"
 
-#: remote.c:1946
+#: remote.c:1956
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* 在本機忽略可笑的引用 '%s'"
 
-#: remote.c:2109
+#: remote.c:2119
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "您的分支基於 '%s',但此上游分支已經不存在。\n"
 
-#: remote.c:2113
+#: remote.c:2123
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (使用 \"git branch --unset-upstream\" 來修復)\n"
 
-#: remote.c:2116
+#: remote.c:2126
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "您的分支與上游分支 '%s' 一致。\n"
 
-#: remote.c:2120
+#: remote.c:2130
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "您的分支和 '%s' 指向不同的提交。\n"
 
-#: remote.c:2123
+#: remote.c:2133
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (使用 \"%s\" 檢視詳情)\n"
 
-#: remote.c:2127
+#: remote.c:2137
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "您的分支領先 '%s' 共 %d 個提交。\n"
 
-#: remote.c:2133
+#: remote.c:2143
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (使用 \"git push\" 來發布您的本機提交)\n"
 
-#: remote.c:2136
+#: remote.c:2146
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6582,11 +7266,11 @@
 msgstr[0] "您的分支落後 '%s' 共 %d 個提交,並且可以快轉。\n"
 
 #  譯者:請維持前導空格
-#: remote.c:2144
+#: remote.c:2154
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (使用 \"git pull\" 來更新您的本機分支)\n"
 
-#: remote.c:2147
+#: remote.c:2157
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6599,11 +7283,11 @@
 "並且分別有 %d 和 %d 處不同的提交。\n"
 
 #  譯者:請維持前導空格
-#: remote.c:2157
+#: remote.c:2167
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (使用 \"git pull\" 來合併遠端分支)\n"
 
-#: remote.c:2349
+#: remote.c:2359
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "無法解析期望的物件名 '%s'"
@@ -6623,96 +7307,96 @@
 msgid "replace depth too high for object %s"
 msgstr "物件 %s 的取代層級太深"
 
-#: rerere.c:217 rerere.c:226 rerere.c:229
+#: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
 msgstr "損壞的 MERGE_RR"
 
-#: rerere.c:264 rerere.c:269
+#: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
 msgstr "無法寫入 rerere 記錄"
 
-#: rerere.c:495
+#: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
 msgstr "寫入 '%s' (%s) 時發生錯誤"
 
-#: rerere.c:498
+#: rerere.c:482
 #, c-format
 msgid "failed to flush '%s'"
 msgstr "重新整理 '%s' 失敗"
 
-#: rerere.c:503 rerere.c:1039
+#: rerere.c:487 rerere.c:1023
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
-msgstr "不能解析 '%s' 中的衝突塊"
+msgstr "不能解析 '%s' 中的衝突區塊"
 
-#: rerere.c:684
+#: rerere.c:668
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "在 '%s' 上呼叫 utime() 失敗"
 
-#: rerere.c:694
+#: rerere.c:678
 #, c-format
 msgid "writing '%s' failed"
 msgstr "寫入 '%s' 失敗"
 
-#: rerere.c:714
+#: rerere.c:698
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "使用之前的解決方案暫存 '%s'。"
 
-#: rerere.c:753
+#: rerere.c:737
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "已記錄 '%s' 的解決方案。"
 
-#: rerere.c:788
+#: rerere.c:772
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "使用之前的解決方案解決 '%s'。"
 
-#: rerere.c:803
+#: rerere.c:787
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "不能刪除 stray '%s'"
 
-#: rerere.c:807
+#: rerere.c:791
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "為 '%s' 記錄 preimage"
 
-#: rerere.c:881 submodule.c:2082 builtin/log.c:1992
-#: builtin/submodule--helper.c:1878 builtin/submodule--helper.c:1890
+#: rerere.c:865 submodule.c:2089 builtin/log.c:2000
+#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:1891
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "不能建立目錄 '%s'"
 
-#: rerere.c:1057
+#: rerere.c:1041
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "更新 '%s' 中的衝突狀態失敗"
 
-#: rerere.c:1068 rerere.c:1075
+#: rerere.c:1052 rerere.c:1059
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "沒有為 '%s' 記憶的解決方案"
 
-#: rerere.c:1077
+#: rerere.c:1061
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "不能刪除 '%s'"
 
-#: rerere.c:1087
+#: rerere.c:1071
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "已為 '%s' 更新 preimage"
 
-#: rerere.c:1096
+#: rerere.c:1080
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "忘記 '%s' 的解決方案\n"
 
-#: rerere.c:1199
+#: rerere.c:1191
 msgid "unable to open rr-cache directory"
 msgstr "不能開啟 rr-cache 目錄"
 
@@ -6720,43 +7404,38 @@
 msgid "could not determine HEAD revision"
 msgstr "不能確定 HEAD 版本"
 
-#: reset.c:70 reset.c:76 sequencer.c:3460
+#: reset.c:70 reset.c:76 sequencer.c:3669
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "無法找到 %s 指向的樹"
 
-#: revision.c:2336
+#: revision.c:2343
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<packfile> 已不受支援"
 
-#: revision.c:2356
-#, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "--diff-merges 的值無效:%s"
-
-#: revision.c:2694
+#: revision.c:2683
 msgid "your current branch appears to be broken"
 msgstr "您的目前分支好像被損壞"
 
-#: revision.c:2697
+#: revision.c:2686
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "您的目前分支 '%s' 尚無任何提交"
 
-#: revision.c:2907
+#: revision.c:2892
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L 尚不支援 -p 和 -s 之外的差異格式"
 
-#: run-command.c:764
+#: run-command.c:767
 msgid "open /dev/null failed"
 msgstr "不能開啟 /dev/null"
 
-#: run-command.c:1271
+#: run-command.c:1275
 #, c-format
 msgid "cannot create async thread: %s"
 msgstr "不能建立 async 執行緒:%s"
 
-#: run-command.c:1335
+#: run-command.c:1345
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -6765,79 +7444,87 @@
 "因為沒有將掛鉤 '%s' 設定為可執行,掛鉤被忽略。您可以透過\n"
 "設定 `git config advice.ignoredHook false` 來關閉這條警告。"
 
-#: send-pack.c:146
+#: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
 msgstr "讀取遠端解包狀態時收到意外的 flush 包"
 
-#: send-pack.c:148
+#: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
 msgstr "不能解析遠端解包狀態:%s"
 
-#: send-pack.c:150
+#: send-pack.c:154
 #, c-format
 msgid "remote unpack failed: %s"
 msgstr "遠端解包失敗:%s"
 
-#: send-pack.c:374
+#: send-pack.c:378
 msgid "failed to sign the push certificate"
 msgstr "為推送證書籤名失敗"
 
-#: send-pack.c:467
+#: send-pack.c:433
+msgid "send-pack: unable to fork off fetch subprocess"
+msgstr "send-pack:無法 fork 一個 fetch 子處理程序"
+
+#: send-pack.c:455
+msgid "push negotiation failed; proceeding anyway with push"
+msgstr "push 協商失敗。繼續使用 push 處理"
+
+#: send-pack.c:520
 msgid "the receiving end does not support this repository's hash algorithm"
 msgstr "接收端不支援此版本庫的雜湊算法"
 
-#: send-pack.c:476
+#: send-pack.c:529
 msgid "the receiving end does not support --signed push"
 msgstr "接收端不支援簽名推送"
 
-#: send-pack.c:478
+#: send-pack.c:531
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
 msgstr "未傳送推送證書,因為接收端不支援簽名推送"
 
-#: send-pack.c:490
+#: send-pack.c:543
 msgid "the receiving end does not support --atomic push"
 msgstr "接收端不支援原子推送"
 
-#: send-pack.c:495
+#: send-pack.c:548
 msgid "the receiving end does not support push options"
 msgstr "接收端不支援推送選項"
 
-#: sequencer.c:195
+#: sequencer.c:196
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
-msgstr "無效的提交訊息清理模式 '%s'"
+msgstr "無效的提交說明清理模式 '%s'"
 
-#: sequencer.c:323
+#: sequencer.c:324
 #, c-format
 msgid "could not delete '%s'"
 msgstr "無法刪除 '%s'"
 
-#: sequencer.c:343 builtin/rebase.c:755 builtin/rebase.c:1596 builtin/rm.c:385
+#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
 #, c-format
 msgid "could not remove '%s'"
 msgstr "無法刪除 '%s'"
 
-#: sequencer.c:353
+#: sequencer.c:354
 msgid "revert"
 msgstr "復原"
 
-#: sequencer.c:355
+#: sequencer.c:356
 msgid "cherry-pick"
 msgstr "摘取"
 
-#: sequencer.c:357
+#: sequencer.c:358
 msgid "rebase"
 msgstr "rebase"
 
-#: sequencer.c:359
+#: sequencer.c:360
 #, c-format
 msgid "unknown action: %d"
 msgstr "未知動作:%d"
 
-#: sequencer.c:418
+#: sequencer.c:419
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
@@ -6845,7 +7532,7 @@
 "衝突解決完畢後,用 'git add <路徑>' 或 'git rm <路徑>'\n"
 "指令標記修正後的檔案"
 
-#: sequencer.c:421
+#: sequencer.c:422
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'\n"
@@ -6854,43 +7541,43 @@
 "衝突解決完畢後,用 'git add <路徑>' 或 'git rm <路徑>'\n"
 "對修正後的檔案做標記,然後用 'git commit' 提交"
 
-#: sequencer.c:434 sequencer.c:3062
+#: sequencer.c:435 sequencer.c:3271
 #, c-format
 msgid "could not lock '%s'"
 msgstr "不能鎖定 '%s'"
 
-#: sequencer.c:436 sequencer.c:2861 sequencer.c:3066 sequencer.c:3080
-#: sequencer.c:3337 sequencer.c:5326 strbuf.c:1168 wrapper.c:631
+#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
+#: sequencer.c:3546 sequencer.c:5567 strbuf.c:1170 wrapper.c:631
 #, c-format
 msgid "could not write to '%s'"
 msgstr "不能寫入 '%s'"
 
-#: sequencer.c:441
+#: sequencer.c:442
 #, c-format
 msgid "could not write eol to '%s'"
 msgstr "不能將換行符號寫入 '%s'"
 
-#: sequencer.c:446 sequencer.c:2866 sequencer.c:3068 sequencer.c:3082
-#: sequencer.c:3345
+#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
+#: sequencer.c:3554
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "無法完成 '%s'"
 
-#: sequencer.c:485
+#: sequencer.c:486
 #, c-format
 msgid "your local changes would be overwritten by %s."
 msgstr "您的本機修改將被%s覆蓋。"
 
-#: sequencer.c:489
+#: sequencer.c:490
 msgid "commit your changes or stash them to proceed."
 msgstr "提交您的修改或儲藏後再繼續。"
 
-#: sequencer.c:521
+#: sequencer.c:522
 #, c-format
 msgid "%s: fast-forward"
 msgstr "%s:快轉"
 
-#: sequencer.c:560 builtin/tag.c:566
+#: sequencer.c:561 builtin/tag.c:609
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "無效的清理模式 %s"
@@ -6898,65 +7585,65 @@
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:670
+#: sequencer.c:671
 #, c-format
 msgid "%s: Unable to write new index file"
 msgstr "%s:無法寫入新索引檔案"
 
-#: sequencer.c:687
+#: sequencer.c:685
 msgid "unable to update cache tree"
 msgstr "不能更新快取樹"
 
-#: sequencer.c:701
+#: sequencer.c:699
 msgid "could not resolve HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:781
+#: sequencer.c:779
 #, c-format
 msgid "no key present in '%.*s'"
 msgstr "在 '%.*s' 中沒有 key"
 
-#: sequencer.c:792
+#: sequencer.c:790
 #, c-format
 msgid "unable to dequote value of '%s'"
 msgstr "無法為 '%s' 的值去引號"
 
-#: sequencer.c:829 wrapper.c:201 wrapper.c:371 builtin/am.c:710
-#: builtin/am.c:802 builtin/merge.c:1135 builtin/rebase.c:908
+#: 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
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "無法開啟 '%s' 進行讀取"
 
-#: sequencer.c:839
+#: sequencer.c:837
 msgid "'GIT_AUTHOR_NAME' already given"
 msgstr "已經給出 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:844
+#: sequencer.c:842
 msgid "'GIT_AUTHOR_EMAIL' already given"
 msgstr "已經給出 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:849
+#: sequencer.c:847
 msgid "'GIT_AUTHOR_DATE' already given"
 msgstr "已經給出 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:853
+#: sequencer.c:851
 #, c-format
 msgid "unknown variable '%s'"
 msgstr "未知變數 '%s'"
 
-#: sequencer.c:858
+#: sequencer.c:856
 msgid "missing 'GIT_AUTHOR_NAME'"
 msgstr "缺少 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:860
+#: sequencer.c:858
 msgid "missing 'GIT_AUTHOR_EMAIL'"
 msgstr "缺少 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:862
+#: sequencer.c:860
 msgid "missing 'GIT_AUTHOR_DATE'"
 msgstr "缺少 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:927
+#: sequencer.c:925
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -6985,11 +7672,11 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1208
+#: sequencer.c:1212
 msgid "'prepare-commit-msg' hook failed"
 msgstr "'prepare-commit-msg' 掛鉤失敗"
 
-#: sequencer.c:1214
+#: sequencer.c:1218
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7013,7 +7700,7 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1227
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7036,339 +7723,343 @@
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1269
+#: sequencer.c:1273
 msgid "couldn't look up newly created commit"
 msgstr "無法找到新建立的提交"
 
-#: sequencer.c:1271
+#: sequencer.c:1275
 msgid "could not parse newly created commit"
 msgstr "不能解析新建立的提交"
 
-#: sequencer.c:1317
+#: sequencer.c:1321
 msgid "unable to resolve HEAD after creating commit"
 msgstr "建立提交後,不能解析 HEAD"
 
-#: sequencer.c:1319
+#: sequencer.c:1323
 msgid "detached HEAD"
 msgstr "分離 HEAD"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: sequencer.c:1323
+#: sequencer.c:1327
 msgid " (root-commit)"
 msgstr " (根提交)"
 
-#: sequencer.c:1344
+#: sequencer.c:1348
 msgid "could not parse HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1350
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s 不是一個提交!"
 
-#: sequencer.c:1350 sequencer.c:1425 builtin/commit.c:1577
+#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1692
 msgid "could not parse HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:1403 sequencer.c:2100
+#: sequencer.c:1410 sequencer.c:2295
 msgid "unable to parse commit author"
 msgstr "不能解析提交作者"
 
-#: sequencer.c:1414 builtin/am.c:1566 builtin/merge.c:701
+#: sequencer.c:1421 builtin/am.c:1614 builtin/merge.c:706
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree 無法寫入樹狀物件"
 
-#: sequencer.c:1447 sequencer.c:1565
+#: sequencer.c:1454 sequencer.c:1574
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "不能從 '%s' 讀取提交說明"
 
-#: sequencer.c:1476 sequencer.c:1508
+#: sequencer.c:1485 sequencer.c:1517
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "無效的作者身分 '%s'"
 
-#: sequencer.c:1482
+#: sequencer.c:1491
 msgid "corrupt author: missing date information"
 msgstr "作者資訊損壞:缺少日期資訊"
 
-#: sequencer.c:1521 builtin/am.c:1593 builtin/commit.c:1678 builtin/merge.c:904
-#: builtin/merge.c:929 t/helper/test-fast-rebase.c:78
+#: 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
 msgid "failed to write commit object"
 msgstr "寫提交物件失敗"
 
-#: sequencer.c:1548 sequencer.c:4283 t/helper/test-fast-rebase.c:198
+#: sequencer.c:1557 sequencer.c:4493 t/helper/test-fast-rebase.c:198
 #, c-format
 msgid "could not update %s"
 msgstr "不能更新 %s"
 
-#: sequencer.c:1597
+#: sequencer.c:1606
 #, c-format
 msgid "could not parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: sequencer.c:1602
+#: sequencer.c:1611
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "不能解析父提交 %s"
 
-#: sequencer.c:1685 sequencer.c:1796
+#: sequencer.c:1694 sequencer.c:1975
 #, c-format
 msgid "unknown command: %d"
 msgstr "未知指令:%d"
 
-#: sequencer.c:1743 sequencer.c:1768
-#, c-format
-msgid "This is a combination of %d commits."
-msgstr "這是一個 %d 個提交的組合。"
-
-#: sequencer.c:1753
-msgid "need a HEAD to fixup"
-msgstr "需要一個 HEAD 來修復"
-
-#: sequencer.c:1755 sequencer.c:3372
-msgid "could not read HEAD"
-msgstr "不能讀取 HEAD"
-
-#: sequencer.c:1757
-msgid "could not read HEAD's commit message"
-msgstr "不能讀取 HEAD 的提交說明"
-
-#: sequencer.c:1763
-#, c-format
-msgid "cannot write '%s'"
-msgstr "不能寫 '%s'"
-
-#: sequencer.c:1770 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
 msgid "This is the 1st commit message:"
 msgstr "這是第一個提交說明:"
 
-#: sequencer.c:1778
-#, c-format
-msgid "could not read commit message of %s"
-msgstr "不能讀取 %s 的提交說明"
-
-#: sequencer.c:1785
+#: sequencer.c:1737
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "這是提交說明 #%d:"
 
-#: sequencer.c:1791
+#: sequencer.c:1738
+msgid "The 1st commit message will be skipped:"
+msgstr "略過第 1 個提交說明:"
+
+#: sequencer.c:1739
 #, c-format
 msgid "The commit message #%d will be skipped:"
-msgstr "提交說明 #%d 將被跳過:"
+msgstr "略過第 %d 個提交說明:"
 
-#: sequencer.c:1879
+#: sequencer.c:1740
+#, c-format
+msgid "This is a combination of %d commits."
+msgstr "這是整合 %d 個提交的集合提交。"
+
+#: sequencer.c:1887 sequencer.c:1944
+#, c-format
+msgid "cannot write '%s'"
+msgstr "不能寫 '%s'"
+
+#: sequencer.c:1934
+msgid "need a HEAD to fixup"
+msgstr "需要一個 HEAD 來修復"
+
+#: sequencer.c:1936 sequencer.c:3581
+msgid "could not read HEAD"
+msgstr "不能讀取 HEAD"
+
+#: sequencer.c:1938
+msgid "could not read HEAD's commit message"
+msgstr "不能讀取 HEAD 的提交說明"
+
+#: sequencer.c:1962
+#, c-format
+msgid "could not read commit message of %s"
+msgstr "不能讀取 %s 的提交說明"
+
+#: sequencer.c:2072
 msgid "your index file is unmerged."
 msgstr "您的索引檔案未完成合併。"
 
-#: sequencer.c:1886
+#: sequencer.c:2079
 msgid "cannot fixup root commit"
 msgstr "不能修復根提交"
 
-#: sequencer.c:1905
+#: sequencer.c:2098
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "提交 %s 是一個合併提交但未提供 -m 選項。"
 
-#: sequencer.c:1913 sequencer.c:1921
+#: sequencer.c:2106 sequencer.c:2114
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "提交 %s 沒有第 %d 個父提交"
 
-#: sequencer.c:1927
+#: sequencer.c:2120
 #, 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:1946
+#: sequencer.c:2139
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s:不能解析父提交 %s"
 
-#: sequencer.c:2011
+#: sequencer.c:2205
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "不能將 '%s' 重新命名為 '%s'"
 
-#: sequencer.c:2071
+#: sequencer.c:2265
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "不能還原 %s... %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2266
 #, c-format
 msgid "could not apply %s... %s"
-msgstr "不能應用 %s... %s"
+msgstr "不能套用 %s... %s"
 
-#: sequencer.c:2092
+#: sequencer.c:2287
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "拋棄 %s %s -- 修補檔的內容已在上游\n"
 
-#: sequencer.c:2150
+#: sequencer.c:2345
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s:無法讀取索引"
 
-#: sequencer.c:2157
+#: sequencer.c:2352
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s:無法重新整理索引"
 
-#: sequencer.c:2234
+#: sequencer.c:2425
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s 不接受參數:'%s'"
 
-#: sequencer.c:2243
+#: sequencer.c:2434
 #, c-format
 msgid "missing arguments for %s"
 msgstr "缺少 %s 的參數"
 
-#: sequencer.c:2274
+#: sequencer.c:2477
 #, c-format
 msgid "could not parse '%s'"
 msgstr "無法解析 '%s'"
 
-#: sequencer.c:2335
+#: sequencer.c:2538
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "無效行 %d:%.*s"
 
-#: sequencer.c:2346
+#: sequencer.c:2549
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "沒有父提交的情況下不能 '%s'"
 
-#: sequencer.c:2432
+#: sequencer.c:2635
 msgid "cancelling a cherry picking in progress"
 msgstr "正在取消一個進行中的揀選"
 
-#: sequencer.c:2441
+#: sequencer.c:2644
 msgid "cancelling a revert in progress"
 msgstr "正在取消一個進行中的還原"
 
-#: sequencer.c:2485
+#: sequencer.c:2690
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "請用 'git rebase --edit-todo' 來修改。"
 
-#: sequencer.c:2487
+#: sequencer.c:2692
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "不可用的指令清單:'%s'"
 
-#: sequencer.c:2492
+#: sequencer.c:2697
 msgid "no commits parsed."
 msgstr "沒有解析提交。"
 
-#: sequencer.c:2503
+#: sequencer.c:2708
 msgid "cannot cherry-pick during a revert."
 msgstr "不能在還原提交中執行揀選。"
 
-#: sequencer.c:2505
+#: sequencer.c:2710
 msgid "cannot revert during a cherry-pick."
 msgstr "不能在揀選中執行還原提交。"
 
-#: sequencer.c:2583
+#: sequencer.c:2788
 #, c-format
 msgid "invalid value for %s: %s"
 msgstr "%s 的值無效:%s"
 
-#: sequencer.c:2690
+#: sequencer.c:2897
 msgid "unusable squash-onto"
 msgstr "不可用的 squash-onto"
 
-#: sequencer.c:2710
+#: sequencer.c:2917
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "格式錯誤的選項清單:'%s'"
 
-#: sequencer.c:2803 sequencer.c:4636
+#: sequencer.c:3012 sequencer.c:4869
 msgid "empty commit set passed"
 msgstr "提供了空的提交集"
 
-#: sequencer.c:2820
+#: sequencer.c:3029
 msgid "revert is already in progress"
 msgstr "一個還原動作已在進行"
 
-#: sequencer.c:2822
+#: sequencer.c:3031
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "嘗試 \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2825
+#: sequencer.c:3034
 msgid "cherry-pick is already in progress"
 msgstr "揀選動作已在進行"
 
-#: sequencer.c:2827
+#: sequencer.c:3036
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "嘗試 \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:2841
+#: sequencer.c:3050
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "不能建立序列目錄 '%s'"
 
-#: sequencer.c:2856
+#: sequencer.c:3065
 msgid "could not lock HEAD"
 msgstr "不能鎖定 HEAD"
 
-#: sequencer.c:2916 sequencer.c:4371
+#: sequencer.c:3125 sequencer.c:4582
 msgid "no cherry-pick or revert in progress"
 msgstr "揀選或還原動作並未進行"
 
-#: sequencer.c:2918 sequencer.c:2929
+#: sequencer.c:3127 sequencer.c:3138
 msgid "cannot resolve HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:2920 sequencer.c:2964
+#: sequencer.c:3129 sequencer.c:3173
 msgid "cannot abort from a branch yet to be born"
 msgstr "不能從尚未建立的分支終止"
 
-#: sequencer.c:2950 builtin/grep.c:756
+#: sequencer.c:3159 builtin/grep.c:759
 #, c-format
 msgid "cannot open '%s'"
 msgstr "不能開啟 '%s'"
 
-#: sequencer.c:2952
+#: sequencer.c:3161
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "不能讀取 '%s':%s"
 
-#: sequencer.c:2953
+#: sequencer.c:3162
 msgid "unexpected end of file"
 msgstr "意外的檔案結束"
 
-#: sequencer.c:2959
+#: sequencer.c:3168
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "儲存揀選提交前的 HEAD 檔案 '%s' 損壞"
 
-#: sequencer.c:2970
+#: sequencer.c:3179
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "您好像移動了 HEAD。未能還原,檢查您的 HEAD!"
 
-#: sequencer.c:3011
+#: sequencer.c:3220
 msgid "no revert in progress"
 msgstr "沒有正在進行的還原"
 
-#: sequencer.c:3020
+#: sequencer.c:3229
 msgid "no cherry-pick in progress"
 msgstr "沒有正在進行的揀選"
 
-#: sequencer.c:3030
+#: sequencer.c:3239
 msgid "failed to skip the commit"
-msgstr "無法跳過這個提交"
+msgstr "無法略過這個提交"
 
-#: sequencer.c:3037
+#: sequencer.c:3246
 msgid "there is nothing to skip"
-msgstr "沒有要跳過的"
+msgstr "沒有要略過的"
 
-#: sequencer.c:3040
+#: sequencer.c:3249
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7377,16 +8068,16 @@
 "您已經提交了嗎?\n"
 "試試 \"git %s --continue\""
 
-#: sequencer.c:3202 sequencer.c:4263
+#: sequencer.c:3411 sequencer.c:4473
 msgid "cannot read HEAD"
 msgstr "不能讀取 HEAD"
 
-#: sequencer.c:3219
+#: sequencer.c:3428
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "無法複製 '%s' 至 '%s'"
 
-#: sequencer.c:3227
+#: sequencer.c:3436
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7405,28 +8096,28 @@
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3237
+#: sequencer.c:3446
 #, c-format
 msgid "Could not apply %s... %.*s"
-msgstr "不能應用 %s... %.*s"
+msgstr "不能套用 %s... %.*s"
 
-#: sequencer.c:3244
+#: sequencer.c:3453
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "不能合併 %.*s"
 
-#: sequencer.c:3258 sequencer.c:3262 builtin/difftool.c:640
+#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "不能複製 '%s' 至 '%s'"
 
-#: sequencer.c:3274
+#: sequencer.c:3483
 #, c-format
 msgid "Executing: %s\n"
 msgstr "執行:%s\n"
 
 #  譯者:請維持前導空格
-#: sequencer.c:3289
+#: sequencer.c:3498
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7441,11 +8132,11 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3295
+#: sequencer.c:3504
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "並且修改索引和/或工作區\n"
 
-#: sequencer.c:3301
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7462,90 +8153,90 @@
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3362
+#: sequencer.c:3571
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "非法的標籤名稱:'%.*s'"
 
-#: sequencer.c:3416
+#: sequencer.c:3625
 msgid "writing fake root commit"
 msgstr "寫偽根提交"
 
-#: sequencer.c:3421
+#: sequencer.c:3630
 msgid "writing squash-onto"
 msgstr "寫入 squash-onto"
 
-#: sequencer.c:3505
+#: sequencer.c:3714
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "無法解析 '%s'"
 
-#: sequencer.c:3538
+#: sequencer.c:3747
 msgid "cannot merge without a current revision"
 msgstr "沒有目前版本不能合併"
 
-#: sequencer.c:3560
+#: sequencer.c:3769
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "無法解析 '%.*s'"
 
-#: sequencer.c:3569
+#: sequencer.c:3778
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "無可用合併:'%.*s'"
 
-#: sequencer.c:3581
+#: sequencer.c:3790
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "章魚合並不能在一個新的根提交上執行"
 
-#: sequencer.c:3597
+#: sequencer.c:3806
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "不能取得 '%s' 的提交說明"
 
-#: sequencer.c:3780
+#: sequencer.c:3989
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "甚至不能嘗試合併 '%.*s'"
 
-#: sequencer.c:3796
+#: sequencer.c:4005
 msgid "merge: Unable to write new index file"
 msgstr "合併:無法寫入新索引檔案"
 
-#: sequencer.c:3870
+#: sequencer.c:4079
 msgid "Cannot autostash"
 msgstr "無法 autostash"
 
-#: sequencer.c:3873
+#: sequencer.c:4082
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "意外的 stash 回應:'%s'"
 
-#: sequencer.c:3879
+#: sequencer.c:4088
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "不能為 '%s' 建立目錄"
 
-#: sequencer.c:3882
+#: sequencer.c:4091
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "建立了 autostash:%s\n"
 
-#: sequencer.c:3886
+#: sequencer.c:4095
 msgid "could not reset --hard"
 msgstr "無法 reset --hard"
 
-#: sequencer.c:3911
+#: sequencer.c:4120
 #, c-format
 msgid "Applied autostash.\n"
-msgstr "已應用 autostash。\n"
+msgstr "已套用 autostash。\n"
 
-#: sequencer.c:3923
+#: sequencer.c:4132
 #, c-format
 msgid "cannot store %s"
 msgstr "不能儲存 %s"
 
-#: sequencer.c:3926
+#: sequencer.c:4135
 #, c-format
 msgid ""
 "%s\n"
@@ -7556,29 +8247,29 @@
 "您的修改安全地儲存在儲藏區中。\n"
 "您可以在任何時候執行 \"git stash pop\" 或 \"git stash drop\"。\n"
 
-#: sequencer.c:3931
+#: sequencer.c:4140
 msgid "Applying autostash resulted in conflicts."
 msgstr "因套用自動儲藏而導致衝突。"
 
-#: sequencer.c:3932
+#: sequencer.c:4141
 msgid "Autostash exists; creating a new stash entry."
 msgstr "已有自動儲藏;建立新儲藏項目。"
 
-#: sequencer.c:4025 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4234 git-rebase--preserve-merges.sh:769
 msgid "could not detach HEAD"
 msgstr "不能分離開頭指標"
 
-#: sequencer.c:4040
+#: sequencer.c:4249
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "停止在 HEAD\n"
 
-#: sequencer.c:4042
+#: sequencer.c:4251
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "停止在 %s\n"
 
-#: sequencer.c:4050
+#: sequencer.c:4259
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7598,58 +8289,58 @@
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4096
+#: sequencer.c:4305
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "正在重定基底 (%d/%d)%s"
 
-#: sequencer.c:4141
+#: sequencer.c:4351
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "停止在 %s... %.*s\n"
 
-#: sequencer.c:4212
+#: sequencer.c:4422
 #, c-format
 msgid "unknown command %d"
 msgstr "未知指令 %d"
 
-#: sequencer.c:4271
+#: sequencer.c:4481
 msgid "could not read orig-head"
 msgstr "不能讀取 orig-head"
 
-#: sequencer.c:4276
+#: sequencer.c:4486
 msgid "could not read 'onto'"
 msgstr "不能讀取 'onto'"
 
-#: sequencer.c:4290
+#: sequencer.c:4500
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "不能更新 HEAD 為 %s"
 
-#: sequencer.c:4350
+#: sequencer.c:4560
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "成功重定基底並更新 %s。\n"
 
-#: sequencer.c:4383
+#: sequencer.c:4612
 msgid "cannot rebase: You have unstaged changes."
 msgstr "不能重定基底:您有未暫存的變更。"
 
-#: sequencer.c:4392
+#: sequencer.c:4621
 msgid "cannot amend non-existing commit"
 msgstr "不能修補不存在的提交"
 
-#: sequencer.c:4394
+#: sequencer.c:4623
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "無效檔案:'%s'"
 
-#: sequencer.c:4396
+#: sequencer.c:4625
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "無效內容:'%s'"
 
-#: sequencer.c:4399
+#: sequencer.c:4628
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -7658,50 +8349,50 @@
 "\n"
 "您的工作區中有未提交的變更。請先提交然後再次執行 'git rebase --continue'。"
 
-#: sequencer.c:4435 sequencer.c:4474
+#: sequencer.c:4664 sequencer.c:4703
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "不能寫入檔案:'%s'"
 
-#: sequencer.c:4490
+#: sequencer.c:4719
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "不能刪除 CHERRY_PICK_HEAD"
 
-#: sequencer.c:4497
+#: sequencer.c:4726
 msgid "could not commit staged changes."
 msgstr "不能提交暫存的修改。"
 
-#: sequencer.c:4613
+#: sequencer.c:4846
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s:不能揀選一個%s"
 
-#: sequencer.c:4617
+#: sequencer.c:4850
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s:錯誤的版本"
 
-#: sequencer.c:4652
+#: sequencer.c:4885
 msgid "can't revert as initial commit"
 msgstr "不能作為初始提交還原提交"
 
-#: sequencer.c:5129
+#: sequencer.c:5362
 msgid "make_script: unhandled options"
 msgstr "make_script:有未能處理的選項"
 
-#: sequencer.c:5132
+#: sequencer.c:5365
 msgid "make_script: error preparing revisions"
 msgstr "make_script:準備版本時錯誤"
 
-#: sequencer.c:5374 sequencer.c:5391
+#: sequencer.c:5615 sequencer.c:5632
 msgid "nothing to do"
 msgstr "無事可做"
 
-#: sequencer.c:5410
+#: sequencer.c:5651
 msgid "could not skip unnecessary pick commands"
-msgstr "無法跳過不必要的揀選"
+msgstr "無法略過不必要的揀選"
 
-#: sequencer.c:5504
+#: sequencer.c:5751
 msgid "the script was already rearranged."
 msgstr "腳本已經重新編排。"
 
@@ -7717,7 +8408,7 @@
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
 "%s:工作區中無此路徑。\n"
-"使用指令 'git <指令> -- <路徑>...' 來指定本機不存在的路徑。"
+"使用指令 'git <命令> -- <路徑>...' 來指定本機不存在的路徑。"
 
 #: setup.c:198
 #, c-format
@@ -7728,7 +8419,7 @@
 msgstr ""
 "有歧義的參數 '%s':未知的版本或路徑不存在於工作區中。\n"
 "使用 '--' 來分隔版本和路徑,例如:\n"
-"'git <指令> [<版本>...] -- [<檔案>...]'"
+"'git <命令> [<版本>...] -- [<檔案>...]'"
 
 #: setup.c:264
 #, c-format
@@ -7744,7 +8435,7 @@
 msgstr ""
 "有歧義的參數 '%s':可同時是版本和檔案\n"
 "使用 '--' 來分隔版本和路徑,例如:\n"
-"'git <指令> [<版本>...] -- [<檔案>...]'"
+"'git <命令> [<版本>...] -- [<檔案>...]'"
 
 #: setup.c:419
 msgid "unable to set up work tree using invalid config"
@@ -7844,7 +8535,7 @@
 "不是一個 git 版本庫(或者直至掛載點 %s 的任何父目錄)\n"
 "停止在檔案系統邊界(未設定 GIT_DISCOVERY_ACROSS_FILESYSTEM)。"
 
-#: setup.c:1362
+#: setup.c:1370
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -7853,426 +8544,89 @@
 "參數 core.sharedRepository 的檔案屬性值有問題(0%.3o)。\n"
 "檔案所有者必須始終擁有讀寫權限。"
 
-#: setup.c:1409
+#: setup.c:1417
 msgid "open /dev/null or dup failed"
 msgstr "不能開啟或者複製 /dev/null"
 
-#: setup.c:1424
+#: setup.c:1432
 msgid "fork failed"
 msgstr "fork 失敗"
 
-#: setup.c:1429
+#: setup.c:1437 t/helper/test-simple-ipc.c:285
 msgid "setsid failed"
 msgstr "setsid 失敗"
 
-#: sha1-file.c:480
+#: sparse-index.c:151
+msgid "attempting to use sparse-index without cone mode"
+msgstr "嘗試不在 cone 模式使用稀疏索引"
+
+#: sparse-index.c:156
+#, fuzzy
+msgid "unable to update cache-tree, staying full"
+msgstr "無法更新快取樹:保持用完狀態"
+
+#: sparse-index.c:239
 #, c-format
-msgid "object directory %s does not exist; check .git/objects/info/alternates"
-msgstr "物件目錄 %s 不存在,檢查 .git/objects/info/alternates"
-
-#: sha1-file.c:531
-#, c-format
-msgid "unable to normalize alternate object path: %s"
-msgstr "無法規範化備用物件路徑:%s"
-
-#: sha1-file.c:603
-#, c-format
-msgid "%s: ignoring alternate object stores, nesting too deep"
-msgstr "%s:忽略備用物件庫,嵌套太深"
-
-#: sha1-file.c:610
-#, c-format
-msgid "unable to normalize object directory: %s"
-msgstr "無法規範化物件目錄: %s"
-
-#: sha1-file.c:653
-msgid "unable to fdopen alternates lockfile"
-msgstr "無法 fdopen 取代鎖檔案"
-
-#: sha1-file.c:671
-msgid "unable to read alternates file"
-msgstr "無法讀取替代檔案"
-
-#: sha1-file.c:678
-msgid "unable to move new alternates file into place"
-msgstr "無法將新的替代檔案移動到位"
-
-#: sha1-file.c:713
-#, c-format
-msgid "path '%s' does not exist"
-msgstr "路徑 '%s' 不存在"
-
-#: sha1-file.c:734
-#, c-format
-msgid "reference repository '%s' as a linked checkout is not supported yet."
-msgstr "尚不支援將參考版本庫 '%s' 作為一個連結檢出。"
-
-#: sha1-file.c:740
-#, c-format
-msgid "reference repository '%s' is not a local repository."
-msgstr "參考版本庫 '%s' 不是一個本機版本庫。"
-
-#: sha1-file.c:746
-#, c-format
-msgid "reference repository '%s' is shallow"
-msgstr "參考版本庫 '%s' 是一個淺複製"
-
-#: sha1-file.c:754
-#, c-format
-msgid "reference repository '%s' is grafted"
-msgstr "參考版本庫 '%s' 已被移植"
-
-#: sha1-file.c:814
-#, c-format
-msgid "invalid line while parsing alternate refs: %s"
-msgstr "解析備用引用時無效的行:%s"
-
-#: sha1-file.c:964
-#, c-format
-msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
-msgstr "嘗試 mmap %<PRIuMAX>,超過了最大值 %<PRIuMAX>"
-
-#: sha1-file.c:985
-msgid "mmap failed"
-msgstr "mmap 失敗"
-
-#: sha1-file.c:1149
-#, c-format
-msgid "object file %s is empty"
-msgstr "物件檔案 %s 為空"
-
-#: sha1-file.c:1284 sha1-file.c:2477
-#, c-format
-msgid "corrupt loose object '%s'"
-msgstr "損壞的鬆散物件 '%s'"
-
-#: sha1-file.c:1286 sha1-file.c:2481
-#, c-format
-msgid "garbage at end of loose object '%s'"
-msgstr "鬆散物件 '%s' 後面有垃圾資料"
-
-#: sha1-file.c:1328
-msgid "invalid object type"
-msgstr "無效的物件類型"
-
-#: sha1-file.c:1412
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr "無法用 --allow-unknown-type 參數解開 %s 標頭訊息"
-
-#: sha1-file.c:1415
-#, c-format
-msgid "unable to unpack %s header"
-msgstr "無法解開 %s 頭部"
-
-#: sha1-file.c:1421
-#, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
-msgstr "無法用 --allow-unknown-type 參數解析 %s 標頭訊息"
-
-#: sha1-file.c:1424
-#, c-format
-msgid "unable to parse %s header"
-msgstr "無法解析 %s 頭部"
-
-#: sha1-file.c:1651
-#, c-format
-msgid "failed to read object %s"
-msgstr "讀取物件 %s 失敗"
-
-#: sha1-file.c:1655
-#, c-format
-msgid "replacement %s not found for %s"
-msgstr "找不到 %2$s 的替代 %1$s"
-
-#: sha1-file.c:1659
-#, c-format
-msgid "loose object %s (stored in %s) is corrupt"
-msgstr "鬆散物件 %s(儲存在 %s)已損壞"
-
-#: sha1-file.c:1663
-#, c-format
-msgid "packed object %s (stored in %s) is corrupt"
-msgstr "打包物件 %s(儲存在 %s)已損壞"
-
-#: sha1-file.c:1768
-#, c-format
-msgid "unable to write file %s"
-msgstr "無法寫檔案 %s"
-
-#: sha1-file.c:1775
-#, c-format
-msgid "unable to set permission to '%s'"
-msgstr "無法為 '%s' 設定權限"
-
-#: sha1-file.c:1782
-msgid "file write error"
-msgstr "檔案寫錯誤"
-
-#: sha1-file.c:1802
-msgid "error when closing loose object file"
-msgstr "關閉鬆散物件檔案時發生錯誤"
-
-#: sha1-file.c:1867
-#, c-format
-msgid "insufficient permission for adding an object to repository database %s"
-msgstr "權限不足,無法在版本庫物件庫 %s 中新增物件"
-
-#: sha1-file.c:1869
-msgid "unable to create temporary file"
-msgstr "無法建立暫存檔"
-
-#: sha1-file.c:1893
-msgid "unable to write loose object file"
-msgstr "不能寫鬆散物件檔案"
-
-#: sha1-file.c:1899
-#, c-format
-msgid "unable to deflate new object %s (%d)"
-msgstr "不能壓縮新物件 %s(%d)"
-
-#: sha1-file.c:1903
-#, c-format
-msgid "deflateEnd on object %s failed (%d)"
-msgstr "在物件 %s 上呼叫 deflateEnd 失敗(%d)"
-
-#: sha1-file.c:1907
-#, c-format
-msgid "confused by unstable object source data for %s"
-msgstr "被 %s 的不穩定物件源資料搞糊塗了"
-
-#: sha1-file.c:1917 builtin/pack-objects.c:1086
-#, c-format
-msgid "failed utime() on %s"
-msgstr "在 %s 上呼叫 utime() 失敗"
-
-#: sha1-file.c:1994
-#, c-format
-msgid "cannot read object for %s"
-msgstr "不能讀取物件 %s"
-
-#: sha1-file.c:2045
-msgid "corrupt commit"
-msgstr "損壞的提交"
-
-#: sha1-file.c:2053
-msgid "corrupt tag"
-msgstr "損壞的標籤"
-
-#: sha1-file.c:2153
-#, c-format
-msgid "read error while indexing %s"
-msgstr "索引 %s 時讀取錯誤"
-
-#: sha1-file.c:2156
-#, c-format
-msgid "short read while indexing %s"
-msgstr "索引 %s 時讀入不完整"
-
-#: sha1-file.c:2229 sha1-file.c:2239
-#, c-format
-msgid "%s: failed to insert into database"
-msgstr "%s:插入資料庫失敗"
-
-#: sha1-file.c:2245
-#, c-format
-msgid "%s: unsupported file type"
-msgstr "%s:不支援的檔案類型"
-
-#: sha1-file.c:2269
-#, c-format
-msgid "%s is not a valid object"
-msgstr "%s 不是一個有效的物件"
-
-#: sha1-file.c:2271
-#, c-format
-msgid "%s is not a valid '%s' object"
-msgstr "%s 不是一個有效的 '%s' 物件"
-
-#: sha1-file.c:2298 builtin/index-pack.c:192
-#, c-format
-msgid "unable to open %s"
-msgstr "不能開啟 %s"
-
-#: sha1-file.c:2488 sha1-file.c:2541
-#, c-format
-msgid "hash mismatch for %s (expected %s)"
-msgstr "%s 的雜湊值不符合(預期 %s)"
-
-#: sha1-file.c:2512
-#, c-format
-msgid "unable to mmap %s"
-msgstr "不能 mmap %s"
-
-#: sha1-file.c:2517
-#, c-format
-msgid "unable to unpack header of %s"
-msgstr "無法解壓縮 %s 的頭部"
-
-#: sha1-file.c:2523
-#, c-format
-msgid "unable to parse header of %s"
-msgstr "無法解析 %s 的頭部"
-
-#: sha1-file.c:2534
-#, c-format
-msgid "unable to unpack contents of %s"
-msgstr "無法解壓縮 %s 的內容"
-
-#: sha1-name.c:486
-#, c-format
-msgid "short SHA1 %s is ambiguous"
-msgstr "短 SHA1 %s 存在歧義"
-
-#: sha1-name.c:497
-msgid "The candidates are:"
-msgstr "候選者有:"
-
-#: sha1-name.c:796
-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"
-"may be created by mistake. For example,\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n"
-"examine these refs and maybe delete them. Turn this message off by\n"
-"running \"git config advice.objectNameWarning false\""
-msgstr ""
-"Git 通常不會建立以 40 個十六進位字元結尾的引用,\n"
-"因為當您只提供 40 個十六進位字元時,其將被忽略。\n"
-"這些引用可能被意外建立。例如:\n"
-"\n"
-"  git switch -c $br $(git rev-parse ...)\n"
-"\n"
-"當「$br」因為某些原因空白時,會建立出 40 位十六進位的引用。\n"
-"請檢查這些引用,並視需要刪除。執行\n"
-"「git config advice.objectNameWarning false」命令以關閉本訊息通知"
-
-#: sha1-name.c:916
-#, c-format
-msgid "log for '%.*s' only goes back to %s"
-msgstr "'%.*s' 的日誌只能回到 %s"
-
-#: sha1-name.c:924
-#, c-format
-msgid "log for '%.*s' only has %d entries"
-msgstr "'%.*s' 的日誌只有 %d 個項目"
-
-#: sha1-name.c:1702
-#, c-format
-msgid "path '%s' exists on disk, but not in '%.*s'"
-msgstr "磁碟上存在 '%s' 路徑,但不存在於 '%.*s'"
-
-#: sha1-name.c:1708
-#, c-format
-msgid ""
-"path '%s' exists, but not '%s'\n"
-"hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
-msgstr ""
-"'%s' 路徑存在,但不是 '%s'\n"
-"提示:你在說 '%.*s:%s',即 '%.*s:./%s' 嗎?"
-
-#: sha1-name.c:1717
-#, c-format
-msgid "path '%s' does not exist in '%.*s'"
-msgstr "'%s' 路徑不存在於 '%.*s'"
-
-#: sha1-name.c:1745
-#, c-format
-msgid ""
-"path '%s' is in the index, but not at stage %d\n"
-"hint: Did you mean ':%d:%s'?"
-msgstr ""
-"'%s' 路徑在索引,但不在 %d 暫存區\n"
-"提示:你在說 ':%d:%s' 嗎?"
-
-#: sha1-name.c:1761
-#, c-format
-msgid ""
-"path '%s' is in the index, but not '%s'\n"
-"hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
-msgstr ""
-"'%s' 路徑在索引,但不是 '%s'\n"
-"提示:你在說 ':%d:%s',即 ':%d:%s' 嗎?"
-
-#: sha1-name.c:1769
-#, c-format
-msgid "path '%s' exists on disk, but not in the index"
-msgstr "磁碟上存在 '%s' 路徑,但不在索引中"
-
-#: sha1-name.c:1771
-#, c-format
-msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "'%s' 路徑不存在 (既不存在磁碟,也不存在索引)"
-
-#: sha1-name.c:1784
-msgid "relative path syntax can't be used outside working tree"
-msgstr "相對路徑與法不能用在工作區外"
-
-#: sha1-name.c:1922
-#, c-format
-msgid "invalid object name '%.*s'."
-msgstr "'%.*s' 物件名稱無效。"
+msgid "index entry is a directory, but not sparse (%08x)"
+msgstr "索引項目是資料夾,但不是稀疏資料夾(%08x)"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:848
+#: strbuf.c:850
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:850
+#: strbuf.c:852
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:858
+#: strbuf.c:860
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:860
+#: strbuf.c:862
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:867
+#: strbuf.c:869
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:869
+#: strbuf.c:871
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:875
+#: strbuf.c:877
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
 msgstr[0] "%u 位元組"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:877
+#: strbuf.c:879
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u 位元組/秒"
 
-#: strbuf.c:1166 wrapper.c:199 wrapper.c:369 builtin/am.c:719
-#: builtin/rebase.c:864
+#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:737
+#: builtin/rebase.c:866
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "無法開啟 '%s' 進行寫入"
 
-#: strbuf.c:1175
+#: strbuf.c:1177
 #, c-format
 msgid "could not edit '%s'"
 msgstr "無法編輯 '%s'"
@@ -8319,70 +8673,70 @@
 msgid "staging updated .gitmodules failed"
 msgstr "將更新後 .gitmodules 新增暫存區失敗"
 
-#: submodule.c:327
+#: submodule.c:328
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "位於未檢出的子模組 '%s'"
 
-#: submodule.c:358
+#: submodule.c:359
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "路徑規格 '%s' 在子模組 '%.*s' 中"
 
-#: submodule.c:434
+#: submodule.c:436
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "無效 --ignore-submodules 參數:%s"
 
-#: submodule.c:816
+#: submodule.c:818
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
-msgstr "%s 提交位於路徑:'%s' 的子模組與同名的子模組衝突。跳過。"
+msgstr "%s 提交位於路徑:'%s' 的子模組與同名的子模組衝突。略過。"
 
-#: submodule.c:919
+#: submodule.c:921
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "子模組條目 '%s'(%s)是一個 %s,不是一個提交"
 
-#: submodule.c:1004
+#: submodule.c:1006
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr "無法在 %s 子模組執行 'git rev-list <提交> --not --remotes -n 1' 命令"
 
-#: submodule.c:1127
+#: submodule.c:1129
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "處理 '%s' 子模組失敗"
 
-#: submodule.c:1156 builtin/branch.c:680 builtin/submodule--helper.c:2469
+#: submodule.c:1158 builtin/branch.c:691 builtin/submodule--helper.c:2470
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "無法將 HEAD 解析為有效引用。"
 
-#: submodule.c:1167
+#: submodule.c:1169
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "正在推送 '%s' 子模組\n"
 
-#: submodule.c:1170
+#: submodule.c:1172
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "無法推送 '%s' 子模組\n"
 
-#: submodule.c:1462
+#: submodule.c:1464
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "正在抓取 %s%s 子模組\n"
 
-#: submodule.c:1492
+#: submodule.c:1498
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "無法存取子模組 '%s'\n"
 
-#: submodule.c:1646
+#: submodule.c:1653
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8391,77 +8745,77 @@
 "抓取子模組時發生錯誤:\n"
 "%s"
 
-#: submodule.c:1671
+#: submodule.c:1678
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "無法將 '%s' 識別為一個 git 版本庫"
 
-#: submodule.c:1688
+#: submodule.c:1695
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "無法在 %s 子模組執行 'git status --porcelain=2'"
 
-#: submodule.c:1729
+#: submodule.c:1736
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "%s 子模組執行 'git status --porcelain=2' 失敗"
 
-#: submodule.c:1804
+#: submodule.c:1811
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "無法在子模組 '%s' 中啟動 'git status'"
 
-#: submodule.c:1817
+#: submodule.c:1824
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "無法在子模組 '%s' 中執行 'git status'"
 
-#: submodule.c:1832
+#: submodule.c:1839
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "無法在子模組 '%s' 中取消 core.worktree 的設定"
 
-#: submodule.c:1859 submodule.c:2169
+#: submodule.c:1866 submodule.c:2176
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "無法遞迴子模組路徑 '%s'"
 
-#: submodule.c:1880
+#: submodule.c:1887
 msgid "could not reset submodule index"
 msgstr "無法重設子模組的索引"
 
-#: submodule.c:1922
+#: submodule.c:1929
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "子模組 '%s' 中有髒索引"
 
-#: submodule.c:1974
+#: submodule.c:1981
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "子模組 '%s' 無法被更新。"
 
-#: submodule.c:2042
+#: submodule.c:2049
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "「%s」子模組 git 目錄在「%.*s」git 路徑中"
 
-#: submodule.c:2063
+#: submodule.c:2070
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr "不支援對有多個工作區的子模組 '%s' 執行 relocate_gitdir"
 
-#: submodule.c:2075 submodule.c:2134
+#: submodule.c:2082 submodule.c:2141
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "不能查詢子模組 '%s' 的名稱"
 
-#: submodule.c:2079
+#: submodule.c:2086
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "拒絕移動「%s」至現存 git 目錄"
 
-#: submodule.c:2086
+#: submodule.c:2093
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8472,65 +8826,71 @@
 "'%s' 遷移至\n"
 "'%s'\n"
 
-#: submodule.c:2214
+#: submodule.c:2221
 msgid "could not start ls-files in .."
 msgstr "無法在 .. 中啟動 ls-files"
 
-#: submodule.c:2254
+#: submodule.c:2261
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree 返回未知返回值 %d"
 
-#: trailer.c:236
+#: symlinks.c:244
+#, c-format
+msgid "failed to lstat '%s'"
+msgstr "無法 lstat “%s”"
+
+#: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
 msgstr "執行 trailer 指令 '%s' 失敗"
 
-#: trailer.c:483 trailer.c:488 trailer.c:493 trailer.c:547 trailer.c:551
-#: trailer.c:555
+#: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
+#: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
 msgstr "鍵 '%2$s' 的未知取值 '%1$s'"
 
-#: trailer.c:537 trailer.c:542 builtin/remote.c:299 builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
+#: builtin/remote.c:324
 #, c-format
 msgid "more than one %s"
 msgstr "多於一個 %s"
 
-#: trailer.c:728
+#: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
 msgstr "簽名 '%.*s' 的鍵為空"
 
-#: trailer.c:748
+#: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
 msgstr "不能讀取輸入檔案 '%s'"
 
-#: trailer.c:751
+#: trailer.c:766 builtin/mktag.c:88
 msgid "could not read from stdin"
 msgstr "不能自標準輸入讀取"
 
-#: trailer.c:1009 wrapper.c:676
+#: trailer.c:1024 wrapper.c:676
 #, c-format
 msgid "could not stat %s"
 msgstr "不能對 %s 呼叫 stat"
 
-#: trailer.c:1011
+#: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
 msgstr "檔案 %s 不是一個正規檔案"
 
-#: trailer.c:1013
+#: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
 msgstr "檔案 %s 使用者不可寫"
 
-#: trailer.c:1025
+#: trailer.c:1040
 msgid "could not open temporary file"
 msgstr "不能開啟暫存檔"
 
-#: trailer.c:1065
+#: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
 msgstr "不能重新命名暫存檔為 %s"
@@ -8577,7 +8937,7 @@
 msgid "error while running fast-import"
 msgstr "執行 fast-import 發生錯誤"
 
-#: transport-helper.c:549 transport-helper.c:1236
+#: transport-helper.c:549 transport-helper.c:1247
 #, c-format
 msgid "could not read ref %s"
 msgstr "無法讀取引用 %s"
@@ -8595,7 +8955,7 @@
 msgid "invalid remote service path"
 msgstr "無效的遠端服務路徑"
 
-#: transport-helper.c:661 transport.c:1446
+#: transport-helper.c:661 transport.c:1471
 msgid "operation not supported by protocol"
 msgstr "協定不支援該動作"
 
@@ -8604,68 +8964,72 @@
 msgid "can't connect to subservice %s"
 msgstr "不能連線到子服務 %s"
 
-#: transport-helper.c:745
+#: transport-helper.c:693 transport.c:397
+msgid "--negotiate-only requires protocol v2"
+msgstr "--negotiate-only 需要 v2 版協定"
+
+#: transport-helper.c:755
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' 缺少對應的 'ok/error' 指令"
 
-#: transport-helper.c:788
+#: transport-helper.c:798
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "預期 ok/error,協助工具說 '%s'"
 
-#: transport-helper.c:845
+#: transport-helper.c:855
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "協助工具報告 %s 的意外狀態"
 
-#: transport-helper.c:928
+#: transport-helper.c:938
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "協助工具 %s 不支援 dry-run"
 
-#: transport-helper.c:931
+#: transport-helper.c:941
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "協助工具 %s 不支援 --signed"
 
-#: transport-helper.c:934
+#: transport-helper.c:944
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "協助工具 %s 不支援 --signed=if-asked"
 
-#: transport-helper.c:939
+#: transport-helper.c:949
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "協助工具 %s 不支援 --atomic"
 
-#: transport-helper.c:943
+#: transport-helper.c:953
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "協助工具 %s 不支援 --%s"
 
-#: transport-helper.c:950
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "協助工具 %s 不支援 'push-option'"
 
-#: transport-helper.c:1050
+#: transport-helper.c:1060
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-heper 不支援 push,需要引用表達式"
 
-#: transport-helper.c:1055
+#: transport-helper.c:1065
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "協助工具 %s 不支援 'force'"
 
-#: transport-helper.c:1102
+#: transport-helper.c:1112
 msgid "couldn't run fast-export"
 msgstr "無法執行 fast-export"
 
-#: transport-helper.c:1107
+#: transport-helper.c:1117
 msgid "error while running fast-export"
 msgstr "執行 fast-export 時發生錯誤"
 
-#: transport-helper.c:1132
+#: transport-helper.c:1142
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8674,52 +9038,52 @@
 "沒有共同的引用並且也沒有指定,什麼也不會做。\n"
 "您或許得指定一個分支。\n"
 
-#: transport-helper.c:1213
+#: transport-helper.c:1224
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "不支援的物件格式「%s」"
 
-#: transport-helper.c:1222
+#: transport-helper.c:1233
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "引用列表中格式錯誤的回應:%s"
 
-#: transport-helper.c:1374
+#: transport-helper.c:1385
 #, c-format
 msgid "read(%s) failed"
 msgstr "讀取(%s)失敗"
 
-#: transport-helper.c:1401
+#: transport-helper.c:1412
 #, c-format
 msgid "write(%s) failed"
 msgstr "寫(%s)失敗"
 
-#: transport-helper.c:1450
+#: transport-helper.c:1461
 #, c-format
 msgid "%s thread failed"
 msgstr "%s 執行緒失敗"
 
-#: transport-helper.c:1454
+#: transport-helper.c:1465
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s 執行緒等待失敗:%s"
 
-#: transport-helper.c:1473 transport-helper.c:1477
+#: transport-helper.c:1484 transport-helper.c:1488
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "不能啟動執行緒來複製資料:%s"
 
-#: transport-helper.c:1514
+#: transport-helper.c:1525
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s 進程等待失敗"
 
-#: transport-helper.c:1518
+#: transport-helper.c:1529
 #, c-format
 msgid "%s process failed"
 msgstr "%s 進程失敗"
 
-#: transport-helper.c:1536 transport-helper.c:1545
+#: transport-helper.c:1547 transport-helper.c:1556
 msgid "can't start thread for copying data"
 msgstr "不能啟動執行緒來複製資料"
 
@@ -8738,44 +9102,48 @@
 msgid "transport: invalid depth option '%s'"
 msgstr "傳輸:無效的深度選項 '%s'"
 
-#: transport.c:269
+#: transport.c:272
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "檢視 'git help config' 中的 protocol.version 取得更多訊息"
 
-#: transport.c:270
+#: transport.c:273
 msgid "server options require protocol version 2 or later"
 msgstr "服務端選項需要版本 2 協定或更高"
 
-#: transport.c:727
+#: transport.c:400
+msgid "server does not support wait-for-done"
+msgstr "伺服器不支援「等待完成」(wait-for-done) 功能"
+
+#: transport.c:751
 msgid "could not parse transport.color.* config"
 msgstr "不能解析 transport.color.* 設定"
 
-#: transport.c:802
+#: transport.c:826
 msgid "support for protocol v2 not implemented yet"
 msgstr "協定 v2 的支援尚未實現"
 
-#: transport.c:936
+#: transport.c:960
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "設定 '%s' 的取值未知:%s"
 
-#: transport.c:1002
+#: transport.c:1026
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "傳輸 '%s' 不允許"
 
-#: transport.c:1055
+#: transport.c:1079
 msgid "git-over-rsync is no longer supported"
 msgstr "不再支援 git-over-rsync"
 
-#: transport.c:1157
+#: transport.c:1181
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr "下列子模組路徑所包含的修改在任何遠端源中都找不到:\n"
 
-#: transport.c:1161
+#: transport.c:1185
 #, c-format
 msgid ""
 "\n"
@@ -8802,31 +9170,31 @@
 "以推送至遠端。\n"
 "\n"
 
-#: transport.c:1169
+#: transport.c:1193
 msgid "Aborting."
 msgstr "正在終止。"
 
-#: transport.c:1315
+#: transport.c:1340
 msgid "failed to push all needed submodules"
 msgstr "不能推送全部需要的子模組"
 
-#: tree-walk.c:32
+#: tree-walk.c:33
 msgid "too-short tree object"
 msgstr "太短的樹狀物件"
 
-#: tree-walk.c:38
+#: tree-walk.c:39
 msgid "malformed mode in tree entry"
 msgstr "樹狀物件中的條目模式錯誤"
 
-#: tree-walk.c:42
+#: tree-walk.c:43
 msgid "empty filename in tree entry"
 msgstr "樹狀物件條目中空的檔案名"
 
-#: tree-walk.c:117
+#: tree-walk.c:118
 msgid "too-short tree file"
 msgstr "太短的樹檔案"
 
-#: unpack-trees.c:113
+#: unpack-trees.c:115
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8835,7 +9203,7 @@
 "您對下列檔案的本機修改將被檢出動作覆蓋:\n"
 "%%s請在切換分支前提交或儲藏您的修改。"
 
-#: unpack-trees.c:115
+#: unpack-trees.c:117
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
@@ -8844,7 +9212,7 @@
 "您對下列檔案的本機修改將被檢出動作覆蓋:\n"
 "%%s"
 
-#: unpack-trees.c:118
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8853,7 +9221,7 @@
 "您對下列檔案的本機修改將被合併動作覆蓋:\n"
 "%%s請在合併前提交或儲藏您的修改。"
 
-#: unpack-trees.c:120
+#: unpack-trees.c:122
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -8862,7 +9230,7 @@
 "您對下列檔案的本機修改將被合併動作覆蓋:\n"
 "%%s"
 
-#: unpack-trees.c:123
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8871,7 +9239,7 @@
 "您對下列檔案的本機修改將被 %s 覆蓋:\n"
 "%%s請在 %s 之前提交或儲藏您的修改。"
 
-#: unpack-trees.c:125
+#: unpack-trees.c:127
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
@@ -8880,7 +9248,7 @@
 "您對下列檔案的本機修改將被 %s 覆蓋:\n"
 "%%s"
 
-#: unpack-trees.c:130
+#: unpack-trees.c:132
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
@@ -8889,7 +9257,7 @@
 "更新如下目錄將會遺失其中未追蹤的檔案:\n"
 "%s"
 
-#: unpack-trees.c:134
+#: unpack-trees.c:136
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8898,7 +9266,7 @@
 "工作區中下列未追蹤的檔案將會因為檢出動作而被刪除:\n"
 "%%s請在切換分支之前移動或刪除。"
 
-#: unpack-trees.c:136
+#: unpack-trees.c:138
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
@@ -8907,7 +9275,7 @@
 "工作區中下列未追蹤的檔案將會因為檢出動作而被刪除:\n"
 "%%s"
 
-#: unpack-trees.c:139
+#: unpack-trees.c:141
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8916,7 +9284,7 @@
 "工作區中下列未追蹤的檔案將會因為合併動作而被刪除:\n"
 "%%s請在合併前移動或刪除。"
 
-#: unpack-trees.c:141
+#: unpack-trees.c:143
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
@@ -8925,7 +9293,7 @@
 "工作區中下列未追蹤的檔案將會因為合併動作而被刪除:\n"
 "%%s"
 
-#: unpack-trees.c:144
+#: unpack-trees.c:146
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8934,7 +9302,7 @@
 "工作區中下列未追蹤的檔案將會因為 %s 動作而被刪除:\n"
 "%%s請在 %s 前移動或刪除。"
 
-#: unpack-trees.c:146
+#: unpack-trees.c:148
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
@@ -8943,7 +9311,7 @@
 "工作區中下列未追蹤的檔案將會因為 %s 動作而被刪除:\n"
 "%%s"
 
-#: unpack-trees.c:152
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8953,7 +9321,7 @@
 "工作區中下列未追蹤的檔案將會因為檢出動作而被覆蓋:\n"
 "%%s請在切換分支前移動或刪除。"
 
-#: unpack-trees.c:154
+#: unpack-trees.c:156
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
@@ -8963,7 +9331,7 @@
 "工作區中下列未追蹤的檔案將會因為檢出動作而被覆蓋:\n"
 "%%s"
 
-#: unpack-trees.c:157
+#: unpack-trees.c:159
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8972,7 +9340,7 @@
 "工作區中下列未追蹤的檔案將會因為合併動作而被覆蓋:\n"
 "%%s請在合併前移動或刪除。"
 
-#: unpack-trees.c:159
+#: unpack-trees.c:161
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
@@ -8981,7 +9349,7 @@
 "工作區中下列未追蹤的檔案將會因為合併動作而被覆蓋:\n"
 "%%s"
 
-#: unpack-trees.c:162
+#: unpack-trees.c:164
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8990,7 +9358,7 @@
 "工作區中下列未追蹤的檔案將會因為 %s 動作而被覆蓋:\n"
 "%%s請在 %s 前移動或刪除。"
 
-#: unpack-trees.c:164
+#: unpack-trees.c:166
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
@@ -8999,12 +9367,12 @@
 "工作區中下列未追蹤的檔案將會因為 %s 動作而被覆蓋:\n"
 "%%s"
 
-#: unpack-trees.c:172
+#: unpack-trees.c:174
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "條目 '%s' 和 '%s' 重疊。無法合併。"
 
-#: unpack-trees.c:175
+#: unpack-trees.c:177
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9013,7 +9381,7 @@
 "無法更新子模組:\n"
 "%s"
 
-#: unpack-trees.c:178
+#: unpack-trees.c:180
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -9023,7 +9391,7 @@
 "即使有稀疏檢出樣板,以下路徑不是最新且保留下來:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:182
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -9032,7 +9400,7 @@
 "即使有稀疏檢出樣板,以下路徑未合併且保留下來:\n"
 "%s"
 
-#: unpack-trees.c:182
+#: unpack-trees.c:184
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -9042,23 +9410,23 @@
 "即使有稀疏檢出樣板,以下路徑已經存在而因此未更新:\n"
 "%s"
 
-#: unpack-trees.c:262
+#: unpack-trees.c:264
 #, c-format
 msgid "Aborting\n"
 msgstr "正在終止\n"
 
-#: unpack-trees.c:289
+#: unpack-trees.c:291
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
 "reapply`.\n"
 msgstr "修正以上路徑後,您可能想要執行「git sparse-checkout reapply」。\n"
 
-#: unpack-trees.c:350
+#: unpack-trees.c:352
 msgid "Updating files"
 msgstr "正在更新檔案"
 
-#: unpack-trees.c:382
+#: unpack-trees.c:384
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
@@ -9067,11 +9435,16 @@
 "以下路徑發生碰撞(如:在不區分大小寫的檔案系統上的區分大小寫的路徑),\n"
 "並且碰撞組中只有一個檔案存在工作區中:\n"
 
-#: unpack-trees.c:1498
+#: unpack-trees.c:1519
 msgid "Updating index flags"
 msgstr "正在更新索引旗標"
 
-#: upload-pack.c:1550
+#: unpack-trees.c:2608
+#, c-format
+msgid "worktree and untracked commit have duplicate entries: %s"
+msgstr "工作區和未追蹤提交有重複項目:%s"
+
+#: upload-pack.c:1548
 msgid "expected flush after fetch arguments"
 msgstr "在 fetch 引數應為一個 flush 包"
 
@@ -9102,78 +9475,108 @@
 
 #: urlmatch.c:371
 msgid "invalid '..' path segment"
-msgstr "無效的 '..' 路徑片段"
+msgstr "無效的 '..' 路徑區塊"
 
 #: walker.c:170
 msgid "Fetching objects"
 msgstr "正在抓取物件"
 
-#: worktree.c:236 builtin/am.c:2103
+#: worktree.c:238 builtin/am.c:2151
 #, c-format
 msgid "failed to read '%s'"
 msgstr "讀取 '%s' 失敗"
 
-#: worktree.c:283
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "在主工作區的 '%s' 不是版本庫目錄"
 
-#: worktree.c:294
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "檔案 '%s' 不包含工作區的絕對路徑"
 
-#: worktree.c:306
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' 不存在"
 
-#: worktree.c:312
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' 不是一個 .git 檔案,錯誤碼 %d"
 
-#: worktree.c:321
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' 沒有指回到 '%s'"
 
-#: worktree.c:587
+#: worktree.c:608
 msgid "not a directory"
 msgstr "不是目錄"
 
-#: worktree.c:596
+#: worktree.c:617
 msgid ".git is not a file"
 msgstr ".git 不是檔案"
 
-#: worktree.c:598
+#: worktree.c:619
 msgid ".git file broken"
 msgstr ".git 檔案損毀"
 
-#: worktree.c:600
+#: worktree.c:621
 msgid ".git file incorrect"
 msgstr ".git 檔案不正確"
 
-#: worktree.c:670
+#: worktree.c:727
 msgid "not a valid path"
 msgstr "非有效路徑"
 
-#: worktree.c:676
+#: worktree.c:733
 msgid "unable to locate repository; .git is not a file"
 msgstr "無法定位版本庫;.git 不是檔案"
 
-#: worktree.c:679
+#: worktree.c:737
+msgid "unable to locate repository; .git file does not reference a repository"
+msgstr "無法定位版本庫;.git 檔案未參考版本庫"
+
+#: worktree.c:741
 msgid "unable to locate repository; .git file broken"
 msgstr "無法定位版本庫;.git 檔案損壞"
 
-#: worktree.c:685
+#: worktree.c:747
 msgid "gitdir unreadable"
 msgstr "無法讀取 gitdir"
 
-#: worktree.c:689
+#: worktree.c:751
 msgid "gitdir incorrect"
 msgstr "不正確的 gitdir"
 
+#: worktree.c:776
+msgid "not a valid directory"
+msgstr "非有效目錄"
+
+#: worktree.c:782
+msgid "gitdir file does not exist"
+msgstr "找不到 gitdir 檔案"
+
+#: worktree.c:787 worktree.c:796
+#, c-format
+msgid "unable to read gitdir file (%s)"
+msgstr "無法讀取 gitdir 檔案 (%s)"
+
+#: worktree.c:806
+#, c-format
+msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
+msgstr "讀取過短(預期有 %<PRIuMAX> 位元組,只讀到 %<PRIuMAX>)"
+
+#: worktree.c:814
+msgid "invalid gitdir file"
+msgstr "gitdir 檔案無效"
+
+#: worktree.c:822
+msgid "gitdir file points to non-existent location"
+msgstr "gitdir 檔案指向的位置不存在"
+
 #: wrapper.c:197 wrapper.c:367
 #, c-format
 msgid "could not open '%s' for reading and writing"
@@ -9223,11 +9626,11 @@
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (使用 \"git rm <檔案>...\" 標記解決方案)"
 
-#: wt-status.c:211 wt-status.c:1070
+#: wt-status.c:211 wt-status.c:1075
 msgid "Changes to be committed:"
 msgstr "要提交的變更:"
 
-#: wt-status.c:234 wt-status.c:1079
+#: wt-status.c:234 wt-status.c:1084
 msgid "Changes not staged for commit:"
 msgstr "尚未暫存以備提交的變更:"
 
@@ -9333,21 +9736,21 @@
 msgid "untracked content, "
 msgstr "未追蹤的內容, "
 
-#: wt-status.c:903
+#: wt-status.c:908
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "您的儲藏區目前有 %d 條紀錄"
 
-#: wt-status.c:934
+#: wt-status.c:939
 msgid "Submodules changed but not updated:"
 msgstr "子模組已修改但尚未更新:"
 
-#: wt-status.c:936
+#: wt-status.c:941
 msgid "Submodule changes to be committed:"
 msgstr "要提交的子模組變更:"
 
-#: wt-status.c:1018
+#: wt-status.c:1023
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9355,7 +9758,7 @@
 "不要改動或刪除上面的一行。\n"
 "其下所有內容都將被忽略。"
 
-#: wt-status.c:1110
+#: wt-status.c:1115
 #, c-format
 msgid ""
 "\n"
@@ -9366,270 +9769,278 @@
 "花了 %.2f 秒才計算出分支的領先/落後範圍。\n"
 "為避免,您可以使用 '--no-ahead-behind'。\n"
 
-#: wt-status.c:1140
+#: wt-status.c:1145
 msgid "You have unmerged paths."
 msgstr "您有尚未合併的路徑。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1143
+#: wt-status.c:1148
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (解決衝突並執行 \"git commit\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1145
+#: wt-status.c:1150
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (使用 \"git merge --abort\" 終止合併)"
 
-#: wt-status.c:1149
+#: wt-status.c:1154
 msgid "All conflicts fixed but you are still merging."
 msgstr "所有衝突已解決但您仍處於合併中。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1152
+#: wt-status.c:1157
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (使用 \"git commit\" 結束合併)"
 
-#: wt-status.c:1161
+#: wt-status.c:1166
 msgid "You are in the middle of an am session."
 msgstr "您正處於 am 動作過程中。"
 
-#: wt-status.c:1164
+#: wt-status.c:1169
 msgid "The current patch is empty."
 msgstr "目前的修補檔為空。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1168
+#: wt-status.c:1173
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (解決衝突,然後執行 \"git am --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1170
+#: wt-status.c:1175
 msgid "  (use \"git am --skip\" to skip this patch)"
-msgstr "  (使用 \"git am --skip\" 跳過此修補檔)"
+msgstr "  (使用 \"git am --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1172
+#: wt-status.c:1177
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (使用 \"git am --abort\" 復原原有分支)"
 
-#: wt-status.c:1305
+#: wt-status.c:1310
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo 遺失。"
 
-#: wt-status.c:1307
+#: wt-status.c:1312
 msgid "No commands done."
 msgstr "沒有指令被執行。"
 
-#: wt-status.c:1310
+#: wt-status.c:1315
 #, c-format
 msgid "Last command done (%d command done):"
 msgid_plural "Last commands done (%d commands done):"
 msgstr[0] "最後一條指令已完成(%d 條指令被執行):"
 
-#: wt-status.c:1321
+#: wt-status.c:1326
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (更多參見檔案 %s)"
 
-#: wt-status.c:1326
+#: wt-status.c:1331
 msgid "No commands remaining."
 msgstr "未剩下任何指令。"
 
-#: wt-status.c:1329
+#: wt-status.c:1334
 #, c-format
 msgid "Next command to do (%d remaining command):"
 msgid_plural "Next commands to do (%d remaining commands):"
 msgstr[0] "接下來要執行的指令(剩餘 %d 條指令):"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1337
+#: wt-status.c:1342
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (使用 \"git rebase --edit-todo\" 來檢視和編輯)"
 
-#: wt-status.c:1349
+#: wt-status.c:1354
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "您在執行將分支 '%s' 重定基底到 '%s' 的動作。"
 
-#: wt-status.c:1354
+#: wt-status.c:1359
 msgid "You are currently rebasing."
 msgstr "您在執行重定基底動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1367
+#: wt-status.c:1372
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (解決衝突,然後執行 \"git rebase --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1369
+#: wt-status.c:1374
 msgid "  (use \"git rebase --skip\" to skip this patch)"
-msgstr "  (使用 \"git rebase --skip\" 跳過此修補檔)"
+msgstr "  (使用 \"git rebase --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1371
+#: wt-status.c:1376
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (使用 \"git rebase --abort\" 以檢出原有分支)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1378
+#: wt-status.c:1383
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (所有衝突已解決:執行 \"git rebase --continue\")"
 
-#: wt-status.c:1382
+#: wt-status.c:1387
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "您在執行將分支 '%s' 重定基底到 '%s' 的動作時分割提交。"
 
-#: wt-status.c:1387
+#: wt-status.c:1392
 msgid "You are currently splitting a commit during a rebase."
 msgstr "您在執行重定基底動作時分割提交。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1390
+#: wt-status.c:1395
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "  (一旦您工作目錄提交乾淨後,執行 \"git rebase --continue\")"
 
-#: wt-status.c:1394
+#: wt-status.c:1399
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "您在執行將分支 '%s' 重定基底到 '%s' 的動作時編輯提交。"
 
-#: wt-status.c:1399
+#: wt-status.c:1404
 msgid "You are currently editing a commit during a rebase."
 msgstr "您在執行重定基底動作時編輯提交。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1402
+#: wt-status.c:1407
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (使用 \"git commit --amend\" 修補目前提交)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1404
+#: wt-status.c:1409
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (當您對您的修改滿意後執行 \"git rebase --continue\")"
 
-#: wt-status.c:1415
+#: wt-status.c:1420
 msgid "Cherry-pick currently in progress."
 msgstr "揀選動作正在進行中。"
 
-#: wt-status.c:1418
+#: wt-status.c:1423
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "您在執行揀選提交 %s 的動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1425
+#: wt-status.c:1430
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (解決衝突並執行 \"git cherry-pick --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1428
+#: wt-status.c:1433
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (執行 \"git cherry-pick --continue\" 以繼續)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1431
+#: wt-status.c:1436
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (所有衝突已解決:執行 \"git cherry-pick --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1433
+#: wt-status.c:1438
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
-msgstr "  (使用 \"git cherry-pick --skip\" 跳過此修補檔)"
+msgstr "  (使用 \"git cherry-pick --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1435
+#: wt-status.c:1440
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (使用 \"git cherry-pick --abort\" 以取消揀選動作)"
 
-#: wt-status.c:1445
+#: wt-status.c:1450
 msgid "Revert currently in progress."
 msgstr "還原動作正在行中。"
 
-#: wt-status.c:1448
+#: wt-status.c:1453
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "您在執行反轉提交 %s 的動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1454
+#: wt-status.c:1459
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (解決衝突並執行 \"git revert --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1457
+#: wt-status.c:1462
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (執行 \"git revert --continue\" 以繼續)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1460
+#: wt-status.c:1465
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (所有衝突已解決:執行 \"git revert --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1462
+#: wt-status.c:1467
 msgid "  (use \"git revert --skip\" to skip this patch)"
-msgstr "  (使用 \"git revert --skip\" 跳過此修補檔)"
+msgstr "  (使用 \"git revert --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1464
+#: wt-status.c:1469
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (使用 \"git revert --abort\" 以取消反轉提交動作)"
 
-#: wt-status.c:1474
+#: wt-status.c:1479
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
-msgstr "您在執行從分支 '%s' 開始的二分尋找動作。"
+msgstr "您在執行從分支 '%s' 開始的二分搜尋動作。"
 
-#: wt-status.c:1478
+#: wt-status.c:1483
 msgid "You are currently bisecting."
-msgstr "您在執行二分尋找動作。"
+msgstr "您在執行二分搜尋動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1481
+#: wt-status.c:1486
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (使用 \"git bisect reset\" 檢出原有分支)"
 
-#: wt-status.c:1492
+#: wt-status.c:1497
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "您處於稀疏簽出狀態,包含 %d%% 的追蹤檔案。"
 
-#: wt-status.c:1731
+#: wt-status.c:1736
 msgid "On branch "
 msgstr "位於分支 "
 
-#: wt-status.c:1738
+#: wt-status.c:1743
 msgid "interactive rebase in progress; onto "
 msgstr "互動式重定基底動作正在進行中;至 "
 
-#: wt-status.c:1740
+#: wt-status.c:1745
 msgid "rebase in progress; onto "
 msgstr "重定基底動作正在進行中;至 "
 
 #: wt-status.c:1750
+msgid "HEAD detached at "
+msgstr "開頭指標分離於 "
+
+#: wt-status.c:1752
+msgid "HEAD detached from "
+msgstr "開頭指標分離自 "
+
+#: wt-status.c:1755
 msgid "Not currently on any branch."
 msgstr "目前不在任何分支上。"
 
-#: wt-status.c:1767
+#: wt-status.c:1772
 msgid "Initial commit"
 msgstr "初始提交"
 
-#: wt-status.c:1768
+#: wt-status.c:1773
 msgid "No commits yet"
 msgstr "尚無提交"
 
-#: wt-status.c:1782
+#: wt-status.c:1787
 msgid "Untracked files"
 msgstr "未追蹤的檔案"
 
-#: wt-status.c:1784
+#: wt-status.c:1789
 msgid "Ignored files"
 msgstr "忽略的檔案"
 
-#: wt-status.c:1788
+#: wt-status.c:1793
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9639,102 +10050,120 @@
 "耗費了 %.2f 秒以枚舉未追蹤的檔案。'status -uno' 也許能提高速度,\n"
 "但您需要小心不要忘了新增新檔案(參見 'git help status')。"
 
-#: wt-status.c:1794
+#: wt-status.c:1799
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "未追蹤的檔案沒有列出%s"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1796
+#: wt-status.c:1801
 msgid " (use -u option to show untracked files)"
 msgstr " (使用 -u 參數顯示未追蹤的檔案)"
 
-#: wt-status.c:1802
+#: wt-status.c:1807
 msgid "No changes"
 msgstr "沒有修改"
 
-#: wt-status.c:1807
+#: wt-status.c:1812
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "修改尚未加入提交(使用 \"git add\" 和/或 \"git commit -a\")\n"
 
-#: wt-status.c:1811
+#: wt-status.c:1816
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "修改尚未加入提交\n"
 
-#: wt-status.c:1815
+#: wt-status.c:1820
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "提交為空,但是存在尚未追蹤的檔案(使用 \"git add\" 建立追蹤)\n"
 
-#: wt-status.c:1819
+#: wt-status.c:1824
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "提交為空,但是存在尚未追蹤的檔案\n"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1823
+#: wt-status.c:1828
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "無檔案要提交(建立/複製檔案並使用 \"git add\" 建立追蹤)\n"
 
-#: wt-status.c:1827 wt-status.c:1833
+#: wt-status.c:1832 wt-status.c:1838
 #, c-format
 msgid "nothing to commit\n"
 msgstr "無檔案要提交\n"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1830
+#: wt-status.c:1835
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "無檔案要提交(使用 -u 顯示未追蹤的檔案)\n"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1835
+#: wt-status.c:1840
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "沒有要提交的檔案,工作區為乾淨狀態\n"
 
-#: wt-status.c:1940
+#: wt-status.c:1945
 msgid "No commits yet on "
 msgstr "尚無提交在 "
 
-#: wt-status.c:1944
+#: wt-status.c:1949
 msgid "HEAD (no branch)"
 msgstr "HEAD(非分支)"
 
-#: wt-status.c:1975
+#: wt-status.c:1980
 msgid "different"
 msgstr "不同"
 
 #  譯者:請維持句尾空格
-#: wt-status.c:1977 wt-status.c:1985
+#: wt-status.c:1982 wt-status.c:1990
 msgid "behind "
 msgstr "落後 "
 
-#: wt-status.c:1980 wt-status.c:1983
+#: wt-status.c:1985 wt-status.c:1988
 msgid "ahead "
 msgstr "領先 "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2505
+#: wt-status.c:2511
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "不能%s:您有未暫存的變更。"
 
-#: wt-status.c:2511
+#: wt-status.c:2517
 msgid "additionally, your index contains uncommitted changes."
 msgstr "另外,您的索引中包含未提交的變更。"
 
-#: wt-status.c:2513
+#: wt-status.c:2519
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "不能%s:您的索引中包含未提交的變更。"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:457
+#: compat/simple-ipc/ipc-unix-socket.c:178
+msgid "could not send IPC command"
+msgstr "無法傳送 IPC 命令"
+
+#: compat/simple-ipc/ipc-unix-socket.c:185
+msgid "could not read IPC response"
+msgstr "無法讀取 IPC 回應"
+
+#: compat/simple-ipc/ipc-unix-socket.c:862
+#, c-format
+msgid "could not start accept_thread '%s'"
+msgstr "無法啟動 accept_thread “%s”"
+
+#: compat/simple-ipc/ipc-unix-socket.c:874
+#, c-format
+msgid "could not start worker[0] for '%s'"
+msgstr "無法啟動「%s」的 worker[0]"
+
+#: compat/precompose_utf8.c:58 builtin/clone.c:461
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "刪除 '%s' 失敗"
@@ -9743,126 +10172,131 @@
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<選項>] [--] <路徑規格>..."
 
-#: builtin/add.c:88
+#: builtin/add.c:61
+#, c-format
+msgid "cannot chmod %cx '%s'"
+msgstr "無法 chmod %cx ‘%s’"
+
+#: builtin/add.c:99
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "意外的差異狀態 %c"
 
-#: builtin/add.c:93 builtin/commit.c:285
+#: builtin/add.c:104 builtin/commit.c:297
 msgid "updating files failed"
 msgstr "更新檔案失敗"
 
-#: builtin/add.c:103
+#: builtin/add.c:114
 #, c-format
 msgid "remove '%s'\n"
 msgstr "刪除 '%s'\n"
 
-#: builtin/add.c:178
+#: builtin/add.c:198
 msgid "Unstaged changes after refreshing the index:"
 msgstr "重新整理索引之後尚未被暫存的變更:"
 
-#: builtin/add.c:272 builtin/rev-parse.c:908
+#: builtin/add.c:307 builtin/rev-parse.c:991
 msgid "Could not read the index"
 msgstr "不能讀取索引"
 
-#: builtin/add.c:283
+#: builtin/add.c:318
 #, c-format
 msgid "Could not open '%s' for writing."
 msgstr "無法為寫入開啟 '%s'。"
 
-#: builtin/add.c:287
+#: builtin/add.c:322
 msgid "Could not write patch"
 msgstr "不能生成修補檔"
 
-#: builtin/add.c:290
+#: builtin/add.c:325
 msgid "editing patch failed"
 msgstr "編輯修補檔失敗"
 
-#: builtin/add.c:293
+#: builtin/add.c:328
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "不能對 '%s' 呼叫 stat"
 
-#: builtin/add.c:295
+#: builtin/add.c:330
 msgid "Empty patch. Aborted."
 msgstr "空修補檔。異常終止。"
 
-#: builtin/add.c:300
+#: builtin/add.c:335
 #, c-format
 msgid "Could not apply '%s'"
-msgstr "不能應用 '%s'"
+msgstr "不能套用 '%s'"
 
-#: builtin/add.c:308
+#: builtin/add.c:343
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "下列路徑根據您的一個 .gitignore 檔案而被忽略:\n"
 
-#: builtin/add.c:328 builtin/clean.c:904 builtin/fetch.c:166 builtin/mv.c:124
+#: 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:242 builtin/send-pack.c:190
+#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
 msgid "dry run"
 msgstr "測試執行"
 
-#: builtin/add.c:331
+#: builtin/add.c:366
 msgid "interactive picking"
 msgstr "互動式揀選"
 
-#: builtin/add.c:332 builtin/checkout.c:1547 builtin/reset.c:308
+#: builtin/add.c:367 builtin/checkout.c:1567 builtin/reset.c:308
 msgid "select hunks interactively"
 msgstr "互動式挑選資料區塊"
 
-#: builtin/add.c:333
+#: builtin/add.c:368
 msgid "edit current diff and apply"
-msgstr "編輯目前差異並應用"
+msgstr "編輯目前差異並套用"
 
-#: builtin/add.c:334
+#: builtin/add.c:369
 msgid "allow adding otherwise ignored files"
 msgstr "允許新增忽略的檔案"
 
-#: builtin/add.c:335
+#: builtin/add.c:370
 msgid "update tracked files"
 msgstr "更新已追蹤的檔案"
 
-#: builtin/add.c:336
+#: builtin/add.c:371
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "對已追蹤檔案(隱含 -u)重新歸一換行符號"
 
-#: builtin/add.c:337
+#: builtin/add.c:372
 msgid "record only the fact that the path will be added later"
 msgstr "只記錄,該路徑稍後再新增"
 
-#: builtin/add.c:338
+#: builtin/add.c:373
 msgid "add changes from all tracked and untracked files"
 msgstr "新增所有改變的已追蹤檔案和未追蹤檔案"
 
-#: builtin/add.c:341
+#: builtin/add.c:376
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "忽略工作區中移除的路徑(和 --no-all 相同)"
 
-#: builtin/add.c:343
+#: builtin/add.c:378
 msgid "don't add, only refresh the index"
 msgstr "不新增,只重新整理索引"
 
-#: builtin/add.c:344
+#: builtin/add.c:379
 msgid "just skip files which cannot be added because of errors"
-msgstr "跳過因發生錯誤不能新增的檔案"
+msgstr "略過因發生錯誤不能新增的檔案"
 
-#: builtin/add.c:345
+#: builtin/add.c:380
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "檢查在測試執行模式下檔案(即使不存在)是否被忽略"
 
-#: builtin/add.c:347 builtin/update-index.c:1004
+#: builtin/add.c:382 builtin/update-index.c:1006
 msgid "override the executable bit of the listed files"
 msgstr "覆蓋列表裡檔案的可執行位"
 
-#: builtin/add.c:349
+#: builtin/add.c:384
 msgid "warn when adding an embedded repository"
 msgstr "建立一個嵌入式版本庫時給予警告"
 
-#: builtin/add.c:351
+#: builtin/add.c:386
 msgid "backend for `git stash -p`"
 msgstr "`git stash -p` 的後端"
 
-#: builtin/add.c:369
+#: builtin/add.c:404
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9891,12 +10325,12 @@
 "\n"
 "參見 \"git help submodule\" 取得更多訊息。"
 
-#: builtin/add.c:397
+#: builtin/add.c:432
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "正在新增嵌入式 git 版本庫:%s"
 
-#: builtin/add.c:416
+#: builtin/add.c:451
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -9906,47 +10340,51 @@
 "如要關閉此訊息,請執行\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:425
+#: builtin/add.c:460
 msgid "adding files failed"
 msgstr "新增檔案失敗"
 
-#: builtin/add.c:453 builtin/commit.c:345
+#: builtin/add.c:488
+msgid "--dry-run is incompatible with --interactive/--patch"
+msgstr "--dry-run 和 --interactive/--patch 不相容"
+
+#: builtin/add.c:490 builtin/commit.c:357
 msgid "--pathspec-from-file is incompatible with --interactive/--patch"
 msgstr "--pathspec-from-file 與 --interactive/--patch 不相容"
 
-#: builtin/add.c:470
+#: builtin/add.c:507
 msgid "--pathspec-from-file is incompatible with --edit"
 msgstr "--pathspec-from-file 與 --edit 不相容"
 
-#: builtin/add.c:482
+#: builtin/add.c:519
 msgid "-A and -u are mutually incompatible"
 msgstr "-A 和 -u 選項互斥"
 
-#: builtin/add.c:485
+#: builtin/add.c:522
 msgid "Option --ignore-missing can only be used together with --dry-run"
 msgstr "選項 --ignore-missing 只能和 --dry-run 同時使用"
 
-#: builtin/add.c:489
+#: builtin/add.c:526
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "參數 --chmod 取值 '%s' 必須是 -x 或 +x"
 
-#: builtin/add.c:507 builtin/checkout.c:1715 builtin/commit.c:351
-#: builtin/reset.c:328 builtin/rm.c:272 builtin/stash.c:1502
+#: builtin/add.c:544 builtin/checkout.c:1735 builtin/commit.c:363
+#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1637
 msgid "--pathspec-from-file is incompatible with pathspec arguments"
 msgstr "--pathspec-from-file 與 <路徑規格> 參數不相容"
 
-#: builtin/add.c:514 builtin/checkout.c:1727 builtin/commit.c:357
-#: builtin/reset.c:334 builtin/rm.c:278 builtin/stash.c:1508
+#: builtin/add.c:551 builtin/checkout.c:1747 builtin/commit.c:369
+#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1643
 msgid "--pathspec-file-nul requires --pathspec-from-file"
 msgstr "--pathspec-file-nul 需要 --pathspec-from-file"
 
-#: builtin/add.c:518
+#: builtin/add.c:555
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "沒有指定檔案,也沒有檔案被新增。\n"
 
-#: builtin/add.c:520
+#: builtin/add.c:557
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -9956,105 +10394,105 @@
 "如要關閉此訊息,請執行\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:352
+#: builtin/am.c:364
 msgid "could not parse author script"
 msgstr "不能解析作者腳本"
 
-#: builtin/am.c:436
+#: builtin/am.c:454
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' 被 applypatch-msg 掛鉤刪除"
 
-#: builtin/am.c:478
+#: builtin/am.c:496
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "非法的輸入行:'%s'。"
 
-#: builtin/am.c:516
+#: builtin/am.c:534
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "從 '%s' 複製註解到 '%s' 時失敗"
 
-#: builtin/am.c:542
+#: builtin/am.c:560
 msgid "fseek failed"
 msgstr "fseek 失敗"
 
-#: builtin/am.c:730
+#: builtin/am.c:748
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "無法解析修補檔 '%s'"
 
-#: builtin/am.c:795
+#: builtin/am.c:813
 msgid "Only one StGIT patch series can be applied at once"
-msgstr "一次只能有一個 StGIT 修補檔佇列被應用"
+msgstr "一次只能有一個 StGIT 修補檔佇列被套用"
 
-#: builtin/am.c:843
+#: builtin/am.c:861
 msgid "invalid timestamp"
 msgstr "無效的時間戳"
 
-#: builtin/am.c:848 builtin/am.c:860
+#: builtin/am.c:866 builtin/am.c:878
 msgid "invalid Date line"
 msgstr "無效的日期行"
 
-#: builtin/am.c:855
+#: builtin/am.c:873
 msgid "invalid timezone offset"
 msgstr "無效的時區位移值"
 
-#: builtin/am.c:948
+#: builtin/am.c:966
 msgid "Patch format detection failed."
 msgstr "修補檔格式偵測失敗。"
 
-#: builtin/am.c:953 builtin/clone.c:410
+#: builtin/am.c:971 builtin/clone.c:414
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "建立目錄 '%s' 失敗"
 
-#: builtin/am.c:958
+#: builtin/am.c:976
 msgid "Failed to split patches."
 msgstr "分割修補檔失敗。"
 
-#: builtin/am.c:1089
+#: builtin/am.c:1125
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "當您解決這一問題,執行 \"%s --continue\"。"
 
-#: builtin/am.c:1090
+#: builtin/am.c:1126
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
-msgstr "如果您想要跳過這一修補檔,則執行 \"%s --skip\"。"
+msgstr "如果您想要略過這一修補檔,則執行 \"%s --skip\"。"
 
-#: builtin/am.c:1091
+#: builtin/am.c:1127
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
-msgstr "若要復原至原始分支並停止修補檔動作,執行 \"%s --abort\"。"
+msgstr "若要復原至原始分支並停止修補動作,執行 \"%s --abort\"。"
 
-#: builtin/am.c:1174
+#: builtin/am.c:1222
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr "修補檔使用 format=flowed 格式傳送,行尾的空格可能會遺失。"
 
-#: builtin/am.c:1202
+#: builtin/am.c:1250
 msgid "Patch is empty."
 msgstr "修補檔為空。"
 
-#: builtin/am.c:1267
+#: builtin/am.c:1315
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "在提交 %s 中缺少作者行"
 
-#: builtin/am.c:1270
+#: builtin/am.c:1318
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "無效的身份標記:%.*s"
 
-#: builtin/am.c:1489
+#: builtin/am.c:1537
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "版本庫缺乏必要的資料物件以進行三方合併。"
 
-#: builtin/am.c:1491
+#: builtin/am.c:1539
 msgid "Using index info to reconstruct a base tree..."
 msgstr "使用索引來重建一個(三方合併的)基礎目錄樹..."
 
-#: builtin/am.c:1510
+#: builtin/am.c:1558
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10062,24 +10500,24 @@
 "您是否曾手動編輯過您的修補檔?\n"
 "無法套用修補檔到索引中的資料物件上。"
 
-#: builtin/am.c:1516
+#: builtin/am.c:1564
 msgid "Falling back to patching base and 3-way merge..."
-msgstr "回落到基礎版本上打修補檔及進行三方合併..."
+msgstr "回落到基礎版本上修補及進行三方合併..."
 
-#: builtin/am.c:1542
+#: builtin/am.c:1590
 msgid "Failed to merge in the changes."
 msgstr "無法合併變更。"
 
-#: builtin/am.c:1574
+#: builtin/am.c:1622
 msgid "applying to an empty history"
 msgstr "正套用到一個空歷史上"
 
-#: builtin/am.c:1626 builtin/am.c:1630
+#: builtin/am.c:1674 builtin/am.c:1678
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "無法繼續:%s 不存在。"
 
-#: builtin/am.c:1648
+#: builtin/am.c:1696
 msgid "Commit Body is:"
 msgstr "提交內容為:"
 
@@ -10088,39 +10526,39 @@
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1658
+#: builtin/am.c:1706
 #, 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:1704 builtin/commit.c:395
+#: builtin/am.c:1752 builtin/commit.c:408
 msgid "unable to write index file"
 msgstr "無法寫入索引檔案"
 
-#: builtin/am.c:1708
+#: builtin/am.c:1756
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "髒索引:不能套用修補檔(髒檔案:%s)"
 
-#: builtin/am.c:1748 builtin/am.c:1816
+#: builtin/am.c:1796 builtin/am.c:1864
 #, c-format
 msgid "Applying: %.*s"
-msgstr "應用:%.*s"
+msgstr "套用:%.*s"
 
-#: builtin/am.c:1765
+#: builtin/am.c:1813
 msgid "No changes -- Patch already applied."
-msgstr "沒有變更 —— 修補檔已經應用過。"
+msgstr "沒有變更——修補檔已經套用過。"
 
-#: builtin/am.c:1771
+#: builtin/am.c:1819
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "打修補檔失敗於 %s %.*s"
 
-#: builtin/am.c:1775
+#: builtin/am.c:1823
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "用 'git am --show-current-patch=diff' 命令檢視失敗的修補檔"
 
-#: builtin/am.c:1819
+#: builtin/am.c:1867
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10128,9 +10566,9 @@
 msgstr ""
 "沒有變更 —— 您是不是忘了執行 'git add'?\n"
 "如果沒有什麼要新增到暫存區的,則很可能是其它提交已經引入了相同的變更。\n"
-"您也許想要跳過這個修補檔。"
+"您也許想要略過這個修補檔。"
 
-#: builtin/am.c:1826
+#: builtin/am.c:1874
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10141,171 +10579,175 @@
 "您應該對已經衝突解決的每一個檔案執行 'git add' 來標記已經完成。 \n"
 "你可以對 \"由他們刪除\" 的檔案執行 `git rm` 指令。"
 
-#: builtin/am.c:1933 builtin/am.c:1937 builtin/am.c:1949 builtin/reset.c:347
+#: builtin/am.c:1981 builtin/am.c:1985 builtin/am.c:1997 builtin/reset.c:347
 #: builtin/reset.c:355
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "不能解析物件 '%s'。"
 
-#: builtin/am.c:1985
+#: builtin/am.c:2033
 msgid "failed to clean index"
 msgstr "清空索引失敗"
 
-#: builtin/am.c:2029
+#: builtin/am.c:2077
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr "您好像在上一次 'am' 失敗後移動了 HEAD。未還原至 ORIG_HEAD"
 
-#: builtin/am.c:2136
+#: builtin/am.c:2184
 #, c-format
 msgid "Invalid value for --patch-format: %s"
 msgstr "無效的 --patch-format 值:%s"
 
-#: builtin/am.c:2178
+#: builtin/am.c:2226
 #, c-format
 msgid "Invalid value for --show-current-patch: %s"
 msgstr "無效的 --show-current-patch 值:%s"
 
-#: builtin/am.c:2182
+#: builtin/am.c:2230
 #, 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:2213
+#: builtin/am.c:2261
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<選項>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2214
+#: builtin/am.c:2262
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<選項>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2220
+#: builtin/am.c:2268
 msgid "run interactively"
 msgstr "以互動式方式執行"
 
-#: builtin/am.c:2222
+#: builtin/am.c:2270
 msgid "historical option -- no-op"
 msgstr "老的參數 —— 無作用"
 
-#: builtin/am.c:2224
+#: builtin/am.c:2272
 msgid "allow fall back on 3way merging if needed"
 msgstr "如果必要,允許使用三方合併"
 
-#: builtin/am.c:2225 builtin/init-db.c:560 builtin/prune-packed.c:16
-#: builtin/repack.c:335 builtin/stash.c:815
+#: builtin/am.c:2273 builtin/init-db.c:546 builtin/prune-packed.c:16
+#: builtin/repack.c:472 builtin/stash.c:948
 msgid "be quiet"
 msgstr "靜默模式"
 
-#: builtin/am.c:2227
+#: builtin/am.c:2275
 msgid "add a Signed-off-by trailer to the commit message"
-msgstr "在提交訊息結尾加入 Signed-off-by"
+msgstr "在提交說明結尾加入 Signed-off-by"
 
-#: builtin/am.c:2230
+#: builtin/am.c:2278
 msgid "recode into utf8 (default)"
 msgstr "使用 utf8 字元集(預設)"
 
-#: builtin/am.c:2232
+#: builtin/am.c:2280
 msgid "pass -k flag to git-mailinfo"
 msgstr "向 git-mailinfo 傳遞 -k 參數"
 
-#: builtin/am.c:2234
+#: builtin/am.c:2282
 msgid "pass -b flag to git-mailinfo"
 msgstr "向 git-mailinfo 傳遞 -b 參數"
 
-#: builtin/am.c:2236
+#: builtin/am.c:2284
 msgid "pass -m flag to git-mailinfo"
 msgstr "向 git-mailinfo 傳遞 -m 參數"
 
-#: builtin/am.c:2238
+#: builtin/am.c:2286
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "針對 mbox 格式,向 git-mailsplit 傳遞 --keep-cr 參數"
 
-#: builtin/am.c:2241
+#: builtin/am.c:2289
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "不向 git-mailsplit 傳遞 --keep-cr 參數,覆蓋 am.keepcr 的設定"
 
-#: builtin/am.c:2244
+#: builtin/am.c:2292
 msgid "strip everything before a scissors line"
 msgstr "捨棄裁切線前的所有內容"
 
-#: builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252 builtin/am.c:2255
-#: builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264 builtin/am.c:2267
-#: builtin/am.c:2273
+#: builtin/am.c:2294
+msgid "pass it through git-mailinfo"
+msgstr "透過 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
 msgid "pass it through git-apply"
 msgstr "傳遞給 git-apply"
 
-#: builtin/am.c:2263 builtin/commit.c:1395 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:903 builtin/merge.c:260
+#: 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/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1341 builtin/repack.c:346 builtin/repack.c:350
-#: builtin/repack.c:352 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:404 parse-options.h:154 parse-options.h:175
-#: parse-options.h:316
+#: 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
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2269 builtin/branch.c:661 builtin/bugreport.c:136
-#: builtin/for-each-ref.c:38 builtin/replace.c:556 builtin/tag.c:438
+#: 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/verify-tag.c:38
 msgid "format"
 msgstr "格式"
 
-#: builtin/am.c:2270
+#: builtin/am.c:2321
 msgid "format the patch(es) are in"
 msgstr "修補檔的格式"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2327
 msgid "override error message when patch failure occurs"
 msgstr "打修補檔失敗時顯示的錯誤訊息"
 
-#: builtin/am.c:2278
+#: builtin/am.c:2329
 msgid "continue applying patches after resolving a conflict"
 msgstr "衝突解決後繼續套用修補檔"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2332
 msgid "synonyms for --continue"
 msgstr "和 --continue 同義"
 
-#: builtin/am.c:2284
+#: builtin/am.c:2335
 msgid "skip the current patch"
-msgstr "跳過目前修補檔"
+msgstr "略過目前修補檔"
 
-#: builtin/am.c:2287
-msgid "restore the original branch and abort the patching operation."
-msgstr "復原原始分支並終止打修補檔動作。"
+#: builtin/am.c:2338
+msgid "restore the original branch and abort the patching operation"
+msgstr "還原原始分支並中止修補動作"
 
-#: builtin/am.c:2290
-msgid "abort the patching operation but keep HEAD where it is."
-msgstr "終止修補檔動作但保持 HEAD 不變。"
+#: builtin/am.c:2341
+msgid "abort the patching operation but keep HEAD where it is"
+msgstr "終止修補動作但保持 HEAD 不變。"
 
-#: builtin/am.c:2294
+#: builtin/am.c:2345
 msgid "show the patch being applied"
 msgstr "顯示正在套用的修補檔"
 
-#: builtin/am.c:2299
+#: builtin/am.c:2350
 msgid "lie about committer date"
 msgstr "將作者日期作為提交日期"
 
-#: builtin/am.c:2301
+#: builtin/am.c:2352
 msgid "use current timestamp for author date"
 msgstr "用目前時間作為作者日期"
 
-#: builtin/am.c:2303 builtin/commit-tree.c:120 builtin/commit.c:1515
-#: builtin/merge.c:297 builtin/pull.c:175 builtin/rebase.c:536
-#: builtin/rebase.c:1394 builtin/revert.c:117 builtin/tag.c:419
+#: 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
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2304 builtin/rebase.c:537 builtin/rebase.c:1395
+#: builtin/am.c:2355 builtin/rebase.c:538 builtin/rebase.c:1396
 msgid "GPG-sign commits"
 msgstr "使用 GPG 簽名提交"
 
-#: builtin/am.c:2307
+#: builtin/am.c:2358
 msgid "(internal use for git-rebase)"
 msgstr "(內部使用,用於 git-rebase)"
 
-#: builtin/am.c:2325
+#: builtin/am.c:2376
 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."
@@ -10313,16 +10755,16 @@
 "參數 -b/--binary 已經很長時間不做任何實質動作了,並且將被移除。\n"
 "請不要再使用它了。"
 
-#: builtin/am.c:2332
+#: builtin/am.c:2383
 msgid "failed to read the index"
 msgstr "讀取索引失敗"
 
-#: builtin/am.c:2347
+#: builtin/am.c:2398
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "之前的重定基底目錄 %s 仍然存在,但卻提供了 mbox。"
 
-#: builtin/am.c:2371
+#: builtin/am.c:2422
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10331,11 +10773,11 @@
 "發現了錯誤的 %s 目錄。\n"
 "使用 \"git am --abort\" 刪除它。"
 
-#: builtin/am.c:2377
+#: builtin/am.c:2428
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "解決動作未進行,我們不會繼續。"
 
-#: builtin/am.c:2387
+#: builtin/am.c:2438
 msgid "interactive mode requires patches on the command line"
 msgstr "互動式模式需要指令列上提供修補檔"
 
@@ -10378,25 +10820,10 @@
 msgstr "git bisect--helper --bisect-reset [<提交>]"
 
 #: builtin/bisect--helper.c:24
-msgid ""
-"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-write [--no-log] <狀態> <版本> <好-術語> <壞-術語"
-">"
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
-"<bad_term>"
-msgstr ""
-"git bisect--helper --bisect-check-and-set-terms <指令> <好-術語> <壞-術語>"
-
-#: builtin/bisect--helper.c:26
 msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
 msgstr "git bisect--helper --bisect-next-check <好-術語> <壞-術語> [<術語>]"
 
-#: builtin/bisect--helper.c:27
+#: builtin/bisect--helper.c:25
 msgid ""
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
@@ -10404,7 +10831,7 @@
 "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
 "term-new]"
 
-#: builtin/bisect--helper.c:28
+#: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
@@ -10413,90 +10840,92 @@
 "git bisect--helper --bisect-start [--term-{new,bad}=<術語> --term-{old,good}"
 "=<術語>] [--no-checkout] [--first-parent] [<壞> [<好>...]] [--] [<路徑>...]"
 
-#: builtin/bisect--helper.c:30
+#: builtin/bisect--helper.c:28
 msgid "git bisect--helper --bisect-next"
 msgstr "git bisect--helper --bisect-next"
 
-#: builtin/bisect--helper.c:31
-msgid "git bisect--helper --bisect-auto-next"
-msgstr "git bisect--helper --bisect-auto-next"
-
-#: builtin/bisect--helper.c:32
-#| msgid "git bisect--helper --bisect-reset [<commit>]"
+#: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<修訂版>]"
 
-#: builtin/bisect--helper.c:33
-#| msgid "git bisect--helper --bisect-reset [<commit>]"
+#: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
 msgstr "git bisect--helper --bisect-state (good|old) [<修訂版>...]"
 
-#: builtin/bisect--helper.c:108
+#: builtin/bisect--helper.c:31
+msgid "git bisect--helper --bisect-replay <filename>"
+msgstr "git bisect--helper --bisect-replay <檔名>"
+
+#: builtin/bisect--helper.c:32
+msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
+msgstr "git bisect--helper --bisect-skip [(<修訂版>|<範圍>)...]"
+
+#: builtin/bisect--helper.c:107
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "無法以 '%2$s' 模式開啟 '%1$s' 檔案"
 
-#: builtin/bisect--helper.c:115
+#: builtin/bisect--helper.c:114
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "無法寫入 '%s' 檔案"
 
-#: builtin/bisect--helper.c:154
+#: builtin/bisect--helper.c:153
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' 不是一個有效的術語"
 
-#: builtin/bisect--helper.c:158
+#: builtin/bisect--helper.c:157
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "不能使用內建指令 '%s' 作為術語"
 
-#: builtin/bisect--helper.c:168
+#: builtin/bisect--helper.c:167
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "不能修改術語 '%s' 的含義"
 
-#: builtin/bisect--helper.c:178
+#: builtin/bisect--helper.c:177
 msgid "please use two different terms"
 msgstr "請使用兩個不同的術語"
 
-#: builtin/bisect--helper.c:194
+#: builtin/bisect--helper.c:193
 #, c-format
 msgid "We are not bisecting.\n"
-msgstr "我們沒有在二分尋找。\n"
+msgstr "我們沒有在二分搜尋。\n"
 
-#: builtin/bisect--helper.c:202
+#: builtin/bisect--helper.c:201
 #, c-format
 msgid "'%s' is not a valid commit"
 msgstr "'%s' 不是一個有效的提交"
 
-#: builtin/bisect--helper.c:211
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr "不能檢出原始 HEAD '%s'。嘗試 'git bisect reset <提交>'。"
 
-#: builtin/bisect--helper.c:255
+#: builtin/bisect--helper.c:254
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "壞的 bisect_write 參數:%s"
 
-#: builtin/bisect--helper.c:260
+#: builtin/bisect--helper.c:259
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "無法取得版本 '%s' 的物件 ID"
 
-#: builtin/bisect--helper.c:272
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "無法開啟檔案 '%s'"
 
-#: builtin/bisect--helper.c:298
+#: builtin/bisect--helper.c:297
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
-msgstr "無效的指令:您目前正處於一個 %s/%s 二分尋找中"
+msgstr "無效的指令:您目前正處於一個 %s/%s 二分搜尋中"
 
-#: builtin/bisect--helper.c:325
+#: builtin/bisect--helper.c:324
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
@@ -10505,7 +10934,7 @@
 "您需要給我至少一個 %s 和一個 %s 版本。\n"
 "為此您可以用 \"git bisect %s\" 和 \"git bisect %s\"。"
 
-#: builtin/bisect--helper.c:329
+#: builtin/bisect--helper.c:328
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10516,32 +10945,32 @@
 "然後需要提供我至少一個 %s 和一個 %s 版本。\n"
 "為此您可以用 \"git bisect %s\" 和 \"git bisect %s\" 指令。"
 
-#: builtin/bisect--helper.c:349
+#: builtin/bisect--helper.c:348
 #, c-format
 msgid "bisecting only with a %s commit"
-msgstr "在只有一個 %s 提交的情況下二分尋找"
+msgstr "在只有一個 %s 提交的情況下二分搜尋"
 
 #  譯者:請維持句尾空格
 #. 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:357
+#: builtin/bisect--helper.c:356
 msgid "Are you sure [Y/n]? "
 msgstr "您確認嗎[Y/n]? "
 
-#: builtin/bisect--helper.c:418
+#: builtin/bisect--helper.c:417
 msgid "no terms defined"
 msgstr "未定義術語"
 
-#: builtin/bisect--helper.c:421
+#: builtin/bisect--helper.c:420
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
 "and %s for the new state.\n"
 msgstr "您目前針對舊狀態的術語是 %s,對新狀態的術語是 %s。\n"
 
-#: builtin/bisect--helper.c:431
+#: builtin/bisect--helper.c:430
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10550,52 +10979,52 @@
 "指令 'git bisect terms' 的參數 %s 無效。\n"
 "支援的選項有:--term-good|--term-old 和 --term-bad|--term-new。"
 
-#: builtin/bisect--helper.c:498
+#: builtin/bisect--helper.c:497 builtin/bisect--helper.c:1021
 msgid "revision walk setup failed\n"
 msgstr "版本遍歷設定失敗\n"
 
-#: builtin/bisect--helper.c:520
+#: builtin/bisect--helper.c:519
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "無法開啟 '%s' 進行附加"
 
-#: builtin/bisect--helper.c:639 builtin/bisect--helper.c:652
+#: builtin/bisect--helper.c:638 builtin/bisect--helper.c:651
 msgid "'' is not a valid term"
 msgstr "'' 不是一個有效的術語"
 
-#: builtin/bisect--helper.c:662
+#: builtin/bisect--helper.c:661
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "未識別的選項:'%s'"
 
-#: builtin/bisect--helper.c:666
+#: builtin/bisect--helper.c:665
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' 看起來不是一個有效的版本"
 
-#: builtin/bisect--helper.c:697
+#: builtin/bisect--helper.c:696
 msgid "bad HEAD - I need a HEAD"
 msgstr "壞的 HEAD - 我需要一個 HEAD"
 
-#: builtin/bisect--helper.c:712
+#: builtin/bisect--helper.c:711
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr "檢出 '%s' 失敗。嘗試 'git bisect start <有效分支>'。"
 
-#: builtin/bisect--helper.c:733
+#: builtin/bisect--helper.c:732
 msgid "won't bisect on cg-seek'ed tree"
-msgstr "不會在做了 cg-seek 的樹上做二分尋找"
+msgstr "不會在做了 cg-seek 的樹上做二分搜尋"
 
-#: builtin/bisect--helper.c:736
+#: builtin/bisect--helper.c:735
 msgid "bad HEAD - strange symbolic ref"
 msgstr "壞的 HEAD - 奇怪的符號引用"
 
-#: builtin/bisect--helper.c:756
+#: builtin/bisect--helper.c:755
 #, c-format
 msgid "invalid ref: '%s'"
 msgstr "無效的引用:'%s'"
 
-#: builtin/bisect--helper.c:814
+#: builtin/bisect--helper.c:813
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "您需要執行 \"git bisect start\" 來開始\n"
 
@@ -10604,91 +11033,106 @@
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:825
+#: builtin/bisect--helper.c:824
 msgid "Do you want me to do it for you [Y/n]? "
 msgstr "您想讓我為您這樣做嗎[Y/n]? "
 
-#: builtin/bisect--helper.c:843
+#: builtin/bisect--helper.c:842
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "要呼叫 `—bisect-state`,請傳入一個以上的引數"
 
-#: builtin/bisect--helper.c:856
+#: builtin/bisect--helper.c:855
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "'git bisect %s' 只能有一個參數。"
 
-#: builtin/bisect--helper.c:868 builtin/bisect--helper.c:879
+#: builtin/bisect--helper.c:867 builtin/bisect--helper.c:880
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "<修訂版> 輸入格式錯誤:%s"
 
-#: builtin/bisect--helper.c:924
+#: builtin/bisect--helper.c:887
+#, c-format
+msgid "Bad rev input (not a commit): %s"
+msgstr "修訂版輸入有誤(不是提交):%s"
+
+#: builtin/bisect--helper.c:919
+msgid "We are not bisecting."
+msgstr "我們沒有在二分搜尋。"
+
+#: builtin/bisect--helper.c:969
+#, c-format
+msgid "'%s'?? what are you talking about?"
+msgstr "「%s」??您在說什麼?"
+
+#: builtin/bisect--helper.c:981
+#, c-format
+msgid "cannot read file '%s' for replaying"
+msgstr "無法讀取「%s」檔案來重放"
+
+#: builtin/bisect--helper.c:1054
 msgid "reset the bisection state"
-msgstr "清除二分尋找狀態"
+msgstr "清除二分搜尋狀態"
 
-#: builtin/bisect--helper.c:926
-msgid "write out the bisection state in BISECT_LOG"
-msgstr "將二分尋找的狀態寫入 BISECT_LOG"
-
-#: builtin/bisect--helper.c:928
-msgid "check and set terms in a bisection state"
-msgstr "在一個二分尋找狀態中檢查和設定術語"
-
-#: builtin/bisect--helper.c:930
+#: builtin/bisect--helper.c:1056
 msgid "check whether bad or good terms exist"
 msgstr "檢查壞的或好的術語是否存在"
 
-#: builtin/bisect--helper.c:932
+#: builtin/bisect--helper.c:1058
 msgid "print out the bisect terms"
-msgstr "列印二分尋找術語"
+msgstr "列印二分搜尋術語"
 
-#: builtin/bisect--helper.c:934
+#: builtin/bisect--helper.c:1060
 msgid "start the bisect session"
-msgstr "啟動二分尋找過程"
+msgstr "啟動二分搜尋過程"
 
-#: builtin/bisect--helper.c:936
+#: builtin/bisect--helper.c:1062
 msgid "find the next bisection commit"
-msgstr "尋找下一個二分尋找提交"
+msgstr "尋找下一個二分搜尋提交"
 
-#: builtin/bisect--helper.c:938
-msgid "verify the next bisection state then checkout the next bisection commit"
-msgstr "驗證下一個二分尋找狀態後,檢出下一個二分尋找提交"
-
-#: builtin/bisect--helper.c:940
+#: builtin/bisect--helper.c:1064
 msgid "mark the state of ref (or refs)"
 msgstr "標記 ref (或 refs) 的狀態"
 
-#: builtin/bisect--helper.c:942
+#: builtin/bisect--helper.c:1066
+msgid "list the bisection steps so far"
+msgstr "列出迄今的二分搜尋步驟"
+
+#: builtin/bisect--helper.c:1068
+msgid "replay the bisection process from the given file"
+msgstr "從指定檔案重放二分搜尋過程"
+
+#: builtin/bisect--helper.c:1070
+msgid "skip some commits for checkout"
+msgstr "略過要檢出的部分提交"
+
+#: builtin/bisect--helper.c:1072
 msgid "no log for BISECT_WRITE"
 msgstr "BISECT_WRITE 無日誌"
 
-#: builtin/bisect--helper.c:957
+#: builtin/bisect--helper.c:1087
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset 無需參數或者需要一個提交"
 
-#: builtin/bisect--helper.c:961
-msgid "--bisect-write requires either 4 or 5 arguments"
-msgstr "--bisect-write 需要 4 或 5 個參數"
-
-#: builtin/bisect--helper.c:967
-msgid "--check-and-set-terms requires 3 arguments"
-msgstr "--check-and-set-terms 需要 3 個參數"
-
-#: builtin/bisect--helper.c:973
+#: builtin/bisect--helper.c:1092
 msgid "--bisect-next-check requires 2 or 3 arguments"
 msgstr "--bisect-next-check 需要 2 或 3 個參數"
 
-#: builtin/bisect--helper.c:979
+#: builtin/bisect--helper.c:1098
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 需要 0 或 1 個參數"
 
-#: builtin/bisect--helper.c:988
+#: builtin/bisect--helper.c:1107
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next 需要 0 個引數"
 
-#: builtin/bisect--helper.c:994
-msgid "--bisect-auto-next requires 0 arguments"
-msgstr "--bisect-auto-next 需要 0 個引數"
+#: builtin/bisect--helper.c:1118
+msgid "--bisect-log requires 0 arguments"
+msgstr "--bisect-log 需要 0 個引數"
+
+#: builtin/bisect--helper.c:1123
+msgid "no logfile given"
+msgstr "未提供日誌檔案"
 
 #: builtin/blame.c:32
 msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
@@ -10707,137 +11151,140 @@
 msgid "must end with a color"
 msgstr "必須以一個顏色結尾"
 
-#: builtin/blame.c:730
+#: builtin/blame.c:728
 #, c-format
 msgid "invalid color '%s' in color.blame.repeatedLines"
 msgstr "設定 color.blame.repeatedLines 中的無效顏色 '%s'"
 
-#: builtin/blame.c:748
+#: builtin/blame.c:746
 msgid "invalid value for blame.coloring"
 msgstr "設定 blame.coloring 中的無效取值"
 
-#: builtin/blame.c:847
+#: builtin/blame.c:845
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "不能找到要忽略的版本 %s"
 
+#: builtin/blame.c:867
+msgid "show blame entries as we find them, incrementally"
+msgstr "增量式顯示發現的 blame 條目"
+
+#: builtin/blame.c:868
+msgid "do not show object names of boundary commits (Default: off)"
+msgstr "不要顯示邊界提交的物件名稱(預設值: off)"
+
 #: builtin/blame.c:869
-msgid "Show blame entries as we find them, incrementally"
-msgstr "增量式地顯示發現的 blame 條目"
+msgid "do not treat root commits as boundaries (Default: off)"
+msgstr "不將根提交看作邊界(預設值:off)"
 
 #: builtin/blame.c:870
-msgid "Do not show object names of boundary commits (Default: off)"
-msgstr "不要顯示邊界提交的物件名稱 (預設值: off)"
+msgid "show work cost statistics"
+msgstr "顯示工作量統計"
 
-#: builtin/blame.c:871
-msgid "Do not treat root commits as boundaries (Default: off)"
-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:575 builtin/send-pack.c:198
+msgid "force progress reporting"
+msgstr "強制顯示進度報告"
 
 #: builtin/blame.c:872
-msgid "Show work cost statistics"
-msgstr "顯示指令消耗統計"
-
-#: builtin/blame.c:873
-msgid "Force progress reporting"
-msgstr "強制進度顯示"
-
-#: builtin/blame.c:874
-msgid "Show output score for blame entries"
+msgid "show output score for blame entries"
 msgstr "顯示判斷 blame 條目位移的得分診斷訊息"
 
+#: builtin/blame.c:873
+msgid "show original filename (Default: auto)"
+msgstr "顯示原始檔案名稱(預設值:auto)"
+
+#: builtin/blame.c:874
+msgid "show original linenumber (Default: off)"
+msgstr "顯示原始檔案名稱(預設值:off)"
+
 #: builtin/blame.c:875
-msgid "Show original filename (Default: auto)"
-msgstr "顯示原始檔案名(預設:自動)"
+msgid "show in a format designed for machine consumption"
+msgstr "顯示成適合機器讀取的格式"
 
 #: builtin/blame.c:876
-msgid "Show original linenumber (Default: off)"
-msgstr "顯示原始的行號(預設:關閉)"
+msgid "show porcelain format with per-line commit information"
+msgstr "顯示每一列適合機器的提交說明"
 
 #: builtin/blame.c:877
-msgid "Show in a format designed for machine consumption"
-msgstr "顯示為一個適合機器讀取的格式"
+msgid "use the same output mode as git-annotate (Default: off)"
+msgstr "使用和 git-annotate 相同的輸出模式(預設值:off)"
 
 #: builtin/blame.c:878
-msgid "Show porcelain format with per-line commit information"
-msgstr "為每一行顯示機器適用的提交訊息"
+msgid "show raw timestamp (Default: off)"
+msgstr "顯示原始時間戳(預設值:off)"
 
 #: builtin/blame.c:879
-msgid "Use the same output mode as git-annotate (Default: off)"
-msgstr "使用和 git-annotate 相同的輸出模式(預設:關閉)"
+msgid "show long commit SHA1 (Default: off)"
+msgstr "顯示較長的 SHA1 提交編號(預設值:off)"
 
 #: builtin/blame.c:880
-msgid "Show raw timestamp (Default: off)"
-msgstr "顯示原始時間戳(預設:關閉)"
+msgid "suppress author name and timestamp (Default: off)"
+msgstr "隱藏作者名字及時間戳(預設值:off)"
 
 #: builtin/blame.c:881
-msgid "Show long commit SHA1 (Default: off)"
-msgstr "顯示長的 SHA1 提交號(預設:關閉)"
+msgid "show author email instead of name (Default: off)"
+msgstr "顯示作者信箱而非名稱(預設值:off)"
 
 #: builtin/blame.c:882
-msgid "Suppress author name and timestamp (Default: off)"
-msgstr "隱藏作者名字和時間戳(預設:關閉)"
-
-#: builtin/blame.c:883
-msgid "Show author email instead of name (Default: off)"
-msgstr "顯示作者的信箱而不是名字(預設:關閉)"
-
-#: builtin/blame.c:884
-msgid "Ignore whitespace differences"
+msgid "ignore whitespace differences"
 msgstr "忽略空白差異"
 
-#: builtin/blame.c:885 builtin/log.c:1813
+#: builtin/blame.c:883 builtin/log.c:1820
 msgid "rev"
 msgstr "版本"
 
+#: builtin/blame.c:883
+msgid "ignore <rev> when blaming"
+msgstr "在執行 blame 動作時忽略 <修訂版>"
+
+#: builtin/blame.c:884
+msgid "ignore revisions from <file>"
+msgstr "忽略 <檔案> 中的修訂版"
+
 #: builtin/blame.c:885
-msgid "Ignore <rev> when blaming"
-msgstr "在執行 blame 動作時忽略 <版本>"
-
-#: builtin/blame.c:886
-msgid "Ignore revisions from <file>"
-msgstr "忽略來自 <檔案> 中的版本"
-
-#: builtin/blame.c:887
 msgid "color redundant metadata from previous line differently"
 msgstr "使用顏色間隔輸出與前一行不同的重複元訊息"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:886
 msgid "color lines by age"
 msgstr "依據時間著色"
 
-#: builtin/blame.c:889
-msgid "Spend extra cycles to find better match"
-msgstr "花費額外的循環來找到更好的符合"
+#: builtin/blame.c:887
+msgid "spend extra cycles to find better match"
+msgstr "循環更多次以找到更佳符合"
 
-#: builtin/blame.c:890
-msgid "Use revisions from <file> instead of calling git-rev-list"
+#: builtin/blame.c:888
+msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "使用來自 <檔案> 的修訂集而不是呼叫 git-rev-list"
 
-#: builtin/blame.c:891
-msgid "Use <file>'s contents as the final image"
-msgstr "使用 <檔案> 的內容作為最終的圖片"
+#: builtin/blame.c:889
+msgid "use <file>'s contents as the final image"
+msgstr "將 <檔案> 的內容當成是最終 image"
 
-#: builtin/blame.c:892 builtin/blame.c:893
+#: builtin/blame.c:890 builtin/blame.c:891
 msgid "score"
 msgstr "得分"
 
+#: builtin/blame.c:890
+msgid "find line copies within and across files"
+msgstr "找到檔案內及跨檔案的複製列"
+
+#: builtin/blame.c:891
+msgid "find line movements within and across files"
+msgstr "找到檔案內及跨檔案的移動列"
+
 #: builtin/blame.c:892
-msgid "Find line copies within and across files"
-msgstr "找到檔案內及跨檔案的行複製"
-
-#: builtin/blame.c:893
-msgid "Find line movements within and across files"
-msgstr "找到檔案內及跨檔案的行移動"
-
-#: builtin/blame.c:894
 msgid "range"
 msgstr "range"
 
-#: builtin/blame.c:895
-msgid "Process only line range <start>,<end> or function :<funcname>"
+#: builtin/blame.c:893
+msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "只處理範圍在 <開始>,<結尾> 的列,或是 :<函數名稱> 函數"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:945
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress 不能和 --incremental 或 --porcelain 同時使用"
 
@@ -10849,17 +11296,17 @@
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:996
 msgid "4 years, 11 months ago"
 msgstr "4 年 11 個月前"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1112
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "檔案 %s 只有 %lu 行"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1157
 msgid "Blaming lines"
 msgstr "追蹤程式碼行"
 
@@ -10929,117 +11376,107 @@
 msgid "Update of config-file failed"
 msgstr "更新設定檔案失敗"
 
-#: builtin/branch.c:220
+#: builtin/branch.c:223
 msgid "cannot use -a with -d"
 msgstr "不能將 -a 和 -d 同時使用"
 
-#: builtin/branch.c:226
+#: builtin/branch.c:230
 msgid "Couldn't look up commit object for HEAD"
 msgstr "無法查詢 HEAD 指向的提交物件"
 
-#: builtin/branch.c:240
+#: builtin/branch.c:244
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "無法刪除在「%2$s」檢出的「%1$s」分支"
 
-#: builtin/branch.c:255
+#: builtin/branch.c:259
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "未能找到遠端追蹤分支 '%s'。"
 
-#: builtin/branch.c:256
+#: builtin/branch.c:260
 #, c-format
 msgid "branch '%s' not found."
 msgstr "分支 '%s' 未發現。"
 
-#: builtin/branch.c:271
-#, c-format
-msgid "Error deleting remote-tracking branch '%s'"
-msgstr "無法刪除遠端追蹤分支 '%s'"
-
-#: builtin/branch.c:272
-#, c-format
-msgid "Error deleting branch '%s'"
-msgstr "無法刪除分支 '%s'"
-
-#: builtin/branch.c:279
+#: builtin/branch.c:291
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "已刪除遠端追蹤分支 %s(曾為 %s)。\n"
 
-#: builtin/branch.c:280
+#: builtin/branch.c:292
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "已刪除分支 %s(曾為 %s)。\n"
 
-#: builtin/branch.c:429 builtin/tag.c:61
+#: builtin/branch.c:440 builtin/tag.c:63
 msgid "unable to parse format string"
 msgstr "不能解析格式化字串"
 
-#: builtin/branch.c:460
+#: builtin/branch.c:471
 msgid "could not resolve HEAD"
 msgstr "不能解析 HEAD 提交"
 
-#: builtin/branch.c:466
+#: builtin/branch.c:477
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) 指向 refs/heads/ 之外"
 
-#: builtin/branch.c:481
+#: builtin/branch.c:492
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "分支 %s 正被重定基底到 %s"
 
-#: builtin/branch.c:485
+#: builtin/branch.c:496
 #, c-format
 msgid "Branch %s is being bisected at %s"
-msgstr "分支 %s 正被二分尋找於 %s"
+msgstr "分支 %s 正被二分搜尋於 %s"
 
-#: builtin/branch.c:502
+#: builtin/branch.c:513
 msgid "cannot copy the current branch while not on any."
 msgstr "無法複製目前分支因為不處於任何分支上。"
 
-#: builtin/branch.c:504
+#: builtin/branch.c:515
 msgid "cannot rename the current branch while not on any."
 msgstr "無法重新命名目前分支因為不處於任何分支上。"
 
-#: builtin/branch.c:515
+#: builtin/branch.c:526
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "無效的分支名:'%s'"
 
-#: builtin/branch.c:544
+#: builtin/branch.c:555
 msgid "Branch rename failed"
 msgstr "分支重新命名失敗"
 
-#: builtin/branch.c:546
+#: builtin/branch.c:557
 msgid "Branch copy failed"
 msgstr "分支複製失敗"
 
-#: builtin/branch.c:550
+#: builtin/branch.c:561
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "已為錯誤命名的分支 '%s' 建立了一個副本"
 
-#: builtin/branch.c:553
+#: builtin/branch.c:564
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "已將錯誤命名的分支 '%s' 重新命名"
 
-#: builtin/branch.c:559
+#: builtin/branch.c:570
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "分支重新命名為 %s,但 HEAD 沒有更新!"
 
-#: builtin/branch.c:568
+#: builtin/branch.c:579
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "分支被重新命名,但更新設定檔案失敗"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:581
 msgid "Branch is copied, but update of config-file failed"
 msgstr "分支已複製,但更新設定檔案失敗"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:597
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11050,209 +11487,209 @@
 "  %s\n"
 "以 '%c' 開頭的行將被過濾。\n"
 
-#: builtin/branch.c:620
+#: builtin/branch.c:631
 msgid "Generic options"
 msgstr "通用選項"
 
-#: builtin/branch.c:622
+#: builtin/branch.c:633
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "顯示雜湊值和主題,若參數出現兩次則顯示上游分支"
 
-#: builtin/branch.c:623
+#: builtin/branch.c:634
 msgid "suppress informational messages"
 msgstr "不顯示訊息"
 
-#: builtin/branch.c:624
+#: builtin/branch.c:635
 msgid "set up tracking mode (see git-pull(1))"
 msgstr "設定追蹤模式(參見 git-pull(1))"
 
-#: builtin/branch.c:626
+#: builtin/branch.c:637
 msgid "do not use"
 msgstr "不要使用"
 
-#: builtin/branch.c:628 builtin/rebase.c:532
+#: builtin/branch.c:639 builtin/rebase.c:533
 msgid "upstream"
 msgstr "上游"
 
-#: builtin/branch.c:628
+#: builtin/branch.c:639
 msgid "change the upstream info"
 msgstr "改變上游訊息"
 
-#: builtin/branch.c:629
+#: builtin/branch.c:640
 msgid "unset the upstream info"
 msgstr "取消上游資訊設定"
 
-#: builtin/branch.c:630
+#: builtin/branch.c:641
 msgid "use colored output"
 msgstr "使用彩色輸出"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:642
 msgid "act on remote-tracking branches"
 msgstr "作用於遠端追蹤分支"
 
-#: builtin/branch.c:633 builtin/branch.c:635
+#: builtin/branch.c:644 builtin/branch.c:646
 msgid "print only branches that contain the commit"
 msgstr "只列印包含該提交的分支"
 
-#: builtin/branch.c:634 builtin/branch.c:636
+#: builtin/branch.c:645 builtin/branch.c:647
 msgid "print only branches that don't contain the commit"
 msgstr "只列印不包含該提交的分支"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:650
 msgid "Specific git-branch actions:"
 msgstr "具體的 git-branch 動作:"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:651
 msgid "list both remote-tracking and local branches"
 msgstr "列出遠端追蹤及本機分支"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:653
 msgid "delete fully merged branch"
 msgstr "刪除完全合併的分支"
 
-#: builtin/branch.c:643
+#: builtin/branch.c:654
 msgid "delete branch (even if not merged)"
 msgstr "刪除分支(即使沒有合併)"
 
-#: builtin/branch.c:644
+#: builtin/branch.c:655
 msgid "move/rename a branch and its reflog"
 msgstr "移動/重新命名一個分支,以及它的引用日誌"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:656
 msgid "move/rename a branch, even if target exists"
 msgstr "移動/重新命名一個分支,即使目標已存在"
 
-#: builtin/branch.c:646
+#: builtin/branch.c:657
 msgid "copy a branch and its reflog"
 msgstr "複製一個分支和它的引用日誌"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:658
 msgid "copy a branch, even if target exists"
 msgstr "複製一個分支,即使目標已存在"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:659
 msgid "list branch names"
 msgstr "列出分支名"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:660
 msgid "show current branch name"
 msgstr "顯示目前分支名"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:661
 msgid "create the branch's reflog"
 msgstr "建立分支的引用日誌"
 
-#: builtin/branch.c:652
+#: builtin/branch.c:663
 msgid "edit the description for the branch"
 msgstr "標記分支的描述"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:664
 msgid "force creation, move/rename, deletion"
 msgstr "強制建立、移動/重新命名、刪除"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:665
 msgid "print only branches that are merged"
 msgstr "只列印已經合併的分支"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:666
 msgid "print only branches that are not merged"
 msgstr "只列印尚未合併的分支"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:667
 msgid "list branches in columns"
 msgstr "以列的方式顯示分支"
 
-#: builtin/branch.c:658 builtin/for-each-ref.c:42 builtin/notes.c:415
+#: 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:434
+#: builtin/tag.c:477
 msgid "object"
 msgstr "物件"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:670
 msgid "print only branches of the object"
 msgstr "只列印指向該物件的分支"
 
-#: builtin/branch.c:660 builtin/for-each-ref.c:48 builtin/tag.c:441
+#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
 msgid "sorting and filtering are case insensitive"
 msgstr "排序和過濾屬於大小寫不敏感"
 
-#: builtin/branch.c:661 builtin/for-each-ref.c:38 builtin/tag.c:439
+#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
 #: builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "輸出格式"
 
-#: builtin/branch.c:684 builtin/clone.c:790
+#: builtin/branch.c:695 builtin/clone.c:794
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD 沒有位於 /refs/heads 之下!"
 
-#: builtin/branch.c:708
+#: builtin/branch.c:719
 msgid "--column and --verbose are incompatible"
 msgstr "--column 和 --verbose 不相容"
 
-#: builtin/branch.c:723 builtin/branch.c:777 builtin/branch.c:786
+#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
 msgid "branch name required"
 msgstr "必須提供分支名"
 
-#: builtin/branch.c:753
+#: builtin/branch.c:766
 msgid "Cannot give description to detached HEAD"
 msgstr "不能向分離開頭指標提供描述"
 
-#: builtin/branch.c:758
+#: builtin/branch.c:771
 msgid "cannot edit description of more than one branch"
 msgstr "不能為一個以上的分支編輯描述"
 
-#: builtin/branch.c:765
+#: builtin/branch.c:778
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "分支 '%s' 尚無提交。"
 
-#: builtin/branch.c:768
+#: builtin/branch.c:781
 #, c-format
 msgid "No branch named '%s'."
 msgstr "沒有分支 '%s'。"
 
-#: builtin/branch.c:783
+#: builtin/branch.c:796
 msgid "too many branches for a copy operation"
 msgstr "為複製動作提供了太多的分支名"
 
-#: builtin/branch.c:792
+#: builtin/branch.c:805
 msgid "too many arguments for a rename operation"
 msgstr "為重新命名動作提供了太多的參數"
 
-#: builtin/branch.c:797
+#: builtin/branch.c:810
 msgid "too many arguments to set new upstream"
 msgstr "為設定新上游提供了太多的參數"
 
-#: builtin/branch.c:801
+#: builtin/branch.c:814
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr "無法設定 HEAD 的上游為 %s,因為 HEAD 沒有指向任何分支。"
 
-#: builtin/branch.c:804 builtin/branch.c:827
+#: builtin/branch.c:817 builtin/branch.c:840
 #, c-format
 msgid "no such branch '%s'"
 msgstr "沒有此分支 '%s'"
 
-#: builtin/branch.c:808
+#: builtin/branch.c:821
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "分支 '%s' 不存在"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:834
 msgid "too many arguments to unset upstream"
 msgstr "為取消上游設定動作提供了太多的參數"
 
-#: builtin/branch.c:825
+#: builtin/branch.c:838
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "在 HEAD 的上游未指向任何分支時無法取消設定。"
 
-#: builtin/branch.c:831
+#: builtin/branch.c:844
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "分支 '%s' 沒有上游訊息"
 
-#: builtin/branch.c:841
+#: builtin/branch.c:854
 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>?"
@@ -11260,7 +11697,7 @@
 "'git branch' 的 -a 和 -r 選項不帶一個分支名。\n"
 "您是否想要使用:-a|-r --list <模式>?"
 
-#: builtin/branch.c:845
+#: builtin/branch.c:858
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11326,38 +11763,38 @@
 "請檢閱臭蟲報告下方的剩餘部分。\n"
 "您可刪除任何您不想分享的地方。\n"
 
-#: builtin/bugreport.c:135
+#: builtin/bugreport.c:136
 msgid "specify a destination for the bugreport file"
 msgstr "請指定 bugreport 檔案的目的地"
 
-#: builtin/bugreport.c:137
+#: builtin/bugreport.c:138
 msgid "specify a strftime format suffix for the filename"
 msgstr "請指定檔案名稱的 strftime 格式後綴"
 
-#: builtin/bugreport.c:159
+#: builtin/bugreport.c:160
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "無法建立 '%s' 的前置目錄"
 
-#: builtin/bugreport.c:166
+#: builtin/bugreport.c:167
 msgid "System Info"
 msgstr "系統資訊"
 
-#: builtin/bugreport.c:169
+#: builtin/bugreport.c:170
 msgid "Enabled Hooks"
 msgstr "啟用的掛鉤"
 
-#: builtin/bugreport.c:176
+#: builtin/bugreport.c:177
 #, c-format
 msgid "couldn't create a new file at '%s'"
 msgstr "不要在「%s」建立新檔案"
 
-#: builtin/bugreport.c:179
+#: builtin/bugreport.c:180
 #, c-format
 msgid "unable to write to %s"
 msgstr "無法寫入 %s"
 
-#: builtin/bugreport.c:189
+#: builtin/bugreport.c:190
 #, c-format
 msgid "Created new report at '%s'.\n"
 msgstr "已在「%s」建立新報告。\n"
@@ -11378,19 +11815,19 @@
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <檔案> [<參考名稱>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3480
+#: builtin/bundle.c:67 builtin/pack-objects.c:3747
 msgid "do not show progress meter"
 msgstr "不顯示進度表"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3482
+#: builtin/bundle.c:69 builtin/pack-objects.c:3749
 msgid "show progress meter"
 msgstr "顯示進度表"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3484
+#: builtin/bundle.c:71 builtin/pack-objects.c:3751
 msgid "show progress meter during object writing phase"
 msgstr "在物件寫入階段顯示進度表"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3487
+#: builtin/bundle.c:74 builtin/pack-objects.c:3754
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "當進度表顯示時類似於 --all-progress"
 
@@ -11532,8 +11969,8 @@
 msgid "terminate input and output records by a NUL character"
 msgstr "輸入和輸出的紀錄使用 NUL 字元終結"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1500 builtin/gc.c:541
-#: builtin/worktree.c:561
+#: builtin/check-ignore.c:21 builtin/checkout.c:1520 builtin/gc.c:549
+#: builtin/worktree.c:491
 msgid "suppress progress reporting"
 msgstr "不顯示進度報告"
 
@@ -11545,27 +11982,27 @@
 msgid "ignore index when checking"
 msgstr "檢查時忽略索引"
 
-#: builtin/check-ignore.c:163
+#: builtin/check-ignore.c:165
 msgid "cannot specify pathnames with --stdin"
 msgstr "不能同時指定路徑及 --stdin 參數"
 
-#: builtin/check-ignore.c:166
+#: builtin/check-ignore.c:168
 msgid "-z only makes sense with --stdin"
 msgstr "-z 需要和 --stdin 參數共用才有意義"
 
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:170
 msgid "no path specified"
 msgstr "未指定路徑"
 
-#: builtin/check-ignore.c:172
+#: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
 msgstr "參數 --quiet 只在提供一個路徑名時有效"
 
-#: builtin/check-ignore.c:174
+#: builtin/check-ignore.c:176
 msgid "cannot have both --quiet and --verbose"
 msgstr "不能同時提供 --quiet 和 --verbose 參數"
 
-#: builtin/check-ignore.c:177
+#: builtin/check-ignore.c:179
 msgid "--non-matching is only valid with --verbose"
 msgstr "--non-matching 選項只在使用 --verbose 時有效"
 
@@ -11586,162 +12023,167 @@
 msgid "no contacts specified"
 msgstr "未指定聯繫位址"
 
-#: builtin/checkout-index.c:139
-msgid "git checkout-index [<options>] [--] [<file>...]"
-msgstr "git checkout-index [<選項>] [--] [<檔案>...]"
+#: builtin/checkout--worker.c:110
+#| msgid "git checkout [<options>] <branch>"
+msgid "git checkout--worker [<options>]"
+msgstr "git checkout--worker [<選項>]"
 
-#: builtin/checkout-index.c:156
-msgid "stage should be between 1 and 3 or all"
-msgstr "索引值應該取值 1 到 3 或者 all"
-
-#: builtin/checkout-index.c:173
-msgid "check out all files in the index"
-msgstr "檢出索引區的所有檔案"
-
-#: builtin/checkout-index.c:174
-msgid "force overwrite of existing files"
-msgstr "強制覆蓋現有的檔案"
-
-#: builtin/checkout-index.c:176
-msgid "no warning for existing files and files not in index"
-msgstr "存在或不在索引中的檔案都沒有警告"
-
-#: builtin/checkout-index.c:178
-msgid "don't checkout new files"
-msgstr "不檢出新檔案"
-
-#: builtin/checkout-index.c:180
-msgid "update stat information in the index file"
-msgstr "更新索引中檔案的狀態訊息"
-
-#: builtin/checkout-index.c:184
-msgid "read list of paths from the standard input"
-msgstr "從標準輸入讀取路徑列表"
-
-#: builtin/checkout-index.c:186
-msgid "write the content to temporary files"
-msgstr "將內容寫入暫存檔"
-
-#: builtin/checkout-index.c:187 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:757
+#: 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
 msgid "string"
 msgstr "字串"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
 msgid "when creating files, prepend <string>"
 msgstr "在建立檔案時,在前面加上 <字串>"
 
+#: builtin/checkout-index.c:152
+msgid "git checkout-index [<options>] [--] [<file>...]"
+msgstr "git checkout-index [<選項>] [--] [<檔案>...]"
+
+#: builtin/checkout-index.c:169
+msgid "stage should be between 1 and 3 or all"
+msgstr "索引值應該取值 1 到 3 或者 all"
+
+#: builtin/checkout-index.c:187
+msgid "check out all files in the index"
+msgstr "檢出索引區的所有檔案"
+
+#: builtin/checkout-index.c:188
+msgid "force overwrite of existing files"
+msgstr "強制覆蓋現有的檔案"
+
 #: builtin/checkout-index.c:190
+msgid "no warning for existing files and files not in index"
+msgstr "存在或不在索引中的檔案都沒有警告"
+
+#: builtin/checkout-index.c:192
+msgid "don't checkout new files"
+msgstr "不檢出新檔案"
+
+#: builtin/checkout-index.c:194
+msgid "update stat information in the index file"
+msgstr "更新索引中檔案的狀態訊息"
+
+#: builtin/checkout-index.c:198
+msgid "read list of paths from the standard input"
+msgstr "從標準輸入讀取路徑列表"
+
+#: builtin/checkout-index.c:200
+msgid "write the content to temporary files"
+msgstr "將內容寫入暫存檔"
+
+#: builtin/checkout-index.c:204
 msgid "copy out the files from named stage"
 msgstr "從指定暫存區中拷出檔案"
 
-#: builtin/checkout.c:31
+#: builtin/checkout.c:33
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<選項>] <分支>"
 
-#: builtin/checkout.c:32
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<選項>] [<分支>] -- <檔案>..."
 
-#: builtin/checkout.c:37
+#: builtin/checkout.c:39
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<選項>] [<分支>]"
 
-#: builtin/checkout.c:42
+#: builtin/checkout.c:44
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<選項>] [--source=<分支>] <檔案>..."
 
-#: builtin/checkout.c:188 builtin/checkout.c:227
+#: builtin/checkout.c:190 builtin/checkout.c:229
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "路徑 '%s' 沒有我們的版本"
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:192 builtin/checkout.c:231
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "路徑 '%s' 沒有他們的版本"
 
-#: builtin/checkout.c:206
+#: builtin/checkout.c:208
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "路徑 '%s' 沒有全部必需的版本"
 
-#: builtin/checkout.c:258
+#: builtin/checkout.c:261
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "路徑 '%s' 沒有必需的版本"
 
-#: builtin/checkout.c:275
+#: builtin/checkout.c:278
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "path '%s':無法合併"
 
-#: builtin/checkout.c:291
+#: builtin/checkout.c:294
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "無法為 '%s' 新增合併結果"
 
-#: builtin/checkout.c:396
+#: builtin/checkout.c:414
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "重新建立了 %d 個合併衝突"
 
-#: builtin/checkout.c:401
+#: builtin/checkout.c:419
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "從 %2$s 更新了 %1$d 個路徑"
 
-#: builtin/checkout.c:408
+#: builtin/checkout.c:426
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "從索引區更新了 %d 個路徑"
 
-#: builtin/checkout.c:431 builtin/checkout.c:434 builtin/checkout.c:437
-#: builtin/checkout.c:441
+#: builtin/checkout.c:449 builtin/checkout.c:452 builtin/checkout.c:455
+#: builtin/checkout.c:459
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' 不能在更新路徑時使用"
 
-#: builtin/checkout.c:444 builtin/checkout.c:447
+#: builtin/checkout.c:462 builtin/checkout.c:465
 #, c-format
 msgid "'%s' cannot be used with %s"
 msgstr "'%s' 不能和 %s 同時使用"
 
-#: builtin/checkout.c:451
+#: builtin/checkout.c:469
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "不能同時更新路徑並切換到分支'%s'。"
 
-#: builtin/checkout.c:455
+#: builtin/checkout.c:473
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "'%s' 或 '%s' 都沒有指定"
 
-#: builtin/checkout.c:459
+#: builtin/checkout.c:477
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "未指定 '%2$s' 時,必須使用 '%1$s'"
 
-#: builtin/checkout.c:464 builtin/checkout.c:469
+#: builtin/checkout.c:482 builtin/checkout.c:487
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' 或 '%s' 不能和 %s 一起使用"
 
-#: builtin/checkout.c:541 builtin/checkout.c:548
+#: builtin/checkout.c:563 builtin/checkout.c:570
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "路徑 '%s' 未合併"
 
-#: builtin/checkout.c:716
+#: builtin/checkout.c:739
 msgid "you need to resolve your current index first"
 msgstr "您需要先解決目前索引的衝突"
 
-#: builtin/checkout.c:770
+#: builtin/checkout.c:793
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -11750,51 +12192,51 @@
 "不能繼續,下列檔案有暫存的修改:\n"
 "%s"
 
-#: builtin/checkout.c:866
+#: builtin/checkout.c:886
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "不能對 '%s' 執行 reflog 動作:%s\n"
 
-#: builtin/checkout.c:908
+#: builtin/checkout.c:928
 msgid "HEAD is now at"
 msgstr "HEAD 目前位於"
 
-#: builtin/checkout.c:912 builtin/clone.c:721 t/helper/test-fast-rebase.c:202
+#: builtin/checkout.c:932 builtin/clone.c:725 t/helper/test-fast-rebase.c:202
 msgid "unable to update HEAD"
 msgstr "不能更新 HEAD"
 
-#: builtin/checkout.c:916
+#: builtin/checkout.c:936
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "重設分支 '%s'\n"
 
-#: builtin/checkout.c:919
+#: builtin/checkout.c:939
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "已經位於 '%s'\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:943
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "切換並重設分支 '%s'\n"
 
-#: builtin/checkout.c:925 builtin/checkout.c:1356
+#: builtin/checkout.c:945 builtin/checkout.c:1376
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "切換到一個新分支 '%s'\n"
 
-#: builtin/checkout.c:927
+#: builtin/checkout.c:947
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "切換到分支 '%s'\n"
 
 #  譯者:請維持前導空格
-#: builtin/checkout.c:978
+#: builtin/checkout.c:998
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... 及其它 %d 個。\n"
 
-#: builtin/checkout.c:984
+#: builtin/checkout.c:1004
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11811,7 +12253,7 @@
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1003
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11832,19 +12274,19 @@
 " git branch <新分支名> %s\n"
 "\n"
 
-#: builtin/checkout.c:1038
+#: builtin/checkout.c:1058
 msgid "internal error in revision walk"
 msgstr "在版本遍歷時遇到內部錯誤"
 
-#: builtin/checkout.c:1042
+#: builtin/checkout.c:1062
 msgid "Previous HEAD position was"
 msgstr "之前的 HEAD 位置是"
 
-#: builtin/checkout.c:1082 builtin/checkout.c:1351
+#: builtin/checkout.c:1102 builtin/checkout.c:1371
 msgid "You are on a branch yet to be born"
 msgstr "您位於一個尚未初始化的分支"
 
-#: builtin/checkout.c:1164
+#: builtin/checkout.c:1184
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -11853,7 +12295,7 @@
 "'%s' 既可以是一個本機檔案,也可以是一個追蹤分支。\n"
 "請使用 --(和可選的 --no-guess)來消除歧義"
 
-#: builtin/checkout.c:1171
+#: builtin/checkout.c:1191
 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"
@@ -11872,51 +12314,51 @@
 "如果您總是喜歡使用模糊的簡短分支名 <name>,而不喜歡如 'origin' 的遠端\n"
 "版本庫名,可以在設定中設定 checkout.defaultRemote=origin。"
 
-#: builtin/checkout.c:1181
+#: builtin/checkout.c:1201
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' 符合多個 (%d) 遠端追蹤分支"
 
-#: builtin/checkout.c:1247
+#: builtin/checkout.c:1267
 msgid "only one reference expected"
 msgstr "預期只有一個引用"
 
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1284
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "應只有一個引用,卻提供了 %d 個。"
 
-#: builtin/checkout.c:1310 builtin/worktree.c:342 builtin/worktree.c:510
+#: builtin/checkout.c:1330 builtin/worktree.c:270 builtin/worktree.c:438
 #, c-format
 msgid "invalid reference: %s"
 msgstr "無效引用:%s"
 
-#: builtin/checkout.c:1323 builtin/checkout.c:1689
+#: builtin/checkout.c:1343 builtin/checkout.c:1709
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "引用不是一個樹:%s"
 
-#: builtin/checkout.c:1370
+#: builtin/checkout.c:1390
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "期望一個分支,得到標籤 '%s'"
 
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1392
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "期望一個分支,得到遠端分支 '%s'"
 
-#: builtin/checkout.c:1373 builtin/checkout.c:1381
+#: builtin/checkout.c:1393 builtin/checkout.c:1401
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "期望一個分支,得到 '%s'"
 
-#: builtin/checkout.c:1376
+#: builtin/checkout.c:1396
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "期望一個分支,得到提交 '%s'"
 
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1412
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -11924,7 +12366,7 @@
 "不能在合併時切換分支\n"
 "考慮使用 \"git merge --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1396
+#: builtin/checkout.c:1416
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -11932,7 +12374,7 @@
 "不能在 am 工作階段期間切換分支\n"
 "考慮使用 \"git am --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1400
+#: builtin/checkout.c:1420
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -11940,7 +12382,7 @@
 "不能在重定基底時切換分支\n"
 "考慮使用 \"git rebase --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1424
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -11948,7 +12390,7 @@
 "不能在揀選時切換分支\n"
 "考慮使用 \"git cherry-pick --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1428
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -11956,214 +12398,207 @@
 "不能在還原時切換分支\n"
 "考慮使用 \"git revert --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1412
+#: builtin/checkout.c:1432
 msgid "you are switching branch while bisecting"
-msgstr "您在執行二分尋找時切換分支"
+msgstr "您在執行二分搜尋時切換分支"
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1439
 msgid "paths cannot be used with switching branches"
 msgstr "路徑不能和切換分支同時使用"
 
-#: builtin/checkout.c:1422 builtin/checkout.c:1426 builtin/checkout.c:1430
+#: builtin/checkout.c:1442 builtin/checkout.c:1446 builtin/checkout.c:1450
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' 不能和切換分支同時使用"
 
-#: builtin/checkout.c:1434 builtin/checkout.c:1437 builtin/checkout.c:1440
-#: builtin/checkout.c:1445 builtin/checkout.c:1450
+#: builtin/checkout.c:1454 builtin/checkout.c:1457 builtin/checkout.c:1460
+#: builtin/checkout.c:1465 builtin/checkout.c:1470
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' 不能和 '%s' 同時使用"
 
-#: builtin/checkout.c:1447
+#: builtin/checkout.c:1467
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' 不帶 <起始點>"
 
-#: builtin/checkout.c:1455
+#: builtin/checkout.c:1475
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "不能切換分支到一個非提交 '%s'"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1482
 msgid "missing branch or commit argument"
 msgstr "缺少分支或提交參數"
 
-#: builtin/checkout.c:1504 builtin/clone.c:92 builtin/commit-graph.c:84
-#: builtin/commit-graph.c:222 builtin/fetch.c:172 builtin/merge.c:296
-#: builtin/multi-pack-index.c:27 builtin/pull.c:119 builtin/push.c:575
-#: builtin/send-pack.c:198
-msgid "force progress reporting"
-msgstr "強制顯示進度報告"
-
-#: builtin/checkout.c:1505
+#: builtin/checkout.c:1525
 msgid "perform a 3-way merge with the new branch"
 msgstr "和新的分支執行三方合併"
 
-#: builtin/checkout.c:1506 builtin/log.c:1800 parse-options.h:322
+#: builtin/checkout.c:1526 builtin/log.c:1807 parse-options.h:323
 msgid "style"
 msgstr "風格"
 
-#: builtin/checkout.c:1507
+#: builtin/checkout.c:1527
 msgid "conflict style (merge or diff3)"
 msgstr "衝突輸出風格(merge 或 diff3)"
 
-#: builtin/checkout.c:1519 builtin/worktree.c:558
+#: builtin/checkout.c:1539 builtin/worktree.c:488
 msgid "detach HEAD at named commit"
 msgstr "HEAD 從指定的提交分離"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1540
 msgid "set upstream info for new branch"
 msgstr "為新的分支設定上游訊息"
 
-#: builtin/checkout.c:1522
+#: builtin/checkout.c:1542
 msgid "force checkout (throw away local modifications)"
 msgstr "強制檢出(捨棄本機修改)"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new-branch"
 msgstr "新分支"
 
-#: builtin/checkout.c:1524
+#: builtin/checkout.c:1544
 msgid "new unparented branch"
 msgstr "新的沒有父提交的分支"
 
-#: builtin/checkout.c:1526 builtin/merge.c:300
+#: builtin/checkout.c:1546 builtin/merge.c:301
 msgid "update ignored files (default)"
 msgstr "更新忽略的檔案(預設)"
 
-#: builtin/checkout.c:1529
+#: builtin/checkout.c:1549
 msgid "do not check if another worktree is holding the given ref"
 msgstr "不檢查指定的引用是否被其他工作區所占用"
 
-#: builtin/checkout.c:1542
+#: builtin/checkout.c:1562
 msgid "checkout our version for unmerged files"
 msgstr "對尚未合併的檔案檢出我們的版本"
 
-#: builtin/checkout.c:1545
+#: builtin/checkout.c:1565
 msgid "checkout their version for unmerged files"
 msgstr "對尚未合併的檔案檢出他們的版本"
 
-#: builtin/checkout.c:1549
+#: builtin/checkout.c:1569
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "對路徑不做稀疏檢出的限制"
 
-#: builtin/checkout.c:1604
+#: builtin/checkout.c:1624
 #, c-format
 msgid "-%c, -%c and --orphan are mutually exclusive"
 msgstr "-%c、-%c 和 --orphan 是互斥的"
 
-#: builtin/checkout.c:1608
+#: builtin/checkout.c:1628
 msgid "-p and --overlay are mutually exclusive"
 msgstr "-p 和 --overlay 互斥"
 
-#: builtin/checkout.c:1645
+#: builtin/checkout.c:1665
 msgid "--track needs a branch name"
 msgstr "--track 需要一個分支名"
 
-#: builtin/checkout.c:1650
+#: builtin/checkout.c:1670
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "缺少分支名稱,請嘗試 -%c"
 
-#: builtin/checkout.c:1682
+#: builtin/checkout.c:1702
 #, c-format
 msgid "could not resolve %s"
 msgstr "無法解析 %s"
 
-#: builtin/checkout.c:1698
+#: builtin/checkout.c:1718
 msgid "invalid path specification"
 msgstr "無效的路徑規格"
 
-#: builtin/checkout.c:1705
+#: builtin/checkout.c:1725
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' 不是一個提交,不能基於它建立分支 '%s'"
 
-#: builtin/checkout.c:1709
+#: builtin/checkout.c:1729
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout:--detach 不能接收路徑參數 '%s'"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1738
 msgid "--pathspec-from-file is incompatible with --detach"
 msgstr "--pathspec-from-file 與 --detach 不相容"
 
-#: builtin/checkout.c:1721 builtin/reset.c:325 builtin/stash.c:1499
+#: builtin/checkout.c:1741 builtin/reset.c:325 builtin/stash.c:1634
 msgid "--pathspec-from-file is incompatible with --patch"
 msgstr "--pathspec-from-file 與 --patch 不相容"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1754
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 "git checkout:在從索引檢出時,--ours/--theirs、--force 和 --merge 不相容。"
 
-#: builtin/checkout.c:1739
+#: builtin/checkout.c:1759
 msgid "you must specify path(s) to restore"
 msgstr "您必須指定一個要復原的路徑"
 
-#: builtin/checkout.c:1765 builtin/checkout.c:1767 builtin/checkout.c:1816
-#: builtin/checkout.c:1818 builtin/clone.c:122 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2719 builtin/worktree.c:554
-#: builtin/worktree.c:556
+#: 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
 msgid "branch"
 msgstr "分支"
 
-#: builtin/checkout.c:1766
+#: builtin/checkout.c:1786
 msgid "create and checkout a new branch"
 msgstr "建立並檢出一個新的分支"
 
-#: builtin/checkout.c:1768
+#: builtin/checkout.c:1788
 msgid "create/reset and checkout a branch"
 msgstr "建立/重設並檢出一個分支"
 
-#: builtin/checkout.c:1769
+#: builtin/checkout.c:1789
 msgid "create reflog for new branch"
 msgstr "為新的分支建立引用日誌"
 
-#: builtin/checkout.c:1771
+#: builtin/checkout.c:1791
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "二次猜測 'git checkout <無此分支>'(預設)"
 
-#: builtin/checkout.c:1772
+#: builtin/checkout.c:1792
 msgid "use overlay mode (default)"
 msgstr "使用疊加模式(預設)"
 
-#: builtin/checkout.c:1817
+#: builtin/checkout.c:1837
 msgid "create and switch to a new branch"
 msgstr "建立並切換一個新分支"
 
-#: builtin/checkout.c:1819
+#: builtin/checkout.c:1839
 msgid "create/reset and switch to a branch"
 msgstr "建立/重設並切換一個分支"
 
-#: builtin/checkout.c:1821
+#: builtin/checkout.c:1841
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "二次猜測 'git switch <無此分支>'"
 
-#: builtin/checkout.c:1823
+#: builtin/checkout.c:1843
 msgid "throw away local modifications"
 msgstr "捨棄本機修改"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1877
 msgid "which tree-ish to checkout from"
 msgstr "要檢出哪一個樹"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1879
 msgid "restore the index"
 msgstr "復原索引"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1881
 msgid "restore the working tree (default)"
 msgstr "復原工作區(預設)"
 
-#: builtin/checkout.c:1863
+#: builtin/checkout.c:1883
 msgid "ignore unmerged entries"
 msgstr "忽略未合併條目"
 
-#: builtin/checkout.c:1864
+#: builtin/checkout.c:1884
 msgid "use overlay mode"
 msgstr "使用疊加模式"
 
@@ -12193,11 +12628,6 @@
 msgid "Would skip repository %s\n"
 msgstr "將忽略版本庫 %s\n"
 
-#: builtin/clean.c:37
-#, c-format
-msgid "failed to remove %s"
-msgstr "刪除 %s 失敗"
-
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
@@ -12307,8 +12737,8 @@
 msgstr "刪除整個目錄"
 
 #: builtin/clean.c:909 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:921 builtin/log.c:183 builtin/log.c:185
-#: builtin/ls-files.c:558 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: 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/show-ref.c:179
 msgid "pattern"
 msgstr "模式"
@@ -12347,162 +12777,167 @@
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<選項>] [--] <版本庫> [<路徑>]"
 
-#: builtin/clone.c:94
+#: builtin/clone.c:96
+msgid "don't clone shallow repository"
+msgstr "不要複製淺版本庫"
+
+#: builtin/clone.c:98
 msgid "don't create a checkout"
 msgstr "不建立一個檢出"
 
-#: builtin/clone.c:95 builtin/clone.c:97 builtin/init-db.c:555
+#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:541
 msgid "create a bare repository"
 msgstr "建立一個純版本庫"
 
-#: builtin/clone.c:99
+#: builtin/clone.c:103
 msgid "create a mirror repository (implies bare)"
 msgstr "建立一個鏡像版本庫(也是純版本庫)"
 
-#: builtin/clone.c:101
+#: builtin/clone.c:105
 msgid "to clone from a local repository"
 msgstr "從本機版本庫複製"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "don't use local hardlinks, always copy"
 msgstr "不使用本機硬連結,始終複製"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "setup as shared repository"
 msgstr "設定為共享版本庫"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "pathspec"
 msgstr "路徑規格"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "initialize submodules in the clone"
 msgstr "在複製時初始化子模組"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "number of submodules cloned in parallel"
 msgstr "並發複製的子模組的數量"
 
-#: builtin/clone.c:112 builtin/init-db.c:552
+#: builtin/clone.c:116 builtin/init-db.c:538
 msgid "template-directory"
 msgstr "範本目錄"
 
-#: builtin/clone.c:113 builtin/init-db.c:553
+#: builtin/clone.c:117 builtin/init-db.c:539
 msgid "directory from which templates will be used"
 msgstr "範本目錄將被使用"
 
-#: builtin/clone.c:115 builtin/clone.c:117 builtin/submodule--helper.c:1831
-#: builtin/submodule--helper.c:2336
+#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1832
+#: builtin/submodule--helper.c:2337
 msgid "reference repository"
 msgstr "參考版本庫"
 
-#: builtin/clone.c:119 builtin/submodule--helper.c:1833
-#: builtin/submodule--helper.c:2338
+#: builtin/clone.c:123 builtin/submodule--helper.c:1834
+#: builtin/submodule--helper.c:2339
 msgid "use --reference only while cloning"
 msgstr "僅在複製時參考 --reference 指向的本機版本庫"
 
-#: builtin/clone.c:120 builtin/column.c:27 builtin/init-db.c:563
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3546 builtin/repack.c:358
+#: 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
 msgid "name"
 msgstr "名稱"
 
-#: builtin/clone.c:121
+#: builtin/clone.c:125
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "使用 <名稱> 而不是 'origin' 去追蹤上游"
 
-#: builtin/clone.c:123
+#: builtin/clone.c:127
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "檢出 <分支> 而不是遠端 HEAD"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "path to git-upload-pack on the remote"
 msgstr "遠端 git-upload-pack 路徑"
 
-#: builtin/clone.c:126 builtin/fetch.c:173 builtin/grep.c:860
+#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:863
 #: builtin/pull.c:208
 msgid "depth"
 msgstr "深度"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "create a shallow clone of that depth"
 msgstr "建立一個指定深度的淺複製"
 
-#: builtin/clone.c:128 builtin/fetch.c:175 builtin/pack-objects.c:3535
+#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3804
 #: builtin/pull.c:211
 msgid "time"
 msgstr "時間"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "create a shallow clone since a specific time"
 msgstr "從一個特定時間建立一個淺複製"
 
-#: builtin/clone.c:130 builtin/fetch.c:177 builtin/fetch.c:200
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1317
+#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
+#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
 msgid "revision"
 msgstr "修訂版"
 
-#: builtin/clone.c:131 builtin/fetch.c:178 builtin/pull.c:215
+#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "深化淺複製的歷史,除了特定版本"
 
-#: builtin/clone.c:133 builtin/submodule--helper.c:1843
-#: builtin/submodule--helper.c:2352
+#: builtin/clone.c:137 builtin/submodule--helper.c:1844
+#: builtin/submodule--helper.c:2353
 msgid "clone only one branch, HEAD or --branch"
 msgstr "只複製一個分支、HEAD 或 --branch"
 
-#: builtin/clone.c:135
+#: builtin/clone.c:139
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "不要複製任何標籤,並且後續取得動作也不下載它們"
 
-#: builtin/clone.c:137
+#: builtin/clone.c:141
 msgid "any cloned submodules will be shallow"
 msgstr "子模組將以淺下載模式複製"
 
-#: builtin/clone.c:138 builtin/init-db.c:561
+#: builtin/clone.c:142 builtin/init-db.c:547
 msgid "gitdir"
 msgstr "git目錄"
 
-#: builtin/clone.c:139 builtin/init-db.c:562
+#: builtin/clone.c:143 builtin/init-db.c:548
 msgid "separate git dir from working tree"
 msgstr "git目錄和工作區分離"
 
-#: builtin/clone.c:140
+#: builtin/clone.c:144
 msgid "key=value"
 msgstr "key=value"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "set config inside the new repository"
 msgstr "在新版本庫中設定設定訊息"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "server-specific"
 msgstr "server-specific"
 
-#: builtin/clone.c:143 builtin/fetch.c:195 builtin/ls-remote.c:76
+#: 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
 msgid "option to transmit"
 msgstr "傳輸選項"
 
-#: builtin/clone.c:144 builtin/fetch.c:196 builtin/pull.c:234
+#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
 #: builtin/push.c:585
 msgid "use IPv4 addresses only"
 msgstr "只使用 IPv4 位址"
 
-#: builtin/clone.c:146 builtin/fetch.c:198 builtin/pull.c:237
+#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
 #: builtin/push.c:587
 msgid "use IPv6 addresses only"
 msgstr "只使用 IPv6 位址"
 
-#: builtin/clone.c:150
+#: builtin/clone.c:154
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "任何複製的子模組將使用它們的遠端追蹤分支"
 
-#: builtin/clone.c:152
+#: builtin/clone.c:156
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "初始化稀疏檢出檔案,只包含根目錄中的檔案"
 
-#: builtin/clone.c:288
+#: builtin/clone.c:292
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -12510,42 +12945,42 @@
 "無法猜到目錄名。\n"
 "請在指令列指定一個目錄"
 
-#: builtin/clone.c:341
+#: builtin/clone.c:345
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: 不能為 '%s' 新增一個備用:%s\n"
 
-#: builtin/clone.c:414
+#: builtin/clone.c:418
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s 存在且不是一個目錄"
 
-#: builtin/clone.c:432
+#: builtin/clone.c:436
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "無法在 '%s' 上啟動疊代器"
 
-#: builtin/clone.c:463
+#: builtin/clone.c:467
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "建立連結 '%s' 失敗"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:471
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "複製檔案至 '%s' 失敗"
 
-#: builtin/clone.c:472
+#: builtin/clone.c:476
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "無法在 '%s' 上疊代"
 
-#: builtin/clone.c:499
+#: builtin/clone.c:503
 #, c-format
 msgid "done.\n"
 msgstr "完成。\n"
 
-#: builtin/clone.c:513
+#: builtin/clone.c:517
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12555,144 +12990,144 @@
 "您可以透過 'git status' 檢查哪些已被檢出,然後使用指令\n"
 "'git restore --source=HEAD :/' 重試\n"
 
-#: builtin/clone.c:590
+#: builtin/clone.c:594
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "不能發現要複製的遠端分支 %s。"
 
-#: builtin/clone.c:709
+#: builtin/clone.c:713
 #, c-format
 msgid "unable to update %s"
 msgstr "不能更新 %s"
 
-#: builtin/clone.c:757
+#: builtin/clone.c:761
 msgid "failed to initialize sparse-checkout"
 msgstr "無法初始化稀疏檢出"
 
-#: builtin/clone.c:780
+#: builtin/clone.c:784
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "遠端 HEAD 指向一個不存在的引用,無法檢出。\n"
 
-#: builtin/clone.c:812
+#: builtin/clone.c:816
 msgid "unable to checkout working tree"
 msgstr "不能檢出工作區"
 
-#: builtin/clone.c:887
+#: builtin/clone.c:894
 msgid "unable to write parameters to config file"
 msgstr "無法將參數寫入設定檔案"
 
-#: builtin/clone.c:950
+#: builtin/clone.c:957
 msgid "cannot repack to clean up"
 msgstr "無法執行 repack 來清理"
 
-#: builtin/clone.c:952
+#: builtin/clone.c:959
 msgid "cannot unlink temporary alternates file"
 msgstr "無法刪除暫時的 alternates 檔案"
 
-#: builtin/clone.c:992 builtin/receive-pack.c:2493
+#: builtin/clone.c:1001 builtin/receive-pack.c:2491
 msgid "Too many arguments."
 msgstr "太多參數。"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1005
 msgid "You must specify a repository to clone."
 msgstr "您必須指定一個版本庫來複製。"
 
-#: builtin/clone.c:1009
+#: builtin/clone.c:1018
 #, c-format
 msgid "--bare and --origin %s options are incompatible."
 msgstr "--bare 和 --origin %s 選項不相容。"
 
-#: builtin/clone.c:1012
+#: builtin/clone.c:1021
 msgid "--bare and --separate-git-dir are incompatible."
 msgstr "--bare 和 --separate-git-dir 選項不相容。"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1035
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "版本庫 '%s' 不存在"
 
-#: builtin/clone.c:1029 builtin/fetch.c:1841
+#: builtin/clone.c:1039 builtin/fetch.c:2011
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "深度 %s 不是一個正數"
 
-#: builtin/clone.c:1039
+#: builtin/clone.c:1049
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "目標路徑 '%s' 已經存在,並且不是一個空目錄。"
 
-#: builtin/clone.c:1045
+#: builtin/clone.c:1055
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "版本庫路徑 '%s' 已經存在,並且不是一個空目錄。"
 
-#: builtin/clone.c:1059
+#: builtin/clone.c:1069
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "工作區 '%s' 已經存在。"
 
-#: builtin/clone.c:1074 builtin/clone.c:1095 builtin/difftool.c:271
-#: builtin/log.c:1987 builtin/worktree.c:354 builtin/worktree.c:386
+#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
+#: builtin/log.c:1995 builtin/worktree.c:282 builtin/worktree.c:314
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "不能為 '%s' 建立先導目錄"
 
-#: builtin/clone.c:1079
+#: builtin/clone.c:1089
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "不能建立工作區目錄 '%s'"
 
-#: builtin/clone.c:1099
+#: builtin/clone.c:1109
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "複製到純版本庫 '%s'...\n"
 
-#: builtin/clone.c:1101
+#: builtin/clone.c:1111
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "正複製到 '%s'...\n"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1135
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr "clone --recursive 和 --reference 以及 --reference-if-able 不相容"
 
-#: builtin/clone.c:1169 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' 不是一個有效的遠端名稱"
 
-#: builtin/clone.c:1210
+#: builtin/clone.c:1229
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth 在本機複製時被忽略,請改用 file:// 協定。"
 
-#: builtin/clone.c:1212
+#: builtin/clone.c:1231
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since 在本機複製時被忽略,請改用 file:// 協定。"
 
-#: builtin/clone.c:1214
+#: builtin/clone.c:1233
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude 在本機複製時被忽略,請改用 file:// 協定。"
 
-#: builtin/clone.c:1216
+#: builtin/clone.c:1235
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter 在本機複製時被忽略,請改用 file:// 協定。"
 
-#: builtin/clone.c:1219
+#: builtin/clone.c:1240
 msgid "source repository is shallow, ignoring --local"
 msgstr "源版本庫是淺複製,忽略 --local"
 
-#: builtin/clone.c:1224
+#: builtin/clone.c:1245
 msgid "--local is ignored"
 msgstr "--local 被忽略"
 
-#: builtin/clone.c:1311 builtin/clone.c:1319
+#: builtin/clone.c:1337 builtin/clone.c:1345
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "遠端分支 %s 在上游 %s 未發現"
 
-#: builtin/clone.c:1322
+#: builtin/clone.c:1348
 msgid "You appear to have cloned an empty repository."
 msgstr "您似乎複製了一個空版本庫。"
 
@@ -12709,20 +13144,20 @@
 msgstr "要使用的配置"
 
 #: builtin/column.c:30
-msgid "Maximum width"
+msgid "maximum width"
 msgstr "最大寬度"
 
 #: builtin/column.c:31
-msgid "Padding space on left border"
+msgid "padding space on left border"
 msgstr "左邊框的填充空間"
 
 #: builtin/column.c:32
-msgid "Padding space on right border"
+msgid "padding space on right border"
 msgstr "右邊框的填充空間"
 
 #: builtin/column.c:33
-msgid "Padding space between columns"
-msgstr "兩列之間的填充空間"
+msgid "padding space between columns"
+msgstr "兩直行之間的填充空間"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
@@ -12751,13 +13186,13 @@
 msgstr "找不到符合 %s 的物件目錄"
 
 #: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:184 builtin/log.c:1769
+#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1776
 msgid "dir"
 msgstr "目錄"
 
 #: builtin/commit-graph.c:81 builtin/commit-graph.c:211
 #: builtin/commit-graph.c:317
-msgid "The object directory to store the graph"
+msgid "the object directory to store the graph"
 msgstr "儲存圖形的物件目錄"
 
 #: builtin/commit-graph.c:83
@@ -12845,7 +13280,7 @@
 msgid "duplicate parent %s ignored"
 msgstr "忽略重複的父提交 %s"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:555
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:559
 #, c-format
 msgid "not a valid object name %s"
 msgstr "不是一個有效的物件名 %s"
@@ -12873,21 +13308,21 @@
 msgid "id of a parent commit object"
 msgstr "父提交物件 ID"
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1504 builtin/merge.c:281
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1470
-#: builtin/tag.c:413
+#: 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
 msgid "message"
 msgstr "訊息"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1504
+#: builtin/commit-tree.c:115 builtin/commit.c:1614
 msgid "commit message"
-msgstr "提交訊息"
+msgstr "提交說明"
 
 #: builtin/commit-tree.c:118
 msgid "read commit log message from file"
 msgstr "從檔案中讀取提交說明"
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1516 builtin/merge.c:298
+#: builtin/commit-tree.c:121 builtin/commit.c:1631 builtin/merge.c:299
 #: builtin/pull.c:176 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG 提交簽名"
@@ -12955,115 +13390,120 @@
 "\n"
 "    git cherry-pick --continue\n"
 "\n"
-"來繼續揀選剩餘提交。如果您想跳過此提交,使用:\n"
+"來繼續揀選剩餘提交。如果您想略過此提交,使用:\n"
 "\n"
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:312
+#: builtin/commit.c:324
 msgid "failed to unpack HEAD tree object"
 msgstr "解包 HEAD 樹狀物件失敗"
 
-#: builtin/commit.c:348
+#: builtin/commit.c:360
 msgid "--pathspec-from-file with -a does not make sense"
 msgstr "--pathspec-from-file 和 -a 同時使用沒有意義"
 
-#: builtin/commit.c:361
+#: builtin/commit.c:374
 msgid "No paths with --include/--only does not make sense."
 msgstr "參數 --include/--only 不跟路徑沒有意義。"
 
-#: builtin/commit.c:373
+#: builtin/commit.c:386
 msgid "unable to create temporary index"
 msgstr "不能建立暫時索引"
 
-#: builtin/commit.c:382
+#: builtin/commit.c:395
 msgid "interactive add failed"
 msgstr "互動式新增失敗"
 
-#: builtin/commit.c:397
+#: builtin/commit.c:410
 msgid "unable to update temporary index"
 msgstr "無法更新暫時索引"
 
-#: builtin/commit.c:399
+#: builtin/commit.c:412
 msgid "Failed to update main cache tree"
 msgstr "不能更新樹的主快取"
 
-#: builtin/commit.c:424 builtin/commit.c:447 builtin/commit.c:495
+#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
 msgid "unable to write new_index file"
 msgstr "無法寫 new_index 檔案"
 
-#: builtin/commit.c:476
+#: builtin/commit.c:489
 msgid "cannot do a partial commit during a merge."
 msgstr "在合併過程中不能做部分提交。"
 
-#: builtin/commit.c:478
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "在揀選過程中不能做部分提交。"
 
-#: builtin/commit.c:480
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a rebase."
 msgstr "在重定基底過程中不能做部分提交。"
 
-#: builtin/commit.c:488
+#: builtin/commit.c:501
 msgid "cannot read the index"
 msgstr "無法讀取索引"
 
-#: builtin/commit.c:507
+#: builtin/commit.c:520
 msgid "unable to write temporary index file"
 msgstr "無法寫暫時索引檔案"
 
-#: builtin/commit.c:605
+#: builtin/commit.c:618
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "提交 '%s' 缺少作者訊息"
 
-#: builtin/commit.c:607
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "提交 '%s' 有格式錯誤的作者訊息"
 
-#: builtin/commit.c:626
+#: builtin/commit.c:639
 msgid "malformed --author parameter"
 msgstr "格式錯誤的 --author 參數"
 
-#: builtin/commit.c:679
+#: builtin/commit.c:692
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr "無法選擇一個未被目前提交說明使用的備註字元"
 
-#: builtin/commit.c:717 builtin/commit.c:750 builtin/commit.c:1097
+#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1158
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "不能查詢提交 %s"
 
-#: builtin/commit.c:729 builtin/shortlog.c:425
+#: builtin/commit.c:758 builtin/shortlog.c:413
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(正從標準輸入中讀取日誌訊息)\n"
 
-#: builtin/commit.c:731
+#: builtin/commit.c:760
 msgid "could not read log from standard input"
 msgstr "不能從標準輸入中讀取日誌訊息"
 
-#: builtin/commit.c:735
+#: builtin/commit.c:764
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "不能讀取日誌檔案 '%s'"
 
-#: builtin/commit.c:766 builtin/commit.c:782
+#: builtin/commit.c:801
+#, c-format
+msgid "cannot combine -m with --fixup:%s"
+msgstr "-m 和 --fixup:%s 不可結合使用"
+
+#: builtin/commit.c:813 builtin/commit.c:829
 msgid "could not read SQUASH_MSG"
 msgstr "不能讀取 SQUASH_MSG"
 
-#: builtin/commit.c:773
+#: builtin/commit.c:820
 msgid "could not read MERGE_MSG"
 msgstr "不能讀取 MERGE_MSG"
 
-#: builtin/commit.c:833
+#: builtin/commit.c:880
 msgid "could not write commit template"
 msgstr "不能寫提交範本"
 
-#: builtin/commit.c:853
+#: builtin/commit.c:900
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13077,7 +13517,7 @@
 "\tgit update-ref -d MERGE_HEAD\n"
 "後重試。\n"
 
-#: builtin/commit.c:858
+#: builtin/commit.c:905
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13091,7 +13531,7 @@
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "後重試。\n"
 
-#: builtin/commit.c:868
+#: builtin/commit.c:915
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13100,7 +13540,7 @@
 "請為您的變更輸入提交說明。以 '%c' 開始的行將被忽略,而一個空的提交\n"
 "說明將會終止提交。\n"
 
-#: builtin/commit.c:876
+#: builtin/commit.c:923
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13111,324 +13551,376 @@
 "也可以刪除它們。一個空的提交說明將會終止提交。\n"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: builtin/commit.c:893
+#: builtin/commit.c:940
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%s作者:  %.*s <%.*s>"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: builtin/commit.c:901
+#: builtin/commit.c:948
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%s日期:  %s"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: builtin/commit.c:908
+#: builtin/commit.c:955
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%s提交者:%.*s <%.*s>"
 
-#: builtin/commit.c:926
+#: builtin/commit.c:973
 msgid "Cannot read index"
 msgstr "無法讀取索引"
 
-#: builtin/commit.c:997
+#: builtin/commit.c:1018
+msgid "unable to pass trailers to --trailers"
+msgstr "無法將尾部署名傳遞至 --trailers"
+
+#: builtin/commit.c:1058
 msgid "Error building trees"
 msgstr "無法建立樹狀物件"
 
-#: builtin/commit.c:1011 builtin/tag.c:276
+#: builtin/commit.c:1072 builtin/tag.c:319
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "請使用 -m 或 -F 選項提供提交說明。\n"
 
-#: builtin/commit.c:1055
+#: builtin/commit.c:1116
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr "--author '%s' 不是 '姓名 <信箱>' 格式,且未能在現有作者中找到符合"
 
-#: builtin/commit.c:1069
+#: builtin/commit.c:1130
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "無效的忽略模式 '%s'"
 
-#: builtin/commit.c:1087 builtin/commit.c:1331
+#: builtin/commit.c:1148 builtin/commit.c:1441
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "無效的未追蹤檔案參數 '%s'"
 
-#: builtin/commit.c:1127
+#: builtin/commit.c:1188
 msgid "--long and -z are incompatible"
 msgstr "--long 和 -z 選項不相容"
 
-#: builtin/commit.c:1171
+#: builtin/commit.c:1219
+msgid "You are in the middle of a merge -- cannot reword."
+msgstr "正在合併中——不能重新輸入。"
+
+#: builtin/commit.c:1221
+msgid "You are in the middle of a cherry-pick -- cannot reword."
+msgstr "正在揀選中——不能重新輸入。"
+
+#: builtin/commit.c:1224
+#, c-format
+msgid "cannot combine reword option of --fixup with path '%s'"
+msgstr "不能將「%s」路徑與 --fixup 的 reword 選項結合"
+
+#: builtin/commit.c:1226
+msgid ""
+"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
+"all/--include/--only"
+msgstr ""
+"--fixup 的 reword 選項與 --patch/--interactive/--all/--include/--only 互斥"
+
+#: builtin/commit.c:1245
 msgid "Using both --reset-author and --author does not make sense"
 msgstr "同時使用 --reset-author 和 --author 沒有意義"
 
-#: builtin/commit.c:1180
+#: builtin/commit.c:1254
 msgid "You have nothing to amend."
 msgstr "您沒有可修補的提交。"
 
-#: builtin/commit.c:1183
+#: builtin/commit.c:1257
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "您正處於一個合併過程中 -- 無法修補提交。"
 
-#: builtin/commit.c:1185
+#: builtin/commit.c:1259
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "您正處於一個揀選過程中 -- 無法修補提交。"
 
-#: builtin/commit.c:1187
+#: builtin/commit.c:1261
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "您正處於重定基底的過程中 -- 無法修訂。"
 
-#: builtin/commit.c:1190
+#: builtin/commit.c:1264
 msgid "Options --squash and --fixup cannot be used together"
 msgstr "選項 --squash 和 --fixup 不能同時使用"
 
-#: builtin/commit.c:1200
+#: builtin/commit.c:1274
 msgid "Only one of -c/-C/-F/--fixup can be used."
 msgstr "只能用一個 -c/-C/-F/--fixup 選項。"
 
-#: builtin/commit.c:1202
+#: builtin/commit.c:1276
 msgid "Option -m cannot be combined with -c/-C/-F."
 msgstr "選項 -m 不能和 -c/-C/-F 同時使用。"
 
-#: builtin/commit.c:1211
+#: builtin/commit.c:1285
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author 只能和 -C、-c 或 --amend 同時使用。"
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1303
 msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
 msgstr "只能用一個 --include/--only/--all/--interactive/--patch 選項。"
 
-#: builtin/commit.c:1235
+#: builtin/commit.c:1331
+#, c-format
+msgid "unknown option: --fixup=%s:%s"
+msgstr "未知選項:--fixup=%s:%s"
+
+#: builtin/commit.c:1345
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "路徑 '%s ...' 和 -a 選項同時使用沒有意義"
 
-#: builtin/commit.c:1366 builtin/commit.c:1527
+#: builtin/commit.c:1476 builtin/commit.c:1642
 msgid "show status concisely"
 msgstr "以簡潔的格式顯示狀態"
 
-#: builtin/commit.c:1368 builtin/commit.c:1529
+#: builtin/commit.c:1478 builtin/commit.c:1644
 msgid "show branch information"
 msgstr "顯示分支訊息"
 
-#: builtin/commit.c:1370
+#: builtin/commit.c:1480
 msgid "show stash information"
 msgstr "顯示儲藏區訊息"
 
-#: builtin/commit.c:1372 builtin/commit.c:1531
+#: builtin/commit.c:1482 builtin/commit.c:1646
 msgid "compute full ahead/behind values"
 msgstr "計算完整的領先/落後值"
 
-#: builtin/commit.c:1374
+#: builtin/commit.c:1484
 msgid "version"
 msgstr "版本"
 
-#: builtin/commit.c:1374 builtin/commit.c:1533 builtin/push.c:560
-#: builtin/worktree.c:725
+#: builtin/commit.c:1484 builtin/commit.c:1648 builtin/push.c:560
+#: builtin/worktree.c:681
 msgid "machine-readable output"
 msgstr "機器可讀的輸出"
 
-#: builtin/commit.c:1377 builtin/commit.c:1535
+#: builtin/commit.c:1487 builtin/commit.c:1650
 msgid "show status in long format (default)"
 msgstr "以長格式顯示狀態(預設)"
 
-#: builtin/commit.c:1380 builtin/commit.c:1538
+#: builtin/commit.c:1490 builtin/commit.c:1653
 msgid "terminate entries with NUL"
 msgstr "條目以 NUL 字元結尾"
 
-#: builtin/commit.c:1382 builtin/commit.c:1386 builtin/commit.c:1541
+#: 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:1406 parse-options.h:336
+#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
 msgid "mode"
 msgstr "模式"
 
-#: builtin/commit.c:1383 builtin/commit.c:1541
+#: builtin/commit.c:1493 builtin/commit.c:1656
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
-msgstr "顯示未追蹤的檔案,「模式」的可選參數:all、normal、no。(預設:all)"
+msgstr "顯示未追蹤的檔案,「模式」的可選參數:all、normal、no。(預設值:all)"
 
-#: builtin/commit.c:1387
+#: builtin/commit.c:1497
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
 msgstr ""
-"顯示已忽略的檔案,可選模式:traditional、matching、no。(預設:traditional)"
+"顯示已忽略的檔案,可選模式:traditional、matching、no。(預設值:"
+"traditional)"
 
-#: builtin/commit.c:1389 parse-options.h:192
+#: builtin/commit.c:1499 parse-options.h:193
 msgid "when"
 msgstr "何時"
 
-#: builtin/commit.c:1390
+#: builtin/commit.c:1500
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
-"忽略子模組的更改,「何時」的可選參數:all、dirty、untracked。(預設:all)"
+"忽略子模組的更改,「何時」的可選參數:all、dirty、untracked。(預設值:all)"
 
-#: builtin/commit.c:1392
+#: builtin/commit.c:1502
 msgid "list untracked files in columns"
 msgstr "以列的方式顯示未追蹤的檔案"
 
-#: builtin/commit.c:1393
+#: builtin/commit.c:1503
 msgid "do not detect renames"
 msgstr "不檢測重新命名"
 
-#: builtin/commit.c:1395
+#: builtin/commit.c:1505
 msgid "detect renames, optionally set similarity index"
 msgstr "檢測重新命名,可以設定索引相似度"
 
-#: builtin/commit.c:1415
+#: builtin/commit.c:1525
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "不支援已忽略和未追蹤檔案參數的組合"
 
-#: builtin/commit.c:1497
+#: builtin/commit.c:1607
 msgid "suppress summary after successful commit"
 msgstr "提交成功後不顯示概述訊息"
 
-#: builtin/commit.c:1498
+#: builtin/commit.c:1608
 msgid "show diff in commit message template"
 msgstr "在提交說明範本裡顯示差異"
 
-#: builtin/commit.c:1500
+#: builtin/commit.c:1610
 msgid "Commit message options"
 msgstr "提交說明選項"
 
-#: builtin/commit.c:1501 builtin/merge.c:285 builtin/tag.c:415
+#: builtin/commit.c:1611 builtin/merge.c:286 builtin/tag.c:458
 msgid "read message from file"
 msgstr "從檔案中讀取提交說明"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "author"
 msgstr "作者"
 
-#: builtin/commit.c:1502
+#: builtin/commit.c:1612
 msgid "override author for commit"
 msgstr "提交時覆蓋作者"
 
-#: builtin/commit.c:1503 builtin/gc.c:542
+#: builtin/commit.c:1613 builtin/gc.c:550
 msgid "date"
 msgstr "日期"
 
-#: builtin/commit.c:1503
+#: builtin/commit.c:1613
 msgid "override date for commit"
 msgstr "提交時覆蓋日期"
 
-#: builtin/commit.c:1505 builtin/commit.c:1506 builtin/commit.c:1507
-#: builtin/commit.c:1508 parse-options.h:328 ref-filter.h:87
+#: builtin/commit.c:1615 builtin/commit.c:1616 builtin/commit.c:1622
+#: parse-options.h:329 ref-filter.h:90
 msgid "commit"
 msgstr "提交"
 
-#: builtin/commit.c:1505
+#: builtin/commit.c:1615
 msgid "reuse and edit message from specified commit"
 msgstr "重用並編輯指定提交的提交說明"
 
-#: builtin/commit.c:1506
+#: builtin/commit.c:1616
 msgid "reuse message from specified commit"
 msgstr "重用指定提交的提交說明"
 
-#: builtin/commit.c:1507
-msgid "use autosquash formatted message to fixup specified commit"
-msgstr "使用 autosquash 格式的提交說明用以修正指定的提交"
+#. TRANSLATORS: Leave "[(amend|reword):]" as-is,
+#. and only translate <commit>.
+#.
+#: builtin/commit.c:1621
+#| msgid "amend previous commit"
+msgid "[(amend|reword):]commit"
+msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1508
+#: builtin/commit.c:1621
+msgid ""
+"use autosquash formatted message to fixup or amend/reword specified commit"
+msgstr "使用 autosquash 格式化後的說明來 fixup 或是 amend/reword 指定提交"
+
+#: builtin/commit.c:1622
 msgid "use autosquash formatted message to squash specified commit"
 msgstr "使用 autosquash 格式的提交說明用以壓縮至指定的提交"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1623
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "現在將該提交的作者改為我(和 -C/-c/--amend 參數共用)"
 
-#: builtin/commit.c:1510 builtin/log.c:1744 builtin/merge.c:301
+#: builtin/commit.c:1624 builtin/interpret-trailers.c:111
+msgid "trailer"
+msgstr "尾部署名"
+
+#: builtin/commit.c:1624
+msgid "add custom trailer(s)"
+msgstr "加入自訂尾部署名"
+
+#: builtin/commit.c:1625 builtin/log.c:1751 builtin/merge.c:302
 #: builtin/pull.c:145 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "在結尾加入 Signed-off-by"
 
-#: builtin/commit.c:1511
+#: builtin/commit.c:1626
 msgid "use specified template file"
 msgstr "使用指定的範本檔案"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1627
 msgid "force edit of commit"
 msgstr "強制編輯提交"
 
-#: builtin/commit.c:1514
+#: builtin/commit.c:1629
 msgid "include status in commit message template"
 msgstr "在提交說明範本裡包含狀態訊息"
 
-#: builtin/commit.c:1519
+#: builtin/commit.c:1634
 msgid "Commit contents options"
 msgstr "提交內容選項"
 
-#: builtin/commit.c:1520
+#: builtin/commit.c:1635
 msgid "commit all changed files"
 msgstr "提交所有改動的檔案"
 
-#: builtin/commit.c:1521
+#: builtin/commit.c:1636
 msgid "add specified files to index for commit"
 msgstr "新增指定的檔案到索引區等待提交"
 
-#: builtin/commit.c:1522
+#: builtin/commit.c:1637
 msgid "interactively add files"
 msgstr "互動式新增檔案"
 
-#: builtin/commit.c:1523
+#: builtin/commit.c:1638
 msgid "interactively add changes"
 msgstr "互動式新增變更"
 
-#: builtin/commit.c:1524
+#: builtin/commit.c:1639
 msgid "commit only specified files"
 msgstr "只提交指定的檔案"
 
-#: builtin/commit.c:1525
+#: builtin/commit.c:1640
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "繞過 pre-commit 和 commit-msg 掛鉤"
 
-#: builtin/commit.c:1526
+#: builtin/commit.c:1641
 msgid "show what would be committed"
 msgstr "顯示將要提交的內容"
 
-#: builtin/commit.c:1539
+#: builtin/commit.c:1654
 msgid "amend previous commit"
 msgstr "修改先前的提交"
 
-#: builtin/commit.c:1540
+#: builtin/commit.c:1655
 msgid "bypass post-rewrite hook"
 msgstr "繞過 post-rewrite 掛鉤"
 
-#: builtin/commit.c:1547
+#: builtin/commit.c:1662
 msgid "ok to record an empty change"
 msgstr "允許一個空提交"
 
-#: builtin/commit.c:1549
+#: builtin/commit.c:1664
 msgid "ok to record a change with an empty message"
 msgstr "允許空的提交說明"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1737
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "損壞的 MERGE_HEAD 檔案(%s)"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1744
 msgid "could not read MERGE_MODE"
 msgstr "不能讀取 MERGE_MODE"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1765
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "不能讀取提交說明:%s"
 
-#: builtin/commit.c:1657
+#: builtin/commit.c:1772
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "終止提交因為提交說明為空。\n"
 
-#: builtin/commit.c:1662
+#: builtin/commit.c:1777
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "終止提交;您未更改來自範本的提交說明。\n"
 
-#: builtin/commit.c:1696
+#: builtin/commit.c:1788
+#, c-format
+msgid "Aborting commit due to empty commit message body.\n"
+msgstr "提交說明內文空白,中止提交作業。\n"
+
+#: builtin/commit.c:1824
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13491,12 +13983,10 @@
 msgstr "取得值:name [value-pattern]"
 
 #: builtin/config.c:139
-#| msgid "get all values: key [value-regex]"
 msgid "get all values: key [value-pattern]"
 msgstr "取得所有值:key [value-pattern]"
 
 #: builtin/config.c:140
-#| msgid "get values for regexp: name-regex [value-regex]"
 msgid "get values for regexp: name-regex [value-pattern]"
 msgstr "根據正規表示式取得值:name-regex [value-pattern]"
 
@@ -13505,7 +13995,6 @@
 msgstr "獲得 URL 取值:section[.var] URL"
 
 #: builtin/config.c:142
-#| msgid "replace all matching variables: name value [value_regex]"
 msgid "replace all matching variables: name value [value-pattern]"
 msgstr "取代所有符合的變數:name value [value-pattern]"
 
@@ -13518,7 +14007,6 @@
 msgstr "移除一個變數:name [value-pattern]"
 
 #: builtin/config.c:145
-#| msgid "remove all matches: name [value-regex]"
 msgid "remove all matches: name [value-pattern]"
 msgstr "移除所有符合項目:name [value-pattern]"
 
@@ -13771,7 +14259,7 @@
 msgid "print sizes in human readable format"
 msgstr "以使用者可讀的格式顯示大小"
 
-#: builtin/credential-cache--daemon.c:226
+#: builtin/credential-cache--daemon.c:227
 #, c-format
 msgid ""
 "The permissions on your socket directory are too loose; other\n"
@@ -13784,11 +14272,11 @@
 "\n"
 "\tchmod 0700 %s"
 
-#: builtin/credential-cache--daemon.c:275
+#: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
 msgstr "除錯訊息輸出到標準錯誤"
 
-#: builtin/credential-cache--daemon.c:315
+#: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr "credential-cache--daemon 無法使用;缺少 unix socket 支援"
 
@@ -13923,7 +14411,7 @@
 
 #: builtin/describe.c:564
 msgid "consider <n> most recent tags (default: 10)"
-msgstr "考慮最近 <n> 個標籤(預設:10)"
+msgstr "考慮最近 <n> 個標籤(預設值:10)"
 
 #: builtin/describe.c:566
 msgid "only consider tags matching <pattern>"
@@ -13943,11 +14431,11 @@
 
 #: builtin/describe.c:572
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
-msgstr "對於髒工作區,追加 <標記>(預設:\"-dirty\")"
+msgstr "對於髒工作區,追加 <標記>(預設值:”-dirty\")"
 
 #: builtin/describe.c:575
 msgid "append <mark> on broken working tree (default: \"-broken\")"
-msgstr "對於損壞的工作區,追加 <標記>(預設:\"-broken\")"
+msgstr "對於損壞的工作區,追加 <標記>(預設值:”-broken\")"
 
 #: builtin/describe.c:593
 msgid "--long is incompatible with --abbrev=0"
@@ -13966,7 +14454,6 @@
 msgstr "--broken 與提交號不相容"
 
 #: builtin/diff-tree.c:155
-#| msgid "-p and --overlay are mutually exclusive"
 msgid "--stdin and --merge-base are mutually exclusive"
 msgstr "--stdin 和 --merge-base 互斥"
 
@@ -13974,70 +14461,70 @@
 msgid "--merge-base only works with two commits"
 msgstr "--merge-base 只對 2 個以上的提交有用"
 
-#: builtin/diff.c:91
+#: builtin/diff.c:92
 #, c-format
 msgid "'%s': not a regular file or symlink"
 msgstr "'%s':不是一個正規檔案或符號連結"
 
-#: builtin/diff.c:258
+#: builtin/diff.c:259
 #, c-format
 msgid "invalid option: %s"
 msgstr "無效選項:%s"
 
-#: builtin/diff.c:375
+#: builtin/diff.c:376
 #, c-format
 msgid "%s...%s: no merge base"
 msgstr "%s...%s: 無合併基底"
 
-#: builtin/diff.c:485
+#: builtin/diff.c:486
 msgid "Not a git repository"
 msgstr "不是一個 git 版本庫"
 
-#: builtin/diff.c:530 builtin/grep.c:681
+#: builtin/diff.c:532 builtin/grep.c:684
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "提供了無效物件 '%s'。"
 
-#: builtin/diff.c:541
+#: builtin/diff.c:543
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "提供了超過兩個資料物件:'%s'"
 
-#: builtin/diff.c:546
+#: builtin/diff.c:548
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "無法處理的物件 '%s'。"
 
-#: builtin/diff.c:580
+#: builtin/diff.c:582
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr "%s...%s:多個合併基底,使用 %s"
 
-#: builtin/difftool.c:30
+#: builtin/difftool.c:31
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<選項>] [<提交> [<提交>]] [--] [<路徑>...]"
 
-#: builtin/difftool.c:260
+#: builtin/difftool.c:261
 #, c-format
 msgid "failed: %d"
 msgstr "失敗:%d"
 
-#: builtin/difftool.c:302
+#: builtin/difftool.c:303
 #, c-format
 msgid "could not read symlink %s"
 msgstr "無法讀取符號連結 %s"
 
-#: builtin/difftool.c:304
+#: builtin/difftool.c:305
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "無法讀取符號連結檔案 %s"
 
-#: builtin/difftool.c:312
+#: builtin/difftool.c:313
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "無法讀取符號連結 %2$s 指向的物件 %1$s"
 
-#: builtin/difftool.c:412
+#: builtin/difftool.c:413
 msgid ""
 "combined diff formats('-c' and '--cc') are not supported in\n"
 "directory diff mode('-d' and '--dir-diff')."
@@ -14045,85 +14532,85 @@
 "不支援在目錄比較模式('-d' 和 '--dir-diff')中採用組合差異格式('-c' 和 '--"
 "cc')。"
 
-#: builtin/difftool.c:633
+#: builtin/difftool.c:637
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "兩個檔案都被修改:'%s' 和 '%s'。"
 
-#: builtin/difftool.c:635
+#: builtin/difftool.c:639
 msgid "working tree file has been left."
 msgstr "工作區檔案被留了下來。"
 
-#: builtin/difftool.c:646
+#: builtin/difftool.c:650
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "暫存檔存在於 '%s'。"
 
-#: builtin/difftool.c:647
+#: builtin/difftool.c:651
 msgid "you may want to cleanup or recover these."
 msgstr "您可能想要清理或者復原它們。"
 
-#: builtin/difftool.c:696
+#: builtin/difftool.c:700
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "使用 `diff.guitool` 代替 `diff.tool`"
 
-#: builtin/difftool.c:698
+#: builtin/difftool.c:702
 msgid "perform a full-directory diff"
 msgstr "執行一個全目錄差異比較"
 
-#: builtin/difftool.c:700
+#: builtin/difftool.c:704
 msgid "do not prompt before launching a diff tool"
 msgstr "啟動差異比較工具之前不提示"
 
-#: builtin/difftool.c:705
+#: builtin/difftool.c:709
 msgid "use symlinks in dir-diff mode"
 msgstr "在 dir-diff 模式中使用符號連結"
 
-#: builtin/difftool.c:706
+#: builtin/difftool.c:710
 msgid "tool"
 msgstr "工具"
 
-#: builtin/difftool.c:707
+#: builtin/difftool.c:711
 msgid "use the specified diff tool"
 msgstr "使用指定的差異比較工具"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:713
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr "顯示可以用在 `--tool` 參數後的差異工具列表"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:716
 msgid ""
 "make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
 "code"
 msgstr "當執行 diff 工具返回非零離開碼時,使 'git-difftool' 離開"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:719
 msgid "specify a custom command for viewing diffs"
 msgstr "指定一個用於檢視差異的自訂指令"
 
-#: builtin/difftool.c:716
+#: builtin/difftool.c:720
 msgid "passed to `diff`"
 msgstr "傳遞給 `diff`"
 
-#: builtin/difftool.c:731
+#: builtin/difftool.c:735
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool 要求工作區或者 --no-index"
 
-#: builtin/difftool.c:738
+#: builtin/difftool.c:742
 msgid "--dir-diff is incompatible with --no-index"
 msgstr "--dir-diff 和 --no-index 不相容"
 
-#: builtin/difftool.c:741
+#: builtin/difftool.c:745
 msgid "--gui, --tool and --extcmd are mutually exclusive"
 msgstr "--gui、--tool 和 --extcmd 互斥"
 
-#: builtin/difftool.c:749
+#: builtin/difftool.c:753
 msgid "no <tool> given for --tool=<tool>"
 msgstr "沒有為 --tool=<工具> 參數提供 <工具>"
 
-#: builtin/difftool.c:756
+#: builtin/difftool.c:760
 msgid "no <cmd> given for --extcmd=<cmd>"
-msgstr "沒有為 --extcmd=<指令> 參數提供 <指令>"
+msgstr "沒有為 --extcmd=<命令> 參數提供 <命令>"
 
 #: builtin/env--helper.c:6
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
@@ -14182,40 +14669,40 @@
 msgstr "選擇使用備用編碼處理提交說明"
 
 #: builtin/fast-export.c:1208
-msgid "Dump marks to this file"
-msgstr "把標記儲存到這個檔案"
+msgid "dump marks to this file"
+msgstr "把標記傾印到這個檔案"
 
 #: builtin/fast-export.c:1210
-msgid "Import marks from this file"
+msgid "import marks from this file"
 msgstr "從這個檔案匯入標記"
 
 #: builtin/fast-export.c:1214
-msgid "Import marks from this file if it exists"
-msgstr "從該檔案匯入標記(如果存在的話)"
+msgid "import marks from this file if it exists"
+msgstr "如果這個檔案存在,則從檔案匯入標記"
 
 #: builtin/fast-export.c:1216
-msgid "Fake a tagger when tags lack one"
-msgstr "當標籤缺少標記者欄位時,假裝提供一個"
+msgid "fake a tagger when tags lack one"
+msgstr "當標籤缺少標記者欄位時假裝有一個"
 
 #: builtin/fast-export.c:1218
-msgid "Output full tree for each commit"
-msgstr "每次提交都輸出整個樹"
+msgid "output full tree for each commit"
+msgstr "每次提交都輸出整棵樹"
 
 #: builtin/fast-export.c:1220
-msgid "Use the done feature to terminate the stream"
-msgstr "使用 done 功能來終止流"
+msgid "use the done feature to terminate the stream"
+msgstr "使用 done 功能終止串流"
 
 #: builtin/fast-export.c:1221
-msgid "Skip output of blob data"
-msgstr "跳過資料物件的輸出"
+msgid "skip output of blob data"
+msgstr "略過資料物件資料的輸出"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1816
+#: builtin/fast-export.c:1222 builtin/log.c:1823
 msgid "refspec"
 msgstr "參照規格"
 
 #: builtin/fast-export.c:1223
-msgid "Apply refspec to exported refs"
-msgstr "對匯出的引用應用引用規格"
+msgid "apply refspec to exported refs"
+msgstr "對匯出的引用套用引用規格"
 
 #: builtin/fast-export.c:1224
 msgid "anonymize output"
@@ -14230,16 +14717,16 @@
 msgstr "在匿名輸出中將 <from> 轉換為 <to>"
 
 #: builtin/fast-export.c:1229
-msgid "Reference parents which are not in fast-export stream by object id"
-msgstr "引用父物件 ID 不在 fast-export 流中"
+msgid "reference parents which are not in fast-export stream by object id"
+msgstr "依物件 ID 參考不在 fast-export 串流中的引用父物件"
 
 #: builtin/fast-export.c:1231
-msgid "Show original object ids of blobs/commits"
-msgstr "顯示資料物件/提交的原始物件 ID"
+msgid "show original object ids of blobs/commits"
+msgstr "顯示資料物件及提交的原始物件 ID"
 
 #: builtin/fast-export.c:1233
-msgid "Label tags with mark ids"
-msgstr "對帶有標記 ID 的標籤做標記"
+msgid "label tags with mark ids"
+msgstr "為包含標記 ID 的標籤打上標記"
 
 #: builtin/fast-export.c:1256
 msgid "--anonymize-map without --anonymize does not make sense"
@@ -14278,7 +14765,7 @@
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "沒有 --allow-unsafe-features 時,禁止在輸入中使用 '%s' 功能"
 
-#: builtin/fetch-pack.c:241
+#: builtin/fetch-pack.c:242
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "已建立鎖定檔案,但尚未回報:%s"
@@ -14299,190 +14786,203 @@
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<選項>]"
 
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel 不能為負數"
 
-#: builtin/fetch.c:142 builtin/pull.c:185
+#: builtin/fetch.c:145 builtin/pull.c:185
 msgid "fetch from all remotes"
 msgstr "從所有的遠端抓取"
 
-#: builtin/fetch.c:144 builtin/pull.c:245
+#: builtin/fetch.c:147 builtin/pull.c:245
 msgid "set upstream for git pull/fetch"
 msgstr "為 git pull/fetch 設定上游"
 
-#: builtin/fetch.c:146 builtin/pull.c:188
+#: builtin/fetch.c:149 builtin/pull.c:188
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "追加到 .git/FETCH_HEAD 而不是覆蓋它"
 
-#: builtin/fetch.c:148 builtin/pull.c:191
+#: builtin/fetch.c:151
+msgid "use atomic transaction to update references"
+msgstr "使用原子事務更新參考"
+
+#: builtin/fetch.c:153 builtin/pull.c:191
 msgid "path to upload pack on remote end"
 msgstr "上傳包到遠端的路徑"
 
-#: builtin/fetch.c:149
+#: builtin/fetch.c:154
 msgid "force overwrite of local reference"
 msgstr "強制覆蓋本機引用"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:156
 msgid "fetch from multiple remotes"
 msgstr "從多個遠端抓取"
 
-#: builtin/fetch.c:153 builtin/pull.c:195
+#: builtin/fetch.c:158 builtin/pull.c:195
 msgid "fetch all tags and associated objects"
 msgstr "抓取所有的標籤和關聯物件"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:160
 msgid "do not fetch all tags (--no-tags)"
 msgstr "不抓取任何標籤(--no-tags)"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:162
 msgid "number of submodules fetched in parallel"
 msgstr "子模組取得的並發數"
 
-#: builtin/fetch.c:159 builtin/pull.c:198
+#: builtin/fetch.c:164
+msgid "modify the refspec to place all refs within refs/prefetch/"
+msgstr "修改參考規格 (refspec) 以便將所有參考 (refs) 放置在 refs/prefetch/ 中"
+
+#: builtin/fetch.c:166 builtin/pull.c:198
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "清除遠端已經不存在的分支的追蹤分支"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:168
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "清除遠端不存在的本機標籤,並且取代變更標籤"
 
 #  譯者:可選值,不能翻譯
-#: builtin/fetch.c:162 builtin/fetch.c:187 builtin/pull.c:122
+#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:170
 msgid "control recursive fetching of submodules"
 msgstr "控制子模組的遞迴抓取"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:175
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "將取得的參考寫入 FETCH_HEAD 檔案"
 
-#: builtin/fetch.c:169 builtin/pull.c:206
+#: builtin/fetch.c:176 builtin/pull.c:206
 msgid "keep downloaded pack"
 msgstr "保持下載包"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:178
 msgid "allow updating of HEAD ref"
 msgstr "允許更新 HEAD 引用"
 
-#: builtin/fetch.c:174 builtin/fetch.c:180 builtin/pull.c:209
+#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
 #: builtin/pull.c:218
 msgid "deepen history of shallow clone"
 msgstr "深化淺複製的歷史"
 
-#: builtin/fetch.c:176 builtin/pull.c:212
+#: builtin/fetch.c:183 builtin/pull.c:212
 msgid "deepen history of shallow repository based on time"
 msgstr "基於時間來深化淺複製的歷史"
 
-#: builtin/fetch.c:182 builtin/pull.c:221
+#: builtin/fetch.c:189 builtin/pull.c:221
 msgid "convert to a complete repository"
 msgstr "轉換為一個完整的版本庫"
 
-#: builtin/fetch.c:185
+#: builtin/fetch.c:192
 msgid "prepend this to submodule path output"
 msgstr "在子模組路徑輸出的前面加上此目錄"
 
-#: builtin/fetch.c:188
+#: builtin/fetch.c:195
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr "遞迴取得子模組的預設值(比設定檔案優先度低)"
 
-#: builtin/fetch.c:192 builtin/pull.c:224
+#: builtin/fetch.c:199 builtin/pull.c:224
 msgid "accept refs that update .git/shallow"
 msgstr "接受更新 .git/shallow 的引用"
 
-#: builtin/fetch.c:193 builtin/pull.c:226
+#: builtin/fetch.c:200 builtin/pull.c:226
 msgid "refmap"
 msgstr "引用映射"
 
-#: builtin/fetch.c:194 builtin/pull.c:227
+#: builtin/fetch.c:201 builtin/pull.c:227
 msgid "specify fetch refmap"
 msgstr "指定取得動作的引用映射"
 
-#: builtin/fetch.c:201 builtin/pull.c:240
+#: builtin/fetch.c:208 builtin/pull.c:240
 msgid "report that we have only objects reachable from this object"
 msgstr "報告我們只擁有從該物件開始可以取得的物件"
 
-#: builtin/fetch.c:204 builtin/fetch.c:206
+#: builtin/fetch.c:210
+#, fuzzy
+msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
+msgstr "不取得包檔案。反之,輸出 negotiation tips 的祖先"
+
+#: builtin/fetch.c:213 builtin/fetch.c:215
 msgid "run 'maintenance --auto' after fetching"
 msgstr "取得 (fetch) 後執行 'maintenance --auto'"
 
-#: builtin/fetch.c:208 builtin/pull.c:243
+#: builtin/fetch.c:217 builtin/pull.c:243
 msgid "check for forced-updates on all updated branches"
 msgstr "在所有更新分支上檢查強制更新"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:219
 msgid "write the commit-graph after fetching"
 msgstr "抓取後寫入分支圖"
 
-#: builtin/fetch.c:212
+#: builtin/fetch.c:221
 msgid "accept refspecs from stdin"
 msgstr "從標準輸入中接受引用表達式"
 
-#: builtin/fetch.c:523
+#: builtin/fetch.c:586
 msgid "Couldn't find remote ref HEAD"
 msgstr "無法發現遠端 HEAD 引用"
 
-#: builtin/fetch.c:677
+#: builtin/fetch.c:757
 #, c-format
 msgid "configuration fetch.output contains invalid value %s"
 msgstr "設定變數 fetch.output 包含無效值 %s"
 
-#: builtin/fetch.c:775
+#: builtin/fetch.c:856
 #, c-format
 msgid "object %s not found"
 msgstr "物件 %s 未發現"
 
-#: builtin/fetch.c:779
+#: builtin/fetch.c:860
 msgid "[up to date]"
 msgstr "[最新]"
 
-#: builtin/fetch.c:792 builtin/fetch.c:808 builtin/fetch.c:880
+#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
 msgid "[rejected]"
 msgstr "[已拒絕]"
 
-#: builtin/fetch.c:793
+#: builtin/fetch.c:874
 msgid "can't fetch in current branch"
 msgstr "目前分支下不能執行取得動作"
 
-#: builtin/fetch.c:803
+#: builtin/fetch.c:884
 msgid "[tag update]"
 msgstr "[標籤更新]"
 
-#: builtin/fetch.c:804 builtin/fetch.c:841 builtin/fetch.c:863
-#: builtin/fetch.c:875
+#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
+#: builtin/fetch.c:956
 msgid "unable to update local ref"
 msgstr "不能更新本機引用"
 
-#: builtin/fetch.c:808
+#: builtin/fetch.c:889
 msgid "would clobber existing tag"
 msgstr "會破壞現有的標籤"
 
-#: builtin/fetch.c:830
+#: builtin/fetch.c:911
 msgid "[new tag]"
 msgstr "[新標籤]"
 
-#: builtin/fetch.c:833
+#: builtin/fetch.c:914
 msgid "[new branch]"
 msgstr "[新分支]"
 
-#: builtin/fetch.c:836
+#: builtin/fetch.c:917
 msgid "[new ref]"
 msgstr "[新引用]"
 
-#: builtin/fetch.c:875
+#: builtin/fetch.c:956
 msgid "forced update"
 msgstr "強制更新"
 
-#: builtin/fetch.c:880
+#: builtin/fetch.c:961
 msgid "non-fast-forward"
 msgstr "非快轉"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:1065
 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"
@@ -14492,7 +14992,7 @@
 "要重新啟用,請使用 '--show-forced-updates' 選項或執行\n"
 "'git config fetch.showForcedUpdates true'。"
 
-#: builtin/fetch.c:905
+#: builtin/fetch.c:1069
 #, c-format
 msgid ""
 "It took %.2f seconds to check forced updates. You can use\n"
@@ -14503,22 +15003,22 @@
 "花了 %.2f 秒來檢查強制更新。您可以使用 '--no-show-forced-updates'\n"
 "或執行 'git config fetch.showForcedUpdates false' 以避免此項檢查。\n"
 
-#: builtin/fetch.c:939
+#: builtin/fetch.c:1101
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s 未傳送所有必需的物件\n"
 
-#: builtin/fetch.c:960
+#: builtin/fetch.c:1129
 #, c-format
 msgid "reject %s because shallow roots are not allowed to be updated"
 msgstr "拒絕 %s 因為淺複製不允許被更新"
 
-#: builtin/fetch.c:1053 builtin/fetch.c:1191
+#: builtin/fetch.c:1206 builtin/fetch.c:1357
 #, c-format
 msgid "From %.*s\n"
 msgstr "來自 %.*s\n"
 
-#: builtin/fetch.c:1064
+#: builtin/fetch.c:1228
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14528,57 +15028,57 @@
 " 'git remote prune %s' 來刪除舊的、有衝突的分支"
 
 #  譯者:請維持前導空格
-#: builtin/fetch.c:1161
+#: builtin/fetch.c:1327
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s 將成為懸空狀態)"
 
 #  譯者:請維持前導空格
-#: builtin/fetch.c:1162
+#: builtin/fetch.c:1328
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s 已成為懸空狀態)"
 
-#: builtin/fetch.c:1194
+#: builtin/fetch.c:1360
 msgid "[deleted]"
 msgstr "[已刪除]"
 
-#: builtin/fetch.c:1195 builtin/remote.c:1118
+#: builtin/fetch.c:1361 builtin/remote.c:1118
 msgid "(none)"
 msgstr "(無)"
 
-#: builtin/fetch.c:1218
+#: builtin/fetch.c:1384
 #, c-format
 msgid "Refusing to fetch into current branch %s of non-bare repository"
 msgstr "拒絕取得到非純版本庫的目前分支 %s"
 
-#: builtin/fetch.c:1237
+#: builtin/fetch.c:1403
 #, c-format
 msgid "Option \"%s\" value \"%s\" is not valid for %s"
 msgstr "選項 \"%s\" 的值 \"%s\" 對於 %s 是無效的"
 
-#: builtin/fetch.c:1240
+#: builtin/fetch.c:1406
 #, c-format
 msgid "Option \"%s\" is ignored for %s\n"
 msgstr "選項 \"%s\" 為 %s 所忽略\n"
 
-#: builtin/fetch.c:1448
+#: builtin/fetch.c:1618
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "檢測到多分支,和 --set-upstream 不相容"
 
-#: builtin/fetch.c:1463
+#: builtin/fetch.c:1633
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "沒有為一個遠端追蹤分支設定上游"
 
-#: builtin/fetch.c:1465
+#: builtin/fetch.c:1635
 msgid "not setting upstream for a remote tag"
 msgstr "沒有為一個遠端標籤設定上游"
 
-#: builtin/fetch.c:1467
+#: builtin/fetch.c:1637
 msgid "unknown branch type"
 msgstr "未知的分支類型"
 
-#: builtin/fetch.c:1469
+#: builtin/fetch.c:1639
 msgid ""
 "no source branch found.\n"
 "you need to specify exactly one branch with the --set-upstream option."
@@ -14586,71 +15086,83 @@
 "未發現源分支。\n"
 "您需要使用 --set-upstream 選項指定一個分支。"
 
-#: builtin/fetch.c:1598 builtin/fetch.c:1661
+#: builtin/fetch.c:1768 builtin/fetch.c:1831
 #, c-format
 msgid "Fetching %s\n"
 msgstr "正在取得 %s\n"
 
-#: builtin/fetch.c:1608 builtin/fetch.c:1663 builtin/remote.c:101
+#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
 #, c-format
 msgid "Could not fetch %s"
 msgstr "不能取得 %s"
 
-#: builtin/fetch.c:1620
+#: builtin/fetch.c:1790
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "無法取得 '%s'(離開碼:%d)\n"
 
-#: builtin/fetch.c:1724
+#: builtin/fetch.c:1894
 msgid ""
 "No remote repository specified.  Please, specify either a URL or a\n"
 "remote name from which new revisions should be fetched."
 msgstr "未指定遠端版本庫。請透過一個 URL 或遠端版本庫名指定,用以取得新提交。"
 
-#: builtin/fetch.c:1760
+#: builtin/fetch.c:1930
 msgid "You need to specify a tag name."
 msgstr "您需要指定一個標籤名稱。"
 
-#: builtin/fetch.c:1825
+#: builtin/fetch.c:1995
 msgid "Negative depth in --deepen is not supported"
 msgstr "--deepen 不支援負數深度"
 
-#: builtin/fetch.c:1827
+#: builtin/fetch.c:1997
 msgid "--deepen and --depth are mutually exclusive"
 msgstr "--deepen 和 --depth 是互斥的"
 
-#: builtin/fetch.c:1832
+#: builtin/fetch.c:2002
 msgid "--depth and --unshallow cannot be used together"
 msgstr "--depth 和 --unshallow 不能同時使用"
 
-#: builtin/fetch.c:1834
+#: builtin/fetch.c:2004
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "對於一個完整的版本庫,參數 --unshallow 沒有意義"
 
-#: builtin/fetch.c:1851
+#: builtin/fetch.c:2021
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all 不能帶一個版本庫參數"
 
-#: builtin/fetch.c:1853
+#: builtin/fetch.c:2023
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all 帶引用規格沒有任何意義"
 
-#: builtin/fetch.c:1862
+#: builtin/fetch.c:2032
 #, c-format
 msgid "No such remote or remote group: %s"
 msgstr "沒有這樣的遠端或遠端組:%s"
 
-#: builtin/fetch.c:1869
+#: builtin/fetch.c:2039
 msgid "Fetching a group and specifying refspecs does not make sense"
 msgstr "取得組並指定引用規格沒有意義"
 
-#: builtin/fetch.c:1887
+#: builtin/fetch.c:2055
+msgid "must supply remote when using --negotiate-only"
+msgstr "使用 --negotiate-only 時必須提供遠端"
+
+#: builtin/fetch.c:2060
+msgid "Protocol does not support --negotiate-only, exiting."
+msgstr "協定不支援 --negotiate-only,結束。"
+
+#: builtin/fetch.c:2079
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr "只可以將 --filter 用於在 extensions.partialClone 中設定的遠端版本庫"
 
-#: builtin/fetch.c:1891
+#: builtin/fetch.c:2083
+msgid "--atomic can only be used when fetching from one remote"
+msgstr "--stdin 只能在擷取 (fetch) 一個遠端時使用"
+
+#: builtin/fetch.c:2087
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin 只能在取得一個遠端時使用"
 
@@ -14695,47 +15207,47 @@
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<提交>]] [--no-contains [<提交>]]"
 
-#: builtin/for-each-ref.c:28
+#: builtin/for-each-ref.c:30
 msgid "quote placeholders suitably for shells"
 msgstr "引用占位符適用於 shells"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:32
 msgid "quote placeholders suitably for perl"
 msgstr "引用占位符適用於 perl"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:34
 msgid "quote placeholders suitably for python"
 msgstr "引用占位符適用於 python"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:36
 msgid "quote placeholders suitably for Tcl"
 msgstr "引用占位符適用於 Tcl"
 
-#: builtin/for-each-ref.c:37
+#: builtin/for-each-ref.c:39
 msgid "show only <n> matched refs"
 msgstr "只顯示 <n> 個符合的引用"
 
-#: builtin/for-each-ref.c:39 builtin/tag.c:440
+#: builtin/for-each-ref.c:41 builtin/tag.c:483
 msgid "respect format colors"
 msgstr "遵照格式中的顏色輸出"
 
-#: builtin/for-each-ref.c:42
+#: builtin/for-each-ref.c:44
 msgid "print only refs which points at the given object"
 msgstr "只列印指向提供物件的引用"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:46
 msgid "print only refs that are merged"
 msgstr "只列印已經合併的引用"
 
-#: builtin/for-each-ref.c:45
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are not merged"
 msgstr "只列印沒有合併的引用"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:48
 msgid "print only refs which contain the commit"
 msgstr "只列印包含該提交的引用"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:49
 msgid "print only refs which don't contain the commit"
 msgstr "只列印不包含該提交的引用"
 
@@ -14744,7 +15256,6 @@
 msgstr "git for-each-repo --config=<設定> <命令引數>"
 
 #: builtin/for-each-repo.c:37
-#| msgid "conflicted"
 msgid "config"
 msgstr "config"
 
@@ -14756,32 +15267,32 @@
 msgid "missing --config=<config>"
 msgstr "缺少 --config=<設定>"
 
-#: builtin/fsck.c:69 builtin/fsck.c:148 builtin/fsck.c:149
+#: builtin/fsck.c:69 builtin/fsck.c:127 builtin/fsck.c:128
 msgid "unknown"
 msgstr "未知"
 
 #. TRANSLATORS: e.g. error in tree 01bfda: <more explanation>
-#: builtin/fsck.c:101 builtin/fsck.c:121
+#: builtin/fsck.c:78 builtin/fsck.c:100
 #, c-format
 msgid "error in %s %s: %s"
 msgstr "%s %s 錯誤:%s"
 
 #. TRANSLATORS: e.g. warning in tree 01bfda: <more explanation>
-#: builtin/fsck.c:115
+#: builtin/fsck.c:94
 #, c-format
 msgid "warning in %s %s: %s"
 msgstr "%s %s 警告:%s"
 
-#: builtin/fsck.c:144 builtin/fsck.c:147
+#: builtin/fsck.c:123 builtin/fsck.c:126
 #, c-format
 msgid "broken link from %7s %s"
 msgstr "來自 %7s %s 的損壞的連結"
 
-#: builtin/fsck.c:156
+#: builtin/fsck.c:135
 msgid "wrong object type in link"
 msgstr "連結中錯誤的物件類型"
 
-#: builtin/fsck.c:172
+#: builtin/fsck.c:151
 #, c-format
 msgid ""
 "broken link from %7s %s\n"
@@ -14790,211 +15301,211 @@
 "損壞的連結來自於 %7s %s\n"
 "              到 %7s %s"
 
-#: builtin/fsck.c:283
+#: builtin/fsck.c:263
 #, c-format
 msgid "missing %s %s"
 msgstr "缺少 %s %s"
 
-#: builtin/fsck.c:310
+#: builtin/fsck.c:290
 #, c-format
 msgid "unreachable %s %s"
 msgstr "無法取得 %s %s"
 
-#: builtin/fsck.c:330
+#: builtin/fsck.c:310
 #, c-format
 msgid "dangling %s %s"
 msgstr "懸空 %s %s"
 
-#: builtin/fsck.c:340
+#: builtin/fsck.c:320
 msgid "could not create lost-found"
 msgstr "不能建立 lost-found"
 
-#: builtin/fsck.c:351
+#: builtin/fsck.c:331
 #, c-format
 msgid "could not finish '%s'"
 msgstr "不能完成 '%s'"
 
-#: builtin/fsck.c:368
+#: builtin/fsck.c:348
 #, c-format
 msgid "Checking %s"
 msgstr "正在檢查 %s"
 
-#: builtin/fsck.c:406
+#: builtin/fsck.c:386
 #, c-format
 msgid "Checking connectivity (%d objects)"
 msgstr "正在檢查連通性(%d 個物件)"
 
-#: builtin/fsck.c:425
+#: builtin/fsck.c:405
 #, c-format
 msgid "Checking %s %s"
 msgstr "正在檢查 %s %s"
 
-#: builtin/fsck.c:430
+#: builtin/fsck.c:410
 msgid "broken links"
 msgstr "損壞的連結"
 
-#: builtin/fsck.c:439
+#: builtin/fsck.c:419
 #, c-format
 msgid "root %s"
 msgstr "根 %s"
 
-#: builtin/fsck.c:447
+#: builtin/fsck.c:427
 #, c-format
 msgid "tagged %s %s (%s) in %s"
-msgstr "標記 %s %s (%s) 於 %s"
+msgstr "已標記 %s %s (%s) 於 %s"
 
-#: builtin/fsck.c:476
+#: builtin/fsck.c:456
 #, c-format
 msgid "%s: object corrupt or missing"
 msgstr "%s:物件損壞或遺失"
 
-#: builtin/fsck.c:501
+#: builtin/fsck.c:481
 #, c-format
 msgid "%s: invalid reflog entry %s"
 msgstr "%s:無效的引用日誌條目 %s"
 
-#: builtin/fsck.c:515
+#: builtin/fsck.c:495
 #, c-format
 msgid "Checking reflog %s->%s"
 msgstr "正在檢查引用日誌 %s->%s"
 
-#: builtin/fsck.c:549
+#: builtin/fsck.c:529
 #, c-format
 msgid "%s: invalid sha1 pointer %s"
 msgstr "%s:無效的 sha1 指標 %s"
 
-#: builtin/fsck.c:556
+#: builtin/fsck.c:536
 #, c-format
 msgid "%s: not a commit"
 msgstr "%s:不是一個提交"
 
-#: builtin/fsck.c:610
+#: builtin/fsck.c:590
 msgid "notice: No default references"
 msgstr "注意:無預設引用"
 
-#: builtin/fsck.c:625
+#: builtin/fsck.c:605
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s:物件損壞或遺失:%s"
 
-#: builtin/fsck.c:638
+#: builtin/fsck.c:618
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s:不能解析物件:%s"
 
-#: builtin/fsck.c:658
+#: builtin/fsck.c:638
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "壞的 sha1 檔案:%s"
 
-#: builtin/fsck.c:673
+#: builtin/fsck.c:653
 msgid "Checking object directory"
 msgstr "正在檢查物件目錄"
 
-#: builtin/fsck.c:676
+#: builtin/fsck.c:656
 msgid "Checking object directories"
 msgstr "正在檢查物件目錄"
 
-#: builtin/fsck.c:691
+#: builtin/fsck.c:671
 #, c-format
 msgid "Checking %s link"
 msgstr "正在檢查 %s 連結"
 
-#: builtin/fsck.c:696 builtin/index-pack.c:865
+#: builtin/fsck.c:676 builtin/index-pack.c:866
 #, c-format
 msgid "invalid %s"
 msgstr "無效的 %s"
 
-#: builtin/fsck.c:703
+#: builtin/fsck.c:683
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s 指向奇怪的東西(%s)"
 
-#: builtin/fsck.c:709
+#: builtin/fsck.c:689
 #, c-format
 msgid "%s: detached HEAD points at nothing"
 msgstr "%s:分離開頭指標的指向不存在"
 
-#: builtin/fsck.c:713
+#: builtin/fsck.c:693
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
 msgstr "注意:%s 指向一個尚未誕生的分支(%s)"
 
-#: builtin/fsck.c:725
+#: builtin/fsck.c:705
 msgid "Checking cache tree"
 msgstr "正在檢查快取樹"
 
-#: builtin/fsck.c:730
+#: builtin/fsck.c:710
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s:cache-tree 中無效的 sha1 指標"
 
-#: builtin/fsck.c:739
+#: builtin/fsck.c:719
 msgid "non-tree in cache-tree"
 msgstr "cache-tree 中非樹狀物件"
 
-#: builtin/fsck.c:770
+#: builtin/fsck.c:750
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<選項>] [<物件>...]"
 
-#: builtin/fsck.c:776
+#: builtin/fsck.c:756
 msgid "show unreachable objects"
 msgstr "顯示無法取得的物件"
 
-#: builtin/fsck.c:777
+#: builtin/fsck.c:757
 msgid "show dangling objects"
 msgstr "顯示懸空的物件"
 
-#: builtin/fsck.c:778
+#: builtin/fsck.c:758
 msgid "report tags"
 msgstr "報告標籤"
 
-#: builtin/fsck.c:779
+#: builtin/fsck.c:759
 msgid "report root nodes"
 msgstr "報告根節點"
 
-#: builtin/fsck.c:780
+#: builtin/fsck.c:760
 msgid "make index objects head nodes"
 msgstr "將索引亦作為檢查的頭節點"
 
-#: builtin/fsck.c:781
+#: builtin/fsck.c:761
 msgid "make reflogs head nodes (default)"
 msgstr "將引用日誌作為檢查的頭節點(預設)"
 
-#: builtin/fsck.c:782
+#: builtin/fsck.c:762
 msgid "also consider packs and alternate objects"
 msgstr "也考慮包和備用物件"
 
-#: builtin/fsck.c:783
+#: builtin/fsck.c:763
 msgid "check only connectivity"
 msgstr "僅檢查連通性"
 
-#: builtin/fsck.c:784
+#: builtin/fsck.c:764 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "啟用更嚴格的檢查"
 
-#: builtin/fsck.c:786
+#: builtin/fsck.c:766
 msgid "write dangling objects in .git/lost-found"
 msgstr "將懸空物件寫入 .git/lost-found 中"
 
-#: builtin/fsck.c:787 builtin/prune.c:134
+#: builtin/fsck.c:767 builtin/prune.c:134
 msgid "show progress"
 msgstr "顯示進度"
 
-#: builtin/fsck.c:788
+#: builtin/fsck.c:768
 msgid "show verbose names for reachable objects"
 msgstr "顯示可以取得物件的詳細名稱"
 
-#: builtin/fsck.c:847 builtin/index-pack.c:261
+#: builtin/fsck.c:827 builtin/index-pack.c:262
 msgid "Checking objects"
 msgstr "正在檢查物件"
 
-#: builtin/fsck.c:875
+#: builtin/fsck.c:855
 #, c-format
 msgid "%s: object missing"
 msgstr "%s:物件缺少"
 
-#: builtin/fsck.c:886
+#: builtin/fsck.c:866
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "無效的參數:期望 sha1,得到 '%s'"
@@ -15003,27 +15514,27 @@
 msgid "git gc [<options>]"
 msgstr "git gc [<選項>]"
 
-#: builtin/gc.c:94
+#: builtin/gc.c:93
 #, c-format
 msgid "Failed to fstat %s: %s"
 msgstr "對 %s 呼叫 fstat 失敗:%s"
 
-#: builtin/gc.c:130
+#: builtin/gc.c:129
 #, c-format
 msgid "failed to parse '%s' value '%s'"
 msgstr "無法解析 '%s' 值 '%s'"
 
-#: builtin/gc.c:479 builtin/init-db.c:58
+#: builtin/gc.c:487 builtin/init-db.c:57
 #, c-format
 msgid "cannot stat '%s'"
 msgstr "不能對 '%s' 呼叫 stat"
 
-#: builtin/gc.c:488 builtin/notes.c:240 builtin/tag.c:530
+#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
 #, c-format
 msgid "cannot read '%s'"
 msgstr "不能讀取 '%s'"
 
-#: builtin/gc.c:495
+#: builtin/gc.c:503
 #, c-format
 msgid ""
 "The last gc run reported the following. Please correct the root cause\n"
@@ -15037,197 +15548,218 @@
 "\n"
 "%s"
 
-#: builtin/gc.c:543
+#: builtin/gc.c:551
 msgid "prune unreferenced objects"
 msgstr "清除未引用的物件"
 
-#: builtin/gc.c:545
+#: builtin/gc.c:553
 msgid "be more thorough (increased runtime)"
 msgstr "更徹底(增加執行時間)"
 
-#: builtin/gc.c:546
+#: builtin/gc.c:554
 msgid "enable auto-gc mode"
 msgstr "啟用自動垃圾回收模式"
 
-#: builtin/gc.c:549
+#: builtin/gc.c:557
 msgid "force running gc even if there may be another gc running"
 msgstr "強制執行 gc 即使另外一個 gc 正在執行"
 
-#: builtin/gc.c:552
+#: builtin/gc.c:560
 msgid "repack all other packs except the largest pack"
 msgstr "除了最大的包之外,對所有其它包檔案重新打包"
 
-#: builtin/gc.c:569
+#: builtin/gc.c:576
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "解析 gc.logexpiry 的值 %s 失敗"
 
-#: builtin/gc.c:580
+#: builtin/gc.c:587
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "解析清除期限值 %s 失敗"
 
-#: builtin/gc.c:600
+#: builtin/gc.c:607
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr "自動在後台執行版本庫打包以求最佳性能。\n"
 
-#: builtin/gc.c:602
+#: builtin/gc.c:609
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "自動打包版本庫以求最佳性能。\n"
 
-#: builtin/gc.c:603
+#: builtin/gc.c:610
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "手動維護參見 \"git help gc\"。\n"
 
-#: builtin/gc.c:643
+#: builtin/gc.c:650
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr "gc 已在「%s」機器 pid %<PRIuMAX> 執行(如果不是,使用 --force)"
 
-#: builtin/gc.c:698
+#: builtin/gc.c:705
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr "有太多無法取得的鬆散物件,執行 'git prune' 刪除它們。"
 
-#: builtin/gc.c:708
-#| msgid "git maintenance run [--auto] [--[no-]quiet] [--task=<task>]"
+#: builtin/gc.c:715
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<作業>] [--schedule]"
 
-#: builtin/gc.c:738
+#: builtin/gc.c:745
 msgid "--no-schedule is not allowed"
 msgstr "不允許 --no-schedule"
 
-#: builtin/gc.c:743
+#: builtin/gc.c:750
 #, c-format
-#| msgid "unrecognized --split argument, %s"
 msgid "unrecognized --schedule argument '%s'"
 msgstr "無法識別的 --schedule 引數 '%s'"
 
-#: builtin/gc.c:862
+#: builtin/gc.c:869
 msgid "failed to write commit-graph"
 msgstr "無法寫入提交圖形"
 
-#: builtin/gc.c:901
-msgid "failed to fill remotes"
-msgstr "無法填充遠端位置"
+#: builtin/gc.c:905
+msgid "failed to prefetch remotes"
+msgstr "無法預先取得遠端"
 
-#: builtin/gc.c:1024
+#: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
 msgstr "無法啟動 ‘git pack-objects’ 處理程序"
 
-#: builtin/gc.c:1041
-#| msgid "could not finish pack-objects"
+#: builtin/gc.c:1039
 msgid "failed to finish 'git pack-objects' process"
 msgstr "無法完成 ‘git pack-objects’ 處理程序"
 
-#: builtin/gc.c:1093
+#: builtin/gc.c:1091
 msgid "failed to write multi-pack-index"
 msgstr "無法寫入多包索引"
 
-#: builtin/gc.c:1111
-#| msgid "multi-pack-index file exists, but failed to parse"
+#: builtin/gc.c:1109
 msgid "'git multi-pack-index expire' failed"
 msgstr "'git multi-pack-index expire' 失敗"
 
-#: builtin/gc.c:1172
-#| msgid "failed to load pack-index for packfile %s"
+#: builtin/gc.c:1170
 msgid "'git multi-pack-index repack' failed"
 msgstr "'git multi-pack-index repack' 失敗"
 
-#: builtin/gc.c:1181
+#: builtin/gc.c:1179
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr "略過增量重新打包工作,因為 core.multiPackIndex 已被停用"
 
-#: builtin/gc.c:1279
+#: builtin/gc.c:1283
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr "已存在 '%s' 鎖定檔案,略過維護"
 
-#: builtin/gc.c:1309
+#: builtin/gc.c:1313
 #, c-format
 msgid "task '%s' failed"
 msgstr "作業 '%s' 失敗"
 
-#: builtin/gc.c:1389
+#: builtin/gc.c:1395
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' 非有效作業"
 
-#: builtin/gc.c:1394
+#: builtin/gc.c:1400
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "不能多次選取 '%s' 作業"
 
-#: builtin/gc.c:1409
+#: builtin/gc.c:1415
 msgid "run tasks based on the state of the repository"
 msgstr "基於版本庫狀態執行作業"
 
-#: builtin/gc.c:1410
+#: builtin/gc.c:1416
 msgid "frequency"
 msgstr "frequency"
 
-#: builtin/gc.c:1411
+#: builtin/gc.c:1417
 msgid "run tasks based on frequency"
 msgstr "依據頻率執行工作"
 
-#: builtin/gc.c:1414
+#: builtin/gc.c:1420
 msgid "do not report progress or other information over stderr"
 msgstr "不要在 stderr 輸出進度或其他資訊"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1421
 msgid "task"
 msgstr "作業"
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1422
 msgid "run a specific task"
 msgstr "執行指定作業"
 
-#: builtin/gc.c:1433
+#: builtin/gc.c:1439
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr "--auto 和 --schedule=<頻率> 請任選一"
 
-#: builtin/gc.c:1467
+#: builtin/gc.c:1482
 msgid "failed to run 'git config'"
 msgstr "無法執行 ‘git config’"
 
-#: builtin/gc.c:1512
-msgid "another process is scheduling background maintenance"
-msgstr "其他處理程序正在排定背景維護工作"
+#: builtin/gc.c:1547
+#, c-format
+msgid "failed to expand path '%s'"
+msgstr "無法展開「%s」路徑"
 
-#: builtin/gc.c:1525
+#: builtin/gc.c:1576
+msgid "failed to start launchctl"
+msgstr "無法啟動 launchctl"
+
+#: builtin/gc.c:1613
+#, c-format
+msgid "failed to create directories for '%s'"
+msgstr "無法建立「%s」的目錄"
+
+#: builtin/gc.c:1674
+#, c-format
+msgid "failed to bootstrap service %s"
+msgstr "無法啟動載入 %s 服務"
+
+#: builtin/gc.c:1745
+msgid "failed to create temp xml file"
+msgstr "無法建立暫存 XML 檔案"
+
+#: builtin/gc.c:1835
+msgid "failed to start schtasks"
+msgstr "無法啟動 schtasks"
+
+#: builtin/gc.c:1879
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
 msgstr "無法執行 “crontab -l”;您的系統可能不支援 “cron”"
 
-#: builtin/gc.c:1544
+#: builtin/gc.c:1896
 msgid "failed to run 'crontab'; your system might not support 'cron'"
 msgstr "無法執行 “crontab”;您的系統可能不支援 “cron”"
 
-#: builtin/gc.c:1550
+#: builtin/gc.c:1900
 msgid "failed to open stdin of 'crontab'"
 msgstr "無法開啟 ‘crontab’ 的標準輸入"
 
-#: builtin/gc.c:1592
+#: builtin/gc.c:1942
 msgid "'crontab' died"
 msgstr "“crontab” 結束運作"
 
-#: builtin/gc.c:1605
+#: builtin/gc.c:1976
+msgid "another process is scheduling background maintenance"
+msgstr "其他處理程序正在排定背景維護工作"
+
+#: builtin/gc.c:2000
 msgid "failed to add repo to global config"
 msgstr "無法將版本庫加至全域設定"
 
-#: builtin/gc.c:1615
-#| msgid "git maintenance run [<options>]"
+#: builtin/gc.c:2010
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <子命令> [<選項>]"
 
-#: builtin/gc.c:1634
+#: builtin/gc.c:2029
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "無效子命令:%s"
@@ -15236,12 +15768,12 @@
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<選項>] [-e] <模式> [<版本>...] [[--] <路徑>...]"
 
-#: builtin/grep.c:225
+#: builtin/grep.c:223
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep:無法建立執行緒:%s"
 
-#: builtin/grep.c:279
+#: builtin/grep.c:277
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "為 %2$s 設定的執行緒數 (%1$d) 無效"
@@ -15250,204 +15782,200 @@
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:287 builtin/index-pack.c:1576 builtin/index-pack.c:1766
-#: builtin/pack-objects.c:2936
+#: builtin/grep.c:285 builtin/index-pack.c:1590 builtin/index-pack.c:1793
+#: builtin/pack-objects.c:2969
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "沒有執行緒支援,忽略 %s"
 
-#: builtin/grep.c:475 builtin/grep.c:600 builtin/grep.c:640
+#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "無法讀取樹(%s)"
 
-#: builtin/grep.c:655
+#: builtin/grep.c:658
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "無法抓取來自於 %s 類型的物件"
 
-#: builtin/grep.c:736
+#: builtin/grep.c:739
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "開關 `%c' 期望一個數字值"
 
-#: builtin/grep.c:835
+#: builtin/grep.c:838
 msgid "search in index instead of in the work tree"
 msgstr "在索引區搜尋而不是在工作區"
 
-#: builtin/grep.c:837
+#: builtin/grep.c:840
 msgid "find in contents not managed by git"
 msgstr "在未被 git 管理的內容中尋找"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: builtin/grep.c:839
+#: builtin/grep.c:842
 msgid "search in both tracked and untracked files"
 msgstr "在追蹤和未追蹤的檔案中搜尋"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:844
 msgid "ignore files specified via '.gitignore'"
 msgstr "忽略 '.gitignore' 包含的檔案"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:846
 msgid "recursively search in each submodule"
 msgstr "在每一個子模組中遞迴搜尋"
 
-#: builtin/grep.c:846
+#: builtin/grep.c:849
 msgid "show non-matching lines"
 msgstr "顯示未符合的行"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:851
 msgid "case insensitive matching"
 msgstr "不區分大小寫符合"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:853
 msgid "match patterns only at word boundaries"
 msgstr "只在單詞邊界符合模式"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:855
 msgid "process binary files as text"
 msgstr "把二進位檔案當做文字處理"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:857
 msgid "don't match patterns in binary files"
 msgstr "不在二進位檔案中符合模式"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:860
 msgid "process binary files with textconv filters"
 msgstr "用 textconv 過濾器處理二進位檔案"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:862
 msgid "search in subdirectories (default)"
 msgstr "在子目錄中尋找(預設)"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:864
 msgid "descend at most <depth> levels"
 msgstr "最多以指定的深度向下尋找"
 
-#: builtin/grep.c:865
+#: builtin/grep.c:868
 msgid "use extended POSIX regular expressions"
 msgstr "使用擴展的 POSIX 正規表示式"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:871
 msgid "use basic POSIX regular expressions (default)"
 msgstr "使用基本的 POSIX 正規表示式(預設)"
 
-#: builtin/grep.c:871
+#: builtin/grep.c:874
 msgid "interpret patterns as fixed strings"
 msgstr "把模式解析為固定的字串"
 
-#: builtin/grep.c:874
+#: builtin/grep.c:877
 msgid "use Perl-compatible regular expressions"
 msgstr "使用 Perl 相容的正規表示式"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:880
 msgid "show line numbers"
 msgstr "顯示行號"
 
-#: builtin/grep.c:878
+#: builtin/grep.c:881
 msgid "show column number of first match"
 msgstr "顯示第一個符合的列號"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:882
 msgid "don't show filenames"
 msgstr "不顯示檔案名"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:883
 msgid "show filenames"
 msgstr "顯示檔案名"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:885
 msgid "show filenames relative to top directory"
 msgstr "顯示相對於頂級目錄的檔案名"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:887
 msgid "show only filenames instead of matching lines"
 msgstr "只顯示檔案名而不顯示符合的行"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:889
 msgid "synonym for --files-with-matches"
 msgstr "和 --files-with-matches 同義"
 
-#: builtin/grep.c:889
+#: builtin/grep.c:892
 msgid "show only the names of files without match"
 msgstr "只顯示未符合的檔案名"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:894
 msgid "print NUL after filenames"
 msgstr "在檔案名後輸出 NUL 字元"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:897
 msgid "show only matching parts of a line"
 msgstr "只顯示行中的符合的部分"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:899
 msgid "show the number of matches instead of matching lines"
 msgstr "顯示總符合行數,而不顯示符合的行"
 
-#: builtin/grep.c:897
+#: builtin/grep.c:900
 msgid "highlight matches"
 msgstr "高亮顯示符合項"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:902
 msgid "print empty line between matches from different files"
 msgstr "在不同檔案的符合項之間列印空行"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:904
 msgid "show filename only once above matches from same file"
 msgstr "只在同一檔案的符合項的上面顯示一次檔案名"
 
-#: builtin/grep.c:904
+#: builtin/grep.c:907
 msgid "show <n> context lines before and after matches"
 msgstr "顯示符合項前後的 <n> 行上下文"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:910
 msgid "show <n> context lines before matches"
 msgstr "顯示符合項前 <n> 行上下文"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:912
 msgid "show <n> context lines after matches"
 msgstr "顯示符合項後 <n> 行上下文"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:914
 msgid "use <n> worker threads"
 msgstr "使用 <n> 個工作執行緒"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:915
 msgid "shortcut for -C NUM"
 msgstr "快捷鍵 -C 數字"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:918
 msgid "show a line with the function name before matches"
 msgstr "在符合的前面顯示一行函數名"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:920
 msgid "show the surrounding function"
 msgstr "顯示所在函數的前後內容"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:923
 msgid "read patterns from file"
 msgstr "從檔案讀取模式"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:925
 msgid "match <pattern>"
 msgstr "符合 <模式>"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:927
 msgid "combine patterns specified with -e"
 msgstr "組合用 -e 參數設定的模式"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:939
 msgid "indicate hit with exit status without output"
 msgstr "不輸出,而用離開碼標記命中狀態"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:941
 msgid "show only matches from files that match all patterns"
 msgstr "只顯示符合所有模式的檔案中的符合"
 
-#: builtin/grep.c:940
-msgid "show parse tree for grep expression"
-msgstr "顯示 grep 表達式的解析樹"
-
 #: builtin/grep.c:944
 msgid "pager"
 msgstr "分頁"
@@ -15481,11 +16009,11 @@
 msgid "invalid option combination, ignoring --threads"
 msgstr "無效的選項組合,忽略 --threads"
 
-#: builtin/grep.c:1095 builtin/pack-objects.c:3655
+#: builtin/grep.c:1095 builtin/pack-objects.c:3930
 msgid "no threads support, ignoring --threads"
 msgstr "沒有執行緒支援,忽略 --threads"
 
-#: builtin/grep.c:1098 builtin/index-pack.c:1573 builtin/pack-objects.c:2933
+#: builtin/grep.c:1098 builtin/index-pack.c:1587 builtin/pack-objects.c:2966
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "指定的執行緒數無效(%d)"
@@ -15498,11 +16026,15 @@
 msgid "--cached or --untracked cannot be used with --no-index"
 msgstr "--cached 或 --untracked 不能與 --no-index 同時使用"
 
-#: builtin/grep.c:1164
+#: builtin/grep.c:1161
+msgid "--untracked cannot be used with --cached"
+msgstr "--untracked 不能與 --cached 一起使用"
+
+#: builtin/grep.c:1167
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard 不能用於已追蹤內容"
 
-#: builtin/grep.c:1172
+#: builtin/grep.c:1175
 msgid "both --cached and trees are given"
 msgstr "同時給出了 --cached 和樹狀物件"
 
@@ -15577,7 +16109,7 @@
 
 #: builtin/help.c:62
 msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
-msgstr "git help [--all] [--guides] [--man | --web | --info] [<指令>]"
+msgstr "git help [--all] [--guides] [--man | --web | --info] [<命令>]"
 
 #: builtin/help.c:163
 #, c-format
@@ -15633,12 +16165,12 @@
 msgid "no info viewer handled the request"
 msgstr "沒有 info 檢視器處理此請求"
 
-#: builtin/help.c:520 builtin/help.c:531 git.c:337
+#: builtin/help.c:520 builtin/help.c:531 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' 是 '%s' 的別名"
 
-#: builtin/help.c:534 git.c:369
+#: builtin/help.c:534 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "壞的 alias.%s 字串:%s"
@@ -15652,386 +16184,386 @@
 msgid "'git help config' for more information"
 msgstr "'git help config' 取得更多訊息"
 
-#: builtin/index-pack.c:221
+#: builtin/index-pack.c:222
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "%s 的物件類型不符合"
 
-#: builtin/index-pack.c:241
+#: builtin/index-pack.c:242
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "未能取得預期的物件 %s"
 
-#: builtin/index-pack.c:244
+#: builtin/index-pack.c:245
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "物件 %s:應為類型 %s,卻是 %s"
 
-#: builtin/index-pack.c:294
+#: builtin/index-pack.c:295
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "無法填充 %d 位元組"
 
-#: builtin/index-pack.c:304
+#: builtin/index-pack.c:305
 msgid "early EOF"
 msgstr "過早的檔案結束符(EOF)"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:306
 msgid "read error on input"
 msgstr "輸入上的讀錯誤"
 
-#: builtin/index-pack.c:317
+#: builtin/index-pack.c:318
 msgid "used more bytes than were available"
 msgstr "用掉了超過可用的位元組"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:619
+#: builtin/index-pack.c:325 builtin/pack-objects.c:624
 msgid "pack too large for current definition of off_t"
 msgstr "包太大超過了目前 off_t 的定義"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
+#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
 msgid "pack exceeds maximum allowed size"
 msgstr "包超過了最大允許值"
 
-#: builtin/index-pack.c:342 builtin/repack.c:286
+#: builtin/index-pack.c:343
 #, c-format
 msgid "unable to create '%s'"
 msgstr "不能建立 '%s'"
 
-#: builtin/index-pack.c:348
+#: builtin/index-pack.c:349
 #, c-format
 msgid "cannot open packfile '%s'"
 msgstr "無法開啟 packfile '%s'"
 
-#: builtin/index-pack.c:362
+#: builtin/index-pack.c:363
 msgid "pack signature mismatch"
 msgstr "包簽名不符合"
 
-#: builtin/index-pack.c:364
+#: builtin/index-pack.c:365
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "不支援包版本 %<PRIu32>"
 
-#: builtin/index-pack.c:382
+#: builtin/index-pack.c:383
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "包中有錯誤的物件位於位移量 %<PRIuMAX>:%s"
 
-#: builtin/index-pack.c:488
+#: builtin/index-pack.c:489
 #, c-format
 msgid "inflate returned %d"
 msgstr "解壓縮返回 %d"
 
-#: builtin/index-pack.c:537
+#: builtin/index-pack.c:538
 msgid "offset value overflow for delta base object"
 msgstr "位移值覆蓋了 delta 基準物件"
 
-#: builtin/index-pack.c:545
+#: builtin/index-pack.c:546
 msgid "delta base offset is out of bound"
 msgstr "delta 基準位移越界"
 
-#: builtin/index-pack.c:553
+#: builtin/index-pack.c:554
 #, c-format
 msgid "unknown object type %d"
 msgstr "未知物件類型 %d"
 
-#: builtin/index-pack.c:584
+#: builtin/index-pack.c:585
 msgid "cannot pread pack file"
 msgstr "無法讀取包檔案"
 
-#: builtin/index-pack.c:586
+#: builtin/index-pack.c:587
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "包檔案過早結束,缺少 %<PRIuMAX> 位元組"
 
-#: builtin/index-pack.c:612
+#: builtin/index-pack.c:613
 msgid "serious inflate inconsistency"
 msgstr "解壓縮嚴重的不一致"
 
-#: builtin/index-pack.c:757 builtin/index-pack.c:763 builtin/index-pack.c:787
-#: builtin/index-pack.c:826 builtin/index-pack.c:835
+#: 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
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "發現 %s 出現 SHA1 衝突!"
 
-#: builtin/index-pack.c:760 builtin/pack-objects.c:171
+#: builtin/index-pack.c:761 builtin/pack-objects.c:171
 #: builtin/pack-objects.c:231 builtin/pack-objects.c:326
 #, c-format
 msgid "unable to read %s"
 msgstr "不能讀 %s"
 
-#: builtin/index-pack.c:824
+#: builtin/index-pack.c:825
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "不能讀取現存物件訊息 %s"
 
-#: builtin/index-pack.c:832
+#: builtin/index-pack.c:833
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "不能讀取現存物件 %s"
 
-#: builtin/index-pack.c:846
+#: builtin/index-pack.c:847
 #, c-format
 msgid "invalid blob object %s"
 msgstr "無效的資料物件 %s"
 
-#: builtin/index-pack.c:849 builtin/index-pack.c:868
+#: builtin/index-pack.c:850 builtin/index-pack.c:869
 msgid "fsck error in packed object"
 msgstr "對打包物件 fsck 檢查發生錯誤"
 
-#: builtin/index-pack.c:870
+#: builtin/index-pack.c:871
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "%s 的所有子物件並非都可以取得"
 
-#: builtin/index-pack.c:931 builtin/index-pack.c:978
+#: builtin/index-pack.c:932 builtin/index-pack.c:979
 msgid "failed to apply delta"
-msgstr "應用 delta 失敗"
+msgstr "套用 delta 失敗"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Receiving objects"
 msgstr "接收物件中"
 
-#: builtin/index-pack.c:1161
+#: builtin/index-pack.c:1162
 msgid "Indexing objects"
 msgstr "索引物件中"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1196
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "包衝突(SHA1 不符合)"
 
-#: builtin/index-pack.c:1200
+#: builtin/index-pack.c:1201
 msgid "cannot fstat packfile"
 msgstr "不能對 packfile 呼叫 fstat"
 
-#: builtin/index-pack.c:1203
+#: builtin/index-pack.c:1204
 msgid "pack has junk at the end"
 msgstr "包的結尾有垃圾資料"
 
-#: builtin/index-pack.c:1215
+#: builtin/index-pack.c:1216
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "parse_pack_objects() 中遇到不可理喻的問題"
 
-#: builtin/index-pack.c:1238
+#: builtin/index-pack.c:1239
 msgid "Resolving deltas"
 msgstr "處理 delta 中"
 
-#: builtin/index-pack.c:1249 builtin/pack-objects.c:2697
+#: builtin/index-pack.c:1250 builtin/pack-objects.c:2732
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "不能建立執行緒:%s"
 
-#: builtin/index-pack.c:1282
+#: builtin/index-pack.c:1283
 msgid "confusion beyond insanity"
 msgstr "不可理喻"
 
-#: builtin/index-pack.c:1288
+#: builtin/index-pack.c:1289
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "完成 %d 個本機物件"
 
-#: builtin/index-pack.c:1300
+#: builtin/index-pack.c:1301
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "對 %s 的尾部總和檢查出現意外(磁碟損壞?)"
 
-#: builtin/index-pack.c:1304
+#: builtin/index-pack.c:1305
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "包有 %d 個未解決的 delta"
 
-#: builtin/index-pack.c:1328
+#: builtin/index-pack.c:1329
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "不能壓縮附加物件(%d)"
 
-#: builtin/index-pack.c:1424
+#: builtin/index-pack.c:1425
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "本機物件 %s 已損壞"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1446
 #, c-format
-msgid "packfile name '%s' does not end with '.pack'"
-msgstr "packfile 名稱 '%s' 沒有以 '.pack' 結尾"
+msgid "packfile name '%s' does not end with '.%s'"
+msgstr "packfile 名稱「%s」的結尾不是「.%s」"
 
-#: builtin/index-pack.c:1469
+#: builtin/index-pack.c:1470
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "無法寫入 %s 檔案 '%s'"
 
-#: builtin/index-pack.c:1477
+#: builtin/index-pack.c:1478
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "無法關閉已寫入的 %s 檔案 '%s'"
 
-#: builtin/index-pack.c:1501
+#: builtin/index-pack.c:1504
 msgid "error while closing pack file"
 msgstr "關閉包檔案時發生錯誤"
 
-#: builtin/index-pack.c:1515
+#: builtin/index-pack.c:1518
 msgid "cannot store pack file"
 msgstr "無法儲存包檔案"
 
-#: builtin/index-pack.c:1523
+#: builtin/index-pack.c:1526
 msgid "cannot store index file"
 msgstr "無法儲存索引檔案"
 
-#: builtin/index-pack.c:1567 builtin/pack-objects.c:2944
+#: builtin/index-pack.c:1581 builtin/pack-objects.c:2977
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "壞的 pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1631
+#: builtin/index-pack.c:1651
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "無法開啟現存包檔案 '%s'"
 
-#: builtin/index-pack.c:1633
+#: builtin/index-pack.c:1653
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "無法為 %s 開啟包索引檔案"
 
-#: builtin/index-pack.c:1681
+#: builtin/index-pack.c:1701
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "非 delta:%d 個物件"
 
-#: builtin/index-pack.c:1688
+#: builtin/index-pack.c:1708
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "鏈長 = %d: %lu 物件"
 
-#: builtin/index-pack.c:1728
+#: builtin/index-pack.c:1750
 msgid "Cannot come back to cwd"
 msgstr "無法返回目前工作目錄"
 
-#: builtin/index-pack.c:1777 builtin/index-pack.c:1780
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1800
+#: builtin/index-pack.c:1804 builtin/index-pack.c:1807
+#: builtin/index-pack.c:1823 builtin/index-pack.c:1827
 #, c-format
 msgid "bad %s"
 msgstr "錯誤選項 %s"
 
-#: builtin/index-pack.c:1806 builtin/init-db.c:392 builtin/init-db.c:625
+#: builtin/index-pack.c:1833 builtin/init-db.c:378 builtin/init-db.c:613
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "未知的「%s」雜湊算法"
 
-#: builtin/index-pack.c:1821
+#: builtin/index-pack.c:1852
 msgid "--fix-thin cannot be used without --stdin"
 msgstr "--fix-thin 不能和 --stdin 同時使用"
 
-#: builtin/index-pack.c:1823
+#: builtin/index-pack.c:1854
 msgid "--stdin requires a git repository"
 msgstr "--stdin 需要一個 git 版本庫"
 
-#: builtin/index-pack.c:1825
+#: builtin/index-pack.c:1856
 msgid "--object-format cannot be used with --stdin"
 msgstr "--object-format 不能和 --stdin 同時使用"
 
-#: builtin/index-pack.c:1831
+#: builtin/index-pack.c:1871
 msgid "--verify with no packfile name given"
 msgstr "--verify 沒有提供 packfile 名稱參數"
 
-#: builtin/index-pack.c:1892 builtin/unpack-objects.c:582
+#: builtin/index-pack.c:1937 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "在打包物件中 fsck 檢查發生錯誤"
 
-#: builtin/init-db.c:64
+#: builtin/init-db.c:63
 #, c-format
 msgid "cannot stat template '%s'"
 msgstr "不能對範本 '%s' 呼叫 stat"
 
-#: builtin/init-db.c:69
+#: builtin/init-db.c:68
 #, c-format
 msgid "cannot opendir '%s'"
 msgstr "不能開啟目錄 '%s'"
 
-#: builtin/init-db.c:81
+#: builtin/init-db.c:80
 #, c-format
 msgid "cannot readlink '%s'"
 msgstr "不能讀取連結 '%s'"
 
-#: builtin/init-db.c:83
+#: builtin/init-db.c:82
 #, c-format
 msgid "cannot symlink '%s' '%s'"
 msgstr "不能自 '%s' 到 '%s' 建立符號連結"
 
-#: builtin/init-db.c:89
+#: builtin/init-db.c:88
 #, c-format
 msgid "cannot copy '%s' to '%s'"
 msgstr "不能複製 '%s' 至 '%s'"
 
-#: builtin/init-db.c:93
+#: builtin/init-db.c:92
 #, c-format
 msgid "ignoring template %s"
 msgstr "忽略範本 %s"
 
-#: builtin/init-db.c:124
+#: builtin/init-db.c:123
 #, c-format
 msgid "templates not found in %s"
 msgstr "沒有在 %s 中找到範本"
 
-#: builtin/init-db.c:139
+#: builtin/init-db.c:138
 #, c-format
 msgid "not copying templates from '%s': %s"
 msgstr "沒有從 '%s' 複製範本:%s"
 
-#: builtin/init-db.c:275
+#: builtin/init-db.c:262
 #, c-format
 msgid "invalid initial branch name: '%s'"
 msgstr "無效的初始分支名稱:'%s'"
 
-#: builtin/init-db.c:367
+#: builtin/init-db.c:353
 #, c-format
 msgid "unable to handle file type %d"
 msgstr "不能處理 %d 類型的檔案"
 
-#: builtin/init-db.c:370
+#: builtin/init-db.c:356
 #, c-format
 msgid "unable to move %s to %s"
 msgstr "不能移動 %s 至 %s"
 
-#: builtin/init-db.c:386
+#: builtin/init-db.c:372
 msgid "attempt to reinitialize repository with different hash"
 msgstr "嘗試以不同的雜湊值重新初始化版本庫"
 
-#: builtin/init-db.c:410 builtin/init-db.c:413
+#: builtin/init-db.c:396 builtin/init-db.c:399
 #, c-format
 msgid "%s already exists"
 msgstr "%s 已經存在"
 
-#: builtin/init-db.c:445
+#: builtin/init-db.c:431
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
 msgstr "re-init: 忽略 --initial-branch=%s"
 
-#: builtin/init-db.c:476
+#: builtin/init-db.c:462
 #, c-format
 msgid "Reinitialized existing shared Git repository in %s%s\n"
 msgstr "重新初始化已存在的共享 Git 版本庫於 %s%s\n"
 
-#: builtin/init-db.c:477
+#: builtin/init-db.c:463
 #, c-format
 msgid "Reinitialized existing Git repository in %s%s\n"
 msgstr "重新初始化已存在的 Git 版本庫於 %s%s\n"
 
-#: builtin/init-db.c:481
+#: builtin/init-db.c:467
 #, c-format
 msgid "Initialized empty shared Git repository in %s%s\n"
 msgstr "已初始化空的共享 Git 版本庫於 %s%s\n"
 
-#: builtin/init-db.c:482
+#: builtin/init-db.c:468
 #, c-format
 msgid "Initialized empty Git repository in %s%s\n"
 msgstr "已初始化空的 Git 版本庫於 %s%s\n"
 
-#: builtin/init-db.c:531
+#: builtin/init-db.c:517
 msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
@@ -16039,53 +16571,53 @@
 "git init [-q | --quiet] [--bare] [--template=<範本目錄>] [--shared[=<權限>]] "
 "[<目錄>]"
 
-#: builtin/init-db.c:557
+#: builtin/init-db.c:543
 msgid "permissions"
 msgstr "權限"
 
-#: builtin/init-db.c:558
+#: builtin/init-db.c:544
 msgid "specify that the git repository is to be shared amongst several users"
 msgstr "指定 git 版本庫是多個使用者之間共享的"
 
-#: builtin/init-db.c:564
+#: builtin/init-db.c:550
 msgid "override the name of the initial branch"
 msgstr "覆蓋初始分支的名稱"
 
-#: builtin/init-db.c:565 builtin/verify-pack.c:74
+#: builtin/init-db.c:551 builtin/verify-pack.c:74
 msgid "hash"
 msgstr "雜湊"
 
-#: builtin/init-db.c:566 builtin/show-index.c:22 builtin/verify-pack.c:75
+#: builtin/init-db.c:552 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
 msgstr "指定要使用的雜湊算法"
 
-#: builtin/init-db.c:573
+#: builtin/init-db.c:559
 msgid "--separate-git-dir and --bare are mutually exclusive"
 msgstr "--separate-git-dir 和 --bare 互斥"
 
-#: builtin/init-db.c:602 builtin/init-db.c:607
+#: builtin/init-db.c:590 builtin/init-db.c:595
 #, c-format
 msgid "cannot mkdir %s"
 msgstr "不能建立目錄 %s"
 
-#: builtin/init-db.c:611 builtin/init-db.c:666
+#: builtin/init-db.c:599 builtin/init-db.c:654
 #, c-format
 msgid "cannot chdir to %s"
 msgstr "不能切換目錄到 %s"
 
-#: builtin/init-db.c:638
+#: builtin/init-db.c:626
 #, c-format
 msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr "不允許 %s(或 --work-tree=<目錄>)而沒有指定 %s(或 --git-dir=<目錄>)"
 
-#: builtin/init-db.c:690
+#: builtin/init-db.c:678
 #, c-format
 msgid "Cannot access work tree '%s'"
 msgstr "不能存取工作區 '%s'"
 
-#: builtin/init-db.c:695
+#: builtin/init-db.c:683
 msgid "--separate-git-dir incompatible with bare repository"
 msgstr "--separate-git-dir 與純版本庫不相容"
 
@@ -16123,7 +16655,7 @@
 
 #: builtin/interpret-trailers.c:106
 msgid "do not apply config rules"
-msgstr "不要應用設定規則"
+msgstr "不要套用組態設定規則"
 
 #: builtin/interpret-trailers.c:107
 msgid "join whitespace-continued values"
@@ -16137,10 +16669,6 @@
 msgid "do not treat --- specially"
 msgstr "不要對 --- 特殊處理"
 
-#: builtin/interpret-trailers.c:111
-msgid "trailer"
-msgstr "尾部署名"
-
 #: builtin/interpret-trailers.c:112
 msgid "trailer(s) to add"
 msgstr "要新增的尾部署名"
@@ -16153,129 +16681,128 @@
 msgid "no input file given for in-place editing"
 msgstr "沒有給出要原位編輯的檔案"
 
-#: builtin/log.c:58
+#: builtin/log.c:59
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<選項>] [<版本範圍>] [[--] <路徑>...]"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git show [<options>] <object>..."
 msgstr "git show [<選項>] <物件>..."
 
-#: builtin/log.c:112
+#: builtin/log.c:113
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "無效的 --decorate 選項:%s"
 
-#: builtin/log.c:179
+#: builtin/log.c:180
 msgid "show source"
 msgstr "顯示源"
 
-#: builtin/log.c:180
-msgid "Use mail map file"
+#: builtin/log.c:181
+msgid "use mail map file"
 msgstr "使用信件映射檔案"
 
-#: builtin/log.c:183
+#: builtin/log.c:184
 msgid "only decorate refs that match <pattern>"
 msgstr "只修飾與 <模式> 符合的引用"
 
-#: builtin/log.c:185
+#: builtin/log.c:186
 msgid "do not decorate refs that match <pattern>"
 msgstr "不修飾和 <模式> 符合的引用"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "decorate options"
 msgstr "修飾選項"
 
-#: builtin/log.c:189
+#: builtin/log.c:190
 msgid ""
-"Trace the evolution of line range <start>,<end> or function :<funcname> in "
+"trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
-msgstr ""
+msgstr "追蹤 <開始>,<結束> 範圍中橫列或 <檔案> 中> :<函數名稱> 的變化史"
 
-#: builtin/log.c:212
-#| msgid "%s: %s cannot be used with %s"
+#: builtin/log.c:213
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<範圍>:<檔案> 和 pathspec 不能同時使用"
 
-#: builtin/log.c:302
+#: builtin/log.c:303
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "最終輸出:%d %s\n"
 
-#: builtin/log.c:564
+#: builtin/log.c:568
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: 損壞的檔案"
 
-#: builtin/log.c:579 builtin/log.c:674
+#: builtin/log.c:583 builtin/log.c:673
 #, c-format
 msgid "could not read object %s"
 msgstr "不能讀取物件 %s"
 
-#: builtin/log.c:699
+#: builtin/log.c:698
 #, c-format
 msgid "unknown type: %d"
 msgstr "未知類型:%d"
 
-#: builtin/log.c:848
+#: builtin/log.c:843
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s:從描述產生附函的模式無效"
 
-#: builtin/log.c:855
+#: builtin/log.c:850
 msgid "format.headers without value"
 msgstr "format.headers 沒有值"
 
-#: builtin/log.c:984
+#: builtin/log.c:979
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "無法開啟修補檔案 %s"
 
-#: builtin/log.c:1001
+#: builtin/log.c:996
 msgid "need exactly one range"
 msgstr "只需要一個範圍"
 
-#: builtin/log.c:1011
+#: builtin/log.c:1006
 msgid "not a range"
 msgstr "不是一個範圍"
 
-#: builtin/log.c:1175
+#: builtin/log.c:1170
 msgid "cover letter needs email format"
 msgstr "附函需要信件位址格式"
 
-#: builtin/log.c:1181
+#: builtin/log.c:1176
 msgid "failed to create cover-letter file"
 msgstr "無法建立附函檔案"
 
-#: builtin/log.c:1262
+#: builtin/log.c:1263
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "不正常的 in-reply-to:%s"
 
-#: builtin/log.c:1289
+#: builtin/log.c:1290
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<選項>] [<從> | <版本範圍>]"
 
-#: builtin/log.c:1347
+#: builtin/log.c:1348
 msgid "two output directories?"
 msgstr "兩個輸出目錄?"
 
-#: builtin/log.c:1498 builtin/log.c:2318 builtin/log.c:2320 builtin/log.c:2332
+#: builtin/log.c:1499 builtin/log.c:2326 builtin/log.c:2328 builtin/log.c:2340
 #, c-format
 msgid "unknown commit %s"
 msgstr "未知提交 %s"
 
-#: builtin/log.c:1509 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1510 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "無法將 '%s' 解析為一個有效引用"
 
-#: builtin/log.c:1518
+#: builtin/log.c:1519
 msgid "could not find exact merge base"
 msgstr "不能找到準確的合併基礎"
 
-#: builtin/log.c:1528
+#: builtin/log.c:1529
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16285,394 +16812,401 @@
 "git branch --set-upstream-to 來追蹤一個遠端分支。或者你可以透過\n"
 "參數 --base=<基礎提交> 手動指定一個基礎提交"
 
-#: builtin/log.c:1551
+#: builtin/log.c:1552
 msgid "failed to find exact merge base"
 msgstr "無法找到準確的合併基礎"
 
-#: builtin/log.c:1568
+#: builtin/log.c:1569
 msgid "base commit should be the ancestor of revision list"
 msgstr "基礎提交應該是版本列表的祖先"
 
-#: builtin/log.c:1578
+#: builtin/log.c:1579
 msgid "base commit shouldn't be in revision list"
 msgstr "基礎提交不應該出現在版本列表中"
 
-#: builtin/log.c:1636
+#: builtin/log.c:1637
 msgid "cannot get patch id"
 msgstr "無法得到修補檔 id"
 
-#: builtin/log.c:1693
+#: builtin/log.c:1700
 msgid "failed to infer range-diff origin of current series"
 msgstr "無法推斷目前系列的 range-diff 起點"
 
-#: builtin/log.c:1695
+#: builtin/log.c:1702
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "將 '%s' 當作目前系列的 range-diff 起點"
 
-#: builtin/log.c:1739
+#: builtin/log.c:1746
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "使用 [PATCH n/m],即使只有一個修補檔"
 
-#: builtin/log.c:1742
+#: builtin/log.c:1749
 msgid "use [PATCH] even with multiple patches"
 msgstr "使用 [PATCH],即使有多個修補檔"
 
-#: builtin/log.c:1746
+#: builtin/log.c:1753
 msgid "print patches to standard out"
 msgstr "列印修補檔到標準輸出"
 
-#: builtin/log.c:1748
+#: builtin/log.c:1755
 msgid "generate a cover letter"
 msgstr "生成一封附函"
 
-#: builtin/log.c:1750
+#: builtin/log.c:1757
 msgid "use simple number sequence for output file names"
 msgstr "使用簡單的數字序列作為輸出檔案名"
 
-#: builtin/log.c:1751
+#: builtin/log.c:1758
 msgid "sfx"
 msgstr "後綴"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1759
 msgid "use <sfx> instead of '.patch'"
 msgstr "使用 <後綴> 代替 '.patch'"
 
-#: builtin/log.c:1754
+#: builtin/log.c:1761
 msgid "start numbering patches at <n> instead of 1"
 msgstr "修補檔以 <n> 開始編號,而不是1"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1762
+msgid "reroll-count"
+msgstr "reroll-count"
+
+#: builtin/log.c:1763
 msgid "mark the series as Nth re-roll"
 msgstr "標記修補檔系列是第幾次重製"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1765
 msgid "max length of output filename"
 msgstr "輸出檔名的最大長度"
 
-#: builtin/log.c:1760
-msgid "Use [RFC PATCH] instead of [PATCH]"
+#: builtin/log.c:1767
+msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "使用 [RFC PATCH] 代替 [PATCH]"
 
-#: builtin/log.c:1763
+#: builtin/log.c:1770
 msgid "cover-from-description-mode"
 msgstr "從描述產生附函的模式"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1771
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "基於分支描述產生部分附函"
 
-#: builtin/log.c:1766
-msgid "Use [<prefix>] instead of [PATCH]"
+#: builtin/log.c:1773
+msgid "use [<prefix>] instead of [PATCH]"
 msgstr "使用 [<前綴>] 代替 [PATCH]"
 
-#: builtin/log.c:1769
+#: builtin/log.c:1776
 msgid "store resulting files in <dir>"
 msgstr "把結果檔案儲存在 <目錄>"
 
-#: builtin/log.c:1772
+#: builtin/log.c:1779
 msgid "don't strip/add [PATCH]"
 msgstr "不刪除/新增 [PATCH]"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1782
 msgid "don't output binary diffs"
 msgstr "不輸出二進位差異"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1784
 msgid "output all-zero hash in From header"
 msgstr "在 From 標頭訊息中輸出全為零的雜湊值"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1786
 msgid "don't include a patch matching a commit upstream"
 msgstr "不包含已在上游提交中的修補檔"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1788
 msgid "show patch format instead of default (patch + stat)"
 msgstr "顯示純修補檔格式而非預設的(修補檔+狀態)"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1790
 msgid "Messaging"
 msgstr "信件傳送"
 
-#: builtin/log.c:1784
+#: builtin/log.c:1791
 msgid "header"
 msgstr "header"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1792
 msgid "add email header"
 msgstr "新增信件頭"
 
-#: builtin/log.c:1786 builtin/log.c:1787
+#: builtin/log.c:1793 builtin/log.c:1794
 msgid "email"
 msgstr "信件位址"
 
-#: builtin/log.c:1786
+#: builtin/log.c:1793
 msgid "add To: header"
 msgstr "新增收件人"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1794
 msgid "add Cc: header"
 msgstr "新增抄送"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1795
 msgid "ident"
 msgstr "標記"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1796
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "將 From 位址設定為 <標記>(如若不提供,則用提交者 ID 做為位址)"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1798
 msgid "message-id"
 msgstr "信件標記"
 
-#: builtin/log.c:1792
+#: builtin/log.c:1799
 msgid "make first mail a reply to <message-id>"
 msgstr "使第一封信件作為對 <信件標記> 的回覆"
 
-#: builtin/log.c:1793 builtin/log.c:1796
+#: builtin/log.c:1800 builtin/log.c:1803
 msgid "boundary"
 msgstr "邊界"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1801
 msgid "attach the patch"
 msgstr "附件方式新增修補檔"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1804
 msgid "inline the patch"
 msgstr "內聯顯示修補檔"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1808
 msgid "enable message threading, styles: shallow, deep"
 msgstr "啟用信件線索,風格:淺,深"
 
-#: builtin/log.c:1803
+#: builtin/log.c:1810
 msgid "signature"
 msgstr "簽名"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1811
 msgid "add a signature"
 msgstr "新增一個簽名"
 
-#: builtin/log.c:1805
+#: builtin/log.c:1812
 msgid "base-commit"
 msgstr "基礎提交"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1813
 msgid "add prerequisite tree info to the patch series"
 msgstr "為修補檔列表新增前置樹訊息"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1816
 msgid "add a signature from a file"
 msgstr "從檔案新增一個簽名"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1817
 msgid "don't print the patch filenames"
 msgstr "不要列印修補檔檔案名"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1819
 msgid "show progress while generating patches"
 msgstr "在生成修補檔時顯示進度"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1821
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "在附函或單個修補檔中顯示和 <rev> 的差異"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1824
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "在附函或單個修補檔中顯示和 <refspec> 的差異"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1826 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "建立權重的百分比"
 
-#: builtin/log.c:1905
+#: builtin/log.c:1913
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "包含無效的身份標記:%s"
 
-#: builtin/log.c:1920
+#: builtin/log.c:1928
 msgid "-n and -k are mutually exclusive"
 msgstr "-n 和 -k 互斥"
 
-#: builtin/log.c:1922
+#: builtin/log.c:1930
 msgid "--subject-prefix/--rfc and -k are mutually exclusive"
 msgstr "--subject-prefix/--rfc 和 -k 互斥"
 
-#: builtin/log.c:1930
+#: builtin/log.c:1938
 msgid "--name-only does not make sense"
 msgstr "--name-only 無意義"
 
-#: builtin/log.c:1932
+#: builtin/log.c:1940
 msgid "--name-status does not make sense"
 msgstr "--name-status 無意義"
 
-#: builtin/log.c:1934
+#: builtin/log.c:1942
 msgid "--check does not make sense"
 msgstr "--check 無意義"
 
-#: builtin/log.c:1956
-#| msgid "-b, -B, and --detach are mutually exclusive"
+#: builtin/log.c:1964
 msgid "--stdout, --output, and --output-directory are mutually exclusive"
 msgstr "--stdout、--output 和 --output-directory 互斥"
 
-#: builtin/log.c:2079
+#: builtin/log.c:2087
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff 需要 --cover-letter 或單一修補檔"
 
-#: builtin/log.c:2083
+#: builtin/log.c:2091
 msgid "Interdiff:"
 msgstr "版本間差異:"
 
-#: builtin/log.c:2084
+#: builtin/log.c:2092
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "對 v%d 的版本差異:"
 
-#: builtin/log.c:2090
+#: builtin/log.c:2098
 msgid "--creation-factor requires --range-diff"
 msgstr "--creation-factor 需要 --range-diff"
 
-#: builtin/log.c:2094
+#: builtin/log.c:2102
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff 需要 --cover-letter 或單一修補檔"
 
-#: builtin/log.c:2102
+#: builtin/log.c:2110
 msgid "Range-diff:"
 msgstr "範圍差異:"
 
-#: builtin/log.c:2103
+#: builtin/log.c:2111
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "對 v%d 的範圍差異:"
 
-#: builtin/log.c:2114
+#: builtin/log.c:2122
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "無法讀取簽名檔案 '%s'"
 
-#: builtin/log.c:2150
+#: builtin/log.c:2158
 msgid "Generating patches"
 msgstr "生成修補檔"
 
-#: builtin/log.c:2194
+#: builtin/log.c:2202
 msgid "failed to create output files"
 msgstr "無法建立輸出檔案"
 
-#: builtin/log.c:2253
+#: builtin/log.c:2261
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<上游> [<頭> [<限制>]]]"
 
-#: builtin/log.c:2307
+#: builtin/log.c:2315
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr "不能找到追蹤的遠端分支,請手動指定 <上游>。\n"
 
-#: builtin/ls-files.c:471
+#: builtin/ls-files.c:563
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<選項>] [<檔案>...]"
 
-#: builtin/ls-files.c:527
+#: builtin/ls-files.c:619
 msgid "identify the file status with tags"
 msgstr "用標籤標記檔案的狀態"
 
-#: builtin/ls-files.c:529
+#: builtin/ls-files.c:621
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "使用小寫字母表示 '假設未改變的' 檔案"
 
-#: builtin/ls-files.c:531
+#: builtin/ls-files.c:623
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "使用小寫字母表示 'fsmonitor clean' 檔案"
 
-#: builtin/ls-files.c:533
+#: builtin/ls-files.c:625
 msgid "show cached files in the output (default)"
 msgstr "顯示快取的檔案(預設)"
 
-#: builtin/ls-files.c:535
+#: builtin/ls-files.c:627
 msgid "show deleted files in the output"
 msgstr "顯示已刪除的檔案"
 
-#: builtin/ls-files.c:537
+#: builtin/ls-files.c:629
 msgid "show modified files in the output"
 msgstr "顯示已修改的檔案"
 
-#: builtin/ls-files.c:539
+#: builtin/ls-files.c:631
 msgid "show other files in the output"
 msgstr "顯示其它檔案"
 
-#: builtin/ls-files.c:541
+#: builtin/ls-files.c:633
 msgid "show ignored files in the output"
 msgstr "顯示忽略的檔案"
 
-#: builtin/ls-files.c:544
+#: builtin/ls-files.c:636
 msgid "show staged contents' object name in the output"
 msgstr "顯示暫存區內容的物件名稱"
 
-#: builtin/ls-files.c:546
+#: builtin/ls-files.c:638
 msgid "show files on the filesystem that need to be removed"
 msgstr "顯示檔案系統需要刪除的檔案"
 
-#: builtin/ls-files.c:548
+#: builtin/ls-files.c:640
 msgid "show 'other' directories' names only"
 msgstr "只顯示「其他」目錄的名稱"
 
-#: builtin/ls-files.c:550
+#: builtin/ls-files.c:642
 msgid "show line endings of files"
 msgstr "顯示檔案換行符號格式"
 
-#: builtin/ls-files.c:552
+#: builtin/ls-files.c:644
 msgid "don't show empty directories"
 msgstr "不顯示空目錄"
 
-#: builtin/ls-files.c:555
+#: builtin/ls-files.c:647
 msgid "show unmerged files in the output"
 msgstr "顯示未合併的檔案"
 
-#: builtin/ls-files.c:557
+#: builtin/ls-files.c:649
 msgid "show resolve-undo information"
 msgstr "顯示 resolve-undo 訊息"
 
-#: builtin/ls-files.c:559
+#: builtin/ls-files.c:651
 msgid "skip files matching pattern"
 msgstr "符合排除檔案的模式"
 
-#: builtin/ls-files.c:562
+#: builtin/ls-files.c:654
 msgid "exclude patterns are read from <file>"
 msgstr "從 <檔案> 中讀取排除模式"
 
-#: builtin/ls-files.c:565
+#: builtin/ls-files.c:657
 msgid "read additional per-directory exclude patterns in <file>"
 msgstr "從 <檔案> 讀取額外的每個目錄的排除模式"
 
-#: builtin/ls-files.c:567
+#: builtin/ls-files.c:659
 msgid "add the standard git exclusions"
 msgstr "新增標準的 git 排除"
 
-#: builtin/ls-files.c:571
+#: builtin/ls-files.c:663
 msgid "make the output relative to the project top directory"
 msgstr "顯示相對於頂級目錄的檔案名"
 
-#: builtin/ls-files.c:574
+#: builtin/ls-files.c:666
 msgid "recurse through submodules"
 msgstr "在子模組中遞迴"
 
-#: builtin/ls-files.c:576
+#: builtin/ls-files.c:668
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "如果任何 <檔案> 都不在索引區,視為錯誤"
 
-#: builtin/ls-files.c:577
+#: builtin/ls-files.c:669
 msgid "tree-ish"
 msgstr "樹或提交"
 
-#: builtin/ls-files.c:578
+#: builtin/ls-files.c:670
 msgid "pretend that paths removed since <tree-ish> are still present"
 msgstr "假裝自從 <樹或提交> 之後刪除的路徑仍然存在"
 
-#: builtin/ls-files.c:580
+#: builtin/ls-files.c:672
 msgid "show debugging data"
 msgstr "顯示除錯資料"
 
+#: builtin/ls-files.c:674
+msgid "suppress duplicate entries"
+msgstr "不顯示重複項目"
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
@@ -16683,39 +17217,39 @@
 "                     [-q | --quiet] [--exit-code] [--get-url]\n"
 "                     [--symref] [<版本庫> [<引用>...]]"
 
-#: builtin/ls-remote.c:59
+#: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "不列印遠端 URL"
 
-#: builtin/ls-remote.c:60 builtin/ls-remote.c:62 builtin/rebase.c:1398
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
 msgid "exec"
 msgstr "exec"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63
+#: builtin/ls-remote.c:62 builtin/ls-remote.c:64
 msgid "path of git-upload-pack on the remote host"
 msgstr "遠端主機上的 git-upload-pack 路徑"
 
-#: builtin/ls-remote.c:65
+#: builtin/ls-remote.c:66
 msgid "limit to tags"
 msgstr "僅限於標籤"
 
-#: builtin/ls-remote.c:66
+#: builtin/ls-remote.c:67
 msgid "limit to heads"
 msgstr "僅限於分支"
 
-#: builtin/ls-remote.c:67
+#: builtin/ls-remote.c:68
 msgid "do not show peeled tags"
 msgstr "不顯示已解析的標籤"
 
-#: builtin/ls-remote.c:69
+#: builtin/ls-remote.c:70
 msgid "take url.<base>.insteadOf into account"
 msgstr "參考 url.<base>.insteadOf 設定"
 
-#: builtin/ls-remote.c:72
+#: builtin/ls-remote.c:73
 msgid "exit with exit code 2 if no matching refs are found"
 msgstr "若未找到符合的引用則以離開碼2離開"
 
-#: builtin/ls-remote.c:75
+#: builtin/ls-remote.c:76
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "除了顯示指向的物件外,顯示指向的引用名"
 
@@ -16755,6 +17289,58 @@
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "列出整個樹;不僅僅目前目錄(隱含 --full-name)"
 
+#. TRANSLATORS: keep <> in "<" mail ">" info.
+#: builtin/mailinfo.c:14
+#| msgid "git diff --no-index [<options>] <path> <path>"
+msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
+msgstr "git mailinfo [<選項>] <訊息> <修補檔> < mail >info"
+
+#: builtin/mailinfo.c:58
+msgid "keep subject"
+msgstr "保留主旨"
+
+#: builtin/mailinfo.c:60
+msgid "keep non patch brackets in subject"
+msgstr "保留主旨中不是 PATCH 的方括號"
+
+#: builtin/mailinfo.c:62
+msgid "copy Message-ID to the end of commit message"
+msgstr "複製 Message-ID 至提交說明末尾"
+
+#: builtin/mailinfo.c:64
+msgid "re-code metadata to i18n.commitEncoding"
+msgstr "重新將中繼資料編碼為 i18n.commitEncoding 的設定值"
+
+#: builtin/mailinfo.c:67
+msgid "disable charset re-coding of metadata"
+msgstr "停用中繼資料的字元重新編碼功能"
+
+#: builtin/mailinfo.c:69
+msgid "encoding"
+msgstr "編碼"
+
+#: builtin/mailinfo.c:70
+msgid "re-code metadata to this encoding"
+msgstr "重新將中繼資料編碼為這個編碼方式"
+
+#: builtin/mailinfo.c:72
+#, fuzzy
+msgid "use scissors"
+msgstr "使用 scissors"
+
+#: builtin/mailinfo.c:73
+msgid "<action>"
+msgstr "<動作>"
+
+#: builtin/mailinfo.c:74
+msgid "action when quoted CR is found"
+msgstr "當找到可列印 CR 字元時所要採取的行為"
+
+#: builtin/mailinfo.c:77
+#, fuzzy
+msgid "use headers in message's body"
+msgstr "在訊息本文部分使用標頭"
+
 #: builtin/mailsplit.c:241
 #, c-format
 msgid "empty mbox: '%s'"
@@ -16870,277 +17456,277 @@
 msgid "Merging %s with %s\n"
 msgstr "合併 %s 和 %s\n"
 
-#: builtin/merge.c:57
+#: builtin/merge.c:58
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<選項>] [<提交>...]"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge --abort"
 msgstr "git merge --abort"
 
-#: builtin/merge.c:59
+#: builtin/merge.c:60
 msgid "git merge --continue"
 msgstr "git merge --continue"
 
-#: builtin/merge.c:122
+#: builtin/merge.c:123
 msgid "switch `m' requires a value"
 msgstr "開關 `m' 需要一個值"
 
-#: builtin/merge.c:145
+#: builtin/merge.c:146
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "選項 `%s' 需要一個值"
 
-#: builtin/merge.c:198
+#: builtin/merge.c:199
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "不能找到合併策略 '%s'。\n"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:200
 #, c-format
 msgid "Available strategies are:"
 msgstr "可用的策略有:"
 
-#: builtin/merge.c:204
+#: builtin/merge.c:205
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "可用的自訂策略有:"
 
-#: builtin/merge.c:255 builtin/pull.c:133
+#: builtin/merge.c:256 builtin/pull.c:133
 msgid "do not show a diffstat at the end of the merge"
 msgstr "在合併的最後不顯示差異統計"
 
-#: builtin/merge.c:258 builtin/pull.c:136
+#: builtin/merge.c:259 builtin/pull.c:136
 msgid "show a diffstat at the end of the merge"
 msgstr "在合併的最後顯示差異統計"
 
-#: builtin/merge.c:259 builtin/pull.c:139
+#: builtin/merge.c:260 builtin/pull.c:139
 msgid "(synonym to --stat)"
 msgstr "(和 --stat 同義)"
 
-#: builtin/merge.c:261 builtin/pull.c:142
+#: builtin/merge.c:262 builtin/pull.c:142
 msgid "add (at most <n>) entries from shortlog to merge commit message"
-msgstr "在合併提交訊息中新增(最多 <n> 條)精簡提交記錄"
+msgstr "在合併提交說明中新增(最多 <n> 條)精簡提交記錄"
 
-#: builtin/merge.c:264 builtin/pull.c:148
+#: builtin/merge.c:265 builtin/pull.c:148
 msgid "create a single commit instead of doing a merge"
 msgstr "建立一個單獨的提交而不是做一次合併"
 
-#: builtin/merge.c:266 builtin/pull.c:151
+#: builtin/merge.c:267 builtin/pull.c:151
 msgid "perform a commit if the merge succeeds (default)"
 msgstr "如果合併成功,執行一次提交(預設)"
 
-#: builtin/merge.c:268 builtin/pull.c:154
+#: builtin/merge.c:269 builtin/pull.c:154
 msgid "edit message before committing"
 msgstr "在提交前編輯提交說明"
 
-#: builtin/merge.c:270
+#: builtin/merge.c:271
 msgid "allow fast-forward (default)"
 msgstr "允許快轉(預設)"
 
-#: builtin/merge.c:272 builtin/pull.c:161
+#: builtin/merge.c:273 builtin/pull.c:161
 msgid "abort if fast-forward is not possible"
 msgstr "如果不能快轉就放棄合併"
 
-#: builtin/merge.c:276 builtin/pull.c:164
+#: builtin/merge.c:277 builtin/pull.c:164
 msgid "verify that the named commit has a valid GPG signature"
 msgstr "驗證指定的提交是否包含一個有效的 GPG 簽名"
 
-#: builtin/merge.c:277 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:539 builtin/rebase.c:1412 builtin/revert.c:114
+#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
+#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
 msgid "strategy"
 msgstr "策略"
 
-#: builtin/merge.c:278 builtin/pull.c:169
+#: builtin/merge.c:279 builtin/pull.c:169
 msgid "merge strategy to use"
 msgstr "要使用的合併策略"
 
-#: builtin/merge.c:279 builtin/pull.c:172
+#: builtin/merge.c:280 builtin/pull.c:172
 msgid "option=value"
 msgstr "option=value"
 
-#: builtin/merge.c:280 builtin/pull.c:173
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "option for selected merge strategy"
 msgstr "所選的合併策略的選項"
 
-#: builtin/merge.c:282
+#: builtin/merge.c:283
 msgid "merge commit message (for a non-fast-forward merge)"
 msgstr "合併的提交說明(針對非快轉式合併)"
 
-#: builtin/merge.c:289
+#: builtin/merge.c:290
 msgid "abort the current in-progress merge"
 msgstr "放棄目前正在進行的合併"
 
 #
-#: builtin/merge.c:291
+#: builtin/merge.c:292
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort,但是保留索引和工作區"
 
-#: builtin/merge.c:293
+#: builtin/merge.c:294
 msgid "continue the current in-progress merge"
 msgstr "繼續目前正在進行的合併"
 
-#: builtin/merge.c:295 builtin/pull.c:180
+#: builtin/merge.c:296 builtin/pull.c:180
 msgid "allow merging unrelated histories"
 msgstr "允許合並不相關的歷史"
 
-#: builtin/merge.c:302
+#: builtin/merge.c:303
 msgid "bypass pre-merge-commit and commit-msg hooks"
 msgstr "繞過 pre-merge-commit 和 commit-msg 掛鉤"
 
-#: builtin/merge.c:319
+#: builtin/merge.c:320
 msgid "could not run stash."
 msgstr "不能執行儲藏。"
 
-#: builtin/merge.c:324
+#: builtin/merge.c:325
 msgid "stash failed"
 msgstr "儲藏失敗"
 
-#: builtin/merge.c:329
+#: builtin/merge.c:330
 #, c-format
 msgid "not a valid object: %s"
 msgstr "不是一個有效物件:%s"
 
-#: builtin/merge.c:351 builtin/merge.c:368
+#: builtin/merge.c:352 builtin/merge.c:369
 msgid "read-tree failed"
 msgstr "讀取樹失敗"
 
 #  譯者:請維持前導空格
-#: builtin/merge.c:398
-msgid " (nothing to squash)"
-msgstr " (無可壓縮)"
+#: builtin/merge.c:400
+msgid "Already up to date. (nothing to squash)"
+msgstr "已經是最新的。(無需壓縮 (squash))"
 
-#: builtin/merge.c:409
+#: builtin/merge.c:414
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
 msgstr "壓縮提交 -- 未更新 HEAD\n"
 
-#: builtin/merge.c:459
+#: builtin/merge.c:464
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "無合併訊息 -- 未更新 HEAD\n"
 
-#: builtin/merge.c:510
+#: builtin/merge.c:515
 #, c-format
 msgid "'%s' does not point to a commit"
 msgstr "'%s' 沒有指向一個提交"
 
-#: builtin/merge.c:597
+#: builtin/merge.c:602
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
 msgstr "壞的 branch.%s.mergeoptions 字串:%s"
 
-#: builtin/merge.c:723
+#: builtin/merge.c:728
 msgid "Not handling anything other than two heads merge."
 msgstr "未處理兩個頭合併之外的任何動作。"
 
-#: builtin/merge.c:736
+#: builtin/merge.c:741
 #, c-format
 msgid "Unknown option for merge-recursive: -X%s"
 msgstr "merge-recursive 的未知選項:-X%s"
 
-#: builtin/merge.c:755 t/helper/test-fast-rebase.c:209
+#: builtin/merge.c:760 t/helper/test-fast-rebase.c:209
 #, c-format
 msgid "unable to write %s"
 msgstr "不能寫 %s"
 
-#: builtin/merge.c:807
+#: builtin/merge.c:812
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "不能從 '%s' 讀取"
 
-#: builtin/merge.c:816
+#: builtin/merge.c:821
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
 msgstr "未提交合並,使用 'git commit' 完成此次合併。\n"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:827
 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 ""
-"請輸入一個提交訊息以解釋此合併的必要性,尤其是將一個更新後的上游分支\n"
+"請輸入一個提交說明以解釋此合併的必要性,尤其是將一個更新後的上游分支\n"
 "合併到主題分支。\n"
 "\n"
 
-#: builtin/merge.c:827
+#: builtin/merge.c:832
 msgid "An empty message aborts the commit.\n"
 msgstr "空的提交說明會終止提交。\n"
 
-#: builtin/merge.c:830
+#: builtin/merge.c:835
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr "以 '%c' 開始的行將被忽略,而空的提交說明將終止提交。\n"
 
-#: builtin/merge.c:883
+#: builtin/merge.c:888
 msgid "Empty commit message."
-msgstr "空提交訊息。"
+msgstr "空提交說明。"
 
-#: builtin/merge.c:898
+#: builtin/merge.c:903
 #, c-format
 msgid "Wonderful.\n"
 msgstr "太棒了。\n"
 
-#: builtin/merge.c:959
+#: builtin/merge.c:964
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "自動合併失敗,修正衝突然後提交修正的結果。\n"
 
-#: builtin/merge.c:998
+#: builtin/merge.c:1003
 msgid "No current branch."
 msgstr "沒有目前分支。"
 
-#: builtin/merge.c:1000
+#: builtin/merge.c:1005
 msgid "No remote for the current branch."
 msgstr "目前分支沒有對應的遠端版本庫。"
 
-#: builtin/merge.c:1002
+#: builtin/merge.c:1007
 msgid "No default upstream defined for the current branch."
 msgstr "目前分支沒有定義預設的上游分支。"
 
-#: builtin/merge.c:1007
+#: builtin/merge.c:1012
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "對於 %s 沒有來自 %s 的遠端追蹤分支"
 
-#: builtin/merge.c:1064
+#: builtin/merge.c:1069
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "環境 '%2$s' 中存在壞的取值 '%1$s'"
 
-#: builtin/merge.c:1167
+#: builtin/merge.c:1172
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "不能在 %s 中合併:%s"
 
-#: builtin/merge.c:1201
+#: builtin/merge.c:1206
 msgid "not something we can merge"
 msgstr "不能合併"
 
-#: builtin/merge.c:1311
+#: builtin/merge.c:1316
 msgid "--abort expects no arguments"
 msgstr "--abort 不帶參數"
 
-#: builtin/merge.c:1315
+#: builtin/merge.c:1320
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "沒有要終止的合併(MERGE_HEAD 遺失)。"
 
-#: builtin/merge.c:1333
+#: builtin/merge.c:1338
 msgid "--quit expects no arguments"
 msgstr "--quit 不帶參數"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1351
 msgid "--continue expects no arguments"
 msgstr "--continue 不帶參數"
 
-#: builtin/merge.c:1350
+#: builtin/merge.c:1355
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "沒有進行中的合併(MERGE_HEAD 遺失)。"
 
-#: builtin/merge.c:1366
+#: builtin/merge.c:1371
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17148,7 +17734,7 @@
 "您尚未結束您的合併(存在 MERGE_HEAD)。\n"
 "請在合併前先提交您的修改。"
 
-#: builtin/merge.c:1373
+#: builtin/merge.c:1378
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17156,100 +17742,133 @@
 "您尚未結束您的揀選(存在 CHERRY_PICK_HEAD)。\n"
 "請在合併前先提交您的修改。"
 
-#: builtin/merge.c:1376
+#: builtin/merge.c:1381
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "您尚未結束您的揀選(存在 CHERRY_PICK_HEAD)。"
 
-#: builtin/merge.c:1390
+#: builtin/merge.c:1395
 msgid "You cannot combine --squash with --no-ff."
 msgstr "您不能將 --squash 和 --no-ff 組合使用。"
 
-#: builtin/merge.c:1392
+#: builtin/merge.c:1397
 msgid "You cannot combine --squash with --commit."
 msgstr "您不能將 --squash 和 --commit 組合使用。"
 
-#: builtin/merge.c:1408
+#: builtin/merge.c:1413
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "未指定提交並且 merge.defaultToUpstream 未設定。"
 
-#: builtin/merge.c:1425
+#: builtin/merge.c:1430
 msgid "Squash commit into empty head not supported yet"
 msgstr "尚不支援到空分支的壓縮提交"
 
-#: builtin/merge.c:1427
+#: builtin/merge.c:1432
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "到空分支的非快轉式提交沒有意義"
 
-#: builtin/merge.c:1432
+#: builtin/merge.c:1437
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - 不能被合併"
 
-#: builtin/merge.c:1434
+#: builtin/merge.c:1439
 msgid "Can merge only exactly one commit into empty head"
 msgstr "只能將一個提交合並到空分支上"
 
-#: builtin/merge.c:1515
+#: builtin/merge.c:1520
 msgid "refusing to merge unrelated histories"
 msgstr "拒絕合併無關的歷史"
 
-#: builtin/merge.c:1524
-msgid "Already up to date."
-msgstr "已經是最新的。"
-
-#: builtin/merge.c:1534
+#: builtin/merge.c:1539
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "更新 %s..%s\n"
 
-#: builtin/merge.c:1580
+#: builtin/merge.c:1585
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "嘗試非常小的索引內合併...\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1592
 #, c-format
 msgid "Nope.\n"
 msgstr "無。\n"
 
-#: builtin/merge.c:1612
-msgid "Already up to date. Yeeah!"
-msgstr "已經是最新的。耶!"
-
-#: builtin/merge.c:1618
+#: builtin/merge.c:1623
 msgid "Not possible to fast-forward, aborting."
 msgstr "無法快轉,終止。"
 
-#: builtin/merge.c:1646 builtin/merge.c:1711
+#: builtin/merge.c:1651 builtin/merge.c:1716
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "將樹回滾至原始狀態...\n"
 
-#: builtin/merge.c:1650
+#: builtin/merge.c:1655
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "嘗試合併策略 %s...\n"
 
-#: builtin/merge.c:1702
+#: builtin/merge.c:1707
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "沒有合併策略處理此合併。\n"
 
-#: builtin/merge.c:1704
+#: builtin/merge.c:1709
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "使用策略 %s 合併失敗。\n"
 
-#: builtin/merge.c:1713
+#: builtin/merge.c:1718
 #, c-format
 msgid "Using the %s to prepare resolving by hand.\n"
 msgstr "使用 %s 以準備手動解決。\n"
 
-#: builtin/merge.c:1727
+#: builtin/merge.c:1732
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr "自動合併進展順利,按要求在提交前停止\n"
 
+#: builtin/mktag.c:10
+msgid "git mktag"
+msgstr "git mktag"
+
+#: builtin/mktag.c:27
+#, c-format
+msgid "warning: tag input does not pass fsck: %s"
+msgstr "警告:標籤輸入未通過 fsck:%s"
+
+#: builtin/mktag.c:38
+#, c-format
+msgid "error: tag input does not pass fsck: %s"
+msgstr "錯誤:標籤輸入未通過 fsck:%s"
+
+#: builtin/mktag.c:41
+#, c-format
+msgid "%d (FSCK_IGNORE?) should never trigger this callback"
+msgstr "%d (FSCK_IGNORE?) 不應觸發這個回呼函式"
+
+#: builtin/mktag.c:56
+#, c-format
+msgid "could not read tagged object '%s'"
+msgstr "無法讀取有標籤的物件「%s」"
+
+#: builtin/mktag.c:59
+#, c-format
+msgid "object '%s' tagged as '%s', but is a '%s' type"
+msgstr "「%s」已標為「%s」,但卻是「%s」類型"
+
+#: builtin/mktag.c:97
+msgid "tag on stdin did not pass our strict fsck check"
+msgstr "stdin 上的標籤未通過我們的嚴格 fsck 檢查"
+
+#: builtin/mktag.c:100
+msgid "tag on stdin did not refer to a valid object"
+msgstr "標準輸入上的標籤參考的不是有效物件"
+
+#: builtin/mktag.c:103 builtin/tag.c:243
+msgid "unable to write tag file"
+msgstr "無法寫標籤檔案"
+
 #: builtin/mktree.c:66
 msgid "git mktree [-z] [--missing] [--batch]"
 msgstr "git mktree [-z] [--missing] [--batch]"
@@ -17266,33 +17885,49 @@
 msgid "allow creation of more than one tree"
 msgstr "允許建立一個以上的樹"
 
-#: builtin/multi-pack-index.c:9
-msgid ""
-"git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
-"size=<size>)"
-msgstr ""
-"git multi-pack-index [<選項>] (write|verify|expire|repack --batch-size=<大小"
-">)"
+#: builtin/multi-pack-index.c:10
+#| msgid ""
+#| "git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
+#| "size=<size>)"
+msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
+msgstr "git multi-pack-index [<選項>] write [--preferred-pack=<包>]"
 
-#: builtin/multi-pack-index.c:26
+#: builtin/multi-pack-index.c:13
+#| msgid "git upload-pack [<options>] <dir>"
+msgid "git multi-pack-index [<options>] verify"
+msgstr "git multi-pack-index [<選項>] verify"
+
+#: builtin/multi-pack-index.c:16
+#| msgid "git upload-pack [<options>] <dir>"
+msgid "git multi-pack-index [<options>] expire"
+msgstr "git multi-pack-index [<選項>] expire"
+
+#: builtin/multi-pack-index.c:19
+#| msgid ""
+#| "git multi-pack-index [<options>] (write|verify|expire|repack --batch-"
+#| "size=<size>)"
+msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
+msgstr "git multi-pack-index [<選項>] repack [--batch-size=<大小>]"
+
+#: builtin/multi-pack-index.c:54
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr "包含成對 packfile 和包索引的物件目錄"
 
-#: builtin/multi-pack-index.c:29
+#: builtin/multi-pack-index.c:69
+msgid "preferred-pack"
+msgstr "偏好包"
+
+#: builtin/multi-pack-index.c:70
+msgid "pack for reuse when computing a multi-pack bitmap"
+msgstr "計算多包位圖時要重複使用的包"
+
+#: builtin/multi-pack-index.c:128
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr "在 repack 期間,將較小尺寸的包檔案收集到大於此大小的批次中"
 
-#: builtin/multi-pack-index.c:50 builtin/prune-packed.c:25
-msgid "too many arguments"
-msgstr "太多參數"
-
-#: builtin/multi-pack-index.c:60
-msgid "--batch-size option is only for 'repack' subcommand"
-msgstr "--batch-size 選項僅用於 'repack' 子指令"
-
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:180
 #, c-format
 msgid "unrecognized subcommand: %s"
 msgstr "未識別的子指令:%s"
@@ -17321,7 +17956,7 @@
 
 #: builtin/mv.c:127
 msgid "skip move/rename errors"
-msgstr "跳過移動/重新命名錯誤"
+msgstr "略過移動/重新命名錯誤"
 
 #: builtin/mv.c:170
 #, c-format
@@ -17388,7 +18023,7 @@
 msgid "Renaming %s to %s\n"
 msgstr "重新命名 %s 至 %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:484
+#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "重新命名 '%s' 失敗"
@@ -17577,7 +18212,7 @@
 msgid "the note contents have been left in %s"
 msgstr "註解內容被留在 %s 中"
 
-#: builtin/notes.c:242 builtin/tag.c:533
+#: builtin/notes.c:242 builtin/tag.c:576
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "不能開啟或讀取 '%s'"
@@ -17620,8 +18255,9 @@
 #: 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
-msgid "too many parameters"
-msgstr "參數太多"
+#: builtin/prune-packed.c:25 builtin/tag.c:586
+msgid "too many arguments"
+msgstr "太多參數"
 
 #: builtin/notes.c:389 builtin/notes.c:678
 #, c-format
@@ -17675,11 +18311,11 @@
 
 #: builtin/notes.c:499
 msgid "load rewriting config for <command> (implies --stdin)"
-msgstr "重新載入 <指令> 的設定(隱含 --stdin)"
+msgstr "重新載入 <命令> 的設定(隱含 --stdin)"
 
 #: builtin/notes.c:517
-msgid "too few parameters"
-msgstr "參數太少"
+msgid "too few arguments"
+msgstr "太少參數"
 
 #: builtin/notes.c:538
 #, c-format
@@ -17802,7 +18438,7 @@
 "自動合併說明失敗。修改 %s 中的衝突並且使用指令 'git notes merge --commit' 提"
 "交結果,或者使用指令 'git notes merge --abort' 終止合併。\n"
 
-#: builtin/notes.c:897 builtin/tag.c:546
+#: builtin/notes.c:897 builtin/tag.c:589
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "無法解析 '%s' 為一個有效引用。"
@@ -17820,7 +18456,7 @@
 msgid "read object names from the standard input"
 msgstr "從標準輸入讀取物件名稱"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:220
+#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "不刪除,只顯示"
 
@@ -17836,7 +18472,7 @@
 msgid "use notes from <notes-ref>"
 msgstr "從 <註解引用> 使用註解"
 
-#: builtin/notes.c:1034 builtin/stash.c:1604
+#: builtin/notes.c:1034 builtin/stash.c:1739
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "未知子指令:%s"
@@ -17851,101 +18487,114 @@
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr "git pack-objects [<選項>...] <前綴名稱> [< <引用列表> | < <物件列表>]"
 
-#: builtin/pack-objects.c:443
+#: builtin/pack-objects.c:440
+#, c-format
+msgid ""
+"write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
+"pack %s"
+msgstr ""
+"write_reuse_object:無法定位 %1$s,預期在 %3$s 包中的 %2$<PRIuMAX> 偏移量"
+
+#: builtin/pack-objects.c:448
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "%s 錯的包物件 CRC"
 
-#: builtin/pack-objects.c:454
+#: builtin/pack-objects.c:459
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "%s 損壞的包物件"
 
-#: builtin/pack-objects.c:585
+#: builtin/pack-objects.c:590
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "發現物件 %s 遞迴 delta"
 
-#: builtin/pack-objects.c:796
+#: builtin/pack-objects.c:801
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "排序了 %u 個物件,預期 %<PRIu32> 個"
 
-#: builtin/pack-objects.c:1004
+#: builtin/pack-objects.c:896
+#, c-format
+msgid "expected object at offset %<PRIuMAX> in pack %s"
+msgstr "預期 %2$s 包中的偏移 %1$<PRIuMAX> 有物件"
+
+#: builtin/pack-objects.c:1015
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "停用 bitmap 寫入,因為 pack.packSizeLimit 設定使得包被切分為多個"
 
-#: builtin/pack-objects.c:1017
+#: builtin/pack-objects.c:1028
 msgid "Writing objects"
 msgstr "寫入物件中"
 
-#: builtin/pack-objects.c:1078 builtin/update-index.c:90
+#: builtin/pack-objects.c:1089 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "對 %s 呼叫 stat 失敗"
 
-#: builtin/pack-objects.c:1131
+#: builtin/pack-objects.c:1141
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "寫入 %<PRIu32> 個物件而預期 %<PRIu32> 個"
 
-#: builtin/pack-objects.c:1348
+#: builtin/pack-objects.c:1383
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "停用 bitmap 寫入,因為一些物件將不會被打包"
 
-#: builtin/pack-objects.c:1796
+#: builtin/pack-objects.c:1831
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s 壓縮中 delta 基準位移越界"
 
-#: builtin/pack-objects.c:1805
+#: builtin/pack-objects.c:1840
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s 的 delta 基準位移越界"
 
-#: builtin/pack-objects.c:2086
+#: builtin/pack-objects.c:2121
 msgid "Counting objects"
 msgstr "物件計數中"
 
-#: builtin/pack-objects.c:2231
+#: builtin/pack-objects.c:2266
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "無法解析物件 %s 標頭訊息"
 
-#: builtin/pack-objects.c:2301 builtin/pack-objects.c:2317
-#: builtin/pack-objects.c:2327
+#: builtin/pack-objects.c:2336 builtin/pack-objects.c:2352
+#: builtin/pack-objects.c:2362
 #, c-format
 msgid "object %s cannot be read"
 msgstr "物件 %s 無法讀取"
 
-#: builtin/pack-objects.c:2304 builtin/pack-objects.c:2331
+#: builtin/pack-objects.c:2339 builtin/pack-objects.c:2366
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "物件 %s 不一致的物件長度(%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2341
+#: builtin/pack-objects.c:2376
 msgid "suboptimal pack - out of memory"
 msgstr "次優(suboptimal)打包 - 記憶體不足"
 
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2691
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "使用 %d 個執行緒進行壓縮"
 
-#: builtin/pack-objects.c:2795
+#: builtin/pack-objects.c:2830
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "無法為標籤 %s 壓縮物件"
 
-#: builtin/pack-objects.c:2883
+#: builtin/pack-objects.c:2916
 msgid "Compressing objects"
 msgstr "壓縮物件中"
 
-#: builtin/pack-objects.c:2889
+#: builtin/pack-objects.c:2922
 msgid "inconsistency with delta count"
 msgstr "不一致的差異計數"
 
-#: builtin/pack-objects.c:2961
+#: builtin/pack-objects.c:3001
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -17954,13 +18603,23 @@
 "uploadpack.blobpackfileuri 的值格式必須為 '<object-hash> <pack-hash> "
 "<uri>' (收到 '%s')"
 
-#: builtin/pack-objects.c:2964
+#: builtin/pack-objects.c:3004
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr "物件已經在其他 uploadpack.blobpackfileuri 設定過 (收到 '%s')"
 
-#: builtin/pack-objects.c:2993
+#: builtin/pack-objects.c:3039
+#, c-format
+msgid "could not get type of object %s in pack %s"
+msgstr "無法取得 %2$s 包中 %1$s 物件的類型"
+
+#: builtin/pack-objects.c:3161 builtin/pack-objects.c:3175
+#, c-format
+msgid "could not find pack '%s'"
+msgstr "找不到「%s」包"
+
+#: builtin/pack-objects.c:3218
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -17969,7 +18628,7 @@
 "預期邊界物件(edge object)ID,卻得到垃圾資料:\n"
 " %s"
 
-#: builtin/pack-objects.c:2999
+#: builtin/pack-objects.c:3224
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -17978,234 +18637,246 @@
 "預期物件 ID,卻得到垃圾資料:\n"
 " %s"
 
-#: builtin/pack-objects.c:3097
+#: builtin/pack-objects.c:3322
 msgid "invalid value for --missing"
 msgstr "選項 --missing 的值無效"
 
-#: builtin/pack-objects.c:3156 builtin/pack-objects.c:3264
+#: builtin/pack-objects.c:3381 builtin/pack-objects.c:3490
 msgid "cannot open pack index"
 msgstr "無法開啟包檔案索引"
 
-#: builtin/pack-objects.c:3187
+#: builtin/pack-objects.c:3412
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "無法檢查 %s 處的鬆散物件"
 
-#: builtin/pack-objects.c:3272
+#: builtin/pack-objects.c:3498
 msgid "unable to force loose object"
 msgstr "無法強制鬆散物件"
 
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3628
 #, c-format
 msgid "not a rev '%s'"
 msgstr "不是一個版本 '%s'"
 
-#: builtin/pack-objects.c:3368
+#: builtin/pack-objects.c:3631
 #, c-format
 msgid "bad revision '%s'"
 msgstr "壞的版本 '%s'"
 
-#: builtin/pack-objects.c:3393
+#: builtin/pack-objects.c:3659
 msgid "unable to add recent objects"
 msgstr "無法新增最近的物件"
 
-#: builtin/pack-objects.c:3446
+#: builtin/pack-objects.c:3712
 #, c-format
 msgid "unsupported index version %s"
 msgstr "不支援的索引版本 %s"
 
-#: builtin/pack-objects.c:3450
+#: builtin/pack-objects.c:3716
 #, c-format
 msgid "bad index version '%s'"
 msgstr "壞的索引版本 '%s'"
 
-#: builtin/pack-objects.c:3488
+#: builtin/pack-objects.c:3755
 msgid "<version>[,<offset>]"
 msgstr "<版本>[,<位移>]"
 
-#: builtin/pack-objects.c:3489
+#: builtin/pack-objects.c:3756
 msgid "write the pack index file in the specified idx format version"
 msgstr "用指定的 idx 格式版本來寫包索引檔案"
 
-#: builtin/pack-objects.c:3492
+#: builtin/pack-objects.c:3759
 msgid "maximum size of each output pack file"
 msgstr "每個輸出包的最大尺寸"
 
-#: builtin/pack-objects.c:3494
+#: builtin/pack-objects.c:3761
 msgid "ignore borrowed objects from alternate object store"
 msgstr "忽略從備用物件儲存裡借用物件"
 
-#: builtin/pack-objects.c:3496
+#: builtin/pack-objects.c:3763
 msgid "ignore packed objects"
 msgstr "忽略包物件"
 
-#: builtin/pack-objects.c:3498
+#: builtin/pack-objects.c:3765
 msgid "limit pack window by objects"
 msgstr "限制打包視窗的物件數"
 
-#: builtin/pack-objects.c:3500
+#: builtin/pack-objects.c:3767
 msgid "limit pack window by memory in addition to object limit"
 msgstr "除物件數量限制外設定打包視窗的記憶體限制"
 
-#: builtin/pack-objects.c:3502
+#: builtin/pack-objects.c:3769
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "打包允許的 delta 鏈的最大長度"
 
-#: builtin/pack-objects.c:3504
+#: builtin/pack-objects.c:3771
 msgid "reuse existing deltas"
 msgstr "重用已存在的 deltas"
 
-#: builtin/pack-objects.c:3506
+#: builtin/pack-objects.c:3773
 msgid "reuse existing objects"
 msgstr "重用已存在的物件"
 
-#: builtin/pack-objects.c:3508
+#: builtin/pack-objects.c:3775
 msgid "use OFS_DELTA objects"
 msgstr "使用 OFS_DELTA 物件"
 
-#: builtin/pack-objects.c:3510
+#: builtin/pack-objects.c:3777
 msgid "use threads when searching for best delta matches"
 msgstr "使用執行緒查詢最佳 delta 符合"
 
-#: builtin/pack-objects.c:3512
+#: builtin/pack-objects.c:3779
 msgid "do not create an empty pack output"
 msgstr "不建立空的包輸出"
 
-#: builtin/pack-objects.c:3514
+#: builtin/pack-objects.c:3781
 msgid "read revision arguments from standard input"
 msgstr "從標準輸入讀取版本號參數"
 
-#: builtin/pack-objects.c:3516
+#: builtin/pack-objects.c:3783
 msgid "limit the objects to those that are not yet packed"
 msgstr "限制那些尚未打包的物件"
 
-#: builtin/pack-objects.c:3519
+#: builtin/pack-objects.c:3786
 msgid "include objects reachable from any reference"
 msgstr "包括可以從任何引用存取到的物件"
 
-#: builtin/pack-objects.c:3522
+#: builtin/pack-objects.c:3789
 msgid "include objects referred by reflog entries"
 msgstr "包括被引用日誌引用到的物件"
 
-#: builtin/pack-objects.c:3525
+#: builtin/pack-objects.c:3792
 msgid "include objects referred to by the index"
 msgstr "包括被索引引用到的物件"
 
-#: builtin/pack-objects.c:3528
+#: builtin/pack-objects.c:3795
+msgid "read packs from stdin"
+msgstr "從標準輸入中讀取包"
+
+#: builtin/pack-objects.c:3797
 msgid "output pack to stdout"
 msgstr "輸出包到標準輸出"
 
-#: builtin/pack-objects.c:3530
+#: builtin/pack-objects.c:3799
 msgid "include tag objects that refer to objects to be packed"
 msgstr "包括那些引用了待打包物件的標籤物件"
 
-#: builtin/pack-objects.c:3532
+#: builtin/pack-objects.c:3801
 msgid "keep unreachable objects"
 msgstr "維持無法取得的物件"
 
-#: builtin/pack-objects.c:3534
+#: builtin/pack-objects.c:3803
 msgid "pack loose unreachable objects"
 msgstr "打包鬆散的無法取得物件"
 
-#: builtin/pack-objects.c:3536
+#: builtin/pack-objects.c:3805
 msgid "unpack unreachable objects newer than <time>"
 msgstr "將比提供 <時間> 新的無法存取的物件解包"
 
-#: builtin/pack-objects.c:3539
+#: builtin/pack-objects.c:3808
 msgid "use the sparse reachability algorithm"
 msgstr "使用稀疏可以取得性演算法"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3810
 msgid "create thin packs"
 msgstr "建立精簡包"
 
-#: builtin/pack-objects.c:3543
+#: builtin/pack-objects.c:3812
 msgid "create packs suitable for shallow fetches"
 msgstr "建立適合淺複製版本庫取得的包"
 
-#: builtin/pack-objects.c:3545
+#: builtin/pack-objects.c:3814
 msgid "ignore packs that have companion .keep file"
 msgstr "忽略配有 .keep 檔案的包"
 
-#: builtin/pack-objects.c:3547
+#: builtin/pack-objects.c:3816
 msgid "ignore this pack"
 msgstr "忽略該 pack"
 
-#: builtin/pack-objects.c:3549
+#: builtin/pack-objects.c:3818
 msgid "pack compression level"
 msgstr "打包壓縮級別"
 
-#: builtin/pack-objects.c:3551
+#: builtin/pack-objects.c:3820
 msgid "do not hide commits by grafts"
 msgstr "顯示被移植隱藏的提交"
 
-#: builtin/pack-objects.c:3553
+#: builtin/pack-objects.c:3822
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "使用 bitmap 索引(如果有的話)以提高物件計數時的速度"
 
-#: builtin/pack-objects.c:3555
+#: builtin/pack-objects.c:3824
 msgid "write a bitmap index together with the pack index"
 msgstr "在建立包索引的同時建立 bitmap 索引"
 
-#: builtin/pack-objects.c:3559
+#: builtin/pack-objects.c:3828
 msgid "write a bitmap index if possible"
 msgstr "如果可能,寫 bitmap 索引"
 
-#: builtin/pack-objects.c:3563
+#: builtin/pack-objects.c:3832
 msgid "handling for missing objects"
 msgstr "處理遺失的物件"
 
-#: builtin/pack-objects.c:3566
+#: builtin/pack-objects.c:3835
 msgid "do not pack objects in promisor packfiles"
 msgstr "不要打包 promisor packfile 中的物件"
 
-#: builtin/pack-objects.c:3568
+#: builtin/pack-objects.c:3837
 msgid "respect islands during delta compression"
 msgstr "在增量壓縮時參考資料島"
 
-#: builtin/pack-objects.c:3570
+#: builtin/pack-objects.c:3839
 msgid "protocol"
 msgstr "通訊協定"
 
-#: builtin/pack-objects.c:3571
+#: builtin/pack-objects.c:3840
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "排除任何設定過,使用此通訊協定的 uploadpack.blobpackfileuri"
 
-#: builtin/pack-objects.c:3600
+#: builtin/pack-objects.c:3873
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "增量鏈深度 %d 太深了,強制為 %d"
 
-#: builtin/pack-objects.c:3605
+#: builtin/pack-objects.c:3878
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "設定 pack.deltaCacheLimit 太高了,強制為 %d"
 
-#: builtin/pack-objects.c:3659
+#: builtin/pack-objects.c:3934
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "不能使用 --max-pack-size 來組建傳輸用的包檔案"
 
-#: builtin/pack-objects.c:3661
+#: builtin/pack-objects.c:3936
 msgid "minimum pack size limit is 1 MiB"
 msgstr "最小的包檔案大小是 1 MiB"
 
-#: builtin/pack-objects.c:3666
+#: builtin/pack-objects.c:3941
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin 不能用於建立一個可索引包"
 
-#: builtin/pack-objects.c:3669
+#: builtin/pack-objects.c:3944
 msgid "--keep-unreachable and --unpack-unreachable are incompatible"
 msgstr "--keep-unreachable 和 --unpack-unreachable 不相容"
 
-#: builtin/pack-objects.c:3675
+#: builtin/pack-objects.c:3950
 msgid "cannot use --filter without --stdout"
 msgstr "不能在沒有 --stdout 的情況下使用 --filter"
 
-#: builtin/pack-objects.c:3735
+#: builtin/pack-objects.c:3952
+msgid "cannot use --filter with --stdin-packs"
+msgstr "無法將 --filter 及 --stdin-packs 結合使用"
+
+#: builtin/pack-objects.c:3956
+msgid "cannot use internal rev list with --stdin-packs"
+msgstr "無法將內部版本清單與 --stdin-packs 結合使用"
+
+#: builtin/pack-objects.c:4015
 msgid "Enumerating objects"
 msgstr "枚舉物件"
 
-#: builtin/pack-objects.c:3766
+#: builtin/pack-objects.c:4052
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18214,6 +18885,20 @@
 "總共 %<PRIu32> (差異 %<PRIu32>),復用 %<PRIu32> (差異 %<PRIu32>),重用包 "
 "%<PRIu32>"
 
+#: builtin/pack-redundant.c:601
+msgid ""
+"'git pack-redundant' is nominated for removal.\n"
+"If you still use this command, please add an extra\n"
+"option, '--i-still-use-this', on the command line\n"
+"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」已被提名準備移除。\n"
+"如果您仍在使用這條命令,請在命令列多加一個選項\n"
+"「--i-still-use-this」,然後寄封電子信到\n"
+"<git@vger.kernel.org> 讓我們知道您還在使用。\n"
+"感謝。\n"
+
 #: builtin/pack-refs.c:8
 msgid "git pack-refs [<options>]"
 msgstr "git pack-refs [<選項>]"
@@ -18271,11 +18956,11 @@
 msgid "incorporate changes by rebasing rather than merging"
 msgstr "使用重定基底動作取代合併動作以套用修改"
 
-#: builtin/pull.c:158 builtin/rebase.c:490 builtin/revert.c:126
+#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
 msgid "allow fast-forward"
 msgstr "允許快轉式"
 
-#: builtin/pull.c:167 parse-options.h:339
+#: builtin/pull.c:167 parse-options.h:340
 msgid "automatically stash/stash pop before and after"
 msgstr "在動作前後執行自動儲藏和彈出儲藏"
 
@@ -18296,7 +18981,86 @@
 msgid "Invalid value for pull.ff: %s"
 msgstr "pull.ff 的取值無效:%s"
 
-#: builtin/pull.c:348
+#: builtin/pull.c:445
+msgid ""
+"There is no candidate for rebasing against among the refs that you just "
+"fetched."
+msgstr "在您剛剛取得到的引用中沒有重定基底動作的候選。"
+
+#: builtin/pull.c:447
+msgid ""
+"There are no candidates for merging among the refs that you just fetched."
+msgstr "在您剛剛取得到的引用中沒有合併動作的候選。"
+
+#: builtin/pull.c:448
+msgid ""
+"Generally this means that you provided a wildcard refspec which had no\n"
+"matches on the remote end."
+msgstr "通常這意味著您提供了一萬用字元引用規格但未能和遠端符合。"
+
+#: builtin/pull.c:451
+#, c-format
+msgid ""
+"You asked to pull from the remote '%s', but did not specify\n"
+"a branch. Because this is not the default configured remote\n"
+"for your current branch, you must specify a branch on the command line."
+msgstr ""
+"您要求從遠端 '%s' 拉取,但是未指定一個分支。因為這不是目前\n"
+"分支預設的遠端版本庫,您必須在指令列中指定一個分支名。"
+
+#: builtin/pull.c:456 builtin/rebase.c:1248
+msgid "You are not currently on a branch."
+msgstr "您目前不在一個分支上。"
+
+#: builtin/pull.c:458 builtin/pull.c:473
+msgid "Please specify which branch you want to rebase against."
+msgstr "請指定您要重定基底到哪一個分支。"
+
+#: builtin/pull.c:460 builtin/pull.c:475
+msgid "Please specify which branch you want to merge with."
+msgstr "請指定您要合併哪一個分支。"
+
+#: builtin/pull.c:461 builtin/pull.c:476
+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
+msgid "<remote>"
+msgstr "<遠端>"
+
+#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+msgid "<branch>"
+msgstr "<分支>"
+
+#: builtin/pull.c:471 builtin/rebase.c:1246
+msgid "There is no tracking information for the current branch."
+msgstr "目前分支沒有追蹤訊息。"
+
+#: builtin/pull.c:480
+msgid ""
+"If you wish to set tracking information for this branch you can do so with:"
+msgstr "如果您想要為此分支建立追蹤訊息,您可以執行:"
+
+#: builtin/pull.c:485
+#, c-format
+msgid ""
+"Your configuration specifies to merge with the ref '%s'\n"
+"from the remote, but no such ref was fetched."
+msgstr ""
+"您的設定中指定要合併遠端的引用 '%s',\n"
+"但是沒有取得到這個引用。"
+
+#: builtin/pull.c:596
+#, c-format
+msgid "unable to access commit %s"
+msgstr "無法存取提交 %s"
+
+#: builtin/pull.c:902
+msgid "ignoring --verify-signatures for rebase"
+msgstr "為重定基底動作忽略 --verify-signatures"
+
+#: builtin/pull.c:930
 msgid ""
 "Pulling without specifying how to reconcile divergent branches is\n"
 "discouraged. You can squelch this message by running one of the following\n"
@@ -18325,98 +19089,19 @@
 "pull 命令時傳遞 --rebase、--no-rebase 或 --ff-only 覆蓋\n"
 "設定的預設值。\n"
 
-#: builtin/pull.c:458
-msgid ""
-"There is no candidate for rebasing against among the refs that you just "
-"fetched."
-msgstr "在您剛剛取得到的引用中沒有重定基底動作的候選。"
-
-#: builtin/pull.c:460
-msgid ""
-"There are no candidates for merging among the refs that you just fetched."
-msgstr "在您剛剛取得到的引用中沒有合併動作的候選。"
-
-#: builtin/pull.c:461
-msgid ""
-"Generally this means that you provided a wildcard refspec which had no\n"
-"matches on the remote end."
-msgstr "通常這意味著您提供了一萬用字元引用規格但未能和遠端符合。"
-
-#: builtin/pull.c:464
-#, c-format
-msgid ""
-"You asked to pull from the remote '%s', but did not specify\n"
-"a branch. Because this is not the default configured remote\n"
-"for your current branch, you must specify a branch on the command line."
-msgstr ""
-"您要求從遠端 '%s' 拉取,但是未指定一個分支。因為這不是目前\n"
-"分支預設的遠端版本庫,您必須在指令列中指定一個分支名。"
-
-#: builtin/pull.c:469 builtin/rebase.c:1246
-msgid "You are not currently on a branch."
-msgstr "您目前不在一個分支上。"
-
-#: builtin/pull.c:471 builtin/pull.c:486
-msgid "Please specify which branch you want to rebase against."
-msgstr "請指定您要重定基底到哪一個分支。"
-
-#: builtin/pull.c:473 builtin/pull.c:488
-msgid "Please specify which branch you want to merge with."
-msgstr "請指定您要合併哪一個分支。"
-
-#: builtin/pull.c:474 builtin/pull.c:489
-msgid "See git-pull(1) for details."
-msgstr "詳見 git-pull(1)。"
-
-#: builtin/pull.c:476 builtin/pull.c:482 builtin/pull.c:491
-#: builtin/rebase.c:1252
-msgid "<remote>"
-msgstr "<遠端>"
-
-#: builtin/pull.c:476 builtin/pull.c:491 builtin/pull.c:496
-msgid "<branch>"
-msgstr "<分支>"
-
-#: builtin/pull.c:484 builtin/rebase.c:1244
-msgid "There is no tracking information for the current branch."
-msgstr "目前分支沒有追蹤訊息。"
-
-#: builtin/pull.c:493
-msgid ""
-"If you wish to set tracking information for this branch you can do so with:"
-msgstr "如果您想要為此分支建立追蹤訊息,您可以執行:"
-
-#: builtin/pull.c:498
-#, c-format
-msgid ""
-"Your configuration specifies to merge with the ref '%s'\n"
-"from the remote, but no such ref was fetched."
-msgstr ""
-"您的設定中指定要合併遠端的引用 '%s',\n"
-"但是沒有取得到這個引用。"
-
-#: builtin/pull.c:609
-#, c-format
-msgid "unable to access commit %s"
-msgstr "無法存取提交 %s"
-
-#: builtin/pull.c:915
-msgid "ignoring --verify-signatures for rebase"
-msgstr "為重定基底動作忽略 --verify-signatures"
-
-#: builtin/pull.c:972
+#: builtin/pull.c:991
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "更新尚未誕生的分支,變更新增至索引。"
 
-#: builtin/pull.c:976
+#: builtin/pull.c:995
 msgid "pull with rebase"
 msgstr "重定基底式拉取"
 
-#: builtin/pull.c:977
+#: builtin/pull.c:996
 msgid "please commit or stash them."
 msgstr "請提交或儲藏它們。"
 
-#: builtin/pull.c:1002
+#: builtin/pull.c:1021
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18426,7 +19111,7 @@
 "fetch 更新了目前的分支。快轉您的工作區\n"
 "至提交 %s。"
 
-#: builtin/pull.c:1008
+#: builtin/pull.c:1027
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18443,15 +19128,15 @@
 "$ git reset --hard\n"
 "復原之前的狀態。"
 
-#: builtin/pull.c:1023
+#: builtin/pull.c:1042
 msgid "Cannot merge multiple branches into empty head."
 msgstr "無法將多個分支合併到空分支。"
 
-#: builtin/pull.c:1027
+#: builtin/pull.c:1046
 msgid "Cannot rebase onto multiple branches."
 msgstr "無法重定基底到多個分支。"
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1067
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "本機子模組中有修改,無法重定基底"
 
@@ -18746,44 +19431,48 @@
 msgid "push options must not have new line characters"
 msgstr "推送選項不能有換行符號"
 
-#: builtin/range-diff.c:8
+#: builtin/range-diff.c:9
 msgid "git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip>"
 msgstr "git range-diff [<選項>] <old-base>..<old-tip> <new-base>..<new-tip>"
 
-#: builtin/range-diff.c:9
+#: builtin/range-diff.c:10
 msgid "git range-diff [<options>] <old-tip>...<new-tip>"
 msgstr "git range-diff [<選項>] <old-tip>...<new-tip>"
 
-#: builtin/range-diff.c:10
+#: builtin/range-diff.c:11
 msgid "git range-diff [<options>] <base> <old-tip> <new-tip>"
 msgstr "git range-diff [<選項>] <base> <old-tip> <new-tip>"
 
-#: builtin/range-diff.c:22
-msgid "Percentage by which creation is weighted"
-msgstr "建立權重的百分比"
-
-#: builtin/range-diff.c:24
+#: builtin/range-diff.c:30
 msgid "use simple diff colors"
 msgstr "使用簡單差異顏色"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "notes"
 msgstr "註解"
 
-#: builtin/range-diff.c:26
+#: builtin/range-diff.c:32
 msgid "passed to 'git log'"
 msgstr "傳遞給 'git log'"
 
-#: builtin/range-diff.c:50 builtin/range-diff.c:54
-#, c-format
-msgid "no .. in range: '%s'"
-msgstr "沒有在範圍中使用 ..:'%s'"
+#: builtin/range-diff.c:35
+msgid "only emit output related to the first range"
+msgstr "只發出跟第一個範圍相關的輸出"
 
-#: builtin/range-diff.c:64
+#: builtin/range-diff.c:37
+msgid "only emit output related to the second range"
+msgstr "只發出跟第二個範圍相關的輸出"
+
+#: builtin/range-diff.c:60 builtin/range-diff.c:64
+#, c-format
+msgid "not a commit range: '%s'"
+msgstr "不是提交範圍:「%s」"
+
+#: builtin/range-diff.c:74
 msgid "single arg format must be symmetric range"
 msgstr "單個參數格式必須是對稱範圍(即包含...)"
 
-#: builtin/range-diff.c:79
+#: builtin/range-diff.c:89
 msgid "need two commit ranges"
 msgstr "需要兩個提交範圍"
 
@@ -18855,7 +19544,7 @@
 
 #: builtin/read-tree.c:151
 msgid "skip applying sparse checkout filter"
-msgstr "跳過應用稀疏檢出過濾器"
+msgstr "略過套用稀疏檢出過濾器"
 
 #: builtin/read-tree.c:153
 msgid "debug unpack-trees"
@@ -18874,206 +19563,206 @@
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
 msgstr ""
-"git rebase [-i] [options] [--exec <指令>] [--onto <新基礎> | --keep-base] [<"
+"git rebase [-i] [options] [--exec <命令>] [--onto <新基礎> | --keep-base] [<"
 "上游> [<分支>]]"
 
 #: builtin/rebase.c:37
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
-"git rebase [-i] [選項] [--exec <指令>] [--onto <新基礎>] --root [<分支>]"
+"git rebase [-i] [選項] [--exec <命令>] [--onto <新基礎>] --root [<分支>]"
 
 #: builtin/rebase.c:39
 msgid "git rebase --continue | --abort | --skip | --edit-todo"
 msgstr "git rebase --continue | --abort | --skip | --edit-todo"
 
-#: builtin/rebase.c:193 builtin/rebase.c:217 builtin/rebase.c:244
+#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
 #, c-format
 msgid "unusable todo list: '%s'"
 msgstr "不可用的待辦列表:'%s'"
 
-#: builtin/rebase.c:310
+#: builtin/rebase.c:311
 #, c-format
 msgid "could not create temporary %s"
 msgstr "無法建立暫時的 %s"
 
-#: builtin/rebase.c:316
+#: builtin/rebase.c:317
 msgid "could not mark as interactive"
 msgstr "無法標記為互動式"
 
-#: builtin/rebase.c:369
+#: builtin/rebase.c:370
 msgid "could not generate todo list"
 msgstr "無法生成待辦列表"
 
-#: builtin/rebase.c:411
+#: builtin/rebase.c:412
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "使用 --upstream 或 --onto 必須提供一個基礎提交"
 
-#: builtin/rebase.c:480
+#: builtin/rebase.c:481
 msgid "git rebase--interactive [<options>]"
 msgstr "git rebase--interactive [<選項>]"
 
-#: builtin/rebase.c:493 builtin/rebase.c:1388
+#: builtin/rebase.c:494 builtin/rebase.c:1389
 msgid "keep commits which start empty"
 msgstr "保留開頭是空白的提交"
 
-#: builtin/rebase.c:497 builtin/revert.c:128
+#: builtin/rebase.c:498 builtin/revert.c:128
 msgid "allow commits with empty messages"
 msgstr "允許提交說明為空"
 
-#: builtin/rebase.c:499
+#: builtin/rebase.c:500
 msgid "rebase merge commits"
 msgstr "對合併提交重定基底"
 
-#: builtin/rebase.c:501
+#: builtin/rebase.c:502
 msgid "keep original branch points of cousins"
 msgstr "保持兄弟提交的原始分支點"
 
-#: builtin/rebase.c:503
+#: builtin/rebase.c:504
 msgid "move commits that begin with squash!/fixup!"
 msgstr "移動以 squash!/fixup! 開頭的提交"
 
-#: builtin/rebase.c:504
+#: builtin/rebase.c:505
 msgid "sign commits"
 msgstr "簽名提交"
 
-#: builtin/rebase.c:506 builtin/rebase.c:1327
+#: builtin/rebase.c:507 builtin/rebase.c:1328
 msgid "display a diffstat of what changed upstream"
 msgstr "顯示上游變化的差異統計"
 
-#: builtin/rebase.c:508
+#: builtin/rebase.c:509
 msgid "continue rebase"
 msgstr "繼續重定基底"
 
-#: builtin/rebase.c:510
-msgid "skip commit"
-msgstr "跳過提交"
-
 #: builtin/rebase.c:511
+msgid "skip commit"
+msgstr "略過提交"
+
+#: builtin/rebase.c:512
 msgid "edit the todo list"
 msgstr "重定基底待辦列表"
 
-#: builtin/rebase.c:513
+#: builtin/rebase.c:514
 msgid "show the current patch"
 msgstr "顯示目前修補檔"
 
-#: builtin/rebase.c:516
+#: builtin/rebase.c:517
 msgid "shorten commit ids in the todo list"
 msgstr "縮短待辦列表中的提交號"
 
-#: builtin/rebase.c:518
+#: builtin/rebase.c:519
 msgid "expand commit ids in the todo list"
 msgstr "擴展待辦列表中的提交號"
 
-#: builtin/rebase.c:520
+#: builtin/rebase.c:521
 msgid "check the todo list"
 msgstr "檢查待辦列表"
 
-#: builtin/rebase.c:522
+#: builtin/rebase.c:523
 msgid "rearrange fixup/squash lines"
 msgstr "重新排列 fixup/squash 行"
 
-#: builtin/rebase.c:524
+#: builtin/rebase.c:525
 msgid "insert exec commands in todo list"
 msgstr "在待辦列表中插入 exec 執行指令"
 
-#: builtin/rebase.c:525
+#: builtin/rebase.c:526
 msgid "onto"
 msgstr "onto"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict-revision"
 msgstr "restrict-revision"
 
-#: builtin/rebase.c:528
+#: builtin/rebase.c:529
 msgid "restrict revision"
 msgstr "限制版本"
 
-#: builtin/rebase.c:530
+#: builtin/rebase.c:531
 msgid "squash-onto"
 msgstr "squash-onto"
 
-#: builtin/rebase.c:531
+#: builtin/rebase.c:532
 msgid "squash onto"
 msgstr "squash onto"
 
-#: builtin/rebase.c:533
+#: builtin/rebase.c:534
 msgid "the upstream commit"
 msgstr "上游提交"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head-name"
 msgstr "head-name"
 
-#: builtin/rebase.c:535
+#: builtin/rebase.c:536
 msgid "head name"
 msgstr "head 名稱"
 
-#: builtin/rebase.c:540
+#: builtin/rebase.c:541
 msgid "rebase strategy"
 msgstr "重定基底策略"
 
-#: builtin/rebase.c:541
+#: builtin/rebase.c:542
 msgid "strategy-opts"
 msgstr "strategy-opts"
 
-#: builtin/rebase.c:542
+#: builtin/rebase.c:543
 msgid "strategy options"
 msgstr "策略選項"
 
-#: builtin/rebase.c:543
+#: builtin/rebase.c:544
 msgid "switch-to"
 msgstr "切換到"
 
-#: builtin/rebase.c:544
+#: builtin/rebase.c:545
 msgid "the branch or commit to checkout"
 msgstr "要檢出的分支或提交"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto-name"
 msgstr "onto-name"
 
-#: builtin/rebase.c:545
+#: builtin/rebase.c:546
 msgid "onto name"
 msgstr "onto name"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "cmd"
 msgstr "cmd"
 
-#: builtin/rebase.c:546
+#: builtin/rebase.c:547
 msgid "the command to run"
 msgstr "要執行的指令"
 
-#: builtin/rebase.c:549 builtin/rebase.c:1421
+#: builtin/rebase.c:550 builtin/rebase.c:1422
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "自動重新安排任何失敗的 `exec`"
 
-#: builtin/rebase.c:565
+#: builtin/rebase.c:566
 msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
 msgstr "不使用 --rebase-merges,則 --[no-]rebase-cousins 沒有效果"
 
-#: builtin/rebase.c:581
+#: builtin/rebase.c:582
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s 需要合併後端"
 
-#: builtin/rebase.c:624
+#: builtin/rebase.c:625
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "無法取得 'onto':'%s'"
 
-#: builtin/rebase.c:641
+#: builtin/rebase.c:642
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "無效的原始 head:'%s'"
 
-#: builtin/rebase.c:666
+#: builtin/rebase.c:667
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "忽略無效的 allow_rerere_autoupdate:'%s'"
 
-#: builtin/rebase.c:811 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19083,10 +19772,10 @@
 msgstr ""
 "手動解決所有衝突,執行 \"git add/rm <衝突的檔案>\" 標記\n"
 "衝突已解決,然後執行 \"git rebase --continue\"。您也可以執行\n"
-"\"git rebase --skip\" 指令跳過這個提交。如果想要終止執行並回到\n"
+"\"git rebase --skip\" 指令略過這個提交。如果想要終止執行並回到\n"
 "\"git rebase\" 執行之前的狀態,執行 \"git rebase --abort\"。"
 
-#: builtin/rebase.c:894
+#: builtin/rebase.c:896
 #, c-format
 msgid ""
 "\n"
@@ -19104,14 +19793,14 @@
 "\n"
 "因此 git 無法對其重定基底。"
 
-#: builtin/rebase.c:1220
+#: builtin/rebase.c:1222
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr "無法識別的 '%s' 空類型;有效的數值有 \"drop\"、\"keep\" 跟 \"ask\"。"
 
-#: builtin/rebase.c:1238
+#: builtin/rebase.c:1240
 #, c-format
 msgid ""
 "%s\n"
@@ -19128,7 +19817,7 @@
 "    git rebase '<branch>'\n"
 "\n"
 
-#: builtin/rebase.c:1254
+#: builtin/rebase.c:1256
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19141,189 +19830,181 @@
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:1284
+#: builtin/rebase.c:1286
 msgid "exec commands cannot contain newlines"
 msgstr "exec 指令不能包含換行符號"
 
-#: builtin/rebase.c:1288
+#: builtin/rebase.c:1290
 msgid "empty exec command"
 msgstr "空的 exec 指令"
 
-#: builtin/rebase.c:1318
+#: builtin/rebase.c:1319
 msgid "rebase onto given branch instead of upstream"
 msgstr "重定基底到提供的分支而非上游"
 
-#: builtin/rebase.c:1320
+#: builtin/rebase.c:1321
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "使用上游和分支的合併基礎做為目前基礎"
 
-#: builtin/rebase.c:1322
+#: builtin/rebase.c:1323
 msgid "allow pre-rebase hook to run"
 msgstr "允許執行 pre-rebase 掛鉤"
 
-#: builtin/rebase.c:1324
+#: builtin/rebase.c:1325
 msgid "be quiet. implies --no-stat"
 msgstr "安靜。暗示 --no-stat"
 
-#: builtin/rebase.c:1330
+#: builtin/rebase.c:1331
 msgid "do not show diffstat of what changed upstream"
 msgstr "不顯示上游變化的差異統計"
 
-#: builtin/rebase.c:1333
+#: builtin/rebase.c:1334
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "在每個提交結尾加入 Signed-off-by"
 
-#: builtin/rebase.c:1336
+#: builtin/rebase.c:1337
 msgid "make committer date match author date"
 msgstr "使提交日期與製作日期相符合"
 
-#: builtin/rebase.c:1338
+#: builtin/rebase.c:1339
 msgid "ignore author date and use current date"
 msgstr "忽略製作日期而使用日前日期"
 
-#: builtin/rebase.c:1340
+#: builtin/rebase.c:1341
 msgid "synonym of --reset-author-date"
 msgstr "和 --reset-author-date 同義"
 
-#: builtin/rebase.c:1342 builtin/rebase.c:1346
+#: builtin/rebase.c:1343 builtin/rebase.c:1347
 msgid "passed to 'git apply'"
 msgstr "傳遞給 'git apply'"
 
-#: builtin/rebase.c:1344
+#: builtin/rebase.c:1345
 msgid "ignore changes in whitespace"
 msgstr "忽略空白字元中的變更"
 
-#: builtin/rebase.c:1348 builtin/rebase.c:1351
+#: builtin/rebase.c:1349 builtin/rebase.c:1352
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "揀選所有提交,即使未修改"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1354
 msgid "continue"
 msgstr "繼續"
 
-#: builtin/rebase.c:1356
+#: builtin/rebase.c:1357
 msgid "skip current patch and continue"
-msgstr "跳過目前修補檔並繼續"
+msgstr "略過目前修補檔並繼續"
 
 #  譯者:請維持前導空格
-#: builtin/rebase.c:1358
+#: builtin/rebase.c:1359
 msgid "abort and check out the original branch"
 msgstr "終止並檢出原有分支"
 
-#: builtin/rebase.c:1361
+#: builtin/rebase.c:1362
 msgid "abort but keep HEAD where it is"
 msgstr "終止但保持 HEAD 不變"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1363
 msgid "edit the todo list during an interactive rebase"
 msgstr "在互動式重定基底中編輯待辦列表"
 
-#: builtin/rebase.c:1365
+#: builtin/rebase.c:1366
 msgid "show the patch file being applied or merged"
 msgstr "顯示正在套用或合併的修補檔案"
 
-#: builtin/rebase.c:1368
+#: builtin/rebase.c:1369
 msgid "use apply strategies to rebase"
 msgstr "使用套用策略進行重定基底"
 
-#: builtin/rebase.c:1372
+#: builtin/rebase.c:1373
 msgid "use merging strategies to rebase"
 msgstr "使用合併策略進行重定基底"
 
-#: builtin/rebase.c:1376
+#: builtin/rebase.c:1377
 msgid "let the user edit the list of commits to rebase"
 msgstr "讓使用者編輯要重定基底的提交列表"
 
-#: builtin/rebase.c:1380
+#: builtin/rebase.c:1381
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(已棄用)嘗試重建合併提交而非忽略它們"
 
-#: builtin/rebase.c:1385
+#: builtin/rebase.c:1386
 msgid "how to handle commits that become empty"
 msgstr "處理空白提交的方式"
 
-#: builtin/rebase.c:1392
+#: builtin/rebase.c:1393
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "在 -i 互動模式下,移動以 squash!/fixup! 開頭的提交"
 
-#: builtin/rebase.c:1399
+#: builtin/rebase.c:1400
 msgid "add exec lines after each commit of the editable list"
 msgstr "可編輯列表的每一個提交下面增加一行 exec"
 
-#: builtin/rebase.c:1403
+#: builtin/rebase.c:1404
 msgid "allow rebasing commits with empty messages"
 msgstr "允許針對空提交說明的提交重定基底"
 
-#: builtin/rebase.c:1407
+#: builtin/rebase.c:1408
 msgid "try to rebase merges instead of skipping them"
 msgstr "嘗試對合併提交重定基底而不是忽略它們"
 
-#: builtin/rebase.c:1410
+#: builtin/rebase.c:1411
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "使用 'merge-base --fork-point' 來最佳化上游"
 
-#: builtin/rebase.c:1412
+#: builtin/rebase.c:1413
 msgid "use the given merge strategy"
 msgstr "使用提供的合併策略"
 
-#: builtin/rebase.c:1414 builtin/revert.c:115
+#: builtin/rebase.c:1415 builtin/revert.c:115
 msgid "option"
 msgstr "選項"
 
-#: builtin/rebase.c:1415
+#: builtin/rebase.c:1416
 msgid "pass the argument through to the merge strategy"
 msgstr "將參數傳遞給合併策略"
 
-#: builtin/rebase.c:1418
+#: builtin/rebase.c:1419
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "將所有可以取得的提交重定基底到根提交"
 
-#: builtin/rebase.c:1423
+#: builtin/rebase.c:1424
 msgid "apply all changes, even those already present upstream"
 msgstr "即使已提供上游,仍套用所有變更"
 
-#: builtin/rebase.c:1440
-msgid ""
-"the rebase.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"對 rebase.useBuiltin 的支援已被刪除!\n"
-"詳見 'git help config' 中的條目。"
-
-#: builtin/rebase.c:1446
+#: builtin/rebase.c:1442
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "看起來 'git-am' 正在執行中。無法重定基底。"
 
-#: builtin/rebase.c:1487
+#: builtin/rebase.c:1483
 msgid ""
 "git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
 msgstr "git rebase --preserve-merges 被棄用。用 --rebase-merges 代替。"
 
-#: builtin/rebase.c:1492
+#: builtin/rebase.c:1488
 msgid "cannot combine '--keep-base' with '--onto'"
 msgstr "不能將 '--keep-base' 和 '--onto' 組合使用"
 
-#: builtin/rebase.c:1494
+#: builtin/rebase.c:1490
 msgid "cannot combine '--keep-base' with '--root'"
 msgstr "不能將 '--keep-base' 和 '--root' 組合使用"
 
-#: builtin/rebase.c:1498
+#: builtin/rebase.c:1494
 msgid "cannot combine '--root' with '--fork-point'"
 msgstr "不能將 '--root' 和 '--fork-point' 結合使用"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1497
 msgid "No rebase in progress?"
 msgstr "沒有正在進行的重定基底?"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1501
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "動作 --edit-todo 只能用在互動式重定基底過程中。"
 
-#: builtin/rebase.c:1528 t/helper/test-fast-rebase.c:123
+#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:123
 msgid "Cannot read HEAD"
 msgstr "不能讀取 HEAD"
 
-#: builtin/rebase.c:1540
+#: builtin/rebase.c:1536
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19331,16 +20012,16 @@
 "您必須編輯所有的合併衝突,然後透過 git add\n"
 "指令將它們標記為已解決"
 
-#: builtin/rebase.c:1559
+#: builtin/rebase.c:1555
 msgid "could not discard worktree changes"
 msgstr "無法捨棄工作區變更"
 
-#: builtin/rebase.c:1578
+#: builtin/rebase.c:1574
 #, c-format
 msgid "could not move back to %s"
 msgstr "無法移回 %s"
 
-#: builtin/rebase.c:1624
+#: builtin/rebase.c:1620
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19359,132 +20040,132 @@
 "\t%s\n"
 "然後再重新執行。 為避免遺失重要資料,我已經停止目前動作。\n"
 
-#: builtin/rebase.c:1652
+#: builtin/rebase.c:1648
 msgid "switch `C' expects a numerical value"
 msgstr "開關 `C' 期望一個數字值"
 
-#: builtin/rebase.c:1694
+#: builtin/rebase.c:1690
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "未知模式:%s"
 
-#: builtin/rebase.c:1733
+#: builtin/rebase.c:1729
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy 需要 --merge 或 --interactive"
 
-#: builtin/rebase.c:1763
+#: builtin/rebase.c:1759
 msgid "cannot combine apply options with merge options"
 msgstr "不能將 apply 套用選項與 merge 合併選項一起使用"
 
-#: builtin/rebase.c:1776
+#: builtin/rebase.c:1772
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "未知 rebase 後端:%s"
 
-#: builtin/rebase.c:1806
+#: builtin/rebase.c:1802
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec 需要 --exec 或 --interactive"
 
-#: builtin/rebase.c:1826
+#: builtin/rebase.c:1822
 msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
 msgstr "不能將 '--preserve-merges' 和 '--rebase-merges' 同時使用"
 
-#: builtin/rebase.c:1830
+#: builtin/rebase.c:1826
 msgid ""
 "error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
 msgstr ""
 "錯誤:不能將 '--preserve-merges' 和 '--reschedule-failed-exec' 同時使用"
 
-#: builtin/rebase.c:1854
+#: builtin/rebase.c:1850
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "無效的上游 '%s'"
 
-#: builtin/rebase.c:1860
+#: builtin/rebase.c:1856
 msgid "Could not create new root commit"
 msgstr "不能建立新的根提交"
 
-#: builtin/rebase.c:1886
+#: builtin/rebase.c:1882
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s':只需要與分支的一個合併基礎"
 
-#: builtin/rebase.c:1889
+#: builtin/rebase.c:1885
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s':只需要一個合併基礎"
 
-#: builtin/rebase.c:1897
+#: builtin/rebase.c:1893
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "沒有指向一個有效的提交 '%s'"
 
-#: builtin/rebase.c:1923
+#: builtin/rebase.c:1921
 #, c-format
 msgid "fatal: no such branch/commit '%s'"
 msgstr "致命錯誤:無此分支/提交 '%s'"
 
-#: builtin/rebase.c:1931 builtin/submodule--helper.c:40
-#: builtin/submodule--helper.c:2414
+#: builtin/rebase.c:1929 builtin/submodule--helper.c:40
+#: builtin/submodule--helper.c:2415
 #, c-format
 msgid "No such ref: %s"
 msgstr "沒有這樣的引用:%s"
 
-#: builtin/rebase.c:1942
+#: builtin/rebase.c:1940
 msgid "Could not resolve HEAD to a revision"
 msgstr "無法將 HEAD 解析為一個版本"
 
-#: builtin/rebase.c:1963
+#: builtin/rebase.c:1961
 msgid "Please commit or stash them."
 msgstr "請提交或儲藏修改。"
 
-#: builtin/rebase.c:1999
+#: builtin/rebase.c:1997
 #, c-format
 msgid "could not switch to %s"
 msgstr "無法切換到 %s"
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:2008
 msgid "HEAD is up to date."
 msgstr "HEAD 是最新的。"
 
-#: builtin/rebase.c:2012
+#: builtin/rebase.c:2010
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "目前分支 %s 是最新的。\n"
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:2018
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD 是最新的,強制重定基底。"
 
-#: builtin/rebase.c:2022
+#: builtin/rebase.c:2020
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "目前分支 %s 是最新的,強制重定基底。\n"
 
-#: builtin/rebase.c:2030
+#: builtin/rebase.c:2028
 msgid "The pre-rebase hook refused to rebase."
 msgstr "pre-rebase 掛鉤拒絕了重定基底動作。"
 
-#: builtin/rebase.c:2037
+#: builtin/rebase.c:2035
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "到 %s 的變更:\n"
 
-#: builtin/rebase.c:2040
+#: builtin/rebase.c:2038
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "從 %s 到 %s 的變更:\n"
 
-#: builtin/rebase.c:2065
+#: builtin/rebase.c:2063
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr "首先,還原開頭指標以便在其上重放您的工作...\n"
 
-#: builtin/rebase.c:2074
+#: builtin/rebase.c:2072
 msgid "Could not detach HEAD"
 msgstr "無法分離開頭指標"
 
-#: builtin/rebase.c:2083
+#: builtin/rebase.c:2081
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "快轉 %s 到 %s。\n"
@@ -19538,11 +20219,11 @@
 "\n"
 "若要封鎖此訊息,您可以設定它為 'refuse'。"
 
-#: builtin/receive-pack.c:2481
+#: builtin/receive-pack.c:2479
 msgid "quiet"
 msgstr "靜默模式"
 
-#: builtin/receive-pack.c:2495
+#: builtin/receive-pack.c:2493
 msgid "You must specify a directory."
 msgstr "您必須指定一個目錄。"
 
@@ -19573,36 +20254,36 @@
 msgid "'%s' is not a valid timestamp"
 msgstr "'%s' 不是一個有效的時間戳"
 
-#: builtin/reflog.c:606
+#: builtin/reflog.c:609
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "正在標記可以取得物件..."
 
-#: builtin/reflog.c:644
+#: builtin/reflog.c:647
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s 指向不存在!"
 
-#: builtin/reflog.c:696
+#: builtin/reflog.c:699
 msgid "no reflog specified to delete"
 msgstr "未指定要刪除的引用日誌"
 
-#: builtin/reflog.c:705
+#: builtin/reflog.c:708
 #, c-format
 msgid "not a reflog: %s"
 msgstr "不是一個引用日誌:%s"
 
-#: builtin/reflog.c:710
+#: builtin/reflog.c:713
 #, c-format
 msgid "no reflog for '%s'"
 msgstr "沒有 '%s' 的引用日誌"
 
-#: builtin/reflog.c:756
+#: builtin/reflog.c:759
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "無效的引用格式:%s"
 
-#: builtin/reflog.c:765
+#: builtin/reflog.c:768
 msgid "git reflog [ show | expire | delete | exists ]"
 msgstr "git reflog [ show | expire | delete | exists ]"
 
@@ -19776,7 +20457,7 @@
 "\t%s:%d\n"
 "現命名成不存在的遠端分支 '%s'"
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:946
+#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "沒有此遠端版本庫:'%s'"
@@ -20109,11 +20790,11 @@
 msgid "Will not delete all non-push URLs"
 msgstr "將不會刪除所有非推送 URL 位址"
 
-#: builtin/repack.c:25
+#: builtin/repack.c:26
 msgid "git repack [<options>]"
 msgstr "git repack [<選項>]"
 
-#: builtin/repack.c:30
+#: builtin/repack.c:31
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20121,116 +20802,140 @@
 "增量 repack 和 bitmap 索引不相容。  使用 --no-write-bitmap-index\n"
 "或停用 pack.writebitmaps 設定。"
 
-#: builtin/repack.c:197
+#: builtin/repack.c:198
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "無法開始 pack-objects 來重新打包 promisor 物件"
 
-#: builtin/repack.c:268 builtin/repack.c:447
+#: builtin/repack.c:270 builtin/repack.c:630
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr "repack:期望來自 pack-objects 的完整十六進位物件 ID。"
 
-#: builtin/repack.c:295
+#: builtin/repack.c:294
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "無法完成 pack-objects 來重新打包 promisor 物件"
 
-#: builtin/repack.c:323
+#: builtin/repack.c:309
+#, c-format
+msgid "cannot open index for %s"
+msgstr "無法開啟 %s 的索引"
+
+#: builtin/repack.c:368
+#, 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
+#, c-format
+msgid "pack %s too large to roll up"
+msgstr "%s 包太大,以致不能縮合"
+
+#: builtin/repack.c:460
 msgid "pack everything in a single pack"
 msgstr "所有內容打包到一個包檔案中"
 
-#: builtin/repack.c:325
+#: builtin/repack.c:462
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "和 -a 相同,並將無法取得的物件設為鬆散物件"
 
-#: builtin/repack.c:328
+#: builtin/repack.c:465
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "刪除多餘的包,執行 git-prune-packed"
 
-#: builtin/repack.c:330
+#: builtin/repack.c:467
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --no-reuse-delta"
 
-#: builtin/repack.c:332
+#: builtin/repack.c:469
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --no-reuse-object"
 
-#: builtin/repack.c:334
+#: builtin/repack.c:471
 msgid "do not run git-update-server-info"
 msgstr "不執行 git-update-server-info"
 
-#: builtin/repack.c:337
+#: builtin/repack.c:474
 msgid "pass --local to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --local"
 
-#: builtin/repack.c:339
+#: builtin/repack.c:476
 msgid "write bitmap index"
 msgstr "寫 bitmap 索引"
 
-#: builtin/repack.c:341
+#: builtin/repack.c:478
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --delta-islands"
 
-#: builtin/repack.c:342
+#: builtin/repack.c:479
 msgid "approxidate"
 msgstr "近似日期"
 
-#: builtin/repack.c:343
+#: builtin/repack.c:480
 msgid "with -A, do not loosen objects older than this"
 msgstr "使用 -A,不要將早於提供時間的物件過期"
 
-#: builtin/repack.c:345
+#: builtin/repack.c:482
 msgid "with -a, repack unreachable objects"
 msgstr "使用 -a ,重新對無法取得物件打包"
 
-#: builtin/repack.c:347
+#: builtin/repack.c:484
 msgid "size of the window used for delta compression"
 msgstr "用於增量壓縮的視窗值"
 
-#: builtin/repack.c:348 builtin/repack.c:354
+#: builtin/repack.c:485 builtin/repack.c:491
 msgid "bytes"
 msgstr "位元組"
 
-#: builtin/repack.c:349
+#: builtin/repack.c:486
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "和上面的相似,但限制記憶體大小而非條目數"
 
-#: builtin/repack.c:351
+#: builtin/repack.c:488
 msgid "limits the maximum delta depth"
 msgstr "限制最大增量深度"
 
-#: builtin/repack.c:353
+#: builtin/repack.c:490
 msgid "limits the maximum number of threads"
 msgstr "限制最大執行緒數"
 
-#: builtin/repack.c:355
+#: builtin/repack.c:492
 msgid "maximum size of each packfile"
 msgstr "每個 packfile 的最大尺寸"
 
-#: builtin/repack.c:357
+#: builtin/repack.c:494
 msgid "repack objects in packs marked with .keep"
 msgstr "對標記為 .keep 的包中的物件重新打包"
 
-#: builtin/repack.c:359
+#: builtin/repack.c:496
 msgid "do not repack this pack"
 msgstr "不要對該包檔案重新打包"
 
-#: builtin/repack.c:369
+#: builtin/repack.c:498
+msgid "find a geometric progression with factor <N>"
+msgstr "尋找因數是 <N> 的等比數列"
+
+#: builtin/repack.c:508
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "不能刪除珍品版本庫中的打包檔案"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:512
 msgid "--keep-unreachable and -A are incompatible"
 msgstr "--keep-unreachable 和 -A 不相容"
 
-#: builtin/repack.c:456
+#: builtin/repack.c:527
+#| msgid "--long is incompatible with --abbrev=0"
+msgid "--geometric is incompatible with -A, -a"
+msgstr "--geometric 與 -A, -a 不相容"
+
+#: builtin/repack.c:639
 msgid "Nothing new to pack."
 msgstr "沒有新的要打包。"
 
-#: builtin/repack.c:486
+#: builtin/repack.c:669
 #, c-format
 msgid "missing required file: %s"
 msgstr "缺少必要檔案:%s"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:671
 #, c-format
 msgid "could not unlink: %s"
 msgstr "無法取消連結:%s"
@@ -20561,8 +21266,8 @@
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "在合併過程中不能做%s重設動作。"
 
-#: builtin/reset.c:295 builtin/stash.c:520 builtin/stash.c:594
-#: builtin/stash.c:618
+#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
+#: builtin/stash.c:687
 msgid "be quiet, only report errors"
 msgstr "安靜模式,只報告錯誤"
 
@@ -20645,19 +21350,19 @@
 msgid "Could not write new index file."
 msgstr "不能寫入新的索引檔案。"
 
-#: builtin/rev-list.c:499
+#: builtin/rev-list.c:538
 msgid "cannot combine --exclude-promisor-objects and --missing"
 msgstr "不能同時使用 --exclude-promisor-objects 和 --missing 選項"
 
-#: builtin/rev-list.c:560
+#: builtin/rev-list.c:599
 msgid "object filtering requires --objects"
 msgstr "物件過濾需要 --objects"
 
-#: builtin/rev-list.c:610
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list 不支援顯示註解"
 
-#: builtin/rev-list.c:615
+#: builtin/rev-list.c:664
 msgid "marked counting is incompatible with --objects"
 msgstr "--objects 不相容標記計數 (marked counting)"
 
@@ -20731,7 +21436,7 @@
 
 #: builtin/revert.c:105
 msgid "skip current commit and continue"
-msgstr "跳過目前提交並繼續"
+msgstr "略過目前提交並繼續"
 
 #: builtin/revert.c:107
 msgid "don't automatically commit"
@@ -20769,19 +21474,19 @@
 msgid "keep redundant, empty commits"
 msgstr "保持多餘的、空的提交"
 
-#: builtin/revert.c:239
+#: builtin/revert.c:237
 msgid "revert failed"
 msgstr "還原失敗"
 
-#: builtin/revert.c:252
+#: builtin/revert.c:250
 msgid "cherry-pick failed"
 msgstr "揀選失敗"
 
-#: builtin/rm.c:19
+#: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
 msgstr "git rm [<選項>] [--] <檔案>..."
 
-#: builtin/rm.c:207
+#: builtin/rm.c:208
 msgid ""
 "the following file has staged content different from both the\n"
 "file and the HEAD:"
@@ -20790,7 +21495,7 @@
 "file and the HEAD:"
 msgstr[0] "如下檔案其暫存的內容和工作區及 HEAD 中的都不一樣:"
 
-#: builtin/rm.c:212
+#: builtin/rm.c:213
 msgid ""
 "\n"
 "(use -f to force removal)"
@@ -20798,12 +21503,12 @@
 "\n"
 "(使用 -f 強制刪除)"
 
-#: builtin/rm.c:216
+#: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
 msgstr[0] "下列檔案索引中有變更"
 
-#: builtin/rm.c:220 builtin/rm.c:229
+#: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
 "\n"
 "(use --cached to keep the file, or -f to force removal)"
@@ -20811,45 +21516,45 @@
 "\n"
 "(使用 --cached 保留本機檔案,或用 -f 強制刪除)"
 
-#: builtin/rm.c:226
+#: builtin/rm.c:227
 msgid "the following file has local modifications:"
 msgid_plural "the following files have local modifications:"
 msgstr[0] "如下檔案有本機修改:"
 
-#: builtin/rm.c:243
+#: builtin/rm.c:244
 msgid "do not list removed files"
 msgstr "不列出刪除的檔案"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "only remove from the index"
 msgstr "只從索引區刪除"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "override the up-to-date check"
 msgstr "忽略檔案更新狀態檢查"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "allow recursive removal"
 msgstr "允許遞迴刪除"
 
-#: builtin/rm.c:248
+#: builtin/rm.c:249
 msgid "exit with a zero status even if nothing matched"
 msgstr "即使沒有符合,也以零狀態離開"
 
-#: builtin/rm.c:282
+#: builtin/rm.c:283
 msgid "No pathspec was given. Which files should I remove?"
 msgstr "沒有提供路徑規格。我該移除哪個檔案?"
 
-#: builtin/rm.c:305
+#: builtin/rm.c:310
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr "請將您的修改暫存到 .gitmodules 中或儲藏後再繼續"
 
-#: builtin/rm.c:323
+#: builtin/rm.c:331
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "未提供 -r 選項不會遞迴刪除 '%s'"
 
-#: builtin/rm.c:362
+#: builtin/rm.c:379
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm:不能刪除 %s"
@@ -20889,52 +21594,52 @@
 msgid "git log --pretty=short | git shortlog [<options>]"
 msgstr "git log --pretty=short | git shortlog [<選項>]"
 
-#: builtin/shortlog.c:135
+#: builtin/shortlog.c:123
 msgid "using multiple --group options with stdin is not supported"
 msgstr "不支援在標準輸入使用多個 --group 選項"
 
-#: builtin/shortlog.c:145
+#: builtin/shortlog.c:133
 msgid "using --group=trailer with stdin is not supported"
 msgstr "不支援在標準輸入使用 --group=trailer"
 
-#: builtin/shortlog.c:335
+#: builtin/shortlog.c:323
 #, c-format
 msgid "unknown group type: %s"
 msgstr "未知群組類型:%s"
 
-#: builtin/shortlog.c:363
-msgid "Group by committer rather than author"
-msgstr "按照提交者分組而不是作者"
+#: builtin/shortlog.c:351
+msgid "group by committer rather than author"
+msgstr "依提交者而非作者分組"
 
-#: builtin/shortlog.c:366
+#: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
 msgstr "根據每個作者的提交數量排序"
 
-#: builtin/shortlog.c:368
-msgid "Suppress commit descriptions, only provides commit count"
+#: builtin/shortlog.c:356
+msgid "suppress commit descriptions, only provides commit count"
 msgstr "隱藏提交說明,只提供提交數量"
 
-#: builtin/shortlog.c:370
-msgid "Show the email address of each author"
+#: builtin/shortlog.c:358
+msgid "show the email address of each author"
 msgstr "顯示每個作者的電子信件位址"
 
-#: builtin/shortlog.c:371
+#: builtin/shortlog.c:359
 msgid "<w>[,<i1>[,<i2>]]"
 msgstr "<w>[,<i1>[,<i2>]]"
 
-#: builtin/shortlog.c:372
-msgid "Linewrap output"
+#: builtin/shortlog.c:360
+msgid "linewrap output"
 msgstr "折行輸出"
 
-#: builtin/shortlog.c:374
+#: builtin/shortlog.c:362
 msgid "field"
 msgstr "欄位"
 
-#: builtin/shortlog.c:375
-msgid "Group by field"
+#: builtin/shortlog.c:363
+msgid "group by field"
 msgstr "依欄位分組"
 
-#: builtin/shortlog.c:403
+#: builtin/shortlog.c:391
 msgid "too many arguments given outside repository"
 msgstr "版本庫外執行提供了太多的參數"
 
@@ -21121,102 +21826,111 @@
 msgid "show refs from stdin that aren't in local repository"
 msgstr "顯示從標準輸入中讀入的不在本機版本庫中的引用"
 
-#: builtin/sparse-checkout.c:21
+#: builtin/sparse-checkout.c:22
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <選項>"
 
-#: builtin/sparse-checkout.c:50
+#: builtin/sparse-checkout.c:46
 msgid "git sparse-checkout list"
 msgstr "git sparse-checkout list"
 
-#: builtin/sparse-checkout.c:76
+#: builtin/sparse-checkout.c:72
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr "這不是稀疏工作區(sparse-checkout 檔案可能不存在)"
 
-#: builtin/sparse-checkout.c:228
+#: builtin/sparse-checkout.c:227
 msgid "failed to create directory for sparse-checkout file"
 msgstr "無法建立稀疏檢出檔案的目錄"
 
-#: builtin/sparse-checkout.c:269
+#: builtin/sparse-checkout.c:268
 msgid "unable to upgrade repository format to enable worktreeConfig"
 msgstr "無法升級版本庫格式,以致無法啟用 worktreeConfig"
 
-#: builtin/sparse-checkout.c:271
+#: builtin/sparse-checkout.c:270
 msgid "failed to set extensions.worktreeConfig setting"
 msgstr "無法設定 extensions.worktreeConfig 設定"
 
-#: builtin/sparse-checkout.c:288
-msgid "git sparse-checkout init [--cone]"
-msgstr "git sparse-checkout init [--cone]"
+#: builtin/sparse-checkout.c:290
+#| msgid "git sparse-checkout init [--cone]"
+msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
 
-#: builtin/sparse-checkout.c:307
+#: builtin/sparse-checkout.c:310
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "以 cone 模式初始化稀疏檢出"
 
-#: builtin/sparse-checkout.c:344
+#: builtin/sparse-checkout.c:312
+msgid "toggle the use of a sparse index"
+msgstr "切換是否使用稀疏索引"
+
+#: builtin/sparse-checkout.c:340
+msgid "failed to modify sparse-index config"
+msgstr "無法修改稀疏索引設定"
+
+#: builtin/sparse-checkout.c:361
 #, c-format
 msgid "failed to open '%s'"
 msgstr "無法開啟「%s」"
 
-#: builtin/sparse-checkout.c:401
+#: builtin/sparse-checkout.c:419
 #, c-format
 msgid "could not normalize path %s"
 msgstr "無法標準化路徑 %s"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:431
 msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
 msgstr "git sparse-checkout (set|add) (--stdin | <樣式>)"
 
-#: builtin/sparse-checkout.c:438
+#: builtin/sparse-checkout.c:456
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "無法去掉 '%s' C 樣式字串的引號"
 
-#: builtin/sparse-checkout.c:492 builtin/sparse-checkout.c:516
+#: builtin/sparse-checkout.c:510 builtin/sparse-checkout.c:534
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "無法載入現存的稀疏檢出樣式"
 
-#: builtin/sparse-checkout.c:561
+#: builtin/sparse-checkout.c:579
 msgid "read patterns from standard in"
 msgstr "從標準輸入讀取樣式"
 
-#: builtin/sparse-checkout.c:576
+#: builtin/sparse-checkout.c:594
 msgid "git sparse-checkout reapply"
 msgstr "git sparse-checkout reapply"
 
-#: builtin/sparse-checkout.c:595
+#: builtin/sparse-checkout.c:613
 msgid "git sparse-checkout disable"
 msgstr "git sparse-checkout disable"
 
-#: builtin/sparse-checkout.c:623
+#: builtin/sparse-checkout.c:644
 msgid "error while refreshing working directory"
 msgstr "重新整理工作目錄時發生錯誤"
 
-#: builtin/stash.c:22 builtin/stash.c:38
+#: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
 msgstr "git stash list [<選項>]"
 
-#: builtin/stash.c:23 builtin/stash.c:43
+#: builtin/stash.c:25 builtin/stash.c:45
 msgid "git stash show [<options>] [<stash>]"
 msgstr "git stash show [<選項>] [<stash>]"
 
-#: builtin/stash.c:24 builtin/stash.c:48
+#: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
 msgstr "git stash drop [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:25
+#: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:26 builtin/stash.c:63
+#: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
 msgstr "git stash branch <分支名> [<stash>]"
 
-#: builtin/stash.c:27 builtin/stash.c:68
+#: builtin/stash.c:29 builtin/stash.c:70
 msgid "git stash clear"
 msgstr "git stash clear"
 
-#: builtin/stash.c:28
+#: builtin/stash.c:30
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21228,7 +21942,7 @@
 "          [--pathspec-from-file=<檔案> [--pathspec-file-nul]]\n"
 "          [--] [<路徑規格>...]]"
 
-#: builtin/stash.c:32 builtin/stash.c:85
+#: builtin/stash.c:34 builtin/stash.c:87
 msgid ""
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
@@ -21236,19 +21950,19 @@
 "git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<消息>]"
 
-#: builtin/stash.c:53
+#: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash pop [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:58
+#: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
 msgstr "git stash apply [--index] [-q|--quiet] [<stash>]"
 
-#: builtin/stash.c:73
+#: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
 msgstr "git stash store [-m|--message <消息>] [-q|--quiet] <提交>"
 
-#: builtin/stash.c:78
+#: builtin/stash.c:80
 msgid ""
 "git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
@@ -21258,173 +21972,200 @@
 "          [-u|--include-untracked] [-a|--all] [-m|--message <消息>]\n"
 "          [--] [<路徑規格>...]]"
 
-#: builtin/stash.c:128
+#: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
 msgstr "'%s' 不像是一個儲藏提交"
 
-#: builtin/stash.c:148
+#: builtin/stash.c:150
 #, c-format
 msgid "Too many revisions specified:%s"
 msgstr "指定了太多的版本:%s"
 
-#: builtin/stash.c:162
+#: builtin/stash.c:164
 msgid "No stash entries found."
 msgstr "未發現儲藏條目。"
 
-#: builtin/stash.c:176
+#: builtin/stash.c:178
 #, c-format
 msgid "%s is not a valid reference"
 msgstr "%s 不是一個有效的引用名"
 
-#: builtin/stash.c:225
-msgid "git stash clear with parameters is unimplemented"
-msgstr "git stash clear 不支援參數"
+#: builtin/stash.c:227
+msgid "git stash clear with arguments is unimplemented"
+msgstr "尚未實作傳入參數的 git stash clear"
 
-#: builtin/stash.c:404
+#: builtin/stash.c:431
+#, c-format
+msgid ""
+"WARNING: Untracked file in way of tracked file!  Renaming\n"
+"            %s -> %s\n"
+"         to make room.\n"
+msgstr ""
+"警告:未追蹤檔案擋住追蹤檔案的去路!已重新命名:\n"
+"            %s -> %s\n"
+"         以騰出空間留給追蹤檔案。\n"
+
+#: builtin/stash.c:492
 msgid "cannot apply a stash in the middle of a merge"
 msgstr "無法在合併過程套用儲藏"
 
-#: builtin/stash.c:415
+#: builtin/stash.c:503
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "無法生成差異 %s^!."
 
-#: builtin/stash.c:422
+#: builtin/stash.c:510
 msgid "conflicts in index. Try without --index."
 msgstr "索引中有衝突。請試試看不用 --index。"
 
-#: builtin/stash.c:428
+#: builtin/stash.c:516
 msgid "could not save index tree"
 msgstr "不能儲存索引樹"
 
-#: builtin/stash.c:437
+#: builtin/stash.c:525
 msgid "could not restore untracked files from stash"
 msgstr "無法從儲藏條目中復原未追蹤檔案"
 
-#: builtin/stash.c:451
+#: builtin/stash.c:539
 #, c-format
 msgid "Merging %s with %s"
 msgstr "正在合併 %s 和 %s"
 
-#: builtin/stash.c:461
+#: builtin/stash.c:549
 msgid "Index was not unstashed."
 msgstr "索引未從儲藏中復原。"
 
-#: builtin/stash.c:522 builtin/stash.c:620
+#: builtin/stash.c:591 builtin/stash.c:689
 msgid "attempt to recreate the index"
 msgstr "嘗試重建索引"
 
-#: builtin/stash.c:566
+#: builtin/stash.c:635
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "捨棄了 %s(%s)"
 
-#: builtin/stash.c:569
+#: builtin/stash.c:638
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s:無法捨棄儲藏條目"
 
-#: builtin/stash.c:582
+#: builtin/stash.c:651
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' 不是一個儲藏引用"
 
-#: builtin/stash.c:632
+#: builtin/stash.c:701
 msgid "The stash entry is kept in case you need it again."
 msgstr "儲藏條目被保留以備您再次需要。"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:724
 msgid "No branch name specified"
 msgstr "未指定分支名"
 
-#: builtin/stash.c:799 builtin/stash.c:836
+#: builtin/stash.c:808
+msgid "failed to parse tree"
+msgstr "無法解析樹"
+
+#: builtin/stash.c:819
+msgid "failed to unpack trees"
+msgstr "無法解包樹"
+
+#: builtin/stash.c:839
+msgid "include untracked files in the stash"
+msgstr "在儲藏區包含未追蹤檔案"
+
+#: builtin/stash.c:842
+msgid "only show untracked files in the stash"
+msgstr "只在儲藏區顯示未追蹤檔案"
+
+#: builtin/stash.c:932 builtin/stash.c:969
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "無法用 %2$s 更新 %1$s"
 
-#: builtin/stash.c:817 builtin/stash.c:1471 builtin/stash.c:1536
+#: builtin/stash.c:950 builtin/stash.c:1606 builtin/stash.c:1671
 msgid "stash message"
 msgstr "儲藏說明"
 
-#: builtin/stash.c:827
+#: builtin/stash.c:960
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" 需要一個 <提交> 參數"
 
-#: builtin/stash.c:1042
+#: builtin/stash.c:1175
 msgid "No changes selected"
 msgstr "沒有選擇變更"
 
-#: builtin/stash.c:1142
+#: builtin/stash.c:1275
 msgid "You do not have the initial commit yet"
 msgstr "您尚未建立初始提交"
 
-#: builtin/stash.c:1169
+#: builtin/stash.c:1302
 msgid "Cannot save the current index state"
 msgstr "無法儲存目前索引狀態"
 
-#: builtin/stash.c:1178
+#: builtin/stash.c:1311
 msgid "Cannot save the untracked files"
 msgstr "無法儲存未追蹤檔案"
 
-#: builtin/stash.c:1189 builtin/stash.c:1198
+#: builtin/stash.c:1322 builtin/stash.c:1331
 msgid "Cannot save the current worktree state"
 msgstr "無法儲存目前工作區狀態"
 
-#: builtin/stash.c:1226
+#: builtin/stash.c:1359
 msgid "Cannot record working tree state"
 msgstr "不能記錄工作區狀態"
 
-#: builtin/stash.c:1275
+#: builtin/stash.c:1408
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "不能同時使用參數 --patch 和 --include-untracked 或 --all"
 
-#: builtin/stash.c:1291
+#: builtin/stash.c:1426
 msgid "Did you forget to 'git add'?"
 msgstr "您是否忘了執行 'git add'?"
 
-#: builtin/stash.c:1306
+#: builtin/stash.c:1441
 msgid "No local changes to save"
 msgstr "沒有要儲存的本機修改"
 
-#: builtin/stash.c:1313
+#: builtin/stash.c:1448
 msgid "Cannot initialize stash"
 msgstr "無法初始化儲藏"
 
-#: builtin/stash.c:1328
+#: builtin/stash.c:1463
 msgid "Cannot save the current status"
 msgstr "無法儲存目前狀態"
 
-#: builtin/stash.c:1333
+#: builtin/stash.c:1468
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "儲存工作目錄和索引狀態 %s"
 
-#: builtin/stash.c:1423
+#: builtin/stash.c:1558
 msgid "Cannot remove worktree changes"
 msgstr "無法刪除工作區變更"
 
-#: builtin/stash.c:1462 builtin/stash.c:1527
+#: builtin/stash.c:1597 builtin/stash.c:1662
 msgid "keep index"
 msgstr "保持索引"
 
-#: builtin/stash.c:1464 builtin/stash.c:1529
+#: builtin/stash.c:1599 builtin/stash.c:1664
 msgid "stash in patch mode"
 msgstr "以修補檔模式儲藏"
 
-#: builtin/stash.c:1465 builtin/stash.c:1530
+#: builtin/stash.c:1600 builtin/stash.c:1665
 msgid "quiet mode"
 msgstr "靜默模式"
 
-#: builtin/stash.c:1467 builtin/stash.c:1532
+#: builtin/stash.c:1602 builtin/stash.c:1667
 msgid "include untracked files in stash"
 msgstr "儲藏中包含未追蹤檔案"
 
-#: builtin/stash.c:1469 builtin/stash.c:1534
+#: builtin/stash.c:1604 builtin/stash.c:1669
 msgid "include ignore files"
 msgstr "包含忽略的檔案"
 
-#: builtin/stash.c:1569
+#: builtin/stash.c:1704
 msgid ""
 "the stash.useBuiltin support has been removed!\n"
 "See its entry in 'git help config' for details."
@@ -21442,13 +22183,13 @@
 
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
-msgstr "跳過和移除所有的備註行"
+msgstr "略過和移除所有的備註行"
 
 #: builtin/stripspace.c:40
 msgid "prepend comment character and space to each line"
 msgstr "為每一行的行首新增備註符和空格"
 
-#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2423
+#: builtin/submodule--helper.c:47 builtin/submodule--helper.c:2424
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "期望一個完整的引用名稱,卻得到 %s"
@@ -21462,7 +22203,7 @@
 msgid "cannot strip one component off url '%s'"
 msgstr "無法從 url '%s' 剝離一個元件"
 
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1819
+#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1820
 msgid "alternative anchor for relative paths"
 msgstr "相對路徑的替代錨記(anchor)"
 
@@ -21470,18 +22211,18 @@
 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
+#: builtin/submodule--helper.c:473 builtin/submodule--helper.c:630
+#: builtin/submodule--helper.c:653
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "在 .gitmodules 中未找到子模組 '%s' 的 url"
 
-#: builtin/submodule--helper.c:524
+#: builtin/submodule--helper.c:525
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "進入 '%s'\n"
 
-#: builtin/submodule--helper.c:527
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -21490,7 +22231,7 @@
 "對 %s 執行 run_command 返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:549
+#: builtin/submodule--helper.c:550
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21500,172 +22241,169 @@
 "在遞迴 %s 的子模組執行 run_command 時返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:565
-msgid "Suppress output of entering each submodule command"
-msgstr "阻止進入每一個子模組指令的輸出"
+#: builtin/submodule--helper.c:566
+msgid "suppress output of entering each submodule command"
+msgstr "隱藏每個子模組進入命令的輸出"
 
-#: builtin/submodule--helper.c:567 builtin/submodule--helper.c:1487
-msgid "Recurse into nested submodules"
+#: builtin/submodule--helper.c:568 builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:1488
+msgid "recurse into nested submodules"
 msgstr "遞迴進入嵌套子模組中"
 
-#: builtin/submodule--helper.c:572
+#: builtin/submodule--helper.c:573
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
-msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <指令>"
+msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <命令>"
 
-#: builtin/submodule--helper.c:599
+#: builtin/submodule--helper.c:600
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr "無法找到設定 '%s'。假定這個版本庫是其自身的官方上游。"
 
-#: builtin/submodule--helper.c:666
+#: builtin/submodule--helper.c:667
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "無法為子模組 '%s' 註冊 url"
 
-#: builtin/submodule--helper.c:670
+#: builtin/submodule--helper.c:671
 #, 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:681
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "警告:建議子模組 '%s' 使用指令更新模式\n"
 
-#: builtin/submodule--helper.c:687
+#: builtin/submodule--helper.c:688
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "無法為子模組 '%s' 註冊更新模式"
 
-#: builtin/submodule--helper.c:709
-msgid "Suppress output for initializing a submodule"
-msgstr "阻止子模組初始化的輸出"
+#: builtin/submodule--helper.c:710
+msgid "suppress output for initializing a submodule"
+msgstr "隱藏初始化子模組的輸出"
 
-#: builtin/submodule--helper.c:714
+#: builtin/submodule--helper.c:715
 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:788 builtin/submodule--helper.c:923
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "在 .gitmodules 中沒有發現路徑 '%s' 的子模組映射"
 
-#: builtin/submodule--helper.c:835
+#: builtin/submodule--helper.c:836
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "無法解析子模組 '%s' 的 HEAD 引用"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1457
+#: builtin/submodule--helper.c:863 builtin/submodule--helper.c:1458
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "遞迴子模組 '%s' 失敗"
 
-#: builtin/submodule--helper.c:886 builtin/submodule--helper.c:1623
-msgid "Suppress submodule status output"
-msgstr "阻止子模組狀態輸出"
+#: builtin/submodule--helper.c:887 builtin/submodule--helper.c:1624
+msgid "suppress submodule status output"
+msgstr "隱藏子模組的狀態輸出"
 
-#: builtin/submodule--helper.c:887
+#: builtin/submodule--helper.c:888
 msgid ""
-"Use commit stored in the index instead of the one stored in the submodule "
+"use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr "使用儲存在索引中的提交,而非儲存在子模組 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:888
-msgid "recurse into nested submodules"
-msgstr "遞迴進入嵌套子模組中"
-
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:894
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<路徑>...]"
 
-#: builtin/submodule--helper.c:917
+#: builtin/submodule--helper.c:918
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <路徑>"
 
-#: builtin/submodule--helper.c:989
+#: builtin/submodule--helper.c:990
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:992
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:1005
+#: builtin/submodule--helper.c:1006
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1055
+#: builtin/submodule--helper.c:1056
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "無法雜湊來自 '%s' 的物件"
 
-#: builtin/submodule--helper.c:1059
+#: builtin/submodule--helper.c:1060
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "非預期的模式 %o\n"
 
-#: builtin/submodule--helper.c:1300
+#: builtin/submodule--helper.c:1301
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "使用儲存在索引中的提交而非子模組 HEAD"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1303
 msgid "to compare the commit in the index with that in the submodule HEAD"
 msgstr "比較索引中的,和子模組 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1305
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "'ignore_config' 值設為 'all' 時略過子模組"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1307
 msgid "limit the summary size"
 msgstr "限制摘要大小"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1312
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<選項>] [<提交>] [--] [<路徑>]"
 
-#: builtin/submodule--helper.c:1335
+#: builtin/submodule--helper.c:1336
 msgid "could not fetch a revision for HEAD"
 msgstr "無法取得 HEAD 的版本"
 
-#: builtin/submodule--helper.c:1340
+#: builtin/submodule--helper.c:1341
 msgid "--cached and --files are mutually exclusive"
 msgstr "--cached 和 --files 互斥"
 
-#: builtin/submodule--helper.c:1407
+#: builtin/submodule--helper.c:1408
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "為 '%s' 同步子模組 url\n"
 
-#: builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1414
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "無法為子模組路徑 '%s' 註冊 url"
 
-#: builtin/submodule--helper.c:1427
+#: builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "無法得到子模組 '%s' 的預設遠端關聯"
 
-#: builtin/submodule--helper.c:1438
+#: builtin/submodule--helper.c:1439
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "無法為子模組 '%s' 更新遠端關聯"
 
-#: builtin/submodule--helper.c:1485
-msgid "Suppress output of synchronizing submodule url"
-msgstr "阻止子模組 url 同步的輸出"
+#: builtin/submodule--helper.c:1486
+msgid "suppress output of synchronizing submodule url"
+msgstr "隱藏子模組 URL 同步的輸出"
 
-#: builtin/submodule--helper.c:1492
+#: builtin/submodule--helper.c:1493
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<路徑>]"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1547
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
@@ -21674,52 +22412,52 @@
 "子模組工作區 '%s' 包含一個 .git 目錄(如果您確需刪除它及其全部歷史,使用 'rm "
 "-rf' 指令)"
 
-#: builtin/submodule--helper.c:1558
+#: builtin/submodule--helper.c:1559
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr "子模組工作區 '%s' 包含本機修改;使用 '-f' 捨棄它們"
 
-#: builtin/submodule--helper.c:1566
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "已清除目錄 '%s'\n"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1569
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "無法移除子模組工作區 '%s'\n"
 
-#: builtin/submodule--helper.c:1579
+#: builtin/submodule--helper.c:1580
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "不能建立空的子模組目錄 %s"
 
-#: builtin/submodule--helper.c:1595
+#: builtin/submodule--helper.c:1596
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "子模組 '%s'(%s)未對路徑 '%s' 註冊\n"
 
-#: builtin/submodule--helper.c:1624
-msgid "Remove submodule working trees even if they contain local changes"
-msgstr "刪除子模組工作區,即使包含本機修改"
-
 #: builtin/submodule--helper.c:1625
-msgid "Unregister all submodules"
-msgstr "將所有子模組取消註冊"
+msgid "remove submodule working trees even if they contain local changes"
+msgstr "即使有本機變更仍移除子模組的工作區"
 
-#: builtin/submodule--helper.c:1630
+#: builtin/submodule--helper.c:1626
+msgid "unregister all submodules"
+msgstr "取消註冊所有子模組"
+
+#: builtin/submodule--helper.c:1631
 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:1645
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "如果您確定想要對所有子模組執行取消初始化,請使用 '--all'"
 
-#: builtin/submodule--helper.c:1713
+#: builtin/submodule--helper.c:1714
 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"
@@ -21731,46 +22469,46 @@
 "以允許 Git 不用備用版本庫複製,亦可使用等效的 '--reference-if-able'\n"
 "而非 '--reference' 複製。"
 
-#: builtin/submodule--helper.c:1752 builtin/submodule--helper.c:1755
+#: builtin/submodule--helper.c:1753 builtin/submodule--helper.c:1756
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "子模組 '%s' 不能新增版本庫備選:%s"
 
-#: builtin/submodule--helper.c:1791
+#: builtin/submodule--helper.c:1792
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "不能識別 submodule.alternateErrorStrategy 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1798
+#: builtin/submodule--helper.c:1799
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "不能識別 submodule.alternateLocaion 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1822
+#: builtin/submodule--helper.c:1823
 msgid "where the new submodule will be cloned to"
 msgstr "新的子模組將要複製的路徑"
 
-#: builtin/submodule--helper.c:1825
+#: builtin/submodule--helper.c:1826
 msgid "name of the new submodule"
 msgstr "新子模組的名稱"
 
-#: builtin/submodule--helper.c:1828
+#: builtin/submodule--helper.c:1829
 msgid "url where to clone the submodule from"
 msgstr "複製子模組的 url 位址"
 
-#: builtin/submodule--helper.c:1836
+#: builtin/submodule--helper.c:1837
 msgid "depth for shallow clones"
 msgstr "淺複製的深度"
 
-#: builtin/submodule--helper.c:1839 builtin/submodule--helper.c:2348
+#: builtin/submodule--helper.c:1840 builtin/submodule--helper.c:2349
 msgid "force cloning progress"
 msgstr "強制顯示複製進度"
 
-#: builtin/submodule--helper.c:1841 builtin/submodule--helper.c:2350
+#: builtin/submodule--helper.c:1842 builtin/submodule--helper.c:2351
 msgid "disallow cloning into non-empty directory"
 msgstr "不允許複製至非空白目錄"
 
-#: builtin/submodule--helper.c:1848
+#: builtin/submodule--helper.c:1849
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
 "<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
@@ -21780,186 +22518,186 @@
 ">] [--name <名字>] [--depth <深度>] [--single-branch] --url <url> --path <路"
 "徑>"
 
-#: builtin/submodule--helper.c:1873
+#: builtin/submodule--helper.c:1874
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "拒絕在其他子模組的 git 路徑建立/使用「%s」"
 
-#: builtin/submodule--helper.c:1884
+#: builtin/submodule--helper.c:1885
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "無法複製 '%s' 到子模組路徑 '%s'"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1889
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "目錄不是空的:「%s」"
 
-#: builtin/submodule--helper.c:1900
+#: builtin/submodule--helper.c:1901
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "無法得到 '%s' 的子模組目錄"
 
-#: builtin/submodule--helper.c:1936
+#: builtin/submodule--helper.c:1937
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "子模組 '%2$s' 的更新模式 '%1$s' 無效"
 
-#: builtin/submodule--helper.c:1940
+#: builtin/submodule--helper.c:1941
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "為子模組 '%2$s' 設定的更新模式 '%1$s' 無效"
 
-#: builtin/submodule--helper.c:2041
+#: builtin/submodule--helper.c:2042
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "子模組 '%s' 尚未初始化"
 
-#: builtin/submodule--helper.c:2045
+#: builtin/submodule--helper.c:2046
 msgid "Maybe you want to use 'update --init'?"
 msgstr "也許您想要執行 'update --init'?"
 
-#: builtin/submodule--helper.c:2075
+#: builtin/submodule--helper.c:2076
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "略過未合併的子模組 %s"
 
-#: builtin/submodule--helper.c:2104
+#: builtin/submodule--helper.c:2105
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "略過子模組 '%s'"
 
-#: builtin/submodule--helper.c:2254
+#: builtin/submodule--helper.c:2255
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "複製 '%s' 失敗。按計劃重試"
 
-#: builtin/submodule--helper.c:2265
+#: builtin/submodule--helper.c:2266
 #, 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:2328 builtin/submodule--helper.c:2574
 msgid "path into the working tree"
 msgstr "到工作區的路徑"
 
-#: builtin/submodule--helper.c:2330
+#: builtin/submodule--helper.c:2331
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "工作區中的路徑,遞迴嵌套子模組"
 
-#: builtin/submodule--helper.c:2334
+#: builtin/submodule--helper.c:2335
 msgid "rebase, merge, checkout or none"
 msgstr "rebase、merge、checkout 或 none"
 
-#: builtin/submodule--helper.c:2340
-msgid "Create a shallow clone truncated to the specified number of revisions"
-msgstr "建立一個指定深度的淺複製"
+#: builtin/submodule--helper.c:2341
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "建立一個縮減至指定版本數的淺複製"
 
-#: builtin/submodule--helper.c:2343
+#: builtin/submodule--helper.c:2344
 msgid "parallel jobs"
 msgstr "並發任務"
 
-#: builtin/submodule--helper.c:2345
+#: builtin/submodule--helper.c:2346
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "初始複製是否應該遵守推薦的淺複製選項"
 
-#: builtin/submodule--helper.c:2346
+#: builtin/submodule--helper.c:2347
 msgid "don't print cloning progress"
 msgstr "不要輸出複製進度"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2358
 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:2371
 msgid "bad value for update parameter"
 msgstr "update 參數取值錯誤"
 
-#: builtin/submodule--helper.c:2418
+#: builtin/submodule--helper.c:2419
 #, c-format
 msgid ""
 "Submodule (%s) branch configured to inherit branch from superproject, but "
 "the superproject is not on any branch"
 msgstr "子模組(%s)的分支設定為繼承上級專案的分支,但是上級專案不在任何分支上"
 
-#: builtin/submodule--helper.c:2541
+#: builtin/submodule--helper.c:2542
 #, c-format
 msgid "could not get a repository handle for submodule '%s'"
 msgstr "無法獲得子模組 '%s' 的版本庫句柄"
 
-#: builtin/submodule--helper.c:2574
+#: builtin/submodule--helper.c:2575
 msgid "recurse into submodules"
 msgstr "在子模組中遞迴"
 
-#: builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2581
 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:2637
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "檢查寫入 .gitmodules 檔案是否安全"
 
-#: builtin/submodule--helper.c:2639
+#: builtin/submodule--helper.c:2640
 msgid "unset the config in the .gitmodules file"
 msgstr "取消 .gitmodules 檔案中的設定"
 
-#: builtin/submodule--helper.c:2644
+#: builtin/submodule--helper.c:2645
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <名稱> [<值>]"
 
-#: builtin/submodule--helper.c:2645
+#: builtin/submodule--helper.c:2646
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <名稱>"
 
-#: builtin/submodule--helper.c:2646
+#: builtin/submodule--helper.c:2647
 msgid "git submodule--helper config --check-writeable"
 msgstr "git submodule--helper config --check-writeable"
 
-#: builtin/submodule--helper.c:2665 git-submodule.sh:150
+#: builtin/submodule--helper.c:2666 git-submodule.sh:150
 #, sh-format
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "請確認 .gitmodules 檔案在工作區裡"
 
-#: builtin/submodule--helper.c:2681
-msgid "Suppress output for setting url of a submodule"
-msgstr "阻止子模組設定 URL 的輸出"
+#: builtin/submodule--helper.c:2682
+msgid "suppress output for setting url of a submodule"
+msgstr "隱藏子模組設定 URL 的輸出"
 
-#: builtin/submodule--helper.c:2685
+#: builtin/submodule--helper.c:2686
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <路徑> <新 URL>"
 
-#: builtin/submodule--helper.c:2718
+#: builtin/submodule--helper.c:2719
 msgid "set the default tracking branch to master"
 msgstr "將預設的追蹤分支設為 master"
 
-#: builtin/submodule--helper.c:2720
+#: builtin/submodule--helper.c:2721
 msgid "set the default tracking branch"
 msgstr "設定預設追蹤分支"
 
-#: builtin/submodule--helper.c:2724
+#: builtin/submodule--helper.c:2725
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 
-#: builtin/submodule--helper.c:2725
+#: builtin/submodule--helper.c:2726
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 
-#: builtin/submodule--helper.c:2732
+#: builtin/submodule--helper.c:2733
 msgid "--branch or --default required"
 msgstr "需要 --branch 或 --default"
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:2736
 msgid "--branch and --default are mutually exclusive"
 msgstr "--branch 與 --default 互斥"
 
-#: builtin/submodule--helper.c:2792 git.c:438 git.c:711
+#: builtin/submodule--helper.c:2793 git.c:449 git.c:724
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s 不支援 --super-prefix"
 
-#: builtin/submodule--helper.c:2798
+#: builtin/submodule--helper.c:2799
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' 不是一個有效的 submodule--helper 子指令"
@@ -21972,23 +22710,23 @@
 msgid "git symbolic-ref -d [-q] <name>"
 msgstr "git symbolic-ref -d [-q] <名稱>"
 
-#: builtin/symbolic-ref.c:40
+#: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
 msgstr "不顯示非符號(分離的)引用的錯誤訊息"
 
-#: builtin/symbolic-ref.c:41
+#: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
 msgstr "刪除符號引用"
 
-#: builtin/symbolic-ref.c:42
+#: builtin/symbolic-ref.c:44
 msgid "shorten ref output"
 msgstr "縮短引用輸出"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason"
 msgstr "原因"
 
-#: builtin/symbolic-ref.c:43 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
 msgid "reason of the update"
 msgstr "更新的原因"
 
@@ -22019,17 +22757,17 @@
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<格式>] <標籤名>..."
 
-#: builtin/tag.c:89
+#: builtin/tag.c:100
 #, c-format
 msgid "tag '%s' not found."
 msgstr "未發現標籤 '%s'。"
 
-#: builtin/tag.c:105
+#: builtin/tag.c:135
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "已刪除標籤 '%s'(曾為 %s)\n"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:170
 #, c-format
 msgid ""
 "\n"
@@ -22042,7 +22780,7 @@
 "  %s\n"
 "以 '%c' 開頭的行將被忽略。\n"
 
-#: builtin/tag.c:139
+#: builtin/tag.c:174
 #, c-format
 msgid ""
 "\n"
@@ -22056,15 +22794,11 @@
 "  %s\n"
 "以 '%c' 開頭的行將被保留,如果您願意也可以刪除它們。\n"
 
-#: builtin/tag.c:198
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "無法簽署標籤"
 
-#: builtin/tag.c:200
-msgid "unable to write tag file"
-msgstr "無法寫標籤檔案"
-
-#: builtin/tag.c:216
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22077,143 +22811,139 @@
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:232
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "壞的物件類型。"
 
-#: builtin/tag.c:285
+#: builtin/tag.c:328
 msgid "no tag message?"
 msgstr "無標籤說明?"
 
-#: builtin/tag.c:292
+#: builtin/tag.c:335
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "標籤說明被保留在 %s\n"
 
-#: builtin/tag.c:403
+#: builtin/tag.c:446
 msgid "list tag names"
 msgstr "列出標籤名稱"
 
-#: builtin/tag.c:405
+#: builtin/tag.c:448
 msgid "print <n> lines of each tag message"
 msgstr "每個標籤訊息列印 <n> 行"
 
-#: builtin/tag.c:407
+#: builtin/tag.c:450
 msgid "delete tags"
 msgstr "刪除標籤"
 
-#: builtin/tag.c:408
+#: builtin/tag.c:451
 msgid "verify tags"
 msgstr "驗證標籤"
 
-#: builtin/tag.c:410
+#: builtin/tag.c:453
 msgid "Tag creation options"
 msgstr "標籤建立選項"
 
-#: builtin/tag.c:412
+#: builtin/tag.c:455
 msgid "annotated tag, needs a message"
 msgstr "附註標籤,需要一個說明"
 
-#: builtin/tag.c:414
+#: builtin/tag.c:457
 msgid "tag message"
 msgstr "標籤說明"
 
-#: builtin/tag.c:416
+#: builtin/tag.c:459
 msgid "force edit of tag message"
 msgstr "強制編輯標籤說明"
 
-#: builtin/tag.c:417
+#: builtin/tag.c:460
 msgid "annotated and GPG-signed tag"
 msgstr "附註並附加 GPG 簽名的標籤"
 
-#: builtin/tag.c:420
+#: builtin/tag.c:463
 msgid "use another key to sign the tag"
 msgstr "使用另外的私鑰簽名該標籤"
 
-#: builtin/tag.c:421
+#: builtin/tag.c:464
 msgid "replace the tag if exists"
 msgstr "如果存在,取代現有的標籤"
 
-#: builtin/tag.c:422 builtin/update-ref.c:505
+#: builtin/tag.c:465 builtin/update-ref.c:505
 msgid "create a reflog"
 msgstr "建立引用日誌"
 
-#: builtin/tag.c:424
+#: builtin/tag.c:467
 msgid "Tag listing options"
 msgstr "標籤列表選項"
 
-#: builtin/tag.c:425
+#: builtin/tag.c:468
 msgid "show tag list in columns"
 msgstr "以列的方式顯示標籤列表"
 
-#: builtin/tag.c:426 builtin/tag.c:428
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that contain the commit"
 msgstr "只列印包含該提交的標籤"
 
-#: builtin/tag.c:427 builtin/tag.c:429
+#: builtin/tag.c:470 builtin/tag.c:472
 msgid "print only tags that don't contain the commit"
 msgstr "只列印不包含該提交的標籤"
 
-#: builtin/tag.c:430
+#: builtin/tag.c:473
 msgid "print only tags that are merged"
 msgstr "只列印已經合併的標籤"
 
-#: builtin/tag.c:431
+#: builtin/tag.c:474
 msgid "print only tags that are not merged"
 msgstr "只列印尚未合併的標籤"
 
-#: builtin/tag.c:435
+#: builtin/tag.c:478
 msgid "print only tags of the object"
 msgstr "只列印指向該物件的標籤"
 
-#: builtin/tag.c:483
+#: builtin/tag.c:526
 msgid "--column and -n are incompatible"
 msgstr "--column 和 -n 不相容"
 
-#: builtin/tag.c:505
+#: builtin/tag.c:548
 msgid "-n option is only allowed in list mode"
 msgstr "-n 選項只允許用在列表顯示模式"
 
-#: builtin/tag.c:507
+#: builtin/tag.c:550
 msgid "--contains option is only allowed in list mode"
 msgstr "--contains 選項只允許用在列表顯示模式"
 
-#: builtin/tag.c:509
+#: builtin/tag.c:552
 msgid "--no-contains option is only allowed in list mode"
 msgstr "--no-contains 選項只允許用在列表顯示模式"
 
-#: builtin/tag.c:511
+#: builtin/tag.c:554
 msgid "--points-at option is only allowed in list mode"
 msgstr "--points-at 選項只允許用在列表顯示模式"
 
-#: builtin/tag.c:513
+#: builtin/tag.c:556
 msgid "--merged and --no-merged options are only allowed in list mode"
 msgstr "--merged 和 --no-merged 選項只允許用在列表顯示模式"
 
-#: builtin/tag.c:524
+#: builtin/tag.c:567
 msgid "only one -F or -m option is allowed."
 msgstr "只允許一個 -F 或 -m 選項。"
 
-#: builtin/tag.c:543
-msgid "too many params"
-msgstr "太多參數"
-
-#: builtin/tag.c:549
+#: builtin/tag.c:592
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' 不是一個有效的標籤名稱。"
 
-#: builtin/tag.c:554
+#: builtin/tag.c:597
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "標籤 '%s' 已存在"
 
-#: builtin/tag.c:585
+#: builtin/tag.c:628
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "已更新標籤 '%s'(曾為 %s)\n"
 
-#: builtin/unpack-objects.c:502
+#: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "展開物件中"
 
@@ -22274,155 +23004,155 @@
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<選項>] [--] [<檔案>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:976
 msgid "continue refresh even when index needs update"
 msgstr "當索引需要更新時繼續重新整理"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:979
 msgid "refresh: ignore submodules"
 msgstr "重新整理:忽略子模組"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:982
 msgid "do not ignore new files"
 msgstr "不忽略新的檔案"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:984
 msgid "let files replace directories and vice-versa"
 msgstr "讓檔案取代目錄(反之亦然)"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:986
 msgid "notice files missing from worktree"
 msgstr "通知檔案從工作區遺失"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:988
 msgid "refresh even if index contains unmerged entries"
 msgstr "即使索引區包含未合併的條目也執行重新整理"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:991
 msgid "refresh stat information"
 msgstr "重新整理統計訊息"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:995
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "類似於 --refresh,但是忽略 assume-unchanged 設定"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:999
 msgid "<mode>,<object>,<path>"
 msgstr "<存取模式>,<物件>,<路徑>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1000
 msgid "add the specified entry to the index"
 msgstr "新增指定的條目到索引區"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1010
 msgid "mark files as \"not changing\""
 msgstr "把檔案標記為 \"沒有變更\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1013
 msgid "clear assumed-unchanged bit"
 msgstr "清除 assumed-unchanged 位"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1016
 msgid "mark files as \"index-only\""
 msgstr "把檔案標記為 \"僅索引\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1019
 msgid "clear skip-worktree bit"
 msgstr "清除 skip-worktree 位"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1022
 msgid "do not touch index-only entries"
 msgstr "不要建立只有索引的項目"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1024
 msgid "add to index only; do not add content to object database"
 msgstr "只新增到索引區;不新增物件到物件庫"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1026
 msgid "remove named paths even if present in worktree"
 msgstr "即使存在工作區裡,也刪除路徑"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1028
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "攜帶 --stdin:輸入的行以 null 字元終止"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1030
 msgid "read list of paths to be updated from standard input"
 msgstr "從標準輸入中讀取需要更新的路徑列表"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1034
 msgid "add entries from standard input to the index"
 msgstr "從標準輸入新增條目到索引區"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1038
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "為指定檔案重新生成第2和第3暫存區"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1042
 msgid "only update entries that differ from HEAD"
 msgstr "只更新與 HEAD 不同的條目"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1046
 msgid "ignore files missing from worktree"
 msgstr "忽略工作區遺失的檔案"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1049
 msgid "report actions to standard output"
 msgstr "在標準輸出顯示動作"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1051
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(for porcelains) 忘記儲存的未解決的衝突"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1055
 msgid "write index in this format"
 msgstr "以這種格式寫入索引區"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1057
 msgid "enable or disable split index"
 msgstr "啟用或停用索引分割"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1059
 msgid "enable/disable untracked cache"
 msgstr "啟用/停用對未追蹤檔案的快取"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1061
 msgid "test if the filesystem supports untracked cache"
 msgstr "測試檔案系統是否支援未追蹤檔案快取"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1063
 msgid "enable untracked cache without testing the filesystem"
 msgstr "無需檢測檔案系統,啟用對未追蹤檔案的快取"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1065
 msgid "write out the index even if is not flagged as changed"
 msgstr "即使沒有被標記為已更改,也要寫出索引"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1067
 msgid "enable or disable file system monitor"
 msgstr "啟用或停用檔案系統監控"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1069
 msgid "mark files as fsmonitor valid"
 msgstr "標記檔案為 fsmonitor 有效"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1072
 msgid "clear fsmonitor valid bit"
 msgstr "清除 fsmonitor 有效位"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1175
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr "core.splitIndex 被設定為 false。如果您確定要啟用索引分割,請移除或修改"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1184
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr "core.splitIndex 被設定為 true。如果您確定要停用索引分割,請移除或修改"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1196
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -22430,11 +23160,11 @@
 "core.untrackedCache 被設定為 true。如果您確定要停用未追蹤檔案的快取,請移除或"
 "修改"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1200
 msgid "Untracked cache disabled"
 msgstr "快取未追蹤檔案被停用"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1208
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -22442,25 +23172,25 @@
 "core.untrackedCache 被設定為 false。如果您確定要啟用未追蹤檔案快取,請移除或"
 "修改"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1212
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "快取未追蹤檔案在 '%s' 啟用"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1220
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor 未設定;如果想要啟用 fsmonitor 請設定該選項"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1224
 msgid "fsmonitor enabled"
 msgstr "fsmonitor 被啟用"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1227
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr "core.fsmonitor 已設定;如果想要停用 fsmonitor 請移除該選項"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1231
 msgid "fsmonitor disabled"
 msgstr "fsmonitor 被停用"
 
@@ -22552,89 +23282,63 @@
 msgid "print tag contents"
 msgstr "列印標籤內容"
 
-#: builtin/worktree.c:17
+#: builtin/worktree.c:18
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<選項>] <路徑> [<提交>]"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<選項>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<選項>] <路徑>"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <工作區> <新路徑>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<選項>]"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<選項>] <工作區>"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <路徑>"
 
-#: builtin/worktree.c:60 builtin/worktree.c:973
+#: builtin/worktree.c:61 builtin/worktree.c:935
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "刪除 '%s' 失敗"
 
-#: builtin/worktree.c:85
-msgid "not a valid directory"
-msgstr "非有效目錄"
-
-#: builtin/worktree.c:91
-msgid "gitdir file does not exist"
-msgstr "找不到 gitdir 檔案"
-
-#: builtin/worktree.c:96 builtin/worktree.c:105
-#, c-format
-msgid "unable to read gitdir file (%s)"
-msgstr "無法讀取 gitdir 檔案 (%s)"
-
-#: builtin/worktree.c:115
-#, c-format
-msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
-msgstr "讀取過短(預期有 %<PRIuMAX> 位元組,只讀到 %<PRIuMAX>)"
-
-#: builtin/worktree.c:123
-msgid "invalid gitdir file"
-msgstr "gitdir 檔案無效"
-
-#: builtin/worktree.c:131
-msgid "gitdir file points to non-existent location"
-msgstr "gitdir 檔案指向的位置不存在"
-
-#: builtin/worktree.c:146
+#: builtin/worktree.c:74
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "移除 %s/%s: %s"
 
-#: builtin/worktree.c:221
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "報告清除的工作區"
 
-#: builtin/worktree.c:223
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "將早於 <時間> 的工作區過期"
 
-#: builtin/worktree.c:293
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' 已經存在"
 
-#: builtin/worktree.c:302
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "無法使用的工作目錄目的地「%s」"
 
-#: builtin/worktree.c:307
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -22643,7 +23347,7 @@
 "'%s' 是個遺失但被鎖定的工作區;\n"
 "使用 '%s -f -f' 覆蓋,或 'unlock' 和 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -22652,115 +23356,127 @@
 "'%s' 是個遺失但已註冊的工作區;\n"
 "使用 '%s -f' 覆蓋,或 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:360
+#: builtin/worktree.c:288
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "不能建立目錄 '%s'"
 
-#: builtin/worktree.c:494 builtin/worktree.c:500
+#: builtin/worktree.c:422 builtin/worktree.c:428
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "準備工作區(新分支 '%s')"
 
-#: builtin/worktree.c:496
+#: builtin/worktree.c:424
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "準備工作區(重設分支 '%s',之前為 %s)"
 
-#: builtin/worktree.c:505
+#: builtin/worktree.c:433
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "準備工作區(檢出 '%s')"
 
-#: builtin/worktree.c:511
+#: builtin/worktree.c:439
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "準備工作區(分離開頭指標 %s)"
 
-#: builtin/worktree.c:552
+#: builtin/worktree.c:482
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "檢出 <分支>,即使已經被檢出到其它工作區"
 
-#: builtin/worktree.c:555
+#: builtin/worktree.c:485
 msgid "create a new branch"
 msgstr "建立一個新分支"
 
-#: builtin/worktree.c:557
+#: builtin/worktree.c:487
 msgid "create or reset a branch"
 msgstr "建立或重設一個分支"
 
-#: builtin/worktree.c:559
+#: builtin/worktree.c:489
 msgid "populate the new working tree"
 msgstr "生成新的工作區"
 
-#: builtin/worktree.c:560
+#: builtin/worktree.c:490
 msgid "keep the new working tree locked"
 msgstr "鎖定新工作區"
 
-#: builtin/worktree.c:563
+#: builtin/worktree.c:493
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "設定追蹤模式(參見 git-branch(1))"
 
-#: builtin/worktree.c:566
+#: builtin/worktree.c:496
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "嘗試為新分支名符合一個遠端追蹤分支"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:504
 msgid "-b, -B, and --detach are mutually exclusive"
 msgstr "-b、-B 和 --detach 是互斥的"
 
-#: builtin/worktree.c:635
+#: builtin/worktree.c:565
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "只能在建立新分支時使用 --[no-]track 選項"
 
-#: builtin/worktree.c:758
+#: builtin/worktree.c:682
+msgid "show extended annotations and reasons, if available"
+msgstr "如果有則顯示延伸的註釋和原因"
+
+#: builtin/worktree.c:684
+msgid "add 'prunable' annotation to worktrees older than <time>"
+msgstr "對舊於 <時間> 的工作區加上 ‘prunable’ 標示"
+
+#: builtin/worktree.c:693
+msgid "--verbose and --porcelain are mutually exclusive"
+msgstr "--verbose 和 --porcelain 互斥"
+
+#: builtin/worktree.c:720
 msgid "reason for locking"
 msgstr "鎖定原因"
 
-#: builtin/worktree.c:770 builtin/worktree.c:803 builtin/worktree.c:877
-#: builtin/worktree.c:1001
+#: builtin/worktree.c:732 builtin/worktree.c:765 builtin/worktree.c:839
+#: builtin/worktree.c:963
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' 不是一個工作區"
 
-#: builtin/worktree.c:772 builtin/worktree.c:805
+#: builtin/worktree.c:734 builtin/worktree.c:767
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "主工作區無法被加鎖或解鎖"
 
-#: builtin/worktree.c:777
+#: builtin/worktree.c:739
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' 已被鎖定,原因:%s"
 
-#: builtin/worktree.c:779
+#: builtin/worktree.c:741
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' 已被鎖定"
 
-#: builtin/worktree.c:807
+#: builtin/worktree.c:769
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' 未被鎖定"
 
-#: builtin/worktree.c:848
+#: builtin/worktree.c:810
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "不能移動或刪除包含子模組的工作區"
 
-#: builtin/worktree.c:856
+#: builtin/worktree.c:818
 msgid "force move even if worktree is dirty or locked"
 msgstr "強制移動,即使工作區是髒的或已鎖定"
 
-#: builtin/worktree.c:879 builtin/worktree.c:1003
+#: builtin/worktree.c:841 builtin/worktree.c:965
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' 是一個主工作區"
 
-#: builtin/worktree.c:884
+#: builtin/worktree.c:846
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "無法從 '%s' 算出目標名稱"
 
-#: builtin/worktree.c:897
+#: builtin/worktree.c:859
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -22769,7 +23485,7 @@
 "無法移動一個鎖定的工作區,鎖定原因:%s\n"
 "使用 'move -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:899
+#: builtin/worktree.c:861
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -22777,36 +23493,36 @@
 "無法移動一個鎖定的工作區,\n"
 "使用 'move -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:902
+#: builtin/worktree.c:864
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "驗證失敗,無法移動工作區:%s"
 
-#: builtin/worktree.c:907
+#: builtin/worktree.c:869
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "移動 '%s' 到 '%s' 失敗"
 
-#: builtin/worktree.c:953
+#: builtin/worktree.c:915
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "在 '%s' 中執行 'git status' 失敗"
 
-#: builtin/worktree.c:957
+#: builtin/worktree.c:919
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr "'%s' 包含修改或未追蹤的檔案,使用 --force 刪除"
 
-#: builtin/worktree.c:962
+#: builtin/worktree.c:924
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "在 '%s' 中執行 'git status' 失敗,離開碼 %d"
 
-#: builtin/worktree.c:985
+#: builtin/worktree.c:947
 msgid "force removal even if worktree is dirty or locked"
 msgstr "強制刪除,即使工作區是髒的或已鎖定"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:970
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -22815,7 +23531,7 @@
 "無法刪除一個鎖定的工作區,鎖定原因:%s\n"
 "使用 'remove -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:1010
+#: builtin/worktree.c:972
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -22823,17 +23539,17 @@
 "無法刪除一個鎖定的工作區,\n"
 "使用 'remove -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:1013
+#: builtin/worktree.c:975
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "驗證失敗,無法刪除工作區:%s"
 
-#: builtin/worktree.c:1037
+#: builtin/worktree.c:999
 #, c-format
 msgid "repair: %s: %s"
 msgstr "修復:%s:%s"
 
-#: builtin/worktree.c:1040
+#: builtin/worktree.c:1002
 #, c-format
 msgid "error: %s: %s"
 msgstr "錯誤:%s:%s"
@@ -22854,15 +23570,158 @@
 msgid "only useful for debugging"
 msgstr "只對除錯有用"
 
-#: http-fetch.c:114
+#: git.c:28
+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"
+"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
+"           [--super-prefix=<path>] [--config-env=<name>=<envvar>]\n"
+"           <command> [<args>]"
+msgstr ""
+"git [--version] [--help] [-C <路徑>] [-c <名稱>=<數值>]\n"
+"           [--exec-path[=<路徑>]] [--html-path] [--man-path] [--info-path]\n"
+"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
+"bare]\n"
+"           [--git-dir=<路徑>] [--work-tree=<路徑>] [--namespace=<名稱>]\n"
+"           [--super-prefix=<路徑>] [--config-env=<名稱>=<環境變數>]\n"
+"           <命令> [<引數>]"
+
+#: git.c:36
+msgid ""
+"'git help -a' and 'git help -g' list available subcommands and some\n"
+"concept guides. See 'git help <command>' or 'git help <concept>'\n"
+"to read about a specific subcommand or concept.\n"
+"See 'git help git' for an overview of the system."
+msgstr ""
+"指令 'git help -a' 和 'git help -g' 顯示可用的子指令和一些概念說明。\n"
+"檢視 'git help <命令>' 或 'git help <概念>' 以取得提供子指令或概念\n"
+"說明。\n"
+"有關系統概述,檢視 'git help git'。"
+
+#: git.c:188
+#, c-format
+msgid "no directory given for --git-dir\n"
+msgstr "沒有為 --git-dir 提供目錄\n"
+
+#: git.c:202
+#, c-format
+msgid "no namespace given for --namespace\n"
+msgstr "沒有為 --namespace 提供命名空間\n"
+
+#: git.c:216
+#, c-format
+msgid "no directory given for --work-tree\n"
+msgstr "沒有為 --work-tree 提供目錄\n"
+
+#: git.c:230
+#, c-format
+msgid "no prefix given for --super-prefix\n"
+msgstr "沒有為 --super-prefix 提供前綴\n"
+
+#: git.c:252
+#, c-format
+msgid "-c expects a configuration string\n"
+msgstr "應為 -c 提供一個設定字串\n"
+
+#: git.c:260
+#, c-format
+msgid "no config key given for --config-env\n"
+msgstr "未傳入設定鍵至 --config-env\n"
+
+#: git.c:300
+#, c-format
+msgid "no directory given for -C\n"
+msgstr "沒有為 -C 提供目錄\n"
+
+#: git.c:326
+#, c-format
+msgid "unknown option: %s\n"
+msgstr "未知選項:%s\n"
+
+#: git.c:375
+#, c-format
+msgid "while expanding alias '%s': '%s'"
+msgstr "在擴展別名 '%s' 時:'%s'"
+
+#: git.c:384
+#, c-format
+msgid ""
+"alias '%s' changes environment variables.\n"
+"You can use '!git' in the alias to do this"
+msgstr ""
+"別名 '%s' 修改環境變數。您可以使用在別名中\n"
+"使用 '!git'"
+
+#: git.c:391
+#, c-format
+msgid "empty alias for %s"
+msgstr "%s 的空別名"
+
+#: git.c:394
+#, c-format
+msgid "recursive alias: %s"
+msgstr "遞迴的別名:%s"
+
+#: git.c:476
+msgid "write failure on standard output"
+msgstr "在標準輸出寫入失敗"
+
+#: git.c:478
+msgid "unknown write failure on standard output"
+msgstr "到標準輸出的未知寫入錯誤"
+
+#: git.c:480
+msgid "close failed on standard output"
+msgstr "標準輸出關閉失敗"
+
+#: git.c:833
+#, c-format
+msgid "alias loop detected: expansion of '%s' does not terminate:%s"
+msgstr "檢測到別名循環:'%s'的擴展未終止:%s"
+
+#: git.c:883
+#, c-format
+msgid "cannot handle %s as a builtin"
+msgstr "不能作為內建指令處理 %s"
+
+#: git.c:896
+#, c-format
+msgid ""
+"usage: %s\n"
+"\n"
+msgstr ""
+"用法:%s\n"
+"\n"
+
+#: git.c:916
+#, c-format
+msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
+msgstr "展開別名指令 '%s' 失敗,'%s' 不是一個 git 指令\n"
+
+#: git.c:928
+#, c-format
+msgid "failed to run command '%s': %s\n"
+msgstr "執行指令 '%s' 失敗:%s\n"
+
+#: http-fetch.c:118
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
 msgstr "傳入 --packfile 的參數必須是有效的雜湊 (收到 '%s')"
 
-#: http-fetch.c:122
+#: http-fetch.c:128
 msgid "not a git repository"
 msgstr "不是一個 git 版本庫"
 
+#: http-fetch.c:134
+msgid "--packfile requires --index-pack-args"
+msgstr "--packfile 需要 --index-pack-args"
+
+#: http-fetch.c:143
+msgid "--index-pack-args can only be used with --packfile"
+msgstr "--index-pack-args 只能與 --packfile 一起使用"
+
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "未處理選項"
@@ -22888,133 +23747,112 @@
 msgid "exit immediately after advertising capabilities"
 msgstr "對能力廣告之後立即離開"
 
-#: git.c:28
-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"
-"           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n"
-"           <command> [<args>]"
+#: t/helper/test-simple-ipc.c:262
+#, c-format
+msgid "socket/pipe already in use: '%s'"
+msgstr "通訊端 (socket) 或管道 (pipe) 已在使用:「%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 "無法在背景啟動 (spawn) 守護程式"
+
+#: t/helper/test-simple-ipc.c:356
+#| msgid "setsid failed"
+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 ""
-"git [--version] [--help] [-C <路徑>] [-c <名稱>=<取值>]\n"
-"           [--exec-path[=<路徑>]] [--html-path] [--man-path] [--info-path]\n"
-"           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--"
-"bare]\n"
-"           [--git-dir=<路徑>] [--work-tree=<路徑>] [--namespace=<名稱>]\n"
-"           <指令> [<參數>]"
 
-#: git.c:35
+#: 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 "test-helper simple-ipc is-active    [<name>] [<options>]"
+
+#: t/helper/test-simple-ipc.c:683
+msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+msgstr "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
+
+#: t/helper/test-simple-ipc.c:684
+msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+msgstr "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
+
+#: t/helper/test-simple-ipc.c:685
+msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+msgstr "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
+
+#: t/helper/test-simple-ipc.c:686
+msgid "test-helper simple-ipc send         [<name>] [<token>]"
+msgstr "test-helper simple-ipc send         [<name>] [<token>]"
+
+#: t/helper/test-simple-ipc.c:687
+msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+msgstr "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
+
+#: t/helper/test-simple-ipc.c:688
 msgid ""
-"'git help -a' and 'git help -g' list available subcommands and some\n"
-"concept guides. See 'git help <command>' or 'git help <concept>'\n"
-"to read about a specific subcommand or concept.\n"
-"See 'git help git' for an overview of the system."
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 msgstr ""
-"指令 'git help -a' 和 'git help -g' 顯示可用的子指令和一些概念說明。\n"
-"檢視 'git help <指令>' 或 'git help <概念>' 以取得提供子指令或概念\n"
-"說明。\n"
-"有關系統概述,檢視 'git help git'。"
+"test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
+"[<batchsize>]"
 
-#: git.c:187
-#, c-format
-msgid "no directory given for --git-dir\n"
-msgstr "沒有為 --git-dir 提供目錄\n"
+#: t/helper/test-simple-ipc.c:696
+msgid "name or pathname of unix domain socket"
+msgstr "Unix 網域通訊端的名稱或路徑名稱"
 
-#: git.c:201
-#, c-format
-msgid "no namespace given for --namespace\n"
-msgstr "沒有為 --namespace 提供命名空間\n"
+#: t/helper/test-simple-ipc.c:698
+msgid "named-pipe name"
+msgstr "有命名管道的名稱"
 
-#: git.c:215
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr "沒有為 --work-tree 提供目錄\n"
+#: t/helper/test-simple-ipc.c:700
+msgid "number of threads in server thread pool"
+msgstr "伺服器執行緒集區的執行緒數量"
 
-#: git.c:229
-#, c-format
-msgid "no prefix given for --super-prefix\n"
-msgstr "沒有為 --super-prefix 提供前綴\n"
+#: t/helper/test-simple-ipc.c:701
+msgid "seconds to wait for daemon to start or stop"
+msgstr "要等待守護程式啟動或停止多久(秒)"
 
-#: git.c:251
-#, c-format
-msgid "-c expects a configuration string\n"
-msgstr "應為 -c 提供一個設定字串\n"
+#: t/helper/test-simple-ipc.c:703
+msgid "number of bytes"
+msgstr "位元組數"
 
-#: git.c:289
-#, c-format
-msgid "no directory given for -C\n"
-msgstr "沒有為 -C 提供目錄\n"
+#: t/helper/test-simple-ipc.c:704
+msgid "number of requests per thread"
+msgstr "每個執行緒的請求數"
 
-#: git.c:315
-#, c-format
-msgid "unknown option: %s\n"
-msgstr "未知選項:%s\n"
+#: t/helper/test-simple-ipc.c:706
+msgid "byte"
+msgstr "位元組"
 
-#: git.c:364
-#, c-format
-msgid "while expanding alias '%s': '%s'"
-msgstr "在擴展別名 '%s' 時:'%s'"
+#: t/helper/test-simple-ipc.c:706
+msgid "ballast character"
+msgstr "穩定 (ballast) 字元"
 
-#: git.c:373
-#, c-format
-msgid ""
-"alias '%s' changes environment variables.\n"
-"You can use '!git' in the alias to do this"
-msgstr ""
-"別名 '%s' 修改環境變數。您可以使用在別名中\n"
-"使用 '!git'"
+#: t/helper/test-simple-ipc.c:707
+msgid "token"
+msgstr "代符"
 
-#: git.c:380
-#, c-format
-msgid "empty alias for %s"
-msgstr "%s 的空別名"
-
-#: git.c:383
-#, c-format
-msgid "recursive alias: %s"
-msgstr "遞迴的別名:%s"
-
-#: git.c:465
-msgid "write failure on standard output"
-msgstr "在標準輸出寫入失敗"
-
-#: git.c:467
-msgid "unknown write failure on standard output"
-msgstr "到標準輸出的未知寫入錯誤"
-
-#: git.c:469
-msgid "close failed on standard output"
-msgstr "標準輸出關閉失敗"
-
-#: git.c:820
-#, c-format
-msgid "alias loop detected: expansion of '%s' does not terminate:%s"
-msgstr "檢測到別名循環:'%s'的擴展未終止:%s"
-
-#: git.c:870
-#, c-format
-msgid "cannot handle %s as a builtin"
-msgstr "不能作為內建指令處理 %s"
-
-#: git.c:883
-#, c-format
-msgid ""
-"usage: %s\n"
-"\n"
-msgstr ""
-"用法:%s\n"
-"\n"
-
-#: git.c:903
-#, c-format
-msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
-msgstr "展開別名指令 '%s' 失敗,'%s' 不是一個 git 指令\n"
-
-#: git.c:915
-#, c-format
-msgid "failed to run command '%s': %s\n"
-msgstr "執行指令 '%s' 失敗:%s\n"
+#: t/helper/test-simple-ipc.c:707
+msgid "command token to send to the server"
+msgstr "要傳送至伺服器的命令代符"
 
 #: http.c:399
 #, c-format
@@ -23052,7 +23890,7 @@
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "無法將 SSL 後端設定為 '%s':已經設定"
 
-#: http.c:2025
+#: http.c:2035
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23203,52 +24041,52 @@
 msgid "no libc information available\n"
 msgstr "沒有可用的 libc 資訊\n"
 
-#: list-objects-filter-options.h:91
+#: list-objects-filter-options.h:94
 msgid "args"
 msgstr "參數"
 
-#: list-objects-filter-options.h:92
+#: list-objects-filter-options.h:95
 msgid "object filtering"
 msgstr "物件過濾"
 
-#: parse-options.h:183
+#: parse-options.h:184
 msgid "expiry-date"
 msgstr "到期時間"
 
-#: parse-options.h:197
+#: parse-options.h:198
 msgid "no-op (backward compatibility)"
 msgstr "空動作(向後相容)"
 
-#: parse-options.h:309
+#: parse-options.h:310
 msgid "be more verbose"
 msgstr "更加詳細"
 
-#: parse-options.h:311
+#: parse-options.h:312
 msgid "be more quiet"
 msgstr "更加安靜"
 
-#: parse-options.h:317
+#: parse-options.h:318
 msgid "use <n> digits to display object names"
 msgstr "用 <n> 位數字顯示物件名稱"
 
-#: parse-options.h:336
+#: parse-options.h:337
 msgid "how to strip spaces and #comments from message"
 msgstr "設定如何刪除提交說明裡的空格和 #備註"
 
-#: parse-options.h:337
+#: parse-options.h:338
 msgid "read pathspec from file"
 msgstr "從檔案讀取 <路徑規格>"
 
-#: parse-options.h:338
+#: parse-options.h:339
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "如使用 --pathspec-from-file,則 <路徑規格> 元件會使用 NUL 字元分隔"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "key"
 msgstr "key"
 
-#: ref-filter.h:96
+#: ref-filter.h:99
 msgid "field name to sort on"
 msgstr "排序的欄位名"
 
@@ -23256,14 +24094,6 @@
 msgid "update the index with reused conflict resolution if possible"
 msgstr "如果可能,重用衝突解決更新索引"
 
-#: wt-status.h:80
-msgid "HEAD detached at "
-msgstr "開頭指標分離於 "
-
-#: wt-status.h:81
-msgid "HEAD detached from "
-msgstr "開頭指標分離自 "
-
 #: command-list.h:50
 msgid "Add file contents to the index"
 msgstr "新增檔案內容至索引"
@@ -23274,7 +24104,7 @@
 
 #: command-list.h:52
 msgid "Annotate file lines with commit information"
-msgstr "使用提交訊息備註檔案行"
+msgstr "使用提交說明備註檔案行"
 
 #: command-list.h:53
 msgid "Apply a patch to files and/or to the index"
@@ -23290,7 +24120,7 @@
 
 #: command-list.h:56
 msgid "Use binary search to find the commit that introduced a bug"
-msgstr "透過二分尋找定位引入 bug 的提交"
+msgstr "透過二分搜尋定位引入 bug 的提交"
 
 #: command-list.h:57
 msgid "Show what revision and author last modified each line of a file"
@@ -23342,7 +24172,7 @@
 
 #: command-list.h:69
 msgid "Apply the changes introduced by some existing commits"
-msgstr "應用一些現存提交引入的修改"
+msgstr "套用一些現存提交引入的修改"
 
 #: command-list.h:70
 msgid "Graphical alternative to git-commit"
@@ -23454,7 +24284,7 @@
 
 #: command-list.h:97
 msgid "Produce a merge commit message"
-msgstr "生成一個合併提交訊息"
+msgstr "生成一個合併提交說明"
 
 #: command-list.h:98
 msgid "Output information on each ref"
@@ -23593,8 +24423,8 @@
 msgstr "寫入和驗證多包索引"
 
 #: command-list.h:132
-msgid "Creates a tag object"
-msgstr "建立一個標籤物件"
+msgid "Creates a tag object with extra validation"
+msgstr "建立有額外驗證的標籤物件"
 
 #: command-list.h:133
 msgid "Build a tree-object from ls-tree formatted text"
@@ -23663,7 +24493,7 @@
 
 #: command-list.h:149
 msgid "Reapply commits on top of another base tip"
-msgstr "在另一個分支上重新應用提交"
+msgstr "在另一個分支上重新套用提交"
 
 #: command-list.h:150
 msgid "Receive what is pushed into the repository"
@@ -23799,7 +24629,7 @@
 
 #: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
-msgstr "用 blob 資料物件的內容建立一個暫存檔"
+msgstr "用資料物件的內容建立暫存檔"
 
 #: command-list.h:184
 msgid "Unpack objects from a packed archive"
@@ -23902,97 +24732,79 @@
 msgstr "忽略指定的未追蹤檔案"
 
 #: command-list.h:209
+msgid "Map author/committer names and/or E-Mail addresses"
+msgstr "映射作者或提交者的名稱和(或)電子信箱地址"
+
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "定義子模組屬性"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git 名字空間"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "用來與遠端版本庫互動的協助工具"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git 版本庫配置"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "指定 Git 的版本和版本範圍"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "在某個版本庫掛載某個版本庫"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git: part two"
 msgstr "一個 Git 教學:第二部分"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "一個 Git 教學"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "An overview of recommended workflows with Git"
 msgstr "Git 推薦的工作流概覽"
 
-#: git-bisect.sh:48
-#, sh-format
-msgid "Bad rev input: $arg"
-msgstr "壞的輸入版本:$arg"
-
-#: git-bisect.sh:82
-msgid "No logfile given"
-msgstr "未提供日誌檔案"
-
-#: git-bisect.sh:83
-#, sh-format
-msgid "cannot read $file for replaying"
-msgstr "不能讀取 $file 來重放"
-
-#: git-bisect.sh:105
-msgid "?? what are you talking about?"
-msgstr "?? 您在說什麼?"
-
-#: git-bisect.sh:115
+#: git-bisect.sh:68
 msgid "bisect run failed: no command provided."
-msgstr "二分尋找執行失敗:沒有提供指令。"
+msgstr "二分搜尋執行失敗:沒有提供指令。"
 
-#: git-bisect.sh:120
+#: git-bisect.sh:73
 #, sh-format
 msgid "running $command"
 msgstr "執行 $command"
 
-#: git-bisect.sh:127
+#: git-bisect.sh:80
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "exit code $res from '$command' is < 0 or >= 128"
 msgstr ""
-"二分尋找執行失敗:\n"
+"二分搜尋執行失敗:\n"
 "指令 '$command' 的離開碼 $res 小於 0 或大於等於 128"
 
-#: git-bisect.sh:152
+#: git-bisect.sh:105
 msgid "bisect run cannot continue any more"
-msgstr "二分尋找不能繼續執行"
+msgstr "二分搜尋不能繼續執行"
 
-#: git-bisect.sh:158
+#: git-bisect.sh:111
 #, sh-format
 msgid ""
 "bisect run failed:\n"
 "'bisect-state $state' exited with error code $res"
 msgstr ""
-"二分尋找執行失敗:\n"
+"二分搜尋執行失敗:\n"
 "‘bisect-state $state’ 結束,錯誤碼 $res"
 
-#: git-bisect.sh:165
+#: git-bisect.sh:118
 msgid "bisect run success"
-msgstr "二分尋找執行成功"
-
-#: git-bisect.sh:173
-msgid "We are not bisecting."
-msgstr "我們沒有在二分尋找。"
+msgstr "二分搜尋執行成功"
 
 #: git-merge-octopus.sh:46
 msgid ""
@@ -24185,7 +24997,7 @@
 
 #: git-rebase--preserve-merges.sh:109
 msgid "Applied autostash."
-msgstr "已應用 autostash。"
+msgstr "已套用 autostash。"
 
 #: git-rebase--preserve-merges.sh:112
 #, sh-format
@@ -24198,7 +25010,7 @@
 "Your changes are safe in the stash.\n"
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
-"應用 autostash 導致衝突。\n"
+"套用 autostash 導致衝突。\n"
 "您的修改安全地儲存在儲藏區中。\n"
 "您可以在任何時候執行 \"git stash pop\" 或 \"git stash drop\"。\n"
 
@@ -24234,7 +25046,7 @@
 "e, edit <提交> = 使用提交,但停下來修補\n"
 "s, squash <提交> = 使用提交,但融合到前一個提交\n"
 "f, fixup <提交> = 類似於 \"squash\",但捨棄提交說明日誌\n"
-"x, exec <指令> = 使用 shell 執行指令(此行剩餘部分)\n"
+"x, exec <命令> = 使用 shell 執行指令(此行剩餘部分)\n"
 "d, drop <提交> = 刪除提交\n"
 "l, label <標籤> = 為目前 HEAD 打上標籤\n"
 "t, reset <標籤> = 重設 HEAD 到該標籤\n"
@@ -24316,7 +25128,7 @@
 #: git-rebase--preserve-merges.sh:462
 #, sh-format
 msgid "The commit message #${n} will be skipped:"
-msgstr "提交說明 #${n} 將被跳過:"
+msgstr "提交說明 #${n} 將被略過:"
 
 #: git-rebase--preserve-merges.sh:473
 #, sh-format
@@ -24337,7 +25149,7 @@
 #: git-rebase--preserve-merges.sh:572
 #, sh-format
 msgid "Could not apply $sha1... $rest"
-msgstr "不能應用 $sha1... $rest"
+msgstr "不能套用 $sha1... $rest"
 
 #: git-rebase--preserve-merges.sh:601
 #, sh-format
@@ -24573,26 +25385,26 @@
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for staging."
-msgstr "如果修補檔能乾淨地套用,編輯塊將立即標記為暫存。"
+msgstr "如果修補檔能乾淨地套用,編輯區塊將立即標記為暫存。"
 
 #: git-add--interactive.perl:1059
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for stashing."
-msgstr "如果修補檔能乾淨地套用,編輯塊將立即標記為儲藏。"
+msgstr "如果修補檔能乾淨地套用,編輯區塊將立即標記為儲藏。"
 
 #: git-add--interactive.perl:1062
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for unstaging."
-msgstr "如果修補檔能乾淨地套用,編輯塊將立即標記為未暫存。"
+msgstr "如果修補檔能乾淨地套用,編輯區塊將立即標記為未暫存。"
 
 #: git-add--interactive.perl:1065 git-add--interactive.perl:1074
 #: git-add--interactive.perl:1080
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for applying."
-msgstr "如果修補檔能乾淨地套用,編輯塊將立即標記為應用。"
+msgstr "如果修補檔能乾淨地套用,編輯區塊將立即標記為套用。"
 
 #: git-add--interactive.perl:1068 git-add--interactive.perl:1071
 #: git-add--interactive.perl:1077
@@ -24760,7 +25572,7 @@
 
 #: git-add--interactive.perl:1345
 msgid "The selected hunks do not apply to the index!\n"
-msgstr "選中的區塊不能套用到索引!\n"
+msgstr "選取區塊不能套用到索引!\n"
 
 #: git-add--interactive.perl:1360
 #, perl-format
@@ -24817,7 +25629,7 @@
 
 #: git-add--interactive.perl:1696 git-add--interactive.perl:1718
 msgid "No previous hunk\n"
-msgstr "沒有前一個區塊\n"
+msgstr "沒有上一個區塊\n"
 
 #: git-add--interactive.perl:1705 git-add--interactive.perl:1724
 msgid "No next hunk\n"
@@ -24881,26 +25693,31 @@
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "本機時間位移量大於等於 24 小時\n"
 
-#: git-send-email.perl:223 git-send-email.perl:229
+#: git-send-email.perl:222
+#, perl-format
+msgid "fatal: command '%s' died with exit code %d"
+msgstr "致命錯誤:命令「%s」中止,結束碼:%d"
+
+#: git-send-email.perl:235
 msgid "the editor exited uncleanly, aborting everything"
 msgstr "編輯器非正常離開,終止所有動作"
 
-#: git-send-email.perl:312
+#: git-send-email.perl:321
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
 msgstr "'%s' 包含您正在編寫的一個中間版本的信件。\n"
 
-#: git-send-email.perl:317
+#: git-send-email.perl:326
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' 包含編輯的信件。\n"
 
-#: git-send-email.perl:410
+#: git-send-email.perl:419
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases 和其它選項不相容\n"
 
-#: git-send-email.perl:484
+#: git-send-email.perl:493
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
@@ -24910,47 +25727,47 @@
 "git-send-email 已經以 sendemail.* 選項設定 - 注意裡面的 'e'。\n"
 "請將 sendemail.forbidSendmailVariables 設為 false 停用此檢查。\n"
 
-#: git-send-email.perl:489 git-send-email.perl:691
+#: git-send-email.perl:498 git-send-email.perl:700
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "不能在版本庫之外執行 git format-patch\n"
 
-#: git-send-email.perl:492
+#: git-send-email.perl:501
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
 msgstr "`batch-size` 和 `relogin` 必須同時定義(透過指令列或者設定選項)\n"
 
-#: git-send-email.perl:505
+#: git-send-email.perl:514
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "未知的 --suppress-cc 欄位:'%s'\n"
 
-#: git-send-email.perl:536
+#: git-send-email.perl:545
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "未知的 --confirm 設定:'%s'\n"
 
-#: git-send-email.perl:564
+#: git-send-email.perl:573
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "警告:不支援帶引號的 sendmail 別名:%s\n"
 
-#: git-send-email.perl:566
+#: git-send-email.perl:575
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "警告:不支援 `:include:`:%s\n"
 
-#: git-send-email.perl:568
+#: git-send-email.perl:577
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "警告:不支援 `/file` 或 `|pipe` 重定向:%s\n"
 
-#: git-send-email.perl:573
+#: git-send-email.perl:582
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "警告:不能識別的 sendmail 行:%s\n"
 
-#: git-send-email.perl:657
+#: git-send-email.perl:666
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -24965,21 +25782,12 @@
 "    * 如果含義為一個檔案,使用 \"./%s\",或者\n"
 "    * 如果含義為一個範圍,使用 --format-patch 選項。\n"
 
-#: git-send-email.perl:678
+#: git-send-email.perl:687
 #, perl-format
 msgid "Failed to opendir %s: %s"
 msgstr "無法開啟目錄 %s: %s"
 
-#: git-send-email.perl:702
-#, perl-format
-msgid ""
-"fatal: %s: %s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"致命錯誤:%s:%s\n"
-"警告:修補檔未能傳送\n"
-
-#: git-send-email.perl:713
+#: git-send-email.perl:720
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -24989,17 +25797,17 @@
 "未指定修補檔案!\n"
 "\n"
 
-#: git-send-email.perl:726
+#: git-send-email.perl:733
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "在 %s 中沒有標題行?"
 
-#: git-send-email.perl:736
+#: git-send-email.perl:743
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "為寫入開啟 %s 失敗: %s"
 
-#: git-send-email.perl:747
+#: git-send-email.perl:754
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25012,37 +25820,37 @@
 "\n"
 "如果您不想傳送摘要,清除內容。\n"
 
-#: git-send-email.perl:771
+#: git-send-email.perl:778
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "無法開啟 %s: %s"
 
-#: git-send-email.perl:788
+#: git-send-email.perl:795
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "無法開啟 %s.final: %s"
 
-#: git-send-email.perl:831
+#: git-send-email.perl:838
 msgid "Summary email is empty, skipping it\n"
-msgstr "摘要信件為空,跳過\n"
+msgstr "摘要信件為空,略過\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:866
+#: git-send-email.perl:873
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
 msgstr "您是否要使用 <%s> [y/N]? "
 
-#: git-send-email.perl:921
+#: git-send-email.perl:928
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
 msgstr "如下檔案含 8bit 內容,但沒有聲明一個 Content-Transfer-Encoding。\n"
 
-#: git-send-email.perl:926
+#: git-send-email.perl:933
 msgid "Which 8bit encoding should I declare [UTF-8]? "
 msgstr "要宣告 8bit 為什麼樣的編碼格式 [UTF-8]? "
 
-#: git-send-email.perl:934
+#: git-send-email.perl:941
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -25054,20 +25862,20 @@
 "\t%s\n"
 "包含範本標題 '*** SUBJECT HERE ***'。如果確定想要傳送,使用參數 --force。\n"
 
-#: git-send-email.perl:953
+#: git-send-email.perl:960
 msgid "To whom should the emails be sent (if anyone)?"
 msgstr "信件將要傳送給誰?"
 
-#: git-send-email.perl:971
+#: git-send-email.perl:978
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "致命錯誤:別名 '%s' 擴展為它自己\n"
 
-#: git-send-email.perl:983
+#: git-send-email.perl:990
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr "(如果有)Message-ID 是否要被用作第一封信件的 In-Reply-To ? "
 
-#: git-send-email.perl:1041 git-send-email.perl:1049
+#: git-send-email.perl:1048 git-send-email.perl:1056
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "錯誤:不能從 %s 中擷取一個有效的信件位址\n"
@@ -25075,16 +25883,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:1053
+#: git-send-email.perl:1060
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "如何處理這個位址?([q]uit|[d]rop|[e]dit):"
 
-#: git-send-email.perl:1370
+#: git-send-email.perl:1377
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "CA 路徑 \"%s\" 不存在"
 
-#: git-send-email.perl:1453
+#: git-send-email.perl:1460
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25097,7 +25905,7 @@
 "    run 'git config --global sendemail.confirm auto'.\n"
 "\n"
 msgstr ""
-"    以上的抄送列表(Cc)已經用修補檔提交訊息中發現的位址進行\n"
+"    以上的抄送列表(Cc)已經用修補檔提交說明中發現的位址進行\n"
 "    了擴展。預設 send-email 會給出提示。這個行為可以透過\n"
 "    sendemail.confirm 設定設定。\n"
 "\n"
@@ -25109,128 +25917,267 @@
 #. 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:1468
+#: git-send-email.perl:1475
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "傳送這封信件?([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 
-#: git-send-email.perl:1471
+#: git-send-email.perl:1478
 msgid "Send this email reply required"
 msgstr "傳送要求的信件回復"
 
-#: git-send-email.perl:1499
+#: git-send-email.perl:1506
 msgid "The required SMTP server is not properly defined."
 msgstr "要求的 SMTP 伺服器未被正確定義。"
 
-#: git-send-email.perl:1546
+#: git-send-email.perl:1553
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "伺服器不支援 STARTTLS!%s"
 
-#: git-send-email.perl:1551 git-send-email.perl:1555
+#: git-send-email.perl:1558 git-send-email.perl:1562
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "STARTTLS 失敗!%s"
 
-#: git-send-email.perl:1564
+#: git-send-email.perl:1571
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
 msgstr "無法正確地初始化 SMTP。檢查設定並使用 --smtp-debug。"
 
-#: git-send-email.perl:1582
+#: git-send-email.perl:1589
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "無法傳送 %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "測試執行傳送 %s\n"
 
-#: git-send-email.perl:1585
+#: git-send-email.perl:1592
 #, perl-format
 msgid "Sent %s\n"
 msgstr "正傳送 %s\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "Dry-OK. Log says:\n"
 msgstr "測試執行成功。日誌說:\n"
 
-#: git-send-email.perl:1587
+#: git-send-email.perl:1594
 msgid "OK. Log says:\n"
 msgstr "OK。日誌說:\n"
 
-#: git-send-email.perl:1599
+#: git-send-email.perl:1606
 msgid "Result: "
 msgstr "結果:"
 
-#: git-send-email.perl:1602
+#: git-send-email.perl:1609
 msgid "Result: OK\n"
 msgstr "結果:OK\n"
 
-#: git-send-email.perl:1620
+#: git-send-email.perl:1627
 #, perl-format
 msgid "can't open file %s"
 msgstr "無法開啟檔案 %s"
 
-#: git-send-email.perl:1667 git-send-email.perl:1687
+#: git-send-email.perl:1674 git-send-email.perl:1694
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) 新增 cc:%s 自行 '%s'\n"
 
-#: git-send-email.perl:1673
+#: git-send-email.perl:1680
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) 新增 to:%s 自行 '%s'\n"
 
-#: git-send-email.perl:1730
+#: git-send-email.perl:1737
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) 新增 cc:%s 自行 '%s'\n"
 
-#: git-send-email.perl:1765
+#: git-send-email.perl:1772
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) 新增 cc: %s 自行 '%s'\n"
 
-#: git-send-email.perl:1876
+#: git-send-email.perl:1883
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) 不能執行 '%s'"
 
-#: git-send-email.perl:1883
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) 新增 %s: %s 自:'%s'\n"
 
-#: git-send-email.perl:1887
+#: git-send-email.perl:1894
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) 無法關閉管道至 '%s'"
 
-#: git-send-email.perl:1917
+#: git-send-email.perl:1924
 msgid "cannot send message as 7bit"
 msgstr "不能以 7bit 形式傳送訊息"
 
-#: git-send-email.perl:1925
+#: git-send-email.perl:1932
 msgid "invalid transfer encoding"
 msgstr "無效的傳送編碼"
 
-#: git-send-email.perl:1966 git-send-email.perl:2018 git-send-email.perl:2028
+#: git-send-email.perl:1966
+#, perl-format
+msgid ""
+"fatal: %s: rejected by sendemail-validate hook\n"
+"%s\n"
+"warning: no patches were sent\n"
+msgstr ""
+"致命錯誤:%s:被 sendemail-validate 掛鈎拒絕\n"
+"%s\n"
+"警告:修補檔未能傳送\n"
+
+#: git-send-email.perl:1976 git-send-email.perl:2029 git-send-email.perl:2039
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "不能開啟 %s:%s\n"
 
-#: git-send-email.perl:1969
+#: git-send-email.perl:1979
 #, perl-format
-msgid "%s: patch contains a line longer than 998 characters"
-msgstr "%s:修補檔包含一個超過 998 字元的行"
+msgid ""
+"fatal: %s:%d is longer than 998 characters\n"
+"warning: no patches were sent\n"
+msgstr ""
+"致命錯誤:%s:%d 的字元數超過 998\n"
+"警告:修補檔未能傳送\n"
 
-#: git-send-email.perl:1986
+#: git-send-email.perl:1997
 #, 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:1990
+#: git-send-email.perl:2001
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "您真的要傳送 %s?[y|N]:"
+
+#~ msgid "--cached and --3way cannot be used together."
+#~ msgstr "--cached 和 --3way 不能同時使用。"
+
+#~ msgid "both"
+#~ msgstr "雙方"
+
+#~ msgid "one"
+#~ msgstr "一方"
+
+#, c-format
+#~ msgid "Already up to date!"
+#~ msgstr "已經是最新的!"
+
+#~ msgid "Already up to date. Yeeah!"
+#~ msgstr "已經是最新的。耶!"
+
+#~ msgid "--batch-size option is only for 'repack' subcommand"
+#~ msgstr "--batch-size 選項僅用於 'repack' 子指令"
+
+#~ msgid "Percentage by which creation is weighted"
+#~ msgstr "建立權重的百分比"
+
+#~ msgid ""
+#~ "the rebase.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "對 rebase.useBuiltin 的支援已被刪除!\n"
+#~ "詳見 'git help config' 中的條目。"
+
+#, perl-format
+#~ msgid "%s: patch contains a line longer than 998 characters"
+#~ msgstr "%s:修補檔包含一個超過 998 字元的行"
+
+#~ msgid "repository contains replace objects; skipping commit-graph"
+#~ msgstr "版本庫有取代物件;跳過提交圖形"
+
+#~ msgid "repository contains (deprecated) grafts; skipping commit-graph"
+#~ msgstr "版本庫有(廢棄的)移植項目;跳過提交圖形"
+
+#~ msgid "repository is shallow; skipping commit-graph"
+#~ msgstr "版本庫是淺複製;忽略提交圖形"
+
+#, c-format
+#~ msgid "commit-graph improper chunk offset %08x%08x"
+#~ msgstr "提交圖形不正確的區塊位移 %08x%08x"
+
+#, c-format
+#~ msgid "commit-graph chunk id %08x appears multiple times"
+#~ msgstr "提交圖形區塊 id %08x 出現了多次"
+
+#~ msgid "invalid chunk offset (too large)"
+#~ msgstr "無效的區塊位移(太大)"
+
+#~ msgid "Writing chunks to multi-pack-index"
+#~ msgstr "寫入區塊至多包索引"
+
+#~ msgid "rev-list died"
+#~ msgstr "rev-list 終止"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-write [--no-log] <state> <revision> "
+#~ "<good_term> <bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-write [--no-log] <狀態> <版本> <好-術語> <壞-"
+#~ "術語>"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
+#~ "<bad_term>"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-check-and-set-terms <指令> <好-術語> <壞-術語>"
+
+#~ msgid "git bisect--helper --bisect-auto-next"
+#~ msgstr "git bisect--helper --bisect-auto-next"
+
+#~ msgid "write out the bisection state in BISECT_LOG"
+#~ msgstr "將二分尋找的狀態寫入 BISECT_LOG"
+
+#~ msgid "check and set terms in a bisection state"
+#~ msgstr "在一個二分尋找狀態中檢查和設定術語"
+
+#~ msgid ""
+#~ "verify the next bisection state then checkout the next bisection commit"
+#~ msgstr "驗證下一個二分尋找狀態後,檢出下一個二分尋找提交"
+
+#~ msgid "--bisect-write requires either 4 or 5 arguments"
+#~ msgstr "--bisect-write 需要 4 或 5 個參數"
+
+#~ msgid "--check-and-set-terms requires 3 arguments"
+#~ msgstr "--check-and-set-terms 需要 3 個參數"
+
+#~ msgid "--bisect-auto-next requires 0 arguments"
+#~ msgstr "--bisect-auto-next 需要 0 個引數"
+
+#~ msgid "Force progress reporting"
+#~ msgstr "強制進度顯示"
+
+#, c-format
+#~ msgid "Error deleting remote-tracking branch '%s'"
+#~ msgstr "無法刪除遠端追蹤分支 '%s'"
+
+#, c-format
+#~ msgid "Error deleting branch '%s'"
+#~ msgstr "無法刪除分支 '%s'"
+
+#~ msgid "show parse tree for grep expression"
+#~ msgstr "顯示 grep 表達式的解析樹"
+
+#~ msgid "too many parameters"
+#~ msgstr "參數太多"
+
+#~ msgid "too few parameters"
+#~ msgstr "參數太少"
+
+#~ msgid "Recurse into nested submodules"
+#~ msgstr "遞迴進入嵌套子模組中"
+
+#~ msgid "too many params"
+#~ msgstr "太多參數"
+
+#, sh-format
+#~ msgid "Bad rev input: $arg"
+#~ msgstr "壞的輸入版本:$arg"
diff --git a/preload-index.c b/preload-index.c
index ed6eaa4..e5529a5 100644
--- a/preload-index.c
+++ b/preload-index.c
@@ -31,6 +31,7 @@
 	struct pathspec pathspec;
 	struct progress_data *progress;
 	int offset, nr;
+	int t2_nr_lstat;
 };
 
 static void *preload_thread(void *_data)
@@ -73,6 +74,7 @@
 			continue;
 		if (threaded_has_symlink_leading_path(&cache, ce->name, ce_namelen(ce)))
 			continue;
+		p->t2_nr_lstat++;
 		if (lstat(ce->name, &st))
 			continue;
 		if (ie_match_stat(index, ce, &st, CE_MATCH_RACY_IS_DIRTY|CE_MATCH_IGNORE_FSMONITOR))
@@ -98,6 +100,7 @@
 	int threads, i, work, offset;
 	struct thread_data data[MAX_PARALLEL];
 	struct progress_data pd;
+	int t2_sum_lstat = 0;
 
 	if (!HAVE_THREADS || !core_preload_index)
 		return;
@@ -107,6 +110,9 @@
 		threads = 2;
 	if (threads < 2)
 		return;
+
+	trace2_region_enter("index", "preload", NULL);
+
 	trace_performance_enter();
 	if (threads > MAX_PARALLEL)
 		threads = MAX_PARALLEL;
@@ -141,10 +147,14 @@
 		struct thread_data *p = data+i;
 		if (pthread_join(p->pthread, NULL))
 			die("unable to join threaded lstat");
+		t2_sum_lstat += p->t2_nr_lstat;
 	}
 	stop_progress(&pd.progress);
 
 	trace_performance_leave("preload index");
+
+	trace2_data_intmax("index", NULL, "preload/sum_lstat", t2_sum_lstat);
+	trace2_region_leave("index", "preload", NULL);
 }
 
 int repo_read_index_preload(struct repository *repo,
diff --git a/pretty.c b/pretty.c
index b4ff3f6..9631529 100644
--- a/pretty.c
+++ b/pretty.c
@@ -12,6 +12,7 @@
 #include "reflog-walk.h"
 #include "gpg-interface.h"
 #include "trailer.h"
+#include "run-command.h"
 
 static char *user_format;
 static struct cmt_fmt_map {
@@ -678,7 +679,7 @@
 {
 	static struct string_list *mail_map;
 	if (!mail_map) {
-		mail_map = xcalloc(1, sizeof(*mail_map));
+		CALLOC_ARRAY(mail_map, 1);
 		read_mailmap(mail_map);
 	}
 	return mail_map->nr && map_user(mail_map, email, email_len, name, name_len);
@@ -744,6 +745,9 @@
 	case 'I':	/* date, ISO 8601 strict */
 		strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(ISO8601_STRICT)));
 		return placeholder_len;
+	case 'h':	/* date, human */
+		strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(HUMAN)));
+		return placeholder_len;
 	case 's':
 		strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(SHORT)));
 		return placeholder_len;
@@ -1149,6 +1153,91 @@
 	return 0;
 }
 
+int format_set_trailers_options(struct process_trailer_options *opts,
+				struct string_list *filter_list,
+				struct strbuf *sepbuf,
+				struct strbuf *kvsepbuf,
+				const char **arg,
+				char **invalid_arg)
+{
+	for (;;) {
+		const char *argval;
+		size_t arglen;
+
+		if (**arg == ')')
+			break;
+
+		if (match_placeholder_arg_value(*arg, "key", arg, &argval, &arglen)) {
+			uintptr_t len = arglen;
+
+			if (!argval)
+				return -1;
+
+			if (len && argval[len - 1] == ':')
+				len--;
+			string_list_append(filter_list, argval)->util = (char *)len;
+
+			opts->filter = format_trailer_match_cb;
+			opts->filter_data = filter_list;
+			opts->only_trailers = 1;
+		} else if (match_placeholder_arg_value(*arg, "separator", arg, &argval, &arglen)) {
+			char *fmt;
+
+			strbuf_reset(sepbuf);
+			fmt = xstrndup(argval, arglen);
+			strbuf_expand(sepbuf, fmt, strbuf_expand_literal_cb, NULL);
+			free(fmt);
+			opts->separator = sepbuf;
+		} else if (match_placeholder_arg_value(*arg, "key_value_separator", arg, &argval, &arglen)) {
+			char *fmt;
+
+			strbuf_reset(kvsepbuf);
+			fmt = xstrndup(argval, arglen);
+			strbuf_expand(kvsepbuf, fmt, strbuf_expand_literal_cb, NULL);
+			free(fmt);
+			opts->key_value_separator = kvsepbuf;
+		} else if (!match_placeholder_bool_arg(*arg, "only", arg, &opts->only_trailers) &&
+			   !match_placeholder_bool_arg(*arg, "unfold", arg, &opts->unfold) &&
+			   !match_placeholder_bool_arg(*arg, "keyonly", arg, &opts->key_only) &&
+			   !match_placeholder_bool_arg(*arg, "valueonly", arg, &opts->value_only)) {
+			if (invalid_arg) {
+				size_t len = strcspn(*arg, ",)");
+				*invalid_arg = xstrndup(*arg, len);
+			}
+			return -1;
+		}
+	}
+	return 0;
+}
+
+static size_t parse_describe_args(const char *start, struct strvec *args)
+{
+	const char *options[] = { "match", "exclude" };
+	const char *arg = start;
+
+	for (;;) {
+		const char *matched = NULL;
+		const char *argval;
+		size_t arglen = 0;
+		int i;
+
+		for (i = 0; i < ARRAY_SIZE(options); i++) {
+			if (match_placeholder_arg_value(arg, options[i], &arg,
+							&argval, &arglen)) {
+				matched = options[i];
+				break;
+			}
+		}
+		if (!matched)
+			break;
+
+		if (!arglen)
+			return 0;
+		strvec_pushf(args, "--%s=%.*s", matched, (int)arglen, argval);
+	}
+	return arg - start;
+}
+
 static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
 				const char *placeholder,
 				void *context)
@@ -1214,6 +1303,41 @@
 		return parse_padding_placeholder(placeholder, c);
 	}
 
+	if (skip_prefix(placeholder, "(describe", &arg)) {
+		struct child_process cmd = CHILD_PROCESS_INIT;
+		struct strbuf out = STRBUF_INIT;
+		struct strbuf err = STRBUF_INIT;
+		struct pretty_print_describe_status *describe_status;
+
+		describe_status = c->pretty_ctx->describe_status;
+		if (describe_status) {
+			if (!describe_status->max_invocations)
+				return 0;
+			describe_status->max_invocations--;
+		}
+
+		cmd.git_cmd = 1;
+		strvec_push(&cmd.args, "describe");
+
+		if (*arg == ':') {
+			arg++;
+			arg += parse_describe_args(arg, &cmd.args);
+		}
+
+		if (*arg != ')') {
+			child_process_clear(&cmd);
+			return 0;
+		}
+
+		strvec_push(&cmd.args, oid_to_hex(&commit->object.oid));
+		pipe_command(&cmd, NULL, 0, &out, 0, &err, 0);
+		strbuf_rtrim(&out);
+		strbuf_addbuf(sb, &out);
+		strbuf_release(&out);
+		strbuf_release(&err);
+		return arg - placeholder + 1;
+	}
+
 	/* these depend on the commit */
 	if (!commit->object.parsed)
 		parse_object(the_repository, &commit->object.oid);
@@ -1429,45 +1553,8 @@
 
 		if (*arg == ':') {
 			arg++;
-			for (;;) {
-				const char *argval;
-				size_t arglen;
-
-				if (match_placeholder_arg_value(arg, "key", &arg, &argval, &arglen)) {
-					uintptr_t len = arglen;
-
-					if (!argval)
-						goto trailer_out;
-
-					if (len && argval[len - 1] == ':')
-						len--;
-					string_list_append(&filter_list, argval)->util = (char *)len;
-
-					opts.filter = format_trailer_match_cb;
-					opts.filter_data = &filter_list;
-					opts.only_trailers = 1;
-				} else if (match_placeholder_arg_value(arg, "separator", &arg, &argval, &arglen)) {
-					char *fmt;
-
-					strbuf_reset(&sepbuf);
-					fmt = xstrndup(argval, arglen);
-					strbuf_expand(&sepbuf, fmt, strbuf_expand_literal_cb, NULL);
-					free(fmt);
-					opts.separator = &sepbuf;
-				} else if (match_placeholder_arg_value(arg, "key_value_separator", &arg, &argval, &arglen)) {
-					char *fmt;
-
-					strbuf_reset(&kvsepbuf);
-					fmt = xstrndup(argval, arglen);
-					strbuf_expand(&kvsepbuf, fmt, strbuf_expand_literal_cb, NULL);
-					free(fmt);
-					opts.key_value_separator = &kvsepbuf;
-				} else if (!match_placeholder_bool_arg(arg, "only", &arg, &opts.only_trailers) &&
-					   !match_placeholder_bool_arg(arg, "unfold", &arg, &opts.unfold) &&
-					   !match_placeholder_bool_arg(arg, "keyonly", &arg, &opts.key_only) &&
-					   !match_placeholder_bool_arg(arg, "valueonly", &arg, &opts.value_only))
-					break;
-			}
+			if (format_set_trailers_options(&opts, &filter_list, &sepbuf, &kvsepbuf, &arg, NULL))
+				goto trailer_out;
 		}
 		if (*arg == ')') {
 			format_trailers_from_commit(sb, msg + c->subject_off, &opts);
@@ -1648,6 +1735,10 @@
 	case 'S':
 		w->source = 1;
 		break;
+	case 'd':
+	case 'D':
+		w->decorate = 1;
+		break;
 	}
 	return 0;
 }
diff --git a/pretty.h b/pretty.h
index 7ce6c0b..2f16acd 100644
--- a/pretty.h
+++ b/pretty.h
@@ -6,6 +6,7 @@
 
 struct commit;
 struct strbuf;
+struct process_trailer_options;
 
 /* Commit formats */
 enum cmit_fmt {
@@ -23,6 +24,10 @@
 	CMIT_FMT_UNSPECIFIED
 };
 
+struct pretty_print_describe_status {
+	unsigned int max_invocations;
+};
+
 struct pretty_print_context {
 	/*
 	 * Callers should tweak these to change the behavior of pp_* functions.
@@ -44,6 +49,7 @@
 	int color;
 	struct ident_split *from_ident;
 	unsigned encode_email_headers:1;
+	struct pretty_print_describe_status *describe_status;
 
 	/*
 	 * Fields below here are manipulated internally by pp_* functions and
@@ -59,12 +65,16 @@
 	return (fmt == CMIT_FMT_EMAIL || fmt == CMIT_FMT_MBOXRD);
 }
 
+/*
+ * Examine the user-specified format given by "fmt" (or if NULL, the global one
+ * previously saved by get_commit_format()), and set flags based on which items
+ * the format will need when it is expanded.
+ */
 struct userformat_want {
 	unsigned notes:1;
 	unsigned source:1;
+	unsigned decorate:1;
 };
-
-/* Set the flag "w->notes" if there is placeholder %N in "fmt". */
 void userformat_find_requirements(const char *fmt, struct userformat_want *w);
 
 /*
@@ -142,4 +152,15 @@
 /* Make subject of commit message suitable for filename */
 void format_sanitized_subject(struct strbuf *sb, const char *msg, size_t len);
 
+/*
+ * Set values of fields in "struct process_trailer_options"
+ * according to trailers arguments.
+ */
+int format_set_trailers_options(struct process_trailer_options *opts,
+			struct string_list *filter_list,
+			struct strbuf *sepbuf,
+			struct strbuf *kvsepbuf,
+			const char **arg,
+			char **invalid_arg);
+
 #endif /* PRETTY_H */
diff --git a/progress.c b/progress.c
index 31014e6..680c6a8 100644
--- a/progress.c
+++ b/progress.c
@@ -196,7 +196,7 @@
 	now_ns = progress_getnanotime(progress);
 
 	if (!tp) {
-		progress->throughput = tp = xcalloc(1, sizeof(*tp));
+		progress->throughput = CALLOC_ARRAY(tp, 1);
 		tp->prev_total = tp->curr_total = total;
 		tp->prev_ns = now_ns;
 		strbuf_init(&tp->display, 0);
diff --git a/promisor-remote.c b/promisor-remote.c
index 3c572b1..db2ebdc 100644
--- a/promisor-remote.c
+++ b/promisor-remote.c
@@ -5,14 +5,13 @@
 #include "transport.h"
 #include "strvec.h"
 
-static char *repository_format_partial_clone;
+struct promisor_remote_config {
+	struct promisor_remote *promisors;
+	struct promisor_remote **promisors_tail;
+};
 
-void set_repository_format_partial_clone(char *partial_clone)
-{
-	repository_format_partial_clone = xstrdup_or_null(partial_clone);
-}
-
-static int fetch_objects(const char *remote_name,
+static int fetch_objects(struct repository *repo,
+			 const char *remote_name,
 			 const struct object_id *oids,
 			 int oid_nr)
 {
@@ -22,6 +21,8 @@
 
 	child.git_cmd = 1;
 	child.in = -1;
+	if (repo != the_repository)
+		prepare_other_repo_env(&child.env_array, repo->gitdir);
 	strvec_pushl(&child.args, "-c", "fetch.negotiationAlgorithm=noop",
 		     "fetch", remote_name, "--no-tags",
 		     "--no-write-fetch-head", "--recurse-submodules=no",
@@ -30,6 +31,8 @@
 		die(_("promisor-remote: unable to fork off fetch subprocess"));
 	child_in = xfdopen(child.in, "w");
 
+	trace2_data_intmax("promisor", repo, "fetch_count", oid_nr);
+
 	for (i = 0; i < oid_nr; i++) {
 		if (fputs(oid_to_hex(&oids[i]), child_in) < 0)
 			die_errno(_("promisor-remote: could not write to fetch subprocess"));
@@ -42,10 +45,8 @@
 	return finish_command(&child) ? -1 : 0;
 }
 
-static struct promisor_remote *promisors;
-static struct promisor_remote **promisors_tail = &promisors;
-
-static struct promisor_remote *promisor_remote_new(const char *remote_name)
+static struct promisor_remote *promisor_remote_new(struct promisor_remote_config *config,
+						   const char *remote_name)
 {
 	struct promisor_remote *r;
 
@@ -57,18 +58,19 @@
 
 	FLEX_ALLOC_STR(r, name, remote_name);
 
-	*promisors_tail = r;
-	promisors_tail = &r->next;
+	*config->promisors_tail = r;
+	config->promisors_tail = &r->next;
 
 	return r;
 }
 
-static struct promisor_remote *promisor_remote_lookup(const char *remote_name,
+static struct promisor_remote *promisor_remote_lookup(struct promisor_remote_config *config,
+						      const char *remote_name,
 						      struct promisor_remote **previous)
 {
 	struct promisor_remote *r, *p;
 
-	for (p = NULL, r = promisors; r; p = r, r = r->next)
+	for (p = NULL, r = config->promisors; r; p = r, r = r->next)
 		if (!strcmp(r->name, remote_name)) {
 			if (previous)
 				*previous = p;
@@ -78,7 +80,8 @@
 	return NULL;
 }
 
-static void promisor_remote_move_to_tail(struct promisor_remote *r,
+static void promisor_remote_move_to_tail(struct promisor_remote_config *config,
+					 struct promisor_remote *r,
 					 struct promisor_remote *previous)
 {
 	if (r->next == NULL)
@@ -87,14 +90,15 @@
 	if (previous)
 		previous->next = r->next;
 	else
-		promisors = r->next ? r->next : r;
+		config->promisors = r->next ? r->next : r;
 	r->next = NULL;
-	*promisors_tail = r;
-	promisors_tail = &r->next;
+	*config->promisors_tail = r;
+	config->promisors_tail = &r->next;
 }
 
 static int promisor_remote_config(const char *var, const char *value, void *data)
 {
+	struct promisor_remote_config *config = data;
 	const char *name;
 	size_t namelen;
 	const char *subkey;
@@ -110,8 +114,8 @@
 
 		remote_name = xmemdupz(name, namelen);
 
-		if (!promisor_remote_lookup(remote_name, NULL))
-			promisor_remote_new(remote_name);
+		if (!promisor_remote_lookup(config, remote_name, NULL))
+			promisor_remote_new(config, remote_name);
 
 		free(remote_name);
 		return 0;
@@ -120,9 +124,9 @@
 		struct promisor_remote *r;
 		char *remote_name = xmemdupz(name, namelen);
 
-		r = promisor_remote_lookup(remote_name, NULL);
+		r = promisor_remote_lookup(config, remote_name, NULL);
 		if (!r)
-			r = promisor_remote_new(remote_name);
+			r = promisor_remote_new(config, remote_name);
 
 		free(remote_name);
 
@@ -135,59 +139,63 @@
 	return 0;
 }
 
-static int initialized;
-
-static void promisor_remote_init(void)
+static void promisor_remote_init(struct repository *r)
 {
-	if (initialized)
+	struct promisor_remote_config *config;
+
+	if (r->promisor_remote_config)
 		return;
-	initialized = 1;
+	config = r->promisor_remote_config =
+		xcalloc(sizeof(*r->promisor_remote_config), 1);
+	config->promisors_tail = &config->promisors;
 
-	git_config(promisor_remote_config, NULL);
+	repo_config(r, promisor_remote_config, config);
 
-	if (repository_format_partial_clone) {
+	if (r->repository_format_partial_clone) {
 		struct promisor_remote *o, *previous;
 
-		o = promisor_remote_lookup(repository_format_partial_clone,
+		o = promisor_remote_lookup(config,
+					   r->repository_format_partial_clone,
 					   &previous);
 		if (o)
-			promisor_remote_move_to_tail(o, previous);
+			promisor_remote_move_to_tail(config, o, previous);
 		else
-			promisor_remote_new(repository_format_partial_clone);
+			promisor_remote_new(config, r->repository_format_partial_clone);
 	}
 }
 
-static void promisor_remote_clear(void)
+void promisor_remote_clear(struct promisor_remote_config *config)
 {
-	while (promisors) {
-		struct promisor_remote *r = promisors;
-		promisors = promisors->next;
+	while (config->promisors) {
+		struct promisor_remote *r = config->promisors;
+		config->promisors = config->promisors->next;
 		free(r);
 	}
 
-	promisors_tail = &promisors;
+	config->promisors_tail = &config->promisors;
 }
 
-void promisor_remote_reinit(void)
+void repo_promisor_remote_reinit(struct repository *r)
 {
-	initialized = 0;
-	promisor_remote_clear();
-	promisor_remote_init();
+	promisor_remote_clear(r->promisor_remote_config);
+	FREE_AND_NULL(r->promisor_remote_config);
+	promisor_remote_init(r);
 }
 
-struct promisor_remote *promisor_remote_find(const char *remote_name)
+struct promisor_remote *repo_promisor_remote_find(struct repository *r,
+						  const char *remote_name)
 {
-	promisor_remote_init();
+	promisor_remote_init(r);
 
 	if (!remote_name)
-		return promisors;
+		return r->promisor_remote_config->promisors;
 
-	return promisor_remote_lookup(remote_name, NULL);
+	return promisor_remote_lookup(r->promisor_remote_config, remote_name, NULL);
 }
 
-int has_promisor_remote(void)
+int repo_has_promisor_remote(struct repository *r)
 {
-	return !!promisor_remote_find(NULL);
+	return !!repo_promisor_remote_find(r, NULL);
 }
 
 static int remove_fetched_oids(struct repository *repo,
@@ -208,7 +216,7 @@
 
 	if (remaining_nr) {
 		int j = 0;
-		new_oids = xcalloc(remaining_nr, sizeof(*new_oids));
+		CALLOC_ARRAY(new_oids, remaining_nr);
 		for (i = 0; i < oid_nr; i++)
 			if (remaining[i])
 				oidcpy(&new_oids[j++], &old_oids[i]);
@@ -235,10 +243,10 @@
 	if (oid_nr == 0)
 		return 0;
 
-	promisor_remote_init();
+	promisor_remote_init(repo);
 
-	for (r = promisors; r; r = r->next) {
-		if (fetch_objects(r->name, remaining_oids, remaining_nr) < 0) {
+	for (r = repo->promisor_remote_config->promisors; r; r = r->next) {
+		if (fetch_objects(repo, r->name, remaining_oids, remaining_nr) < 0) {
 			if (remaining_nr == 1)
 				continue;
 			remaining_nr = remove_fetched_oids(repo, &remaining_oids,
diff --git a/promisor-remote.h b/promisor-remote.h
index c7a1406..edc45ab 100644
--- a/promisor-remote.h
+++ b/promisor-remote.h
@@ -17,9 +17,25 @@
 	const char name[FLEX_ARRAY];
 };
 
-void promisor_remote_reinit(void);
-struct promisor_remote *promisor_remote_find(const char *remote_name);
-int has_promisor_remote(void);
+void repo_promisor_remote_reinit(struct repository *r);
+static inline void promisor_remote_reinit(void)
+{
+	repo_promisor_remote_reinit(the_repository);
+}
+
+void promisor_remote_clear(struct promisor_remote_config *config);
+
+struct promisor_remote *repo_promisor_remote_find(struct repository *r, const char *remote_name);
+static inline struct promisor_remote *promisor_remote_find(const char *remote_name)
+{
+	return repo_promisor_remote_find(the_repository, remote_name);
+}
+
+int repo_has_promisor_remote(struct repository *r);
+static inline int has_promisor_remote(void)
+{
+	return repo_has_promisor_remote(the_repository);
+}
 
 /*
  * Fetches all requested objects from all promisor remotes, trying them one at
@@ -32,10 +48,4 @@
 			       const struct object_id *oids,
 			       int oid_nr);
 
-/*
- * This should be used only once from setup.c to set the value we got
- * from the extensions.partialclone config option.
- */
-void set_repository_format_partial_clone(char *partial_clone);
-
 #endif /* PROMISOR_REMOTE_H */
diff --git a/protocol-caps.c b/protocol-caps.c
new file mode 100644
index 0000000..13a9e63
--- /dev/null
+++ b/protocol-caps.c
@@ -0,0 +1,113 @@
+#include "git-compat-util.h"
+#include "protocol-caps.h"
+#include "gettext.h"
+#include "pkt-line.h"
+#include "strvec.h"
+#include "hash.h"
+#include "object.h"
+#include "object-store.h"
+#include "string-list.h"
+#include "strbuf.h"
+
+struct requested_info {
+	unsigned size : 1;
+};
+
+/*
+ * Parses oids from the given line and collects them in the given
+ * oid_str_list. Returns 1 if parsing was successful and 0 otherwise.
+ */
+static int parse_oid(const char *line, struct string_list *oid_str_list)
+{
+	const char *arg;
+
+	if (!skip_prefix(line, "oid ", &arg))
+		return 0;
+
+	string_list_append(oid_str_list, arg);
+
+	return 1;
+}
+
+/*
+ * Validates and send requested info back to the client. Any errors detected
+ * are returned as they are detected.
+ */
+static void send_info(struct repository *r, struct packet_writer *writer,
+		      struct string_list *oid_str_list,
+		      struct requested_info *info)
+{
+	struct string_list_item *item;
+	struct strbuf send_buffer = STRBUF_INIT;
+
+	if (!oid_str_list->nr)
+		return;
+
+	if (info->size)
+		packet_writer_write(writer, "size");
+
+	for_each_string_list_item (item, oid_str_list) {
+		const char *oid_str = item->string;
+		struct object_id oid;
+		unsigned long object_size;
+
+		if (get_oid_hex(oid_str, &oid) < 0) {
+			packet_writer_error(
+				writer,
+				"object-info: protocol error, expected to get oid, not '%s'",
+				oid_str);
+			continue;
+		}
+
+		strbuf_addstr(&send_buffer, oid_str);
+
+		if (info->size) {
+			if (oid_object_info(r, &oid, &object_size) < 0) {
+				strbuf_addstr(&send_buffer, " ");
+			} else {
+				strbuf_addf(&send_buffer, " %lu", object_size);
+			}
+		}
+
+		packet_writer_write(writer, "%s",
+				    strbuf_detach(&send_buffer, NULL));
+	}
+}
+
+int cap_object_info(struct repository *r, struct strvec *keys,
+		    struct packet_reader *request)
+{
+	struct requested_info info;
+	struct packet_writer writer;
+	struct string_list oid_str_list = STRING_LIST_INIT_DUP;
+
+	packet_writer_init(&writer, 1);
+
+	while (packet_reader_read(request) == PACKET_READ_NORMAL) {
+		if (!strcmp("size", request->line)) {
+			info.size = 1;
+			continue;
+		}
+
+		if (parse_oid(request->line, &oid_str_list))
+			continue;
+
+		packet_writer_error(&writer,
+				    "object-info: unexpected line: '%s'",
+				    request->line);
+	}
+
+	if (request->status != PACKET_READ_FLUSH) {
+		packet_writer_error(
+			&writer, "object-info: expected flush after arguments");
+		die(_("object-info: expected flush after arguments"));
+	}
+
+	send_info(r, &writer, &oid_str_list, &info);
+
+	string_list_clear(&oid_str_list, 1);
+
+	packet_flush(1);
+
+	return 0;
+}
diff --git a/protocol-caps.h b/protocol-caps.h
new file mode 100644
index 0000000..0a9f49d
--- /dev/null
+++ b/protocol-caps.h
@@ -0,0 +1,10 @@
+#ifndef PROTOCOL_CAPS_H
+#define PROTOCOL_CAPS_H
+
+struct repository;
+struct strvec;
+struct packet_reader;
+int cap_object_info(struct repository *r, struct strvec *keys,
+		    struct packet_reader *request);
+
+#endif /* PROTOCOL_CAPS_H */
diff --git a/quote.h b/quote.h
index 768cc63..049d8dd 100644
--- a/quote.h
+++ b/quote.h
@@ -31,6 +31,7 @@
 
 void sq_quote_buf(struct strbuf *, const char *src);
 void sq_quote_argv(struct strbuf *, const char **argv);
+__attribute__((format (printf, 2, 3)))
 void sq_quotef(struct strbuf *, const char *fmt, ...);
 
 /*
diff --git a/range-diff.c b/range-diff.c
index a3cc7c9..e947979 100644
--- a/range-diff.c
+++ b/range-diff.c
@@ -96,7 +96,7 @@
 				string_list_append(list, buf.buf)->util = util;
 				strbuf_reset(&buf);
 			}
-			util = xcalloc(sizeof(*util), 1);
+			CALLOC_ARRAY(util, 1);
 			if (get_oid(p, &util->oid)) {
 				error(_("could not parse commit '%s'"), p);
 				free(util);
@@ -274,9 +274,10 @@
 	hashmap_clear(&map);
 }
 
-static void diffsize_consume(void *data, char *line, unsigned long len)
+static int diffsize_consume(void *data, char *line, unsigned long len)
 {
 	(*(int *)data)++;
+	return 0;
 }
 
 static void diffsize_hunk(void *data, long ob, long on, long nb, long nn,
@@ -445,7 +446,7 @@
 {
 	struct diff_filespec *spec = alloc_filespec(name);
 
-	fill_filespec(spec, &null_oid, 0, 0100644);
+	fill_filespec(spec, null_oid(), 0, 0100644);
 	spec->data = (char *)p;
 	spec->size = strlen(p);
 	spec->should_munmap = 0;
diff --git a/reachable.c b/reachable.c
index 77a60c7..84e3d0d 100644
--- a/reachable.c
+++ b/reachable.c
@@ -159,24 +159,6 @@
 				      FOR_EACH_OBJECT_LOCAL_ONLY);
 }
 
-static void *lookup_object_by_type(struct repository *r,
-				   const struct object_id *oid,
-				   enum object_type type)
-{
-	switch (type) {
-	case OBJ_COMMIT:
-		return lookup_commit(r, oid);
-	case OBJ_TREE:
-		return lookup_tree(r, oid);
-	case OBJ_TAG:
-		return lookup_tag(r, oid);
-	case OBJ_BLOB:
-		return lookup_blob(r, oid);
-	default:
-		die("BUG: unknown object type %d", type);
-	}
-}
-
 static int mark_object_seen(const struct object_id *oid,
 			     enum object_type type,
 			     int exclude,
@@ -223,21 +205,16 @@
 	cp.progress = progress;
 	cp.count = 0;
 
-	bitmap_git = prepare_bitmap_walk(revs, NULL);
+	bitmap_git = prepare_bitmap_walk(revs, NULL, 0);
 	if (bitmap_git) {
 		traverse_bitmap_commit_list(bitmap_git, revs, mark_object_seen);
 		free_bitmap_index(bitmap_git);
-		return;
+	} else {
+		if (prepare_revision_walk(revs))
+			die("revision walk setup failed");
+		traverse_commit_list(revs, mark_commit, mark_object, &cp);
 	}
 
-	/*
-	 * Set up the revision walk - this will move all commits
-	 * from the pending list to the commit walking list.
-	 */
-	if (prepare_revision_walk(revs))
-		die("revision walk setup failed");
-	traverse_commit_list(revs, mark_commit, mark_object, &cp);
-
 	if (mark_recent) {
 		revs->ignore_missing_links = 1;
 		if (add_unseen_recent_objects_to_traversal(revs, mark_recent))
diff --git a/read-cache.c b/read-cache.c
index 29144cf..46ccd66 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -25,6 +25,8 @@
 #include "fsmonitor.h"
 #include "thread-utils.h"
 #include "progress.h"
+#include "sparse-index.h"
+#include "csum-file.h"
 
 /* Mask for the name length in ce_flags in the on-disk index */
 
@@ -47,6 +49,7 @@
 #define CACHE_EXT_FSMONITOR 0x46534D4E	  /* "FSMN" */
 #define CACHE_EXT_ENDOFINDEXENTRIES 0x454F4945	/* "EOIE" */
 #define CACHE_EXT_INDEXENTRYOFFSETTABLE 0x49454F54 /* "IEOT" */
+#define CACHE_EXT_SPARSE_DIRECTORIES 0x73646972 /* "sdir" */
 
 /* changes that can be kept in $GIT_DIR/index (basically all extensions) */
 #define EXTMASK (RESOLVE_UNDO_CHANGED | CACHE_TREE_CHANGED | \
@@ -101,6 +104,9 @@
 
 static void set_index_entry(struct index_state *istate, int nr, struct cache_entry *ce)
 {
+	if (S_ISSPARSEDIR(ce->ce_mode))
+		istate->sparse_index = 1;
+
 	istate->cache[nr] = ce;
 	add_name_hash(istate, ce);
 }
@@ -544,7 +550,7 @@
 	return 0;
 }
 
-static int index_name_stage_pos(const struct index_state *istate, const char *name, int namelen, int stage)
+static int index_name_stage_pos(struct index_state *istate, const char *name, int namelen, int stage)
 {
 	int first, last;
 
@@ -562,10 +568,31 @@
 		}
 		first = next+1;
 	}
+
+	if (istate->sparse_index &&
+	    first > 0) {
+		/* Note: first <= istate->cache_nr */
+		struct cache_entry *ce = istate->cache[first - 1];
+
+		/*
+		 * If we are in a sparse-index _and_ the entry before the
+		 * insertion position is a sparse-directory entry that is
+		 * an ancestor of 'name', then we need to expand the index
+		 * and search again. This will only trigger once, because
+		 * thereafter the index is fully expanded.
+		 */
+		if (S_ISSPARSEDIR(ce->ce_mode) &&
+		    ce_namelen(ce) < namelen &&
+		    !strncmp(name, ce->name, ce_namelen(ce))) {
+			ensure_full_index(istate);
+			return index_name_stage_pos(istate, name, namelen, stage);
+		}
+	}
+
 	return -first-1;
 }
 
-int index_name_pos(const struct index_state *istate, const char *name, int namelen)
+int index_name_pos(struct index_state *istate, const char *name, int namelen)
 {
 	return index_name_stage_pos(istate, name, namelen, 0);
 }
@@ -813,8 +840,11 @@
 	return mem_pool__ce_calloc(find_mem_pool(istate), len);
 }
 
-struct cache_entry *make_empty_transient_cache_entry(size_t len)
+struct cache_entry *make_empty_transient_cache_entry(size_t len,
+						     struct mem_pool *ce_mem_pool)
 {
+	if (ce_mem_pool)
+		return mem_pool__ce_calloc(ce_mem_pool, len);
 	return xcalloc(1, cache_entry_size(len));
 }
 
@@ -848,8 +878,11 @@
 	return ret;
 }
 
-struct cache_entry *make_transient_cache_entry(unsigned int mode, const struct object_id *oid,
-					       const char *path, int stage)
+struct cache_entry *make_transient_cache_entry(unsigned int mode,
+					       const struct object_id *oid,
+					       const char *path,
+					       int stage,
+					       struct mem_pool *ce_mem_pool)
 {
 	struct cache_entry *ce;
 	int len;
@@ -860,7 +893,7 @@
 	}
 
 	len = strlen(path);
-	ce = make_empty_transient_cache_entry(len);
+	ce = make_empty_transient_cache_entry(len, ce_mem_pool);
 
 	oidcpy(&ce->oid, oid);
 	memcpy(ce->name, path, len);
@@ -985,7 +1018,7 @@
 				}
 			}
 			if (protect_ntfs) {
-#ifdef GIT_WINDOWS_NATIVE
+#if defined GIT_WINDOWS_NATIVE || defined __CYGWIN__
 				if (c == '\\')
 					return 0;
 #endif
@@ -999,8 +1032,14 @@
 
 			c = *path++;
 			if ((c == '.' && !verify_dotfile(path, mode)) ||
-			    is_dir_sep(c) || c == '\0')
+			    is_dir_sep(c))
 				return 0;
+			/*
+			 * allow terminating directory separators for
+			 * sparse directory entries.
+			 */
+			if (c == '\0')
+				return S_ISDIR(mode);
 		} else if (c == '\\' && protect_ntfs) {
 			if (is_ntfs_dotgit(path))
 				return 0;
@@ -1364,7 +1403,9 @@
 static struct cache_entry *refresh_cache_ent(struct index_state *istate,
 					     struct cache_entry *ce,
 					     unsigned int options, int *err,
-					     int *changed_ret)
+					     int *changed_ret,
+					     int *t2_did_lstat,
+					     int *t2_did_scan)
 {
 	struct stat st;
 	struct cache_entry *updated;
@@ -1406,6 +1447,8 @@
 		return NULL;
 	}
 
+	if (t2_did_lstat)
+		*t2_did_lstat = 1;
 	if (lstat(ce->name, &st) < 0) {
 		if (ignore_missing && errno == ENOENT)
 			return ce;
@@ -1442,6 +1485,8 @@
 		}
 	}
 
+	if (t2_did_scan)
+		*t2_did_scan = 1;
 	if (ie_modified(istate, ce, &st, options)) {
 		if (err)
 			*err = EINVAL;
@@ -1508,6 +1553,7 @@
 	int quiet = (flags & REFRESH_QUIET) != 0;
 	int not_new = (flags & REFRESH_IGNORE_MISSING) != 0;
 	int ignore_submodules = (flags & REFRESH_IGNORE_SUBMODULES) != 0;
+	int ignore_skip_worktree = (flags & REFRESH_IGNORE_SKIP_WORKTREE) != 0;
 	int first = 1;
 	int in_porcelain = (flags & REFRESH_IN_PORCELAIN);
 	unsigned int options = (CE_MATCH_REFRESH |
@@ -1519,6 +1565,8 @@
 	const char *added_fmt;
 	const char *unmerged_fmt;
 	struct progress *progress = NULL;
+	int t2_sum_lstat = 0;
+	int t2_sum_scan = 0;
 
 	if (flags & REFRESH_PROGRESS && isatty(2))
 		progress = start_delayed_progress(_("Refresh index"),
@@ -1536,15 +1584,28 @@
 	 * we only have to do the special cases that are left.
 	 */
 	preload_index(istate, pathspec, 0);
+	trace2_region_enter("index", "refresh", NULL);
+
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct cache_entry *ce, *new_entry;
 		int cache_errno = 0;
 		int changed = 0;
 		int filtered = 0;
+		int t2_did_lstat = 0;
+		int t2_did_scan = 0;
 
 		ce = istate->cache[i];
 		if (ignore_submodules && S_ISGITLINK(ce->ce_mode))
 			continue;
+		if (ignore_skip_worktree && ce_skip_worktree(ce))
+			continue;
+
+		/*
+		 * If this entry is a sparse directory, then there isn't
+		 * any stat() information to update. Ignore the entry.
+		 */
+		if (S_ISSPARSEDIR(ce->ce_mode))
+			continue;
 
 		if (pathspec && !ce_path_match(istate, ce, pathspec, seen))
 			filtered = 1;
@@ -1566,11 +1627,14 @@
 		if (filtered)
 			continue;
 
-		new_entry = refresh_cache_ent(istate, ce, options, &cache_errno, &changed);
+		new_entry = refresh_cache_ent(istate, ce, options,
+					      &cache_errno, &changed,
+					      &t2_did_lstat, &t2_did_scan);
+		t2_sum_lstat += t2_did_lstat;
+		t2_sum_scan += t2_did_scan;
 		if (new_entry == ce)
 			continue;
-		if (progress)
-			display_progress(progress, i);
+		display_progress(progress, i);
 		if (!new_entry) {
 			const char *fmt;
 
@@ -1602,10 +1666,11 @@
 
 		replace_index_entry(istate, i, new_entry);
 	}
-	if (progress) {
-		display_progress(progress, istate->cache_nr);
-		stop_progress(&progress);
-	}
+	trace2_data_intmax("index", NULL, "refresh/sum_lstat", t2_sum_lstat);
+	trace2_data_intmax("index", NULL, "refresh/sum_scan", t2_sum_scan);
+	trace2_region_leave("index", "refresh", NULL);
+	display_progress(progress, istate->cache_nr);
+	stop_progress(&progress);
 	trace_performance_leave("refresh index");
 	return has_errors;
 }
@@ -1614,7 +1679,7 @@
 					struct cache_entry *ce,
 					unsigned int options)
 {
-	return refresh_cache_ent(istate, ce, options, NULL, NULL);
+	return refresh_cache_ent(istate, ce, options, NULL, NULL, NULL, NULL);
 }
 
 
@@ -1742,6 +1807,10 @@
 	case CACHE_EXT_INDEXENTRYOFFSETTABLE:
 		/* already handled in do_read_index() */
 		break;
+	case CACHE_EXT_SPARSE_DIRECTORIES:
+		/* no content, only an indicator */
+		istate->sparse_index = 1;
+		break;
 	default:
 		if (*ext < 'A' || 'Z' < *ext)
 			return error(_("index uses %.4s extension, which we do not understand"),
@@ -1827,7 +1896,7 @@
 	ce->ce_flags = flags & ~CE_NAMEMASK;
 	ce->ce_namelen = len;
 	ce->index = 0;
-	hashcpy(ce->oid.hash, ondisk->data);
+	oidread(&ce->oid, ondisk->data);
 	memcpy(ce->name, name, len);
 	ce->name[len] = '\0';
 
@@ -2079,7 +2148,7 @@
 	/* ensure we have no more threads than we have blocks to process */
 	if (nr_threads > ieot->nr)
 		nr_threads = ieot->nr;
-	data = xcalloc(nr_threads, sizeof(*data));
+	CALLOC_ARRAY(data, nr_threads);
 
 	offset = ieot_start = 0;
 	ieot_blocks = DIV_ROUND_UP(ieot->nr, nr_threads);
@@ -2170,18 +2239,19 @@
 
 	mmap = xmmap_gently(NULL, mmap_size, PROT_READ, MAP_PRIVATE, fd, 0);
 	if (mmap == MAP_FAILED)
-		die_errno(_("%s: unable to map index file"), path);
+		die_errno(_("%s: unable to map index file%s"), path,
+			mmap_os_err());
 	close(fd);
 
 	hdr = (const struct cache_header *)mmap;
 	if (verify_hdr(hdr, mmap_size) < 0)
 		goto unmap;
 
-	hashcpy(istate->oid.hash, (const unsigned char *)hdr + mmap_size - the_hash_algo->rawsz);
+	oidread(&istate->oid, (const unsigned char *)hdr + mmap_size - the_hash_algo->rawsz);
 	istate->version = ntohl(hdr->hdr_version);
 	istate->cache_nr = ntohl(hdr->hdr_entries);
 	istate->cache_alloc = alloc_nr(istate->cache_nr);
-	istate->cache = xcalloc(istate->cache_alloc, sizeof(*istate->cache));
+	CALLOC_ARRAY(istate->cache, istate->cache_alloc);
 	istate->initialized = 1;
 
 	p.istate = istate;
@@ -2255,6 +2325,12 @@
 	trace2_data_intmax("index", the_repository, "read/cache_nr",
 			   istate->cache_nr);
 
+	if (!istate->repo)
+		istate->repo = the_repository;
+	prepare_repo_settings(istate->repo);
+	if (istate->repo->settings.command_requires_full_index)
+		ensure_full_index(istate);
+
 	return istate->cache_nr;
 
 unmap:
@@ -2308,7 +2384,7 @@
 	if (split_index->base)
 		discard_index(split_index->base);
 	else
-		split_index->base = xcalloc(1, sizeof(*split_index->base));
+		CALLOC_ARRAY(split_index->base, 1);
 
 	base_oid_hex = oid_to_hex(&split_index->base_oid);
 	base_path = xstrfmt("%s/sharedindex.%s", gitdir, base_oid_hex);
@@ -2355,6 +2431,7 @@
 	cache_tree_free(&(istate->cache_tree));
 	istate->initialized = 0;
 	istate->fsmonitor_has_run_once = 0;
+	FREE_AND_NULL(istate->fsmonitor_last_update);
 	FREE_AND_NULL(istate->cache);
 	istate->cache_alloc = 0;
 	discard_split_index(istate);
@@ -2438,6 +2515,8 @@
 		diff_flush(&opt);
 		return opt.flags.has_changes != 0;
 	} else {
+		/* TODO: audit for interaction with sparse-index. */
+		ensure_full_index(istate);
 		for (i = 0; sb && i < istate->cache_nr; i++) {
 			if (i)
 				strbuf_addch(sb, ' ');
@@ -2447,80 +2526,23 @@
 	}
 }
 
-#define WRITE_BUFFER_SIZE 8192
-static unsigned char write_buffer[WRITE_BUFFER_SIZE];
-static unsigned long write_buffer_len;
-
-static int ce_write_flush(git_hash_ctx *context, int fd)
+static int write_index_ext_header(struct hashfile *f,
+				  git_hash_ctx *eoie_f,
+				  unsigned int ext,
+				  unsigned int sz)
 {
-	unsigned int buffered = write_buffer_len;
-	if (buffered) {
-		the_hash_algo->update_fn(context, write_buffer, buffered);
-		if (write_in_full(fd, write_buffer, buffered) < 0)
-			return -1;
-		write_buffer_len = 0;
+	hashwrite_be32(f, ext);
+	hashwrite_be32(f, sz);
+
+	if (eoie_f) {
+		ext = htonl(ext);
+		sz = htonl(sz);
+		the_hash_algo->update_fn(eoie_f, &ext, sizeof(ext));
+		the_hash_algo->update_fn(eoie_f, &sz, sizeof(sz));
 	}
 	return 0;
 }
 
-static int ce_write(git_hash_ctx *context, int fd, void *data, unsigned int len)
-{
-	while (len) {
-		unsigned int buffered = write_buffer_len;
-		unsigned int partial = WRITE_BUFFER_SIZE - buffered;
-		if (partial > len)
-			partial = len;
-		memcpy(write_buffer + buffered, data, partial);
-		buffered += partial;
-		if (buffered == WRITE_BUFFER_SIZE) {
-			write_buffer_len = buffered;
-			if (ce_write_flush(context, fd))
-				return -1;
-			buffered = 0;
-		}
-		write_buffer_len = buffered;
-		len -= partial;
-		data = (char *) data + partial;
-	}
-	return 0;
-}
-
-static int write_index_ext_header(git_hash_ctx *context, git_hash_ctx *eoie_context,
-				  int fd, unsigned int ext, unsigned int sz)
-{
-	ext = htonl(ext);
-	sz = htonl(sz);
-	if (eoie_context) {
-		the_hash_algo->update_fn(eoie_context, &ext, 4);
-		the_hash_algo->update_fn(eoie_context, &sz, 4);
-	}
-	return ((ce_write(context, fd, &ext, 4) < 0) ||
-		(ce_write(context, fd, &sz, 4) < 0)) ? -1 : 0;
-}
-
-static int ce_flush(git_hash_ctx *context, int fd, unsigned char *hash)
-{
-	unsigned int left = write_buffer_len;
-
-	if (left) {
-		write_buffer_len = 0;
-		the_hash_algo->update_fn(context, write_buffer, left);
-	}
-
-	/* Flush first if not enough space for hash signature */
-	if (left + the_hash_algo->rawsz > WRITE_BUFFER_SIZE) {
-		if (write_in_full(fd, write_buffer, left) < 0)
-			return -1;
-		left = 0;
-	}
-
-	/* Append the hash signature at the end */
-	the_hash_algo->final_fn(write_buffer + left, context);
-	hashcpy(hash, write_buffer + left);
-	left += the_hash_algo->rawsz;
-	return (write_in_full(fd, write_buffer, left) < 0) ? -1 : 0;
-}
-
 static void ce_smudge_racily_clean_entry(struct index_state *istate,
 					 struct cache_entry *ce)
 {
@@ -2599,11 +2621,10 @@
 	}
 }
 
-static int ce_write_entry(git_hash_ctx *c, int fd, struct cache_entry *ce,
+static int ce_write_entry(struct hashfile *f, struct cache_entry *ce,
 			  struct strbuf *previous_name, struct ondisk_cache_entry *ondisk)
 {
 	int size;
-	int result;
 	unsigned int saved_namelen;
 	int stripped_name = 0;
 	static unsigned char padding[8] = { 0x00 };
@@ -2619,11 +2640,9 @@
 	if (!previous_name) {
 		int len = ce_namelen(ce);
 		copy_cache_entry_to_ondisk(ondisk, ce);
-		result = ce_write(c, fd, ondisk, size);
-		if (!result)
-			result = ce_write(c, fd, ce->name, len);
-		if (!result)
-			result = ce_write(c, fd, padding, align_padding_size(size, len));
+		hashwrite(f, ondisk, size);
+		hashwrite(f, ce->name, len);
+		hashwrite(f, padding, align_padding_size(size, len));
 	} else {
 		int common, to_remove, prefix_size;
 		unsigned char to_remove_vi[16];
@@ -2637,13 +2656,10 @@
 		prefix_size = encode_varint(to_remove, to_remove_vi);
 
 		copy_cache_entry_to_ondisk(ondisk, ce);
-		result = ce_write(c, fd, ondisk, size);
-		if (!result)
-			result = ce_write(c, fd, to_remove_vi, prefix_size);
-		if (!result)
-			result = ce_write(c, fd, ce->name + common, ce_namelen(ce) - common);
-		if (!result)
-			result = ce_write(c, fd, padding, 1);
+		hashwrite(f, ondisk, size);
+		hashwrite(f, to_remove_vi, prefix_size);
+		hashwrite(f, ce->name + common, ce_namelen(ce) - common);
+		hashwrite(f, padding, 1);
 
 		strbuf_splice(previous_name, common, to_remove,
 			      ce->name + common, ce_namelen(ce) - common);
@@ -2653,7 +2669,7 @@
 		ce->ce_flags &= ~CE_STRIP_NAME;
 	}
 
-	return result;
+	return 0;
 }
 
 /*
@@ -2765,8 +2781,8 @@
 			  int strip_extensions)
 {
 	uint64_t start = getnanotime();
-	int newfd = tempfile->fd;
-	git_hash_ctx c, eoie_c;
+	struct hashfile *f;
+	git_hash_ctx *eoie_c = NULL;
 	struct cache_header hdr;
 	int i, err = 0, removed, extended, hdr_version;
 	struct cache_entry **cache = istate->cache;
@@ -2780,6 +2796,8 @@
 	struct index_entry_offset_table *ieot = NULL;
 	int nr, nr_threads;
 
+	f = hashfd(tempfile->fd, tempfile->filename.buf);
+
 	for (i = removed = extended = 0; i < entries; i++) {
 		if (cache[i]->ce_flags & CE_REMOVE)
 			removed++;
@@ -2808,9 +2826,7 @@
 	hdr.hdr_version = htonl(hdr_version);
 	hdr.hdr_entries = htonl(entries - removed);
 
-	the_hash_algo->init_fn(&c);
-	if (ce_write(&c, newfd, &hdr, sizeof(hdr)) < 0)
-		return -1;
+	hashwrite(f, &hdr, sizeof(hdr));
 
 	if (!HAVE_THREADS || git_config_get_index_threads(&nr_threads))
 		nr_threads = 1;
@@ -2845,12 +2861,8 @@
 		}
 	}
 
-	offset = lseek(newfd, 0, SEEK_CUR);
-	if (offset < 0) {
-		free(ieot);
-		return -1;
-	}
-	offset += write_buffer_len;
+	offset = hashfile_total(f);
+
 	nr = 0;
 	previous_name = (hdr_version == 4) ? &previous_name_buf : NULL;
 
@@ -2885,14 +2897,10 @@
 			if (previous_name)
 				previous_name->buf[0] = 0;
 			nr = 0;
-			offset = lseek(newfd, 0, SEEK_CUR);
-			if (offset < 0) {
-				free(ieot);
-				return -1;
-			}
-			offset += write_buffer_len;
+
+			offset = hashfile_total(f);
 		}
-		if (ce_write_entry(&c, newfd, ce, previous_name, (struct ondisk_cache_entry *)&ondisk) < 0)
+		if (ce_write_entry(f, ce, previous_name, (struct ondisk_cache_entry *)&ondisk) < 0)
 			err = -1;
 
 		if (err)
@@ -2911,14 +2919,16 @@
 		return err;
 	}
 
-	/* Write extension data here */
-	offset = lseek(newfd, 0, SEEK_CUR);
-	if (offset < 0) {
-		free(ieot);
-		return -1;
+	offset = hashfile_total(f);
+
+	/*
+	 * The extension headers must be hashed on their own for the
+	 * EOIE extension. Create a hashfile here to compute that hash.
+	 */
+	if (offset && record_eoie()) {
+		CALLOC_ARRAY(eoie_c, 1);
+		the_hash_algo->init_fn(eoie_c);
 	}
-	offset += write_buffer_len;
-	the_hash_algo->init_fn(&eoie_c);
 
 	/*
 	 * Lets write out CACHE_EXT_INDEXENTRYOFFSETTABLE first so that we
@@ -2931,8 +2941,8 @@
 		struct strbuf sb = STRBUF_INIT;
 
 		write_ieot_extension(&sb, ieot);
-		err = write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_INDEXENTRYOFFSETTABLE, sb.len) < 0
-			|| ce_write(&c, newfd, sb.buf, sb.len) < 0;
+		err = write_index_ext_header(f, eoie_c, CACHE_EXT_INDEXENTRYOFFSETTABLE, sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		free(ieot);
 		if (err)
@@ -2944,9 +2954,9 @@
 		struct strbuf sb = STRBUF_INIT;
 
 		err = write_link_extension(&sb, istate) < 0 ||
-			write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_LINK,
-					       sb.len) < 0 ||
-			ce_write(&c, newfd, sb.buf, sb.len) < 0;
+			write_index_ext_header(f, eoie_c, CACHE_EXT_LINK,
+					       sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		if (err)
 			return -1;
@@ -2955,8 +2965,8 @@
 		struct strbuf sb = STRBUF_INIT;
 
 		cache_tree_write(&sb, istate->cache_tree);
-		err = write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_TREE, sb.len) < 0
-			|| ce_write(&c, newfd, sb.buf, sb.len) < 0;
+		err = write_index_ext_header(f, eoie_c, CACHE_EXT_TREE, sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		if (err)
 			return -1;
@@ -2965,9 +2975,9 @@
 		struct strbuf sb = STRBUF_INIT;
 
 		resolve_undo_write(&sb, istate->resolve_undo);
-		err = write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_RESOLVE_UNDO,
-					     sb.len) < 0
-			|| ce_write(&c, newfd, sb.buf, sb.len) < 0;
+		err = write_index_ext_header(f, eoie_c, CACHE_EXT_RESOLVE_UNDO,
+					     sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		if (err)
 			return -1;
@@ -2976,9 +2986,9 @@
 		struct strbuf sb = STRBUF_INIT;
 
 		write_untracked_extension(&sb, istate->untracked);
-		err = write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_UNTRACKED,
-					     sb.len) < 0 ||
-			ce_write(&c, newfd, sb.buf, sb.len) < 0;
+		err = write_index_ext_header(f, eoie_c, CACHE_EXT_UNTRACKED,
+					     sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		if (err)
 			return -1;
@@ -2987,12 +2997,16 @@
 		struct strbuf sb = STRBUF_INIT;
 
 		write_fsmonitor_extension(&sb, istate);
-		err = write_index_ext_header(&c, &eoie_c, newfd, CACHE_EXT_FSMONITOR, sb.len) < 0
-			|| ce_write(&c, newfd, sb.buf, sb.len) < 0;
+		err = write_index_ext_header(f, eoie_c, CACHE_EXT_FSMONITOR, sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		if (err)
 			return -1;
 	}
+	if (istate->sparse_index) {
+		if (write_index_ext_header(f, eoie_c, CACHE_EXT_SPARSE_DIRECTORIES, 0) < 0)
+			return -1;
+	}
 
 	/*
 	 * CACHE_EXT_ENDOFINDEXENTRIES must be written as the last entry before the SHA1
@@ -3000,19 +3014,18 @@
 	 * read.  Write it out regardless of the strip_extensions parameter as we need it
 	 * when loading the shared index.
 	 */
-	if (offset && record_eoie()) {
+	if (eoie_c) {
 		struct strbuf sb = STRBUF_INIT;
 
-		write_eoie_extension(&sb, &eoie_c, offset);
-		err = write_index_ext_header(&c, NULL, newfd, CACHE_EXT_ENDOFINDEXENTRIES, sb.len) < 0
-			|| ce_write(&c, newfd, sb.buf, sb.len) < 0;
+		write_eoie_extension(&sb, eoie_c, offset);
+		err = write_index_ext_header(f, NULL, CACHE_EXT_ENDOFINDEXENTRIES, sb.len) < 0;
+		hashwrite(f, sb.buf, sb.len);
 		strbuf_release(&sb);
 		if (err)
 			return -1;
 	}
 
-	if (ce_flush(&c, newfd, istate->oid.hash))
-		return -1;
+	finalize_hashfile(f, istate->oid.hash, CSUM_HASH_IN_STREAM);
 	if (close_tempfile_gently(tempfile)) {
 		error(_("could not close '%s'"), get_tempfile_path(tempfile));
 		return -1;
@@ -3052,6 +3065,14 @@
 				 unsigned flags)
 {
 	int ret;
+	int was_full = !istate->sparse_index;
+
+	ret = convert_to_sparse(istate);
+
+	if (ret) {
+		warning(_("failed to convert to a sparse-index"));
+		return ret;
+	}
 
 	/*
 	 * TODO trace2: replace "the_repository" with the actual repo instance
@@ -3063,6 +3084,9 @@
 	trace2_region_leave_printf("index", "do_write_index", the_repository,
 				   "%s", get_lock_file_path(lock));
 
+	if (was_full)
+		ensure_full_index(istate);
+
 	if (ret)
 		return ret;
 	if (flags & COMMIT_LOCK)
@@ -3153,9 +3177,10 @@
 			      struct tempfile **temp)
 {
 	struct split_index *si = istate->split_index;
-	int ret;
+	int ret, was_full = !istate->sparse_index;
 
 	move_cache_to_base_index(istate);
+	convert_to_sparse(istate);
 
 	trace2_region_enter_printf("index", "shared/do_write_index",
 				   the_repository, "%s", get_tempfile_path(*temp));
@@ -3163,6 +3188,9 @@
 	trace2_region_leave_printf("index", "shared/do_write_index",
 				   the_repository, "%s", get_tempfile_path(*temp));
 
+	if (was_full)
+		ensure_full_index(istate);
+
 	if (ret)
 		return ret;
 	ret = adjust_shared_perm(get_tempfile_path(*temp));
@@ -3331,8 +3359,8 @@
  * We helpfully remove a trailing "/" from directories so that
  * the output of read_directory can be used as-is.
  */
-int index_name_is_other(const struct index_state *istate, const char *name,
-		int namelen)
+int index_name_is_other(struct index_state *istate, const char *name,
+			int namelen)
 {
 	int pos;
 	if (namelen && name[namelen - 1] == '/')
@@ -3350,7 +3378,7 @@
 	return 1;
 }
 
-void *read_blob_data_from_index(const struct index_state *istate,
+void *read_blob_data_from_index(struct index_state *istate,
 				const char *path, unsigned long *size)
 {
 	int pos, len;
@@ -3409,7 +3437,7 @@
 		stat_validity_clear(sv);
 	else {
 		if (!sv->sd)
-			sv->sd = xcalloc(1, sizeof(struct stat_data));
+			CALLOC_ARRAY(sv->sd, 1);
 		fill_stat_data(sv->sd, &st);
 	}
 }
diff --git a/rebase-interactive.c b/rebase-interactive.c
index 762853b..b6cbd16 100644
--- a/rebase-interactive.c
+++ b/rebase-interactive.c
@@ -44,7 +44,10 @@
 "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"
+"f, fixup [-C | -c] <commit> = like \"squash\" but keep only the previous\n"
+"                   commit's log message, unless -C is used, in which case\n"
+"                   keep only this commit's message; -c is same as -C but\n"
+"                   opens the editor\n"
 "x, exec <command> = run command (the rest of the line) using shell\n"
 "b, break = stop here (continue rebase later with 'git rebase --continue')\n"
 "d, drop <commit> = remove commit\n"
@@ -53,7 +56,7 @@
 "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"
+".       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");
 	unsigned edit_todo = !(shortrevisions && shortonto);
diff --git a/ref-filter.c b/ref-filter.c
index bade652..f45d3a1 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -67,6 +67,12 @@
 	int lstrip, rstrip;
 };
 
+static struct ref_trailer_buf {
+	struct string_list filter_list;
+	struct strbuf sepbuf;
+	struct strbuf kvsepbuf;
+} ref_trailer_buf = {STRING_LIST_INIT_NODUP, STRBUF_INIT, STRBUF_INIT};
+
 static struct expand_data {
 	struct object_id oid;
 	enum object_type type;
@@ -103,6 +109,56 @@
 } ref_to_worktree_map;
 
 /*
+ * The enum atom_type is used as the index of valid_atom array.
+ * In the atom parsing stage, it will be passed to used_atom.atom_type
+ * as the identifier of the atom type. We can check the type of used_atom
+ * entry by `if (used_atom[i].atom_type == ATOM_*)`.
+ */
+enum atom_type {
+	ATOM_REFNAME,
+	ATOM_OBJECTTYPE,
+	ATOM_OBJECTSIZE,
+	ATOM_OBJECTNAME,
+	ATOM_DELTABASE,
+	ATOM_TREE,
+	ATOM_PARENT,
+	ATOM_NUMPARENT,
+	ATOM_OBJECT,
+	ATOM_TYPE,
+	ATOM_TAG,
+	ATOM_AUTHOR,
+	ATOM_AUTHORNAME,
+	ATOM_AUTHOREMAIL,
+	ATOM_AUTHORDATE,
+	ATOM_COMMITTER,
+	ATOM_COMMITTERNAME,
+	ATOM_COMMITTEREMAIL,
+	ATOM_COMMITTERDATE,
+	ATOM_TAGGER,
+	ATOM_TAGGERNAME,
+	ATOM_TAGGEREMAIL,
+	ATOM_TAGGERDATE,
+	ATOM_CREATOR,
+	ATOM_CREATORDATE,
+	ATOM_SUBJECT,
+	ATOM_BODY,
+	ATOM_TRAILERS,
+	ATOM_CONTENTS,
+	ATOM_UPSTREAM,
+	ATOM_PUSH,
+	ATOM_SYMREF,
+	ATOM_FLAG,
+	ATOM_HEAD,
+	ATOM_COLOR,
+	ATOM_WORKTREEPATH,
+	ATOM_ALIGN,
+	ATOM_END,
+	ATOM_IF,
+	ATOM_THEN,
+	ATOM_ELSE,
+};
+
+/*
  * An atom is a valid field atom listed below, possibly prefixed with
  * a "*" to denote deref_tag().
  *
@@ -113,6 +169,7 @@
  * array.
  */
 static struct used_atom {
+	enum atom_type atom_type;
 	const char *name;
 	cmp_type type;
 	info_source source;
@@ -140,6 +197,9 @@
 			enum { O_FULL, O_LENGTH, O_SHORT } option;
 			unsigned int length;
 		} oid;
+		struct {
+			enum { O_SIZE, O_SIZE_DISK } option;
+		} objectsize;
 		struct email_option {
 			enum { EO_RAW, EO_TRIM, EO_LOCALPART } option;
 		} email_option;
@@ -153,6 +213,7 @@
  * Expand string, append it to strbuf *sb, then return error code ret.
  * Allow to save few lines of code.
  */
+__attribute__((format (printf, 3, 4)))
 static int strbuf_addf_ret(struct strbuf *sb, int ret, const char *fmt, ...)
 {
 	va_list ap;
@@ -263,11 +324,13 @@
 				  const char *arg, struct strbuf *err)
 {
 	if (!arg) {
+		atom->u.objectsize.option = O_SIZE;
 		if (*atom->name == '*')
 			oi_deref.info.sizep = &oi_deref.size;
 		else
 			oi.info.sizep = &oi.size;
 	} else if (!strcmp(arg, "disk")) {
+		atom->u.objectsize.option = O_SIZE_DISK;
 		if (*atom->name == '*')
 			oi_deref.info.disk_sizep = &oi_deref.disk_size;
 		else
@@ -313,28 +376,26 @@
 static int trailers_atom_parser(const struct ref_format *format, struct used_atom *atom,
 				const char *arg, struct strbuf *err)
 {
-	struct string_list params = STRING_LIST_INIT_DUP;
-	int i;
-
 	atom->u.contents.trailer_opts.no_divider = 1;
 
 	if (arg) {
-		string_list_split(&params, arg, ',', -1);
-		for (i = 0; i < params.nr; i++) {
-			const char *s = params.items[i].string;
-			if (!strcmp(s, "unfold"))
-				atom->u.contents.trailer_opts.unfold = 1;
-			else if (!strcmp(s, "only"))
-				atom->u.contents.trailer_opts.only_trailers = 1;
-			else {
-				strbuf_addf(err, _("unknown %%(trailers) argument: %s"), s);
-				string_list_clear(&params, 0);
-				return -1;
-			}
+		const char *argbuf = xstrfmt("%s)", arg);
+		char *invalid_arg = NULL;
+
+		if (format_set_trailers_options(&atom->u.contents.trailer_opts,
+		    &ref_trailer_buf.filter_list,
+		    &ref_trailer_buf.sepbuf,
+		    &ref_trailer_buf.kvsepbuf,
+		    &argbuf, &invalid_arg)) {
+			if (!invalid_arg)
+				strbuf_addf(err, _("expected %%(trailers:key=<value>)"));
+			else
+				strbuf_addf(err, _("unknown %%(trailers) argument: %s"), invalid_arg);
+			free((char *)invalid_arg);
+			return -1;
 		}
 	}
 	atom->u.contents.option = C_TRAILERS;
-	string_list_clear(&params, 0);
 	return 0;
 }
 
@@ -497,47 +558,47 @@
 	int (*parser)(const struct ref_format *format, struct used_atom *atom,
 		      const char *arg, struct strbuf *err);
 } valid_atom[] = {
-	{ "refname", SOURCE_NONE, FIELD_STR, refname_atom_parser },
-	{ "objecttype", SOURCE_OTHER, FIELD_STR, objecttype_atom_parser },
-	{ "objectsize", SOURCE_OTHER, FIELD_ULONG, objectsize_atom_parser },
-	{ "objectname", SOURCE_OTHER, FIELD_STR, oid_atom_parser },
-	{ "deltabase", SOURCE_OTHER, FIELD_STR, deltabase_atom_parser },
-	{ "tree", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
-	{ "parent", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
-	{ "numparent", SOURCE_OBJ, FIELD_ULONG },
-	{ "object", SOURCE_OBJ },
-	{ "type", SOURCE_OBJ },
-	{ "tag", SOURCE_OBJ },
-	{ "author", SOURCE_OBJ },
-	{ "authorname", SOURCE_OBJ },
-	{ "authoremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
-	{ "authordate", SOURCE_OBJ, FIELD_TIME },
-	{ "committer", SOURCE_OBJ },
-	{ "committername", SOURCE_OBJ },
-	{ "committeremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
-	{ "committerdate", SOURCE_OBJ, FIELD_TIME },
-	{ "tagger", SOURCE_OBJ },
-	{ "taggername", SOURCE_OBJ },
-	{ "taggeremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
-	{ "taggerdate", SOURCE_OBJ, FIELD_TIME },
-	{ "creator", SOURCE_OBJ },
-	{ "creatordate", SOURCE_OBJ, FIELD_TIME },
-	{ "subject", SOURCE_OBJ, FIELD_STR, subject_atom_parser },
-	{ "body", SOURCE_OBJ, FIELD_STR, body_atom_parser },
-	{ "trailers", SOURCE_OBJ, FIELD_STR, trailers_atom_parser },
-	{ "contents", SOURCE_OBJ, FIELD_STR, contents_atom_parser },
-	{ "upstream", SOURCE_NONE, FIELD_STR, remote_ref_atom_parser },
-	{ "push", SOURCE_NONE, FIELD_STR, remote_ref_atom_parser },
-	{ "symref", SOURCE_NONE, FIELD_STR, refname_atom_parser },
-	{ "flag", SOURCE_NONE },
-	{ "HEAD", SOURCE_NONE, FIELD_STR, head_atom_parser },
-	{ "color", SOURCE_NONE, FIELD_STR, color_atom_parser },
-	{ "worktreepath", SOURCE_NONE },
-	{ "align", SOURCE_NONE, FIELD_STR, align_atom_parser },
-	{ "end", SOURCE_NONE },
-	{ "if", SOURCE_NONE, FIELD_STR, if_atom_parser },
-	{ "then", SOURCE_NONE },
-	{ "else", SOURCE_NONE },
+	[ATOM_REFNAME] = { "refname", SOURCE_NONE, FIELD_STR, refname_atom_parser },
+	[ATOM_OBJECTTYPE] = { "objecttype", SOURCE_OTHER, FIELD_STR, objecttype_atom_parser },
+	[ATOM_OBJECTSIZE] = { "objectsize", SOURCE_OTHER, FIELD_ULONG, objectsize_atom_parser },
+	[ATOM_OBJECTNAME] = { "objectname", SOURCE_OTHER, FIELD_STR, oid_atom_parser },
+	[ATOM_DELTABASE] = { "deltabase", SOURCE_OTHER, FIELD_STR, deltabase_atom_parser },
+	[ATOM_TREE] = { "tree", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
+	[ATOM_PARENT] = { "parent", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
+	[ATOM_NUMPARENT] = { "numparent", SOURCE_OBJ, FIELD_ULONG },
+	[ATOM_OBJECT] = { "object", SOURCE_OBJ },
+	[ATOM_TYPE] = { "type", SOURCE_OBJ },
+	[ATOM_TAG] = { "tag", SOURCE_OBJ },
+	[ATOM_AUTHOR] = { "author", SOURCE_OBJ },
+	[ATOM_AUTHORNAME] = { "authorname", SOURCE_OBJ },
+	[ATOM_AUTHOREMAIL] = { "authoremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
+	[ATOM_AUTHORDATE] = { "authordate", SOURCE_OBJ, FIELD_TIME },
+	[ATOM_COMMITTER] = { "committer", SOURCE_OBJ },
+	[ATOM_COMMITTERNAME] = { "committername", SOURCE_OBJ },
+	[ATOM_COMMITTEREMAIL] = { "committeremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
+	[ATOM_COMMITTERDATE] = { "committerdate", SOURCE_OBJ, FIELD_TIME },
+	[ATOM_TAGGER] = { "tagger", SOURCE_OBJ },
+	[ATOM_TAGGERNAME] = { "taggername", SOURCE_OBJ },
+	[ATOM_TAGGEREMAIL] = { "taggeremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
+	[ATOM_TAGGERDATE] = { "taggerdate", SOURCE_OBJ, FIELD_TIME },
+	[ATOM_CREATOR] = { "creator", SOURCE_OBJ },
+	[ATOM_CREATORDATE] = { "creatordate", SOURCE_OBJ, FIELD_TIME },
+	[ATOM_SUBJECT] = { "subject", SOURCE_OBJ, FIELD_STR, subject_atom_parser },
+	[ATOM_BODY] = { "body", SOURCE_OBJ, FIELD_STR, body_atom_parser },
+	[ATOM_TRAILERS] = { "trailers", SOURCE_OBJ, FIELD_STR, trailers_atom_parser },
+	[ATOM_CONTENTS] = { "contents", SOURCE_OBJ, FIELD_STR, contents_atom_parser },
+	[ATOM_UPSTREAM] = { "upstream", SOURCE_NONE, FIELD_STR, remote_ref_atom_parser },
+	[ATOM_PUSH] = { "push", SOURCE_NONE, FIELD_STR, remote_ref_atom_parser },
+	[ATOM_SYMREF] = { "symref", SOURCE_NONE, FIELD_STR, refname_atom_parser },
+	[ATOM_FLAG] = { "flag", SOURCE_NONE },
+	[ATOM_HEAD] = { "HEAD", SOURCE_NONE, FIELD_STR, head_atom_parser },
+	[ATOM_COLOR] = { "color", SOURCE_NONE, FIELD_STR, color_atom_parser },
+	[ATOM_WORKTREEPATH] = { "worktreepath", SOURCE_NONE },
+	[ATOM_ALIGN] = { "align", SOURCE_NONE, FIELD_STR, align_atom_parser },
+	[ATOM_END] = { "end", SOURCE_NONE },
+	[ATOM_IF] = { "if", SOURCE_NONE, FIELD_STR, if_atom_parser },
+	[ATOM_THEN] = { "then", SOURCE_NONE },
+	[ATOM_ELSE] = { "else", SOURCE_NONE },
 	/*
 	 * Please update $__git_ref_fieldlist in git-completion.bash
 	 * when you add new atoms
@@ -619,6 +680,7 @@
 	at = used_atom_cnt;
 	used_atom_cnt++;
 	REALLOC_ARRAY(used_atom, used_atom_cnt);
+	used_atom[at].atom_type = i;
 	used_atom[at].name = xmemdupz(atom, ep - atom);
 	used_atom[at].type = valid_atom[i].cmp_type;
 	used_atom[at].source = valid_atom[i].source;
@@ -643,7 +705,7 @@
 		return -1;
 	if (*atom == '*')
 		need_tagged = 1;
-	if (!strcmp(valid_atom[i].name, "symref"))
+	if (i == ATOM_SYMREF)
 		need_symref = 1;
 	return at;
 }
@@ -768,7 +830,8 @@
 			   struct strbuf *unused_err)
 {
 	struct ref_formatting_stack *new_stack;
-	struct if_then_else *if_then_else = xcalloc(sizeof(struct if_then_else), 1);
+	struct if_then_else *if_then_else = xcalloc(1,
+						    sizeof(struct if_then_else));
 
 	if_then_else->str = atomv->atom->u.if_then_else.str;
 	if_then_else->cmp_status = atomv->atom->u.if_then_else.cmp_status;
@@ -955,22 +1018,25 @@
 
 	for (i = 0; i < used_atom_cnt; i++) {
 		const char *name = used_atom[i].name;
+		enum atom_type atom_type = used_atom[i].atom_type;
 		struct atom_value *v = &val[i];
 		if (!!deref != (*name == '*'))
 			continue;
 		if (deref)
 			name++;
-		if (!strcmp(name, "objecttype"))
+		if (atom_type == ATOM_OBJECTTYPE)
 			v->s = xstrdup(type_name(oi->type));
-		else if (!strcmp(name, "objectsize:disk")) {
-			v->value = oi->disk_size;
-			v->s = xstrfmt("%"PRIuMAX, (uintmax_t)oi->disk_size);
-		} else if (!strcmp(name, "objectsize")) {
-			v->value = oi->size;
-			v->s = xstrfmt("%"PRIuMAX , (uintmax_t)oi->size);
-		} else if (!strcmp(name, "deltabase"))
+		else if (atom_type == ATOM_OBJECTSIZE) {
+			if (used_atom[i].u.objectsize.option == O_SIZE_DISK) {
+				v->value = oi->disk_size;
+				v->s = xstrfmt("%"PRIuMAX, (uintmax_t)oi->disk_size);
+			} else if (used_atom[i].u.objectsize.option == O_SIZE) {
+				v->value = oi->size;
+				v->s = xstrfmt("%"PRIuMAX , (uintmax_t)oi->size);
+			}
+		} else if (atom_type == ATOM_DELTABASE)
 			v->s = xstrdup(oid_to_hex(&oi->delta_base_oid));
-		else if (deref)
+		else if (atom_type == ATOM_OBJECTNAME && deref)
 			grab_oid(name, "objectname", &oi->oid, v, &used_atom[i]);
 	}
 }
@@ -983,16 +1049,17 @@
 
 	for (i = 0; i < used_atom_cnt; i++) {
 		const char *name = used_atom[i].name;
+		enum atom_type atom_type = used_atom[i].atom_type;
 		struct atom_value *v = &val[i];
 		if (!!deref != (*name == '*'))
 			continue;
 		if (deref)
 			name++;
-		if (!strcmp(name, "tag"))
+		if (atom_type == ATOM_TAG)
 			v->s = xstrdup(tag->tag);
-		else if (!strcmp(name, "type") && tag->tagged)
+		else if (atom_type == ATOM_TYPE && tag->tagged)
 			v->s = xstrdup(type_name(tag->tagged->type));
-		else if (!strcmp(name, "object") && tag->tagged)
+		else if (atom_type == ATOM_OBJECT && tag->tagged)
 			v->s = xstrdup(oid_to_hex(&tag->tagged->oid));
 	}
 }
@@ -1005,18 +1072,20 @@
 
 	for (i = 0; i < used_atom_cnt; i++) {
 		const char *name = used_atom[i].name;
+		enum atom_type atom_type = used_atom[i].atom_type;
 		struct atom_value *v = &val[i];
 		if (!!deref != (*name == '*'))
 			continue;
 		if (deref)
 			name++;
-		if (grab_oid(name, "tree", get_commit_tree_oid(commit), v, &used_atom[i]))
+		if (atom_type == ATOM_TREE &&
+		    grab_oid(name, "tree", get_commit_tree_oid(commit), v, &used_atom[i]))
 			continue;
-		if (!strcmp(name, "numparent")) {
+		if (atom_type == ATOM_NUMPARENT) {
 			v->value = commit_list_count(commit->parents);
 			v->s = xstrfmt("%lu", (unsigned long)v->value);
 		}
-		else if (starts_with(name, "parent")) {
+		else if (atom_type == ATOM_PARENT) {
 			struct commit_list *parents;
 			struct strbuf s = STRBUF_INIT;
 			for (parents = commit->parents; parents; parents = parents->next) {
@@ -1196,15 +1265,16 @@
 		return;
 	for (i = 0; i < used_atom_cnt; i++) {
 		const char *name = used_atom[i].name;
+		enum atom_type atom_type = used_atom[i].atom_type;
 		struct atom_value *v = &val[i];
 		if (!!deref != (*name == '*'))
 			continue;
 		if (deref)
 			name++;
 
-		if (starts_with(name, "creatordate"))
+		if (atom_type == ATOM_CREATORDATE)
 			grab_date(wholine, v, name);
-		else if (!strcmp(name, "creator"))
+		else if (atom_type == ATOM_CREATOR)
 			v->s = copy_line(wholine);
 	}
 }
@@ -1603,7 +1673,7 @@
 
 	if (oi->info.contentp) {
 		*obj = parse_object_buffer(the_repository, &oi->oid, oi->type, oi->size, oi->content, &eaten);
-		if (!obj) {
+		if (!*obj) {
 			if (!eaten)
 				free(oi->content);
 			return strbuf_addf_ret(err, -1, _("parse_object_buffer failed on %s for %s"),
@@ -1672,7 +1742,7 @@
 	int i;
 	struct object_info empty = OBJECT_INFO_INIT;
 
-	ref->value = xcalloc(used_atom_cnt, sizeof(struct atom_value));
+	CALLOC_ARRAY(ref->value, used_atom_cnt);
 
 	if (need_symref && (ref->flag & REF_ISSYMREF) && !ref->symref) {
 		ref->symref = resolve_refdup(ref->refname, RESOLVE_REF_READING,
@@ -1684,6 +1754,7 @@
 	/* Fill in specials first */
 	for (i = 0; i < used_atom_cnt; i++) {
 		struct used_atom *atom = &used_atom[i];
+		enum atom_type atom_type = atom->atom_type;
 		const char *name = used_atom[i].name;
 		struct atom_value *v = &ref->value[i];
 		int deref = 0;
@@ -1698,18 +1769,18 @@
 			name++;
 		}
 
-		if (starts_with(name, "refname"))
+		if (atom_type == ATOM_REFNAME)
 			refname = get_refname(atom, ref);
-		else if (!strcmp(name, "worktreepath")) {
+		else if (atom_type == ATOM_WORKTREEPATH) {
 			if (ref->kind == FILTER_REFS_BRANCHES)
 				v->s = get_worktree_path(atom, ref);
 			else
 				v->s = xstrdup("");
 			continue;
 		}
-		else if (starts_with(name, "symref"))
+		else if (atom_type == ATOM_SYMREF)
 			refname = get_symref(atom, ref);
-		else if (starts_with(name, "upstream")) {
+		else if (atom_type == ATOM_UPSTREAM) {
 			const char *branch_name;
 			/* only local branches may have an upstream */
 			if (!skip_prefix(ref->refname, "refs/heads/",
@@ -1725,7 +1796,7 @@
 			else
 				v->s = xstrdup("");
 			continue;
-		} else if (atom->u.remote_ref.push) {
+		} else if (atom_type == ATOM_PUSH && atom->u.remote_ref.push) {
 			const char *branch_name;
 			v->s = xstrdup("");
 			if (!skip_prefix(ref->refname, "refs/heads/",
@@ -1744,10 +1815,10 @@
 			free((char *)v->s);
 			fill_remote_ref_details(atom, refname, branch, &v->s);
 			continue;
-		} else if (starts_with(name, "color:")) {
+		} else if (atom_type == ATOM_COLOR) {
 			v->s = xstrdup(atom->u.color);
 			continue;
-		} else if (!strcmp(name, "flag")) {
+		} else if (atom_type == ATOM_FLAG) {
 			char buf[256], *cp = buf;
 			if (ref->flag & REF_ISSYMREF)
 				cp = copy_advance(cp, ",symref");
@@ -1760,23 +1831,24 @@
 				v->s = xstrdup(buf + 1);
 			}
 			continue;
-		} else if (!deref && grab_oid(name, "objectname", &ref->objectname, v, atom)) {
-			continue;
-		} else if (!strcmp(name, "HEAD")) {
+		} else if (!deref && atom_type == ATOM_OBJECTNAME &&
+			   grab_oid(name, "objectname", &ref->objectname, v, atom)) {
+				continue;
+		} else if (atom_type == ATOM_HEAD) {
 			if (atom->u.head && !strcmp(ref->refname, atom->u.head))
 				v->s = xstrdup("*");
 			else
 				v->s = xstrdup(" ");
 			continue;
-		} else if (starts_with(name, "align")) {
+		} else if (atom_type == ATOM_ALIGN) {
 			v->handler = align_atom_handler;
 			v->s = xstrdup("");
 			continue;
-		} else if (!strcmp(name, "end")) {
+		} else if (atom_type == ATOM_END) {
 			v->handler = end_atom_handler;
 			v->s = xstrdup("");
 			continue;
-		} else if (starts_with(name, "if")) {
+		} else if (atom_type == ATOM_IF) {
 			const char *s;
 			if (skip_prefix(name, "if:", &s))
 				v->s = xstrdup(s);
@@ -1784,11 +1856,11 @@
 				v->s = xstrdup("");
 			v->handler = if_atom_handler;
 			continue;
-		} else if (!strcmp(name, "then")) {
+		} else if (atom_type == ATOM_THEN) {
 			v->handler = then_atom_handler;
 			v->s = xstrdup("");
 			continue;
-		} else if (!strcmp(name, "else")) {
+		} else if (atom_type == ATOM_ELSE) {
 			v->handler = else_atom_handler;
 			v->s = xstrdup("");
 			continue;
@@ -2181,7 +2253,7 @@
 	if (!check_reachable)
 		return;
 
-	to_clear = xcalloc(sizeof(struct commit *), array->nr);
+	CALLOC_ARRAY(to_clear, array->nr);
 
 	repo_init_revisions(the_repository, &revs, NULL);
 
@@ -2430,27 +2502,22 @@
 	return 0;
 }
 
-void show_ref_array_item(struct ref_array_item *info,
-			 const struct ref_format *format)
-{
-	struct strbuf final_buf = STRBUF_INIT;
-	struct strbuf error_buf = STRBUF_INIT;
-
-	if (format_ref_array_item(info, format, &final_buf, &error_buf))
-		die("%s", error_buf.buf);
-	fwrite(final_buf.buf, 1, final_buf.len, stdout);
-	strbuf_release(&error_buf);
-	strbuf_release(&final_buf);
-	putchar('\n');
-}
-
 void pretty_print_ref(const char *name, const struct object_id *oid,
 		      const struct ref_format *format)
 {
 	struct ref_array_item *ref_item;
+	struct strbuf output = STRBUF_INIT;
+	struct strbuf err = STRBUF_INIT;
+
 	ref_item = new_ref_array_item(name, oid);
 	ref_item->kind = ref_kind_from_refname(name);
-	show_ref_array_item(ref_item, format);
+	if (format_ref_array_item(ref_item, format, &output, &err))
+		die("%s", err.buf);
+	fwrite(output.buf, 1, output.len, stdout);
+	putchar('\n');
+
+	strbuf_release(&err);
+	strbuf_release(&output);
 	free_array_item(ref_item);
 }
 
@@ -2486,7 +2553,7 @@
 {
 	struct ref_sorting *s;
 
-	s = xcalloc(1, sizeof(*s));
+	CALLOC_ARRAY(s, 1);
 	s->next = *sorting_tail;
 	*sorting_tail = s;
 
diff --git a/ref-filter.h b/ref-filter.h
index 19ea4c4..baf72a7 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -119,8 +119,6 @@
 			  const struct ref_format *format,
 			  struct strbuf *final_buf,
 			  struct strbuf *error_buf);
-/*  Print the ref using the given format and quote_style */
-void show_ref_array_item(struct ref_array_item *info, const struct ref_format *format);
 /*  Parse a single sort specifier and add it to the list */
 void parse_ref_sorting(struct ref_sorting **sorting_tail, const char *atom);
 /*  Callback function for parsing the sort option */
diff --git a/reflog-walk.c b/reflog-walk.c
index 3a25b27..e9cd328 100644
--- a/reflog-walk.c
+++ b/reflog-walk.c
@@ -112,7 +112,7 @@
 
 void init_reflog_walk(struct reflog_walk_info **info)
 {
-	*info = xcalloc(1, sizeof(struct reflog_walk_info));
+	CALLOC_ARRAY(*info, 1);
 	(*info)->complete_reflogs.strdup_strings = 1;
 }
 
@@ -181,7 +181,7 @@
 	}
 	free(branch);
 
-	commit_reflog = xcalloc(1, sizeof(struct commit_reflog));
+	CALLOC_ARRAY(commit_reflog, 1);
 	if (recno < 0) {
 		commit_reflog->recno = get_reflog_recno_by_time(reflogs, timestamp);
 		if (commit_reflog->recno < 0) {
diff --git a/refs.c b/refs.c
index a665ed5..8b9f7c3 100644
--- a/refs.c
+++ b/refs.c
@@ -337,7 +337,7 @@
 
 enum peel_status peel_object(const struct object_id *name, struct object_id *oid)
 {
-	struct object *o = lookup_unknown_object(name);
+	struct object *o = lookup_unknown_object(the_repository, name);
 
 	if (o->type == OBJ_NONE) {
 		int type = oid_object_info(the_repository, name, NULL);
@@ -1007,7 +1007,7 @@
 	struct ref_transaction *tr;
 	assert(err);
 
-	tr = xcalloc(1, sizeof(struct ref_transaction));
+	CALLOC_ARRAY(tr, 1);
 	tr->ref_store = refs;
 	return tr;
 }
@@ -1107,7 +1107,7 @@
 	if (!new_oid || is_null_oid(new_oid))
 		BUG("create called without valid new_oid");
 	return ref_transaction_update(transaction, refname, new_oid,
-				      &null_oid, flags, msg, err);
+				      null_oid(), flags, msg, err);
 }
 
 int ref_transaction_delete(struct ref_transaction *transaction,
@@ -1119,7 +1119,7 @@
 	if (old_oid && is_null_oid(old_oid))
 		BUG("delete called with old_oid set to zeros");
 	return ref_transaction_update(transaction, refname,
-				      &null_oid, old_oid,
+				      null_oid(), old_oid,
 				      flags, msg, err);
 }
 
@@ -1306,7 +1306,7 @@
 		while (len && ref[len - 1] == '/')
 			ref[--len] = '\0';
 		if (!hide_refs) {
-			hide_refs = xcalloc(1, sizeof(*hide_refs));
+			CALLOC_ARRAY(hide_refs, 1);
 			hide_refs->strdup_strings = 1;
 		}
 		string_list_append(hide_refs, ref);
@@ -2010,7 +2010,7 @@
 	     oideq(current_ref_iter->oid, base)))
 		return ref_iterator_peel(current_ref_iter, peeled);
 
-	return peel_object(base, peeled);
+	return peel_object(base, peeled) ? -1 : 0;
 }
 
 int refs_create_symref(struct ref_store *refs,
diff --git a/refs/debug.c b/refs/debug.c
index 922e64f..1a7a9e1 100644
--- a/refs/debug.c
+++ b/refs/debug.c
@@ -232,7 +232,8 @@
 	struct debug_ref_iterator *diter = xcalloc(1, sizeof(*diter));
 	base_ref_iterator_init(&diter->base, &debug_ref_iterator_vtable, 1);
 	diter->iter = res;
-	trace_printf_key(&trace_refs, "ref_iterator_begin: %s (0x%x)\n", prefix, flags);
+	trace_printf_key(&trace_refs, "ref_iterator_begin: \"%s\" (0x%x)\n",
+			 prefix, flags);
 	return &diter->base;
 }
 
@@ -243,7 +244,8 @@
 	struct debug_ref_store *drefs = (struct debug_ref_store *)ref_store;
 	int res = 0;
 
-	oidcpy(oid, &null_oid);
+	oidcpy(oid, null_oid());
+	errno = 0;
 	res = drefs->refs->be->read_raw_ref(drefs->refs, refname, oid, referent,
 					    type);
 
@@ -251,7 +253,9 @@
 		trace_printf_key(&trace_refs, "read_raw_ref: %s: %s (=> %s) type %x: %d\n",
 			refname, oid_to_hex(oid), referent->buf, *type, res);
 	} else {
-		trace_printf_key(&trace_refs, "read_raw_ref: %s: %d\n", refname, res);
+		trace_printf_key(&trace_refs,
+				 "read_raw_ref: %s: %d (errno %d)\n", refname,
+				 res, errno);
 	}
 	return res;
 }
@@ -353,6 +357,40 @@
 	return res;
 }
 
+struct debug_reflog_expiry_should_prune {
+	reflog_expiry_prepare_fn *prepare;
+	reflog_expiry_should_prune_fn *should_prune;
+	reflog_expiry_cleanup_fn *cleanup;
+	void *cb_data;
+};
+
+static void debug_reflog_expiry_prepare(const char *refname,
+				    const struct object_id *oid,
+				    void *cb_data)
+{
+	struct debug_reflog_expiry_should_prune *prune = cb_data;
+	trace_printf_key(&trace_refs, "reflog_expire_prepare: %s\n", refname);
+	prune->prepare(refname, oid, prune->cb_data);
+}
+
+static int debug_reflog_expiry_should_prune_fn(struct object_id *ooid,
+					       struct object_id *noid,
+					       const char *email,
+					       timestamp_t timestamp, int tz,
+					       const char *message, void *cb_data) {
+	struct debug_reflog_expiry_should_prune *prune = cb_data;
+
+	int result = prune->should_prune(ooid, noid, email, timestamp, tz, message, prune->cb_data);
+	trace_printf_key(&trace_refs, "reflog_expire_should_prune: %s %ld: %d\n", message, (long int) timestamp, result);
+	return result;
+}
+
+static void debug_reflog_expiry_cleanup(void *cb_data)
+{
+	struct debug_reflog_expiry_should_prune *prune = cb_data;
+	prune->cleanup(prune->cb_data);
+}
+
 static int debug_reflog_expire(struct ref_store *ref_store, const char *refname,
 			       const struct object_id *oid, unsigned int flags,
 			       reflog_expiry_prepare_fn prepare_fn,
@@ -361,10 +399,17 @@
 			       void *policy_cb_data)
 {
 	struct debug_ref_store *drefs = (struct debug_ref_store *)ref_store;
+	struct debug_reflog_expiry_should_prune prune = {
+		.prepare = prepare_fn,
+		.cleanup = cleanup_fn,
+		.should_prune = should_prune_fn,
+		.cb_data = policy_cb_data,
+	};
 	int res = drefs->refs->be->reflog_expire(drefs->refs, refname, oid,
-						 flags, prepare_fn,
-						 should_prune_fn, cleanup_fn,
-						 policy_cb_data);
+						 flags, &debug_reflog_expiry_prepare,
+						 &debug_reflog_expiry_should_prune_fn,
+						 &debug_reflog_expiry_cleanup,
+						 &prune);
 	trace_printf_key(&trace_refs, "reflog_expire: %s: %d\n", refname, res);
 	return res;
 }
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 4fdc688..677b7e4 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -45,10 +45,10 @@
 #define REF_UPDATE_VIA_HEAD (1 << 8)
 
 /*
- * Used as a flag in ref_update::flags when the loose reference has
- * been deleted.
+ * Used as a flag in ref_update::flags when a reference has been
+ * deleted and the ref's parent directories may need cleanup.
  */
-#define REF_DELETED_LOOSE (1 << 9)
+#define REF_DELETED_RMDIR (1 << 9)
 
 struct ref_lock {
 	char *ref_name;
@@ -549,7 +549,7 @@
 
 	/* First lock the file so it can't change out from under us. */
 
-	*lock_p = lock = xcalloc(1, sizeof(*lock));
+	*lock_p = CALLOC_ARRAY(lock, 1);
 
 	lock->ref_name = xstrdup(refname);
 	files_ref_path(refs, &ref_file, refname);
@@ -843,7 +843,7 @@
 
 	overlay_iter = overlay_ref_iterator_begin(loose_iter, packed_iter);
 
-	iter = xcalloc(1, sizeof(*iter));
+	CALLOC_ARRAY(iter, 1);
 	ref_iterator = &iter->base;
 	base_ref_iterator_init(ref_iterator, &files_ref_iterator_vtable,
 			       overlay_iter->ordered);
@@ -930,7 +930,7 @@
 	files_assert_main_repository(refs, "lock_ref_oid_basic");
 	assert(err);
 
-	lock = xcalloc(1, sizeof(struct ref_lock));
+	CALLOC_ARRAY(lock, 1);
 
 	if (mustexist)
 		resolve_flags |= RESOLVE_REF_READING;
@@ -1084,7 +1084,7 @@
 	ref_transaction_add_update(
 			transaction, r->name,
 			REF_NO_DEREF | REF_HAVE_NEW | REF_HAVE_OLD | REF_IS_PRUNING,
-			&null_oid, &r->oid, NULL);
+			null_oid(), &r->oid, NULL);
 	if (ref_transaction_commit(transaction, &err))
 		goto cleanup;
 
@@ -2152,7 +2152,7 @@
 		return empty_ref_iterator_begin();
 	}
 
-	iter = xcalloc(1, sizeof(*iter));
+	CALLOC_ARRAY(iter, 1);
 	ref_iterator = &iter->base;
 
 	base_ref_iterator_init(ref_iterator, &files_reflog_iterator_vtable, 0);
@@ -2597,7 +2597,7 @@
 	if (!transaction->nr)
 		goto cleanup;
 
-	backend_data = xcalloc(1, sizeof(*backend_data));
+	CALLOC_ARRAY(backend_data, 1);
 	transaction->backend_data = backend_data;
 
 	/*
@@ -2852,6 +2852,7 @@
 
 		if (update->flags & REF_DELETING &&
 		    !(update->flags & REF_LOG_ONLY)) {
+			update->flags |= REF_DELETED_RMDIR;
 			if (!(update->type & REF_ISPACKED) ||
 			    update->type & REF_ISSYMREF) {
 				/* It is a loose reference. */
@@ -2861,7 +2862,6 @@
 					ret = TRANSACTION_GENERIC_ERROR;
 					goto cleanup;
 				}
-				update->flags |= REF_DELETED_LOOSE;
 			}
 		}
 	}
@@ -2874,9 +2874,9 @@
 	for (i = 0; i < transaction->nr; i++) {
 		struct ref_update *update = transaction->updates[i];
 
-		if (update->flags & REF_DELETED_LOOSE) {
+		if (update->flags & REF_DELETED_RMDIR) {
 			/*
-			 * The loose reference was deleted. Delete any
+			 * The reference was deleted. Delete any
 			 * empty parent directories. (Note that this
 			 * can only work because we have already
 			 * removed the lockfile.)
diff --git a/refs/iterator.c b/refs/iterator.c
index 629e00a..a89d132 100644
--- a/refs/iterator.c
+++ b/refs/iterator.c
@@ -393,7 +393,7 @@
 	if (!*prefix && !trim)
 		return iter0; /* optimization: no need to wrap iterator */
 
-	iter = xcalloc(1, sizeof(*iter));
+	CALLOC_ARRAY(iter, 1);
 	ref_iterator = &iter->base;
 
 	base_ref_iterator_init(ref_iterator, &prefix_ref_iterator_vtable, iter0->ordered);
diff --git a/refs/packed-backend.c b/refs/packed-backend.c
index b912f25..f8aa97d 100644
--- a/refs/packed-backend.c
+++ b/refs/packed-backend.c
@@ -889,7 +889,7 @@
 	} else if ((iter->base.flags & (REF_ISBROKEN | REF_ISSYMREF))) {
 		return -1;
 	} else {
-		return !!peel_object(&iter->oid, peeled);
+		return peel_object(&iter->oid, peeled) ? -1 : 0;
 	}
 }
 
@@ -941,7 +941,7 @@
 	if (start == snapshot->eof)
 		return empty_ref_iterator_begin();
 
-	iter = xcalloc(1, sizeof(*iter));
+	CALLOC_ARRAY(iter, 1);
 	ref_iterator = &iter->base;
 	base_ref_iterator_init(ref_iterator, &packed_ref_iterator_vtable, 1);
 
@@ -1424,8 +1424,8 @@
 	 * do so itself.
 	 */
 
-	data = xcalloc(1, sizeof(*data));
-	string_list_init(&data->updates, 0);
+	CALLOC_ARRAY(data, 1);
+	string_list_init_nodup(&data->updates);
 
 	transaction->backend_data = data;
 
diff --git a/refs/ref-cache.c b/refs/ref-cache.c
index b7052f7..49d732f 100644
--- a/refs/ref-cache.c
+++ b/refs/ref-cache.c
@@ -491,7 +491,7 @@
 static int cache_ref_iterator_peel(struct ref_iterator *ref_iterator,
 				   struct object_id *peeled)
 {
-	return peel_object(ref_iterator->oid, peeled);
+	return peel_object(ref_iterator->oid, peeled) ? -1 : 0;
 }
 
 static int cache_ref_iterator_abort(struct ref_iterator *ref_iterator)
@@ -530,7 +530,7 @@
 	if (prime_dir)
 		prime_ref_dir(dir, prefix);
 
-	iter = xcalloc(1, sizeof(*iter));
+	CALLOC_ARRAY(iter, 1);
 	ref_iterator = &iter->base;
 	base_ref_iterator_init(ref_iterator, &cache_ref_iterator_vtable, 1);
 	ALLOC_GROW(iter->levels, 10, iter->levels_alloc);
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index 467f4b3..3155708 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -453,6 +453,9 @@
  */
 typedef int ref_iterator_advance_fn(struct ref_iterator *ref_iterator);
 
+/*
+ * Peels the current ref, returning 0 for success or -1 for failure.
+ */
 typedef int ref_iterator_peel_fn(struct ref_iterator *ref_iterator,
 				 struct object_id *peeled);
 
diff --git a/remote-curl.c b/remote-curl.c
index 0290b04..6c320d5 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -555,6 +555,8 @@
 	struct ref *posn;
 	if (options.object_format && options.hash_algo) {
 		printf(":object-format %s\n", options.hash_algo->name);
+		repo_set_hash_algo(the_repository,
+				hash_algo_by_ptr(options.hash_algo));
 	}
 	for (posn = refs; posn; posn = posn->next) {
 		if (posn->symref)
@@ -651,7 +653,7 @@
 			memcpy(buf - 4, "0000", 4);
 			break;
 		case PACKET_READ_RESPONSE_END:
-			die(_("remote server sent stateless separator"));
+			die(_("remote server sent unexpected response end packet"));
 		}
 	}
 
diff --git a/remote.c b/remote.c
index c3f85c1..dfb863d 100644
--- a/remote.c
+++ b/remote.c
@@ -151,7 +151,7 @@
 	if (e)
 		return container_of(e, struct remote, ent);
 
-	ret = xcalloc(1, sizeof(struct remote));
+	CALLOC_ARRAY(ret, 1);
 	ret->prune = -1;  /* unspecified */
 	ret->prune_tags = -1;  /* unspecified */
 	ret->name = xstrndup(name, len);
@@ -186,7 +186,7 @@
 	}
 
 	ALLOC_GROW(branches, branches_nr + 1, branches_alloc);
-	ret = xcalloc(1, sizeof(struct branch));
+	CALLOC_ARRAY(ret, 1);
 	branches[branches_nr++] = ret;
 	ret->name = xstrndup(name, len);
 	ret->refname = xstrfmt("refs/heads/%s", ret->name);
@@ -207,7 +207,7 @@
 	}
 
 	ALLOC_GROW(r->rewrite, r->rewrite_nr + 1, r->rewrite_alloc);
-	ret = xcalloc(1, sizeof(struct rewrite));
+	CALLOC_ARRAY(ret, 1);
 	r->rewrite[r->rewrite_nr++] = ret;
 	ret->base = xstrndup(base, len);
 	ret->baselen = len;
@@ -1592,7 +1592,7 @@
 			else
 				/*
 				 * If the ref isn't stale, and is reachable
-				 * from from one of the reflog entries of
+				 * from one of the reflog entries of
 				 * the local branch, force the update.
 				 */
 				force_ref_update = 1;
@@ -1664,7 +1664,7 @@
 
 	remote = remote_get(ret->remote_name);
 
-	ret->merge = xcalloc(ret->merge_nr, sizeof(*ret->merge));
+	CALLOC_ARRAY(ret->merge, ret->merge_nr);
 	for (i = 0; i < ret->merge_nr; i++) {
 		ret->merge[i] = xcalloc(1, sizeof(**ret->merge));
 		ret->merge[i]->src = xstrdup(ret->merge_name[i]);
diff --git a/repo-settings.c b/repo-settings.c
index f7fff0f..0cfe8b7 100644
--- a/repo-settings.c
+++ b/repo-settings.c
@@ -77,4 +77,19 @@
 		UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_KEEP);
 
 	UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_DEFAULT);
+
+	/*
+	 * This setting guards all index reads to require a full index
+	 * over a sparse index. After suitable guards are placed in the
+	 * codebase around uses of the index, this setting will be
+	 * removed.
+	 */
+	r->settings.command_requires_full_index = 1;
+
+	/*
+	 * Initialize this as off.
+	 */
+	r->settings.sparse_index = 0;
+	if (!repo_config_get_bool(r, "index.sparse", &value) && value)
+		r->settings.sparse_index = 1;
 }
diff --git a/repository.c b/repository.c
index c98298a..b2bf44c 100644
--- a/repository.c
+++ b/repository.c
@@ -10,6 +10,8 @@
 #include "object.h"
 #include "lockfile.h"
 #include "submodule-config.h"
+#include "sparse-index.h"
+#include "promisor-remote.h"
 
 /* The main repository */
 static struct repository the_repo;
@@ -72,7 +74,7 @@
 	repo_set_commondir(repo, o->commondir);
 
 	if (!repo->objects->odb) {
-		repo->objects->odb = xcalloc(1, sizeof(*repo->objects->odb));
+		CALLOC_ARRAY(repo->objects->odb, 1);
 		repo->objects->odb_tail = &repo->objects->odb->next;
 	}
 	expand_base_dir(&repo->objects->odb->path, o->object_dir,
@@ -171,6 +173,10 @@
 
 	repo_set_hash_algo(repo, format.hash_algo);
 
+	/* take ownership of format.partial_clone */
+	repo->repository_format_partial_clone = format.partial_clone;
+	format.partial_clone = NULL;
+
 	if (worktree)
 		repo_set_worktree(repo, worktree);
 
@@ -257,12 +263,19 @@
 		if (repo->index != &the_index)
 			FREE_AND_NULL(repo->index);
 	}
+
+	if (repo->promisor_remote_config) {
+		promisor_remote_clear(repo->promisor_remote_config);
+		FREE_AND_NULL(repo->promisor_remote_config);
+	}
 }
 
 int repo_read_index(struct repository *repo)
 {
+	int res;
+
 	if (!repo->index)
-		repo->index = xcalloc(1, sizeof(*repo->index));
+		CALLOC_ARRAY(repo->index, 1);
 
 	/* Complete the double-reference */
 	if (!repo->index->repo)
@@ -270,7 +283,13 @@
 	else if (repo->index->repo != repo)
 		BUG("repo's index should point back at itself");
 
-	return read_index_from(repo->index, repo->index_file, repo->gitdir);
+	res = read_index_from(repo->index, repo->index_file, repo->gitdir);
+
+	prepare_repo_settings(repo);
+	if (repo->settings.command_requires_full_index)
+		ensure_full_index(repo->index);
+
+	return res;
 }
 
 int repo_hold_locked_index(struct repository *repo,
diff --git a/repository.h b/repository.h
index b385ca3..3740c93 100644
--- a/repository.h
+++ b/repository.h
@@ -10,6 +10,7 @@
 struct pathspec;
 struct raw_object_store;
 struct submodule_cache;
+struct promisor_remote_config;
 
 enum untracked_cache_setting {
 	UNTRACKED_CACHE_UNSET = -1,
@@ -41,6 +42,9 @@
 	enum fetch_negotiation_setting fetch_negotiation_algorithm;
 
 	int core_multi_pack_index;
+
+	unsigned command_requires_full_index:1,
+		 sparse_index:1;
 };
 
 struct repository {
@@ -136,6 +140,10 @@
 	/* True if commit-graph has been disabled within this process. */
 	int commit_graph_disabled;
 
+	/* Configurations related to promisor remotes. */
+	char *repository_format_partial_clone;
+	struct promisor_remote_config *promisor_remote_config;
+
 	/* Configurations */
 
 	/* Indicate if a repository has a different 'commondir' from 'gitdir' */
diff --git a/rerere.c b/rerere.c
index dee60dc..d83d58d 100644
--- a/rerere.c
+++ b/rerere.c
@@ -1190,13 +1190,11 @@
 	if (!dir)
 		die_errno(_("unable to open rr-cache directory"));
 	/* Collect stale conflict IDs ... */
-	while ((e = readdir(dir))) {
+	while ((e = readdir_skip_dot_and_dotdot(dir))) {
 		struct rerere_dir *rr_dir;
 		struct rerere_id id;
 		int now_empty;
 
-		if (is_dot_or_dotdot(e->d_name))
-			continue;
 		if (!is_rr_cache_dirname(e->d_name))
 			continue; /* or should we remove e->d_name? */
 
diff --git a/reset.c b/reset.c
index 2f4fbd0..4bea758 100644
--- a/reset.c
+++ b/reset.c
@@ -128,7 +128,7 @@
 	}
 	if (run_hook)
 		run_hook_le(NULL, "post-checkout",
-			    oid_to_hex(orig ? orig : &null_oid),
+			    oid_to_hex(orig ? orig : null_oid()),
 			    oid_to_hex(oid), "1", NULL);
 
 leave_reset_head:
diff --git a/resolve-undo.c b/resolve-undo.c
index 236320f..e81096e 100644
--- a/resolve-undo.c
+++ b/resolve-undo.c
@@ -15,7 +15,7 @@
 		return;
 
 	if (!istate->resolve_undo) {
-		resolve_undo = xcalloc(1, sizeof(*resolve_undo));
+		CALLOC_ARRAY(resolve_undo, 1);
 		resolve_undo->strdup_strings = 1;
 		istate->resolve_undo = resolve_undo;
 	}
@@ -57,7 +57,7 @@
 	int i;
 	const unsigned rawsz = the_hash_algo->rawsz;
 
-	resolve_undo = xcalloc(1, sizeof(*resolve_undo));
+	CALLOC_ARRAY(resolve_undo, 1);
 	resolve_undo->strdup_strings = 1;
 
 	while (size) {
@@ -172,6 +172,8 @@
 	if (!istate->resolve_undo)
 		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 (ce->ce_flags & CE_MATCHED)
@@ -186,6 +188,8 @@
 	if (!istate->resolve_undo)
 		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 (!ce_path_match(istate, ce, pathspec, NULL))
diff --git a/revision.c b/revision.c
index b78733f..cddd054 100644
--- a/revision.c
+++ b/revision.c
@@ -154,7 +154,7 @@
 
 	entry = hashmap_get_entry(map, &key, ent, NULL);
 	if (!entry) {
-		entry = xcalloc(1, sizeof(struct path_and_oids_entry));
+		CALLOC_ARRAY(entry, 1);
 		hashmap_entry_init(&entry->ent, hash);
 		entry->path = xstrdup(key.path);
 		oidset_init(&entry->trees, 16);
@@ -316,9 +316,10 @@
 		revs->no_walk = 0;
 	if (revs->reflog_info && obj->type == OBJ_COMMIT) {
 		struct strbuf buf = STRBUF_INIT;
-		int len = interpret_branch_name(name, 0, &buf, &options);
+		size_t namelen = strlen(name);
+		int len = interpret_branch_name(name, namelen, &buf, &options);
 
-		if (0 < len && name[len] && buf.len)
+		if (0 < len && len < namelen && buf.len)
 			strbuf_addstr(&buf, name + len);
 		add_reflog_for_walk(revs->reflog_info,
 				    (struct commit *)obj,
@@ -1123,7 +1124,7 @@
 				mark_parents_uninteresting(p);
 			if (p->object.flags & SEEN)
 				continue;
-			p->object.flags |= SEEN;
+			p->object.flags |= (SEEN | NOT_USER_GIVEN);
 			if (list)
 				commit_list_insert_by_date(p, list);
 			if (queue)
@@ -1165,7 +1166,7 @@
 		}
 		p->object.flags |= left_flag;
 		if (!(p->object.flags & SEEN)) {
-			p->object.flags |= SEEN;
+			p->object.flags |= (SEEN | NOT_USER_GIVEN);
 			if (list)
 				commit_list_insert_by_date(p, list);
 			if (queue)
@@ -1393,20 +1394,20 @@
 {
 	int slop = SLOP;
 	timestamp_t date = TIME_MAX;
-	struct commit_list *list = revs->commits;
+	struct commit_list *original_list = revs->commits;
 	struct commit_list *newlist = NULL;
 	struct commit_list **p = &newlist;
 	struct commit_list *bottom = NULL;
 	struct commit *interesting_cache = NULL;
 
 	if (revs->ancestry_path) {
-		bottom = collect_bottom_commits(list);
+		bottom = collect_bottom_commits(original_list);
 		if (!bottom)
 			die("--ancestry-path given but there are no bottom commits");
 	}
 
-	while (list) {
-		struct commit *commit = pop_commit(&list);
+	while (original_list) {
+		struct commit *commit = pop_commit(&original_list);
 		struct object *obj = &commit->object;
 		show_early_output_fn_t show;
 
@@ -1415,11 +1416,11 @@
 
 		if (revs->max_age != -1 && (commit->date < revs->max_age))
 			obj->flags |= UNINTERESTING;
-		if (process_parents(revs, commit, &list, NULL) < 0)
+		if (process_parents(revs, commit, &original_list, NULL) < 0)
 			return -1;
 		if (obj->flags & UNINTERESTING) {
 			mark_parents_uninteresting(commit);
-			slop = still_interesting(list, date, slop, &interesting_cache);
+			slop = still_interesting(original_list, date, slop, &interesting_cache);
 			if (slop)
 				continue;
 			break;
@@ -1452,14 +1453,17 @@
 	 * Check if any commits have become TREESAME by some of their parents
 	 * becoming UNINTERESTING.
 	 */
-	if (limiting_can_increase_treesame(revs))
+	if (limiting_can_increase_treesame(revs)) {
+		struct commit_list *list = NULL;
 		for (list = newlist; list; list = list->next) {
 			struct commit *c = list->item;
 			if (c->object.flags & (UNINTERESTING | TREESAME))
 				continue;
 			update_treesame(revs, c);
 		}
+	}
 
+	free_commit_list(original_list);
 	revs->commits = newlist;
 	return 0;
 }
@@ -1555,7 +1559,7 @@
 void add_ref_exclusion(struct string_list **ref_excludes_p, const char *exclude)
 {
 	if (!*ref_excludes_p) {
-		*ref_excludes_p = xcalloc(1, sizeof(**ref_excludes_p));
+		CALLOC_ARRAY(*ref_excludes_p, 1);
 		(*ref_excludes_p)->strdup_strings = 1;
 	}
 	string_list_append(*ref_excludes_p, exclude);
@@ -1680,6 +1684,8 @@
 {
 	int i;
 
+	/* TODO: audit for interaction with sparse-index. */
+	ensure_full_index(istate);
 	for (i = 0; i < istate->cache_nr; i++) {
 		struct cache_entry *ce = istate->cache[i];
 		struct blob *blob;
@@ -2336,6 +2342,16 @@
 		revs->unpacked = 1;
 	} else if (starts_with(arg, "--unpacked=")) {
 		die(_("--unpacked=<packfile> no longer supported"));
+	} else if (!strcmp(arg, "--no-kept-objects")) {
+		revs->no_kept_objects = 1;
+		revs->keep_pack_cache_flags |= IN_CORE_KEEP_PACKS;
+		revs->keep_pack_cache_flags |= ON_DISK_KEEP_PACKS;
+	} else if (skip_prefix(arg, "--no-kept-objects=", &optarg)) {
+		revs->no_kept_objects = 1;
+		if (!strcmp(optarg, "in-core"))
+			revs->keep_pack_cache_flags |= IN_CORE_KEEP_PACKS;
+		if (!strcmp(optarg, "on-disk"))
+			revs->keep_pack_cache_flags |= ON_DISK_KEEP_PACKS;
 	} else if (!strcmp(arg, "-r")) {
 		revs->diff = 1;
 		revs->diffopt.flags.recursive = 1;
@@ -2929,7 +2945,7 @@
 
 	st = lookup_decoration(&revs->merge_simplification, &commit->object);
 	if (!st) {
-		st = xcalloc(1, sizeof(*st));
+		CALLOC_ARRAY(st, 1);
 		add_decoration(&revs->merge_simplification, &commit->object, st);
 	}
 	return st;
@@ -3261,7 +3277,7 @@
 			      void *cb)
 {
 	struct rev_info *revs = cb;
-	struct object *o = parse_object(revs->repo, oid);
+	struct object *o = lookup_unknown_object(revs->repo, oid);
 	o->flags |= UNINTERESTING | SEEN;
 	return 0;
 }
@@ -3795,6 +3811,11 @@
 		return commit_ignore;
 	if (revs->unpacked && has_object_pack(&commit->object.oid))
 		return commit_ignore;
+	if (revs->no_kept_objects) {
+		if (has_object_kept_pack(&commit->object.oid,
+					 revs->keep_pack_cache_flags))
+			return commit_ignore;
+	}
 	if (commit->object.flags & UNINTERESTING)
 		return commit_ignore;
 	if (revs->line_level_traverse && !want_ancestry(revs)) {
diff --git a/revision.h b/revision.h
index e6be3c8..fbb068d 100644
--- a/revision.h
+++ b/revision.h
@@ -44,9 +44,6 @@
 /*
  * Indicates object was reached by traversal. i.e. not given by user on
  * command-line or stdin.
- * NEEDSWORK: NOT_USER_GIVEN doesn't apply to commits because we only support
- * filtering trees and blobs, but it may be useful to support filtering commits
- * in the future.
  */
 #define NOT_USER_GIVEN	(1u<<25)
 #define TRACK_LINEAR	(1u<<26)
@@ -148,6 +145,7 @@
 			edge_hint_aggressive:1,
 			limited:1,
 			unpacked:1,
+			no_kept_objects:1,
 			boundary:2,
 			count:1,
 			left_right:1,
@@ -195,10 +193,10 @@
 			/* Diff-merge flags */
 			explicit_diff_merges: 1,
 			merges_need_diff: 1,
+			merges_imply_patch:1,
 			separate_merges: 1,
 			combine_merges:1,
 			combined_all_paths:1,
-			combined_imply_patch:1,
 			dense_combined_merges:1,
 			first_parent_merges:1;
 
@@ -217,7 +215,8 @@
 			missing_newline:1,
 			date_mode_explicit:1,
 			preserve_subject:1,
-			encode_email_headers:1;
+			encode_email_headers:1,
+			include_header:1;
 	unsigned int	disable_stdin:1;
 	/* --show-linear-break */
 	unsigned int	track_linear:1,
@@ -235,7 +234,7 @@
 	const char	*mime_boundary;
 	const char	*patch_suffix;
 	int		numbered_files;
-	int		reroll_count;
+	const char	*reroll_count;
 	char		*message_id;
 	struct ident_split from_ident;
 	struct string_list *ref_message_ids;
@@ -264,6 +263,7 @@
 	int min_parents;
 	int max_parents;
 	int (*include_check)(struct commit *, void *);
+	int (*include_check_obj)(struct object *obj, void *);
 	void *include_check_data;
 
 	/* diff info for patches and for paths limiting */
@@ -317,6 +317,9 @@
 	 * This is loaded from the commit-graph being used.
 	 */
 	struct bloom_filter_settings *bloom_filter_settings;
+
+	/* misc. flags related to '--no-kept-objects' */
+	unsigned keep_pack_cache_flags;
 };
 
 int ref_excluded(struct string_list *, const char *path);
diff --git a/run-command.c b/run-command.c
index 509841b..f72e72c 100644
--- a/run-command.c
+++ b/run-command.c
@@ -11,9 +11,8 @@
 
 void child_process_init(struct child_process *child)
 {
-	memset(child, 0, sizeof(*child));
-	strvec_init(&child->args);
-	strvec_init(&child->env_array);
+	struct child_process blank = CHILD_PROCESS_INIT;
+	memcpy(child, &blank, sizeof(*child));
 }
 
 void child_process_clear(struct child_process *child)
@@ -993,6 +992,7 @@
 	int ret = wait_or_whine(cmd->pid, cmd->argv[0], 0);
 	trace2_child_exit(cmd, ret);
 	child_process_clear(cmd);
+	invalidate_lstat_cache();
 	return ret;
 }
 
@@ -1294,13 +1294,19 @@
 int finish_async(struct async *async)
 {
 #ifdef NO_PTHREADS
-	return wait_or_whine(async->pid, "child process", 0);
+	int ret = wait_or_whine(async->pid, "child process", 0);
+
+	invalidate_lstat_cache();
+
+	return ret;
 #else
 	void *ret = (void *)(intptr_t)(-1);
 
 	if (pthread_join(async->tid, &ret))
 		error("pthread_join failed");
+	invalidate_lstat_cache();
 	return (int)(intptr_t)ret;
+
 #endif
 }
 
@@ -1631,8 +1637,8 @@
 	pp->nr_processes = 0;
 	pp->output_owner = 0;
 	pp->shutdown = 0;
-	pp->children = xcalloc(n, sizeof(*pp->children));
-	pp->pfd = xcalloc(n, sizeof(*pp->pfd));
+	CALLOC_ARRAY(pp->children, n);
+	CALLOC_ARRAY(pp->pfd, n);
 	strbuf_init(&pp->buffered_output, 0);
 
 	for (i = 0; i < n; i++) {
@@ -1885,3 +1891,15 @@
 
 	return run_command(&maint);
 }
+
+void prepare_other_repo_env(struct strvec *env_array, const char *new_git_dir)
+{
+	const char * const *var;
+
+	for (var = local_repo_env; *var; var++) {
+		if (strcmp(*var, CONFIG_DATA_ENVIRONMENT) &&
+		    strcmp(*var, CONFIG_COUNT_ENVIRONMENT))
+			strvec_push(env_array, *var);
+	}
+	strvec_pushf(env_array, "%s=%s", GIT_DIR_ENVIRONMENT, new_git_dir);
+}
diff --git a/run-command.h b/run-command.h
index d08414a..af12967 100644
--- a/run-command.h
+++ b/run-command.h
@@ -141,7 +141,10 @@
 	void *clean_on_exit_handler_cbdata;
 };
 
-#define CHILD_PROCESS_INIT { NULL, STRVEC_INIT, STRVEC_INIT }
+#define CHILD_PROCESS_INIT { \
+	.args = STRVEC_INIT, \
+	.env_array = STRVEC_INIT, \
+}
 
 /**
  * The functions: child_process_init, start_command, finish_command,
@@ -483,4 +486,14 @@
 			       task_finished_fn, void *pp_cb,
 			       const char *tr2_category, const char *tr2_label);
 
+/**
+ * Convenience function which prepares env_array for a command to be run in a
+ * new repo. This adds all GIT_* environment variables to env_array with the
+ * exception of GIT_CONFIG_PARAMETERS and GIT_CONFIG_COUNT (which cause the
+ * corresponding environment variables to be unset in the subprocess) and adds
+ * an environment variable pointing to new_git_dir. See local_repo_env in
+ * cache.h for more information.
+ */
+void prepare_other_repo_env(struct strvec *env_array, const char *new_git_dir);
+
 #endif
diff --git a/send-pack.c b/send-pack.c
index 9045f8a..5a79e0e 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -56,7 +56,9 @@
 /*
  * Make a pack stream and spit it out into file descriptor fd
  */
-static int pack_objects(int fd, struct ref *refs, struct oid_array *extra, struct send_pack_args *args)
+static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
+			struct oid_array *negotiated,
+			struct send_pack_args *args)
 {
 	/*
 	 * The child becomes pack-objects --revs; we feed
@@ -94,8 +96,10 @@
 	 * parameters by writing to the pipe.
 	 */
 	po_in = xfdopen(po.in, "w");
-	for (i = 0; i < extra->nr; i++)
-		feed_object(&extra->oid[i], po_in, 1);
+	for (i = 0; i < advertised->nr; i++)
+		feed_object(&advertised->oid[i], po_in, 1);
+	for (i = 0; i < negotiated->nr; i++)
+		feed_object(&negotiated->oid[i], po_in, 1);
 
 	while (refs) {
 		if (!is_null_oid(&refs->old_oid))
@@ -188,13 +192,13 @@
 			}
 			if (new_report) {
 				if (!hint->report) {
-					hint->report = xcalloc(1, sizeof(struct ref_push_report));
+					CALLOC_ARRAY(hint->report, 1);
 					report = hint->report;
 				} else {
 					report = hint->report;
 					while (report->next)
 						report = report->next;
-					report->next = xcalloc(1, sizeof(struct ref_push_report));
+					CALLOC_ARRAY(report->next, 1);
 					report = report->next;
 				}
 				new_report = 0;
@@ -409,11 +413,55 @@
 	}
 }
 
+static void get_commons_through_negotiation(const char *url,
+					    const struct ref *remote_refs,
+					    struct oid_array *commons)
+{
+	struct child_process child = CHILD_PROCESS_INIT;
+	const struct ref *ref;
+	int len = the_hash_algo->hexsz + 1; /* hash + NL */
+
+	child.git_cmd = 1;
+	child.no_stdin = 1;
+	child.out = -1;
+	strvec_pushl(&child.args, "fetch", "--negotiate-only", NULL);
+	for (ref = remote_refs; ref; ref = ref->next)
+		strvec_pushf(&child.args, "--negotiation-tip=%s", oid_to_hex(&ref->new_oid));
+	strvec_push(&child.args, url);
+
+	if (start_command(&child))
+		die(_("send-pack: unable to fork off fetch subprocess"));
+
+	do {
+		char hex_hash[GIT_MAX_HEXSZ + 1];
+		int read_len = read_in_full(child.out, hex_hash, len);
+		struct object_id oid;
+		const char *end;
+
+		if (!read_len)
+			break;
+		if (read_len != len)
+			die("invalid length read %d", read_len);
+		if (parse_oid_hex(hex_hash, &oid, &end) || *end != '\n')
+			die("invalid hash");
+		oid_array_append(commons, &oid);
+	} while (1);
+
+	if (finish_command(&child)) {
+		/*
+		 * The information that push negotiation provides is useful but
+		 * not mandatory.
+		 */
+		warning(_("push negotiation failed; proceeding anyway with push"));
+	}
+}
+
 int send_pack(struct send_pack_args *args,
 	      int fd[], struct child_process *conn,
 	      struct ref *remote_refs,
 	      struct oid_array *extra_have)
 {
+	struct oid_array commons = OID_ARRAY_INIT;
 	int in = fd[0];
 	int out = fd[1];
 	struct strbuf req_buf = STRBUF_INIT;
@@ -426,6 +474,7 @@
 	int quiet_supported = 0;
 	int agent_supported = 0;
 	int advertise_sid = 0;
+	int push_negotiate = 0;
 	int use_atomic = 0;
 	int atomic_supported = 0;
 	int use_push_options = 0;
@@ -437,6 +486,16 @@
 	const char *push_cert_nonce = NULL;
 	struct packet_reader reader;
 
+	if (!remote_refs) {
+		fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
+			"Perhaps you should specify a branch.\n");
+		return 0;
+	}
+
+	git_config_get_bool("push.negotiate", &push_negotiate);
+	if (push_negotiate)
+		get_commons_through_negotiation(args->url, remote_refs, &commons);
+
 	git_config_get_bool("transfer.advertisesid", &advertise_sid);
 
 	/* Does the other end support the reporting? */
@@ -481,11 +540,6 @@
 		}
 	}
 
-	if (!remote_refs) {
-		fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
-			"Perhaps you should specify a branch.\n");
-		return 0;
-	}
 	if (args->atomic && !atomic_supported)
 		die(_("the receiving end does not support --atomic push"));
 
@@ -625,7 +679,7 @@
 			   PACKET_READ_DIE_ON_ERR_PACKET);
 
 	if (need_pack_data && cmds_sent) {
-		if (pack_objects(out, remote_refs, extra_have, args) < 0) {
+		if (pack_objects(out, remote_refs, extra_have, &commons, args) < 0) {
 			if (args->stateless_rpc)
 				close(out);
 			if (git_connection_is_socket(conn))
diff --git a/sequencer.c b/sequencer.c
index d2332d3..7f07cd0 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -164,6 +164,7 @@
 static GIT_PATH_FUNC(rebase_path_strategy_opts, "rebase-merge/strategy_opts")
 static GIT_PATH_FUNC(rebase_path_allow_rerere_autoupdate, "rebase-merge/allow_rerere_autoupdate")
 static GIT_PATH_FUNC(rebase_path_reschedule_failed_exec, "rebase-merge/reschedule-failed-exec")
+static GIT_PATH_FUNC(rebase_path_no_reschedule_failed_exec, "rebase-merge/no-reschedule-failed-exec")
 static GIT_PATH_FUNC(rebase_path_drop_redundant_commits, "rebase-merge/drop_redundant_commits")
 static GIT_PATH_FUNC(rebase_path_keep_redundant_commits, "rebase-merge/keep_redundant_commits")
 
@@ -524,7 +525,7 @@
 	if (!transaction ||
 	    ref_transaction_update(transaction, "HEAD",
 				   to, unborn && !is_rebase_i(opts) ?
-				   &null_oid : from,
+				   null_oid() : from,
 				   0, sb.buf, &err) ||
 	    ref_transaction_commit(transaction, &err)) {
 		ref_transaction_free(transaction);
@@ -1131,7 +1132,7 @@
 	transaction = ref_transaction_begin(err);
 	if (!transaction ||
 	    ref_transaction_update(transaction, "HEAD", new_head,
-				   old_head ? &old_head->object.oid : &null_oid,
+				   old_head ? &old_head->object.oid : null_oid(),
 				   0, sb.buf, err) ||
 	    ref_transaction_commit(transaction, err)) {
 		ret = -1;
@@ -1726,13 +1727,183 @@
 	}
 }
 
+enum todo_item_flags {
+	TODO_EDIT_MERGE_MSG    = (1 << 0),
+	TODO_REPLACE_FIXUP_MSG = (1 << 1),
+	TODO_EDIT_FIXUP_MSG    = (1 << 2),
+};
+
+static const char first_commit_msg_str[] = N_("This is the 1st commit message:");
+static const char nth_commit_msg_fmt[] = N_("This is the commit message #%d:");
+static const char skip_first_commit_msg_str[] = N_("The 1st commit message will be skipped:");
+static const char skip_nth_commit_msg_fmt[] = N_("The commit message #%d will be skipped:");
+static const char combined_commit_msg_fmt[] = N_("This is a combination of %d commits.");
+
+static int is_fixup_flag(enum todo_command command, unsigned flag)
+{
+	return command == TODO_FIXUP && ((flag & TODO_REPLACE_FIXUP_MSG) ||
+					 (flag & TODO_EDIT_FIXUP_MSG));
+}
+
+/*
+ * Wrapper around strbuf_add_commented_lines() which avoids double
+ * commenting commit subjects.
+ */
+static void add_commented_lines(struct strbuf *buf, const void *str, size_t len)
+{
+	const char *s = str;
+	while (len > 0 && s[0] == comment_line_char) {
+		size_t count;
+		const char *n = memchr(s, '\n', len);
+		if (!n)
+			count = len;
+		else
+			count = n - s + 1;
+		strbuf_add(buf, s, count);
+		s += count;
+		len -= count;
+	}
+	strbuf_add_commented_lines(buf, s, len);
+}
+
+/* Does the current fixup chain contain a squash command? */
+static int seen_squash(struct replay_opts *opts)
+{
+	return starts_with(opts->current_fixups.buf, "squash") ||
+		strstr(opts->current_fixups.buf, "\nsquash");
+}
+
+static void update_comment_bufs(struct strbuf *buf1, struct strbuf *buf2, int n)
+{
+	strbuf_setlen(buf1, 2);
+	strbuf_addf(buf1, _(nth_commit_msg_fmt), n);
+	strbuf_addch(buf1, '\n');
+	strbuf_setlen(buf2, 2);
+	strbuf_addf(buf2, _(skip_nth_commit_msg_fmt), n);
+	strbuf_addch(buf2, '\n');
+}
+
+/*
+ * Comment out any un-commented commit messages, updating the message comments
+ * to say they will be skipped but do not comment out the empty lines that
+ * surround commit messages and their comments.
+ */
+static void update_squash_message_for_fixup(struct strbuf *msg)
+{
+	void (*copy_lines)(struct strbuf *, const void *, size_t) = strbuf_add;
+	struct strbuf buf1 = STRBUF_INIT, buf2 = STRBUF_INIT;
+	const char *s, *start;
+	char *orig_msg;
+	size_t orig_msg_len;
+	int i = 1;
+
+	strbuf_addf(&buf1, "# %s\n", _(first_commit_msg_str));
+	strbuf_addf(&buf2, "# %s\n", _(skip_first_commit_msg_str));
+	s = start = orig_msg = strbuf_detach(msg, &orig_msg_len);
+	while (s) {
+		const char *next;
+		size_t off;
+		if (skip_prefix(s, buf1.buf, &next)) {
+			/*
+			 * Copy the last message, preserving the blank line
+			 * preceding the current line
+			 */
+			off = (s > start + 1 && s[-2] == '\n') ? 1 : 0;
+			copy_lines(msg, start, s - start - off);
+			if (off)
+				strbuf_addch(msg, '\n');
+			/*
+			 * The next message needs to be commented out but the
+			 * message header is already commented out so just copy
+			 * it and the blank line that follows it.
+			 */
+			strbuf_addbuf(msg, &buf2);
+			if (*next == '\n')
+				strbuf_addch(msg, *next++);
+			start = s = next;
+			copy_lines = add_commented_lines;
+			update_comment_bufs(&buf1, &buf2, ++i);
+		} else if (skip_prefix(s, buf2.buf, &next)) {
+			off = (s > start + 1 && s[-2] == '\n') ? 1 : 0;
+			copy_lines(msg, start, s - start - off);
+			start = s - off;
+			s = next;
+			copy_lines = strbuf_add;
+			update_comment_bufs(&buf1, &buf2, ++i);
+		} else {
+			s = strchr(s, '\n');
+			if (s)
+				s++;
+		}
+	}
+	copy_lines(msg, start, orig_msg_len - (start - orig_msg));
+	free(orig_msg);
+	strbuf_release(&buf1);
+	strbuf_release(&buf2);
+}
+
+static int append_squash_message(struct strbuf *buf, const char *body,
+			 enum todo_command command, struct replay_opts *opts,
+			 unsigned flag)
+{
+	const char *fixup_msg;
+	size_t commented_len = 0, fixup_off;
+	/*
+	 * amend is non-interactive and not normally used with fixup!
+	 * or squash! commits, so only comment out those subjects when
+	 * squashing commit messages.
+	 */
+	if (starts_with(body, "amend!") ||
+	    ((command == TODO_SQUASH || seen_squash(opts)) &&
+	     (starts_with(body, "squash!") || starts_with(body, "fixup!"))))
+		commented_len = commit_subject_length(body);
+
+	strbuf_addf(buf, "\n%c ", comment_line_char);
+	strbuf_addf(buf, _(nth_commit_msg_fmt),
+		    ++opts->current_fixup_count + 1);
+	strbuf_addstr(buf, "\n\n");
+	strbuf_add_commented_lines(buf, body, commented_len);
+	/* buf->buf may be reallocated so store an offset into the buffer */
+	fixup_off = buf->len;
+	strbuf_addstr(buf, body + commented_len);
+
+	/* fixup -C after squash behaves like squash */
+	if (is_fixup_flag(command, flag) && !seen_squash(opts)) {
+		/*
+		 * We're replacing the commit message so we need to
+		 * append the Signed-off-by: trailer if the user
+		 * requested '--signoff'.
+		 */
+		if (opts->signoff)
+			append_signoff(buf, 0, 0);
+
+		if ((command == TODO_FIXUP) &&
+		    (flag & TODO_REPLACE_FIXUP_MSG) &&
+		    (file_exists(rebase_path_fixup_msg()) ||
+		     !file_exists(rebase_path_squash_msg()))) {
+			fixup_msg = skip_blank_lines(buf->buf + fixup_off);
+			if (write_message(fixup_msg, strlen(fixup_msg),
+					rebase_path_fixup_msg(), 0) < 0)
+				return error(_("cannot write '%s'"),
+					rebase_path_fixup_msg());
+		} else {
+			unlink(rebase_path_fixup_msg());
+		}
+	} else  {
+		unlink(rebase_path_fixup_msg());
+	}
+
+	return 0;
+}
+
 static int update_squash_messages(struct repository *r,
 				  enum todo_command command,
 				  struct commit *commit,
-				  struct replay_opts *opts)
+				  struct replay_opts *opts,
+				  unsigned flag)
 {
 	struct strbuf buf = STRBUF_INIT;
-	int res;
+	int res = 0;
 	const char *message, *body;
 	const char *encoding = get_commit_output_encoding();
 
@@ -1748,10 +1919,12 @@
 			buf.buf : strchrnul(buf.buf, '\n');
 
 		strbuf_addf(&header, "%c ", comment_line_char);
-		strbuf_addf(&header, _("This is a combination of %d commits."),
+		strbuf_addf(&header, _(combined_commit_msg_fmt),
 			    opts->current_fixup_count + 2);
 		strbuf_splice(&buf, 0, eol - buf.buf, header.buf, header.len);
 		strbuf_release(&header);
+		if (is_fixup_flag(command, flag) && !seen_squash(opts))
+			update_squash_message_for_fixup(&buf);
 	} else {
 		struct object_id head;
 		struct commit *head_commit;
@@ -1765,19 +1938,22 @@
 			return error(_("could not read HEAD's commit message"));
 
 		find_commit_subject(head_message, &body);
-		if (write_message(body, strlen(body),
-				  rebase_path_fixup_msg(), 0)) {
+		if (command == TODO_FIXUP && !flag && write_message(body, strlen(body),
+							rebase_path_fixup_msg(), 0) < 0) {
 			unuse_commit_buffer(head_commit, head_message);
-			return error(_("cannot write '%s'"),
-				     rebase_path_fixup_msg());
+			return error(_("cannot write '%s'"), rebase_path_fixup_msg());
 		}
-
 		strbuf_addf(&buf, "%c ", comment_line_char);
-		strbuf_addf(&buf, _("This is a combination of %d commits."), 2);
+		strbuf_addf(&buf, _(combined_commit_msg_fmt), 2);
 		strbuf_addf(&buf, "\n%c ", comment_line_char);
-		strbuf_addstr(&buf, _("This is the 1st commit message:"));
+		strbuf_addstr(&buf, is_fixup_flag(command, flag) ?
+			      _(skip_first_commit_msg_str) :
+			      _(first_commit_msg_str));
 		strbuf_addstr(&buf, "\n\n");
-		strbuf_addstr(&buf, body);
+		if (is_fixup_flag(command, flag))
+			strbuf_add_commented_lines(&buf, body, strlen(body));
+		else
+			strbuf_addstr(&buf, body);
 
 		unuse_commit_buffer(head_commit, head_message);
 	}
@@ -1787,16 +1963,11 @@
 			     oid_to_hex(&commit->object.oid));
 	find_commit_subject(message, &body);
 
-	if (command == TODO_SQUASH) {
-		unlink(rebase_path_fixup_msg());
-		strbuf_addf(&buf, "\n%c ", comment_line_char);
-		strbuf_addf(&buf, _("This is the commit message #%d:"),
-			    ++opts->current_fixup_count + 1);
-		strbuf_addstr(&buf, "\n\n");
-		strbuf_addstr(&buf, body);
+	if (command == TODO_SQUASH || is_fixup_flag(command, flag)) {
+		res = append_squash_message(&buf, body, command, opts, flag);
 	} else if (command == TODO_FIXUP) {
 		strbuf_addf(&buf, "\n%c ", comment_line_char);
-		strbuf_addf(&buf, _("The commit message #%d will be skipped:"),
+		strbuf_addf(&buf, _(skip_nth_commit_msg_fmt),
 			    ++opts->current_fixup_count + 1);
 		strbuf_addstr(&buf, "\n\n");
 		strbuf_add_commented_lines(&buf, body, strlen(body));
@@ -1804,7 +1975,9 @@
 		return error(_("unknown command: %d"), command);
 	unuse_commit_buffer(commit, message);
 
-	res = write_message(buf.buf, buf.len, rebase_path_squash_msg(), 0);
+	if (!res)
+		res = write_message(buf.buf, buf.len, rebase_path_squash_msg(),
+				    0);
 	strbuf_release(&buf);
 
 	if (!res) {
@@ -1860,14 +2033,24 @@
 		flush_rewritten_pending();
 }
 
+static int should_edit(struct replay_opts *opts) {
+	if (opts->edit < 0)
+		/*
+		 * Note that we only handle the case of non-conflicted
+		 * commits; continue_single_pick() handles the conflicted
+		 * commits itself instead of calling this function.
+		 */
+		return (opts->action == REPLAY_REVERT && isatty(0)) ? 1 : 0;
+	return opts->edit;
+}
+
 static int do_pick_commit(struct repository *r,
-			  enum todo_command command,
-			  struct commit *commit,
+			  struct todo_item *item,
 			  struct replay_opts *opts,
 			  int final_fixup, int *check_todo)
 {
-	unsigned int flags = opts->edit ? EDIT_MSG : 0;
-	const char *msg_file = opts->edit ? NULL : git_path_merge_msg(r);
+	unsigned int flags = should_edit(opts) ? EDIT_MSG : 0;
+	const char *msg_file = should_edit(opts) ? NULL : git_path_merge_msg(r);
 	struct object_id head;
 	struct commit *base, *next, *parent;
 	const char *base_label, *next_label;
@@ -1875,6 +2058,8 @@
 	struct commit_message msg = { NULL, NULL, NULL, NULL };
 	struct strbuf msgbuf = STRBUF_INIT;
 	int res, unborn = 0, reword = 0, allow, drop_commit;
+	enum todo_command command = item->command;
+	struct commit *commit = item->commit;
 
 	if (opts->no_commit) {
 		/*
@@ -2004,7 +2189,8 @@
 	if (command == TODO_REWORD)
 		reword = 1;
 	else if (is_fixup(command)) {
-		if (update_squash_messages(r, command, commit, opts))
+		if (update_squash_messages(r, command, commit,
+					   opts, item->flags))
 			return -1;
 		flags |= AMEND_MSG;
 		if (!final_fixup)
@@ -2096,6 +2282,7 @@
 		refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD",
 				NULL, 0);
 		unlink(git_path_merge_msg(r));
+		unlink(git_path_auto_merge(r));
 		fprintf(stderr,
 			_("dropping %s %s -- patch contents already upstream\n"),
 			oid_to_hex(&commit->object.oid), msg.subject);
@@ -2169,10 +2356,6 @@
 	return 0;
 }
 
-enum todo_item_flags {
-	TODO_EDIT_MERGE_MSG = 1
-};
-
 void todo_list_release(struct todo_list *todo_list)
 {
 	strbuf_release(&todo_list->buf);
@@ -2259,6 +2442,18 @@
 		return 0;
 	}
 
+	if (item->command == TODO_FIXUP) {
+		if (skip_prefix(bol, "-C", &bol) &&
+		   (*bol == ' ' || *bol == '\t')) {
+			bol += strspn(bol, " \t");
+			item->flags |= TODO_REPLACE_FIXUP_MSG;
+		} else if (skip_prefix(bol, "-c", &bol) &&
+				  (*bol == ' ' || *bol == '\t')) {
+			bol += strspn(bol, " \t");
+			item->flags |= TODO_EDIT_FIXUP_MSG;
+		}
+	}
+
 	if (item->command == TODO_MERGE) {
 		if (skip_prefix(bol, "-C", &bol))
 			bol += strspn(bol, " \t");
@@ -2451,6 +2646,8 @@
 		need_cleanup = 1;
 	}
 
+	unlink(git_path_auto_merge(r));
+
 	if (!need_cleanup)
 		return;
 
@@ -2672,6 +2869,8 @@
 
 		if (file_exists(rebase_path_reschedule_failed_exec()))
 			opts->reschedule_failed_exec = 1;
+		else if (file_exists(rebase_path_no_reschedule_failed_exec()))
+			opts->reschedule_failed_exec = 0;
 
 		if (file_exists(rebase_path_drop_redundant_commits()))
 			opts->drop_redundant_commits = 1;
@@ -2772,6 +2971,8 @@
 		write_file(rebase_path_ignore_date(), "%s", "");
 	if (opts->reschedule_failed_exec)
 		write_file(rebase_path_reschedule_failed_exec(), "%s", "");
+	else
+		write_file(rebase_path_no_reschedule_failed_exec(), "%s", "");
 
 	return 0;
 }
@@ -3101,9 +3302,9 @@
 	if (opts->no_commit)
 		res |= git_config_set_in_file_gently(opts_file,
 					"options.no-commit", "true");
-	if (opts->edit)
-		res |= git_config_set_in_file_gently(opts_file,
-					"options.edit", "true");
+	if (opts->edit >= 0)
+		res |= git_config_set_in_file_gently(opts_file, "options.edit",
+						     opts->edit ? "true" : "false");
 	if (opts->allow_empty)
 		res |= git_config_set_in_file_gently(opts_file,
 					"options.allow-empty", "true");
@@ -3320,6 +3521,7 @@
 	return status;
 }
 
+__attribute__((format (printf, 2, 3)))
 static int safe_append(const char *filename, const char *fmt, ...)
 {
 	va_list ap;
@@ -3397,8 +3599,27 @@
 	return ret;
 }
 
+__attribute__((format (printf, 3, 4)))
 static const char *reflog_message(struct replay_opts *opts,
-	const char *sub_action, const char *fmt, ...);
+	const char *sub_action, const char *fmt, ...)
+{
+	va_list ap;
+	static struct strbuf buf = STRBUF_INIT;
+	char *reflog_action = getenv(GIT_REFLOG_ACTION);
+
+	va_start(ap, fmt);
+	strbuf_reset(&buf);
+	strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
+	if (sub_action)
+		strbuf_addf(&buf, " (%s)", sub_action);
+	if (fmt) {
+		strbuf_addstr(&buf, ": ");
+		strbuf_vaddf(&buf, fmt, ap);
+	}
+	va_end(ap);
+
+	return buf.buf;
+}
 
 static int do_reset(struct repository *r,
 		    const char *name, int len,
@@ -3977,27 +4198,6 @@
 	return apply_save_autostash_oid(stash_oid, 1);
 }
 
-static const char *reflog_message(struct replay_opts *opts,
-	const char *sub_action, const char *fmt, ...)
-{
-	va_list ap;
-	static struct strbuf buf = STRBUF_INIT;
-	char *reflog_action = getenv(GIT_REFLOG_ACTION);
-
-	va_start(ap, fmt);
-	strbuf_reset(&buf);
-	strbuf_addstr(&buf, reflog_action ? reflog_action : action_name(opts));
-	if (sub_action)
-		strbuf_addf(&buf, " (%s)", sub_action);
-	if (fmt) {
-		strbuf_addstr(&buf, ": ");
-		strbuf_vaddf(&buf, fmt, ap);
-	}
-	va_end(ap);
-
-	return buf.buf;
-}
-
 static int run_git_checkout(struct repository *r, struct replay_opts *opts,
 			    const char *commit, const char *action)
 {
@@ -4077,7 +4277,7 @@
 	prev_reflog_action = xstrdup(getenv(GIT_REFLOG_ACTION));
 	if (opts->allow_ff)
 		assert(!(opts->signoff || opts->no_commit ||
-			 opts->record_origin || opts->edit ||
+			 opts->record_origin || should_edit(opts) ||
 			 opts->committer_date_is_author_date ||
 			 opts->ignore_date));
 	if (read_and_refresh_cache(r, opts))
@@ -4111,6 +4311,7 @@
 			unlink(rebase_path_stopped_sha());
 			unlink(rebase_path_amend());
 			unlink(git_path_merge_head(r));
+			unlink(git_path_auto_merge(r));
 			delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
 
 			if (item->command == TODO_BREAK) {
@@ -4124,8 +4325,8 @@
 				setenv(GIT_REFLOG_ACTION, reflog_message(opts,
 					command_to_string(item->command), NULL),
 					1);
-			res = do_pick_commit(r, item->command, item->commit,
-					     opts, is_final_fixup(todo_list),
+			res = do_pick_commit(r, item, opts,
+					     is_final_fixup(todo_list),
 					     &check_todo);
 			if (is_rebase_i(opts))
 				setenv(GIT_REFLOG_ACTION, prev_reflog_action, 1);
@@ -4370,14 +4571,33 @@
 	return sequencer_remove_state(opts);
 }
 
-static int continue_single_pick(struct repository *r)
+static int continue_single_pick(struct repository *r, struct replay_opts *opts)
 {
-	const char *argv[] = { "commit", NULL };
+	struct strvec argv = STRVEC_INIT;
+	int ret;
 
 	if (!refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD") &&
 	    !refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD"))
 		return error(_("no cherry-pick or revert in progress"));
-	return run_command_v_opt(argv, RUN_GIT_CMD);
+
+	strvec_push(&argv, "commit");
+
+	/*
+	 * continue_single_pick() handles the case of recovering from a
+	 * conflict.  should_edit() doesn't handle that case; for a conflict,
+	 * we want to edit if the user asked for it, or if they didn't specify
+	 * and stdin is a tty.
+	 */
+	if (!opts->edit || (opts->edit < 0 && !isatty(0)))
+		/*
+		 * Include --cleanup=strip as well because we don't want the
+		 * "# Conflicts:" messages.
+		 */
+		strvec_pushl(&argv, "--no-edit", "--cleanup=strip", NULL);
+
+	ret = run_command_v_opt(argv.v, RUN_GIT_CMD);
+	strvec_clear(&argv);
+	return ret;
 }
 
 static int commit_staged_changes(struct repository *r,
@@ -4505,6 +4725,7 @@
 		return error(_("could not commit staged changes."));
 	unlink(rebase_path_amend());
 	unlink(git_path_merge_head(r));
+	unlink(git_path_auto_merge(r));
 	if (final_fixup) {
 		unlink(rebase_path_fixup_msg());
 		unlink(rebase_path_squash_msg());
@@ -4547,7 +4768,7 @@
 			goto release_todo_list;
 		}
 	} else if (!file_exists(get_todo_path(opts)))
-		return continue_single_pick(r);
+		return continue_single_pick(r, opts);
 	else if ((res = read_populate_todo(r, &todo_list, opts)))
 		goto release_todo_list;
 
@@ -4556,7 +4777,7 @@
 		if (refs_ref_exists(get_main_ref_store(r),
 				    "CHERRY_PICK_HEAD") ||
 		    refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD")) {
-			res = continue_single_pick(r);
+			res = continue_single_pick(r, opts);
 			if (res)
 				goto release_todo_list;
 		}
@@ -4587,11 +4808,14 @@
 		       struct replay_opts *opts)
 {
 	int check_todo;
+	struct todo_item item;
+
+	item.command = opts->action == REPLAY_PICK ?
+			TODO_PICK : TODO_REVERT;
+	item.commit = cmit;
 
 	setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
-	return do_pick_commit(r, opts->action == REPLAY_PICK ?
-			      TODO_PICK : TODO_REVERT, cmit, opts, 0,
-			      &check_todo);
+	return do_pick_commit(r, &item, opts, 0, &check_todo);
 }
 
 int sequencer_pick_revisions(struct repository *r,
@@ -5171,7 +5395,7 @@
 	int i, insert, nr = 0, alloc = 0;
 	struct todo_item *items = NULL, *base_items = NULL;
 
-	base_items = xcalloc(commands->nr, sizeof(struct todo_item));
+	CALLOC_ARRAY(base_items, commands->nr);
 	for (i = 0; i < commands->nr; i++) {
 		size_t command_len = strlen(commands->items[i].string);
 
@@ -5262,6 +5486,14 @@
 					  short_commit_name(item->commit) :
 					  oid_to_hex(&item->commit->object.oid);
 
+			if (item->command == TODO_FIXUP) {
+				if (item->flags & TODO_EDIT_FIXUP_MSG)
+					strbuf_addstr(buf, " -c");
+				else if (item->flags & TODO_REPLACE_FIXUP_MSG) {
+					strbuf_addstr(buf, " -C");
+				}
+			}
+
 			if (item->command == TODO_MERGE) {
 				if (item->flags & TODO_EDIT_MERGE_MSG)
 					strbuf_addstr(buf, " -c");
@@ -5462,6 +5694,12 @@
 
 define_commit_slab(commit_todo_item, struct todo_item *);
 
+static int skip_fixupish(const char *subject, const char **p) {
+	return skip_prefix(subject, "fixup! ", p) ||
+	       skip_prefix(subject, "amend! ", p) ||
+	       skip_prefix(subject, "squash! ", p);
+}
+
 /*
  * Rearrange the todo list that has both "pick commit-id msg" and "pick
  * commit-id fixup!/squash! msg" in it so that the latter is put immediately
@@ -5520,15 +5758,13 @@
 		format_subject(&buf, subject, " ");
 		subject = subjects[i] = strbuf_detach(&buf, &subject_len);
 		unuse_commit_buffer(item->commit, commit_buffer);
-		if ((skip_prefix(subject, "fixup! ", &p) ||
-		     skip_prefix(subject, "squash! ", &p))) {
+		if (skip_fixupish(subject, &p)) {
 			struct commit *commit2;
 
 			for (;;) {
 				while (isspace(*p))
 					p++;
-				if (!skip_prefix(p, "fixup! ", &p) &&
-				    !skip_prefix(p, "squash! ", &p))
+				if (!skip_fixupish(p, &p))
 					break;
 			}
 
@@ -5558,9 +5794,14 @@
 		}
 		if (i2 >= 0) {
 			rearranged = 1;
-			todo_list->items[i].command =
-				starts_with(subject, "fixup!") ?
-				TODO_FIXUP : TODO_SQUASH;
+			if (starts_with(subject, "fixup!")) {
+				todo_list->items[i].command = TODO_FIXUP;
+			} else if (starts_with(subject, "amend!")) {
+				todo_list->items[i].command = TODO_FIXUP;
+				todo_list->items[i].flags = TODO_REPLACE_FIXUP_MSG;
+			} else {
+				todo_list->items[i].command = TODO_SQUASH;
+			}
 			if (tail[i2] < 0) {
 				next[i] = next[i2];
 				next[i2] = i;
diff --git a/sequencer.h b/sequencer.h
index f8b2e4a..d57d8ea 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -31,8 +31,10 @@
 struct replay_opts {
 	enum replay_action action;
 
-	/* Boolean options */
+	/* Tri-state options: unspecified, false, or true */
 	int edit;
+
+	/* Boolean options */
 	int record_origin;
 	int no_commit;
 	int signoff;
@@ -71,7 +73,7 @@
 	/* Only used by REPLAY_NONE */
 	struct rev_info *revs;
 };
-#define REPLAY_OPTS_INIT { .action = -1, .current_fixups = STRBUF_INIT }
+#define REPLAY_OPTS_INIT { .edit = -1, .action = -1, .current_fixups = STRBUF_INIT }
 
 /*
  * Note that ordering matters in this enum. Not only must it match the mapping
diff --git a/serve.c b/serve.c
index ac20c72..f11c0e0 100644
--- a/serve.c
+++ b/serve.c
@@ -5,6 +5,7 @@
 #include "version.h"
 #include "strvec.h"
 #include "ls-refs.h"
+#include "protocol-caps.h"
 #include "serve.h"
 #include "upload-pack.h"
 
@@ -78,6 +79,7 @@
 	{ "server-option", always_advertise, NULL },
 	{ "object-format", object_format_advertise, NULL },
 	{ "session-id", session_id_advertise, NULL },
+	{ "object-info", always_advertise, cap_object_info },
 };
 
 static void advertise_capabilities(void)
@@ -256,7 +258,7 @@
 			state = PROCESS_REQUEST_DONE;
 			break;
 		case PACKET_READ_RESPONSE_END:
-			BUG("unexpected stateless separator packet");
+			BUG("unexpected response end packet");
 		}
 	}
 
diff --git a/server-info.c b/server-info.c
index bae2cdf..7701d7c 100644
--- a/server-info.c
+++ b/server-info.c
@@ -27,6 +27,7 @@
 	return uic->old_fp == NULL;
 }
 
+__attribute__((format (printf, 2, 3)))
 static int uic_printf(struct update_info_ctx *uic, const char *fmt, ...)
 {
 	va_list ap;
@@ -296,7 +297,7 @@
 
 		i = num_pack++;
 		ALLOC_GROW(info, num_pack, alloc);
-		info[i] = xcalloc(1, sizeof(struct pack_info));
+		CALLOC_ARRAY(info[i], 1);
 		info[i]->p = p;
 		info[i]->old_num = -1;
 	}
diff --git a/setup.c b/setup.c
index c04cd25..eb9367c 100644
--- a/setup.c
+++ b/setup.c
@@ -468,8 +468,6 @@
 			data->precious_objects = git_config_bool(var, value);
 			return EXTENSION_OK;
 		} else if (!strcmp(ext, "partialclone")) {
-			if (!value)
-				return config_error_nonbool(var);
 			data->partial_clone = xstrdup(value);
 			return EXTENSION_OK;
 		} else if (!strcmp(ext, "worktreeconfig")) {
@@ -566,7 +564,6 @@
 	}
 
 	repository_format_precious_objects = candidate->precious_objects;
-	set_repository_format_partial_clone(candidate->partial_clone);
 	repository_format_worktree_config = candidate->worktree_config;
 	string_list_clear(&candidate->unknown_extensions, 0);
 	string_list_clear(&candidate->v1_only_extensions, 0);
@@ -666,7 +663,9 @@
 	if (format->version >= 1 && format->unknown_extensions.nr) {
 		int i;
 
-		strbuf_addstr(err, _("unknown repository extensions found:"));
+		strbuf_addstr(err, Q_("unknown repository extension found:",
+				      "unknown repository extensions found:",
+				      format->unknown_extensions.nr));
 
 		for (i = 0; i < format->unknown_extensions.nr; i++)
 			strbuf_addf(err, "\n\t%s",
@@ -678,7 +677,9 @@
 		int i;
 
 		strbuf_addstr(err,
-			      _("repo version is 0, but v1-only extensions found:"));
+			      Q_("repo version is 0, but v1-only extension found:",
+				 "repo version is 0, but v1-only extensions found:",
+				 format->v1_only_extensions.nr));
 
 		for (i = 0; i < format->v1_only_extensions.nr; i++)
 			strbuf_addf(err, "\n\t%s",
@@ -1193,6 +1194,11 @@
 		return -1;
 	}
 
+	/* take ownership of candidate.partial_clone */
+	the_repository->repository_format_partial_clone =
+		candidate.partial_clone;
+	candidate.partial_clone = NULL;
+
 	clear_repository_format(&candidate);
 	return 0;
 }
@@ -1274,18 +1280,10 @@
 	 * the GIT_PREFIX environment variable must always match. For details
 	 * see Documentation/config/alias.txt.
 	 */
-	if (nongit_ok && *nongit_ok) {
+	if (nongit_ok && *nongit_ok)
 		startup_info->have_repository = 0;
-		startup_info->prefix = NULL;
-		setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
-	} else {
+	else
 		startup_info->have_repository = 1;
-		startup_info->prefix = prefix;
-		if (prefix)
-			setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
-		else
-			setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
-	}
 
 	/*
 	 * Not all paths through the setup code will call 'set_git_dir()' (which
@@ -1308,9 +1306,30 @@
 				gitdir = DEFAULT_GIT_DIR_ENVIRONMENT;
 			setup_git_env(gitdir);
 		}
-		if (startup_info->have_repository)
+		if (startup_info->have_repository) {
 			repo_set_hash_algo(the_repository, repo_fmt.hash_algo);
+			/* take ownership of repo_fmt.partial_clone */
+			the_repository->repository_format_partial_clone =
+				repo_fmt.partial_clone;
+			repo_fmt.partial_clone = NULL;
+		}
 	}
+	/*
+	 * Since precompose_string_if_needed() needs to look at
+	 * the core.precomposeunicode configuration, this
+	 * has to happen after the above block that finds
+	 * out where the repository is, i.e. a preparation
+	 * for calling git_config_get_bool().
+	 */
+	if (prefix) {
+		prefix = precompose_string_if_needed(prefix);
+		startup_info->prefix = prefix;
+		setenv(GIT_PREFIX_ENVIRONMENT, prefix, 1);
+	} else {
+		startup_info->prefix = NULL;
+		setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
+	}
+
 
 	strbuf_release(&dir);
 	strbuf_release(&gitdir);
@@ -1378,6 +1397,8 @@
 	check_repository_format_gently(get_git_dir(), fmt, NULL);
 	startup_info->have_repository = 1;
 	repo_set_hash_algo(the_repository, fmt->hash_algo);
+	the_repository->repository_format_partial_clone =
+		xstrdup_or_null(fmt->partial_clone);
 	clear_repository_format(&repo_fmt);
 }
 
diff --git a/sh-i18n--envsubst.c b/sh-i18n--envsubst.c
index e7430b9..6cd307a 100644
--- a/sh-i18n--envsubst.c
+++ b/sh-i18n--envsubst.c
@@ -104,12 +104,12 @@
   if (ferror (stderr) || fflush (stderr))
     {
       fclose (stderr);
-      exit (EXIT_FAILURE);
+      return (EXIT_FAILURE);
     }
   if (fclose (stderr) && errno != EBADF)
-    exit (EXIT_FAILURE);
+    return (EXIT_FAILURE);
 
-  exit (EXIT_SUCCESS);
+  return (EXIT_SUCCESS);
 }
 
 /* Parse the string and invoke the callback each time a $VARIABLE or
diff --git a/shell.c b/shell.c
index cef7ffd..811e13b 100644
--- a/shell.c
+++ b/shell.c
@@ -177,7 +177,7 @@
 		default:
 			continue;
 		}
-		exit(cmd->exec(cmd->name, arg));
+		return cmd->exec(cmd->name, arg);
 	}
 
 	cd_to_homedir();
diff --git a/sideband.c b/sideband.c
index 6f9e026..85bddfd 100644
--- a/sideband.c
+++ b/sideband.c
@@ -183,8 +183,31 @@
 		while ((brk = strpbrk(b, "\n\r"))) {
 			int linelen = brk - b;
 
+			/*
+			 * For message accross packet boundary, there would have
+			 * a nonempty "scratch" buffer from last call of this
+			 * function, and there may have a leading CR/LF in "buf".
+			 * For this case we should add a clear-to-eol suffix to
+			 * clean leftover letters we previously have written on
+			 * the same line.
+			 */
+			if (scratch->len && !linelen)
+				strbuf_addstr(scratch, suffix);
+
 			if (!scratch->len)
 				strbuf_addstr(scratch, DISPLAY_PREFIX);
+
+			/*
+			 * A use case that we should not add clear-to-eol suffix
+			 * to empty lines:
+			 *
+			 * For progress reporting we may receive a bunch of
+			 * percentage updates followed by '\r' to remain on the
+			 * same line, and at the end receive a single '\n' to
+			 * move to the next line. We should preserve the final
+			 * status report line by not appending clear-to-eol
+			 * suffix to this single line break.
+			 */
 			if (linelen > 0) {
 				maybe_colorize_sideband(scratch, b, linelen);
 				strbuf_addstr(scratch, suffix);
diff --git a/simple-ipc.h b/simple-ipc.h
new file mode 100644
index 0000000..2c48a5e
--- /dev/null
+++ b/simple-ipc.h
@@ -0,0 +1,235 @@
+#ifndef GIT_SIMPLE_IPC_H
+#define GIT_SIMPLE_IPC_H
+
+/*
+ * See Documentation/technical/api-simple-ipc.txt
+ */
+
+#ifdef SUPPORTS_SIMPLE_IPC
+#include "pkt-line.h"
+
+/*
+ * Simple IPC Client Side API.
+ */
+
+enum ipc_active_state {
+	/*
+	 * The pipe/socket exists and the daemon is waiting for connections.
+	 */
+	IPC_STATE__LISTENING = 0,
+
+	/*
+	 * The pipe/socket exists, but the daemon is not listening.
+	 * Perhaps it is very busy.
+	 * Perhaps the daemon died without deleting the path.
+	 * Perhaps it is shutting down and draining existing clients.
+	 * Perhaps it is dead, but other clients are lingering and
+	 * still holding a reference to the pathname.
+	 */
+	IPC_STATE__NOT_LISTENING,
+
+	/*
+	 * The requested pathname is bogus and no amount of retries
+	 * will fix that.
+	 */
+	IPC_STATE__INVALID_PATH,
+
+	/*
+	 * The requested pathname is not found.  This usually means
+	 * that there is no daemon present.
+	 */
+	IPC_STATE__PATH_NOT_FOUND,
+
+	IPC_STATE__OTHER_ERROR,
+};
+
+struct ipc_client_connect_options {
+	/*
+	 * Spin under timeout if the server is running but can't
+	 * accept our connection yet.  This should always be set
+	 * unless you just want to poke the server and see if it
+	 * is alive.
+	 */
+	unsigned int wait_if_busy:1;
+
+	/*
+	 * Spin under timeout if the pipe/socket is not yet present
+	 * on the file system.  This is useful if we just started
+	 * the service and need to wait for it to become ready.
+	 */
+	unsigned int wait_if_not_found:1;
+
+	/*
+	 * Disallow chdir() when creating a Unix domain socket.
+	 */
+	unsigned int uds_disallow_chdir:1;
+};
+
+#define IPC_CLIENT_CONNECT_OPTIONS_INIT { \
+	.wait_if_busy = 0, \
+	.wait_if_not_found = 0, \
+	.uds_disallow_chdir = 0, \
+}
+
+/*
+ * Determine if a server is listening on this named pipe or socket using
+ * platform-specific logic.  This might just probe the filesystem or it
+ * might make a trivial connection to the server using this pathname.
+ */
+enum ipc_active_state ipc_get_active_state(const char *path);
+
+struct ipc_client_connection {
+	int fd;
+};
+
+/*
+ * Try to connect to the daemon on the named pipe or socket.
+ *
+ * Returns IPC_STATE__LISTENING and a connection handle.
+ *
+ * Otherwise, returns info to help decide whether to retry or to
+ * spawn/respawn the server.
+ */
+enum ipc_active_state ipc_client_try_connect(
+	const char *path,
+	const struct ipc_client_connect_options *options,
+	struct ipc_client_connection **p_connection);
+
+void ipc_client_close_connection(struct ipc_client_connection *connection);
+
+/*
+ * Used by the client to synchronously send and receive a message with
+ * the server on the provided client connection.
+ *
+ * Returns 0 when successful.
+ *
+ * Calls error() and returns non-zero otherwise.
+ */
+int ipc_client_send_command_to_connection(
+	struct ipc_client_connection *connection,
+	const char *message, struct strbuf *answer);
+
+/*
+ * Used by the client to synchronously connect and send and receive a
+ * message to the server listening at the given path.
+ *
+ * Returns 0 when successful.
+ *
+ * Calls error() and returns non-zero otherwise.
+ */
+int ipc_client_send_command(const char *path,
+			    const struct ipc_client_connect_options *options,
+			    const char *message, struct strbuf *answer);
+
+/*
+ * Simple IPC Server Side API.
+ */
+
+struct ipc_server_reply_data;
+
+typedef int (ipc_server_reply_cb)(struct ipc_server_reply_data *,
+				  const char *response,
+				  size_t response_len);
+
+/*
+ * Prototype for an application-supplied callback to process incoming
+ * client IPC messages and compose a reply.  The `application_cb` should
+ * use the provided `reply_cb` and `reply_data` to send an IPC response
+ * back to the client.  The `reply_cb` callback can be called multiple
+ * times for chunking purposes.  A reply message is optional and may be
+ * omitted if not necessary for the application.
+ *
+ * The return value from the application callback is ignored.
+ * The value `SIMPLE_IPC_QUIT` can be used to shutdown the server.
+ */
+typedef int (ipc_server_application_cb)(void *application_data,
+					const char *request,
+					ipc_server_reply_cb *reply_cb,
+					struct ipc_server_reply_data *reply_data);
+
+#define SIMPLE_IPC_QUIT -2
+
+/*
+ * Opaque instance data to represent an IPC server instance.
+ */
+struct ipc_server_data;
+
+/*
+ * Control parameters for the IPC server instance.
+ * Use this to hide platform-specific settings.
+ */
+struct ipc_server_opts
+{
+	int nr_threads;
+
+	/*
+	 * Disallow chdir() when creating a Unix domain socket.
+	 */
+	unsigned int uds_disallow_chdir:1;
+};
+
+/*
+ * Start an IPC server instance in one or more background threads
+ * and return a handle to the pool.
+ *
+ * Returns 0 if the asynchronous server pool was started successfully.
+ * Returns -1 if not.
+ * Returns -2 if we could not startup because another server is using
+ * the socket or named pipe.
+ *
+ * When a client IPC message is received, the `application_cb` will be
+ * called (possibly on a random thread) to handle the message and
+ * optionally compose a reply message.
+ */
+int ipc_server_run_async(struct ipc_server_data **returned_server_data,
+			 const char *path, const struct ipc_server_opts *opts,
+			 ipc_server_application_cb *application_cb,
+			 void *application_data);
+
+/*
+ * Gently signal the IPC server pool to shutdown.  No new client
+ * connections will be accepted, but existing connections will be
+ * allowed to complete.
+ */
+int ipc_server_stop_async(struct ipc_server_data *server_data);
+
+/*
+ * Block the calling thread until all threads in the IPC server pool
+ * have completed and been joined.
+ */
+int ipc_server_await(struct ipc_server_data *server_data);
+
+/*
+ * Close and free all resource handles associated with the IPC server
+ * pool.
+ */
+void ipc_server_free(struct ipc_server_data *server_data);
+
+/*
+ * Run an IPC server instance and block the calling thread of the
+ * current process.  It does not return until the IPC server has
+ * either shutdown or had an unrecoverable error.
+ *
+ * The IPC server handles incoming IPC messages from client processes
+ * and may use one or more background threads as necessary.
+ *
+ * Returns 0 after the server has completed successfully.
+ * Returns -1 if the server cannot be started.
+ * Returns -2 if we could not startup because another server is using
+ * the socket or named pipe.
+ *
+ * When a client IPC message is received, the `application_cb` will be
+ * called (possibly on a random thread) to handle the message and
+ * optionally compose a reply message.
+ *
+ * Note that `ipc_server_run()` is a synchronous wrapper around the
+ * above asynchronous routines.  It effectively hides all of the
+ * server state and thread details from the caller and presents a
+ * simple synchronous interface.
+ */
+int ipc_server_run(const char *path, const struct ipc_server_opts *opts,
+		   ipc_server_application_cb *application_cb,
+		   void *application_data);
+
+#endif /* SUPPORTS_SIMPLE_IPC */
+#endif /* GIT_SIMPLE_IPC_H */
diff --git a/sparse-index.c b/sparse-index.c
new file mode 100644
index 0000000..53c8f71
--- /dev/null
+++ b/sparse-index.c
@@ -0,0 +1,374 @@
+#include "cache.h"
+#include "repository.h"
+#include "sparse-index.h"
+#include "tree.h"
+#include "pathspec.h"
+#include "trace2.h"
+#include "cache-tree.h"
+#include "config.h"
+#include "dir.h"
+#include "fsmonitor.h"
+
+static struct cache_entry *construct_sparse_dir_entry(
+				struct index_state *istate,
+				const char *sparse_dir,
+				struct cache_tree *tree)
+{
+	struct cache_entry *de;
+
+	de = make_cache_entry(istate, S_IFDIR, &tree->oid, sparse_dir, 0, 0);
+
+	de->ce_flags |= CE_SKIP_WORKTREE;
+	return de;
+}
+
+/*
+ * Returns the number of entries "inserted" into the index.
+ */
+static int convert_to_sparse_rec(struct index_state *istate,
+				 int num_converted,
+				 int start, int end,
+				 const char *ct_path, size_t ct_pathlen,
+				 struct cache_tree *ct)
+{
+	int i, can_convert = 1;
+	int start_converted = num_converted;
+	enum pattern_match_result match;
+	int dtype = DT_UNKNOWN;
+	struct strbuf child_path = STRBUF_INIT;
+	struct pattern_list *pl = istate->sparse_checkout_patterns;
+
+	/*
+	 * Is the current path outside of the sparse cone?
+	 * Then check if the region can be replaced by a sparse
+	 * directory entry (everything is sparse and merged).
+	 */
+	match = path_matches_pattern_list(ct_path, ct_pathlen,
+					  NULL, &dtype, pl, istate);
+	if (match != NOT_MATCHED)
+		can_convert = 0;
+
+	for (i = start; can_convert && i < end; i++) {
+		struct cache_entry *ce = istate->cache[i];
+
+		if (ce_stage(ce) ||
+		    S_ISGITLINK(ce->ce_mode) ||
+		    !(ce->ce_flags & CE_SKIP_WORKTREE))
+			can_convert = 0;
+	}
+
+	if (can_convert) {
+		struct cache_entry *se;
+		se = construct_sparse_dir_entry(istate, ct_path, ct);
+
+		istate->cache[num_converted++] = se;
+		return 1;
+	}
+
+	for (i = start; i < end; ) {
+		int count, span, pos = -1;
+		const char *base, *slash;
+		struct cache_entry *ce = istate->cache[i];
+
+		/*
+		 * Detect if this is a normal entry outside of any subtree
+		 * entry.
+		 */
+		base = ce->name + ct_pathlen;
+		slash = strchr(base, '/');
+
+		if (slash)
+			pos = cache_tree_subtree_pos(ct, base, slash - base);
+
+		if (pos < 0) {
+			istate->cache[num_converted++] = ce;
+			i++;
+			continue;
+		}
+
+		strbuf_setlen(&child_path, 0);
+		strbuf_add(&child_path, ce->name, slash - ce->name + 1);
+
+		span = ct->down[pos]->cache_tree->entry_count;
+		count = convert_to_sparse_rec(istate,
+					      num_converted, i, i + span,
+					      child_path.buf, child_path.len,
+					      ct->down[pos]->cache_tree);
+		num_converted += count;
+		i += span;
+	}
+
+	strbuf_release(&child_path);
+	return num_converted - start_converted;
+}
+
+int set_sparse_index_config(struct repository *repo, int enable)
+{
+	int res;
+	char *config_path = repo_git_path(repo, "config.worktree");
+	res = git_config_set_in_file_gently(config_path,
+					    "index.sparse",
+					    enable ? "true" : NULL);
+	free(config_path);
+
+	prepare_repo_settings(repo);
+	repo->settings.sparse_index = enable;
+	return res;
+}
+
+static int index_has_unmerged_entries(struct index_state *istate)
+{
+	int i;
+	for (i = 0; i < istate->cache_nr; i++) {
+		if (ce_stage(istate->cache[i]))
+			return 1;
+	}
+
+	return 0;
+}
+
+int convert_to_sparse(struct index_state *istate)
+{
+	int test_env;
+	if (istate->split_index || istate->sparse_index ||
+	    !core_apply_sparse_checkout || !core_sparse_checkout_cone)
+		return 0;
+
+	if (!istate->repo)
+		istate->repo = the_repository;
+
+	/*
+	 * The GIT_TEST_SPARSE_INDEX environment variable triggers the
+	 * index.sparse config variable to be on.
+	 */
+	test_env = git_env_bool("GIT_TEST_SPARSE_INDEX", -1);
+	if (test_env >= 0)
+		set_sparse_index_config(istate->repo, test_env);
+
+	/*
+	 * Only convert to sparse if index.sparse is set.
+	 */
+	prepare_repo_settings(istate->repo);
+	if (!istate->repo->settings.sparse_index)
+		return 0;
+
+	if (!istate->sparse_checkout_patterns) {
+		istate->sparse_checkout_patterns = xcalloc(1, sizeof(struct pattern_list));
+		if (get_sparse_checkout_patterns(istate->sparse_checkout_patterns) < 0)
+			return 0;
+	}
+
+	if (!istate->sparse_checkout_patterns->use_cone_patterns) {
+		warning(_("attempting to use sparse-index without cone mode"));
+		return -1;
+	}
+
+	/*
+	 * NEEDSWORK: If we have unmerged entries, then stay full.
+	 * Unmerged entries prevent the cache-tree extension from working.
+	 */
+	if (index_has_unmerged_entries(istate))
+		return 0;
+
+	if (cache_tree_update(istate, 0)) {
+		warning(_("unable to update cache-tree, staying full"));
+		return -1;
+	}
+
+	remove_fsmonitor(istate);
+
+	trace2_region_enter("index", "convert_to_sparse", istate->repo);
+	istate->cache_nr = convert_to_sparse_rec(istate,
+						 0, 0, istate->cache_nr,
+						 "", 0, istate->cache_tree);
+
+	/* Clear and recompute the cache-tree */
+	cache_tree_free(&istate->cache_tree);
+	cache_tree_update(istate, 0);
+
+	istate->fsmonitor_has_run_once = 0;
+	FREE_AND_NULL(istate->fsmonitor_dirty);
+	FREE_AND_NULL(istate->fsmonitor_last_update);
+
+	istate->sparse_index = 1;
+	trace2_region_leave("index", "convert_to_sparse", istate->repo);
+	return 0;
+}
+
+static void set_index_entry(struct index_state *istate, int nr, struct cache_entry *ce)
+{
+	ALLOC_GROW(istate->cache, nr + 1, istate->cache_alloc);
+
+	istate->cache[nr] = ce;
+	add_name_hash(istate, ce);
+}
+
+static int add_path_to_index(const struct object_id *oid,
+			     struct strbuf *base, const char *path,
+			     unsigned int mode, void *context)
+{
+	struct index_state *istate = (struct index_state *)context;
+	struct cache_entry *ce;
+	size_t len = base->len;
+
+	if (S_ISDIR(mode))
+		return READ_TREE_RECURSIVE;
+
+	strbuf_addstr(base, path);
+
+	ce = make_cache_entry(istate, mode, oid, base->buf, 0, 0);
+	ce->ce_flags |= CE_SKIP_WORKTREE | CE_EXTENDED;
+	set_index_entry(istate, istate->cache_nr++, ce);
+
+	strbuf_setlen(base, len);
+	return 0;
+}
+
+void ensure_full_index(struct index_state *istate)
+{
+	int i;
+	struct index_state *full;
+	struct strbuf base = STRBUF_INIT;
+
+	if (!istate || !istate->sparse_index)
+		return;
+
+	if (!istate->repo)
+		istate->repo = the_repository;
+
+	trace2_region_enter("index", "ensure_full_index", istate->repo);
+
+	/* initialize basics of new index */
+	full = xcalloc(1, sizeof(struct index_state));
+	memcpy(full, istate, sizeof(struct index_state));
+
+	/* then change the necessary things */
+	full->sparse_index = 0;
+	full->cache_alloc = (3 * istate->cache_alloc) / 2;
+	full->cache_nr = 0;
+	ALLOC_ARRAY(full->cache, full->cache_alloc);
+
+	for (i = 0; i < istate->cache_nr; i++) {
+		struct cache_entry *ce = istate->cache[i];
+		struct tree *tree;
+		struct pathspec ps;
+
+		if (!S_ISSPARSEDIR(ce->ce_mode)) {
+			set_index_entry(full, full->cache_nr++, ce);
+			continue;
+		}
+		if (!(ce->ce_flags & CE_SKIP_WORKTREE))
+			warning(_("index entry is a directory, but not sparse (%08x)"),
+				ce->ce_flags);
+
+		/* recursively walk into cd->name */
+		tree = lookup_tree(istate->repo, &ce->oid);
+
+		memset(&ps, 0, sizeof(ps));
+		ps.recursive = 1;
+		ps.has_wildcard = 1;
+		ps.max_depth = -1;
+
+		strbuf_setlen(&base, 0);
+		strbuf_add(&base, ce->name, strlen(ce->name));
+
+		read_tree_at(istate->repo, tree, &base, &ps,
+			     add_path_to_index, full);
+
+		/* free directory entries. full entries are re-used */
+		discard_cache_entry(ce);
+	}
+
+	/* Copy back into original index. */
+	memcpy(&istate->name_hash, &full->name_hash, sizeof(full->name_hash));
+	istate->sparse_index = 0;
+	free(istate->cache);
+	istate->cache = full->cache;
+	istate->cache_nr = full->cache_nr;
+	istate->cache_alloc = full->cache_alloc;
+	istate->fsmonitor_has_run_once = 0;
+	FREE_AND_NULL(istate->fsmonitor_dirty);
+	FREE_AND_NULL(istate->fsmonitor_last_update);
+
+	strbuf_release(&base);
+	free(full);
+
+	/* Clear and recompute the cache-tree */
+	cache_tree_free(&istate->cache_tree);
+	cache_tree_update(istate, 0);
+
+	trace2_region_leave("index", "ensure_full_index", istate->repo);
+}
+
+/*
+ * This static global helps avoid infinite recursion between
+ * expand_to_path() and index_file_exists().
+ */
+static int in_expand_to_path = 0;
+
+void expand_to_path(struct index_state *istate,
+		    const char *path, size_t pathlen, int icase)
+{
+	struct strbuf path_mutable = STRBUF_INIT;
+	size_t substr_len;
+
+	/* prevent extra recursion */
+	if (in_expand_to_path)
+		return;
+
+	if (!istate || !istate->sparse_index)
+		return;
+
+	if (!istate->repo)
+		istate->repo = the_repository;
+
+	in_expand_to_path = 1;
+
+	/*
+	 * We only need to actually expand a region if the
+	 * following are both true:
+	 *
+	 * 1. 'path' is not already in the index.
+	 * 2. Some parent directory of 'path' is a sparse directory.
+	 */
+
+	if (index_file_exists(istate, path, pathlen, icase))
+		goto cleanup;
+
+	strbuf_add(&path_mutable, path, pathlen);
+	strbuf_addch(&path_mutable, '/');
+
+	/* Check the name hash for all parent directories */
+	substr_len = 0;
+	while (substr_len < pathlen) {
+		char temp;
+		char *replace = strchr(path_mutable.buf + substr_len, '/');
+
+		if (!replace)
+			break;
+
+		/* replace the character _after_ the slash */
+		replace++;
+		temp = *replace;
+		*replace = '\0';
+		if (index_file_exists(istate, path_mutable.buf,
+				      path_mutable.len, icase)) {
+			/*
+			 * We found a parent directory in the name-hash
+			 * hashtable, because only sparse directory entries
+			 * have a trailing '/' character.  Since "path" wasn't
+			 * in the index, perhaps it exists within this
+			 * sparse-directory.  Expand accordingly.
+			 */
+			ensure_full_index(istate);
+			break;
+		}
+
+		*replace = temp;
+		substr_len = replace - path_mutable.buf;
+	}
+
+cleanup:
+	strbuf_release(&path_mutable);
+	in_expand_to_path = 0;
+}
diff --git a/sparse-index.h b/sparse-index.h
new file mode 100644
index 0000000..1115a0d
--- /dev/null
+++ b/sparse-index.h
@@ -0,0 +1,23 @@
+#ifndef SPARSE_INDEX_H__
+#define SPARSE_INDEX_H__
+
+struct index_state;
+int convert_to_sparse(struct index_state *istate);
+
+/*
+ * Some places in the codebase expect to search for a specific path.
+ * This path might be outside of the sparse-checkout definition, in
+ * which case a sparse-index may not contain a path for that index.
+ *
+ * Given an index and a path, check to see if a leading directory for
+ * 'path' exists in the index as a sparse directory. In that case,
+ * expand that sparse directory to a full range of cache entries and
+ * populate the index accordingly.
+ */
+void expand_to_path(struct index_state *istate,
+		    const char *path, size_t pathlen, int icase);
+
+struct repository;
+int set_sparse_index_config(struct repository *repo, int enable);
+
+#endif
diff --git a/split-index.c b/split-index.c
index c0e8ad6..8e52e89 100644
--- a/split-index.c
+++ b/split-index.c
@@ -5,7 +5,7 @@
 struct split_index *init_split_index(struct index_state *istate)
 {
 	if (!istate->split_index) {
-		istate->split_index = xcalloc(1, sizeof(*istate->split_index));
+		CALLOC_ARRAY(istate->split_index, 1);
 		istate->split_index->refcount = 1;
 	}
 	return istate->split_index;
@@ -21,7 +21,7 @@
 	if (sz < the_hash_algo->rawsz)
 		return error("corrupt link extension (too short)");
 	si = init_split_index(istate);
-	hashcpy(si->base_oid.hash, data);
+	oidread(&si->base_oid, data);
 	data += the_hash_algo->rawsz;
 	sz -= the_hash_algo->rawsz;
 	if (!sz)
@@ -87,7 +87,7 @@
 		mem_pool_combine(istate->ce_mem_pool, istate->split_index->base->ce_mem_pool);
 	}
 
-	si->base = xcalloc(1, sizeof(*si->base));
+	CALLOC_ARRAY(si->base, 1);
 	si->base->version = istate->version;
 	/* zero timestamp disables racy test in ce_write_index() */
 	si->base->timestamp = istate->timestamp;
@@ -207,7 +207,8 @@
 	b->ce_flags &= ondisk_flags;
 	ret = memcmp(&a->ce_stat_data, &b->ce_stat_data,
 		     offsetof(struct cache_entry, name) -
-		     offsetof(struct cache_entry, ce_stat_data));
+		     offsetof(struct cache_entry, oid)) ||
+		!oideq(&a->oid, &b->oid);
 	a->ce_flags = ce_flags;
 	b->ce_flags = base_flags;
 
diff --git a/strbuf.c b/strbuf.c
index e3397cc..c8a5789 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -52,8 +52,8 @@
 
 void strbuf_init(struct strbuf *sb, size_t hint)
 {
-	sb->alloc = sb->len = 0;
-	sb->buf = strbuf_slopbuf;
+	struct strbuf blank = STRBUF_INIT;
+	memcpy(sb, &blank, sizeof(*sb));
 	if (hint)
 		strbuf_grow(sb, hint);
 }
@@ -209,6 +209,8 @@
 {
 	struct strbuf **s = sbs;
 
+	if (!s)
+		return;
 	while (*s) {
 		strbuf_release(*s);
 		free(*s++);
diff --git a/strbuf.h b/strbuf.h
index 223ee20..5b1113a 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -263,6 +263,7 @@
 void strbuf_vinsertf(struct strbuf *sb, size_t pos, const char *fmt,
 		     va_list ap);
 
+__attribute__((format (printf, 3, 4)))
 void strbuf_insertf(struct strbuf *sb, size_t pos, const char *fmt, ...);
 
 /**
@@ -337,8 +338,8 @@
  * placeholder is unknown, then the percent sign is copied, too.
  *
  * In order to facilitate caching and to make it possible to give
- * parameters to the callback, `strbuf_expand()` passes a context pointer,
- * which can be used by the programmer of the callback as she sees fit.
+ * parameters to the callback, `strbuf_expand()` passes a context
+ * pointer with any kind of data.
  */
 typedef size_t (*expand_fn_t) (struct strbuf *sb,
 			       const char *placeholder,
diff --git a/streaming.c b/streaming.c
index 800f07a..5f480ad 100644
--- a/streaming.c
+++ b/streaming.c
@@ -8,54 +8,13 @@
 #include "replace-object.h"
 #include "packfile.h"
 
-enum input_source {
-	stream_error = -1,
-	incore = 0,
-	loose = 1,
-	pack_non_delta = 2
-};
-
 typedef int (*open_istream_fn)(struct git_istream *,
 			       struct repository *,
-			       struct object_info *,
 			       const struct object_id *,
 			       enum object_type *);
 typedef int (*close_istream_fn)(struct git_istream *);
 typedef ssize_t (*read_istream_fn)(struct git_istream *, char *, size_t);
 
-struct stream_vtbl {
-	close_istream_fn close;
-	read_istream_fn read;
-};
-
-#define open_method_decl(name) \
-	int open_istream_ ##name \
-	(struct git_istream *st, struct repository *r, \
-	 struct object_info *oi, const struct object_id *oid, \
-	 enum object_type *type)
-
-#define close_method_decl(name) \
-	int close_istream_ ##name \
-	(struct git_istream *st)
-
-#define read_method_decl(name) \
-	ssize_t read_istream_ ##name \
-	(struct git_istream *st, char *buf, size_t sz)
-
-/* forward declaration */
-static open_method_decl(incore);
-static open_method_decl(loose);
-static open_method_decl(pack_non_delta);
-static struct git_istream *attach_stream_filter(struct git_istream *st,
-						struct stream_filter *filter);
-
-
-static open_istream_fn open_istream_tbl[] = {
-	open_istream_incore,
-	open_istream_loose,
-	open_istream_pack_non_delta,
-};
-
 #define FILTER_BUFFER (1024*16)
 
 struct filtered_istream {
@@ -69,7 +28,10 @@
 };
 
 struct git_istream {
-	const struct stream_vtbl *vtbl;
+	open_istream_fn open;
+	close_istream_fn close;
+	read_istream_fn read;
+
 	unsigned long size; /* inflated size of full object */
 	git_zstream z;
 	enum { z_unused, z_used, z_done, z_error } z_state;
@@ -97,80 +59,6 @@
 	} u;
 };
 
-int close_istream(struct git_istream *st)
-{
-	int r = st->vtbl->close(st);
-	free(st);
-	return r;
-}
-
-ssize_t read_istream(struct git_istream *st, void *buf, size_t sz)
-{
-	return st->vtbl->read(st, buf, sz);
-}
-
-static enum input_source istream_source(struct repository *r,
-					const struct object_id *oid,
-					enum object_type *type,
-					struct object_info *oi)
-{
-	unsigned long size;
-	int status;
-
-	oi->typep = type;
-	oi->sizep = &size;
-	status = oid_object_info_extended(r, oid, oi, 0);
-	if (status < 0)
-		return stream_error;
-
-	switch (oi->whence) {
-	case OI_LOOSE:
-		return loose;
-	case OI_PACKED:
-		if (!oi->u.packed.is_delta && big_file_threshold < size)
-			return pack_non_delta;
-		/* fallthru */
-	default:
-		return incore;
-	}
-}
-
-struct git_istream *open_istream(struct repository *r,
-				 const struct object_id *oid,
-				 enum object_type *type,
-				 unsigned long *size,
-				 struct stream_filter *filter)
-{
-	struct git_istream *st;
-	struct object_info oi = OBJECT_INFO_INIT;
-	const struct object_id *real = lookup_replace_object(r, oid);
-	enum input_source src = istream_source(r, real, type, &oi);
-
-	if (src < 0)
-		return NULL;
-
-	st = xmalloc(sizeof(*st));
-	if (open_istream_tbl[src](st, r, &oi, real, type)) {
-		if (open_istream_incore(st, r, &oi, real, type)) {
-			free(st);
-			return NULL;
-		}
-	}
-	if (filter) {
-		/* Add "&& !is_null_stream_filter(filter)" for performance */
-		struct git_istream *nst = attach_stream_filter(st, filter);
-		if (!nst) {
-			close_istream(st);
-			return NULL;
-		}
-		st = nst;
-	}
-
-	*size = st->size;
-	return st;
-}
-
-
 /*****************************************************************
  *
  * Common helpers
@@ -190,13 +78,14 @@
  *
  *****************************************************************/
 
-static close_method_decl(filtered)
+static int close_istream_filtered(struct git_istream *st)
 {
 	free_stream_filter(st->u.filtered.filter);
 	return close_istream(st->u.filtered.upstream);
 }
 
-static read_method_decl(filtered)
+static ssize_t read_istream_filtered(struct git_istream *st, char *buf,
+				     size_t sz)
 {
 	struct filtered_istream *fs = &(st->u.filtered);
 	size_t filled = 0;
@@ -255,18 +144,14 @@
 	return filled;
 }
 
-static struct stream_vtbl filtered_vtbl = {
-	close_istream_filtered,
-	read_istream_filtered,
-};
-
 static struct git_istream *attach_stream_filter(struct git_istream *st,
 						struct stream_filter *filter)
 {
 	struct git_istream *ifs = xmalloc(sizeof(*ifs));
 	struct filtered_istream *fs = &(ifs->u.filtered);
 
-	ifs->vtbl = &filtered_vtbl;
+	ifs->close = close_istream_filtered;
+	ifs->read = read_istream_filtered;
 	fs->upstream = st;
 	fs->filter = filter;
 	fs->i_end = fs->i_ptr = 0;
@@ -282,7 +167,7 @@
  *
  *****************************************************************/
 
-static read_method_decl(loose)
+static ssize_t read_istream_loose(struct git_istream *st, char *buf, size_t sz)
 {
 	size_t total_read = 0;
 
@@ -327,19 +212,16 @@
 	return total_read;
 }
 
-static close_method_decl(loose)
+static int close_istream_loose(struct git_istream *st)
 {
 	close_deflated_stream(st);
 	munmap(st->u.loose.mapped, st->u.loose.mapsize);
 	return 0;
 }
 
-static struct stream_vtbl loose_vtbl = {
-	close_istream_loose,
-	read_istream_loose,
-};
-
-static open_method_decl(loose)
+static int open_istream_loose(struct git_istream *st, struct repository *r,
+			      const struct object_id *oid,
+			      enum object_type *type)
 {
 	st->u.loose.mapped = map_loose_object(r, oid, &st->u.loose.mapsize);
 	if (!st->u.loose.mapped)
@@ -358,8 +240,9 @@
 	st->u.loose.hdr_used = strlen(st->u.loose.hdr) + 1;
 	st->u.loose.hdr_avail = st->z.total_out;
 	st->z_state = z_used;
+	st->close = close_istream_loose;
+	st->read = read_istream_loose;
 
-	st->vtbl = &loose_vtbl;
 	return 0;
 }
 
@@ -370,7 +253,8 @@
  *
  *****************************************************************/
 
-static read_method_decl(pack_non_delta)
+static ssize_t read_istream_pack_non_delta(struct git_istream *st, char *buf,
+					   size_t sz)
 {
 	size_t total_read = 0;
 
@@ -428,24 +312,20 @@
 	return total_read;
 }
 
-static close_method_decl(pack_non_delta)
+static int close_istream_pack_non_delta(struct git_istream *st)
 {
 	close_deflated_stream(st);
 	return 0;
 }
 
-static struct stream_vtbl pack_non_delta_vtbl = {
-	close_istream_pack_non_delta,
-	read_istream_pack_non_delta,
-};
-
-static open_method_decl(pack_non_delta)
+static int open_istream_pack_non_delta(struct git_istream *st,
+				       struct repository *r,
+				       const struct object_id *oid,
+				       enum object_type *type)
 {
 	struct pack_window *window;
 	enum object_type in_pack_type;
 
-	st->u.in_pack.pack = oi->u.packed.pack;
-	st->u.in_pack.pos = oi->u.packed.offset;
 	window = NULL;
 
 	in_pack_type = unpack_object_header(st->u.in_pack.pack,
@@ -463,7 +343,9 @@
 		break;
 	}
 	st->z_state = z_unused;
-	st->vtbl = &pack_non_delta_vtbl;
+	st->close = close_istream_pack_non_delta;
+	st->read = read_istream_pack_non_delta;
+
 	return 0;
 }
 
@@ -474,13 +356,13 @@
  *
  *****************************************************************/
 
-static close_method_decl(incore)
+static int close_istream_incore(struct git_istream *st)
 {
 	free(st->u.incore.buf);
 	return 0;
 }
 
-static read_method_decl(incore)
+static ssize_t read_istream_incore(struct git_istream *st, char *buf, size_t sz)
 {
 	size_t read_size = sz;
 	size_t remainder = st->size - st->u.incore.read_ptr;
@@ -494,25 +376,105 @@
 	return read_size;
 }
 
-static struct stream_vtbl incore_vtbl = {
-	close_istream_incore,
-	read_istream_incore,
-};
-
-static open_method_decl(incore)
+static int open_istream_incore(struct git_istream *st, struct repository *r,
+			       const struct object_id *oid, enum object_type *type)
 {
 	st->u.incore.buf = read_object_file_extended(r, oid, type, &st->size, 0);
 	st->u.incore.read_ptr = 0;
-	st->vtbl = &incore_vtbl;
+	st->close = close_istream_incore;
+	st->read = read_istream_incore;
 
 	return st->u.incore.buf ? 0 : -1;
 }
 
+/*****************************************************************************
+ * static helpers variables and functions for users of streaming interface
+ *****************************************************************************/
+
+static int istream_source(struct git_istream *st,
+			  struct repository *r,
+			  const struct object_id *oid,
+			  enum object_type *type)
+{
+	unsigned long size;
+	int status;
+	struct object_info oi = OBJECT_INFO_INIT;
+
+	oi.typep = type;
+	oi.sizep = &size;
+	status = oid_object_info_extended(r, oid, &oi, 0);
+	if (status < 0)
+		return status;
+
+	switch (oi.whence) {
+	case OI_LOOSE:
+		st->open = open_istream_loose;
+		return 0;
+	case OI_PACKED:
+		if (!oi.u.packed.is_delta && big_file_threshold < size) {
+			st->u.in_pack.pack = oi.u.packed.pack;
+			st->u.in_pack.pos = oi.u.packed.offset;
+			st->open = open_istream_pack_non_delta;
+			return 0;
+		}
+		/* fallthru */
+	default:
+		st->open = open_istream_incore;
+		return 0;
+	}
+}
 
 /****************************************************************
  * Users of streaming interface
  ****************************************************************/
 
+int close_istream(struct git_istream *st)
+{
+	int r = st->close(st);
+	free(st);
+	return r;
+}
+
+ssize_t read_istream(struct git_istream *st, void *buf, size_t sz)
+{
+	return st->read(st, buf, sz);
+}
+
+struct git_istream *open_istream(struct repository *r,
+				 const struct object_id *oid,
+				 enum object_type *type,
+				 unsigned long *size,
+				 struct stream_filter *filter)
+{
+	struct git_istream *st = xmalloc(sizeof(*st));
+	const struct object_id *real = lookup_replace_object(r, oid);
+	int ret = istream_source(st, r, real, type);
+
+	if (ret) {
+		free(st);
+		return NULL;
+	}
+
+	if (st->open(st, r, real, type)) {
+		if (open_istream_incore(st, r, real, type)) {
+			free(st);
+			return NULL;
+		}
+	}
+	if (filter) {
+		/* Add "&& !is_null_stream_filter(filter)" for performance */
+		struct git_istream *nst = attach_stream_filter(st, filter);
+		if (!nst) {
+			close_istream(st);
+			return NULL;
+		}
+		st = nst;
+	}
+
+	*size = st->size;
+	return st;
+}
+
 int stream_blob_to_fd(int fd, const struct object_id *oid, struct stream_filter *filter,
 		      int can_seek)
 {
diff --git a/string-list.c b/string-list.c
index a917955..43576ad 100644
--- a/string-list.c
+++ b/string-list.c
@@ -1,10 +1,24 @@
 #include "cache.h"
 #include "string-list.h"
 
+void string_list_init_nodup(struct string_list *list)
+{
+	struct string_list blank = STRING_LIST_INIT_NODUP;
+	memcpy(list, &blank, sizeof(*list));
+}
+
+void string_list_init_dup(struct string_list *list)
+{
+	struct string_list blank = STRING_LIST_INIT_DUP;
+	memcpy(list, &blank, sizeof(*list));
+}
+
 void string_list_init(struct string_list *list, int strdup_strings)
 {
-	memset(list, 0, sizeof(*list));
-	list->strdup_strings = strdup_strings;
+	if (strdup_strings)
+		string_list_init_dup(list);
+	else
+		string_list_init_nodup(list);
 }
 
 /* if there is no exact match, point to the index where the entry could be
diff --git a/string-list.h b/string-list.h
index 6c5d274..0d6b469 100644
--- a/string-list.h
+++ b/string-list.h
@@ -91,14 +91,21 @@
 	compare_strings_fn cmp; /* NULL uses strcmp() */
 };
 
-#define STRING_LIST_INIT_NODUP { NULL, 0, 0, 0, NULL }
-#define STRING_LIST_INIT_DUP   { NULL, 0, 0, 1, NULL }
+#define STRING_LIST_INIT_NODUP { 0 }
+#define STRING_LIST_INIT_DUP   { .strdup_strings = 1 }
 
 /* General functions which work with both sorted and unsorted lists. */
 
 /**
- * Initialize the members of the string_list, set `strdup_strings`
- * member according to the value of the second parameter.
+ * Initialize the members of a string_list pointer in the same way as
+ * the corresponding `STRING_LIST_INIT_NODUP` and
+ * `STRING_LIST_INIT_DUP` macros.
+ */
+void string_list_init_nodup(struct string_list *list);
+void string_list_init_dup(struct string_list *list);
+
+/**
+ * TODO remove: For compatibility with any in-flight older API users
  */
 void string_list_init(struct string_list *list, int strdup_strings);
 
diff --git a/strmap.c b/strmap.c
index 4fb9f61..ee48635 100644
--- a/strmap.c
+++ b/strmap.c
@@ -25,7 +25,8 @@
 
 void strmap_init(struct strmap *map)
 {
-	strmap_init_with_options(map, NULL, 1);
+	struct strmap blank = STRMAP_INIT;
+	memcpy(map, &blank, sizeof(*map));
 }
 
 void strmap_init_with_options(struct strmap *map,
diff --git a/strvec.c b/strvec.c
index 21dce0a..61a76ce 100644
--- a/strvec.c
+++ b/strvec.c
@@ -6,9 +6,8 @@
 
 void strvec_init(struct strvec *array)
 {
-	array->v = empty_strvec;
-	array->nr = 0;
-	array->alloc = 0;
+	struct strvec blank = STRVEC_INIT;
+	memcpy(array, &blank, sizeof(*array));
 }
 
 static void strvec_push_nodup(struct strvec *array, const char *value)
diff --git a/submodule-config.c b/submodule-config.c
index f502505..2026120 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -671,7 +671,7 @@
 
 	parameter.cache = repo->submodule_cache;
 	parameter.treeish_name = NULL;
-	parameter.gitmodules_oid = &null_oid;
+	parameter.gitmodules_oid = null_oid();
 	parameter.overwrite = 1;
 
 	return parse_config(var, value, &parameter);
diff --git a/submodule.c b/submodule.c
index 9767ba9..8e611fe 100644
--- a/submodule.c
+++ b/submodule.c
@@ -33,7 +33,7 @@
  * will be disabled because we can't guess what might be configured in
  * .gitmodules unless the user resolves the conflict.
  */
-int is_gitmodules_unmerged(const struct index_state *istate)
+int is_gitmodules_unmerged(struct index_state *istate)
 {
 	int pos = index_name_pos(istate, GITMODULES_FILE, strlen(GITMODULES_FILE));
 	if (pos < 0) { /* .gitmodules not found or isn't merged */
@@ -113,7 +113,7 @@
 	if (is_gitmodules_unmerged(the_repository->index))
 		die(_("Cannot change unmerged .gitmodules, resolve merge conflicts first"));
 
-	submodule = submodule_from_path(the_repository, &null_oid, oldpath);
+	submodule = submodule_from_path(the_repository, null_oid(), oldpath);
 	if (!submodule || !submodule->name) {
 		warning(_("Could not find section in .gitmodules where path=%s"), oldpath);
 		return -1;
@@ -142,7 +142,7 @@
 	if (is_gitmodules_unmerged(the_repository->index))
 		die(_("Cannot change unmerged .gitmodules, resolve merge conflicts first"));
 
-	submodule = submodule_from_path(the_repository, &null_oid, path);
+	submodule = submodule_from_path(the_repository, null_oid(), path);
 	if (!submodule || !submodule->name) {
 		warning(_("Could not find section in .gitmodules where path=%s"), path);
 		return -1;
@@ -188,7 +188,8 @@
 					     const char *path)
 {
 	const struct submodule *submodule = submodule_from_path(the_repository,
-								&null_oid, path);
+								null_oid(),
+								path);
 	if (submodule) {
 		const char *ignore;
 		char *key;
@@ -244,7 +245,7 @@
 	const struct string_list *sl;
 	const struct submodule *module;
 
-	module = submodule_from_path(repo, &null_oid, path);
+	module = submodule_from_path(repo, null_oid(), path);
 
 	/* early return if there isn't a path->module mapping */
 	if (!module)
@@ -301,7 +302,7 @@
 /*
  * Dies if the provided 'prefix' corresponds to an unpopulated submodule
  */
-void die_in_unpopulated_submodule(const struct index_state *istate,
+void die_in_unpopulated_submodule(struct index_state *istate,
 				  const char *prefix)
 {
 	int i, prefixlen;
@@ -331,7 +332,7 @@
 /*
  * Dies if any paths in the provided pathspec descends into a submodule
  */
-void die_path_inside_submodule(const struct index_state *istate,
+void die_path_inside_submodule(struct index_state *istate,
 			       const struct pathspec *ps)
 {
 	int i, j;
@@ -483,27 +484,14 @@
 	strbuf_release(&sb);
 }
 
-static void prepare_submodule_repo_env_no_git_dir(struct strvec *out)
-{
-	const char * const *var;
-
-	for (var = local_repo_env; *var; var++) {
-		if (strcmp(*var, CONFIG_DATA_ENVIRONMENT))
-			strvec_push(out, *var);
-	}
-}
-
 void prepare_submodule_repo_env(struct strvec *out)
 {
-	prepare_submodule_repo_env_no_git_dir(out);
-	strvec_pushf(out, "%s=%s", GIT_DIR_ENVIRONMENT,
-		     DEFAULT_GIT_DIR_ENVIRONMENT);
+	prepare_other_repo_env(out, DEFAULT_GIT_DIR_ENVIRONMENT);
 }
 
 static void prepare_submodule_repo_env_in_gitdir(struct strvec *out)
 {
-	prepare_submodule_repo_env_no_git_dir(out);
-	strvec_pushf(out, "%s=.", GIT_DIR_ENVIRONMENT);
+	prepare_other_repo_env(out, ".");
 }
 
 /*
@@ -745,7 +733,7 @@
 	if (!should_update_submodules())
 		return NULL;
 
-	return submodule_from_path(the_repository, &null_oid, ce->name);
+	return submodule_from_path(the_repository, null_oid(), ce->name);
 }
 
 static struct oid_array *submodule_commits(struct string_list *submodules,
@@ -1037,7 +1025,7 @@
 		const struct submodule *submodule;
 		const char *path = NULL;
 
-		submodule = submodule_from_name(r, &null_oid, name->string);
+		submodule = submodule_from_name(r, null_oid(), name->string);
 		if (submodule)
 			path = submodule->path;
 		else
@@ -1224,7 +1212,7 @@
 		const struct submodule *submodule;
 		const char *path = NULL;
 
-		submodule = submodule_from_name(r, &null_oid, name->string);
+		submodule = submodule_from_name(r, null_oid(), name->string);
 		if (submodule)
 			path = submodule->path;
 		else
@@ -1361,7 +1349,7 @@
 	struct fetch_task *task = xmalloc(sizeof(*task));
 	memset(task, 0, sizeof(*task));
 
-	task->sub = submodule_from_path(r, &null_oid, path);
+	task->sub = submodule_from_path(r, null_oid(), path);
 	if (!task->sub) {
 		/*
 		 * No entry in .gitmodules? Technically not a submodule,
@@ -1917,7 +1905,7 @@
 	if (old_head && !is_submodule_populated_gently(path, error_code_ptr))
 		return 0;
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 
 	if (!sub)
 		BUG("could not get submodule information for '%s'", path);
@@ -2076,7 +2064,7 @@
 
 	real_old_git_dir = real_pathdup(old_git_dir, 1);
 
-	sub = submodule_from_path(the_repository, &null_oid, path);
+	sub = submodule_from_path(the_repository, null_oid(), path);
 	if (!sub)
 		die(_("could not lookup name for submodule '%s'"), path);
 
@@ -2135,7 +2123,7 @@
 		* superproject did not rewrite the git file links yet,
 		* fix it now.
 		*/
-		sub = submodule_from_path(the_repository, &null_oid, path);
+		sub = submodule_from_path(the_repository, null_oid(), path);
 		if (!sub)
 			die(_("could not lookup name for submodule '%s'"), path);
 		connect_work_tree_and_git_dir(path,
@@ -2283,7 +2271,8 @@
 		strbuf_addstr(buf, git_dir);
 	}
 	if (!is_git_directory(buf->buf)) {
-		sub = submodule_from_path(the_repository, &null_oid, submodule);
+		sub = submodule_from_path(the_repository, null_oid(),
+					  submodule);
 		if (!sub) {
 			ret = -1;
 			goto cleanup;
diff --git a/submodule.h b/submodule.h
index 4ac6e31..84640c4 100644
--- a/submodule.h
+++ b/submodule.h
@@ -39,7 +39,7 @@
 };
 #define SUBMODULE_UPDATE_STRATEGY_INIT {SM_UPDATE_UNSPECIFIED, NULL}
 
-int is_gitmodules_unmerged(const struct index_state *istate);
+int is_gitmodules_unmerged(struct index_state *istate);
 int is_writing_gitmodules_ok(void);
 int is_staging_gitmodules_ok(struct index_state *istate);
 int update_path_in_gitmodules(const char *oldpath, const char *newpath);
@@ -60,9 +60,9 @@
  * Otherwise the return error code is the same as of resolve_gitdir_gently.
  */
 int is_submodule_populated_gently(const char *path, int *return_error_code);
-void die_in_unpopulated_submodule(const struct index_state *istate,
+void die_in_unpopulated_submodule(struct index_state *istate,
 				  const char *prefix);
-void die_path_inside_submodule(const struct index_state *istate,
+void die_path_inside_submodule(struct index_state *istate,
 			       const struct pathspec *ps);
 enum submodule_update_type parse_submodule_update_type(const char *value);
 int parse_submodule_update_strategy(const char *value,
diff --git a/symlinks.c b/symlinks.c
index 69d458a..5232d02 100644
--- a/symlinks.c
+++ b/symlinks.c
@@ -1,6 +1,7 @@
 #include "cache.h"
 
-static int threaded_check_leading_path(struct cache_def *cache, const char *name, int len);
+static int threaded_check_leading_path(struct cache_def *cache, const char *name,
+				       int len, int warn_on_lstat_err);
 static int threaded_has_dirs_only_path(struct cache_def *cache, const char *name, int len, int prefix_len);
 
 /*
@@ -72,7 +73,7 @@
 				int prefix_len_stat_func)
 {
 	int match_len, last_slash, last_slash_dir, previous_slash;
-	int save_flags, ret;
+	int save_flags, ret, saved_errno = 0;
 	struct stat st;
 
 	if (cache->track_flags != track_flags ||
@@ -139,6 +140,7 @@
 
 		if (ret) {
 			*ret_flags = FL_LSTATERR;
+			saved_errno = errno;
 			if (errno == ENOENT)
 				*ret_flags |= FL_NOENT;
 		} else if (S_ISDIR(st.st_mode)) {
@@ -180,6 +182,8 @@
 	} else {
 		reset_lstat_cache(cache);
 	}
+	if (saved_errno)
+		errno = saved_errno;
 	return match_len;
 }
 
@@ -202,57 +206,47 @@
 	return lstat_cache(cache, name, len, FL_SYMLINK|FL_DIR, USE_ONLY_LSTAT) & FL_SYMLINK;
 }
 
-/*
- * Return non-zero if path 'name' has a leading symlink component
- */
 int has_symlink_leading_path(const char *name, int len)
 {
 	return threaded_has_symlink_leading_path(&default_cache, name, len);
 }
 
-/*
- * Return zero if path 'name' has a leading symlink component or
- * if some leading path component does not exists.
- *
- * Return -1 if leading path exists and is a directory.
- *
- * Return path length if leading path exists and is neither a
- * directory nor a symlink.
- */
-int check_leading_path(const char *name, int len)
+int check_leading_path(const char *name, int len, int warn_on_lstat_err)
 {
-	return threaded_check_leading_path(&default_cache, name, len);
+	return threaded_check_leading_path(&default_cache, name, len,
+					   warn_on_lstat_err);
 }
 
 /*
- * Return zero if path 'name' has a leading symlink component or
- * if some leading path component does not exists.
+ * Return zero if some leading path component of 'name' does not exist.
  *
  * Return -1 if leading path exists and is a directory.
  *
- * Return path length if leading path exists and is neither a
- * directory nor a symlink.
+ * Return the length of a leading component if it either exists but it's not a
+ * directory, or if we were unable to lstat() it. If warn_on_lstat_err is true,
+ * also emit a warning for this error.
  */
-static int threaded_check_leading_path(struct cache_def *cache, const char *name, int len)
+static int threaded_check_leading_path(struct cache_def *cache, const char *name,
+				       int len, int warn_on_lstat_err)
 {
 	int flags;
 	int match_len = lstat_cache_matchlen(cache, name, len, &flags,
 			   FL_SYMLINK|FL_NOENT|FL_DIR, USE_ONLY_LSTAT);
+	int saved_errno = errno;
+
 	if (flags & FL_NOENT)
 		return 0;
 	else if (flags & FL_DIR)
 		return -1;
-	else
-		return match_len;
+	if (warn_on_lstat_err && (flags & FL_LSTATERR)) {
+		char *path = xmemdupz(name, match_len);
+		errno = saved_errno;
+		warning_errno(_("failed to lstat '%s'"), path);
+		free(path);
+	}
+	return match_len;
 }
 
-/*
- * Return non-zero if all path components of 'name' exists as a
- * directory.  If prefix_len > 0, we will test with the stat()
- * function instead of the lstat() function for a prefix length of
- * 'prefix_len', thus we then allow for symlinks in the prefix part as
- * long as those points to real existing directories.
- */
 int has_dirs_only_path(const char *name, int len, int prefix_len)
 {
 	return threaded_has_dirs_only_path(&default_cache, name, len, prefix_len);
@@ -267,6 +261,13 @@
  */
 static int threaded_has_dirs_only_path(struct cache_def *cache, const char *name, int len, int prefix_len)
 {
+	/*
+	 * Note: this function is used by the checkout machinery, which also
+	 * takes care to properly reset the cache when it performs an operation
+	 * that would leave the cache outdated. If this function starts caching
+	 * anything else besides FL_DIR, remember to also invalidate the cache
+	 * when creating or deleting paths that might be in the cache.
+	 */
 	return lstat_cache(cache, name, len,
 			   FL_DIR|FL_FULLPATH, prefix_len) &
 		FL_DIR;
@@ -321,3 +322,20 @@
 {
 	do_remove_scheduled_dirs(0);
 }
+
+void invalidate_lstat_cache(void)
+{
+	reset_lstat_cache(&default_cache);
+}
+
+#undef rmdir
+int lstat_cache_aware_rmdir(const char *path)
+{
+	/* Any change in this function must be made also in `mingw_rmdir()` */
+	int ret = rmdir(path);
+
+	if (!ret)
+		invalidate_lstat_cache();
+
+	return ret;
+}
diff --git a/t/README b/t/README
index 593d4a4..9e70122 100644
--- a/t/README
+++ b/t/README
@@ -196,6 +196,11 @@
 	this feature by setting the GIT_TEST_CHAIN_LINT environment
 	variable to "1" or "0", respectively.
 
+	A few test scripts disable some of the more advanced
+	chain-linting detection in the name of efficiency. You can
+	override this by setting the GIT_TEST_CHAIN_LINT_HARDER
+	environment variable to "1".
+
 --stress::
 	Run the test script repeatedly in multiple parallel jobs until
 	one of them fails.  Useful for reproducing rare failures in
@@ -387,9 +392,6 @@
 be written after every 'git commit' command, and overrides the
 'core.commitGraph' setting to true.
 
-GIT_TEST_COMMIT_GRAPH_NO_GDAT=<boolean>, when true, forces the
-commit-graph to be written without generation data chunk.
-
 GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=<boolean>, when true, forces
 commit-graph write to compute and write changed path Bloom filters for
 every 'git commit-graph write', as if the `--changed-paths` option was
@@ -439,6 +441,13 @@
 GIT_TEST_WRITE_REV_INDEX=<boolean>, when true enables the
 'pack.writeReverseIndex' setting.
 
+GIT_TEST_SPARSE_INDEX=<boolean>, when true enables index writes to use the
+sparse-index format by default.
+
+GIT_TEST_CHECKOUT_WORKERS=<n> overrides the 'checkout.workers' setting
+to <n> and 'checkout.thresholdForParallelism' to 0, forcing the
+execution of the parallel-checkout code.
+
 Naming Tests
 ------------
 
@@ -1117,6 +1126,12 @@
 
    Git wasn't compiled with NO_PTHREADS=YesPlease.
 
+ - REFFILES
+
+   Test is specific to packed/loose ref storage, and should be
+   disabled for other ref storage backends
+
+
 Tips for Writing Tests
 ----------------------
 
diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh
index 29ce890..d3b299e 100644
--- a/t/annotate-tests.sh
+++ b/t/annotate-tests.sh
@@ -479,22 +479,26 @@
 	check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1
 '
 
-test_expect_success 'setup -L :funcname with userdiff driver' '
-	echo "fortran-* diff=fortran" >.gitattributes &&
-	fortran_file=fortran-external-function &&
-	orig_file="$TEST_DIRECTORY/t4018/$fortran_file" &&
-	cp "$orig_file" . &&
-	git add "$fortran_file" &&
-	GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \
-	git commit -m "add fortran file" &&
-	sed -e "s/ChangeMe/IWasChanged/" <"$orig_file" >"$fortran_file" &&
-	git add "$fortran_file" &&
-	GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \
-	git commit -m "change fortran file"
-'
-
 test_expect_success 'blame -L :funcname with userdiff driver' '
-	check_count -f fortran-external-function -L:RIGHT A 7 B 1
+	cat >file.template <<-\EOF &&
+	DO NOT MATCH THIS LINE
+	function RIGHT(a, b) result(c)
+	AS THE DEFAULT DRIVER WOULD
+
+	integer, intent(in) :: ChangeMe
+	EOF
+
+	fortran_file=file.f03 &&
+	test_when_finished "rm .gitattributes" &&
+	echo "$fortran_file diff=fortran" >.gitattributes &&
+
+	test_commit --author "A <A@test.git>" \
+		"add" "$fortran_file" \
+		"$(cat file.template)" &&
+	test_commit --author "B <B@test.git>" \
+		"change" "$fortran_file" \
+		"$(cat file.template | sed -e s/ChangeMe/IWasChanged/)" &&
+	check_count -f "$fortran_file" -L:RIGHT A 3 B 1
 '
 
 test_expect_success 'setup incremental' '
diff --git a/t/helper/test-advise.c b/t/helper/test-advise.c
index a7043df..cb88113 100644
--- a/t/helper/test-advise.c
+++ b/t/helper/test-advise.c
@@ -16,7 +16,7 @@
 	 * selected here and in t0018 where this command is being
 	 * executed.
 	 */
-	advise_if_enabled(ADVICE_NESTED_TAG, argv[1]);
+	advise_if_enabled(ADVICE_NESTED_TAG, "%s", argv[1]);
 
 	return 0;
 }
diff --git a/t/helper/test-bitmap.c b/t/helper/test-bitmap.c
new file mode 100644
index 0000000..134a1e9
--- /dev/null
+++ b/t/helper/test-bitmap.c
@@ -0,0 +1,24 @@
+#include "test-tool.h"
+#include "cache.h"
+#include "pack-bitmap.h"
+
+static int bitmap_list_commits(void)
+{
+	return test_bitmap_commits(the_repository);
+}
+
+int cmd__bitmap(int argc, const char **argv)
+{
+	setup_git_directory();
+
+	if (argc != 2)
+		goto usage;
+
+	if (!strcmp(argv[1], "list-commits"))
+		return bitmap_list_commits();
+
+usage:
+	usage("\ttest-tool bitmap list-commits");
+
+	return -1;
+}
diff --git a/t/helper/test-bloom.c b/t/helper/test-bloom.c
index 46e97b0..ad3ef1c 100644
--- a/t/helper/test-bloom.c
+++ b/t/helper/test-bloom.c
@@ -48,7 +48,7 @@
 static const char *bloom_usage = "\n"
 "  test-tool bloom get_murmur3 <string>\n"
 "  test-tool bloom generate_filter <string> [<string>...]\n"
-"  test-tool get_filter_for_commit <commit-hex>\n";
+"  test-tool bloom get_filter_for_commit <commit-hex>\n";
 
 int cmd__bloom(int argc, const char **argv)
 {
@@ -69,7 +69,7 @@
 		struct bloom_filter filter;
 		int i = 2;
 		filter.len =  (settings.bits_per_entry + BITS_PER_WORD - 1) / BITS_PER_WORD;
-		filter.data = xcalloc(filter.len, sizeof(unsigned char));
+		CALLOC_ARRAY(filter.data, filter.len);
 
 		if (argc - 1 < i)
 			usage(bloom_usage);
diff --git a/t/helper/test-chmtime.c b/t/helper/test-chmtime.c
index aa22af4..524b55c 100644
--- a/t/helper/test-chmtime.c
+++ b/t/helper/test-chmtime.c
@@ -109,9 +109,9 @@
 		uintmax_t mtime;
 
 		if (stat(argv[i], &sb) < 0) {
-			fprintf(stderr, "Failed to stat %s: %s\n",
+			fprintf(stderr, "Failed to stat %s: %s. Skipping\n",
 			        argv[i], strerror(errno));
-			return 1;
+			continue;
 		}
 
 #ifdef GIT_WINDOWS_NATIVE
diff --git a/t/helper/test-example-decorate.c b/t/helper/test-example-decorate.c
index c8a1cde..b9d1200 100644
--- a/t/helper/test-example-decorate.c
+++ b/t/helper/test-example-decorate.c
@@ -26,8 +26,8 @@
 	 * Add 2 objects, one with a non-NULL decoration and one with a NULL
 	 * decoration.
 	 */
-	one = lookup_unknown_object(&one_oid);
-	two = lookup_unknown_object(&two_oid);
+	one = lookup_unknown_object(the_repository, &one_oid);
+	two = lookup_unknown_object(the_repository, &two_oid);
 	ret = add_decoration(&n, one, &decoration_a);
 	if (ret)
 		BUG("when adding a brand-new object, NULL should be returned");
@@ -56,7 +56,7 @@
 	ret = lookup_decoration(&n, two);
 	if (ret != &decoration_b)
 		BUG("lookup should return added declaration");
-	three = lookup_unknown_object(&three_oid);
+	three = lookup_unknown_object(the_repository, &three_oid);
 	ret = lookup_decoration(&n, three);
 	if (ret)
 		BUG("lookup for unknown object should return NULL");
diff --git a/t/helper/test-fast-rebase.c b/t/helper/test-fast-rebase.c
index 3732122..fc2d460 100644
--- a/t/helper/test-fast-rebase.c
+++ b/t/helper/test-fast-rebase.c
@@ -91,7 +91,6 @@
 	struct commit *last_commit = NULL, *last_picked_commit = NULL;
 	struct object_id head;
 	struct lock_file lock = LOCK_INIT;
-	int clean = 1;
 	struct strvec rev_walk_args = STRVEC_INIT;
 	struct rev_info revs;
 	struct commit *commit;
@@ -124,7 +123,8 @@
 	assert(oideq(&onto->object.oid, &head));
 
 	hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
-	assert(repo_read_index(the_repository) >= 0);
+	if (repo_read_index(the_repository) < 0)
+		BUG("Could not read index");
 
 	repo_init_revisions(the_repository, &revs, NULL);
 	revs.verbose_header = 1;
@@ -175,11 +175,10 @@
 		free((char*)merge_opt.ancestor);
 		merge_opt.ancestor = NULL;
 		if (!result.clean)
-			die("Aborting: Hit a conflict and restarting is not implemented.");
+			break;
 		last_picked_commit = commit;
 		last_commit = create_commit(result.tree, commit, last_commit);
 	}
-	fprintf(stderr, "\nDone.\n");
 	/* TODO: There should be some kind of rev_info_free(&revs) call... */
 	memset(&revs, 0, sizeof(revs));
 
@@ -188,24 +187,39 @@
 	if (result.clean < 0)
 		exit(128);
 
-	strbuf_addf(&reflog_msg, "finish rebase %s onto %s",
-		    oid_to_hex(&last_picked_commit->object.oid),
-		    oid_to_hex(&last_commit->object.oid));
-	if (update_ref(reflog_msg.buf, branch_name.buf,
-		       &last_commit->object.oid,
-		       &last_picked_commit->object.oid,
-		       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
-		error(_("could not update %s"), argv[4]);
-		die("Failed to update %s", argv[4]);
-	}
-	if (create_symref("HEAD", branch_name.buf, reflog_msg.buf) < 0)
-		die(_("unable to update HEAD"));
-	strbuf_release(&reflog_msg);
-	strbuf_release(&branch_name);
+	if (result.clean) {
+		fprintf(stderr, "\nDone.\n");
+		strbuf_addf(&reflog_msg, "finish rebase %s onto %s",
+			    oid_to_hex(&last_picked_commit->object.oid),
+			    oid_to_hex(&last_commit->object.oid));
+		if (update_ref(reflog_msg.buf, branch_name.buf,
+			       &last_commit->object.oid,
+			       &last_picked_commit->object.oid,
+			       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
+			error(_("could not update %s"), argv[4]);
+			die("Failed to update %s", argv[4]);
+		}
+		if (create_symref("HEAD", branch_name.buf, reflog_msg.buf) < 0)
+			die(_("unable to update HEAD"));
+		strbuf_release(&reflog_msg);
+		strbuf_release(&branch_name);
 
-	prime_cache_tree(the_repository, the_repository->index, result.tree);
+		prime_cache_tree(the_repository, the_repository->index,
+				 result.tree);
+	} else {
+		fprintf(stderr, "\nAborting: Hit a conflict.\n");
+		strbuf_addf(&reflog_msg, "rebase progress up to %s",
+			    oid_to_hex(&last_picked_commit->object.oid));
+		if (update_ref(reflog_msg.buf, "HEAD",
+			       &last_commit->object.oid,
+			       &head,
+			       REF_NO_DEREF, UPDATE_REFS_MSG_ON_ERR)) {
+			error(_("could not update %s"), argv[4]);
+			die("Failed to update %s", argv[4]);
+		}
+	}
 	if (write_locked_index(&the_index, &lock,
 			       COMMIT_LOCK | SKIP_IF_UNCHANGED))
 		die(_("unable to write %s"), get_index_file());
-	return (clean == 0);
+	return (result.clean == 0);
 }
diff --git a/t/helper/test-hash-speed.c b/t/helper/test-hash-speed.c
index 432233c..f40d9ad 100644
--- a/t/helper/test-hash-speed.c
+++ b/t/helper/test-hash-speed.c
@@ -57,5 +57,5 @@
 		free(p);
 	}
 
-	exit(0);
+	return 0;
 }
diff --git a/t/helper/test-hash.c b/t/helper/test-hash.c
index 0a31de6..261c545 100644
--- a/t/helper/test-hash.c
+++ b/t/helper/test-hash.c
@@ -54,5 +54,5 @@
 		fwrite(hash, 1, algop->rawsz, stdout);
 	else
 		puts(hash_to_hex_algop(hash, algop));
-	exit(0);
+	return 0;
 }
diff --git a/t/helper/test-match-trees.c b/t/helper/test-match-trees.c
index b9fd427..4079fde 100644
--- a/t/helper/test-match-trees.c
+++ b/t/helper/test-match-trees.c
@@ -23,5 +23,5 @@
 	shift_tree(the_repository, &one->object.oid, &two->object.oid, &shifted, -1);
 	printf("shifted: %s\n", oid_to_hex(&shifted));
 
-	exit(0);
+	return 0;
 }
diff --git a/t/helper/test-oidtree.c b/t/helper/test-oidtree.c
new file mode 100644
index 0000000..180ee28
--- /dev/null
+++ b/t/helper/test-oidtree.c
@@ -0,0 +1,49 @@
+#include "test-tool.h"
+#include "cache.h"
+#include "oidtree.h"
+
+static enum cb_next print_oid(const struct object_id *oid, void *data)
+{
+	puts(oid_to_hex(oid));
+	return CB_CONTINUE;
+}
+
+int cmd__oidtree(int argc, const char **argv)
+{
+	struct oidtree ot;
+	struct strbuf line = STRBUF_INIT;
+	int nongit_ok;
+	int algo = GIT_HASH_UNKNOWN;
+
+	oidtree_init(&ot);
+	setup_git_directory_gently(&nongit_ok);
+
+	while (strbuf_getline(&line, stdin) != EOF) {
+		const char *arg;
+		struct object_id oid;
+
+		if (skip_prefix(line.buf, "insert ", &arg)) {
+			if (get_oid_hex_any(arg, &oid) == GIT_HASH_UNKNOWN)
+				die("insert not a hexadecimal oid: %s", arg);
+			algo = oid.algo;
+			oidtree_insert(&ot, &oid);
+		} else if (skip_prefix(line.buf, "contains ", &arg)) {
+			if (get_oid_hex(arg, &oid))
+				die("contains not a hexadecimal oid: %s", arg);
+			printf("%d\n", oidtree_contains(&ot, &oid));
+		} else if (skip_prefix(line.buf, "each ", &arg)) {
+			char buf[GIT_MAX_HEXSZ + 1] = { '0' };
+			memset(&oid, 0, sizeof(oid));
+			memcpy(buf, arg, strlen(arg));
+			buf[hash_algos[algo].hexsz] = '\0';
+			get_oid_hex_any(buf, &oid);
+			oid.algo = algo;
+			oidtree_each(&ot, &oid, strlen(arg), print_oid, NULL);
+		} else if (!strcmp(line.buf, "clear")) {
+			oidtree_clear(&ot);
+		} else {
+			die("unknown command: %s", line.buf);
+		}
+	}
+	return 0;
+}
diff --git a/t/helper/test-partial-clone.c b/t/helper/test-partial-clone.c
new file mode 100644
index 0000000..3f102cf
--- /dev/null
+++ b/t/helper/test-partial-clone.c
@@ -0,0 +1,43 @@
+#include "cache.h"
+#include "test-tool.h"
+#include "repository.h"
+#include "object-store.h"
+
+/*
+ * Prints the size of the object corresponding to the given hash in a specific
+ * gitdir. This is similar to "git -C gitdir cat-file -s", except that this
+ * exercises the code that accesses the object of an arbitrary repository that
+ * is not the_repository. ("git -C gitdir" makes it so that the_repository is
+ * the one in gitdir.)
+ */
+static void object_info(const char *gitdir, const char *oid_hex)
+{
+	struct repository r;
+	struct object_id oid;
+	unsigned long size;
+	struct object_info oi = {.sizep = &size};
+	const char *p;
+
+	if (repo_init(&r, gitdir, NULL))
+		die("could not init repo");
+	if (parse_oid_hex(oid_hex, &oid, &p))
+		die("could not parse oid");
+	if (oid_object_info_extended(&r, &oid, &oi, 0))
+		die("could not obtain object info");
+	printf("%d\n", (int) size);
+}
+
+int cmd__partial_clone(int argc, const char **argv)
+{
+	setup_git_directory();
+
+	if (argc < 4)
+		die("too few arguments");
+
+	if (!strcmp(argv[1], "object-info"))
+		object_info(argv[2], argv[3]);
+	else
+		die("invalid argument '%s'", argv[1]);
+
+	return 0;
+}
diff --git a/t/helper/test-path-utils.c b/t/helper/test-path-utils.c
index 313a153..229ed41 100644
--- a/t/helper/test-path-utils.c
+++ b/t/helper/test-path-utils.c
@@ -172,9 +172,22 @@
 	{ NULL,              NULL     }
 };
 
-static int is_dotgitmodules(const char *path)
+static int check_dotfile(const char *x, const char **argv,
+			 int (*is_hfs)(const char *),
+			 int (*is_ntfs)(const char *))
 {
-	return is_hfs_dotgitmodules(path) || is_ntfs_dotgitmodules(path);
+	int res = 0, expect = 1;
+	for (; *argv; argv++) {
+		if (!strcmp("--not", *argv))
+			expect = !expect;
+		else if (expect != (is_hfs(*argv) || is_ntfs(*argv)))
+			res = error("'%s' is %s.git%s", *argv,
+				    expect ? "not " : "", x);
+		else
+			fprintf(stderr, "ok: '%s' is %s.git%s\n",
+				*argv, expect ? "" : "not ", x);
+	}
+	return !!res;
 }
 
 static int cmp_by_st_size(const void *a, const void *b)
@@ -382,17 +395,24 @@
 		return test_function(dirname_data, posix_dirname, argv[1]);
 
 	if (argc > 2 && !strcmp(argv[1], "is_dotgitmodules")) {
-		int res = 0, expect = 1, i;
-		for (i = 2; i < argc; i++)
-			if (!strcmp("--not", argv[i]))
-				expect = !expect;
-			else if (expect != is_dotgitmodules(argv[i]))
-				res = error("'%s' is %s.gitmodules", argv[i],
-					    expect ? "not " : "");
-			else
-				fprintf(stderr, "ok: '%s' is %s.gitmodules\n",
-					argv[i], expect ? "" : "not ");
-		return !!res;
+		return check_dotfile("modules", argv + 2,
+				     is_hfs_dotgitmodules,
+				     is_ntfs_dotgitmodules);
+	}
+	if (argc > 2 && !strcmp(argv[1], "is_dotgitignore")) {
+		return check_dotfile("ignore", argv + 2,
+				     is_hfs_dotgitignore,
+				     is_ntfs_dotgitignore);
+	}
+	if (argc > 2 && !strcmp(argv[1], "is_dotgitattributes")) {
+		return check_dotfile("attributes", argv + 2,
+				     is_hfs_dotgitattributes,
+				     is_ntfs_dotgitattributes);
+	}
+	if (argc > 2 && !strcmp(argv[1], "is_dotmailmap")) {
+		return check_dotfile("mailmap", argv + 2,
+				     is_hfs_dotmailmap,
+				     is_ntfs_dotmailmap);
 	}
 
 	if (argc > 2 && !strcmp(argv[1], "file-size")) {
diff --git a/t/helper/test-pkt-line.c b/t/helper/test-pkt-line.c
index 5e638f0..c5e052e 100644
--- a/t/helper/test-pkt-line.c
+++ b/t/helper/test-pkt-line.c
@@ -26,6 +26,16 @@
 	}
 }
 
+static void pack_raw_stdin(void)
+{
+	struct strbuf sb = STRBUF_INIT;
+
+	if (strbuf_read(&sb, 0, 0) < 0)
+		die_errno("failed to read from stdin");
+	packet_write(1, sb.buf, sb.len);
+	strbuf_release(&sb);
+}
+
 static void unpack(void)
 {
 	struct packet_reader reader;
@@ -110,6 +120,8 @@
 
 	if (!strcmp(argv[1], "pack"))
 		pack(argc - 2, argv + 2);
+	else if (!strcmp(argv[1], "pack-raw-stdin"))
+		pack_raw_stdin();
 	else if (!strcmp(argv[1], "unpack"))
 		unpack();
 	else if (!strcmp(argv[1], "unpack-sideband"))
diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c
index cda804e..2f65c7f 100644
--- a/t/helper/test-reach.c
+++ b/t/helper/test-reach.c
@@ -166,5 +166,5 @@
 		print_sorted_commit_ids(list);
 	}
 
-	exit(0);
+	return 0;
 }
diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c
index 244977a..b52c174 100644
--- a/t/helper/test-read-cache.c
+++ b/t/helper/test-read-cache.c
@@ -1,36 +1,82 @@
 #include "test-tool.h"
 #include "cache.h"
 #include "config.h"
+#include "blob.h"
+#include "commit.h"
+#include "tree.h"
+#include "sparse-index.h"
+
+static void print_cache_entry(struct cache_entry *ce)
+{
+	const char *type;
+	printf("%06o ", ce->ce_mode & 0177777);
+
+	if (S_ISSPARSEDIR(ce->ce_mode))
+		type = tree_type;
+	else if (S_ISGITLINK(ce->ce_mode))
+		type = commit_type;
+	else
+		type = blob_type;
+
+	printf("%s %s\t%s\n",
+	       type,
+	       oid_to_hex(&ce->oid),
+	       ce->name);
+}
+
+static void print_cache(struct index_state *istate)
+{
+	int i;
+	for (i = 0; i < istate->cache_nr; i++)
+		print_cache_entry(istate->cache[i]);
+}
 
 int cmd__read_cache(int argc, const char **argv)
 {
+	struct repository *r = the_repository;
 	int i, cnt = 1;
 	const char *name = NULL;
+	int table = 0, expand = 0;
 
-	if (argc > 1 && skip_prefix(argv[1], "--print-and-refresh=", &name)) {
-		argc--;
-		argv++;
+	initialize_the_repository();
+	prepare_repo_settings(r);
+	r->settings.command_requires_full_index = 0;
+
+	for (++argv, --argc; *argv && starts_with(*argv, "--"); ++argv, --argc) {
+		if (skip_prefix(*argv, "--print-and-refresh=", &name))
+			continue;
+		if (!strcmp(*argv, "--table"))
+			table = 1;
+		else if (!strcmp(*argv, "--expand"))
+			expand = 1;
 	}
 
-	if (argc == 2)
-		cnt = strtol(argv[1], NULL, 0);
+	if (argc == 1)
+		cnt = strtol(argv[0], NULL, 0);
 	setup_git_directory();
 	git_config(git_default_config, NULL);
+
 	for (i = 0; i < cnt; i++) {
-		read_cache();
+		repo_read_index(r);
+
+		if (expand)
+			ensure_full_index(r->index);
+
 		if (name) {
 			int pos;
 
-			refresh_index(&the_index, REFRESH_QUIET,
+			refresh_index(r->index, REFRESH_QUIET,
 				      NULL, NULL, NULL);
-			pos = index_name_pos(&the_index, name, strlen(name));
+			pos = index_name_pos(r->index, name, strlen(name));
 			if (pos < 0)
 				die("%s not in index", name);
 			printf("%s is%s up to date\n", name,
-			       ce_uptodate(the_index.cache[pos]) ? "" : " not");
+			       ce_uptodate(r->index->cache[pos]) ? "" : " not");
 			write_file(name, "%d\n", i);
 		}
-		discard_cache();
+		if (table)
+			print_cache(r->index);
+		discard_index(r->index);
 	}
 	return 0;
 }
diff --git a/t/helper/test-ref-store.c b/t/helper/test-ref-store.c
index bba5f84..b314b81 100644
--- a/t/helper/test-ref-store.c
+++ b/t/helper/test-ref-store.c
@@ -118,7 +118,7 @@
 
 static int cmd_resolve_ref(struct ref_store *refs, const char **argv)
 {
-	struct object_id oid;
+	struct object_id oid = *null_oid();
 	const char *refname = notnull(*argv++, "refname");
 	int resolve_flags = arg_flags(*argv++, "resolve-flags");
 	int flags;
diff --git a/t/helper/test-simple-ipc.c b/t/helper/test-simple-ipc.c
new file mode 100644
index 0000000..42040ef
--- /dev/null
+++ b/t/helper/test-simple-ipc.c
@@ -0,0 +1,787 @@
+/*
+ * test-simple-ipc.c: verify that the Inter-Process Communication works.
+ */
+
+#include "test-tool.h"
+#include "cache.h"
+#include "strbuf.h"
+#include "simple-ipc.h"
+#include "parse-options.h"
+#include "thread-utils.h"
+#include "strvec.h"
+
+#ifndef SUPPORTS_SIMPLE_IPC
+int cmd__simple_ipc(int argc, const char **argv)
+{
+	die("simple IPC not available on this platform");
+}
+#else
+
+/*
+ * The test daemon defines an "application callback" that supports a
+ * series of commands (see `test_app_cb()`).
+ *
+ * Unknown commands are caught here and we send an error message back
+ * to the client process.
+ */
+static int app__unhandled_command(const char *command,
+				  ipc_server_reply_cb *reply_cb,
+				  struct ipc_server_reply_data *reply_data)
+{
+	struct strbuf buf = STRBUF_INIT;
+	int ret;
+
+	strbuf_addf(&buf, "unhandled command: %s", command);
+	ret = reply_cb(reply_data, buf.buf, buf.len);
+	strbuf_release(&buf);
+
+	return ret;
+}
+
+/*
+ * Reply with a single very large buffer.  This is to ensure that
+ * long response are properly handled -- whether the chunking occurs
+ * in the kernel or in the (probably pkt-line) layer.
+ */
+#define BIG_ROWS (10000)
+static int app__big_command(ipc_server_reply_cb *reply_cb,
+			    struct ipc_server_reply_data *reply_data)
+{
+	struct strbuf buf = STRBUF_INIT;
+	int row;
+	int ret;
+
+	for (row = 0; row < BIG_ROWS; row++)
+		strbuf_addf(&buf, "big: %.75d\n", row);
+
+	ret = reply_cb(reply_data, buf.buf, buf.len);
+	strbuf_release(&buf);
+
+	return ret;
+}
+
+/*
+ * Reply with a series of lines.  This is to ensure that we can incrementally
+ * compute the response and chunk it to the client.
+ */
+#define CHUNK_ROWS (10000)
+static int app__chunk_command(ipc_server_reply_cb *reply_cb,
+			      struct ipc_server_reply_data *reply_data)
+{
+	struct strbuf buf = STRBUF_INIT;
+	int row;
+	int ret;
+
+	for (row = 0; row < CHUNK_ROWS; row++) {
+		strbuf_setlen(&buf, 0);
+		strbuf_addf(&buf, "big: %.75d\n", row);
+		ret = reply_cb(reply_data, buf.buf, buf.len);
+	}
+
+	strbuf_release(&buf);
+
+	return ret;
+}
+
+/*
+ * Slowly reply with a series of lines.  This is to model an expensive to
+ * compute chunked response (which might happen if this callback is running
+ * in a thread and is fighting for a lock with other threads).
+ */
+#define SLOW_ROWS     (1000)
+#define SLOW_DELAY_MS (10)
+static int app__slow_command(ipc_server_reply_cb *reply_cb,
+			     struct ipc_server_reply_data *reply_data)
+{
+	struct strbuf buf = STRBUF_INIT;
+	int row;
+	int ret;
+
+	for (row = 0; row < SLOW_ROWS; row++) {
+		strbuf_setlen(&buf, 0);
+		strbuf_addf(&buf, "big: %.75d\n", row);
+		ret = reply_cb(reply_data, buf.buf, buf.len);
+		sleep_millisec(SLOW_DELAY_MS);
+	}
+
+	strbuf_release(&buf);
+
+	return ret;
+}
+
+/*
+ * The client sent a command followed by a (possibly very) large buffer.
+ */
+static int app__sendbytes_command(const char *received,
+				  ipc_server_reply_cb *reply_cb,
+				  struct ipc_server_reply_data *reply_data)
+{
+	struct strbuf buf_resp = STRBUF_INIT;
+	const char *p = "?";
+	int len_ballast = 0;
+	int k;
+	int errs = 0;
+	int ret;
+
+	if (skip_prefix(received, "sendbytes ", &p))
+		len_ballast = strlen(p);
+
+	/*
+	 * Verify that the ballast is n copies of a single letter.
+	 * And that the multi-threaded IO layer didn't cross the streams.
+	 */
+	for (k = 1; k < len_ballast; k++)
+		if (p[k] != p[0])
+			errs++;
+
+	if (errs)
+		strbuf_addf(&buf_resp, "errs:%d\n", errs);
+	else
+		strbuf_addf(&buf_resp, "rcvd:%c%08d\n", p[0], len_ballast);
+
+	ret = reply_cb(reply_data, buf_resp.buf, buf_resp.len);
+
+	strbuf_release(&buf_resp);
+
+	return ret;
+}
+
+/*
+ * An arbitrary fixed address to verify that the application instance
+ * data is handled properly.
+ */
+static int my_app_data = 42;
+
+static ipc_server_application_cb test_app_cb;
+
+/*
+ * This is the "application callback" that sits on top of the
+ * "ipc-server".  It completely defines the set of commands supported
+ * by this application.
+ */
+static int test_app_cb(void *application_data,
+		       const char *command,
+		       ipc_server_reply_cb *reply_cb,
+		       struct ipc_server_reply_data *reply_data)
+{
+	/*
+	 * Verify that we received the application-data that we passed
+	 * when we started the ipc-server.  (We have several layers of
+	 * callbacks calling callbacks and it's easy to get things mixed
+	 * up (especially when some are "void*").)
+	 */
+	if (application_data != (void*)&my_app_data)
+		BUG("application_cb: application_data pointer wrong");
+
+	if (!strcmp(command, "quit")) {
+		/*
+		 * The client sent a "quit" command.  This is an async
+		 * request for the server to shutdown.
+		 *
+		 * We DO NOT send the client a response message
+		 * (because we have nothing to say and the other
+		 * server threads have not yet stopped).
+		 *
+		 * Tell the ipc-server layer to start shutting down.
+		 * This includes: stop listening for new connections
+		 * on the socket/pipe and telling all worker threads
+		 * to finish/drain their outgoing responses to other
+		 * clients.
+		 *
+		 * This DOES NOT force an immediate sync shutdown.
+		 */
+		return SIMPLE_IPC_QUIT;
+	}
+
+	if (!strcmp(command, "ping")) {
+		const char *answer = "pong";
+		return reply_cb(reply_data, answer, strlen(answer));
+	}
+
+	if (!strcmp(command, "big"))
+		return app__big_command(reply_cb, reply_data);
+
+	if (!strcmp(command, "chunk"))
+		return app__chunk_command(reply_cb, reply_data);
+
+	if (!strcmp(command, "slow"))
+		return app__slow_command(reply_cb, reply_data);
+
+	if (starts_with(command, "sendbytes "))
+		return app__sendbytes_command(command, reply_cb, reply_data);
+
+	return app__unhandled_command(command, reply_cb, reply_data);
+}
+
+struct cl_args
+{
+	const char *subcommand;
+	const char *path;
+	const char *token;
+
+	int nr_threads;
+	int max_wait_sec;
+	int bytecount;
+	int batchsize;
+
+	char bytevalue;
+};
+
+static struct cl_args cl_args = {
+	.subcommand = NULL,
+	.path = "ipc-test",
+	.token = NULL,
+
+	.nr_threads = 5,
+	.max_wait_sec = 60,
+	.bytecount = 1024,
+	.batchsize = 10,
+
+	.bytevalue = 'x',
+};
+
+/*
+ * This process will run as a simple-ipc server and listen for IPC commands
+ * from client processes.
+ */
+static int daemon__run_server(void)
+{
+	int ret;
+
+	struct ipc_server_opts opts = {
+		.nr_threads = cl_args.nr_threads,
+	};
+
+	/*
+	 * Synchronously run the ipc-server.  We don't need any application
+	 * instance data, so pass an arbitrary pointer (that we'll later
+	 * verify made the round trip).
+	 */
+	ret = ipc_server_run(cl_args.path, &opts, test_app_cb, (void*)&my_app_data);
+	if (ret == -2)
+		error(_("socket/pipe already in use: '%s'"), cl_args.path);
+	else if (ret == -1)
+		error_errno(_("could not start server on: '%s'"), cl_args.path);
+
+	return ret;
+}
+
+#ifndef GIT_WINDOWS_NATIVE
+/*
+ * This is adapted from `daemonize()`.  Use `fork()` to directly create and
+ * run the daemon in a child process.
+ */
+static int spawn_server(pid_t *pid)
+{
+	struct ipc_server_opts opts = {
+		.nr_threads = cl_args.nr_threads,
+	};
+
+	*pid = fork();
+
+	switch (*pid) {
+	case 0:
+		if (setsid() == -1)
+			error_errno(_("setsid failed"));
+		close(0);
+		close(1);
+		close(2);
+		sanitize_stdfds();
+
+		return ipc_server_run(cl_args.path, &opts, test_app_cb,
+				      (void*)&my_app_data);
+
+	case -1:
+		return error_errno(_("could not spawn daemon in the background"));
+
+	default:
+		return 0;
+	}
+}
+#else
+/*
+ * Conceptually like `daemonize()` but different because Windows does not
+ * have `fork(2)`.  Spawn a normal Windows child process but without the
+ * limitations of `start_command()` and `finish_command()`.
+ */
+static int spawn_server(pid_t *pid)
+{
+	char test_tool_exe[MAX_PATH];
+	struct strvec args = STRVEC_INIT;
+	int in, out;
+
+	GetModuleFileNameA(NULL, test_tool_exe, MAX_PATH);
+
+	in = open("/dev/null", O_RDONLY);
+	out = open("/dev/null", O_WRONLY);
+
+	strvec_push(&args, test_tool_exe);
+	strvec_push(&args, "simple-ipc");
+	strvec_push(&args, "run-daemon");
+	strvec_pushf(&args, "--name=%s", cl_args.path);
+	strvec_pushf(&args, "--threads=%d", cl_args.nr_threads);
+
+	*pid = mingw_spawnvpe(args.v[0], args.v, NULL, NULL, in, out, out);
+	close(in);
+	close(out);
+
+	strvec_clear(&args);
+
+	if (*pid < 0)
+		return error(_("could not spawn daemon in the background"));
+
+	return 0;
+}
+#endif
+
+/*
+ * This is adapted from `wait_or_whine()`.  Watch the child process and
+ * let it get started and begin listening for requests on the socket
+ * before reporting our success.
+ */
+static int wait_for_server_startup(pid_t pid_child)
+{
+	int status;
+	pid_t pid_seen;
+	enum ipc_active_state s;
+	time_t time_limit, now;
+
+	time(&time_limit);
+	time_limit += cl_args.max_wait_sec;
+
+	for (;;) {
+		pid_seen = waitpid(pid_child, &status, WNOHANG);
+
+		if (pid_seen == -1)
+			return error_errno(_("waitpid failed"));
+
+		else if (pid_seen == 0) {
+			/*
+			 * The child is still running (this should be
+			 * the normal case).  Try to connect to it on
+			 * the socket and see if it is ready for
+			 * business.
+			 *
+			 * If there is another daemon already running,
+			 * our child will fail to start (possibly
+			 * after a timeout on the lock), but we don't
+			 * care (who responds) if the socket is live.
+			 */
+			s = ipc_get_active_state(cl_args.path);
+			if (s == IPC_STATE__LISTENING)
+				return 0;
+
+			time(&now);
+			if (now > time_limit)
+				return error(_("daemon not online yet"));
+
+			continue;
+		}
+
+		else if (pid_seen == pid_child) {
+			/*
+			 * The new child daemon process shutdown while
+			 * it was starting up, so it is not listening
+			 * on the socket.
+			 *
+			 * Try to ping the socket in the odd chance
+			 * that another daemon started (or was already
+			 * running) while our child was starting.
+			 *
+			 * Again, we don't care who services the socket.
+			 */
+			s = ipc_get_active_state(cl_args.path);
+			if (s == IPC_STATE__LISTENING)
+				return 0;
+
+			/*
+			 * We don't care about the WEXITSTATUS() nor
+			 * any of the WIF*(status) values because
+			 * `cmd__simple_ipc()` does the `!!result`
+			 * trick on all function return values.
+			 *
+			 * So it is sufficient to just report the
+			 * early shutdown as an error.
+			 */
+			return error(_("daemon failed to start"));
+		}
+
+		else
+			return error(_("waitpid is confused"));
+	}
+}
+
+/*
+ * This process will start a simple-ipc server in a background process and
+ * wait for it to become ready.  This is like `daemonize()` but gives us
+ * more control and better error reporting (and makes it easier to write
+ * unit tests).
+ */
+static int daemon__start_server(void)
+{
+	pid_t pid_child;
+	int ret;
+
+	/*
+	 * Run the actual daemon in a background process.
+	 */
+	ret = spawn_server(&pid_child);
+	if (pid_child <= 0)
+		return ret;
+
+	/*
+	 * Let the parent wait for the child process to get started
+	 * and begin listening for requests on the socket.
+	 */
+	ret = wait_for_server_startup(pid_child);
+
+	return ret;
+}
+
+/*
+ * This process will run a quick probe to see if a simple-ipc server
+ * is active on this path.
+ *
+ * Returns 0 if the server is alive.
+ */
+static int client__probe_server(void)
+{
+	enum ipc_active_state s;
+
+	s = ipc_get_active_state(cl_args.path);
+	switch (s) {
+	case IPC_STATE__LISTENING:
+		return 0;
+
+	case IPC_STATE__NOT_LISTENING:
+		return error("no server listening at '%s'", cl_args.path);
+
+	case IPC_STATE__PATH_NOT_FOUND:
+		return error("path not found '%s'", cl_args.path);
+
+	case IPC_STATE__INVALID_PATH:
+		return error("invalid pipe/socket name '%s'", cl_args.path);
+
+	case IPC_STATE__OTHER_ERROR:
+	default:
+		return error("other error for '%s'", cl_args.path);
+	}
+}
+
+/*
+ * Send an IPC command token to an already-running server daemon and
+ * print the response.
+ *
+ * This is a simple 1 word command/token that `test_app_cb()` (in the
+ * daemon process) will understand.
+ */
+static int client__send_ipc(void)
+{
+	const char *command = "(no-command)";
+	struct strbuf buf = STRBUF_INIT;
+	struct ipc_client_connect_options options
+		= IPC_CLIENT_CONNECT_OPTIONS_INIT;
+
+	if (cl_args.token && *cl_args.token)
+		command = cl_args.token;
+
+	options.wait_if_busy = 1;
+	options.wait_if_not_found = 0;
+
+	if (!ipc_client_send_command(cl_args.path, &options, command, &buf)) {
+		if (buf.len) {
+			printf("%s\n", buf.buf);
+			fflush(stdout);
+		}
+		strbuf_release(&buf);
+
+		return 0;
+	}
+
+	return error("failed to send '%s' to '%s'", command, cl_args.path);
+}
+
+/*
+ * Send an IPC command to an already-running server and ask it to
+ * shutdown.  "send quit" is an async request and queues a shutdown
+ * event in the server, so we spin and wait here for it to actually
+ * shutdown to make the unit tests a little easier to write.
+ */
+static int client__stop_server(void)
+{
+	int ret;
+	time_t time_limit, now;
+	enum ipc_active_state s;
+
+	time(&time_limit);
+	time_limit += cl_args.max_wait_sec;
+
+	cl_args.token = "quit";
+
+	ret = client__send_ipc();
+	if (ret)
+		return ret;
+
+	for (;;) {
+		sleep_millisec(100);
+
+		s = ipc_get_active_state(cl_args.path);
+
+		if (s != IPC_STATE__LISTENING) {
+			/*
+			 * The socket/pipe is gone and/or has stopped
+			 * responding.  Lets assume that the daemon
+			 * process has exited too.
+			 */
+			return 0;
+		}
+
+		time(&now);
+		if (now > time_limit)
+			return error(_("daemon has not shutdown yet"));
+	}
+}
+
+/*
+ * Send an IPC command followed by ballast to confirm that a large
+ * message can be sent and that the kernel or pkt-line layers will
+ * properly chunk it and that the daemon receives the entire message.
+ */
+static int do_sendbytes(int bytecount, char byte, const char *path,
+			const struct ipc_client_connect_options *options)
+{
+	struct strbuf buf_send = STRBUF_INIT;
+	struct strbuf buf_resp = STRBUF_INIT;
+
+	strbuf_addstr(&buf_send, "sendbytes ");
+	strbuf_addchars(&buf_send, byte, bytecount);
+
+	if (!ipc_client_send_command(path, options, buf_send.buf, &buf_resp)) {
+		strbuf_rtrim(&buf_resp);
+		printf("sent:%c%08d %s\n", byte, bytecount, buf_resp.buf);
+		fflush(stdout);
+		strbuf_release(&buf_send);
+		strbuf_release(&buf_resp);
+
+		return 0;
+	}
+
+	return error("client failed to sendbytes(%d, '%c') to '%s'",
+		     bytecount, byte, path);
+}
+
+/*
+ * Send an IPC command with ballast to an already-running server daemon.
+ */
+static int client__sendbytes(void)
+{
+	struct ipc_client_connect_options options
+		= IPC_CLIENT_CONNECT_OPTIONS_INIT;
+
+	options.wait_if_busy = 1;
+	options.wait_if_not_found = 0;
+	options.uds_disallow_chdir = 0;
+
+	return do_sendbytes(cl_args.bytecount, cl_args.bytevalue, cl_args.path,
+			    &options);
+}
+
+struct multiple_thread_data {
+	pthread_t pthread_id;
+	struct multiple_thread_data *next;
+	const char *path;
+	int bytecount;
+	int batchsize;
+	int sum_errors;
+	int sum_good;
+	char letter;
+};
+
+static void *multiple_thread_proc(void *_multiple_thread_data)
+{
+	struct multiple_thread_data *d = _multiple_thread_data;
+	int k;
+	struct ipc_client_connect_options options
+		= IPC_CLIENT_CONNECT_OPTIONS_INIT;
+
+	options.wait_if_busy = 1;
+	options.wait_if_not_found = 0;
+	/*
+	 * A multi-threaded client should not be randomly calling chdir().
+	 * The test will pass without this restriction because the test is
+	 * not otherwise accessing the filesystem, but it makes us honest.
+	 */
+	options.uds_disallow_chdir = 1;
+
+	trace2_thread_start("multiple");
+
+	for (k = 0; k < d->batchsize; k++) {
+		if (do_sendbytes(d->bytecount + k, d->letter, d->path, &options))
+			d->sum_errors++;
+		else
+			d->sum_good++;
+	}
+
+	trace2_thread_exit();
+	return NULL;
+}
+
+/*
+ * Start a client-side thread pool.  Each thread sends a series of
+ * IPC requests.  Each request is on a new connection to the server.
+ */
+static int client__multiple(void)
+{
+	struct multiple_thread_data *list = NULL;
+	int k;
+	int sum_join_errors = 0;
+	int sum_thread_errors = 0;
+	int sum_good = 0;
+
+	for (k = 0; k < cl_args.nr_threads; k++) {
+		struct multiple_thread_data *d = xcalloc(1, sizeof(*d));
+		d->next = list;
+		d->path = cl_args.path;
+		d->bytecount = cl_args.bytecount + cl_args.batchsize*(k/26);
+		d->batchsize = cl_args.batchsize;
+		d->sum_errors = 0;
+		d->sum_good = 0;
+		d->letter = 'A' + (k % 26);
+
+		if (pthread_create(&d->pthread_id, NULL, multiple_thread_proc, d)) {
+			warning("failed to create thread[%d] skipping remainder", k);
+			free(d);
+			break;
+		}
+
+		list = d;
+	}
+
+	while (list) {
+		struct multiple_thread_data *d = list;
+
+		if (pthread_join(d->pthread_id, NULL))
+			sum_join_errors++;
+
+		sum_thread_errors += d->sum_errors;
+		sum_good += d->sum_good;
+
+		list = d->next;
+		free(d);
+	}
+
+	printf("client (good %d) (join %d), (errors %d)\n",
+	       sum_good, sum_join_errors, sum_thread_errors);
+
+	return (sum_join_errors + sum_thread_errors) ? 1 : 0;
+}
+
+int cmd__simple_ipc(int argc, const char **argv)
+{
+	const char * const simple_ipc_usage[] = {
+		N_("test-helper simple-ipc is-active    [<name>] [<options>]"),
+		N_("test-helper simple-ipc run-daemon   [<name>] [<threads>]"),
+		N_("test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"),
+		N_("test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"),
+		N_("test-helper simple-ipc send         [<name>] [<token>]"),
+		N_("test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"),
+		N_("test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] [<batchsize>]"),
+		NULL
+	};
+
+	const char *bytevalue = NULL;
+
+	struct option options[] = {
+#ifndef GIT_WINDOWS_NATIVE
+		OPT_STRING(0, "name", &cl_args.path, N_("name"), N_("name or pathname of unix domain socket")),
+#else
+		OPT_STRING(0, "name", &cl_args.path, N_("name"), N_("named-pipe name")),
+#endif
+		OPT_INTEGER(0, "threads", &cl_args.nr_threads, N_("number of threads in server thread pool")),
+		OPT_INTEGER(0, "max-wait", &cl_args.max_wait_sec, N_("seconds to wait for daemon to start or stop")),
+
+		OPT_INTEGER(0, "bytecount", &cl_args.bytecount, N_("number of bytes")),
+		OPT_INTEGER(0, "batchsize", &cl_args.batchsize, N_("number of requests per thread")),
+
+		OPT_STRING(0, "byte", &bytevalue, N_("byte"), N_("ballast character")),
+		OPT_STRING(0, "token", &cl_args.token, N_("token"), N_("command token to send to the server")),
+
+		OPT_END()
+	};
+
+	if (argc < 2)
+		usage_with_options(simple_ipc_usage, options);
+
+	if (argc == 2 && !strcmp(argv[1], "-h"))
+		usage_with_options(simple_ipc_usage, options);
+
+	if (argc == 2 && !strcmp(argv[1], "SUPPORTS_SIMPLE_IPC"))
+		return 0;
+
+	cl_args.subcommand = argv[1];
+
+	argc--;
+	argv++;
+
+	argc = parse_options(argc, argv, NULL, options, simple_ipc_usage, 0);
+
+	if (cl_args.nr_threads < 1)
+		cl_args.nr_threads = 1;
+	if (cl_args.max_wait_sec < 0)
+		cl_args.max_wait_sec = 0;
+	if (cl_args.bytecount < 1)
+		cl_args.bytecount = 1;
+	if (cl_args.batchsize < 1)
+		cl_args.batchsize = 1;
+
+	if (bytevalue && *bytevalue)
+		cl_args.bytevalue = bytevalue[0];
+
+	/*
+	 * Use '!!' on all dispatch functions to map from `error()` style
+	 * (returns -1) style to `test_must_fail` style (expects 1).  This
+	 * makes shell error messages less confusing.
+	 */
+
+	if (!strcmp(cl_args.subcommand, "is-active"))
+		return !!client__probe_server();
+
+	if (!strcmp(cl_args.subcommand, "run-daemon"))
+		return !!daemon__run_server();
+
+	if (!strcmp(cl_args.subcommand, "start-daemon"))
+		return !!daemon__start_server();
+
+	/*
+	 * Client commands follow.  Ensure a server is running before
+	 * sending any data.  This might be overkill, but then again
+	 * this is a test harness.
+	 */
+
+	if (!strcmp(cl_args.subcommand, "stop-daemon")) {
+		if (client__probe_server())
+			return 1;
+		return !!client__stop_server();
+	}
+
+	if (!strcmp(cl_args.subcommand, "send")) {
+		if (client__probe_server())
+			return 1;
+		return !!client__send_ipc();
+	}
+
+	if (!strcmp(cl_args.subcommand, "sendbytes")) {
+		if (client__probe_server())
+			return 1;
+		return !!client__sendbytes();
+	}
+
+	if (!strcmp(cl_args.subcommand, "multiple")) {
+		if (client__probe_server())
+			return 1;
+		return !!client__multiple();
+	}
+
+	die("Unhandled subcommand: '%s'", cl_args.subcommand);
+}
+#endif
diff --git a/t/helper/test-submodule-nested-repo-config.c b/t/helper/test-submodule-nested-repo-config.c
index c5fd452..e3f11ff 100644
--- a/t/helper/test-submodule-nested-repo-config.c
+++ b/t/helper/test-submodule-nested-repo-config.c
@@ -18,7 +18,7 @@
 
 	setup_git_directory();
 
-	sub = submodule_from_path(the_repository, &null_oid, argv[1]);
+	sub = submodule_from_path(the_repository, null_oid(), argv[1]);
 	if (repo_submodule_init(&subrepo, the_repository, sub)) {
 		die_usage(argv, "Submodule not found.");
 	}
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index f97cd9f..490ac02 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -15,6 +15,7 @@
 
 static struct test_cmd cmds[] = {
 	{ "advise", cmd__advise_if_enabled },
+	{ "bitmap", cmd__bitmap },
 	{ "bloom", cmd__bloom },
 	{ "chmtime", cmd__chmtime },
 	{ "config", cmd__config },
@@ -42,9 +43,11 @@
 	{ "mktemp", cmd__mktemp },
 	{ "oid-array", cmd__oid_array },
 	{ "oidmap", cmd__oidmap },
+	{ "oidtree", cmd__oidtree },
 	{ "online-cpus", cmd__online_cpus },
 	{ "parse-options", cmd__parse_options },
 	{ "parse-pathspec-file", cmd__parse_pathspec_file },
+	{ "partial-clone", cmd__partial_clone },
 	{ "path-utils", cmd__path_utils },
 	{ "pcre2-config", cmd__pcre2_config },
 	{ "pkt-line", cmd__pkt_line },
@@ -65,12 +68,14 @@
 	{ "sha1", cmd__sha1 },
 	{ "sha256", cmd__sha256 },
 	{ "sigchain", cmd__sigchain },
+	{ "simple-ipc", cmd__simple_ipc },
 	{ "strcmp-offset", cmd__strcmp_offset },
 	{ "string-list", cmd__string_list },
 	{ "submodule-config", cmd__submodule_config },
 	{ "submodule-nested-repo-config", cmd__submodule_nested_repo_config },
 	{ "subprocess", cmd__subprocess },
 	{ "trace2", cmd__trace2 },
+	{ "userdiff", cmd__userdiff },
 	{ "urlmatch-normalization", cmd__urlmatch_normalization },
 	{ "xml-encode", cmd__xml_encode },
 	{ "wildmatch", cmd__wildmatch },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index 28072c0..f8dc266 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -5,6 +5,7 @@
 #include "git-compat-util.h"
 
 int cmd__advise_if_enabled(int argc, const char **argv);
+int cmd__bitmap(int argc, const char **argv);
 int cmd__bloom(int argc, const char **argv);
 int cmd__chmtime(int argc, const char **argv);
 int cmd__config(int argc, const char **argv);
@@ -31,9 +32,11 @@
 int cmd__mergesort(int argc, const char **argv);
 int cmd__mktemp(int argc, const char **argv);
 int cmd__oidmap(int argc, const char **argv);
+int cmd__oidtree(int argc, const char **argv);
 int cmd__online_cpus(int argc, const char **argv);
 int cmd__parse_options(int argc, const char **argv);
 int cmd__parse_pathspec_file(int argc, const char** argv);
+int cmd__partial_clone(int argc, const char **argv);
 int cmd__path_utils(int argc, const char **argv);
 int cmd__pcre2_config(int argc, const char **argv);
 int cmd__pkt_line(int argc, const char **argv);
@@ -55,12 +58,14 @@
 int cmd__oid_array(int argc, const char **argv);
 int cmd__sha256(int argc, const char **argv);
 int cmd__sigchain(int argc, const char **argv);
+int cmd__simple_ipc(int argc, const char **argv);
 int cmd__strcmp_offset(int argc, const char **argv);
 int cmd__string_list(int argc, const char **argv);
 int cmd__submodule_config(int argc, const char **argv);
 int cmd__submodule_nested_repo_config(int argc, const char **argv);
 int cmd__subprocess(int argc, const char **argv);
 int cmd__trace2(int argc, const char **argv);
+int cmd__userdiff(int argc, const char **argv);
 int cmd__urlmatch_normalization(int argc, const char **argv);
 int cmd__xml_encode(int argc, const char **argv);
 int cmd__wildmatch(int argc, const char **argv);
diff --git a/t/helper/test-userdiff.c b/t/helper/test-userdiff.c
new file mode 100644
index 0000000..f013f8a
--- /dev/null
+++ b/t/helper/test-userdiff.c
@@ -0,0 +1,46 @@
+#include "test-tool.h"
+#include "cache.h"
+#include "userdiff.h"
+#include "config.h"
+
+static int driver_cb(struct userdiff_driver *driver,
+		     enum userdiff_driver_type type, void *priv)
+{
+	enum userdiff_driver_type *want_type = priv;
+	if (type & *want_type && driver->funcname.pattern)
+		puts(driver->name);
+	return 0;
+}
+
+static int cmd__userdiff_config(const char *var, const char *value, void *cb)
+{
+	if (userdiff_config(var, value) < 0)
+		return -1;
+	return 0;
+}
+
+int cmd__userdiff(int argc, const char **argv)
+{
+	enum userdiff_driver_type want = 0;
+	if (argc != 2)
+		return 1;
+
+	if (!strcmp(argv[1], "list-drivers"))
+		want = (USERDIFF_DRIVER_TYPE_BUILTIN |
+			USERDIFF_DRIVER_TYPE_CUSTOM);
+	else if (!strcmp(argv[1], "list-builtin-drivers"))
+		want = USERDIFF_DRIVER_TYPE_BUILTIN;
+	else if (!strcmp(argv[1], "list-custom-drivers"))
+		want = USERDIFF_DRIVER_TYPE_CUSTOM;
+	else
+		return error("unknown argument %s", argv[1]);
+
+	if (want & USERDIFF_DRIVER_TYPE_CUSTOM) {
+		setup_git_directory();
+		git_config(cmd__userdiff_config, NULL);
+	}
+
+	for_each_userdiff_driver(driver_cb, &want);
+
+	return 0;
+}
diff --git a/t/lib-credential.sh b/t/lib-credential.sh
index dea2cbe..5ea8bc9 100644
--- a/t/lib-credential.sh
+++ b/t/lib-credential.sh
@@ -20,7 +20,7 @@
 		false
 	fi &&
 	test_cmp expect-stdout stdout &&
-	test_i18ncmp expect-stderr stderr
+	test_cmp expect-stderr stderr
 }
 
 read_chunk() {
diff --git a/t/lib-encoding.sh b/t/lib-encoding.sh
new file mode 100644
index 0000000..2dabc8c
--- /dev/null
+++ b/t/lib-encoding.sh
@@ -0,0 +1,25 @@
+# Encoding helpers
+
+test_lazy_prereq NO_UTF16_BOM '
+	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6
+'
+
+test_lazy_prereq NO_UTF32_BOM '
+	test $(printf abc | iconv -f UTF-8 -t UTF-32 | wc -c) = 12
+'
+
+write_utf16 () {
+	if test_have_prereq NO_UTF16_BOM
+	then
+		printf '\376\377'
+	fi &&
+	iconv -f UTF-8 -t UTF-16
+}
+
+write_utf32 () {
+	if test_have_prereq NO_UTF32_BOM
+	then
+		printf '\0\0\376\377'
+	fi &&
+	iconv -f UTF-8 -t UTF-32
+}
diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh
index 547eb3c..2fde235 100644
--- a/t/lib-git-svn.sh
+++ b/t/lib-git-svn.sh
@@ -121,12 +121,22 @@
 		 --listen-host 127.0.0.1 &
 }
 
-prepare_a_utf8_locale () {
-	a_utf8_locale=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
-	p
-	q
-}')
-	if test -n "$a_utf8_locale"
+prepare_utf8_locale () {
+	if test -z "$GIT_TEST_UTF8_LOCALE"
+	then
+		case "${LC_ALL:-$LANG}" in
+		*.[Uu][Tt][Ff]8 | *.[Uu][Tt][Ff]-8)
+			GIT_TEST_UTF8_LOCALE="${LC_ALL:-$LANG}"
+			;;
+		*)
+			GIT_TEST_UTF8_LOCALE=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
+				p
+				q
+			}')
+			;;
+		esac
+	fi
+	if test -n "$GIT_TEST_UTF8_LOCALE"
 	then
 		test_set_prereq UTF8
 	else
diff --git a/t/lib-log-graph.sh b/t/lib-log-graph.sh
index 1184cce..bf952ef 100644
--- a/t/lib-log-graph.sh
+++ b/t/lib-log-graph.sh
@@ -12,13 +12,13 @@
 lib_test_cmp_graph () {
 	git log --graph "$@" >output &&
 	sed 's/ *$//' >output.sanitized <output &&
-	test_i18ncmp expect output.sanitized
+	test_cmp expect output.sanitized
 }
 
 lib_test_cmp_short_graph () {
 	git log --graph --pretty=short "$@" >output &&
 	sanitize_log_output >output.sanitized <output &&
-	test_i18ncmp expect output.sanitized
+	test_cmp expect output.sanitized
 }
 
 lib_test_cmp_colored_graph () {
diff --git a/t/lib-parallel-checkout.sh b/t/lib-parallel-checkout.sh
new file mode 100644
index 0000000..83b279a
--- /dev/null
+++ b/t/lib-parallel-checkout.sh
@@ -0,0 +1,45 @@
+# Helpers for tests invoking parallel-checkout
+
+# Parallel checkout tests need full control of the number of workers
+unset GIT_TEST_CHECKOUT_WORKERS
+
+set_checkout_config () {
+	if test $# -ne 2
+	then
+		BUG "usage: set_checkout_config <workers> <threshold>"
+	fi &&
+
+	test_config_global checkout.workers $1 &&
+	test_config_global checkout.thresholdForParallelism $2
+}
+
+# Run "${@:2}" and check that $1 checkout workers were used
+test_checkout_workers () {
+	if test $# -lt 2
+	then
+		BUG "too few arguments to test_checkout_workers"
+	fi &&
+
+	local expected_workers=$1 &&
+	shift &&
+
+	local trace_file=trace-test-checkout-workers &&
+	rm -f "$trace_file" &&
+	GIT_TRACE2="$(pwd)/$trace_file" "$@" 2>&8 &&
+
+	local workers="$(grep "child_start\[..*\] git checkout--worker" "$trace_file" | wc -l)" &&
+	test $workers -eq $expected_workers &&
+	rm "$trace_file"
+} 8>&2 2>&4
+
+# Verify that both the working tree and the index were created correctly
+verify_checkout () {
+	if test $# -ne 1
+	then
+		BUG "usage: verify_checkout <repository path>"
+	fi &&
+
+	git -C "$1" diff-index --ignore-submodules=none --exit-code HEAD -- &&
+	git -C "$1" status --porcelain >"$1".status &&
+	test_must_be_empty "$1".status
+}
diff --git a/t/lib-rebase.sh b/t/lib-rebase.sh
index 172d745..dc75b83 100644
--- a/t/lib-rebase.sh
+++ b/t/lib-rebase.sh
@@ -4,6 +4,7 @@
 #
 # - override the commit message with $FAKE_COMMIT_MESSAGE
 # - amend the commit message with $FAKE_COMMIT_AMEND
+# - copy the original commit message to a file with $FAKE_MESSAGE_COPY
 # - check that non-commit messages have a certain line count with $EXPECT_COUNT
 # - check the commit count in the commit message header with $EXPECT_HEADER_COUNT
 # - rewrite a rebase -i script as directed by $FAKE_LINES.
@@ -14,10 +15,11 @@
 #       specified line.
 #
 #   "<cmd> <lineno>" -- add a line with the specified command
-#       ("pick", "squash", "fixup", "edit", "reword" or "drop") and the
-#       SHA1 taken from the specified line.
+#       ("pick", "squash", "fixup"|"fixup_-C"|"fixup_-c", "edit", "reword" or "drop")
+#       and the SHA1 taken from the specified line.
 #
-#   "exec_cmd_with_args" -- add an "exec cmd with args" line.
+#   "_" -- add a space, like "fixup_-C" implies "fixup -C" and
+#       "exec_cmd_with_args" add an "exec cmd with args" line.
 #
 #   "#" -- Add a comment line.
 #
@@ -32,6 +34,7 @@
 			exit
 		test -z "$FAKE_COMMIT_MESSAGE" || echo "$FAKE_COMMIT_MESSAGE" > "$1"
 		test -z "$FAKE_COMMIT_AMEND" || echo "$FAKE_COMMIT_AMEND" >> "$1"
+		test -z "$FAKE_MESSAGE_COPY" || cat "$1" >"$FAKE_MESSAGE_COPY"
 		exit
 		;;
 	esac
@@ -50,6 +53,8 @@
 			action="$line";;
 		exec_*|x_*|break|b)
 			echo "$line" | sed 's/_/ /g' >> "$1";;
+		merge_*|fixup_*)
+			action=$(echo "$line" | sed 's/_/ /g');;
 		"#")
 			echo '# comment' >> "$1";;
 		">")
diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
index 4b714e9..f7c7df0 100644
--- a/t/lib-submodule-update.sh
+++ b/t/lib-submodule-update.sh
@@ -63,6 +63,7 @@
 	git init submodule_update_repo &&
 	(
 		cd submodule_update_repo &&
+		branch=$(git symbolic-ref --short HEAD) &&
 		echo "expect" >>.gitignore &&
 		echo "actual" >>.gitignore &&
 		echo "x" >file1 &&
@@ -144,7 +145,7 @@
 		git checkout -b valid_sub1 &&
 		git revert HEAD &&
 
-		git checkout "${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME-master}"
+		git checkout "$branch"
 	)
 }
 
diff --git a/t/perf/.gitignore b/t/perf/.gitignore
index 982eb8e..72f5d0d 100644
--- a/t/perf/.gitignore
+++ b/t/perf/.gitignore
@@ -1,3 +1,4 @@
 /build/
 /test-results/
+/test-trace/
 /trash directory*/
diff --git a/t/perf/Makefile b/t/perf/Makefile
index fcb0e88..2465770 100644
--- a/t/perf/Makefile
+++ b/t/perf/Makefile
@@ -7,10 +7,10 @@
 	./run
 
 pre-clean:
-	rm -rf test-results
+	rm -rf test-results test-trace
 
 clean:
-	rm -rf build "trash directory".* test-results
+	rm -rf build "trash directory".* test-results test-trace
 
 test-lint:
 	$(MAKE) -C .. test-lint
diff --git a/t/perf/p2000-sparse-operations.sh b/t/perf/p2000-sparse-operations.sh
new file mode 100755
index 0000000..94513c9
--- /dev/null
+++ b/t/perf/p2000-sparse-operations.sh
@@ -0,0 +1,101 @@
+#!/bin/sh
+
+test_description="test performance of Git operations using the index"
+
+. ./perf-lib.sh
+
+test_perf_default_repo
+
+SPARSE_CONE=f2/f4/f1
+
+test_expect_success 'setup repo and indexes' '
+	git reset --hard HEAD &&
+
+	# Remove submodules from the example repo, because our
+	# duplication of the entire repo creates an unlikely data shape.
+	if git config --file .gitmodules --get-regexp "submodule.*.path" >modules
+	then
+		git rm $(awk "{print \$2}" modules) &&
+		git commit -m "remove submodules" || return 1
+	fi &&
+
+	echo bogus >a &&
+	cp a b &&
+	git add a b &&
+	git commit -m "level 0" &&
+	BLOB=$(git rev-parse HEAD:a) &&
+	OLD_COMMIT=$(git rev-parse HEAD) &&
+	OLD_TREE=$(git rev-parse HEAD^{tree}) &&
+
+	for i in $(test_seq 1 4)
+	do
+		cat >in <<-EOF &&
+			100755 blob $BLOB	a
+			040000 tree $OLD_TREE	f1
+			040000 tree $OLD_TREE	f2
+			040000 tree $OLD_TREE	f3
+			040000 tree $OLD_TREE	f4
+		EOF
+		NEW_TREE=$(git mktree <in) &&
+		NEW_COMMIT=$(git commit-tree $NEW_TREE -p $OLD_COMMIT -m "level $i") &&
+		OLD_TREE=$NEW_TREE &&
+		OLD_COMMIT=$NEW_COMMIT || return 1
+	done &&
+
+	git sparse-checkout init --cone &&
+	git branch -f wide $OLD_COMMIT &&
+	git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . full-index-v3 &&
+	(
+		cd full-index-v3 &&
+		git sparse-checkout init --cone &&
+		git sparse-checkout set $SPARSE_CONE &&
+		git config index.version 3 &&
+		git update-index --index-version=3
+	) &&
+	git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . full-index-v4 &&
+	(
+		cd full-index-v4 &&
+		git sparse-checkout init --cone &&
+		git sparse-checkout set $SPARSE_CONE &&
+		git config index.version 4 &&
+		git update-index --index-version=4
+	) &&
+	git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-index-v3 &&
+	(
+		cd sparse-index-v3 &&
+		git sparse-checkout init --cone --sparse-index &&
+		git sparse-checkout set $SPARSE_CONE &&
+		git config index.version 3 &&
+		git update-index --index-version=3
+	) &&
+	git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-index-v4 &&
+	(
+		cd sparse-index-v4 &&
+		git sparse-checkout init --cone --sparse-index &&
+		git sparse-checkout set $SPARSE_CONE &&
+		git config index.version 4 &&
+		git update-index --index-version=4
+	)
+'
+
+test_perf_on_all () {
+	command="$@"
+	for repo in full-index-v3 full-index-v4 \
+		    sparse-index-v3 sparse-index-v4
+	do
+		test_perf "$command ($repo)" "
+			(
+				cd $repo &&
+				echo >>$SPARSE_CONE/a &&
+				$command
+			)
+		"
+	done
+}
+
+test_perf_on_all git status
+test_perf_on_all git add -A
+test_perf_on_all git add .
+test_perf_on_all git commit -a -m A
+
+test_done
diff --git a/t/perf/p4209-pickaxe.sh b/t/perf/p4209-pickaxe.sh
new file mode 100755
index 0000000..f585a44
--- /dev/null
+++ b/t/perf/p4209-pickaxe.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+test_description="Test pickaxe performance"
+
+. ./perf-lib.sh
+
+test_perf_default_repo
+
+# Not --max-count, as that's the number of matching commit, so it's
+# unbounded. We want to limit our revision walk here.
+from_rev_desc=
+from_rev=
+max_count=1000
+if test_have_prereq EXPENSIVE
+then
+	max_count=10000
+fi
+from_rev=" $(git rev-list HEAD | head -n $max_count | tail -n 1).."
+from_rev_desc=" <limit-rev>.."
+
+for icase in \
+	'' \
+	'-i '
+do
+	# -S (no regex)
+	for pattern in \
+		'int main' \
+		'æ'
+	do
+		for opts in \
+			'-S'
+		do
+			test_perf "git log $icase$opts'$pattern'$from_rev_desc" "
+				git log --pretty=format:%H $icase$opts'$pattern'$from_rev
+			"
+		done
+	done
+
+	# -S (regex)
+	for pattern in  \
+		'(int|void|null)' \
+		'if *\([^ ]+ & ' \
+		'[àáâãäåæñøùúûüýþ]'
+	do
+		for opts in \
+			'--pickaxe-regex -S'
+		do
+			test_perf "git log $icase$opts'$pattern'$from_rev_desc" "
+				git log --pretty=format:%H $icase$opts'$pattern'$from_rev
+			"
+		done
+	done
+
+	# -G
+	for pattern in  \
+		'(int|void|null)' \
+		'if *\([^ ]+ & ' \
+		'[àáâãäåæñøùúûüýþ]'
+	do
+		for opts in \
+			'-G'
+		do
+			test_perf "git log $icase$opts'$pattern'$from_rev_desc" "
+				git log --pretty=format:%H $icase$opts'$pattern'$from_rev
+			"
+		done
+	done
+done
+
+test_done
diff --git a/t/perf/p5303-many-packs.sh b/t/perf/p5303-many-packs.sh
index ce0c42c..35c0cbd 100755
--- a/t/perf/p5303-many-packs.sh
+++ b/t/perf/p5303-many-packs.sh
@@ -28,11 +28,18 @@
 			push @commits, $_ if $. % 5 == 1;
 		}
 		print reverse @commits;
-	' "$1" >pushes
+	' "$1" >pushes &&
 
 	# create base packfile
-	head -n 1 pushes |
-	git pack-objects --delta-base-offset --revs staging/pack
+	base_pack=$(
+		head -n 1 pushes |
+		git pack-objects --delta-base-offset --revs staging/pack
+	) &&
+	test_export base_pack &&
+
+	# create an empty packfile
+	empty_pack=$(git pack-objects staging/pack </dev/null) &&
+	test_export empty_pack &&
 
 	# and then incrementals between each pair of commits
 	last= &&
@@ -49,6 +56,12 @@
 		last=$rev
 	done <pushes &&
 
+	(
+		find staging -type f -name 'pack-*.pack' |
+			xargs -n 1 basename | grep -v "$base_pack" &&
+		printf "^pack-%s.pack\n" $base_pack
+	) >stdin.packs
+
 	# and install the whole thing
 	rm -f .git/objects/pack/* &&
 	mv staging/* .git/objects/pack/
@@ -91,6 +104,23 @@
 		  --reflog --indexed-objects --delta-base-offset \
 		  --stdout </dev/null >/dev/null
 	'
+
+	test_perf "repack with kept ($nr_packs)" '
+		git pack-objects --keep-true-parents \
+		  --keep-pack=pack-$empty_pack.pack \
+		  --honor-pack-keep --non-empty --all \
+		  --reflog --indexed-objects --delta-base-offset \
+		  --stdout </dev/null >/dev/null
+	'
+
+	test_perf "repack with --stdin-packs ($nr_packs)" '
+		git pack-objects \
+		  --keep-true-parents \
+		  --stdin-packs \
+		  --non-empty \
+		  --delta-base-offset \
+		  --stdout <stdin.packs >/dev/null
+	'
 done
 
 # Measure pack loading with 10,000 packs.
diff --git a/t/perf/p5310-pack-bitmaps.sh b/t/perf/p5310-pack-bitmaps.sh
index b3e725f..452be01 100755
--- a/t/perf/p5310-pack-bitmaps.sh
+++ b/t/perf/p5310-pack-bitmaps.sh
@@ -15,6 +15,12 @@
 	git config pack.writebitmaps true
 '
 
+# we need to create the tag up front such that it is covered by the repack and
+# thus by generated bitmaps.
+test_expect_success 'create tags' '
+	git tag --message="tag pointing to HEAD" perf-tag HEAD
+'
+
 test_perf 'repack to disk' '
 	git repack -ad
 '
@@ -43,6 +49,14 @@
 	git rev-list --all --use-bitmap-index --objects >/dev/null
 '
 
+test_perf 'rev-list with tag negated via --not --all (objects)' '
+	git rev-list perf-tag --not --all --use-bitmap-index --objects >/dev/null
+'
+
+test_perf 'rev-list with negative tag (objects)' '
+	git rev-list HEAD --not perf-tag --use-bitmap-index --objects >/dev/null
+'
+
 test_perf 'rev-list count with blob:none' '
 	git rev-list --use-bitmap-index --count --objects --all \
 		--filter=blob:none >/dev/null
diff --git a/t/perf/p5600-partial-clone.sh b/t/perf/p5600-partial-clone.sh
index 3e04bd2..a965f2c 100755
--- a/t/perf/p5600-partial-clone.sh
+++ b/t/perf/p5600-partial-clone.sh
@@ -23,4 +23,20 @@
 	git -C worktree checkout -f
 '
 
+test_perf 'fsck' '
+	git -C bare.git fsck
+'
+
+test_perf 'count commits' '
+	git -C bare.git rev-list --all --count
+'
+
+test_perf 'count non-promisor commits' '
+	git -C bare.git rev-list --all --count --exclude-promisor-objects
+'
+
+test_perf 'gc' '
+	git -C bare.git gc
+'
+
 test_done
diff --git a/t/perf/p7519-fsmonitor.sh b/t/perf/p7519-fsmonitor.sh
index 1e20a18..5eb5044 100755
--- a/t/perf/p7519-fsmonitor.sh
+++ b/t/perf/p7519-fsmonitor.sh
@@ -32,6 +32,8 @@
 #
 # GIT_PERF_7519_DROP_CACHE: if set, the OS caches are dropped between tests
 #
+# GIT_PERF_7519_TRACE: if set, enable trace logging during the test.
+#   Trace logs will be grouped by fsmonitor provider.
 
 test_perf_large_repo
 test_checkout_worktree
@@ -70,6 +72,32 @@
 	fi
 fi
 
+trace_start() {
+	if test -n "$GIT_PERF_7519_TRACE"
+	then
+		name="$1"
+		TEST_TRACE_DIR="$TEST_OUTPUT_DIRECTORY/test-trace/p7519/"
+		echo "Writing trace logging to $TEST_TRACE_DIR"
+
+		mkdir -p "$TEST_TRACE_DIR"
+
+		# Start Trace2 logging and any other GIT_TRACE_* logs that you
+		# want for this named test case.
+
+		GIT_TRACE2_PERF="$TEST_TRACE_DIR/$name.trace2perf"
+		export GIT_TRACE2_PERF
+
+		>"$GIT_TRACE2_PERF"
+	fi
+}
+
+trace_stop() {
+	if test -n "$GIT_PERF_7519_TRACE"
+	then
+		unset GIT_TRACE2_PERF
+	fi
+}
+
 test_expect_success "one time repo setup" '
 	# set untrackedCache depending on the environment
 	if test -n "$GIT_PERF_7519_UNTRACKED_CACHE"
@@ -101,7 +129,7 @@
 	# If Watchman exists, watch the work tree and attempt a query.
 	if test_have_prereq WATCHMAN; then
 		watchman watch "$GIT_WORK_TREE" &&
-		watchman watch-list | grep -q -F "$GIT_WORK_TREE"
+		watchman watch-list | grep -q -F "p7519-fsmonitor"
 	fi
 '
 
@@ -169,8 +197,18 @@
 		git status -uall
 	'
 
+	# Update the mtimes on upto 100k files to make status think
+	# that they are dirty.  For simplicity, omit any files with
+	# LFs (i.e. anything that ls-files thinks it needs to dquote).
+	# Then fully backslash-quote the paths to capture any
+	# whitespace so that they pass thru xargs properly.
+	#
 	test_perf_w_drop_caches "status (dirty) ($DESC)" '
-		git ls-files | head -100000 | xargs -d "\n" touch -h &&
+		git ls-files | \
+			head -100000 | \
+			grep -v \" | \
+			sed '\''s/\(.\)/\\\1/g'\'' | \
+			xargs test-tool chmtime -300 &&
 		git status
 	'
 
@@ -178,6 +216,10 @@
 		git diff
 	'
 
+	test_perf_w_drop_caches "diff HEAD ($DESC)" '
+		git diff HEAD
+	'
+
 	test_perf_w_drop_caches "diff -- 0_files ($DESC)" '
 		git diff -- 1_file
 	'
@@ -203,6 +245,12 @@
 	'
 }
 
+#
+# Run a full set of perf tests using each Hook-based fsmonitor provider,
+# such as Watchman.
+#
+
+trace_start fsmonitor-watchman
 if test -n "$GIT_PERF_7519_FSMONITOR"; then
 	for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do
 		test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor'
@@ -213,14 +261,6 @@
 	test_fsmonitor_suite
 fi
 
-test_expect_success "setup without fsmonitor" '
-	unset INTEGRATION_SCRIPT &&
-	git config --unset core.fsmonitor &&
-	git update-index --no-fsmonitor
-'
-
-test_fsmonitor_suite
-
 if test_have_prereq WATCHMAN
 then
 	watchman watch-del "$GIT_WORK_TREE" >/dev/null 2>&1 &&
@@ -229,5 +269,20 @@
 	# preventing the removal of the trash directory
 	watchman shutdown-server >/dev/null 2>&1
 fi
+trace_stop
+
+#
+# Run a full set of perf tests with the fsmonitor feature disabled.
+#
+
+trace_start fsmonitor-disabled
+test_expect_success "setup without fsmonitor" '
+	unset INTEGRATION_SCRIPT &&
+	git config --unset core.fsmonitor &&
+	git update-index --no-fsmonitor
+'
+
+test_fsmonitor_suite
+trace_stop
 
 test_done
diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
index e385c68..601d9f6 100644
--- a/t/perf/perf-lib.sh
+++ b/t/perf/perf-lib.sh
@@ -70,6 +70,19 @@
 	test_have_prereq SYMLINKS || git config core.symlinks false
 }
 
+test_perf_copy_repo_contents () {
+	for stuff in "$1"/*
+	do
+		case "$stuff" in
+		*/objects|*/hooks|*/config|*/commondir|*/gitdir|*/worktrees)
+			;;
+		*)
+			cp -R "$stuff" "$repo/.git/" || exit 1
+			;;
+		esac
+	done
+}
+
 test_perf_create_repo_from () {
 	test "$#" = 2 ||
 	BUG "not 2 parameters to test-create-repo"
@@ -77,20 +90,20 @@
 	source="$2"
 	source_git="$("$MODERN_GIT" -C "$source" rev-parse --git-dir)"
 	objects_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-path objects)"
+	common_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-common-dir)"
 	mkdir -p "$repo/.git"
 	(
 		cd "$source" &&
 		{ cp -Rl "$objects_dir" "$repo/.git/" 2>/dev/null ||
 			cp -R "$objects_dir" "$repo/.git/"; } &&
-		for stuff in "$source_git"/*; do
-			case "$stuff" in
-				*/objects|*/hooks|*/config|*/commondir)
-					;;
-				*)
-					cp -R "$stuff" "$repo/.git/" || exit 1
-					;;
-			esac
-		done
+
+		# common_dir must come first here, since we want source_git to
+		# take precedence and overwrite any overlapping files
+		test_perf_copy_repo_contents "$common_dir"
+		if test "$source_git" != "$common_dir"
+		then
+			test_perf_copy_repo_contents "$source_git"
+		fi
 	) &&
 	(
 		cd "$repo" &&
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
index a6e570d..f68c27d 100755
--- a/t/t0000-basic.sh
+++ b/t/t0000-basic.sh
@@ -69,6 +69,23 @@
 _run_sub_test_lib_test_common () {
 	neg="$1" name="$2" descr="$3" # stdin is the body of the test code
 	shift 3
+
+	# intercept pseudo-options at the front of the argument list that we
+	# will not pass to child script
+	skip=
+	while test $# -gt 0
+	do
+		case "$1" in
+		--skip=*)
+			skip=${1#--*=}
+			shift
+			;;
+		*)
+			break
+			;;
+		esac
+	done
+
 	mkdir "$name" &&
 	(
 		# Pretend we're not running under a test harness, whether we
@@ -84,10 +101,6 @@
 		passing metrics
 		'
 
-		# Tell the framework that we are self-testing to make sure
-		# it yields a stable result.
-		GIT_TEST_FRAMEWORK_SELFTEST=t &&
-
 		# Point to the t/test-lib.sh, which isn't in ../ as usual
 		. "\$TEST_DIRECTORY"/test-lib.sh
 		EOF
@@ -95,6 +108,8 @@
 		export TEST_DIRECTORY &&
 		TEST_OUTPUT_DIRECTORY=$(pwd) &&
 		export TEST_OUTPUT_DIRECTORY &&
+		GIT_SKIP_TESTS=$skip &&
+		export GIT_SKIP_TESTS &&
 		sane_unset GIT_TEST_FAIL_PREREQS &&
 		if test -z "$neg"
 		then
@@ -271,7 +286,7 @@
 	EOF
 '
 
-test_expect_success C_LOCALE_OUTPUT 'test --verbose' '
+test_expect_success 'test --verbose' '
 	run_sub_test_lib_test_err \
 		t1234-verbose "test verbose" --verbose <<-\EOF &&
 	test_expect_success "passing test" true
@@ -323,9 +338,9 @@
 
 test_expect_success 'GIT_SKIP_TESTS' '
 	(
-		GIT_SKIP_TESTS="git.2" && export GIT_SKIP_TESTS &&
 		run_sub_test_lib_test git-skip-tests-basic \
-			"GIT_SKIP_TESTS" <<-\EOF &&
+			"GIT_SKIP_TESTS" \
+			--skip="git.2" <<-\EOF &&
 		for i in 1 2 3
 		do
 			test_expect_success "passing test #$i" "true"
@@ -344,9 +359,9 @@
 
 test_expect_success 'GIT_SKIP_TESTS several tests' '
 	(
-		GIT_SKIP_TESTS="git.2 git.5" && export GIT_SKIP_TESTS &&
 		run_sub_test_lib_test git-skip-tests-several \
-			"GIT_SKIP_TESTS several tests" <<-\EOF &&
+			"GIT_SKIP_TESTS several tests" \
+			--skip="git.2 git.5" <<-\EOF &&
 		for i in 1 2 3 4 5 6
 		do
 			test_expect_success "passing test #$i" "true"
@@ -368,9 +383,9 @@
 
 test_expect_success 'GIT_SKIP_TESTS sh pattern' '
 	(
-		GIT_SKIP_TESTS="git.[2-5]" && export GIT_SKIP_TESTS &&
 		run_sub_test_lib_test git-skip-tests-sh-pattern \
-			"GIT_SKIP_TESTS sh pattern" <<-\EOF &&
+			"GIT_SKIP_TESTS sh pattern" \
+			--skip="git.[2-5]" <<-\EOF &&
 		for i in 1 2 3 4 5 6
 		do
 			test_expect_success "passing test #$i" "true"
@@ -392,9 +407,9 @@
 
 test_expect_success 'GIT_SKIP_TESTS entire suite' '
 	(
-		GIT_SKIP_TESTS="git" && export GIT_SKIP_TESTS &&
 		run_sub_test_lib_test git-skip-tests-entire-suite \
-			"GIT_SKIP_TESTS entire suite" <<-\EOF &&
+			"GIT_SKIP_TESTS entire suite" \
+			--skip="git" <<-\EOF &&
 		for i in 1 2 3
 		do
 			test_expect_success "passing test #$i" "true"
@@ -409,9 +424,9 @@
 
 test_expect_success 'GIT_SKIP_TESTS does not skip unmatched suite' '
 	(
-		GIT_SKIP_TESTS="notgit" && export GIT_SKIP_TESTS &&
 		run_sub_test_lib_test git-skip-tests-unmatched-suite \
-			"GIT_SKIP_TESTS does not skip unmatched suite" <<-\EOF &&
+			"GIT_SKIP_TESTS does not skip unmatched suite" \
+			--skip="notgit" <<-\EOF &&
 		for i in 1 2 3
 		do
 			test_expect_success "passing test #$i" "true"
diff --git a/t/t0001-init.sh b/t/t0001-init.sh
index 0803994..acd662e 100755
--- a/t/t0001-init.sh
+++ b/t/t0001-init.sh
@@ -186,21 +186,33 @@
 	test_path_is_missing template-blank/.git/info/exclude
 '
 
+init_no_templatedir_env () {
+	(
+		sane_unset GIT_TEMPLATE_DIR &&
+		NO_SET_GIT_TEMPLATE_DIR=t &&
+		export NO_SET_GIT_TEMPLATE_DIR &&
+		git init "$1"
+	)
+}
+
 test_expect_success 'init with init.templatedir set' '
 	mkdir templatedir-source &&
 	echo Content >templatedir-source/file &&
 	test_config_global init.templatedir "${HOME}/templatedir-source" &&
-	(
-		mkdir templatedir-set &&
-		cd templatedir-set &&
-		sane_unset GIT_TEMPLATE_DIR &&
-		NO_SET_GIT_TEMPLATE_DIR=t &&
-		export NO_SET_GIT_TEMPLATE_DIR &&
-		git init
-	) &&
+
+	init_no_templatedir_env templatedir-set &&
 	test_cmp templatedir-source/file templatedir-set/.git/file
 '
 
+test_expect_success 'init with init.templatedir using ~ expansion' '
+	mkdir -p templatedir-source &&
+	echo Content >templatedir-source/file &&
+	test_config_global init.templatedir "~/templatedir-source" &&
+
+	init_no_templatedir_env templatedir-expansion &&
+	test_cmp templatedir-source/file templatedir-expansion/.git/file
+'
+
 test_expect_success 'init --bare/--shared overrides system/global config' '
 	test_config_global core.bare false &&
 	test_config_global core.sharedRepository 0640 &&
diff --git a/t/t0003-attributes.sh b/t/t0003-attributes.sh
index b660593..1e4c672 100755
--- a/t/t0003-attributes.sh
+++ b/t/t0003-attributes.sh
@@ -4,12 +4,16 @@
 
 . ./test-lib.sh
 
-attr_check () {
+attr_check_basic () {
 	path="$1" expect="$2" git_opts="$3" &&
 
 	git $git_opts check-attr test -- "$path" >actual 2>err &&
 	echo "$path: test: $expect" >expect &&
-	test_cmp expect actual &&
+	test_cmp expect actual
+}
+
+attr_check () {
+	attr_check_basic "$@" &&
 	test_must_be_empty err
 }
 
@@ -331,7 +335,6 @@
 	test_cmp expect actual
 '
 
-
 test_expect_success 'query binary macro directly' '
 	echo "file binary" >.gitattributes &&
 	echo file: binary: set >expect &&
@@ -339,4 +342,31 @@
 	test_cmp expect actual
 '
 
+test_expect_success SYMLINKS 'set up symlink tests' '
+	echo "* test" >attr &&
+	rm -f .gitattributes
+'
+
+test_expect_success SYMLINKS 'symlinks respected in core.attributesFile' '
+	test_when_finished "rm symlink" &&
+	ln -s attr symlink &&
+	test_config core.attributesFile "$(pwd)/symlink" &&
+	attr_check file set
+'
+
+test_expect_success SYMLINKS 'symlinks respected in info/attributes' '
+	test_when_finished "rm .git/info/attributes" &&
+	ln -s ../../attr .git/info/attributes &&
+	attr_check file set
+'
+
+test_expect_success SYMLINKS 'symlinks not respected in-tree' '
+	test_when_finished "rm -rf .gitattributes subdir" &&
+	ln -s attr .gitattributes &&
+	mkdir subdir &&
+	ln -s ../attr subdir/.gitattributes &&
+	attr_check_basic subdir/file unspecified &&
+	test_i18ngrep "unable to access.*gitattributes" err
+'
+
 test_done
diff --git a/t/t0006-date.sh b/t/t0006-date.sh
index 75ee9a9..6b757d7 100755
--- a/t/t0006-date.sh
+++ b/t/t0006-date.sh
@@ -11,7 +11,7 @@
 	echo "$t -> $2" >expect
 	test_expect_${3:-success} "relative date ($2)" "
 	test-tool date relative $t >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 	"
 }
 
@@ -139,7 +139,7 @@
 	echo "$t -> $2" >expect
 	test_expect_success "human date $t" '
 		test-tool date human $t >actual &&
-		test_i18ncmp expect actual
+		test_cmp expect actual
 '
 }
 
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index 370a389..a594b4a 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -34,7 +34,7 @@
 test_stderr () {
 	expected="$1"
 	expect_in stderr "$1" &&
-	test_i18ncmp "$HOME/expected-stderr" "$HOME/stderr"
+	test_cmp "$HOME/expected-stderr" "$HOME/stderr"
 }
 
 broken_c_unquote () {
@@ -865,4 +865,38 @@
 	test_cmp expect actual
 '
 
+test_expect_success SYMLINKS 'set up ignore file for symlink tests' '
+	echo "*" >ignore &&
+	rm -f .gitignore .git/info/exclude
+'
+
+test_expect_success SYMLINKS 'symlinks respected in core.excludesFile' '
+	test_when_finished "rm symlink" &&
+	ln -s ignore symlink &&
+	test_config core.excludesFile "$(pwd)/symlink" &&
+	echo file >expect &&
+	git check-ignore file >actual 2>err &&
+	test_cmp expect actual &&
+	test_must_be_empty err
+'
+
+test_expect_success SYMLINKS 'symlinks respected in info/exclude' '
+	test_when_finished "rm .git/info/exclude" &&
+	ln -s ../../ignore .git/info/exclude &&
+	echo file >expect &&
+	git check-ignore file >actual 2>err &&
+	test_cmp expect actual &&
+	test_must_be_empty err
+'
+
+test_expect_success SYMLINKS 'symlinks not respected in-tree' '
+	test_when_finished "rm .gitignore" &&
+	ln -s ignore .gitignore &&
+	mkdir subdir &&
+	ln -s ignore subdir/.gitignore &&
+	test_must_fail git check-ignore subdir/file >actual 2>err &&
+	test_must_be_empty actual &&
+	test_i18ngrep "unable to access.*gitignore" err
+'
+
 test_done
diff --git a/t/t0012-help.sh b/t/t0012-help.sh
index e8ef730..5679e29 100755
--- a/t/t0012-help.sh
+++ b/t/t0012-help.sh
@@ -55,7 +55,7 @@
 		git: 'revisions' is not a git command. See 'git --help'.
 	EOF
 	test_must_fail git revisions --help 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 "
 
 test_expect_success 'git help' '
diff --git a/t/t0018-advice.sh b/t/t0018-advice.sh
index e03554d..39e5e4b 100755
--- a/t/t0018-advice.sh
+++ b/t/t0018-advice.sh
@@ -10,7 +10,7 @@
 	hint: Disable this message with "git config advice.nestedTag false"
 	EOF
 	test-tool advise "This is a piece of advice" 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'advice should be printed when config variable is set to true' '
@@ -20,7 +20,7 @@
 	EOF
 	test_config advice.nestedTag true &&
 	test-tool advise "This is a piece of advice" 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'advice should not be printed when config variable is set to false' '
diff --git a/t/t0020-crlf.sh b/t/t0020-crlf.sh
index 375cf94..f25ae8b 100755
--- a/t/t0020-crlf.sh
+++ b/t/t0020-crlf.sh
@@ -87,10 +87,8 @@
 	git commit -m "nowarn" &&
 	for w in Oh here is CRLFQ in text; do echo $w; done | q_to_cr >doublewarn &&
 	git add doublewarn 2>err &&
-	if test_have_prereq C_LOCALE_OUTPUT
-	then
-		test $(grep "CRLF will be replaced by LF" err | wc -l) = 1
-	fi
+	grep "CRLF will be replaced by LF" err >err.warnings &&
+	test_line_count = 1 err.warnings
 '
 
 
diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
index e828ee9..b5749f3 100755
--- a/t/t0021-conversion.sh
+++ b/t/t0021-conversion.sh
@@ -257,6 +257,30 @@
 	test_must_fail git add test.fc
 '
 
+test_expect_success 'required filter with absent clean field' '
+	test_config filter.absentclean.smudge cat &&
+	test_config filter.absentclean.required true &&
+
+	echo "*.ac filter=absentclean" >.gitattributes &&
+
+	echo test >test.ac &&
+	test_must_fail git add test.ac 2>stderr &&
+	test_i18ngrep "fatal: test.ac: clean filter .absentclean. failed" stderr
+'
+
+test_expect_success 'required filter with absent smudge field' '
+	test_config filter.absentsmudge.clean cat &&
+	test_config filter.absentsmudge.required true &&
+
+	echo "*.as filter=absentsmudge" >.gitattributes &&
+
+	echo test >test.as &&
+	git add test.as &&
+	rm -f test.as &&
+	test_must_fail git checkout -- test.as 2>stderr &&
+	test_i18ngrep "fatal: test.as: smudge filter absentsmudge failed" stderr
+'
+
 test_expect_success 'filtering large input to small output should use little memory' '
 	test_config filter.devnull.clean "cat >/dev/null" &&
 	test_config filter.devnull.required true &&
@@ -956,4 +980,85 @@
 	grep "error: external filter .* signaled that .unfiltered. is now available although it has not been delayed earlier" git-stderr.log
 '
 
+for mode in 'case' 'utf-8'
+do
+	case "$mode" in
+	case)	dir='A' symlink='a' mode_prereq='CASE_INSENSITIVE_FS' ;;
+	utf-8)
+		dir=$(printf "\141\314\210") symlink=$(printf "\303\244")
+		mode_prereq='UTF8_NFD_TO_NFC' ;;
+	esac
+
+	test_expect_success PERL,SYMLINKS,$mode_prereq \
+	"delayed checkout with $mode-collision don't write to the wrong place" '
+		test_config_global filter.delay.process \
+			"\"$TEST_ROOT/rot13-filter.pl\" --always-delay delayed.log clean smudge delay" &&
+		test_config_global filter.delay.required true &&
+
+		git init $mode-collision &&
+		(
+			cd $mode-collision &&
+			mkdir target-dir &&
+
+			empty_oid=$(printf "" | git hash-object -w --stdin) &&
+			symlink_oid=$(printf "%s" "$PWD/target-dir" | git hash-object -w --stdin) &&
+			attr_oid=$(echo "$dir/z filter=delay" | git hash-object -w --stdin) &&
+
+			cat >objs <<-EOF &&
+			100644 blob $empty_oid	$dir/x
+			100644 blob $empty_oid	$dir/y
+			100644 blob $empty_oid	$dir/z
+			120000 blob $symlink_oid	$symlink
+			100644 blob $attr_oid	.gitattributes
+			EOF
+
+			git update-index --index-info <objs &&
+			git commit -m "test commit"
+		) &&
+
+		git clone $mode-collision $mode-collision-cloned &&
+		# Make sure z was really delayed
+		grep "IN: smudge $dir/z .* \\[DELAYED\\]" $mode-collision-cloned/delayed.log &&
+
+		# Should not create $dir/z at $symlink/z
+		test_path_is_missing $mode-collision/target-dir/z
+	'
+done
+
+test_expect_success PERL,SYMLINKS,CASE_INSENSITIVE_FS \
+"delayed checkout with submodule collision don't write to the wrong place" '
+	git init collision-with-submodule &&
+	(
+		cd collision-with-submodule &&
+		git config filter.delay.process "\"$TEST_ROOT/rot13-filter.pl\" --always-delay delayed.log clean smudge delay" &&
+		git config filter.delay.required true &&
+
+		# We need Git to treat the submodule "a" and the
+		# leading dir "A" as different paths in the index.
+		git config --local core.ignoreCase false &&
+
+		empty_oid=$(printf "" | git hash-object -w --stdin) &&
+		attr_oid=$(echo "A/B/y filter=delay" | git hash-object -w --stdin) &&
+		cat >objs <<-EOF &&
+		100644 blob $empty_oid	A/B/x
+		100644 blob $empty_oid	A/B/y
+		100644 blob $attr_oid	.gitattributes
+		EOF
+		git update-index --index-info <objs &&
+
+		git init a &&
+		mkdir target-dir &&
+		symlink_oid=$(printf "%s" "$PWD/target-dir" | git -C a hash-object -w --stdin) &&
+		echo "120000 blob $symlink_oid	b" >objs &&
+		git -C a update-index --index-info <objs &&
+		git -C a commit -m sub &&
+		git submodule add ./a &&
+		git commit -m super &&
+
+		git checkout --recurse-submodules . &&
+		grep "IN: smudge A/B/y .* \\[DELAYED\\]" delayed.log &&
+		test_path_is_missing target-dir/y
+	)
+'
+
 test_done
diff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl
index cd32a82..7bb9376 100644
--- a/t/t0021/rot13-filter.pl
+++ b/t/t0021/rot13-filter.pl
@@ -2,9 +2,15 @@
 # Example implementation for the Git filter protocol version 2
 # See Documentation/gitattributes.txt, section "Filter Protocol"
 #
-# The first argument defines a debug log file that the script write to.
-# All remaining arguments define a list of supported protocol
-# capabilities ("clean", "smudge", etc).
+# Usage: rot13-filter.pl [--always-delay] <log path> <capabilities>
+#
+# Log path defines a debug log file that the script writes to. The
+# subsequent arguments define a list of supported protocol capabilities
+# ("clean", "smudge", etc).
+#
+# When --always-delay is given all pathnames with the "can-delay" flag
+# that don't appear on the list bellow are delayed with a count of 1
+# (see more below).
 #
 # This implementation supports special test cases:
 # (1) If data with the pathname "clean-write-fail.r" is processed with
@@ -53,6 +59,13 @@
 use Git::Packet;
 
 my $MAX_PACKET_CONTENT_SIZE = 65516;
+
+my $always_delay = 0;
+if ( $ARGV[0] eq '--always-delay' ) {
+	$always_delay = 1;
+	shift @ARGV;
+}
+
 my $log_file                = shift @ARGV;
 my @capabilities            = @ARGV;
 
@@ -134,6 +147,8 @@
 			if ( $buffer eq "can-delay=1" ) {
 				if ( exists $DELAY{$pathname} and $DELAY{$pathname}{"requested"} == 0 ) {
 					$DELAY{$pathname}{"requested"} = 1;
+				} elsif ( !exists $DELAY{$pathname} and $always_delay ) {
+					$DELAY{$pathname} = { "requested" => 1, "count" => 1 };
 				}
 			} elsif ($buffer =~ /^(ref|treeish|blob)=/) {
 				print $debug " $buffer";
diff --git a/t/t0027-auto-crlf.sh b/t/t0027-auto-crlf.sh
index 51f74a3..4a5c5c6 100755
--- a/t/t0027-auto-crlf.sh
+++ b/t/t0027-auto-crlf.sh
@@ -83,7 +83,7 @@
 	*) echo >&2 "Illegal 1": "$1" ; return false ;;
 	esac
 	grep "will be replaced by" "$2" | sed -e "s/\(.*\) in [^ ]*$/\1/" | uniq  >"$2".actual
-	test_i18ncmp "$2".expect "$2".actual
+	test_cmp "$2".expect "$2".actual
 }
 
 commit_check_warn () {
@@ -386,7 +386,9 @@
 	test_tick
 '
 
-
+# Disable extra chain-linting for the next set of tests. There are many
+# auto-generated ones that are not worth checking over and over.
+GIT_TEST_CHAIN_LINT_HARDER_DEFAULT=0
 
 warn_LF_CRLF="LF will be replaced by CRLF"
 warn_CRLF_LF="CRLF will be replaced by LF"
@@ -597,6 +599,9 @@
 	checkout_files     auto  "$id" ""     false   native   $NL   CRLF  CRLF_mix_LF  LF_mix_CR    LF_nul
 done
 
+# The rest of the tests are unique; do the usual linting.
+unset GIT_TEST_CHAIN_LINT_HARDER_DEFAULT
+
 # Should be the last test case: remove some files from the worktree
 test_expect_success 'ls-files --eol -d -z' '
 	rm crlf_false_attr__CRLF.txt crlf_false_attr__CRLF_mix_LF.txt crlf_false_attr__LF.txt .gitattributes &&
diff --git a/t/t0028-working-tree-encoding.sh b/t/t0028-working-tree-encoding.sh
index f970a98..82905a2 100755
--- a/t/t0028-working-tree-encoding.sh
+++ b/t/t0028-working-tree-encoding.sh
@@ -6,33 +6,10 @@
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./test-lib.sh
+. "$TEST_DIRECTORY/lib-encoding.sh"
 
 GIT_TRACE_WORKING_TREE_ENCODING=1 && export GIT_TRACE_WORKING_TREE_ENCODING
 
-test_lazy_prereq NO_UTF16_BOM '
-	test $(printf abc | iconv -f UTF-8 -t UTF-16 | wc -c) = 6
-'
-
-test_lazy_prereq NO_UTF32_BOM '
-	test $(printf abc | iconv -f UTF-8 -t UTF-32 | wc -c) = 12
-'
-
-write_utf16 () {
-	if test_have_prereq NO_UTF16_BOM
-	then
-		printf '\376\377'
-	fi &&
-	iconv -f UTF-8 -t UTF-16
-}
-
-write_utf32 () {
-	if test_have_prereq NO_UTF32_BOM
-	then
-		printf '\0\0\376\377'
-	fi &&
-	iconv -f UTF-8 -t UTF-32
-}
-
 test_expect_success 'setup test files' '
 	git config core.eol lf &&
 
diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh
index 14cafc1..ad4746d 100755
--- a/t/t0040-parse-options.sh
+++ b/t/t0040-parse-options.sh
@@ -61,7 +61,7 @@
 test_expect_success 'test help' '
 	test_must_fail test-tool parse-options -h >output 2>output.err &&
 	test_must_be_empty output.err &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 mv expect expect.err
@@ -84,7 +84,7 @@
 	cat expect.err >>expect &&
 	test_must_fail test-tool parse-options $* >output 2>output.err &&
 	test_must_be_empty output &&
-	test_i18ncmp expect output.err
+	test_cmp expect output.err
 }
 
 test_expect_success 'OPT_BOOL() #1' 'check boolean: 1 --yes'
@@ -250,7 +250,7 @@
 test_expect_success 'detect possible typos' '
 	test_must_fail test-tool parse-options -boolean >output 2>output.err &&
 	test_must_be_empty output &&
-	test_i18ncmp typo.err output.err
+	test_cmp typo.err output.err
 '
 
 cat >typo.err <<\EOF
@@ -260,7 +260,7 @@
 test_expect_success 'detect possible typos' '
 	test_must_fail test-tool parse-options -ambiguous >output 2>output.err &&
 	test_must_be_empty output &&
-	test_i18ncmp typo.err output.err
+	test_cmp typo.err output.err
 '
 
 test_expect_success 'keep some options as arguments' '
diff --git a/t/t0052-simple-ipc.sh b/t/t0052-simple-ipc.sh
new file mode 100755
index 0000000..ff98be3
--- /dev/null
+++ b/t/t0052-simple-ipc.sh
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+test_description='simple command server'
+
+. ./test-lib.sh
+
+test-tool simple-ipc SUPPORTS_SIMPLE_IPC || {
+	skip_all='simple IPC not supported on this platform'
+	test_done
+}
+
+stop_simple_IPC_server () {
+	test-tool simple-ipc stop-daemon
+}
+
+test_expect_success 'start simple command server' '
+	test_atexit stop_simple_IPC_server &&
+	test-tool simple-ipc start-daemon --threads=8 &&
+	test-tool simple-ipc is-active
+'
+
+test_expect_success 'simple command server' '
+	test-tool simple-ipc send --token=ping >actual &&
+	echo pong >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success 'servers cannot share the same path' '
+	test_must_fail test-tool simple-ipc run-daemon &&
+	test-tool simple-ipc is-active
+'
+
+test_expect_success 'big response' '
+	test-tool simple-ipc send --token=big >actual &&
+	test_line_count -ge 10000 actual &&
+	grep -q "big: [0]*9999\$" actual
+'
+
+test_expect_success 'chunk response' '
+	test-tool simple-ipc send --token=chunk >actual &&
+	test_line_count -ge 10000 actual &&
+	grep -q "big: [0]*9999\$" actual
+'
+
+test_expect_success 'slow response' '
+	test-tool simple-ipc send --token=slow >actual &&
+	test_line_count -ge 100 actual &&
+	grep -q "big: [0]*99\$" actual
+'
+
+# Send an IPC with n=100,000 bytes of ballast.  This should be large enough
+# to force both the kernel and the pkt-line layer to chunk the message to the
+# daemon and for the daemon to receive it in chunks.
+#
+test_expect_success 'sendbytes' '
+	test-tool simple-ipc sendbytes --bytecount=100000 --byte=A >actual &&
+	grep "sent:A00100000 rcvd:A00100000" actual
+'
+
+# Start a series of <threads> client threads that each make <batchsize>
+# IPC requests to the server.  Each (<threads> * <batchsize>) request
+# will open a new connection to the server and randomly bind to a server
+# thread.  Each client thread exits after completing its batch.  So the
+# total number of live client threads will be smaller than the total.
+# Each request will send a message containing at least <bytecount> bytes
+# of ballast.  (Responses are small.)
+#
+# The purpose here is to test threading in the server and responding to
+# many concurrent client requests (regardless of whether they come from
+# 1 client process or many).  And to test that the server side of the
+# named pipe/socket is stable.  (On Windows this means that the server
+# pipe is properly recycled.)
+#
+# On Windows it also lets us adjust the connection timeout in the
+# `ipc_client_send_command()`.
+#
+# Note it is easy to drive the system into failure by requesting an
+# insane number of threads on client or server and/or increasing the
+# per-thread batchsize or the per-request bytecount (ballast).
+# On Windows these failures look like "pipe is busy" errors.
+# So I've chosen fairly conservative values for now.
+#
+# We expect output of the form "sent:<letter><length> ..."
+# With terms (7, 19, 13) we expect:
+#   <letter> in [A-G]
+#   <length> in [19+0 .. 19+(13-1)]
+# and (7 * 13) successful responses.
+#
+test_expect_success 'stress test threads' '
+	test-tool simple-ipc multiple \
+		--threads=7 \
+		--bytecount=19 \
+		--batchsize=13 \
+		>actual &&
+	test_line_count = 92 actual &&
+	grep "good 91" actual &&
+	grep "sent:A" <actual >actual_a &&
+	cat >expect_a <<-EOF &&
+		sent:A00000019 rcvd:A00000019
+		sent:A00000020 rcvd:A00000020
+		sent:A00000021 rcvd:A00000021
+		sent:A00000022 rcvd:A00000022
+		sent:A00000023 rcvd:A00000023
+		sent:A00000024 rcvd:A00000024
+		sent:A00000025 rcvd:A00000025
+		sent:A00000026 rcvd:A00000026
+		sent:A00000027 rcvd:A00000027
+		sent:A00000028 rcvd:A00000028
+		sent:A00000029 rcvd:A00000029
+		sent:A00000030 rcvd:A00000030
+		sent:A00000031 rcvd:A00000031
+	EOF
+	test_cmp expect_a actual_a
+'
+
+test_expect_success 'stop-daemon works' '
+	test-tool simple-ipc stop-daemon &&
+	test_must_fail test-tool simple-ipc is-active &&
+	test_must_fail test-tool simple-ipc send --token=ping
+'
+
+test_done
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 0ff06b5..de49607 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -468,6 +468,36 @@
 		.gitmodules,:\$DATA
 '
 
+test_expect_success 'match .gitattributes' '
+	test-tool path-utils is_dotgitattributes \
+		.gitattributes \
+		.git${u200c}attributes \
+		.Gitattributes \
+		.gitattributeS \
+		GITATT~1 \
+		GI7D29~1
+'
+
+test_expect_success 'match .gitignore' '
+	test-tool path-utils is_dotgitignore \
+		.gitignore \
+		.git${u200c}ignore \
+		.Gitignore \
+		.gitignorE \
+		GITIGN~1 \
+		GI250A~1
+'
+
+test_expect_success 'match .mailmap' '
+	test-tool path-utils is_dotmailmap \
+		.mailmap \
+		.mail${u200c}map \
+		.Mailmap \
+		.mailmaP \
+		MAILMA~1 \
+		MABA30~1
+'
+
 test_expect_success MINGW 'is_valid_path() on Windows' '
 	test-tool path-utils is_valid_path \
 		win32 \
diff --git a/t/t0069-oidtree.sh b/t/t0069-oidtree.sh
new file mode 100755
index 0000000..bfb1397
--- /dev/null
+++ b/t/t0069-oidtree.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+test_description='basic tests for the oidtree implementation'
+. ./test-lib.sh
+
+maxhexsz=$(test_oid hexsz)
+echoid () {
+	prefix="${1:+$1 }"
+	shift
+	while test $# -gt 0
+	do
+		shortoid="$1"
+		shift
+		difference=$(($maxhexsz - ${#shortoid}))
+		printf "%s%s%0${difference}d\\n" "$prefix" "$shortoid" "0"
+	done
+}
+
+test_expect_success 'oidtree insert and contains' '
+	cat >expect <<-\EOF &&
+		0
+		0
+		0
+		1
+		1
+		0
+	EOF
+	{
+		echoid insert 444 1 2 3 4 5 a b c d e &&
+		echoid contains 44 441 440 444 4440 4444
+		echo clear
+	} | test-tool oidtree >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'oidtree each' '
+	echoid "" 123 321 321 >expect &&
+	{
+		echoid insert f 9 8 123 321 a b c d e
+		echo each 12300
+		echo each 3211
+		echo each 3210
+		echo each 32100
+		echo clear
+	} | test-tool oidtree >actual &&
+	test_cmp expect actual
+'
+
+test_done
diff --git a/t/t0201-gettext-fallbacks.sh b/t/t0201-gettext-fallbacks.sh
index 90da1c7..6c74df0 100755
--- a/t/t0201-gettext-fallbacks.sh
+++ b/t/t0201-gettext-fallbacks.sh
@@ -18,7 +18,7 @@
     test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
 '
 
-test_expect_success C_LOCALE_OUTPUT 'sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME" is fallthrough' '
+test_expect_success 'sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME" is fallthrough' '
     echo fallthrough >expect &&
     echo $GIT_INTERNAL_GETTEXT_SH_SCHEME >actual &&
     test_cmp expect actual
@@ -27,25 +27,25 @@
 test_expect_success 'gettext: our gettext() fallback has pass-through semantics' '
     printf "test" >expect &&
     gettext "test" >actual &&
-    test_i18ncmp expect actual &&
+    test_cmp expect actual &&
     printf "test more words" >expect &&
     gettext "test more words" >actual &&
-    test_i18ncmp expect actual
+    test_cmp expect actual
 '
 
 test_expect_success 'eval_gettext: our eval_gettext() fallback has pass-through semantics' '
     printf "test" >expect &&
     eval_gettext "test" >actual &&
-    test_i18ncmp expect actual &&
+    test_cmp expect actual &&
     printf "test more words" >expect &&
     eval_gettext "test more words" >actual &&
-    test_i18ncmp expect actual
+    test_cmp expect actual
 '
 
 test_expect_success 'eval_gettext: our eval_gettext() fallback can interpolate variables' '
     printf "test YesPlease" >expect &&
     GIT_INTERNAL_GETTEXT_TEST_FALLBACKS=YesPlease eval_gettext "test \$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" >actual &&
-    test_i18ncmp expect actual
+    test_cmp expect actual
 '
 
 test_expect_success 'eval_gettext: our eval_gettext() fallback can interpolate variables with spaces' '
@@ -53,7 +53,7 @@
     export cmdline &&
     printf "When you have resolved this problem, run git am --resolved." >expect &&
     eval_gettext "When you have resolved this problem, run \$cmdline --resolved." >actual &&
-    test_i18ncmp expect actual
+    test_cmp expect actual
 '
 
 test_expect_success 'eval_gettext: our eval_gettext() fallback can interpolate variables with spaces and quotes' '
@@ -61,7 +61,7 @@
     export cmdline &&
     printf "When you have resolved this problem, run \"git am --resolved\"." >expect &&
     eval_gettext "When you have resolved this problem, run \"\$cmdline --resolved\"." >actual &&
-    test_i18ncmp expect actual
+    test_cmp expect actual
 '
 
 test_done
diff --git a/t/t0300-credentials.sh b/t/t0300-credentials.sh
index a18f8a4..3485c05 100755
--- a/t/t0300-credentials.sh
+++ b/t/t0300-credentials.sh
@@ -578,7 +578,7 @@
 	quit: host=example.com
 	fatal: credential helper '\''quit'\'' told us to quit
 	EOF
-	test_i18ncmp expect stderr
+	test_cmp expect stderr
 '
 
 test_expect_success 'empty helper spec resets helper list' '
@@ -606,7 +606,7 @@
 	warning: url contains a newline in its path component: https://one.example.com?%0ahost=two.example.com/
 	fatal: credential url cannot be parsed: https://one.example.com?%0ahost=two.example.com/
 	EOF
-	test_i18ncmp expect stderr
+	test_cmp expect stderr
 '
 
 test_expect_success 'host-less URLs are parsed as empty host' '
@@ -633,7 +633,7 @@
 	cat >expect <<-\EOF &&
 	fatal: refusing to work with credential missing host field
 	EOF
-	test_i18ncmp expect stderr
+	test_cmp expect stderr
 '
 
 test_expect_success 'credential system refuses to work with missing protocol' '
@@ -643,7 +643,7 @@
 	cat >expect <<-\EOF &&
 	fatal: refusing to work with credential missing protocol field
 	EOF
-	test_i18ncmp expect stderr
+	test_cmp expect stderr
 '
 
 # usage: check_host_and_path <url> <expected-host> <expected-path>
diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh
index 584a039..a211a66 100755
--- a/t/t0410-partial-clone.sh
+++ b/t/t0410-partial-clone.sh
@@ -604,6 +604,29 @@
 	git -C repo cherry-pick side1
 '
 
+test_expect_success 'lazy-fetch when accessing object not in the_repository' '
+	rm -rf full partial.git &&
+	test_create_repo full &&
+	test_commit -C full create-a-file file.txt &&
+
+	test_config -C full uploadpack.allowfilter 1 &&
+	test_config -C full uploadpack.allowanysha1inwant 1 &&
+	git clone --filter=blob:none --bare "file://$(pwd)/full" partial.git &&
+	FILE_HASH=$(git -C full rev-parse HEAD:file.txt) &&
+
+	# Sanity check that the file is missing
+	git -C partial.git rev-list --objects --missing=print HEAD >out &&
+	grep "[?]$FILE_HASH" out &&
+
+	git -C full cat-file -s "$FILE_HASH" >expect &&
+	test-tool partial-clone object-info partial.git "$FILE_HASH" >actual &&
+	test_cmp expect actual &&
+
+	# Sanity check that the file is now present
+	git -C partial.git rev-list --objects --missing=print HEAD >out &&
+	! grep "[?]$FILE_HASH" out
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd
 
diff --git a/t/t0500-progress-display.sh b/t/t0500-progress-display.sh
index 84cce34..22058b5 100755
--- a/t/t0500-progress-display.sh
+++ b/t/t0500-progress-display.sh
@@ -29,7 +29,7 @@
 	test-tool progress "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display with total' '
@@ -48,7 +48,7 @@
 	test-tool progress --total=3 "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display breaks long lines #1' '
@@ -72,7 +72,7 @@
 		<in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display breaks long lines #2' '
@@ -100,7 +100,7 @@
 		<in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display breaks long lines #3 - even the first is too long' '
@@ -126,7 +126,7 @@
 		<in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display breaks long lines #4 - title line matches terminal width' '
@@ -150,7 +150,7 @@
 		<in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 # Progress counter goes backwards, this should not happen in practice.
@@ -172,7 +172,7 @@
 	test-tool progress --total=1000 "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display with throughput' '
@@ -201,7 +201,7 @@
 	test-tool progress "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress display with throughput and total' '
@@ -226,7 +226,7 @@
 	test-tool progress --total=40 "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'cover up after throughput shortens' '
@@ -255,7 +255,7 @@
 	test-tool progress "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'cover up after throughput shortens a lot' '
@@ -280,7 +280,7 @@
 	test-tool progress "Working hard" <in 2>stderr &&
 
 	show_cr <stderr >out &&
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'progress generates traces' '
diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
index 5d2dc99..18b3779 100755
--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@ -586,4 +586,26 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'set up object list for --batch-all-objects tests' '
+	git -C all-two cat-file --batch-all-objects --batch-check="%(objectname)" >objects
+'
+
+test_expect_success 'cat-file --batch="%(objectname)" with --batch-all-objects will work' '
+	git -C all-two cat-file --batch="%(objectname)" <objects >expect &&
+	git -C all-two cat-file --batch-all-objects --batch="%(objectname)" >actual &&
+	cmp expect actual
+'
+
+test_expect_success 'cat-file --batch="%(rest)" with --batch-all-objects will work' '
+	git -C all-two cat-file --batch="%(rest)" <objects >expect &&
+	git -C all-two cat-file --batch-all-objects --batch="%(rest)" >actual &&
+	cmp expect actual
+'
+
+test_expect_success 'cat-file --batch="batman" with --batch-all-objects will work' '
+	git -C all-two cat-file --batch="batman" <objects >expect &&
+	git -C all-two cat-file --batch-all-objects --batch="batman" >actual &&
+	cmp expect actual
+'
+
 test_done
diff --git a/t/t1011-read-tree-sparse-checkout.sh b/t/t1011-read-tree-sparse-checkout.sh
index dfe9794..24092c0 100755
--- a/t/t1011-read-tree-sparse-checkout.sh
+++ b/t/t1011-read-tree-sparse-checkout.sh
@@ -253,7 +253,7 @@
 
 After fixing the above paths, you may want to run `git sparse-checkout reapply`.
 EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'checkout without --ignore-skip-worktree-bits' '
diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
index fc64e9e..38fc834 100755
--- a/t/t1091-sparse-checkout-builtin.sh
+++ b/t/t1091-sparse-checkout-builtin.sh
@@ -205,6 +205,19 @@
 	check_files repo a deep folder1 folder2
 '
 
+test_expect_success 'sparse-index enabled and disabled' '
+	git -C repo sparse-checkout init --cone --sparse-index &&
+	test_cmp_config -C repo true index.sparse &&
+	test-tool -C repo read-cache --table >cache &&
+	grep " tree " cache &&
+
+	git -C repo sparse-checkout disable &&
+	test-tool -C repo read-cache --table >cache &&
+	! grep " tree " cache &&
+	git -C repo config --list >config &&
+	! grep index.sparse config
+'
+
 test_expect_success 'cone mode: init and set' '
 	git -C repo sparse-checkout init --cone &&
 	git -C repo config --list >config &&
diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh
index 8cd3e5a..cabbd42 100755
--- a/t/t1092-sparse-checkout-compatibility.sh
+++ b/t/t1092-sparse-checkout-compatibility.sh
@@ -2,18 +2,22 @@
 
 test_description='compare full workdir to sparse workdir'
 
+GIT_TEST_SPLIT_INDEX=0
+GIT_TEST_SPARSE_INDEX=
+
 . ./test-lib.sh
 
 test_expect_success 'setup' '
 	git init initial-repo &&
 	(
+		GIT_TEST_SPARSE_INDEX=0 &&
 		cd initial-repo &&
 		echo a >a &&
 		echo "after deep" >e &&
 		echo "after folder1" >g &&
 		echo "after x" >z &&
 		mkdir folder1 folder2 deep x &&
-		mkdir deep/deeper1 deep/deeper2 &&
+		mkdir deep/deeper1 deep/deeper2 deep/before deep/later &&
 		mkdir deep/deeper1/deepest &&
 		echo "after deeper1" >deep/e &&
 		echo "after deepest" >deep/deeper1/e &&
@@ -21,10 +25,23 @@
 		cp a folder2 &&
 		cp a x &&
 		cp a deep &&
+		cp a deep/before &&
 		cp a deep/deeper1 &&
 		cp a deep/deeper2 &&
+		cp a deep/later &&
 		cp a deep/deeper1/deepest &&
 		cp -r deep/deeper1/deepest deep/deeper2 &&
+		mkdir deep/deeper1/0 &&
+		mkdir deep/deeper1/0/0 &&
+		touch deep/deeper1/0/1 &&
+		touch deep/deeper1/0/0/0 &&
+		>folder1- &&
+		>folder1.x &&
+		>folder10 &&
+		cp -r deep/deeper1/0 folder1 &&
+		cp -r deep/deeper1/0 folder2 &&
+		echo >>folder1/0/0/0 &&
+		echo >>folder2/0/1 &&
 		git add . &&
 		git commit -m "initial commit" &&
 		git checkout -b base &&
@@ -36,7 +53,7 @@
 		done &&
 
 		git checkout -b rename-base base &&
-		echo >folder1/larger-content <<-\EOF &&
+		cat >folder1/larger-content <<-\EOF &&
 		matching
 		lines
 		help
@@ -52,11 +69,17 @@
 		mv folder1/a folder2/b &&
 		mv folder1/larger-content folder2/edited-content &&
 		echo >>folder2/edited-content &&
+		echo >>folder2/0/1 &&
+		echo stuff >>deep/deeper1/a &&
 		git add . &&
 		git commit -m "rename folder1/... to folder2/..." &&
 
 		git checkout -b rename-out-to-in rename-base &&
 		mv folder1/a deep/deeper1/b &&
+		echo more stuff >>deep/deeper1/a &&
+		rm folder2/0/1 &&
+		mkdir folder2/0/1 &&
+		echo >>folder2/0/1/1 &&
 		mv folder1/larger-content deep/deeper1/edited-content &&
 		echo >>deep/deeper1/edited-content &&
 		git add . &&
@@ -64,6 +87,9 @@
 
 		git checkout -b rename-in-to-out rename-base &&
 		mv deep/deeper1/a folder1/b &&
+		echo >>folder2/0/1 &&
+		rm -rf folder1/0/0 &&
+		echo >>folder1/0/0 &&
 		mv deep/deeper1/larger-content folder1/edited-content &&
 		echo >>folder1/edited-content &&
 		git add . &&
@@ -87,39 +113,102 @@
 
 	cp -r initial-repo sparse-checkout &&
 	git -C sparse-checkout reset --hard &&
-	git -C sparse-checkout sparse-checkout init --cone &&
+
+	cp -r initial-repo sparse-index &&
+	git -C sparse-index reset --hard &&
 
 	# initialize sparse-checkout definitions
-	git -C sparse-checkout sparse-checkout set deep
+	git -C sparse-checkout sparse-checkout init --cone &&
+	git -C sparse-checkout sparse-checkout set deep &&
+	git -C sparse-index sparse-checkout init --cone --sparse-index &&
+	test_cmp_config -C sparse-index true index.sparse &&
+	git -C sparse-index sparse-checkout set deep
 }
 
 run_on_sparse () {
 	(
 		cd sparse-checkout &&
-		$* >../sparse-checkout-out 2>../sparse-checkout-err
+		GIT_PROGRESS_DELAY=100000 "$@" >../sparse-checkout-out 2>../sparse-checkout-err
+	) &&
+	(
+		cd sparse-index &&
+		GIT_PROGRESS_DELAY=100000 "$@" >../sparse-index-out 2>../sparse-index-err
 	)
 }
 
 run_on_all () {
 	(
 		cd full-checkout &&
-		$* >../full-checkout-out 2>../full-checkout-err
+		GIT_PROGRESS_DELAY=100000 "$@" >../full-checkout-out 2>../full-checkout-err
 	) &&
-	run_on_sparse $*
+	run_on_sparse "$@"
 }
 
 test_all_match () {
-	run_on_all $* &&
+	run_on_all "$@" &&
 	test_cmp full-checkout-out sparse-checkout-out &&
-	test_cmp full-checkout-err sparse-checkout-err
+	test_cmp full-checkout-out sparse-index-out &&
+	test_cmp full-checkout-err sparse-checkout-err &&
+	test_cmp full-checkout-err sparse-index-err
 }
 
+test_sparse_match () {
+	run_on_sparse "$@" &&
+	test_cmp sparse-checkout-out sparse-index-out &&
+	test_cmp sparse-checkout-err sparse-index-err
+}
+
+test_expect_success 'sparse-index contents' '
+	init_repos &&
+
+	test-tool -C sparse-index read-cache --table >cache &&
+	for dir in folder1 folder2 x
+	do
+		TREE=$(git -C sparse-index rev-parse HEAD:$dir) &&
+		grep "040000 tree $TREE	$dir/" cache \
+			|| return 1
+	done &&
+
+	git -C sparse-index sparse-checkout set folder1 &&
+
+	test-tool -C sparse-index read-cache --table >cache &&
+	for dir in deep folder2 x
+	do
+		TREE=$(git -C sparse-index rev-parse HEAD:$dir) &&
+		grep "040000 tree $TREE	$dir/" cache \
+			|| return 1
+	done &&
+
+	git -C sparse-index sparse-checkout set deep/deeper1 &&
+
+	test-tool -C sparse-index read-cache --table >cache &&
+	for dir in deep/deeper2 folder1 folder2 x
+	do
+		TREE=$(git -C sparse-index rev-parse HEAD:$dir) &&
+		grep "040000 tree $TREE	$dir/" cache \
+			|| return 1
+	done &&
+
+	# Disabling the sparse-index removes tree entries with full ones
+	git -C sparse-index sparse-checkout init --no-sparse-index &&
+
+	test-tool -C sparse-index read-cache --table >cache &&
+	! grep "040000 tree" cache &&
+	test_sparse_match test-tool read-cache --table
+'
+
+test_expect_success 'expanded in-memory index matches full index' '
+	init_repos &&
+	test_sparse_match test-tool read-cache --expand --table
+'
+
 test_expect_success 'status with options' '
 	init_repos &&
+	test_sparse_match ls &&
 	test_all_match git status --porcelain=v2 &&
 	test_all_match git status --porcelain=v2 -z -u &&
 	test_all_match git status --porcelain=v2 -uno &&
-	run_on_all "touch README.md" &&
+	run_on_all touch README.md &&
 	test_all_match git status --porcelain=v2 &&
 	test_all_match git status --porcelain=v2 -z -u &&
 	test_all_match git status --porcelain=v2 -uno &&
@@ -129,13 +218,21 @@
 	test_all_match git status --porcelain=v2 -uno
 '
 
+test_expect_success 'status reports sparse-checkout' '
+	init_repos &&
+	git -C sparse-checkout status >full &&
+	git -C sparse-index status >sparse &&
+	test_i18ngrep "You are in a sparse checkout with " full &&
+	test_i18ngrep "You are in a sparse checkout." sparse
+'
+
 test_expect_success 'add, commit, checkout' '
 	init_repos &&
 
 	write_script edit-contents <<-\EOF &&
 	echo text >>$1
 	EOF
-	run_on_all "../edit-contents README.md" &&
+	run_on_all ../edit-contents README.md &&
 
 	test_all_match git add README.md &&
 	test_all_match git status --porcelain=v2 &&
@@ -144,7 +241,7 @@
 	test_all_match git checkout HEAD~1 &&
 	test_all_match git checkout - &&
 
-	run_on_all "../edit-contents README.md" &&
+	run_on_all ../edit-contents README.md &&
 
 	test_all_match git add -A &&
 	test_all_match git status --porcelain=v2 &&
@@ -153,7 +250,7 @@
 	test_all_match git checkout HEAD~1 &&
 	test_all_match git checkout - &&
 
-	run_on_all "../edit-contents deep/newfile" &&
+	run_on_all ../edit-contents deep/newfile &&
 
 	test_all_match git status --porcelain=v2 -uno &&
 	test_all_match git status --porcelain=v2 &&
@@ -165,6 +262,44 @@
 	test_all_match git checkout -
 '
 
+test_expect_success 'status/add: outside sparse cone' '
+	init_repos &&
+
+	# adding a "missing" file outside the cone should fail
+	test_sparse_match test_must_fail git add folder1/a &&
+
+	# folder1 is at HEAD, but outside the sparse cone
+	run_on_sparse mkdir folder1 &&
+	cp initial-repo/folder1/a sparse-checkout/folder1/a &&
+	cp initial-repo/folder1/a sparse-index/folder1/a &&
+
+	test_sparse_match git status &&
+
+	write_script edit-contents <<-\EOF &&
+	echo text >>$1
+	EOF
+	run_on_sparse ../edit-contents folder1/a &&
+	run_on_all ../edit-contents folder1/new &&
+
+	test_sparse_match git status --porcelain=v2 &&
+
+	# This "git add folder1/a" fails with a warning
+	# in the sparse repos, differing from the full
+	# repo. This is intentional.
+	test_sparse_match test_must_fail git add folder1/a &&
+	test_sparse_match test_must_fail git add --refresh folder1/a &&
+	test_all_match git status --porcelain=v2 &&
+
+	test_all_match git add . &&
+	test_all_match git status --porcelain=v2 &&
+	test_all_match git commit -m folder1/new &&
+
+	run_on_all ../edit-contents folder1/newer &&
+	test_all_match git add folder1/ &&
+	test_all_match git status --porcelain=v2 &&
+	test_all_match git commit -m folder1/newer
+'
+
 test_expect_success 'checkout and reset --hard' '
 	init_repos &&
 
@@ -186,7 +321,7 @@
 	write_script edit-contents <<-\EOF &&
 	echo text >>README.md
 	EOF
-	run_on_all "../edit-contents" &&
+	run_on_all ../edit-contents &&
 
 	test_all_match git diff &&
 	test_all_match git diff --staged &&
@@ -195,13 +330,29 @@
 	test_all_match git diff --staged
 '
 
-test_expect_success 'diff with renames' '
+test_expect_success 'diff with renames and conflicts' '
 	init_repos &&
 
 	for branch in rename-out-to-out rename-out-to-in rename-in-to-out
 	do
 		test_all_match git checkout rename-base &&
-		test_all_match git checkout $branch -- .&&
+		test_all_match git checkout $branch -- . &&
+		test_all_match git status --porcelain=v2 &&
+		test_all_match git diff --staged --no-renames &&
+		test_all_match git diff --staged --find-renames || return 1
+	done
+'
+
+test_expect_success 'diff with directory/file conflicts' '
+	init_repos &&
+
+	for branch in rename-out-to-out rename-out-to-in rename-in-to-out
+	do
+		git -C full-checkout reset --hard &&
+		test_sparse_match git reset --hard &&
+		test_all_match git checkout $branch &&
+		test_all_match git checkout rename-base -- . &&
+		test_all_match git status --porcelain=v2 &&
 		test_all_match git diff --staged --no-renames &&
 		test_all_match git diff --staged --find-renames || return 1
 	done
@@ -241,8 +392,8 @@
 	test_all_match git blame deep/deeper2/deepest/a
 '
 
-# TODO: reset currently does not behave as expected when in a
-# sparse-checkout.
+# NEEDSWORK: a sparse-checkout behaves differently from a full checkout
+# in this scenario, but it shouldn't.
 test_expect_failure 'checkout and reset (mixed)' '
 	init_repos &&
 
@@ -252,6 +403,17 @@
 	test_all_match git reset update-folder2
 '
 
+# NEEDSWORK: a sparse-checkout behaves differently from a full checkout
+# in this scenario, but it shouldn't.
+test_expect_success 'checkout and reset (mixed) [sparse]' '
+	init_repos &&
+
+	test_sparse_match git checkout -b reset-test update-deep &&
+	test_sparse_match git reset deepest &&
+	test_sparse_match git reset update-folder1 &&
+	test_sparse_match git reset update-folder2
+'
+
 test_expect_success 'merge' '
 	init_repos &&
 
@@ -274,13 +436,35 @@
 	done
 '
 
+# Sparse-index fails to convert the index in the
+# final 'git cherry-pick' command.
+test_expect_success 'cherry-pick with conflicts' '
+	init_repos &&
+
+	write_script edit-conflict <<-\EOF &&
+	echo $1 >conflict
+	EOF
+
+	test_all_match git checkout -b to-cherry-pick &&
+	run_on_all ../edit-conflict ABC &&
+	test_all_match git add conflict &&
+	test_all_match git commit -m "conflict to pick" &&
+
+	test_all_match git checkout -B base HEAD~1 &&
+	run_on_all ../edit-conflict DEF &&
+	test_all_match git add conflict &&
+	test_all_match git commit -m "conflict in base" &&
+
+	test_all_match test_must_fail git cherry-pick to-cherry-pick
+'
+
 test_expect_success 'clean' '
 	init_repos &&
 
 	echo bogus >>.gitignore &&
 	run_on_all cp ../.gitignore . &&
 	test_all_match git add .gitignore &&
-	test_all_match git commit -m ignore-bogus-files &&
+	test_all_match git commit -m "ignore bogus files" &&
 
 	run_on_sparse mkdir folder1 &&
 	run_on_all touch folder1/bogus &&
@@ -288,14 +472,91 @@
 	test_all_match git status --porcelain=v2 &&
 	test_all_match git clean -f &&
 	test_all_match git status --porcelain=v2 &&
+	test_sparse_match ls &&
+	test_sparse_match ls folder1 &&
 
 	test_all_match git clean -xf &&
 	test_all_match git status --porcelain=v2 &&
+	test_sparse_match ls &&
+	test_sparse_match ls folder1 &&
 
 	test_all_match git clean -xdf &&
 	test_all_match git status --porcelain=v2 &&
+	test_sparse_match ls &&
+	test_sparse_match ls folder1 &&
 
-	test_path_is_dir sparse-checkout/folder1
+	test_sparse_match test_path_is_dir folder1
+'
+
+test_expect_success 'submodule handling' '
+	init_repos &&
+
+	test_all_match mkdir modules &&
+	test_all_match touch modules/a &&
+	test_all_match git add modules &&
+	test_all_match git commit -m "add modules directory" &&
+
+	run_on_all git submodule add "$(pwd)/initial-repo" modules/sub &&
+	test_all_match git commit -m "add submodule" &&
+
+	# having a submodule prevents "modules" from collapse
+	test-tool -C sparse-index read-cache --table >cache &&
+	grep "100644 blob .*	modules/a" cache &&
+	grep "160000 commit $(git -C initial-repo rev-parse HEAD)	modules/sub" cache
+'
+
+test_expect_success 'sparse-index is expanded and converted back' '
+	init_repos &&
+
+	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
+		git -C sparse-index -c core.fsmonitor="" reset --hard &&
+	test_region index convert_to_sparse trace2.txt &&
+	test_region index ensure_full_index trace2.txt
+'
+
+test_expect_success 'sparse-index is not expanded' '
+	init_repos &&
+
+	rm -f trace2.txt &&
+	echo >>sparse-index/untracked.txt &&
+	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
+		git -C sparse-index status &&
+	test_region ! index ensure_full_index trace2.txt
+'
+
+# NEEDSWORK: a sparse-checkout behaves differently from a full checkout
+# in this scenario, but it shouldn't.
+test_expect_success 'reset mixed and checkout orphan' '
+	init_repos &&
+
+	test_all_match git checkout rename-out-to-in &&
+
+	# Sparse checkouts do not agree with full checkouts about
+	# how to report a directory/file conflict during a reset.
+	# This command would fail with test_all_match because the
+	# full checkout reports "T folder1/0/1" while a sparse
+	# checkout reports "D folder1/0/1". This matches because
+	# the sparse checkouts skip "adding" the other side of
+	# the conflict.
+	test_sparse_match git reset --mixed HEAD~1 &&
+	test_sparse_match test-tool read-cache --table --expand &&
+	test_sparse_match git status --porcelain=v2 &&
+
+	# At this point, sparse-checkouts behave differently
+	# from the full-checkout.
+	test_sparse_match git checkout --orphan new-branch &&
+	test_sparse_match test-tool read-cache --table --expand &&
+	test_sparse_match git status --porcelain=v2
+'
+
+test_expect_success 'add everything with deep new file' '
+	init_repos &&
+
+	run_on_sparse git sparse-checkout set deep/deeper1/deepest &&
+
+	run_on_all touch deep/deeper1/x &&
+	test_all_match git add . &&
+	test_all_match git status --porcelain=v2
 '
 
 test_done
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
index e0dd5d6..9ff46f3 100755
--- a/t/t1300-config.sh
+++ b/t/t1300-config.sh
@@ -1374,16 +1374,29 @@
 	cat >expect <<-\EOF &&
 	value
 	value
+	value
+	value
+	false
 	false
 	EOF
 	{
 		ENVVAR=value git --config-env=core.name=ENVVAR config core.name &&
+		ENVVAR=value git --config-env core.name=ENVVAR config core.name &&
 		ENVVAR=value git --config-env=foo.CamelCase=ENVVAR config foo.camelcase &&
-		ENVVAR= git --config-env=foo.flag=ENVVAR config --bool foo.flag
+		ENVVAR=value git --config-env foo.CamelCase=ENVVAR config foo.camelcase &&
+		ENVVAR= git --config-env=foo.flag=ENVVAR config --bool foo.flag &&
+		ENVVAR= git --config-env foo.flag=ENVVAR config --bool foo.flag
 	} >actual &&
 	test_cmp expect actual
 '
 
+test_expect_success 'git --config-env with missing value' '
+	test_must_fail env ENVVAR=value git --config-env 2>error &&
+	grep "no config key given for --config-env" error &&
+	test_must_fail env ENVVAR=value git --config-env config core.name 2>error &&
+	grep "invalid config format: config" error
+'
+
 test_expect_success 'git --config-env fails with invalid parameters' '
 	test_must_fail git --config-env=foo.flag config --bool foo.flag 2>error &&
 	test_i18ngrep "invalid config format: foo.flag" error &&
@@ -2059,6 +2072,91 @@
 	test_cmp expect output
 '
 
+test_expect_success 'override global and system config' '
+	test_when_finished rm -f "$HOME"/.config/git &&
+
+	cat >"$HOME"/.gitconfig <<-EOF &&
+	[home]
+		config = true
+	EOF
+	mkdir -p "$HOME"/.config/git &&
+	cat >"$HOME"/.config/git/config <<-EOF &&
+	[xdg]
+		config = true
+	EOF
+	cat >.git/config <<-EOF &&
+	[local]
+		config = true
+	EOF
+	cat >custom-global-config <<-EOF &&
+	[global]
+		config = true
+	EOF
+	cat >custom-system-config <<-EOF &&
+	[system]
+		config = true
+	EOF
+
+	cat >expect <<-EOF &&
+	global	xdg.config=true
+	global	home.config=true
+	local	local.config=true
+	EOF
+	git config --show-scope --list >output &&
+	test_cmp expect output &&
+
+	cat >expect <<-EOF &&
+	system	system.config=true
+	global	global.config=true
+	local	local.config=true
+	EOF
+	GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=custom-system-config GIT_CONFIG_GLOBAL=custom-global-config \
+		git config --show-scope --list >output &&
+	test_cmp expect output &&
+
+	cat >expect <<-EOF &&
+	local	local.config=true
+	EOF
+	GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=/dev/null GIT_CONFIG_GLOBAL=/dev/null \
+		git config --show-scope --list >output &&
+	test_cmp expect output
+'
+
+test_expect_success 'override global and system config with missing file' '
+	test_must_fail env GIT_CONFIG_GLOBAL=does-not-exist GIT_CONFIG_SYSTEM=/dev/null git config --global --list &&
+	test_must_fail env GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_SYSTEM=does-not-exist git config --system --list &&
+	GIT_CONFIG_GLOBAL=does-not-exist GIT_CONFIG_SYSTEM=does-not-exist git version
+'
+
+test_expect_success 'system override has no effect with GIT_CONFIG_NOSYSTEM' '
+	# `git config --system` has different semantics compared to other
+	# commands as it ignores GIT_CONFIG_NOSYSTEM. We thus test whether the
+	# variable has an effect via a different proxy.
+	cat >alias-config <<-EOF &&
+	[alias]
+		hello-world = !echo "hello world"
+	EOF
+	test_must_fail env GIT_CONFIG_NOSYSTEM=true GIT_CONFIG_SYSTEM=alias-config \
+		git hello-world &&
+	GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=alias-config \
+		git hello-world >actual &&
+	echo "hello world" >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success 'write to overridden global and system config' '
+	cat >expect <<EOF &&
+[config]
+	key = value
+EOF
+
+	GIT_CONFIG_GLOBAL=write-to-global git config --global config.key value &&
+	test_cmp expect write-to-global &&
+
+	GIT_CONFIG_SYSTEM=write-to-system git config --system config.key value &&
+	test_cmp expect write-to-system
+'
+
 for opt in --local --worktree
 do
 	test_expect_success "$opt requires a repo" '
diff --git a/t/t1301-shared-repo.sh b/t/t1301-shared-repo.sh
index ac947bf..84bf197 100755
--- a/t/t1301-shared-repo.sh
+++ b/t/t1301-shared-repo.sh
@@ -124,7 +124,7 @@
 		: happy
 		;;
 	*)
-		echo Ooops, .git/logs/refs/heads/main is not 0662 [$actual]
+		echo Ooops, .git/logs/refs/heads/main is not 066x [$actual]
 		false
 		;;
 	esac
diff --git a/t/t1306-xdg-files.sh b/t/t1306-xdg-files.sh
index dd87b43..40d3c42 100755
--- a/t/t1306-xdg-files.sh
+++ b/t/t1306-xdg-files.sh
@@ -116,7 +116,7 @@
 test_expect_success 'Checking XDG ignore file when HOME is unset' '
 	(sane_unset HOME &&
 	 git config --unset core.excludesfile &&
-	 git ls-files --exclude-standard --ignored >actual) &&
+	 git ls-files --exclude-standard --ignored --others >actual) &&
 	test_must_be_empty actual
 '
 
diff --git a/t/t1307-config-blob.sh b/t/t1307-config-blob.sh
index 002e6d3..930dce0 100755
--- a/t/t1307-config-blob.sh
+++ b/t/t1307-config-blob.sh
@@ -65,9 +65,7 @@
 '
 
 test_expect_success 'can parse blob ending with CR' '
-	printf "[some]key = value\\r" >config &&
-	git add config &&
-	git commit -m CR &&
+	test_commit --printf CR config "[some]key = value\\r" &&
 	echo value >expect &&
 	git config --blob=HEAD:config some.key >actual &&
 	test_cmp expect actual
diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh
index 3a527e3..88b119a 100755
--- a/t/t1308-config-set.sh
+++ b/t/t1308-config-set.sh
@@ -208,14 +208,14 @@
 	echo "[" >>.git/config &&
 	echo "fatal: bad config line 34 in file .git/config" >expect &&
 	test_expect_code 128 test-tool config get_value foo.bar 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'proper error on error in custom config files' '
 	echo "[" >>syntax-error &&
 	echo "fatal: bad config line 1 in file syntax-error" >expect &&
 	test_expect_code 128 test-tool config configset_get_value foo.bar syntax-error 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'check line errors for malformed values' '
diff --git a/t/t1350-config-hooks-path.sh b/t/t1350-config-hooks-path.sh
index f1f9aee..fa9647a 100755
--- a/t/t1350-config-hooks-path.sh
+++ b/t/t1350-config-hooks-path.sh
@@ -5,6 +5,7 @@
 . ./test-lib.sh
 
 test_expect_success 'set up a pre-commit hook in core.hooksPath' '
+	>actual &&
 	mkdir -p .git/custom-hooks .git/hooks &&
 	write_script .git/custom-hooks/pre-commit <<-\EOF &&
 	echo CUSTOM >>actual
diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh
index 359d873..4506cd4 100755
--- a/t/t1400-update-ref.sh
+++ b/t/t1400-update-ref.sh
@@ -374,7 +374,7 @@
 	echo "$C" >expect &&
 	test_cmp expect o &&
 	echo "warning: log for '\''main'\'' only goes back to $ed" >expect &&
-	test_i18ncmp expect e
+	test_cmp expect e
 '
 test_expect_success 'Query main@{2005-05-25} (before history)' '
 	test_when_finished "rm -f o e" &&
@@ -382,7 +382,7 @@
 	echo "$C" >expect &&
 	test_cmp expect o &&
 	echo "warning: log for '\''main'\'' only goes back to $ed" >expect &&
-	test_i18ncmp expect e
+	test_cmp expect e
 '
 test_expect_success 'Query "main@{May 26 2005 23:31:59}" (1 second before history)' '
 	test_when_finished "rm -f o e" &&
@@ -390,7 +390,7 @@
 	echo "$C" >expect &&
 	test_cmp expect o &&
 	echo "warning: log for '\''main'\'' only goes back to $ed" >expect &&
-	test_i18ncmp expect e
+	test_cmp expect e
 '
 test_expect_success 'Query "main@{May 26 2005 23:32:00}" (exactly history start)' '
 	test_when_finished "rm -f o e" &&
@@ -1598,4 +1598,13 @@
 	test_must_fail git show-ref --verify refs/heads/restart
 '
 
+test_expect_success 'directory not created deleting packed ref' '
+	git branch d1/d2/r1 HEAD &&
+	git pack-refs --all &&
+	test_path_is_missing .git/refs/heads/d1/d2 &&
+	git update-ref -d refs/heads/d1/d2/r1 &&
+	test_path_is_missing .git/refs/heads/d1/d2 &&
+	test_path_is_missing .git/refs/heads/d1
+'
+
 test_done
diff --git a/t/t1401-symbolic-ref.sh b/t/t1401-symbolic-ref.sh
index a4ebb0b..132a1b8 100755
--- a/t/t1401-symbolic-ref.sh
+++ b/t/t1401-symbolic-ref.sh
@@ -7,17 +7,19 @@
 # the git repo, meaning that further tests will operate on
 # the surrounding git repo instead of the trash directory.
 reset_to_sane() {
-	echo ref: refs/heads/foo >.git/HEAD
+	rm -rf .git &&
+	"$TAR" xf .git.tar
 }
 
-test_expect_success 'symbolic-ref writes HEAD' '
+test_expect_success 'setup' '
 	git symbolic-ref HEAD refs/heads/foo &&
-	echo ref: refs/heads/foo >expect &&
-	test_cmp expect .git/HEAD
+	test_commit file &&
+	"$TAR" cf .git.tar .git/
 '
 
-test_expect_success 'symbolic-ref reads HEAD' '
-	echo refs/heads/foo >expect &&
+test_expect_success 'symbolic-ref read/write roundtrip' '
+	git symbolic-ref HEAD refs/heads/read-write-roundtrip &&
+	echo refs/heads/read-write-roundtrip >expect &&
 	git symbolic-ref HEAD >actual &&
 	test_cmp expect actual
 '
@@ -25,12 +27,13 @@
 test_expect_success 'symbolic-ref refuses non-ref for HEAD' '
 	test_must_fail git symbolic-ref HEAD foo
 '
+
 reset_to_sane
 
 test_expect_success 'symbolic-ref refuses bare sha1' '
-	echo content >file && git add file && git commit -m one &&
 	test_must_fail git symbolic-ref HEAD $(git rev-parse HEAD)
 '
+
 reset_to_sane
 
 test_expect_success 'HEAD cannot be removed' '
@@ -42,16 +45,16 @@
 test_expect_success 'symbolic-ref can be deleted' '
 	git symbolic-ref NOTHEAD refs/heads/foo &&
 	git symbolic-ref -d NOTHEAD &&
-	test_path_is_file .git/refs/heads/foo &&
-	test_path_is_missing .git/NOTHEAD
+	git rev-parse refs/heads/foo &&
+	test_must_fail git symbolic-ref NOTHEAD
 '
 reset_to_sane
 
 test_expect_success 'symbolic-ref can delete dangling symref' '
 	git symbolic-ref NOTHEAD refs/heads/missing &&
 	git symbolic-ref -d NOTHEAD &&
-	test_path_is_missing .git/refs/heads/missing &&
-	test_path_is_missing .git/NOTHEAD
+	test_must_fail git rev-parse refs/heads/missing &&
+	test_must_fail git symbolic-ref NOTHEAD
 '
 reset_to_sane
 
diff --git a/t/t1403-show-ref.sh b/t/t1403-show-ref.sh
index 6ce62f8..17d3cc1 100755
--- a/t/t1403-show-ref.sh
+++ b/t/t1403-show-ref.sh
@@ -7,11 +7,9 @@
 . ./test-lib.sh
 
 test_expect_success setup '
-	test_commit A &&
-	git tag -f -a -m "annotated A" A &&
+	test_commit --annotate A &&
 	git checkout -b side &&
-	test_commit B &&
-	git tag -f -a -m "annotated B" B &&
+	test_commit --annotate B &&
 	git checkout main &&
 	test_commit C &&
 	git branch B A^0
diff --git a/t/t1404-update-ref-errors.sh b/t/t1404-update-ref-errors.sh
index 2d142e5..b729c1f 100755
--- a/t/t1404-update-ref-errors.sh
+++ b/t/t1404-update-ref-errors.sh
@@ -101,7 +101,7 @@
 		printf "%s\n" "delete $delname" "create $addname $D"
 	fi >commands &&
 	test_must_fail git update-ref --stdin <commands 2>output.err &&
-	test_i18ncmp expected-err output.err &&
+	test_cmp expected-err output.err &&
 	printf "%s\n" "$C $delref" >expected-refs &&
 	git for-each-ref --format="%(objectname) %(refname)" $prefix/r >actual-refs &&
 	test_cmp expected-refs actual-refs
@@ -189,7 +189,7 @@
 
 '
 
-test_expect_success 'empty directory should not fool rev-parse' '
+test_expect_success REFFILES 'empty directory should not fool rev-parse' '
 	prefix=refs/e-rev-parse &&
 	git update-ref $prefix/foo $C &&
 	git pack-refs --all &&
@@ -199,7 +199,7 @@
 	test_cmp expected actual
 '
 
-test_expect_success 'empty directory should not fool for-each-ref' '
+test_expect_success REFFILES 'empty directory should not fool for-each-ref' '
 	prefix=refs/e-for-each-ref &&
 	git update-ref $prefix/foo $C &&
 	git for-each-ref $prefix >expected &&
@@ -209,14 +209,14 @@
 	test_cmp expected actual
 '
 
-test_expect_success 'empty directory should not fool create' '
+test_expect_success REFFILES 'empty directory should not fool create' '
 	prefix=refs/e-create &&
 	mkdir -p .git/$prefix/foo/bar/baz &&
 	printf "create %s $C\n" $prefix/foo |
 	git update-ref --stdin
 '
 
-test_expect_success 'empty directory should not fool verify' '
+test_expect_success REFFILES 'empty directory should not fool verify' '
 	prefix=refs/e-verify &&
 	git update-ref $prefix/foo $C &&
 	git pack-refs --all &&
@@ -225,7 +225,7 @@
 	git update-ref --stdin
 '
 
-test_expect_success 'empty directory should not fool 1-arg update' '
+test_expect_success REFFILES 'empty directory should not fool 1-arg update' '
 	prefix=refs/e-update-1 &&
 	git update-ref $prefix/foo $C &&
 	git pack-refs --all &&
@@ -234,7 +234,7 @@
 	git update-ref --stdin
 '
 
-test_expect_success 'empty directory should not fool 2-arg update' '
+test_expect_success REFFILES 'empty directory should not fool 2-arg update' '
 	prefix=refs/e-update-2 &&
 	git update-ref $prefix/foo $C &&
 	git pack-refs --all &&
@@ -243,7 +243,7 @@
 	git update-ref --stdin
 '
 
-test_expect_success 'empty directory should not fool 0-arg delete' '
+test_expect_success REFFILES 'empty directory should not fool 0-arg delete' '
 	prefix=refs/e-delete-0 &&
 	git update-ref $prefix/foo $C &&
 	git pack-refs --all &&
@@ -252,7 +252,7 @@
 	git update-ref --stdin
 '
 
-test_expect_success 'empty directory should not fool 1-arg delete' '
+test_expect_success REFFILES 'empty directory should not fool 1-arg delete' '
 	prefix=refs/e-delete-1 &&
 	git update-ref $prefix/foo $C &&
 	git pack-refs --all &&
@@ -466,7 +466,7 @@
 	test_cmp expected output.err
 '
 
-test_expect_success 'non-empty directory blocks create' '
+test_expect_success REFFILES 'non-empty directory blocks create' '
 	prefix=refs/ne-create &&
 	mkdir -p .git/$prefix/foo/bar &&
 	: >.git/$prefix/foo/bar/baz.lock &&
@@ -485,7 +485,7 @@
 	test_cmp expected output.err
 '
 
-test_expect_success 'broken reference blocks create' '
+test_expect_success REFFILES 'broken reference blocks create' '
 	prefix=refs/broken-create &&
 	mkdir -p .git/$prefix &&
 	echo "gobbledigook" >.git/$prefix/foo &&
@@ -504,7 +504,7 @@
 	test_cmp expected output.err
 '
 
-test_expect_success 'non-empty directory blocks indirect create' '
+test_expect_success REFFILES 'non-empty directory blocks indirect create' '
 	prefix=refs/ne-indirect-create &&
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	mkdir -p .git/$prefix/foo/bar &&
@@ -524,7 +524,7 @@
 	test_cmp expected output.err
 '
 
-test_expect_success 'broken reference blocks indirect create' '
+test_expect_success REFFILES 'broken reference blocks indirect create' '
 	prefix=refs/broken-indirect-create &&
 	git symbolic-ref $prefix/symref $prefix/foo &&
 	echo "gobbledigook" >.git/$prefix/foo &&
@@ -543,7 +543,7 @@
 	test_cmp expected output.err
 '
 
-test_expect_success 'no bogus intermediate values during delete' '
+test_expect_success REFFILES 'no bogus intermediate values during delete' '
 	prefix=refs/slow-transaction &&
 	# Set up a reference with differing loose and packed versions:
 	git update-ref $prefix/foo $C &&
@@ -600,7 +600,7 @@
 	test_must_fail git rev-parse --verify --quiet $prefix/foo
 '
 
-test_expect_success 'delete fails cleanly if packed-refs file is locked' '
+test_expect_success REFFILES 'delete fails cleanly if packed-refs file is locked' '
 	prefix=refs/locked-packed-refs &&
 	# Set up a reference with differing loose and packed versions:
 	git update-ref $prefix/foo $C &&
@@ -616,7 +616,7 @@
 	test_cmp unchanged actual
 '
 
-test_expect_success 'delete fails cleanly if packed-refs.new write fails' '
+test_expect_success REFFILES 'delete fails cleanly if packed-refs.new write fails' '
 	# Setup and expectations are similar to the test above.
 	prefix=refs/failed-packed-refs &&
 	git update-ref $prefix/foo $C &&
diff --git a/t/t1407-worktree-ref-store.sh b/t/t1407-worktree-ref-store.sh
index d3fe777..ad8006c 100755
--- a/t/t1407-worktree-ref-store.sh
+++ b/t/t1407-worktree-ref-store.sh
@@ -52,7 +52,14 @@
 	test_cmp expected actual
 '
 
-test_expect_success 'for_each_reflog()' '
+# Some refs (refs/bisect/*, pseudorefs) are kept per worktree, so they should
+# only appear in the for-each-reflog output if it is called from the correct
+# worktree, which is exercised in this test. This test is poorly written (and
+# therefore marked REFFILES) for mulitple reasons: 1) it creates invalidly
+# formatted log entres. 2) it uses direct FS access for creating the reflogs. 3)
+# PSEUDO-WT and refs/bisect/random do not create reflogs by default, so it is
+# not testing a realistic scenario.
+test_expect_success REFFILES 'for_each_reflog()' '
 	echo $ZERO_OID > .git/logs/PSEUDO-MAIN &&
 	mkdir -p     .git/logs/refs/bisect &&
 	echo $ZERO_OID > .git/logs/refs/bisect/random &&
diff --git a/t/t1413-reflog-detach.sh b/t/t1413-reflog-detach.sh
index bde0520..934688a 100755
--- a/t/t1413-reflog-detach.sh
+++ b/t/t1413-reflog-detach.sh
@@ -7,8 +7,7 @@
 . ./test-lib.sh
 
 reset_state () {
-	git checkout main &&
-	cp saved_reflog .git/logs/HEAD
+	rm -rf .git && "$TAR" xf .git-saved.tar
 }
 
 test_expect_success setup '
@@ -17,7 +16,7 @@
 	git branch side &&
 	test_tick &&
 	git commit --allow-empty -m second &&
-	cat .git/logs/HEAD >saved_reflog
+	"$TAR" cf .git-saved.tar .git
 '
 
 test_expect_success baseline '
diff --git a/t/t1414-reflog-walk.sh b/t/t1414-reflog-walk.sh
index 80d9470..ea64cec 100755
--- a/t/t1414-reflog-walk.sh
+++ b/t/t1414-reflog-walk.sh
@@ -119,7 +119,9 @@
 	test_cmp expect actual
 '
 
-test_expect_success 'walk prefers reflog to ref tip' '
+# Create a situation where the reflog and ref database disagree about the latest
+# state of HEAD.
+test_expect_success REFFILES 'walk prefers reflog to ref tip' '
 	head=$(git rev-parse HEAD) &&
 	one=$(git rev-parse one) &&
 	ident="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE" &&
diff --git a/t/t1415-worktree-refs.sh b/t/t1415-worktree-refs.sh
index 7ab9124..a3e6ea0 100755
--- a/t/t1415-worktree-refs.sh
+++ b/t/t1415-worktree-refs.sh
@@ -16,7 +16,10 @@
 	git -C wt2 update-ref refs/worktree/foo HEAD
 '
 
-test_expect_success 'refs/worktree must not be packed' '
+# The 'packed-refs' file is stored directly in .git/. This means it is global
+# to the repository, and can only contain refs that are shared across all
+# worktrees.
+test_expect_success REFFILES 'refs/worktree must not be packed' '
 	git pack-refs --all &&
 	test_path_is_missing .git/refs/tags/wt1 &&
 	test_path_is_file .git/refs/worktree/foo &&
@@ -37,9 +40,8 @@
 '
 
 test_expect_success 'ambiguous main-worktree/HEAD' '
-	mkdir -p .git/refs/heads/main-worktree &&
-	test_when_finished rm -f .git/refs/heads/main-worktree/HEAD &&
-	cp .git/HEAD .git/refs/heads/main-worktree/HEAD &&
+	test_when_finished git update-ref -d refs/heads/main-worktree/HEAD &&
+	git update-ref refs/heads/main-worktree/HEAD $(git rev-parse HEAD) &&
 	git rev-parse main-worktree/HEAD 2>warn &&
 	grep "main-worktree/HEAD.*ambiguous" warn
 '
@@ -51,9 +53,8 @@
 '
 
 test_expect_success 'ambiguous worktrees/xx/HEAD' '
-	mkdir -p .git/refs/heads/worktrees/wt1 &&
-	test_when_finished rm -f .git/refs/heads/worktrees/wt1/HEAD &&
-	cp .git/HEAD .git/refs/heads/worktrees/wt1/HEAD &&
+	git update-ref refs/heads/worktrees/wt1/HEAD $(git rev-parse HEAD) &&
+	test_when_finished git update-ref -d refs/heads/worktrees/wt1/HEAD &&
 	git rev-parse worktrees/wt1/HEAD 2>warn &&
 	grep "worktrees/wt1/HEAD.*ambiguous" warn
 '
diff --git a/t/t1430-bad-ref-name.sh b/t/t1430-bad-ref-name.sh
index 354902e..b1839e0 100755
--- a/t/t1430-bad-ref-name.sh
+++ b/t/t1430-bad-ref-name.sh
@@ -125,7 +125,7 @@
 	! grep -e "broken\.\.\.ref" output
 '
 
-test_expect_failure C_LOCALE_OUTPUT 'push --mirror can delete badly named ref' '
+test_expect_failure 'push --mirror can delete badly named ref' '
 	top=$(pwd) &&
 	git init src &&
 	git init dest &&
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index 2312431..5071ac6 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -376,7 +376,7 @@
 	warning in tag $tag: badTagName: invalid '\''tag'\'' name: wrong name format
 	warning in tag $tag: missingTaggerEntry: invalid format - expected '\''tagger'\'' line
 	EOF
-	test_i18ncmp expect out
+	test_cmp expect out
 '
 
 test_expect_success 'tag with bad tagger' '
@@ -804,7 +804,7 @@
 		git fsck >actual &&
 		# the output order is non-deterministic, as it comes from a hash
 		sort <actual >actual.sorted &&
-		test_i18ncmp expect actual.sorted
+		test_cmp expect actual.sorted
 	)
 '
 
@@ -814,7 +814,7 @@
 		git fsck --connectivity-only >actual &&
 		# the output order is non-deterministic, as it comes from a hash
 		sort <actual >actual.sorted &&
-		test_i18ncmp expect actual.sorted
+		test_cmp expect actual.sorted
 	)
 '
 
diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh
index deae916..1c2df08 100755
--- a/t/t1500-rev-parse.sh
+++ b/t/t1500-rev-parse.sh
@@ -146,6 +146,10 @@
 	test_cmp expect actual
 '
 
+test_expect_success '--path-format does not segfault without an argument' '
+	test_must_fail git rev-parse --path-format
+'
+
 test_expect_success 'git-common-dir from worktree root' '
 	echo .git >expect &&
 	git rev-parse --git-common-dir >actual &&
diff --git a/t/t1502-rev-parse-parseopt.sh b/t/t1502-rev-parse-parseopt.sh
index a859abe..b29563f 100755
--- a/t/t1502-rev-parse-parseopt.sh
+++ b/t/t1502-rev-parse-parseopt.sh
@@ -95,7 +95,7 @@
 |EOF
 END_EXPECT
 	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'test --parseopt help output no switches' '
@@ -108,7 +108,7 @@
 |EOF
 END_EXPECT
 	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_no_switches &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'test --parseopt help output hidden switches' '
@@ -121,7 +121,7 @@
 |EOF
 END_EXPECT
 	test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec_only_hidden_switches &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'test --parseopt help-all output hidden switches' '
@@ -136,7 +136,7 @@
 |EOF
 END_EXPECT
 	test_expect_code 129 git rev-parse --parseopt -- --help-all > output < optionspec_only_hidden_switches &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'test --parseopt invalid switch help output' '
@@ -176,7 +176,7 @@
 |
 END_EXPECT
 	test_expect_code 129 git rev-parse --parseopt -- --does-not-exist 1>/dev/null 2>output < optionspec &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'setup expect.1' "
diff --git a/t/t1506-rev-parse-diagnosis.sh b/t/t1506-rev-parse-diagnosis.sh
index f6e6f23..65a154a 100755
--- a/t/t1506-rev-parse-diagnosis.sh
+++ b/t/t1506-rev-parse-diagnosis.sh
@@ -15,7 +15,7 @@
 	fatal: path '$2$3' $4, but not ${5:-$SQ$3$SQ}
 	hint: Did you mean '$1:$2$3'${2:+ aka $SQ$1:./$3$SQ}?
 	EOF
-	test_i18ncmp expected error
+	test_cmp expected error
 }
 
 HASH_file=
diff --git a/t/t1507-rev-parse-upstream.sh b/t/t1507-rev-parse-upstream.sh
index 73b4f34..c34714f 100755
--- a/t/t1507-rev-parse-upstream.sh
+++ b/t/t1507-rev-parse-upstream.sh
@@ -172,7 +172,7 @@
 	fatal: no upstream configured for branch ${SQ}non-tracking${SQ}
 	EOF
 	error_message non-tracking@{u} &&
-	test_i18ncmp expect error
+	test_cmp expect error
 '
 
 test_expect_success '@{u} error message when no upstream' '
@@ -180,7 +180,7 @@
 	fatal: no upstream configured for branch ${SQ}main${SQ}
 	EOF
 	test_must_fail git rev-parse --verify @{u} 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'branch@{u} error message with misspelt branch' '
@@ -188,7 +188,7 @@
 	fatal: no such branch: ${SQ}no-such-branch${SQ}
 	EOF
 	error_message no-such-branch@{u} &&
-	test_i18ncmp expect error
+	test_cmp expect error
 '
 
 test_expect_success '@{u} error message when not on a branch' '
@@ -197,7 +197,7 @@
 	EOF
 	git checkout HEAD^0 &&
 	test_must_fail git rev-parse --verify @{u} 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'branch@{u} error message if upstream branch not fetched' '
@@ -205,7 +205,7 @@
 	fatal: upstream branch ${SQ}refs/heads/side${SQ} not stored as a remote-tracking branch
 	EOF
 	error_message bad-upstream@{u} &&
-	test_i18ncmp expect error
+	test_cmp expect error
 '
 
 test_expect_success 'pull works when tracking a local branch' '
diff --git a/t/t1509-root-work-tree.sh b/t/t1509-root-work-tree.sh
index fd2f7ab..553a3f6 100755
--- a/t/t1509-root-work-tree.sh
+++ b/t/t1509-root-work-tree.sh
@@ -221,7 +221,7 @@
 	rm -rf /.git &&
 	echo "Initialized empty Git repository in /.git/" > expected &&
 	git init > result &&
-	test_i18ncmp expected result
+	test_cmp expected result
 '
 
 test_vars 'auto gitdir, root' ".git" "/" ""
@@ -246,7 +246,7 @@
 	cd / &&
 	echo "Initialized empty Git repository in /" > expected &&
 	git init --bare > result &&
-	test_i18ncmp expected result
+	test_cmp expected result
 '
 
 test_vars 'auto gitdir, root' "." "" ""
diff --git a/t/t1512-rev-parse-disambiguation.sh b/t/t1512-rev-parse-disambiguation.sh
index 242abbf..7891a6b 100755
--- a/t/t1512-rev-parse-disambiguation.sh
+++ b/t/t1512-rev-parse-disambiguation.sh
@@ -314,39 +314,39 @@
 	grep "refname.*${REF}.*ambiguous" err
 '
 
-test_expect_success C_LOCALE_OUTPUT 'ambiguity errors are not repeated (raw)' '
+test_expect_success 'ambiguity errors are not repeated (raw)' '
 	test_must_fail git rev-parse 00000 2>stderr &&
 	grep "is ambiguous" stderr >errors &&
 	test_line_count = 1 errors
 '
 
-test_expect_success C_LOCALE_OUTPUT 'ambiguity errors are not repeated (treeish)' '
+test_expect_success 'ambiguity errors are not repeated (treeish)' '
 	test_must_fail git rev-parse 00000:foo 2>stderr &&
 	grep "is ambiguous" stderr >errors &&
 	test_line_count = 1 errors
 '
 
-test_expect_success C_LOCALE_OUTPUT 'ambiguity errors are not repeated (peel)' '
+test_expect_success 'ambiguity errors are not repeated (peel)' '
 	test_must_fail git rev-parse 00000^{commit} 2>stderr &&
 	grep "is ambiguous" stderr >errors &&
 	test_line_count = 1 errors
 '
 
-test_expect_success C_LOCALE_OUTPUT 'ambiguity hints' '
+test_expect_success 'ambiguity hints' '
 	test_must_fail git rev-parse 000000000 2>stderr &&
 	grep ^hint: stderr >hints &&
 	# 16 candidates, plus one intro line
 	test_line_count = 17 hints
 '
 
-test_expect_success C_LOCALE_OUTPUT 'ambiguity hints respect type' '
+test_expect_success 'ambiguity hints respect type' '
 	test_must_fail git rev-parse 000000000^{commit} 2>stderr &&
 	grep ^hint: stderr >hints &&
 	# 5 commits, 1 tag (which is a committish), plus intro line
 	test_line_count = 7 hints
 '
 
-test_expect_success C_LOCALE_OUTPUT 'failed type-selector still shows hint' '
+test_expect_success 'failed type-selector still shows hint' '
 	# these two blobs share the same prefix "ee3d", but neither
 	# will pass for a commit
 	echo 851 | git hash-object --stdin -w &&
@@ -370,7 +370,7 @@
 		git -c core.disambiguate=committish rev-parse $sha1^{tree}
 '
 
-test_expect_success C_LOCALE_OUTPUT 'ambiguous commits are printed by type first, then hash order' '
+test_expect_success 'ambiguous commits are printed by type first, then hash order' '
 	test_must_fail git rev-parse 0000 2>stderr &&
 	grep ^hint: stderr >hints &&
 	grep 0000 hints >objects &&
diff --git a/t/t1600-index.sh b/t/t1600-index.sh
index b7c31aa..c9b9e71 100755
--- a/t/t1600-index.sh
+++ b/t/t1600-index.sh
@@ -18,7 +18,7 @@
 			warning: GIT_INDEX_VERSION set, but the value is invalid.
 			Using version Z
 		EOF
-		test_i18ncmp expect.err actual.err
+		test_cmp expect.err actual.err
 	)
 '
 
@@ -32,7 +32,7 @@
 			warning: GIT_INDEX_VERSION set, but the value is invalid.
 			Using version Z
 		EOF
-		test_i18ncmp expect.err actual.err
+		test_cmp expect.err actual.err
 	)
 '
 
@@ -55,7 +55,7 @@
 			warning: index.version set, but the value is invalid.
 			Using version Z
 		EOF
-		test_i18ncmp expect.err actual.err
+		test_cmp expect.err actual.err
 	)
 '
 
diff --git a/t/t2006-checkout-index-basic.sh b/t/t2006-checkout-index-basic.sh
index 8e181db..7705e3a 100755
--- a/t/t2006-checkout-index-basic.sh
+++ b/t/t2006-checkout-index-basic.sh
@@ -31,5 +31,73 @@
 	test_must_fail git checkout-index --stdin 2>stderr &&
 	test_i18ngrep not.in.the.cache stderr
 '
+for mode in 'case' 'utf-8'
+do
+	case "$mode" in
+	case)	dir='A' symlink='a' mode_prereq='CASE_INSENSITIVE_FS' ;;
+	utf-8)
+		dir=$(printf "\141\314\210") symlink=$(printf "\303\244")
+		mode_prereq='UTF8_NFD_TO_NFC' ;;
+	esac
+
+	test_expect_success SYMLINKS,$mode_prereq \
+	"checkout-index with $mode-collision don't write to the wrong place" '
+		git init $mode-collision &&
+		(
+			cd $mode-collision &&
+			mkdir target-dir &&
+
+			empty_obj_hex=$(git hash-object -w --stdin </dev/null) &&
+			symlink_hex=$(printf "%s" "$PWD/target-dir" | git hash-object -w --stdin) &&
+
+			cat >objs <<-EOF &&
+			100644 blob ${empty_obj_hex}	${dir}/x
+			100644 blob ${empty_obj_hex}	${dir}/y
+			100644 blob ${empty_obj_hex}	${dir}/z
+			120000 blob ${symlink_hex}	${symlink}
+			EOF
+
+			git update-index --index-info <objs &&
+
+			# Note: the order is important here to exercise the
+			# case where the file at ${dir} has its type changed by
+			# the time Git tries to check out ${dir}/z.
+			#
+			# Also, we use core.precomposeUnicode=false because we
+			# want Git to treat the UTF-8 paths transparently on
+			# Mac OS, matching what is in the index.
+			#
+			git -c core.precomposeUnicode=false checkout-index -f \
+				${dir}/x ${dir}/y ${symlink} ${dir}/z &&
+
+			# Should not create ${dir}/z at ${symlink}/z
+			test_path_is_missing target-dir/z
+
+		)
+	'
+done
+
+test_expect_success 'checkout-index --temp correctly reports error on missing blobs' '
+	test_when_finished git reset --hard &&
+	missing_blob=$(echo "no such blob here" | git hash-object --stdin) &&
+	cat >objs <<-EOF &&
+	100644 $missing_blob	file
+	120000 $missing_blob	symlink
+	EOF
+	git update-index --index-info <objs &&
+
+	test_must_fail git checkout-index --temp symlink file 2>stderr &&
+	test_i18ngrep "unable to read sha1 file of file ($missing_blob)" stderr &&
+	test_i18ngrep "unable to read sha1 file of symlink ($missing_blob)" stderr
+'
+
+test_expect_success 'checkout-index --temp correctly reports error for submodules' '
+	git init sub &&
+	test_commit -C sub file &&
+	git submodule add ./sub &&
+	git commit -m sub &&
+	test_must_fail git checkout-index --temp sub 2>stderr &&
+	test_i18ngrep "cannot create temporary submodule sub" stderr
+'
 
 test_done
diff --git a/t/t2017-checkout-orphan.sh b/t/t2017-checkout-orphan.sh
index c7adbdd..88d6992 100755
--- a/t/t2017-checkout-orphan.sh
+++ b/t/t2017-checkout-orphan.sh
@@ -76,7 +76,7 @@
 	git rev-parse --verify delta@{0}
 '
 
-test_expect_success '--orphan does not make reflog when core.logAllRefUpdates = false' '
+test_expect_success REFFILES '--orphan does not make reflog when core.logAllRefUpdates = false' '
 	git checkout main &&
 	git config core.logAllRefUpdates false &&
 	git checkout --orphan epsilon &&
diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh
index 5f761bc..93be1c0 100755
--- a/t/t2018-checkout-branch.sh
+++ b/t/t2018-checkout-branch.sh
@@ -150,7 +150,7 @@
 	git checkout branch2 &&
 	echo  >expect "fatal: A branch named '\''branch1'\'' already exists." &&
 	test_must_fail git checkout -b @{-1} 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'checkout -B to an existing branch resets branch to HEAD' '
diff --git a/t/t2020-checkout-detach.sh b/t/t2020-checkout-detach.sh
index b432b64..bc46713 100755
--- a/t/t2020-checkout-detach.sh
+++ b/t/t2020-checkout-detach.sh
@@ -163,7 +163,7 @@
 	git config branch.child.merge refs/heads/main &&
 	git checkout child^ &&
 	git checkout child >stdout &&
-	test_i18ncmp expect stdout
+	test_cmp expect stdout
 '
 
 test_expect_success 'no advice given for explicit detached head state' '
@@ -237,15 +237,15 @@
 	sane_unset GIT_PRINT_SHA1_ELLIPSIS &&
 	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 1st_detach actual &&
+	test_cmp 1st_detach actual &&
 
 	GIT_PRINT_SHA1_ELLIPSIS="no" git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 2nd_detach actual &&
+	test_cmp 2nd_detach actual &&
 
 	GIT_PRINT_SHA1_ELLIPSIS= git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 3rd_detach actual &&
+	test_cmp 3rd_detach actual &&
 
 	sane_unset GIT_PRINT_SHA1_ELLIPSIS &&
 
@@ -256,17 +256,17 @@
 	# Make no mention of the env var at all
 	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 1st_detach actual &&
+	test_cmp 1st_detach actual &&
 
 	GIT_PRINT_SHA1_ELLIPSIS='nope' &&
 	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 2nd_detach actual &&
+	test_cmp 2nd_detach actual &&
 
 	GIT_PRINT_SHA1_ELLIPSIS=nein &&
 	git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 3rd_detach actual &&
+	test_cmp 3rd_detach actual &&
 
 	true
 "
@@ -319,15 +319,15 @@
 
 	GIT_PRINT_SHA1_ELLIPSIS=yes git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 1st_detach actual &&
+	test_cmp 1st_detach actual &&
 
 	GIT_PRINT_SHA1_ELLIPSIS=Yes git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 2nd_detach actual &&
+	test_cmp 2nd_detach actual &&
 
 	GIT_PRINT_SHA1_ELLIPSIS=YES git -c 'core.abbrev=12' checkout HEAD^ >actual 2>&1 &&
 	check_detached &&
-	test_i18ncmp 3rd_detach actual &&
+	test_cmp 3rd_detach actual &&
 
 	true
 "
diff --git a/t/t2021-checkout-overwrite.sh b/t/t2021-checkout-overwrite.sh
index c2ada7d..70d6926 100755
--- a/t/t2021-checkout-overwrite.sh
+++ b/t/t2021-checkout-overwrite.sh
@@ -51,4 +51,16 @@
 	test -h a/b
 '
 
+test_expect_success SYMLINKS 'checkout -f must not follow symlinks when removing entries' '
+	git checkout -f start &&
+	mkdir dir &&
+	>dir/f &&
+	git add dir/f &&
+	git commit -m "add dir/f" &&
+	mv dir untracked &&
+	ln -s untracked dir &&
+	git checkout -f HEAD~ &&
+	test_path_is_file untracked/f
+'
+
 test_done
diff --git a/t/t2030-unresolve-info.sh b/t/t2030-unresolve-info.sh
index be6c84c..f691e6d 100755
--- a/t/t2030-unresolve-info.sh
+++ b/t/t2030-unresolve-info.sh
@@ -179,8 +179,7 @@
 
 test_expect_success 'rerere forget (binary)' '
 	git checkout -f side &&
-	printf "a\0c" >binary &&
-	git commit -a -m binary &&
+	test_commit --printf binary binary "a\0c" &&
 	test_must_fail git merge second &&
 	git rerere forget binary
 '
diff --git a/t/t2080-parallel-checkout-basics.sh b/t/t2080-parallel-checkout-basics.sh
new file mode 100755
index 0000000..3e0f8c6
--- /dev/null
+++ b/t/t2080-parallel-checkout-basics.sh
@@ -0,0 +1,229 @@
+#!/bin/sh
+
+test_description='parallel-checkout basics
+
+Ensure that parallel-checkout basically works on clone and checkout, spawning
+the required number of workers and correctly populating both the index and the
+working tree.
+'
+
+TEST_NO_CREATE_REPO=1
+. ./test-lib.sh
+. "$TEST_DIRECTORY/lib-parallel-checkout.sh"
+
+# Test parallel-checkout with a branch switch containing a variety of file
+# creations, deletions, and modifications, involving different entry types.
+# The branches B1 and B2 have the following paths:
+#
+#      B1                 B2
+#  a/a (file)         a   (file)
+#  b   (file)         b/b (file)
+#
+#  c/c (file)         c   (symlink)
+#  d   (symlink)      d/d (file)
+#
+#  e/e (file)         e   (submodule)
+#  f   (submodule)    f/f (file)
+#
+#  g   (submodule)    g   (symlink)
+#  h   (symlink)      h   (submodule)
+#
+# Additionally, the following paths are present on both branches, but with
+# different contents:
+#
+#  i   (file)         i   (file)
+#  j   (symlink)      j   (symlink)
+#  k   (submodule)    k   (submodule)
+#
+# And the following paths are only present in one of the branches:
+#
+#  l/l (file)         -
+#  -                  m/m (file)
+#
+test_expect_success 'setup repo for checkout with various types of changes' '
+	git init sub &&
+	(
+		cd sub &&
+		git checkout -b B2 &&
+		echo B2 >file &&
+		git add file &&
+		git commit -m file &&
+
+		git checkout -b B1 &&
+		echo B1 >file &&
+		git add file &&
+		git commit -m file
+	) &&
+
+	git init various &&
+	(
+		cd various &&
+
+		git checkout -b B1 &&
+		mkdir a c e &&
+		echo a/a >a/a &&
+		echo b >b &&
+		echo c/c >c/c &&
+		test_ln_s_add c d &&
+		echo e/e >e/e &&
+		git submodule add ../sub f &&
+		git submodule add ../sub g &&
+		test_ln_s_add c h &&
+
+		echo "B1 i" >i &&
+		test_ln_s_add c j &&
+		git submodule add -b B1 ../sub k &&
+		mkdir l &&
+		echo l/l >l/l &&
+
+		git add . &&
+		git commit -m B1 &&
+
+		git checkout -b B2 &&
+		git rm -rf :^.gitmodules :^k &&
+		mkdir b d f &&
+		echo a >a &&
+		echo b/b >b/b &&
+		test_ln_s_add b c &&
+		echo d/d >d/d &&
+		git submodule add ../sub e &&
+		echo f/f >f/f &&
+		test_ln_s_add b g &&
+		git submodule add ../sub h &&
+
+		echo "B2 i" >i &&
+		test_ln_s_add b j &&
+		git -C k checkout B2 &&
+		mkdir m &&
+		echo m/m >m/m &&
+
+		git add . &&
+		git commit -m B2 &&
+
+		git checkout --recurse-submodules B1
+	)
+'
+
+for mode in sequential parallel sequential-fallback
+do
+	case $mode in
+	sequential)          workers=1 threshold=0 expected_workers=0 ;;
+	parallel)            workers=2 threshold=0 expected_workers=2 ;;
+	sequential-fallback) workers=2 threshold=100 expected_workers=0 ;;
+	esac
+
+	test_expect_success "$mode checkout" '
+		repo=various_$mode &&
+		cp -R -P various $repo &&
+
+		# The just copied files have more recent timestamps than their
+		# associated index entries. So refresh the cached timestamps
+		# to avoid an "entry not up-to-date" error from `git checkout`.
+		# We only have to do this for the submodules as `git checkout`
+		# will already refresh the superproject index before performing
+		# the up-to-date check.
+		#
+		git -C $repo submodule foreach "git update-index --refresh" &&
+
+		set_checkout_config $workers $threshold &&
+		test_checkout_workers $expected_workers \
+			git -C $repo checkout --recurse-submodules B2 &&
+		verify_checkout $repo
+	'
+done
+
+for mode in parallel sequential-fallback
+do
+	case $mode in
+	parallel)            workers=2 threshold=0 expected_workers=2 ;;
+	sequential-fallback) workers=2 threshold=100 expected_workers=0 ;;
+	esac
+
+	test_expect_success "$mode checkout on clone" '
+		repo=various_${mode}_clone &&
+		set_checkout_config $workers $threshold &&
+		test_checkout_workers $expected_workers \
+			git clone --recurse-submodules --branch B2 various $repo &&
+		verify_checkout $repo
+	'
+done
+
+# Just to be paranoid, actually compare the working trees' contents directly.
+test_expect_success 'compare the working trees' '
+	rm -rf various_*/.git &&
+	rm -rf various_*/*/.git &&
+
+	# We use `git diff` instead of `diff -r` because the latter would
+	# follow symlinks, and not all `diff` implementations support the
+	# `--no-dereference` option.
+	#
+	git diff --no-index various_sequential various_parallel &&
+	git diff --no-index various_sequential various_parallel_clone &&
+	git diff --no-index various_sequential various_sequential-fallback &&
+	git diff --no-index various_sequential various_sequential-fallback_clone
+'
+
+# Currently, each submodule is checked out in a separated child process, but
+# these subprocesses must also be able to use parallel checkout workers to
+# write the submodules' entries.
+test_expect_success 'submodules can use parallel checkout' '
+	set_checkout_config 2 0 &&
+	git init super &&
+	(
+		cd super &&
+		git init sub &&
+		test_commit -C sub A &&
+		test_commit -C sub B &&
+		git submodule add ./sub &&
+		git commit -m sub &&
+		rm sub/* &&
+		test_checkout_workers 2 git checkout --recurse-submodules .
+	)
+'
+
+test_expect_success 'parallel checkout respects --[no]-force' '
+	set_checkout_config 2 0 &&
+	git init dirty &&
+	(
+		cd dirty &&
+		mkdir D &&
+		test_commit D/F &&
+		test_commit F &&
+
+		rm -rf D &&
+		echo changed >D &&
+		echo changed >F.t &&
+
+		# We expect 0 workers because there is nothing to be done
+		test_checkout_workers 0 git checkout HEAD &&
+		test_path_is_file D &&
+		grep changed D &&
+		grep changed F.t &&
+
+		test_checkout_workers 2 git checkout --force HEAD &&
+		test_path_is_dir D &&
+		grep D/F D/F.t &&
+		grep F F.t
+	)
+'
+
+test_expect_success SYMLINKS 'parallel checkout checks for symlinks in leading dirs' '
+	set_checkout_config 2 0 &&
+	git init symlinks &&
+	(
+		cd symlinks &&
+		mkdir D untracked &&
+		# Commit 2 files to have enough work for 2 parallel workers
+		test_commit D/A &&
+		test_commit D/B &&
+		rm -rf D &&
+		ln -s untracked D &&
+
+		test_checkout_workers 2 git checkout --force HEAD &&
+		! test -h D &&
+		grep D/A D/A.t &&
+		grep D/B D/B.t
+	)
+'
+
+test_done
diff --git a/t/t2081-parallel-checkout-collisions.sh b/t/t2081-parallel-checkout-collisions.sh
new file mode 100755
index 0000000..f6fcfc0
--- /dev/null
+++ b/t/t2081-parallel-checkout-collisions.sh
@@ -0,0 +1,162 @@
+#!/bin/sh
+
+test_description="path collisions during parallel checkout
+
+Parallel checkout must detect path collisions to:
+
+1) Avoid racily writing to different paths that represent the same file on disk.
+2) Report the colliding entries on clone.
+
+The tests in this file exercise parallel checkout's collision detection code in
+both these mechanics.
+"
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY/lib-parallel-checkout.sh"
+
+TEST_ROOT="$PWD"
+
+test_expect_success CASE_INSENSITIVE_FS 'setup' '
+	empty_oid=$(git hash-object -w --stdin </dev/null) &&
+	cat >objs <<-EOF &&
+	100644 $empty_oid	FILE_X
+	100644 $empty_oid	FILE_x
+	100644 $empty_oid	file_X
+	100644 $empty_oid	file_x
+	EOF
+	git update-index --index-info <objs &&
+	git commit -m "colliding files" &&
+	git tag basename_collision &&
+
+	write_script "$TEST_ROOT"/logger_script <<-\EOF
+	echo "$@" >>filter.log
+	EOF
+'
+
+test_workers_in_event_trace ()
+{
+	test $1 -eq $(grep ".event.:.child_start..*checkout--worker" $2 | wc -l)
+}
+
+test_expect_success CASE_INSENSITIVE_FS 'worker detects basename collision' '
+	GIT_TRACE2_EVENT="$(pwd)/trace" git \
+		-c checkout.workers=2 -c checkout.thresholdForParallelism=0 \
+		checkout . &&
+
+	test_workers_in_event_trace 2 trace &&
+	collisions=$(grep -i "category.:.pcheckout.,.key.:.collision/basename.,.value.:.file_x.}" trace | wc -l) &&
+	test $collisions -eq 3
+'
+
+test_expect_success CASE_INSENSITIVE_FS 'worker detects dirname collision' '
+	test_config filter.logger.smudge "\"$TEST_ROOT/logger_script\" %f" &&
+	empty_oid=$(git hash-object -w --stdin </dev/null) &&
+
+	# By setting a filter command to "a", we make it ineligible for parallel
+	# checkout, and thus it is checked out *first*. This way we can ensure
+	# that "A/B" and "A/C" will both collide with the regular file "a".
+	#
+	attr_oid=$(echo "a filter=logger" | git hash-object -w --stdin) &&
+
+	cat >objs <<-EOF &&
+	100644 $empty_oid	A/B
+	100644 $empty_oid	A/C
+	100644 $empty_oid	a
+	100644 $attr_oid	.gitattributes
+	EOF
+	git rm -rf . &&
+	git update-index --index-info <objs &&
+
+	rm -f trace filter.log &&
+	GIT_TRACE2_EVENT="$(pwd)/trace" git \
+		-c checkout.workers=2 -c checkout.thresholdForParallelism=0 \
+		checkout . &&
+
+	# Check that "a" (and only "a") was filtered
+	echo a >expected.log &&
+	test_cmp filter.log expected.log &&
+
+	# Check that it used the right number of workers and detected the collisions
+	test_workers_in_event_trace 2 trace &&
+	grep "category.:.pcheckout.,.key.:.collision/dirname.,.value.:.A/B.}" trace &&
+	grep "category.:.pcheckout.,.key.:.collision/dirname.,.value.:.A/C.}" trace
+'
+
+test_expect_success SYMLINKS,CASE_INSENSITIVE_FS 'do not follow symlinks colliding with leading dir' '
+	empty_oid=$(git hash-object -w --stdin </dev/null) &&
+	symlink_oid=$(echo "./e" | git hash-object -w --stdin) &&
+	mkdir e &&
+
+	cat >objs <<-EOF &&
+	120000 $symlink_oid	D
+	100644 $empty_oid	d/x
+	100644 $empty_oid	e/y
+	EOF
+	git rm -rf . &&
+	git update-index --index-info <objs &&
+
+	set_checkout_config 2 0 &&
+	test_checkout_workers 2 git checkout . &&
+	test_path_is_dir e &&
+	test_path_is_missing e/x
+'
+
+# The two following tests check that parallel checkout correctly reports
+# colliding entries on clone. The sequential code detects a collision by
+# calling lstat() before trying to open(O_CREAT) a file. (Note that this only
+# works for clone.) Then, to find the pair of a colliding item k, it searches
+# cache_entry[0, k-1]. This is not sufficient in parallel checkout because:
+#
+# - A colliding file may be created between the lstat() and open() calls;
+# - A colliding entry might appear in the second half of the cache_entry array.
+#
+test_expect_success CASE_INSENSITIVE_FS 'collision report on clone (w/ racy file creation)' '
+	git reset --hard basename_collision &&
+	set_checkout_config 2 0 &&
+	test_checkout_workers 2 git clone . clone-repo 2>stderr &&
+
+	grep FILE_X stderr &&
+	grep FILE_x stderr &&
+	grep file_X stderr &&
+	grep file_x stderr &&
+	grep "the following paths have collided" stderr
+'
+
+# This test ensures that the collision report code is correctly looking for
+# colliding peers in the second half of the cache_entry array. This is done by
+# defining a smudge command for the *last* array entry, which makes it
+# non-eligible for parallel-checkout. Thus, it is checked out *first*, before
+# spawning the workers.
+#
+# Note: this test doesn't work on Windows because, on this system, the
+# collision report code uses strcmp() to find the colliding pairs when
+# core.ignoreCase is false. And we need this setting for this test so that only
+# 'file_x' matches the pattern of the filter attribute. But the test works on
+# OSX, where the colliding pairs are found using inode.
+#
+test_expect_success CASE_INSENSITIVE_FS,!MINGW,!CYGWIN \
+	'collision report on clone (w/ colliding peer after the detected entry)' '
+
+	test_config_global filter.logger.smudge "\"$TEST_ROOT/logger_script\" %f" &&
+	git reset --hard basename_collision &&
+	echo "file_x filter=logger" >.gitattributes &&
+	git add .gitattributes &&
+	git commit -m "filter for file_x" &&
+
+	rm -rf clone-repo &&
+	set_checkout_config 2 0 &&
+	test_checkout_workers 2 \
+		git -c core.ignoreCase=false clone . clone-repo 2>stderr &&
+
+	grep FILE_X stderr &&
+	grep FILE_x stderr &&
+	grep file_X stderr &&
+	grep file_x stderr &&
+	grep "the following paths have collided" stderr &&
+
+	# Check that only "file_x" was filtered
+	echo file_x >expected.log &&
+	test_cmp clone-repo/filter.log expected.log
+'
+
+test_done
diff --git a/t/t2082-parallel-checkout-attributes.sh b/t/t2082-parallel-checkout-attributes.sh
new file mode 100755
index 0000000..2525457
--- /dev/null
+++ b/t/t2082-parallel-checkout-attributes.sh
@@ -0,0 +1,194 @@
+#!/bin/sh
+
+test_description='parallel-checkout: attributes
+
+Verify that parallel-checkout correctly creates files that require
+conversions, as specified in .gitattributes. The main point here is
+to check that the conv_attr data is correctly sent to the workers
+and that it contains sufficient information to smudge files
+properly (without access to the index or attribute stack).
+'
+
+TEST_NO_CREATE_REPO=1
+. ./test-lib.sh
+. "$TEST_DIRECTORY/lib-parallel-checkout.sh"
+. "$TEST_DIRECTORY/lib-encoding.sh"
+
+test_expect_success 'parallel-checkout with ident' '
+	set_checkout_config 2 0 &&
+	git init ident &&
+	(
+		cd ident &&
+		echo "A ident" >.gitattributes &&
+		echo "\$Id\$" >A &&
+		echo "\$Id\$" >B &&
+		git add -A &&
+		git commit -m id &&
+
+		rm A B &&
+		test_checkout_workers 2 git reset --hard &&
+		hexsz=$(test_oid hexsz) &&
+		grep -E "\\\$Id: [0-9a-f]{$hexsz} \\\$" A &&
+		grep "\\\$Id\\\$" B
+	)
+'
+
+test_expect_success 'parallel-checkout with re-encoding' '
+	set_checkout_config 2 0 &&
+	git init encoding &&
+	(
+		cd encoding &&
+		echo text >utf8-text &&
+		write_utf16 <utf8-text >utf16-text &&
+
+		echo "A working-tree-encoding=UTF-16" >.gitattributes &&
+		cp utf16-text A &&
+		cp utf8-text B &&
+		git add A B .gitattributes &&
+		git commit -m encoding &&
+
+		# Check that A is stored in UTF-8
+		git cat-file -p :A >A.internal &&
+		test_cmp_bin utf8-text A.internal &&
+
+		rm A B &&
+		test_checkout_workers 2 git checkout A B &&
+
+		# Check that A (and only A) is re-encoded during checkout
+		test_cmp_bin utf16-text A &&
+		test_cmp_bin utf8-text B
+	)
+'
+
+test_expect_success 'parallel-checkout with eol conversions' '
+	set_checkout_config 2 0 &&
+	git init eol &&
+	(
+		cd eol &&
+		printf "multi\r\nline\r\ntext" >crlf-text &&
+		printf "multi\nline\ntext" >lf-text &&
+
+		git config core.autocrlf false &&
+		echo "A eol=crlf" >.gitattributes &&
+		cp crlf-text A &&
+		cp lf-text B &&
+		git add A B .gitattributes &&
+		git commit -m eol &&
+
+		# Check that A is stored with LF format
+		git cat-file -p :A >A.internal &&
+		test_cmp_bin lf-text A.internal &&
+
+		rm A B &&
+		test_checkout_workers 2 git checkout A B &&
+
+		# Check that A (and only A) is converted to CRLF during checkout
+		test_cmp_bin crlf-text A &&
+		test_cmp_bin lf-text B
+	)
+'
+
+# Entries that require an external filter are not eligible for parallel
+# checkout. Check that both the parallel-eligible and non-eligible entries are
+# properly writen in a single checkout operation.
+#
+test_expect_success 'parallel-checkout and external filter' '
+	set_checkout_config 2 0 &&
+	git init filter &&
+	(
+		cd filter &&
+		write_script <<-\EOF rot13.sh &&
+		tr \
+		  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+		  "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
+		EOF
+
+		git config filter.rot13.clean "\"$(pwd)/rot13.sh\"" &&
+		git config filter.rot13.smudge "\"$(pwd)/rot13.sh\"" &&
+		git config filter.rot13.required true &&
+
+		echo abcd >original &&
+		echo nopq >rot13 &&
+
+		echo "A filter=rot13" >.gitattributes &&
+		cp original A &&
+		cp original B &&
+		cp original C &&
+		git add A B C .gitattributes &&
+		git commit -m filter &&
+
+		# Check that A (and only A) was cleaned
+		git cat-file -p :A >A.internal &&
+		test_cmp rot13 A.internal &&
+		git cat-file -p :B >B.internal &&
+		test_cmp original B.internal &&
+		git cat-file -p :C >C.internal &&
+		test_cmp original C.internal &&
+
+		rm A B C *.internal &&
+		test_checkout_workers 2 git checkout A B C &&
+
+		# Check that A (and only A) was smudged during checkout
+		test_cmp original A &&
+		test_cmp original B &&
+		test_cmp original C
+	)
+'
+
+# The delayed queue is independent from the parallel queue, and they should be
+# able to work together in the same checkout process.
+#
+test_expect_success PERL 'parallel-checkout and delayed checkout' '
+	write_script rot13-filter.pl "$PERL_PATH" \
+		<"$TEST_DIRECTORY"/t0021/rot13-filter.pl &&
+
+	test_config_global filter.delay.process \
+		"\"$(pwd)/rot13-filter.pl\" --always-delay \"$(pwd)/delayed.log\" clean smudge delay" &&
+	test_config_global filter.delay.required true &&
+
+	echo "abcd" >original &&
+	echo "nopq" >rot13 &&
+
+	git init delayed &&
+	(
+		cd delayed &&
+		echo "*.d filter=delay" >.gitattributes &&
+		cp ../original W.d &&
+		cp ../original X.d &&
+		cp ../original Y &&
+		cp ../original Z &&
+		git add -A &&
+		git commit -m delayed &&
+
+		# Check that *.d files were cleaned
+		git cat-file -p :W.d >W.d.internal &&
+		test_cmp W.d.internal ../rot13 &&
+		git cat-file -p :X.d >X.d.internal &&
+		test_cmp X.d.internal ../rot13 &&
+		git cat-file -p :Y >Y.internal &&
+		test_cmp Y.internal ../original &&
+		git cat-file -p :Z >Z.internal &&
+		test_cmp Z.internal ../original &&
+
+		rm *
+	) &&
+
+	set_checkout_config 2 0 &&
+	test_checkout_workers 2 git -C delayed checkout -f &&
+	verify_checkout delayed &&
+
+	# Check that the *.d files got to the delay queue and were filtered
+	grep "smudge W.d .* \[DELAYED\]" delayed.log &&
+	grep "smudge X.d .* \[DELAYED\]" delayed.log &&
+	test_cmp delayed/W.d original &&
+	test_cmp delayed/X.d original &&
+
+	# Check that the parallel-eligible entries went to the right queue and
+	# were not filtered
+	! grep "smudge Y .* \[DELAYED\]" delayed.log &&
+	! grep "smudge Z .* \[DELAYED\]" delayed.log &&
+	test_cmp delayed/Y original &&
+	test_cmp delayed/Z original
+'
+
+test_done
diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh
index 7cb7a70..45ca35d 100755
--- a/t/t2200-add-update.sh
+++ b/t/t2200-add-update.sh
@@ -135,7 +135,7 @@
 	after=$(git ls-files -s check top) &&
 
 	test "$before" = "$after" &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 
 '
 
diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh
index 96dfca1..37ad794 100755
--- a/t/t2400-worktree-add.sh
+++ b/t/t2400-worktree-add.sh
@@ -67,11 +67,25 @@
 '
 
 test_expect_success '"add" worktree with lock' '
-	git rev-parse HEAD >expect &&
 	git worktree add --detach --lock here-with-lock main &&
+	test_when_finished "git worktree unlock here-with-lock || :" &&
 	test -f .git/worktrees/here-with-lock/locked
 '
 
+test_expect_success '"add" worktree with lock and reason' '
+	lock_reason="why not" &&
+	git worktree add --detach --lock --reason "$lock_reason" here-with-lock-reason main &&
+	test_when_finished "git worktree unlock here-with-lock-reason || :" &&
+	test -f .git/worktrees/here-with-lock-reason/locked &&
+	echo "$lock_reason" >expect &&
+	test_cmp expect .git/worktrees/here-with-lock-reason/locked
+'
+
+test_expect_success '"add" worktree with reason but no lock' '
+	test_must_fail git worktree add --detach --reason "why not" here-with-reason-only main &&
+	test_path_is_missing .git/worktrees/here-with-reason-only/locked
+'
+
 test_expect_success '"add" worktree from a subdir' '
 	(
 		mkdir sub &&
diff --git a/t/t2401-worktree-prune.sh b/t/t2401-worktree-prune.sh
index aff8775..a615d3b 100755
--- a/t/t2401-worktree-prune.sh
+++ b/t/t2401-worktree-prune.sh
@@ -23,7 +23,7 @@
 	cat >expect <<EOF &&
 Removing worktrees/abc: not a valid directory
 EOF
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	! test -f .git/worktrees/abc &&
 	! test -d .git/worktrees
 '
@@ -35,7 +35,7 @@
 Removing worktrees/def: gitdir file does not exist
 EOF
 	git worktree prune --verbose >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	! test -d .git/worktrees/def &&
 	! test -d .git/worktrees
 '
diff --git a/t/t2402-worktree-list.sh b/t/t2402-worktree-list.sh
index 42d35d9..fedcefe 100755
--- a/t/t2402-worktree-list.sh
+++ b/t/t2402-worktree-list.sh
@@ -167,7 +167,7 @@
 	rm -rf prunable &&
 	git worktree list --verbose >out &&
 	sed -n "s/  */ /g;/\/prunable  *[0-9a-f].*$/,/prunable: .*$/p" <out >actual &&
-	test_i18ncmp actual expect
+	test_cmp actual expect
 '
 
 test_expect_success 'bare repo setup' '
diff --git a/t/t3001-ls-files-others-exclude.sh b/t/t3001-ls-files-others-exclude.sh
index 1ec7cb5..516c95e 100755
--- a/t/t3001-ls-files-others-exclude.sh
+++ b/t/t3001-ls-files-others-exclude.sh
@@ -292,6 +292,11 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'ls-files with "**" patterns and --directory' '
+	# Expectation same as previous test
+	git ls-files --directory -o -i --exclude "**/a.1" >actual &&
+	test_cmp expect actual
+'
 
 test_expect_success 'ls-files with "**" patterns and no slashes' '
 	git ls-files -o -i --exclude "one**a.1" >actual &&
diff --git a/t/t3003-ls-files-exclude.sh b/t/t3003-ls-files-exclude.sh
index d5ec333..c41c4f0 100755
--- a/t/t3003-ls-files-exclude.sh
+++ b/t/t3003-ls-files-exclude.sh
@@ -29,11 +29,11 @@
 '
 check_all_output
 
-test_expect_success 'ls-files -i lists only tracked-but-ignored files' '
+test_expect_success 'ls-files -i -c lists only tracked-but-ignored files' '
 	echo content >other-file &&
 	git add other-file &&
 	echo file >expect &&
-	git ls-files -i --exclude-standard >output &&
+	git ls-files -i -c --exclude-standard >output &&
 	test_cmp expect output
 '
 
diff --git a/t/t3005-ls-files-relative.sh b/t/t3005-ls-files-relative.sh
index 2ec69a8..727e9ae 100755
--- a/t/t3005-ls-files-relative.sh
+++ b/t/t3005-ls-files-relative.sh
@@ -46,7 +46,7 @@
 		ls ../x* >expect.out &&
 		test_must_fail git ls-files -c --error-unmatch ../[xy]* >actual.out 2>actual.err &&
 		test_cmp expect.out actual.out &&
-		test_i18ncmp expect.err actual.err
+		test_cmp expect.err actual.err
 	)
 '
 
@@ -61,7 +61,7 @@
 		ls ../y* >expect.out &&
 		test_must_fail git ls-files -o --error-unmatch ../[xy]* >actual.out 2>actual.err &&
 		test_cmp expect.out actual.out &&
-		test_i18ncmp expect.err actual.err
+		test_cmp expect.err actual.err
 	)
 '
 
diff --git a/t/t3060-ls-files-with-tree.sh b/t/t3060-ls-files-with-tree.sh
index 52ed665..b257c79 100755
--- a/t/t3060-ls-files-with-tree.sh
+++ b/t/t3060-ls-files-with-tree.sh
@@ -47,6 +47,12 @@
 	git add .
 '
 
+test_expect_success 'usage' '
+	test_expect_code 128 git ls-files --with-tree=HEAD -u &&
+	test_expect_code 128 git ls-files --with-tree=HEAD -s &&
+	test_expect_code 128 git ls-files --recurse-submodules --with-tree=HEAD
+'
+
 test_expect_success 'git ls-files --with-tree should succeed from subdir' '
 	# We have to run from a sub-directory to trigger prune_path
 	# Then we finally get to run our --with-tree test
@@ -60,4 +66,39 @@
     'git ls-files --with-tree should add entries from named tree.' \
     'test_cmp expected output'
 
+test_expect_success 'no duplicates in --with-tree output' '
+	git ls-files --with-tree=HEAD >actual &&
+	sort -u actual >expected &&
+	test_cmp expected actual
+'
+
+test_expect_success 'setup: output in a conflict' '
+	test_create_repo conflict &&
+	test_commit -C conflict BASE file &&
+	test_commit -C conflict A file foo &&
+	git -C conflict reset --hard BASE &&
+	test_commit -C conflict B file bar
+'
+
+test_expect_success 'output in a conflict' '
+	test_must_fail git -C conflict merge A B &&
+	cat >expected <<-\EOF &&
+	file
+	file
+	file
+	file
+	EOF
+	git -C conflict ls-files --with-tree=HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'output with removed .git/index' '
+	cat >expected <<-\EOF &&
+	file
+	EOF
+	rm conflict/.git/index &&
+	git -C conflict ls-files --with-tree=HEAD >actual &&
+	test_cmp expected actual
+'
+
 test_done
diff --git a/t/t3070-wildmatch.sh b/t/t3070-wildmatch.sh
index 891d4d7..56ea4bd 100755
--- a/t/t3070-wildmatch.sh
+++ b/t/t3070-wildmatch.sh
@@ -4,6 +4,11 @@
 
 . ./test-lib.sh
 
+# Disable expensive chain-lint tests; all of the tests in this script
+# are variants of a few trivial test-tool invocations, and there are a lot of
+# them.
+GIT_TEST_CHAIN_LINT_HARDER_DEFAULT=0
+
 should_create_test_file() {
 	file=$1
 
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index 00761e4..cc4b102 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -695,7 +695,7 @@
 	git branch -d symref >actual &&
 	test_path_is_file .git/refs/heads/target &&
 	test_path_is_missing .git/refs/heads/symref &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'deleting a dangling symref' '
@@ -704,7 +704,7 @@
 	echo "Deleted branch dangling-symref (was nowhere)." >expect &&
 	git branch -d dangling-symref >actual &&
 	test_path_is_missing .git/refs/heads/dangling-symref &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'deleting a self-referential symref' '
@@ -713,7 +713,7 @@
 	echo "Deleted branch self-reference (was refs/heads/self-reference)." >expect &&
 	git branch -d self-reference >actual &&
 	test_path_is_missing .git/refs/heads/self-reference &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'renaming a symref is not allowed' '
@@ -808,7 +808,7 @@
 	sha1=$(git rev-parse my7 | cut -c 1-7) &&
 	echo "Deleted branch my7 (was $sha1)." >expect &&
 	git branch -d my7 >actual 2>&1 &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'deleting currently checked out branch fails' '
@@ -843,7 +843,7 @@
 test_expect_success '--set-upstream-to fails on multiple branches' '
 	echo "fatal: too many arguments to set new upstream" >expect &&
 	test_must_fail git branch --set-upstream-to main a b c 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--set-upstream-to fails on detached HEAD' '
@@ -851,13 +851,13 @@
 	test_when_finished git checkout - &&
 	echo "fatal: could not set upstream of HEAD to main when it does not point to any branch." >expect &&
 	test_must_fail git branch --set-upstream-to main 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--set-upstream-to fails on a missing dst branch' '
 	echo "fatal: branch '"'"'does-not-exist'"'"' does not exist" >expect &&
 	test_must_fail git branch --set-upstream-to main does-not-exist 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--set-upstream-to fails on a missing src branch' '
@@ -868,7 +868,7 @@
 test_expect_success '--set-upstream-to fails on a non-ref' '
 	echo "fatal: Cannot setup tracking information; starting point '"'"'HEAD^{}'"'"' is not a branch." >expect &&
 	test_must_fail git branch --set-upstream-to HEAD^{} 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--set-upstream-to fails on locked config' '
@@ -899,7 +899,7 @@
 test_expect_success '--unset-upstream should fail if given a non-existent branch' '
 	echo "fatal: Branch '"'"'i-dont-exist'"'"' has no upstream information" >expect &&
 	test_must_fail git branch --unset-upstream i-dont-exist 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--unset-upstream should fail if config is locked' '
@@ -921,13 +921,13 @@
 	# fail for a branch without upstream set
 	echo "fatal: Branch '"'"'main'"'"' has no upstream information" >expect &&
 	test_must_fail git branch --unset-upstream 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--unset-upstream should fail on multiple branches' '
 	echo "fatal: too many arguments to unset upstream" >expect &&
 	test_must_fail git branch --unset-upstream a b c 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success '--unset-upstream should fail on detached HEAD' '
@@ -935,7 +935,7 @@
 	test_when_finished git checkout - &&
 	echo "fatal: could not unset upstream of HEAD when it does not point to any branch." >expect &&
 	test_must_fail git branch --unset-upstream 2>err &&
-	test_i18ncmp expect err
+	test_cmp expect err
 '
 
 test_expect_success 'test --unset-upstream on a particular branch' '
@@ -957,7 +957,7 @@
 	EOF
 	test_expect_code 1 git config branch.my13.remote &&
 	test_expect_code 1 git config branch.my13.merge &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 # Keep this test last, as it changes the current branch
diff --git a/t/t3201-branch-contains.sh b/t/t3201-branch-contains.sh
index 578b5f4..349a810 100755
--- a/t/t3201-branch-contains.sh
+++ b/t/t3201-branch-contains.sh
@@ -264,7 +264,7 @@
 	* topic $(git rev-parse --short topic ) [ahead 1] foo
 	  zzz   $(git rev-parse --short zzz   ) second on main
 	EOF
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_done
diff --git a/t/t3202-show-branch-octopus.sh b/t/t3202-show-branch-octopus.sh
deleted file mode 100755
index 5cb0126..0000000
--- a/t/t3202-show-branch-octopus.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-
-test_description='test show-branch with more than 8 heads'
-
-GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
-export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
-
-. ./test-lib.sh
-
-numbers="1 2 3 4 5 6 7 8 9 10"
-
-test_expect_success 'setup' '
-
-	> file &&
-	git add file &&
-	test_tick &&
-	git commit -m initial &&
-
-	for i in $numbers
-	do
-		git checkout -b branch$i main &&
-		> file$i &&
-		git add file$i &&
-		test_tick &&
-		git commit -m branch$i || return 1
-	done
-
-'
-
-cat > expect << EOF
-! [branch1] branch1
- ! [branch2] branch2
-  ! [branch3] branch3
-   ! [branch4] branch4
-    ! [branch5] branch5
-     ! [branch6] branch6
-      ! [branch7] branch7
-       ! [branch8] branch8
-        ! [branch9] branch9
-         * [branch10] branch10
-----------
-         * [branch10] branch10
-        +  [branch9] branch9
-       +   [branch8] branch8
-      +    [branch7] branch7
-     +     [branch6] branch6
-    +      [branch5] branch5
-   +       [branch4] branch4
-  +        [branch3] branch3
- +         [branch2] branch2
-+          [branch1] branch1
-+++++++++* [branch10^] initial
-EOF
-
-test_expect_success 'show-branch with more than 8 branches' '
-
-	git show-branch $(for i in $numbers; do echo branch$i; done) > out &&
-	test_cmp expect out
-
-'
-
-test_expect_success 'show-branch with showbranch.default' '
-	for i in $numbers; do
-		git config --add showbranch.default branch$i
-	done &&
-	git show-branch >out &&
-	test_cmp expect out
-'
-
-test_done
diff --git a/t/t3202-show-branch.sh b/t/t3202-show-branch.sh
new file mode 100755
index 0000000..ad9902a
--- /dev/null
+++ b/t/t3202-show-branch.sh
@@ -0,0 +1,149 @@
+#!/bin/sh
+
+test_description='test show-branch'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	test_commit initial &&
+	for i in $(test_seq 1 10)
+	do
+		git checkout -b branch$i initial &&
+		test_commit --no-tag branch$i
+	done &&
+	git for-each-ref \
+		--sort=version:refname \
+		--format="%(refname:strip=2)" \
+		"refs/heads/branch*" >branches.sorted &&
+	sed "s/^> //" >expect <<-\EOF
+	> ! [branch1] branch1
+	>  ! [branch2] branch2
+	>   ! [branch3] branch3
+	>    ! [branch4] branch4
+	>     ! [branch5] branch5
+	>      ! [branch6] branch6
+	>       ! [branch7] branch7
+	>        ! [branch8] branch8
+	>         ! [branch9] branch9
+	>          * [branch10] branch10
+	> ----------
+	>          * [branch10] branch10
+	>         +  [branch9] branch9
+	>        +   [branch8] branch8
+	>       +    [branch7] branch7
+	>      +     [branch6] branch6
+	>     +      [branch5] branch5
+	>    +       [branch4] branch4
+	>   +        [branch3] branch3
+	>  +         [branch2] branch2
+	> +          [branch1] branch1
+	> +++++++++* [branch10^] initial
+	EOF
+'
+
+test_expect_success 'show-branch with more than 8 branches' '
+	git show-branch $(cat branches.sorted) >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'show-branch with showbranch.default' '
+	for branch in $(cat branches.sorted)
+	do
+		test_config showbranch.default $branch --add
+	done &&
+	git show-branch >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'show-branch --color output' '
+	sed "s/^> //" >expect <<-\EOF &&
+	> <RED>!<RESET> [branch1] branch1
+	>  <GREEN>!<RESET> [branch2] branch2
+	>   <YELLOW>!<RESET> [branch3] branch3
+	>    <BLUE>!<RESET> [branch4] branch4
+	>     <MAGENTA>!<RESET> [branch5] branch5
+	>      <CYAN>!<RESET> [branch6] branch6
+	>       <BOLD;RED>!<RESET> [branch7] branch7
+	>        <BOLD;GREEN>!<RESET> [branch8] branch8
+	>         <BOLD;YELLOW>!<RESET> [branch9] branch9
+	>          <BOLD;BLUE>*<RESET> [branch10] branch10
+	> ----------
+	>          <BOLD;BLUE>*<RESET> [branch10] branch10
+	>         <BOLD;YELLOW>+<RESET>  [branch9] branch9
+	>        <BOLD;GREEN>+<RESET>   [branch8] branch8
+	>       <BOLD;RED>+<RESET>    [branch7] branch7
+	>      <CYAN>+<RESET>     [branch6] branch6
+	>     <MAGENTA>+<RESET>      [branch5] branch5
+	>    <BLUE>+<RESET>       [branch4] branch4
+	>   <YELLOW>+<RESET>        [branch3] branch3
+	>  <GREEN>+<RESET>         [branch2] branch2
+	> <RED>+<RESET>          [branch1] branch1
+	> <RED>+<RESET><GREEN>+<RESET><YELLOW>+<RESET><BLUE>+<RESET><MAGENTA>+<RESET><CYAN>+<RESET><BOLD;RED>+<RESET><BOLD;GREEN>+<RESET><BOLD;YELLOW>+<RESET><BOLD;BLUE>*<RESET> [branch10^] initial
+	EOF
+	git show-branch --color=always $(cat branches.sorted) >actual.raw &&
+	test_decode_color <actual.raw >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'show branch --remotes' '
+	cat >expect.err <<-\EOF &&
+	No revs to be shown.
+	EOF
+	git show-branch -r 2>actual.err >actual.out &&
+	test_cmp expect.err actual.err &&
+	test_must_be_empty actual.out
+'
+
+test_expect_success 'setup show branch --list' '
+	sed "s/^> //" >expect <<-\EOF
+	>   [branch1] branch1
+	>   [branch2] branch2
+	>   [branch3] branch3
+	>   [branch4] branch4
+	>   [branch5] branch5
+	>   [branch6] branch6
+	>   [branch7] branch7
+	>   [branch8] branch8
+	>   [branch9] branch9
+	> * [branch10] branch10
+	EOF
+'
+
+test_expect_success 'show branch --list' '
+	git show-branch --list $(cat branches.sorted) >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'show branch --list has no --color output' '
+	git show-branch --color=always --list $(cat branches.sorted) >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'show branch --merge-base with one argument' '
+	for branch in $(cat branches.sorted)
+	do
+		git rev-parse $branch >expect &&
+		git show-branch --merge-base $branch >actual &&
+		test_cmp expect actual
+	done
+'
+
+test_expect_success 'show branch --merge-base with two arguments' '
+	for branch in $(cat branches.sorted)
+	do
+		git rev-parse initial >expect &&
+		git show-branch --merge-base initial $branch >actual &&
+		test_cmp expect actual
+	done
+'
+
+test_expect_success 'show branch --merge-base with N arguments' '
+	git rev-parse initial >expect &&
+	git show-branch --merge-base $(cat branches.sorted) >actual &&
+	test_cmp expect actual &&
+
+	git merge-base $(cat branches.sorted) >actual &&
+	test_cmp expect actual
+'
+
+test_done
diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh
index b6fcd01..5325b9f 100755
--- a/t/t3203-branch-output.sh
+++ b/t/t3203-branch-output.sh
@@ -160,7 +160,7 @@
 EOF
 	git checkout HEAD^0 &&
 	git branch >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch shows detached HEAD properly after checkout --detach' '
@@ -173,7 +173,7 @@
 EOF
 	git checkout --detach &&
 	git branch >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch shows detached HEAD properly after moving' '
@@ -185,7 +185,7 @@
 EOF
 	git reset --hard HEAD^1 &&
 	git branch >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch shows detached HEAD properly from tag' '
@@ -198,7 +198,7 @@
 	git tag fromtag main &&
 	git checkout fromtag &&
 	git branch >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch shows detached HEAD properly after moving from tag' '
@@ -210,7 +210,7 @@
 EOF
 	git reset --hard HEAD^1 &&
 	git branch >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch `--sort=[-]objectsize` option' '
@@ -221,7 +221,7 @@
 	  main
 	EOF
 	git branch --sort=objectsize >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	cat >expect <<-\EOF &&
 	* (HEAD detached from fromtag)
@@ -230,7 +230,7 @@
 	  branch-two
 	EOF
 	git branch --sort=-objectsize >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch `--sort=[-]type` option' '
@@ -241,7 +241,7 @@
 	  main
 	EOF
 	git branch --sort=type >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	cat >expect <<-\EOF &&
 	* (HEAD detached from fromtag)
@@ -250,7 +250,7 @@
 	  main
 	EOF
 	git branch --sort=-type >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch `--sort=[-]version:refname` option' '
@@ -261,7 +261,7 @@
 	  main
 	EOF
 	git branch --sort=version:refname >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	cat >expect <<-\EOF &&
 	* (HEAD detached from fromtag)
@@ -270,7 +270,7 @@
 	  branch-one
 	EOF
 	git branch --sort=-version:refname >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git branch --points-at option' '
@@ -337,7 +337,7 @@
 	Refname is refs/heads/ref-to-remote
 	EOF
 	git branch --format="Refname is %(refname)" >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'worktree colors correct' '
@@ -355,7 +355,7 @@
 	rm -r worktree_dir &&
 	git worktree prune &&
 	test_decode_color <actual.raw >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success "set up color tests" '
@@ -398,7 +398,7 @@
 	git branch -vv >actual &&
 	rm -r worktree_dir &&
 	git worktree prune &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_done
diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
index 1b26c4c..e30bc48 100755
--- a/t/t3206-range-diff.sh
+++ b/t/t3206-range-diff.sh
@@ -521,6 +521,30 @@
 	grep "> 1: .* new message" 0001-*
 '
 
+test_expect_success 'format-patch --range-diff reroll-count with a non-integer' '
+	git format-patch --range-diff=HEAD~1 -v2.9 HEAD~1 >actual &&
+	test_when_finished "rm v2.9-0001-*" &&
+	test_line_count = 1 actual &&
+	test_i18ngrep "^Range-diff:$" v2.9-0001-* &&
+	grep "> 1: .* new message" v2.9-0001-*
+'
+
+test_expect_success 'format-patch --range-diff reroll-count with a integer' '
+	git format-patch --range-diff=HEAD~1 -v2 HEAD~1 >actual &&
+	test_when_finished "rm v2-0001-*" &&
+	test_line_count = 1 actual &&
+	test_i18ngrep "^Range-diff ..* v1:$" v2-0001-* &&
+	grep "> 1: .* new message" v2-0001-*
+'
+
+test_expect_success 'format-patch --range-diff with v0' '
+	git format-patch --range-diff=HEAD~1 -v0 HEAD~1 >actual &&
+	test_when_finished "rm v0-0001-*" &&
+	test_line_count = 1 actual &&
+	test_i18ngrep "^Range-diff:$" v0-0001-* &&
+	grep "> 1: .* new message" v0-0001-*
+'
+
 test_expect_success 'range-diff overrides diff.noprefix internally' '
 	git -c diff.noprefix=true range-diff HEAD^...
 '
diff --git a/t/t3210-pack-refs.sh b/t/t3210-pack-refs.sh
index 3b7cdc5..577f32d 100755
--- a/t/t3210-pack-refs.sh
+++ b/t/t3210-pack-refs.sh
@@ -253,7 +253,7 @@
 	git for-each-ref >all-refs-packed &&
 	test_cmp all-refs-before all-refs-packed &&
 	test -h .git/packed-refs &&
-	test "$(readlink .git/packed-refs)" = "my-deviant-packed-refs"
+	test "$(test_readlink .git/packed-refs)" = "my-deviant-packed-refs"
 '
 
 test_done
diff --git a/t/t3300-funny-names.sh b/t/t3300-funny-names.sh
index 04de03c..f5bf16a 100755
--- a/t/t3300-funny-names.sh
+++ b/t/t3300-funny-names.sh
@@ -181,7 +181,7 @@
 	git diff-index -M -p $t0 >diff &&
 	git apply --stat <diff >diffstat &&
 	sed -e "s/|.*//" -e "s/ *\$//" <diffstat >current &&
-	test_i18ncmp expected current
+	test_cmp expected current
 '
 
 test_expect_success 'numstat for rename quotes funny filename' '
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index 4af881f..d742be8 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -1293,11 +1293,11 @@
 	grep "replacement note 3" actual
 '
 
-test_expect_success 'git notes copy diagnoses too many or too few parameters' '
+test_expect_success 'git notes copy diagnoses too many or too few arguments' '
 	test_must_fail git notes copy 2>error &&
-	test_i18ngrep "too few parameters" error &&
+	test_i18ngrep "too few arguments" error &&
 	test_must_fail git notes copy one two three 2>error &&
-	test_i18ngrep "too many parameters" error
+	test_i18ngrep "too many arguments" error
 '
 
 test_expect_success 'git notes get-ref expands refs/heads/main to refs/notes/refs/heads/main' '
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index 5e88a10..0bb88aa 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -113,7 +113,7 @@
 	test_cmp expect.forkpoint actual.forkpoint &&
 	# the next one is dubious---we may want to say "-",
 	# instead of @{-1}, in the message
-	test_i18ncmp expect.messages actual.messages
+	test_cmp expect.messages actual.messages
 '
 
 test_expect_success 'rebase a single mode change' '
@@ -388,22 +388,6 @@
 	)
 '
 
-test_expect_success 'rebase -c rebase.useBuiltin=false warning' '
-	expected="rebase.useBuiltin support has been removed" &&
-
-	# Only warn when the legacy rebase is requested...
-	test_must_fail git -c rebase.useBuiltin=false rebase 2>err &&
-	test_i18ngrep "$expected" err &&
-	test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=false git rebase 2>err &&
-	test_i18ngrep "$expected" err &&
-
-	# ...not when we would have used the built-in anyway
-	test_must_fail git -c rebase.useBuiltin=true rebase 2>err &&
-	test_must_be_empty err &&
-	test_must_fail env GIT_TEST_REBASE_USE_BUILTIN=true git rebase 2>err &&
-	test_must_be_empty err
-'
-
 test_expect_success 'switch to branch checked out here' '
 	git checkout main &&
 	git rebase main main
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 28c2d15..66bcbbf 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -86,7 +86,7 @@
 			git rebase -i HEAD^ >output 2>&1
 	) &&
 	tail -n 1 output >actual &&  # Ignore output about changing todo list
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rebase -i with the exec command' '
@@ -159,9 +159,9 @@
 	test_when_finished "git rebase --abort ||:" &&
 	test_must_fail env git rebase -x "" @ 2>actual &&
 	test_write_lines "error: empty exec command" >expected &&
-	test_i18ncmp expected actual &&
+	test_cmp expected actual &&
 	test_must_fail env git rebase -x " " @ 2>actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'rebase -x with newline in command fails' '
@@ -169,7 +169,7 @@
 	test_must_fail env git rebase -x "a${LF}b" @ 2>actual &&
 	test_write_lines "error: exec commands cannot contain newlines" \
 			 >expected &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'rebase -i with exec of inexistent command' '
@@ -451,7 +451,7 @@
 	grep "^ file1 | 2 +-$" output
 '
 
-test_expect_success C_LOCALE_OUTPUT 'multi-squash only fires up editor once' '
+test_expect_success 'multi-squash only fires up editor once' '
 	base=$(git rev-parse HEAD~4) &&
 	(
 		set_fake_editor &&
@@ -464,7 +464,7 @@
 	test 1 = $(git show | grep ONCE | wc -l)
 '
 
-test_expect_success C_LOCALE_OUTPUT 'multi-fixup does not fire up editor' '
+test_expect_success 'multi-fixup does not fire up editor' '
 	git checkout -b multi-fixup E &&
 	base=$(git rev-parse HEAD~4) &&
 	(
@@ -515,7 +515,7 @@
 	git branch -D conflict-squash
 '
 
-test_expect_success C_LOCALE_OUTPUT 'squash and fixup generate correct log messages' '
+test_expect_success 'squash and fixup generate correct log messages' '
 	cat >expect-squash-fixup <<-\EOF &&
 	B
 
@@ -542,7 +542,7 @@
 	git branch -D squash-fixup
 '
 
-test_expect_success C_LOCALE_OUTPUT 'squash ignores comments' '
+test_expect_success 'squash ignores comments' '
 	git checkout -b skip-comments E &&
 	base=$(git rev-parse HEAD~4) &&
 	(
@@ -558,7 +558,7 @@
 	git branch -D skip-comments
 '
 
-test_expect_success C_LOCALE_OUTPUT 'squash ignores blank lines' '
+test_expect_success 'squash ignores blank lines' '
 	git checkout -b skip-blank-lines E &&
 	base=$(git rev-parse HEAD~4) &&
 	(
@@ -996,7 +996,7 @@
 	test_cmp expected actual
 '
 
-test_expect_success C_LOCALE_OUTPUT 'rebase -ix with --autosquash' '
+test_expect_success 'rebase -ix with --autosquash' '
 	git reset --hard execute &&
 	git checkout -b autosquash &&
 	echo second >second.txt &&
@@ -1137,7 +1137,7 @@
 	test "$(git rev-list --count HEAD)" = 2
 '
 
-test_expect_success C_LOCALE_OUTPUT 'rebase --edit-todo does not work on non-interactive rebase' '
+test_expect_success 'rebase --edit-todo does not work on non-interactive rebase' '
 	git checkout reword-original-root-branch &&
 	git reset --hard &&
 	git checkout conflict-branch &&
@@ -1466,7 +1466,7 @@
 		FAKE_LINES="1 2 3 4" git rebase -i --root 2>actual.2
 	) &&
 	head -n4 actual.2 >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	test D = $(git cat-file commit HEAD | sed -ne \$p)
 '
 
@@ -1490,7 +1490,7 @@
 		set_fake_editor &&
 		test_must_fail env FAKE_LINES="1 2 4" \
 			git rebase -i --root 2>actual &&
-		test_i18ncmp expect actual &&
+		test_cmp expect actual &&
 		cp .git/rebase-merge/git-rebase-todo.backup \
 			.git/rebase-merge/git-rebase-todo &&
 		FAKE_LINES="1 2 drop 3 4 drop 5" git rebase --edit-todo
@@ -1536,11 +1536,11 @@
 		cp .git/rebase-merge/git-rebase-todo.backup orig &&
 		FAKE_LINES="2 3 4" git rebase --edit-todo 2>actual.2 &&
 		head -n6 actual.2 >actual &&
-		test_i18ncmp expect actual &&
+		test_cmp expect actual &&
 		cp orig .git/rebase-merge/git-rebase-todo &&
 		FAKE_LINES="1 2 3 4" git rebase --edit-todo 2>actual.2 &&
 		head -n4 actual.2 >actual &&
-		test_i18ncmp expect.3 actual &&
+		test_cmp expect.3 actual &&
 		git rebase --continue 2>actual
 	) &&
 	test D = $(git cat-file commit HEAD | sed -ne \$p) &&
@@ -1576,16 +1576,16 @@
 		cp .git/rebase-merge/git-rebase-todo.backup orig &&
 		test_must_fail env FAKE_LINES="2 3 4" \
 			git rebase --edit-todo 2>actual &&
-		test_i18ncmp expect actual &&
+		test_cmp expect actual &&
 		test_must_fail git rebase --continue 2>actual &&
-		test_i18ncmp expect.2 actual &&
+		test_cmp expect.2 actual &&
 		test_must_fail git rebase --edit-todo &&
 		cp orig .git/rebase-merge/git-rebase-todo &&
 		test_must_fail env FAKE_LINES="1 2 3 4" \
 			git rebase --edit-todo 2>actual &&
-		test_i18ncmp expect.3 actual &&
+		test_cmp expect.3 actual &&
 		test_must_fail git rebase --continue 2>actual &&
-		test_i18ncmp expect.3 actual &&
+		test_cmp expect.3 actual &&
 		cp orig .git/rebase-merge/git-rebase-todo &&
 		FAKE_LINES="1 2 3 4 drop 5" git rebase --edit-todo &&
 		git rebase --continue 2>actual
diff --git a/t/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh
index 36f169d..78c2749 100755
--- a/t/t3415-rebase-autosquash.sh
+++ b/t/t3415-rebase-autosquash.sh
@@ -84,8 +84,7 @@
 	echo 1 >file1 &&
 	git add -u &&
 	test_tick &&
-	git commit -m "squash! first" &&
-
+	git commit -m "squash! first" -m "extra para for first" &&
 	git tag $1 &&
 	test_tick &&
 	git rebase $2 -i HEAD^^^ &&
@@ -142,7 +141,7 @@
 	echo 1 >file1 &&
 	git add -u &&
 	test_tick &&
-	git commit -m "squash! first" &&
+	git commit -m "squash! first" -m "extra para for first" &&
 	git tag final-multisquash &&
 	test_tick &&
 	git rebase --autosquash -i HEAD~4 &&
@@ -195,7 +194,7 @@
 	git add -u &&
 	test_tick &&
 	oid=$(git rev-parse --short HEAD^) &&
-	git commit -m "squash! $oid" &&
+	git commit -m "squash! $oid" -m "extra para" &&
 	git tag final-shasquash &&
 	test_tick &&
 	git rebase --autosquash -i HEAD^^^ &&
@@ -206,7 +205,8 @@
 	git cat-file blob HEAD^:file1 >actual &&
 	test_cmp expect actual &&
 	git cat-file commit HEAD^ >commit &&
-	grep squash commit >actual &&
+	! grep "squash" commit &&
+	grep "^extra para" commit >actual &&
 	test_line_count = 1 actual
 '
 
@@ -216,7 +216,7 @@
 	git add -u &&
 	test_tick &&
 	oid=$(git rev-parse --short=11 HEAD^) &&
-	git commit -m "squash! $oid" &&
+	git commit -m "squash! $oid" -m "extra para" &&
 	git tag final-longshasquash &&
 	test_tick &&
 	git rebase --autosquash -i HEAD^^^ &&
@@ -227,7 +227,8 @@
 	git cat-file blob HEAD^:file1 >actual &&
 	test_cmp expect actual &&
 	git cat-file commit HEAD^ >commit &&
-	grep squash commit >actual &&
+	! grep "squash" commit &&
+	grep "^extra para" commit >actual &&
 	test_line_count = 1 actual
 '
 
@@ -236,7 +237,7 @@
 	echo 1 >file1 &&
 	git add -u &&
 	test_tick &&
-	git commit --$1 first-commit &&
+	git commit --$1 first-commit -m "extra para for first" &&
 	git tag final-commit-$1 &&
 	test_tick &&
 	git rebase --autosquash -i HEAD^^^ &&
@@ -264,11 +265,11 @@
 	echo 1 >file1 &&
 	git add -u &&
 	test_tick &&
-	git commit -m "$1! first" &&
+	git commit -m "$1! first" -m "extra para for first" &&
 	echo 2 >file1 &&
 	git add -u &&
 	test_tick &&
-	git commit -m "$1! $2! first" &&
+	git commit -m "$1! $2! first" -m "second extra para for first" &&
 	git tag "final-$1-$2" &&
 	test_tick &&
 	(
@@ -306,35 +307,35 @@
 	fi
 }
 
-test_expect_success C_LOCALE_OUTPUT 'fixup! fixup!' '
+test_expect_success 'fixup! fixup!' '
 	test_auto_fixup_fixup fixup fixup
 '
 
-test_expect_success C_LOCALE_OUTPUT 'fixup! squash!' '
+test_expect_success 'fixup! squash!' '
 	test_auto_fixup_fixup fixup squash
 '
 
-test_expect_success C_LOCALE_OUTPUT 'squash! squash!' '
+test_expect_success 'squash! squash!' '
 	test_auto_fixup_fixup squash squash
 '
 
-test_expect_success C_LOCALE_OUTPUT 'squash! fixup!' '
+test_expect_success 'squash! fixup!' '
 	test_auto_fixup_fixup squash fixup
 '
 
-test_expect_success C_LOCALE_OUTPUT 'autosquash with custom inst format' '
+test_expect_success 'autosquash with custom inst format' '
 	git reset --hard base &&
 	git config --add rebase.instructionFormat "[%an @ %ar] %s"  &&
 	echo 2 >file1 &&
 	git add -u &&
 	test_tick &&
 	oid=$(git rev-parse --short HEAD^) &&
-	git commit -m "squash! $oid" &&
+	git commit -m "squash! $oid" -m "extra para for first" &&
 	echo 1 >file1 &&
 	git add -u &&
 	test_tick &&
 	subject=$(git log -n 1 --format=%s HEAD~2) &&
-	git commit -m "squash! $subject" &&
+	git commit -m "squash! $subject" -m "second extra para for first" &&
 	git tag final-squash-instFmt &&
 	test_tick &&
 	git rebase --autosquash -i HEAD~4 &&
@@ -345,8 +346,9 @@
 	git cat-file blob HEAD^:file1 >actual &&
 	test_cmp expect actual &&
 	git cat-file commit HEAD^ >commit &&
-	grep squash commit >actual &&
-	test_line_count = 2 actual
+	! grep "squash" commit &&
+	grep first commit >actual &&
+	test_line_count = 3 actual
 '
 
 test_expect_success 'autosquash with empty custom instructionFormat' '
diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
index 0838f4e..f4c2ee0 100755
--- a/t/t3418-rebase-continue.sh
+++ b/t/t3418-rebase-continue.sh
@@ -282,12 +282,35 @@
 	test_i18ngrep "has been rescheduled" err
 '
 
-test_expect_success 'rebase.reschedulefailedexec only affects `rebase -i`' '
-	test_config rebase.reschedulefailedexec true &&
+test_expect_success 'rebase.rescheduleFailedExec only affects `rebase -i`' '
+	test_config rebase.rescheduleFailedExec true &&
 	test_must_fail git rebase -x false HEAD^ &&
 	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
 	git rebase --abort &&
 	git rebase HEAD^
 '
 
+test_expect_success 'rebase.rescheduleFailedExec=true & --no-reschedule-failed-exec' '
+	test_when_finished "git rebase --abort" &&
+	test_config rebase.rescheduleFailedExec true &&
+	test_must_fail git rebase -x false --no-reschedule-failed-exec HEAD~2 &&
+	test_must_fail git rebase --continue 2>err &&
+	! grep "has been rescheduled" err
+'
+
+test_expect_success 'new rebase.rescheduleFailedExec=true setting in an ongoing rebase is ignored' '
+	test_when_finished "git rebase --abort" &&
+	test_must_fail git rebase -x false HEAD~2 &&
+	test_config rebase.rescheduleFailedExec true &&
+	test_must_fail git rebase --continue 2>err &&
+	! grep "has been rescheduled" err
+'
+
+test_expect_success 'there is no --no-reschedule-failed-exec in an ongoing rebase' '
+	test_when_finished "git rebase --abort" &&
+	test_must_fail git rebase -x false HEAD~2 &&
+	test_expect_code 129 git rebase --continue --no-reschedule-failed-exec &&
+	test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec
+'
+
 test_done
diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh
index 4caa014..43fcb68 100755
--- a/t/t3420-rebase-autostash.sh
+++ b/t/t3420-rebase-autostash.sh
@@ -110,7 +110,7 @@
 		fi &&
 		create_expected_success_$suffix &&
 		sed "$remove_progress_re" <actual >actual2 &&
-		test_i18ncmp expected actual2
+		test_cmp expected actual2
 	'
 
 	test_expect_success "rebase$type: dirty index, non-conflicting rebase" '
@@ -231,7 +231,7 @@
 		fi &&
 		create_expected_failure_$suffix &&
 		sed "$remove_progress_re" <actual >actual2 &&
-		test_i18ncmp expected actual2
+		test_cmp expected actual2
 	'
 }
 
diff --git a/t/t3431-rebase-fork-point.sh b/t/t3431-rebase-fork-point.sh
index 2dab893..4c98d99 100755
--- a/t/t3431-rebase-fork-point.sh
+++ b/t/t3431-rebase-fork-point.sh
@@ -29,19 +29,23 @@
 	test_commit G
 '
 
+do_test_rebase () {
+	expected="$1" &&
+	shift &&
+	git checkout main &&
+	git reset --hard E &&
+	git checkout side &&
+	git reset --hard G &&
+	git rebase $* &&
+	test_write_lines $expected >expect &&
+	git log --pretty=%s >actual &&
+	test_cmp expect actual
+}
+
 test_rebase () {
 	expected="$1" &&
 	shift &&
-	test_expect_success "git rebase $*" "
-		git checkout main &&
-		git reset --hard E &&
-		git checkout side &&
-		git reset --hard G &&
-		git rebase $* &&
-		test_write_lines $expected >expect &&
-		git log --pretty=%s >actual &&
-		test_cmp expect actual
-	"
+	test_expect_success "git rebase $*" "do_test_rebase '$expected' $*"
 }
 
 test_rebase 'G F E D B A'
@@ -77,4 +81,35 @@
 	test_must_fail git rebase --fork-point --onto D one
 '
 
+test_expect_success '--fork-point and --root both given' '
+	test_must_fail git rebase --fork-point --root 2>err &&
+	test_i18ngrep "cannot combine" err
+'
+
+test_expect_success 'rebase.forkPoint set to false' '
+	test_config rebase.forkPoint false &&
+	do_test_rebase "G F C E D B A"
+'
+
+test_expect_success 'rebase.forkPoint set to false and then to true' '
+	test_config_global rebase.forkPoint false &&
+	test_config rebase.forkPoint true &&
+	do_test_rebase "G F E D B A"
+'
+
+test_expect_success 'rebase.forkPoint set to false and command line says --fork-point' '
+	test_config rebase.forkPoint false &&
+	do_test_rebase "G F E D B A" --fork-point
+'
+
+test_expect_success 'rebase.forkPoint set to true and command line says --no-fork-point' '
+	test_config rebase.forkPoint true &&
+	do_test_rebase "G F C E D B A" --no-fork-point
+'
+
+test_expect_success 'rebase.forkPoint set to true and --root given' '
+	test_config rebase.forkPoint true &&
+	git rebase --root
+'
+
 test_done
diff --git a/t/t3437-rebase-fixup-options.sh b/t/t3437-rebase-fixup-options.sh
new file mode 100755
index 0000000..c023fef
--- /dev/null
+++ b/t/t3437-rebase-fixup-options.sh
@@ -0,0 +1,211 @@
+#!/bin/sh
+#
+# Copyright (c) 2018 Phillip Wood
+#
+
+test_description='git rebase interactive fixup options
+
+This test checks the "fixup [-C|-c]" command of rebase interactive.
+In addition to amending the contents of the commit, "fixup -C"
+replaces the original commit message with the message of the fixup
+commit. "fixup -c" also replaces the original message, but opens the
+editor to allow the user to edit the message before committing. Similar
+to the "fixup" command that works with "fixup!", "fixup -C" works with
+"amend!" upon --autosquash.
+'
+
+. ./test-lib.sh
+
+. "$TEST_DIRECTORY"/lib-rebase.sh
+
+EMPTY=""
+
+# test_commit_message <rev> -m <msg>
+# test_commit_message <rev> <path>
+# Verify that the commit message of <rev> matches
+# <msg> or the content of <path>.
+test_commit_message () {
+	git show --no-patch --pretty=format:%B "$1" >actual &&
+	case "$2" in
+	-m)
+		echo "$3" >expect &&
+		test_cmp expect actual ;;
+	*)
+		test_cmp "$2" actual ;;
+	esac
+}
+
+get_author () {
+	rev="$1" &&
+	git log -1 --pretty=format:"%an %ae %at" "$rev"
+}
+
+test_expect_success 'setup' '
+	cat >message <<-EOF &&
+	amend! B
+	$EMPTY
+	new subject
+	$EMPTY
+	new
+	body
+	EOF
+
+	test_commit A A &&
+	test_commit B B &&
+	get_author HEAD >expected-author &&
+	ORIG_AUTHOR_NAME="$GIT_AUTHOR_NAME" &&
+	ORIG_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" &&
+	GIT_AUTHOR_NAME="Amend Author" &&
+	GIT_AUTHOR_EMAIL="amend@example.com" &&
+	test_commit "$(cat message)" A A1 A1 &&
+	test_commit A2 A &&
+	test_commit A3 A &&
+	GIT_AUTHOR_NAME="$ORIG_AUTHOR_NAME" &&
+	GIT_AUTHOR_EMAIL="$ORIG_AUTHOR_EMAIL" &&
+	git checkout -b conflicts-branch A &&
+	test_commit conflicts A &&
+
+	set_fake_editor &&
+	git checkout -b branch B &&
+	echo B1 >B &&
+	test_tick &&
+	git commit --fixup=HEAD -a &&
+	git tag B1 &&
+	test_tick &&
+	FAKE_COMMIT_AMEND="edited 1" git commit --fixup=reword:B &&
+	test_tick &&
+	FAKE_COMMIT_AMEND="edited 2" git commit --fixup=reword:HEAD &&
+	echo B2 >B &&
+	test_tick &&
+	FAKE_COMMIT_AMEND="edited squash" git commit --squash=HEAD -a &&
+	git tag B2 &&
+	echo B3 >B &&
+	test_tick &&
+	FAKE_COMMIT_AMEND="edited 3" git commit -a --fixup=amend:HEAD^ &&
+	git tag B3 &&
+
+	GIT_AUTHOR_NAME="Rebase Author" &&
+	GIT_AUTHOR_EMAIL="rebase.author@example.com" &&
+	GIT_COMMITTER_NAME="Rebase Committer" &&
+	GIT_COMMITTER_EMAIL="rebase.committer@example.com"
+'
+
+test_expect_success 'simple fixup -C works' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A2 &&
+	FAKE_LINES="1 fixup_-C 2" git rebase -i B &&
+	test_cmp_rev HEAD^ B &&
+	test_cmp_rev HEAD^{tree} A2^{tree} &&
+	test_commit_message HEAD -m "A2"
+'
+
+test_expect_success 'simple fixup -c works' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A2 &&
+	git log -1 --pretty=format:%B >expected-fixup-message &&
+	test_write_lines "" "Modified A2" >>expected-fixup-message &&
+	FAKE_LINES="1 fixup_-c 2" \
+		FAKE_COMMIT_AMEND="Modified A2" \
+		git rebase -i B &&
+	test_cmp_rev HEAD^ B &&
+	test_cmp_rev HEAD^{tree} A2^{tree} &&
+	test_commit_message HEAD expected-fixup-message
+'
+
+test_expect_success 'fixup -C removes amend! from message' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A1 &&
+	git log -1 --pretty=format:%b >expected-message &&
+	FAKE_LINES="1 fixup_-C 2" git rebase -i A &&
+	test_cmp_rev HEAD^ A &&
+	test_cmp_rev HEAD^{tree} A1^{tree} &&
+	test_commit_message HEAD expected-message &&
+	get_author HEAD >actual-author &&
+	test_cmp expected-author actual-author
+'
+
+test_expect_success 'fixup -C with conflicts gives correct message' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A1 &&
+	git log -1 --pretty=format:%b >expected-message &&
+	test_write_lines "" "edited" >>expected-message &&
+	test_must_fail env FAKE_LINES="1 fixup_-C 2" git rebase -i conflicts &&
+	git checkout --theirs -- A &&
+	git add A &&
+	FAKE_COMMIT_AMEND=edited git rebase --continue &&
+	test_cmp_rev HEAD^ conflicts &&
+	test_cmp_rev HEAD^{tree} A1^{tree} &&
+	test_commit_message HEAD expected-message &&
+	get_author HEAD >actual-author &&
+	test_cmp expected-author actual-author
+'
+
+test_expect_success 'skipping fixup -C after fixup gives correct message' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A3 &&
+	test_must_fail env FAKE_LINES="1 fixup 2 fixup_-C 4" git rebase -i A &&
+	git reset --hard &&
+	FAKE_COMMIT_AMEND=edited git rebase --continue &&
+	test_commit_message HEAD -m "B"
+'
+
+test_expect_success 'sequence of fixup, fixup -C & squash --signoff works' '
+	git checkout --detach B3 &&
+	FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4 squash 5 fixup_-C 6" \
+		FAKE_COMMIT_AMEND=squashed \
+		FAKE_MESSAGE_COPY=actual-squash-message \
+		git -c commit.status=false rebase -ik --signoff A &&
+	git diff-tree --exit-code --patch HEAD B3 -- &&
+	test_cmp_rev HEAD^ A &&
+	test_cmp "$TEST_DIRECTORY/t3437/expected-squash-message" \
+		actual-squash-message
+'
+
+test_expect_success 'first fixup -C commented out in sequence fixup fixup -C fixup -C' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach B2~ &&
+	git log -1 --pretty=format:%b >expected-message &&
+	FAKE_LINES="1 fixup 2 fixup_-C 3 fixup_-C 4" git rebase -i A &&
+	test_cmp_rev HEAD^ A &&
+	test_commit_message HEAD expected-message
+'
+
+test_expect_success 'multiple fixup -c opens editor once' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A3 &&
+	git log -1 --pretty=format:%B >expected-message &&
+	test_write_lines "" "Modified-A3" >>expected-message &&
+	FAKE_COMMIT_AMEND="Modified-A3" \
+		FAKE_LINES="1 fixup_-C 2 fixup_-c 3 fixup_-c 4" \
+		EXPECT_HEADER_COUNT=4 \
+		git rebase -i A &&
+	test_cmp_rev HEAD^ A &&
+	get_author HEAD >actual-author &&
+	test_cmp expected-author actual-author &&
+	test_commit_message HEAD expected-message
+'
+
+test_expect_success 'sequence squash, fixup & fixup -c gives combined message' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	git checkout --detach A3 &&
+	FAKE_LINES="1 squash 2 fixup 3 fixup_-c 4" \
+		FAKE_MESSAGE_COPY=actual-combined-message \
+		git -c commit.status=false rebase -i A &&
+	test_cmp "$TEST_DIRECTORY/t3437/expected-combined-message" \
+		actual-combined-message &&
+	test_cmp_rev HEAD^ A
+'
+
+test_expect_success 'fixup -C works upon --autosquash with amend!' '
+	git checkout --detach B3 &&
+	FAKE_COMMIT_AMEND=squashed \
+		FAKE_MESSAGE_COPY=actual-squash-message \
+		git -c commit.status=false rebase -ik --autosquash \
+						--signoff A &&
+	git diff-tree --exit-code --patch HEAD B3 -- &&
+	test_cmp_rev HEAD^ A &&
+	test_cmp "$TEST_DIRECTORY/t3437/expected-squash-message" \
+		actual-squash-message
+'
+
+test_done
diff --git a/t/t3437/expected-combined-message b/t/t3437/expected-combined-message
new file mode 100644
index 0000000..a26cfb2
--- /dev/null
+++ b/t/t3437/expected-combined-message
@@ -0,0 +1,21 @@
+# This is a combination of 4 commits.
+# This is the 1st commit message:
+
+B
+
+# This is the commit message #2:
+
+# amend! B
+
+new subject
+
+new
+body
+
+# The commit message #3 will be skipped:
+
+# A2
+
+# This is the commit message #4:
+
+A3
diff --git a/t/t3437/expected-squash-message b/t/t3437/expected-squash-message
new file mode 100644
index 0000000..ab2434f
--- /dev/null
+++ b/t/t3437/expected-squash-message
@@ -0,0 +1,51 @@
+# This is a combination of 6 commits.
+# The 1st commit message will be skipped:
+
+# B
+#
+# Signed-off-by: Rebase Committer <rebase.committer@example.com>
+
+# The commit message #2 will be skipped:
+
+# fixup! B
+
+# The commit message #3 will be skipped:
+
+# amend! B
+#
+# B
+#
+# edited 1
+#
+# Signed-off-by: Rebase Committer <rebase.committer@example.com>
+
+# This is the commit message #4:
+
+# amend! amend! B
+
+B
+
+edited 1
+
+edited 2
+
+Signed-off-by: Rebase Committer <rebase.committer@example.com>
+
+# This is the commit message #5:
+
+# squash! amend! amend! B
+
+edited squash
+
+# This is the commit message #6:
+
+# amend! amend! amend! B
+
+B
+
+edited 1
+
+edited 2
+
+edited 3
+squashed
diff --git a/t/t3504-cherry-pick-rerere.sh b/t/t3504-cherry-pick-rerere.sh
index 9198535..4581ae9 100755
--- a/t/t3504-cherry-pick-rerere.sh
+++ b/t/t3504-cherry-pick-rerere.sh
@@ -74,10 +74,10 @@
 	git diff-files --quiet &&
 	test_must_fail git cherry-pick --continue --rerere-autoupdate >actual 2>&1 &&
 	echo "fatal: cherry-pick: --rerere-autoupdate cannot be used with --continue" >expect &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	test_must_fail git cherry-pick --continue --no-rerere-autoupdate >actual 2>&1 &&
 	echo "fatal: cherry-pick: --no-rerere-autoupdate cannot be used with --continue" >expect &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	git cherry-pick --abort
 '
 
diff --git a/t/t3507-cherry-pick-conflict.sh b/t/t3507-cherry-pick-conflict.sh
index 5f4564c..014001b 100755
--- a/t/t3507-cherry-pick-conflict.sh
+++ b/t/t3507-cherry-pick-conflict.sh
@@ -59,7 +59,7 @@
 	EOF
 	test_must_fail git cherry-pick picked 2>actual &&
 
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 test_expect_success 'advice from failed cherry-pick --no-commit' "
@@ -73,7 +73,7 @@
 	EOF
 	test_must_fail git cherry-pick --no-commit picked 2>actual &&
 
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 test_expect_success 'failed cherry-pick sets CHERRY_PICK_HEAD' '
@@ -256,7 +256,7 @@
 
 	test_must_fail git cherry-pick picked &&
 
-	test_i18ncmp expected .git/MERGE_MSG
+	test_cmp expected .git/MERGE_MSG
 '
 
 test_expect_success \
@@ -276,7 +276,7 @@
 
 	test_must_fail git cherry-pick --cleanup=scissors picked &&
 
-	test_i18ncmp expected .git/MERGE_MSG
+	test_cmp expected .git/MERGE_MSG
 '
 
 test_expect_success 'failed cherry-pick describes conflict in work tree' '
@@ -465,7 +465,7 @@
 	test_must_fail git revert picked &&
 
 	sed "s/$OID_REGEX/OBJID/" .git/MERGE_MSG >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success \
@@ -488,7 +488,7 @@
 	test_must_fail git revert --cleanup=scissors picked &&
 
 	sed "s/$OID_REGEX/OBJID/" .git/MERGE_MSG >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'failed cherry-pick does not forget -s' '
diff --git a/t/t3508-cherry-pick-many-commits.sh b/t/t3508-cherry-pick-many-commits.sh
index ec7a2c9..e8375d1 100755
--- a/t/t3508-cherry-pick-many-commits.sh
+++ b/t/t3508-cherry-pick-many-commits.sh
@@ -86,7 +86,7 @@
 	git cherry-pick first..fourth >actual &&
 	sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
 	test_line_count -ge 3 actual.fuzzy &&
-	test_i18ncmp expected actual.fuzzy
+	test_cmp expected actual.fuzzy
 '
 
 test_expect_success 'cherry-pick --strategy resolve first..fourth works' '
@@ -123,7 +123,7 @@
 	test_tick &&
 	git cherry-pick --strategy resolve first..fourth >actual &&
 	sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
-	test_i18ncmp expected actual.fuzzy
+	test_cmp expected actual.fuzzy
 '
 
 test_expect_success 'cherry-pick --ff first..fourth works' '
diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh
index 5b94fda..49010aa 100755
--- a/t/t3510-cherry-pick-sequence.sh
+++ b/t/t3510-cherry-pick-sequence.sh
@@ -65,7 +65,7 @@
 	# gets interrupted, use a high-enough number that is larger
 	# than the number of parents of any commit we have created
 	mainline=4 &&
-	test_expect_code 128 git cherry-pick -s -m $mainline --strategy=recursive -X patience -X ours initial..anotherpick &&
+	test_expect_code 128 git cherry-pick -s -m $mainline --strategy=recursive -X patience -X ours --edit initial..anotherpick &&
 	test_path_is_dir .git/sequencer &&
 	test_path_is_file .git/sequencer/head &&
 	test_path_is_file .git/sequencer/todo &&
@@ -84,6 +84,36 @@
 	ours
 	EOF
 	git config --file=.git/sequencer/opts --get-all options.strategy-option >actual &&
+	test_cmp expect actual &&
+	echo "true" >expect &&
+	git config --file=.git/sequencer/opts --get-all options.edit >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'revert persists opts correctly' '
+	pristine_detach initial &&
+	# to make sure that the session to revert a sequence
+	# gets interrupted, revert commits that are not in the history
+	# of HEAD.
+	test_expect_code 1 git revert -s --strategy=recursive -X patience -X ours --no-edit picked yetanotherpick &&
+	test_path_is_dir .git/sequencer &&
+	test_path_is_file .git/sequencer/head &&
+	test_path_is_file .git/sequencer/todo &&
+	test_path_is_file .git/sequencer/opts &&
+	echo "true" >expect &&
+	git config --file=.git/sequencer/opts --get-all options.signoff >actual &&
+	test_cmp expect actual &&
+	echo "recursive" >expect &&
+	git config --file=.git/sequencer/opts --get-all options.strategy >actual &&
+	test_cmp expect actual &&
+	cat >expect <<-\EOF &&
+	patience
+	ours
+	EOF
+	git config --file=.git/sequencer/opts --get-all options.strategy-option >actual &&
+	test_cmp expect actual &&
+	echo "false" >expect &&
+	git config --file=.git/sequencer/opts --get-all options.edit >actual &&
 	test_cmp expect actual
 '
 
@@ -170,7 +200,7 @@
 	git commit -a &&
 	test_path_is_missing .git/CHERRY_PICK_HEAD &&
 	test_must_fail git cherry-pick --skip 2>advice &&
-	test_i18ncmp expect advice
+	test_cmp expect advice
 '
 
 test_expect_success 'selectively advise --skip while launching another sequence' '
@@ -182,7 +212,7 @@
 	EOF
 	test_must_fail git cherry-pick picked..yetanotherpick &&
 	test_must_fail git cherry-pick picked..yetanotherpick 2>advice &&
-	test_i18ncmp expect advice &&
+	test_cmp expect advice &&
 	cat >expect <<-EOF &&
 	error: cherry-pick is already in progress
 	hint: try "git cherry-pick (--continue | --abort | --quit)"
@@ -190,7 +220,7 @@
 	EOF
 	git reset --merge &&
 	test_must_fail git cherry-pick picked..yetanotherpick 2>advice &&
-	test_i18ncmp expect advice
+	test_cmp expect advice
 '
 
 test_expect_success 'allow skipping commit but not abort for a new history' '
@@ -204,7 +234,7 @@
 	test_must_fail git cherry-pick anotherpick &&
 	test_must_fail git cherry-pick --abort 2>advice &&
 	git cherry-pick --skip &&
-	test_i18ncmp expect advice
+	test_cmp expect advice
 '
 
 test_expect_success 'allow skipping stopped cherry-pick because of untracked file modifications' '
diff --git a/t/t3512-cherry-pick-submodule.sh b/t/t3512-cherry-pick-submodule.sh
index 822f2d4..c657840 100755
--- a/t/t3512-cherry-pick-submodule.sh
+++ b/t/t3512-cherry-pick-submodule.sh
@@ -8,8 +8,11 @@
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-submodule-update.sh
 
-KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
-KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+if test "$GIT_TEST_MERGE_ALGORITHM" != ort
+then
+	KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
+	KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+fi
 test_submodule_switch "cherry-pick"
 
 test_expect_success 'unrelated submodule/file conflict is ignored' '
diff --git a/t/t3513-revert-submodule.sh b/t/t3513-revert-submodule.sh
index a759f12..8bfe3ed 100755
--- a/t/t3513-revert-submodule.sh
+++ b/t/t3513-revert-submodule.sh
@@ -14,7 +14,7 @@
 git_revert () {
 	git status -su >expect &&
 	ls -1pR * >>expect &&
-	tar cf "$TRASH_DIRECTORY/tmp.tar" * &&
+	"$TAR" cf "$TRASH_DIRECTORY/tmp.tar" * &&
 	may_only_be_test_must_fail "$2" &&
 	$2 git checkout "$1" &&
 	if test -n "$2"
@@ -23,14 +23,17 @@
 	fi &&
 	git revert HEAD &&
 	rm -rf * &&
-	tar xf "$TRASH_DIRECTORY/tmp.tar" &&
+	"$TAR" xf "$TRASH_DIRECTORY/tmp.tar" &&
 	git status -su >actual &&
 	ls -1pR * >>actual &&
 	test_cmp expect actual &&
 	git revert HEAD
 }
 
-KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
+if test "$GIT_TEST_MERGE_ALGORITHM" != ort
+then
+	KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
+fi
 test_submodule_switch_func "git_revert"
 
 test_done
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 7547f11..bb9ef35 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -454,7 +454,7 @@
 	git add .gitmodules &&
 	echo "warning: Could not find section in .gitmodules where path=submod" >expect.err &&
 	git rm submod >actual 2>actual.err &&
-	test_i18ncmp expect.err actual.err &&
+	test_cmp expect.err actual.err &&
 	test_path_is_missing submod &&
 	test_path_is_missing submod/.git &&
 	git status -s -uno >actual &&
@@ -824,7 +824,7 @@
 	echo content1 >foo.txt &&
 	echo content1 >bar.txt &&
 	test_must_fail git rm foo.txt bar.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm files with different staged content without hints' '
@@ -837,7 +837,7 @@
 	echo content2 >foo.txt &&
 	echo content2 >bar.txt &&
 	test_must_fail git -c advice.rmhints=false rm foo.txt bar.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm file with local modification' '
@@ -849,7 +849,7 @@
 	git commit -m "testing rm 3" &&
 	echo content3 >foo.txt &&
 	test_must_fail git rm foo.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm file with local modification without hints' '
@@ -859,7 +859,7 @@
 	EOF
 	echo content4 >bar.txt &&
 	test_must_fail git -c advice.rmhints=false rm bar.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm file with changes in the index' '
@@ -872,7 +872,7 @@
 	echo content5 >foo.txt &&
 	git add foo.txt &&
 	test_must_fail git rm foo.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm file with changes in the index without hints' '
@@ -881,7 +881,7 @@
 	    foo.txt
 	EOF
 	test_must_fail git -c advice.rmhints=false rm foo.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm files with two different errors' '
@@ -900,7 +900,7 @@
 	echo content6 >bar1.txt &&
 	git add bar1.txt &&
 	test_must_fail git rm bar1.txt foo1.txt 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'rm empty string should fail' '
diff --git a/t/t3602-rm-sparse-checkout.sh b/t/t3602-rm-sparse-checkout.sh
new file mode 100755
index 0000000..e9e9a15
--- /dev/null
+++ b/t/t3602-rm-sparse-checkout.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+test_description='git rm in sparse checked out working trees'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' "
+	mkdir -p sub/dir &&
+	touch a b c sub/d sub/dir/e &&
+	git add -A &&
+	git commit -m files &&
+
+	cat >sparse_error_header <<-EOF &&
+	The following pathspecs didn't match any eligible path, but they do match index
+	entries outside the current sparse checkout:
+	EOF
+
+	cat >sparse_hint <<-EOF &&
+	hint: Disable or modify the sparsity rules if you intend to update such entries.
+	hint: Disable this message with \"git config advice.updateSparsePath false\"
+	EOF
+
+	echo b | cat sparse_error_header - >sparse_entry_b_error &&
+	cat sparse_entry_b_error sparse_hint >b_error_and_hint
+"
+
+for opt in "" -f --dry-run
+do
+	test_expect_success "rm${opt:+ $opt} does not remove sparse entries" '
+		git sparse-checkout set a &&
+		test_must_fail git rm $opt b 2>stderr &&
+		test_cmp b_error_and_hint stderr &&
+		git ls-files --error-unmatch b
+	'
+done
+
+test_expect_success 'recursive rm does not remove sparse entries' '
+	git reset --hard &&
+	git sparse-checkout set sub/dir &&
+	git rm -r sub &&
+	git status --porcelain -uno >actual &&
+	echo "D  sub/dir/e" >expected &&
+	test_cmp expected actual
+'
+
+test_expect_success 'rm obeys advice.updateSparsePath' '
+	git reset --hard &&
+	git sparse-checkout set a &&
+	test_must_fail git -c advice.updateSparsePath=false rm b 2>stderr &&
+	test_cmp sparse_entry_b_error stderr
+'
+
+test_expect_success 'do not advice about sparse entries when they do not match the pathspec' '
+	git reset --hard &&
+	git sparse-checkout set a &&
+	test_must_fail git rm nonexistent 2>stderr &&
+	grep "fatal: pathspec .nonexistent. did not match any files" stderr &&
+	! grep -F -f sparse_error_header stderr
+'
+
+test_expect_success 'do not warn about sparse entries when pathspec matches dense entries' '
+	git reset --hard &&
+	git sparse-checkout set a &&
+	git rm "[ba]" 2>stderr &&
+	test_must_be_empty stderr &&
+	git ls-files --error-unmatch b &&
+	test_must_fail git ls-files --error-unmatch a
+'
+
+test_expect_success 'do not warn about sparse entries with --ignore-unmatch' '
+	git reset --hard &&
+	git sparse-checkout set a &&
+	git rm --ignore-unmatch b 2>stderr &&
+	test_must_be_empty stderr &&
+	git ls-files --error-unmatch b
+'
+
+test_done
diff --git a/t/t3700-add.sh b/t/t3700-add.sh
index b7d4ba6..4086e1e 100755
--- a/t/t3700-add.sh
+++ b/t/t3700-add.sh
@@ -196,6 +196,12 @@
 	grep baz actual
 '
 
+test_expect_success 'git add --refresh correctly reports no match error' "
+	echo \"fatal: pathspec ':(icase)nonexistent' did not match any files\" >expect &&
+	test_must_fail git add --refresh ':(icase)nonexistent' 2>actual &&
+	test_cmp expect actual
+"
+
 test_expect_success POSIXPERM,SANITY 'git add should fail atomically upon an unreadable file' '
 	git reset --hard &&
 	date >foo1 &&
@@ -304,7 +310,7 @@
 	error: '"'empty/'"' does not have a commit checked out
 	fatal: adding files failed
 	EOF
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'git add --dry-run of existing changed file' "
@@ -320,7 +326,7 @@
 
 test_expect_success 'git add --dry-run of an existing file output' "
 	echo \"fatal: pathspec 'ignored-file' did not match any files\" >expect &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 "
 
 cat >expect.err <<\EOF
@@ -339,8 +345,12 @@
 '
 
 test_expect_success 'git add --dry-run --ignore-missing of non-existing file output' '
-	test_i18ncmp expect.out actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.out actual.out &&
+	test_cmp expect.err actual.err
+'
+
+test_expect_success 'git add --dry-run --interactive should fail' '
+	test_must_fail git add --dry-run --interactive
 '
 
 test_expect_success 'git add empty string should fail' '
@@ -386,6 +396,36 @@
 	! test -x foo4
 '
 
+test_expect_success 'git add --chmod fails with non regular files (but updates the other paths)' '
+	git reset --hard &&
+	test_ln_s_add foo foo3 &&
+	touch foo4 &&
+	test_must_fail git add --chmod=+x foo3 foo4 2>stderr &&
+	test_i18ngrep "cannot chmod +x .foo3." stderr &&
+	test_mode_in_index 120000 foo3 &&
+	test_mode_in_index 100755 foo4
+'
+
+test_expect_success 'git add --chmod honors --dry-run' '
+	git reset --hard &&
+	echo foo >foo4 &&
+	git add foo4 &&
+	git add --chmod=+x --dry-run foo4 &&
+	test_mode_in_index 100644 foo4
+'
+
+test_expect_success 'git add --chmod --dry-run reports error for non regular files' '
+	git reset --hard &&
+	test_ln_s_add foo foo4 &&
+	test_must_fail git add --chmod=+x --dry-run foo4 2>stderr &&
+	test_i18ngrep "cannot chmod +x .foo4." stderr
+'
+
+test_expect_success 'git add --chmod --dry-run reports error for unmatched pathspec' '
+	test_must_fail git add --chmod=+x --dry-run nonexistent 2>stderr &&
+	test_i18ngrep "pathspec .nonexistent. did not match any files" stderr
+'
+
 test_expect_success 'no file status change if no pathspec is given' '
 	>foo5 &&
 	>foo6 &&
@@ -409,11 +449,17 @@
 '
 
 test_expect_success 'all statuses changed in folder if . is given' '
-	rm -fr empty &&
-	git add --chmod=+x . &&
-	test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 &&
-	git add --chmod=-x . &&
-	test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0
+	git init repo &&
+	(
+		cd repo &&
+		mkdir -p sub/dir &&
+		touch x y z sub/a sub/dir/b &&
+		git add -A &&
+		git add --chmod=+x . &&
+		test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 &&
+		git add --chmod=-x . &&
+		test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0
+	)
 '
 
 test_expect_success CASE_INSENSITIVE_FS 'path is case-insensitive' '
diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
index b2f9099..2077146 100755
--- a/t/t3701-add-interactive.sh
+++ b/t/t3701-add-interactive.sh
@@ -370,7 +370,7 @@
 '
 
 # Test splitting the first patch, then adding both
-test_expect_success C_LOCALE_OUTPUT 'add first line works' '
+test_expect_success 'add first line works' '
 	git commit -am "clear local changes" &&
 	git apply patch &&
 	printf "%s\n" s y y | git add -p file 2>error |
@@ -974,7 +974,7 @@
 	EOF
 	test_write_lines h | force_color git add -i >actual.colored &&
 	test_decode_color <actual.colored >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_done
diff --git a/t/t3705-add-sparse-checkout.sh b/t/t3705-add-sparse-checkout.sh
new file mode 100755
index 0000000..2b1fd0d
--- /dev/null
+++ b/t/t3705-add-sparse-checkout.sh
@@ -0,0 +1,155 @@
+#!/bin/sh
+
+test_description='git add in sparse checked out working trees'
+
+. ./test-lib.sh
+
+SPARSE_ENTRY_BLOB=""
+
+# Optionally take a printf format string to write to the sparse_entry file
+setup_sparse_entry () {
+	# 'sparse_entry' might already be in the index with the skip-worktree
+	# bit set. Remove it so that the subsequent git add can update it.
+	git update-index --force-remove sparse_entry &&
+	if test $# -eq 1
+	then
+		printf "$1" >sparse_entry
+	else
+		>sparse_entry
+	fi &&
+	git add sparse_entry &&
+	git update-index --skip-worktree sparse_entry &&
+	SPARSE_ENTRY_BLOB=$(git rev-parse :sparse_entry)
+}
+
+test_sparse_entry_unchanged () {
+	echo "100644 $SPARSE_ENTRY_BLOB 0	sparse_entry" >expected &&
+	git ls-files --stage sparse_entry >actual &&
+	test_cmp expected actual
+}
+
+setup_gitignore () {
+	test_when_finished rm -f .gitignore &&
+	cat >.gitignore <<-EOF
+	*
+	!/sparse_entry
+	EOF
+}
+
+test_expect_success 'setup' "
+	cat >sparse_error_header <<-EOF &&
+	The following pathspecs didn't match any eligible path, but they do match index
+	entries outside the current sparse checkout:
+	EOF
+
+	cat >sparse_hint <<-EOF &&
+	hint: Disable or modify the sparsity rules if you intend to update such entries.
+	hint: Disable this message with \"git config advice.updateSparsePath false\"
+	EOF
+
+	echo sparse_entry | cat sparse_error_header - >sparse_entry_error &&
+	cat sparse_entry_error sparse_hint >error_and_hint
+"
+
+test_expect_success 'git add does not remove sparse entries' '
+	setup_sparse_entry &&
+	rm sparse_entry &&
+	test_must_fail git add sparse_entry 2>stderr &&
+	test_cmp error_and_hint stderr &&
+	test_sparse_entry_unchanged
+'
+
+test_expect_success 'git add -A does not remove sparse entries' '
+	setup_sparse_entry &&
+	rm sparse_entry &&
+	setup_gitignore &&
+	git add -A 2>stderr &&
+	test_must_be_empty stderr &&
+	test_sparse_entry_unchanged
+'
+
+test_expect_success 'git add . does not remove sparse entries' '
+	setup_sparse_entry &&
+	rm sparse_entry &&
+	setup_gitignore &&
+	test_must_fail git add . 2>stderr &&
+
+	cat sparse_error_header >expect &&
+	echo . >>expect &&
+	cat sparse_hint >>expect &&
+
+	test_cmp expect stderr &&
+	test_sparse_entry_unchanged
+'
+
+for opt in "" -f -u --ignore-removal --dry-run
+do
+	test_expect_success "git add${opt:+ $opt} does not update sparse entries" '
+		setup_sparse_entry &&
+		echo modified >sparse_entry &&
+		test_must_fail git add $opt sparse_entry 2>stderr &&
+		test_cmp error_and_hint stderr &&
+		test_sparse_entry_unchanged
+	'
+done
+
+test_expect_success 'git add --refresh does not update sparse entries' '
+	setup_sparse_entry &&
+	git ls-files --debug sparse_entry | grep mtime >before &&
+	test-tool chmtime -60 sparse_entry &&
+	test_must_fail git add --refresh sparse_entry 2>stderr &&
+	test_cmp error_and_hint stderr &&
+	git ls-files --debug sparse_entry | grep mtime >after &&
+	test_cmp before after
+'
+
+test_expect_success 'git add --chmod does not update sparse entries' '
+	setup_sparse_entry &&
+	test_must_fail git add --chmod=+x sparse_entry 2>stderr &&
+	test_cmp error_and_hint stderr &&
+	test_sparse_entry_unchanged &&
+	! test -x sparse_entry
+'
+
+test_expect_success 'git add --renormalize does not update sparse entries' '
+	test_config core.autocrlf false &&
+	setup_sparse_entry "LINEONE\r\nLINETWO\r\n" &&
+	echo "sparse_entry text=auto" >.gitattributes &&
+	test_must_fail git add --renormalize sparse_entry 2>stderr &&
+	test_cmp error_and_hint stderr &&
+	test_sparse_entry_unchanged
+'
+
+test_expect_success 'git add --dry-run --ignore-missing warn on sparse path' '
+	setup_sparse_entry &&
+	rm sparse_entry &&
+	test_must_fail git add --dry-run --ignore-missing sparse_entry 2>stderr &&
+	test_cmp error_and_hint stderr &&
+	test_sparse_entry_unchanged
+'
+
+test_expect_success 'do not advice about sparse entries when they do not match the pathspec' '
+	setup_sparse_entry &&
+	test_must_fail git add nonexistent 2>stderr &&
+	grep "fatal: pathspec .nonexistent. did not match any files" stderr &&
+	! grep -F -f sparse_error_header stderr
+'
+
+test_expect_success 'do not warn when pathspec matches dense entries' '
+	setup_sparse_entry &&
+	echo modified >sparse_entry &&
+	>dense_entry &&
+	git add "*_entry" 2>stderr &&
+	test_must_be_empty stderr &&
+	test_sparse_entry_unchanged &&
+	git ls-files --error-unmatch dense_entry
+'
+
+test_expect_success 'add obeys advice.updateSparsePath' '
+	setup_sparse_entry &&
+	test_must_fail git -c advice.updateSparsePath=false add sparse_entry 2>stderr &&
+	test_cmp sparse_entry_error stderr
+
+'
+
+test_done
diff --git a/t/t3800-mktag.sh b/t/t3800-mktag.sh
index 86bfeb2..0544d58 100755
--- a/t/t3800-mktag.sh
+++ b/t/t3800-mktag.sh
@@ -12,17 +12,93 @@
 # given in the expect.pat file.
 
 check_verify_failure () {
-	test_expect_success "$1" "
-		test_must_fail env GIT_TEST_GETTEXT_POISON=false \
-			git mktag <tag.sig 2>message &&
-		grep '$2' message &&
-		if test '$3' != '--no-strict'
+	subject=$1 &&
+	message=$2 &&
+	shift 2 &&
+
+	no_strict= &&
+	fsck_obj_ok= &&
+	no_strict= &&
+	while test $# != 0
+	do
+		case "$1" in
+		--no-strict)
+			no_strict=yes
+			;;
+		--fsck-obj-ok)
+			fsck_obj_ok=yes
+			;;
+		esac &&
+		shift
+	done &&
+
+	test_expect_success "fail with [--[no-]strict]: $subject" '
+		test_must_fail git mktag <tag.sig 2>err &&
+		if test -z "$no_strict"
 		then
-			test_must_fail env GIT_TEST_GETTEXT_POISON=false \
-				git mktag --no-strict <tag.sig 2>message.no-strict &&
-			grep '$2' message.no-strict
+			test_must_fail git mktag <tag.sig 2>err2 &&
+			test_cmp err err2
+		else
+			git mktag --no-strict <tag.sig
 		fi
-	"
+	'
+
+	test_expect_success "setup: $subject" '
+		tag_ref=refs/tags/bad_tag &&
+
+		# Reset any leftover state from the last $subject
+		rm -rf bad-tag &&
+
+		git init --bare bad-tag &&
+		bad_tag=$(git -C bad-tag hash-object -t tag -w --stdin --literally <tag.sig)
+	'
+
+	test_expect_success "hash-object & fsck unreachable: $subject" '
+		if test -n "$fsck_obj_ok"
+		then
+			git -C bad-tag fsck
+		else
+			test_must_fail git -C bad-tag fsck
+		fi
+	'
+
+	test_expect_success "update-ref & fsck reachable: $subject" '
+		# Make sure the earlier test created it for us
+		git rev-parse "$bad_tag" &&
+
+		# The update-ref of the bad content will fail, do it
+		# anyway to see if it segfaults
+		test_might_fail git -C bad-tag update-ref "$tag_ref" "$bad_tag" &&
+
+		# Manually create the broken, we cannot do it with
+		# update-ref
+		echo "$bad_tag" >"bad-tag/$tag_ref" &&
+
+		# Unlike fsck-ing unreachable content above, this
+		# will always fail.
+		test_must_fail git -C bad-tag fsck
+	'
+
+	test_expect_success "for-each-ref: $subject" '
+		# Make sure the earlier test created it for us
+		git rev-parse "$bad_tag" &&
+
+		echo "$bad_tag" >"bad-tag/$tag_ref" &&
+
+		printf "%s tag\t%s\n" "$bad_tag" "$tag_ref" >expected &&
+		git -C bad-tag for-each-ref "$tag_ref" >actual &&
+		test_cmp expected actual &&
+
+		test_must_fail git -C bad-tag for-each-ref --format="%(*objectname)"
+	'
+
+	test_expect_success "fast-export & fast-import: $subject" '
+		# Make sure the earlier test created it for us
+		git rev-parse "$bad_tag" &&
+
+		test_must_fail git -C bad-tag fast-export --all &&
+		test_must_fail git -C bad-tag fast-export "$bad_tag"
+	'
 }
 
 test_expect_mktag_success() {
@@ -169,7 +245,8 @@
 EOF
 
 check_verify_failure 'verify object (hash/type) check -- correct type, nonexisting object' \
-	'^fatal: could not read tagged object'
+	'^fatal: could not read tagged object' \
+	--fsck-obj-ok
 
 cat >tag.sig <<EOF
 object $head
@@ -202,7 +279,8 @@
 EOF
 
 check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \
-	'^fatal: object.*tagged as.*tree.*but is.*commit'
+	'^fatal: object.*tagged as.*tree.*but is.*commit' \
+	--fsck-obj-ok
 
 ############################################################
 #  9.5. verify object (hash/type) check -- replacement
@@ -231,7 +309,8 @@
 EOF
 
 check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \
-	'^fatal: object.*tagged as.*tree.*but is.*blob'
+	'^fatal: object.*tagged as.*tree.*but is.*blob' \
+	--fsck-obj-ok
 
 ############################################################
 # 10. verify tag-name check
@@ -245,7 +324,9 @@
 EOF
 
 check_verify_failure 'verify tag-name check' \
-	'^error:.* badTagName:' '--no-strict'
+	'^error:.* badTagName:' \
+	--no-strict \
+	--fsck-obj-ok
 
 ############################################################
 # 11. tagger line label check #1
@@ -259,7 +340,9 @@
 EOF
 
 check_verify_failure '"tagger" line label check #1' \
-	'^error:.* missingTaggerEntry:' '--no-strict'
+	'^error:.* missingTaggerEntry:' \
+	--no-strict \
+	--fsck-obj-ok
 
 ############################################################
 # 12. tagger line label check #2
@@ -274,7 +357,9 @@
 EOF
 
 check_verify_failure '"tagger" line label check #2' \
-	'^error:.* missingTaggerEntry:' '--no-strict'
+	'^error:.* missingTaggerEntry:' \
+	--no-strict \
+	--fsck-obj-ok
 
 ############################################################
 # 13. allow missing tag author name like fsck
@@ -303,7 +388,9 @@
 EOF
 
 check_verify_failure 'disallow malformed tagger' \
-	'^error:.* badEmail:' '--no-strict'
+	'^error:.* badEmail:' \
+	--no-strict \
+	--fsck-obj-ok
 
 ############################################################
 # 15. allow empty tag email
@@ -427,7 +514,9 @@
 EOF
 
 check_verify_failure 'detect invalid header entry' \
-	'^error:.* extraHeaderEntry:' '--no-strict'
+	'^error:.* extraHeaderEntry:' \
+	--no-strict \
+	--fsck-obj-ok
 
 test_expect_success 'invalid header entry config & fsck' '
 	test_must_fail git mktag <tag.sig &&
@@ -443,11 +532,9 @@
 	git -c fsck.extraHeaderEntry=ignore mktag --no-strict <tag.sig &&
 
 	git fsck &&
-	env GIT_TEST_GETTEXT_POISON=false \
-		git -c fsck.extraHeaderEntry=warn fsck 2>err &&
+	git -c fsck.extraHeaderEntry=warn fsck 2>err &&
 	grep "warning .*extraHeaderEntry:" err &&
-	test_must_fail env GIT_TEST_GETTEXT_POISON=false \
-		git -c fsck.extraHeaderEntry=error 2>err fsck &&
+	test_must_fail git -c fsck.extraHeaderEntry=error 2>err fsck &&
 	grep "error .* extraHeaderEntry:" err
 '
 
diff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh
index d277a9f..bfab245 100755
--- a/t/t3900-i18n-commit.sh
+++ b/t/t3900-i18n-commit.sh
@@ -226,10 +226,6 @@
 		git rev-list HEAD >actual &&
 		test_line_count = 3 actual &&
 		iconv -f $old -t UTF-8 "$TEST_DIRECTORY"/t3900/$msg >expect &&
-		if test $flag = squash; then
-			subject="$(head -1 expect)" &&
-			printf "\nsquash! %s\n" "$subject" >>expect
-		fi &&
 		git cat-file commit HEAD^ >raw &&
 		(sed "1,/^$/d" raw | iconv -f $new -t utf-8) >actual &&
 		test_cmp expect actual
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 84b039e..873aa56 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -564,7 +564,7 @@
 	 1 file changed, 1 insertion(+)
 	EOF
 	git stash show ${STASH_ID} >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'stash show - stashes on stack, stash-like argument' '
@@ -792,7 +792,7 @@
 		git stash apply
 	) |
 	sed -e 1d >actual && # drop "Saved..."
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<EOF
@@ -859,7 +859,7 @@
 	git stash
 '
 
-test_expect_success 'stash list implies --first-parent -m' '
+test_expect_success 'stash list -p shows simple diff' '
 	cat >expect <<-EOF &&
 	stash@{0}
 
@@ -1114,7 +1114,7 @@
 	git stash push -p foo >actual &&
 	echo "No local changes to save" >expect &&
 	git reset --hard HEAD~ &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'push <pathspec>: show no changes when there are none' '
@@ -1124,7 +1124,7 @@
 	git stash push foo >actual &&
 	echo "No local changes to save" >expect &&
 	git reset --hard HEAD~ &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'push: <pathspec> not in the repository errors out' '
diff --git a/t/t3905-stash-include-untracked.sh b/t/t3905-stash-include-untracked.sh
index b26a97a..dd2cdcc 100755
--- a/t/t3905-stash-include-untracked.sh
+++ b/t/t3905-stash-include-untracked.sh
@@ -288,7 +288,7 @@
 test_expect_success 'stash -u -- <non-existent> shows no changes when there are none' '
 	git stash push -u -- non-existent >actual &&
 	echo "No local changes to save" >expect &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'stash -u with globs' '
@@ -297,4 +297,129 @@
 	test_path_is_missing untracked.txt
 '
 
+test_expect_success 'stash show --include-untracked shows untracked files' '
+	git reset --hard &&
+	git clean -xf &&
+	>untracked &&
+	>tracked &&
+	git add tracked &&
+	empty_blob_oid=$(git rev-parse --short :tracked) &&
+	git stash -u &&
+
+	cat >expect <<-EOF &&
+	 tracked   | 0
+	 untracked | 0
+	 2 files changed, 0 insertions(+), 0 deletions(-)
+	EOF
+	git stash show --include-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show -u >actual &&
+	test_cmp expect actual &&
+	git stash show --no-include-untracked --include-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show --only-untracked --include-untracked >actual &&
+	test_cmp expect actual &&
+	git -c stash.showIncludeUntracked=true stash show >actual &&
+	test_cmp expect actual &&
+
+	cat >expect <<-EOF &&
+	diff --git a/tracked b/tracked
+	new file mode 100644
+	index 0000000..$empty_blob_oid
+	diff --git a/untracked b/untracked
+	new file mode 100644
+	index 0000000..$empty_blob_oid
+	EOF
+	git stash show -p --include-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show --include-untracked -p >actual &&
+	test_cmp expect actual &&
+	git -c stash.showIncludeUntracked=true stash show -p >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'stash show --only-untracked only shows untracked files' '
+	git reset --hard &&
+	git clean -xf &&
+	>untracked &&
+	>tracked &&
+	git add tracked &&
+	empty_blob_oid=$(git rev-parse --short :tracked) &&
+	git stash -u &&
+
+	cat >expect <<-EOF &&
+	 untracked | 0
+	 1 file changed, 0 insertions(+), 0 deletions(-)
+	EOF
+	git stash show --only-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show --no-include-untracked --only-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show --include-untracked --only-untracked >actual &&
+	test_cmp expect actual &&
+
+	cat >expect <<-EOF &&
+	diff --git a/untracked b/untracked
+	new file mode 100644
+	index 0000000..$empty_blob_oid
+	EOF
+	git stash show -p --only-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show --only-untracked -p >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'stash show --no-include-untracked cancels --{include,only}-untracked' '
+	git reset --hard &&
+	git clean -xf &&
+	>untracked &&
+	>tracked &&
+	git add tracked &&
+	git stash -u &&
+
+	cat >expect <<-EOF &&
+	 tracked | 0
+	 1 file changed, 0 insertions(+), 0 deletions(-)
+	EOF
+	git stash show --only-untracked --no-include-untracked >actual &&
+	test_cmp expect actual &&
+	git stash show --include-untracked --no-include-untracked >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'stash show --include-untracked errors on duplicate files' '
+	git reset --hard &&
+	git clean -xf &&
+	>tracked &&
+	git add tracked &&
+	tree=$(git write-tree) &&
+	i_commit=$(git commit-tree -p HEAD -m "index on any-branch" "$tree") &&
+	test_when_finished "rm -f untracked_index" &&
+	u_commit=$(
+		GIT_INDEX_FILE="untracked_index" &&
+		export GIT_INDEX_FILE &&
+		git update-index --add tracked &&
+		u_tree=$(git write-tree) &&
+		git commit-tree -m "untracked files on any-branch" "$u_tree"
+	) &&
+	w_commit=$(git commit-tree -p HEAD -p "$i_commit" -p "$u_commit" -m "WIP on any-branch" "$tree") &&
+	test_must_fail git stash show --include-untracked "$w_commit" 2>err &&
+	test_i18ngrep "worktree and untracked commit have duplicate entries: tracked" err
+'
+
+test_expect_success 'stash show --{include,only}-untracked on stashes without untracked entries' '
+	git reset --hard &&
+	git clean -xf &&
+	>tracked &&
+	git add tracked &&
+	git stash &&
+
+	git stash show >expect &&
+	git stash show --include-untracked >actual &&
+	test_cmp expect actual &&
+
+	git stash show --only-untracked >actual &&
+	test_must_be_empty actual
+'
+
 test_done
diff --git a/t/t3920-crlf-messages.sh b/t/t3920-crlf-messages.sh
index 70ddce3..a8ad546 100755
--- a/t/t3920-crlf-messages.sh
+++ b/t/t3920-crlf-messages.sh
@@ -64,7 +64,7 @@
 	while test -n "${atoms}"
 	do
 		set ${atoms} && atom=$1 && shift && atoms="$*" &&
-		set ${files} &&	file=$1 && shift && files="$*" &&
+		set ${files} && file=$1 && shift && files="$*" &&
 		test_expect_success "${command}: --format='%${atom}' works with messages using CRLF" "
 			rm -f expect &&
 			for ref in ${LIB_CRLF_BRANCHES}
diff --git a/t/t4001-diff-rename.sh b/t/t4001-diff-rename.sh
index 2f97007..68f2ebc 100755
--- a/t/t4001-diff-rename.sh
+++ b/t/t4001-diff-rename.sh
@@ -262,4 +262,28 @@
 	grep "myotherfile.*myfile" actual
 '
 
+test_expect_success 'basename similarity vs best similarity' '
+	mkdir subdir &&
+	test_write_lines line1 line2 line3 line4 line5 \
+			 line6 line7 line8 line9 line10 >subdir/file.txt &&
+	git add subdir/file.txt &&
+	git commit -m "base txt" &&
+
+	git rm subdir/file.txt &&
+	test_write_lines line1 line2 line3 line4 line5 \
+			  line6 line7 line8 >file.txt &&
+	test_write_lines line1 line2 line3 line4 line5 \
+			  line6 line7 line8 line9 >file.md &&
+	git add file.txt file.md &&
+	git commit -a -m "rename" &&
+	git diff-tree -r -M --name-status HEAD^ HEAD >actual &&
+	# subdir/file.txt is 88% similar to file.md, 78% similar to file.txt,
+	# but since same basenames are checked first...
+	cat >expected <<-\EOF &&
+	A	file.md
+	R078	subdir/file.txt	file.txt
+	EOF
+	test_cmp expected actual
+'
+
 test_done
diff --git a/t/t4006-diff-mode.sh b/t/t4006-diff-mode.sh
index 03489af..6cdee2a 100755
--- a/t/t4006-diff-mode.sh
+++ b/t/t4006-diff-mode.sh
@@ -26,10 +26,8 @@
 '
 
 test_expect_success 'prepare binary file' '
-	git commit -m rezrov &&
-	printf "\00\01\02\03\04\05\06" >binbin &&
-	git add binbin &&
-	git commit -m binbin
+	git commit -m one &&
+	test_commit --printf two binbin "\00\01\02\03\04\05\06"
 '
 
 test_expect_success '--stat output after text chmod' '
@@ -39,13 +37,13 @@
 	 1 file changed, 0 insertions(+), 0 deletions(-)
 	EOF
 	git diff HEAD --stat >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success '--shortstat output after text chmod' '
 	tail -n 1 <expect >expect.short &&
 	git diff HEAD --shortstat >actual &&
-	test_i18ncmp expect.short actual
+	test_cmp expect.short actual
 '
 
 test_expect_success '--stat output after binary chmod' '
@@ -56,13 +54,13 @@
 	 2 files changed, 0 insertions(+), 0 deletions(-)
 	EOF
 	git diff HEAD --stat >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success '--shortstat output after binary chmod' '
 	tail -n 1 <expect >expect.short &&
 	git diff HEAD --shortstat >actual &&
-	test_i18ncmp expect.short actual
+	test_cmp expect.short actual
 '
 
 test_done
diff --git a/t/t4012-diff-binary.sh b/t/t4012-diff-binary.sh
index 6579c81..33ff588 100755
--- a/t/t4012-diff-binary.sh
+++ b/t/t4012-diff-binary.sh
@@ -34,19 +34,19 @@
 test_expect_success 'apply --stat output for binary file change' '
 	git diff >diff &&
 	git apply --stat --summary <diff >current &&
-	test_i18ncmp expected current
+	test_cmp expected current
 '
 
 test_expect_success 'diff --shortstat output for binary file change' '
 	tail -n 1 expected >expect &&
 	git diff --shortstat >current &&
-	test_i18ncmp expect current
+	test_cmp expect current
 '
 
 test_expect_success 'diff --shortstat output for binary file change only' '
 	echo " 1 file changed, 0 insertions(+), 0 deletions(-)" >expected &&
 	git diff --shortstat -- b >current &&
-	test_i18ncmp expected current
+	test_cmp expected current
 '
 
 test_expect_success 'apply --numstat notices binary file change' '
@@ -63,7 +63,7 @@
 
 # apply needs to be able to skip the binary material correctly
 # in order to report the line number of a corrupt patch.
-test_expect_success C_LOCALE_OUTPUT 'apply detecting corrupt patch correctly' '
+test_expect_success 'apply detecting corrupt patch correctly' '
 	git diff >output &&
 	sed -e "s/-CIT/xCIT/" <output >broken &&
 	test_must_fail git apply --stat --summary broken 2>detected &&
@@ -73,7 +73,7 @@
 	test "$detected" = xCIT
 '
 
-test_expect_success C_LOCALE_OUTPUT 'apply detecting corrupt patch correctly' '
+test_expect_success 'apply detecting corrupt patch correctly' '
 	git diff --binary | sed -e "s/-CIT/xCIT/" >broken &&
 	test_must_fail git apply --stat --summary broken 2>detected &&
 	detected=$(cat detected) &&
diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh
index fcc30d8..7fadc98 100755
--- a/t/t4013-diff-various.sh
+++ b/t/t4013-diff-various.sh
@@ -222,7 +222,7 @@
 			process_diffs "$expect" >expect &&
 			case $cmd in
 			*format-patch* | *-stat*)
-				test_i18ncmp expect actual;;
+				test_cmp expect actual;;
 			*)
 				test_cmp expect actual;;
 			esac &&
@@ -293,6 +293,7 @@
 diff-tree --summary initial mode
 
 diff-tree master
+diff-tree -m master
 diff-tree -p master
 diff-tree -p -m master
 diff-tree -c master
@@ -337,6 +338,8 @@
 log -m -p master
 log --cc -m -p master
 log -c -m -p master
+log -m --raw master
+log -m --stat master
 log -SF master
 log -S F master
 log -SF -p master
@@ -452,6 +455,58 @@
 diff-tree -R --stat --compact-summary initial mode
 EOF
 
+test_expect_success 'log -m matches log -m -p' '
+	git log -m -p master >result &&
+	process_diffs result >expected &&
+	git log -m >result &&
+	process_diffs result >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'log --diff-merges=on matches --diff-merges=separate' '
+	git log -p --diff-merges=separate master >result &&
+	process_diffs result >expected &&
+	git log -p --diff-merges=on master >result &&
+	process_diffs result >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'deny wrong log.diffMerges config' '
+	test_config log.diffMerges wrong-value &&
+	test_expect_code 128 git log
+'
+
+test_expect_success 'git config log.diffMerges first-parent' '
+	git log -p --diff-merges=first-parent master >result &&
+	process_diffs result >expected &&
+	test_config log.diffMerges first-parent &&
+	git log -p --diff-merges=on master >result &&
+	process_diffs result >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'git config log.diffMerges first-parent vs -m' '
+	git log -p --diff-merges=first-parent master >result &&
+	process_diffs result >expected &&
+	test_config log.diffMerges first-parent &&
+	git log -p -m master >result &&
+	process_diffs result >actual &&
+	test_cmp expected actual
+'
+
+# -m in "git diff-index" means "match missing", that differs
+# from its meaning in "git diff". Let's check it in diff-index.
+# The line in the output for removed file should disappear when
+# we provide -m in diff-index.
+test_expect_success 'git diff-index -m' '
+	rm -f file1 &&
+	git diff-index HEAD >without-m &&
+	lines_count=$(wc -l <without-m) &&
+	git diff-index -m HEAD >with-m &&
+	git restore file1 &&
+	test_line_count = $((lines_count - 1)) with-m
+'
+
 test_expect_success 'log -S requires an argument' '
 	test_must_fail git log -S
 '
diff --git a/t/t4013/diff.diff-tree_-m_master b/t/t4013/diff.diff-tree_-m_master
new file mode 100644
index 0000000..6d0a220
--- /dev/null
+++ b/t/t4013/diff.diff-tree_-m_master
@@ -0,0 +1,11 @@
+$ git diff-tree -m master
+59d314ad6f356dd08601a4cd5e530381da3e3c64
+:040000 040000 65f5c9dd60ce3b2b3324b618ac7accf8d912c113 0564e026437809817a64fff393079714b6dd4628 M	dir
+:100644 100644 b414108e81e5091fe0974a1858b4d0d22b107f70 10a8a9f3657f91a156b9f0184ed79a20adef9f7f M	file0
+59d314ad6f356dd08601a4cd5e530381da3e3c64
+:040000 040000 f977ed46ae6873c1c30ab878e15a4accedc3618b 0564e026437809817a64fff393079714b6dd4628 M	dir
+:100644 100644 f4615da674c09df322d6ba8d6b21ecfb1b1ba510 10a8a9f3657f91a156b9f0184ed79a20adef9f7f M	file0
+:000000 100644 0000000000000000000000000000000000000000 b1e67221afe8461efd244b487afca22d46b95eb8 A	file1
+:100644 000000 01e79c32a8c99c557f0757da7cb6d65b3414466d 0000000000000000000000000000000000000000 D	file2
+:100644 000000 7289e35bff32727c08dda207511bec138fdb9ea5 0000000000000000000000000000000000000000 D	file3
+$
diff --git a/t/t4013/diff.log_-m_--raw_master b/t/t4013/diff.log_-m_--raw_master
new file mode 100644
index 0000000..cd2ecc4
--- /dev/null
+++ b/t/t4013/diff.log_-m_--raw_master
@@ -0,0 +1,61 @@
+$ git log -m --raw master
+commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (from 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0)
+Merge: 9a6d494 c7a2ab9
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:04:00 2006 +0000
+
+    Merge branch 'side'
+
+:100644 100644 cead32e... 992913c... M	dir/sub
+:100644 100644 b414108... 10a8a9f... M	file0
+
+commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (from c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a)
+Merge: 9a6d494 c7a2ab9
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:04:00 2006 +0000
+
+    Merge branch 'side'
+
+:100644 100644 7289e35... 992913c... M	dir/sub
+:100644 100644 f4615da... 10a8a9f... M	file0
+:000000 100644 0000000... b1e6722... A	file1
+:100644 000000 01e79c3... 0000000... D	file2
+:100644 000000 7289e35... 0000000... D	file3
+
+commit c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:03:00 2006 +0000
+
+    Side
+
+:100644 100644 35d242b... 7289e35... M	dir/sub
+:100644 100644 01e79c3... f4615da... M	file0
+:000000 100644 0000000... 7289e35... A	file3
+
+commit 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:02:00 2006 +0000
+
+    Third
+
+:100644 100644 8422d40... cead32e... M	dir/sub
+:000000 100644 0000000... b1e6722... A	file1
+
+commit 1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:01:00 2006 +0000
+
+    Second
+    
+    This is the second commit.
+
+:100644 100644 35d242b... 8422d40... M	dir/sub
+:100644 100644 01e79c3... b414108... M	file0
+:100644 000000 01e79c3... 0000000... D	file2
+
+commit 444ac553ac7612cc88969031b02b3767fb8a353a
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:00:00 2006 +0000
+
+    Initial
+$
diff --git a/t/t4013/diff.log_-m_--stat_master b/t/t4013/diff.log_-m_--stat_master
new file mode 100644
index 0000000..c7db084
--- /dev/null
+++ b/t/t4013/diff.log_-m_--stat_master
@@ -0,0 +1,66 @@
+$ git log -m --stat master
+commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (from 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0)
+Merge: 9a6d494 c7a2ab9
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:04:00 2006 +0000
+
+    Merge branch 'side'
+
+ dir/sub | 2 ++
+ file0   | 3 +++
+ 2 files changed, 5 insertions(+)
+
+commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (from c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a)
+Merge: 9a6d494 c7a2ab9
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:04:00 2006 +0000
+
+    Merge branch 'side'
+
+ dir/sub | 4 ++++
+ file0   | 3 +++
+ file1   | 3 +++
+ file2   | 3 ---
+ file3   | 4 ----
+ 5 files changed, 10 insertions(+), 7 deletions(-)
+
+commit c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:03:00 2006 +0000
+
+    Side
+
+ dir/sub | 2 ++
+ file0   | 3 +++
+ file3   | 4 ++++
+ 3 files changed, 9 insertions(+)
+
+commit 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:02:00 2006 +0000
+
+    Third
+
+ dir/sub | 2 ++
+ file1   | 3 +++
+ 2 files changed, 5 insertions(+)
+
+commit 1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:01:00 2006 +0000
+
+    Second
+    
+    This is the second commit.
+
+ dir/sub | 2 ++
+ file0   | 3 +++
+ file2   | 3 ---
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 444ac553ac7612cc88969031b02b3767fb8a353a
+Author: A U Thor <author@example.com>
+Date:   Mon Jun 26 00:00:00 2006 +0000
+
+    Initial
+$
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 66630c8..712d4b5 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -386,6 +386,30 @@
 	! grep -v "^Subject: \[PATCH v4 [0-3]/3\] " subjects
 '
 
+test_expect_success 'reroll count (-v) with a fractional number' '
+	rm -fr patches &&
+	git format-patch -o patches --cover-letter -v4.4 main..side >list &&
+	! grep -v "^patches/v4.4-000[0-3]-" list &&
+	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
+	! grep -v "^Subject: \[PATCH v4.4 [0-3]/3\] " subjects
+'
+
+test_expect_success 'reroll (-v) count with a non number' '
+	rm -fr patches &&
+	git format-patch -o patches --cover-letter -v4rev2 main..side >list &&
+	! grep -v "^patches/v4rev2-000[0-3]-" list &&
+	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
+	! grep -v "^Subject: \[PATCH v4rev2 [0-3]/3\] " subjects
+'
+
+test_expect_success 'reroll (-v) count with a non-pathname character' '
+	rm -fr patches &&
+	git format-patch -o patches --cover-letter -v4---..././../--1/.2//  main..side >list &&
+	! grep -v "patches/v4-\.-\.-\.-1-\.2-000[0-3]-" list &&
+	sed -n -e "/^Subject: /p" $(cat list) >subjects &&
+	! grep -v "^Subject: \[PATCH v4---\.\.\./\./\.\./--1/\.2// [0-3]/3\] " subjects
+'
+
 check_threading () {
 	expect="$1" &&
 	shift &&
@@ -888,11 +912,11 @@
 
 test_expect_success 'options no longer allowed for format-patch' '
 	test_must_fail git format-patch --name-only 2>output &&
-	test_i18ncmp expect.name-only output &&
+	test_cmp expect.name-only output &&
 	test_must_fail git format-patch --name-status 2>output &&
-	test_i18ncmp expect.name-status output &&
+	test_cmp expect.name-status output &&
 	test_must_fail git format-patch --check 2>output &&
-	test_i18ncmp expect.check output
+	test_cmp expect.check output
 '
 
 test_expect_success 'format-patch --numstat should produce a patch' '
@@ -2255,6 +2279,16 @@
 	test_i18ngrep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch
 '
 
+test_expect_success 'interdiff: reroll-count with a non-integer' '
+	git format-patch --cover-letter --interdiff=boop~2 -v2.2 -1 boop &&
+	test_i18ngrep "^Interdiff:$" v2.2-0000-cover-letter.patch
+'
+
+test_expect_success 'interdiff: reroll-count with a integer' '
+	git format-patch --cover-letter --interdiff=boop~2 -v2 -1 boop &&
+	test_i18ngrep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch
+'
+
 test_expect_success 'interdiff: solo-patch' '
 	cat >expect <<-\EOF &&
 	  +fleep
diff --git a/t/t4016-diff-quote.sh b/t/t4016-diff-quote.sh
index 9c48e5c..876271d 100755
--- a/t/t4016-diff-quote.sh
+++ b/t/t4016-diff-quote.sh
@@ -82,7 +82,7 @@
 	 7 files changed, 0 insertions(+), 0 deletions(-)
 	EOF
 	git diff --stat -M HEAD >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_done
diff --git a/t/t4018-diff-funcname.sh b/t/t4018-diff-funcname.sh
index 9675bc1..740696c 100755
--- a/t/t4018-diff-funcname.sh
+++ b/t/t4018-diff-funcname.sh
@@ -25,33 +25,26 @@
 	echo B >B.java
 '
 
+test_expect_success 'setup: test-tool userdiff' '
+	# Make sure additions to builtin_drivers are sorted
+	test_when_finished "rm builtin-drivers.sorted" &&
+	test-tool userdiff list-builtin-drivers >builtin-drivers &&
+	test_file_not_empty builtin-drivers &&
+	sort <builtin-drivers >builtin-drivers.sorted &&
+	test_cmp builtin-drivers.sorted builtin-drivers &&
+
+	# Ditto, but "custom" requires the .git directory and config
+	# to be setup and read.
+	test_when_finished "rm custom-drivers.sorted" &&
+	test-tool userdiff list-custom-drivers >custom-drivers &&
+	test_file_not_empty custom-drivers &&
+	sort <custom-drivers >custom-drivers.sorted &&
+	test_cmp custom-drivers.sorted custom-drivers
+'
+
 diffpatterns="
-	ada
-	bash
-	bibtex
-	cpp
-	csharp
-	css
-	dts
-	elixir
-	fortran
-	fountain
-	golang
-	html
-	java
-	markdown
-	matlab
-	objc
-	pascal
-	perl
-	php
-	python
-	ruby
-	rust
-	tex
-	custom1
-	custom2
-	custom3
+	$(cat builtin-drivers)
+	$(cat custom-drivers)
 "
 
 for p in $diffpatterns
@@ -101,13 +94,7 @@
 # check each individual file
 for i in $(git ls-files)
 do
-	if grep broken "$i" >/dev/null 2>&1
-	then
-		result=failure
-	else
-		result=success
-	fi
-	test_expect_$result "hunk header: $i" "
+	test_expect_success "hunk header: $i" "
 		git diff -U1 $i >actual &&
 		grep '@@ .* @@.*RIGHT' actual
 	"
diff --git a/t/t4018/README b/t/t4018/README
index 283e01cc..2d25b2b 100644
--- a/t/t4018/README
+++ b/t/t4018/README
@@ -7,9 +7,6 @@
 The text that must appear in the hunk header must contain the word
 "right", but in all upper-case, like in the title above.
 
-To mark a test case that highlights a malfunction, insert the word
-BROKEN in all lower-case somewhere in the file.
-
 This text is a bit twisted and out of order, but it is itself a
 test case for the default hunk header pattern. Know what you are doing
 if you change it.
diff --git a/t/t4018/scheme-class b/t/t4018/scheme-class
new file mode 100644
index 0000000..e5e07b4
--- /dev/null
+++ b/t/t4018/scheme-class
@@ -0,0 +1,7 @@
+(define book-class%
+  (class* () object% RIGHT
+    (field (pages 5))
+    (field (ChangeMe 5))
+    (define/public (letters)
+      (* pages 500))
+    (super-new)))
diff --git a/t/t4018/scheme-def b/t/t4018/scheme-def
new file mode 100644
index 0000000..1e2673d
--- /dev/null
+++ b/t/t4018/scheme-def
@@ -0,0 +1,4 @@
+(def (some-func x y z) RIGHT
+  (let ((a x)
+        (b y))
+        (ChangeMe a b)))
diff --git a/t/t4018/scheme-def-variant b/t/t4018/scheme-def-variant
new file mode 100644
index 0000000..d857a61
--- /dev/null
+++ b/t/t4018/scheme-def-variant
@@ -0,0 +1,4 @@
+(defmethod {print point} RIGHT
+  (lambda (self)
+    (with ((point x y) self)
+      (printf "{ChangeMe x:~a y:~a}~n" x y))))
diff --git a/t/t4018/scheme-define-slash-public b/t/t4018/scheme-define-slash-public
new file mode 100644
index 0000000..39a93a1
--- /dev/null
+++ b/t/t4018/scheme-define-slash-public
@@ -0,0 +1,7 @@
+(define bar-class%
+  (class object%
+    (field (info 5))
+    (define/public (foo) RIGHT
+      (+ info 42)
+      (* info ChangeMe))
+    (super-new)))
diff --git a/t/t4018/scheme-define-syntax b/t/t4018/scheme-define-syntax
new file mode 100644
index 0000000..7d5e99e
--- /dev/null
+++ b/t/t4018/scheme-define-syntax
@@ -0,0 +1,8 @@
+(define-syntax define-test-suite RIGHT
+  (syntax-rules ()
+    ((_ suite-name (name test) ChangeMe ...)
+     (define suite-name
+       (let ((tests
+              `((name . ,test) ...)))
+         (lambda ()
+           (run-suite 'suite-name tests)))))))
diff --git a/t/t4018/scheme-define-variant b/t/t4018/scheme-define-variant
new file mode 100644
index 0000000..9117088
--- /dev/null
+++ b/t/t4018/scheme-define-variant
@@ -0,0 +1,4 @@
+(define* (some-func x y z) RIGHT
+  (let ((a x)
+        (b y))
+        (ChangeMe a b)))
diff --git a/t/t4018/scheme-library b/t/t4018/scheme-library
new file mode 100644
index 0000000..82ea3df
--- /dev/null
+++ b/t/t4018/scheme-library
@@ -0,0 +1,11 @@
+(library (my-helpers id-stuff) RIGHT
+  (export find-dup)
+  (import (ChangeMe))
+  (define (find-dup l)
+    (and (pair? l)
+         (let loop ((rest (cdr l)))
+           (cond
+            [(null? rest) (find-dup (cdr l))]
+            [(bound-identifier=? (car l) (car rest))
+             (car rest)]
+            [else (loop (cdr rest))])))))
diff --git a/t/t4018/scheme-local-define b/t/t4018/scheme-local-define
new file mode 100644
index 0000000..bc6d8ae
--- /dev/null
+++ b/t/t4018/scheme-local-define
@@ -0,0 +1,4 @@
+(define (higher-order)
+  (define local-function RIGHT
+    (lambda (x)
+     (car "this is" "ChangeMe"))))
diff --git a/t/t4018/scheme-module b/t/t4018/scheme-module
new file mode 100644
index 0000000..edfae0e
--- /dev/null
+++ b/t/t4018/scheme-module
@@ -0,0 +1,6 @@
+(module A RIGHT
+  (export with-display-exception)
+  (extern (display-exception display-exception ChangeMe))
+  (def (with-display-exception thunk)
+    (with-catch (lambda (e) (display-exception e (current-error-port)) e)
+      thunk)))
diff --git a/t/t4018/scheme-top-level-define b/t/t4018/scheme-top-level-define
new file mode 100644
index 0000000..624743c
--- /dev/null
+++ b/t/t4018/scheme-top-level-define
@@ -0,0 +1,4 @@
+(define (some-func x y z) RIGHT
+  (let ((a x)
+        (b y))
+        (ChangeMe a b)))
diff --git a/t/t4018/scheme-user-defined-define b/t/t4018/scheme-user-defined-define
new file mode 100644
index 0000000..35fe7cc
--- /dev/null
+++ b/t/t4018/scheme-user-defined-define
@@ -0,0 +1,6 @@
+(define-test-suite record\ case-tests RIGHT
+  (record-case-1 (lambda (fail)
+                   (let ((a (make-foo 1 2)))
+                     (record-case a
+                       ((bar x) (ChangeMe))
+                       ((foo a b) (+ a b)))))))
diff --git a/t/t4030-diff-textconv.sh b/t/t4030-diff-textconv.sh
index 4cb9f0e..a39a626 100755
--- a/t/t4030-diff-textconv.sh
+++ b/t/t4030-diff-textconv.sh
@@ -26,12 +26,8 @@
 chmod +x hexdump
 
 test_expect_success 'setup binary file with history' '
-	printf "\\0\\n" >file &&
-	git add file &&
-	git commit -m one &&
-	printf "\\01\\n" >>file &&
-	git add file &&
-	git commit -m two
+	test_commit --printf one file "\\0\\n" &&
+	test_commit --printf --append two file "\\01\\n"
 '
 
 test_expect_success 'file is considered binary by porcelain' '
@@ -139,7 +135,7 @@
 test_expect_success 'diffstat does not run textconv' '
 	echo file diff=fail >.gitattributes &&
 	git diff --stat HEAD^ HEAD >actual &&
-	test_i18ncmp expect.stat actual &&
+	test_cmp expect.stat actual &&
 
 	head -n1 <expect.stat >expect.line1 &&
 	head -n1 <actual >actual.line1 &&
diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh
index 56f1e62..561c582 100755
--- a/t/t4034-diff-words.sh
+++ b/t/t4034-diff-words.sh
@@ -184,6 +184,11 @@
 	word_diff --color-words="[a-z]+"
 '
 
+test_expect_success 'word diff with zero length matches' '
+	cp expect.letter-runs-are-words expect &&
+	word_diff --color-words="[a-z${LF}]*"
+'
+
 test_expect_success 'set up a diff driver' '
 	git config diff.testdriver.wordRegex "[^[:space:]]" &&
 	cat <<-\EOF >.gitattributes
@@ -325,6 +330,7 @@
 test_language_driver php
 test_language_driver python
 test_language_driver ruby
+test_language_driver scheme
 test_language_driver tex
 
 test_expect_success 'word-diff with diff.sbe' '
diff --git a/t/t4034/scheme/expect b/t/t4034/scheme/expect
new file mode 100644
index 0000000..496cd5d
--- /dev/null
+++ b/t/t4034/scheme/expect
@@ -0,0 +1,11 @@
+<BOLD>diff --git a/pre b/post<RESET>
+<BOLD>index 74b6605..63b6ac4 100644<RESET>
+<BOLD>--- a/pre<RESET>
+<BOLD>+++ b/post<RESET>
+<CYAN>@@ -1,6 +1,6 @@<RESET>
+(define (<RED>myfunc a b<RESET><GREEN>my-func first second<RESET>)
+  ; This is a <RED>really<RESET><GREEN>(moderately)<RESET> cool function.
+  (<RED>this\place<RESET><GREEN>that\place<RESET> (+ 3 4))
+  (define <RED>some-text<RESET><GREEN>|a greeting|<RESET> "hello")
+  (let ((c (<RED>+ a b<RESET><GREEN>add1 first<RESET>)))
+    (format "one more than the total is %d" (<RED>add1<RESET><GREEN>+<RESET> c <GREEN>second<RESET>))))
diff --git a/t/t4034/scheme/post b/t/t4034/scheme/post
new file mode 100644
index 0000000..63b6ac4
--- /dev/null
+++ b/t/t4034/scheme/post
@@ -0,0 +1,6 @@
+(define (my-func first second)
+  ; This is a (moderately) cool function.
+  (that\place (+ 3 4))
+  (define |a greeting| "hello")
+  (let ((c (add1 first)))
+    (format "one more than the total is %d" (+ c second))))
diff --git a/t/t4034/scheme/pre b/t/t4034/scheme/pre
new file mode 100644
index 0000000..74b6605
--- /dev/null
+++ b/t/t4034/scheme/pre
@@ -0,0 +1,6 @@
+(define (myfunc a b)
+  ; This is a really cool function.
+  (this\place (+ 3 4))
+  (define some-text "hello")
+  (let ((c (+ a b)))
+    (format "one more than the total is %d" (add1 c))))
diff --git a/t/t4045-diff-relative.sh b/t/t4045-diff-relative.sh
index 7be1de7..61ba5f7 100755
--- a/t/t4045-diff-relative.sh
+++ b/t/t4045-diff-relative.sh
@@ -61,7 +61,7 @@
 	EOF
 	test_expect_success "--stat $*" "
 		git -C '$dir' diff --stat $* HEAD^ >actual &&
-		test_i18ncmp expected actual
+		test_cmp expected actual
 	"
 }
 
diff --git a/t/t4049-diff-stat-count.sh b/t/t4049-diff-stat-count.sh
index a341217..53061b1 100755
--- a/t/t4049-diff-stat-count.sh
+++ b/t/t4049-diff-stat-count.sh
@@ -25,7 +25,7 @@
 	 4 files changed, 2 insertions(+)
 	EOF
 	git diff --stat --stat-count=2 HEAD >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'binary changes do not count in lines' '
@@ -40,7 +40,7 @@
 	 3 files changed, 2 insertions(+)
 	EOF
 	git diff --stat --stat-count=2 >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'exclude unmerged entries from total file count' '
@@ -62,7 +62,7 @@
 	 3 files changed, 3 insertions(+)
 	EOF
 	git diff --stat --stat-count=2 >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_done
diff --git a/t/t4053-diff-no-index.sh b/t/t4053-diff-no-index.sh
index 0168946..3feadf0 100755
--- a/t/t4053-diff-no-index.sh
+++ b/t/t4053-diff-no-index.sh
@@ -16,6 +16,11 @@
 	echo 1 >non/git/b
 '
 
+test_expect_success 'git diff --no-index --exit-code' '
+	git diff --no-index --exit-code a/1 non/git/a &&
+	test_expect_code 1 git diff --no-index --exit-code a/1 a/2
+'
+
 test_expect_success 'git diff --no-index directories' '
 	test_expect_code 1 git diff --no-index a b >cnt &&
 	test_line_count = 14 cnt
@@ -144,4 +149,59 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'diff --no-index normalizes mode: no changes' '
+	echo foo >x &&
+	cp x y &&
+	git diff --no-index x y >out &&
+	test_must_be_empty out
+'
+
+test_expect_success POSIXPERM 'diff --no-index normalizes mode: chmod +x' '
+	chmod +x y &&
+	cat >expected <<-\EOF &&
+	diff --git a/x b/y
+	old mode 100644
+	new mode 100755
+	EOF
+	test_expect_code 1 git diff --no-index x y >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success POSIXPERM 'diff --no-index normalizes: mode not like git mode' '
+	chmod 666 x &&
+	chmod 777 y &&
+	cat >expected <<-\EOF &&
+	diff --git a/x b/y
+	old mode 100644
+	new mode 100755
+	EOF
+	test_expect_code 1 git diff --no-index x y >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success POSIXPERM,SYMLINKS 'diff --no-index normalizes: mode not like git mode (symlink)' '
+	ln -s y z &&
+	X_OID=$(git hash-object --stdin <x) &&
+	Z_OID=$(printf y | git hash-object --stdin) &&
+	cat >expected <<-EOF &&
+	diff --git a/x b/x
+	deleted file mode 100644
+	index $X_OID..$ZERO_OID
+	--- a/x
+	+++ /dev/null
+	@@ -1 +0,0 @@
+	-foo
+	diff --git a/z b/z
+	new file mode 120000
+	index $ZERO_OID..$Z_OID
+	--- /dev/null
+	+++ b/z
+	@@ -0,0 +1 @@
+	+y
+	\ No newline at end of file
+	EOF
+	test_expect_code 1 git -c core.abbrev=no diff --no-index x z >actual &&
+	test_cmp expected actual
+'
+
 test_done
diff --git a/t/t4056-diff-order.sh b/t/t4056-diff-order.sh
index 63ea714..aec1d9d 100755
--- a/t/t4056-diff-order.sh
+++ b/t/t4056-diff-order.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-test_description='diff order'
+test_description='diff order & rotate'
 
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
@@ -127,4 +127,74 @@
 	'
 done
 
+### rotate and skip
+
+test_expect_success 'rotate and skip setup' '
+	>sample1.t &&
+	>sample2.t &&
+	>sample3.t &&
+	>sample4.t &&
+	git add sample[1234].t &&
+	git commit -m "added" sample[1234].t &&
+	echo modified >>sample1.t &&
+	echo modified >>sample2.t &&
+	echo modified >>sample4.t &&
+	git commit -m "updated" sample[1234].t
+'
+
+test_expect_success 'diff --rotate-to' '
+	git diff --rotate-to=sample2.t --name-only HEAD^ >actual &&
+	test_write_lines sample2.t sample4.t sample1.t >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success 'diff --skip-to' '
+	git diff --skip-to=sample2.t --name-only HEAD^ >actual &&
+	test_write_lines sample2.t sample4.t >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success 'diff --rotate/skip-to error condition' '
+	test_must_fail git diff --rotate-to=sample3.t HEAD^ &&
+	test_must_fail git diff --skip-to=sample3.t HEAD^
+'
+
+test_expect_success 'log --rotate-to' '
+	git log --rotate-to=sample3.t --raw HEAD~2.. >raw &&
+	# just distill the commit header and paths
+	sed -n -e "s/^commit.*/commit/p" \
+	       -e "/^:/s/^.*	//p" raw >actual &&
+
+	cat >expect <<-\EOF &&
+	commit
+	sample4.t
+	sample1.t
+	sample2.t
+	commit
+	sample3.t
+	sample4.t
+	sample1.t
+	sample2.t
+	EOF
+
+	test_cmp expect actual
+'
+
+test_expect_success 'log --skip-to' '
+	git log --skip-to=sample3.t --raw HEAD~2.. >raw &&
+	# just distill the commit header and paths
+	sed -n -e "s/^commit.*/commit/p" \
+	       -e "/^:/s/^.*	//p" raw >actual &&
+
+	cat >expect <<-\EOF &&
+	commit
+	sample4.t
+	commit
+	sample3.t
+	sample4.t
+	EOF
+
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t4100-apply-stat.sh b/t/t4100-apply-stat.sh
index 744b8e5..9b433de 100755
--- a/t/t4100-apply-stat.sh
+++ b/t/t4100-apply-stat.sh
@@ -17,13 +17,13 @@
 	test_expect_success "$title" '
 		git apply --stat --summary \
 			<"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
-		test_i18ncmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
+		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
 	'
 
 	test_expect_success "$title with recount" '
 		sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
 		git apply --recount --stat --summary >current &&
-		test_i18ncmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
+		test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
 	'
 done <<\EOF
 rename
diff --git a/t/t4108-apply-threeway.sh b/t/t4108-apply-threeway.sh
index d62db3f..65147ef 100755
--- a/t/t4108-apply-threeway.sh
+++ b/t/t4108-apply-threeway.sh
@@ -160,4 +160,74 @@
 	test_cmp three.save three
 '
 
+test_expect_success 'apply -3 with ambiguous repeating file' '
+	git reset --hard &&
+	test_write_lines 1 2 1 2 1 2 1 2 1 2 1 >one_two_repeat &&
+	git add one_two_repeat &&
+	git commit -m "init one" &&
+	test_write_lines 1 2 1 2 1 2 1 2 one 2 1 >one_two_repeat &&
+	git commit -a -m "change one" &&
+
+	git diff HEAD~ >Repeat.diff &&
+	git reset --hard HEAD~ &&
+
+	test_write_lines 1 2 1 2 1 2 one 2 1 2 one >one_two_repeat &&
+	git commit -a -m "change surrounding one" &&
+
+	git apply --index --3way Repeat.diff &&
+	test_write_lines 1 2 1 2 1 2 one 2 one 2 one >expect &&
+
+	test_cmp expect one_two_repeat
+'
+
+test_expect_success 'apply with --3way --cached clean apply' '
+	# Merging side should be similar to applying this patch
+	git diff ...side >P.diff &&
+
+	# The corresponding cleanly applied merge
+	git reset --hard &&
+	git checkout main~ &&
+	git merge --no-commit side &&
+	git ls-files -s >expect.ls &&
+
+	# should succeed
+	git reset --hard &&
+	git checkout main~ &&
+	git apply --cached --3way P.diff &&
+	git ls-files -s >actual.ls &&
+	print_sanitized_conflicted_diff >actual.diff &&
+
+	# The cache should resemble the corresponding merge
+	# (both files at stage #0)
+	test_cmp expect.ls actual.ls &&
+	# However the working directory should not change
+	>expect.diff &&
+	test_cmp expect.diff actual.diff
+'
+
+test_expect_success 'apply with --3way --cached and conflicts' '
+	# Merging side should be similar to applying this patch
+	git diff ...side >P.diff &&
+
+	# The corresponding conflicted merge
+	git reset --hard &&
+	git checkout main^0 &&
+	test_must_fail git merge --no-commit side &&
+	git ls-files -s >expect.ls &&
+
+	# should fail to apply
+	git reset --hard &&
+	git checkout main^0 &&
+	test_must_fail git apply --cached --3way P.diff &&
+	git ls-files -s >actual.ls &&
+	print_sanitized_conflicted_diff >actual.diff &&
+
+	# The cache should resemble the corresponding merge
+	# (one file at stage #0, one file at stages #1 #2 #3)
+	test_cmp expect.ls actual.ls &&
+	# However the working directory should not change
+	>expect.diff &&
+	test_cmp expect.diff actual.diff
+'
+
 test_done
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 9998751..2aaaa0d 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -906,7 +906,7 @@
 	test_tick &&
 	test_must_fail git am empty-file 2>actual &&
 	echo Patch format detection failed. >expected &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'am --message-id really adds the message id' '
diff --git a/t/t4153-am-resume-override-opts.sh b/t/t4153-am-resume-override-opts.sh
index 8ea22d1..b7c3861 100755
--- a/t/t4153-am-resume-override-opts.sh
+++ b/t/t4153-am-resume-override-opts.sh
@@ -61,7 +61,7 @@
 	# Applying side2 will be quiet.
 	git am --no-quiet --continue >out &&
 	echo "Applying: side1" >expected &&
-	test_i18ncmp expected out
+	test_cmp expected out
 '
 
 test_expect_success '--signoff overrides --no-signoff' '
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index 350cfa3..9dfead9 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -1834,14 +1834,24 @@
 	test_must_fail git log --graph --no-walk
 '
 
-test_expect_success 'log diagnoses bogus HEAD' '
+test_expect_success 'log on empty repo fails' '
 	git init empty &&
+	test_when_finished "rm -rf empty" &&
 	test_must_fail git -C empty log 2>stderr &&
-	test_i18ngrep does.not.have.any.commits stderr &&
+	test_i18ngrep does.not.have.any.commits stderr
+'
+
+test_expect_success REFFILES 'log diagnoses bogus HEAD hash' '
+	git init empty &&
+	test_when_finished "rm -rf empty" &&
 	echo 1234abcd >empty/.git/refs/heads/main &&
 	test_must_fail git -C empty log 2>stderr &&
-	test_i18ngrep broken stderr &&
-	echo "ref: refs/heads/invalid.lock" >empty/.git/HEAD &&
+	test_i18ngrep broken stderr
+'
+
+test_expect_success 'log diagnoses bogus HEAD symref' '
+	git init empty &&
+	git --git-dir empty/.git symbolic-ref HEAD refs/heads/invalid.lock &&
 	test_must_fail git -C empty log 2>stderr &&
 	test_i18ngrep broken stderr &&
 	test_must_fail git -C empty log --default totally-bogus 2>stderr &&
@@ -1905,6 +1915,20 @@
 	test_must_fail git log --exclude-promisor-objects source-a
 '
 
+test_expect_success 'log --decorate includes all levels of tag annotated tags' '
+	git checkout -b branch &&
+	git commit --allow-empty -m "new commit" &&
+	git tag lightweight HEAD &&
+	git tag -m annotated annotated HEAD &&
+	git tag -m double-0 double-0 HEAD &&
+	git tag -m double-1 double-1 double-0 &&
+	cat >expect <<-\EOF &&
+	HEAD -> branch, tag: lightweight, tag: double-1, tag: double-0, tag: annotated
+	EOF
+	git log -1 --format="%D" >actual &&
+	test_cmp expect actual
+'
+
 test_expect_success 'log --end-of-options' '
        git update-ref refs/heads/--source HEAD &&
        git log --end-of-options --source >actual &&
diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh
index 93caf9a..0b2d21e 100755
--- a/t/t4203-mailmap.sh
+++ b/t/t4203-mailmap.sh
@@ -932,4 +932,35 @@
 	test_cmp expect actual
 '
 
+test_expect_success SYMLINKS 'set up symlink tests' '
+	git commit --allow-empty -m foo --author="Orig <orig@example.com>" &&
+	echo "New <new@example.com> <orig@example.com>" >map &&
+	rm -f .mailmap
+'
+
+test_expect_success SYMLINKS 'symlinks respected in mailmap.file' '
+	test_when_finished "rm symlink" &&
+	ln -s map symlink &&
+	git -c mailmap.file="$(pwd)/symlink" log -1 --format=%aE >actual &&
+	echo "new@example.com" >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success SYMLINKS 'symlinks respected in non-repo shortlog' '
+	git log -1 >input &&
+	test_when_finished "nongit rm .mailmap" &&
+	nongit ln -sf "$TRASH_DIRECTORY/map" .mailmap &&
+	nongit git shortlog -s <input >actual &&
+	echo "     1	New" >expect &&
+	test_cmp expect actual
+'
+
+test_expect_success SYMLINKS 'symlinks not respected in-tree' '
+	test_when_finished "rm .mailmap" &&
+	ln -s map .mailmap &&
+	git log -1 --format=%aE >actual &&
+	echo "orig@example.com" >expect &&
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh
index 749bc14..5865daa 100755
--- a/t/t4205-log-pretty-formats.sh
+++ b/t/t4205-log-pretty-formats.sh
@@ -123,10 +123,10 @@
 	stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
 	printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n" >expected &&
 	git log -z --stat --pretty="format:%s" >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
-test_expect_failure C_LOCALE_OUTPUT 'NUL termination with --stat' '
+test_expect_failure 'NUL termination with --stat' '
 	stat0_part=$(git diff --stat HEAD^ HEAD) &&
 	stat1_part=$(git diff-tree --no-commit-id --stat --root HEAD^) &&
 	printf "add bar\n$stat0_part\n\0$(commit_msg)\n$stat1_part\n0" >expected &&
@@ -525,20 +525,25 @@
 	! grep Q actual
 '
 
-# ISO strict date format
-test_expect_success 'ISO and ISO-strict date formats display the same values' '
-	git log --format=%ai%n%ci |
-	sed -e "s/ /T/; s/ //; s/..\$/:&/" >expected &&
+# --date=[XXX] and corresponding %a[X] %c[X] format equivalency
+test_expect_success '--date=iso-strict %ad%cd is the same as %aI%cI' '
+	git log --format=%ad%n%cd --date=iso-strict >expected &&
 	git log --format=%aI%n%cI >actual &&
 	test_cmp expected actual
 '
 
-test_expect_success 'short date' '
+test_expect_success '--date=short %ad%cd is the same as %as%cs' '
 	git log --format=%ad%n%cd --date=short >expected &&
 	git log --format=%as%n%cs >actual &&
 	test_cmp expected actual
 '
 
+test_expect_success '--date=human %ad%cd is the same as %ah%ch' '
+	git log --format=%ad%n%cd --date=human >expected &&
+	git log --format=%ah%n%ch >actual &&
+	test_cmp expected actual
+'
+
 # get new digests (with no abbreviations)
 test_expect_success 'set up log decoration tests' '
 	head1=$(git rev-parse --verify HEAD~0) &&
@@ -962,4 +967,39 @@
 	test_cmp expect actual
 '
 
+test_expect_success '%(describe) vs git describe' '
+	git log --format="%H" | while read hash
+	do
+		if desc=$(git describe $hash)
+		then
+			: >expect-contains-good
+		else
+			: >expect-contains-bad
+		fi &&
+		echo "$hash $desc"
+	done >expect &&
+	test_path_exists expect-contains-good &&
+	test_path_exists expect-contains-bad &&
+
+	git log --format="%H %(describe)" >actual 2>err &&
+	test_cmp expect actual &&
+	test_must_be_empty err
+'
+
+test_expect_success '%(describe:match=...) vs git describe --match ...' '
+	test_when_finished "git tag -d tag-match" &&
+	git tag -a -m tagged tag-match &&
+	git describe --match "*-match" >expect &&
+	git log -1 --format="%(describe:match=*-match)" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success '%(describe:exclude=...) vs git describe --exclude ...' '
+	test_when_finished "git tag -d tag-exclude" &&
+	git tag -a -m tagged tag-exclude &&
+	git describe --exclude "*-exclude" >expect &&
+	git log -1 --format="%(describe:exclude=*-exclude)" >actual &&
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t4208-log-magic-pathspec.sh b/t/t4208-log-magic-pathspec.sh
index 5e10136..7f0c1dc 100755
--- a/t/t4208-log-magic-pathspec.sh
+++ b/t/t4208-log-magic-pathspec.sh
@@ -31,13 +31,8 @@
 test_expect_success '"git log :/detached -- " should find a commit only in HEAD' '
 	test_when_finished "git checkout main" &&
 	git checkout --detach &&
-	# Must manually call `test_tick` instead of using `test_commit`,
-	# because the latter additionally creates a tag, which would make
-	# the commit reachable not only via HEAD.
-	test_tick &&
-	git commit --allow-empty -m detached &&
-	test_tick &&
-	git commit --allow-empty -m something-else &&
+	test_commit --no-tag detached &&
+	test_commit --no-tag something-else &&
 	git log :/detached --
 '
 
diff --git a/t/t4209-log-pickaxe.sh b/t/t4209-log-pickaxe.sh
index 5d06f5f..75795d0 100755
--- a/t/t4209-log-pickaxe.sh
+++ b/t/t4209-log-pickaxe.sh
@@ -55,6 +55,43 @@
 	git rev-parse --verify HEAD >expect_second
 '
 
+test_expect_success 'usage' '
+	test_expect_code 129 git log -S 2>err &&
+	test_i18ngrep "switch.*requires a value" err &&
+
+	test_expect_code 129 git log -G 2>err &&
+	test_i18ngrep "switch.*requires a value" err &&
+
+	test_expect_code 128 git log -Gregex -Sstring 2>err &&
+	grep "mutually exclusive" err &&
+
+	test_expect_code 128 git log -Gregex --find-object=HEAD 2>err &&
+	grep "mutually exclusive" err &&
+
+	test_expect_code 128 git log -Sstring --find-object=HEAD 2>err &&
+	grep "mutually exclusive" err &&
+
+	test_expect_code 128 git log --pickaxe-all --find-object=HEAD 2>err &&
+	grep "mutually exclusive" err
+'
+
+test_expect_success 'usage: --pickaxe-regex' '
+	test_expect_code 128 git log -Gregex --pickaxe-regex 2>err &&
+	grep "mutually exclusive" err
+'
+
+test_expect_success 'usage: --no-pickaxe-regex' '
+	cat >expect <<-\EOF &&
+	fatal: unrecognized argument: --no-pickaxe-regex
+	EOF
+
+	test_expect_code 128 git log -Sstring --no-pickaxe-regex 2>actual &&
+	test_cmp expect actual &&
+
+	test_expect_code 128 git log -Gstring --no-pickaxe-regex 2>err &&
+	test_cmp expect actual
+'
+
 test_log	expect_initial	--grep initial
 test_log	expect_nomatch	--grep InItial
 test_log_icase	expect_initial	--grep InItial
@@ -106,38 +143,83 @@
 	rm .gitattributes
 '
 
+test_expect_success 'setup log -[GS] plain & regex' '
+	test_create_repo GS-plain &&
+	test_commit -C GS-plain --append A data.txt "a" &&
+	test_commit -C GS-plain --append B data.txt "a a" &&
+	test_commit -C GS-plain --append C data.txt "b" &&
+	test_commit -C GS-plain --append D data.txt "[b]" &&
+	test_commit -C GS-plain E data.txt "" &&
+
+	# We also include E, the deletion commit
+	git -C GS-plain log --grep="[ABE]" >A-to-B-then-E-log &&
+	git -C GS-plain log --grep="[CDE]" >C-to-D-then-E-log &&
+	git -C GS-plain log --grep="[DE]" >D-then-E-log &&
+	git -C GS-plain log >full-log
+'
+
+test_expect_success 'log -G trims diff new/old [-+]' '
+	git -C GS-plain log -G"[+-]a" >log &&
+	test_must_be_empty log &&
+	git -C GS-plain log -G"^a" >log &&
+	test_cmp log A-to-B-then-E-log
+'
+
+test_expect_success 'log -S<pat> is not a regex, but -S<pat> --pickaxe-regex is' '
+	git -C GS-plain log -S"a" >log &&
+	test_cmp log A-to-B-then-E-log &&
+
+	git -C GS-plain log -S"[a]" >log &&
+	test_must_be_empty log &&
+
+	git -C GS-plain log -S"[a]" --pickaxe-regex >log &&
+	test_cmp log A-to-B-then-E-log &&
+
+	git -C GS-plain log -S"[b]" >log &&
+	test_cmp log D-then-E-log &&
+
+	git -C GS-plain log -S"[b]" --pickaxe-regex >log &&
+	test_cmp log C-to-D-then-E-log
+'
+
 test_expect_success 'setup log -[GS] binary & --text' '
-	git checkout --orphan GS-binary-and-text &&
-	git read-tree --empty &&
-	printf "a\na\0a\n" >data.bin &&
-	git add data.bin &&
-	git commit -m "create binary file" data.bin &&
-	printf "a\na\0a\n" >>data.bin &&
-	git commit -m "modify binary file" data.bin &&
-	git rm data.bin &&
-	git commit -m "delete binary file" data.bin &&
-	git log >full-log
+	test_create_repo GS-bin-txt &&
+	test_commit -C GS-bin-txt --printf A data.bin "a\na\0a\n" &&
+	test_commit -C GS-bin-txt --append --printf B data.bin "a\na\0a\n" &&
+	test_commit -C GS-bin-txt C data.bin "" &&
+	git -C GS-bin-txt log >full-log
 '
 
 test_expect_success 'log -G ignores binary files' '
-	git log -Ga >log &&
+	git -C GS-bin-txt log -Ga >log &&
 	test_must_be_empty log
 '
 
 test_expect_success 'log -G looks into binary files with -a' '
-	git log -a -Ga >log &&
+	git -C GS-bin-txt log -a -Ga >log &&
 	test_cmp log full-log
 '
 
 test_expect_success 'log -G looks into binary files with textconv filter' '
-	test_when_finished "rm .gitattributes" &&
-	echo "* diff=bin" >.gitattributes &&
-	git -c diff.bin.textconv=cat log -Ga >log &&
+	test_when_finished "rm GS-bin-txt/.gitattributes" &&
+	(
+		cd GS-bin-txt &&
+		echo "* diff=bin" >.gitattributes &&
+		git -c diff.bin.textconv=cat log -Ga >../log
+	) &&
 	test_cmp log full-log
 '
 
 test_expect_success 'log -S looks into binary files' '
-	git log -Sa >log &&
+	git -C GS-bin-txt log -Sa >log &&
+	test_cmp log full-log
+'
+
+test_expect_success 'log -S --pickaxe-regex looks into binary files' '
+	git -C GS-bin-txt log --pickaxe-regex -Sa >log &&
+	test_cmp log full-log &&
+
+	git -C GS-bin-txt log --pickaxe-regex -S"[a]" >log &&
 	test_cmp log full-log
 '
 
diff --git a/t/t4254-am-corrupt.sh b/t/t4254-am-corrupt.sh
index daf01c3..54be7da 100755
--- a/t/t4254-am-corrupt.sh
+++ b/t/t4254-am-corrupt.sh
@@ -60,7 +60,7 @@
 	test_must_fail git -c advice.amWorkDir=false am bad-patch.diff 2>actual &&
 	echo "error: git diff header lacks filename information (line 4)" >expected &&
 	test_path_is_file f &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success "NUL in commit message's body" '
diff --git a/t/t4258-am-quoted-cr.sh b/t/t4258-am-quoted-cr.sh
new file mode 100755
index 0000000..201915b
--- /dev/null
+++ b/t/t4258-am-quoted-cr.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+test_description='test am --quoted-cr=<action>'
+
+. ./test-lib.sh
+
+DATA="$TEST_DIRECTORY/t4258"
+
+test_expect_success 'setup' '
+	test_write_lines one two three >text &&
+	test_commit one text &&
+	test_write_lines one owt three >text &&
+	test_commit two text
+'
+
+test_expect_success 'am warn if quoted-cr is found' '
+	git reset --hard one &&
+	test_must_fail git am "$DATA/mbox" 2>err &&
+	grep "quoted CRLF detected" err
+'
+
+test_expect_success 'am --quoted-cr=strip' '
+	test_might_fail git am --abort &&
+	git reset --hard one &&
+	git am --quoted-cr=strip "$DATA/mbox" &&
+	git diff --exit-code HEAD two
+'
+
+test_expect_success 'am with config mailinfo.quotedCr=strip' '
+	test_might_fail git am --abort &&
+	git reset --hard one &&
+	test_config mailinfo.quotedCr strip &&
+	git am "$DATA/mbox" &&
+	git diff --exit-code HEAD two
+'
+
+test_done
diff --git a/t/t4258/mbox b/t/t4258/mbox
new file mode 100644
index 0000000..c62819f
--- /dev/null
+++ b/t/t4258/mbox
@@ -0,0 +1,12 @@
+From: A U Thor <mail@example.com>
+To: list@example.org
+Subject: [PATCH v2] sample
+Date: Mon,  3 Aug 2020 22:40:55 +0700
+Message-Id: <msg-id@example.com>
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+
+VGhpcyBpcyBjb21taXQgbWVzc2FnZS4NCi0tLQ0KIHRleHQgfCAyICstDQogMSBmaWxlIGNoYW5n
+ZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pDQoNCmRpZmYgLS1naXQgYS90ZXh0IGIv
+dGV4dA0KaW5kZXggNTYyNmFiZi4uZjcxOWVmZCAxMDA2NDQNCi0tLSBhL3RleHQNCisrKyBiL3Rl
+eHQNCkBAIC0xICsxIEBADQotb25lDQordHdvDQotLSANCjIuMzEuMQoK
diff --git a/t/t5000-tar-tree.sh b/t/t5000-tar-tree.sh
index 7204799..2c88d1c 100755
--- a/t/t5000-tar-tree.sh
+++ b/t/t5000-tar-tree.sh
@@ -111,25 +111,34 @@
 	EOF
 '
 
-test_expect_success \
-    'populate workdir' \
-    'mkdir a &&
-     echo simple textfile >a/a &&
-     ten=0123456789 && hundred=$ten$ten$ten$ten$ten$ten$ten$ten$ten$ten &&
-     echo long filename >a/four$hundred &&
-     mkdir a/bin &&
-     test-tool genrandom "frotz" 500000 >a/bin/sh &&
-     printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 &&
-     printf "A not substituted O" >a/substfile2 &&
-     if test_have_prereq SYMLINKS; then
-	ln -s a a/l1
-     else
-	printf %s a > a/l1
-     fi &&
-     (p=long_path_to_a_file && cd a &&
-      for depth in 1 2 3 4 5; do mkdir $p && cd $p; done &&
-      echo text >file_with_long_path) &&
-     (cd a && find .) | sort >a.lst'
+test_expect_success 'populate workdir' '
+	mkdir a &&
+	echo simple textfile >a/a &&
+	ten=0123456789 &&
+	hundred="$ten$ten$ten$ten$ten$ten$ten$ten$ten$ten" &&
+	echo long filename >"a/four$hundred" &&
+	mkdir a/bin &&
+	test-tool genrandom "frotz" 500000 >a/bin/sh &&
+	printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 &&
+	printf "A not substituted O" >a/substfile2 &&
+	if test_have_prereq SYMLINKS
+	then
+		ln -s a a/l1
+	else
+		printf %s a >a/l1
+	fi &&
+	(
+		p=long_path_to_a_file &&
+		cd a &&
+		for depth in 1 2 3 4 5
+		do
+			mkdir $p &&
+			cd $p
+		done &&
+		echo text >file_with_long_path
+	) &&
+	(cd a && find .) | sort >a.lst
+'
 
 test_expect_success \
     'add ignored file' \
@@ -147,18 +156,18 @@
 		>a/substfile1
 '
 
-test_expect_success \
-    'create bare clone' \
-    'git clone --bare . bare.git &&
-     cp .git/info/attributes bare.git/info/attributes'
+test_expect_success 'create bare clone' '
+	git clone --bare . bare.git &&
+	cp .git/info/attributes bare.git/info/attributes
+'
 
-test_expect_success \
-    'remove ignored file' \
-    'rm a/ignored'
+test_expect_success 'remove ignored file' '
+	rm a/ignored
+'
 
-test_expect_success \
-    'git archive' \
-    'git archive HEAD >b.tar'
+test_expect_success 'git archive' '
+	git archive HEAD >b.tar
+'
 
 check_tar b
 
@@ -194,26 +203,28 @@
 check_added with_untracked2 untracked two/untracked
 
 test_expect_success 'git archive on large files' '
-    test_config core.bigfilethreshold 1 &&
-    git archive HEAD >b3.tar &&
-    test_cmp_bin b.tar b3.tar
+	test_config core.bigfilethreshold 1 &&
+	git archive HEAD >b3.tar &&
+	test_cmp_bin b.tar b3.tar
 '
 
-test_expect_success \
-    'git archive in a bare repo' \
-    '(cd bare.git && git archive HEAD) >b3.tar'
+test_expect_success 'git archive in a bare repo' '
+	git --git-dir bare.git archive HEAD >b3.tar
+'
 
-test_expect_success \
-    'git archive vs. the same in a bare repo' \
-    'test_cmp_bin b.tar b3.tar'
+test_expect_success 'git archive vs. the same in a bare repo' '
+	test_cmp_bin b.tar b3.tar
+'
 
-test_expect_success 'git archive with --output' \
-    'git archive --output=b4.tar HEAD &&
-    test_cmp_bin b.tar b4.tar'
+test_expect_success 'git archive with --output' '
+	git archive --output=b4.tar HEAD &&
+	test_cmp_bin b.tar b4.tar
+'
 
-test_expect_success 'git archive --remote' \
-    'git archive --remote=. HEAD >b5.tar &&
-    test_cmp_bin b.tar b5.tar'
+test_expect_success 'git archive --remote' '
+	git archive --remote=. HEAD >b5.tar &&
+	test_cmp_bin b.tar b5.tar
+'
 
 test_expect_success 'git archive --remote with configured remote' '
 	git config remote.foo.url . &&
@@ -224,18 +235,19 @@
 	test_cmp_bin b.tar b5-nick.tar
 '
 
-test_expect_success \
-    'validate file modification time' \
-    'mkdir extract &&
-     "$TAR" xf b.tar -C extract a/a &&
-     test-tool chmtime --get extract/a/a >b.mtime &&
-     echo "1117231200" >expected.mtime &&
-     test_cmp expected.mtime b.mtime'
+test_expect_success 'validate file modification time' '
+	mkdir extract &&
+	"$TAR" xf b.tar -C extract a/a &&
+	test-tool chmtime --get extract/a/a >b.mtime &&
+	echo "1117231200" >expected.mtime &&
+	test_cmp expected.mtime b.mtime
+'
 
-test_expect_success \
-    'git get-tar-commit-id' \
-    'git get-tar-commit-id <b.tar >b.commitid &&
-     test_cmp .git/$(git symbolic-ref HEAD) b.commitid'
+test_expect_success 'git get-tar-commit-id' '
+	git get-tar-commit-id <b.tar >actual &&
+	git rev-parse HEAD >expect &&
+	test_cmp expect actual
+'
 
 test_expect_success 'git archive with --output, override inferred format' '
 	git archive --format=tar --output=d4.zip HEAD &&
diff --git a/t/t5001-archive-attr.sh b/t/t5001-archive-attr.sh
index e9aa971..712ae52 100755
--- a/t/t5001-archive-attr.sh
+++ b/t/t5001-archive-attr.sh
@@ -128,4 +128,18 @@
 	test_cmp substfile2 archive/substfile2
 '
 
+test_expect_success 'export-subst expands %(describe) once' '
+	echo "\$Format:%(describe)\$" >substfile3 &&
+	echo "\$Format:%(describe)\$" >>substfile3 &&
+	echo "\$Format:%(describe)${LF}%(describe)\$" >substfile4 &&
+	git add substfile[34] &&
+	git commit -m export-subst-describe &&
+	git tag -m export-subst-describe export-subst-describe &&
+	git archive HEAD >archive-describe.tar &&
+	extract_tar_to_dir archive-describe &&
+	desc=$(git describe) &&
+	grep -F "$desc" archive-describe/substfile[34] >substituted &&
+	test_line_count = 1 substituted
+'
+
 test_done
diff --git a/t/t5100-mailinfo.sh b/t/t5100-mailinfo.sh
index 147e616..141b29f 100755
--- a/t/t5100-mailinfo.sh
+++ b/t/t5100-mailinfo.sh
@@ -228,4 +228,44 @@
 	test_cmp expect actual
 '
 
+check_quoted_cr_mail () {
+	mail="$1" && shift &&
+	git mailinfo -u "$@" "$mail.msg" "$mail.patch" \
+		<"$mail" >"$mail.info" 2>"$mail.err" &&
+	test_cmp "$mail-expected.msg" "$mail.msg" &&
+	test_cmp "$mail-expected.patch" "$mail.patch" &&
+	test_cmp "$DATA/quoted-cr-info" "$mail.info"
+}
+
+test_expect_success 'split base64 email with quoted-cr' '
+	mkdir quoted-cr &&
+	git mailsplit -oquoted-cr "$DATA/quoted-cr.mbox" >quoted-cr/last &&
+	test $(cat quoted-cr/last) = 2
+'
+
+test_expect_success 'mailinfo warn CR in base64 encoded email' '
+	sed -e "s/%%$//" -e "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-msg" \
+		>quoted-cr/0001-expected.msg &&
+	sed "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-msg" \
+		>quoted-cr/0002-expected.msg &&
+	sed -e "s/%%$//" -e "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-patch" \
+		>quoted-cr/0001-expected.patch &&
+	sed "s/%%/$(printf \\015)/g" "$DATA/quoted-cr-patch" \
+		>quoted-cr/0002-expected.patch &&
+	check_quoted_cr_mail quoted-cr/0001 &&
+	test_must_be_empty quoted-cr/0001.err &&
+	check_quoted_cr_mail quoted-cr/0002 &&
+	grep "quoted CRLF detected" quoted-cr/0002.err &&
+	check_quoted_cr_mail quoted-cr/0001 --quoted-cr=nowarn &&
+	test_must_be_empty quoted-cr/0001.err &&
+	check_quoted_cr_mail quoted-cr/0002 --quoted-cr=nowarn &&
+	test_must_be_empty quoted-cr/0002.err &&
+	cp quoted-cr/0001-expected.msg quoted-cr/0002-expected.msg &&
+	cp quoted-cr/0001-expected.patch quoted-cr/0002-expected.patch &&
+	check_quoted_cr_mail quoted-cr/0001 --quoted-cr=strip &&
+	test_must_be_empty quoted-cr/0001.err &&
+	check_quoted_cr_mail quoted-cr/0002 --quoted-cr=strip &&
+	test_must_be_empty quoted-cr/0002.err
+'
+
 test_done
diff --git a/t/t5100/quoted-cr-info b/t/t5100/quoted-cr-info
new file mode 100644
index 0000000..dab2228
--- /dev/null
+++ b/t/t5100/quoted-cr-info
@@ -0,0 +1,5 @@
+Author: A U Thor
+Email: mail@example.com
+Subject: sample
+Date: Mon, 3 Aug 2020 22:40:55 +0700
+
diff --git a/t/t5100/quoted-cr-msg b/t/t5100/quoted-cr-msg
new file mode 100644
index 0000000..89b05a0
--- /dev/null
+++ b/t/t5100/quoted-cr-msg
@@ -0,0 +1,2 @@
+On different distro, %%pytest is suffixed with different patterns.%%
+%%
diff --git a/t/t5100/quoted-cr-patch b/t/t5100/quoted-cr-patch
new file mode 100644
index 0000000..65b13ee
--- /dev/null
+++ b/t/t5100/quoted-cr-patch
@@ -0,0 +1,22 @@
+---%%
+ configure | 2 +-%%
+ 1 file changed, 1 insertion(+), 1 deletion(-)%%
+%%
+diff --git a/configure b/configure%%
+index db3538b3..f7c1c095 100755%%
+--- a/configure%%
++++ b/configure%%
+@@ -814,7 +814,7 @@ if [ $have_python3 -eq 1 ]; then%%
+     printf "%%Checking for python3 pytest (>= 3.0)... "%%
+     conf=$(mktemp)%%
+     printf "[pytest]\nminversion=3.0\n" > $conf%%
+-    if pytest-3 -c $conf --version >/dev/null 2>&1; then%%
++    if "$python" -m pytest -c $conf --version >/dev/null 2>&1; then%%
+         printf "Yes.\n"%%
+         have_python3_pytest=1%%
+     else%%
+-- %%
+2.28.0%%
+_______________________________________________
+example mailing list -- list@example.org
+To unsubscribe send an email to list-leave@example.org
diff --git a/t/t5100/quoted-cr.mbox b/t/t5100/quoted-cr.mbox
new file mode 100644
index 0000000..909021b
--- /dev/null
+++ b/t/t5100/quoted-cr.mbox
@@ -0,0 +1,47 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: A U Thor <mail@example.com>
+To: list@example.org
+Subject: [PATCH v2] sample
+Date: Mon,  3 Aug 2020 22:40:55 +0700
+Message-Id: <msg-id@example.com>
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+
+T24gZGlmZmVyZW50IGRpc3RybywgDXB5dGVzdCBpcyBzdWZmaXhlZCB3aXRoIGRpZmZlcmVudCBw
+YXR0ZXJucy4KCi0tLQogY29uZmlndXJlIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0
+aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJl
+CmluZGV4IGRiMzUzOGIzLi5mN2MxYzA5NSAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2Nv
+bmZpZ3VyZQpAQCAtODE0LDcgKzgxNCw3IEBAIGlmIFsgJGhhdmVfcHl0aG9uMyAtZXEgMSBdOyB0
+aGVuCiAgICAgcHJpbnRmICINQ2hlY2tpbmcgZm9yIHB5dGhvbjMgcHl0ZXN0ICg+PSAzLjApLi4u
+ICIKICAgICBjb25mPSQobWt0ZW1wKQogICAgIHByaW50ZiAiW3B5dGVzdF1cbm1pbnZlcnNpb249
+My4wXG4iID4gJGNvbmYKLSAgICBpZiBweXRlc3QtMyAtYyAkY29uZiAtLXZlcnNpb24gPi9kZXYv
+bnVsbCAyPiYxOyB0aGVuCisgICAgaWYgIiRweXRob24iIC1tIHB5dGVzdCAtYyAkY29uZiAtLXZl
+cnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAgIHByaW50ZiAiWWVzLlxuIgogICAg
+ICAgICBoYXZlX3B5dGhvbjNfcHl0ZXN0PTEKICAgICBlbHNlCi0tIAoyLjI4LjAKX19fX19fX19f
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZXhhbXBsZSBtYWlsaW5nIGxp
+c3QgLS0gbGlzdEBleGFtcGxlLm9yZwpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIGxp
+c3QtbGVhdmVAZXhhbXBsZS5vcmcK
+
+From nobody Mon Sep 17 00:00:00 2001
+From: A U Thor <mail@example.com>
+To: list@example.org
+Subject: [PATCH v2] sample
+Date: Mon,  3 Aug 2020 22:40:55 +0700
+Message-Id: <msg-id2@example.com>
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+
+T24gZGlmZmVyZW50IGRpc3RybywgDXB5dGVzdCBpcyBzdWZmaXhlZCB3aXRoIGRpZmZlcmVudCBw
+YXR0ZXJucy4NCg0KLS0tDQogY29uZmlndXJlIHwgMiArLQ0KIDEgZmlsZSBjaGFuZ2VkLCAxIGlu
+c2VydGlvbigrKSwgMSBkZWxldGlvbigtKQ0KDQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29u
+ZmlndXJlDQppbmRleCBkYjM1MzhiMy4uZjdjMWMwOTUgMTAwNzU1DQotLS0gYS9jb25maWd1cmUN
+CisrKyBiL2NvbmZpZ3VyZQ0KQEAgLTgxNCw3ICs4MTQsNyBAQCBpZiBbICRoYXZlX3B5dGhvbjMg
+LWVxIDEgXTsgdGhlbg0KICAgICBwcmludGYgIg1DaGVja2luZyBmb3IgcHl0aG9uMyBweXRlc3Qg
+KD49IDMuMCkuLi4gIg0KICAgICBjb25mPSQobWt0ZW1wKQ0KICAgICBwcmludGYgIltweXRlc3Rd
+XG5taW52ZXJzaW9uPTMuMFxuIiA+ICRjb25mDQotICAgIGlmIHB5dGVzdC0zIC1jICRjb25mIC0t
+dmVyc2lvbiA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCisgICAgaWYgIiRweXRob24iIC1tIHB5dGVz
+dCAtYyAkY29uZiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuDQogICAgICAgICBwcmlu
+dGYgIlllcy5cbiINCiAgICAgICAgIGhhdmVfcHl0aG9uM19weXRlc3Q9MQ0KICAgICBlbHNlDQot
+LSANCjIuMjguMA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
+X18KZXhhbXBsZSBtYWlsaW5nIGxpc3QgLS0gbGlzdEBleGFtcGxlLm9yZwpUbyB1bnN1YnNjcmli
+ZSBzZW5kIGFuIGVtYWlsIHRvIGxpc3QtbGVhdmVAZXhhbXBsZS5vcmcK
diff --git a/t/t5150-request-pull.sh b/t/t5150-request-pull.sh
index db4e15f..cb67bac 100755
--- a/t/t5150-request-pull.sh
+++ b/t/t5150-request-pull.sh
@@ -223,14 +223,14 @@
 		git request-pull initial "$downstream_url" tags/full >../request
 	) &&
 	<request sed -nf fuzz.sed >request.fuzzy &&
-	test_i18ncmp expect request.fuzzy &&
+	test_cmp expect request.fuzzy &&
 
 	(
 		cd local &&
 		git request-pull initial "$downstream_url" tags/full:refs/tags/full
 	) >request &&
 	sed -nf fuzz.sed <request >request.fuzzy &&
-	test_i18ncmp expect request.fuzzy &&
+	test_cmp expect request.fuzzy &&
 
 	(
 		cd local &&
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index 392201c..5c5e53f 100755
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
@@ -8,125 +8,91 @@
 '
 . ./test-lib.sh
 
-TRASH=$(pwd)
+test_expect_success 'setup' '
+	rm -f .git/index* &&
+	perl -e "print \"a\" x 4096;" >a &&
+	perl -e "print \"b\" x 4096;" >b &&
+	perl -e "print \"c\" x 4096;" >c &&
+	test-tool genrandom "seed a" 2097152 >a_big &&
+	test-tool genrandom "seed b" 2097152 >b_big &&
+	git update-index --add a a_big b b_big c &&
+	cat c >d && echo foo >>d && git update-index --add d &&
+	tree=$(git write-tree) &&
+	commit=$(git commit-tree $tree </dev/null) &&
+	{
+		echo $tree &&
+		echo $commit &&
+		git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\)	.*/\\1/"
+	} >obj-list &&
+	{
+		git diff-tree --root -p $commit &&
+		while read object
+		do
+			t=$(git cat-file -t $object) &&
+			git cat-file $t $object || return 1
+		done <obj-list
+	} >expect
+'
 
-test_expect_success \
-    'setup' \
-    'rm -f .git/index* &&
-     perl -e "print \"a\" x 4096;" > a &&
-     perl -e "print \"b\" x 4096;" > b &&
-     perl -e "print \"c\" x 4096;" > c &&
-     test-tool genrandom "seed a" 2097152 > a_big &&
-     test-tool genrandom "seed b" 2097152 > b_big &&
-     git update-index --add a a_big b b_big c &&
-     cat c >d && echo foo >>d && git update-index --add d &&
-     tree=$(git write-tree) &&
-     commit=$(git commit-tree $tree </dev/null) && {
-	 echo $tree &&
-	 echo $commit &&
-	 git ls-tree $tree | sed -e "s/.* \\([0-9a-f]*\\)	.*/\\1/"
-     } >obj-list && {
-	 git diff-tree --root -p $commit &&
-	 while read object
-	 do
-	    t=$(git cat-file -t $object) &&
-	    git cat-file $t $object || return 1
-	 done <obj-list
-     } >expect'
+# usage: check_deltas <stderr_from_pack_objects> <cmp_op> <nr_deltas>
+# e.g.: check_deltas stderr -gt 0
+check_deltas() {
+	deltas=$(perl -lne '/delta (\d+)/ and print $1' "$1") &&
+	shift &&
+	if ! test "$deltas" "$@"
+	then
+		echo >&2 "unexpected number of deltas (compared $delta $*)"
+		return 1
+	fi
+}
 
-test_expect_success \
-    'pack without delta' \
-    'packname_1=$(git pack-objects --window=0 test-1 <obj-list)'
+test_expect_success 'pack without delta' '
+	packname_1=$(git pack-objects --progress --window=0 test-1 \
+			<obj-list 2>stderr) &&
+	check_deltas stderr = 0
+'
 
-test_expect_success \
-    'pack-objects with bogus arguments' \
-    'test_must_fail git pack-objects --window=0 test-1 blah blah <obj-list'
+test_expect_success 'pack-objects with bogus arguments' '
+	test_must_fail git pack-objects --window=0 test-1 blah blah <obj-list
+'
 
-rm -fr .git2
-mkdir .git2
+check_unpack () {
+	test_when_finished "rm -rf git2" &&
+	git init --bare git2 &&
+	git -C git2 unpack-objects -n <"$1".pack &&
+	git -C git2 unpack-objects <"$1".pack &&
+	(cd .git && find objects -type f -print) |
+	while read path
+	do
+		cmp git2/$path .git/$path || {
+			echo $path differs.
+			return 1
+		}
+	done
+}
 
-test_expect_success \
-    'unpack without delta' \
-    "GIT_OBJECT_DIRECTORY=.git2/objects &&
-     export GIT_OBJECT_DIRECTORY &&
-     git init &&
-     git unpack-objects -n <test-1-${packname_1}.pack &&
-     git unpack-objects <test-1-${packname_1}.pack"
+test_expect_success 'unpack without delta' '
+	check_unpack test-1-${packname_1}
+'
 
-unset GIT_OBJECT_DIRECTORY
-cd "$TRASH/.git2"
+test_expect_success 'pack with REF_DELTA' '
+	packname_2=$(git pack-objects --progress test-2 <obj-list 2>stderr) &&
+	check_deltas stderr -gt 0
+'
 
-test_expect_success \
-    'check unpack without delta' \
-    '(cd ../.git && find objects -type f -print) |
-     while read path
-     do
-         cmp $path ../.git/$path || {
-	     echo $path differs.
-	     return 1
-	 }
-     done'
-cd "$TRASH"
+test_expect_success 'unpack with REF_DELTA' '
+	check_unpack test-2-${packname_2}
+'
 
-test_expect_success \
-    'pack with REF_DELTA' \
-    'pwd &&
-     packname_2=$(git pack-objects test-2 <obj-list)'
+test_expect_success 'pack with OFS_DELTA' '
+	packname_3=$(git pack-objects --progress --delta-base-offset test-3 \
+			<obj-list 2>stderr) &&
+	check_deltas stderr -gt 0
+'
 
-rm -fr .git2
-mkdir .git2
-
-test_expect_success \
-    'unpack with REF_DELTA' \
-    'GIT_OBJECT_DIRECTORY=.git2/objects &&
-     export GIT_OBJECT_DIRECTORY &&
-     git init &&
-     git unpack-objects -n <test-2-${packname_2}.pack &&
-     git unpack-objects <test-2-${packname_2}.pack'
-
-unset GIT_OBJECT_DIRECTORY
-cd "$TRASH/.git2"
-test_expect_success \
-    'check unpack with REF_DELTA' \
-    '(cd ../.git && find objects -type f -print) |
-     while read path
-     do
-         cmp $path ../.git/$path || {
-	     echo $path differs.
-	     return 1
-	 }
-     done'
-cd "$TRASH"
-
-test_expect_success \
-    'pack with OFS_DELTA' \
-    'pwd &&
-     packname_3=$(git pack-objects --delta-base-offset test-3 <obj-list)'
-
-rm -fr .git2
-mkdir .git2
-
-test_expect_success \
-    'unpack with OFS_DELTA' \
-    'GIT_OBJECT_DIRECTORY=.git2/objects &&
-     export GIT_OBJECT_DIRECTORY &&
-     git init &&
-     git unpack-objects -n <test-3-${packname_3}.pack &&
-     git unpack-objects <test-3-${packname_3}.pack'
-
-unset GIT_OBJECT_DIRECTORY
-cd "$TRASH/.git2"
-test_expect_success \
-    'check unpack with OFS_DELTA' \
-    '(cd ../.git && find objects -type f -print) |
-     while read path
-     do
-         cmp $path ../.git/$path || {
-	     echo $path differs.
-	     return 1
-	 }
-     done'
-cd "$TRASH"
+test_expect_success 'unpack with OFS_DELTA' '
+	check_unpack test-3-${packname_3}
+'
 
 test_expect_success 'compare delta flavors' '
 	perl -e '\''
@@ -135,55 +101,33 @@
 	'\'' test-2-$packname_2.pack test-3-$packname_3.pack
 '
 
-rm -fr .git2
-mkdir .git2
+check_use_objects () {
+	test_when_finished "rm -rf git2" &&
+	git init --bare git2 &&
+	cp "$1".pack "$1".idx git2/objects/pack &&
+	(
+		cd git2 &&
+		git diff-tree --root -p $commit &&
+		while read object
+		do
+			t=$(git cat-file -t $object) &&
+			git cat-file $t $object || exit 1
+		done
+	) <obj-list >current &&
+	cmp expect current
+}
 
-test_expect_success \
-    'use packed objects' \
-    'GIT_OBJECT_DIRECTORY=.git2/objects &&
-     export GIT_OBJECT_DIRECTORY &&
-     git init &&
-     cp test-1-${packname_1}.pack test-1-${packname_1}.idx .git2/objects/pack && {
-	 git diff-tree --root -p $commit &&
-	 while read object
-	 do
-	    t=$(git cat-file -t $object) &&
-	    git cat-file $t $object || return 1
-	 done <obj-list
-    } >current &&
-    cmp expect current'
+test_expect_success 'use packed objects' '
+	check_use_objects test-1-${packname_1}
+'
 
-test_expect_success \
-    'use packed deltified (REF_DELTA) objects' \
-    'GIT_OBJECT_DIRECTORY=.git2/objects &&
-     export GIT_OBJECT_DIRECTORY &&
-     rm -f .git2/objects/pack/test-* &&
-     cp test-2-${packname_2}.pack test-2-${packname_2}.idx .git2/objects/pack && {
-	 git diff-tree --root -p $commit &&
-	 while read object
-	 do
-	    t=$(git cat-file -t $object) &&
-	    git cat-file $t $object || return 1
-	 done <obj-list
-    } >current &&
-    cmp expect current'
+test_expect_success 'use packed deltified (REF_DELTA) objects' '
+	check_use_objects test-2-${packname_2}
+'
 
-test_expect_success \
-    'use packed deltified (OFS_DELTA) objects' \
-    'GIT_OBJECT_DIRECTORY=.git2/objects &&
-     export GIT_OBJECT_DIRECTORY &&
-     rm -f .git2/objects/pack/test-* &&
-     cp test-3-${packname_3}.pack test-3-${packname_3}.idx .git2/objects/pack && {
-	 git diff-tree --root -p $commit &&
-	 while read object
-	 do
-	    t=$(git cat-file -t $object) &&
-	    git cat-file $t $object || return 1
-	 done <obj-list
-    } >current &&
-    cmp expect current'
-
-unset GIT_OBJECT_DIRECTORY
+test_expect_success 'use packed deltified (OFS_DELTA) objects' '
+	check_use_objects test-3-${packname_3}
+'
 
 test_expect_success 'survive missing objects/pack directory' '
 	(
@@ -427,7 +371,8 @@
 	test_path_is_file foo.idx
 '
 
-test_expect_success !PTHREADS,C_LOCALE_OUTPUT 'index-pack --threads=N or pack.threads=N warns when no pthreads' '
+test_expect_success !PTHREADS,!FAIL_PREREQS \
+	'index-pack --threads=N or pack.threads=N warns when no pthreads' '
 	test_must_fail git index-pack --threads=2 2>err &&
 	grep ^warning: err >warnings &&
 	test_line_count = 1 warnings &&
@@ -445,7 +390,8 @@
 	grep -F "no threads support, ignoring pack.threads" err
 '
 
-test_expect_success !PTHREADS,C_LOCALE_OUTPUT 'pack-objects --threads=N or pack.threads=N warns when no pthreads' '
+test_expect_success !PTHREADS,!FAIL_PREREQS \
+	'pack-objects --threads=N or pack.threads=N warns when no pthreads' '
 	git pack-objects --threads=2 --stdout --all </dev/null >/dev/null 2>err &&
 	grep ^warning: err >warnings &&
 	test_line_count = 1 warnings &&
@@ -532,4 +478,144 @@
 	test_line_count = 1 donelines
 '
 
+test_expect_success 'setup for --stdin-packs tests' '
+	git init stdin-packs &&
+	(
+		cd stdin-packs &&
+
+		test_commit A &&
+		test_commit B &&
+		test_commit C &&
+
+		for id in A B C
+		do
+			git pack-objects .git/objects/pack/pack-$id \
+				--incremental --revs <<-EOF
+			refs/tags/$id
+			EOF
+		done &&
+
+		ls -la .git/objects/pack
+	)
+'
+
+test_expect_success '--stdin-packs with excluded packs' '
+	(
+		cd stdin-packs &&
+
+		PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" &&
+		PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" &&
+		PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" &&
+
+		git pack-objects test --stdin-packs <<-EOF &&
+		$PACK_A
+		^$PACK_B
+		$PACK_C
+		EOF
+
+		(
+			git show-index <$(ls .git/objects/pack/pack-A-*.idx) &&
+			git show-index <$(ls .git/objects/pack/pack-C-*.idx)
+		) >expect.raw &&
+		git show-index <$(ls test-*.idx) >actual.raw &&
+
+		cut -d" " -f2 <expect.raw | sort >expect &&
+		cut -d" " -f2 <actual.raw | sort >actual &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success '--stdin-packs is incompatible with --filter' '
+	(
+		cd stdin-packs &&
+		test_must_fail git pack-objects --stdin-packs --stdout \
+			--filter=blob:none </dev/null 2>err &&
+		test_i18ngrep "cannot use --filter with --stdin-packs" err
+	)
+'
+
+test_expect_success '--stdin-packs is incompatible with --revs' '
+	(
+		cd stdin-packs &&
+		test_must_fail git pack-objects --stdin-packs --revs out \
+			</dev/null 2>err &&
+		test_i18ngrep "cannot use internal rev list with --stdin-packs" err
+	)
+'
+
+test_expect_success '--stdin-packs with loose objects' '
+	(
+		cd stdin-packs &&
+
+		PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" &&
+		PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" &&
+		PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" &&
+
+		test_commit D && # loose
+
+		git pack-objects test2 --stdin-packs --unpacked <<-EOF &&
+		$PACK_A
+		^$PACK_B
+		$PACK_C
+		EOF
+
+		(
+			git show-index <$(ls .git/objects/pack/pack-A-*.idx) &&
+			git show-index <$(ls .git/objects/pack/pack-C-*.idx) &&
+			git rev-list --objects --no-object-names \
+				refs/tags/C..refs/tags/D
+
+		) >expect.raw &&
+		ls -la . &&
+		git show-index <$(ls test2-*.idx) >actual.raw &&
+
+		cut -d" " -f2 <expect.raw | sort >expect &&
+		cut -d" " -f2 <actual.raw | sort >actual &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success '--stdin-packs with broken links' '
+	(
+		cd stdin-packs &&
+
+		# make an unreachable object with a bogus parent
+		git cat-file -p HEAD >commit &&
+		sed "s/$(git rev-parse HEAD^)/$(test_oid zero)/" <commit |
+		git hash-object -w -t commit --stdin >in &&
+
+		git pack-objects .git/objects/pack/pack-D <in &&
+
+		PACK_A="$(basename .git/objects/pack/pack-A-*.pack)" &&
+		PACK_B="$(basename .git/objects/pack/pack-B-*.pack)" &&
+		PACK_C="$(basename .git/objects/pack/pack-C-*.pack)" &&
+		PACK_D="$(basename .git/objects/pack/pack-D-*.pack)" &&
+
+		git pack-objects test3 --stdin-packs --unpacked <<-EOF &&
+		$PACK_A
+		^$PACK_B
+		$PACK_C
+		$PACK_D
+		EOF
+
+		(
+			git show-index <$(ls .git/objects/pack/pack-A-*.idx) &&
+			git show-index <$(ls .git/objects/pack/pack-C-*.idx) &&
+			git show-index <$(ls .git/objects/pack/pack-D-*.idx) &&
+			git rev-list --objects --no-object-names \
+				refs/tags/C..refs/tags/D
+		) >expect.raw &&
+		git show-index <$(ls test3-*.idx) >actual.raw &&
+
+		cut -d" " -f2 <expect.raw | sort >expect &&
+		cut -d" " -f2 <actual.raw | sort >actual &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'negative window clamps to 0' '
+	git pack-objects --progress --window=-1 neg-window <obj-list 2>stderr &&
+	check_deltas stderr = 0
+'
+
 test_done
diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
index b447ce5..7cabb85 100755
--- a/t/t5304-prune.sh
+++ b/t/t5304-prune.sh
@@ -22,30 +22,25 @@
 }
 
 test_expect_success setup '
-
-	: > file &&
+	>file &&
 	git add file &&
 	test_tick &&
 	git commit -m initial &&
 	git gc
-
 '
 
 test_expect_success 'prune stale packs' '
-
 	orig_pack=$(echo .git/objects/pack/*.pack) &&
-	: > .git/objects/tmp_1.pack &&
-	: > .git/objects/tmp_2.pack &&
+	>.git/objects/tmp_1.pack &&
+	>.git/objects/tmp_2.pack &&
 	test-tool chmtime =-86501 .git/objects/tmp_1.pack &&
 	git prune --expire 1.day &&
 	test_path_is_file $orig_pack &&
 	test_path_is_file .git/objects/tmp_2.pack &&
 	test_path_is_missing .git/objects/tmp_1.pack
-
 '
 
 test_expect_success 'prune --expire' '
-
 	add_blob &&
 	git prune --expire=1.hour.ago &&
 	verbose test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
@@ -54,11 +49,9 @@
 	git prune --expire 1.day &&
 	verbose test $before = $(git count-objects | sed "s/ .*//") &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'gc: implicit prune --expire' '
-
 	add_blob &&
 	test-tool chmtime =-$((2*$week-30)) $BLOB_FILE &&
 	git gc &&
@@ -68,123 +61,98 @@
 	git gc &&
 	verbose test $before = $(git count-objects | sed "s/ .*//") &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'gc: refuse to start with invalid gc.pruneExpire' '
-
 	git config gc.pruneExpire invalid &&
 	test_must_fail git gc
-
 '
 
 test_expect_success 'gc: start with ok gc.pruneExpire' '
-
 	git config gc.pruneExpire 2.days.ago &&
 	git gc
-
 '
 
 test_expect_success 'prune: prune nonsense parameters' '
-
 	test_must_fail git prune garbage &&
 	test_must_fail git prune --- &&
 	test_must_fail git prune --no-such-option
-
 '
 
 test_expect_success 'prune: prune unreachable heads' '
-
 	git config core.logAllRefUpdates false &&
-	mv .git/logs .git/logs.old &&
-	: > file2 &&
+	>file2 &&
 	git add file2 &&
 	git commit -m temporary &&
 	tmp_head=$(git rev-list -1 HEAD) &&
 	git reset HEAD^ &&
+	git reflog expire --all &&
 	git prune &&
 	test_must_fail git reset $tmp_head --
-
 '
 
 test_expect_success 'prune: do not prune detached HEAD with no reflog' '
-
 	git checkout --detach --quiet &&
 	git commit --allow-empty -m "detached commit" &&
-	# verify that there is no reflogs
-	# (should be removed and disabled by previous test)
-	test_path_is_missing .git/logs &&
+	git reflog expire --all &&
 	git prune -n >prune_actual &&
 	test_must_be_empty prune_actual
-
 '
 
 test_expect_success 'prune: prune former HEAD after checking out branch' '
-
 	head_oid=$(git rev-parse HEAD) &&
 	git checkout --quiet main &&
+	git reflog expire --all &&
 	git prune -v >prune_actual &&
 	grep "$head_oid" prune_actual
-
 '
 
 test_expect_success 'prune: do not prune heads listed as an argument' '
-
-	: > file2 &&
+	>file2 &&
 	git add file2 &&
 	git commit -m temporary &&
 	tmp_head=$(git rev-list -1 HEAD) &&
 	git reset HEAD^ &&
 	git prune -- $tmp_head &&
 	git reset $tmp_head --
-
 '
 
 test_expect_success 'gc --no-prune' '
-
 	add_blob &&
 	test-tool chmtime =-$((5001*$day)) $BLOB_FILE &&
 	git config gc.pruneExpire 2.days.ago &&
 	git gc --no-prune &&
 	verbose test 1 = $(git count-objects | sed "s/ .*//") &&
 	test_path_is_file $BLOB_FILE
-
 '
 
 test_expect_success 'gc respects gc.pruneExpire' '
-
 	git config gc.pruneExpire 5002.days.ago &&
 	git gc &&
 	test_path_is_file $BLOB_FILE &&
 	git config gc.pruneExpire 5000.days.ago &&
 	git gc &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'gc --prune=<date>' '
-
 	add_blob &&
 	test-tool chmtime =-$((5001*$day)) $BLOB_FILE &&
 	git gc --prune=5002.days.ago &&
 	test_path_is_file $BLOB_FILE &&
 	git gc --prune=5000.days.ago &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'gc --prune=never' '
-
 	add_blob &&
 	git gc --prune=never &&
 	test_path_is_file $BLOB_FILE &&
 	git gc --prune=now &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'gc respects gc.pruneExpire=never' '
-
 	git config gc.pruneExpire never &&
 	add_blob &&
 	git gc &&
@@ -192,17 +160,14 @@
 	git config gc.pruneExpire now &&
 	git gc &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'prune --expire=never' '
-
 	add_blob &&
 	git prune --expire=never &&
 	test_path_is_file $BLOB_FILE &&
 	git prune &&
 	test_path_is_missing $BLOB_FILE
-
 '
 
 test_expect_success 'gc: prune old objects after local clone' '
@@ -222,16 +187,16 @@
 test_expect_success 'garbage report in count-objects -v' '
 	test_when_finished "rm -f .git/objects/pack/fake*" &&
 	test_when_finished "rm -f .git/objects/pack/foo*" &&
-	: >.git/objects/pack/foo &&
-	: >.git/objects/pack/foo.bar &&
-	: >.git/objects/pack/foo.keep &&
-	: >.git/objects/pack/foo.pack &&
-	: >.git/objects/pack/fake.bar &&
-	: >.git/objects/pack/fake.keep &&
-	: >.git/objects/pack/fake.pack &&
-	: >.git/objects/pack/fake.idx &&
-	: >.git/objects/pack/fake2.keep &&
-	: >.git/objects/pack/fake3.idx &&
+	>.git/objects/pack/foo &&
+	>.git/objects/pack/foo.bar &&
+	>.git/objects/pack/foo.keep &&
+	>.git/objects/pack/foo.pack &&
+	>.git/objects/pack/fake.bar &&
+	>.git/objects/pack/fake.keep &&
+	>.git/objects/pack/fake.pack &&
+	>.git/objects/pack/fake.idx &&
+	>.git/objects/pack/fake2.keep &&
+	>.git/objects/pack/fake3.idx &&
 	git count-objects -v 2>stderr &&
 	grep "index file .git/objects/pack/fake.idx is too small" stderr &&
 	grep "^warning:" stderr | sort >actual &&
@@ -250,12 +215,12 @@
 test_expect_success 'clean pack garbage with gc' '
 	test_when_finished "rm -f .git/objects/pack/fake*" &&
 	test_when_finished "rm -f .git/objects/pack/foo*" &&
-	: >.git/objects/pack/foo.keep &&
-	: >.git/objects/pack/foo.pack &&
-	: >.git/objects/pack/fake.idx &&
-	: >.git/objects/pack/fake2.keep &&
-	: >.git/objects/pack/fake2.idx &&
-	: >.git/objects/pack/fake3.keep &&
+	>.git/objects/pack/foo.keep &&
+	>.git/objects/pack/foo.pack &&
+	>.git/objects/pack/fake.idx &&
+	>.git/objects/pack/fake2.keep &&
+	>.git/objects/pack/fake2.idx &&
+	>.git/objects/pack/fake3.keep &&
 	git gc &&
 	git count-objects -v 2>stderr &&
 	grep "^warning:" stderr | sort >actual &&
@@ -352,4 +317,20 @@
 	test_must_fail git cat-file -e $blob
 '
 
+test_expect_success 'old reachable-from-recent retained with bitmaps' '
+	git repack -adb &&
+	to_drop=$(echo bitmap-from-recent-1 | git hash-object -w --stdin) &&
+	test-tool chmtime -86400 .git/objects/$(test_oid_to_path $to_drop) &&
+	to_save=$(echo bitmap-from-recent-2 | git hash-object -w --stdin) &&
+	test-tool chmtime -86400 .git/objects/$(test_oid_to_path $to_save) &&
+	tree=$(printf "100644 blob $to_save\tfile\n" | git mktree) &&
+	test-tool chmtime -86400 .git/objects/$(test_oid_to_path $tree) &&
+	commit=$(echo foo | git commit-tree $tree) &&
+	git prune --expire=12.hours.ago &&
+	git cat-file -e $commit &&
+	git cat-file -e $tree &&
+	git cat-file -e $to_save &&
+	test_must_fail git cat-file -e $to_drop
+'
+
 test_done
diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh
index 40b9f63..b028387 100755
--- a/t/t5310-pack-bitmaps.sh
+++ b/t/t5310-pack-bitmaps.sh
@@ -461,6 +461,29 @@
 	test_i18ngrep corrupted.bitmap.index stderr
 '
 
+test_expect_success 'enumerating progress counts pack-reused objects' '
+	count=$(git rev-list --objects --all --count) &&
+	git repack -adb &&
+
+	# check first with only reused objects; confirm that our progress
+	# showed the right number, and also that we did pack-reuse as expected.
+	# Check only the final "done" line of the meter (there may be an
+	# arbitrary number of intermediate lines ending with CR).
+	GIT_PROGRESS_DELAY=0 \
+		git pack-objects --all --stdout --progress \
+		</dev/null >/dev/null 2>stderr &&
+	grep "Enumerating objects: $count, done" stderr &&
+	grep "pack-reused $count" stderr &&
+
+	# now the same but with one non-reused object
+	git commit --allow-empty -m "an extra commit object" &&
+	GIT_PROGRESS_DELAY=0 \
+		git pack-objects --all --stdout --progress \
+		</dev/null >/dev/null 2>stderr &&
+	grep "Enumerating objects: $((count+1)), done" stderr &&
+	grep "pack-reused $count" stderr
+'
+
 # have_delta <obj> <expected_base>
 #
 # Note that because this relies on cat-file, it might find _any_ copy of an
@@ -554,4 +577,42 @@
 	)
 '
 
+test_expect_success 'pack.preferBitmapTips' '
+	git init repo &&
+	test_when_finished "rm -fr repo" &&
+	(
+		cd repo &&
+
+		# create enough commits that not all are receive bitmap
+		# coverage even if they are all at the tip of some reference.
+		test_commit_bulk --message="%s" 103 &&
+
+		git rev-list HEAD >commits.raw &&
+		sort <commits.raw >commits &&
+
+		git log --format="create refs/tags/%s %H" HEAD >refs &&
+		git update-ref --stdin <refs &&
+
+		git repack -adb &&
+		test-tool bitmap list-commits | sort >bitmaps &&
+
+		# remember which commits did not receive bitmaps
+		comm -13 bitmaps commits >before &&
+		test_file_not_empty before &&
+
+		# mark the commits which did not receive bitmaps as preferred,
+		# and generate the bitmap again
+		perl -pe "s{^}{create refs/tags/include/$. }" <before |
+			git update-ref --stdin &&
+		git -c pack.preferBitmapTips=refs/tags/include repack -adb &&
+
+		# finally, check that the commit(s) without bitmap coverage
+		# are not the same ones as before
+		test-tool bitmap list-commits | sort >bitmaps &&
+		comm -13 bitmaps commits >after &&
+
+		! test_cmp before after
+	)
+'
+
 test_done
diff --git a/t/t5316-pack-delta-depth.sh b/t/t5316-pack-delta-depth.sh
index 0f06c40..759169d 100755
--- a/t/t5316-pack-delta-depth.sh
+++ b/t/t5316-pack-delta-depth.sh
@@ -69,6 +69,7 @@
 max_chain() {
 	git index-pack --verify-stat-only "$1" >output &&
 	perl -lne '
+	  BEGIN { $len = 0 }
 	  /chain length = (\d+)/ and $len = $1;
 	  END { print $len }
 	' output
@@ -84,14 +85,28 @@
 	pack=$(git pack-objects --all --window=0 </dev/null pack) &&
 	echo 9 >expect &&
 	max_chain pack-$pack.pack >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success '--depth limits depth' '
 	pack=$(git pack-objects --all --depth=5 </dev/null pack) &&
 	echo 5 >expect &&
 	max_chain pack-$pack.pack >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
+'
+
+test_expect_success '--depth=0 disables deltas' '
+	pack=$(git pack-objects --all --depth=0 </dev/null pack) &&
+	echo 0 >expect &&
+	max_chain pack-$pack.pack >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'negative depth disables deltas' '
+	pack=$(git pack-objects --all --depth=-1 </dev/null pack) &&
+	echo 0 >expect &&
+	max_chain pack-$pack.pack >actual &&
+	test_cmp expect actual
 '
 
 test_done
diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index edeb6d6..af88f80 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -475,7 +475,7 @@
 
 test_expect_success 'git commit-graph verify' '
 	cd "$TRASH_DIRECTORY/full" &&
-	git rev-parse commits/8 | GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --stdin-commits &&
+	git rev-parse commits/8 | git -c commitGraph.generationVersion=1 commit-graph write --stdin-commits &&
 	git commit-graph verify >output &&
 	graph_read_expect 9 extra_edges
 '
diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh
index dab7123..3d4d9f1 100755
--- a/t/t5319-multi-pack-index.sh
+++ b/t/t5319-multi-pack-index.sh
@@ -410,6 +410,19 @@
 		"git -c core.multipackindex=true fsck"
 '
 
+test_expect_success 'corrupt MIDX is not reused' '
+	corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\377" $objdir \
+		"incorrect object offset" &&
+	git multi-pack-index write 2>err &&
+	test_i18ngrep checksum.mismatch err &&
+	git multi-pack-index verify
+'
+
+test_expect_success 'verify incorrect checksum' '
+	pos=$(($(wc -c <$objdir/pack/multi-pack-index) - 1)) &&
+	corrupt_midx_and_verify $pos "\377" $objdir "incorrect checksum"
+'
+
 test_expect_success 'repack progress off for redirected stderr' '
 	GIT_PROGRESS_DELAY=0 git multi-pack-index --object-dir=$objdir repack 2>err &&
 	test_line_count = 0 err
diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
index 8e90f34..587226e 100755
--- a/t/t5324-split-commit-graph.sh
+++ b/t/t5324-split-commit-graph.sh
@@ -489,7 +489,7 @@
 			test_commit $i &&
 			git branch commits/$i || return 1
 		done &&
-		git commit-graph write --reachable --split &&
+		git -c commitGraph.generationVersion=2 commit-graph write --reachable --split &&
 		graph_read_expect $NUM_FIRST_LAYER_COMMITS &&
 		test_line_count = 1 $graphdir/commit-graph-chain &&
 		for i in $(test_seq $SECOND_LAYER_SEQUENCE_START $SECOND_LAYER_SEQUENCE_END)
@@ -497,7 +497,7 @@
 			test_commit $i &&
 			git branch commits/$i || return 1
 		done &&
-		GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --reachable --split=no-merge &&
+		git -c commitGraph.generationVersion=1 commit-graph write --reachable --split=no-merge &&
 		test_line_count = 2 $graphdir/commit-graph-chain &&
 		test-tool read-graph >output &&
 		cat >expect <<-EOF &&
diff --git a/t/t5406-remote-rejects.sh b/t/t5406-remote-rejects.sh
index ff06f99..5c509db 100755
--- a/t/t5406-remote-rejects.sh
+++ b/t/t5406-remote-rejects.sh
@@ -5,7 +5,6 @@
 . ./test-lib.sh
 
 test_expect_success 'setup' '
-	mkdir .git/hooks &&
 	write_script .git/hooks/update <<-\EOF &&
 	exit 1
 	EOF
diff --git a/t/t5407-post-rewrite-hook.sh b/t/t5407-post-rewrite-hook.sh
index 5bb23cc..6da8d76 100755
--- a/t/t5407-post-rewrite-hook.sh
+++ b/t/t5407-post-rewrite-hook.sh
@@ -20,8 +20,6 @@
 	git checkout main
 '
 
-mkdir .git/hooks
-
 cat >.git/hooks/post-rewrite <<EOF
 #!/bin/sh
 echo \$@ > "$TRASH_DIRECTORY"/post-rewrite.args
diff --git a/t/t5409-colorize-remote-messages.sh b/t/t5409-colorize-remote-messages.sh
index 5d8f401..9f1a483 100755
--- a/t/t5409-colorize-remote-messages.sh
+++ b/t/t5409-colorize-remote-messages.sh
@@ -5,7 +5,6 @@
 . ./test-lib.sh
 
 test_expect_success 'setup' '
-	mkdir .git/hooks &&
 	write_script .git/hooks/update <<-\EOF &&
 	echo error: error
 	echo ERROR: also highlighted
diff --git a/t/t5411/common-functions.sh b/t/t5411/common-functions.sh
index 6694858..3c74778 100644
--- a/t/t5411/common-functions.sh
+++ b/t/t5411/common-functions.sh
@@ -6,50 +6,44 @@
 # NOTE: Never calling this function from a subshell since variable
 # assignments will disappear when subshell exits.
 create_commits_in () {
-	repo="$1" &&
-	if ! parent=$(git -C "$repo" rev-parse HEAD^{} --)
-	then
-		parent=
-	fi &&
-	T=$(git -C "$repo" write-tree) &&
+	repo="$1" && test -d "$repo" ||
+	error "Repository $repo does not exist."
 	shift &&
 	while test $# -gt 0
 	do
 		name=$1 &&
-		test_tick &&
-		if test -z "$parent"
-		then
-			oid=$(echo $name | git -C "$repo" commit-tree $T)
-		else
-			oid=$(echo $name | git -C "$repo" commit-tree -p $parent $T)
-		fi &&
-		eval $name=$oid &&
-		parent=$oid &&
-		shift ||
-		return 1
-	done &&
-	git -C "$repo" update-ref refs/heads/main $oid
+		shift &&
+		test_commit -C "$repo" --no-tag "$name" &&
+		eval $name=$(git -C "$repo" rev-parse HEAD)
+	done
+}
+
+get_abbrev_oid () {
+	oid=$1 &&
+	suffix=${oid#???????} &&
+	oid=${oid%$suffix} &&
+	if test -n "$oid"
+	then
+		echo "$oid"
+	else
+		echo "undefined-oid"
+	fi
 }
 
 # Format the output of git-push, git-show-ref and other commands to make a
 # user-friendly and stable text.  We can easily prepare the expect text
-# without having to worry about future changes of the commit ID and spaces
+# without having to worry about changes of the commit ID (full or abbrev.)
 # of the output.  Single quotes are replaced with double quotes, because
 # it is boring to prepare unquoted single quotes in expect text.  We also
 # remove some locale error messages. The emitted human-readable errors are
 # redundant to the more machine-readable output the tests already assert.
 make_user_friendly_and_stable_output () {
 	sed \
-		-e "s/  *\$//" \
-		-e "s/  */ /g" \
 		-e "s/'/\"/g" \
-		-e "s/	/    /g" \
-		-e "s/$A/<COMMIT-A>/g" \
-		-e "s/$B/<COMMIT-B>/g" \
-		-e "s/$TAG/<TAG-v123>/g" \
+		-e "s/$(get_abbrev_oid $A)[0-9a-f]*/<COMMIT-A>/g" \
+		-e "s/$(get_abbrev_oid $B)[0-9a-f]*/<COMMIT-B>/g" \
+		-e "s/$(get_abbrev_oid $TAG)[0-9a-f]*/<TAG-v123>/g" \
 		-e "s/$ZERO_OID/<ZERO-OID>/g" \
-		-e "s/$(echo $A | cut -c1-7)[0-9a-f]*/<OID-A>/g" \
-		-e "s/$(echo $B | cut -c1-7)[0-9a-f]*/<OID-B>/g" \
 		-e "s#To $URL_PREFIX/upstream.git#To <URL/of/upstream.git>#" \
 		-e "/^error: / d"
 }
@@ -59,6 +53,10 @@
 		sed -n ${1+"$@"}
 }
 
+format_and_save_expect () {
+	sed -e 's/^> //' -e 's/Z$//' >expect
+}
+
 test_cmp_refs () {
 	indir=
 	if test "$1" = "-C"
diff --git a/t/t5411/once-0010-report-status-v1.sh b/t/t5411/once-0010-report-status-v1.sh
index 1233a46..297b109 100644
--- a/t/t5411/once-0010-report-status-v1.sh
+++ b/t/t5411/once-0010-report-status-v1.sh
@@ -28,10 +28,10 @@
 		if test -z "$GIT_DEFAULT_HASH" || test "$GIT_DEFAULT_HASH" = "sha1"
 		then
 			printf "%s %s refs/heads/main\0report-status\n" \
-				$A $B | packetize
+				$A $B | packetize_raw
 		else
 			printf "%s %s refs/heads/main\0report-status object-format=$GIT_DEFAULT_HASH\n" \
-				$A $B | packetize
+				$A $B | packetize_raw
 		fi &&
 		printf "%s %s refs/for/main/topic1\n" \
 			$ZERO_OID $A | packetize &&
diff --git a/t/t5411/test-0000-standard-git-push.sh b/t/t5411/test-0000-standard-git-push.sh
index e1e0175..ce64bb6 100644
--- a/t/t5411/test-0000-standard-git-push.sh
+++ b/t/t5411/test-0000-standard-git-push.sh
@@ -7,16 +7,16 @@
 		HEAD:refs/heads/next \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> <COMMIT-B> -> main
-	 * [new branch] HEAD -> next
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> main
+	>  * [new branch]      HEAD -> next
 	EOF
 	test_cmp expect actual &&
 
@@ -38,10 +38,10 @@
 		-e "/^To / { p; }" \
 		-e "/^ ! / { p; }" \
 		<out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	To <URL/of/upstream.git>
-	 ! [rejected] main -> main (non-fast-forward)
-	 ! [rejected] <COMMIT-B> -> next (atomic push failed)
+	format_and_save_expect <<-EOF &&
+	> To <URL/of/upstream.git>
+	>  ! [rejected]        main -> main (non-fast-forward)
+	>  ! [rejected]        <COMMIT-B> -> next (atomic push failed)
 	EOF
 	test_cmp expect actual &&
 
@@ -63,14 +63,14 @@
 		$B:refs/heads/next \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/next
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/next
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> <COMMIT-B> -> next
-	 ! [rejected] main -> main (non-fast-forward)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> next
+	>  ! [rejected]        main -> main (non-fast-forward)
 	EOF
 	test_cmp expect actual &&
 
@@ -92,25 +92,25 @@
 		HEAD:refs/heads/a/b/c \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: pre-receive< <COMMIT-B> <ZERO-OID> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: post-receive< <COMMIT-B> <ZERO-OID> refs/heads/next
-	remote: post-receive< <ZERO-OID> <TAG-v123> refs/tags/v123
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c
-	To <URL/of/upstream.git>
-	 + <OID-B>...<OID-A> main -> main (forced update)
-	 - [deleted] next
-	 * [new tag] v123 -> v123
-	 * [new reference] main -> refs/review/main/topic
-	 * [new branch] HEAD -> a/b/c
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: pre-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: post-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
+	> remote: post-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
+	> To <URL/of/upstream.git>
+	>  + <COMMIT-B>...<COMMIT-A> main -> main (forced update)
+	>  - [deleted]         next
+	>  * [new tag]         v123 -> v123
+	>  * [new reference]   main -> refs/review/main/topic
+	>  * [new branch]      HEAD -> a/b/c
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0001-standard-git-push--porcelain.sh b/t/t5411/test-0001-standard-git-push--porcelain.sh
index bcbda72..373ec3d 100644
--- a/t/t5411/test-0001-standard-git-push--porcelain.sh
+++ b/t/t5411/test-0001-standard-git-push--porcelain.sh
@@ -7,17 +7,17 @@
 		HEAD:refs/heads/next \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	To <URL/of/upstream.git>
-	     <COMMIT-B>:refs/heads/main    <OID-A>..<OID-B>
-	*    HEAD:refs/heads/next    [new branch]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	>  	<COMMIT-B>:refs/heads/main	<COMMIT-A>..<COMMIT-B>
+	> *	HEAD:refs/heads/next	[new branch]
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -38,12 +38,12 @@
 	filter_out_user_friendly_and_stable_output \
 		-e "s/^# GETTEXT POISON #//" \
 		-e "/^To / { p; }" \
-		-e "/^! / { p; }" \
+		-e "/^!/ { p; }" \
 		<out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	To <URL/of/upstream.git>
-	!    refs/heads/main:refs/heads/main    [rejected] (non-fast-forward)
-	!    <COMMIT-B>:refs/heads/next    [rejected] (atomic push failed)
+	format_and_save_expect <<-EOF &&
+	> To <URL/of/upstream.git>
+	> !	refs/heads/main:refs/heads/main	[rejected] (non-fast-forward)
+	> !	<COMMIT-B>:refs/heads/next	[rejected] (atomic push failed)
 	EOF
 	test_cmp expect actual &&
 
@@ -65,15 +65,15 @@
 		$B:refs/heads/next \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/next
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/next
-	To <URL/of/upstream.git>
-	     <COMMIT-B>:refs/heads/next    <OID-A>..<OID-B>
-	!    refs/heads/main:refs/heads/main    [rejected] (non-fast-forward)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	>  	<COMMIT-B>:refs/heads/next	<COMMIT-A>..<COMMIT-B>
+	> !	refs/heads/main:refs/heads/main	[rejected] (non-fast-forward)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -95,26 +95,26 @@
 		HEAD:refs/heads/a/b/c \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: pre-receive< <COMMIT-B> <ZERO-OID> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: post-receive< <COMMIT-B> <ZERO-OID> refs/heads/next
-	remote: post-receive< <ZERO-OID> <TAG-v123> refs/tags/v123
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c
-	To <URL/of/upstream.git>
-	+    refs/heads/main:refs/heads/main    <OID-B>...<OID-A> (forced update)
-	-    :refs/heads/next    [deleted]
-	*    refs/tags/v123:refs/tags/v123    [new tag]
-	*    refs/heads/main:refs/review/main/topic    [new reference]
-	*    HEAD:refs/heads/a/b/c    [new branch]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: pre-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: post-receive< <COMMIT-B> <ZERO-OID> refs/heads/next        Z
+	> remote: post-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/review/main/topic        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/a/b/c        Z
+	> To <URL/of/upstream.git>
+	> +	refs/heads/main:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
+	> -	:refs/heads/next	[deleted]
+	> *	refs/tags/v123:refs/tags/v123	[new tag]
+	> *	refs/heads/main:refs/review/main/topic	[new reference]
+	> *	HEAD:refs/heads/a/b/c	[new branch]
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0003-pre-receive-declined--porcelain.sh b/t/t5411/test-0003-pre-receive-declined--porcelain.sh
index e9c9db5..2393b04 100644
--- a/t/t5411/test-0003-pre-receive-declined--porcelain.sh
+++ b/t/t5411/test-0003-pre-receive-declined--porcelain.sh
@@ -14,10 +14,10 @@
 		HEAD:refs/heads/next \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	To <URL/of/upstream.git>
-	!    <COMMIT-B>:refs/heads/main    [remote rejected] (pre-receive hook declined)
-	!    HEAD:refs/heads/next    [remote rejected] (pre-receive hook declined)
+	format_and_save_expect <<-EOF &&
+	> To <URL/of/upstream.git>
+	> !	<COMMIT-B>:refs/heads/main	[remote rejected] (pre-receive hook declined)
+	> !	HEAD:refs/heads/next	[remote rejected] (pre-receive hook declined)
 	Done
 	EOF
 	test_cmp expect actual &&
diff --git a/t/t5411/test-0011-no-hook-error.sh b/t/t5411/test-0011-no-hook-error.sh
index 3ef136e..d35002b 100644
--- a/t/t5411/test-0011-no-hook-error.sh
+++ b/t/t5411/test-0011-no-hook-error.sh
@@ -7,16 +7,16 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: error: cannot find hook "proc-receive"
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	To <URL/of/upstream.git>
-	 * [new branch] HEAD -> next
-	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: error: cannot find hook "proc-receive"        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	>  * [new branch]      HEAD -> next
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
 	EOF
 	test_cmp expect actual &&
 
@@ -41,16 +41,16 @@
 		HEAD:next \
 		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: error: cannot find hook "proc-receive"
-	To <URL/of/upstream.git>
-	 ! [remote rejected] <COMMIT-B> -> main (fail to run proc-receive hook)
-	 ! [remote rejected] HEAD -> next (fail to run proc-receive hook)
-	 ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: error: cannot find hook "proc-receive"        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] <COMMIT-B> -> main (fail to run proc-receive hook)
+	>  ! [remote rejected] HEAD -> next (fail to run proc-receive hook)
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (fail to run proc-receive hook)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0012-no-hook-error--porcelain.sh b/t/t5411/test-0012-no-hook-error--porcelain.sh
index 19f66fb..04468b5 100644
--- a/t/t5411/test-0012-no-hook-error--porcelain.sh
+++ b/t/t5411/test-0012-no-hook-error--porcelain.sh
@@ -7,16 +7,16 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: error: cannot find hook "proc-receive"
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	To <URL/of/upstream.git>
-	*    HEAD:refs/heads/next    [new branch]
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: error: cannot find hook "proc-receive"        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/heads/next	[new branch]
+	> !	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual &&
@@ -42,17 +42,17 @@
 		HEAD:next \
 		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: error: cannot find hook "proc-receive"
-	To <URL/of/upstream.git>
-	!    <COMMIT-B>:refs/heads/main    [remote rejected] (fail to run proc-receive hook)
-	!    HEAD:refs/heads/next    [remote rejected] (fail to run proc-receive hook)
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: error: cannot find hook "proc-receive"        Z
+	> To <URL/of/upstream.git>
+	> !	<COMMIT-B>:refs/heads/main	[remote rejected] (fail to run proc-receive hook)
+	> !	HEAD:refs/heads/next	[remote rejected] (fail to run proc-receive hook)
+	> !	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0013-bad-protocol.sh b/t/t5411/test-0013-bad-protocol.sh
index 095e613..c08a00d 100644
--- a/t/t5411/test-0013-bad-protocol.sh
+++ b/t/t5411/test-0013-bad-protocol.sh
@@ -29,8 +29,8 @@
 	# message ("remote: fatal: the remote end hung up unexpectedly") which
 	# is different from the remote HTTP server with different locale settings.
 	grep "^remote: error:" <actual >actual-error &&
-	cat >expect <<-EOF &&
-	remote: error: proc-receive version "2" is not supported
+	format_and_save_expect <<-EOF &&
+	> remote: error: proc-receive version "2" is not supported        Z
 	EOF
 	test_cmp expect actual-error &&
 
@@ -208,17 +208,17 @@
 		HEAD:refs/heads/next \
 		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	To <URL/of/upstream.git>
-	 * [new branch] HEAD -> next
-	 ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	>  * [new branch]      HEAD -> next
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual &&
 
@@ -251,15 +251,15 @@
 		HEAD:refs/for/main/topic\
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok
-	remote: error: proc-receive reported incomplete status line: "ok"
-	To <URL/of/upstream.git>
-	 ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok        Z
+	> remote: error: proc-receive reported incomplete status line: "ok"        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual &&
 
@@ -284,15 +284,15 @@
 			HEAD:refs/for/main/topic \
 			>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> xx refs/for/main/topic
-	remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic"
-	To <URL/of/upstream.git>
-	 ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> xx refs/for/main/topic        Z
+	> remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic"        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0014-bad-protocol--porcelain.sh b/t/t5411/test-0014-bad-protocol--porcelain.sh
index a446497..3eaa597 100644
--- a/t/t5411/test-0014-bad-protocol--porcelain.sh
+++ b/t/t5411/test-0014-bad-protocol--porcelain.sh
@@ -20,7 +20,7 @@
 		<actual >actual-report &&
 	cat >expect <<-EOF &&
 	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual-report &&
@@ -29,8 +29,8 @@
 	# message ("remote: fatal: the remote end hung up unexpectedly") which
 	# is different from the remote HTTP server with different locale settings.
 	grep "^remote: error:" <actual >actual-error &&
-	cat >expect <<-EOF &&
-	remote: error: proc-receive version "2" is not supported
+	format_and_save_expect <<-EOF &&
+	> remote: error: proc-receive version "2" is not supported        Z
 	EOF
 	test_cmp expect actual-error &&
 
@@ -58,7 +58,7 @@
 		<out-$test_count >actual &&
 	cat >expect <<-EOF &&
 	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual &&
@@ -89,7 +89,7 @@
 		<out-$test_count >actual &&
 	cat >expect <<-EOF &&
 	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual &&
@@ -120,7 +120,7 @@
 		<out-$test_count >actual &&
 	cat >expect <<-EOF &&
 	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual &&
@@ -152,7 +152,7 @@
 		<out-$test_count >actual &&
 	cat >expect <<-EOF &&
 	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual &&
@@ -182,7 +182,7 @@
 		<out-$test_count >actual &&
 	cat >expect <<-EOF &&
 	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (fail to run proc-receive hook)
+	!	HEAD:refs/for/main/topic	[remote rejected] (fail to run proc-receive hook)
 	Done
 	EOF
 	test_cmp expect actual &&
@@ -208,18 +208,18 @@
 		HEAD:refs/heads/next \
 		HEAD:refs/for/main/topic >out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	To <URL/of/upstream.git>
-	*    HEAD:refs/heads/next    [new branch]
-	!    HEAD:refs/for/main/topic    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/heads/next	[new branch]
+	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -251,16 +251,16 @@
 		HEAD:refs/for/main/topic\
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok
-	remote: error: proc-receive reported incomplete status line: "ok"
-	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok        Z
+	> remote: error: proc-receive reported incomplete status line: "ok"        Z
+	> To <URL/of/upstream.git>
+	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -285,16 +285,16 @@
 			HEAD:refs/for/main/topic \
 			>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> xx refs/for/main/topic
-	remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic"
-	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> xx refs/for/main/topic        Z
+	> remote: error: proc-receive reported bad status "xx" on ref "refs/for/main/topic"        Z
+	> To <URL/of/upstream.git>
+	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0020-report-ng.sh b/t/t5411/test-0020-report-ng.sh
index ad2c8f6..e915dbc 100644
--- a/t/t5411/test-0020-report-ng.sh
+++ b/t/t5411/test-0020-report-ng.sh
@@ -14,14 +14,14 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ng refs/for/main/topic
-	To <URL/of/upstream.git>
-	 ! [remote rejected] HEAD -> refs/for/main/topic (failed)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ng refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (failed)
 	EOF
 	test_cmp expect actual &&
 
@@ -46,14 +46,14 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ng refs/for/main/topic error msg
-	To <URL/of/upstream.git>
-	 ! [remote rejected] HEAD -> refs/for/main/topic (error msg)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ng refs/for/main/topic error msg        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (error msg)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0021-report-ng--porcelain.sh b/t/t5411/test-0021-report-ng--porcelain.sh
index d8ae9d3..2a392e0 100644
--- a/t/t5411/test-0021-report-ng--porcelain.sh
+++ b/t/t5411/test-0021-report-ng--porcelain.sh
@@ -14,15 +14,15 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ng refs/for/main/topic
-	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (failed)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ng refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	> !	HEAD:refs/for/main/topic	[remote rejected] (failed)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -47,15 +47,15 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ng refs/for/main/topic error msg
-	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (error msg)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ng refs/for/main/topic error msg        Z
+	> To <URL/of/upstream.git>
+	> !	HEAD:refs/for/main/topic	[remote rejected] (error msg)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0022-report-unexpect-ref.sh b/t/t5411/test-0022-report-unexpect-ref.sh
index dbed467..f7a494b 100644
--- a/t/t5411/test-0022-report-unexpect-ref.sh
+++ b/t/t5411/test-0022-report-unexpect-ref.sh
@@ -15,19 +15,19 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/heads/main
-	remote: error: proc-receive reported status on unexpected ref: refs/heads/main
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> <COMMIT-B> -> main
-	 ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/heads/main        Z
+	> remote: error: proc-receive reported status on unexpected ref: refs/heads/main        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> main
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0023-report-unexpect-ref--porcelain.sh b/t/t5411/test-0023-report-unexpect-ref--porcelain.sh
index e89096f..63c479e 100644
--- a/t/t5411/test-0023-report-unexpect-ref--porcelain.sh
+++ b/t/t5411/test-0023-report-unexpect-ref--porcelain.sh
@@ -15,20 +15,20 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/heads/main
-	remote: error: proc-receive reported status on unexpected ref: refs/heads/main
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	To <URL/of/upstream.git>
-	     <COMMIT-B>:refs/heads/main    <OID-A>..<OID-B>
-	!    HEAD:refs/for/main/topic    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/heads/main        Z
+	> remote: error: proc-receive reported status on unexpected ref: refs/heads/main        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> To <URL/of/upstream.git>
+	>  	<COMMIT-B>:refs/heads/main	<COMMIT-A>..<COMMIT-B>
+	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0024-report-unknown-ref.sh b/t/t5411/test-0024-report-unknown-ref.sh
index 7720424..af055aa 100644
--- a/t/t5411/test-0024-report-unknown-ref.sh
+++ b/t/t5411/test-0024-report-unknown-ref.sh
@@ -14,15 +14,15 @@
 		HEAD:refs/for/a/b/c/my/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: error: proc-receive reported status on unknown ref: refs/for/main/topic
-	To <URL/of/upstream.git>
-	 ! [remote rejected] HEAD -> refs/for/a/b/c/my/topic (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: error: proc-receive reported status on unknown ref: refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] HEAD -> refs/for/a/b/c/my/topic (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0025-report-unknown-ref--porcelain.sh b/t/t5411/test-0025-report-unknown-ref--porcelain.sh
index eeb1ce6..99601ca 100644
--- a/t/t5411/test-0025-report-unknown-ref--porcelain.sh
+++ b/t/t5411/test-0025-report-unknown-ref--porcelain.sh
@@ -14,16 +14,16 @@
 		HEAD:refs/for/a/b/c/my/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: error: proc-receive reported status on unknown ref: refs/for/main/topic
-	To <URL/of/upstream.git>
-	!    HEAD:refs/for/a/b/c/my/topic    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/my/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: error: proc-receive reported status on unknown ref: refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	> !	HEAD:refs/for/a/b/c/my/topic	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0026-push-options.sh b/t/t5411/test-0026-push-options.sh
index 1ec2cb9..fec5f95 100644
--- a/t/t5411/test-0026-push-options.sh
+++ b/t/t5411/test-0026-push-options.sh
@@ -52,19 +52,19 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 * [new branch] HEAD -> next
-	 * [new reference] HEAD -> refs/for/main/topic
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  * [new branch]      HEAD -> next
+	>  * [new reference]   HEAD -> refs/for/main/topic
 	EOF
 	test_cmp expect actual &&
 
@@ -101,22 +101,22 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive: atomic push_options
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive< issue=123
-	remote: proc-receive< reviewer=user1
-	remote: proc-receive> ok refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 * [new branch] HEAD -> next
-	 * [new reference] HEAD -> refs/for/main/topic
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive: atomic push_options        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive< issue=123        Z
+	> remote: proc-receive< reviewer=user1        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  * [new branch]      HEAD -> next
+	>  * [new reference]   HEAD -> refs/for/main/topic
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0027-push-options--porcelain.sh b/t/t5411/test-0027-push-options--porcelain.sh
index 447fbfe..8fb75a8 100644
--- a/t/t5411/test-0027-push-options--porcelain.sh
+++ b/t/t5411/test-0027-push-options--porcelain.sh
@@ -54,20 +54,20 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	*    HEAD:refs/heads/next    [new branch]
-	*    HEAD:refs/for/main/topic    [new reference]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/heads/next	[new branch]
+	> *	HEAD:refs/for/main/topic	[new reference]
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -105,23 +105,23 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive: atomic push_options
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive< issue=123
-	remote: proc-receive< reviewer=user1
-	remote: proc-receive> ok refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	*    HEAD:refs/heads/next    [new branch]
-	*    HEAD:refs/for/main/topic    [new reference]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive: atomic push_options        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive< issue=123        Z
+	> remote: proc-receive< reviewer=user1        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/heads/next	[new branch]
+	> *	HEAD:refs/for/main/topic	[new reference]
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0030-report-ok.sh b/t/t5411/test-0030-report-ok.sh
index 8acb4f2..a3a6278 100644
--- a/t/t5411/test-0030-report-ok.sh
+++ b/t/t5411/test-0030-report-ok.sh
@@ -14,16 +14,16 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 * [new reference] HEAD -> refs/for/main/topic
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   HEAD -> refs/for/main/topic
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0031-report-ok--porcelain.sh b/t/t5411/test-0031-report-ok--porcelain.sh
index a967718..0e17538 100644
--- a/t/t5411/test-0031-report-ok--porcelain.sh
+++ b/t/t5411/test-0031-report-ok--porcelain.sh
@@ -14,17 +14,17 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	*    HEAD:refs/for/main/topic    [new reference]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/for/main/topic	[new reference]
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0032-report-with-options.sh b/t/t5411/test-0032-report-with-options.sh
index 437ade0..988a430 100644
--- a/t/t5411/test-0032-report-with-options.sh
+++ b/t/t5411/test-0032-report-with-options.sh
@@ -15,16 +15,16 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: error: proc-receive reported "option" without a matching "ok/ng" directive
-	To <URL/of/upstream.git>
-	 ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: error: proc-receive reported "option" without a matching "ok/ng" directive        Z
+	> To <URL/of/upstream.git>
+	>  ! [remote rejected] HEAD -> refs/for/main/topic (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual
 '
@@ -46,17 +46,17 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head
-	To <URL/of/upstream.git>
-	 * [new reference] HEAD -> refs/pull/123/head
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   HEAD -> refs/pull/123/head
 	EOF
 	test_cmp expect actual
 '
@@ -78,18 +78,18 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option forced-update
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head
-	To <URL/of/upstream.git>
-	 * [new reference] HEAD -> refs/pull/123/head
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   HEAD -> refs/pull/123/head
 	EOF
 	test_cmp expect actual
 '
@@ -112,18 +112,18 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head
-	To <URL/of/upstream.git>
-	 <OID-B>..<OID-A> HEAD -> refs/pull/123/head
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-B>..<COMMIT-A>  HEAD -> refs/pull/123/head
 	EOF
 	test_cmp expect actual
 '
@@ -145,17 +145,17 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 <OID-B>..<OID-A> HEAD -> refs/for/main/topic
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-B>..<COMMIT-A>  HEAD -> refs/for/main/topic
 	EOF
 	test_cmp expect actual
 '
@@ -178,18 +178,18 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> HEAD -> refs/for/main/topic
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
 	EOF
 	test_cmp expect actual
 '
@@ -219,31 +219,31 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/a/b/c/topic
-	remote: proc-receive> ok refs/for/next/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/124/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: proc-receive> option forced-update
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head
-	To <URL/of/upstream.git>
-	 * [new reference] HEAD -> refs/pull/123/head
-	 * [new reference] HEAD -> refs/for/a/b/c/topic
-	 + <OID-B>...<OID-A> HEAD -> refs/pull/124/head (forced update)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/a/b/c/topic        Z
+	> remote: proc-receive> ok refs/for/next/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/124/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   HEAD -> refs/pull/123/head
+	>  * [new reference]   HEAD -> refs/for/a/b/c/topic
+	>  + <COMMIT-B>...<COMMIT-A> HEAD -> refs/pull/124/head (forced update)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0033-report-with-options--porcelain.sh b/t/t5411/test-0033-report-with-options--porcelain.sh
index 1148672..daacb3d 100644
--- a/t/t5411/test-0033-report-with-options--porcelain.sh
+++ b/t/t5411/test-0033-report-with-options--porcelain.sh
@@ -15,17 +15,17 @@
 		HEAD:refs/for/main/topic \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: error: proc-receive reported "option" without a matching "ok/ng" directive
-	To <URL/of/upstream.git>
-	!    HEAD:refs/for/main/topic    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: error: proc-receive reported "option" without a matching "ok/ng" directive        Z
+	> To <URL/of/upstream.git>
+	> !	HEAD:refs/for/main/topic	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual
 '
@@ -47,18 +47,18 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head
-	To <URL/of/upstream.git>
-	*    HEAD:refs/pull/123/head    [new reference]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/pull/123/head	[new reference]
+	> Done
 	EOF
 	test_cmp expect actual
 '
@@ -81,19 +81,19 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option forced-update
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head
-	To <URL/of/upstream.git>
-	*    HEAD:refs/pull/123/head    [new reference]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/pull/123/head	[new reference]
+	> Done
 	EOF
 	test_cmp expect actual
 '
@@ -116,19 +116,19 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head
-	To <URL/of/upstream.git>
-	     HEAD:refs/pull/123/head    <OID-B>..<OID-A>
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/123/head        Z
+	> To <URL/of/upstream.git>
+	>  	HEAD:refs/pull/123/head	<COMMIT-B>..<COMMIT-A>
+	> Done
 	EOF
 	test_cmp expect actual
 '
@@ -150,18 +150,18 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic
-	To <URL/of/upstream.git>
-	     HEAD:refs/for/main/topic    <OID-B>..<OID-A>
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  	HEAD:refs/for/main/topic	<COMMIT-B>..<COMMIT-A>
+	> Done
 	EOF
 	test_cmp expect actual
 '
@@ -184,19 +184,19 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	To <URL/of/upstream.git>
-	     HEAD:refs/for/main/topic    <OID-A>..<OID-B>
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
+	> Done
 	EOF
 	test_cmp expect actual
 '
@@ -227,32 +227,32 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/a/b/c/topic
-	remote: proc-receive> ok refs/for/next/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/124/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: proc-receive> option forced-update
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head
-	To <URL/of/upstream.git>
-	*    HEAD:refs/pull/123/head    [new reference]
-	*    HEAD:refs/for/a/b/c/topic    [new reference]
-	+    HEAD:refs/pull/124/head    <OID-B>...<OID-A> (forced update)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/a/b/c/topic        Z
+	> remote: proc-receive> ok refs/for/next/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/124/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/123/head        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/a/b/c/topic        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/pull/123/head	[new reference]
+	> *	HEAD:refs/for/a/b/c/topic	[new reference]
+	> +	HEAD:refs/pull/124/head	<COMMIT-B>...<COMMIT-A> (forced update)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0034-report-ft.sh b/t/t5411/test-0034-report-ft.sh
index 6e0d08b..73a47d1 100644
--- a/t/t5411/test-0034-report-ft.sh
+++ b/t/t5411/test-0034-report-ft.sh
@@ -15,17 +15,17 @@
 		$B:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option fall-through
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 * [new reference] <COMMIT-B> -> refs/for/main/topic
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   <COMMIT-B> -> refs/for/main/topic
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0035-report-ft--porcelain.sh b/t/t5411/test-0035-report-ft--porcelain.sh
index 81bae9f..c350201 100644
--- a/t/t5411/test-0035-report-ft--porcelain.sh
+++ b/t/t5411/test-0035-report-ft--porcelain.sh
@@ -15,18 +15,18 @@
 		$B:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option fall-through
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic
-	To <URL/of/upstream.git>
-	*    <COMMIT-B>:refs/for/main/topic    [new reference]
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-B> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	> *	<COMMIT-B>:refs/for/main/topic	[new reference]
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0036-report-multi-rewrite-for-one-ref.sh b/t/t5411/test-0036-report-multi-rewrite-for-one-ref.sh
index be9b18b..8c8a6c1 100644
--- a/t/t5411/test-0036-report-multi-rewrite-for-one-ref.sh
+++ b/t/t5411/test-0036-report-multi-rewrite-for-one-ref.sh
@@ -39,30 +39,30 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/24/124/1
-	remote: proc-receive> option old-oid <ZERO-OID>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/25/125/1
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/25/125/1
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> HEAD -> refs/for/main/topic
-	 * [new reference] HEAD -> refs/changes/24/124/1
-	 <OID-A>..<OID-B> HEAD -> refs/changes/25/125/1
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/24/124/1        Z
+	> remote: proc-receive> option old-oid <ZERO-OID>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/25/125/1        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/25/125/1        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
+	>  * [new reference]   HEAD -> refs/changes/24/124/1
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/changes/25/125/1
 	EOF
 	test_cmp expect actual &&
 
@@ -113,31 +113,31 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/24/124/1
-	remote: proc-receive> option old-oid <ZERO-OID>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/25/125/1
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> option forced-update
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/changes/25/125/1
-	To <URL/of/upstream.git>
-	 * [new reference] HEAD -> refs/changes/24/124/1
-	 <OID-A>..<OID-B> HEAD -> refs/for/main/topic
-	 + <OID-B>...<OID-A> HEAD -> refs/changes/25/125/1 (forced update)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/24/124/1        Z
+	> remote: proc-receive> option old-oid <ZERO-OID>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/25/125/1        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/changes/25/125/1        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   HEAD -> refs/changes/24/124/1
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
+	>  + <COMMIT-B>...<COMMIT-A> HEAD -> refs/changes/25/125/1 (forced update)
 	EOF
 	test_cmp expect actual &&
 
@@ -182,23 +182,23 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/23/123/1
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/24/124/2
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/23/123/1
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/24/124/2
-	To <URL/of/upstream.git>
-	 * [new reference] HEAD -> refs/changes/23/123/1
-	 <OID-A>..<OID-B> HEAD -> refs/changes/24/124/2
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/23/123/1        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/24/124/2        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/23/123/1        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/24/124/2        Z
+	> To <URL/of/upstream.git>
+	>  * [new reference]   HEAD -> refs/changes/23/123/1
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/changes/24/124/2
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0037-report-multi-rewrite-for-one-ref--porcelain.sh b/t/t5411/test-0037-report-multi-rewrite-for-one-ref--porcelain.sh
index 95fb89c..bc44810 100644
--- a/t/t5411/test-0037-report-multi-rewrite-for-one-ref--porcelain.sh
+++ b/t/t5411/test-0037-report-multi-rewrite-for-one-ref--porcelain.sh
@@ -24,31 +24,31 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/24/124/1
-	remote: proc-receive> option old-oid <ZERO-OID>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/25/125/1
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/25/125/1
-	To <URL/of/upstream.git>
-	     HEAD:refs/for/main/topic    <OID-A>..<OID-B>
-	*    HEAD:refs/changes/24/124/1    [new reference]
-	     HEAD:refs/changes/25/125/1    <OID-A>..<OID-B>
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/24/124/1        Z
+	> remote: proc-receive> option old-oid <ZERO-OID>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/25/125/1        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/25/125/1        Z
+	> To <URL/of/upstream.git>
+	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
+	> *	HEAD:refs/changes/24/124/1	[new reference]
+	>  	HEAD:refs/changes/25/125/1	<COMMIT-A>..<COMMIT-B>
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -84,32 +84,32 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/24/124/1
-	remote: proc-receive> option old-oid <ZERO-OID>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/25/125/1
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> option forced-update
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/changes/25/125/1
-	To <URL/of/upstream.git>
-	*    HEAD:refs/changes/24/124/1    [new reference]
-	     HEAD:refs/for/main/topic    <OID-A>..<OID-B>
-	+    HEAD:refs/changes/25/125/1    <OID-B>...<OID-A> (forced update)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/24/124/1        Z
+	> remote: proc-receive> option old-oid <ZERO-OID>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/25/125/1        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/24/124/1        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/changes/25/125/1        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/changes/24/124/1	[new reference]
+	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
+	> +	HEAD:refs/changes/25/125/1	<COMMIT-B>...<COMMIT-A> (forced update)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
@@ -139,24 +139,24 @@
 		HEAD:refs/for/main/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/23/123/1
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/changes/24/124/2
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/23/123/1
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/24/124/2
-	To <URL/of/upstream.git>
-	*    HEAD:refs/changes/23/123/1    [new reference]
-	     HEAD:refs/changes/24/124/2    <OID-A>..<OID-B>
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/23/123/1        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/changes/24/124/2        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/changes/23/123/1        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/changes/24/124/2        Z
+	> To <URL/of/upstream.git>
+	> *	HEAD:refs/changes/23/123/1	[new reference]
+	>  	HEAD:refs/changes/24/124/2	<COMMIT-A>..<COMMIT-B>
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0038-report-mixed-refs.sh b/t/t5411/test-0038-report-mixed-refs.sh
index 5e00529..e63fe7b 100644
--- a/t/t5411/test-0038-report-mixed-refs.sh
+++ b/t/t5411/test-0038-report-mixed-refs.sh
@@ -26,43 +26,43 @@
 		HEAD:refs/for/next/topic3 \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3
-	remote: proc-receive> ok refs/for/next/topic2
-	remote: proc-receive> ng refs/for/next/topic1 fail to call Web API
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> <COMMIT-B> -> main
-	 * [new branch] HEAD -> bar
-	 * [new branch] HEAD -> baz
-	 * [new reference] HEAD -> refs/for/next/topic2
-	 * [new branch] HEAD -> foo
-	 <OID-A>..<OID-B> HEAD -> refs/for/main/topic
-	 ! [remote rejected] HEAD -> refs/for/next/topic1 (fail to call Web API)
-	 ! [remote rejected] HEAD -> refs/for/next/topic3 (proc-receive failed to report status)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
+	> remote: proc-receive> ok refs/for/next/topic2        Z
+	> remote: proc-receive> ng refs/for/next/topic1 fail to call Web API        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> main
+	>  * [new branch]      HEAD -> bar
+	>  * [new branch]      HEAD -> baz
+	>  * [new reference]   HEAD -> refs/for/next/topic2
+	>  * [new branch]      HEAD -> foo
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/for/main/topic
+	>  ! [remote rejected] HEAD -> refs/for/next/topic1 (fail to call Web API)
+	>  ! [remote rejected] HEAD -> refs/for/next/topic3 (proc-receive failed to report status)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0039-report-mixed-refs--porcelain.sh b/t/t5411/test-0039-report-mixed-refs--porcelain.sh
index 8f891c5..99d17b7 100644
--- a/t/t5411/test-0039-report-mixed-refs--porcelain.sh
+++ b/t/t5411/test-0039-report-mixed-refs--porcelain.sh
@@ -26,44 +26,44 @@
 		HEAD:refs/for/next/topic3 \
 		>out-$test_count 2>&1 &&
 	make_user_friendly_and_stable_output <out-$test_count >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3
-	remote: # proc-receive hook
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3
-	remote: proc-receive> ok refs/for/next/topic2
-	remote: proc-receive> ng refs/for/next/topic1 fail to call Web API
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/for/main/topic
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic
-	To <URL/of/upstream.git>
-	     <COMMIT-B>:refs/heads/main    <OID-A>..<OID-B>
-	*    HEAD:refs/heads/bar    [new branch]
-	*    HEAD:refs/heads/baz    [new branch]
-	*    HEAD:refs/for/next/topic2    [new reference]
-	*    HEAD:refs/heads/foo    [new branch]
-	     HEAD:refs/for/main/topic    <OID-A>..<OID-B>
-	!    HEAD:refs/for/next/topic1    [remote rejected] (fail to call Web API)
-	!    HEAD:refs/for/next/topic3    [remote rejected] (proc-receive failed to report status)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic1        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic3        Z
+	> remote: proc-receive> ok refs/for/next/topic2        Z
+	> remote: proc-receive> ng refs/for/next/topic1 fail to call Web API        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/for/main/topic        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/bar        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/baz        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic2        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/heads/foo        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/for/main/topic        Z
+	> To <URL/of/upstream.git>
+	>  	<COMMIT-B>:refs/heads/main	<COMMIT-A>..<COMMIT-B>
+	> *	HEAD:refs/heads/bar	[new branch]
+	> *	HEAD:refs/heads/baz	[new branch]
+	> *	HEAD:refs/for/next/topic2	[new reference]
+	> *	HEAD:refs/heads/foo	[new branch]
+	>  	HEAD:refs/for/main/topic	<COMMIT-A>..<COMMIT-B>
+	> !	HEAD:refs/for/next/topic1	[remote rejected] (fail to call Web API)
+	> !	HEAD:refs/for/next/topic3	[remote rejected] (proc-receive failed to report status)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0040-process-all-refs.sh b/t/t5411/test-0040-process-all-refs.sh
index fdcdcc7..2f405ad 100644
--- a/t/t5411/test-0040-process-all-refs.sh
+++ b/t/t5411/test-0040-process-all-refs.sh
@@ -50,46 +50,46 @@
 		HEAD:refs/for/next/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar
-	remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo
-	remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar
-	remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo
-	remote: proc-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: proc-receive> ok refs/heads/main
-	remote: proc-receive> option fall-through
-	remote: proc-receive> ok refs/heads/foo
-	remote: proc-receive> option fall-through
-	remote: proc-receive> ok refs/heads/bar
-	remote: proc-receive> option fall-through
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/for/next/topic
-	remote: proc-receive> option refname refs/pull/124/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> option forced-update
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar
-	remote: post-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> <COMMIT-B> -> bar
-	 - [deleted] foo
-	 + <OID-B>...<OID-A> HEAD -> main (forced update)
-	 <OID-A>..<OID-B> HEAD -> refs/pull/123/head
-	 + <OID-B>...<OID-A> HEAD -> refs/pull/124/head (forced update)
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
+	> remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
+	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
+	> remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
+	> remote: proc-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: proc-receive> ok refs/heads/main        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: proc-receive> ok refs/heads/foo        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: proc-receive> ok refs/heads/bar        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/for/next/topic        Z
+	> remote: proc-receive> option refname refs/pull/124/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
+	> remote: post-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> bar
+	>  - [deleted]         foo
+	>  + <COMMIT-B>...<COMMIT-A> HEAD -> main (forced update)
+	>    <COMMIT-A>..<COMMIT-B>  HEAD -> refs/pull/123/head
+	>  + <COMMIT-B>...<COMMIT-A> HEAD -> refs/pull/124/head (forced update)
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0041-process-all-refs--porcelain.sh b/t/t5411/test-0041-process-all-refs--porcelain.sh
index 73b35fe..c884057 100644
--- a/t/t5411/test-0041-process-all-refs--porcelain.sh
+++ b/t/t5411/test-0041-process-all-refs--porcelain.sh
@@ -50,47 +50,47 @@
 		HEAD:refs/for/next/topic \
 		>out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar
-	remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo
-	remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: # proc-receive hook
-	remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar
-	remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo
-	remote: proc-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic
-	remote: proc-receive> ok refs/heads/main
-	remote: proc-receive> option fall-through
-	remote: proc-receive> ok refs/heads/foo
-	remote: proc-receive> option fall-through
-	remote: proc-receive> ok refs/heads/bar
-	remote: proc-receive> option fall-through
-	remote: proc-receive> ok refs/for/main/topic
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/for/next/topic
-	remote: proc-receive> option refname refs/pull/124/head
-	remote: proc-receive> option old-oid <COMMIT-B>
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: proc-receive> option forced-update
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar
-	remote: post-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head
-	remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head
-	To <URL/of/upstream.git>
-	     <COMMIT-B>:refs/heads/bar    <OID-A>..<OID-B>
-	-    :refs/heads/foo    [deleted]
-	+    HEAD:refs/heads/main    <OID-B>...<OID-A> (forced update)
-	     HEAD:refs/pull/123/head    <OID-A>..<OID-B>
-	+    HEAD:refs/pull/124/head    <OID-B>...<OID-A> (forced update)
-	Done
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
+	> remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
+	> remote: pre-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
+	> remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
+	> remote: proc-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/main/topic        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/for/next/topic        Z
+	> remote: proc-receive> ok refs/heads/main        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: proc-receive> ok refs/heads/foo        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: proc-receive> ok refs/heads/bar        Z
+	> remote: proc-receive> option fall-through        Z
+	> remote: proc-receive> ok refs/for/main/topic        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/for/next/topic        Z
+	> remote: proc-receive> option refname refs/pull/124/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-B>        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: proc-receive> option forced-update        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/bar        Z
+	> remote: post-receive< <COMMIT-A> <ZERO-OID> refs/heads/foo        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/heads/main        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head        Z
+	> remote: post-receive< <COMMIT-B> <COMMIT-A> refs/pull/124/head        Z
+	> To <URL/of/upstream.git>
+	>  	<COMMIT-B>:refs/heads/bar	<COMMIT-A>..<COMMIT-B>
+	> -	:refs/heads/foo	[deleted]
+	> +	HEAD:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
+	>  	HEAD:refs/pull/123/head	<COMMIT-A>..<COMMIT-B>
+	> +	HEAD:refs/pull/124/head	<COMMIT-B>...<COMMIT-A> (forced update)
+	> Done
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5411/test-0050-proc-receive-refs-with-modifiers.sh b/t/t5411/test-0050-proc-receive-refs-with-modifiers.sh
index 7214647..31989f0 100644
--- a/t/t5411/test-0050-proc-receive-refs-with-modifiers.sh
+++ b/t/t5411/test-0050-proc-receive-refs-with-modifiers.sh
@@ -29,25 +29,25 @@
 		$B:refs/heads/main \
 		v123 >out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123
-	remote: # proc-receive hook
-	remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/main
-	remote: proc-receive< <ZERO-OID> <TAG-v123> refs/tags/v123
-	remote: proc-receive> ok refs/heads/main
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <COMMIT-B>
-	remote: proc-receive> ok refs/tags/v123
-	remote: proc-receive> option refname refs/pull/124/head
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head
-	remote: post-receive< <ZERO-OID> <TAG-v123> refs/pull/124/head
-	To <URL/of/upstream.git>
-	 <OID-A>..<OID-B> <COMMIT-B> -> refs/pull/123/head
-	 * [new reference] v123 -> refs/pull/124/head
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: pre-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <COMMIT-A> <COMMIT-B> refs/heads/main        Z
+	> remote: proc-receive< <ZERO-OID> <TAG-v123> refs/tags/v123        Z
+	> remote: proc-receive> ok refs/heads/main        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <COMMIT-B>        Z
+	> remote: proc-receive> ok refs/tags/v123         Z
+	> remote: proc-receive> option refname refs/pull/124/head        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/pull/123/head        Z
+	> remote: post-receive< <ZERO-OID> <TAG-v123> refs/pull/124/head        Z
+	> To <URL/of/upstream.git>
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> refs/pull/123/head
+	>  * [new reference]   v123 -> refs/pull/124/head
 	EOF
 	test_cmp expect actual &&
 
@@ -93,32 +93,32 @@
 		$A:refs/heads/next \
 		:refs/tags/v123 >out 2>&1 &&
 	make_user_friendly_and_stable_output <out >actual &&
-	cat >expect <<-EOF &&
-	remote: # pre-receive hook
-	remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/main
-	remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/topic
-	remote: pre-receive< <TAG-v123> <ZERO-OID> refs/tags/v123
-	remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: # proc-receive hook
-	remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/main
-	remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/heads/next
-	remote: proc-receive> ok refs/heads/main
-	remote: proc-receive> option refname refs/pull/123/head
-	remote: proc-receive> option old-oid <COMMIT-A>
-	remote: proc-receive> option new-oid <ZERO-OID>
-	remote: proc-receive> ok refs/heads/next
-	remote: proc-receive> option refname refs/pull/124/head
-	remote: proc-receive> option new-oid <COMMIT-A>
-	remote: # post-receive hook
-	remote: post-receive< <COMMIT-A> <ZERO-OID> refs/pull/123/head
-	remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/topic
-	remote: post-receive< <TAG-v123> <ZERO-OID> refs/tags/v123
-	remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/124/head
-	To <URL/of/upstream.git>
-	 - [deleted] refs/pull/123/head
-	 <OID-A>..<OID-B> <COMMIT-B> -> topic
-	 - [deleted] v123
-	 * [new reference] <COMMIT-A> -> refs/pull/124/head
+	format_and_save_expect <<-EOF &&
+	> remote: # pre-receive hook        Z
+	> remote: pre-receive< <COMMIT-A> <ZERO-OID> refs/heads/main        Z
+	> remote: pre-receive< <COMMIT-A> <COMMIT-B> refs/heads/topic        Z
+	> remote: pre-receive< <TAG-v123> <ZERO-OID> refs/tags/v123        Z
+	> remote: pre-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: # proc-receive hook        Z
+	> remote: proc-receive< <COMMIT-A> <ZERO-OID> refs/heads/main        Z
+	> remote: proc-receive< <ZERO-OID> <COMMIT-A> refs/heads/next        Z
+	> remote: proc-receive> ok refs/heads/main        Z
+	> remote: proc-receive> option refname refs/pull/123/head        Z
+	> remote: proc-receive> option old-oid <COMMIT-A>        Z
+	> remote: proc-receive> option new-oid <ZERO-OID>        Z
+	> remote: proc-receive> ok refs/heads/next        Z
+	> remote: proc-receive> option refname refs/pull/124/head        Z
+	> remote: proc-receive> option new-oid <COMMIT-A>        Z
+	> remote: # post-receive hook        Z
+	> remote: post-receive< <COMMIT-A> <ZERO-OID> refs/pull/123/head        Z
+	> remote: post-receive< <COMMIT-A> <COMMIT-B> refs/heads/topic        Z
+	> remote: post-receive< <TAG-v123> <ZERO-OID> refs/tags/v123        Z
+	> remote: post-receive< <ZERO-OID> <COMMIT-A> refs/pull/124/head        Z
+	> To <URL/of/upstream.git>
+	>  - [deleted]         refs/pull/123/head
+	>    <COMMIT-A>..<COMMIT-B>  <COMMIT-B> -> topic
+	>  - [deleted]         v123
+	>  * [new reference]   <COMMIT-A> -> refs/pull/124/head
 	EOF
 	test_cmp expect actual &&
 
diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh
index 1f4cc87..8a5d349 100755
--- a/t/t5500-fetch-pack.sh
+++ b/t/t5500-fetch-pack.sh
@@ -547,7 +547,7 @@
 		cd client &&
 		test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy 2>../error-m
 	) &&
-	test_i18ncmp expect-error error-m
+	test_cmp expect-error error-m
 '
 
 test_expect_success 'test missing ref after existing' '
@@ -555,7 +555,7 @@
 		cd client &&
 		test_must_fail git fetch-pack --no-progress .. refs/heads/A refs/heads/xyzzy 2>../error-em
 	) &&
-	test_i18ncmp expect-error error-em
+	test_cmp expect-error error-em
 '
 
 test_expect_success 'test missing ref before existing' '
@@ -563,7 +563,7 @@
 		cd client &&
 		test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy refs/heads/A 2>../error-me
 	) &&
-	test_i18ncmp expect-error error-me
+	test_cmp expect-error error-me
 '
 
 test_expect_success 'test --all, --depth, and explicit head' '
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 045398b..e6e3c8f 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -59,7 +59,7 @@
 	git remote add myremote git@host.com:team/repo.git
 '
 
-test_expect_success C_LOCALE_OUTPUT 'remote information for the origin' '
+test_expect_success 'remote information for the origin' '
 	(
 		cd test &&
 		tokens_match origin "$(git remote)" &&
@@ -81,7 +81,7 @@
 	)
 '
 
-test_expect_success C_LOCALE_OUTPUT 'check remote-tracking' '
+test_expect_success 'check remote-tracking' '
 	(
 		cd test &&
 		check_remote_track origin main side &&
@@ -107,7 +107,7 @@
 	)
 '
 
-test_expect_success C_LOCALE_OUTPUT 'remove remote' '
+test_expect_success 'remove remote' '
 	(
 		cd test &&
 		tokens_match origin "$(git remote)" &&
@@ -140,8 +140,8 @@
 		git remote rm oops 2>actual2 &&
 		git branch -d foobranch &&
 		git tag -d footag &&
-		test_i18ncmp expect1 actual1 &&
-		test_i18ncmp expect2 actual2
+		test_cmp expect1 actual1 &&
+		test_cmp expect2 actual2
 	)
 '
 
@@ -150,7 +150,7 @@
 		cd test &&
 		echo "error: No such remote: '\''foo'\''" >expect &&
 		test_expect_code 2 git remote rm foo 2>actual &&
-		test_i18ncmp expect actual
+		test_cmp expect actual
 	)
 '
 
@@ -178,22 +178,22 @@
 		cd test &&
 		echo "error: No such remote: '\''foo'\''" >expect &&
 		test_expect_code 2 git remote rename foo bar 2>actual &&
-		test_i18ncmp expect actual
+		test_cmp expect actual
 	)
 '
 
-test_expect_success 'rename errors out early when when new name is invalid' '
+test_expect_success 'rename errors out early when new name is invalid' '
 	test_config remote.foo.vcs bar &&
 	echo "fatal: '\''invalid...name'\'' is not a valid remote name" >expect &&
 	test_must_fail git remote rename foo invalid...name 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'add existing foreign_vcs remote' '
 	test_config remote.foo.vcs bar &&
 	echo "error: remote foo already exists." >expect &&
 	test_expect_code 3 git remote add foo bar 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'add existing foreign_vcs remote' '
@@ -201,13 +201,13 @@
 	test_config remote.bar.vcs bar &&
 	echo "error: remote bar already exists." >expect &&
 	test_expect_code 3 git remote rename foo bar 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'add invalid foreign_vcs remote' '
 	echo "fatal: '\''invalid...name'\'' is not a valid remote name" >expect &&
 	test_must_fail git remote add invalid...name bar 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >test/expect <<EOF
@@ -267,7 +267,7 @@
 		git config --add remote.two.push refs/heads/main:refs/heads/another &&
 		git remote show origin two >output &&
 		git branch -d rebase octopus &&
-		test_i18ncmp expect output
+		test_cmp expect output
 	)
 '
 
@@ -294,7 +294,7 @@
 		cd test &&
 		git remote show -n origin >output &&
 		mv ../one.unreachable ../one &&
-		test_i18ncmp expect output
+		test_cmp expect output
 	)
 '
 
@@ -337,7 +337,7 @@
 		git fetch two "refs/heads/*:refs/remotes/two/*" &&
 		git remote set-head --auto two >output 2>&1 &&
 		echo "two/HEAD set to main" >expect &&
-		test_i18ncmp expect output
+		test_cmp expect output
 	)
 '
 
@@ -369,7 +369,7 @@
 		git remote prune --dry-run origin >output &&
 		git rev-parse refs/remotes/origin/side2 &&
 		test_must_fail git rev-parse refs/remotes/origin/side &&
-		test_i18ncmp expect output
+		test_cmp expect output
 	)
 '
 
@@ -594,6 +594,7 @@
 		cd add-no-tags &&
 		git init &&
 		git remote add -f --no-tags origin ../one &&
+		grep tagOpt .git/config &&
 		git tag -l some-tag >../test/output &&
 		git tag -l foobar-tag >../test/output &&
 		git config remote.origin.tagopt >>../test/output
@@ -756,6 +757,7 @@
 		cd four &&
 		git config branch.main.pushRemote origin &&
 		git remote rename origin upstream &&
+		grep "pushRemote" .git/config &&
 		test -z "$(git for-each-ref refs/remotes/origin)" &&
 		test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/main" &&
 		test "$(git rev-parse upstream/main)" = "$(git rev-parse main)" &&
@@ -772,6 +774,7 @@
 		cd four.1 &&
 		git config remote.pushDefault origin &&
 		git remote rename origin upstream &&
+		grep pushDefault .git/config &&
 		test "$(git config --local remote.pushDefault)" = "upstream"
 	)
 '
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index c1e0eb3..e83b2a6 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -1051,7 +1051,7 @@
 		git fetch --prune origin 2>&1 | head -n1 >../actual
 	) &&
 	echo "From ${D}/." >expect &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'branchname D/F conflict resolved by --prune' '
@@ -1097,7 +1097,7 @@
 	)
 '
 
-test_expect_success C_LOCALE_OUTPUT 'fetch aligned output' '
+test_expect_success 'fetch aligned output' '
 	git clone . full-output &&
 	test_commit looooooooooooong-tag &&
 	(
@@ -1112,7 +1112,7 @@
 	test_cmp expect actual
 '
 
-test_expect_success C_LOCALE_OUTPUT 'fetch compact output' '
+test_expect_success 'fetch compact output' '
 	git clone . compact &&
 	test_commit extraaa &&
 	(
diff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh
index 4a568a2..f53f588 100755
--- a/t/t5512-ls-remote.sh
+++ b/t/t5512-ls-remote.sh
@@ -150,7 +150,7 @@
 	# We could just as easily have used "main"; the "*" emphasizes its
 	# role as a pattern.
 	test_must_fail git ls-remote "$does_not_exist" >actual 2>&1 &&
-	test_i18ncmp exp actual
+	test_cmp exp actual
 '
 
 test_expect_success 'die with non-2 for wrong repository even with --exit-code' '
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 15262b4..0916f76 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -191,6 +191,41 @@
 	)
 '
 
+grep_wrote () {
+	object_count=$1
+	file_name=$2
+	grep 'write_pack_file/wrote.*"value":"'$1'"' $2
+}
+
+test_expect_success 'push with negotiation' '
+	# Without negotiation
+	mk_empty testrepo &&
+	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
+	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
+	echo now pushing without negotiation &&
+	GIT_TRACE2_EVENT="$(pwd)/event" git -c protocol.version=2 push testrepo refs/heads/main:refs/remotes/origin/main &&
+	grep_wrote 5 event && # 2 commits, 2 trees, 1 blob
+
+	# Same commands, but with negotiation
+	rm event &&
+	mk_empty testrepo &&
+	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
+	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
+	GIT_TRACE2_EVENT="$(pwd)/event" git -c protocol.version=2 -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main &&
+	grep_wrote 2 event # 1 commit, 1 tree
+'
+
+test_expect_success 'push with negotiation proceeds anyway even if negotiation fails' '
+	rm event &&
+	mk_empty testrepo &&
+	git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
+	git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
+	GIT_TEST_PROTOCOL_VERSION=0 GIT_TRACE2_EVENT="$(pwd)/event" \
+		git -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main 2>err &&
+	grep_wrote 5 event && # 2 commits, 2 trees, 1 blob
+	test_i18ngrep "push negotiation failed" err
+'
+
 test_expect_success 'push without wildcard' '
 	mk_empty testrepo &&
 
@@ -820,6 +855,11 @@
 	test_must_fail git push testrepo --delete main:foo
 '
 
+test_expect_success 'push --delete refuses empty string' '
+	mk_test testrepo heads/master &&
+	test_must_fail git push testrepo --delete ""
+'
+
 test_expect_success 'warn on push to HEAD of non-bare repository' '
 	mk_test testrepo heads/main &&
 	(
diff --git a/t/t5520-pull.sh b/t/t5520-pull.sh
index a094113..e2c0c51 100755
--- a/t/t5520-pull.sh
+++ b/t/t5520-pull.sh
@@ -746,14 +746,8 @@
 '
 
 test_expect_success 'setup for detecting upstreamed changes' '
-	mkdir src &&
-	(
-		cd src &&
-		git init &&
-		printf "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" > stuff &&
-		git add stuff &&
-		git commit -m "Initial revision"
-	) &&
+	test_create_repo src &&
+	test_commit -C src --printf one stuff "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" &&
 	git clone src dst &&
 	(
 		cd src &&
diff --git a/t/t5523-push-upstream.sh b/t/t5523-push-upstream.sh
index 9fbe7f7..fdb4292 100755
--- a/t/t5523-push-upstream.sh
+++ b/t/t5523-push-upstream.sh
@@ -119,4 +119,11 @@
 	test_must_be_empty output
 '
 
+test_expect_success TTY 'quiet push -u' '
+	ensure_fresh_upstream &&
+
+	test_terminal git push --quiet -u --no-progress upstream main 2>&1 | tee output &&
+	test_must_be_empty output
+'
+
 test_done
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index 11513ec1..ed11569 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -74,7 +74,7 @@
 		git fetch --recurse-submodules >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "submodule.recurse option triggers recursive fetch" '
@@ -84,7 +84,7 @@
 		git -c submodule.recurse fetch >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "fetch --recurse-submodules -j2 has the same output behaviour" '
@@ -94,7 +94,7 @@
 		GIT_TRACE="$TRASH_DIRECTORY/trace.out" git fetch --recurse-submodules -j2 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err &&
+	test_cmp expect.err actual.err &&
 	grep "2 tasks" trace.out
 '
 
@@ -124,7 +124,7 @@
 		git fetch >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "--no-recurse-submodules overrides .gitmodules config" '
@@ -155,7 +155,7 @@
 		git config --unset submodule.submodule.fetchRecurseSubmodules
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "--quiet propagates to submodules" '
@@ -183,7 +183,7 @@
 		git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "Without --dry-run propagates to submodules" '
@@ -192,7 +192,7 @@
 		git fetch --recurse-submodules >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "recurseSubmodules=true propagates into submodules" '
@@ -203,7 +203,7 @@
 		git fetch >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "--recurse-submodules overrides config in submodule" '
@@ -217,7 +217,7 @@
 		git fetch --recurse-submodules >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "--no-recurse-submodules overrides config setting" '
@@ -257,7 +257,7 @@
 		cd downstream &&
 		git fetch >../actual.out 2>../actual.err
 	) &&
-	test_i18ncmp expect.err.sub actual.err &&
+	test_cmp expect.err.sub actual.err &&
 	test_must_be_empty actual.out
 '
 
@@ -275,7 +275,7 @@
 		git fetch >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err.file actual.err
+	test_cmp expect.err.file actual.err
 '
 
 test_expect_success "Recursion picks up config in submodule" '
@@ -303,7 +303,7 @@
 			git config --unset fetch.recurseSubmodules
 		)
 	) &&
-	test_i18ncmp expect.err.sub actual.err &&
+	test_cmp expect.err.sub actual.err &&
 	test_must_be_empty actual.out
 '
 
@@ -336,7 +336,7 @@
 		cd downstream &&
 		git fetch >../actual.out 2>../actual.err
 	) &&
-	test_i18ncmp expect.err.2 actual.err &&
+	test_cmp expect.err.2 actual.err &&
 	test_must_be_empty actual.out
 '
 
@@ -392,7 +392,7 @@
 		)
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err
+	test_cmp expect.err actual.err
 '
 
 test_expect_success "'--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)" '
@@ -409,7 +409,7 @@
 		git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err.file actual.err
+	test_cmp expect.err.file actual.err
 '
 
 test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config" '
@@ -437,7 +437,7 @@
 		git config --unset fetch.recurseSubmodules
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err.2 actual.err
+	test_cmp expect.err.2 actual.err
 '
 
 test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules" '
@@ -465,7 +465,7 @@
 		git config --unset submodule.submodule.fetchRecurseSubmodules
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err.2 actual.err
+	test_cmp expect.err.2 actual.err
 '
 
 test_expect_success "don't fetch submodule when newly recorded commits are already present" '
@@ -484,7 +484,7 @@
 		git fetch >../actual.out 2>../actual.err
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err actual.err &&
+	test_cmp expect.err actual.err &&
 	(
 		cd submodule &&
 		git checkout -q sub
@@ -520,7 +520,7 @@
 		git reset --hard
 	) &&
 	test_must_be_empty actual.out &&
-	test_i18ncmp expect.err.2 actual.err &&
+	test_cmp expect.err.2 actual.err &&
 	git checkout HEAD^ -- .gitmodules &&
 	git add .gitmodules &&
 	git commit -m "new submodule restored .gitmodules"
diff --git a/t/t5541-http-push-smart.sh b/t/t5541-http-push-smart.sh
index bc5ccf2..c024fa2 100755
--- a/t/t5541-http-push-smart.sh
+++ b/t/t5541-http-push-smart.sh
@@ -118,7 +118,7 @@
 	git commit -m dev2 &&
 	test_must_fail git push origin dev2 2>act &&
 	sed -e "/^remote: /s/ *$//" <act >cmp &&
-	test_i18ncmp exp cmp
+	test_cmp exp cmp
 '
 rm -f "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git/hooks/update"
 
diff --git a/t/t5548-push-porcelain.sh b/t/t5548-push-porcelain.sh
index 5a761f3..f11ff57 100755
--- a/t/t5548-push-porcelain.sh
+++ b/t/t5548-push-porcelain.sh
@@ -14,29 +14,28 @@
 # NOTE: Never calling this function from a subshell since variable
 # assignments will disappear when subshell exits.
 create_commits_in () {
-	repo="$1" &&
-	if ! parent=$(git -C "$repo" rev-parse HEAD^{} --)
-	then
-		parent=
-	fi &&
-	T=$(git -C "$repo" write-tree) &&
+	repo="$1" && test -d "$repo" ||
+	error "Repository $repo does not exist."
 	shift &&
 	while test $# -gt 0
 	do
 		name=$1 &&
-		test_tick &&
-		if test -z "$parent"
-		then
-			oid=$(echo $name | git -C "$repo" commit-tree $T)
-		else
-			oid=$(echo $name | git -C "$repo" commit-tree -p $parent $T)
-		fi &&
-		eval $name=$oid &&
-		parent=$oid &&
-		shift ||
-		return 1
-	done &&
-	git -C "$repo" update-ref refs/heads/main $oid
+		shift &&
+		test_commit -C "$repo" --no-tag "$name" &&
+		eval $name=$(git -C "$repo" rev-parse HEAD)
+	done
+}
+
+get_abbrev_oid () {
+	oid=$1 &&
+	suffix=${oid#???????} &&
+	oid=${oid%$suffix} &&
+	if test -n "$oid"
+	then
+		echo "$oid"
+	else
+		echo "undefined-oid"
+	fi
 }
 
 # Format the output of git-push, git-show-ref and other commands to make a
@@ -45,17 +44,16 @@
 # of the output.
 make_user_friendly_and_stable_output () {
 	sed \
-		-e "s/  *\$//" \
-		-e "s/   */ /g" \
-		-e "s/	/    /g" \
-		-e "s/$A/<COMMIT-A>/g" \
-		-e "s/$B/<COMMIT-B>/g" \
+		-e "s/$(get_abbrev_oid $A)[0-9a-f]*/<COMMIT-A>/g" \
+		-e "s/$(get_abbrev_oid $B)[0-9a-f]*/<COMMIT-B>/g" \
 		-e "s/$ZERO_OID/<ZERO-OID>/g" \
-		-e "s/$(echo $A | cut -c1-7)[0-9a-f]*/<OID-A>/g" \
-		-e "s/$(echo $B | cut -c1-7)[0-9a-f]*/<OID-B>/g" \
 		-e "s#To $URL_PREFIX/upstream.git#To <URL/of/upstream.git>#"
 }
 
+format_and_save_expect () {
+	sed -e 's/^> //' -e 's/Z$//' >expect
+}
+
 setup_upstream_and_workbench () {
 	# Upstream  after setup : main(B)  foo(A)  bar(A)  baz(A)
 	# Workbench after setup : main(A)
@@ -111,14 +109,14 @@
 				next
 		) >out &&
 		make_user_friendly_and_stable_output <out >actual &&
-		cat >expect <<-EOF &&
-		To <URL/of/upstream.git>
-		=    refs/heads/baz:refs/heads/baz    [up to date]
-		     <COMMIT-B>:refs/heads/bar    <OID-A>..<OID-B>
-		-    :refs/heads/foo    [deleted]
-		+    refs/heads/main:refs/heads/main    <OID-B>...<OID-A> (forced update)
-		*    refs/heads/next:refs/heads/next    [new branch]
-		Done
+		format_and_save_expect <<-EOF &&
+		> To <URL/of/upstream.git>
+		> =	refs/heads/baz:refs/heads/baz	[up to date]
+		>  	<COMMIT-B>:refs/heads/bar	<COMMIT-A>..<COMMIT-B>
+		> -	:refs/heads/foo	[deleted]
+		> +	refs/heads/main:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
+		> *	refs/heads/next:refs/heads/next	[new branch]
+		> Done
 		EOF
 		test_cmp expect actual &&
 
@@ -148,12 +146,12 @@
 				next
 		) >out &&
 		make_user_friendly_and_stable_output <out >actual &&
-		cat >expect <<-EOF &&
+		format_and_save_expect <<-EOF &&
 		To <URL/of/upstream.git>
-		=    refs/heads/next:refs/heads/next    [up to date]
-		!    refs/heads/bar:refs/heads/bar    [rejected] (non-fast-forward)
-		!    (delete):refs/heads/baz    [rejected] (atomic push failed)
-		!    refs/heads/main:refs/heads/main    [rejected] (atomic push failed)
+		> =	refs/heads/next:refs/heads/next	[up to date]
+		> !	refs/heads/bar:refs/heads/bar	[rejected] (non-fast-forward)
+		> !	(delete):refs/heads/baz	[rejected] (atomic push failed)
+		> !	refs/heads/main:refs/heads/main	[rejected] (atomic push failed)
 		Done
 		EOF
 		test_cmp expect actual &&
@@ -168,6 +166,7 @@
 		EOF
 		test_cmp expect actual
 	'
+
 	test_expect_success "prepare pre-receive hook ($PROTOCOL)" '
 		write_script "$upstream/hooks/pre-receive" <<-EOF
 		exit 1
@@ -189,12 +188,12 @@
 				next
 		) >out &&
 		make_user_friendly_and_stable_output <out >actual &&
-		cat >expect <<-EOF &&
+		format_and_save_expect <<-EOF &&
 		To <URL/of/upstream.git>
-		=    refs/heads/next:refs/heads/next    [up to date]
-		!    refs/heads/bar:refs/heads/bar    [remote rejected] (pre-receive hook declined)
-		!    :refs/heads/baz    [remote rejected] (pre-receive hook declined)
-		!    refs/heads/main:refs/heads/main    [remote rejected] (pre-receive hook declined)
+		> =	refs/heads/next:refs/heads/next	[up to date]
+		> !	refs/heads/bar:refs/heads/bar	[remote rejected] (pre-receive hook declined)
+		> !	:refs/heads/baz	[remote rejected] (pre-receive hook declined)
+		> !	refs/heads/main:refs/heads/main	[remote rejected] (pre-receive hook declined)
 		Done
 		EOF
 		test_cmp expect actual &&
@@ -227,12 +226,12 @@
 				next
 		) >out &&
 		make_user_friendly_and_stable_output <out >actual &&
-		cat >expect <<-EOF &&
+		format_and_save_expect <<-EOF &&
 		To <URL/of/upstream.git>
-		=    refs/heads/next:refs/heads/next    [up to date]
-		-    :refs/heads/baz    [deleted]
-		     refs/heads/main:refs/heads/main    <OID-A>..<OID-B>
-		!    refs/heads/bar:refs/heads/bar    [rejected] (non-fast-forward)
+		> =	refs/heads/next:refs/heads/next	[up to date]
+		> -	:refs/heads/baz	[deleted]
+		>  	refs/heads/main:refs/heads/main	<COMMIT-A>..<COMMIT-B>
+		> !	refs/heads/bar:refs/heads/bar	[rejected] (non-fast-forward)
 		Done
 		EOF
 		test_cmp expect actual &&
diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
index 2ecb06b..6d9142a 100755
--- a/t/t5550-http-fetch-dumb.sh
+++ b/t/t5550-http-fetch-dumb.sh
@@ -227,7 +227,10 @@
 
 	git init packfileclient &&
 	p=$(cd "$HTTPD_DOCUMENT_ROOT_PATH"/repo_pack.git && ls objects/pack/pack-*.pack) &&
-	git -C packfileclient http-fetch --packfile=$ARBITRARY "$HTTPD_URL"/dumb/repo_pack.git/$p >out &&
+	git -C packfileclient http-fetch --packfile=$ARBITRARY \
+		--index-pack-arg=index-pack --index-pack-arg=--stdin \
+		--index-pack-arg=--keep \
+		"$HTTPD_URL"/dumb/repo_pack.git/$p >out &&
 
 	grep "^keep.[0-9a-f]\{16,\}$" out &&
 	cut -c6- out >packhash &&
diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh
index 984dba2..4f87d90 100755
--- a/t/t5551-http-fetch-smart.sh
+++ b/t/t5551-http-fetch-smart.sh
@@ -517,4 +517,45 @@
 	test_i18ngrep "server-side error" actual
 '
 
+test_expect_success 'http auth remembers successful credentials' '
+	rm -f .git-credentials &&
+	test_config credential.helper store &&
+
+	# the first request prompts the user...
+	set_askpass user@host pass@host &&
+	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass both user@host &&
+
+	# ...and the second one uses the stored value rather than
+	# prompting the user.
+	set_askpass bogus-user bogus-pass &&
+	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass none
+'
+
+test_expect_success 'http auth forgets bogus credentials' '
+	# seed credential store with bogus values. In real life,
+	# this would probably come from a password which worked
+	# for a previous request.
+	rm -f .git-credentials &&
+	test_config credential.helper store &&
+	{
+		echo "url=$HTTPD_URL" &&
+		echo "username=bogus" &&
+		echo "password=bogus"
+	} | git credential approve &&
+
+	# we expect this to use the bogus values and fail, never even
+	# prompting the user...
+	set_askpass user@host pass@host &&
+	test_must_fail git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass none &&
+
+	# ...but now we should have forgotten the bad value, causing
+	# us to prompt the user again.
+	set_askpass user@host pass@host &&
+	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
+	expect_askpass both user@host
+'
+
 test_done
diff --git a/t/t5562-http-backend-content-length.sh b/t/t5562-http-backend-content-length.sh
index e5d3d15..05a5806 100755
--- a/t/t5562-http-backend-content-length.sh
+++ b/t/t5562-http-backend-content-length.sh
@@ -63,7 +63,7 @@
 	hash_next=$(git commit-tree -p HEAD -m next HEAD^{tree}) &&
 	{
 		printf "%s %s refs/heads/newbranch\\0report-status object-format=%s\\n" \
-			"$ZERO_OID" "$hash_next" "$(test_oid algo)" | packetize &&
+			"$ZERO_OID" "$hash_next" "$(test_oid algo)" | packetize_raw
 		printf 0000 &&
 		echo "$hash_next" | git pack-objects --stdout
 	} >push_body &&
diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
index 82c31ab..b87ca06 100755
--- a/t/t5570-git-daemon.sh
+++ b/t/t5570-git-daemon.sh
@@ -194,7 +194,7 @@
 
 test_expect_success FAKENC 'hostname interpolation works after LF-stripping' '
 	{
-		printf "git-upload-pack /interp.git\n\0host=localhost" | packetize
+		printf "git-upload-pack /interp.git\n\0host=localhost" | packetize_raw
 		printf "0000"
 	} >input &&
 	fake_nc "$GIT_DAEMON_HOST_PORT" <input >output &&
diff --git a/t/t5572-pull-submodule.sh b/t/t5572-pull-submodule.sh
index 29537f4..4f92a11 100755
--- a/t/t5572-pull-submodule.sh
+++ b/t/t5572-pull-submodule.sh
@@ -42,8 +42,11 @@
 	$2 git pull --no-ff
 }
 
-KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
-KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+if test "$GIT_TEST_MERGE_ALGORITHM" != ort
+then
+	KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
+	KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+fi
 test_submodule_switch_func "git_pull_noff"
 
 test_expect_success 'pull --recurse-submodule setup' '
diff --git a/t/t5582-fetch-negative-refspec.sh b/t/t5582-fetch-negative-refspec.sh
index f345097..e5d2e79 100755
--- a/t/t5582-fetch-negative-refspec.sh
+++ b/t/t5582-fetch-negative-refspec.sh
@@ -240,4 +240,47 @@
 	git -C two push -v one
 '
 
+test_expect_success '--prefetch correctly modifies refspecs' '
+	git -C one config --unset-all remote.origin.fetch &&
+	git -C one config --add remote.origin.fetch ^refs/heads/bogus/ignore &&
+	git -C one config --add remote.origin.fetch "refs/tags/*:refs/tags/*" &&
+	git -C one config --add remote.origin.fetch "refs/heads/bogus/*:bogus/*" &&
+
+	git tag -a -m never never-fetch-tag HEAD &&
+
+	git branch bogus/fetched HEAD~1 &&
+	git branch bogus/ignore HEAD &&
+
+	git -C one fetch --prefetch --no-tags &&
+	test_must_fail git -C one rev-parse never-fetch-tag &&
+	git -C one rev-parse refs/prefetch/bogus/fetched &&
+	test_must_fail git -C one rev-parse refs/prefetch/bogus/ignore &&
+
+	# correctly handle when refspec set becomes empty
+	# after removing the refs/tags/* refspec.
+	git -C one config --unset-all remote.origin.fetch &&
+	git -C one config --add remote.origin.fetch "refs/tags/*:refs/tags/*" &&
+
+	git -C one fetch --prefetch --no-tags &&
+	test_must_fail git -C one rev-parse never-fetch-tag &&
+
+	# The refspec for refs that are not fully qualified
+	# are filtered multiple times.
+	git -C one rev-parse refs/prefetch/bogus/fetched &&
+	test_must_fail git -C one rev-parse refs/prefetch/bogus/ignore
+'
+
+test_expect_success '--prefetch succeeds when refspec becomes empty' '
+	git checkout bogus/fetched &&
+	test_commit extra &&
+
+	git -C one config --unset-all remote.origin.fetch &&
+	git -C one config --unset branch.main.remote &&
+	git -C one config remote.origin.fetch "+refs/tags/extra" &&
+	git -C one config remote.origin.skipfetchall true &&
+	git -C one config remote.origin.tagopt "--no-tags" &&
+
+	git -C one fetch --prefetch
+'
+
 test_done
diff --git a/t/t5600-clone-fail-cleanup.sh b/t/t5600-clone-fail-cleanup.sh
index 4a1a912..5bf1026 100755
--- a/t/t5600-clone-fail-cleanup.sh
+++ b/t/t5600-clone-fail-cleanup.sh
@@ -97,4 +97,11 @@
 	test_dir_is_empty empty-wt
 '
 
+test_expect_success 'transport failure cleans up directory' '
+	test_must_fail git clone --no-local \
+		-u "f() { git-upload-pack \"\$@\"; return 1; }; f" \
+		foo broken-clone &&
+	test_path_is_missing broken-clone
+'
+
 test_done
diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh
index 664c913..83c24fc 100755
--- a/t/t5601-clone.sh
+++ b/t/t5601-clone.sh
@@ -40,7 +40,7 @@
 
 '
 
-test_expect_success C_LOCALE_OUTPUT 'output from clone' '
+test_expect_success 'output from clone' '
 	rm -fr dst &&
 	git clone -n "file://$(pwd)/src" dst >output 2>&1 &&
 	test $(grep Clon output | wc -l) = 1
@@ -305,7 +305,8 @@
 test_expect_success 'clone checking out a tag' '
 	git clone --branch=some-tag src dst.tag &&
 	GIT_DIR=src/.git git rev-parse some-tag >expected &&
-	test_cmp expected dst.tag/.git/HEAD &&
+	GIT_DIR=dst.tag/.git git rev-parse HEAD >actual &&
+	test_cmp expected actual &&
 	GIT_DIR=dst.tag/.git git config remote.origin.fetch >fetch.actual &&
 	echo "+refs/heads/*:refs/remotes/origin/*" >fetch.expected &&
 	test_cmp fetch.expected fetch.actual
@@ -759,6 +760,15 @@
 	partial_clone "$HTTPD_DOCUMENT_ROOT_PATH/server" "$HTTPD_URL/smart/server"
 '
 
+test_expect_success 'reject cloning shallow repository using HTTP' '
+	test_when_finished "rm -rf repo" &&
+	git clone --bare --no-local --depth=1 src "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
+	test_must_fail git -c protocol.version=2 clone --reject-shallow $HTTPD_URL/smart/repo.git repo 2>err &&
+	test_i18ngrep -e "source repository is shallow, reject to clone." err &&
+
+	git clone --no-reject-shallow $HTTPD_URL/smart/repo.git repo
+'
+
 # DO NOT add non-httpd-specific tests here, because the last part of this
 # test script is only executed when httpd is available and enabled.
 
diff --git a/t/t5606-clone-options.sh b/t/t5606-clone-options.sh
index 52e5789..3a595c0 100755
--- a/t/t5606-clone-options.sh
+++ b/t/t5606-clone-options.sh
@@ -11,7 +11,8 @@
 	mkdir parent &&
 	(cd parent && git init &&
 	 echo one >file && git add file &&
-	 git commit -m one)
+	 git commit -m one) &&
+	git clone --depth=1 --no-local parent shallow-repo
 
 '
 
@@ -45,6 +46,30 @@
 
 '
 
+test_expect_success 'reject cloning shallow repository' '
+	test_when_finished "rm -rf repo" &&
+	test_must_fail git clone --reject-shallow shallow-repo out 2>err &&
+	test_i18ngrep -e "source repository is shallow, reject to clone." err &&
+
+	git clone --no-reject-shallow shallow-repo repo
+'
+
+test_expect_success 'reject cloning non-local shallow repository' '
+	test_when_finished "rm -rf repo" &&
+	test_must_fail git clone --reject-shallow --no-local shallow-repo out 2>err &&
+	test_i18ngrep -e "source repository is shallow, reject to clone." err &&
+
+	git clone --no-reject-shallow --no-local shallow-repo repo
+'
+
+test_expect_success 'succeed cloning normal repository' '
+	test_when_finished "rm -rf chilad1 child2 child3 child4 " &&
+	git clone --reject-shallow parent child1 &&
+	git clone --reject-shallow --no-local parent child2 &&
+	git clone --no-reject-shallow parent child3 &&
+	git clone --no-reject-shallow --no-local parent child4
+'
+
 test_expect_success 'uses "origin" for default remote name' '
 
 	git clone parent clone-default-origin &&
@@ -104,12 +129,20 @@
 
 '
 
+test_expect_success 'clone does not segfault with --bare and core.bare=false' '
+	test_config_global core.bare false &&
+	git clone --bare parent clone-bare &&
+	echo true >expect &&
+	git -C clone-bare rev-parse --is-bare-repository >actual &&
+	test_cmp expect actual
+'
+
 test_expect_success 'chooses correct default initial branch name' '
 	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
 	git -c init.defaultBranch=foo init --bare empty &&
 	test_config -C empty lsrefs.unborn advertise &&
 	GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
-	git -c init.defaultBranch=up clone empty whats-up &&
+	git -c init.defaultBranch=up -c protocol.version=2 clone empty whats-up &&
 	test refs/heads/foo = $(git -C whats-up symbolic-ref HEAD) &&
 	test refs/heads/foo = $(git -C whats-up config branch.foo.merge)
 '
diff --git a/t/t5611-clone-config.sh b/t/t5611-clone-config.sh
index 9f555b8..f8625f9 100755
--- a/t/t5611-clone-config.sh
+++ b/t/t5611-clone-config.sh
@@ -95,6 +95,31 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'set up shallow repository' '
+	git clone --depth=1 --no-local . shallow-repo
+'
+
+test_expect_success 'clone.rejectshallow=true should reject cloning shallow repo' '
+	test_when_finished "rm -rf out" &&
+	test_must_fail git -c clone.rejectshallow=true clone --no-local shallow-repo out 2>err &&
+	test_i18ngrep -e "source repository is shallow, reject to clone." err &&
+
+	git -c clone.rejectshallow=false clone --no-local shallow-repo out
+'
+
+test_expect_success 'option --[no-]reject-shallow override clone.rejectshallow config' '
+	test_when_finished "rm -rf out" &&
+	test_must_fail git -c clone.rejectshallow=false clone --reject-shallow --no-local shallow-repo out 2>err &&
+	test_i18ngrep -e "source repository is shallow, reject to clone." err &&
+
+	git -c clone.rejectshallow=true clone --no-reject-shallow --no-local shallow-repo out
+'
+
+test_expect_success 'clone.rejectshallow=true should succeed cloning normal repo' '
+	test_when_finished "rm -rf out" &&
+	git -c clone.rejectshallow=true clone --no-local . out
+'
+
 test_expect_success MINGW 'clone -c core.hideDotFiles' '
 	test_commit attributes .gitattributes "" &&
 	rm -rf child &&
diff --git a/t/t5612-clone-refspec.sh b/t/t5612-clone-refspec.sh
index 6a6af74..3126cfd 100755
--- a/t/t5612-clone-refspec.sh
+++ b/t/t5612-clone-refspec.sh
@@ -97,6 +97,7 @@
 test_expect_success 'clone with --no-tags' '
 	(
 		cd dir_all_no_tags &&
+		grep tagOpt .git/config &&
 		git fetch &&
 		git for-each-ref refs/tags >../actual
 	) &&
diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
index 5cb4153..cf3e82b 100755
--- a/t/t5616-partial-clone.sh
+++ b/t/t5616-partial-clone.sh
@@ -548,6 +548,14 @@
 	grep "version 2" trace
 '
 
+test_expect_success 'repack does not loosen promisor objects' '
+	rm -rf client trace &&
+	git clone --bare --filter=blob:none "file://$(pwd)/srv.bare" client &&
+	test_when_finished "rm -rf client trace" &&
+	GIT_TRACE2_PERF="$(pwd)/trace" git -C client repack -A -d &&
+	grep "loosen_unused_packed_objects/loosened:0" trace
+'
+
 . "$TEST_DIRECTORY"/lib-httpd.sh
 start_httpd
 
diff --git a/t/t5701-git-serve.sh b/t/t5701-git-serve.sh
index 509f379..930721f 100755
--- a/t/t5701-git-serve.sh
+++ b/t/t5701-git-serve.sh
@@ -16,9 +16,10 @@
 	version 2
 	agent=git/$(git version | cut -d" " -f3)
 	ls-refs=unborn
-	fetch=shallow
+	fetch=shallow wait-for-done
 	server-option
 	object-format=$(test_oid algo)
+	object-info
 	0000
 	EOF
 
@@ -240,4 +241,29 @@
 	grep "unexpected line: .this-is-not-a-command." err
 '
 
+# Test the basics of object-info
+#
+test_expect_success 'basics of object-info' '
+	test-tool pkt-line pack >in <<-EOF &&
+	command=object-info
+	object-format=$(test_oid algo)
+	0001
+	size
+	oid $(git rev-parse two:two.t)
+	oid $(git rev-parse two:two.t)
+	0000
+	EOF
+
+	cat >expect <<-EOF &&
+	size
+	$(git rev-parse two:two.t) $(wc -c <two.t | xargs)
+	$(git rev-parse two:two.t) $(wc -c <two.t | xargs)
+	0000
+	EOF
+
+	test-tool serve-v2 --stateless-rpc <in >out &&
+	test-tool pkt-line unpack <out >actual &&
+	test_cmp expect actual
+'
+
 test_done
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
index 9113d20..78de1ff 100755
--- a/t/t5702-protocol-v2.sh
+++ b/t/t5702-protocol-v2.sh
@@ -585,6 +585,65 @@
 	test_cmp expected actual
 '
 
+setup_negotiate_only () {
+	SERVER="$1"
+	URI="$2"
+
+	rm -rf "$SERVER" client
+
+	git init "$SERVER"
+	test_commit -C "$SERVER" one
+	test_commit -C "$SERVER" two
+
+	git clone "$URI" client
+	test_commit -C client three
+}
+
+test_expect_success 'usage: --negotiate-only without --negotiation-tip' '
+	SERVER="server" &&
+	URI="file://$(pwd)/server" &&
+
+	setup_negotiate_only "$SERVER" "$URI" &&
+
+	cat >err.expect <<-\EOF &&
+	fatal: --negotiate-only needs one or more --negotiate-tip=*
+	EOF
+
+	test_must_fail git -c protocol.version=2 -C client fetch \
+		--negotiate-only \
+		origin 2>err.actual &&
+	test_cmp err.expect err.actual
+'
+
+test_expect_success 'file:// --negotiate-only' '
+	SERVER="server" &&
+	URI="file://$(pwd)/server" &&
+
+	setup_negotiate_only "$SERVER" "$URI" &&
+
+	git -c protocol.version=2 -C client fetch \
+		--no-tags \
+		--negotiate-only \
+		--negotiation-tip=$(git -C client rev-parse HEAD) \
+		origin >out &&
+	COMMON=$(git -C "$SERVER" rev-parse two) &&
+	grep "$COMMON" out
+'
+
+test_expect_success 'file:// --negotiate-only with protocol v0' '
+	SERVER="server" &&
+	URI="file://$(pwd)/server" &&
+
+	setup_negotiate_only "$SERVER" "$URI" &&
+
+	test_must_fail git -c protocol.version=0 -C client fetch \
+		--no-tags \
+		--negotiate-only \
+		--negotiation-tip=$(git -C client rev-parse HEAD) \
+		origin 2>err &&
+	test_i18ngrep "negotiate-only requires protocol v2" err
+'
+
 # Test protocol v2 with 'http://' transport
 #
 . "$TEST_DIRECTORY"/lib-httpd.sh
@@ -875,11 +934,31 @@
 	test -f hfound &&
 	test -f h2found &&
 
-	# Ensure that there are exactly 6 files (3 .pack and 3 .idx).
-	ls http_child/.git/objects/pack/*.pack >packlist &&
-	ls http_child/.git/objects/pack/*.idx >idxlist &&
-	test_line_count = 3 idxlist &&
-	test_line_count = 3 packlist
+	# Ensure that there are exactly 3 packfiles with associated .idx
+	ls http_child/.git/objects/pack/*.pack \
+	    http_child/.git/objects/pack/*.idx >filelist &&
+	test_line_count = 6 filelist
+'
+
+test_expect_success 'packfile URIs with fetch instead of clone' '
+	P="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
+	rm -rf "$P" http_child log &&
+
+	git init "$P" &&
+	git -C "$P" config "uploadpack.allowsidebandall" "true" &&
+
+	echo my-blob >"$P/my-blob" &&
+	git -C "$P" add my-blob &&
+	git -C "$P" commit -m x &&
+
+	configure_exclusion "$P" my-blob >h &&
+
+	git init http_child &&
+
+	GIT_TEST_SIDEBAND_ALL=1 \
+	git -C http_child -c protocol.version=2 \
+		-c fetch.uriprotocols=http,https \
+		fetch "$HTTPD_URL/smart/http_parent"
 '
 
 test_expect_success 'fetching with valid packfile URI but invalid hash fails' '
@@ -931,11 +1010,10 @@
 		-c fetch.uriprotocols=http,https \
 		clone "$HTTPD_URL/smart/http_parent" http_child &&
 
-	# Ensure that there are exactly 4 files (2 .pack and 2 .idx).
-	ls http_child/.git/objects/pack/*.pack >packlist &&
-	ls http_child/.git/objects/pack/*.idx >idxlist &&
-	test_line_count = 2 idxlist &&
-	test_line_count = 2 packlist
+	# Ensure that there are exactly 2 packfiles with associated .idx
+	ls http_child/.git/objects/pack/*.pack \
+	    http_child/.git/objects/pack/*.idx >filelist &&
+	test_line_count = 4 filelist
 '
 
 test_expect_success 'packfile-uri with transfer.fsckobjects fails on bad object' '
@@ -968,6 +1046,100 @@
 	test_i18ngrep "invalid author/committer line - missing email" error
 '
 
+test_expect_success 'packfile-uri with transfer.fsckobjects succeeds when .gitmodules is separate from tree' '
+	P="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
+	rm -rf "$P" http_child &&
+
+	git init "$P" &&
+	git -C "$P" config "uploadpack.allowsidebandall" "true" &&
+
+	echo "[submodule libfoo]" >"$P/.gitmodules" &&
+	echo "path = include/foo" >>"$P/.gitmodules" &&
+	echo "url = git://example.com/git/lib.git" >>"$P/.gitmodules" &&
+	git -C "$P" add .gitmodules &&
+	git -C "$P" commit -m x &&
+
+	configure_exclusion "$P" .gitmodules >h &&
+
+	sane_unset GIT_TEST_SIDEBAND_ALL &&
+	git -c protocol.version=2 -c transfer.fsckobjects=1 \
+		-c fetch.uriprotocols=http,https \
+		clone "$HTTPD_URL/smart/http_parent" http_child &&
+
+	# Ensure that there are exactly 2 packfiles with associated .idx
+	ls http_child/.git/objects/pack/*.pack \
+	    http_child/.git/objects/pack/*.idx >filelist &&
+	test_line_count = 4 filelist
+'
+
+test_expect_success 'packfile-uri with transfer.fsckobjects fails when .gitmodules separate from tree is invalid' '
+	P="$HTTPD_DOCUMENT_ROOT_PATH/http_parent" &&
+	rm -rf "$P" http_child err &&
+
+	git init "$P" &&
+	git -C "$P" config "uploadpack.allowsidebandall" "true" &&
+
+	echo "[submodule \"..\"]" >"$P/.gitmodules" &&
+	echo "path = include/foo" >>"$P/.gitmodules" &&
+	echo "url = git://example.com/git/lib.git" >>"$P/.gitmodules" &&
+	git -C "$P" add .gitmodules &&
+	git -C "$P" commit -m x &&
+
+	configure_exclusion "$P" .gitmodules >h &&
+
+	sane_unset GIT_TEST_SIDEBAND_ALL &&
+	test_must_fail git -c protocol.version=2 -c transfer.fsckobjects=1 \
+		-c fetch.uriprotocols=http,https \
+		clone "$HTTPD_URL/smart/http_parent" http_child 2>err &&
+	test_i18ngrep "disallowed submodule name" err
+'
+
+test_expect_success 'http:// --negotiate-only' '
+	SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" &&
+	URI="$HTTPD_URL/smart/server" &&
+
+	setup_negotiate_only "$SERVER" "$URI" &&
+
+	git -c protocol.version=2 -C client fetch \
+		--no-tags \
+		--negotiate-only \
+		--negotiation-tip=$(git -C client rev-parse HEAD) \
+		origin >out &&
+	COMMON=$(git -C "$SERVER" rev-parse two) &&
+	grep "$COMMON" out
+'
+
+test_expect_success 'http:// --negotiate-only without wait-for-done support' '
+	SERVER="server" &&
+	URI="$HTTPD_URL/one_time_perl/server" &&
+
+	setup_negotiate_only "$SERVER" "$URI" &&
+
+	echo "s/ wait-for-done/ xxxx-xxx-xxxx/" \
+		>"$HTTPD_ROOT_PATH/one-time-perl" &&
+
+	test_must_fail git -c protocol.version=2 -C client fetch \
+		--no-tags \
+		--negotiate-only \
+		--negotiation-tip=$(git -C client rev-parse HEAD) \
+		origin 2>err &&
+	test_i18ngrep "server does not support wait-for-done" err
+'
+
+test_expect_success 'http:// --negotiate-only with protocol v0' '
+	SERVER="$HTTPD_DOCUMENT_ROOT_PATH/server" &&
+	URI="$HTTPD_URL/smart/server" &&
+
+	setup_negotiate_only "$SERVER" "$URI" &&
+
+	test_must_fail git -c protocol.version=0 -C client fetch \
+		--no-tags \
+		--negotiate-only \
+		--negotiation-tip=$(git -C client rev-parse HEAD) \
+		origin 2>err &&
+	test_i18ngrep "negotiate-only requires protocol v2" err
+'
+
 # DO NOT add non-httpd-specific tests here, because the last part of this
 # test script is only executed when httpd is available and enabled.
 
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
index 35a2f62..41d0ca0 100755
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -41,22 +41,59 @@
 	echo "$added_iso88591" | git commit -F - &&
 	head1=$(git rev-parse --verify HEAD) &&
 	head1_short=$(git rev-parse --verify --short $head1) &&
+	head1_short4=$(git rev-parse --verify --short=4 $head1) &&
 	tree1=$(git rev-parse --verify HEAD:) &&
 	tree1_short=$(git rev-parse --verify --short $tree1) &&
 	echo "$changed" > foo &&
 	echo "$changed_iso88591" | git commit -a -F - &&
 	head2=$(git rev-parse --verify HEAD) &&
 	head2_short=$(git rev-parse --verify --short $head2) &&
+	head2_short4=$(git rev-parse --verify --short=4 $head2) &&
 	tree2=$(git rev-parse --verify HEAD:) &&
 	tree2_short=$(git rev-parse --verify --short $tree2) &&
 	git config --unset i18n.commitEncoding
 '
 
-# usage: test_format name format_string [failure] <expected_output
+# usage: test_format [argument...] name format_string [failure] <expected_output
 test_format () {
+	local args=
+	while true
+	do
+		case "$1" in
+		--*)
+			args="$args $1"
+			shift;;
+		*)
+			break;;
+		esac
+	done
 	cat >expect.$1
 	test_expect_${3:-success} "format $1" "
-		git rev-list --pretty=format:'$2' main >output.$1 &&
+		git rev-list $args --pretty=format:'$2' main >output.$1 &&
+		test_cmp expect.$1 output.$1
+	"
+}
+
+# usage: test_pretty [argument...] name format_name [failure] <expected_output
+test_pretty () {
+	local args=
+	while true
+	do
+		case "$1" in
+		--*)
+			args="$args $1"
+			shift;;
+		*)
+			break;;
+		esac
+	done
+	cat >expect.$1
+	test_expect_${3:-success} "pretty $1 (without --no-commit-header)" "
+		git rev-list $args --pretty='$2' main >output.$1 &&
+		test_cmp expect.$1 output.$1
+	"
+	test_expect_${3:-success} "pretty $1 (with --no-commit-header)" "
+		git rev-list $args --no-commit-header --pretty='$2' main >output.$1 &&
 		test_cmp expect.$1 output.$1
 	"
 }
@@ -93,6 +130,20 @@
 $head1_short
 EOF
 
+test_format --no-commit-header hash-no-header %H%n%h <<EOF
+$head2
+$head2_short
+$head1
+$head1_short
+EOF
+
+test_format --abbrev-commit --abbrev=0 --no-commit-header hash-no-header-abbrev %H%n%h <<EOF
+$head2
+$head2_short4
+$head1
+$head1_short4
+EOF
+
 test_format tree %T%n%t <<EOF
 commit $head2
 $tree2
@@ -181,6 +232,31 @@
 
 EOF
 
+test_format --no-commit-header raw-body-no-header %B <<EOF
+$changed
+
+$added
+
+EOF
+
+test_pretty oneline oneline <<EOF
+$head2 $changed
+$head1 $added
+EOF
+
+test_pretty short short <<EOF
+commit $head2
+Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+
+    $changed
+
+commit $head1
+Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+
+    $added
+
+EOF
+
 test_expect_success 'basic colors' '
 	cat >expect <<-EOF &&
 	commit $head2
diff --git a/t/t6020-bundle-misc.sh b/t/t6020-bundle-misc.sh
index da5fe1b..b13e8a5 100755
--- a/t/t6020-bundle-misc.sh
+++ b/t/t6020-bundle-misc.sh
@@ -80,31 +80,46 @@
 	eval $var=$oid
 }
 
+get_abbrev_oid () {
+	oid=$1 &&
+	suffix=${oid#???????} &&
+	oid=${oid%$suffix} &&
+	if test -n "$oid"
+	then
+		echo "$oid"
+	else
+		echo "undefined-oid"
+	fi
+}
+
 # Format the output of git commands to make a user-friendly and stable
 # text.  We can easily prepare the expect text without having to worry
-# about future changes of the commit ID and spaces of the output.
+# about future changes of the commit ID.
 make_user_friendly_and_stable_output () {
 	sed \
-		-e "s/${A%${A#???????}}[0-9a-f]*/<COMMIT-A>/g" \
-		-e "s/${B%${B#???????}}[0-9a-f]*/<COMMIT-B>/g" \
-		-e "s/${C%${C#???????}}[0-9a-f]*/<COMMIT-C>/g" \
-		-e "s/${D%${D#???????}}[0-9a-f]*/<COMMIT-D>/g" \
-		-e "s/${E%${E#???????}}[0-9a-f]*/<COMMIT-E>/g" \
-		-e "s/${F%${F#???????}}[0-9a-f]*/<COMMIT-F>/g" \
-		-e "s/${G%${G#???????}}[0-9a-f]*/<COMMIT-G>/g" \
-		-e "s/${H%${H#???????}}[0-9a-f]*/<COMMIT-H>/g" \
-		-e "s/${I%${I#???????}}[0-9a-f]*/<COMMIT-I>/g" \
-		-e "s/${J%${J#???????}}[0-9a-f]*/<COMMIT-J>/g" \
-		-e "s/${K%${K#???????}}[0-9a-f]*/<COMMIT-K>/g" \
-		-e "s/${L%${L#???????}}[0-9a-f]*/<COMMIT-L>/g" \
-		-e "s/${M%${M#???????}}[0-9a-f]*/<COMMIT-M>/g" \
-		-e "s/${N%${N#???????}}[0-9a-f]*/<COMMIT-N>/g" \
-		-e "s/${O%${O#???????}}[0-9a-f]*/<COMMIT-O>/g" \
-		-e "s/${P%${P#???????}}[0-9a-f]*/<COMMIT-P>/g" \
-		-e "s/${TAG1%${TAG1#???????}}[0-9a-f]*/<TAG-1>/g" \
-		-e "s/${TAG2%${TAG2#???????}}[0-9a-f]*/<TAG-2>/g" \
-		-e "s/${TAG3%${TAG3#???????}}[0-9a-f]*/<TAG-3>/g" \
-		-e "s/ *\$//"
+		-e "s/$(get_abbrev_oid $A)[0-9a-f]*/<COMMIT-A>/g" \
+		-e "s/$(get_abbrev_oid $B)[0-9a-f]*/<COMMIT-B>/g" \
+		-e "s/$(get_abbrev_oid $C)[0-9a-f]*/<COMMIT-C>/g" \
+		-e "s/$(get_abbrev_oid $D)[0-9a-f]*/<COMMIT-D>/g" \
+		-e "s/$(get_abbrev_oid $E)[0-9a-f]*/<COMMIT-E>/g" \
+		-e "s/$(get_abbrev_oid $F)[0-9a-f]*/<COMMIT-F>/g" \
+		-e "s/$(get_abbrev_oid $G)[0-9a-f]*/<COMMIT-G>/g" \
+		-e "s/$(get_abbrev_oid $H)[0-9a-f]*/<COMMIT-H>/g" \
+		-e "s/$(get_abbrev_oid $I)[0-9a-f]*/<COMMIT-I>/g" \
+		-e "s/$(get_abbrev_oid $J)[0-9a-f]*/<COMMIT-J>/g" \
+		-e "s/$(get_abbrev_oid $K)[0-9a-f]*/<COMMIT-K>/g" \
+		-e "s/$(get_abbrev_oid $L)[0-9a-f]*/<COMMIT-L>/g" \
+		-e "s/$(get_abbrev_oid $M)[0-9a-f]*/<COMMIT-M>/g" \
+		-e "s/$(get_abbrev_oid $N)[0-9a-f]*/<COMMIT-N>/g" \
+		-e "s/$(get_abbrev_oid $O)[0-9a-f]*/<COMMIT-O>/g" \
+		-e "s/$(get_abbrev_oid $P)[0-9a-f]*/<COMMIT-P>/g" \
+		-e "s/$(get_abbrev_oid $TAG1)[0-9a-f]*/<TAG-1>/g" \
+		-e "s/$(get_abbrev_oid $TAG2)[0-9a-f]*/<TAG-2>/g" \
+		-e "s/$(get_abbrev_oid $TAG3)[0-9a-f]*/<TAG-3>/g"
+}
+
+format_and_save_expect () {
+	sed -e 's/Z$//' >expect
 }
 
 #            (C)   (D, pull/1/head, topic/1)
@@ -175,17 +190,17 @@
 	cat >expect <<-\EOF &&
 	<COMMIT-P> refs/heads/main
 	EOF
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	git bundle verify special-rev.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	cat >expect <<-\EOF &&
+	format_and_save_expect <<-\EOF &&
 	The bundle contains this ref:
 	<COMMIT-P> refs/heads/main
 	The bundle requires this ref:
-	<COMMIT-O>
+	<COMMIT-O> Z
 	EOF
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count special-rev.bdl 3
 '
@@ -200,14 +215,14 @@
 
 	git bundle verify max-count.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	cat >expect <<-\EOF &&
+	format_and_save_expect <<-\EOF &&
 	The bundle contains these 2 refs:
 	<COMMIT-P> refs/heads/main
 	<TAG-1> refs/tags/v1
 	The bundle requires this ref:
-	<COMMIT-O>
+	<COMMIT-O> Z
 	EOF
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count max-count.bdl 4
 '
@@ -225,7 +240,7 @@
 
 	git bundle verify since.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	cat >expect <<-\EOF &&
+	format_and_save_expect <<-\EOF &&
 	The bundle contains these 5 refs:
 	<COMMIT-P> refs/heads/main
 	<COMMIT-N> refs/heads/release
@@ -233,10 +248,10 @@
 	<TAG-3> refs/tags/v3
 	<COMMIT-P> HEAD
 	The bundle requires these 2 refs:
-	<COMMIT-M>
-	<COMMIT-K>
+	<COMMIT-M> Z
+	<COMMIT-K> Z
 	EOF
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count --thin since.bdl 13
 '
@@ -262,11 +277,11 @@
 	# verify bundle, which has no prerequisites
 	git bundle verify 1.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	git bundle verify stdin-1.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count       1.bdl 24 &&
 	test_bundle_object_count stdin-1.bdl 24
@@ -293,22 +308,22 @@
 		--stdin \
 		release <input &&
 
-	cat >expect <<-\EOF &&
+	format_and_save_expect <<-\EOF &&
 	The bundle contains this ref:
 	<COMMIT-N> refs/heads/release
 	The bundle requires these 3 refs:
-	<COMMIT-D>
-	<COMMIT-E>
-	<COMMIT-G>
+	<COMMIT-D> Z
+	<COMMIT-E> Z
+	<COMMIT-G> Z
 	EOF
 
 	git bundle verify 2.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	git bundle verify stdin-2.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count       2.bdl 16 &&
 	test_bundle_object_count stdin-2.bdl 16
@@ -317,20 +332,20 @@
 test_expect_success 'fail to verify bundle without prerequisites' '
 	git init --bare test1.git &&
 
-	cat >expect <<-\EOF &&
+	format_and_save_expect <<-\EOF &&
 	error: Repository lacks these prerequisite commits:
-	error: <COMMIT-D>
-	error: <COMMIT-E>
-	error: <COMMIT-G>
+	error: <COMMIT-D> Z
+	error: <COMMIT-E> Z
+	error: <COMMIT-G> Z
 	EOF
 
 	test_must_fail git -C test1.git bundle verify ../2.bdl 2>&1 |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_must_fail git -C test1.git bundle verify ../stdin-2.bdl 2>&1 |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'create bundle 3 - two refs, same object' '
@@ -352,22 +367,22 @@
 		--stdin \
 		main HEAD <input &&
 
-	cat >expect <<-\EOF &&
+	format_and_save_expect <<-\EOF &&
 	The bundle contains these 2 refs:
 	<COMMIT-P> refs/heads/main
 	<COMMIT-P> HEAD
 	The bundle requires these 2 refs:
-	<COMMIT-M>
-	<COMMIT-K>
+	<COMMIT-M> Z
+	<COMMIT-K> Z
 	EOF
 
 	git bundle verify 3.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	git bundle verify stdin-3.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count       3.bdl 4 &&
 	test_bundle_object_count stdin-3.bdl 4
@@ -404,11 +419,11 @@
 
 	git bundle verify 4.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	git bundle verify stdin-4.bdl |
 		make_user_friendly_and_stable_output >actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 
 	test_bundle_object_count       4.bdl 3 &&
 	test_bundle_object_count stdin-4.bdl 3
diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh
index 7bcde05..a1baf4e 100755
--- a/t/t6030-bisect-porcelain.sh
+++ b/t/t6030-bisect-porcelain.sh
@@ -578,9 +578,9 @@
 	test "$para3" = "$PARA_HASH3"
 '
 
-test_expect_success 'erroring out when using bad path parameters' '
+test_expect_success 'erroring out when using bad path arguments' '
 	test_must_fail git bisect start $PARA_HASH7 $HASH1 -- foobar 2> error.txt &&
-	test_i18ngrep "bad path parameters" error.txt
+	test_i18ngrep "bad path arguments" error.txt
 '
 
 test_expect_success 'test bisection on bare repo - --no-checkout specified' '
@@ -829,7 +829,7 @@
 	test_must_fail git bisect terms 1 2 &&
 	test_must_fail git bisect terms 2>actual &&
 	echo "error: no terms defined" >expected &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'bisect terms shows good/bad after start' '
@@ -903,7 +903,7 @@
 	Your current terms are two for the old state
 	and one for the new state.
 	EOF
-	test_i18ncmp expected actual &&
+	test_cmp expected actual &&
 	git bisect terms --term-bad >actual &&
 	echo one >expected &&
 	test_cmp expected actual &&
@@ -922,6 +922,17 @@
 	test_cmp expected actual
 '
 
+# Bisect is started with --term-new and --term-old arguments,
+# then skip. The HEAD should be changed.
+test_expect_success 'bisect skip works with --term*' '
+	git bisect reset &&
+	git bisect start --term-new=fixed --term-old=unfixed HEAD $HASH1 &&
+	hash_skipped_from=$(git rev-parse --verify HEAD) &&
+	git bisect skip &&
+	hash_skipped_to=$(git rev-parse --verify HEAD) &&
+	test "$hash_skipped_from" != "$hash_skipped_to"
+'
+
 test_expect_success 'git bisect reset cleans bisection state properly' '
 	git bisect reset &&
 	git bisect start &&
@@ -939,4 +950,16 @@
 	test_path_is_missing ".git/BISECT_START"
 '
 
+test_expect_success 'bisect handles annotated tags' '
+	test_commit commit-one &&
+	git tag -m foo tag-one &&
+	test_commit commit-two &&
+	git tag -m foo tag-two &&
+	git bisect start &&
+	git bisect good tag-one &&
+	git bisect bad tag-two >output &&
+	bad=$(git rev-parse --verify tag-two^{commit}) &&
+	grep "$bad is the first bad commit" output
+'
+
 test_done
diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh
index a160b2b..a313849 100755
--- a/t/t6040-tracking-info.sh
+++ b/t/t6040-tracking-info.sh
@@ -57,7 +57,7 @@
 		git branch -v
 	) |
 	sed -n -e "$t6040_script" >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -75,7 +75,7 @@
 		git branch -vv
 	) |
 	sed -n -e "$t6040_script" >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'checkout (diverged from upstream)' '
@@ -146,7 +146,7 @@
 		git checkout b1 >/dev/null &&
 		git status -s -b | head -1
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -159,7 +159,7 @@
 		git checkout b1 >/dev/null &&
 		git status -s -b --no-ahead-behind | head -1
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -172,7 +172,7 @@
 		git checkout b1 >/dev/null &&
 		git -c status.aheadbehind=false status -s -b | head -1
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -187,7 +187,7 @@
 		git checkout b1 >/dev/null &&
 		git status --long -b | head -3
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'status --long --branch' '
@@ -196,7 +196,7 @@
 		git checkout b1 >/dev/null &&
 		git -c status.aheadbehind=true status --long -b | head -3
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -210,7 +210,7 @@
 		git checkout b1 >/dev/null &&
 		git status --long -b --no-ahead-behind | head -2
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'status.aheadbehind=false status --long --branch' '
@@ -219,7 +219,7 @@
 		git checkout b1 >/dev/null &&
 		git -c status.aheadbehind=false status --long -b | head -2
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -232,7 +232,7 @@
 		git checkout b5 >/dev/null &&
 		git status -s -b | head -1
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<\EOF
@@ -245,7 +245,7 @@
 		git checkout b6 >/dev/null &&
 		git status -s -b | head -1
 	) >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'fail to track lightweight tags' '
diff --git a/t/t6041-bisect-submodule.sh b/t/t6041-bisect-submodule.sh
index df1eff0..82013fc 100755
--- a/t/t6041-bisect-submodule.sh
+++ b/t/t6041-bisect-submodule.sh
@@ -8,7 +8,7 @@
 git_bisect () {
 	git status -su >expect &&
 	ls -1pR * >>expect &&
-	tar cf "$TRASH_DIRECTORY/tmp.tar" * &&
+	"$TAR" cf "$TRASH_DIRECTORY/tmp.tar" * &&
 	GOOD=$(git rev-parse --verify HEAD) &&
 	may_only_be_test_must_fail "$2" &&
 	$2 git checkout "$1" &&
@@ -25,7 +25,7 @@
 	git bisect start &&
 	git bisect good $GOOD &&
 	rm -rf * &&
-	tar xf "$TRASH_DIRECTORY/tmp.tar" &&
+	"$TAR" xf "$TRASH_DIRECTORY/tmp.tar" &&
 	git status -su >actual &&
 	ls -1pR * >>actual &&
 	test_cmp expect actual &&
diff --git a/t/t6112-rev-list-filters-objects.sh b/t/t6112-rev-list-filters-objects.sh
index 31457d1..4ade105 100755
--- a/t/t6112-rev-list-filters-objects.sh
+++ b/t/t6112-rev-list-filters-objects.sh
@@ -159,6 +159,78 @@
 	test_must_be_empty observed
 '
 
+# Test object:type=<type> filter.
+
+test_expect_success 'setup object-type' '
+	test_create_repo object-type &&
+	test_commit --no-tag -C object-type message blob &&
+	git -C object-type tag tag -m tag-message
+'
+
+test_expect_success 'verify object:type= fails with invalid type' '
+	test_must_fail git -C object-type rev-list --objects --filter=object:type= HEAD &&
+	test_must_fail git -C object-type rev-list --objects --filter=object:type=invalid HEAD
+'
+
+test_expect_success 'verify object:type=blob prints blob and commit' '
+	git -C object-type rev-parse HEAD >expected &&
+	printf "%s blob\n" $(git -C object-type rev-parse HEAD:blob) >>expected &&
+	git -C object-type rev-list --objects --filter=object:type=blob HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=tree prints tree and commit' '
+	(
+		git -C object-type rev-parse HEAD &&
+		printf "%s \n" $(git -C object-type rev-parse HEAD^{tree})
+	) >expected &&
+	git -C object-type rev-list --objects --filter=object:type=tree HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=commit prints commit' '
+	git -C object-type rev-parse HEAD >expected &&
+	git -C object-type rev-list --objects --filter=object:type=commit HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=tag prints tag' '
+	(
+		git -C object-type rev-parse HEAD &&
+		printf "%s tag\n" $(git -C object-type rev-parse tag)
+	) >expected &&
+	git -C object-type rev-list --objects --filter=object:type=tag tag >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=blob prints only blob with --filter-provided-objects' '
+	printf "%s blob\n" $(git -C object-type rev-parse HEAD:blob) >expected &&
+	git -C object-type rev-list --objects \
+		--filter=object:type=blob --filter-provided-objects HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=tree prints only tree with --filter-provided-objects' '
+	printf "%s \n" $(git -C object-type rev-parse HEAD^{tree}) >expected &&
+	git -C object-type rev-list --objects \
+		--filter=object:type=tree HEAD --filter-provided-objects >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=commit prints only commit with --filter-provided-objects' '
+	git -C object-type rev-parse HEAD >expected &&
+	git -C object-type rev-list --objects \
+		--filter=object:type=commit --filter-provided-objects HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'verify object:type=tag prints only tag with --filter-provided-objects' '
+	printf "%s tag\n" $(git -C object-type rev-parse tag) >expected &&
+	git -C object-type rev-list --objects \
+		--filter=object:type=tag --filter-provided-objects tag >actual &&
+	test_cmp expected actual
+'
+
 # Test sparse:path=<path> filter.
 # !!!!
 # NOTE: sparse:path filter support has been dropped for security reasons,
diff --git a/t/t6113-rev-list-bitmap-filters.sh b/t/t6113-rev-list-bitmap-filters.sh
index 3f88994..4d8e091 100755
--- a/t/t6113-rev-list-bitmap-filters.sh
+++ b/t/t6113-rev-list-bitmap-filters.sh
@@ -10,7 +10,8 @@
 	test_commit much-larger-blob-one &&
 	git repack -adb &&
 	test_commit two &&
-	test_commit much-larger-blob-two
+	test_commit much-larger-blob-two &&
+	git tag tag
 '
 
 test_expect_success 'filters fallback to non-bitmap traversal' '
@@ -75,4 +76,69 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'object:type filter' '
+	git rev-list --objects --filter=object:type=tag tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter=object:type=tag tag >actual &&
+	test_cmp expect actual &&
+
+	git rev-list --objects --filter=object:type=commit tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter=object:type=commit tag >actual &&
+	test_bitmap_traversal expect actual &&
+
+	git rev-list --objects --filter=object:type=tree tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter=object:type=tree tag >actual &&
+	test_bitmap_traversal expect actual &&
+
+	git rev-list --objects --filter=object:type=blob tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter=object:type=blob tag >actual &&
+	test_bitmap_traversal expect actual
+'
+
+test_expect_success 'object:type filter with --filter-provided-objects' '
+	git rev-list --objects --filter-provided-objects --filter=object:type=tag tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter-provided-objects --filter=object:type=tag tag >actual &&
+	test_cmp expect actual &&
+
+	git rev-list --objects --filter-provided-objects --filter=object:type=commit tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter-provided-objects --filter=object:type=commit tag >actual &&
+	test_bitmap_traversal expect actual &&
+
+	git rev-list --objects --filter-provided-objects --filter=object:type=tree tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter-provided-objects --filter=object:type=tree tag >actual &&
+	test_bitmap_traversal expect actual &&
+
+	git rev-list --objects --filter-provided-objects --filter=object:type=blob tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter-provided-objects --filter=object:type=blob tag >actual &&
+	test_bitmap_traversal expect actual
+'
+
+test_expect_success 'combine filter' '
+	git rev-list --objects --filter=blob:limit=1000 --filter=object:type=blob tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter=blob:limit=1000 --filter=object:type=blob tag >actual &&
+	test_bitmap_traversal expect actual
+'
+
+test_expect_success 'combine filter with --filter-provided-objects' '
+	git rev-list --objects --filter-provided-objects --filter=blob:limit=1000 --filter=object:type=blob tag >expect &&
+	git rev-list --use-bitmap-index \
+		     --objects --filter-provided-objects --filter=blob:limit=1000 --filter=object:type=blob tag >actual &&
+	test_bitmap_traversal expect actual &&
+
+	git cat-file --batch-check="%(objecttype) %(objectsize)" <actual >objects &&
+	while read objecttype objectsize
+	do
+		test "$objecttype" = blob || return 1
+		test "$objectsize" -le 1000 || return 1
+	done <objects
+'
+
 test_done
diff --git a/t/t6114-keep-packs.sh b/t/t6114-keep-packs.sh
new file mode 100755
index 0000000..9239d8a
--- /dev/null
+++ b/t/t6114-keep-packs.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+test_description='rev-list with .keep packs'
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	test_commit loose &&
+	test_commit packed &&
+	test_commit kept &&
+
+	KEPT_PACK=$(git pack-objects --revs .git/objects/pack/pack <<-EOF
+	refs/tags/kept
+	^refs/tags/packed
+	EOF
+	) &&
+	MISC_PACK=$(git pack-objects --revs .git/objects/pack/pack <<-EOF
+	refs/tags/packed
+	^refs/tags/loose
+	EOF
+	) &&
+
+	touch .git/objects/pack/pack-$KEPT_PACK.keep
+'
+
+rev_list_objects () {
+	git rev-list "$@" >out &&
+	sort out
+}
+
+idx_objects () {
+	git show-index <$1 >expect-idx &&
+	cut -d" " -f2 <expect-idx | sort
+}
+
+test_expect_success '--no-kept-objects excludes trees and blobs in .keep packs' '
+	rev_list_objects --objects --all --no-object-names >kept &&
+	rev_list_objects --objects --all --no-object-names --no-kept-objects >no-kept &&
+
+	idx_objects .git/objects/pack/pack-$KEPT_PACK.idx >expect &&
+	comm -3 kept no-kept >actual &&
+
+	test_cmp expect actual
+'
+
+test_expect_success '--no-kept-objects excludes kept non-MIDX object' '
+	test_config core.multiPackIndex true &&
+
+	# Create a pack with just the commit object in pack, and do not mark it
+	# as kept (even though it appears in $KEPT_PACK, which does have a .keep
+	# file).
+	MIDX_PACK=$(git pack-objects .git/objects/pack/pack <<-EOF
+	$(git rev-parse kept)
+	EOF
+	) &&
+
+	# Write a MIDX containing all packs, but use the version of the commit
+	# at "kept" in a non-kept pack by touching $MIDX_PACK.
+	touch .git/objects/pack/pack-$MIDX_PACK.pack &&
+	git multi-pack-index write &&
+
+	rev_list_objects --objects --no-object-names --no-kept-objects HEAD >actual &&
+	(
+		idx_objects .git/objects/pack/pack-$MISC_PACK.idx &&
+		git rev-list --objects --no-object-names refs/tags/loose
+	) | sort >expect &&
+	test_cmp expect actual
+'
+
+test_done
diff --git a/t/t6115-rev-list-du.sh b/t/t6115-rev-list-du.sh
new file mode 100755
index 0000000..b4aef32
--- /dev/null
+++ b/t/t6115-rev-list-du.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+test_description='basic tests of rev-list --disk-usage'
+. ./test-lib.sh
+
+# we want a mix of reachable and unreachable, as well as
+# objects in the bitmapped pack and some outside of it
+test_expect_success 'set up repository' '
+	test_commit --no-tag one &&
+	test_commit --no-tag two &&
+	git repack -adb &&
+	git reset --hard HEAD^ &&
+	test_commit --no-tag three &&
+	test_commit --no-tag four &&
+	git reset --hard HEAD^
+'
+
+# We don't want to hardcode sizes, because they depend on the exact details of
+# packing, zlib, etc. We'll assume that the regular rev-list and cat-file
+# machinery works and compare the --disk-usage output to that.
+disk_usage_slow () {
+	git rev-list --no-object-names "$@" |
+	git cat-file --batch-check="%(objectsize:disk)" |
+	perl -lne '$total += $_; END { print $total}'
+}
+
+# check behavior with given rev-list options; note that
+# whitespace is not preserved in args
+check_du () {
+	args=$*
+
+	test_expect_success "generate expected size ($args)" "
+		disk_usage_slow $args >expect
+	"
+
+	test_expect_success "rev-list --disk-usage without bitmaps ($args)" "
+		git rev-list --disk-usage $args >actual &&
+		test_cmp expect actual
+	"
+
+	test_expect_success "rev-list --disk-usage with bitmaps ($args)" "
+		git rev-list --disk-usage --use-bitmap-index $args >actual &&
+		test_cmp expect actual
+	"
+}
+
+check_du HEAD
+check_du --objects HEAD
+check_du --objects HEAD^..HEAD
+
+test_done
diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
index 546796f..1a501ee 100755
--- a/t/t6120-describe.sh
+++ b/t/t6120-describe.sh
@@ -17,103 +17,84 @@
 . ./test-lib.sh
 
 check_describe () {
+	indir= &&
+	while test $# != 0
+	do
+		case "$1" in
+		-C)
+			indir="$2"
+			shift
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done &&
+	indir=${indir:+"$indir"/} &&
 	expect="$1"
 	shift
 	describe_opts="$@"
 	test_expect_success "describe $describe_opts" '
-	R=$(git describe $describe_opts 2>err.actual) &&
-	case "$R" in
-	$expect)	echo happy ;;
-	*)	echo "Oops - $R is not $expect" &&
-		false ;;
-	esac
+		git ${indir:+ -C "$indir"} describe $describe_opts >raw &&
+		sed -e "s/-g[0-9a-f]*\$/-gHASH/" <raw >actual &&
+		echo "$expect" >expect &&
+		test_cmp expect actual
 	'
 }
 
 test_expect_success setup '
+	test_commit initial file one &&
+	test_commit second file two &&
+	test_commit third file three &&
+	test_commit --annotate A file A &&
+	test_commit c file c &&
 
-	test_tick &&
-	echo one >file && git add file && git commit -m initial &&
-	one=$(git rev-parse HEAD) &&
-
-	git describe --always HEAD &&
-
-	test_tick &&
-	echo two >file && git add file && git commit -m second &&
-	two=$(git rev-parse HEAD) &&
-
-	test_tick &&
-	echo three >file && git add file && git commit -m third &&
-
-	test_tick &&
-	echo A >file && git add file && git commit -m A &&
-	test_tick &&
-	git tag -a -m A A &&
-
-	test_tick &&
-	echo c >file && git add file && git commit -m c &&
-	test_tick &&
-	git tag c &&
-
-	git reset --hard $two &&
-	test_tick &&
-	echo B >side && git add side && git commit -m B &&
-	test_tick &&
-	git tag -a -m B B &&
+	git reset --hard second &&
+	test_commit --annotate B side B &&
 
 	test_tick &&
 	git merge -m Merged c &&
 	merged=$(git rev-parse HEAD) &&
 
-	git reset --hard $two &&
-	test_tick &&
-	echo D >another && git add another && git commit -m D &&
-	test_tick &&
-	git tag -a -m D D &&
+	git reset --hard second &&
+	test_commit --no-tag D another D &&
+
 	test_tick &&
 	git tag -a -m R R &&
 
-	test_tick &&
-	echo DD >another && git commit -a -m another &&
-
-	test_tick &&
-	git tag e &&
-
-	test_tick &&
-	echo DDD >another && git commit -a -m "yet another" &&
+	test_commit e another DD &&
+	test_commit --no-tag "yet another" another DDD &&
 
 	test_tick &&
 	git merge -m Merged $merged &&
 
-	test_tick &&
-	echo X >file && echo X >side && git add file side &&
-	git commit -m x
-
+	test_commit --no-tag x file
 '
 
-check_describe A-* HEAD
-check_describe A-* HEAD^
-check_describe R-* HEAD^^
-check_describe A-* HEAD^^2
+check_describe A-8-gHASH HEAD
+check_describe A-7-gHASH HEAD^
+check_describe R-2-gHASH HEAD^^
+check_describe A-3-gHASH HEAD^^2
 check_describe B HEAD^^2^
-check_describe R-* HEAD^^^
+check_describe R-1-gHASH HEAD^^^
 
-check_describe c-* --tags HEAD
-check_describe c-* --tags HEAD^
-check_describe e-* --tags HEAD^^
-check_describe c-* --tags HEAD^^2
+check_describe c-7-gHASH --tags HEAD
+check_describe c-6-gHASH --tags HEAD^
+check_describe e-1-gHASH --tags HEAD^^
+check_describe c-2-gHASH --tags HEAD^^2
 check_describe B --tags HEAD^^2^
 check_describe e --tags HEAD^^^
 
 check_describe heads/main --all HEAD
-check_describe tags/c-* --all HEAD^
+check_describe tags/c-6-gHASH --all HEAD^
 check_describe tags/e --all HEAD^^^
 
-check_describe B-0-* --long HEAD^^2^
-check_describe A-3-* --long HEAD^^2
+check_describe B-0-gHASH --long HEAD^^2^
+check_describe A-3-gHASH --long HEAD^^2
 
-check_describe c-7-* --tags
-check_describe e-3-* --first-parent --tags
+check_describe c-7-gHASH --tags
+check_describe e-3-gHASH --first-parent --tags
 
 test_expect_success 'describe --contains defaults to HEAD without commit-ish' '
 	echo "A^0" >expect &&
@@ -124,20 +105,17 @@
 '
 
 check_describe tags/A --all A^0
-test_expect_success 'no warning was displayed for A' '
-	test_must_be_empty err.actual
-'
 
-test_expect_success 'rename tag A to Q locally' '
-	mv .git/refs/tags/A .git/refs/tags/Q
-'
-cat - >err.expect <<EOF
-warning: tag 'Q' is externally known as 'A'
-EOF
-check_describe A-* HEAD
-test_expect_success 'warning was displayed for Q' '
-	test_i18ncmp err.expect err.actual
-'
+test_expect_success 'renaming tag A to Q locally produces a warning' "
+	mv .git/refs/tags/A .git/refs/tags/Q &&
+	git describe HEAD 2>err >out &&
+	cat >expected <<-\EOF &&
+	warning: tag 'Q' is externally known as 'A'
+	EOF
+	test_cmp expected err &&
+	grep -E '^A-8-g[0-9a-f]+$' out
+"
+
 test_expect_success 'misnamed annotated tag forces long output' '
 	description=$(git describe --no-long Q^0) &&
 	expr "$description" : "A-0-g[0-9a-f]*$" &&
@@ -161,46 +139,46 @@
 '
 
 test_expect_success 'pack tag refs' 'git pack-refs'
-check_describe A-* HEAD
+check_describe A-8-gHASH HEAD
 
 test_expect_success 'describe works from outside repo using --git-dir' '
 	git clone --bare "$TRASH_DIRECTORY" "$TRASH_DIRECTORY/bare" &&
 	git --git-dir "$TRASH_DIRECTORY/bare" describe >out &&
-	grep -E "^A-[1-9][0-9]?-g[0-9a-f]+$" out
+	grep -E "^A-8-g[0-9a-f]+$" out
 '
 
-check_describe "A-*[0-9a-f]" --dirty
+check_describe "A-8-gHASH" --dirty
 
 test_expect_success 'describe --dirty with --work-tree' '
 	(
 		cd "$TEST_DIRECTORY" &&
 		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
 	) &&
-	grep -E "^A-[1-9][0-9]?-g[0-9a-f]+$" out
+	grep -E "^A-8-g[0-9a-f]+$" out
 '
 
 test_expect_success 'set-up dirty work tree' '
 	echo >>file
 '
 
-check_describe "A-*[0-9a-f]-dirty" --dirty
-
 test_expect_success 'describe --dirty with --work-tree (dirty)' '
+	git describe --dirty >expected &&
 	(
 		cd "$TEST_DIRECTORY" &&
 		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty >"$TRASH_DIRECTORY/out"
 	) &&
-	grep -E "^A-[1-9][0-9]?-g[0-9a-f]+-dirty$" out
+	grep -E "^A-8-g[0-9a-f]+-dirty$" out &&
+	test_cmp expected out
 '
 
-check_describe "A-*[0-9a-f].mod" --dirty=.mod
-
 test_expect_success 'describe --dirty=.mod with --work-tree (dirty)' '
+	git describe --dirty=.mod >expected &&
 	(
 		cd "$TEST_DIRECTORY" &&
 		git --git-dir "$TRASH_DIRECTORY/.git" --work-tree "$TRASH_DIRECTORY" describe --dirty=.mod >"$TRASH_DIRECTORY/out"
 	) &&
-	grep -E "^A-[1-9][0-9]?-g[0-9a-f]+.mod$" out
+	grep -E "^A-8-g[0-9a-f]+.mod$" out &&
+	test_cmp expected out
 '
 
 test_expect_success 'describe --dirty HEAD' '
@@ -223,21 +201,21 @@
 
 '
 
-check_describe "test-annotated-*" --match="test-*"
+check_describe "test-annotated-3-gHASH" --match="test-*"
 
-check_describe "test1-lightweight-*" --tags --match="test1-*"
+check_describe "test1-lightweight-2-gHASH" --tags --match="test1-*"
 
-check_describe "test2-lightweight-*" --tags --match="test2-*"
+check_describe "test2-lightweight-1-gHASH" --tags --match="test2-*"
 
-check_describe "test2-lightweight-*" --long --tags --match="test2-*" HEAD^
+check_describe "test2-lightweight-0-gHASH" --long --tags --match="test2-*" HEAD^
 
-check_describe "test2-lightweight-*" --long --tags --match="test1-*" --match="test2-*" HEAD^
+check_describe "test2-lightweight-0-gHASH" --long --tags --match="test1-*" --match="test2-*" HEAD^
 
-check_describe "test2-lightweight-*" --long --tags --match="test1-*" --no-match --match="test2-*" HEAD^
+check_describe "test2-lightweight-0-gHASH" --long --tags --match="test1-*" --no-match --match="test2-*" HEAD^
 
-check_describe "test1-lightweight-*" --long --tags --match="test1-*" --match="test3-*" HEAD
+check_describe "test1-lightweight-2-gHASH" --long --tags --match="test1-*" --match="test3-*" HEAD
 
-check_describe "test1-lightweight-*" --long --tags --match="test3-*" --match="test1-*" HEAD
+check_describe "test1-lightweight-2-gHASH" --long --tags --match="test3-*" --match="test1-*" HEAD
 
 test_expect_success 'set-up branches' '
 	git branch branch_A A &&
@@ -247,11 +225,11 @@
 	git update-ref refs/original/original_branch_A test-annotated~2
 '
 
-check_describe "heads/branch_A*" --all --match="branch_*" --exclude="branch_C" HEAD
+check_describe "heads/branch_A-11-gHASH" --all --match="branch_*" --exclude="branch_C" HEAD
 
-check_describe "remotes/origin/remote_branch_A*" --all --match="origin/remote_branch_*" --exclude="origin/remote_branch_C" HEAD
+check_describe "remotes/origin/remote_branch_A-11-gHASH" --all --match="origin/remote_branch_*" --exclude="origin/remote_branch_C" HEAD
 
-check_describe "original/original_branch_A*" --all test-annotated~1
+check_describe "original/original_branch_A-6-gHASH" --all test-annotated~1
 
 test_expect_success '--match does not work for other types' '
 	test_must_fail git describe --all --match="*original_branch_*" test-annotated~1
@@ -506,7 +484,7 @@
 #  o-----o---o----x
 #        A
 #
-test_expect_success 'describe commits with disjoint bases' '
+test_expect_success 'setup: describe commits with disjoint bases' '
 	git init disjoint1 &&
 	(
 		cd disjoint1 &&
@@ -519,19 +497,19 @@
 		git checkout --orphan branch && rm file &&
 		echo B > file2 && git add file2 && git commit -m B &&
 		git tag B -a -m B &&
-		git merge --no-ff --allow-unrelated-histories main -m x &&
-
-		check_describe "A-3-*" HEAD
+		git merge --no-ff --allow-unrelated-histories main -m x
 	)
 '
 
+check_describe -C disjoint1 "A-3-gHASH" HEAD
+
 #           B
 #   o---o---o------------.
 #                         \
 #                  o---o---x
 #                  A
 #
-test_expect_success 'describe commits with disjoint bases 2' '
+test_expect_success 'setup: describe commits with disjoint bases 2' '
 	git init disjoint2 &&
 	(
 		cd disjoint2 &&
@@ -545,10 +523,10 @@
 		echo o >> file2 && git add file2 && GIT_COMMITTER_DATE="2020-01-01 15:01" git commit -m o &&
 		echo B >> file2 && git add file2 && GIT_COMMITTER_DATE="2020-01-01 15:02" git commit -m B &&
 		git tag B -a -m B &&
-		git merge --no-ff --allow-unrelated-histories main -m x &&
-
-		check_describe "B-3-*" HEAD
+		git merge --no-ff --allow-unrelated-histories main -m x
 	)
 '
 
+check_describe -C disjoint2 "B-3-gHASH" HEAD
+
 test_done
diff --git a/t/t6134-pathspec-in-submodule.sh b/t/t6134-pathspec-in-submodule.sh
index c670668..0f1cb49 100755
--- a/t/t6134-pathspec-in-submodule.sh
+++ b/t/t6134-pathspec-in-submodule.sh
@@ -21,7 +21,7 @@
 test_expect_success 'error message for path inside submodule' '
 	echo a >sub/a &&
 	test_must_fail git add sub/a 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'error message for path inside submodule from within submodule' '
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index ca62e76..9e02140 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -814,60 +814,159 @@
 	EOF
 '
 
-test_expect_success '%(trailers:unfold) unfolds trailers' '
-	{
-		unfold <trailers
-		echo
-	} >expect &&
-	git for-each-ref --format="%(trailers:unfold)" refs/heads/main >actual &&
-	test_cmp expect actual &&
-	git for-each-ref --format="%(contents:trailers:unfold)" refs/heads/main >actual &&
-	test_cmp expect actual
-'
+test_trailer_option () {
+	title=$1 option=$2
+	cat >expect
+	test_expect_success "$title" '
+		git for-each-ref --format="%($option)" refs/heads/main >actual &&
+		test_cmp expect actual &&
+		git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
+		test_cmp expect actual
+	'
+}
 
-test_expect_success '%(trailers:only) shows only "key: value" trailers' '
-	{
-		grep -v patch.description <trailers &&
-		echo
-	} >expect &&
-	git for-each-ref --format="%(trailers:only)" refs/heads/main >actual &&
-	test_cmp expect actual &&
-	git for-each-ref --format="%(contents:trailers:only)" refs/heads/main >actual &&
-	test_cmp expect actual
-'
+test_trailer_option '%(trailers:unfold) unfolds trailers' \
+	'trailers:unfold' <<-EOF
+	$(unfold <trailers)
 
-test_expect_success '%(trailers:only) and %(trailers:unfold) work together' '
-	{
-		grep -v patch.description <trailers | unfold &&
-		echo
-	} >expect &&
-	git for-each-ref --format="%(trailers:only,unfold)" refs/heads/main >actual &&
-	test_cmp expect actual &&
-	git for-each-ref --format="%(trailers:unfold,only)" refs/heads/main >actual &&
-	test_cmp actual actual &&
-	git for-each-ref --format="%(contents:trailers:only,unfold)" refs/heads/main >actual &&
-	test_cmp expect actual &&
-	git for-each-ref --format="%(contents:trailers:unfold,only)" refs/heads/main >actual &&
-	test_cmp actual actual
-'
+	EOF
 
-test_expect_success '%(trailers) rejects unknown trailers arguments' '
-	# error message cannot be checked under i18n
-	cat >expect <<-EOF &&
+test_trailer_option '%(trailers:only) shows only "key: value" trailers' \
+	'trailers:only' <<-EOF
+	$(grep -v patch.description <trailers)
+
+	EOF
+
+test_trailer_option '%(trailers:only=no,only=true) shows only "key: value" trailers' \
+	'trailers:only=no,only=true' <<-EOF
+	$(grep -v patch.description <trailers)
+
+	EOF
+
+test_trailer_option '%(trailers:only=yes) shows only "key: value" trailers' \
+	'trailers:only=yes' <<-EOF
+	$(grep -v patch.description <trailers)
+
+	EOF
+
+test_trailer_option '%(trailers:only=no) shows all trailers' \
+	'trailers:only=no' <<-EOF
+	$(cat trailers)
+
+	EOF
+
+test_trailer_option '%(trailers:only) and %(trailers:unfold) work together' \
+	'trailers:only,unfold' <<-EOF
+	$(grep -v patch.description <trailers | unfold)
+
+	EOF
+
+test_trailer_option '%(trailers:unfold) and %(trailers:only) work together' \
+	'trailers:unfold,only' <<-EOF
+	$(grep -v patch.description <trailers | unfold)
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo) shows that trailer' \
+	'trailers:key=Signed-off-by' <<-EOF
+	Signed-off-by: A U Thor <author@example.com>
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo) is case insensitive' \
+	'trailers:key=SiGned-oFf-bY' <<-EOF
+	Signed-off-by: A U Thor <author@example.com>
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo:) trailing colon also works' \
+	'trailers:key=Signed-off-by:' <<-EOF
+	Signed-off-by: A U Thor <author@example.com>
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo) multiple keys' \
+	'trailers:key=Reviewed-by:,key=Signed-off-by' <<-EOF
+	Reviewed-by: A U Thor <author@example.com>
+	Signed-off-by: A U Thor <author@example.com>
+
+	EOF
+
+test_trailer_option '%(trailers:key=nonexistent) becomes empty' \
+	'trailers:key=Shined-off-by:' <<-EOF
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo) handles multiple lines even if folded' \
+	'trailers:key=Acked-by' <<-EOF
+	$(grep -v patch.description <trailers | grep -v Signed-off-by | grep -v Reviewed-by)
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo,unfold) properly unfolds' \
+	'trailers:key=Signed-Off-by,unfold' <<-EOF
+	$(unfold <trailers | grep Signed-off-by)
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo,only=no) also includes nontrailer lines' \
+	'trailers:key=Signed-off-by,only=no' <<-EOF
+	Signed-off-by: A U Thor <author@example.com>
+	$(grep patch.description <trailers)
+
+	EOF
+
+test_trailer_option '%(trailers:key=foo,valueonly) shows only value' \
+	'trailers:key=Signed-off-by,valueonly' <<-EOF
+	A U Thor <author@example.com>
+
+	EOF
+
+test_trailer_option '%(trailers:separator) changes separator' \
+	'trailers:separator=%x2C,key=Reviewed-by,key=Signed-off-by:' <<-EOF
+	Reviewed-by: A U Thor <author@example.com>,Signed-off-by: A U Thor <author@example.com>
+	EOF
+
+test_trailer_option '%(trailers:key_value_separator) changes key-value separator' \
+	'trailers:key_value_separator=%x2C,key=Reviewed-by,key=Signed-off-by:' <<-EOF
+	Reviewed-by,A U Thor <author@example.com>
+	Signed-off-by,A U Thor <author@example.com>
+
+	EOF
+
+test_trailer_option '%(trailers:separator,key_value_separator) changes both separators' \
+	'trailers:separator=%x2C,key_value_separator=%x2C,key=Reviewed-by,key=Signed-off-by:' <<-EOF
+	Reviewed-by,A U Thor <author@example.com>,Signed-off-by,A U Thor <author@example.com>
+	EOF
+
+test_failing_trailer_option () {
+	title=$1 option=$2
+	cat >expect
+	test_expect_success "$title" '
+		# error message cannot be checked under i18n
+		test_must_fail git for-each-ref --format="%($option)" refs/heads/main 2>actual &&
+		test_cmp expect actual &&
+		test_must_fail git for-each-ref --format="%(contents:$option)" refs/heads/main 2>actual &&
+		test_cmp expect actual
+	'
+}
+
+test_failing_trailer_option '%(trailers) rejects unknown trailers arguments' \
+	'trailers:unsupported' <<-\EOF
 	fatal: unknown %(trailers) argument: unsupported
 	EOF
-	test_must_fail git for-each-ref --format="%(trailers:unsupported)" 2>actual &&
-	test_i18ncmp expect actual &&
-	test_must_fail git for-each-ref --format="%(contents:trailers:unsupported)" 2>actual &&
-	test_i18ncmp expect actual
-'
+
+test_failing_trailer_option '%(trailers:key) without value is error' \
+	'trailers:key' <<-\EOF
+	fatal: expected %(trailers:key=<value>)
+	EOF
 
 test_expect_success 'if arguments, %(contents:trailers) shows error if colon is missing' '
 	cat >expect <<-EOF &&
 	fatal: unrecognized %(contents) argument: trailersonly
 	EOF
 	test_must_fail git for-each-ref --format="%(contents:trailersonly)" 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'basic atom: head contents:trailers' '
@@ -1035,4 +1134,14 @@
 	test_cmp expect actual
 '
 
+test_expect_success 'for-each-ref reports broken tags' '
+	git tag -m "good tag" broken-tag-good HEAD &&
+	git cat-file tag broken-tag-good >good &&
+	sed s/commit/blob/ <good >bad &&
+	bad=$(git hash-object -w -t tag bad) &&
+	git update-ref refs/tags/broken-tag-bad $bad &&
+	test_must_fail git for-each-ref --format="%(*objectname)" \
+		refs/tags/broken-tag-*
+'
+
 test_done
diff --git a/t/t6301-for-each-ref-errors.sh b/t/t6301-for-each-ref-errors.sh
index 809854f..40edf9d 100755
--- a/t/t6301-for-each-ref-errors.sh
+++ b/t/t6301-for-each-ref-errors.sh
@@ -20,8 +20,8 @@
 	test_when_finished "rm -f .git/$r" &&
 	echo "warning: ignoring broken ref $r" >broken-err &&
 	git for-each-ref >out 2>err &&
-	test_i18ncmp full-list out &&
-	test_i18ncmp broken-err err
+	test_cmp full-list out &&
+	test_cmp broken-err err
 '
 
 test_expect_success 'NULL_SHA1 refs are reported correctly' '
@@ -31,10 +31,10 @@
 	echo "warning: ignoring broken ref $r" >zeros-err &&
 	git for-each-ref >out 2>err &&
 	test_cmp full-list out &&
-	test_i18ncmp zeros-err err &&
+	test_cmp zeros-err err &&
 	git for-each-ref --format="%(objectname) %(refname)" >brief-out 2>brief-err &&
 	test_cmp brief-list brief-out &&
-	test_i18ncmp zeros-err brief-err
+	test_cmp zeros-err brief-err
 '
 
 test_expect_success 'Missing objects are reported correctly' '
@@ -43,7 +43,7 @@
 	test_when_finished "rm -f .git/$r" &&
 	echo "fatal: missing object $MISSING for $r" >missing-err &&
 	test_must_fail git for-each-ref 2>err &&
-	test_i18ncmp missing-err err &&
+	test_cmp missing-err err &&
 	(
 		cat brief-list &&
 		echo "$MISSING $r"
diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh
index 9866b1b..1537aa2 100755
--- a/t/t6302-for-each-ref-filter.sh
+++ b/t/t6302-for-each-ref-filter.sh
@@ -117,6 +117,25 @@
 	test_must_fail git for-each-ref --format="%(color)%(refname)"
 '
 
+test_expect_success '%(color:#aa22ac) must succeed' '
+	test_when_finished rm -rf test &&
+	git init test &&
+	(
+		cd test &&
+		test_commit initial &&
+		git branch -M main &&
+		cat >expect <<-\EOF &&
+		refs/heads/main
+		refs/tags/initial
+		EOF
+		git remote add origin nowhere &&
+		git config branch.main.remote origin &&
+		git config branch.main.merge refs/heads/main &&
+		git for-each-ref --format="%(color:#aa22ac)%(refname)" >actual &&
+		test_cmp expect actual
+	)
+'
+
 test_expect_success 'left alignment is default' '
 	cat >expect <<-\EOF &&
 	refname is refs/heads/main    |refs/heads/main
diff --git a/t/t6400-merge-df.sh b/t/t6400-merge-df.sh
index 38700d2..57a67cf 100755
--- a/t/t6400-merge-df.sh
+++ b/t/t6400-merge-df.sh
@@ -82,13 +82,13 @@
 	git checkout delete^0 &&
 	test_must_fail git merge modify &&
 
-	test 5 -eq $(git ls-files -s | wc -l) &&
-	test 4 -eq $(git ls-files -u | wc -l) &&
+	test_stdout_line_count = 5 git ls-files -s &&
+	test_stdout_line_count = 4 git ls-files -u &&
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 0 -eq $(git ls-files -o | wc -l)
+		test_stdout_line_count = 0 git ls-files -o
 	else
-		test 1 -eq $(git ls-files -o | wc -l)
+		test_stdout_line_count = 1 git ls-files -o
 	fi &&
 
 	test_path_is_file letters/file &&
@@ -103,13 +103,13 @@
 
 	test_must_fail git merge delete &&
 
-	test 5 -eq $(git ls-files -s | wc -l) &&
-	test 4 -eq $(git ls-files -u | wc -l) &&
+	test_stdout_line_count = 5 git ls-files -s &&
+	test_stdout_line_count = 4 git ls-files -u &&
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 0 -eq $(git ls-files -o | wc -l)
+		test_stdout_line_count = 0 git ls-files -o
 	else
-		test 1 -eq $(git ls-files -o | wc -l)
+		test_stdout_line_count = 1 git ls-files -o
 	fi &&
 
 	test_path_is_file letters/file &&
diff --git a/t/t6402-merge-rename.sh b/t/t6402-merge-rename.sh
index 425dad9..3da2896 100755
--- a/t/t6402-merge-rename.sh
+++ b/t/t6402-merge-rename.sh
@@ -105,10 +105,8 @@
 	git show-branch &&
 	test_expect_code 1 git pull . white &&
 	git ls-files -s &&
-	git ls-files -u B >b.stages &&
-	test_line_count = 3 b.stages &&
-	git ls-files -s N >n.stages &&
-	test_line_count = 1 n.stages &&
+	test_stdout_line_count = 3 git ls-files -u B &&
+	test_stdout_line_count = 1 git ls-files -s N &&
 	sed -ne "/^g/{
 	p
 	q
@@ -122,10 +120,8 @@
 	git reset --hard &&
 	git checkout red &&
 	test_expect_code 1 git pull . white &&
-	git ls-files -u B >b.stages &&
-	test_line_count = 3 b.stages &&
-	git ls-files -s N >n.stages &&
-	test_line_count = 1 n.stages &&
+	test_stdout_line_count = 3 git ls-files -u B &&
+	test_stdout_line_count = 1 git ls-files -s N &&
 	sed -ne "/^g/{
 	p
 	q
@@ -138,10 +134,8 @@
 	git reset --hard &&
 	git show-branch &&
 	test_expect_code 1 git pull . main &&
-	git ls-files -u B >b.stages &&
-	test_line_count = 3 b.stages &&
-	git ls-files -s N >n.stages &&
-	test_line_count = 1 n.stages &&
+	test_stdout_line_count = 3 git ls-files -u B &&
+	test_stdout_line_count = 1 git ls-files -s N &&
 	sed -ne "/^g/{
 	p
 	q
@@ -154,14 +148,10 @@
 	git reset --hard &&
 	git show-branch &&
 	test_expect_code 1 git pull . blue &&
-	git ls-files -u A >a.stages &&
-	test_line_count = 1 a.stages &&
-	git ls-files -u B >b.stages &&
-	test_line_count = 1 b.stages &&
-	git ls-files -u C >c.stages &&
-	test_line_count = 1 c.stages &&
-	git ls-files -s N >n.stages &&
-	test_line_count = 1 n.stages &&
+	test_stdout_line_count = 1 git ls-files -u A &&
+	test_stdout_line_count = 1 git ls-files -u B &&
+	test_stdout_line_count = 1 git ls-files -u C &&
+	test_stdout_line_count = 1 git ls-files -s N &&
 	sed -ne "/^g/{
 	p
 	q
@@ -330,8 +320,8 @@
 		test_i18ngrep "Adding as dir~HEAD instead" output
 	fi &&
 
-	test 3 -eq "$(git ls-files -u | wc -l)" &&
-	test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
+	test_stdout_line_count = 3 git ls-files -u &&
+	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&
 
 	test_must_fail git diff --quiet &&
 	test_must_fail git diff --cached --quiet &&
@@ -357,8 +347,8 @@
 		test_i18ngrep "Adding as dir~renamed-file-has-no-conflicts instead" output
 	fi &&
 
-	test 3 -eq "$(git ls-files -u | wc -l)" &&
-	test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
+	test_stdout_line_count = 3 git ls-files -u &&
+	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&
 
 	test_must_fail git diff --quiet &&
 	test_must_fail git diff --cached --quiet &&
@@ -374,8 +364,8 @@
 	git checkout -q renamed-file-has-conflicts^0 &&
 	test_must_fail git merge --strategy=recursive dir-not-in-way &&
 
-	test 3 -eq "$(git ls-files -u | wc -l)" &&
-	test 3 -eq "$(git ls-files -u dir | wc -l)" &&
+	test_stdout_line_count = 3 git ls-files -u &&
+	test_stdout_line_count = 3 git ls-files -u dir &&
 
 	test_must_fail git diff --quiet &&
 	test_must_fail git diff --cached --quiet &&
@@ -409,14 +399,16 @@
 	git checkout -q renamed-file-has-conflicts^0 &&
 	test_must_fail git merge --strategy=recursive dir-in-way &&
 
-	test 5 -eq "$(git ls-files -u | wc -l)" &&
+	test_stdout_line_count = 5 git ls-files -u &&
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 3 -eq "$(git ls-files -u dir~HEAD | wc -l)"
+		test_stdout_line_count = 3 git ls-files -u dir~HEAD
 	else
-		test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)"
+		git ls-files -u dir >out &&
+		test 3 -eq $(grep -v file-in-the-way out | wc -l) &&
+		rm -f out
 	fi &&
-	test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
+	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&
 
 	test_must_fail git diff --quiet &&
 	test_must_fail git diff --cached --quiet &&
@@ -432,14 +424,16 @@
 	git checkout -q dir-in-way^0 &&
 	test_must_fail git merge --strategy=recursive renamed-file-has-conflicts &&
 
-	test 5 -eq "$(git ls-files -u | wc -l)" &&
+	test_stdout_line_count = 5 git ls-files -u &&
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 3 -eq "$(git ls-files -u dir~renamed-file-has-conflicts | wc -l)"
+		test_stdout_line_count = 3 git ls-files -u dir~renamed-file-has-conflicts
 	else
-		test 3 -eq "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)"
+		git ls-files -u dir >out &&
+		test 3 -eq $(grep -v file-in-the-way out | wc -l) &&
+		rm -f out
 	fi &&
-	test 2 -eq "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
+	test_stdout_line_count = 2 git ls-files -u dir/file-in-the-way &&
 
 	test_must_fail git diff --quiet &&
 	test_must_fail git diff --cached --quiet &&
@@ -496,9 +490,9 @@
 
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 2 -eq "$(git ls-files -u | wc -l)"
+		test_stdout_line_count = 2 git ls-files -u
 	else
-		test 1 -eq "$(git ls-files -u | wc -l)"
+		test_stdout_line_count = 1 git ls-files -u
 	fi &&
 
 	test_must_fail git diff --quiet &&
@@ -540,9 +534,9 @@
 		mkdir one &&
 		test_must_fail git merge --strategy=recursive rename-two &&
 
-		test 4 -eq "$(git ls-files -u | wc -l)" &&
-		test 2 -eq "$(git ls-files -u one | wc -l)" &&
-		test 2 -eq "$(git ls-files -u two | wc -l)" &&
+		test_stdout_line_count = 4 git ls-files -u &&
+		test_stdout_line_count = 2 git ls-files -u one &&
+		test_stdout_line_count = 2 git ls-files -u two &&
 
 		test_must_fail git diff --quiet &&
 
@@ -559,9 +553,9 @@
 		mkdir one &&
 		test_must_fail git merge --strategy=recursive rename-two &&
 
-		test 2 -eq "$(git ls-files -u | wc -l)" &&
-		test 1 -eq "$(git ls-files -u one | wc -l)" &&
-		test 1 -eq "$(git ls-files -u two | wc -l)" &&
+		test_stdout_line_count = 2 git ls-files -u &&
+		test_stdout_line_count = 1 git ls-files -u one &&
+		test_stdout_line_count = 1 git ls-files -u two &&
 
 		test_must_fail git diff --quiet &&
 
@@ -582,13 +576,13 @@
 
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 4 -eq "$(git ls-files -u | wc -l)" &&
-		test 2 -eq "$(git ls-files -u one | wc -l)" &&
-		test 2 -eq "$(git ls-files -u two | wc -l)"
+		test_stdout_line_count = 4 git ls-files -u &&
+		test_stdout_line_count = 2 git ls-files -u one &&
+		test_stdout_line_count = 2 git ls-files -u two
 	else
-		test 2 -eq "$(git ls-files -u | wc -l)" &&
-		test 1 -eq "$(git ls-files -u one | wc -l)" &&
-		test 1 -eq "$(git ls-files -u two | wc -l)"
+		test_stdout_line_count = 2 git ls-files -u &&
+		test_stdout_line_count = 1 git ls-files -u one &&
+		test_stdout_line_count = 1 git ls-files -u two
 	fi &&
 
 	test_must_fail git diff --quiet &&
@@ -631,19 +625,19 @@
 
 	if test "$GIT_TEST_MERGE_ALGORITHM" = ort
 	then
-		test 5 -eq "$(git ls-files -s | wc -l)" &&
-		test 3 -eq "$(git ls-files -u | wc -l)" &&
-		test 1 -eq "$(git ls-files -u one~HEAD | wc -l)" &&
-		test 1 -eq "$(git ls-files -u two~second-rename | wc -l)" &&
-		test 1 -eq "$(git ls-files -u original | wc -l)" &&
-		test 0 -eq "$(git ls-files -o | wc -l)"
+		test_stdout_line_count = 5 git ls-files -s &&
+		test_stdout_line_count = 3 git ls-files -u &&
+		test_stdout_line_count = 1 git ls-files -u one~HEAD &&
+		test_stdout_line_count = 1 git ls-files -u two~second-rename &&
+		test_stdout_line_count = 1 git ls-files -u original &&
+		test_stdout_line_count = 0 git ls-files -o
 	else
-		test 5 -eq "$(git ls-files -s | wc -l)" &&
-		test 3 -eq "$(git ls-files -u | wc -l)" &&
-		test 1 -eq "$(git ls-files -u one | wc -l)" &&
-		test 1 -eq "$(git ls-files -u two | wc -l)" &&
-		test 1 -eq "$(git ls-files -u original | wc -l)" &&
-		test 2 -eq "$(git ls-files -o | wc -l)"
+		test_stdout_line_count = 5 git ls-files -s &&
+		test_stdout_line_count = 3 git ls-files -u &&
+		test_stdout_line_count = 1 git ls-files -u one &&
+		test_stdout_line_count = 1 git ls-files -u two &&
+		test_stdout_line_count = 1 git ls-files -u original &&
+		test_stdout_line_count = 2 git ls-files -o
 	fi &&
 
 	test_path_is_file one/file &&
@@ -679,11 +673,11 @@
 	git checkout -q first-rename-redo^0 &&
 	test_must_fail git merge --strategy=recursive second-rename-redo &&
 
-	test 3 -eq "$(git ls-files -u | wc -l)" &&
-	test 1 -eq "$(git ls-files -u one | wc -l)" &&
-	test 1 -eq "$(git ls-files -u two | wc -l)" &&
-	test 1 -eq "$(git ls-files -u original | wc -l)" &&
-	test 0 -eq "$(git ls-files -o | wc -l)" &&
+	test_stdout_line_count = 3 git ls-files -u &&
+	test_stdout_line_count = 1 git ls-files -u one &&
+	test_stdout_line_count = 1 git ls-files -u two &&
+	test_stdout_line_count = 1 git ls-files -u original &&
+	test_stdout_line_count = 0 git ls-files -o &&
 
 	test_path_is_file one &&
 	test_path_is_file two &&
@@ -861,9 +855,11 @@
 test_expect_success 'merge rename + small change' '
 	git merge rename_branch &&
 
-	test 1 -eq $(git ls-files -s | wc -l) &&
-	test 0 -eq $(git ls-files -o | wc -l) &&
-	test $(git rev-parse HEAD:renamed_file) = $(git rev-parse HEAD~1:file)
+	test_stdout_line_count = 1 git ls-files -s &&
+	test_stdout_line_count = 0 git ls-files -o &&
+	newhash=$(git rev-parse HEAD:renamed_file) &&
+	oldhash=$(git rev-parse HEAD~1:file) &&
+	test $newhash = $oldhash
 '
 
 test_expect_success 'setup for use of extended merge markers' '
diff --git a/t/t6406-merge-attr.sh b/t/t6406-merge-attr.sh
index d5a4ac2..8494645 100755
--- a/t/t6406-merge-attr.sh
+++ b/t/t6406-merge-attr.sh
@@ -207,4 +207,22 @@
 	git merge main
 '
 
+test_expect_success 'binary files with union attribute' '
+	git checkout -b bin-main &&
+	printf "base\0" >bin.txt &&
+	echo "bin.txt merge=union" >.gitattributes &&
+	git add bin.txt .gitattributes &&
+	git commit -m base &&
+
+	printf "one\0" >bin.txt &&
+	git commit -am one &&
+
+	git checkout -b bin-side HEAD^ &&
+	printf "two\0" >bin.txt &&
+	git commit -am two &&
+
+	test_must_fail git merge bin-main 2>stderr &&
+	grep -i "warning.*cannot merge.*HEAD vs. bin-main" stderr
+'
+
 test_done
diff --git a/t/t6421-merge-partial-clone.sh b/t/t6421-merge-partial-clone.sh
new file mode 100755
index 0000000..36bcd7c3
--- /dev/null
+++ b/t/t6421-merge-partial-clone.sh
@@ -0,0 +1,440 @@
+#!/bin/sh
+
+test_description="limiting blob downloads when merging with partial clones"
+# Uses a methodology similar to
+#   t6042: corner cases with renames but not criss-cross merges
+#   t6036: corner cases with both renames and criss-cross merges
+#   t6423: directory rename detection
+#
+# The setup for all of them, pictorially, is:
+#
+#      A
+#      o
+#     / \
+#  O o   ?
+#     \ /
+#      o
+#      B
+#
+# To help make it easier to follow the flow of tests, they have been
+# divided into sections and each test will start with a quick explanation
+# of what commits O, A, and B contain.
+#
+# Notation:
+#    z/{b,c}   means  files z/b and z/c both exist
+#    x/d_1     means  file x/d exists with content d1.  (Purpose of the
+#                     underscore notation is to differentiate different
+#                     files that might be renamed into each other's paths.)
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-merge.sh
+
+test_setup_repo () {
+	test -d server && return
+	test_create_repo server &&
+	(
+		cd server &&
+
+		git config uploadpack.allowfilter 1 &&
+		git config uploadpack.allowanysha1inwant 1 &&
+
+		mkdir -p general &&
+		test_seq 2 9 >general/leap1 &&
+		cp general/leap1 general/leap2 &&
+		echo leap2 >>general/leap2 &&
+
+		mkdir -p basename &&
+		cp general/leap1 basename/numbers &&
+		cp general/leap1 basename/sequence &&
+		cp general/leap1 basename/values &&
+		echo numbers >>basename/numbers &&
+		echo sequence >>basename/sequence &&
+		echo values >>basename/values &&
+
+		mkdir -p dir/unchanged &&
+		mkdir -p dir/subdir/tweaked &&
+		echo a >dir/subdir/a &&
+		echo b >dir/subdir/b &&
+		echo c >dir/subdir/c &&
+		echo d >dir/subdir/d &&
+		echo e >dir/subdir/e &&
+		cp general/leap1 dir/subdir/Makefile &&
+		echo toplevel makefile >>dir/subdir/Makefile &&
+		echo f >dir/subdir/tweaked/f &&
+		echo g >dir/subdir/tweaked/g &&
+		echo h >dir/subdir/tweaked/h &&
+		echo subdirectory makefile >dir/subdir/tweaked/Makefile &&
+		for i in $(test_seq 1 88)
+		do
+			echo content $i >dir/unchanged/file_$i
+		done &&
+		git add . &&
+		git commit -m "O" &&
+
+		git branch O &&
+		git branch A &&
+		git branch B-single &&
+		git branch B-dir &&
+		git branch B-many &&
+
+		git switch A &&
+
+		git rm general/leap* &&
+		mkdir general/ &&
+		test_seq 1 9 >general/jump1 &&
+		cp general/jump1 general/jump2 &&
+		echo leap2 >>general/jump2 &&
+
+		rm basename/numbers basename/sequence basename/values &&
+		mkdir -p basename/subdir/
+		cp general/jump1 basename/subdir/numbers &&
+		cp general/jump1 basename/subdir/sequence &&
+		cp general/jump1 basename/subdir/values &&
+		echo numbers >>basename/subdir/numbers &&
+		echo sequence >>basename/subdir/sequence &&
+		echo values >>basename/subdir/values &&
+
+		git rm dir/subdir/tweaked/f &&
+		echo more >>dir/subdir/e &&
+		echo more >>dir/subdir/Makefile &&
+		echo more >>dir/subdir/tweaked/Makefile &&
+		mkdir dir/subdir/newsubdir &&
+		echo rust code >dir/subdir/newsubdir/newfile.rs &&
+		git mv dir/subdir/e dir/subdir/newsubdir/ &&
+		git mv dir folder &&
+		git add . &&
+		git commit -m "A" &&
+
+		git switch B-single &&
+		echo new first line >dir/subdir/Makefile &&
+		cat general/leap1 >>dir/subdir/Makefile &&
+		echo toplevel makefile >>dir/subdir/Makefile &&
+		echo perl code >general/newfile.pl &&
+		git add . &&
+		git commit -m "B-single" &&
+
+		git switch B-dir &&
+		echo java code >dir/subdir/newfile.java &&
+		echo scala code >dir/subdir/newfile.scala &&
+		echo groovy code >dir/subdir/newfile.groovy &&
+		git add . &&
+		git commit -m "B-dir" &&
+
+		git switch B-many &&
+		test_seq 2 10 >general/leap1 &&
+		rm general/leap2 &&
+		cp general/leap1 general/leap2 &&
+		echo leap2 >>general/leap2 &&
+
+		rm basename/numbers basename/sequence basename/values &&
+		mkdir -p basename/subdir/
+		cp general/leap1 basename/subdir/numbers &&
+		cp general/leap1 basename/subdir/sequence &&
+		cp general/leap1 basename/subdir/values &&
+		echo numbers >>basename/subdir/numbers &&
+		echo sequence >>basename/subdir/sequence &&
+		echo values >>basename/subdir/values &&
+
+		mkdir dir/subdir/newsubdir/ &&
+		echo c code >dir/subdir/newfile.c &&
+		echo python code >dir/subdir/newsubdir/newfile.py &&
+		git add . &&
+		git commit -m "B-many" &&
+
+		git switch A
+	)
+}
+
+# Testcase: Objects downloaded for single relevant rename
+#   Commit O:
+#              general/{leap1_O, leap2_O}
+#              basename/{numbers_O, sequence_O, values_O}
+#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O}
+#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
+#              dir/unchanged/<LOTS OF FILES>
+#   Commit A:
+#     (Rename leap->jump, rename basename/ -> basename/subdir/, rename dir/
+#      -> folder/, move e into newsubdir, add newfile.rs, remove f, modify
+#      both both Makefiles and jumps)
+#              general/{jump1_A, jump2_A}
+#              basename/subdir/{numbers_A, sequence_A, values_A}
+#              folder/subdir/{a,b,c,d,Makefile_TOP_A}
+#              folder/subdir/newsubdir/{e_A,newfile.rs}
+#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
+#              folder/unchanged/<LOTS OF FILES>
+#   Commit B(-single):
+#     (add newfile.pl, tweak Makefile_TOP)
+#              general/{leap1_O, leap2_O,newfile.pl}
+#              basename/{numbers_O, sequence_O, values_O}
+#              dir/{a,b,c,d,e_O,Makefile_TOP_B}
+#              dir/tweaked/{f,g,h,Makefile_SUB_O}
+#              dir/unchanged/<LOTS OF FILES>
+#   Expected:
+#              general/{jump1_A, jump2_A,newfile.pl}
+#              basename/subdir/{numbers_A, sequence_A, values_A}
+#              folder/subdir/{a,b,c,d,Makefile_TOP_Merged}
+#              folder/subdir/newsubdir/{e_A,newfile.rs}
+#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
+#              folder/unchanged/<LOTS OF FILES>
+#
+# Objects that need to be fetched:
+#   Rename detection:
+#     Side1 (O->A):
+#       Basename-matches rename detection only needs to fetch these objects:
+#         Makefile_TOP_O, Makefile_TOP_A
+#         (Despite many renames, all others are content irrelevant.  They
+#          are also location irrelevant because newfile.rs was added on
+#          the side doing the directory rename, and newfile.pl was added to
+#          a directory that was not renamed on either side.)
+#       General rename detection only needs to fetch these objects:
+#         <None>
+#          (Even though newfile.rs, jump[12], basename/subdir/*, and e
+#          could all be used as destinations in rename detection, the
+#          basename detection for Makefile matches up all relevant
+#          sources, so these other files never end up needing to be
+#          used)
+#     Side2 (O->B):
+#       Basename-matches rename detection only needs to fetch these objects:
+#         <None>
+#         (there are no deleted files, so no possible sources)
+#       General rename detection only needs to fetch these objects:
+#         <None>
+#         (there are no deleted files, so no possible sources)
+#   Merge:
+#     3-way content merge needs to grab these objects:
+#       Makefile_TOP_B
+#   Nothing else needs to fetch objects
+#
+#   Summary: 2 fetches (1 for 2 objects, 1 for 1 object)
+#
+test_expect_merge_algorithm failure success 'Objects downloaded for single relevant rename' '
+	test_setup_repo &&
+	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-single &&
+	(
+		cd objects-single &&
+
+		git rev-list --objects --all --missing=print |
+			grep "^?" | sort >missing-objects-before &&
+
+		git checkout -q origin/A &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
+			-c merge.directoryRenames=true merge --no-stat \
+			--no-progress origin/B-single &&
+
+		# Check the number of objects we reported we would fetch
+		cat >expect <<-EOF &&
+		fetch_count:2
+		fetch_count:1
+		EOF
+		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
+		test_cmp expect actual &&
+
+		# Check the number of fetch commands exec-ed
+		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
+		test_line_count = 2 fetches &&
+
+		git rev-list --objects --all --missing=print |
+			grep "^?" | sort >missing-objects-after &&
+		comm -2 -3 missing-objects-before missing-objects-after >old &&
+		comm -1 -3 missing-objects-before missing-objects-after >new &&
+		# No new missing objects
+		test_must_be_empty new &&
+		# Fetched 2 + 1 = 3 objects
+		test_line_count = 3 old
+	)
+'
+
+# Testcase: Objects downloaded for directory rename
+#   Commit O:
+#              general/{leap1_O, leap2_O}
+#              basename/{numbers_O, sequence_O, values_O}
+#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O}
+#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
+#              dir/unchanged/<LOTS OF FILES>
+#   Commit A:
+#     (Rename leap->jump, rename basename/ -> basename/subdir/, rename dir/ ->
+#      folder/, move e into newsubdir, add newfile.rs, remove f, modify
+#      both Makefiles and jumps)
+#              general/{jump1_A, jump2_A}
+#              basename/subdir/{numbers_A, sequence_A, values_A}
+#              folder/subdir/{a,b,c,d,Makefile_TOP_A}
+#              folder/subdir/newsubdir/{e_A,newfile.rs}
+#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
+#              folder/unchanged/<LOTS OF FILES>
+#   Commit B(-dir):
+#     (add dir/subdir/newfile.{java,scala,groovy}
+#              general/{leap1_O, leap2_O}
+#              basename/{numbers_O, sequence_O, values_O}
+#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O,
+#                          newfile.java,newfile.scala,newfile.groovy}
+#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
+#              dir/unchanged/<LOTS OF FILES>
+#   Expected:
+#              general/{jump1_A, jump2_A}
+#              basename/subdir/{numbers_A, sequence_A, values_A}
+#              folder/subdir/{a,b,c,d,Makefile_TOP_A,
+#                             newfile.java,newfile.scala,newfile.groovy}
+#              folder/subdir/newsubdir/{e_A,newfile.rs}
+#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
+#              folder/unchanged/<LOTS OF FILES>
+#
+# Objects that need to be fetched:
+#   Makefile_TOP_O, Makefile_TOP_A
+#   Makefile_SUB_O, Makefile_SUB_A
+#   e_O, e_A
+#   * Despite A's rename of jump->leap, those renames are irrelevant.
+#   * Despite A's rename of basename/ -> basename/subdir/, those renames are
+#     irrelevant.
+#   * Because of A's rename of dir/ -> folder/ and B-dir's addition of
+#     newfile.* into dir/subdir/, we need to determine directory renames.
+#     (Technically, there are enough exact renames to determine directory
+#      rename detection, but the current implementation always does
+#      basename searching before directory rename detection.  Running it
+#      also before basename searching would mean doing directory rename
+#      detection twice, but it's a bit expensive to do that and cases like
+#      this are not all that common.)
+#   Summary: 1 fetches for 6 objects
+#
+test_expect_merge_algorithm failure success 'Objects downloaded when a directory rename triggered' '
+	test_setup_repo &&
+	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-dir &&
+	(
+		cd objects-dir &&
+
+		git rev-list --objects --all --missing=print |
+			grep "^?" | sort >missing-objects-before &&
+
+		git checkout -q origin/A &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
+			-c merge.directoryRenames=true merge --no-stat \
+			--no-progress origin/B-dir &&
+
+		# Check the number of objects we reported we would fetch
+		cat >expect <<-EOF &&
+		fetch_count:6
+		EOF
+		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
+		test_cmp expect actual &&
+
+		# Check the number of fetch commands exec-ed
+		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
+		test_line_count = 1 fetches &&
+
+		git rev-list --objects --all --missing=print |
+			grep "^?" | sort >missing-objects-after &&
+		comm -2 -3 missing-objects-before missing-objects-after >old &&
+		comm -1 -3 missing-objects-before missing-objects-after >new &&
+		# No new missing objects
+		test_must_be_empty new &&
+		# Fetched 6 objects
+		test_line_count = 6 old
+	)
+'
+
+# Testcase: Objects downloaded with lots of renames and modifications
+#   Commit O:
+#              general/{leap1_O, leap2_O}
+#              basename/{numbers_O, sequence_O, values_O}
+#              dir/subdir/{a,b,c,d,e_O,Makefile_TOP_O}
+#              dir/subdir/tweaked/{f,g,h,Makefile_SUB_O}
+#              dir/unchanged/<LOTS OF FILES>
+#   Commit A:
+#     (Rename leap->jump, rename basename/ -> basename/subdir/, rename dir/
+#      -> folder/, move e into newsubdir, add newfile.rs, remove f, modify
+#      both both Makefiles and jumps)
+#              general/{jump1_A, jump2_A}
+#              basename/subdir/{numbers_A, sequence_A, values_A}
+#              folder/subdir/{a,b,c,d,Makefile_TOP_A}
+#              folder/subdir/newsubdir/{e_A,newfile.rs}
+#              folder/subdir/tweaked/{g,h,Makefile_SUB_A}
+#              folder/unchanged/<LOTS OF FILES>
+#   Commit B(-minimal):
+#     (modify both leaps, rename basename/ -> basename/subdir/, add
+#      newfile.{c,py})
+#              general/{leap1_B, leap2_B}
+#              basename/subdir/{numbers_B, sequence_B, values_B}
+#              dir/{a,b,c,d,e_O,Makefile_TOP_O,newfile.c}
+#              dir/tweaked/{f,g,h,Makefile_SUB_O,newfile.py}
+#              dir/unchanged/<LOTS OF FILES>
+#   Expected:
+#              general/{jump1_Merged, jump2_Merged}
+#              basename/subdir/{numbers_Merged, sequence_Merged, values_Merged}
+#              folder/subdir/{a,b,c,d,Makefile_TOP_A,newfile.c}
+#              folder/subdir/newsubdir/e_A
+#              folder/subdir/tweaked/{g,h,Makefile_SUB_A,newfile.py}
+#              folder/unchanged/<LOTS OF FILES>
+#
+# Objects that need to be fetched:
+#   Rename detection:
+#     Side1 (O->A):
+#       Basename-matches rename detection only needs to fetch these objects:
+#         numbers_O, numbers_A
+#         sequence_O, sequence_A
+#         values_O, values_A
+#         Makefile_TOP_O, Makefile_TOP_A
+#         Makefile_SUB_O, Makefile_SUB_A
+#         e_O, e_A
+#       General rename detection only needs to fetch these objects:
+#         leap1_O, leap2_O
+#         jump1_A, jump2_A, newfile.rs
+#         (only need remaining relevant sources, but any relevant sources need
+#          to be matched against all possible unpaired destinations)
+#     Side2 (O->B):
+#       Basename-matches rename detection only needs to fetch these objects:
+#         numbers_B
+#         sequence_B
+#         values_B
+#       (because numbers_O, sequence_O, and values_O already fetched above)
+#       General rename detection only needs to fetch these objects:
+#         <None>
+#   Merge:
+#     3-way content merge needs to grab these objects:
+#       leap1_B
+#       leap2_B
+#   Nothing else needs to fetch objects
+#
+#   Summary: 4 fetches (1 for 6 objects, 1 for 8, 1 for 3, 1 for 2)
+#
+test_expect_merge_algorithm failure success 'Objects downloaded with lots of renames and modifications' '
+	test_setup_repo &&
+	git clone --sparse --filter=blob:none "file://$(pwd)/server" objects-many &&
+	(
+		cd objects-many &&
+
+		git rev-list --objects --all --missing=print |
+			grep "^?" | sort >missing-objects-before &&
+
+		git checkout -q origin/A &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" git \
+			-c merge.directoryRenames=true merge --no-stat \
+			--no-progress origin/B-many &&
+
+		# Check the number of objects we reported we would fetch
+		cat >expect <<-EOF &&
+		fetch_count:12
+		fetch_count:5
+		fetch_count:3
+		fetch_count:2
+		EOF
+		grep fetch_count trace.output | cut -d "|" -f 9 | tr -d " ." >actual &&
+		test_cmp expect actual &&
+
+		# Check the number of fetch commands exec-ed
+		grep d0.*fetch.negotiationAlgorithm trace.output >fetches &&
+		test_line_count = 4 fetches &&
+
+		git rev-list --objects --all --missing=print |
+			grep "^?" | sort >missing-objects-after &&
+		comm -2 -3 missing-objects-before missing-objects-after >old &&
+		comm -1 -3 missing-objects-before missing-objects-after >new &&
+		# No new missing objects
+		test_must_be_empty new &&
+		# Fetched 12 + 5 + 3 + 2 = 22 objects
+		test_line_count = 22 old
+	)
+'
+
+test_done
diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh
index 4ab133f..4af4fb0 100755
--- a/t/t6423-merge-rename-directories.sh
+++ b/t/t6423-merge-rename-directories.sh
@@ -454,7 +454,7 @@
 #   the directory renamed, but the files within it. (see 1b)
 #
 #   If renames split a directory into two or more others, the directory
-#   with the most renames, "wins" (see 1c).  However, see the testcases
+#   with the most renames, "wins" (see 1f).  However, see the testcases
 #   in section 2, plus testcases 3a and 4a.
 ###########################################################################
 
@@ -2905,7 +2905,7 @@
 	)
 }
 
-test_expect_success C_LOCALE_OUTPUT '9e: N-to-1 whammo' '
+test_expect_success '9e: N-to-1 whammo' '
 	test_setup_9e &&
 	(
 		cd 9e &&
@@ -4797,7 +4797,7 @@
 	)
 }
 
-test_expect_merge_algorithm failure success '12f: Trivial directory resolve, caching, all kinds of fun' '
+test_expect_merge_algorithm failure failure '12f: Trivial directory resolve, caching, all kinds of fun' '
 	test_setup_12f &&
 	(
 		cd 12f &&
@@ -4895,6 +4895,310 @@
 	)
 '
 
+# Testcase 12g, Testcase with two kinds of "relevant" renames
+#   Commit O: somefile_O, subdir/{a_O,b_O}
+#   Commit A: somefile_A, subdir/{a_O,b_O,c_A}
+#   Commit B: newfile_B,  newdir/{a_B,b_B}
+#   Expected: newfile_{merged}, newdir/{a_B,b_B,c_A}
+
+test_setup_12g () {
+	test_create_repo 12g &&
+	(
+		cd 12g &&
+
+		mkdir -p subdir &&
+		test_write_lines upon a time there was a >somefile &&
+		test_write_lines 1 2 3 4 5 6 7 8 9 10 >subdir/a &&
+		test_write_lines one two three four five six >subdir/b &&
+		git add . &&
+		test_tick &&
+		git commit -m "O" &&
+
+		git branch O &&
+		git branch A &&
+		git branch B &&
+
+		git switch A &&
+		test_write_lines once upon a time there was a >somefile &&
+		> subdir/c &&
+		git add somefile subdir/c &&
+		test_tick &&
+		git commit -m "A" &&
+
+		git checkout B &&
+		git mv somefile newfile &&
+		git mv subdir newdir &&
+		echo repo >>newfile &&
+		test_write_lines 1 2 3 4 5 6 7 8 9 10 11 >newdir/a &&
+		test_write_lines one two three four five six seven >newdir/b &&
+		git add newfile newdir &&
+		test_tick &&
+		git commit -m "B"
+	)
+}
+
+test_expect_success '12g: Testcase with two kinds of "relevant" renames' '
+	test_setup_12g &&
+	(
+		cd 12g &&
+
+		git checkout A^0 &&
+
+		git -c merge.directoryRenames=true merge -s recursive B^0 &&
+
+		test_write_lines once upon a time there was a repo >expect &&
+		test_cmp expect newfile &&
+
+		git ls-files -s >out &&
+		test_line_count = 4 out &&
+
+		git rev-parse >actual \
+			HEAD:newdir/a  HEAD:newdir/b   HEAD:newdir/c &&
+		git rev-parse >expect \
+			B:newdir/a     B:newdir/b      A:subdir/c &&
+		test_cmp expect actual &&
+
+		test_must_fail git rev-parse HEAD:subdir/a &&
+		test_must_fail git rev-parse HEAD:subdir/b &&
+		test_must_fail git rev-parse HEAD:subdir/c &&
+		test_path_is_missing subdir/ &&
+		test_path_is_file newdir/c
+	)
+'
+
+# Testcase 12h, Testcase with two kinds of "relevant" renames
+#   Commit O: olddir/{a_1, b}
+#   Commit A: newdir/{a_2, b}
+#   Commit B: olddir/{alpha_1, b}
+#   Expected: newdir/{alpha_2, b}
+
+test_setup_12h () {
+	test_create_repo 12h &&
+	(
+		cd 12h &&
+
+		mkdir olddir &&
+		test_seq 3 8 >olddir/a &&
+		>olddir/b &&
+		git add olddir &&
+		git commit -m orig &&
+
+		git branch O &&
+		git branch A &&
+		git branch B &&
+
+		git switch A &&
+		test_seq 3 10 >olddir/a &&
+		git add olddir/a &&
+		git mv olddir newdir &&
+		git commit -m A &&
+
+		git switch B &&
+
+		git mv olddir/a olddir/alpha &&
+		git commit -m B
+	)
+}
+
+test_expect_failure '12h: renaming a file within a renamed directory' '
+	test_setup_12h &&
+	(
+		cd 12h &&
+
+		git checkout A^0 &&
+
+		test_might_fail git -c merge.directoryRenames=true merge -s recursive B^0 &&
+
+		git ls-files >tracked &&
+		test_line_count = 2 tracked &&
+
+		test_path_is_missing olddir/a &&
+		test_path_is_file newdir/alpha &&
+		test_path_is_file newdir/b &&
+
+		git rev-parse >actual \
+			HEAD:newdir/alpha  HEAD:newdir/b &&
+		git rev-parse >expect \
+			A:newdir/a         O:oldir/b &&
+		test_cmp expect actual
+	)
+'
+
+# Testcase 12i, Directory rename causes rename-to-self
+#   Commit O: source/{subdir/foo, bar, baz_1}
+#   Commit A: source/{foo, bar, baz_1}
+#   Commit B: source/{subdir/{foo, bar}, baz_2}
+#   Expected: source/{foo, bar, baz_2}, with conflicts on
+#                source/bar vs. source/subdir/bar
+
+test_setup_12i () {
+	test_create_repo 12i &&
+	(
+		cd 12i &&
+
+		mkdir -p source/subdir &&
+		echo foo >source/subdir/foo &&
+		echo bar >source/bar &&
+		echo baz >source/baz &&
+		git add source &&
+		git commit -m orig &&
+
+		git branch O &&
+		git branch A &&
+		git branch B &&
+
+		git switch A &&
+		git mv source/subdir/foo source/foo &&
+		git commit -m A &&
+
+		git switch B &&
+		git mv source/bar source/subdir/bar &&
+		echo more baz >>source/baz &&
+		git commit -m B
+	)
+}
+
+test_expect_success '12i: Directory rename causes rename-to-self' '
+	test_setup_12i &&
+	(
+		cd 12i &&
+
+		git checkout A^0 &&
+
+		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&
+
+		test_path_is_missing source/subdir &&
+		test_path_is_file source/bar &&
+		test_path_is_file source/baz &&
+
+		git ls-files | uniq >tracked &&
+		test_line_count = 3 tracked &&
+
+		git status --porcelain -uno >actual &&
+		cat >expect <<-\EOF &&
+		UU source/bar
+		 M source/baz
+		EOF
+		test_cmp expect actual
+	)
+'
+
+# Testcase 12j, Directory rename to root causes rename-to-self
+#   Commit O: {subdir/foo, bar, baz_1}
+#   Commit A: {foo, bar, baz_1}
+#   Commit B: {subdir/{foo, bar}, baz_2}
+#   Expected: {foo, bar, baz_2}, with conflicts on bar vs. subdir/bar
+
+test_setup_12j () {
+	test_create_repo 12j &&
+	(
+		cd 12j &&
+
+		mkdir -p subdir &&
+		echo foo >subdir/foo &&
+		echo bar >bar &&
+		echo baz >baz &&
+		git add . &&
+		git commit -m orig &&
+
+		git branch O &&
+		git branch A &&
+		git branch B &&
+
+		git switch A &&
+		git mv subdir/foo foo &&
+		git commit -m A &&
+
+		git switch B &&
+		git mv bar subdir/bar &&
+		echo more baz >>baz &&
+		git commit -m B
+	)
+}
+
+test_expect_success '12j: Directory rename to root causes rename-to-self' '
+	test_setup_12j &&
+	(
+		cd 12j &&
+
+		git checkout A^0 &&
+
+		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&
+
+		test_path_is_missing subdir &&
+		test_path_is_file bar &&
+		test_path_is_file baz &&
+
+		git ls-files | uniq >tracked &&
+		test_line_count = 3 tracked &&
+
+		git status --porcelain -uno >actual &&
+		cat >expect <<-\EOF &&
+		UU bar
+		 M baz
+		EOF
+		test_cmp expect actual
+	)
+'
+
+# Testcase 12k, Directory rename with sibling causes rename-to-self
+#   Commit O: dirB/foo, dirA/{bar, baz_1}
+#   Commit A: dirA/{foo, bar, baz_1}
+#   Commit B: dirB/{foo, bar}, dirA/baz_2
+#   Expected: dirA/{foo, bar, baz_2}, with conflicts on dirA/bar vs. dirB/bar
+
+test_setup_12k () {
+	test_create_repo 12k &&
+	(
+		cd 12k &&
+
+		mkdir dirA dirB &&
+		echo foo >dirB/foo &&
+		echo bar >dirA/bar &&
+		echo baz >dirA/baz &&
+		git add . &&
+		git commit -m orig &&
+
+		git branch O &&
+		git branch A &&
+		git branch B &&
+
+		git switch A &&
+		git mv dirB/* dirA/ &&
+		git commit -m A &&
+
+		git switch B &&
+		git mv dirA/bar dirB/bar &&
+		echo more baz >>dirA/baz &&
+		git commit -m B
+	)
+}
+
+test_expect_success '12k: Directory rename with sibling causes rename-to-self' '
+	test_setup_12k &&
+	(
+		cd 12k &&
+
+		git checkout A^0 &&
+
+		test_must_fail git -c merge.directoryRenames=conflict merge -s recursive B^0 &&
+
+		test_path_is_missing dirB &&
+		test_path_is_file dirA/bar &&
+		test_path_is_file dirA/baz &&
+
+		git ls-files | uniq >tracked &&
+		test_line_count = 3 tracked &&
+
+		git status --porcelain -uno >actual &&
+		cat >expect <<-\EOF &&
+		UU dirA/bar
+		 M dirA/baz
+		EOF
+		test_cmp expect actual
+	)
+'
+
 ###########################################################################
 # SECTION 13: Checking informational and conflict messages
 #
diff --git a/t/t6428-merge-conflicts-sparse.sh b/t/t6428-merge-conflicts-sparse.sh
new file mode 100755
index 0000000..7e8bf49
--- /dev/null
+++ b/t/t6428-merge-conflicts-sparse.sh
@@ -0,0 +1,158 @@
+#!/bin/sh
+
+test_description="merge cases"
+
+# The setup for all of them, pictorially, is:
+#
+#      A
+#      o
+#     / \
+#  O o   ?
+#     \ /
+#      o
+#      B
+#
+# To help make it easier to follow the flow of tests, they have been
+# divided into sections and each test will start with a quick explanation
+# of what commits O, A, and B contain.
+#
+# Notation:
+#    z/{b,c}   means  files z/b and z/c both exist
+#    x/d_1     means  file x/d exists with content d1.  (Purpose of the
+#                     underscore notation is to differentiate different
+#                     files that might be renamed into each other's paths.)
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-merge.sh
+
+
+# Testcase basic, conflicting changes in 'numerals'
+
+test_setup_numerals () {
+	test_create_repo numerals_$1 &&
+	(
+		cd numerals_$1 &&
+
+		>README &&
+		test_write_lines I II III >numerals &&
+		git add README numerals &&
+		test_tick &&
+		git commit -m "O" &&
+
+		git branch O &&
+		git branch A &&
+		git branch B &&
+
+		git checkout A &&
+		test_write_lines I II III IIII >numerals &&
+		git add numerals &&
+		test_tick &&
+		git commit -m "A" &&
+
+		git checkout B &&
+		test_write_lines I II III IV >numerals &&
+		git add numerals &&
+		test_tick &&
+		git commit -m "B" &&
+
+		cat <<-EOF >expected-index &&
+		H README
+		M numerals
+		M numerals
+		M numerals
+		EOF
+
+		cat <<-EOF >expected-merge
+		I
+		II
+		III
+		<<<<<<< HEAD
+		IIII
+		=======
+		IV
+		>>>>>>> B^0
+		EOF
+
+	)
+}
+
+test_expect_success 'conflicting entries written to worktree even if sparse' '
+	test_setup_numerals plain &&
+	(
+		cd numerals_plain &&
+
+		git checkout A^0 &&
+
+		test_path_is_file README &&
+		test_path_is_file numerals &&
+
+		git sparse-checkout init &&
+		git sparse-checkout set README &&
+
+		test_path_is_file README &&
+		test_path_is_missing numerals &&
+
+		test_must_fail git merge -s recursive B^0 &&
+
+		git ls-files -t >index_files &&
+		test_cmp expected-index index_files &&
+
+		test_path_is_file README &&
+		test_path_is_file numerals &&
+
+		test_cmp expected-merge numerals &&
+
+		# 4 other files:
+		#   * expected-merge
+		#   * expected-index
+		#   * index_files
+		#   * others
+		git ls-files -o >others &&
+		test_line_count = 4 others
+	)
+'
+
+test_expect_merge_algorithm failure success 'present-despite-SKIP_WORKTREE handled reasonably' '
+	test_setup_numerals in_the_way &&
+	(
+		cd numerals_in_the_way &&
+
+		git checkout A^0 &&
+
+		test_path_is_file README &&
+		test_path_is_file numerals &&
+
+		git sparse-checkout init &&
+		git sparse-checkout set README &&
+
+		test_path_is_file README &&
+		test_path_is_missing numerals &&
+
+		echo foobar >numerals &&
+
+		test_must_fail git merge -s recursive B^0 &&
+
+		git ls-files -t >index_files &&
+		test_cmp expected-index index_files &&
+
+		test_path_is_file README &&
+		test_path_is_file numerals &&
+
+		test_cmp expected-merge numerals &&
+
+		# There should still be a file with "foobar" in it
+		grep foobar * &&
+
+		# 5 other files:
+		#   * expected-merge
+		#   * expected-index
+		#   * index_files
+		#   * others
+		#   * whatever name was given to the numerals file that had
+		#     "foobar" in it
+		git ls-files -o >others &&
+		test_line_count = 5 others
+	)
+'
+
+test_done
diff --git a/t/t6429-merge-sequence-rename-caching.sh b/t/t6429-merge-sequence-rename-caching.sh
new file mode 100755
index 0000000..035edc4
--- /dev/null
+++ b/t/t6429-merge-sequence-rename-caching.sh
@@ -0,0 +1,700 @@
+#!/bin/sh
+
+test_description="remember regular & dir renames in sequence of merges"
+
+. ./test-lib.sh
+
+#
+# NOTE 1: this testfile tends to not only rename files, but modify on both
+#         sides; without modifying on both sides, optimizations can kick in
+#         which make rename detection irrelevant or trivial.  We want to make
+#         sure that we are triggering rename caching rather than rename
+#         bypassing.
+#
+# NOTE 2: this testfile uses 'test-tool fast-rebase' instead of either
+#         cherry-pick or rebase.  sequencer.c is only superficially
+#         integrated with merge-ort; it calls merge_switch_to_result()
+#         after EACH merge, which updates the index and working copy AND
+#         throws away the cached results (because merge_switch_to_result()
+#         is only supposed to be called at the end of the sequence).
+#         Integrating them more deeply is a big task, so for now the tests
+#         use 'test-tool fast-rebase'.
+#
+
+
+#
+# In the following simple testcase:
+#   Base:     numbers_1, values_1
+#   Upstream: numbers_2, values_2
+#   Topic_1:  sequence_3
+#   Topic_2:  scruples_3
+# or, in english, rename numbers -> sequence in the first commit, and rename
+# values -> scruples in the second commit.
+#
+# This shouldn't be a challenge, it's just verifying that cached renames isn't
+# preventing us from finding new renames.
+#
+test_expect_success 'caching renames does not preclude finding new ones' '
+	test_create_repo caching-renames-and-new-renames &&
+	(
+		cd caching-renames-and-new-renames &&
+
+		test_seq 2 10 >numbers &&
+		test_seq 2 10 >values &&
+		git add numbers values &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch upstream &&
+		test_seq 1 10 >numbers &&
+		test_seq 1 10 >values &&
+		git add numbers values &&
+		git commit -m "Tweaked both files" &&
+
+		git switch topic &&
+
+		test_seq 2 12 >numbers &&
+		git add numbers &&
+		git mv numbers sequence &&
+		git commit -m A &&
+
+		test_seq 2 12 >values &&
+		git add values &&
+		git mv values scruples &&
+		git commit -m B &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream~1..topic
+
+		git ls-files >tracked-files &&
+		test_line_count = 2 tracked-files &&
+		test_seq 1 12 >expect &&
+		test_cmp expect sequence &&
+		test_cmp expect scruples
+	)
+'
+
+#
+# In the following testcase:
+#   Base:     numbers_1
+#   Upstream: rename numbers_1 -> sequence_2
+#   Topic_1:  numbers_3
+#   Topic_2:  numbers_1
+# or, in english, the first commit on the topic branch modifies numbers by
+# shrinking it (dramatically) and the second commit on topic reverts its
+# parent.
+#
+# Can git apply both patches?
+#
+# Traditional cherry-pick/rebase will fail to apply the second commit, the
+# one that reverted its parent, because despite detecting the rename from
+# 'numbers' to 'sequence' for the first commit, it fails to detect that
+# rename when picking the second commit.  That's "reasonable" given the
+# dramatic change in size of the file, but remembering the rename and
+# reusing it is reasonable too.
+#
+# We do test here that we expect rename detection to only be run once total
+# (the topic side of history doesn't need renames, and with caching we
+# should be able to only run rename detection on the upstream side one
+# time.)
+test_expect_success 'cherry-pick both a commit and its immediate revert' '
+	test_create_repo pick-commit-and-its-immediate-revert &&
+	(
+		cd pick-commit-and-its-immediate-revert &&
+
+		test_seq 11 30 >numbers &&
+		git add numbers &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch upstream &&
+		test_seq 1 30 >numbers &&
+		git add numbers &&
+		git mv numbers sequence &&
+		git commit -m "Renamed (and modified) numbers -> sequence" &&
+
+		git switch topic &&
+
+		test_seq 11 13 >numbers &&
+		git add numbers &&
+		git commit -m A &&
+
+		git revert HEAD &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream~1..topic &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 1 calls
+	)
+'
+
+#
+# In the following testcase:
+#   Base:     sequence_1
+#   Upstream: rename sequence_1 -> values_2
+#   Topic_1:  rename sequence_1 -> values_3
+#   Topic_2:  add unrelated sequence_4
+# or, in english, both sides rename sequence -> values, and then the second
+# commit on the topic branch adds an unrelated file called sequence.
+#
+# This testcase presents no problems for git traditionally, but having both
+# sides do the same rename in effect "uses it up" and if it remains cached,
+# could cause a spurious rename/add conflict.
+#
+test_expect_success 'rename same file identically, then reintroduce it' '
+	test_create_repo rename-rename-1to1-then-add-old-filename &&
+	(
+		cd rename-rename-1to1-then-add-old-filename &&
+
+		test_seq 3 8 >sequence &&
+		git add sequence &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch upstream &&
+		test_seq 1 8 >sequence &&
+		git add sequence &&
+		git mv sequence values &&
+		git commit -m "Renamed (and modified) sequence -> values" &&
+
+		git switch topic &&
+
+		test_seq 3 10 >sequence &&
+		git add sequence &&
+		git mv sequence values &&
+		git commit -m A &&
+
+		test_write_lines A B C D E F G H I J >sequence &&
+		git add sequence &&
+		git commit -m B &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream~1..topic &&
+
+		git ls-files >tracked &&
+		test_line_count = 2 tracked &&
+		test_path_is_file values &&
+		test_path_is_file sequence &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 2 calls
+	)
+'
+
+#
+# In the following testcase:
+#   Base:     olddir/{valuesZ_1, valuesY_1, valuesX_1}
+#   Upstream: rename olddir/valuesZ_1 -> dirA/valuesZ_2
+#             rename olddir/valuesY_1 -> dirA/valuesY_2
+#             rename olddir/valuesX_1 -> dirB/valuesX_2
+#   Topic_1:  rename olddir/valuesZ_1 -> dirA/valuesZ_3
+#             rename olddir/valuesY_1 -> dirA/valuesY_3
+#   Topic_2:  add olddir/newfile
+#   Expected Pick1: dirA/{valuesZ, valuesY}, dirB/valuesX
+#   Expected Pick2: dirA/{valuesZ, valuesY}, dirB/{valuesX, newfile}
+#
+# This testcase presents no problems for git traditionally, but having both
+# sides do the same renames in effect "use it up" but if the renames remain
+# cached, the directory rename could put newfile in the wrong directory.
+#
+test_expect_success 'rename same file identically, then add file to old dir' '
+	test_create_repo rename-rename-1to1-then-add-file-to-old-dir &&
+	(
+		cd rename-rename-1to1-then-add-file-to-old-dir &&
+
+		mkdir olddir/ &&
+		test_seq 3 8 >olddir/valuesZ &&
+		test_seq 3 8 >olddir/valuesY &&
+		test_seq 3 8 >olddir/valuesX &&
+		git add olddir &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch upstream &&
+		test_seq 1 8 >olddir/valuesZ &&
+		test_seq 1 8 >olddir/valuesY &&
+		test_seq 1 8 >olddir/valuesX &&
+		git add olddir &&
+		mkdir dirA &&
+		git mv olddir/valuesZ olddir/valuesY dirA &&
+		git mv olddir/ dirB/ &&
+		git commit -m "Renamed (and modified) values*" &&
+
+		git switch topic &&
+
+		test_seq 3 10 >olddir/valuesZ &&
+		test_seq 3 10 >olddir/valuesY &&
+		git add olddir &&
+		mkdir dirA &&
+		git mv olddir/valuesZ olddir/valuesY dirA &&
+		git commit -m A &&
+
+		>olddir/newfile &&
+		git add olddir/newfile &&
+		git commit -m B &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+		git config merge.directoryRenames true &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream~1..topic &&
+
+		git ls-files >tracked &&
+		test_line_count = 4 tracked &&
+		test_path_is_file dirA/valuesZ &&
+		test_path_is_file dirA/valuesY &&
+		test_path_is_file dirB/valuesX &&
+		test_path_is_file dirB/newfile &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 3 calls
+	)
+'
+
+#
+# In the following testcase, upstream renames a directory, and the topic branch
+# first adds a file to the directory, then later renames the directory
+# differently:
+#   Base:     olddir/a
+#             olddir/b
+#   Upstream: rename olddir/ -> newdir/
+#   Topic_1:  add olddir/newfile
+#   Topic_2:  rename olddir/ -> otherdir/
+#
+# Here we are just concerned that cached renames might prevent us from seeing
+# the rename conflict, and we want to ensure that we do get a conflict.
+#
+# While at it, though, we do test that we only try to detect renames 2
+# times and not three.  (The first merge needs to detect renames on the
+# upstream side.  Traditionally, the second merge would need to detect
+# renames on both sides of history, but our caching of upstream renames
+# should avoid the need to re-detect upstream renames.)
+#
+test_expect_success 'cached dir rename does not prevent noticing later conflict' '
+	test_create_repo dir-rename-cache-not-occluding-later-conflict &&
+	(
+		cd dir-rename-cache-not-occluding-later-conflict &&
+
+		mkdir olddir &&
+		test_seq 3 10 >olddir/a &&
+		test_seq 3 10 >olddir/b &&
+		git add olddir &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch upstream &&
+		test_seq 3 10 >olddir/a &&
+		test_seq 3 10 >olddir/b &&
+		git add olddir &&
+		git mv olddir newdir &&
+		git commit -m "Dir renamed" &&
+
+		git switch topic &&
+
+		>olddir/newfile &&
+		git add olddir/newfile &&
+		git commit -m A &&
+
+		test_seq 1 8 >olddir/a &&
+		test_seq 1 8 >olddir/b &&
+		git add olddir &&
+		git mv olddir otherdir &&
+		git commit -m B &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+		git config merge.directoryRenames true &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test_must_fail test-tool fast-rebase --onto HEAD upstream~1 topic >output &&
+		#git cherry-pick upstream..topic &&
+
+		grep CONFLICT..rename/rename output &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 2 calls
+	)
+'
+
+# Helper for the next two tests
+test_setup_upstream_rename () {
+	test_create_repo $1 &&
+	(
+		cd $1 &&
+
+		test_seq 3 8 >somefile &&
+		test_seq 3 8 >relevant-rename &&
+		git add somefile relevant-rename &&
+		mkdir olddir &&
+		test_write_lines a b c d e f g >olddir/a &&
+		test_write_lines z y x w v u t >olddir/b &&
+		git add olddir &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch upstream &&
+		test_seq 1 8 >somefile &&
+		test_seq 1 8 >relevant-rename &&
+		git add somefile relevant-rename &&
+		git mv relevant-rename renamed &&
+		echo h >>olddir/a &&
+		echo s >>olddir/b &&
+		git add olddir &&
+		git mv olddir newdir &&
+		git commit -m "Dir renamed"
+	)
+}
+
+#
+# In the following testcase, upstream renames a file in the toplevel directory
+# as well as its only directory:
+#   Base:     relevant-rename_1
+#             somefile
+#             olddir/a
+#             olddir/b
+#   Upstream: rename relevant-rename_1 -> renamed_2
+#             rename olddir/           -> newdir/
+#   Topic_1:  relevant-rename_3
+#   Topic_2:  olddir/newfile_1
+#   Topic_3:  olddir/newfile_2
+#
+# In this testcase, since the first commit being picked only modifies a
+# file in the toplevel directory, the directory rename is irrelevant for
+# that first merge.  However, we need to notice the directory rename for
+# the merge that picks the second commit, and we don't want the third
+# commit to mess up its location either.  We want to make sure that
+# olddir/newfile doesn't exist in the result and that newdir/newfile does.
+#
+# We also test that we only do rename detection twice.  We never need
+# rename detection on the topic side of history, but we do need it twice on
+# the upstream side of history.  For the first topic commit, we only need
+# the
+#   relevant-rename -> renamed
+# rename, because olddir is unmodified by Topic_1.  For Topic_2, however,
+# the new file being added to olddir means files that were previously
+# irrelevant for rename detection are now relevant, forcing us to repeat
+# rename detection for the paths we don't already have cached.  Topic_3 also
+# tweaks olddir/newfile, but the renames in olddir/ will have been cached
+# from the second rename detection run.
+#
+test_expect_success 'dir rename unneeded, then add new file to old dir' '
+	test_setup_upstream_rename dir-rename-unneeded-until-new-file &&
+	(
+		cd dir-rename-unneeded-until-new-file &&
+
+		git switch topic &&
+
+		test_seq 3 10 >relevant-rename &&
+		git add relevant-rename &&
+		git commit -m A &&
+
+		echo foo >olddir/newfile &&
+		git add olddir/newfile &&
+		git commit -m B &&
+
+		echo bar >>olddir/newfile &&
+		git add olddir/newfile &&
+		git commit -m C &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+		git config merge.directoryRenames true &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream..topic &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 2 calls &&
+
+		git ls-files >tracked &&
+		test_line_count = 5 tracked &&
+		test_path_is_missing olddir/newfile &&
+		test_path_is_file newdir/newfile
+	)
+'
+
+#
+# The following testcase is *very* similar to the last one, but instead of
+# adding a new olddir/newfile, it renames somefile -> olddir/newfile:
+#   Base:     relevant-rename_1
+#             somefile_1
+#             olddir/a
+#             olddir/b
+#   Upstream: rename relevant-rename_1 -> renamed_2
+#             rename olddir/           -> newdir/
+#   Topic_1:  relevant-rename_3
+#   Topic_2:  rename somefile -> olddir/newfile_2
+#   Topic_3:  modify olddir/newfile_3
+#
+# In this testcase, since the first commit being picked only modifies a
+# file in the toplevel directory, the directory rename is irrelevant for
+# that first merge.  However, we need to notice the directory rename for
+# the merge that picks the second commit, and we don't want the third
+# commit to mess up its location either.  We want to make sure that
+# neither somefile or olddir/newfile exists in the result and that
+# newdir/newfile does.
+#
+# This testcase needs one more call to rename detection than the last
+# testcase, because of the somefile -> olddir/newfile rename in Topic_2.
+test_expect_success 'dir rename unneeded, then rename existing file into old dir' '
+	test_setup_upstream_rename dir-rename-unneeded-until-file-moved-inside &&
+	(
+		cd dir-rename-unneeded-until-file-moved-inside &&
+
+		git switch topic &&
+
+		test_seq 3 10 >relevant-rename &&
+		git add relevant-rename &&
+		git commit -m A &&
+
+		test_seq 1 10 >somefile &&
+		git add somefile &&
+		git mv somefile olddir/newfile &&
+		git commit -m B &&
+
+		test_seq 1 12 >olddir/newfile &&
+		git add olddir/newfile &&
+		git commit -m C &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+		git config merge.directoryRenames true &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream..topic &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 3 calls &&
+
+		test_path_is_missing somefile &&
+		test_path_is_missing olddir/newfile &&
+		test_path_is_file newdir/newfile &&
+		git ls-files >tracked &&
+		test_line_count = 4 tracked
+	)
+'
+
+# Helper for the next two tests
+test_setup_topic_rename () {
+	test_create_repo $1 &&
+	(
+		cd $1 &&
+
+		test_seq 3 8 >somefile &&
+		mkdir olddir &&
+		test_seq 3 8 >olddir/a &&
+		echo b >olddir/b &&
+		git add olddir somefile &&
+		git commit -m orig &&
+
+		git branch upstream &&
+		git branch topic &&
+
+		git switch topic &&
+		test_seq 1 8 >somefile &&
+		test_seq 1 8 >olddir/a &&
+		git add somefile olddir/a &&
+		git mv olddir newdir &&
+		git commit -m "Dir renamed" &&
+
+		test_seq 1 10 >somefile &&
+		git add somefile &&
+		mkdir olddir &&
+		>olddir/unrelated-file &&
+		git add olddir &&
+		git commit -m "Unrelated file in recreated old dir"
+	)
+}
+
+#
+# In the following testcase, the first commit on the topic branch renames
+# a directory, while the second recreates the old directory and places a
+# file into it:
+#   Base:     somefile
+#             olddir/a
+#             olddir/b
+#   Upstream: olddir/newfile
+#   Topic_1:  somefile_2
+#             rename olddir/ -> newdir/
+#   Topic_2:  olddir/unrelated-file
+#
+# Note that the first pick should merge:
+#   Base:     somefile
+#             olddir/{a,b}
+#   Upstream: olddir/newfile
+#   Topic_1:  rename olddir/ -> newdir/
+# For which the expected result (assuming merge.directoryRenames=true) is
+# clearly:
+#   Result:   somefile
+#             newdir/{a, b, newfile}
+#
+# While the second pick does the following three-way merge:
+#   Base (Topic_1):           somefile
+#                             newdir/{a,b}
+#   Upstream (Result from 1): same files as base, but adds newdir/newfile
+#   Topic_2:                  same files as base, but adds olddir/unrelated-file
+#
+# The second merge is pretty trivial; upstream adds newdir/newfile, and
+# topic_2 adds olddir/unrelated-file.  We're just testing that we don't
+# accidentally cache directory renames somehow and rename
+# olddir/unrelated-file to newdir/unrelated-file.
+#
+# This testcase should only need one call to diffcore_rename_extended().
+test_expect_success 'caching renames only on upstream side, part 1' '
+	test_setup_topic_rename cache-renames-only-upstream-add-file &&
+	(
+		cd cache-renames-only-upstream-add-file &&
+
+		git switch upstream &&
+
+		>olddir/newfile &&
+		git add olddir/newfile &&
+		git commit -m "Add newfile" &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+
+		git config merge.directoryRenames true &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream..topic &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 1 calls &&
+
+		git ls-files >tracked &&
+		test_line_count = 5 tracked &&
+		test_path_is_missing newdir/unrelated-file &&
+		test_path_is_file olddir/unrelated-file &&
+		test_path_is_file newdir/newfile &&
+		test_path_is_file newdir/b &&
+		test_path_is_file newdir/a &&
+		test_path_is_file somefile
+	)
+'
+
+#
+# The following testcase is *very* similar to the last one, but instead of
+# adding a new olddir/newfile, it renames somefile -> olddir/newfile:
+#   Base:     somefile
+#             olddir/a
+#             olddir/b
+#   Upstream: somefile_1 -> olddir/newfile
+#   Topic_1:  rename olddir/ -> newdir/
+#             somefile_2
+#   Topic_2:  olddir/unrelated-file
+#             somefile_3
+#
+# Much like the previous test, this case is actually trivial and we are just
+# making sure there isn't some spurious directory rename caching going on
+# for the wrong side of history.
+#
+#
+# This testcase should only need two calls to diffcore_rename_extended(),
+# both for the first merge, one for each side of history.
+#
+test_expect_success 'caching renames only on upstream side, part 2' '
+	test_setup_topic_rename cache-renames-only-upstream-rename-file &&
+	(
+		cd cache-renames-only-upstream-rename-file &&
+
+		git switch upstream &&
+
+		git mv somefile olddir/newfile &&
+		git commit -m "Add newfile" &&
+
+		#
+		# Actual testing
+		#
+
+		git switch upstream &&
+
+		git config merge.directoryRenames true &&
+
+		GIT_TRACE2_PERF="$(pwd)/trace.output" &&
+		export GIT_TRACE2_PERF &&
+
+		test-tool fast-rebase --onto HEAD upstream~1 topic &&
+		#git cherry-pick upstream..topic &&
+
+		grep region_enter.*diffcore_rename trace.output >calls &&
+		test_line_count = 2 calls &&
+
+		git ls-files >tracked &&
+		test_line_count = 4 tracked &&
+		test_path_is_missing newdir/unrelated-file &&
+		test_path_is_file olddir/unrelated-file &&
+		test_path_is_file newdir/newfile &&
+		test_path_is_file newdir/b &&
+		test_path_is_file newdir/a
+	)
+'
+
+test_done
diff --git a/t/t6436-merge-overwrite.sh b/t/t6436-merge-overwrite.sh
index 362ae37..84b4aac 100755
--- a/t/t6436-merge-overwrite.sh
+++ b/t/t6436-merge-overwrite.sh
@@ -139,7 +139,7 @@
 	cp important sub &&
 	cp important sub2 &&
 	test_must_fail git merge sub 2>out &&
-	test_i18ncmp out expect &&
+	test_cmp out expect &&
 	test_path_is_missing .git/MERGE_HEAD &&
 	test_cmp important sub &&
 	test_cmp important sub2 &&
@@ -174,7 +174,7 @@
 	git checkout --orphan new &&
 	cp important c0.c &&
 	test_must_fail git merge c0 2>out &&
-	test_i18ncmp out expect
+	test_cmp out expect
 '
 
 test_expect_success 'will not overwrite untracked file on unborn branch .git/MERGE_HEAD sanity etc.' '
diff --git a/t/t6437-submodule-merge.sh b/t/t6437-submodule-merge.sh
index 0f92bcf..e5e89c2 100755
--- a/t/t6437-submodule-merge.sh
+++ b/t/t6437-submodule-merge.sh
@@ -6,6 +6,7 @@
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-merge.sh
 
 #
 # history
@@ -328,7 +329,7 @@
 	)
 '
 
-test_expect_failure 'file/submodule conflict' '
+test_expect_merge_algorithm failure success 'file/submodule conflict' '
 	test_when_finished "git -C file-submodule reset --hard" &&
 	(
 		cd file-submodule &&
@@ -437,7 +438,7 @@
 	)
 '
 
-test_expect_failure !FAIL_PREREQS 'directory/submodule conflict; should not treat submodule files as untracked or in the way' '
+test_expect_merge_algorithm failure success !FAIL_PREREQS 'directory/submodule conflict; should not treat submodule files as untracked or in the way' '
 	test_when_finished "git -C directory-submodule/path reset --hard" &&
 	test_when_finished "git -C directory-submodule reset --hard" &&
 	(
diff --git a/t/t6438-submodule-directory-file-conflicts.sh b/t/t6438-submodule-directory-file-conflicts.sh
index 04bf4be..8df67a0 100755
--- a/t/t6438-submodule-directory-file-conflicts.sh
+++ b/t/t6438-submodule-directory-file-conflicts.sh
@@ -12,8 +12,11 @@
 
 test_submodule_switch "merge --ff-only"
 
-KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
-KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+if test "$GIT_TEST_MERGE_ALGORITHM" != ort
+then
+	KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
+	KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+fi
 test_submodule_switch "merge --no-ff"
 
 test_done
diff --git a/t/t6439-merge-co-error-msgs.sh b/t/t6439-merge-co-error-msgs.sh
index e176475..5bfb027 100755
--- a/t/t6439-merge-co-error-msgs.sh
+++ b/t/t6439-merge-co-error-msgs.sh
@@ -40,14 +40,14 @@
 
 test_expect_success 'untracked files overwritten by merge (fast and non-fast forward)' '
 	test_must_fail git merge branch 2>out &&
-	test_i18ncmp out expect &&
+	test_cmp out expect &&
 	git commit --allow-empty -m empty &&
 	(
 		GIT_MERGE_VERBOSITY=0 &&
 		export GIT_MERGE_VERBOSITY &&
 		test_must_fail git merge branch 2>out2
 	) &&
-	test_i18ncmp out2 expect &&
+	test_cmp out2 expect &&
 	git reset --hard HEAD^
 '
 
@@ -68,7 +68,7 @@
 	git add three &&
 	git add four &&
 	test_must_fail git merge branch 2>out &&
-	test_i18ncmp out expect
+	test_cmp out expect
 '
 
 cat >expect <<\EOF
@@ -90,7 +90,7 @@
 	echo uno >rep/one &&
 	echo dos >rep/two &&
 	test_must_fail git checkout branch 2>out &&
-	test_i18ncmp out expect
+	test_cmp out expect
 '
 
 cat >expect <<\EOF
@@ -104,7 +104,7 @@
 test_expect_success 'not uptodate file porcelain checkout error' '
 	git add rep/one rep/two &&
 	test_must_fail git checkout branch 2>out &&
-	test_i18ncmp out expect
+	test_cmp out expect
 '
 
 cat >expect <<\EOF
@@ -135,7 +135,7 @@
 	>rep/untracked-file &&
 	>rep2/untracked-file &&
 	test_must_fail git checkout branch 2>out &&
-	test_i18ncmp out ../expect
+	test_cmp out ../expect
 '
 
 test_done
diff --git a/t/t6500-gc.sh b/t/t6500-gc.sh
index 60d961b..10c7ae7 100755
--- a/t/t6500-gc.sh
+++ b/t/t6500-gc.sh
@@ -95,6 +95,52 @@
 	)
 '
 
+test_expect_success 'pre-auto-gc hook can stop auto gc' '
+	cat >err.expect <<-\EOF &&
+	no gc for you
+	EOF
+
+	git init pre-auto-gc-hook &&
+	(
+		cd pre-auto-gc-hook &&
+		write_script ".git/hooks/pre-auto-gc" <<-\EOF &&
+		echo >&2 no gc for you &&
+		exit 1
+		EOF
+
+		git config gc.auto 3 &&
+		git config gc.autoDetach false &&
+
+		# We need to create two object whose sha1s start with 17
+		# since this is what git gc counts.  As it happens, these
+		# two blobs will do so.
+		test_commit "$(test_oid obj1)" &&
+		test_commit "$(test_oid obj2)" &&
+
+		git gc --auto >../out.actual 2>../err.actual
+	) &&
+	test_must_be_empty out.actual &&
+	test_cmp err.expect err.actual &&
+
+	cat >err.expect <<-\EOF &&
+	will gc for you
+	Auto packing the repository for optimum performance.
+	See "git help gc" for manual housekeeping.
+	EOF
+
+	(
+		cd pre-auto-gc-hook &&
+		write_script ".git/hooks/pre-auto-gc" <<-\EOF &&
+		echo >&2 will gc for you &&
+		exit 0
+		EOF
+		git gc --auto >../out.actual 2>../err.actual
+	) &&
+
+	test_must_be_empty out.actual &&
+	test_cmp err.expect err.actual
+'
+
 test_expect_success 'auto gc with too many loose objects does not attempt to create bitmaps' '
 	test_config gc.auto 3 &&
 	test_config gc.autodetach false &&
diff --git a/t/t6501-freshen-objects.sh b/t/t6501-freshen-objects.sh
index 75210f0..1066245 100755
--- a/t/t6501-freshen-objects.sh
+++ b/t/t6501-freshen-objects.sh
@@ -43,15 +43,25 @@
 }
 
 maybe_repack () {
-	if test -n "$repack"; then
+	case "$title" in
+	loose)
+		: skip repack
+		;;
+	repack)
 		git repack -ad
-	fi
+		;;
+	bitmap)
+		git repack -adb
+		;;
+	*)
+		echo >&2 "unknown test type in maybe_repack"
+		return 1
+		;;
+	esac
 }
 
-for repack in '' true; do
-	title=${repack:+repack}
-	title=${title:-loose}
-
+for title in loose repack bitmap
+do
 	test_expect_success "make repo completely empty ($title)" '
 		rm -rf .git &&
 		git init
diff --git a/t/t6600-test-reach.sh b/t/t6600-test-reach.sh
index e2d33a8..3d7a62d 100755
--- a/t/t6600-test-reach.sh
+++ b/t/t6600-test-reach.sh
@@ -55,7 +55,7 @@
 	git show-ref -s commit-5-5 | git commit-graph write --stdin-commits &&
 	mv .git/objects/info/commit-graph commit-graph-half &&
 	chmod u+w commit-graph-half &&
-	GIT_TEST_COMMIT_GRAPH_NO_GDAT=1 git commit-graph write --reachable &&
+	git -c commitGraph.generationVersion=1 commit-graph write --reachable &&
 	mv .git/objects/info/commit-graph commit-graph-no-gdat &&
 	chmod u+w commit-graph-no-gdat &&
 	git config core.commitGraph true
diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh
index 63d5f41..25bb9bb 100755
--- a/t/t7001-mv.sh
+++ b/t/t7001-mv.sh
@@ -3,74 +3,74 @@
 test_description='git mv in subdirs'
 . ./test-lib.sh
 
-test_expect_success \
-    'prepare reference tree' \
-    'mkdir path0 path1 &&
-     cp "$TEST_DIRECTORY"/../COPYING path0/COPYING &&
-     git add path0/COPYING &&
-     git commit -m add -a'
+test_expect_success 'prepare reference tree' '
+	mkdir path0 path1 &&
+	cp "$TEST_DIRECTORY"/../COPYING path0/COPYING &&
+	git add path0/COPYING &&
+	git commit -m add -a
+'
 
-test_expect_success \
-    'moving the file out of subdirectory' \
-    'cd path0 && git mv COPYING ../path1/COPYING'
+test_expect_success 'moving the file out of subdirectory' '
+	git -C path0 mv COPYING ../path1/COPYING
+'
 
 # in path0 currently
-test_expect_success \
-    'commiting the change' \
-    'cd .. && git commit -m move-out -a'
+test_expect_success 'commiting the change' '
+	git commit -m move-out -a
+'
 
-test_expect_success \
-    'checking the commit' \
-    'git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
-    grep "^R100..*path0/COPYING..*path1/COPYING" actual'
+test_expect_success 'checking the commit' '
+	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
+	grep "^R100..*path0/COPYING..*path1/COPYING" actual
+'
 
-test_expect_success \
-    'moving the file back into subdirectory' \
-    'cd path0 && git mv ../path1/COPYING COPYING'
+test_expect_success 'moving the file back into subdirectory' '
+	git -C path0 mv ../path1/COPYING COPYING
+'
 
 # in path0 currently
-test_expect_success \
-    'commiting the change' \
-    'cd .. && git commit -m move-in -a'
+test_expect_success 'commiting the change' '
+	git commit -m move-in -a
+'
 
-test_expect_success \
-    'checking the commit' \
-    'git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
-    grep "^R100..*path1/COPYING..*path0/COPYING" actual'
+test_expect_success 'checking the commit' '
+	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
+	grep "^R100..*path1/COPYING..*path0/COPYING" actual
+'
 
-test_expect_success \
-    'mv --dry-run does not move file' \
-    'git mv -n path0/COPYING MOVED &&
-     test -f path0/COPYING &&
-     test ! -f MOVED'
+test_expect_success 'mv --dry-run does not move file' '
+	git mv -n path0/COPYING MOVED &&
+	test -f path0/COPYING &&
+	test ! -f MOVED
+'
 
-test_expect_success \
-    'checking -k on non-existing file' \
-    'git mv -k idontexist path0'
+test_expect_success 'checking -k on non-existing file' '
+	git mv -k idontexist path0
+'
 
-test_expect_success \
-    'checking -k on untracked file' \
-    'touch untracked1 &&
-     git mv -k untracked1 path0 &&
-     test -f untracked1 &&
-     test ! -f path0/untracked1'
+test_expect_success 'checking -k on untracked file' '
+	>untracked1 &&
+	git mv -k untracked1 path0 &&
+	test -f untracked1 &&
+	test ! -f path0/untracked1
+'
 
-test_expect_success \
-    'checking -k on multiple untracked files' \
-    'touch untracked2 &&
-     git mv -k untracked1 untracked2 path0 &&
-     test -f untracked1 &&
-     test -f untracked2 &&
-     test ! -f path0/untracked1 &&
-     test ! -f path0/untracked2'
+test_expect_success 'checking -k on multiple untracked files' '
+	>untracked2 &&
+	git mv -k untracked1 untracked2 path0 &&
+	test -f untracked1 &&
+	test -f untracked2 &&
+	test ! -f path0/untracked1 &&
+	test ! -f path0/untracked2
+'
 
-test_expect_success \
-    'checking -f on untracked file with existing target' \
-    'touch path0/untracked1 &&
-     test_must_fail git mv -f untracked1 path0 &&
-     test ! -f .git/index.lock &&
-     test -f untracked1 &&
-     test -f path0/untracked1'
+test_expect_success 'checking -f on untracked file with existing target' '
+	>path0/untracked1 &&
+	test_must_fail git mv -f untracked1 path0 &&
+	test ! -f .git/index.lock &&
+	test -f untracked1 &&
+	test -f path0/untracked1
+'
 
 # clean up the mess in case bad things happen
 rm -f idontexist untracked1 untracked2 \
@@ -78,87 +78,89 @@
      .git/index.lock
 rmdir path1
 
-test_expect_success \
-    'moving to absent target with trailing slash' \
-    'test_must_fail git mv path0/COPYING no-such-dir/ &&
-     test_must_fail git mv path0/COPYING no-such-dir// &&
-     git mv path0/ no-such-dir/ &&
-     test_path_is_dir no-such-dir'
+test_expect_success 'moving to absent target with trailing slash' '
+	test_must_fail git mv path0/COPYING no-such-dir/ &&
+	test_must_fail git mv path0/COPYING no-such-dir// &&
+	git mv path0/ no-such-dir/ &&
+	test_path_is_dir no-such-dir
+'
 
-test_expect_success \
-    'clean up' \
-    'git reset --hard'
+test_expect_success 'clean up' '
+	git reset --hard
+'
 
-test_expect_success \
-    'moving to existing untracked target with trailing slash' \
-    'mkdir path1 &&
-     git mv path0/ path1/ &&
-     test_path_is_dir path1/path0/'
+test_expect_success 'moving to existing untracked target with trailing slash' '
+	mkdir path1 &&
+	git mv path0/ path1/ &&
+	test_path_is_dir path1/path0/
+'
 
-test_expect_success \
-    'moving to existing tracked target with trailing slash' \
-    'mkdir path2 &&
-     >path2/file && git add path2/file &&
-     git mv path1/path0/ path2/ &&
-     test_path_is_dir path2/path0/'
+test_expect_success 'moving to existing tracked target with trailing slash' '
+	mkdir path2 &&
+	>path2/file && git add path2/file &&
+	git mv path1/path0/ path2/ &&
+	test_path_is_dir path2/path0/
+'
 
-test_expect_success \
-    'clean up' \
-    'git reset --hard'
+test_expect_success 'clean up' '
+	git reset --hard
+'
 
-test_expect_success \
-    'adding another file' \
-    'cp "$TEST_DIRECTORY"/../README.md path0/README &&
-     git add path0/README &&
-     git commit -m add2 -a'
+test_expect_success 'adding another file' '
+	cp "$TEST_DIRECTORY"/../README.md path0/README &&
+	git add path0/README &&
+	git commit -m add2 -a
+'
 
-test_expect_success \
-    'moving whole subdirectory' \
-    'git mv path0 path2'
+test_expect_success 'moving whole subdirectory' '
+	git mv path0 path2
+'
 
-test_expect_success \
-    'commiting the change' \
-    'git commit -m dir-move -a'
+test_expect_success 'commiting the change' '
+	git commit -m dir-move -a
+'
 
-test_expect_success \
-    'checking the commit' \
-    'git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
-     grep "^R100..*path0/COPYING..*path2/COPYING" actual &&
-     grep "^R100..*path0/README..*path2/README" actual'
+test_expect_success 'checking the commit' '
+	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
+	grep "^R100..*path0/COPYING..*path2/COPYING" actual &&
+	grep "^R100..*path0/README..*path2/README" actual
+'
 
-test_expect_success \
-    'succeed when source is a prefix of destination' \
-    'git mv path2/COPYING path2/COPYING-renamed'
+test_expect_success 'succeed when source is a prefix of destination' '
+	git mv path2/COPYING path2/COPYING-renamed
+'
 
-test_expect_success \
-    'moving whole subdirectory into subdirectory' \
-    'git mv path2 path1'
+test_expect_success 'moving whole subdirectory into subdirectory' '
+	git mv path2 path1
+'
 
-test_expect_success \
-    'commiting the change' \
-    'git commit -m dir-move -a'
+test_expect_success 'commiting the change' '
+	git commit -m dir-move -a
+'
 
-test_expect_success \
-    'checking the commit' \
-    'git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
-     grep "^R100..*path2/COPYING..*path1/path2/COPYING" actual &&
-     grep "^R100..*path2/README..*path1/path2/README" actual'
+test_expect_success 'checking the commit' '
+	git diff-tree -r -M --name-status  HEAD^ HEAD >actual &&
+	grep "^R100..*path2/COPYING..*path1/path2/COPYING" actual &&
+	grep "^R100..*path2/README..*path1/path2/README" actual
+'
 
-test_expect_success \
-    'do not move directory over existing directory' \
-    'mkdir path0 && mkdir path0/path2 && test_must_fail git mv path2 path0'
+test_expect_success 'do not move directory over existing directory' '
+	mkdir path0 &&
+	mkdir path0/path2 &&
+	test_must_fail git mv path2 path0
+'
 
-test_expect_success \
-    'move into "."' \
-    'git mv path1/path2/ .'
+test_expect_success 'move into "."' '
+	git mv path1/path2/ .
+'
 
 test_expect_success "Michael Cassar's test case" '
 	rm -fr .git papers partA &&
 	git init &&
 	mkdir -p papers/unsorted papers/all-papers partA &&
-	echo a > papers/unsorted/Thesis.pdf &&
-	echo b > partA/outline.txt &&
-	echo c > papers/unsorted/_another &&
+	echo a >papers/unsorted/Thesis.pdf &&
+	echo b >partA/outline.txt &&
+	echo c >papers/unsorted/_another &&
 	git add papers partA &&
 	T1=$(git write-tree) &&
 
@@ -181,43 +183,42 @@
 	git mv ab a
 '
 
-test_expect_success 'absolute pathname' '(
+test_expect_success 'absolute pathname' '
+	(
+		rm -fr mine &&
+		mkdir mine &&
+		cd mine &&
+		test_create_repo one &&
+		cd one &&
+		mkdir sub &&
+		>sub/file &&
+		git add sub/file &&
 
-	rm -fr mine &&
-	mkdir mine &&
-	cd mine &&
-	test_create_repo one &&
-	cd one &&
-	mkdir sub &&
-	>sub/file &&
-	git add sub/file &&
+		git mv sub "$(pwd)/in" &&
+		! test -d sub &&
+		test -d in &&
+		git ls-files --error-unmatch in/file
+	)
+'
 
-	git mv sub "$(pwd)/in" &&
-	! test -d sub &&
-	test -d in &&
-	git ls-files --error-unmatch in/file
+test_expect_success 'absolute pathname outside should fail' '
+	(
+		rm -fr mine &&
+		mkdir mine &&
+		cd mine &&
+		out=$(pwd) &&
+		test_create_repo one &&
+		cd one &&
+		mkdir sub &&
+		>sub/file &&
+		git add sub/file &&
 
-
-)'
-
-test_expect_success 'absolute pathname outside should fail' '(
-
-	rm -fr mine &&
-	mkdir mine &&
-	cd mine &&
-	out=$(pwd) &&
-	test_create_repo one &&
-	cd one &&
-	mkdir sub &&
-	>sub/file &&
-	git add sub/file &&
-
-	test_must_fail git mv sub "$out/out" &&
-	test -d sub &&
-	! test -d ../in &&
-	git ls-files --error-unmatch sub/file
-
-)'
+		test_must_fail git mv sub "$out/out" &&
+		test -d sub &&
+		! test -d ../in &&
+		git ls-files --error-unmatch sub/file
+	)
+'
 
 test_expect_success 'git mv to move multiple sources into a directory' '
 	rm -fr .git && git init &&
@@ -227,23 +228,24 @@
 	git add dir/?.txt &&
 	git mv dir/a.txt dir/b.txt other &&
 	git ls-files >actual &&
-	{ echo other/a.txt; echo other/b.txt; } >expect &&
+	cat >expect <<-\EOF &&
+	other/a.txt
+	other/b.txt
+	EOF
 	test_cmp expect actual
 '
 
 test_expect_success 'git mv should not change sha1 of moved cache entry' '
-
 	rm -fr .git &&
 	git init &&
 	echo 1 >dirty &&
 	git add dirty &&
 	entry="$(git ls-files --stage dirty | cut -f 1)" &&
 	git mv dirty dirty2 &&
-	[ "$entry" = "$(git ls-files --stage dirty2 | cut -f 1)" ] &&
+	test "$entry" = "$(git ls-files --stage dirty2 | cut -f 1)" &&
 	echo 2 >dirty2 &&
 	git mv dirty2 dirty &&
-	[ "$entry" = "$(git ls-files --stage dirty | cut -f 1)" ]
-
+	test "$entry" = "$(git ls-files --stage dirty | cut -f 1)"
 '
 
 rm -f dirty dirty2
@@ -266,7 +268,6 @@
 '
 
 test_expect_success 'git mv should overwrite symlink to a file' '
-
 	rm -fr .git &&
 	git init &&
 	echo 1 >moved &&
@@ -279,13 +280,11 @@
 	test "$(cat symlink)" = 1 &&
 	git update-index --refresh &&
 	git diff-files --quiet
-
 '
 
 rm -f moved symlink
 
 test_expect_success 'git mv should overwrite file with a symlink' '
-
 	rm -fr .git &&
 	git init &&
 	echo 1 >moved &&
@@ -296,11 +295,9 @@
 	! test -e symlink &&
 	git update-index --refresh &&
 	git diff-files --quiet
-
 '
 
 test_expect_success SYMLINKS 'check moved symlink' '
-
 	test -h moved
 '
 
@@ -335,11 +332,8 @@
 	mkdir mod &&
 	git mv sub mod/sub &&
 	! test -e sub &&
-	[ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
-	(
-		cd mod/sub &&
-		git status
-	) &&
+	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
+	git -C mod/sub status &&
 	git update-index --refresh &&
 	git diff-files --quiet
 '
@@ -358,11 +352,8 @@
 	mkdir mod &&
 	git mv sub mod/sub &&
 	! test -e sub &&
-	[ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
-	(
-		cd mod/sub &&
-		git status
-	) &&
+	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
+	git -C mod/sub status &&
 	echo mod/sub >expected &&
 	git config -f .gitmodules submodule.sub.path >actual &&
 	test_cmp expected actual &&
@@ -376,16 +367,10 @@
 	git submodule update &&
 	entry="$(git ls-files --stage sub | cut -f 1)" &&
 	mkdir mod &&
-	(
-		cd mod &&
-		git mv ../sub/ .
-	) &&
+	git -C mod mv ../sub/ . &&
 	! test -e sub &&
-	[ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
-	(
-		cd mod/sub &&
-		git status
-	) &&
+	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
+	git -C mod/sub status &&
 	echo mod/sub >expected &&
 	git config -f .gitmodules submodule.sub.path >actual &&
 	test_cmp expected actual &&
@@ -403,11 +388,8 @@
 	git mv sub mod/sub 2>actual.err &&
 	test_must_be_empty actual.err &&
 	! test -e sub &&
-	[ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
-	(
-		cd mod/sub &&
-		git status
-	) &&
+	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
+	git -C mod/sub status &&
 	git update-index --refresh &&
 	git diff-files --quiet
 '
@@ -427,11 +409,8 @@
 	git mv sub mod/sub 2>actual.err &&
 	test_must_be_empty actual.err &&
 	! test -e sub &&
-	[ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
-	(
-		cd mod/sub &&
-		git status
-	) &&
+	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
+	git -C mod/sub status &&
 	git update-index --refresh &&
 	git diff-files --quiet
 '
@@ -446,13 +425,10 @@
 	echo "warning: Could not find section in .gitmodules where path=sub" >expect.err &&
 	mkdir mod &&
 	git mv sub mod/sub 2>actual.err &&
-	test_i18ncmp expect.err actual.err &&
+	test_cmp expect.err actual.err &&
 	! test -e sub &&
-	[ "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" ] &&
-	(
-		cd mod/sub &&
-		git status
-	) &&
+	test "$entry" = "$(git ls-files --stage mod/sub | cut -f 1)" &&
+	git -C mod/sub status &&
 	git update-index --refresh &&
 	git diff-files --quiet
 '
@@ -515,15 +491,17 @@
 test_expect_success 'moving nested submodules' '
 	git commit -am "cleanup commit" &&
 	mkdir sub_nested_nested &&
-	(cd sub_nested_nested &&
-		touch nested_level2 &&
+	(
+		cd sub_nested_nested &&
+		>nested_level2 &&
 		git init &&
 		git add . &&
 		git commit -m "nested level 2"
 	) &&
 	mkdir sub_nested &&
-	(cd sub_nested &&
-		touch nested_level1 &&
+	(
+		cd sub_nested &&
+		>nested_level1 &&
 		git init &&
 		git add . &&
 		git commit -m "nested level 1" &&
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index 1c55695..e18a218 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -395,8 +395,11 @@
 test_expect_success '--prune-empty is able to prune entire branch' '
 	git branch prune-entire B &&
 	git filter-branch -f --prune-empty --index-filter "git update-index --remove A.t B.t" prune-entire &&
-	test_path_is_missing .git/refs/heads/prune-entire &&
-	test_must_fail git reflog exists refs/heads/prune-entire
+	test_must_fail git rev-parse refs/heads/prune-entire &&
+	if test_have_prereq REFFILES
+	then
+		test_must_fail git reflog exists refs/heads/prune-entire
+	fi
 '
 
 test_expect_success '--remap-to-ancestor with filename filters' '
@@ -506,4 +509,35 @@
 	! fgrep fatal filter-output
 '
 
+test_expect_success 'filter-branch handles ref deletion' '
+	git switch --orphan empty-commit &&
+	git commit --allow-empty -m "empty commit" &&
+	git tag empty &&
+	git branch to-delete &&
+	git filter-branch -f --prune-empty to-delete >out 2>&1 &&
+	grep "to-delete.*was deleted" out &&
+	test_must_fail git rev-parse --verify to-delete
+'
+
+test_expect_success 'filter-branch handles ref rewrite' '
+	git checkout empty &&
+	test_commit to-drop &&
+	git branch rewrite &&
+	git filter-branch -f \
+		--index-filter "git rm --ignore-unmatch --cached to-drop.t" \
+		 rewrite >out 2>&1 &&
+	grep "rewrite.*was rewritten" out &&
+	! grep -i warning out &&
+	git diff-tree empty rewrite
+'
+
+test_expect_success 'filter-branch handles ancestor rewrite' '
+	test_commit to-exclude &&
+	git branch ancestor &&
+	git filter-branch -f ancestor -- :^to-exclude.t >out 2>&1 &&
+	grep "ancestor.*was rewritten" out &&
+	! grep -i warning out &&
+	git diff-tree HEAD^ ancestor
+'
+
 test_done
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index 400b83a..2f72c5c 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -98,7 +98,7 @@
 	git tag --create-reflog tag_with_reflog &&
 	git reflog exists refs/tags/tag_with_reflog &&
 	sed -e "s/^.*	//" .git/logs/refs/tags/tag_with_reflog >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'annotated tag with --create-reflog has correct message' '
@@ -109,7 +109,7 @@
 	git tag -m "annotated tag" --create-reflog tag_with_reflog &&
 	git reflog exists refs/tags/tag_with_reflog &&
 	sed -e "s/^.*	//" .git/logs/refs/tags/tag_with_reflog >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success '--create-reflog does not create reflog on failure' '
@@ -1434,7 +1434,7 @@
 	# check the first line --- should be empty
 	echo >first.expect &&
 	sed -e 1q <actual >first.actual &&
-	test_i18ncmp first.expect first.actual
+	test_cmp first.expect first.actual
 '
 
 test_expect_success \
@@ -1757,7 +1757,7 @@
 	hint: Disable this message with "git config advice.nestedTag false"
 	EOF
 	git tag -m nested nested annotated-v4.0 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'multiple --points-at are OR-ed together' '
diff --git a/t/t7007-show.sh b/t/t7007-show.sh
index 42d3db6..d6cc69e 100755
--- a/t/t7007-show.sh
+++ b/t/t7007-show.sh
@@ -38,6 +38,45 @@
 	test_cmp expect actual.filtered
 '
 
+test_expect_success 'showing a tree' '
+	cat >expected <<-EOF &&
+	tree main1:
+
+	main1.t
+	EOF
+	git show main1: >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'showing two trees' '
+	cat >expected <<-EOF &&
+	tree main1^{tree}
+
+	main1.t
+
+	tree main2^{tree}
+
+	main1.t
+	main2.t
+	EOF
+	git show main1^{tree} main2^{tree} >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'showing a trees is not recursive' '
+	git worktree add not-recursive main1 &&
+	mkdir not-recursive/a &&
+	test_commit -C not-recursive a/file &&
+	cat >expected <<-EOF &&
+	tree HEAD^{tree}
+
+	a/
+	main1.t
+	EOF
+	git -C not-recursive show HEAD^{tree} >actual &&
+	test_cmp expected actual
+'
+
 test_expect_success 'showing a range walks (linear)' '
 	cat >expect <<-EOF &&
 	commit $(git rev-parse main3)
diff --git a/t/t7011-skip-worktree-reading.sh b/t/t7011-skip-worktree-reading.sh
index 37525ca..1761a2b 100755
--- a/t/t7011-skip-worktree-reading.sh
+++ b/t/t7011-skip-worktree-reading.sh
@@ -109,15 +109,6 @@
 	test -z "$(git ls-files -m)"
 '
 
-test_expect_success 'grep with skip-worktree file' '
-	git update-index --no-skip-worktree 1 &&
-	echo test > 1 &&
-	git update-index 1 &&
-	git update-index --skip-worktree 1 &&
-	rm 1 &&
-	test "$(git grep --no-ext-grep test)" = "1:test"
-'
-
 echo ":000000 100644 $ZERO_OID $EMPTY_BLOB A	1" > expected
 test_expect_success 'diff-index does not examine skip-worktree absent entries' '
 	setup_absent &&
@@ -141,11 +132,6 @@
 	test -z "$(git diff-files -- one)"
 '
 
-test_expect_success 'git-rm succeeds on skip-worktree absent entries' '
-	setup_absent &&
-	git rm 1
-'
-
 test_expect_success 'commit on skip-worktree absent entries' '
 	git reset &&
 	setup_absent &&
diff --git a/t/t7012-skip-worktree-writing.sh b/t/t7012-skip-worktree-writing.sh
index e5c6a03..a1080b9 100755
--- a/t/t7012-skip-worktree-writing.sh
+++ b/t/t7012-skip-worktree-writing.sh
@@ -60,13 +60,6 @@
 	git update-index --skip-worktree 1
 }
 
-test_absent() {
-	echo "100644 $EMPTY_BLOB 0	1" > expected &&
-	git ls-files --stage 1 > result &&
-	test_cmp expected result &&
-	test ! -f 1
-}
-
 setup_dirty() {
 	git update-index --force-remove 1 &&
 	echo dirty > 1 &&
@@ -100,18 +93,6 @@
 	test_cmp expected result
 '
 
-test_expect_success 'git-add ignores worktree content' '
-	setup_absent &&
-	git add 1 &&
-	test_absent
-'
-
-test_expect_success 'git-add ignores worktree content' '
-	setup_dirty &&
-	git add 1 &&
-	test_dirty
-'
-
 test_expect_success 'git-rm fails if worktree is dirty' '
 	setup_dirty &&
 	test_must_fail git rm 1 &&
@@ -125,13 +106,13 @@
 test_expect_success 'git-clean, absent case' '
 	setup_absent &&
 	git clean -n > result &&
-	test_i18ncmp expected result
+	test_cmp expected result
 '
 
 test_expect_success 'git-clean, dirty case' '
 	setup_dirty &&
 	git clean -n > result &&
-	test_i18ncmp expected result
+	test_cmp expected result
 '
 
 test_expect_success '--ignore-skip-worktree-entries leaves worktree alone' '
diff --git a/t/t7060-wtstatus.sh b/t/t7060-wtstatus.sh
index 72fb418..0f4344c 100755
--- a/t/t7060-wtstatus.sh
+++ b/t/t7060-wtstatus.sh
@@ -56,9 +56,9 @@
 		git commit -m delete &&
 		test_must_fail git merge main &&
 		test_must_fail git commit --dry-run >../actual &&
-		test_i18ncmp ../expect ../actual &&
+		test_cmp ../expect ../actual &&
 		git status >../actual &&
-		test_i18ncmp ../expect ../actual
+		test_cmp ../expect ../actual
 	)
 '
 
@@ -151,7 +151,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -185,7 +185,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -210,7 +210,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual &&
+	test_cmp expected actual &&
 	git reset --hard &&
 	git checkout main
 '
@@ -227,7 +227,7 @@
 	?? expected
 	?? mdconflict/
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 ## Duplicate the above test and verify --porcelain=v1 arg parsing.
@@ -243,7 +243,7 @@
 	?? expected
 	?? mdconflict/
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 ## Verify parser error on invalid --porcelain argument.
diff --git a/t/t7063-status-untracked-cache.sh b/t/t7063-status-untracked-cache.sh
index f01bf27..a0c123b 100755
--- a/t/t7063-status-untracked-cache.sh
+++ b/t/t7063-status-untracked-cache.sh
@@ -57,6 +57,20 @@
 	return $ret
 }
 
+get_relevant_traces () {
+	# From the GIT_TRACE2_PERF data of the form
+	#    $TIME $FILE:$LINE | d0 | main | data | r1 | ? | ? | read_directo | $RELEVANT_STAT
+	# extract the $RELEVANT_STAT fields.  We don't care about region_enter
+	# or region_leave, or stats for things outside read_directory.
+	INPUT_FILE=$1
+	OUTPUT_FILE=$2
+	grep data.*read_directo $INPUT_FILE |
+	    cut -d "|" -f 9 |
+	    grep -v visited \
+	    >"$OUTPUT_FILE"
+}
+
+
 test_lazy_prereq UNTRACKED_CACHE '
 	{ git update-index --test-untracked-cache; ret=$?; } &&
 	test $ret -ne 1
@@ -129,19 +143,21 @@
 
 test_expect_success 'status first time (empty cache)' '
 	avoid_racy &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 3
-gitignore invalidation: 1
-directory invalidation: 0
-opendir: 4
+ ....path:
+ ....node-creation:3
+ ....gitignore-invalidation:1
+ ....directory-invalidation:0
+ ....opendir:4
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache after first status' '
@@ -151,19 +167,21 @@
 
 test_expect_success 'status second time (fully populated cache)' '
 	avoid_racy &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 0
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:0
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache after second status' '
@@ -174,8 +192,8 @@
 test_expect_success 'modify in root directory, one dir invalidation' '
 	avoid_racy &&
 	: >four &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -189,13 +207,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 1
-opendir: 1
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:1
+ ....opendir:1
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 
 '
 
@@ -223,8 +243,8 @@
 test_expect_success 'new .gitignore invalidates recursively' '
 	avoid_racy &&
 	echo four >.gitignore &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -238,13 +258,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 1
-directory invalidation: 1
-opendir: 4
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:1
+ ....directory-invalidation:1
+ ....opendir:4
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 
 '
 
@@ -272,8 +294,8 @@
 test_expect_success 'new info/exclude invalidates everything' '
 	avoid_racy &&
 	echo three >>.git/info/exclude &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -285,13 +307,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 1
-directory invalidation: 0
-opendir: 4
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:1
+ ....directory-invalidation:0
+ ....opendir:4
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump' '
@@ -330,8 +354,8 @@
 '
 
 test_expect_success 'status after the move' '
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -343,13 +367,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 1
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:1
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump' '
@@ -389,8 +415,8 @@
 '
 
 test_expect_success 'status after the move' '
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -402,13 +428,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 1
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:1
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump' '
@@ -438,8 +466,8 @@
 '
 
 test_expect_success 'status after commit' '
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -448,13 +476,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 2
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:2
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache correct after commit' '
@@ -496,9 +526,9 @@
 '
 
 test_expect_success 'test sparse status with untracked cache' '
-	: >../trace &&
+	: >../trace.output &&
 	avoid_racy &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../status.actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -509,13 +539,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../status.actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 1
-directory invalidation: 2
-opendir: 2
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:1
+ ....directory-invalidation:2
+ ....opendir:2
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'untracked cache correct after status' '
@@ -539,8 +571,8 @@
 
 test_expect_success 'test sparse status again with untracked cache' '
 	avoid_racy &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../status.actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -551,13 +583,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../status.actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 0
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:0
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'set up for test of subdir and sparse checkouts' '
@@ -568,8 +602,8 @@
 
 test_expect_success 'test sparse status with untracked cache and subdir' '
 	avoid_racy &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../status.actual &&
 	iuc status --porcelain >../status.iuc &&
 	cat >../status.expect <<EOF &&
@@ -581,13 +615,15 @@
 EOF
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../status.actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 2
-gitignore invalidation: 0
-directory invalidation: 1
-opendir: 3
+ ....path:
+ ....node-creation:2
+ ....gitignore-invalidation:0
+ ....directory-invalidation:1
+ ....opendir:3
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'verify untracked cache dump (sparse/subdirs)' '
@@ -616,19 +652,21 @@
 
 test_expect_success 'test sparse status again with untracked cache and subdir' '
 	avoid_racy &&
-	: >../trace &&
-	GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
+	: >../trace.output &&
+	GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
 	git status --porcelain >../status.actual &&
 	iuc status --porcelain >../status.iuc &&
 	test_cmp ../status.expect ../status.iuc &&
 	test_cmp ../status.expect ../status.actual &&
+	get_relevant_traces ../trace.output ../trace.relevant &&
 	cat >../trace.expect <<EOF &&
-node creation: 0
-gitignore invalidation: 0
-directory invalidation: 0
-opendir: 0
+ ....path:
+ ....node-creation:0
+ ....gitignore-invalidation:0
+ ....directory-invalidation:0
+ ....opendir:0
 EOF
-	test_cmp ../trace.expect ../trace
+	test_cmp ../trace.expect ../trace.relevant
 '
 
 test_expect_success 'move entry in subdir from untracked to cached' '
@@ -731,7 +769,7 @@
 	cp -R done dthree dtwo four three ../other_worktree &&
 	GIT_WORK_TREE=../other_worktree git status 2>../err &&
 	echo "warning: untracked cache is disabled on this system or location" >../expect &&
-	test_i18ncmp ../expect ../err
+	test_cmp ../expect ../err
 '
 
 test_expect_success 'untracked cache survives a checkout' '
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 7d8fb18..601b2bf 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -75,14 +75,14 @@
 	hex=$(git log -1 --format="%h") &&
 	git reset --hard >.actual &&
 	echo HEAD is now at $hex $(commit_msg) >.expected &&
-	test_i18ncmp .expected .actual
+	test_cmp .expected .actual
 '
 
 test_expect_success 'reset --hard message (ISO8859-1 logoutputencoding)' '
 	hex=$(git log -1 --format="%h") &&
 	git -c "i18n.logOutputEncoding=$test_encoding" reset --hard >.actual &&
 	echo HEAD is now at $hex $(commit_msg $test_encoding) >.expected &&
-	test_i18ncmp .expected .actual
+	test_cmp .expected .actual
 '
 
 test_expect_success 'giving a non existing revision should fail' '
@@ -469,7 +469,7 @@
 	EOF
 	echo 123 >>file2 &&
 	git reset --mixed HEAD >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'resetting specific path that is unmerged' '
diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh
index cb5e34d..0399701 100755
--- a/t/t7300-clean.sh
+++ b/t/t7300-clean.sh
@@ -110,7 +110,7 @@
 
 '
 
-test_expect_success C_LOCALE_OUTPUT 'git clean with relative prefix' '
+test_expect_success 'git clean with relative prefix' '
 
 	mkdir -p build docs &&
 	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
@@ -123,7 +123,7 @@
 	verbose test "$would_clean" = ../src/part3.c
 '
 
-test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' '
+test_expect_success 'git clean with absolute path' '
 
 	mkdir -p build docs &&
 	touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
@@ -407,7 +407,7 @@
 
 '
 
-test_expect_success C_LOCALE_OUTPUT 'core.excludesfile' '
+test_expect_success 'core.excludesfile' '
 
 	echo excludes >excludes &&
 	echo included >included &&
@@ -746,4 +746,46 @@
 	test_must_be_empty actual
 '
 
+test_expect_success 'avoid traversing into ignored directories' '
+	test_when_finished rm -f output error trace.* &&
+	test_create_repo avoid-traversing-deep-hierarchy &&
+	(
+		cd avoid-traversing-deep-hierarchy &&
+
+		mkdir -p untracked/subdir/with/a &&
+		>untracked/subdir/with/a/random-file.txt &&
+
+		GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
+		git clean -ffdxn -e untracked
+	) &&
+
+	# Make sure we only visited into the top-level directory, and did
+	# not traverse into the "untracked" subdirectory since it was excluded
+	grep data.*read_directo.*directories-visited trace.output |
+		cut -d "|" -f 9 >trace.relevant &&
+	cat >trace.expect <<-EOF &&
+	 ..directories-visited:1
+	EOF
+	test_cmp trace.expect trace.relevant
+'
+
+test_expect_success 'traverse into directories that may have ignored entries' '
+	test_when_finished rm -f output &&
+	test_create_repo need-to-traverse-into-hierarchy &&
+	(
+		cd need-to-traverse-into-hierarchy &&
+		mkdir -p modules/foobar/src/generated &&
+		> modules/foobar/src/generated/code.c &&
+		> modules/foobar/Makefile &&
+		echo "/modules/**/src/generated/" >.gitignore &&
+
+		git clean -fX modules/foobar >../output &&
+
+		grep Removing ../output &&
+
+		test_path_is_missing modules/foobar/src/generated/code.c &&
+		test_path_is_file modules/foobar/Makefile
+	)
+'
+
 test_done
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index d44f696..a924fdb 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -55,7 +55,7 @@
 	EOF
 	git init repo-no-commits &&
 	test_must_fail git submodule add ../a ./repo-no-commits 2>actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'status should ignore inner git repo when not added' '
@@ -185,7 +185,7 @@
 		git add --force .gitignore &&
 		git commit -m"Ignore everything" &&
 		! git submodule add "$submodurl" submod >actual 2>&1 &&
-		test_i18ncmp expect actual
+		test_cmp expect actual
 	)
 '
 
diff --git a/t/t7401-submodule-summary.sh b/t/t7401-submodule-summary.sh
index 7608814..9c3cc4c 100755
--- a/t/t7401-submodule-summary.sh
+++ b/t/t7401-submodule-summary.sh
@@ -190,7 +190,7 @@
 	  < Add foo5
 
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 test_expect_success 'typechanged submodule(submodule->blob), --files' "
@@ -200,7 +200,7 @@
 	  > Add foo5
 
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 rm -rf sm1 &&
@@ -211,7 +211,7 @@
 	* sm1 $head4(submodule)->$head5(blob):
 
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 rm -f sm1 &&
@@ -224,7 +224,7 @@
 	  Warn: sm1 doesn't contain commit $head4_full
 
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 commit_file
@@ -235,7 +235,7 @@
 	  > Add foo7
 
 	EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 "
 
 commit_file sm1 &&
@@ -292,7 +292,7 @@
 
 test_expect_success '--for-status' "
 	git submodule summary --for-status HEAD^ >actual &&
-	test_i18ncmp - actual <<-EOF
+	test_cmp - actual <<-EOF
 	* sm1 $head6...0000000:
 
 	* sm2 0000000...$head7 (2):
diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index b9c1624..f4f61fe 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -155,9 +155,9 @@
 	 cd tmp &&
 	 git submodule update --init --recursive ../super >../../actual 2>../../actual2
 	) &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	sort actual2 >actual2.sorted &&
-	test_i18ncmp expect2 actual2.sorted
+	test_cmp expect2 actual2.sorted
 '
 
 cat <<EOF >expect2
@@ -174,7 +174,7 @@
 	  git submodule update --init sub 2>../../actual2
 	 )
 	) &&
-	test_i18ncmp expect2 actual2
+	test_cmp expect2 actual2
 '
 
 test_expect_success 'submodule update does not fetch already present commits' '
@@ -192,7 +192,7 @@
 	(cd super &&
 	  git submodule update > ../actual 2> ../actual.err
 	) &&
-	test_i18ncmp expected actual &&
+	test_cmp expected actual &&
 	test_must_be_empty actual.err
 '
 
@@ -461,7 +461,7 @@
 	(cd super &&
 	 test_must_fail git submodule update submodule 2>../actual
 	) &&
-	test_i18ncmp actual expect
+	test_cmp actual expect
 '
 
 cat << EOF >expect
@@ -479,7 +479,7 @@
 	 mkdir tmp && cd tmp &&
 	 test_must_fail git submodule update ../submodule 2>../../actual
 	) &&
-	test_i18ncmp actual expect
+	test_cmp actual expect
 '
 
 test_expect_success 'submodule update - command run for initial population of submodule' '
@@ -488,7 +488,7 @@
 	EOF
 	rm -rf super/submodule &&
 	test_must_fail git -C super submodule update 2>actual &&
-	test_i18ncmp expect actual &&
+	test_cmp expect actual &&
 	git -C super submodule update --checkout
 '
 
@@ -509,7 +509,7 @@
 	 mkdir -p tmp && cd tmp &&
 	 test_must_fail git submodule update --recursive ../super 2>../../actual
 	) &&
-	test_i18ncmp actual expect
+	test_cmp actual expect
 '
 
 test_expect_success 'submodule init does not copy command into .git/config' '
@@ -1037,4 +1037,28 @@
 	)
 '
 
+test_expect_success 'submodule update --quiet passes quietness to fetch with a shallow clone' '
+	test_when_finished "rm -rf super4 super5 super6" &&
+	git clone . super4 &&
+	(cd super4 &&
+	 git submodule add --quiet file://"$TRASH_DIRECTORY"/submodule submodule3 &&
+	 git commit -am "setup submodule3"
+	) &&
+	(cd submodule &&
+	  test_commit line6 file
+	) &&
+	git clone super4 super5 &&
+	(cd super5 &&
+	 git submodule update --quiet --init --depth=1 submodule3 >out 2>err &&
+	 test_must_be_empty out &&
+	 test_must_be_empty err
+	) &&
+	git clone super4 super6 &&
+	(cd super6 &&
+	 git submodule update --init --depth=1 submodule3 >out 2>err &&
+	 test_file_not_empty out &&
+	 test_file_not_empty err
+	)
+'
+
 test_done
diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh
index 79981b5..e2f110b 100755
--- a/t/t7407-submodule-foreach.sh
+++ b/t/t7407-submodule-foreach.sh
@@ -80,7 +80,7 @@
 		git config foo.bar zar &&
 		git submodule foreach "git config --file \"\$toplevel/.git/config\" foo.bar"
 	) &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat >expect <<EOF
@@ -96,7 +96,7 @@
 		cd clone/sub &&
 		git submodule foreach "echo \$toplevel-\$name-\$sm_path-\$displaypath-\$sha1" >../../actual
 	) &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'setup nested submodules' '
@@ -177,7 +177,7 @@
 		cd clone2 &&
 		git submodule foreach --recursive "true" > ../actual
 	) &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat > expect <<EOF
@@ -197,7 +197,7 @@
 		cd untracked &&
 		git submodule foreach --recursive >../../actual
 	) &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 sub1sha1=$(cd clone2/sub1 && git rev-parse HEAD)
 sub2sha1=$(cd clone2/sub2 && git rev-parse HEAD)
@@ -229,7 +229,7 @@
 		cd clone2/untracked &&
 		git submodule foreach --recursive "echo toplevel: \$toplevel name: \$name path: \$sm_path displaypath: \$displaypath hash: \$sha1" >../../actual
 	) &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 cat > expect <<EOF
diff --git a/t/t7415-submodule-names.sh b/t/t7450-bad-git-dotfiles.sh
similarity index 66%
rename from t/t7415-submodule-names.sh
rename to t/t7450-bad-git-dotfiles.sh
index f70368b..41706c1 100755
--- a/t/t7415-submodule-names.sh
+++ b/t/t7450-bad-git-dotfiles.sh
@@ -1,9 +1,16 @@
 #!/bin/sh
 
-test_description='check handling of .. in submodule names
+test_description='check broken or malicious patterns in .git* files
 
-Exercise the name-checking function on a variety of names, and then give a
-real-world setup that confirms we catch this in practice.
+Such as:
+
+  - presence of .. in submodule names;
+    Exercise the name-checking function on a variety of names, and then give a
+    real-world setup that confirms we catch this in practice.
+
+  - nested submodule names
+
+  - symlinked .gitmodules, etc
 '
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-pack.sh
@@ -132,31 +139,84 @@
 	grep gitmodulesName output
 '
 
-test_expect_success 'fsck detects symlinked .gitmodules file' '
-	git init symlink &&
-	(
-		cd symlink &&
+check_dotx_symlink () {
+	fsck_must_fail=test_must_fail
+	fsck_prefix=error
+	refuse_index=t
+	case "$1" in
+	--warning)
+		fsck_must_fail=
+		fsck_prefix=warning
+		refuse_index=
+		shift
+		;;
+	esac
 
-		# Make the tree directly to avoid index restrictions.
-		#
-		# Because symlinks store the target as a blob, choose
-		# a pathname that could be parsed as a .gitmodules file
-		# to trick naive non-symlink-aware checking.
-		tricky="[foo]bar=true" &&
-		content=$(git hash-object -w ../.gitmodules) &&
-		target=$(printf "$tricky" | git hash-object -w --stdin) &&
-		{
-			printf "100644 blob $content\t$tricky\n" &&
-			printf "120000 blob $target\t.gitmodules\n"
-		} | git mktree &&
+	name=$1
+	type=$2
+	path=$3
+	dir=symlink-$name-$type
 
-		# Check not only that we fail, but that it is due to the
-		# symlink detector; this grep string comes from the config
-		# variable name and will not be translated.
-		test_must_fail git fsck 2>output &&
-		test_i18ngrep gitmodulesSymlink output
-	)
-'
+	test_expect_success "set up repo with symlinked $name ($type)" '
+		git init $dir &&
+		(
+			cd $dir &&
+
+			# Make the tree directly to avoid index restrictions.
+			#
+			# Because symlinks store the target as a blob, choose
+			# a pathname that could be parsed as a .gitmodules file
+			# to trick naive non-symlink-aware checking.
+			tricky="[foo]bar=true" &&
+			content=$(git hash-object -w ../.gitmodules) &&
+			target=$(printf "$tricky" | git hash-object -w --stdin) &&
+			{
+				printf "100644 blob $content\t$tricky\n" &&
+				printf "120000 blob $target\t$path\n"
+			} >bad-tree
+		) &&
+		tree=$(git -C $dir mktree <$dir/bad-tree)
+	'
+
+	test_expect_success "fsck detects symlinked $name ($type)" '
+		(
+			cd $dir &&
+
+			# Check not only that we fail, but that it is due to the
+			# symlink detector
+			$fsck_must_fail git fsck 2>output &&
+			grep "$fsck_prefix.*tree $tree: ${name}Symlink" output
+		)
+	'
+
+	test -n "$refuse_index" &&
+	test_expect_success "refuse to load symlinked $name into index ($type)" '
+		test_must_fail \
+			git -C $dir \
+			    -c core.protectntfs \
+			    -c core.protecthfs \
+			    read-tree $tree 2>err &&
+		grep "invalid path.*$name" err &&
+		git -C $dir ls-files -s >out &&
+		test_must_be_empty out
+	'
+}
+
+check_dotx_symlink gitmodules vanilla .gitmodules
+check_dotx_symlink gitmodules ntfs ".gitmodules ."
+check_dotx_symlink gitmodules hfs ".${u200c}gitmodules"
+
+check_dotx_symlink --warning gitattributes vanilla .gitattributes
+check_dotx_symlink --warning gitattributes ntfs ".gitattributes ."
+check_dotx_symlink --warning gitattributes hfs ".${u200c}gitattributes"
+
+check_dotx_symlink --warning gitignore vanilla .gitignore
+check_dotx_symlink --warning gitignore ntfs ".gitignore ."
+check_dotx_symlink --warning gitignore hfs ".${u200c}gitignore"
+
+check_dotx_symlink --warning mailmap vanilla .mailmap
+check_dotx_symlink --warning mailmap ntfs ".mailmap ."
+check_dotx_symlink --warning mailmap hfs ".${u200c}mailmap"
 
 test_expect_success 'fsck detects non-blob .gitmodules' '
 	git init non-blob &&
@@ -191,7 +251,7 @@
 	)
 '
 
-test_expect_success MINGW 'prevent git~1 squatting on Windows' '
+test_expect_success WINDOWS 'prevent git~1 squatting on Windows' '
 	git init squatting &&
 	(
 		cd squatting &&
@@ -219,10 +279,13 @@
 		test_tick &&
 		git -c core.protectNTFS=false commit -m "module"
 	) &&
-	test_must_fail git -c core.protectNTFS=false \
-		clone --recurse-submodules squatting squatting-clone 2>err &&
-	test_i18ngrep -e "directory not empty" -e "not an empty directory" err &&
-	! grep gitdir squatting-clone/d/a/git~2
+	if test_have_prereq MINGW
+	then
+		test_must_fail git -c core.protectNTFS=false \
+			clone --recurse-submodules squatting squatting-clone 2>err &&
+		test_i18ngrep -e "directory not empty" -e "not an empty directory" err &&
+		! grep gitdir squatting-clone/d/a/git~2
+	fi
 '
 
 test_expect_success 'git dirs of sibling submodules must not be nested' '
diff --git a/t/t7500-commit-template-squash-signoff.sh b/t/t7500-commit-template-squash-signoff.sh
index 6d19ece..54c2082 100755
--- a/t/t7500-commit-template-squash-signoff.sh
+++ b/t/t7500-commit-template-squash-signoff.sh
@@ -9,13 +9,15 @@
 
 . ./test-lib.sh
 
+. "$TEST_DIRECTORY"/lib-rebase.sh
+
 commit_msg_is () {
 	expect=commit_msg_is.expect
 	actual=commit_msg_is.actual
 
 	printf "%s" "$(git log --pretty=format:%s%b -1)" >"$actual" &&
 	printf "%s" "$1" >"$expect" &&
-	test_i18ncmp "$expect" "$actual"
+	test_cmp "$expect" "$actual"
 }
 
 # A sanity check to see if commit is working at all.
@@ -279,6 +281,163 @@
 
 extra"
 '
+get_commit_msg () {
+	rev="$1" &&
+	git log -1 --pretty=format:"%B" "$rev"
+}
+
+test_expect_success 'commit --fixup=amend: creates amend! commit' '
+	commit_for_rebase_autosquash_setup &&
+	cat >expected <<-EOF &&
+	amend! $(git log -1 --format=%s HEAD~)
+
+	$(get_commit_msg HEAD~)
+
+	edited
+	EOF
+	(
+		set_fake_editor &&
+		FAKE_COMMIT_AMEND="edited" \
+			git commit --fixup=amend:HEAD~
+	) &&
+	get_commit_msg HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success '--fixup=amend: --only ignores staged changes' '
+	commit_for_rebase_autosquash_setup &&
+	cat >expected <<-EOF &&
+	amend! $(git log -1 --format=%s HEAD~)
+
+	$(get_commit_msg HEAD~)
+
+	edited
+	EOF
+	(
+		set_fake_editor &&
+		FAKE_COMMIT_AMEND="edited" \
+			git commit --fixup=amend:HEAD~ --only
+	) &&
+	get_commit_msg HEAD >actual &&
+	test_cmp expected actual &&
+	test_cmp_rev HEAD@{1}^{tree} HEAD^{tree} &&
+	test_cmp_rev HEAD@{1} HEAD^ &&
+	test_expect_code 1 git diff --cached --exit-code &&
+	git cat-file blob :foo >actual &&
+	test_cmp foo actual
+'
+
+test_expect_success '--fixup=reword: ignores staged changes' '
+	commit_for_rebase_autosquash_setup &&
+	cat >expected <<-EOF &&
+	amend! $(git log -1 --format=%s HEAD~)
+
+	$(get_commit_msg HEAD~)
+
+	edited
+	EOF
+	(
+		set_fake_editor &&
+		FAKE_COMMIT_AMEND="edited" \
+			git commit --fixup=reword:HEAD~
+	) &&
+	get_commit_msg HEAD >actual &&
+	test_cmp expected actual &&
+	test_cmp_rev HEAD@{1}^{tree} HEAD^{tree} &&
+	test_cmp_rev HEAD@{1} HEAD^ &&
+	test_expect_code 1 git diff --cached --exit-code &&
+	git cat-file blob :foo >actual &&
+	test_cmp foo actual
+'
+
+test_expect_success '--fixup=reword: error out with -m option' '
+	commit_for_rebase_autosquash_setup &&
+	echo "fatal: cannot combine -m with --fixup:reword" >expect &&
+	test_must_fail git commit --fixup=reword:HEAD~ -m "reword commit message" 2>actual &&
+	test_cmp expect actual
+'
+
+test_expect_success '--fixup=amend: error out with -m option' '
+	commit_for_rebase_autosquash_setup &&
+	echo "fatal: cannot combine -m with --fixup:amend" >expect &&
+	test_must_fail git commit --fixup=amend:HEAD~ -m "amend commit message" 2>actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'consecutive amend! commits remove amend! line from commit msg body' '
+	commit_for_rebase_autosquash_setup &&
+	cat >expected <<-EOF &&
+	amend! amend! $(git log -1 --format=%s HEAD~)
+
+	$(get_commit_msg HEAD~)
+
+	edited 1
+
+	edited 2
+	EOF
+	echo "reword new commit message" >actual &&
+	(
+		set_fake_editor &&
+		FAKE_COMMIT_AMEND="edited 1" \
+			git commit --fixup=reword:HEAD~ &&
+		FAKE_COMMIT_AMEND="edited 2" \
+			git commit --fixup=reword:HEAD
+	) &&
+	get_commit_msg HEAD >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'deny to create amend! commit if its commit msg body is empty' '
+	commit_for_rebase_autosquash_setup &&
+	echo "Aborting commit due to empty commit message body." >expected &&
+	(
+		set_fake_editor &&
+		test_must_fail env FAKE_COMMIT_MESSAGE="amend! target message subject line" \
+			git commit --fixup=amend:HEAD~ 2>actual
+	) &&
+	test_cmp expected actual
+'
+
+test_expect_success 'amend! commit allows empty commit msg body with --allow-empty-message' '
+	commit_for_rebase_autosquash_setup &&
+	cat >expected <<-EOF &&
+	amend! $(git log -1 --format=%s HEAD~)
+	EOF
+	(
+		set_fake_editor &&
+		FAKE_COMMIT_MESSAGE="amend! target message subject line" \
+			git commit --fixup=amend:HEAD~ --allow-empty-message &&
+		get_commit_msg HEAD >actual
+	) &&
+	test_cmp expected actual
+'
+
+test_fixup_reword_opt () {
+	test_expect_success "--fixup=reword: incompatible with $1" "
+		echo 'fatal: reword option of --fixup is mutually exclusive with'\
+			'--patch/--interactive/--all/--include/--only' >expect &&
+		test_must_fail git commit --fixup=reword:HEAD~ $1 2>actual &&
+		test_cmp expect actual
+	"
+}
+
+for opt in --all --include --only --interactive --patch
+do
+	test_fixup_reword_opt $opt
+done
+
+test_expect_success '--fixup=reword: give error with pathsec' '
+	commit_for_rebase_autosquash_setup &&
+	echo "fatal: cannot combine reword option of --fixup with path '\''foo'\''" >expect &&
+	test_must_fail git commit --fixup=reword:HEAD~ -- foo 2>actual &&
+	test_cmp expect actual
+'
+
+test_expect_success '--fixup=reword: -F give error message' '
+	echo "fatal: Only one of -c/-C/-F/--fixup can be used." >expect &&
+	test_must_fail git commit --fixup=reword:HEAD~ -F msg  2>actual &&
+	test_cmp expect actual
+'
 
 test_expect_success 'commit --squash works with -F' '
 	commit_for_rebase_autosquash_setup &&
@@ -339,7 +498,7 @@
 cat >expected-template <<EOF
 
 # Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
+# with '#' will be ignored.
 #
 # Author:    A U Thor <author@example.com>
 #
@@ -356,7 +515,7 @@
 	touch commit-template-check &&
 	git add commit-template-check &&
 	GIT_EDITOR="cat >editor-input" git commit --untracked-files=no --allow-empty-message &&
-	test_i18ncmp expected-template editor-input
+	test_cmp expected-template editor-input
 '
 
 test_expect_success 'setup empty commit with unstaged rename and copy' '
diff --git a/t/t7502-commit-porcelain.sh b/t/t7502-commit-porcelain.sh
index e5332ad..38a532d 100755
--- a/t/t7502-commit-porcelain.sh
+++ b/t/t7502-commit-porcelain.sh
@@ -13,7 +13,7 @@
 
 	printf "%s" "$(git log --pretty=format:%s%b -1)" >$actual &&
 	printf "%s" "$1" >$expect &&
-	test_i18ncmp $expect $actual
+	test_cmp $expect $actual
 }
 
 # Arguments: [<prefix] [<commit message>] [<commit options>]
@@ -35,7 +35,17 @@
 	SUMMARY_POSTFIX="$(git log -1 --pretty='format:%h')"
 	echo "[$SUMMARY_PREFIX $SUMMARY_POSTFIX] $2" >exp &&
 
-	test_i18ncmp exp act
+	test_cmp exp act
+}
+
+trailer_commit_base () {
+	echo "fun" >>file &&
+	git add file &&
+	git commit -s --trailer "Signed-off-by=C1 E1 " \
+		--trailer "Helped-by:C2 E2 " \
+		--trailer "Reported-by=C3 E3" \
+		--trailer "Mentored-by:C4 E4" \
+		-m "hello"
 }
 
 test_expect_success 'output summary format' '
@@ -154,6 +164,308 @@
 
 '
 
+test_expect_success 'commit --trailer with "="' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	EOF
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "replace" as ifexists' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Helped-by: C3 E3
+	EOF
+	git -c trailer.ifexists="replace" \
+		commit --trailer "Mentored-by: C4 E4" \
+		 --trailer "Helped-by: C3 E3" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d"  commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "add" as ifexists' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	EOF
+	git -c trailer.ifexists="add" \
+		commit --trailer "Reported-by: C3 E3" \
+		--trailer "Mentored-by: C4 E4" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d"  commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "donothing" as ifexists' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Reviewed-by: C6 E6
+	EOF
+	git -c trailer.ifexists="donothing" \
+		commit --trailer "Mentored-by: C5 E5" \
+		--trailer "Reviewed-by: C6 E6" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d"  commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "addIfDifferent" as ifexists' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Mentored-by: C5 E5
+	EOF
+	git -c trailer.ifexists="addIfDifferent" \
+		commit --trailer "Reported-by: C3 E3" \
+		--trailer "Mentored-by: C5 E5" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d"  commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "addIfDifferentNeighbor" as ifexists' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Reported-by: C3 E3
+	EOF
+	git -c trailer.ifexists="addIfDifferentNeighbor" \
+		commit --trailer "Mentored-by: C4 E4" \
+		--trailer "Reported-by: C3 E3" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d"  commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "end" as where' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	EOF
+	git -c trailer.where="end" \
+		commit --trailer "Reported-by: C3 E3" \
+		--trailer "Mentored-by: C4 E4" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "start" as where' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C1 E1
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	EOF
+	git -c trailer.where="start" \
+		commit --trailer "Signed-off-by: C O Mitter <committer@example.com>" \
+		--trailer "Signed-off-by: C1 E1" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "after" as where' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Mentored-by: C5 E5
+	EOF
+	git -c trailer.where="after" \
+		commit --trailer "Mentored-by: C4 E4" \
+		--trailer "Mentored-by: C5 E5" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "before" as where' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C2 E2
+	Mentored-by: C3 E3
+	Mentored-by: C4 E4
+	EOF
+	git -c trailer.where="before" \
+		commit --trailer "Mentored-by: C3 E3" \
+		--trailer "Mentored-by: C2 E2" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "donothing" as ifmissing' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Helped-by: C5 E5
+	EOF
+	git -c trailer.ifmissing="donothing" \
+		commit --trailer "Helped-by: C5 E5" \
+		--trailer "Based-by: C6 E6" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and "add" as ifmissing' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Reported-by: C3 E3
+	Mentored-by: C4 E4
+	Helped-by: C5 E5
+	Based-by: C6 E6
+	EOF
+	git -c trailer.ifmissing="add" \
+		commit --trailer "Helped-by: C5 E5" \
+		--trailer "Based-by: C6 E6" \
+		--amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c ack.key ' '
+	echo "fun" >>file1 &&
+	git add file1 &&
+	cat >expected <<-\EOF &&
+		hello
+
+		Acked-by: Peff
+	EOF
+	git -c trailer.ack.key="Acked-by" \
+		commit --trailer "ack = Peff" -m "hello" &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and ":=#" as separators' '
+	echo "fun" >>file1 &&
+	git add file1 &&
+	cat >expected <<-\EOF &&
+		I hate bug
+
+		Bug #42
+	EOF
+	git -c trailer.separators=":=#" \
+		-c trailer.bug.key="Bug #" \
+		commit --trailer "bug = 42" -m "I hate bug" &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
+test_expect_success 'commit --trailer with -c and command' '
+	trailer_commit_base &&
+	cat >expected <<-\EOF &&
+	hello
+
+	Signed-off-by: C O Mitter <committer@example.com>
+	Signed-off-by: C1 E1
+	Helped-by: C2 E2
+	Mentored-by: C4 E4
+	Reported-by: A U Thor <author@example.com>
+	EOF
+	git -c trailer.report.key="Reported-by: " \
+		-c trailer.report.ifexists="replace" \
+		-c trailer.report.command="NAME=\"\$ARG\"; test -n \"\$NAME\" && \
+		git log --author=\"\$NAME\" -1 --format=\"format:%aN <%aE>\" || true" \
+		commit --trailer "report = author" --amend &&
+	git cat-file commit HEAD >commit.msg &&
+	sed -e "1,/^\$/d" commit.msg >actual &&
+	test_cmp expected actual
+'
+
 test_expect_success 'multiple -m' '
 
 	>negative &&
@@ -300,7 +612,7 @@
 # with '#' will be ignored, and an empty message aborts the commit." >expect
 
 test_expect_success 'cleanup commit messages (strip option,-F,-e): output' '
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'cleanup commit message (fail on invalid cleanup mode option)' '
diff --git a/t/t7505-prepare-commit-msg-hook.sh b/t/t7505-prepare-commit-msg-hook.sh
index 321b4bc..7a8194c 100755
--- a/t/t7505-prepare-commit-msg-hook.sh
+++ b/t/t7505-prepare-commit-msg-hook.sh
@@ -218,7 +218,7 @@
 test_rebase () {
 	expect=$1 &&
 	mode=$2 &&
-	test_expect_$expect C_LOCALE_OUTPUT "with hook (rebase ${mode:--i})" '
+	test_expect_$expect "with hook (rebase ${mode:--i})" '
 		test_when_finished "\
 			git rebase --abort
 			git checkout -f main
@@ -307,7 +307,7 @@
 
 '
 
-test_expect_success C_LOCALE_OUTPUT 'with failing hook (cherry-pick)' '
+test_expect_success 'with failing hook (cherry-pick)' '
 	test_when_finished "git checkout -f main" &&
 	git checkout -B other b &&
 	test_must_fail git cherry-pick rebase-1 2>actual &&
diff --git a/t/t7508-status.sh b/t/t7508-status.sh
index d01aacb..2b72451 100755
--- a/t/t7508-status.sh
+++ b/t/t7508-status.sh
@@ -109,13 +109,13 @@
 #
 EOF
 	COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status --column status.displayCommentPrefix=false' '
 	strip_comments expect &&
 	COLUMNS=49 git -c status.displayCommentPrefix=false status --column="column dense" >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<\EOF
@@ -144,19 +144,19 @@
 
 test_expect_success 'status with status.displayCommentPrefix=true' '
 	git -c status.displayCommentPrefix=true status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status with status.displayCommentPrefix=false' '
 	strip_comments expect &&
 	git -c status.displayCommentPrefix=false status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status -v' '
 	(cat expect && git diff --cached) >expect-with-v &&
 	git status -v >output &&
-	test_i18ncmp expect-with-v output
+	test_cmp expect-with-v output
 '
 
 test_expect_success 'status -v -v' '
@@ -167,7 +167,7 @@
 	 echo "Changes not staged for commit:" &&
 	 git -c diff.mnemonicprefix=true diff) >expect-with-v &&
 	git status -v -v >output &&
-	test_i18ncmp expect-with-v output
+	test_cmp expect-with-v output
 '
 
 test_expect_success 'setup fake editor' '
@@ -214,7 +214,7 @@
 test_expect_success 'status (advice.statusHints false)' '
 	test_config advice.statusHints false &&
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 
 '
 
@@ -296,7 +296,7 @@
 
 EOF
 	git status --ignored >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status with gitignore (nothing untracked)' '
@@ -358,7 +358,7 @@
 
 EOF
 	git status --ignored >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >.gitignore <<\EOF
@@ -380,7 +380,7 @@
 test_expect_success 'status -s -b' '
 
 	git status -s -b >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 
 '
 
@@ -390,7 +390,7 @@
 	git status -s -z -b >output &&
 	nul_to_q <output >output.q &&
 	mv output.q output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'setup dir3' '
@@ -418,13 +418,13 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status -uno >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status (status.showUntrackedFiles no)' '
 	test_config status.showuntrackedfiles no &&
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status -uno (advice.statusHints false)' '
@@ -443,7 +443,7 @@
 EOF
 	test_config advice.statusHints false &&
 	git status -uno >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect << EOF
@@ -487,13 +487,13 @@
 
 EOF
 	git status -unormal >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status (status.showUntrackedFiles normal)' '
 	test_config status.showuntrackedfiles normal &&
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<EOF
@@ -543,13 +543,13 @@
 
 EOF
 	git status -uall >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status (status.showUntrackedFiles all)' '
 	test_config status.showuntrackedfiles all &&
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'teardown dir3' '
@@ -601,7 +601,7 @@
 
 EOF
 	(cd dir1 && git status) >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<\EOF
@@ -670,13 +670,13 @@
 EOF
 	test_config color.ui auto &&
 	test_terminal git status | test_decode_color >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success TTY 'status with color.status' '
 	test_config color.status auto &&
 	test_terminal git status | test_decode_color >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<\EOF
@@ -718,7 +718,7 @@
 test_expect_success TTY 'status -s -b with color.status' '
 
 	test_terminal git status -s -b | test_decode_color >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 
 '
 
@@ -793,7 +793,7 @@
 EOF
 	test_config status.relativePaths false &&
 	(cd dir1 && git status) >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 
 '
 
@@ -860,7 +860,7 @@
 
 EOF
 	git commit --dry-run dir1/modified >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<EOF
@@ -921,13 +921,13 @@
 
 EOF
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 # we expect the same as the previous test
 test_expect_success 'status --untracked-files=all does not show submodule' '
 	git status --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<EOF
@@ -984,13 +984,13 @@
 EOF
 	git config status.submodulesummary 10 &&
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'status submodule summary with status.displayCommentPrefix=false' '
 	strip_comments expect &&
 	git -c status.displayCommentPrefix=false status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'commit with submodule summary ignores status.displayCommentPrefix' '
@@ -1035,9 +1035,9 @@
 	git commit -m "commit submodule" &&
 	git config status.submodulesummary 10 &&
 	test_must_fail git commit --dry-run >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 cat >expect <<EOF
@@ -1091,7 +1091,7 @@
 EOF
 	git config status.submodulesummary 10 &&
 	git commit --dry-run --amend >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
@@ -1143,17 +1143,17 @@
 EOF
 	echo modified  sm/untracked &&
 	git status --ignore-submodules=untracked >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' '
 	test_config diff.ignoreSubmodules dirty &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --add -f .gitmodules submodule.subname.ignore untracked &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1163,14 +1163,14 @@
 	git config --add submodule.subname.ignore untracked &&
 	git config --add submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config --remove-section -f .gitmodules submodule.subname
 '
 
 test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
 	git status --ignore-submodules=dirty >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' '
@@ -1180,7 +1180,7 @@
 	git config --add -f .gitmodules submodule.subname.ignore dirty &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1190,7 +1190,7 @@
 	git config --add submodule.subname.ignore dirty &&
 	git config --add submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
@@ -1198,14 +1198,14 @@
 test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
 	echo modified >sm/foo &&
 	git status --ignore-submodules=dirty >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' '
 	git config --add -f .gitmodules submodule.subname.ignore dirty &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1215,7 +1215,7 @@
 	git config --add submodule.subname.ignore dirty &&
 	git config --add submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
@@ -1253,14 +1253,14 @@
 
 EOF
 	git status --ignore-submodules=untracked > output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
 	git config --add -f .gitmodules submodule.subname.ignore untracked &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1270,7 +1270,7 @@
 	git config --add submodule.subname.ignore untracked &&
 	git config --add submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
@@ -1314,14 +1314,14 @@
 
 EOF
 	git status --ignore-submodules=untracked > output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" '
 	git config --add -f .gitmodules submodule.subname.ignore untracked &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1331,20 +1331,20 @@
 	git config --add submodule.subname.ignore untracked &&
 	git config --add submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
 test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
 	git status --ignore-submodules=dirty > output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" '
 	git config --add -f .gitmodules submodule.subname.ignore dirty &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1354,7 +1354,7 @@
 	git config --add submodule.subname.ignore dirty &&
 	git config --add submodule.subname.path sm &&
 	git status >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
@@ -1398,7 +1398,7 @@
 test_expect_success "status (core.commentchar with submodule summary)" '
 	test_config core.commentchar ";" &&
 	git -c status.displayCommentPrefix=true status >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success "status (core.commentchar with two chars with submodule summary)" '
@@ -1429,7 +1429,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --ignore-submodules=all > output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success '.gitmodules ignore=all suppresses unstaged submodule summary' '
@@ -1460,7 +1460,7 @@
 	git config --add -f .gitmodules submodule.subname.ignore all &&
 	git config --add -f .gitmodules submodule.subname.path sm &&
 	git status > output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
@@ -1470,7 +1470,7 @@
 	git config --add submodule.subname.ignore all &&
 	git config --add submodule.subname.path sm &&
 	git status > output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git config --remove-section submodule.subname &&
 	git config -f .gitmodules  --remove-section submodule.subname
 '
@@ -1571,7 +1571,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git commit -uno --dry-run >output &&
-	test_i18ncmp expect output &&
+	test_cmp expect output &&
 	git status -s --ignore-submodules=dirty >output &&
 	test_i18ngrep "^M. sm" output
 '
diff --git a/t/t7509-commit-authorship.sh b/t/t7509-commit-authorship.sh
index ee6c474..d568593 100755
--- a/t/t7509-commit-authorship.sh
+++ b/t/t7509-commit-authorship.sh
@@ -147,7 +147,7 @@
 	test_tick &&
 	git commit -am "cherry-pick 1" --author="Cherry <cherry@pick.er>" &&
 	git tag cherry-pick-head &&
-	git rev-parse cherry-pick-head >.git/CHERRY_PICK_HEAD &&
+	git update-ref CHERRY_PICK_HEAD $(git rev-parse cherry-pick-head) &&
 	echo "This is a MERGE_MSG" >.git/MERGE_MSG &&
 	echo "cherry-pick 1b" >>foo &&
 	test_tick &&
@@ -162,7 +162,7 @@
 '
 
 test_expect_success '--reset-author with CHERRY_PICK_HEAD' '
-	git rev-parse cherry-pick-head >.git/CHERRY_PICK_HEAD &&
+	git update-ref CHERRY_PICK_HEAD $(git rev-parse cherry-pick-head) &&
 	echo "cherry-pick 2" >>foo &&
 	test_tick &&
 	git commit -am "cherry-pick 2" --reset-author &&
diff --git a/t/t7512-status-help.sh b/t/t7512-status-help.sh
index 9f5e3ce..7f2956d 100755
--- a/t/t7512-status-help.sh
+++ b/t/t7512-status-help.sh
@@ -41,7 +41,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -61,7 +61,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -93,7 +93,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -116,7 +116,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -154,7 +154,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -180,7 +180,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -210,7 +210,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -249,7 +249,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -282,7 +282,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -321,7 +321,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -356,7 +356,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -387,7 +387,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -418,7 +418,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -454,7 +454,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -486,7 +486,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -519,7 +519,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -557,7 +557,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -591,7 +591,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -619,7 +619,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -641,7 +641,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -664,7 +664,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -687,7 +687,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -712,7 +712,7 @@
 no changes added to commit
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -746,7 +746,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 
@@ -770,7 +770,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status when cherry-picking after committing conflict resolution' '
@@ -789,7 +789,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status shows cherry-pick with invalid oid' '
@@ -798,7 +798,7 @@
 	git status --untracked-files=no >actual 2>err &&
 	git cherry-pick --quit &&
 	test_must_be_empty err &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status does not show error if .git/sequencer is a file' '
@@ -816,7 +816,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual &&
+	test_cmp expected actual &&
 
 	git reset --hard HEAD^ &&
 	cat >expected <<\EOF &&
@@ -824,7 +824,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status while reverting commit (conflicts)' '
@@ -852,7 +852,7 @@
 no changes added to commit (use "git add" and/or "git commit -a")
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status while reverting commit (conflicts resolved)' '
@@ -872,7 +872,7 @@
 Untracked files not listed (use -u option to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status after reverting commit' '
@@ -882,7 +882,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status while reverting after committing conflict resolution' '
@@ -901,7 +901,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'prepare for different number of commits rebased' '
@@ -931,7 +931,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status: two commands done with some white lines in done file' '
@@ -959,7 +959,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status: two remaining commands with some white lines in todo file' '
@@ -988,7 +988,7 @@
 nothing to commit (use -u to show untracked files)
 EOF
 	git status --untracked-files=no >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_expect_success 'status: handle not-yet-started rebase -i gracefully' '
@@ -1007,7 +1007,7 @@
 
 nothing to commit (use -u to show untracked files)
 EOF
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_done
diff --git a/t/t7513-interpret-trailers.sh b/t/t7513-interpret-trailers.sh
index 6602790..04885d0 100755
--- a/t/t7513-interpret-trailers.sh
+++ b/t/t7513-interpret-trailers.sh
@@ -51,6 +51,69 @@
 	EOF
 '
 
+test_expect_success 'with cmd' '
+	test_when_finished "git config --remove-section trailer.bug" &&
+	git config trailer.bug.key "Bug-maker: " &&
+	git config trailer.bug.ifExists "add" &&
+	git config trailer.bug.cmd "echo \"maybe is\"" &&
+	cat >expected2 <<-EOF &&
+
+	Bug-maker: maybe is him
+	Bug-maker: maybe is me
+	EOF
+	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
+		>actual2 &&
+	test_cmp expected2 actual2
+'
+
+test_expect_success 'with cmd and $1' '
+	test_when_finished "git config --remove-section trailer.bug" &&
+	git config trailer.bug.key "Bug-maker: " &&
+	git config trailer.bug.ifExists "add" &&
+	git config trailer.bug.cmd "echo \"\$1\" is" &&
+	cat >expected2 <<-EOF &&
+
+	Bug-maker: him is him
+	Bug-maker: me is me
+	EOF
+	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
+		>actual2 &&
+	test_cmp expected2 actual2
+'
+
+test_expect_success 'with cmd and $1 with sh -c' '
+	test_when_finished "git config --remove-section trailer.bug" &&
+	git config trailer.bug.key "Bug-maker: " &&
+	git config trailer.bug.ifExists "replace" &&
+	git config trailer.bug.cmd "sh -c \"echo who is \"\$1\"\"" &&
+	cat >expected2 <<-EOF &&
+
+	Bug-maker: who is me
+	EOF
+	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
+		>actual2 &&
+	test_cmp expected2 actual2
+'
+
+test_expect_success 'with cmd and $1 with shell script' '
+	test_when_finished "git config --remove-section trailer.bug" &&
+	git config trailer.bug.key "Bug-maker: " &&
+	git config trailer.bug.ifExists "replace" &&
+	git config trailer.bug.cmd "./echoscript" &&
+	cat >expected2 <<-EOF &&
+
+	Bug-maker: who is me
+	EOF
+	cat >echoscript <<-EOF &&
+	#!/bin/sh
+	echo who is "\$1"
+	EOF
+	chmod +x echoscript &&
+	git interpret-trailers --trailer "bug: him" --trailer "bug:me" \
+		>actual2 &&
+	test_cmp expected2 actual2
+'
+
 test_expect_success 'without config' '
 	sed -e "s/ Z\$/ /" >expected <<-\EOF &&
 
@@ -1274,6 +1337,27 @@
 	git commit -m "Add file a.txt"
 '
 
+test_expect_success 'cmd takes precedence over command' '
+	test_when_finished "git config --unset trailer.fix.cmd" &&
+	git config trailer.fix.ifExists "replace" &&
+	git config trailer.fix.cmd "test -n \"\$1\" && git log -1 --oneline --format=\"%h (%aN)\" \
+	--abbrev-commit --abbrev=14 \"\$1\" || true" &&
+	git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" \
+		--abbrev-commit --abbrev=14 \$ARG" &&
+	FIXED=$(git log -1 --oneline --format="%h (%aN)" --abbrev-commit --abbrev=14 HEAD) &&
+	cat complex_message_body >expected2 &&
+	sed -e "s/ Z\$/ /" >>expected2 <<-EOF &&
+		Fixes: $FIXED
+		Acked-by= Z
+		Reviewed-by:
+		Signed-off-by: Z
+		Signed-off-by: A U Thor <author@example.com>
+	EOF
+	git interpret-trailers --trailer "review:" --trailer "fix=HEAD" \
+		<complex_message >actual2 &&
+	test_cmp expected2 actual2
+'
+
 test_expect_success 'with command using $ARG' '
 	git config trailer.fix.ifExists "replace" &&
 	git config trailer.fix.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG" &&
diff --git a/t/t7519-status-fsmonitor.sh b/t/t7519-status-fsmonitor.sh
index fbfdcca..deea88d 100755
--- a/t/t7519-status-fsmonitor.sh
+++ b/t/t7519-status-fsmonitor.sh
@@ -73,6 +73,7 @@
 	expect*
 	actual*
 	marker*
+	trace2*
 	EOF
 '
 
@@ -236,7 +237,7 @@
 	git reset HEAD~1 &&
 	git status >actual &&
 	git -c core.fsmonitor= status >expect &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 # test fsmonitor with and without preloadIndex
@@ -273,7 +274,7 @@
 			git add dir2/new &&
 			git status >actual &&
 			git -c core.fsmonitor= status >expect &&
-			test_i18ncmp expect actual
+			test_cmp expect actual
 		'
 
 		# Make sure it's actually skipping the check for modified and untracked
@@ -334,7 +335,7 @@
 		git config core.fsmonitor .git/hooks/fsmonitor-test &&
 		git update-index --untracked-cache &&
 		git update-index --fsmonitor &&
-		GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-before" \
+		GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-before" \
 		git status &&
 		test-tool dump-untracked-cache >../before
 	) &&
@@ -346,12 +347,12 @@
 	EOF
 	(
 		cd dot-git &&
-		GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-after" \
+		GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-after" \
 		git status &&
 		test-tool dump-untracked-cache >../after
 	) &&
-	grep "directory invalidation" trace-before >>before &&
-	grep "directory invalidation" trace-after >>after &&
+	grep "directory-invalidation" trace-before | cut -d"|" -f 9 >>before &&
+	grep "directory-invalidation" trace-after  | cut -d"|" -f 9 >>after &&
 	# UNTR extension unchanged, dir invalidation count unchanged
 	test_cmp before after
 '
@@ -383,4 +384,52 @@
 	)
 '
 
+# Usage:
+# check_sparse_index_behavior [!]
+# If "!" is supplied, then we verify that we do not call ensure_full_index
+# during a call to 'git status'. Otherwise, we verify that we _do_ call it.
+check_sparse_index_behavior () {
+	git status --porcelain=v2 >expect &&
+	git sparse-checkout init --cone --sparse-index &&
+	git sparse-checkout set dir1 dir2 &&
+	GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
+		git status --porcelain=v2 >actual &&
+	test_region $1 index ensure_full_index trace2.txt &&
+	test_region fsm_hook query trace2.txt &&
+	test_cmp expect actual &&
+	rm trace2.txt &&
+	git sparse-checkout disable
+}
+
+test_expect_success 'status succeeds with sparse index' '
+	git reset --hard &&
+
+	test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
+	check_sparse_index_behavior ! &&
+
+	write_script .git/hooks/fsmonitor-test<<-\EOF &&
+		printf "last_update_token\0"
+	EOF
+	git config core.fsmonitor .git/hooks/fsmonitor-test &&
+	check_sparse_index_behavior ! &&
+
+	write_script .git/hooks/fsmonitor-test<<-\EOF &&
+		printf "last_update_token\0"
+		printf "dir1/modified\0"
+	EOF
+	check_sparse_index_behavior ! &&
+
+	cp -r dir1 dir1a &&
+	git add dir1a &&
+	git commit -m "add dir1a" &&
+
+	# This one modifies outside the sparse-checkout definition
+	# and hence we expect to expand the sparse-index.
+	write_script .git/hooks/fsmonitor-test<<-\EOF &&
+		printf "last_update_token\0"
+		printf "dir1a/modified\0"
+	EOF
+	check_sparse_index_behavior
+'
+
 test_done
diff --git a/t/t7521-ignored-mode.sh b/t/t7521-ignored-mode.sh
index 9179094..a88b02b 100755
--- a/t/t7521-ignored-mode.sh
+++ b/t/t7521-ignored-mode.sh
@@ -30,7 +30,7 @@
 		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify status behavior on directory with tracked & ignored files' '
@@ -55,7 +55,7 @@
 	git commit -m "commit tracked files" &&
 
 	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify status behavior on directory with untracked and ignored files' '
@@ -80,7 +80,7 @@
 		dir/untracked_ignored/ignored_1.ign dir/untracked_ignored/ignored_2.ign &&
 
 	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify status matching ignored files on ignored directory' '
@@ -96,7 +96,7 @@
 		ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign &&
 
 	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
@@ -117,7 +117,7 @@
 	git add -f ignored_dir/tracked &&
 	git commit -m "Force add file in ignored directory" &&
 	git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
@@ -136,7 +136,7 @@
 		ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
 		untracked_dir/untracked &&
 	git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
@@ -155,7 +155,7 @@
 		ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
 		untracked_dir/untracked &&
 	git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
@@ -176,7 +176,7 @@
 	git add -f ignored_dir/tracked &&
 	git commit -m "Force add file in ignored directory" &&
 	git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify behavior of status with --ignored=no' '
@@ -191,7 +191,7 @@
 		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 	git status --porcelain=v2 --ignored=no --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=all' '
@@ -210,7 +210,7 @@
 		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 	git status --porcelain=v2 --ignored=traditional --untracked-files=all >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=normal' '
@@ -227,7 +227,7 @@
 		dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
 
 	git status --porcelain=v2 --ignored=traditional --untracked-files=normal >output &&
-	test_i18ncmp expect output
+	test_cmp expect output
 '
 
 test_done
diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
index b2c1d86..1cbc971 100755
--- a/t/t7600-merge.sh
+++ b/t/t7600-merge.sh
@@ -272,7 +272,7 @@
 	EOF
 	git cat-file commit HEAD >raw &&
 	sed -e "1,/^$/d" raw >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_expect_success 'merge c3 with c7 with --squash commit.cleanup = scissors' '
@@ -296,7 +296,7 @@
 	EOF
 	git cat-file commit HEAD >raw &&
 	sed -e "1,/^$/d" raw >actual &&
-	test_i18ncmp expect actual
+	test_cmp expect actual
 '
 
 test_debug 'git log --graph --decorate --oneline --all'
diff --git a/t/t7602-merge-octopus-many.sh b/t/t7602-merge-octopus-many.sh
index 13859ec..a9c816b 100755
--- a/t/t7602-merge-octopus-many.sh
+++ b/t/t7602-merge-octopus-many.sh
@@ -66,7 +66,7 @@
 test_expect_success 'merge output uses pretty names' '
 	git reset --hard c1 &&
 	git merge c2 c3 c4 >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 cat >expected <<\EOF
@@ -84,7 +84,7 @@
 		rm expected.tmp
 	fi &&
 	GIT_MERGE_VERBOSITY=0 git merge c4 c5 >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 cat >expected <<\EOF
@@ -101,7 +101,7 @@
 test_expect_success 'merge fast-forward output uses pretty names' '
 	git reset --hard c0 &&
 	git merge c1 c2 >actual &&
-	test_i18ncmp expected actual
+	test_cmp expected actual
 '
 
 test_done
diff --git a/t/t7703-repack-geometric.sh b/t/t7703-repack-geometric.sh
new file mode 100755
index 0000000..5ccaa44
--- /dev/null
+++ b/t/t7703-repack-geometric.sh
@@ -0,0 +1,183 @@
+#!/bin/sh
+
+test_description='git repack --geometric works correctly'
+
+. ./test-lib.sh
+
+GIT_TEST_MULTI_PACK_INDEX=0
+
+objdir=.git/objects
+midx=$objdir/pack/multi-pack-index
+
+test_expect_success '--geometric with no packs' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		git repack --geometric 2 >out &&
+		test_i18ngrep "Nothing new to pack" out
+	)
+'
+
+test_expect_success '--geometric with one pack' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		test_commit "base" &&
+		git repack -d &&
+
+		git repack --geometric 2 >out &&
+
+		test_i18ngrep "Nothing new to pack" out
+	)
+'
+
+test_expect_success '--geometric with an intact progression' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		# These packs already form a geometric progression.
+		test_commit_bulk --start=1 1 && # 3 objects
+		test_commit_bulk --start=2 2 && # 6 objects
+		test_commit_bulk --start=4 4 && # 12 objects
+
+		find $objdir/pack -name "*.pack" | sort >expect &&
+		git repack --geometric 2 -d &&
+		find $objdir/pack -name "*.pack" | sort >actual &&
+
+		test_cmp expect actual
+	)
+'
+
+test_expect_success '--geometric with loose objects' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		# These packs already form a geometric progression.
+		test_commit_bulk --start=1 1 && # 3 objects
+		test_commit_bulk --start=2 2 && # 6 objects
+		# The loose objects are packed together, breaking the
+		# progression.
+		test_commit loose && # 3 objects
+
+		find $objdir/pack -name "*.pack" | sort >before &&
+		git repack --geometric 2 -d &&
+		find $objdir/pack -name "*.pack" | sort >after &&
+
+		comm -13 before after >new &&
+		comm -23 before after >removed &&
+
+		test_line_count = 1 new &&
+		test_must_be_empty removed &&
+
+		git repack --geometric 2 -d &&
+		find $objdir/pack -name "*.pack" | sort >after &&
+
+		# The progression (3, 3, 6) is combined into one new pack.
+		test_line_count = 1 after
+	)
+'
+
+test_expect_success '--geometric with small-pack rollup' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		test_commit_bulk --start=1 1 && # 3 objects
+		test_commit_bulk --start=2 1 && # 3 objects
+		find $objdir/pack -name "*.pack" | sort >small &&
+		test_commit_bulk --start=3 4 && # 12 objects
+		test_commit_bulk --start=7 8 && # 24 objects
+		find $objdir/pack -name "*.pack" | sort >before &&
+
+		git repack --geometric 2 -d &&
+
+		# Three packs in total; two of the existing large ones, and one
+		# new one.
+		find $objdir/pack -name "*.pack" | sort >after &&
+		test_line_count = 3 after &&
+		comm -3 small before | tr -d "\t" >large &&
+		grep -qFf large after
+	)
+'
+
+test_expect_success '--geometric with small- and large-pack rollup' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		# size(small1) + size(small2) > size(medium) / 2
+		test_commit_bulk --start=1 1 && # 3 objects
+		test_commit_bulk --start=2 1 && # 3 objects
+		test_commit_bulk --start=2 3 && # 7 objects
+		test_commit_bulk --start=6 9 && # 27 objects &&
+
+		find $objdir/pack -name "*.pack" | sort >before &&
+
+		git repack --geometric 2 -d &&
+
+		find $objdir/pack -name "*.pack" | sort >after &&
+		comm -12 before after >untouched &&
+
+		# Two packs in total; the largest pack from before running "git
+		# repack", and one new one.
+		test_line_count = 1 untouched &&
+		test_line_count = 2 after
+	)
+'
+
+test_expect_success '--geometric ignores kept packs' '
+	git init geometric &&
+	test_when_finished "rm -fr geometric" &&
+	(
+		cd geometric &&
+
+		test_commit kept && # 3 objects
+		test_commit pack && # 3 objects
+
+		KEPT=$(git pack-objects --revs $objdir/pack/pack <<-EOF
+		refs/tags/kept
+		EOF
+		) &&
+		PACK=$(git pack-objects --revs $objdir/pack/pack <<-EOF
+		refs/tags/pack
+		^refs/tags/kept
+		EOF
+		) &&
+
+		# neither pack contains more than twice the number of objects in
+		# the other, so they should be combined. but, marking one as
+		# .kept on disk will "freeze" it, so the pack structure should
+		# remain unchanged.
+		touch $objdir/pack/pack-$KEPT.keep &&
+
+		find $objdir/pack -name "*.pack" | sort >before &&
+		git repack --geometric 2 -d &&
+		find $objdir/pack -name "*.pack" | sort >after &&
+
+		# both packs should still exist
+		test_path_is_file $objdir/pack/pack-$KEPT.pack &&
+		test_path_is_file $objdir/pack/pack-$PACK.pack &&
+
+		# and no new packs should be created
+		test_cmp before after &&
+
+		# Passing --pack-kept-objects causes packs with a .keep file to
+		# be repacked, too.
+		git repack --geometric 2 -d --pack-kept-objects &&
+
+		find $objdir/pack -name "*.pack" >after &&
+		test_line_count = 1 after
+	)
+'
+
+test_done
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 9192c14..a173f56 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -762,4 +762,36 @@
 	test_must_fail git difftool --gui --tool=test-tool --extcmd=cat
 '
 
+test_expect_success 'difftool --rotate-to' '
+	difftool_test_setup &&
+	test_when_finished git reset --hard &&
+	echo 1 >1 &&
+	echo 2 >2 &&
+	echo 4 >4 &&
+	git add 1 2 4 &&
+	git commit -a -m "124" &&
+	git difftool --no-prompt --extcmd=cat --rotate-to="2" HEAD^ >output &&
+	cat >expect <<-\EOF &&
+	2
+	4
+	1
+	EOF
+	test_cmp output expect
+'
+
+test_expect_success 'difftool --skip-to' '
+	difftool_test_setup &&
+	test_when_finished git reset --hard &&
+	git difftool --no-prompt --extcmd=cat --skip-to="2" HEAD^ >output &&
+	cat >expect <<-\EOF &&
+	2
+	4
+	EOF
+	test_cmp output expect
+'
+
+test_expect_success 'difftool --rotate/skip-to error condition' '
+	test_must_fail git difftool --no-prompt --extcmd=cat --rotate-to="3" HEAD^ &&
+	test_must_fail git difftool --no-prompt --extcmd=cat --skip-to="3" HEAD^
+'
 test_done
diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
index 8f7591c..6b6423a 100755
--- a/t/t7810-grep.sh
+++ b/t/t7810-grep.sh
@@ -11,6 +11,13 @@
 
 . ./test-lib.sh
 
+test_invalid_grep_expression() {
+	params="$@" &&
+	test_expect_success "invalid expression: grep $params" '
+		test_must_fail git grep $params -- nonexisting
+	'
+}
+
 cat >hello.c <<EOF
 #include <assert.h>
 #include <stdio.h>
@@ -89,6 +96,8 @@
 	test_must_fail git grep "("
 '
 
+test_invalid_grep_expression --and -e A
+
 for H in HEAD ''
 do
 	case "$H" in
@@ -969,7 +978,8 @@
 	"
 done
 
-test_expect_success !PTHREADS,C_LOCALE_OUTPUT 'grep --threads=N or pack.threads=N warns when no pthreads' '
+test_expect_success !PTHREADS,!FAIL_PREREQS \
+	'grep --threads=N or pack.threads=N warns when no pthreads' '
 	git grep --threads=2 Hello hello_world 2>err &&
 	grep ^warning: err >warnings &&
 	test_line_count = 1 warnings &&
diff --git a/t/t7816-grep-binary-pattern.sh b/t/t7816-grep-binary-pattern.sh
index 60bab29..9d67a5f 100755
--- a/t/t7816-grep-binary-pattern.sh
+++ b/t/t7816-grep-binary-pattern.sh
@@ -59,7 +59,7 @@
 	git commit -m.
 "
 
-# Simple fixed-string matching that can use kwset (no -i && non-ASCII)
+# Simple fixed-string matching
 nul_match P P P '-F' 'yQf'
 nul_match P P P '-F' 'yQx'
 nul_match P P P '-Fi' 'YQf'
@@ -78,7 +78,7 @@
 nul_match P P P '-F' 'æQ[ð]'
 nul_match P P P '-F' '[æ]Qð'
 
-# The -F kwset codepath can't handle -i && non-ASCII...
+# Matching pattern and subject case with -i
 nul_match P 1 1 '-i' '[æ]Qð'
 
 # ...PCRE v2 only matches non-ASCII with -i casefolding under UTF-8
diff --git a/t/t7817-grep-sparse-checkout.sh b/t/t7817-grep-sparse-checkout.sh
new file mode 100755
index 0000000..590b99b
--- /dev/null
+++ b/t/t7817-grep-sparse-checkout.sh
@@ -0,0 +1,174 @@
+#!/bin/sh
+
+test_description='grep in sparse checkout
+
+This test creates a repo with the following structure:
+
+.
+|-- a
+|-- b
+|-- dir
+|   `-- c
+|-- sub
+|   |-- A
+|   |   `-- a
+|   `-- B
+|       `-- b
+`-- sub2
+    `-- a
+
+Where the outer repository has non-cone mode sparsity patterns, sub is a
+submodule with cone mode sparsity patterns and sub2 is a submodule that is
+excluded by the superproject sparsity patterns. The resulting sparse checkout
+should leave the following structure in the working tree:
+
+.
+|-- a
+|-- sub
+|   `-- B
+|       `-- b
+`-- sub2
+    `-- a
+
+But note that sub2 should have the SKIP_WORKTREE bit set.
+'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	echo "text" >a &&
+	echo "text" >b &&
+	mkdir dir &&
+	echo "text" >dir/c &&
+
+	git init sub &&
+	(
+		cd sub &&
+		mkdir A B &&
+		echo "text" >A/a &&
+		echo "text" >B/b &&
+		git add A B &&
+		git commit -m sub &&
+		git sparse-checkout init --cone &&
+		git sparse-checkout set B
+	) &&
+
+	git init sub2 &&
+	(
+		cd sub2 &&
+		echo "text" >a &&
+		git add a &&
+		git commit -m sub2
+	) &&
+
+	git submodule add ./sub &&
+	git submodule add ./sub2 &&
+	git add a b dir &&
+	git commit -m super &&
+	git sparse-checkout init --no-cone &&
+	git sparse-checkout set "/*" "!b" "!/*/" "sub" &&
+
+	git tag -am tag-to-commit tag-to-commit HEAD &&
+	tree=$(git rev-parse HEAD^{tree}) &&
+	git tag -am tag-to-tree tag-to-tree $tree &&
+
+	test_path_is_missing b &&
+	test_path_is_missing dir &&
+	test_path_is_missing sub/A &&
+	test_path_is_file a &&
+	test_path_is_file sub/B/b &&
+	test_path_is_file sub2/a &&
+	git branch -m main
+'
+
+# The test below covers a special case: the sparsity patterns exclude '/b' and
+# sparse checkout is enabled, but the path exists in the working tree (e.g.
+# manually created after `git sparse-checkout init`). git grep should skip it.
+test_expect_success 'working tree grep honors sparse checkout' '
+	cat >expect <<-EOF &&
+	a:text
+	EOF
+	test_when_finished "rm -f b" &&
+	echo "new-text" >b &&
+	git grep "text" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep searches unmerged file despite not matching sparsity patterns' '
+	cat >expect <<-EOF &&
+	b:modified-b-in-branchX
+	b:modified-b-in-branchY
+	EOF
+	test_when_finished "test_might_fail git merge --abort && \
+			    git checkout main && git sparse-checkout init" &&
+
+	git sparse-checkout disable &&
+	git checkout -b branchY main &&
+	test_commit modified-b-in-branchY b &&
+	git checkout -b branchX main &&
+	test_commit modified-b-in-branchX b &&
+
+	git sparse-checkout init &&
+	test_path_is_missing b &&
+	test_must_fail git merge branchY &&
+	git grep "modified-b" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --cached searches entries with the SKIP_WORKTREE bit' '
+	cat >expect <<-EOF &&
+	a:text
+	b:text
+	dir/c:text
+	EOF
+	git grep --cached "text" >actual &&
+	test_cmp expect actual
+'
+
+# Note that sub2/ is present in the worktree but it is excluded by the sparsity
+# patterns, so grep should not recurse into it.
+test_expect_success 'grep --recurse-submodules honors sparse checkout in submodule' '
+	cat >expect <<-EOF &&
+	a:text
+	sub/B/b:text
+	EOF
+	git grep --recurse-submodules "text" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --recurse-submodules --cached searches entries with the SKIP_WORKTREE bit' '
+	cat >expect <<-EOF &&
+	a:text
+	b:text
+	dir/c:text
+	sub/A/a:text
+	sub/B/b:text
+	sub2/a:text
+	EOF
+	git grep --recurse-submodules --cached "text" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'working tree grep does not search the index with CE_VALID and SKIP_WORKTREE' '
+	cat >expect <<-EOF &&
+	a:text
+	EOF
+	test_when_finished "git update-index --no-assume-unchanged b" &&
+	git update-index --assume-unchanged b &&
+	git grep text >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'grep --cached searches index entries with both CE_VALID and SKIP_WORKTREE' '
+	cat >expect <<-EOF &&
+	a:text
+	b:text
+	dir/c:text
+	EOF
+	test_when_finished "git update-index --no-assume-unchanged b" &&
+	git update-index --assume-unchanged b &&
+	git grep --cached text >actual &&
+	test_cmp expect actual
+'
+
+test_done
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 286b18d..58f46c7 100755
--- a/t/t7900-maintenance.sh
+++ b/t/t7900-maintenance.sh
@@ -141,19 +141,25 @@
 	test_commit -C clone1 one &&
 	test_commit -C clone2 two &&
 	GIT_TRACE2_EVENT="$(pwd)/run-prefetch.txt" git maintenance run --task=prefetch 2>/dev/null &&
-	fetchargs="--prune --no-tags --no-write-fetch-head --recurse-submodules=no --refmap= --quiet" &&
-	test_subcommand git fetch remote1 $fetchargs +refs/heads/\\*:refs/prefetch/remote1/\\* <run-prefetch.txt &&
-	test_subcommand git fetch remote2 $fetchargs +refs/heads/\\*:refs/prefetch/remote2/\\* <run-prefetch.txt &&
+	fetchargs="--prefetch --prune --no-tags --no-write-fetch-head --recurse-submodules=no --quiet" &&
+	test_subcommand git fetch remote1 $fetchargs <run-prefetch.txt &&
+	test_subcommand git fetch remote2 $fetchargs <run-prefetch.txt &&
 	test_path_is_missing .git/refs/remotes &&
-	git log prefetch/remote1/one &&
-	git log prefetch/remote2/two &&
+	git log prefetch/remotes/remote1/one &&
+	git log prefetch/remotes/remote2/two &&
 	git fetch --all &&
-	test_cmp_rev refs/remotes/remote1/one refs/prefetch/remote1/one &&
-	test_cmp_rev refs/remotes/remote2/two refs/prefetch/remote2/two &&
+	test_cmp_rev refs/remotes/remote1/one refs/prefetch/remotes/remote1/one &&
+	test_cmp_rev refs/remotes/remote2/two refs/prefetch/remotes/remote2/two &&
 
 	test_cmp_config refs/prefetch/ log.excludedecoration &&
 	git log --oneline --decorate --all >log &&
-	! grep "prefetch" log
+	! grep "prefetch" log &&
+
+	test_when_finished git config --unset remote.remote1.skipFetchAll &&
+	git config remote.remote1.skipFetchAll true &&
+	GIT_TRACE2_EVENT="$(pwd)/skip-remote1.txt" git maintenance run --task=prefetch 2>/dev/null &&
+	test_subcommand ! git fetch remote1 $fetchargs <skip-remote1.txt &&
+	test_subcommand git fetch remote2 $fetchargs <skip-remote1.txt
 '
 
 test_expect_success 'prefetch and existing log.excludeDecoration values' '
@@ -350,8 +356,6 @@
 	done &&
 	GIT_TRACE2_EVENT="$(pwd)/pack-refs.txt" \
 		git maintenance run --task=pack-refs &&
-	ls .git/refs/heads/ >after &&
-	test_must_be_empty after &&
 	test_subcommand git pack-refs --all --prune <pack-refs.txt
 '
 
@@ -632,4 +636,17 @@
 	nongit test_must_fail git maintenance unregister
 '
 
+test_expect_success 'register and unregister bare repo' '
+	test_when_finished "git config --global --unset-all maintenance.repo || :" &&
+	test_might_fail git config --global --unset-all maintenance.repo &&
+	git init --bare barerepo &&
+	(
+		cd barerepo &&
+		git maintenance register &&
+		git config --get --global --fixed-value maintenance.repo "$(pwd)" &&
+		git maintenance unregister &&
+		test_must_fail git config --global --get-all maintenance.repo
+	)
+'
+
 test_done
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 4eee9c3..57fc10e 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -415,15 +415,23 @@
 	z512=$z64$z64$z64$z64$z64$z64$z64$z64 &&
 	clean_fake_sendmail &&
 	cp $patches longline.patch &&
-	echo $z512$z512 >>longline.patch &&
+	cat >>longline.patch <<-EOF &&
+	$z512$z512
+	not a long line
+	$z512$z512
+	EOF
 	test_must_fail git send-email \
 		--from="Example <nobody@example.com>" \
 		--to=nobody@example.com \
 		--smtp-server="$(pwd)/fake.sendmail" \
 		--transfer-encoding=8bit \
 		$patches longline.patch \
-		2>errors &&
-	grep longline.patch errors
+		2>actual &&
+	cat >expect <<-\EOF &&
+	fatal: longline.patch:35 is longer than 998 characters
+	warning: no patches were sent
+	EOF
+	test_cmp expect actual
 '
 
 test_expect_success $PREREQ 'no patch was sent' '
@@ -513,6 +521,49 @@
 
 done
 
+test_expect_success $PREREQ "--validate respects relative core.hooksPath path" '
+	clean_fake_sendmail &&
+	mkdir my-hooks &&
+	test_when_finished "rm my-hooks.ran" &&
+	write_script my-hooks/sendemail-validate <<-\EOF &&
+	>my-hooks.ran
+	exit 1
+	EOF
+	test_config core.hooksPath "my-hooks" &&
+	test_must_fail git send-email \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--smtp-server="$(pwd)/fake.sendmail" \
+		--validate \
+		longline.patch 2>actual &&
+	test_path_is_file my-hooks.ran &&
+	cat >expect <<-EOF &&
+	fatal: longline.patch: rejected by sendemail-validate hook
+	fatal: command '"'"'my-hooks/sendemail-validate'"'"' died with exit code 1
+	warning: no patches were sent
+	EOF
+	test_cmp expect actual
+'
+
+test_expect_success $PREREQ "--validate respects absolute core.hooksPath path" '
+	hooks_path="$(pwd)/my-hooks" &&
+	test_config core.hooksPath "$hooks_path" &&
+	test_when_finished "rm my-hooks.ran" &&
+	test_must_fail git send-email \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--smtp-server="$(pwd)/fake.sendmail" \
+		--validate \
+		longline.patch 2>actual &&
+	test_path_is_file my-hooks.ran &&
+	cat >expect <<-EOF &&
+	fatal: longline.patch: rejected by sendemail-validate hook
+	fatal: command '"'"'$hooks_path/sendemail-validate'"'"' died with exit code 1
+	warning: no patches were sent
+	EOF
+	test_cmp expect actual
+'
+
 for enc in 7bit 8bit quoted-printable base64
 do
 	test_expect_success $PREREQ "--transfer-encoding=$enc produces correct header" '
@@ -593,14 +644,33 @@
 	test_cmp expect actual
 '
 
+test_set_editor "$(pwd)/fake-editor"
+
+test_expect_success $PREREQ 'setup erroring fake editor' '
+	write_script fake-editor <<-\EOF
+	echo >&2 "I am about to error"
+	exit 1
+	EOF
+'
+
+test_expect_success $PREREQ 'fake editor dies with error' '
+	clean_fake_sendmail &&
+	test_must_fail git send-email \
+		--compose --subject foo \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--smtp-server="$(pwd)/fake.sendmail" \
+		$patches 2>err &&
+	grep "I am about to error" err &&
+	grep "the editor exited uncleanly, aborting everything" err
+'
+
 test_expect_success $PREREQ 'setup fake editor' '
 	write_script fake-editor <<-\EOF
 	echo fake edit >>"$1"
 	EOF
 '
 
-test_set_editor "$(pwd)/fake-editor"
-
 test_expect_success $PREREQ '--compose works' '
 	clean_fake_sendmail &&
 	git send-email \
@@ -1298,6 +1368,16 @@
 	! grep "X-Mailer" stdout
 '
 
+test_expect_success $PREREQ 'sendemail.identity: bool variable without a value' '
+	git -c sendemail.xmailer \
+		send-email \
+		--dry-run \
+		--from="nobody@example.com" \
+		$patches >stdout &&
+	grep "To: default@example.com" stdout &&
+	grep "X-Mailer" stdout
+'
+
 test_expect_success $PREREQ '--no-to overrides sendemail.to' '
 	git send-email \
 		--dry-run \
@@ -1759,7 +1839,7 @@
 	grep "^!somebody@example\.org!$" commandline1
 '
 
-test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '
+test_expect_success $PREREQ 'sendemail.aliasesfile=~/.mailrc' '
 	clean_fake_sendmail &&
 	echo "alias sbd  someone@example.org" >"$HOME/.mailrc" &&
 	git config --replace-all sendemail.aliasesfile "~/.mailrc" &&
@@ -2022,6 +2102,18 @@
 	do_xmailer_test 1 "--xmailer"
 '
 
+test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer' '
+	test_when_finished "test_unconfig sendemail.xmailer" &&
+	cat >>.git/config <<-\EOF &&
+	[sendemail]
+		xmailer
+	EOF
+	test_config sendemail.xmailer true &&
+	do_xmailer_test 1 "" &&
+	do_xmailer_test 0 "--no-xmailer" &&
+	do_xmailer_test 1 "--xmailer"
+'
+
 test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=false' '
 	test_config sendemail.xmailer false &&
 	do_xmailer_test 0 "" &&
@@ -2029,6 +2121,13 @@
 	do_xmailer_test 1 "--xmailer"
 '
 
+test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=' '
+	test_config sendemail.xmailer "" &&
+	do_xmailer_test 0 "" &&
+	do_xmailer_test 0 "--no-xmailer" &&
+	do_xmailer_test 1 "--xmailer"
+'
+
 test_expect_success $PREREQ 'setup expected-list' '
 	git send-email \
 	--dry-run \
@@ -2097,6 +2196,37 @@
 	test_cmp expected-list actual-list
 '
 
+test_expect_success $PREREQ 'test using command name with --sendmail-cmd' '
+	clean_fake_sendmail &&
+	PATH="$(pwd):$PATH" \
+	git send-email \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--sendmail-cmd="fake.sendmail" \
+		HEAD^ &&
+	test_path_is_file commandline1
+'
+
+test_expect_success $PREREQ 'test using arguments with --sendmail-cmd' '
+	clean_fake_sendmail &&
+	git send-email \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--sendmail-cmd='\''"$(pwd)/fake.sendmail" -f nobody@example.com'\'' \
+		HEAD^ &&
+	test_path_is_file commandline1
+'
+
+test_expect_success $PREREQ 'test shell expression with --sendmail-cmd' '
+	clean_fake_sendmail &&
+	git send-email \
+		--from="Example <nobody@example.com>" \
+		--to=nobody@example.com \
+		--sendmail-cmd='\''f() { "$(pwd)/fake.sendmail" "$@"; };f'\'' \
+		HEAD^ &&
+	test_path_is_file commandline1
+'
+
 test_expect_success $PREREQ 'invoke hook' '
 	mkdir -p .git/hooks &&
 
diff --git a/t/t9003-help-autocorrect.sh b/t/t9003-help-autocorrect.sh
index 03cd5c5..f00deaf 100755
--- a/t/t9003-help-autocorrect.sh
+++ b/t/t9003-help-autocorrect.sh
@@ -56,11 +56,8 @@
 	git config help.autocorrect never &&
 
 	test_must_fail git lfg 2>actual &&
-	if test_have_prereq C_LOCALE_OUTPUT
-	then
-		grep "is not a git command" actual &&
-		test_line_count = 1 actual
-	fi
+	grep "is not a git command" actual &&
+	test_line_count = 1 actual
 '
 
 test_done
diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh
index 1d3fdcc..fea41b3 100755
--- a/t/t9100-git-svn-basic.sh
+++ b/t/t9100-git-svn-basic.sh
@@ -4,21 +4,13 @@
 #
 
 test_description='git svn basic tests'
-GIT_SVN_LC_ALL=${LC_ALL:-$LANG}
 
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./lib-git-svn.sh
 
-case "$GIT_SVN_LC_ALL" in
-*.UTF-8)
-	test_set_prereq UTF8
-	;;
-*)
-	say "# UTF-8 locale not set, some tests skipped ($GIT_SVN_LC_ALL)"
-	;;
-esac
+prepare_utf8_locale
 
 test_expect_success 'git svn --version works anywhere' '
 	nongit git svn --version
@@ -187,8 +179,8 @@
 	test ! -h "$SVN_TREE"/exec-2.sh &&
 	test_cmp help "$SVN_TREE"/exec-2.sh'
 
-name="commit with UTF-8 message: locale: $GIT_SVN_LC_ALL"
-LC_ALL="$GIT_SVN_LC_ALL"
+name="commit with UTF-8 message: locale: $GIT_TEST_UTF8_LOCALE"
+LC_ALL="$GIT_TEST_UTF8_LOCALE"
 export LC_ALL
 # This test relies on the previous test, hence requires POSIXPERM,SYMLINKS
 test_expect_success UTF8,POSIXPERM,SYMLINKS "$name" "
@@ -330,7 +322,7 @@
 	git svn fetch ) &&
 	rm -rf bare-repo
 	'
-test_expect_success 'git-svn works in in a repository with a gitdir: link' '
+test_expect_success 'git-svn works in a repository with a gitdir: link' '
 	mkdir worktree gitdir &&
 	( cd worktree &&
 	git svn init "$svnrepo" &&
diff --git a/t/t9115-git-svn-dcommit-funky-renames.sh b/t/t9115-git-svn-dcommit-funky-renames.sh
index 9b44a44..743fbe1 100755
--- a/t/t9115-git-svn-dcommit-funky-renames.sh
+++ b/t/t9115-git-svn-dcommit-funky-renames.sh
@@ -93,9 +93,9 @@
 # > ... All of the above characters, except for the backslash, are converted
 # > to special UNICODE characters in the range 0xf000 to 0xf0ff (the
 # > "Private use area") when creating or accessing files.
-prepare_a_utf8_locale
+prepare_utf8_locale
 test_expect_success UTF8,!MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 new file on dcommit' '
-	LC_ALL=$a_utf8_locale &&
+	LC_ALL=$GIT_TEST_UTF8_LOCALE &&
 	export LC_ALL &&
 	neq=$(printf "\201\202") &&
 	git config svn.pathnameencoding cp932 &&
@@ -107,7 +107,7 @@
 
 # See the comment on the above test for setting of LC_ALL.
 test_expect_success !MINGW,!UTF8_NFD_TO_NFC 'svn.pathnameencoding=cp932 rename on dcommit' '
-	LC_ALL=$a_utf8_locale &&
+	LC_ALL=$GIT_TEST_UTF8_LOCALE &&
 	export LC_ALL &&
 	inf=$(printf "\201\207") &&
 	git config svn.pathnameencoding cp932 &&
diff --git a/t/t9117-git-svn-init-clone.sh b/t/t9117-git-svn-init-clone.sh
index 044f65e..62de819 100755
--- a/t/t9117-git-svn-init-clone.sh
+++ b/t/t9117-git-svn-init-clone.sh
@@ -7,12 +7,6 @@
 
 . ./lib-git-svn.sh
 
-# setup, run inside tmp so we don't have any conflicts with $svnrepo
-set -e
-rm -r .git
-mkdir tmp
-cd tmp
-
 test_expect_success 'setup svnrepo' '
 	mkdir project project/trunk project/branches project/tags &&
 	echo foo > project/trunk/foo &&
diff --git a/t/t9129-git-svn-i18n-commitencoding.sh b/t/t9129-git-svn-i18n-commitencoding.sh
index 2c213ae..01e1e8a 100755
--- a/t/t9129-git-svn-i18n-commitencoding.sh
+++ b/t/t9129-git-svn-i18n-commitencoding.sh
@@ -14,12 +14,12 @@
 	test_cmp current "$1"
 }
 
-prepare_a_utf8_locale
+prepare_utf8_locale
 
 compare_svn_head_with () {
 	# extract just the log message and strip out committer info.
 	# don't use --limit here since svn 1.1.x doesn't have it,
-	LC_ALL="$a_utf8_locale" svn log $(git svn info --url) | perl -w -e '
+	LC_ALL="$GIT_TEST_UTF8_LOCALE" svn log $(git svn info --url) | perl -w -e '
 		use bytes;
 		$/ = ("-"x72) . "\n";
 		my @x = <STDIN>;
diff --git a/t/t9148-git-svn-propset.sh b/t/t9148-git-svn-propset.sh
index 1026390..aebb289 100755
--- a/t/t9148-git-svn-propset.sh
+++ b/t/t9148-git-svn-propset.sh
@@ -7,19 +7,22 @@
 
 . ./lib-git-svn.sh
 
-foo_subdir2="subdir/subdir2/foo_subdir2"
+test_expect_success 'setup propset via import' '
+	test_when_finished "rm -rf import" &&
 
-set -e
-mkdir import &&
-(set -e ; cd import
-	mkdir subdir
-	mkdir subdir/subdir2
-	touch foo 		# for 'add props top level'
-	touch subdir/foo_subdir # for 'add props relative'
-	touch "$foo_subdir2"	# for 'add props subdir'
-	svn_cmd import -m 'import for git svn' . "$svnrepo" >/dev/null
-)
-rm -rf import
+	foo_subdir2="subdir/subdir2/foo_subdir2" &&
+	mkdir -p import/subdir/subdir2 &&
+	(
+		cd import &&
+		# for "add props top level"
+		>foo &&
+		# for "add props relative"
+		>subdir/foo_subdir &&
+		# for "add props subdir"
+		>"$foo_subdir2" &&
+		svn_cmd import -m "import for git svn" . "$svnrepo"
+	)
+'
 
 test_expect_success 'initialize git svn' '
 	git svn init "$svnrepo"
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 5c47ac4..aa55b41 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
@@ -392,7 +392,7 @@
 		git gc
 		git prune" &&
 	git fast-import <input &&
-	test -f .git/TEMP_TAG &&
+	test $(test-tool ref-store main resolve-ref TEMP_TAG 0 | cut -f1 -d " " ) != "$ZERO_OID" &&
 	test $(git rev-parse main) = $(git rev-parse TEMP_TAG^)
 '
 
@@ -1538,7 +1538,6 @@
 	commit refs/heads/O1
 	# -- ignore all of this text
 	committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE
-	# $GIT_COMMITTER_NAME has inserted here for his benefit.
 	data <<COMMIT
 	dirty directory copy
 	COMMIT
diff --git a/t/t9801-git-p4-branch.sh b/t/t9801-git-p4-branch.sh
index 56e6469..50a6f8b 100755
--- a/t/t9801-git-p4-branch.sh
+++ b/t/t9801-git-p4-branch.sh
@@ -203,19 +203,19 @@
 		git p4 clone --dest=. --detect-branches //depot@all &&
 		git log --all --graph --decorate --stat &&
 		git reset --hard p4/depot/branch1 &&
-		test -f file1 &&
-		test -f file2 &&
-		test -f file3 &&
+		test_path_is_file file1 &&
+		test_path_is_file file2 &&
+		test_path_is_file file3 &&
 		grep update file2 &&
 		git reset --hard p4/depot/branch2 &&
-		test -f file1 &&
-		test -f file2 &&
+		test_path_is_file file1 &&
+		test_path_is_file file2 &&
 		test ! -f file3 &&
 		! grep update file2 &&
 		git reset --hard p4/depot/branch3 &&
-		test -f file1 &&
-		test -f file2 &&
-		test -f file3 &&
+		test_path_is_file file1 &&
+		test_path_is_file file2 &&
+		test_path_is_file file3 &&
 		grep update file2 &&
 		cd "$cli" &&
 		cd branch1 &&
@@ -294,11 +294,13 @@
 		test_path_is_file file3 &&
 		grep update file2 &&
 		git reset --hard p4/depot/branch4 &&
+		git diff-tree --quiet HEAD &&
 		test_path_is_file file1 &&
 		test_path_is_file file2 &&
 		test_path_is_missing file3 &&
 		! grep update file2 &&
 		git reset --hard p4/depot/branch5 &&
+		git diff-tree --quiet HEAD &&
 		test_path_is_file file1 &&
 		test_path_is_file file2 &&
 		test_path_is_file file3 &&
@@ -606,22 +608,22 @@
 		git p4 clone --dest=. --use-client-spec  --detect-branches //depot@all &&
 		git log --all --graph --decorate --stat &&
 		git reset --hard p4/depot/branch1 &&
-		test -f file1 &&
-		test -f file2 &&
-		test -f file3 &&
-		test -f sub_file1 &&
+		test_path_is_file file1 &&
+		test_path_is_file file2 &&
+		test_path_is_file file3 &&
+		test_path_is_file sub_file1 &&
 		grep update file2 &&
 		git reset --hard p4/depot/branch2 &&
-		test -f file1 &&
-		test -f file2 &&
+		test_path_is_file file1 &&
+		test_path_is_file file2 &&
 		test ! -f file3 &&
-		test -f sub_file1 &&
+		test_path_is_file sub_file1 &&
 		! grep update file2 &&
 		git reset --hard p4/depot/branch3 &&
-		test -f file1 &&
-		test -f file2 &&
-		test -f file3 &&
-		test -f sub_file1 &&
+		test_path_is_file file1 &&
+		test_path_is_file file2 &&
+		test_path_is_file file3 &&
+		test_path_is_file sub_file1 &&
 		grep update file2 &&
 		cd "$cli" &&
 		cd branch1 &&
diff --git a/t/t9802-git-p4-filetype.sh b/t/t9802-git-p4-filetype.sh
index 94edebe2..19073c6 100755
--- a/t/t9802-git-p4-filetype.sh
+++ b/t/t9802-git-p4-filetype.sh
@@ -263,7 +263,7 @@
 	(
 		cd "$git" &&
 		test -L symlink &&
-		test $(readlink symlink) = symlink-target
+		test $(test_readlink symlink) = symlink-target
 	)
 '
 
@@ -329,7 +329,7 @@
 	git p4 clone --dest="$git" //depot@all &&
 	(
 		cd "$git" &&
-		test $(readlink empty-symlink) = target2
+		test $(test_readlink empty-symlink) = target2
 	)
 '
 
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 04ce884..1157393 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -1879,6 +1879,7 @@
 	(
 		words=(git command --opt list) &&
 		cword=${#words[@]} &&
+		__git_cmd_idx=1 &&
 		__git_find_on_cmdline "add list remove" >actual
 	) &&
 	test_cmp expect actual
@@ -1889,6 +1890,7 @@
 	(
 		words=(git command -o --opt remove list add) &&
 		cword=${#words[@]} &&
+		__git_cmd_idx=1 &&
 		__git_find_on_cmdline "add list remove" >actual
 	) &&
 	test_cmp expect actual
@@ -1898,6 +1900,7 @@
 	(
 		words=(git command --opt branch) &&
 		cword=${#words[@]} &&
+		__git_cmd_idx=1 &&
 		__git_find_on_cmdline "add list remove" >actual
 	) &&
 	test_must_be_empty actual
@@ -1908,6 +1911,7 @@
 	(
 		words=(git command --opt list) &&
 		cword=${#words[@]} &&
+		__git_cmd_idx=1 &&
 		__git_find_on_cmdline --show-idx "add list remove" >actual
 	) &&
 	test_cmp expect actual
@@ -1918,6 +1922,7 @@
 	(
 		words=(git command -o --opt remove list add) &&
 		cword=${#words[@]} &&
+		__git_cmd_idx=1 &&
 		__git_find_on_cmdline --show-idx "add list remove" >actual
 	) &&
 	test_cmp expect actual
@@ -1927,11 +1932,23 @@
 	(
 		words=(git command --opt branch) &&
 		cword=${#words[@]} &&
+		__git_cmd_idx=1 &&
 		__git_find_on_cmdline --show-idx "add list remove" >actual
 	) &&
 	test_must_be_empty actual
 '
 
+test_expect_success '__git_find_on_cmdline - ignores matches before command with index' '
+	echo "6 remove" >expect &&
+	(
+		words=(git -C remove command -o --opt remove list add) &&
+		cword=${#words[@]} &&
+		__git_cmd_idx=3 &&
+		__git_find_on_cmdline --show-idx "add list remove" >actual
+	) &&
+	test_cmp expect actual
+'
+
 test_expect_success '__git_get_config_variables' '
 	cat >expect <<-EOF &&
 	name-1
@@ -2275,6 +2292,7 @@
 		(
 			words=(git push '$flag' other ma) &&
 			cword=${#words[@]} cur=${words[cword-1]} &&
+			__git_cmd_idx=1 &&
 			__git_complete_remote_or_refspec &&
 			print_comp
 		) &&
@@ -2288,6 +2306,7 @@
 		(
 			words=(git push other '$flag' ma) &&
 			cword=${#words[@]} cur=${words[cword-1]} &&
+			__git_cmd_idx=1 &&
 			__git_complete_remote_or_refspec &&
 			print_comp
 		) &&
@@ -2306,6 +2325,7 @@
 	test_completion "git config log.d" <<-\EOF
 	log.date Z
 	log.decorate Z
+	log.diffMerges Z
 	EOF
 '
 
@@ -2327,6 +2347,7 @@
 	test_completion "git -c log.d" <<-\EOF
 	log.date=Z
 	log.decorate=Z
+	log.diffMerges=Z
 	EOF
 '
 
@@ -2348,6 +2369,7 @@
 	test_completion "git clone --config=log.d" <<-\EOF
 	log.date=Z
 	log.decorate=Z
+	log.diffMerges=Z
 	EOF
 '
 
@@ -2382,6 +2404,19 @@
 	verbose test -z "$__gitcomp_builtin_notes_edit"
 '
 
+test_expect_success 'option aliases are not shown by default' '
+	test_completion "git clone --recurs" "--recurse-submodules "
+'
+
+test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' '
+	. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+	GIT_COMPLETION_SHOW_ALL=1 && export GIT_COMPLETION_SHOW_ALL &&
+	test_completion "git clone --recurs" <<-\EOF
+	--recurse-submodules Z
+	--recursive Z
+	EOF
+'
+
 test_expect_success '__git_complete' '
 	unset -f __git_wrap__git_main &&
 
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index c96a555..e28411b 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -172,12 +172,23 @@
 #   --notick
 #	Do not call test_tick before making a commit
 #   --append
-#	Use "echo >>" instead of "echo >" when writing "<contents>" to
-#	"<file>"
+#	Use ">>" instead of ">" when writing "<contents>" to "<file>"
+#   --printf
+#       Use "printf" instead of "echo" when writing "<contents>" to
+#       "<file>", use this to write escape sequences such as "\0", a
+#       trailing "\n" won't be added automatically. This option
+#       supports nothing but the FORMAT of printf(1), i.e. no custom
+#       ARGUMENT(s).
 #   --signoff
 #	Invoke "git commit" with --signoff
 #   --author <author>
 #	Invoke "git commit" with --author <author>
+#   --no-tag
+#	Do not tag the resulting commit
+#   --annotate
+#	Create an annotated tag with "--annotate -m <message>". Calls
+#	test_tick between making the commit and tag, unless --notick
+#	is given.
 #
 # This will commit a file with the given contents and the given commit
 # message, and tag the resulting commit with the given tag name.
@@ -186,16 +197,21 @@
 
 test_commit () {
 	notick= &&
+	echo=echo &&
 	append= &&
 	author= &&
 	signoff= &&
 	indir= &&
+	tag=light &&
 	while test $# != 0
 	do
 		case "$1" in
 		--notick)
 			notick=yes
 			;;
+		--printf)
+			echo=printf
+			;;
 		--append)
 			append=yes
 			;;
@@ -216,6 +232,12 @@
 			indir="$2"
 			shift
 			;;
+		--no-tag)
+			tag=none
+			;;
+		--annotate)
+			tag=annotate
+			;;
 		*)
 			break
 			;;
@@ -226,9 +248,9 @@
 	file=${2:-"$1.t"} &&
 	if test -n "$append"
 	then
-		echo "${3-$1}" >>"$indir$file"
+		$echo "${3-$1}" >>"$indir$file"
 	else
-		echo "${3-$1}" >"$indir$file"
+		$echo "${3-$1}" >"$indir$file"
 	fi &&
 	git ${indir:+ -C "$indir"} add "$file" &&
 	if test -z "$notick"
@@ -238,7 +260,20 @@
 	git ${indir:+ -C "$indir"} commit \
 	    ${author:+ --author "$author"} \
 	    $signoff -m "$1" &&
-	git ${indir:+ -C "$indir"} tag "${4:-$1}"
+	case "$tag" in
+	none)
+		;;
+	light)
+		git ${indir:+ -C "$indir"} tag "${4:-$1}"
+		;;
+	annotate)
+		if test -z "$notick"
+		then
+			test_tick
+		fi &&
+		git ${indir:+ -C "$indir"} tag -a -m "$1" "${4:-$1}"
+		;;
+	esac
 }
 
 # Call test_merge with the arguments "<message> <commit>", where <commit>
@@ -810,6 +845,32 @@
 	fi
 }
 
+# SYNOPSIS:
+# 	test_stdout_line_count <bin-ops> <value> <cmd> [<args>...]
+#
+# test_stdout_line_count checks that the output of a command has the number
+# of lines it ought to. For example:
+#
+# test_stdout_line_count = 3 git ls-files -u
+# test_stdout_line_count -gt 10 ls
+test_stdout_line_count () {
+	local ops val trashdir &&
+	if test "$#" -le 3
+	then
+		BUG "expect 3 or more arguments"
+	fi &&
+	ops="$1" &&
+	val="$2" &&
+	shift 2 &&
+	if ! trashdir="$(git rev-parse --git-dir)/trash"; then
+		BUG "expect to be run inside a worktree"
+	fi &&
+	mkdir -p "$trashdir" &&
+	"$@" >"$trashdir/output" &&
+	test_line_count "$ops" "$val" "$trashdir/output"
+}
+
+
 test_file_size () {
 	test "$#" -ne 1 && BUG "1 param"
 	test-tool path-utils file-size "$1"
@@ -1018,13 +1079,6 @@
 	cmp "$@"
 }
 
-# Wrapper for test_cmp which used to be used for
-# GIT_TEST_GETTEXT_POISON=false. Only here as a shim for other
-# in-flight changes. Should not be used and will be removed soon.
-test_i18ncmp () {
-	test_cmp "$@"
-}
-
 # Wrapper for grep which used to be used for
 # GIT_TEST_GETTEXT_POISON=false. Only here as a shim for other
 # in-flight changes. Should not be used and will be removed soon.
@@ -1215,22 +1269,10 @@
 		} && (exit \"\$eval_ret\"); eval_ret=\$?; $test_atexit_cleanup"
 }
 
-# Most tests can use the created repository, but some may need to create more.
+# Deprecated wrapper for "git init", use "git init" directly instead
 # Usage: test_create_repo <directory>
 test_create_repo () {
-	test "$#" = 1 ||
-	BUG "not 1 parameter to test-create-repo"
-	repo="$1"
-	mkdir -p "$repo"
-	(
-		cd "$repo" || error "Cannot setup test environment"
-		"${GIT_TEST_INSTALLED:-$GIT_EXEC_PATH}/git$X" -c \
-			init.defaultBranch="${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME-master}" \
-			init \
-			"--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
-		error "cannot run git init -- have you built things yet?"
-		mv .git/hooks .git/hooks-disabled
-	) || exit
+	git init "$@"
 }
 
 # This function helps on symlink challenged file systems when it is not
@@ -1437,46 +1479,24 @@
 	)
 } 7>&2 2>&4
 
-# convert function arguments or stdin (if not arguments given) to pktline
-# representation. If multiple arguments are given, they are separated by
-# whitespace and put in a single packet. Note that data containing NULs must be
-# given on stdin, and that empty input becomes an empty packet, not a flush
-# packet (for that you can just print 0000 yourself).
+# These functions are historical wrappers around "test-tool pkt-line"
+# for older tests. Use "test-tool pkt-line" itself in new tests.
 packetize () {
 	if test $# -gt 0
 	then
 		packet="$*"
 		printf '%04x%s' "$((4 + ${#packet}))" "$packet"
 	else
-		perl -e '
-			my $packet = do { local $/; <STDIN> };
-			printf "%04x%s", 4 + length($packet), $packet;
-		'
+		test-tool pkt-line pack
 	fi
 }
 
-# Parse the input as a series of pktlines, writing the result to stdout.
-# Sideband markers are removed automatically, and the output is routed to
-# stderr if appropriate.
-#
-# NUL bytes are converted to "\\0" for ease of parsing with text tools.
+packetize_raw () {
+	test-tool pkt-line pack-raw-stdin
+}
+
 depacketize () {
-	perl -e '
-		while (read(STDIN, $len, 4) == 4) {
-			if ($len eq "0000") {
-				print "FLUSH\n";
-			} else {
-				read(STDIN, $buf, hex($len) - 4);
-				$buf =~ s/\0/\\0/g;
-				if ($buf =~ s/^[\x2\x3]//) {
-					print STDERR $buf;
-				} else {
-					$buf =~ s/^\x1//;
-					print $buf;
-				}
-			}
-		}
-	'
+	test-tool pkt-line unpack
 }
 
 # Converts base-16 data into base-8. The output is given as a sequence of
@@ -1692,3 +1712,9 @@
 
 	return 0
 }
+
+# Print the destination of symlink(s) provided as arguments. Basically
+# the same as the readlink command, but it's not available everywhere.
+test_readlink () {
+	perl -le 'print readlink($_) for @ARGV' "$@"
+}
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 987a6c1..9e26860 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -64,6 +64,11 @@
 	export GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS
 fi
 
+# Explicitly set the default branch name for testing, to avoid the
+# transitory "git init" warning under --verbose.
+: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=master}
+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+
 ################################################################
 # It appears that people try to run tests without building...
 "${GIT_TEST_INSTALLED:-$GIT_BUILD_DIR}/git$X" >/dev/null
@@ -401,14 +406,15 @@
 LC_ALL=C
 PAGER=cat
 TZ=UTC
-export LANG LC_ALL PAGER TZ
+COLUMNS=80
+export LANG LC_ALL PAGER TZ COLUMNS
 EDITOR=:
 
 # A call to "unset" with no arguments causes at least Solaris 10
 # /usr/xpg4/bin/sh and /bin/ksh to bail out.  So keep the unsets
 # deriving from the command substitution clustered with the other
 # ones.
-unset VISUAL EMAIL LANGUAGE COLUMNS $("$PERL_PATH" -e '
+unset VISUAL EMAIL LANGUAGE $("$PERL_PATH" -e '
 	my @env = keys %ENV;
 	my $ok = join("|", qw(
 		TRACE
@@ -448,6 +454,8 @@
 
 GIT_DEFAULT_HASH="${GIT_TEST_DEFAULT_HASH:-sha1}"
 export GIT_DEFAULT_HASH
+GIT_TEST_MERGE_ALGORITHM="${GIT_TEST_MERGE_ALGORITHM:-ort}"
+export GIT_TEST_MERGE_ALGORITHM
 
 # Tests using GIT_TRACE typically don't want <timestamp> <file>:<line> output
 GIT_TRACE_BARE=1
@@ -725,14 +733,24 @@
 	arg="$1"
 	shift
 	test -z "$*" && return 1
-	for pattern_
-	do
-		case "$arg" in
-		$pattern_)
-			return 0
-		esac
-	done
-	return 1
+	# We need to use "$*" to get field-splitting, but we want to
+	# disable globbing, since we are matching against an arbitrary
+	# $arg, not what's in the filesystem. Using "set -f" accomplishes
+	# that, but we must do it in a subshell to avoid impacting the
+	# rest of the script. The exit value of the subshell becomes
+	# the function's return value.
+	(
+		set -f
+		for pattern_ in $*
+		do
+			case "$arg" in
+			$pattern_)
+				exit 0
+				;;
+			esac
+		done
+		exit 1
+	)
 }
 
 match_test_selector_list () {
@@ -841,7 +859,7 @@
 last_verbose=t
 maybe_setup_verbose () {
 	test -z "$verbose_only" && return
-	if match_pattern_list $test_count $verbose_only
+	if match_pattern_list $test_count "$verbose_only"
 	then
 		exec 4>&2 3>&1
 		# Emit a delimiting blank line when going from
@@ -871,7 +889,7 @@
 		return
 	fi
 	GIT_VALGRIND_ENABLED=
-	if match_pattern_list $test_count $valgrind_only
+	if match_pattern_list $test_count "$valgrind_only"
 	then
 		GIT_VALGRIND_ENABLED=t
 	fi
@@ -945,8 +963,11 @@
 		trace=
 		# 117 is magic because it is unlikely to match the exit
 		# code of other programs
-		if $(printf '%s\n' "$1" | sed -f "$GIT_BUILD_DIR/t/chainlint.sed" | grep -q '?![A-Z][A-Z]*?!') ||
-			test "OK-117" != "$(test_eval_ "(exit 117) && $1${LF}${LF}echo OK-\$?" 3>&1)"
+		if test "OK-117" != "$(test_eval_ "(exit 117) && $1${LF}${LF}echo OK-\$?" 3>&1)" ||
+		   {
+			test "${GIT_TEST_CHAIN_LINT_HARDER:-${GIT_TEST_CHAIN_LINT_HARDER_DEFAULT:-1}}" != 0 &&
+			$(printf '%s\n' "$1" | sed -f "$GIT_BUILD_DIR/t/chainlint.sed" | grep -q '?![A-Z][A-Z]*?!')
+		   }
 		then
 			BUG "broken &&-chain or run-away HERE-DOC: $1"
 		fi
@@ -996,7 +1017,7 @@
 test_skip () {
 	to_skip=
 	skipped_reason=
-	if match_pattern_list $this_test.$test_count $GIT_SKIP_TESTS
+	if match_pattern_list $this_test.$test_count "$GIT_SKIP_TESTS"
 	then
 		to_skip=t
 		skipped_reason="GIT_SKIP_TESTS"
@@ -1167,7 +1188,7 @@
 			esac
 		fi
 
-		if test -z "$debug"
+		if test -z "$debug" && test -n "$remove_trash"
 		then
 			test -d "$TRASH_DIRECTORY" ||
 			error "Tests passed but trash directory already removed before test cleanup; aborting"
@@ -1332,6 +1353,22 @@
 	exit 1
 fi
 
+# Are we running this test at all?
+remove_trash=
+this_test=${0##*/}
+this_test=${this_test%%-*}
+if match_pattern_list "$this_test" "$GIT_SKIP_TESTS"
+then
+	say_color info >&3 "skipping test $this_test altogether"
+	skip_all="skip all tests in $this_test"
+	test_done
+fi
+
+# Last-minute variable setup
+HOME="$TRASH_DIRECTORY"
+GNUPGHOME="$HOME/gnupg-home-not-used"
+export HOME GNUPGHOME
+
 # Test repository
 rm -fr "$TRASH_DIRECTORY" || {
 	GIT_EXIT_OK=t
@@ -1339,13 +1376,11 @@
 	exit 1
 }
 
-HOME="$TRASH_DIRECTORY"
-GNUPGHOME="$HOME/gnupg-home-not-used"
-export HOME GNUPGHOME
-
+remove_trash=t
 if test -z "$TEST_NO_CREATE_REPO"
 then
-	test_create_repo "$TRASH_DIRECTORY"
+	git init "$TRASH_DIRECTORY" >&3 2>&4 ||
+	error "cannot run git init"
 else
 	mkdir -p "$TRASH_DIRECTORY"
 fi
@@ -1354,15 +1389,6 @@
 # in subprocesses like git equals our $PWD (for pathname comparisons).
 cd -P "$TRASH_DIRECTORY" || exit 1
 
-this_test=${0##*/}
-this_test=${this_test%%-*}
-if match_pattern_list "$this_test" $GIT_SKIP_TESTS
-then
-	say_color info >&3 "skipping test $this_test altogether"
-	skip_all="skip all tests in $this_test"
-	test_done
-fi
-
 if test -n "$write_junit_xml"
 then
 	junit_xml_dir="$TEST_OUTPUT_DIRECTORY/out"
@@ -1457,6 +1483,7 @@
 	test_set_prereq NATIVE_CRLF
 	test_set_prereq SED_STRIPS_CR
 	test_set_prereq GREP_STRIPS_CR
+	test_set_prereq WINDOWS
 	GIT_TEST_CMP=mingw_test_cmp
 	;;
 *CYGWIN*)
@@ -1465,6 +1492,7 @@
 	test_set_prereq CYGWIN
 	test_set_prereq SED_STRIPS_CR
 	test_set_prereq GREP_STRIPS_CR
+	test_set_prereq WINDOWS
 	;;
 *)
 	test_set_prereq POSIXPERM
@@ -1481,6 +1509,8 @@
 	;;
 esac
 
+test_set_prereq REFFILES
+
 ( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
 test -z "$NO_PERL" && test_set_prereq PERL
 test -z "$NO_PTHREADS" && test_set_prereq PTHREADS
@@ -1489,11 +1519,6 @@
 test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
 test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
 
-# Used to be used for GIT_TEST_GETTEXT_POISON=false. Only here as a
-# shim for other in-flight changes. Should not be used and will be
-# removed soon.
-test_set_prereq C_LOCALE_OUTPUT
-
 if test -z "$GIT_TEST_CHECK_CACHE_TREE"
 then
 	GIT_TEST_CHECK_CACHE_TREE=true
diff --git a/trace2/tr2_dst.c b/trace2/tr2_dst.c
index ae052a0..bda283e 100644
--- a/trace2/tr2_dst.c
+++ b/trace2/tr2_dst.c
@@ -204,15 +204,16 @@
 
 	fd = socket(AF_UNIX, sock_type, 0);
 	if (fd == -1)
-		return errno;
+		return -1;
 
 	sa.sun_family = AF_UNIX;
 	strlcpy(sa.sun_path, path, sizeof(sa.sun_path));
 
 	if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
-		int e = errno;
+		int saved_errno = errno;
 		close(fd);
-		return e;
+		errno = saved_errno;
+		return -1;
 	}
 
 	*out_fd = fd;
@@ -227,7 +228,6 @@
 {
 	unsigned int uds_try = 0;
 	int fd;
-	int e;
 	const char *path = NULL;
 
 	/*
@@ -271,15 +271,13 @@
 	}
 
 	if (uds_try & TR2_DST_UDS_TRY_STREAM) {
-		e = tr2_dst_try_uds_connect(path, SOCK_STREAM, &fd);
-		if (!e)
+		if (!tr2_dst_try_uds_connect(path, SOCK_STREAM, &fd))
 			goto connected;
-		if (e != EPROTOTYPE)
+		if (errno != EPROTOTYPE)
 			goto error;
 	}
 	if (uds_try & TR2_DST_UDS_TRY_DGRAM) {
-		e = tr2_dst_try_uds_connect(path, SOCK_DGRAM, &fd);
-		if (!e)
+		if (!tr2_dst_try_uds_connect(path, SOCK_DGRAM, &fd))
 			goto connected;
 	}
 
@@ -287,7 +285,7 @@
 	if (tr2_dst_want_warning())
 		warning("trace2: could not connect to socket '%s' for '%s' tracing: %s",
 			path, tr2_sysenv_display_name(dst->sysenv_var),
-			strerror(e));
+			strerror(errno));
 
 	tr2_dst_trace_disable(dst);
 	return 0;
diff --git a/trailer.c b/trailer.c
index 249ed61..7c7cb61 100644
--- a/trailer.c
+++ b/trailer.c
@@ -14,6 +14,7 @@
 	char *name;
 	char *key;
 	char *command;
+	char *cmd;
 	enum trailer_where where;
 	enum trailer_if_exists if_exists;
 	enum trailer_if_missing if_missing;
@@ -127,6 +128,7 @@
 	free(item->conf.name);
 	free(item->conf.key);
 	free(item->conf.command);
+	free(item->conf.cmd);
 	free(item->token);
 	free(item->value);
 	free(item);
@@ -174,7 +176,7 @@
 
 static struct trailer_item *trailer_from_arg(struct arg_item *arg_tok)
 {
-	struct trailer_item *new_item = xcalloc(sizeof(*new_item), 1);
+	struct trailer_item *new_item = xcalloc(1, sizeof(*new_item));
 	new_item->token = arg_tok->token;
 	new_item->value = arg_tok->value;
 	arg_tok->token = arg_tok->value = NULL;
@@ -216,18 +218,24 @@
 	return 1;
 }
 
-static char *apply_command(const char *command, const char *arg)
+static char *apply_command(struct conf_info *conf, const char *arg)
 {
 	struct strbuf cmd = STRBUF_INIT;
 	struct strbuf buf = STRBUF_INIT;
 	struct child_process cp = CHILD_PROCESS_INIT;
 	char *result;
 
-	strbuf_addstr(&cmd, command);
-	if (arg)
-		strbuf_replace(&cmd, TRAILER_ARG_STRING, arg);
-
-	strvec_push(&cp.args, cmd.buf);
+	if (conf->cmd) {
+		strbuf_addstr(&cmd, conf->cmd);
+		strvec_push(&cp.args, cmd.buf);
+		if (arg)
+			strvec_push(&cp.args, arg);
+	} else if (conf->command) {
+		strbuf_addstr(&cmd, conf->command);
+		if (arg)
+			strbuf_replace(&cmd, TRAILER_ARG_STRING, arg);
+		strvec_push(&cp.args, cmd.buf);
+	}
 	cp.env = local_repo_env;
 	cp.no_stdin = 1;
 	cp.use_shell = 1;
@@ -247,7 +255,7 @@
 
 static void apply_item_command(struct trailer_item *in_tok, struct arg_item *arg_tok)
 {
-	if (arg_tok->conf.command) {
+	if (arg_tok->conf.command || arg_tok->conf.cmd) {
 		const char *arg;
 		if (arg_tok->value && arg_tok->value[0]) {
 			arg = arg_tok->value;
@@ -257,7 +265,7 @@
 			else
 				arg = xstrdup("");
 		}
-		arg_tok->value = apply_command(arg_tok->conf.command, arg);
+		arg_tok->value = apply_command(&arg_tok->conf, arg);
 		free((char *)arg);
 	}
 }
@@ -430,6 +438,7 @@
 	dst->name = xstrdup_or_null(src->name);
 	dst->key = xstrdup_or_null(src->key);
 	dst->command = xstrdup_or_null(src->command);
+	dst->cmd = xstrdup_or_null(src->cmd);
 }
 
 static struct arg_item *get_conf_item(const char *name)
@@ -445,7 +454,7 @@
 	}
 
 	/* Item does not already exists, create it */
-	item = xcalloc(sizeof(*item), 1);
+	CALLOC_ARRAY(item, 1);
 	duplicate_conf(&item->conf, &default_conf_info);
 	item->conf.name = xstrdup(name);
 
@@ -454,8 +463,8 @@
 	return item;
 }
 
-enum trailer_info_type { TRAILER_KEY, TRAILER_COMMAND, TRAILER_WHERE,
-			 TRAILER_IF_EXISTS, TRAILER_IF_MISSING };
+enum trailer_info_type { TRAILER_KEY, TRAILER_COMMAND, TRAILER_CMD,
+			TRAILER_WHERE, TRAILER_IF_EXISTS, TRAILER_IF_MISSING };
 
 static struct {
 	const char *name;
@@ -463,6 +472,7 @@
 } trailer_config_items[] = {
 	{ "key", TRAILER_KEY },
 	{ "command", TRAILER_COMMAND },
+	{ "cmd", TRAILER_CMD },
 	{ "where", TRAILER_WHERE },
 	{ "ifexists", TRAILER_IF_EXISTS },
 	{ "ifmissing", TRAILER_IF_MISSING }
@@ -542,6 +552,11 @@
 			warning(_("more than one %s"), conf_key);
 		conf->command = xstrdup(value);
 		break;
+	case TRAILER_CMD:
+		if (conf->cmd)
+			warning(_("more than one %s"), conf_key);
+		conf->cmd = xstrdup(value);
+		break;
 	case TRAILER_WHERE:
 		if (trailer_set_where(&conf->where, value))
 			warning(_("unknown value '%s' for key '%s'"), value, conf_key);
@@ -664,7 +679,7 @@
 static struct trailer_item *add_trailer_item(struct list_head *head, char *tok,
 					     char *val)
 {
-	struct trailer_item *new_item = xcalloc(sizeof(*new_item), 1);
+	struct trailer_item *new_item = xcalloc(1, sizeof(*new_item));
 	new_item->token = tok;
 	new_item->value = val;
 	list_add_tail(&new_item->list, head);
@@ -675,7 +690,7 @@
 			 const struct conf_info *conf,
 			 const struct new_trailer_item *new_trailer_item)
 {
-	struct arg_item *new_item = xcalloc(sizeof(*new_item), 1);
+	struct arg_item *new_item = xcalloc(1, sizeof(*new_item));
 	new_item->token = tok;
 	new_item->value = val;
 	duplicate_conf(&new_item->conf, conf);
diff --git a/transport-helper.c b/transport-helper.c
index 49b7fb4..4be035e 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -684,6 +684,16 @@
 		return transport->vtable->fetch(transport, nr_heads, to_fetch);
 	}
 
+	/*
+	 * If we reach here, then the server, the client, and/or the transport
+	 * helper does not support protocol v2. --negotiate-only requires
+	 * protocol v2.
+	 */
+	if (data->transport_options.acked_commits) {
+		warning(_("--negotiate-only requires protocol v2"));
+		return -1;
+	}
+
 	if (!data->get_refs_list_called)
 		get_refs_list_using_list(transport, 0);
 
@@ -745,13 +755,13 @@
 			die(_("'option' without a matching 'ok/error' directive"));
 		if (state->new_report) {
 			if (!state->hint->report) {
-				state->hint->report = xcalloc(1, sizeof(struct ref_push_report));
+				CALLOC_ARRAY(state->hint->report, 1);
 				state->report = state->hint->report;
 			} else {
 				state->report = state->hint->report;
 				while (state->report->next)
 					state->report = state->report->next;
-				state->report->next = xcalloc(1, sizeof(struct ref_push_report));
+				CALLOC_ARRAY(state->report->next, 1);
 				state->report = state->report->next;
 			}
 			state->new_report = 0;
diff --git a/transport.c b/transport.c
index b13fab5..17e9629 100644
--- a/transport.c
+++ b/transport.c
@@ -108,11 +108,11 @@
 		if (!remotename || !starts_with(remotename, "refs/heads/"))
 			continue;
 
-		if (!pretend)
-			install_branch_config(BRANCH_CONFIG_VERBOSE,
-				localname + 11, transport->remote->name,
-				remotename);
-		else
+		if (!pretend) {
+			int flag = transport->verbose < 0 ? 0 : BRANCH_CONFIG_VERBOSE;
+			install_branch_config(flag, localname + 11,
+				transport->remote->name, remotename);
+		} else if (transport->verbose >= 0)
 			printf(_("Would set upstream of '%s' to '%s' of '%s'\n"),
 				localname + 11, remotename + 11,
 				transport->remote->name);
@@ -147,9 +147,11 @@
 	transport->hash_algo = data->header.hash_algo;
 
 	for (i = 0; i < data->header.references.nr; i++) {
-		struct ref_list_entry *e = data->header.references.list + i;
-		struct ref *ref = alloc_ref(e->name);
-		oidcpy(&ref->old_oid, &e->oid);
+		struct string_list_item *e = data->header.references.items + i;
+		const char *name = e->string;
+		struct ref *ref = alloc_ref(name);
+		struct object_id *oid = e->util;
+		oidcpy(&ref->old_oid, oid);
 		ref->next = result;
 		result = ref;
 	}
@@ -175,6 +177,7 @@
 	struct bundle_transport_data *data = transport->data;
 	if (data->fd > 0)
 		close(data->fd);
+	bundle_header_release(&data->header);
 	free(data);
 	return 0;
 }
@@ -236,6 +239,9 @@
 		list_objects_filter_die_if_populated(&opts->filter_options);
 		parse_list_objects_filter(&opts->filter_options, value);
 		return 0;
+	} else if (!strcmp(name, TRANS_OPT_REJECT_SHALLOW)) {
+		opts->reject_shallow = !!value;
+		return 0;
 	}
 	return 1;
 }
@@ -370,6 +376,7 @@
 	args.stateless_rpc = transport->stateless_rpc;
 	args.server_options = transport->server_options;
 	args.negotiation_tips = data->options.negotiation_tips;
+	args.reject_shallow_remote = transport->smart_options->reject_shallow;
 
 	if (!data->got_remote_heads) {
 		int i;
@@ -388,16 +395,29 @@
 	else if (data->version <= protocol_v1)
 		die_if_server_options(transport);
 
+	if (data->options.acked_commits) {
+		if (data->version < protocol_v2) {
+			warning(_("--negotiate-only requires protocol v2"));
+			ret = -1;
+		} else if (!server_supports_feature("fetch", "wait-for-done", 0)) {
+			warning(_("server does not support wait-for-done"));
+			ret = -1;
+		} else {
+			negotiate_using_fetch(data->options.negotiation_tips,
+					      transport->server_options,
+					      transport->stateless_rpc,
+					      data->fd,
+					      data->options.acked_commits);
+			ret = 0;
+		}
+		goto cleanup;
+	}
+
 	refs = fetch_pack(&args, data->fd,
 			  refs_tmp ? refs_tmp : transport->remote_refs,
 			  to_fetch, nr_heads, &data->shallow,
 			  &transport->pack_lockfiles, data->version);
 
-	close(data->fd[0]);
-	close(data->fd[1]);
-	if (finish_connect(data->conn))
-		ret = -1;
-	data->conn = NULL;
 	data->got_remote_heads = 0;
 	data->options.self_contained_and_connected =
 		args.self_contained_and_connected;
@@ -408,6 +428,14 @@
 	if (report_unmatched_refs(to_fetch, nr_heads))
 		ret = -1;
 
+cleanup:
+	close(data->fd[0]);
+	if (data->fd[1] >= 0)
+		close(data->fd[1]);
+	if (finish_connect(data->conn))
+		ret = -1;
+	data->conn = NULL;
+
 	free_refs(refs_tmp);
 	free_refs(refs);
 	return ret;
@@ -845,7 +873,8 @@
 		if (data->got_remote_heads && !transport->stateless_rpc)
 			packet_flush(data->fd[1]);
 		close(data->fd[0]);
-		close(data->fd[1]);
+		if (data->fd[1] >= 0)
+			close(data->fd[1]);
 		finish_connect(data->conn);
 	}
 
@@ -871,7 +900,7 @@
 		BUG("taking over transport requires non-NULL "
 		    "smart_options field.");
 
-	data = xcalloc(1, sizeof(*data));
+	CALLOC_ARRAY(data, 1);
 	data->options = *transport->smart_options;
 	data->conn = child;
 	data->fd[0] = data->conn->out;
@@ -1026,7 +1055,7 @@
 	struct transport *ret = xcalloc(1, sizeof(*ret));
 
 	ret->progress = isatty(2);
-	string_list_init(&ret->pack_lockfiles, 1);
+	string_list_init_dup(&ret->pack_lockfiles);
 
 	if (!remote)
 		BUG("No remote provided to transport_get()");
@@ -1055,6 +1084,7 @@
 		die(_("git-over-rsync is no longer supported"));
 	} else if (url_is_local_not_ssh(url) && is_file(url) && is_bundle(url, 1)) {
 		struct bundle_transport_data *data = xcalloc(1, sizeof(*data));
+		bundle_header_init(&data->header);
 		transport_check_allowed("file");
 		ret->data = data;
 		ret->vtable = &bundle_vtable;
@@ -1452,6 +1482,8 @@
 	int ret = 0;
 	if (transport->vtable->disconnect)
 		ret = transport->vtable->disconnect(transport);
+	if (transport->got_remote_refs)
+		free_refs((void *)transport->remote_refs);
 	free(transport);
 	return ret;
 }
diff --git a/transport.h b/transport.h
index 24e1579..1cbab11 100644
--- a/transport.h
+++ b/transport.h
@@ -14,6 +14,7 @@
 	unsigned check_self_contained_and_connected : 1;
 	unsigned self_contained_and_connected : 1;
 	unsigned update_shallow : 1;
+	unsigned reject_shallow : 1;
 	unsigned deepen_relative : 1;
 
 	/* see documentation of corresponding flag in fetch-pack.h */
@@ -46,6 +47,12 @@
 	 * transport_set_option().
 	 */
 	struct oid_array *negotiation_tips;
+
+	/*
+	 * If allocated, whenever transport_fetch_refs() is called, add known
+	 * common commits to this oidset instead of fetching any packfiles.
+	 */
+	struct oidset *acked_commits;
 };
 
 enum transport_family {
@@ -194,6 +201,9 @@
 /* Aggressively fetch annotated tags if possible */
 #define TRANS_OPT_FOLLOWTAGS "followtags"
 
+/* Reject shallow repo transport */
+#define TRANS_OPT_REJECT_SHALLOW "rejectshallow"
+
 /* Accept refs that may update .git/shallow without --depth */
 #define TRANS_OPT_UPDATE_SHALLOW "updateshallow"
 
diff --git a/tree-diff.c b/tree-diff.c
index 7cebbb3..1572615 100644
--- a/tree-diff.c
+++ b/tree-diff.c
@@ -161,7 +161,7 @@
 	memcpy(p->path + base->len, path, pathlen);
 	p->path[len] = 0;
 	p->mode = mode;
-	oidcpy(&p->oid, oid ? oid : &null_oid);
+	oidcpy(&p->oid, oid ? oid : null_oid());
 
 	return p;
 }
@@ -243,7 +243,7 @@
 				mode_i = tp[i].entry.mode;
 			}
 			else {
-				oid_i = &null_oid;
+				oid_i = null_oid();
 				mode_i = 0;
 			}
 
diff --git a/tree-walk.c b/tree-walk.c
index 2d6226d..3a94959 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -49,7 +49,7 @@
 	desc->entry.path = path;
 	desc->entry.mode = canon_mode(mode);
 	desc->entry.pathlen = len - 1;
-	hashcpy(desc->entry.oid.hash, (const unsigned char *)path + len);
+	oidread(&desc->entry.oid, (const unsigned char *)path + len);
 
 	return 0;
 }
diff --git a/tree.c b/tree.c
index a524798..410e3b4 100644
--- a/tree.c
+++ b/tree.c
@@ -11,58 +11,10 @@
 
 const char *tree_type = "tree";
 
-static int read_one_entry_opt(struct index_state *istate,
-			      const struct object_id *oid,
-			      const char *base, int baselen,
-			      const char *pathname,
-			      unsigned mode, int stage, int opt)
-{
-	int len;
-	struct cache_entry *ce;
-
-	if (S_ISDIR(mode))
-		return READ_TREE_RECURSIVE;
-
-	len = strlen(pathname);
-	ce = make_empty_cache_entry(istate, baselen + len);
-
-	ce->ce_mode = create_ce_mode(mode);
-	ce->ce_flags = create_ce_flags(stage);
-	ce->ce_namelen = baselen + len;
-	memcpy(ce->name, base, baselen);
-	memcpy(ce->name + baselen, pathname, len+1);
-	oidcpy(&ce->oid, oid);
-	return add_index_entry(istate, ce, opt);
-}
-
-static int read_one_entry(const struct object_id *oid, struct strbuf *base,
-			  const char *pathname, unsigned mode, int stage,
-			  void *context)
-{
-	struct index_state *istate = context;
-	return read_one_entry_opt(istate, oid, base->buf, base->len, pathname,
-				  mode, stage,
-				  ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
-}
-
-/*
- * This is used when the caller knows there is no existing entries at
- * the stage that will conflict with the entry being added.
- */
-static int read_one_entry_quick(const struct object_id *oid, struct strbuf *base,
-				const char *pathname, unsigned mode, int stage,
-				void *context)
-{
-	struct index_state *istate = context;
-	return read_one_entry_opt(istate, oid, base->buf, base->len, pathname,
-				  mode, stage,
-				  ADD_CACHE_JUST_APPEND);
-}
-
-static int read_tree_1(struct repository *r,
-		       struct tree *tree, struct strbuf *base,
-		       int stage, const struct pathspec *pathspec,
-		       read_tree_fn_t fn, void *context)
+int read_tree_at(struct repository *r,
+		 struct tree *tree, struct strbuf *base,
+		 const struct pathspec *pathspec,
+		 read_tree_fn_t fn, void *context)
 {
 	struct tree_desc desc;
 	struct name_entry entry;
@@ -86,7 +38,7 @@
 		}
 
 		switch (fn(&entry.oid, base,
-			   entry.path, entry.mode, stage, context)) {
+			   entry.path, entry.mode, context)) {
 		case 0:
 			continue;
 		case READ_TREE_RECURSIVE:
@@ -119,9 +71,9 @@
 		len = tree_entry_len(&entry);
 		strbuf_add(base, entry.path, len);
 		strbuf_addch(base, '/');
-		retval = read_tree_1(r, lookup_tree(r, &oid),
-				     base, stage, pathspec,
-				     fn, context);
+		retval = read_tree_at(r, lookup_tree(r, &oid),
+				      base, pathspec,
+				      fn, context);
 		strbuf_setlen(base, oldlen);
 		if (retval)
 			return -1;
@@ -129,17 +81,13 @@
 	return 0;
 }
 
-int read_tree_recursive(struct repository *r,
-			struct tree *tree,
-			const char *base, int baselen,
-			int stage, const struct pathspec *pathspec,
-			read_tree_fn_t fn, void *context)
+int read_tree(struct repository *r,
+	      struct tree *tree,
+	      const struct pathspec *pathspec,
+	      read_tree_fn_t fn, void *context)
 {
 	struct strbuf sb = STRBUF_INIT;
-	int ret;
-
-	strbuf_add(&sb, base, baselen);
-	ret = read_tree_1(r, tree, &sb, stage, pathspec, fn, context);
+	int ret = read_tree_at(r, tree, &sb, pathspec, fn, context);
 	strbuf_release(&sb);
 	return ret;
 }
@@ -154,47 +102,6 @@
 				  ce2->name, ce2->ce_namelen, ce_stage(ce2));
 }
 
-int read_tree(struct repository *r, struct tree *tree, int stage,
-	      struct pathspec *match, struct index_state *istate)
-{
-	read_tree_fn_t fn = NULL;
-	int i, err;
-
-	/*
-	 * Currently the only existing callers of this function all
-	 * call it with stage=1 and after making sure there is nothing
-	 * at that stage; we could always use read_one_entry_quick().
-	 *
-	 * But when we decide to straighten out git-read-tree not to
-	 * use unpack_trees() in some cases, this will probably start
-	 * to matter.
-	 */
-
-	/*
-	 * See if we have cache entry at the stage.  If so,
-	 * do it the original slow way, otherwise, append and then
-	 * sort at the end.
-	 */
-	for (i = 0; !fn && i < istate->cache_nr; i++) {
-		const struct cache_entry *ce = istate->cache[i];
-		if (ce_stage(ce) == stage)
-			fn = read_one_entry;
-	}
-
-	if (!fn)
-		fn = read_one_entry_quick;
-	err = read_tree_recursive(r, tree, "", 0, stage, match, fn, istate);
-	if (fn == read_one_entry || err)
-		return err;
-
-	/*
-	 * Sort the cache entry -- we need to nuke the cache tree, though.
-	 */
-	cache_tree_free(&istate->cache_tree);
-	QSORT(istate->cache, istate->cache_nr, cmp_cache_name_compare);
-	return 0;
-}
-
 struct tree *lookup_tree(struct repository *r, const struct object_id *oid)
 {
 	struct object *obj = lookup_object(r, oid);
diff --git a/tree.h b/tree.h
index 3eb0484..6efff00 100644
--- a/tree.h
+++ b/tree.h
@@ -31,16 +31,16 @@
 int cmp_cache_name_compare(const void *a_, const void *b_);
 
 #define READ_TREE_RECURSIVE 1
-typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, int, void *);
+typedef int (*read_tree_fn_t)(const struct object_id *, struct strbuf *, const char *, unsigned int, void *);
 
-int read_tree_recursive(struct repository *r,
-			struct tree *tree,
-			const char *base, int baselen,
-			int stage, const struct pathspec *pathspec,
-			read_tree_fn_t fn, void *context);
+int read_tree_at(struct repository *r,
+		 struct tree *tree, struct strbuf *base,
+		 const struct pathspec *pathspec,
+		 read_tree_fn_t fn, void *context);
 
-int read_tree(struct repository *r, struct tree *tree,
-	      int stage, struct pathspec *pathspec,
-	      struct index_state *istate);
+int read_tree(struct repository *r,
+	      struct tree *tree,
+	      const struct pathspec *pathspec,
+	      read_tree_fn_t fn, void *context);
 
 #endif /* TREE_H */
diff --git a/unix-socket.c b/unix-socket.c
index 19ed48b..e0be1ba 100644
--- a/unix-socket.c
+++ b/unix-socket.c
@@ -1,13 +1,7 @@
 #include "cache.h"
 #include "unix-socket.h"
 
-static int unix_stream_socket(void)
-{
-	int fd = socket(AF_UNIX, SOCK_STREAM, 0);
-	if (fd < 0)
-		die_errno("unable to create socket");
-	return fd;
-}
+#define DEFAULT_UNIX_STREAM_LISTEN_BACKLOG (5)
 
 static int chdir_len(const char *orig, int len)
 {
@@ -36,16 +30,23 @@
 }
 
 static int unix_sockaddr_init(struct sockaddr_un *sa, const char *path,
-			      struct unix_sockaddr_context *ctx)
+			      struct unix_sockaddr_context *ctx,
+			      int disallow_chdir)
 {
 	int size = strlen(path) + 1;
 
 	ctx->orig_dir = NULL;
 	if (size > sizeof(sa->sun_path)) {
-		const char *slash = find_last_dir_sep(path);
+		const char *slash;
 		const char *dir;
 		struct strbuf cwd = STRBUF_INIT;
 
+		if (disallow_chdir) {
+			errno = ENAMETOOLONG;
+			return -1;
+		}
+
+		slash = find_last_dir_sep(path);
 		if (!slash) {
 			errno = ENAMETOOLONG;
 			return -1;
@@ -71,15 +72,18 @@
 	return 0;
 }
 
-int unix_stream_connect(const char *path)
+int unix_stream_connect(const char *path, int disallow_chdir)
 {
-	int fd, saved_errno;
+	int fd = -1, saved_errno;
 	struct sockaddr_un sa;
 	struct unix_sockaddr_context ctx;
 
-	if (unix_sockaddr_init(&sa, path, &ctx) < 0)
+	if (unix_sockaddr_init(&sa, path, &ctx, disallow_chdir) < 0)
 		return -1;
-	fd = unix_stream_socket();
+	fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (fd < 0)
+		goto fail;
+
 	if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0)
 		goto fail;
 	unix_sockaddr_cleanup(&ctx);
@@ -87,28 +91,36 @@
 
 fail:
 	saved_errno = errno;
+	if (fd != -1)
+		close(fd);
 	unix_sockaddr_cleanup(&ctx);
-	close(fd);
 	errno = saved_errno;
 	return -1;
 }
 
-int unix_stream_listen(const char *path)
+int unix_stream_listen(const char *path,
+		       const struct unix_stream_listen_opts *opts)
 {
-	int fd, saved_errno;
+	int fd = -1, saved_errno;
+	int backlog;
 	struct sockaddr_un sa;
 	struct unix_sockaddr_context ctx;
 
 	unlink(path);
 
-	if (unix_sockaddr_init(&sa, path, &ctx) < 0)
+	if (unix_sockaddr_init(&sa, path, &ctx, opts->disallow_chdir) < 0)
 		return -1;
-	fd = unix_stream_socket();
+	fd = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (fd < 0)
+		goto fail;
 
 	if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0)
 		goto fail;
 
-	if (listen(fd, 5) < 0)
+	backlog = opts->listen_backlog_size;
+	if (backlog <= 0)
+		backlog = DEFAULT_UNIX_STREAM_LISTEN_BACKLOG;
+	if (listen(fd, backlog) < 0)
 		goto fail;
 
 	unix_sockaddr_cleanup(&ctx);
@@ -116,8 +128,9 @@
 
 fail:
 	saved_errno = errno;
+	if (fd != -1)
+		close(fd);
 	unix_sockaddr_cleanup(&ctx);
-	close(fd);
 	errno = saved_errno;
 	return -1;
 }
diff --git a/unix-socket.h b/unix-socket.h
index e271aee..8542cdd 100644
--- a/unix-socket.h
+++ b/unix-socket.h
@@ -1,7 +1,15 @@
 #ifndef UNIX_SOCKET_H
 #define UNIX_SOCKET_H
 
-int unix_stream_connect(const char *path);
-int unix_stream_listen(const char *path);
+struct unix_stream_listen_opts {
+	int listen_backlog_size;
+	unsigned int disallow_chdir:1;
+};
+
+#define UNIX_STREAM_LISTEN_OPTS_INIT { 0 }
+
+int unix_stream_connect(const char *path, int disallow_chdir);
+int unix_stream_listen(const char *path,
+		       const struct unix_stream_listen_opts *opts);
 
 #endif /* UNIX_SOCKET_H */
diff --git a/unix-stream-server.c b/unix-stream-server.c
new file mode 100644
index 0000000..efa2a20
--- /dev/null
+++ b/unix-stream-server.c
@@ -0,0 +1,125 @@
+#include "cache.h"
+#include "lockfile.h"
+#include "unix-socket.h"
+#include "unix-stream-server.h"
+
+#define DEFAULT_LOCK_TIMEOUT (100)
+
+/*
+ * Try to connect to a unix domain socket at `path` (if it exists) and
+ * see if there is a server listening.
+ *
+ * We don't know if the socket exists, whether a server died and
+ * failed to cleanup, or whether we have a live server listening, so
+ * we "poke" it.
+ *
+ * We immediately hangup without sending/receiving any data because we
+ * don't know anything about the protocol spoken and don't want to
+ * block while writing/reading data.  It is sufficient to just know
+ * that someone is listening.
+ */
+static int is_another_server_alive(const char *path,
+				   const struct unix_stream_listen_opts *opts)
+{
+	int fd = unix_stream_connect(path, opts->disallow_chdir);
+	if (fd >= 0) {
+		close(fd);
+		return 1;
+	}
+
+	return 0;
+}
+
+int unix_ss_create(const char *path,
+		   const struct unix_stream_listen_opts *opts,
+		   long timeout_ms,
+		   struct unix_ss_socket **new_server_socket)
+{
+	struct lock_file lock = LOCK_INIT;
+	int fd_socket;
+	struct unix_ss_socket *server_socket;
+
+	*new_server_socket = NULL;
+
+	if (timeout_ms < 0)
+		timeout_ms = DEFAULT_LOCK_TIMEOUT;
+
+	/*
+	 * Create a lock at "<path>.lock" if we can.
+	 */
+	if (hold_lock_file_for_update_timeout(&lock, path, 0, timeout_ms) < 0)
+		return -1;
+
+	/*
+	 * If another server is listening on "<path>" give up.  We do not
+	 * want to create a socket and steal future connections from them.
+	 */
+	if (is_another_server_alive(path, opts)) {
+		rollback_lock_file(&lock);
+		errno = EADDRINUSE;
+		return -2;
+	}
+
+	/*
+	 * Create and bind to a Unix domain socket at "<path>".
+	 */
+	fd_socket = unix_stream_listen(path, opts);
+	if (fd_socket < 0) {
+		int saved_errno = errno;
+		rollback_lock_file(&lock);
+		errno = saved_errno;
+		return -1;
+	}
+
+	server_socket = xcalloc(1, sizeof(*server_socket));
+	server_socket->path_socket = strdup(path);
+	server_socket->fd_socket = fd_socket;
+	lstat(path, &server_socket->st_socket);
+
+	*new_server_socket = server_socket;
+
+	/*
+	 * Always rollback (just delete) "<path>.lock" because we already created
+	 * "<path>" as a socket and do not want to commit_lock to do the atomic
+	 * rename trick.
+	 */
+	rollback_lock_file(&lock);
+
+	return 0;
+}
+
+void unix_ss_free(struct unix_ss_socket *server_socket)
+{
+	if (!server_socket)
+		return;
+
+	if (server_socket->fd_socket >= 0) {
+		if (!unix_ss_was_stolen(server_socket))
+			unlink(server_socket->path_socket);
+		close(server_socket->fd_socket);
+	}
+
+	free(server_socket->path_socket);
+	free(server_socket);
+}
+
+int unix_ss_was_stolen(struct unix_ss_socket *server_socket)
+{
+	struct stat st_now;
+
+	if (!server_socket)
+		return 0;
+
+	if (lstat(server_socket->path_socket, &st_now) == -1)
+		return 1;
+
+	if (st_now.st_ino != server_socket->st_socket.st_ino)
+		return 1;
+	if (st_now.st_dev != server_socket->st_socket.st_dev)
+		return 1;
+
+	if (!S_ISSOCK(st_now.st_mode))
+		return 1;
+
+	return 0;
+}
diff --git a/unix-stream-server.h b/unix-stream-server.h
new file mode 100644
index 0000000..ae2712b
--- /dev/null
+++ b/unix-stream-server.h
@@ -0,0 +1,33 @@
+#ifndef UNIX_STREAM_SERVER_H
+#define UNIX_STREAM_SERVER_H
+
+#include "unix-socket.h"
+
+struct unix_ss_socket {
+	char *path_socket;
+	struct stat st_socket;
+	int fd_socket;
+};
+
+/*
+ * Create a Unix Domain Socket at the given path under the protection
+ * of a '.lock' lockfile.
+ *
+ * Returns 0 on success, -1 on error, -2 if socket is in use.
+ */
+int unix_ss_create(const char *path,
+		   const struct unix_stream_listen_opts *opts,
+		   long timeout_ms,
+		   struct unix_ss_socket **server_socket);
+
+/*
+ * Close and delete the socket.
+ */
+void unix_ss_free(struct unix_ss_socket *server_socket);
+
+/*
+ * Return 1 if the inode of the pathname to our socket changes.
+ */
+int unix_ss_was_stolen(struct unix_ss_socket *server_socket);
+
+#endif /* UNIX_STREAM_SERVER_H */
diff --git a/unpack-trees.c b/unpack-trees.c
index f5f668f..0a5135a 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -16,6 +16,8 @@
 #include "fsmonitor.h"
 #include "object-store.h"
 #include "promisor-remote.h"
+#include "entry.h"
+#include "parallel-checkout.h"
 
 /*
  * Error messages expected by scripts out of plumbing commands such as
@@ -397,7 +399,7 @@
 	int errs = 0;
 	struct progress *progress;
 	struct checkout state = CHECKOUT_INIT;
-	int i;
+	int i, pc_workers, pc_threshold;
 
 	trace_performance_enter();
 	state.force = 1;
@@ -417,6 +419,9 @@
 
 	progress = get_progress(o, index);
 
+	/* Start with clean cache to avoid using any possibly outdated info. */
+	invalidate_lstat_cache();
+
 	git_attr_set_direction(GIT_ATTR_CHECKOUT);
 
 	if (should_update_submodules())
@@ -437,7 +442,6 @@
 	if (should_update_submodules())
 		load_gitmodules_file(index, &state);
 
-	enable_delayed_checkout(&state);
 	if (has_promisor_remote()) {
 		/*
 		 * Prefetch the objects that are to be checked out in the loop
@@ -460,18 +464,31 @@
 					   to_fetch.oid, to_fetch.nr);
 		oid_array_clear(&to_fetch);
 	}
+
+	get_parallel_checkout_configs(&pc_workers, &pc_threshold);
+
+	enable_delayed_checkout(&state);
+	if (pc_workers > 1)
+		init_parallel_checkout();
 	for (i = 0; i < index->cache_nr; i++) {
 		struct cache_entry *ce = index->cache[i];
 
 		if (ce->ce_flags & CE_UPDATE) {
+			size_t last_pc_queue_size = pc_queue_size();
+
 			if (ce->ce_flags & CE_WT_REMOVE)
 				BUG("both update and delete flags are set on %s",
 				    ce->name);
-			display_progress(progress, ++cnt);
 			ce->ce_flags &= ~CE_UPDATE;
 			errs |= checkout_entry(ce, &state, NULL, NULL);
+
+			if (last_pc_queue_size == pc_queue_size())
+				display_progress(progress, ++cnt);
 		}
 	}
+	if (pc_workers > 1)
+		errs |= run_parallel_checkout(&state, pc_workers, pc_threshold,
+					      progress, &cnt);
 	stop_progress(&progress);
 	errs |= finish_delayed_checkout(&state, NULL);
 	git_attr_set_direction(GIT_ATTR_CHECKIN);
@@ -583,6 +600,13 @@
 {
 	ce->ce_flags |= CE_UNPACKED;
 
+	/*
+	 * If this is a sparse directory, don't advance cache_bottom.
+	 * That will be advanced later using the cache-tree data.
+	 */
+	if (S_ISSPARSEDIR(ce->ce_mode))
+		return;
+
 	if (o->cache_bottom < o->src_index->cache_nr &&
 	    o->src_index->cache[o->cache_bottom] == ce) {
 		int bottom = o->cache_bottom;
@@ -746,9 +770,13 @@
 	strbuf_make_traverse_path(&name, info, names->path, names->pathlen);
 	strbuf_addch(&name, '/');
 	pos = index_name_pos(o->src_index, name.buf, name.len);
-	if (pos >= 0)
-		BUG("This is a directory and should not exist in index");
-	pos = -pos - 1;
+	if (pos >= 0) {
+		if (!o->src_index->sparse_index ||
+		    !(o->src_index->cache[pos]->ce_flags & CE_SKIP_WORKTREE))
+			BUG("This is a directory and should not exist in index");
+	} else {
+		pos = -pos - 1;
+	}
 	if (pos >= o->src_index->cache_nr ||
 	    !starts_with(o->src_index->cache[pos]->name, name.buf) ||
 	    (pos > 0 && starts_with(o->src_index->cache[pos-1]->name, name.buf)))
@@ -776,7 +804,7 @@
 		BUG("We need cache-tree to do this optimization");
 
 	/*
-	 * Do what unpack_callback() and unpack_nondirectories() normally
+	 * Do what unpack_callback() and unpack_single_entry() normally
 	 * do. But we walk all paths in an iterative loop instead.
 	 *
 	 * D/F conflicts and higher stage entries are not a concern
@@ -955,6 +983,7 @@
 	int pathlen, ce_len;
 	const char *ce_name;
 	int cmp;
+	unsigned ce_mode;
 
 	/*
 	 * If we have not precomputed the traverse path, it is quicker
@@ -977,7 +1006,8 @@
 	ce_len -= pathlen;
 	ce_name = ce->name + pathlen;
 
-	return df_name_compare(ce_name, ce_len, S_IFREG, name, namelen, mode);
+	ce_mode = S_ISSPARSEDIR(ce->ce_mode) ? S_IFDIR : S_IFREG;
+	return df_name_compare(ce_name, ce_len, ce_mode, name, namelen, mode);
 }
 
 static int compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
@@ -987,6 +1017,16 @@
 		return cmp;
 
 	/*
+	 * At this point, we know that we have a prefix match. If ce
+	 * is a sparse directory, then allow an exact match. This only
+	 * works when the input name is a directory, since ce->name
+	 * ends in a directory separator.
+	 */
+	if (S_ISSPARSEDIR(ce->ce_mode) &&
+	    ce->ce_namelen == traverse_path_len(info, tree_entry_len(n)) + 1)
+		return 0;
+
+	/*
 	 * Even if the beginning compared identically, the ce should
 	 * compare as bigger than a directory leading up to it!
 	 */
@@ -1012,13 +1052,15 @@
 	const struct name_entry *n,
 	int stage,
 	struct index_state *istate,
-	int is_transient)
+	int is_transient,
+	int is_sparse_directory)
 {
 	size_t len = traverse_path_len(info, tree_entry_len(n));
+	size_t alloc_len = is_sparse_directory ? len + 1 : len;
 	struct cache_entry *ce =
 		is_transient ?
-		make_empty_transient_cache_entry(len) :
-		make_empty_cache_entry(istate, len);
+		make_empty_transient_cache_entry(alloc_len, NULL) :
+		make_empty_cache_entry(istate, alloc_len);
 
 	ce->ce_mode = create_ce_mode(n->mode);
 	ce->ce_flags = create_ce_flags(stage);
@@ -1027,6 +1069,13 @@
 	/* len+1 because the cache_entry allocates space for NUL */
 	make_traverse_path(ce->name, len + 1, info, n->path, n->pathlen);
 
+	if (is_sparse_directory) {
+		ce->name[len] = '/';
+		ce->name[len + 1] = '\0';
+		ce->ce_namelen++;
+		ce->ce_flags |= CE_SKIP_WORKTREE;
+	}
+
 	return ce;
 }
 
@@ -1035,21 +1084,28 @@
  * without actually calling it. If you change the logic here you may need to
  * check and change there as well.
  */
-static int unpack_nondirectories(int n, unsigned long mask,
-				 unsigned long dirmask,
-				 struct cache_entry **src,
-				 const struct name_entry *names,
-				 const struct traverse_info *info)
+static int unpack_single_entry(int n, unsigned long mask,
+			       unsigned long dirmask,
+			       struct cache_entry **src,
+			       const struct name_entry *names,
+			       const struct traverse_info *info)
 {
 	int i;
 	struct unpack_trees_options *o = info->data;
 	unsigned long conflicts = info->df_conflicts | dirmask;
 
-	/* Do we have *only* directories? Nothing to do */
 	if (mask == dirmask && !src[0])
 		return 0;
 
 	/*
+	 * When we have a sparse directory entry for src[0],
+	 * then this isn't necessarily a directory-file conflict.
+	 */
+	if (mask == dirmask && src[0] &&
+	    S_ISSPARSEDIR(src[0]->ce_mode))
+		conflicts = 0;
+
+	/*
 	 * Ok, we've filled in up to any potential index entry in src[0],
 	 * now do the rest.
 	 */
@@ -1078,7 +1134,9 @@
 		 * not stored in the index.  otherwise construct the
 		 * cache entry from the index aware logic.
 		 */
-		src[i + o->merge] = create_ce_entry(info, names + i, stage, &o->result, o->merge);
+		src[i + o->merge] = create_ce_entry(info, names + i, stage,
+						    &o->result, o->merge,
+						    bit & dirmask);
 	}
 
 	if (o->merge) {
@@ -1182,16 +1240,71 @@
 	return -1;
 }
 
+/*
+ * Given a sparse directory entry 'ce', compare ce->name to
+ * info->name + '/' + p->path + '/' if info->name is non-empty.
+ * Compare ce->name to p->path + '/' otherwise. Note that
+ * ce->name must end in a trailing '/' because it is a sparse
+ * directory entry.
+ */
+static int sparse_dir_matches_path(const struct cache_entry *ce,
+				   struct traverse_info *info,
+				   const struct name_entry *p)
+{
+	assert(S_ISSPARSEDIR(ce->ce_mode));
+	assert(ce->name[ce->ce_namelen - 1] == '/');
+
+	if (info->namelen)
+		return ce->ce_namelen == info->namelen + p->pathlen + 2 &&
+		       ce->name[info->namelen] == '/' &&
+		       !strncmp(ce->name, info->name, info->namelen) &&
+		       !strncmp(ce->name + info->namelen + 1, p->path, p->pathlen);
+	return ce->ce_namelen == p->pathlen + 1 &&
+	       !strncmp(ce->name, p->path, p->pathlen);
+}
+
 static struct cache_entry *find_cache_entry(struct traverse_info *info,
 					    const struct name_entry *p)
 {
+	struct cache_entry *ce;
 	int pos = find_cache_pos(info, p->path, p->pathlen);
 	struct unpack_trees_options *o = info->data;
 
 	if (0 <= pos)
 		return o->src_index->cache[pos];
-	else
+
+	/*
+	 * Check for a sparse-directory entry named "path/".
+	 * Due to the input p->path not having a trailing
+	 * slash, the negative 'pos' value overshoots the
+	 * expected position, hence "-2" instead of "-1".
+	 */
+	pos = -pos - 2;
+
+	if (pos < 0 || pos >= o->src_index->cache_nr)
 		return NULL;
+
+	/*
+	 * Due to lexicographic sorting and sparse directory
+	 * entries ending with a trailing slash, our path as a
+	 * sparse directory (e.g "subdir/") and	our path as a
+	 * file (e.g. "subdir") might be separated by other
+	 * paths (e.g. "subdir-").
+	 */
+	while (pos >= 0) {
+		ce = o->src_index->cache[pos];
+
+		if (strncmp(ce->name, p->path, p->pathlen))
+			return NULL;
+
+		if (S_ISSPARSEDIR(ce->ce_mode) &&
+		    sparse_dir_matches_path(ce, info, p))
+			return ce;
+
+		pos--;
+	}
+
+	return NULL;
 }
 
 static void debug_path(struct traverse_info *info)
@@ -1227,6 +1340,21 @@
 }
 
 /*
+ * Returns true if and only if the given cache_entry is a
+ * sparse-directory entry that matches the given name_entry
+ * from the tree walk at the given traverse_info.
+ */
+static int is_sparse_directory_entry(struct cache_entry *ce,
+				     struct name_entry *name,
+				     struct traverse_info *info)
+{
+	if (!ce || !name || !S_ISSPARSEDIR(ce->ce_mode))
+		return 0;
+
+	return sparse_dir_matches_path(ce, info, name);
+}
+
+/*
  * Note that traverse_by_cache_tree() duplicates some logic in this function
  * without actually calling it. If you change the logic here you may need to
  * check and change there as well.
@@ -1282,7 +1410,7 @@
 		}
 	}
 
-	if (unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
+	if (unpack_single_entry(n, mask, dirmask, src, names, info) < 0)
 		return -1;
 
 	if (o->merge && src[0]) {
@@ -1312,9 +1440,12 @@
 			}
 		}
 
-		if (traverse_trees_recursive(n, dirmask, mask & ~dirmask,
-					     names, info) < 0)
+		if (!is_sparse_directory_entry(src[0], names, info) &&
+		    traverse_trees_recursive(n, dirmask, mask & ~dirmask,
+						    names, info) < 0) {
 			return -1;
+		}
+
 		return mask;
 	}
 
@@ -1567,6 +1698,7 @@
  */
 int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
 {
+	struct repository *repo = the_repository;
 	int i, ret;
 	static struct cache_entry *dfc;
 	struct pattern_list pl;
@@ -1578,6 +1710,12 @@
 	trace_performance_enter();
 	trace2_region_enter("unpack_trees", "unpack_trees", the_repository);
 
+	prepare_repo_settings(repo);
+	if (repo->settings.command_requires_full_index) {
+		ensure_full_index(o->src_index);
+		ensure_full_index(o->dst_index);
+	}
+
 	if (!core_apply_sparse_checkout || !o->update)
 		o->skip_sparse_checkout = 1;
 	if (!o->skip_sparse_checkout && !o->pl) {
@@ -1609,8 +1747,8 @@
 	o->merge_size = len;
 	mark_all_ce_unused(o->src_index);
 
-	if (o->src_index->fsmonitor_last_update)
-		o->result.fsmonitor_last_update = o->src_index->fsmonitor_last_update;
+	o->result.fsmonitor_last_update =
+		xstrdup_or_null(o->src_index->fsmonitor_last_update);
 
 	/*
 	 * Sparse checkout loop #1: set NEW_SKIP_WORKTREE on existing entries
@@ -2094,7 +2232,7 @@
 	if (o->index_only || o->reset || !o->update)
 		return 0;
 
-	len = check_leading_path(ce->name, ce_namelen(ce));
+	len = check_leading_path(ce->name, ce_namelen(ce), 0);
 	if (!len)
 		return 0;
 	else if (len > 0) {
@@ -2560,3 +2698,25 @@
 	}
 	return merged_entry(a, old, o);
 }
+
+/*
+ * Merge worktree and untracked entries in a stash entry.
+ *
+ * Ignore all index entries. Collapse remaining trees but make sure that they
+ * don't have any conflicting files.
+ */
+int stash_worktree_untracked_merge(const struct cache_entry * const *src,
+				   struct unpack_trees_options *o)
+{
+	const struct cache_entry *worktree = src[1];
+	const struct cache_entry *untracked = src[2];
+
+	if (o->merge_size != 2)
+		BUG("invalid merge_size: %d", o->merge_size);
+
+	if (worktree && untracked)
+		return error(_("worktree and untracked commit have duplicate entries: %s"),
+			     super_prefixed(worktree->name));
+
+	return merged_entry(worktree ? worktree : untracked, NULL, o);
+}
diff --git a/unpack-trees.h b/unpack-trees.h
index 2e87875..2d88b19 100644
--- a/unpack-trees.h
+++ b/unpack-trees.h
@@ -114,5 +114,7 @@
 	       struct unpack_trees_options *o);
 int oneway_merge(const struct cache_entry * const *src,
 		 struct unpack_trees_options *o);
+int stash_worktree_untracked_merge(const struct cache_entry * const *src,
+				   struct unpack_trees_options *o);
 
 #endif
diff --git a/upload-pack.c b/upload-pack.c
index e19583a..297b76f 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -103,6 +103,7 @@
 	unsigned use_ofs_delta : 1;
 	unsigned no_progress : 1;
 	unsigned use_include_tag : 1;
+	unsigned wait_for_done : 1;
 	unsigned allow_filter : 1;
 	unsigned allow_filter_fallback : 1;
 	unsigned long tree_filter_max_depth;
@@ -1153,7 +1154,7 @@
 static int mark_our_ref(const char *refname, const char *refname_full,
 			const struct object_id *oid)
 {
-	struct object *o = lookup_unknown_object(oid);
+	struct object *o = lookup_unknown_object(the_repository, oid);
 
 	if (ref_is_hidden(refname, refname_full)) {
 		o->flags |= HIDDEN_REF;
@@ -1496,6 +1497,10 @@
 			data->done = 1;
 			continue;
 		}
+		if (!strcmp(arg, "wait-for-done")) {
+			data->wait_for_done = 1;
+			continue;
+		}
 
 		/* Shallow related arguments */
 		if (process_shallow(arg, &data->shallows))
@@ -1578,7 +1583,7 @@
 				    oid_to_hex(&acks->oid[i]));
 	}
 
-	if (ok_to_give_up(data)) {
+	if (!data->wait_for_done && ok_to_give_up(data)) {
 		/* Send Ready */
 		packet_writer_write(&data->writer, "ready\n");
 		return 1;
@@ -1668,10 +1673,13 @@
 		case FETCH_PROCESS_ARGS:
 			process_args(request, &data);
 
-			if (!data.want_obj.nr) {
+			if (!data.want_obj.nr && !data.wait_for_done) {
 				/*
-				 * Request didn't contain any 'want' lines,
-				 * guess they didn't want anything.
+				 * Request didn't contain any 'want' lines (and
+				 * the request does not contain
+				 * "wait-for-done", in which it is reasonable
+				 * to just send 'have's without 'want's); guess
+				 * they didn't want anything.
 				 */
 				state = FETCH_DONE;
 			} else if (data.haves.nr) {
@@ -1723,7 +1731,7 @@
 		int allow_sideband_all_value;
 		char *str = NULL;
 
-		strbuf_addstr(value, "shallow");
+		strbuf_addstr(value, "shallow wait-for-done");
 
 		if (!repo_config_get_bool(the_repository,
 					 "uploadpack.allowfilter",
diff --git a/usage.c b/usage.c
index 1b206de..c7d233b 100644
--- a/usage.c
+++ b/usage.c
@@ -55,12 +55,13 @@
 	exit(129);
 }
 
+/*
+ * We call trace2_cmd_error_va() in the below functions first and
+ * expect it to va_copy 'params' before using it (because an 'ap' can
+ * only be walked once).
+ */
 static NORETURN void die_builtin(const char *err, va_list params)
 {
-	/*
-	 * We call this trace2 function first and expect it to va_copy 'params'
-	 * before using it (because an 'ap' can only be walked once).
-	 */
 	trace2_cmd_error_va(err, params);
 
 	vreportf("fatal: ", err, params);
@@ -70,10 +71,6 @@
 
 static void error_builtin(const char *err, va_list params)
 {
-	/*
-	 * We call this trace2 function first and expect it to va_copy 'params'
-	 * before using it (because an 'ap' can only be walked once).
-	 */
 	trace2_cmd_error_va(err, params);
 
 	vreportf("error: ", err, params);
@@ -81,10 +78,6 @@
 
 static void warn_builtin(const char *warn, va_list params)
 {
-	/*
-	 * We call this trace2 function first and expect it to va_copy 'params'
-	 * before using it (because an 'ap' can only be walked once).
-	 */
 	trace2_cmd_error_va(warn, params);
 
 	vreportf("warning: ", warn, params);
diff --git a/userdiff.c b/userdiff.c
index 3f81a22..d9b2ba7 100644
--- a/userdiff.c
+++ b/userdiff.c
@@ -44,6 +44,46 @@
 	 /* -- */
 	 /* Characters not in the default $IFS value */
 	 "[^ \t]+"),
+PATTERNS("bibtex",
+	 "(@[a-zA-Z]{1,}[ \t]*\\{{0,1}[ \t]*[^ \t\"@',\\#}{~%]*).*$",
+	 /* -- */
+	 "[={}\"]|[^={}\" \t]+"),
+PATTERNS("cpp",
+	 /* Jump targets or access declarations */
+	 "!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:[[:space:]]*($|/[/*])\n"
+	 /* functions/methods, variables, and compounds at top level */
+	 "^((::[[:space:]]*)?[A-Za-z_].*)$",
+	 /* -- */
+	 "[a-zA-Z_][a-zA-Z0-9_]*"
+	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lLuU]*"
+	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->\\*?|\\.\\*"),
+PATTERNS("csharp",
+	 /* Keywords */
+	 "!^[ \t]*(do|while|for|if|else|instanceof|new|return|switch|case|throw|catch|using)\n"
+	 /* Methods and constructors */
+	 "^[ \t]*(((static|public|internal|private|protected|new|virtual|sealed|override|unsafe|async)[ \t]+)*[][<>@.~_[:alnum:]]+[ \t]+[<>@._[:alnum:]]+[ \t]*\\(.*\\))[ \t]*$\n"
+	 /* Properties */
+	 "^[ \t]*(((static|public|internal|private|protected|new|virtual|sealed|override|unsafe)[ \t]+)*[][<>@.~_[:alnum:]]+[ \t]+[@._[:alnum:]]+)[ \t]*$\n"
+	 /* Type definitions */
+	 "^[ \t]*(((static|public|internal|private|protected|new|unsafe|sealed|abstract|partial)[ \t]+)*(class|enum|interface|struct|record)[ \t]+.*)$\n"
+	 /* Namespace */
+	 "^[ \t]*(namespace[ \t]+.*)$",
+	 /* -- */
+	 "[a-zA-Z_][a-zA-Z0-9_]*"
+	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
+	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
+IPATTERN("css",
+	 "![:;][[:space:]]*$\n"
+	 "^[:[@.#]?[_a-z0-9].*$",
+	 /* -- */
+	 /*
+	  * This regex comes from W3C CSS specs. Should theoretically also
+	  * allow ISO 10646 characters U+00A0 and higher,
+	  * but they are not handled in this regex.
+	  */
+	 "-?[_a-zA-Z][-_a-zA-Z0-9]*" /* identifiers */
+	 "|-?[0-9]+|\\#[0-9a-fA-F]+" /* numbers */
+),
 PATTERNS("dts",
 	 "!;\n"
 	 "!=\n"
@@ -83,7 +123,9 @@
 	  * they would have been matched above as a variable anyway. */
 	 "|[-+]?[0-9.]+([AaIiDdEeFfLlTtXx][Ss]?[-+]?[0-9.]*)?(_[a-zA-Z0-9][a-zA-Z0-9_]*)?"
 	 "|//|\\*\\*|::|[/<>=]="),
-IPATTERN("fountain", "^((\\.[^.]|(int|ext|est|int\\.?/ext|i/e)[. ]).*)$",
+IPATTERN("fountain",
+	 "^((\\.[^.]|(int|ext|est|int\\.?/ext|i/e)[. ]).*)$",
+	 /* -- */
 	 "[^ \t-]+"),
 PATTERNS("golang",
 	 /* Functions */
@@ -94,7 +136,9 @@
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.eE]+i?|0[xX]?[0-9a-fA-F]+i?"
 	 "|[-+*/<>%&^|=!:]=|--|\\+\\+|<<=?|>>=?|&\\^=?|&&|\\|\\||<-|\\.{3}"),
-PATTERNS("html", "^[ \t]*(<[Hh][1-6]([ \t].*)?>.*)$",
+PATTERNS("html",
+	 "^[ \t]*(<[Hh][1-6]([ \t].*)?>.*)$",
+	 /* -- */
 	 "[^<>= \t]+"),
 PATTERNS("java",
 	 "!^[ \t]*(catch|do|for|if|instanceof|new|return|switch|throw|while)\n"
@@ -106,6 +150,7 @@
 	 "|--|\\+\\+|<<=?|>>>?=?|&&|\\|\\|"),
 PATTERNS("markdown",
 	 "^ {0,3}#{1,6}[ \t].*",
+	 /* -- */
 	 "[^<>= \t]+"),
 PATTERNS("matlab",
 	 /*
@@ -114,6 +159,7 @@
 	  * that is understood by both.
 	  */
 	 "^[[:space:]]*((classdef|function)[[:space:]].*)$|^(%%%?|##)[[:space:]].*$",
+	 /* -- */
 	 "[a-zA-Z_][a-zA-Z0-9_]*|[-+0-9.e]+|[=~<>]=|\\.[*/\\^']|\\|\\||&&"),
 PATTERNS("objc",
 	 /* Negate C statements that can look like functions */
@@ -129,9 +175,8 @@
 	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
 	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
 PATTERNS("pascal",
-	 "^(((class[ \t]+)?(procedure|function)|constructor|destructor|interface|"
-		"implementation|initialization|finalization)[ \t]*.*)$"
-	 "\n"
+	 "^(((class[ \t]+)?(procedure|function)|constructor|destructor|interface"
+	 "|implementation|initialization|finalization)[ \t]*.*)$\n"
 	 "^(.*=[ \t]*(class|record).*)$",
 	 /* -- */
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
@@ -174,13 +219,15 @@
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.e]+|0[xXbB]?[0-9a-fA-F]+"
 	 "|[-+*/<>%&^|=!.]=|--|\\+\\+|<<=?|>>=?|===|&&|\\|\\||::|->"),
-PATTERNS("python", "^[ \t]*((class|(async[ \t]+)?def)[ \t].*)$",
+PATTERNS("python",
+	 "^[ \t]*((class|(async[ \t]+)?def)[ \t].*)$",
 	 /* -- */
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.e]+[jJlL]?|0[xX]?[0-9a-fA-F]+[lL]?"
 	 "|[-+*/<>%&^|=!]=|//=?|<<=?|>>=?|\\*\\*=?"),
 	 /* -- */
-PATTERNS("ruby", "^[ \t]*((class|module|def)[ \t].*)$",
+PATTERNS("ruby",
+	 "^[ \t]*((class|module|def)[ \t].*)$",
 	 /* -- */
 	 "(@|@@|\\$)?[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[-+0-9.e]+|0[xXbB]?[0-9a-fA-F]+|\\?(\\\\C-)?(\\\\M-)?."
@@ -191,46 +238,17 @@
 	 "[a-zA-Z_][a-zA-Z0-9_]*"
 	 "|[0-9][0-9_a-fA-Fiosuxz]*(\\.([0-9]*[eE][+-]?)?[0-9_fF]*)?"
 	 "|[-+*\\/<>%&^|=!:]=|<<=?|>>=?|&&|\\|\\||->|=>|\\.{2}=|\\.{3}|::"),
-PATTERNS("bibtex", "(@[a-zA-Z]{1,}[ \t]*\\{{0,1}[ \t]*[^ \t\"@',\\#}{~%]*).*$",
-	 "[={}\"]|[^={}\" \t]+"),
+PATTERNS("scheme",
+	 "^[\t ]*(\\(((define|def(struct|syntax|class|method|rules|record|proto|alias)?)[-*/ \t]|(library|module|struct|class)[*+ \t]).*)$",
+	 /*
+	  * R7RS valid identifiers include any sequence enclosed
+	  * within vertical lines having no backslashes
+	  */
+	 "\\|([^\\\\]*)\\|"
+	 /* All other words should be delimited by spaces or parentheses */
+	 "|([^][)(}{[ \t])+"),
 PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$",
 	 "\\\\[a-zA-Z@]+|\\\\.|[a-zA-Z0-9\x80-\xff]+"),
-PATTERNS("cpp",
-	 /* Jump targets or access declarations */
-	 "!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:[[:space:]]*($|/[/*])\n"
-	 /* functions/methods, variables, and compounds at top level */
-	 "^((::[[:space:]]*)?[A-Za-z_].*)$",
-	 /* -- */
-	 "[a-zA-Z_][a-zA-Z0-9_]*"
-	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lLuU]*"
-	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->\\*?|\\.\\*"),
-PATTERNS("csharp",
-	 /* Keywords */
-	 "!^[ \t]*(do|while|for|if|else|instanceof|new|return|switch|case|throw|catch|using)\n"
-	 /* Methods and constructors */
-	 "^[ \t]*(((static|public|internal|private|protected|new|virtual|sealed|override|unsafe|async)[ \t]+)*[][<>@.~_[:alnum:]]+[ \t]+[<>@._[:alnum:]]+[ \t]*\\(.*\\))[ \t]*$\n"
-	 /* Properties */
-	 "^[ \t]*(((static|public|internal|private|protected|new|virtual|sealed|override|unsafe)[ \t]+)*[][<>@.~_[:alnum:]]+[ \t]+[@._[:alnum:]]+)[ \t]*$\n"
-	 /* Type definitions */
-	 "^[ \t]*(((static|public|internal|private|protected|new|unsafe|sealed|abstract|partial)[ \t]+)*(class|enum|interface|struct)[ \t]+.*)$\n"
-	 /* Namespace */
-	 "^[ \t]*(namespace[ \t]+.*)$",
-	 /* -- */
-	 "[a-zA-Z_][a-zA-Z0-9_]*"
-	 "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
-	 "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
-IPATTERN("css",
-	 "![:;][[:space:]]*$\n"
-	 "^[:[@.#]?[_a-z0-9].*$",
-	 /* -- */
-	 /*
-	  * This regex comes from W3C CSS specs. Should theoretically also
-	  * allow ISO 10646 characters U+00A0 and higher,
-	  * but they are not handled in this regex.
-	  */
-	 "-?[_a-zA-Z][-_a-zA-Z0-9]*" /* identifiers */
-	 "|-?[0-9]+|\\#[0-9a-fA-F]+" /* numbers */
-),
 { "default", NULL, -1, { NULL, 0 } },
 };
 #undef PATTERNS
@@ -250,20 +268,33 @@
 	{ NULL, 0 }
 };
 
-static struct userdiff_driver *userdiff_find_by_namelen(const char *k, size_t len)
+struct find_by_namelen_data {
+	const char *name;
+	size_t len;
+	struct userdiff_driver *driver;
+};
+
+static int userdiff_find_by_namelen_cb(struct userdiff_driver *driver,
+				       enum userdiff_driver_type type, void *priv)
 {
-	int i;
-	for (i = 0; i < ndrivers; i++) {
-		struct userdiff_driver *drv = drivers + i;
-		if (!strncmp(drv->name, k, len) && !drv->name[len])
-			return drv;
+	struct find_by_namelen_data *cb_data = priv;
+
+	if (!strncmp(driver->name, cb_data->name, cb_data->len) &&
+	    !driver->name[cb_data->len]) {
+		cb_data->driver = driver;
+		return 1; /* tell the caller to stop iterating */
 	}
-	for (i = 0; i < ARRAY_SIZE(builtin_drivers); i++) {
-		struct userdiff_driver *drv = builtin_drivers + i;
-		if (!strncmp(drv->name, k, len) && !drv->name[len])
-			return drv;
-	}
-	return NULL;
+	return 0;
+}
+
+static struct userdiff_driver *userdiff_find_by_namelen(const char *name, size_t len)
+{
+	struct find_by_namelen_data udcbdata = {
+		.name = name,
+		.len = len,
+	};
+	for_each_userdiff_driver(userdiff_find_by_namelen_cb, &udcbdata);
+	return udcbdata.driver;
 }
 
 static int parse_funcname(struct userdiff_funcname *f, const char *k,
@@ -370,3 +401,36 @@
 
 	return driver;
 }
+
+static int for_each_userdiff_driver_list(each_userdiff_driver_fn fn,
+					 enum userdiff_driver_type type, void *cb_data,
+					 struct userdiff_driver *drv,
+					 int drv_size)
+{
+	int i;
+	int ret;
+	for (i = 0; i < drv_size; i++) {
+		struct userdiff_driver *item = drv + i;
+		if ((ret = fn(item, type, cb_data)))
+			return ret;
+	}
+	return 0;
+}
+
+int for_each_userdiff_driver(each_userdiff_driver_fn fn, void *cb_data)
+{
+	int ret;
+
+	ret = for_each_userdiff_driver_list(fn, USERDIFF_DRIVER_TYPE_CUSTOM,
+					    cb_data, drivers, ndrivers);
+	if (ret)
+		return ret;
+
+	ret = for_each_userdiff_driver_list(fn, USERDIFF_DRIVER_TYPE_BUILTIN,
+					    cb_data, builtin_drivers,
+					    ARRAY_SIZE(builtin_drivers));
+	if (ret)
+		return ret;
+
+	return 0;
+}
diff --git a/userdiff.h b/userdiff.h
index 203057e..aee91bc 100644
--- a/userdiff.h
+++ b/userdiff.h
@@ -21,6 +21,12 @@
 	struct notes_cache *textconv_cache;
 	int textconv_want_cache;
 };
+enum userdiff_driver_type {
+	USERDIFF_DRIVER_TYPE_BUILTIN = 1<<0,
+	USERDIFF_DRIVER_TYPE_CUSTOM = 1<<1,
+};
+typedef int (*each_userdiff_driver_fn)(struct userdiff_driver *,
+				       enum userdiff_driver_type, void *);
 
 int userdiff_config(const char *k, const char *v);
 struct userdiff_driver *userdiff_find_by_name(const char *name);
@@ -34,4 +40,11 @@
 struct userdiff_driver *userdiff_get_textconv(struct repository *r,
 					      struct userdiff_driver *driver);
 
+/*
+ * Iterate over all userdiff drivers. The userdiff_driver_type
+ * argument to each_userdiff_driver_fn indicates their type. Return
+ * non-zero to exit early from the loop.
+ */
+int for_each_userdiff_driver(each_userdiff_driver_fn, void *);
+
 #endif /* USERDIFF */
diff --git a/utf8.c b/utf8.c
index 5b39361..de4ce5c 100644
--- a/utf8.c
+++ b/utf8.c
@@ -777,6 +777,11 @@
 	return is_hfs_dot_str(path, "gitattributes");
 }
 
+int is_hfs_dotmailmap(const char *path)
+{
+	return is_hfs_dot_str(path, "mailmap");
+}
+
 const char utf8_bom[] = "\357\273\277";
 
 int skip_utf8_bom(char **text, size_t len)
diff --git a/utf8.h b/utf8.h
index fcd5167..9a16c86 100644
--- a/utf8.h
+++ b/utf8.h
@@ -61,6 +61,7 @@
 int is_hfs_dotgitmodules(const char *path);
 int is_hfs_dotgitignore(const char *path);
 int is_hfs_dotgitattributes(const char *path);
+int is_hfs_dotmailmap(const char *path);
 
 typedef enum {
 	ALIGN_LEFT,
diff --git a/vcs-svn/fast_export.h b/vcs-svn/fast_export.h
deleted file mode 100644
index 9dcf933..0000000
--- a/vcs-svn/fast_export.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef FAST_EXPORT_H
-#define FAST_EXPORT_H
-
-struct strbuf;
-struct line_buffer;
-
-void fast_export_init(int fd);
-void fast_export_deinit(void);
-
-void fast_export_delete(const char *path);
-void fast_export_modify(const char *path, uint32_t mode, const char *dataref);
-void fast_export_note(const char *committish, const char *dataref);
-void fast_export_begin_note(uint32_t revision, const char *author,
-		const char *log, timestamp_t timestamp, const char *note_ref);
-void fast_export_begin_commit(uint32_t revision, const char *author,
-			const struct strbuf *log, const char *uuid,const char *url,
-			timestamp_t timestamp, const char *local_ref);
-void fast_export_end_commit(uint32_t revision);
-void fast_export_data(uint32_t mode, off_t len, struct line_buffer *input);
-void fast_export_buf_to_data(const struct strbuf *data);
-void fast_export_blob_delta(uint32_t mode,
-			uint32_t old_mode, const char *old_data,
-			off_t len, struct line_buffer *input);
-
-/* If there is no such file at that rev, returns -1, errno == ENOENT. */
-int fast_export_ls_rev(uint32_t rev, const char *path,
-			uint32_t *mode_out, struct strbuf *dataref_out);
-int fast_export_ls(const char *path,
-			uint32_t *mode_out, struct strbuf *dataref_out);
-
-void fast_export_copy(uint32_t revision, const char *src, const char *dst);
-const char *fast_export_read_path(const char *path, uint32_t *mode_out);
-
-#endif
diff --git a/vcs-svn/line_buffer.h b/vcs-svn/line_buffer.h
deleted file mode 100644
index e192aed..0000000
--- a/vcs-svn/line_buffer.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef LINE_BUFFER_H
-#define LINE_BUFFER_H
-
-#include "strbuf.h"
-
-#define LINE_BUFFER_LEN 10000
-
-struct line_buffer {
-	char line_buffer[LINE_BUFFER_LEN];
-	FILE *infile;
-};
-#define LINE_BUFFER_INIT { "", NULL }
-
-int buffer_init(struct line_buffer *buf, const char *filename);
-int buffer_fdinit(struct line_buffer *buf, int fd);
-int buffer_deinit(struct line_buffer *buf);
-
-int buffer_tmpfile_init(struct line_buffer *buf);
-FILE *buffer_tmpfile_rewind(struct line_buffer *buf);	/* prepare to write. */
-long buffer_tmpfile_prepare_to_read(struct line_buffer *buf);
-
-int buffer_ferror(struct line_buffer *buf);
-char *buffer_read_line(struct line_buffer *buf);
-int buffer_read_char(struct line_buffer *buf);
-size_t buffer_read_binary(struct line_buffer *buf, struct strbuf *sb, size_t len);
-/* Returns number of bytes read (not necessarily written). */
-off_t buffer_copy_bytes(struct line_buffer *buf, off_t len);
-off_t buffer_skip_bytes(struct line_buffer *buf, off_t len);
-
-#endif
diff --git a/vcs-svn/sliding_window.h b/vcs-svn/sliding_window.h
deleted file mode 100644
index a7fc099..0000000
--- a/vcs-svn/sliding_window.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef SLIDING_WINDOW_H
-#define SLIDING_WINDOW_H
-
-#include "strbuf.h"
-
-struct sliding_view {
-	struct line_buffer *file;
-	off_t off;
-	size_t width;
-	off_t max_off;	/* -1 means unlimited */
-	struct strbuf buf;
-};
-
-#define SLIDING_VIEW_INIT(input, len)	{ (input), 0, 0, (len), STRBUF_INIT }
-
-int move_window(struct sliding_view *view, off_t off, size_t width);
-
-#endif
diff --git a/vcs-svn/svndiff.h b/vcs-svn/svndiff.h
deleted file mode 100644
index 625d950..0000000
--- a/vcs-svn/svndiff.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef SVNDIFF_H
-#define SVNDIFF_H
-
-struct line_buffer;
-struct sliding_view;
-
-int svndiff0_apply(struct line_buffer *delta, off_t delta_len,
-		   struct sliding_view *preimage, FILE *postimage);
-
-#endif
diff --git a/vcs-svn/svndump.h b/vcs-svn/svndump.h
deleted file mode 100644
index 26faed5..0000000
--- a/vcs-svn/svndump.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef SVNDUMP_H
-#define SVNDUMP_H
-
-int svndump_init(const char *filename);
-int svndump_init_fd(int in_fd, int back_fd);
-void svndump_read(const char *url, const char *local_ref, const char *notes_ref);
-void svndump_deinit(void);
-void svndump_reset(void);
-
-#endif
diff --git a/walker.c b/walker.c
index 4984bf8..c5e2921 100644
--- a/walker.c
+++ b/walker.c
@@ -298,7 +298,7 @@
 			error("Could not interpret response from server '%s' as something to pull", target[i]);
 			goto done;
 		}
-		if (process(walker, lookup_unknown_object(&oids[i])))
+		if (process(walker, lookup_unknown_object(the_repository, &oids[i])))
 			goto done;
 	}
 
diff --git a/worktree.c b/worktree.c
index e008585..092a4f9 100644
--- a/worktree.c
+++ b/worktree.c
@@ -53,7 +53,7 @@
 	strbuf_add_real_path(&worktree_path, get_git_common_dir());
 	strbuf_strip_suffix(&worktree_path, "/.git");
 
-	worktree = xcalloc(1, sizeof(*worktree));
+	CALLOC_ARRAY(worktree, 1);
 	worktree->path = strbuf_detach(&worktree_path, NULL);
 	/*
 	 * NEEDSWORK: If this function is called from a secondary worktree and
@@ -84,7 +84,7 @@
 	strbuf_rtrim(&worktree_path);
 	strbuf_strip_suffix(&worktree_path, "/.git");
 
-	worktree = xcalloc(1, sizeof(*worktree));
+	CALLOC_ARRAY(worktree, 1);
 	worktree->path = strbuf_detach(&worktree_path, NULL);
 	worktree->id = xstrdup(id);
 	add_head_info(worktree);
@@ -128,10 +128,8 @@
 	dir = opendir(path.buf);
 	strbuf_release(&path);
 	if (dir) {
-		while ((d = readdir(dir)) != NULL) {
+		while ((d = readdir_skip_dot_and_dotdot(dir)) != NULL) {
 			struct worktree *linked = NULL;
-			if (is_dot_or_dotdot(d->d_name))
-				continue;
 
 			if ((linked = get_linked_worktree(d->d_name))) {
 				ALLOC_GROW(list, counter + 1, alloc);
@@ -267,6 +265,7 @@
 }
 
 /* convenient wrapper to deal with NULL strbuf */
+__attribute__((format (printf, 2, 3)))
 static void strbuf_addf_gently(struct strbuf *buf, const char *fmt, ...)
 {
 	va_list params;
@@ -486,13 +485,9 @@
 	if (!dir)
 		return 0;
 
-	while ((d = readdir(dir)) != NULL) {
-		if (is_dot_or_dotdot(d->d_name))
-			continue;
-
+	d = readdir_skip_dot_and_dotdot(dir);
+	if (d != NULL)
 		ret = 1;
-		break;
-	}
 	closedir(dir);
 	return ret;
 }
diff --git a/wrapper.c b/wrapper.c
index bcda41e..563ad59 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -678,3 +678,19 @@
 
 	return !st.st_size;
 }
+
+int open_nofollow(const char *path, int flags)
+{
+#ifdef O_NOFOLLOW
+	return open(path, flags | O_NOFOLLOW);
+#else
+	struct stat st;
+	if (lstat(path, &st) < 0)
+		return -1;
+	if (S_ISLNK(st.st_mode)) {
+		errno = ELOOP;
+		return -1;
+	}
+	return open(path, flags);
+#endif
+}
diff --git a/write-or-die.c b/write-or-die.c
index eab8c8d..d33e68f 100644
--- a/write-or-die.c
+++ b/write-or-die.c
@@ -57,8 +57,9 @@
 
 void fsync_or_die(int fd, const char *msg)
 {
-	if (fsync(fd) < 0) {
-		die_errno("fsync error on '%s'", msg);
+	while (fsync(fd) < 0) {
+		if (errno != EINTR)
+			die_errno("fsync error on '%s'", msg);
 	}
 }
 
diff --git a/wt-status.c b/wt-status.c
index 0c8287a..eaed30e 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -456,7 +456,7 @@
 		it = string_list_insert(&s->change, p->two->path);
 		d = it->util;
 		if (!d) {
-			d = xcalloc(1, sizeof(*d));
+			CALLOC_ARRAY(d, 1);
 			it->util = d;
 		}
 		if (!d->worktree_status)
@@ -540,7 +540,7 @@
 		it = string_list_insert(&s->change, p->two->path);
 		d = it->util;
 		if (!d) {
-			d = xcalloc(1, sizeof(*d));
+			CALLOC_ARRAY(d, 1);
 			it->util = d;
 		}
 		if (!d->index_status)
@@ -616,6 +616,7 @@
 	rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score;
 	copy_pathspec(&rev.prune_data, &s->pathspec);
 	run_diff_files(&rev, 0);
+	clear_pathspec(&rev.prune_data);
 }
 
 static void wt_status_collect_changes_index(struct wt_status *s)
@@ -638,7 +639,7 @@
 		 * mode by passing a command line option we do not ignore any
 		 * changed submodule SHA-1s when comparing index and HEAD, no
 		 * matter what is configured. Otherwise the user won't be
-		 * shown any submodules she manually added (and which are
+		 * shown any submodules manually added (and which are
 		 * staged to be committed), which would be really confusing.
 		 */
 		handle_ignore_submodules_arg(&rev.diffopt, "dirty");
@@ -652,6 +653,38 @@
 	rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score;
 	copy_pathspec(&rev.prune_data, &s->pathspec);
 	run_diff_index(&rev, 1);
+	object_array_clear(&rev.pending);
+	clear_pathspec(&rev.prune_data);
+}
+
+static int add_file_to_list(const struct object_id *oid,
+			    struct strbuf *base, const char *path,
+			    unsigned int mode, void *context)
+{
+	struct string_list_item *it;
+	struct wt_status_change_data *d;
+	struct wt_status *s = context;
+	struct strbuf full_name = STRBUF_INIT;
+
+	if (S_ISDIR(mode))
+		return READ_TREE_RECURSIVE;
+
+	strbuf_add(&full_name, base->buf, base->len);
+	strbuf_addstr(&full_name, path);
+	it = string_list_insert(&s->change, full_name.buf);
+	d = it->util;
+	if (!d) {
+		CALLOC_ARRAY(d, 1);
+		it->util = d;
+	}
+
+	d->index_status = DIFF_STATUS_ADDED;
+	/* Leave {mode,oid}_head zero for adds. */
+	d->mode_index = mode;
+	oidcpy(&d->oid_index, oid);
+	s->committable = 1;
+	strbuf_release(&full_name);
+	return 0;
 }
 
 static void wt_status_collect_changes_initial(struct wt_status *s)
@@ -668,10 +701,31 @@
 			continue;
 		if (ce_intent_to_add(ce))
 			continue;
+		if (S_ISSPARSEDIR(ce->ce_mode)) {
+			/*
+			 * This is a sparse directory entry, so we want to collect all
+			 * of the added files within the tree. This requires recursively
+			 * expanding the trees to find the elements that are new in this
+			 * tree and marking them with DIFF_STATUS_ADDED.
+			 */
+			struct strbuf base = STRBUF_INIT;
+			struct pathspec ps = { 0 };
+			struct tree *tree = lookup_tree(istate->repo, &ce->oid);
+
+			ps.recursive = 1;
+			ps.has_wildcard = 1;
+			ps.max_depth = -1;
+
+			strbuf_add(&base, ce->name, ce->ce_namelen);
+			read_tree_at(istate->repo, tree, &base, &ps,
+				     add_file_to_list, s);
+			continue;
+		}
+
 		it = string_list_insert(&s->change, ce->name);
 		d = it->util;
 		if (!d) {
-			d = xcalloc(1, sizeof(*d));
+			CALLOC_ARRAY(d, 1);
 			it->util = d;
 		}
 		if (ce_stage(ce)) {
@@ -696,14 +750,13 @@
 static void wt_status_collect_untracked(struct wt_status *s)
 {
 	int i;
-	struct dir_struct dir;
+	struct dir_struct dir = DIR_INIT;
 	uint64_t t_begin = getnanotime();
 	struct index_state *istate = s->repo->index;
 
 	if (!s->show_untracked_files)
 		return;
 
-	dir_init(&dir);
 	if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
 		dir.flags |=
 			DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
@@ -1490,9 +1543,12 @@
 	if (s->state.sparse_checkout_percentage == SPARSE_CHECKOUT_DISABLED)
 		return;
 
-	status_printf_ln(s, color,
-			 _("You are in a sparse checkout with %d%% of tracked files present."),
-			 s->state.sparse_checkout_percentage);
+	if (s->state.sparse_checkout_percentage == SPARSE_CHECKOUT_SPARSE_INDEX)
+		status_printf_ln(s, color, _("You are in a sparse checkout."));
+	else
+		status_printf_ln(s, color,
+				_("You are in a sparse checkout with %d%% of tracked files present."),
+				s->state.sparse_checkout_percentage);
 	wt_longstatus_print_trailer(s);
 }
 
@@ -1650,6 +1706,11 @@
 		return;
 	}
 
+	if (r->index->sparse_index) {
+		state->sparse_checkout_percentage = SPARSE_CHECKOUT_SPARSE_INDEX;
+		return;
+	}
+
 	for (i = 0; i < r->index->cache_nr; i++) {
 		struct cache_entry *ce = r->index->cache[i];
 		if (ce_skip_worktree(ce))
@@ -1687,10 +1748,10 @@
 	if (!sequencer_get_last_command(r, &action)) {
 		if (action == REPLAY_PICK) {
 			state->cherry_pick_in_progress = 1;
-			oidcpy(&state->cherry_pick_head_oid, &null_oid);
+			oidcpy(&state->cherry_pick_head_oid, null_oid());
 		} else {
 			state->revert_in_progress = 1;
-			oidcpy(&state->revert_head_oid, &null_oid);
+			oidcpy(&state->revert_head_oid, null_oid());
 		}
 	}
 	if (get_detached_from)
@@ -2480,6 +2541,7 @@
 
 	diff_setup_done(&rev_info.diffopt);
 	result = run_diff_index(&rev_info, 1);
+	object_array_clear(&rev_info.pending);
 	return diff_result_code(&rev_info.diffopt, result);
 }
 
diff --git a/wt-status.h b/wt-status.h
index 0d32799b..ab9cc9d 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -78,6 +78,7 @@
 };
 
 #define SPARSE_CHECKOUT_DISABLED -1
+#define SPARSE_CHECKOUT_SPARSE_INDEX -2
 
 struct wt_status_state {
 	int merge_in_progress;
diff --git a/xdiff-interface.c b/xdiff-interface.c
index 4d20069..75b32ae 100644
--- a/xdiff-interface.c
+++ b/xdiff-interface.c
@@ -31,29 +31,36 @@
 	return 0;
 }
 
-static void consume_one(void *priv_, char *s, unsigned long size)
+static int consume_one(void *priv_, char *s, unsigned long size)
 {
 	struct xdiff_emit_state *priv = priv_;
 	char *ep;
 	while (size) {
 		unsigned long this_size;
+		int ret;
 		ep = memchr(s, '\n', size);
 		this_size = (ep == NULL) ? size : (ep - s + 1);
-		priv->line_fn(priv->consume_callback_data, s, this_size);
+		ret = priv->line_fn(priv->consume_callback_data, s, this_size);
+		if (ret)
+			return ret;
 		size -= this_size;
 		s += this_size;
 	}
+	return 0;
 }
 
 static int xdiff_outf(void *priv_, mmbuffer_t *mb, int nbuf)
 {
 	struct xdiff_emit_state *priv = priv_;
 	int i;
+	int stop = 0;
 
 	if (!priv->line_fn)
 		return 0;
 
 	for (i = 0; i < nbuf; i++) {
+		if (stop)
+			return 1;
 		if (mb[i].ptr[mb[i].size-1] != '\n') {
 			/* Incomplete line */
 			strbuf_add(&priv->remainder, mb[i].ptr, mb[i].size);
@@ -62,17 +69,21 @@
 
 		/* we have a complete line */
 		if (!priv->remainder.len) {
-			consume_one(priv, mb[i].ptr, mb[i].size);
+			stop = consume_one(priv, mb[i].ptr, mb[i].size);
 			continue;
 		}
 		strbuf_add(&priv->remainder, mb[i].ptr, mb[i].size);
-		consume_one(priv, priv->remainder.buf, priv->remainder.len);
+		stop = consume_one(priv, priv->remainder.buf, priv->remainder.len);
 		strbuf_reset(&priv->remainder);
 	}
+	if (stop)
+		return -1;
 	if (priv->remainder.len) {
-		consume_one(priv, priv->remainder.buf, priv->remainder.len);
+		stop = consume_one(priv, priv->remainder.buf, priv->remainder.len);
 		strbuf_reset(&priv->remainder);
 	}
+	if (stop)
+		return -1;
 	return 0;
 }
 
@@ -115,12 +126,6 @@
 	return xdl_diff(&a, &b, xpp, xecfg, xecb);
 }
 
-void discard_hunk_line(void *priv,
-		       long ob, long on, long nb, long nn,
-		       const char *func, long funclen)
-{
-}
-
 int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2,
 		  xdiff_emit_hunk_fn hunk_fn,
 		  xdiff_emit_line_fn line_fn,
@@ -172,7 +177,7 @@
 	unsigned long size;
 	enum object_type type;
 
-	if (oideq(oid, &null_oid)) {
+	if (oideq(oid, null_oid())) {
 		ptr->ptr = xstrdup("");
 		ptr->size = 0;
 		return;
diff --git a/xdiff-interface.h b/xdiff-interface.h
index 93df269..4301a7e 100644
--- a/xdiff-interface.h
+++ b/xdiff-interface.h
@@ -11,7 +11,28 @@
  */
 #define MAX_XDIFF_SIZE (1024UL * 1024 * 1023)
 
-typedef void (*xdiff_emit_line_fn)(void *, char *, unsigned long);
+/**
+ * The `xdiff_emit_line_fn` function can return 1 to abort early, or 0
+ * to continue processing. Note that doing so is an all-or-nothing
+ * affair, as returning 1 will return all the way to the top-level,
+ * e.g. the xdi_diff_outf() call to generate the diff.
+ *
+ * Thus returning 1 means you won't be getting any more diff lines. If
+ * you need something in-between those two options you'll to use
+ * `xdl_emit_hunk_consume_func_t` and implement your own version of
+ * xdl_emit_diff().
+ *
+ * We may extend the interface in the future to understand other more
+ * granular return values. While you should return 1 to exit early,
+ * doing so will currently make your early return indistinguishable
+ * from an error internal to xdiff, xdiff itself will see that
+ * non-zero return and translate it to -1.
+ *
+ * See "diff_grep" in diffcore-pickaxe.c for a trick to work around
+ * this, i.e. using the "consume_callback_data" to note the desired
+ * early return.
+ */
+typedef int (*xdiff_emit_line_fn)(void *, char *, unsigned long);
 typedef void (*xdiff_emit_hunk_fn)(void *data,
 				   long old_begin, long old_nr,
 				   long new_begin, long new_nr,
@@ -33,14 +54,6 @@
 extern int git_xmerge_style;
 
 /*
- * Can be used as a no-op hunk_fn for xdi_diff_outf(), since a NULL
- * one just sends the hunk line to the line_fn callback).
- */
-void discard_hunk_line(void *priv,
-		       long ob, long on, long nb, long nn,
-		       const char *func, long funclen);
-
-/*
  * Compare the strings l1 with l2 which are of size s1 and s2 respectively.
  * Returns 1 if the strings are deemed equal, 0 otherwise.
  * The `flags` given as XDF_WHITESPACE_FLAGS determine how white spaces
diff --git a/xdiff/xdiff.h b/xdiff/xdiff.h
index 7a04605..b29deca 100644
--- a/xdiff/xdiff.h
+++ b/xdiff/xdiff.h
@@ -50,6 +50,7 @@
 
 /* xdemitconf_t.flags */
 #define XDL_EMIT_FUNCNAMES (1 << 0)
+#define XDL_EMIT_NO_HUNK_HDR (1 << 1)
 #define XDL_EMIT_FUNCCONTEXT (1 << 2)
 
 /* merge simplification levels */
diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c
index 380eb72..a4542c0 100644
--- a/xdiff/xdiffi.c
+++ b/xdiff/xdiffi.c
@@ -796,12 +796,6 @@
 	}
 }
 
-static void xdl_bug(const char *msg)
-{
-	fprintf(stderr, "BUG: %s\n", msg);
-	exit(1);
-}
-
 /*
  * Move back and forward change groups for a consistent and pretty diff output.
  * This also helps in finding joinable change groups and reducing the diff
@@ -841,7 +835,7 @@
 			/* Shift the group backward as much as possible: */
 			while (!group_slide_up(xdf, &g, flags))
 				if (group_previous(xdfo, &go))
-					xdl_bug("group sync broken sliding up");
+					BUG("group sync broken sliding up");
 
 			/*
 			 * This is this highest that this group can be shifted.
@@ -857,7 +851,7 @@
 				if (group_slide_down(xdf, &g, flags))
 					break;
 				if (group_next(xdfo, &go))
-					xdl_bug("group sync broken sliding down");
+					BUG("group sync broken sliding down");
 
 				if (go.end > go.start)
 					end_matching_other = g.end;
@@ -882,9 +876,9 @@
 			 */
 			while (go.end == go.start) {
 				if (group_slide_up(xdf, &g, flags))
-					xdl_bug("match disappeared");
+					BUG("match disappeared");
 				if (group_previous(xdfo, &go))
-					xdl_bug("group sync broken sliding to match");
+					BUG("group sync broken sliding to match");
 			}
 		} else if (flags & XDF_INDENT_HEURISTIC) {
 			/*
@@ -925,9 +919,9 @@
 
 			while (g.end > best_shift) {
 				if (group_slide_up(xdf, &g, flags))
-					xdl_bug("best shift unreached");
+					BUG("best shift unreached");
 				if (group_previous(xdfo, &go))
-					xdl_bug("group sync broken sliding to blank line");
+					BUG("group sync broken sliding to blank line");
 			}
 		}
 
@@ -936,11 +930,11 @@
 		if (group_next(xdf, &g))
 			break;
 		if (group_next(xdfo, &go))
-			xdl_bug("group sync broken moving to next group");
+			BUG("group sync broken moving to next group");
 	}
 
 	if (!group_next(xdfo, &go))
-		xdl_bug("group sync broken at end of file");
+		BUG("group sync broken at end of file");
 
 	return 0;
 }
diff --git a/xdiff/xemit.c b/xdiff/xemit.c
index 9d7d6c5..1cbf2b9 100644
--- a/xdiff/xemit.c
+++ b/xdiff/xemit.c
@@ -278,7 +278,8 @@
 				      s1 - 1, funclineprev);
 			funclineprev = s1 - 1;
 		}
-		if (xdl_emit_hunk_hdr(s1 + 1, e1 - s1, s2 + 1, e2 - s2,
+		if (!(xecfg->flags & XDL_EMIT_NO_HUNK_HDR) &&
+		    xdl_emit_hunk_hdr(s1 + 1, e1 - s1, s2 + 1, e2 - s2,
 				      func_line.buf, func_line.len, ecb) < 0)
 			return -1;
 
diff --git a/xdiff/xpatience.c b/xdiff/xpatience.c
index 20699a6..c5d48e8 100644
--- a/xdiff/xpatience.c
+++ b/xdiff/xpatience.c
@@ -90,7 +90,7 @@
 {
 	xrecord_t **records = pass == 1 ?
 		map->env->xdf1.recs : map->env->xdf2.recs;
-	xrecord_t *record = records[line - 1], *other;
+	xrecord_t *record = records[line - 1];
 	/*
 	 * After xdl_prepare_env() (or more precisely, due to
 	 * xdl_classify_record()), the "ha" member of the records (AKA lines)
@@ -104,11 +104,7 @@
 	int index = (int)((record->ha << 1) % map->alloc);
 
 	while (map->entries[index].line1) {
-		other = map->env->xdf1.recs[map->entries[index].line1 - 1];
-		if (map->entries[index].hash != record->ha ||
-				!xdl_recmatch(record->ptr, record->size,
-					other->ptr, other->size,
-					map->xpp->flags)) {
+		if (map->entries[index].hash != record->ha) {
 			if (++index >= map->alloc)
 				index = 0;
 			continue;
@@ -253,8 +249,7 @@
 {
 	xrecord_t *record1 = map->env->xdf1.recs[line1 - 1];
 	xrecord_t *record2 = map->env->xdf2.recs[line2 - 1];
-	return xdl_recmatch(record1->ptr, record1->size,
-		record2->ptr, record2->size, map->xpp->flags);
+	return record1->ha == record2->ha;
 }
 
 static int patience_diff(mmfile_t *file1, mmfile_t *file2,
@@ -289,9 +284,6 @@
 
 		/* Recurse */
 		if (next1 > line1 || next2 > line2) {
-			struct hashmap submap;
-
-			memset(&submap, 0, sizeof(submap));
 			if (patience_diff(map->file1, map->file2,
 					map->xpp, map->env,
 					line1, next1 - line1,